From 1f3fa50df46bb40c78a6b6abd83fa4ceac5317d7 Mon Sep 17 00:00:00 2001 From: Daniel Vigovszky Date: Thu, 27 Aug 2026 13:11:09 +0200 Subject: [PATCH 1/3] MoonBit tool middleware definition support --- .github/workflows/publish-golem-moonbit.yaml | 8 +- cli/golem-cli/src/model/app.rs | 12 +- cli/golem-cli/src/model/language.rs | 34 + .../moonbit/common-on-demand/golem.yaml | 70 +- .../combined/main.mbt | 42 + .../combined/moon.pkg | 8 + .../moonbit-tool-middleware-roles/golem.yaml | 22 + .../middleware/main.mbt | 20 + .../middleware/moon.pkg | 7 + .../moon.mod.json | 6 + .../ordinary/main.mbt | 26 + .../ordinary/moon.pkg | 7 + cli/golem-cli/tests/app/mod.rs | 1 + .../tests/app/moonbit_tool_middleware.rs | 225 + sdks/moonbit/golem_sdk/README.mbt.md | 166 +- .../gen-agent-tool-middleware/ffi.mbt | 209 + .../interface/golem/agent/guest/ffi.mbt | 13522 ++++++++++ .../interface/golem/agent/guest/moon.pkg | 9 + .../golem/agent/guest/pkg.generated.mbti | 25 + .../interface/golem/agent/guest/top.mbt | 39 + .../golem/api/load-snapshot/README.md | 2 + .../interface/golem/api/load-snapshot/ffi.mbt | 80 + .../golem/api/load-snapshot/moon.pkg | 8 + .../api/load-snapshot/pkg.generated.mbti | 18 + .../interface/golem/api/load-snapshot/top.mbt | 9 + .../golem/api/save-snapshot/README.md | 2 + .../interface/golem/api/save-snapshot/ffi.mbt | 53 + .../golem/api/save-snapshot/moon.pkg | 8 + .../api/save-snapshot/pkg.generated.mbti | 18 + .../interface/golem/api/save-snapshot/top.mbt | 7 + .../interface/golem/tool/guest/README.md | 8 + .../interface/golem/tool/guest/ffi.mbt | 10388 ++++++++ .../interface/golem/tool/guest/moon.pkg | 10 + .../golem/tool/guest/pkg.generated.mbti | 22 + .../interface/golem/tool/guest/top.mbt | 45 + .../tool/tool-middleware-guest/README.md | 1 + .../golem/tool/tool-middleware-guest/ffi.mbt | 21887 ++++++++++++++++ .../golem/tool/tool-middleware-guest/moon.pkg | 11 + .../tool-middleware-guest/pkg.generated.mbti | 22 + .../golem/tool/tool-middleware-guest/stub.mbt | 38 + .../golem/tool/tool-middleware-guest/top.mbt | 28 + .../gen-agent-tool-middleware/moon.pkg | 47 + .../pkg.generated.mbti | 13 + .../golem_sdk/gen-tool-middleware/ffi.mbt | 89 + .../tool/tool-middleware-guest/README.md | 1 + .../golem/tool/tool-middleware-guest/ffi.mbt | 21887 ++++++++++++++++ .../golem/tool/tool-middleware-guest/moon.pkg | 11 + .../tool-middleware-guest/pkg.generated.mbti | 22 + .../golem/tool/tool-middleware-guest/stub.mbt | 38 + .../golem/tool/tool-middleware-guest/top.mbt | 28 + .../golem_sdk/gen-tool-middleware/moon.pkg | 25 + .../gen-tool-middleware/pkg.generated.mbti | 13 + sdks/moonbit/golem_sdk/gen/ffi.mbt | 104 +- .../gen/interface/golem/agent/guest/ffi.mbt | 98 +- .../interface/golem/api/load-snapshot/ffi.mbt | 18 +- .../interface/golem/api/loadSnapshot/ffi.mbt | 90 - .../interface/golem/api/saveSnapshot/ffi.mbt | 55 - .../gen/interface/golem/tool/guest/ffi.mbt | 94 +- .../interface/golem/agent/host/ffi.mbt | 100 +- .../interface/golem/api/context/ffi.mbt | 42 +- .../interface/golem/api/host/ffi.mbt | 62 +- .../interface/golem/api/oplog/ffi.mbt | 94 +- .../interface/golem/api/retry/ffi.mbt | 52 +- .../interface/golem/core/types/ffi.mbt | 34 +- .../golem/durability/durability/ffi.mbt | 86 +- .../interface/golem/quota/types/ffi.mbt | 16 +- .../interface/golem/rdbms/ignite2/ffi.mbt | 94 +- .../interface/golem/rdbms/mysql/ffi.mbt | 84 +- .../interface/golem/rdbms/postgres/ffi.mbt | 128 +- .../interface/golem/secrets/reveal/ffi.mbt | 76 +- .../interface/golem/secrets/types/ffi.mbt | 16 +- .../interface/golem/tool/common/ffi.mbt | 881 + .../golem/tool/common/pkg.generated.mbti | 21 + .../interface/golem/tool/common/top.mbt | 9506 +++++++ .../interface/golem/tool/host/ffi.mbt | 86 +- .../interface/golem/websocket/client/ffi.mbt | 50 +- .../wasi/blobstore/blobstore/ffi.mbt | 24 +- .../wasi/blobstore/container/ffi.mbt | 36 +- .../interface/wasi/blobstore/types/ffi.mbt | 32 +- .../interface/wasi/cli/environment/ffi.mbt | 22 +- .../wasi/cli/types/pkg.generated.mbti | 7 - .../interface/wasi/cli/types/top.mbt | 27 - .../wasi/clocks/system-clock/ffi.mbt | 22 +- .../interface/wasi/config/store/ffi.mbt | 28 +- .../wasi/filesystem/preopens/ffi.mbt | 18 +- .../interface/wasi/filesystem/types/ffi.mbt | 44 +- .../interface/wasi/http/client/ffi.mbt | 20 +- .../interface/wasi/http/types/ffi.mbt | 70 +- .../golem_sdk/interface/wasi/io/error/ffi.mbt | 22 +- .../wasi/io/error/pkg.generated.mbti | 4 +- .../golem_sdk/interface/wasi/io/poll/ffi.mbt | 12 +- .../interface/wasi/io/streams/ffi.mbt | 32 +- .../interface/wasi/keyvalue/atomic/ffi.mbt | 42 - .../interface/wasi/keyvalue/cache/ffi.mbt | 16 +- .../wasi/keyvalue/eventual-batch/ffi.mbt | 22 +- .../interface/wasi/keyvalue/eventual/ffi.mbt | 14 +- .../interface/wasi/keyvalue/types/ffi.mbt | 28 +- .../wasi/keyvalue/wasi-keyvalue-error/ffi.mbt | 16 +- .../wasi-keyvalue-error/pkg.generated.mbti | 4 +- .../golem_sdk/schema_model/ownership.mbt | 117 + .../scripts/check-middleware-host-neutral.py | 90 + .../scripts/normalize-generated-ffi.py | 130 + .../golem_sdk/scripts/regen-bindings.sh | 149 +- .../golem_sdk/scripts/run-sdk-tests.sh | 32 + .../golem_sdk/scripts/run-wasm-test.mjs | 130 + .../scripts/split-middleware-lift.py | 137 + .../test-check-middleware-host-neutral.py | 92 + .../{tool => tool-core}/canonical_input.mbt | 30 +- .../{tool => tool-core}/composition.mbt | 0 .../{tool => tool-core}/dispatch.mbt | 0 .../golem_sdk/{tool => tool-core}/help.mbt | 0 .../golem_sdk/tool-core/invocation.mbt | 213 + .../golem_sdk/{tool => tool-core}/literal.mbt | 0 .../golem_sdk/{tool => tool-core}/model.mbt | 0 sdks/moonbit/golem_sdk/tool-core/moon.pkg | 18 + .../golem_sdk/tool-core/pkg.generated.mbti | 303 + .../{tool => tool-core}/refinement.mbt | 0 .../{tool => tool-core}/registry.mbt | 0 .../{tool => tool-core}/tool_test.mbt | 0 .../tool-facade-test/facade_test.mbt | 40 + .../golem_sdk/tool-facade-test/moon.pkg | 9 + .../tool-facade-test/pkg.generated.mbti | 12 + .../.golem-sdk-role | 2 + .../authoring.mbt | 324 + .../golem_derive.mbt | 58 + .../golem_tool_middlewares.mbt | 1735 ++ .../tool-middleware-authoring-test/moon.pkg | 13 + .../pkg.generated.mbti | 90 + .../generated_dispatch_wbtest.mbt | 562 + .../golem_sdk/tool-middleware/moon.pkg | 17 + .../golem_sdk/tool-middleware/ownership.mbt | 618 + .../tool-middleware/pkg.generated.mbti | 115 + .../moonbit/golem_sdk/tool-middleware/raw.mbt | 591 + .../golem_sdk/tool-middleware/registry.mbt | 167 + .../tool-middleware/registry_wbtest.mbt | 495 + .../golem_sdk/tool-middleware/runtime.mbt | 279 + .../tool-middleware/runtime_wbtest.mbt | 1156 + sdks/moonbit/golem_sdk/tool/client.mbt | 98 +- sdks/moonbit/golem_sdk/tool/core.mbt | 64 + sdks/moonbit/golem_sdk/tool/moon.pkg | 11 +- .../moonbit/golem_sdk/tool/pkg.generated.mbti | 309 +- sdks/moonbit/golem_sdk/wit/main.wit | 59 + .../agent-tool-middleware-guest/README.md | 1 + .../ffi_import.mbt} | 0 .../agent-tool-middleware-guest/import.mbt | 1 + .../agent-tool-middleware-guest/moon.pkg | 1 + .../pkg.generated.mbti | 12 + .../world/tool-middleware-guest/README.md | 1 + .../tool-middleware-guest/ffi_import.mbt | 1 + .../world/tool-middleware-guest/import.mbt | 1 + .../world/tool-middleware-guest/moon.pkg | 1 + .../tool-middleware-guest/pkg.generated.mbti | 12 + sdks/moonbit/golem_sdk_example1/README.mbt.md | 43 +- sdks/moonbit/golem_sdk_example1/golem.yaml | 73 +- .../golem_moonbit_examples/.golem-sdk-role | 2 + .../golem_moonbit_examples/pkg.generated.mbti | 13 +- .../.golem-sdk-role | 2 + .../golem_tool_middlewares.mbt | 767 + .../middleware.mbt | 88 + .../golem_tool_middleware_examples/moon.pkg | 31 + .../pkg.generated.mbti | 56 + sdks/moonbit/golem_sdk_tools/README.mbt.md | 126 +- sdks/moonbit/golem_sdk_tools/cmd/main.mbt | 515 +- sdks/moonbit/golem_sdk_tools/cmd/moon.pkg | 1 + .../cmd/orchestration_wbtest.mbt | 535 + .../golem_sdk_tools/lib/component_role.mbt | 345 + .../lib/component_role_test.mbt | 127 + .../golem_sdk_tools/lib/pkg.generated.mbti | 107 +- sdks/moonbit/golem_sdk_tools/lib/pkg.mbt | 330 +- sdks/moonbit/golem_sdk_tools/lib/pkg_test.mbt | 302 +- sdks/moonbit/golem_sdk_tools/lib/project.mbt | 6 +- .../golem_sdk_tools/lib/project_wbtest.mbt | 10 + .../golem_sdk_tools/lib/tool_middleware.mbt | 1096 + .../lib/tool_middleware_emit.mbt | 466 + .../lib/tool_middleware_emit_test.mbt | 192 + .../lib/tool_middleware_test.mbt | 561 + .../golem_sdk_tools/lib/tools_emit.mbt | 253 +- .../tool_middleware_authoring/README.md | 10 + .../tool_middleware_authoring/adapter.mbt | 26 + .../tool_middleware_authoring/combined.mbt | 31 + .../tool_middleware_authoring/retry.mbt | 21 + .../short_circuit.mbt | 19 + .../tool_middleware_authoring/transparent.mbt | 18 + .../tool_middleware_authoring/universal.mbt | 18 + sdks/moonbit/release.sh | 2 +- sdks/moonbit/scripts/release/main.mbt | 374 +- sdks/moonbit/scripts/release/main_wbtest.mbt | 38 + sdks/moonbit/scripts/release/moon.pkg | 1 + 188 files changed, 94722 insertions(+), 1925 deletions(-) create mode 100644 cli/golem-cli/test-data/moonbit-tool-middleware-roles/combined/main.mbt create mode 100644 cli/golem-cli/test-data/moonbit-tool-middleware-roles/combined/moon.pkg create mode 100644 cli/golem-cli/test-data/moonbit-tool-middleware-roles/golem.yaml create mode 100644 cli/golem-cli/test-data/moonbit-tool-middleware-roles/middleware/main.mbt create mode 100644 cli/golem-cli/test-data/moonbit-tool-middleware-roles/middleware/moon.pkg create mode 100644 cli/golem-cli/test-data/moonbit-tool-middleware-roles/moon.mod.json create mode 100644 cli/golem-cli/test-data/moonbit-tool-middleware-roles/ordinary/main.mbt create mode 100644 cli/golem-cli/test-data/moonbit-tool-middleware-roles/ordinary/moon.pkg create mode 100644 cli/golem-cli/tests/app/moonbit_tool_middleware.rs create mode 100644 sdks/moonbit/golem_sdk/gen-agent-tool-middleware/ffi.mbt create mode 100644 sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/agent/guest/ffi.mbt create mode 100644 sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/agent/guest/moon.pkg create mode 100644 sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/agent/guest/pkg.generated.mbti create mode 100644 sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/agent/guest/top.mbt create mode 100644 sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/load-snapshot/README.md create mode 100644 sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/load-snapshot/ffi.mbt create mode 100644 sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/load-snapshot/moon.pkg create mode 100644 sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/load-snapshot/pkg.generated.mbti create mode 100644 sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/load-snapshot/top.mbt create mode 100644 sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/save-snapshot/README.md create mode 100644 sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/save-snapshot/ffi.mbt create mode 100644 sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/save-snapshot/moon.pkg create mode 100644 sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/save-snapshot/pkg.generated.mbti create mode 100644 sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/save-snapshot/top.mbt create mode 100644 sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/guest/README.md create mode 100644 sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/guest/ffi.mbt create mode 100644 sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/guest/moon.pkg create mode 100644 sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/guest/pkg.generated.mbti create mode 100644 sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/guest/top.mbt create mode 100644 sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/tool-middleware-guest/README.md create mode 100644 sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/tool-middleware-guest/ffi.mbt create mode 100644 sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/tool-middleware-guest/moon.pkg create mode 100644 sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/tool-middleware-guest/pkg.generated.mbti create mode 100644 sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/tool-middleware-guest/stub.mbt create mode 100644 sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/tool-middleware-guest/top.mbt create mode 100644 sdks/moonbit/golem_sdk/gen-agent-tool-middleware/moon.pkg create mode 100644 sdks/moonbit/golem_sdk/gen-agent-tool-middleware/pkg.generated.mbti create mode 100644 sdks/moonbit/golem_sdk/gen-tool-middleware/ffi.mbt create mode 100644 sdks/moonbit/golem_sdk/gen-tool-middleware/interface/golem/tool/tool-middleware-guest/README.md create mode 100644 sdks/moonbit/golem_sdk/gen-tool-middleware/interface/golem/tool/tool-middleware-guest/ffi.mbt create mode 100644 sdks/moonbit/golem_sdk/gen-tool-middleware/interface/golem/tool/tool-middleware-guest/moon.pkg create mode 100644 sdks/moonbit/golem_sdk/gen-tool-middleware/interface/golem/tool/tool-middleware-guest/pkg.generated.mbti create mode 100644 sdks/moonbit/golem_sdk/gen-tool-middleware/interface/golem/tool/tool-middleware-guest/stub.mbt create mode 100644 sdks/moonbit/golem_sdk/gen-tool-middleware/interface/golem/tool/tool-middleware-guest/top.mbt create mode 100644 sdks/moonbit/golem_sdk/gen-tool-middleware/moon.pkg create mode 100644 sdks/moonbit/golem_sdk/gen-tool-middleware/pkg.generated.mbti delete mode 100644 sdks/moonbit/golem_sdk/gen/interface/golem/api/loadSnapshot/ffi.mbt delete mode 100644 sdks/moonbit/golem_sdk/gen/interface/golem/api/saveSnapshot/ffi.mbt delete mode 100644 sdks/moonbit/golem_sdk/interface/wasi/cli/types/top.mbt delete mode 100644 sdks/moonbit/golem_sdk/interface/wasi/keyvalue/atomic/ffi.mbt create mode 100644 sdks/moonbit/golem_sdk/schema_model/ownership.mbt create mode 100644 sdks/moonbit/golem_sdk/scripts/check-middleware-host-neutral.py create mode 100644 sdks/moonbit/golem_sdk/scripts/normalize-generated-ffi.py create mode 100755 sdks/moonbit/golem_sdk/scripts/run-sdk-tests.sh create mode 100644 sdks/moonbit/golem_sdk/scripts/run-wasm-test.mjs create mode 100644 sdks/moonbit/golem_sdk/scripts/split-middleware-lift.py create mode 100644 sdks/moonbit/golem_sdk/scripts/test-check-middleware-host-neutral.py rename sdks/moonbit/golem_sdk/{tool => tool-core}/canonical_input.mbt (96%) rename sdks/moonbit/golem_sdk/{tool => tool-core}/composition.mbt (100%) rename sdks/moonbit/golem_sdk/{tool => tool-core}/dispatch.mbt (100%) rename sdks/moonbit/golem_sdk/{tool => tool-core}/help.mbt (100%) create mode 100644 sdks/moonbit/golem_sdk/tool-core/invocation.mbt rename sdks/moonbit/golem_sdk/{tool => tool-core}/literal.mbt (100%) rename sdks/moonbit/golem_sdk/{tool => tool-core}/model.mbt (100%) create mode 100644 sdks/moonbit/golem_sdk/tool-core/moon.pkg create mode 100644 sdks/moonbit/golem_sdk/tool-core/pkg.generated.mbti rename sdks/moonbit/golem_sdk/{tool => tool-core}/refinement.mbt (100%) rename sdks/moonbit/golem_sdk/{tool => tool-core}/registry.mbt (100%) rename sdks/moonbit/golem_sdk/{tool => tool-core}/tool_test.mbt (100%) create mode 100644 sdks/moonbit/golem_sdk/tool-facade-test/facade_test.mbt create mode 100644 sdks/moonbit/golem_sdk/tool-facade-test/moon.pkg create mode 100644 sdks/moonbit/golem_sdk/tool-facade-test/pkg.generated.mbti create mode 100644 sdks/moonbit/golem_sdk/tool-middleware-authoring-test/.golem-sdk-role create mode 100644 sdks/moonbit/golem_sdk/tool-middleware-authoring-test/authoring.mbt create mode 100644 sdks/moonbit/golem_sdk/tool-middleware-authoring-test/golem_derive.mbt create mode 100644 sdks/moonbit/golem_sdk/tool-middleware-authoring-test/golem_tool_middlewares.mbt create mode 100644 sdks/moonbit/golem_sdk/tool-middleware-authoring-test/moon.pkg create mode 100644 sdks/moonbit/golem_sdk/tool-middleware-authoring-test/pkg.generated.mbti create mode 100644 sdks/moonbit/golem_sdk/tool-middleware/generated_dispatch_wbtest.mbt create mode 100644 sdks/moonbit/golem_sdk/tool-middleware/moon.pkg create mode 100644 sdks/moonbit/golem_sdk/tool-middleware/ownership.mbt create mode 100644 sdks/moonbit/golem_sdk/tool-middleware/pkg.generated.mbti create mode 100644 sdks/moonbit/golem_sdk/tool-middleware/raw.mbt create mode 100644 sdks/moonbit/golem_sdk/tool-middleware/registry.mbt create mode 100644 sdks/moonbit/golem_sdk/tool-middleware/registry_wbtest.mbt create mode 100644 sdks/moonbit/golem_sdk/tool-middleware/runtime.mbt create mode 100644 sdks/moonbit/golem_sdk/tool-middleware/runtime_wbtest.mbt create mode 100644 sdks/moonbit/golem_sdk/tool/core.mbt create mode 100644 sdks/moonbit/golem_sdk/world/agent-tool-middleware-guest/README.md rename sdks/moonbit/golem_sdk/{interface/wasi/cli/types/ffi.mbt => world/agent-tool-middleware-guest/ffi_import.mbt} (100%) create mode 100644 sdks/moonbit/golem_sdk/world/agent-tool-middleware-guest/import.mbt create mode 100644 sdks/moonbit/golem_sdk/world/agent-tool-middleware-guest/moon.pkg create mode 100644 sdks/moonbit/golem_sdk/world/agent-tool-middleware-guest/pkg.generated.mbti create mode 100644 sdks/moonbit/golem_sdk/world/tool-middleware-guest/README.md create mode 100644 sdks/moonbit/golem_sdk/world/tool-middleware-guest/ffi_import.mbt create mode 100644 sdks/moonbit/golem_sdk/world/tool-middleware-guest/import.mbt create mode 100644 sdks/moonbit/golem_sdk/world/tool-middleware-guest/moon.pkg create mode 100644 sdks/moonbit/golem_sdk/world/tool-middleware-guest/pkg.generated.mbti create mode 100644 sdks/moonbit/golem_sdk_example1/golem_moonbit_examples/.golem-sdk-role create mode 100644 sdks/moonbit/golem_sdk_example1/golem_tool_middleware_examples/.golem-sdk-role create mode 100644 sdks/moonbit/golem_sdk_example1/golem_tool_middleware_examples/golem_tool_middlewares.mbt create mode 100644 sdks/moonbit/golem_sdk_example1/golem_tool_middleware_examples/middleware.mbt create mode 100644 sdks/moonbit/golem_sdk_example1/golem_tool_middleware_examples/moon.pkg create mode 100644 sdks/moonbit/golem_sdk_example1/golem_tool_middleware_examples/pkg.generated.mbti create mode 100644 sdks/moonbit/golem_sdk_tools/cmd/orchestration_wbtest.mbt create mode 100644 sdks/moonbit/golem_sdk_tools/lib/component_role.mbt create mode 100644 sdks/moonbit/golem_sdk_tools/lib/component_role_test.mbt create mode 100644 sdks/moonbit/golem_sdk_tools/lib/tool_middleware.mbt create mode 100644 sdks/moonbit/golem_sdk_tools/lib/tool_middleware_emit.mbt create mode 100644 sdks/moonbit/golem_sdk_tools/lib/tool_middleware_emit_test.mbt create mode 100644 sdks/moonbit/golem_sdk_tools/lib/tool_middleware_test.mbt create mode 100644 sdks/moonbit/golem_sdk_tools/test-data/tool_middleware_authoring/README.md create mode 100644 sdks/moonbit/golem_sdk_tools/test-data/tool_middleware_authoring/adapter.mbt create mode 100644 sdks/moonbit/golem_sdk_tools/test-data/tool_middleware_authoring/combined.mbt create mode 100644 sdks/moonbit/golem_sdk_tools/test-data/tool_middleware_authoring/retry.mbt create mode 100644 sdks/moonbit/golem_sdk_tools/test-data/tool_middleware_authoring/short_circuit.mbt create mode 100644 sdks/moonbit/golem_sdk_tools/test-data/tool_middleware_authoring/transparent.mbt create mode 100644 sdks/moonbit/golem_sdk_tools/test-data/tool_middleware_authoring/universal.mbt create mode 100644 sdks/moonbit/scripts/release/main_wbtest.mbt diff --git a/.github/workflows/publish-golem-moonbit.yaml b/.github/workflows/publish-golem-moonbit.yaml index d5ee0e08ac..22935ac376 100644 --- a/.github/workflows/publish-golem-moonbit.yaml +++ b/.github/workflows/publish-golem-moonbit.yaml @@ -28,20 +28,22 @@ jobs: working-directory: sdks/moonbit/golem_sdk run: | VERSION=${{ steps.get_version.outputs.version }} - sed -i "s/\"version\": \".*\"/\"version\": \"$VERSION\"/" moon.mod.json + sed -i "s/^version = \".*\"$/version = \"$VERSION\"/" moon.mod + test "$(grep -Fxc "version = \"$VERSION\"" moon.mod)" -eq 1 - name: Set version in golem_sdk_tools working-directory: sdks/moonbit/golem_sdk_tools run: | VERSION=${{ steps.get_version.outputs.version }} - sed -i "s/\"version\": \".*\"/\"version\": \"$VERSION\"/" moon.mod.json + sed -i "s/^version = \".*\"$/version = \"$VERSION\"/" moon.mod + test "$(grep -Fxc "version = \"$VERSION\"" moon.mod)" -eq 1 - name: Check SDK run: find . -name moon.pkg -exec dirname {} \; | xargs moon check --target wasm working-directory: sdks/moonbit/golem_sdk - name: Test SDK - run: find . -name moon.pkg -exec dirname {} \; | xargs moon test --target wasm + run: ./scripts/run-sdk-tests.sh working-directory: sdks/moonbit/golem_sdk - name: Install tools dependencies diff --git a/cli/golem-cli/src/model/app.rs b/cli/golem-cli/src/model/app.rs index 9dd3346ae4..4ed40501ac 100644 --- a/cli/golem-cli/src/model/app.rs +++ b/cli/golem-cli/src/model/app.rs @@ -654,7 +654,7 @@ impl Application { .map(|component| &component.templates), ) .flat_map(|templates| templates.clone().into_vec()) - .filter_map(GuestLanguage::from_id_string) + .filter_map(GuestLanguage::from_component_template_name) }) .collect() } @@ -2008,12 +2008,12 @@ impl<'a> Component<'a> { self.component_name } - // Guesses the language from the applied language templates, which are named after the - // language id they provide (see `GuestLanguage::from_id_string`). + // Guesses the language from the language-prefixed applied templates. pub fn guess_language(&self) -> Option { - self.applied_layers() - .iter() - .find_map(|(id, _)| id.template_name().and_then(GuestLanguage::from_id_string)) + self.applied_layers().iter().find_map(|(id, _)| { + id.template_name() + .and_then(GuestLanguage::from_component_template_name) + }) } pub fn source(&self) -> &Path { diff --git a/cli/golem-cli/src/model/language.rs b/cli/golem-cli/src/model/language.rs index 354beec20c..c0b0d1ff7b 100644 --- a/cli/golem-cli/src/model/language.rs +++ b/cli/golem-cli/src/model/language.rs @@ -64,6 +64,14 @@ impl GuestLanguage { } } + pub fn from_component_template_name(s: impl AsRef) -> Option { + let template_name = s.as_ref(); + let language_id = template_name + .split_once('-') + .map_or(template_name, |(language_id, _)| language_id); + Self::from_id_string(language_id) + } + pub fn id(&self) -> &'static str { match self { GuestLanguage::Rust => "rust", @@ -102,3 +110,29 @@ impl FromStr for GuestLanguage { }) } } + +#[cfg(test)] +mod tests { + use super::GuestLanguage; + use test_r::test; + + #[test] + fn component_template_names_retain_their_language_prefix() { + assert_eq!( + GuestLanguage::from_component_template_name("moonbit-tool-middleware"), + Some(GuestLanguage::MoonBit) + ); + assert_eq!( + GuestLanguage::from_component_template_name("ts-agent-tool-middleware"), + Some(GuestLanguage::TypeScript) + ); + assert_eq!( + GuestLanguage::from_component_template_name("rust"), + Some(GuestLanguage::Rust) + ); + assert_eq!( + GuestLanguage::from_component_template_name("custom-moonbit"), + None + ); + } +} diff --git a/cli/golem-cli/templates/moonbit/common-on-demand/golem.yaml b/cli/golem-cli/templates/moonbit/common-on-demand/golem.yaml index 64bd486b43..cb245842ae 100644 --- a/cli/golem-cli/templates/moonbit/common-on-demand/golem.yaml +++ b/cli/golem-cli/templates/moonbit/common-on-demand/golem.yaml @@ -6,27 +6,85 @@ componentTemplates: debug: default: true build: - - command: GOLEM_MOONBIT_BUILD_TOOLS_CMD reexports "GOLEM_MOONBIT_BUILD_SDK_PATH" "{{ componentDir }}" + - command: GOLEM_MOONBIT_BUILD_TOOLS_CMD reexports "GOLEM_MOONBIT_BUILD_SDK_PATH" "{{ componentDir }}" --role ordinary dir: "{{ appRootDir }}" - - command: GOLEM_MOONBIT_BUILD_TOOLS_CMD agents "{{ appRootDir }}" + - command: GOLEM_MOONBIT_BUILD_TOOLS_CMD agents "{{ appRootDir }}" --component-dir "{{ componentDir }}" --role ordinary dir: "{{ appRootDir }}" - command: moon build --target wasm dir: "{{ appRootDir }}" - - command: wasm-tools component embed "GOLEM_MOONBIT_BUILD_SDK_PATH/wit" "{{ appRootDir }}/_build/wasm/debug/build/{{ moonbitBuildPackagePath }}" --encoding utf16 --output "{{ appRootDir }}/_build/wasm/debug/{{ componentName | to_snake_case }}.embed.wasm" + - command: wasm-tools component embed "GOLEM_MOONBIT_BUILD_SDK_PATH/wit" "{{ appRootDir }}/_build/wasm/debug/build/{{ moonbitBuildPackagePath }}" --world agent-guest --encoding utf16 --output "{{ appRootDir }}/_build/wasm/debug/{{ componentName | to_snake_case }}.embed.wasm" mkdirs: - "{{ appRootDir }}/_build/wasm/debug" - command: wasm-tools component new "{{ appRootDir }}/_build/wasm/debug/{{ componentName | to_snake_case }}.embed.wasm" --output "{{ appRootDir }}/_build/wasm/debug/{{ componentName | to_snake_case }}.agent.wasm" componentWasm: "{{ appRootDir }}/_build/wasm/debug/{{ componentName | to_snake_case }}.agent.wasm" release: build: - - command: GOLEM_MOONBIT_BUILD_TOOLS_CMD reexports "GOLEM_MOONBIT_BUILD_SDK_PATH" "{{ componentDir }}" + - command: GOLEM_MOONBIT_BUILD_TOOLS_CMD reexports "GOLEM_MOONBIT_BUILD_SDK_PATH" "{{ componentDir }}" --role ordinary dir: "{{ appRootDir }}" - - command: GOLEM_MOONBIT_BUILD_TOOLS_CMD agents "{{ appRootDir }}" + - command: GOLEM_MOONBIT_BUILD_TOOLS_CMD agents "{{ appRootDir }}" --component-dir "{{ componentDir }}" --role ordinary dir: "{{ appRootDir }}" - command: moon build --target wasm --release dir: "{{ appRootDir }}" - - command: wasm-tools component embed "GOLEM_MOONBIT_BUILD_SDK_PATH/wit" "{{ appRootDir }}/_build/wasm/release/build/{{ moonbitBuildPackagePath }}" --encoding utf16 --output "{{ appRootDir }}/_build/wasm/release/{{ componentName | to_snake_case }}.embed.wasm" + - command: wasm-tools component embed "GOLEM_MOONBIT_BUILD_SDK_PATH/wit" "{{ appRootDir }}/_build/wasm/release/build/{{ moonbitBuildPackagePath }}" --world agent-guest --encoding utf16 --output "{{ appRootDir }}/_build/wasm/release/{{ componentName | to_snake_case }}.embed.wasm" mkdirs: - "{{ appRootDir }}/_build/wasm/release" - command: wasm-tools component new "{{ appRootDir }}/_build/wasm/release/{{ componentName | to_snake_case }}.embed.wasm" --output "{{ appRootDir }}/_build/wasm/release/{{ componentName | to_snake_case }}.agent.wasm" componentWasm: "{{ appRootDir }}/_build/wasm/release/{{ componentName | to_snake_case }}.agent.wasm" + moonbit-tool-middleware: + presets: + debug: + default: true + build: + - command: GOLEM_MOONBIT_BUILD_TOOLS_CMD reexports "GOLEM_MOONBIT_BUILD_SDK_PATH" "{{ componentDir }}" --role tool-middleware + dir: "{{ appRootDir }}" + - command: GOLEM_MOONBIT_BUILD_TOOLS_CMD agents "{{ appRootDir }}" --component-dir "{{ componentDir }}" --role tool-middleware + dir: "{{ appRootDir }}" + - command: moon build --target wasm + dir: "{{ appRootDir }}" + - command: wasm-tools component embed "GOLEM_MOONBIT_BUILD_SDK_PATH/wit" "{{ appRootDir }}/_build/wasm/debug/build/{{ moonbitBuildPackagePath }}" --world tool-middleware-guest --encoding utf16 --output "{{ appRootDir }}/_build/wasm/debug/{{ componentName | to_snake_case }}.tool-middleware.embed.wasm" + mkdirs: + - "{{ appRootDir }}/_build/wasm/debug" + - command: wasm-tools component new "{{ appRootDir }}/_build/wasm/debug/{{ componentName | to_snake_case }}.tool-middleware.embed.wasm" --output "{{ appRootDir }}/_build/wasm/debug/{{ componentName | to_snake_case }}.tool-middleware.wasm" + componentWasm: "{{ appRootDir }}/_build/wasm/debug/{{ componentName | to_snake_case }}.tool-middleware.wasm" + release: + build: + - command: GOLEM_MOONBIT_BUILD_TOOLS_CMD reexports "GOLEM_MOONBIT_BUILD_SDK_PATH" "{{ componentDir }}" --role tool-middleware + dir: "{{ appRootDir }}" + - command: GOLEM_MOONBIT_BUILD_TOOLS_CMD agents "{{ appRootDir }}" --component-dir "{{ componentDir }}" --role tool-middleware + dir: "{{ appRootDir }}" + - command: moon build --target wasm --release + dir: "{{ appRootDir }}" + - command: wasm-tools component embed "GOLEM_MOONBIT_BUILD_SDK_PATH/wit" "{{ appRootDir }}/_build/wasm/release/build/{{ moonbitBuildPackagePath }}" --world tool-middleware-guest --encoding utf16 --output "{{ appRootDir }}/_build/wasm/release/{{ componentName | to_snake_case }}.tool-middleware.embed.wasm" + mkdirs: + - "{{ appRootDir }}/_build/wasm/release" + - command: wasm-tools component new "{{ appRootDir }}/_build/wasm/release/{{ componentName | to_snake_case }}.tool-middleware.embed.wasm" --output "{{ appRootDir }}/_build/wasm/release/{{ componentName | to_snake_case }}.tool-middleware.wasm" + componentWasm: "{{ appRootDir }}/_build/wasm/release/{{ componentName | to_snake_case }}.tool-middleware.wasm" + moonbit-agent-tool-middleware: + presets: + debug: + default: true + build: + - command: GOLEM_MOONBIT_BUILD_TOOLS_CMD reexports "GOLEM_MOONBIT_BUILD_SDK_PATH" "{{ componentDir }}" --role combined + dir: "{{ appRootDir }}" + - command: GOLEM_MOONBIT_BUILD_TOOLS_CMD agents "{{ appRootDir }}" --component-dir "{{ componentDir }}" --role combined + dir: "{{ appRootDir }}" + - command: moon build --target wasm + dir: "{{ appRootDir }}" + - command: wasm-tools component embed "GOLEM_MOONBIT_BUILD_SDK_PATH/wit" "{{ appRootDir }}/_build/wasm/debug/build/{{ moonbitBuildPackagePath }}" --world agent-tool-middleware-guest --encoding utf16 --output "{{ appRootDir }}/_build/wasm/debug/{{ componentName | to_snake_case }}.agent-tool-middleware.embed.wasm" + mkdirs: + - "{{ appRootDir }}/_build/wasm/debug" + - command: wasm-tools component new "{{ appRootDir }}/_build/wasm/debug/{{ componentName | to_snake_case }}.agent-tool-middleware.embed.wasm" --output "{{ appRootDir }}/_build/wasm/debug/{{ componentName | to_snake_case }}.agent-tool-middleware.wasm" + componentWasm: "{{ appRootDir }}/_build/wasm/debug/{{ componentName | to_snake_case }}.agent-tool-middleware.wasm" + release: + build: + - command: GOLEM_MOONBIT_BUILD_TOOLS_CMD reexports "GOLEM_MOONBIT_BUILD_SDK_PATH" "{{ componentDir }}" --role combined + dir: "{{ appRootDir }}" + - command: GOLEM_MOONBIT_BUILD_TOOLS_CMD agents "{{ appRootDir }}" --component-dir "{{ componentDir }}" --role combined + dir: "{{ appRootDir }}" + - command: moon build --target wasm --release + dir: "{{ appRootDir }}" + - command: wasm-tools component embed "GOLEM_MOONBIT_BUILD_SDK_PATH/wit" "{{ appRootDir }}/_build/wasm/release/build/{{ moonbitBuildPackagePath }}" --world agent-tool-middleware-guest --encoding utf16 --output "{{ appRootDir }}/_build/wasm/release/{{ componentName | to_snake_case }}.agent-tool-middleware.embed.wasm" + mkdirs: + - "{{ appRootDir }}/_build/wasm/release" + - command: wasm-tools component new "{{ appRootDir }}/_build/wasm/release/{{ componentName | to_snake_case }}.agent-tool-middleware.embed.wasm" --output "{{ appRootDir }}/_build/wasm/release/{{ componentName | to_snake_case }}.agent-tool-middleware.wasm" + componentWasm: "{{ appRootDir }}/_build/wasm/release/{{ componentName | to_snake_case }}.agent-tool-middleware.wasm" diff --git a/cli/golem-cli/test-data/moonbit-tool-middleware-roles/combined/main.mbt b/cli/golem-cli/test-data/moonbit-tool-middleware-roles/combined/main.mbt new file mode 100644 index 0000000000..ceb25cfa64 --- /dev/null +++ b/cli/golem-cli/test-data/moonbit-tool-middleware-roles/combined/main.mbt @@ -0,0 +1,42 @@ +///| +#derive.agent +struct CombinedAgent { + name : String +} + +///| +fn CombinedAgent::new(name : String) -> CombinedAgent { + { name, } +} + +///| +pub fn CombinedAgent::get_name(self : Self) -> String { + self.name +} + +///| +pub fn CombinedAgent::use_ambient_tool(self : Self) -> Unit { + let client = @tool.ToolClient::new(self.name) + client.drop() +} + +///| +#derive.universal_tool_middleware("combined-audit") +pub async fn combined_audit( + invocation : @toolMiddleware.RawToolInvocation, + underlying : @toolMiddleware.UnderlyingTool, +) -> Result[ + @toolMiddleware.RawInvocationResult, + @toolMiddleware.ToolInvokeError[@toolMiddleware.RawTypedSchemaValue], +] { + underlying.invoke_raw( + invocation.command_path(), + invocation.input(), + invocation.stdin(), + ) +} + +///| +fn main { + +} diff --git a/cli/golem-cli/test-data/moonbit-tool-middleware-roles/combined/moon.pkg b/cli/golem-cli/test-data/moonbit-tool-middleware-roles/combined/moon.pkg new file mode 100644 index 0000000000..7f2bc544f5 --- /dev/null +++ b/cli/golem-cli/test-data/moonbit-tool-middleware-roles/combined/moon.pkg @@ -0,0 +1,8 @@ +import { + "golemcloud/golem_sdk/tool" @tool, + "golemcloud/golem_sdk/tool-middleware" @toolMiddleware, +} + +options( + "is-main": true, +) diff --git a/cli/golem-cli/test-data/moonbit-tool-middleware-roles/golem.yaml b/cli/golem-cli/test-data/moonbit-tool-middleware-roles/golem.yaml new file mode 100644 index 0000000000..7feeb39e60 --- /dev/null +++ b/cli/golem-cli/test-data/moonbit-tool-middleware-roles/golem.yaml @@ -0,0 +1,22 @@ +manifestVersion: 1.6.0 + +app: moonbit-tool-middleware-roles + +version: v0.0.0 + +environments: + local: + server: local + componentPresets: debug + version: v0.0.0 + +components: + moonbit-tool-middleware-roles:ordinary: + dir: ordinary + templates: moonbit + moonbit-tool-middleware-roles:middleware: + dir: middleware + templates: moonbit-tool-middleware + moonbit-tool-middleware-roles:combined: + dir: combined + templates: moonbit-agent-tool-middleware diff --git a/cli/golem-cli/test-data/moonbit-tool-middleware-roles/middleware/main.mbt b/cli/golem-cli/test-data/moonbit-tool-middleware-roles/middleware/main.mbt new file mode 100644 index 0000000000..c8da9cb2a5 --- /dev/null +++ b/cli/golem-cli/test-data/moonbit-tool-middleware-roles/middleware/main.mbt @@ -0,0 +1,20 @@ +///| +#derive.universal_tool_middleware("pure-audit") +pub async fn pure_audit( + invocation : @toolMiddleware.RawToolInvocation, + underlying : @toolMiddleware.UnderlyingTool, +) -> Result[ + @toolMiddleware.RawInvocationResult, + @toolMiddleware.ToolInvokeError[@toolMiddleware.RawTypedSchemaValue], +] { + underlying.invoke_raw( + invocation.command_path(), + invocation.input(), + invocation.stdin(), + ) +} + +///| +fn main { + +} diff --git a/cli/golem-cli/test-data/moonbit-tool-middleware-roles/middleware/moon.pkg b/cli/golem-cli/test-data/moonbit-tool-middleware-roles/middleware/moon.pkg new file mode 100644 index 0000000000..8e45e10288 --- /dev/null +++ b/cli/golem-cli/test-data/moonbit-tool-middleware-roles/middleware/moon.pkg @@ -0,0 +1,7 @@ +import { + "golemcloud/golem_sdk/tool-middleware" @toolMiddleware, +} + +options( + "is-main": true, +) diff --git a/cli/golem-cli/test-data/moonbit-tool-middleware-roles/moon.mod.json b/cli/golem-cli/test-data/moonbit-tool-middleware-roles/moon.mod.json new file mode 100644 index 0000000000..33d0dff9c3 --- /dev/null +++ b/cli/golem-cli/test-data/moonbit-tool-middleware-roles/moon.mod.json @@ -0,0 +1,6 @@ +{ + "name": "moonbit-tool-middleware-roles", + "version": "0.0.0", + "preferred-target": "wasm", + "deps": {} +} diff --git a/cli/golem-cli/test-data/moonbit-tool-middleware-roles/ordinary/main.mbt b/cli/golem-cli/test-data/moonbit-tool-middleware-roles/ordinary/main.mbt new file mode 100644 index 0000000000..43fc641bb3 --- /dev/null +++ b/cli/golem-cli/test-data/moonbit-tool-middleware-roles/ordinary/main.mbt @@ -0,0 +1,26 @@ +///| +#derive.agent +struct OrdinaryAgent { + name : String +} + +///| +fn OrdinaryAgent::new(name : String) -> OrdinaryAgent { + { name, } +} + +///| +pub fn OrdinaryAgent::get_name(self : Self) -> String { + self.name +} + +///| +pub fn OrdinaryAgent::use_ambient_tool(self : Self) -> Unit { + let client = @tool.ToolClient::new(self.name) + client.drop() +} + +///| +fn main { + +} diff --git a/cli/golem-cli/test-data/moonbit-tool-middleware-roles/ordinary/moon.pkg b/cli/golem-cli/test-data/moonbit-tool-middleware-roles/ordinary/moon.pkg new file mode 100644 index 0000000000..09d62c8935 --- /dev/null +++ b/cli/golem-cli/test-data/moonbit-tool-middleware-roles/ordinary/moon.pkg @@ -0,0 +1,7 @@ +import { + "golemcloud/golem_sdk/tool" @tool, +} + +options( + "is-main": true, +) diff --git a/cli/golem-cli/tests/app/mod.rs b/cli/golem-cli/tests/app/mod.rs index e9b6bfe499..c1b2a73b8f 100644 --- a/cli/golem-cli/tests/app/mod.rs +++ b/cli/golem-cli/tests/app/mod.rs @@ -21,6 +21,7 @@ mod app; mod build_and_deploy_all; mod cards; mod directory_source_ifs; +mod moonbit_tool_middleware; mod plugins; inherit_test_dep!(Tracing); diff --git a/cli/golem-cli/tests/app/moonbit_tool_middleware.rs b/cli/golem-cli/tests/app/moonbit_tool_middleware.rs new file mode 100644 index 0000000000..e33c60b72d --- /dev/null +++ b/cli/golem-cli/tests/app/moonbit_tool_middleware.rs @@ -0,0 +1,225 @@ +// Copyright 2024-2026 Golem Cloud +// +// Licensed under the Golem Source License v1.1 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://license.golem.cloud/LICENSE +// +// 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. + +use super::{TestContext, cmd, flag}; +use golem_cli::sdk_overrides::sdk_overrides; +use std::path::{Path, PathBuf}; +use test_r::test; +use wit_parser::decoding::DecodedWasm; +use wit_parser::{Resolve, WorldItem, WorldKey}; + +const APP_NAME: &str = "moonbit-tool-middleware-roles"; + +const ROLE_MARKER_HEADER: &str = "# Generated by golem_sdk_tools; do not edit.\n"; + +#[test] +async fn test_moonbit_tool_middleware_component_roles() { + let mut ctx = TestContext::new(); + let fixture = ctx.test_data_path_join(APP_NAME); + fs_extra::dir::copy(fixture, ctx.cwd_path(), &fs_extra::dir::CopyOptions::new()).unwrap(); + ctx.cd(APP_NAME); + + let sdk_path = sdk_overrides() + .unwrap() + .moonbit_sdk_path + .as_ref() + .expect("MoonBit role integration requires the local SDK override"); + let module_path = ctx.cwd_path_join("moon.mod.json"); + let mut module: serde_json::Value = + serde_json::from_str(&std::fs::read_to_string(&module_path).unwrap()).unwrap(); + module["deps"]["golemcloud/golem_sdk"] = serde_json::json!({ "path": sdk_path }); + std::fs::write( + module_path, + serde_json::to_string_pretty(&module).unwrap() + "\n", + ) + .unwrap(); + + let output = ctx.cli([flag::YES, cmd::BUILD, flag::FORCE_BUILD]).await; + assert!(output.success_or_dump()); + + assert_eq!( + std::fs::read_to_string(ctx.cwd_path_join("ordinary/.golem-sdk-role")).unwrap(), + format!("{ROLE_MARKER_HEADER}ordinary\n") + ); + assert_eq!( + std::fs::read_to_string(ctx.cwd_path_join("middleware/.golem-sdk-role")).unwrap(), + format!("{ROLE_MARKER_HEADER}tool-middleware\n") + ); + assert_eq!( + std::fs::read_to_string(ctx.cwd_path_join("combined/.golem-sdk-role")).unwrap(), + format!("{ROLE_MARKER_HEADER}combined\n") + ); + + assert_role_package(&ctx.cwd_path_join("ordinary/moon.pkg"), "/gen\" @gen"); + assert_role_package( + &ctx.cwd_path_join("middleware/moon.pkg"), + "/gen-tool-middleware\" @gen", + ); + assert_role_package( + &ctx.cwd_path_join("combined/moon.pkg"), + "/gen-agent-tool-middleware\" @gen", + ); + + assert_component_contracts(&ctx, "debug"); + + let output = ctx + .cli([flag::YES, "-P", "release", cmd::BUILD, flag::FORCE_BUILD]) + .await; + assert!(output.success_or_dump()); + + assert_component_contracts(&ctx, "release"); +} + +fn assert_component_contracts(ctx: &TestContext, profile: &str) { + assert_component_contract( + &ordinary_component(ctx, profile), + &[ + "interface:golem:agent/common@2.0.0", + "interface:golem:agent/host@2.0.0", + "interface:golem:api/host@1.5.0", + "interface:golem:core/types@2.0.0", + "interface:golem:tool/common@0.1.0", + "interface:golem:tool/host@0.1.0", + "interface:wasi:cli/environment@0.3.0", + "interface:wasi:clocks/types@0.3.0", + "interface:wasi:logging/logging", + ], + &[ + "interface:golem:agent/guest@2.0.0", + "interface:golem:api/load-snapshot@1.5.0", + "interface:golem:api/save-snapshot@1.5.0", + "interface:golem:tool/guest@0.1.0", + ], + ); + assert_component_contract( + &middleware_component(ctx, profile), + &[ + "interface:golem:agent/common@2.0.0", + "interface:golem:core/types@2.0.0", + "interface:golem:tool/common@0.1.0", + ], + &["interface:golem:tool/tool-middleware-guest@0.1.0"], + ); + assert_component_contract( + &combined_component(ctx, profile), + &[ + "interface:golem:agent/common@2.0.0", + "interface:golem:api/host@1.5.0", + "interface:golem:core/types@2.0.0", + "interface:golem:tool/common@0.1.0", + "interface:golem:tool/host@0.1.0", + "interface:wasi:clocks/types@0.3.0", + "interface:wasi:logging/logging", + ], + &[ + "interface:golem:agent/guest@2.0.0", + "interface:golem:api/load-snapshot@1.5.0", + "interface:golem:api/save-snapshot@1.5.0", + "interface:golem:tool/guest@0.1.0", + "interface:golem:tool/tool-middleware-guest@0.1.0", + ], + ); +} + +fn assert_role_package(path: &Path, expected_gen_import: &str) { + let package = std::fs::read_to_string(path).unwrap(); + assert!( + package.contains(expected_gen_import), + "{} does not contain {expected_gen_import}:\n{package}", + path.display() + ); +} + +fn assert_component_contract( + component: &Path, + expected_imports: &[&str], + expected_exports: &[&str], +) { + let bytes = std::fs::read(component).unwrap(); + let decoded = wit_parser::decoding::decode(&bytes).unwrap(); + let (resolve, world_id) = match decoded { + DecodedWasm::Component(resolve, world_id) => (resolve, world_id), + DecodedWasm::WitPackage(_, _) => { + panic!( + "{} decoded as a WIT package, not a component", + component.display() + ) + } + }; + let world = &resolve.worlds[world_id]; + + let mut imports = world + .imports + .iter() + .map(|(key, item)| normalized_world_item(&resolve, key, item)) + .collect::>(); + imports.sort(); + let mut expected_imports = expected_imports + .iter() + .map(|item| (*item).to_string()) + .collect::>(); + expected_imports.sort(); + assert_eq!( + imports, + expected_imports, + "unexpected direct imports in {}", + component.display() + ); + + let mut exports = world + .exports + .iter() + .map(|(key, item)| normalized_world_item(&resolve, key, item)) + .collect::>(); + exports.sort(); + + let mut expected_exports = expected_exports + .iter() + .map(|name| (*name).to_string()) + .collect::>(); + expected_exports.sort(); + assert_eq!( + exports, + expected_exports, + "unexpected direct exports in {}", + component.display() + ); +} + +fn normalized_world_item(resolve: &Resolve, key: &WorldKey, item: &WorldItem) -> String { + let kind = match item { + WorldItem::Interface { .. } => "interface", + WorldItem::Function(_) => "function", + WorldItem::Type { .. } => "type", + }; + format!("{kind}:{}", resolve.name_world_key(key)) +} + +fn ordinary_component(ctx: &TestContext, profile: &str) -> PathBuf { + ctx.cwd_path_join(format!( + "_build/wasm/{profile}/moonbit_tool_middleware_roles_ordinary.agent.wasm" + )) +} + +fn middleware_component(ctx: &TestContext, profile: &str) -> PathBuf { + ctx.cwd_path_join(format!( + "_build/wasm/{profile}/moonbit_tool_middleware_roles_middleware.tool-middleware.wasm" + )) +} + +fn combined_component(ctx: &TestContext, profile: &str) -> PathBuf { + ctx.cwd_path_join(format!( + "_build/wasm/{profile}/moonbit_tool_middleware_roles_combined.agent-tool-middleware.wasm" + )) +} diff --git a/sdks/moonbit/golem_sdk/README.mbt.md b/sdks/moonbit/golem_sdk/README.mbt.md index 8a1904dfe3..287991a2d3 100644 --- a/sdks/moonbit/golem_sdk/README.mbt.md +++ b/sdks/moonbit/golem_sdk/README.mbt.md @@ -8,16 +8,17 @@ This SDK lets you write Golem agents in MoonBit with minimal boilerplate. Agents ## Quick Start -Currently (Golem 1.4.2) the MoonBit SDK is not part of the official Golem release, so there is no built-in MoonBit template to be used with the `golem new` command. Use -the `golem_sdk_example1` package in this repository as a template. +Golem CLI 1.6.0 includes built-in MoonBit templates for ordinary agent components, pure tool +middleware components, and combined agent/tool-middleware components. The +`golem_sdk_example1` package in this repository is the complete reference application. ### 0. Set up your project from the template Copy the [`golem_sdk_example1`](https://github.com/golemcloud/moonbit-sdk/tree/main/golem_sdk_example1) directory and make the following changes: -#### `moon.mod.json` -- Change `"name"` from `"golemcloud/golem_sdk_example1"` to your module name (e.g. `"myorg/my_app"`) -- Update `"description"`, `"repository"`, and other metadata fields +#### `moon.mod` +- Change `name` from `"golemcloud/golem_sdk_example1"` to your module name (e.g. `"myorg/my_app"`) +- Update `description`, `repository`, and other metadata fields #### `golem.yaml` - Change `app:` from `golem-sdk-example1` to your application name (e.g. `my-app`) @@ -29,7 +30,7 @@ Copy the [`golem_sdk_example1`](https://github.com/golemcloud/moonbit-sdk/tree/m #### Agent source files - Delete or modify the example agent files (`counter.mbt`, `task_manager.mbt`, `multimodal_agent.mbt`, `rpc_example.mbt`) -- The generated files (`golem_reexports.mbt`, `golem_agents.mbt`, `golem_derive.mbt`, `golem_clients.mbt`, `golem_tools.mbt`, and `golem_tool_clients.mbt`) will be regenerated by `golem build` +- The generated files (`golem_reexports.mbt`, `golem_agents.mbt`, `golem_derive.mbt`, `golem_clients.mbt`, `golem_tools.mbt`, `golem_tool_clients.mbt`, and `golem_tool_middlewares.mbt`) will be regenerated by `golem build` - Add your own agents with `#derive.agent` structs - Make sure you have an empty `fn main {}` somewhere in the package @@ -38,7 +39,7 @@ Copy the [`golem_sdk_example1`](https://github.com/golemcloud/moonbit-sdk/tree/m After these changes, run `moon install` to download dependencies, then `golem build` to build. -**The MoonBit Golem SDK 0.4.x is ONLY compatible with Golem 1.4.x** +MoonBit Golem SDK 0.5.x requires Golem CLI 1.6.0 or newer. ### 1. Define an agent @@ -147,7 +148,148 @@ parameter. A declared output stream becomes part of the generated result type. S [`golem_sdk_tools` documentation](https://mooncakes.io/docs/#/golemcloud/golem_sdk_tools/) and the canonical `grep`/`git` examples for the complete annotation surface. -### 4. Build and deploy +### 4. Define a tool middleware component + +A **monomorphic middleware** presents one statically declared `#derive.tool` shape. Its generated +typed underlying wrapper follows the expected tool shape. Omitting `expected` makes it equal to +`presented`, which is the transparent-policy case: + +```moonbit nocheck +///| +#derive.tool("messages") +struct Messages {} + +///| +pub fn Messages::send(message : String) -> String { + message +} + +///| +#derive.tool_middleware("message-policy", presented="Messages") +struct MessagePolicy {} + +///| +pub async fn MessagePolicy::send( + underlying : MessagesUnderlying, + message : String, +) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + if message.contains("blocked") { + // Zero underlying calls: this invocation is short-circuited. + Err( + @toolMiddleware.ToolInvokeError::ConstraintViolation( + "messages containing 'blocked' are not allowed", + ), + ) + } else { + // One underlying call: forward to the next inner layer. + underlying.send(message) + } +} + +///| +fn main { + +} +``` + +In a pure middleware component, the `#derive.tool` declarations, signatures, and annotations +describe the typed tool shape for code generation. Their method bodies are not registered or +invoked as ordinary tool implementations. A handler may make zero, one, or multiple +**sequential** calls through its `underlying` argument. For example, a retry can call the same +generated method again after an error. Overlapping calls are rejected. + +A **universal middleware** handles any runtime-provided tool shape and forwards the opaque wire +carriers without rebuilding them: + +```moonbit nocheck +///| +#derive.universal_tool_middleware("audit") +pub async fn audit( + invocation : @toolMiddleware.RawToolInvocation, + underlying : @toolMiddleware.UnderlyingTool, +) -> Result[ + @toolMiddleware.RawInvocationResult, + @toolMiddleware.ToolInvokeError[@toolMiddleware.RawTypedSchemaValue], +] { + ignore(invocation.tool_name()) + ignore(invocation.tool_metadata()) + ignore(invocation.principal()) + underlying.invoke_raw( + invocation.command_path(), + invocation.input(), + invocation.stdin(), + ) +} +``` + +Use this minimal `moon.pkg` for a pure middleware package; code generation adds its other +role-specific imports and exports: + +```moonbit nocheck +import { + "golemcloud/golem_sdk/tool-core" @tool, + "golemcloud/golem_sdk/tool-middleware" @toolMiddleware, +} + +supported_targets = "+wasm" + +options( + "is-main": true, +) +``` + +Select the pure component template in `golem.yaml`: + +```yaml +components: + myorg:message-middlewares: + templates: moonbit-tool-middleware + dir: message_middlewares +``` + +Then run `golem build`. The build uses the `tool-middleware` code-generation role, embeds the +`tool-middleware-guest` world, and creates a `.tool-middleware.wasm` component. Generated startup +code registers every declared middleware when the component loads. Do not import `tool` or use +`ToolClient` in a pure package: pure middleware has no ambient `golem:tool/host` dispatch, and the +runtime-provided `underlying` capability is its only path to the next inner layer. + +The underlying capability and invocation streams belong to one middleware invocation. Generated +wrappers enforce once-only transfer, sequential use, cleanup, and revocation when the handler +returns, but MoonBit itself does not provide affine type-system guarantees. Return only the final +stdout stream; abandoned or unforwarded streams are cleaned up by the SDK. + +Presented and expected tool declarations must currently be in the middleware's own MoonBit +package. A qualified or cross-package reference is rejected with: + +```text +Tool middleware '' references tool '' outside its package; GOL-34 supports same-package tool shapes only +``` + +An adapter names a different same-package expected shape; its handlers still implement the +presented surface while the generated wrapper exposes the expected surface: + +```moonbit nocheck +///| +#derive.tool_middleware("file-adapter", presented="PublicFiles", expected="Storage") +struct FileAdapter {} + +///| +pub async fn FileAdapter::read( + underlying : StorageUnderlying, + path : String, +) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + underlying.fetch("files/" + path) +} +``` + +Middleware placement and chain order are selected by the runtime/application manifest, not by the +MoonBit declarations or registration order. This SDK feature authors and builds named middleware; +runtime chain traversal and manifest placement are separate platform concerns. + +See `golem_sdk_example1/golem_tool_middleware_examples` for a complete pure component containing +the policy, universal, and adapter forms above. + +### 5. Build and deploy Use `golem build` and `golem deploy` with a `golem.yaml` application manifest. See the [example project](https://github.com/golemcloud/moonbit-sdk/tree/main/golem_sdk_example1) for a complete setup. @@ -157,6 +299,7 @@ Use `golem build` and `golem deploy` with a `golem.yaml` application manifest. S - **Custom data types** — `#derive.golem_schema` implements every nexessary trait to use custom data types on the public interface of your agents - **Agent-to-agent RPC** — auto-generated client stubs (`CounterClient`) with awaited, fire-and-forget, and scheduled invocations - **Agent tools** — code-first tool descriptors, command trees, constraints, custom errors, runtime dispatch, and typed tool RPC clients via `#derive.tool` +- **Tool middleware** — monomorphic policy/adapter middleware and universal transparent middleware with invocation-scoped underlying capabilities - **Multimodal input** — accept mixed text, binary, and custom modality data via `#derive.multimodal` and `@multimodal.Multimodal[T]` - **Logging** — structured logging via `@logging.with_name("my-agent")` with level filtering - **Tracing** — span-based tracing via `@context.with_span(...)` with attributes @@ -175,7 +318,9 @@ Use `golem build` and `golem deploy` with a `golem.yaml` application manifest. S | `logging` | Structured logging with named loggers and level filtering | | `context` | Span-based tracing and invocation context | | `rpc` | Agent-to-agent RPC helpers | -| `tool` | Tool registry, descriptor model, canonical input handling, dispatch, help rendering, and typed RPC client runtime | +| `tool-core` | Host-neutral tool descriptors, schemas, canonical input handling, and error model | +| `tool` | Ordinary tool registry, dispatch, help rendering, and ambient typed RPC client runtime | +| `tool-middleware` | Host-neutral middleware registry, opaque invocation carriers, typed/universal underlying capabilities, and ownership enforcement | | `interface/` | WIT-generated bindings (Golem host APIs, WASI interfaces) | | `gen/` | WIT-generated WASM export glue code | @@ -189,11 +334,12 @@ This SDK is designed to be used with [`golemcloud/golem_sdk_tools`](https://moon - `golem_clients.mbt` — RPC client stubs for agent-to-agent calls - `golem_tools.mbt` — tool descriptors, custom error schemas, registration, and invocation dispatch - `golem_tool_clients.mbt` — typed clients for invoking tools and nested subcommands +- `golem_tool_middlewares.mbt` — monomorphic/universal middleware adapters, descriptors, typed underlying wrappers, and registration ## Requirements - MoonBit toolchain (`moon`) -- Golem CLI (`golem`) version 1.4.x+ +- Golem CLI (`golem`) version 1.6.0+ - `wasm-tools` for component model linking - `golemcloud/golem_sdk_tools` for code generation diff --git a/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/ffi.mbt b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/ffi.mbt new file mode 100644 index 0000000000..27063c53f4 --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/ffi.mbt @@ -0,0 +1,209 @@ +// Generated by `wit-bindgen` 0.59.0. DO NOT EDIT! + +///| +pub fn mbt_ffi_cabi_realloc( + src_offset : Int, + src_size : Int, + _dst_alignment : Int, + dst_size : Int, +) -> Int { + // malloc + if src_offset == 0 && src_size == 0 { + return mbt_ffi_malloc(dst_size) + } + // free + if dst_size == 0 { + mbt_ffi_free(src_offset) + return 0 + } + // realloc + let dst = mbt_ffi_malloc(dst_size) + mbt_ffi_copy( + dst, + src_offset, + if src_size < dst_size { + src_size + } else { + dst_size + }, + ) + mbt_ffi_free(src_offset) + dst +} + +///| +extern "wasm" fn mbt_ffi_copy(dest : Int, src : Int, len : Int) = + #|(func (param i32) (param i32) (param i32) local.get 0 local.get 1 local.get 2 memory.copy) + +///| +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) + +///| +extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = + #|(func (param i32) (result i32) (local i32) + #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc + #| local.tee 1 i32.const 0 call $moonbit.init_array8 + #| local.get 1) + +///| +#doc(hidden) +pub fn wasmExportAsyncInitialize( + event_raw : Int, + waitable : Int, + code : Int, +) -> Int { + @guest0.wasmExportAsyncInitialize(event_raw, waitable, code) +} + +///| +#doc(hidden) +pub fn wasmExportAsyncInvokeGolemAgentGuest( + event_raw : Int, + waitable : Int, + code : Int, +) -> Int { + @guest0.wasmExportAsyncInvokeGolemAgentGuest(event_raw, waitable, code) +} + +///| +#doc(hidden) +pub fn wasmExportAsyncInvokeGolemToolGuest( + event_raw : Int, + waitable : Int, + code : Int, +) -> Int { + @guest.wasmExportAsyncInvokeGolemToolGuest(event_raw, waitable, code) +} + +///| +#doc(hidden) +pub fn wasmExportAsyncInvokeToolMiddleware( + event_raw : Int, + waitable : Int, + code : Int, +) -> Int { + @tool-middleware-guest.wasmExportAsyncInvokeToolMiddleware( + event_raw, waitable, code, + ) +} + +///| +#doc(hidden) +pub fn wasmExportAsyncLoad(event_raw : Int, waitable : Int, code : Int) -> Int { + @load-snapshot.wasmExportAsyncLoad(event_raw, waitable, code) +} + +///| +#doc(hidden) +pub fn wasmExportAsyncSave(event_raw : Int, waitable : Int, code : Int) -> Int { + @save-snapshot.wasmExportAsyncSave(event_raw, waitable, code) +} + +///| +#doc(hidden) +pub fn wasmExportDiscoverAgentTypes() -> Int { + @guest0.wasmExportDiscoverAgentTypes() +} + +///| +#doc(hidden) +pub fn wasmExportDiscoverAgentTypesPostReturn(p0 : Int) -> Unit { + @guest0.wasmExportDiscoverAgentTypesPostReturn(p0) +} + +///| +#doc(hidden) +pub fn wasmExportDiscoverToolMiddlewares() -> Int { + @tool-middleware-guest.wasmExportDiscoverToolMiddlewares() +} + +///| +#doc(hidden) +pub fn wasmExportDiscoverToolMiddlewaresPostReturn(p0 : Int) -> Unit { + @tool-middleware-guest.wasmExportDiscoverToolMiddlewaresPostReturn(p0) +} + +///| +#doc(hidden) +pub fn wasmExportDiscoverTools() -> Int { + @guest.wasmExportDiscoverTools() +} + +///| +#doc(hidden) +pub fn wasmExportDiscoverToolsPostReturn(p0 : Int) -> Unit { + @guest.wasmExportDiscoverToolsPostReturn(p0) +} + +///| +#doc(hidden) +pub fn wasmExportGetDefinition() -> Int { + @guest0.wasmExportGetDefinition() +} + +///| +#doc(hidden) +pub fn wasmExportGetDefinitionPostReturn(p0 : Int) -> Unit { + @guest0.wasmExportGetDefinitionPostReturn(p0) +} + +///| +#doc(hidden) +pub fn wasmExportGetTool(p0 : Int, p1 : Int) -> Int { + @guest.wasmExportGetTool(p0, p1) +} + +///| +#doc(hidden) +pub fn wasmExportGetToolMiddleware(p0 : Int, p1 : Int) -> Int { + @tool-middleware-guest.wasmExportGetToolMiddleware(p0, p1) +} + +///| +#doc(hidden) +pub fn wasmExportGetToolMiddlewarePostReturn(p0 : Int) -> Unit { + @tool-middleware-guest.wasmExportGetToolMiddlewarePostReturn(p0) +} + +///| +#doc(hidden) +pub fn wasmExportGetToolPostReturn(p0 : Int) -> Unit { + @guest.wasmExportGetToolPostReturn(p0) +} + +///| +#doc(hidden) +pub fn wasmExportInitialize(p0 : Int) -> Int { + @guest0.wasmExportInitialize(p0) +} + +///| +#doc(hidden) +pub fn wasmExportInvokeGolemAgentGuest(p0 : Int) -> Int { + @guest0.wasmExportInvokeGolemAgentGuest(p0) +} + +///| +#doc(hidden) +pub fn wasmExportInvokeGolemToolGuest(p0 : Int) -> Int { + @guest.wasmExportInvokeGolemToolGuest(p0) +} + +///| +#doc(hidden) +pub fn wasmExportInvokeToolMiddleware(p0 : Int) -> Int { + @tool-middleware-guest.wasmExportInvokeToolMiddleware(p0) +} + +///| +#doc(hidden) +pub fn wasmExportLoad(p0 : Int, p1 : Int, p2 : Int, p3 : Int) -> Int { + @load-snapshot.wasmExportLoad(p0, p1, p2, p3) +} + +///| +#doc(hidden) +pub fn wasmExportSave() -> Int { + @save-snapshot.wasmExportSave() +} diff --git a/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/agent/guest/ffi.mbt b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/agent/guest/ffi.mbt new file mode 100644 index 0000000000..f7e5767e30 --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/agent/guest/ffi.mbt @@ -0,0 +1,13522 @@ +// Generated by `wit-bindgen` 0.59.0. DO NOT EDIT! + +///| +#doc(hidden) +pub fn wasmExportInitialize(p0 : Int) -> Int { + @async-core.with_waitableset(async fn() { + @async-core.with_task_group(async fn(background_group) { + let result = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 0), + mbt_ffi_load32(p0 + 4), + ) + + let array26 : Array[@types.SchemaValueNode] = [] + for index27 = 0; index27 < mbt_ffi_load32(p0 + 12); index27 = index27 + 1 { + let iter_base = mbt_ffi_load32(p0 + 8) + index27 * 32 + + let lifted25 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue( + mbt_ffi_load8_u(iter_base + 8) != 0, + ) + 1 => @types.SchemaValueNode::S8Value(mbt_ffi_load8(iter_base + 8)) + 2 => @types.SchemaValueNode::S16Value(mbt_ffi_load16(iter_base + 8)) + 3 => @types.SchemaValueNode::S32Value(mbt_ffi_load32(iter_base + 8)) + 4 => @types.SchemaValueNode::S64Value(mbt_ffi_load64(iter_base + 8)) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8).land(0xFFFF).reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => @types.SchemaValueNode::F32Value(mbt_ffi_loadf32(iter_base + 8)) + 10 => @types.SchemaValueNode::F64Value(mbt_ffi_loadf64(iter_base + 8)) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result0 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result0) + } + 13 => { + let array : Array[Int] = [] + for index = 0 + index < mbt_ffi_load32(iter_base + 12) + index = index + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index * 4 + + array.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array) + } + 14 => { + let lifted : Int? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array1 : Array[Bool] = [] + for index2 = 0 + index2 < mbt_ffi_load32(iter_base + 12) + index2 = index2 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index2 * 1 + + array1.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array1) + } + 17 => { + let array3 : Array[Int] = [] + for index4 = 0 + index4 < mbt_ffi_load32(iter_base + 12) + index4 = index4 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index4 * 4 + + array3.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array3) + } + 18 => { + let array5 : Array[Int] = [] + for index6 = 0 + index6 < mbt_ffi_load32(iter_base + 12) + index6 = index6 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index6 * 4 + + array5.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array5) + } + 19 => { + let array7 : Array[Int] = [] + for index8 = 0 + index8 < mbt_ffi_load32(iter_base + 12) + index8 = index8 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index8 * 4 + + array7.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array7) + } + 20 => { + let array9 : Array[@types.MapEntry] = [] + for index10 = 0 + index10 < mbt_ffi_load32(iter_base + 12) + index10 = index10 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index10 * 8 + + array9.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array9) + } + 21 => { + let lifted11 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted11) + } + 22 => { + let lifted14 = match mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted12 : Int? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted12) + } + 1 => { + let lifted13 : Int? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted13) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted14) + } + 23 => { + let result15 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted17 : String? = match mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result16 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result16) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result15, + language: lifted17, + }) + } + 24 => { + let result18 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted20 : String? = match mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result19 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result19) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result18, + mime_type: lifted20, + }) + } + 25 => { + let result21 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result21) + } + 26 => { + let result22 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result22) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result23 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result23, + }) + } + 30 => { + let result24 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result24, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken(mbt_ffi_load32(iter_base + 8)), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ), + ) + _ => panic() + } + + array26.push(lifted25) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + + let lifted45 = match mbt_ffi_load8_u(p0 + 24) { + 0 => { + let result28 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 32), + mbt_ffi_load32(p0 + 36), + ) + + let result29 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 40), + mbt_ffi_load32(p0 + 44), + ) + + let lifted31 : String? = match mbt_ffi_load8_u(p0 + 48) { + 0 => Option::None + 1 => { + let result30 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 52), + mbt_ffi_load32(p0 + 56), + ) + + Option::Some(result30) + } + _ => panic() + } + + let lifted33 : String? = match mbt_ffi_load8_u(p0 + 60) { + 0 => Option::None + 1 => { + let result32 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 64), + mbt_ffi_load32(p0 + 68), + ) + + Option::Some(result32) + } + _ => panic() + } + + let lifted34 : Bool? = match mbt_ffi_load8_u(p0 + 72) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load8_u(p0 + 73) != 0) + _ => panic() + } + + let lifted36 : String? = match mbt_ffi_load8_u(p0 + 76) { + 0 => Option::None + 1 => { + let result35 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 80), + mbt_ffi_load32(p0 + 84), + ) + + Option::Some(result35) + } + _ => panic() + } + + let lifted38 : String? = match mbt_ffi_load8_u(p0 + 88) { + 0 => Option::None + 1 => { + let result37 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 92), + mbt_ffi_load32(p0 + 96), + ) + + Option::Some(result37) + } + _ => panic() + } + + let lifted40 : String? = match mbt_ffi_load8_u(p0 + 100) { + 0 => Option::None + 1 => { + let result39 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 104), + mbt_ffi_load32(p0 + 108), + ) + + Option::Some(result39) + } + _ => panic() + } + + let lifted42 : String? = match mbt_ffi_load8_u(p0 + 112) { + 0 => Option::None + 1 => { + let result41 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 116), + mbt_ffi_load32(p0 + 120), + ) + + Option::Some(result41) + } + _ => panic() + } + + let result43 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 124), + mbt_ffi_load32(p0 + 128), + ) + + @common.Principal::Oidc(@common.OidcPrincipal::{ + sub: result28, + issuer: result29, + email: lifted31, + name: lifted33, + email_verified: lifted34, + given_name: lifted36, + family_name: lifted38, + picture: lifted40, + preferred_username: lifted42, + claims: result43, + }) + } + 1 => { + let result44 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 48), + mbt_ffi_load32(p0 + 52), + ) + + @common.Principal::Agent(@common.AgentPrincipal::{ + agent_id: @types.AgentId::{ + component_id: @types.ComponentId::{ + uuid: @types.Uuid::{ + high_bits: mbt_ffi_load64(p0 + 32).reinterpret_as_uint64(), + low_bits: mbt_ffi_load64(p0 + 40).reinterpret_as_uint64(), + }, + }, + agent_id: result44, + }, + }) + } + 2 => + @common.Principal::GolemUser(@common.GolemUserPrincipal::{ + account_id: @types.AccountId::{ + uuid: @types.Uuid::{ + high_bits: mbt_ffi_load64(p0 + 32).reinterpret_as_uint64(), + low_bits: mbt_ffi_load64(p0 + 40).reinterpret_as_uint64(), + }, + }, + }) + 3 => @common.Principal::Anonymous + _ => panic() + } + + let return_result : Ref[Result[Unit, @common.AgentError]?] = Ref(None) + return_result.val = Some( + initialize( + result, + @types.SchemaValueTree::{ + value_nodes: array26, + root: mbt_ffi_load32(p0 + 16), + }, + lifted45, + background_group, + ), + ) + initialize_task_return(return_result) + }) + }) +} + +///| +fn wasmExportAsyncInitializeTaskReturn( + p0 : Int, + p1 : Int, + p2 : Int, + p3 : Int, + p4 : Int, + p5 : Int, + p6 : Int, + p7 : Int, + p8 : Int, + p9 : Int, +) = "[export]golem:agent/guest@2.0.0" "[task-return]initialize" + +///| +fn initialize_task_return( + return_result : Ref[Result[Unit, @common.AgentError]?], +) -> Unit { + match return_result.val { + Some(return_value) => { + let cleanup_list : Array[Int] = [] + + let ( + lowered505, + lowered506, + lowered507, + lowered508, + lowered509, + lowered510, + lowered511, + lowered512, + lowered513, + lowered514, + ) = match return_value { + Ok(_payload) => (0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + Err(payload46) => { + let ( + lowered, + lowered497, + lowered498, + lowered499, + lowered500, + lowered501, + lowered502, + lowered503, + lowered504, + ) = match payload46 { + InvalidInput(payload47) => { + let ptr = mbt_ffi_str2ptr(payload47) + cleanup_list.push(ptr) + + (0, ptr, payload47.length(), 0, 0, 0, 0, 0, 0) + } + InvalidMethod(payload48) => { + let ptr49 = mbt_ffi_str2ptr(payload48) + cleanup_list.push(ptr49) + + (1, ptr49, payload48.length(), 0, 0, 0, 0, 0, 0) + } + InvalidType(payload50) => { + let ptr51 = mbt_ffi_str2ptr(payload50) + cleanup_list.push(ptr51) + + (2, ptr51, payload50.length(), 0, 0, 0, 0, 0, 0) + } + InvalidAgentId(payload52) => { + let ptr53 = mbt_ffi_str2ptr(payload52) + cleanup_list.push(ptr53) + + (3, ptr53, payload52.length(), 0, 0, 0, 0, 0, 0) + } + CustomError(payload54) => { + let address416 = mbt_ffi_malloc( + payload54.graph.type_nodes.length() * 144, + ) + for index417 = 0 + index417 < payload54.graph.type_nodes.length() + index417 = index417 + 1 { + let iter_elem : @types.SchemaTypeNode = payload54.graph.type_nodes[index417] + let iter_base = address416 + index417 * 144 + + match iter_elem.body { + RefType(payload55) => { + mbt_ffi_store8(iter_base + 0, 0) + mbt_ffi_store32(iter_base + 8, payload55) + + () + } + BoolType => { + mbt_ffi_store8(iter_base + 0, 1) + + () + } + S8Type(payload57) => { + mbt_ffi_store8(iter_base + 0, 2) + + match payload57 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload59) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload59.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload61) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload61 { + Signed(payload62) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload62) + + () + } + Unsigned(payload63) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload63.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload64) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload64.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload59.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload66) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload66 { + Signed(payload67) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload67) + + () + } + Unsigned(payload68) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload68.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload69) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload69.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload59.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload71) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr72 = mbt_ffi_str2ptr(payload71) + mbt_ffi_store32(iter_base + 72, payload71.length()) + mbt_ffi_store32(iter_base + 68, ptr72) + cleanup_list.push(ptr72) + + () + } + } + + () + } + } + + () + } + S16Type(payload73) => { + mbt_ffi_store8(iter_base + 0, 3) + + match payload73 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload75) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload75.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload77) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload77 { + Signed(payload78) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload78) + + () + } + Unsigned(payload79) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload79.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload80) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload80.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload75.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload82) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload82 { + Signed(payload83) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload83) + + () + } + Unsigned(payload84) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload84.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload85) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload85.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload75.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload87) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr88 = mbt_ffi_str2ptr(payload87) + mbt_ffi_store32(iter_base + 72, payload87.length()) + mbt_ffi_store32(iter_base + 68, ptr88) + cleanup_list.push(ptr88) + + () + } + } + + () + } + } + + () + } + S32Type(payload89) => { + mbt_ffi_store8(iter_base + 0, 4) + + match payload89 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload91) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload91.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload93) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload93 { + Signed(payload94) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload94) + + () + } + Unsigned(payload95) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload95.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload96) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload96.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload91.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload98) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload98 { + Signed(payload99) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload99) + + () + } + Unsigned(payload100) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload100.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload101) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload101.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload91.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload103) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr104 = mbt_ffi_str2ptr(payload103) + mbt_ffi_store32(iter_base + 72, payload103.length()) + mbt_ffi_store32(iter_base + 68, ptr104) + cleanup_list.push(ptr104) + + () + } + } + + () + } + } + + () + } + S64Type(payload105) => { + mbt_ffi_store8(iter_base + 0, 5) + + match payload105 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload107) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload107.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload109) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload109 { + Signed(payload110) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload110) + + () + } + Unsigned(payload111) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload111.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload112) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload112.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload107.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload114) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload114 { + Signed(payload115) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload115) + + () + } + Unsigned(payload116) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload116.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload117) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload117.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload107.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload119) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr120 = mbt_ffi_str2ptr(payload119) + mbt_ffi_store32(iter_base + 72, payload119.length()) + mbt_ffi_store32(iter_base + 68, ptr120) + cleanup_list.push(ptr120) + + () + } + } + + () + } + } + + () + } + U8Type(payload121) => { + mbt_ffi_store8(iter_base + 0, 6) + + match payload121 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload123) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload123.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload125) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload125 { + Signed(payload126) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload126) + + () + } + Unsigned(payload127) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload127.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload128) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload128.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload123.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload130) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload130 { + Signed(payload131) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload131) + + () + } + Unsigned(payload132) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload132.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload133) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload133.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload123.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload135) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr136 = mbt_ffi_str2ptr(payload135) + mbt_ffi_store32(iter_base + 72, payload135.length()) + mbt_ffi_store32(iter_base + 68, ptr136) + cleanup_list.push(ptr136) + + () + } + } + + () + } + } + + () + } + U16Type(payload137) => { + mbt_ffi_store8(iter_base + 0, 7) + + match payload137 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload139) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload139.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload141) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload141 { + Signed(payload142) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload142) + + () + } + Unsigned(payload143) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload143.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload144) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload144.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload139.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload146) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload146 { + Signed(payload147) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload147) + + () + } + Unsigned(payload148) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload148.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload149) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload149.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload139.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload151) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr152 = mbt_ffi_str2ptr(payload151) + mbt_ffi_store32(iter_base + 72, payload151.length()) + mbt_ffi_store32(iter_base + 68, ptr152) + cleanup_list.push(ptr152) + + () + } + } + + () + } + } + + () + } + U32Type(payload153) => { + mbt_ffi_store8(iter_base + 0, 8) + + match payload153 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload155) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload155.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload157) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload157 { + Signed(payload158) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload158) + + () + } + Unsigned(payload159) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload159.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload160) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload160.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload155.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload162) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload162 { + Signed(payload163) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload163) + + () + } + Unsigned(payload164) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload164.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload165) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload165.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload155.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload167) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr168 = mbt_ffi_str2ptr(payload167) + mbt_ffi_store32(iter_base + 72, payload167.length()) + mbt_ffi_store32(iter_base + 68, ptr168) + cleanup_list.push(ptr168) + + () + } + } + + () + } + } + + () + } + U64Type(payload169) => { + mbt_ffi_store8(iter_base + 0, 9) + + match payload169 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload171) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload171.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload173) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload173 { + Signed(payload174) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload174) + + () + } + Unsigned(payload175) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload175.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload176) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload176.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload171.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload178) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload178 { + Signed(payload179) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload179) + + () + } + Unsigned(payload180) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload180.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload181) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload181.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload171.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload183) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr184 = mbt_ffi_str2ptr(payload183) + mbt_ffi_store32(iter_base + 72, payload183.length()) + mbt_ffi_store32(iter_base + 68, ptr184) + cleanup_list.push(ptr184) + + () + } + } + + () + } + } + + () + } + F32Type(payload185) => { + mbt_ffi_store8(iter_base + 0, 10) + + match payload185 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload187) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload187.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload189) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload189 { + Signed(payload190) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload190) + + () + } + Unsigned(payload191) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload191.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload192) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload192.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload187.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload194) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload194 { + Signed(payload195) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload195) + + () + } + Unsigned(payload196) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload196.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload197) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload197.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload187.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload199) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr200 = mbt_ffi_str2ptr(payload199) + mbt_ffi_store32(iter_base + 72, payload199.length()) + mbt_ffi_store32(iter_base + 68, ptr200) + cleanup_list.push(ptr200) + + () + } + } + + () + } + } + + () + } + F64Type(payload201) => { + mbt_ffi_store8(iter_base + 0, 11) + + match payload201 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload203) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload203.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload205) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload205 { + Signed(payload206) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload206) + + () + } + Unsigned(payload207) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload207.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload208) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload208.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload203.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload210) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload210 { + Signed(payload211) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload211) + + () + } + Unsigned(payload212) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload212.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload213) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload213.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload203.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload215) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr216 = mbt_ffi_str2ptr(payload215) + mbt_ffi_store32(iter_base + 72, payload215.length()) + mbt_ffi_store32(iter_base + 68, ptr216) + cleanup_list.push(ptr216) + + () + } + } + + () + } + } + + () + } + CharType => { + mbt_ffi_store8(iter_base + 0, 12) + + () + } + StringType => { + mbt_ffi_store8(iter_base + 0, 13) + + () + } + RecordType(payload219) => { + mbt_ffi_store8(iter_base + 0, 14) + + let address239 = mbt_ffi_malloc(payload219.length() * 68) + for index240 = 0 + index240 < payload219.length() + index240 = index240 + 1 { + let iter_elem : @types.NamedFieldType = payload219[index240] + let iter_base = address239 + index240 * 68 + + let ptr220 = mbt_ffi_str2ptr(iter_elem.name) + mbt_ffi_store32(iter_base + 4, iter_elem.name.length()) + mbt_ffi_store32(iter_base + 0, ptr220) + mbt_ffi_store32(iter_base + 8, iter_elem.body) + + match iter_elem.metadata.doc { + None => { + mbt_ffi_store8(iter_base + 12, 0) + + () + } + Some(payload222) => { + mbt_ffi_store8(iter_base + 12, 1) + + let ptr223 = mbt_ffi_str2ptr(payload222) + mbt_ffi_store32(iter_base + 20, payload222.length()) + mbt_ffi_store32(iter_base + 16, ptr223) + cleanup_list.push(ptr223) + + () + } + } + + let address = mbt_ffi_malloc( + iter_elem.metadata.aliases.length() * 8, + ) + for index225 = 0 + index225 < iter_elem.metadata.aliases.length() + index225 = index225 + 1 { + let iter_elem : String = iter_elem.metadata.aliases[index225] + let iter_base = address + index225 * 8 + + let ptr224 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr224) + cleanup_list.push(ptr224) + } + mbt_ffi_store32( + iter_base + 28, + iter_elem.metadata.aliases.length(), + ) + mbt_ffi_store32(iter_base + 24, address) + + let address227 = mbt_ffi_malloc( + iter_elem.metadata.examples.length() * 8, + ) + for index228 = 0 + index228 < iter_elem.metadata.examples.length() + index228 = index228 + 1 { + let iter_elem : String = iter_elem.metadata.examples[index228] + let iter_base = address227 + index228 * 8 + + let ptr226 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr226) + cleanup_list.push(ptr226) + } + mbt_ffi_store32( + iter_base + 36, + iter_elem.metadata.examples.length(), + ) + mbt_ffi_store32(iter_base + 32, address227) + + match iter_elem.metadata.deprecated { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload230) => { + mbt_ffi_store8(iter_base + 40, 1) + + let ptr231 = mbt_ffi_str2ptr(payload230) + mbt_ffi_store32(iter_base + 48, payload230.length()) + mbt_ffi_store32(iter_base + 44, ptr231) + cleanup_list.push(ptr231) + + () + } + } + + match iter_elem.metadata.role { + None => { + mbt_ffi_store8(iter_base + 52, 0) + + () + } + Some(payload233) => { + mbt_ffi_store8(iter_base + 52, 1) + + match payload233 { + Multimodal => { + mbt_ffi_store8(iter_base + 56, 0) + + () + } + UnstructuredText => { + mbt_ffi_store8(iter_base + 56, 1) + + () + } + UnstructuredBinary => { + mbt_ffi_store8(iter_base + 56, 2) + + () + } + Other(payload237) => { + mbt_ffi_store8(iter_base + 56, 3) + + let ptr238 = mbt_ffi_str2ptr(payload237) + mbt_ffi_store32( + iter_base + 64, + payload237.length(), + ) + mbt_ffi_store32(iter_base + 60, ptr238) + cleanup_list.push(ptr238) + + () + } + } + + () + } + } + cleanup_list.push(ptr220) + cleanup_list.push(address) + cleanup_list.push(address227) + } + mbt_ffi_store32(iter_base + 12, payload219.length()) + mbt_ffi_store32(iter_base + 8, address239) + cleanup_list.push(address239) + + () + } + VariantType(payload241) => { + mbt_ffi_store8(iter_base + 0, 15) + + let address264 = mbt_ffi_malloc(payload241.length() * 72) + for index265 = 0 + index265 < payload241.length() + index265 = index265 + 1 { + let iter_elem : @types.VariantCaseType = payload241[index265] + let iter_base = address264 + index265 * 72 + + let ptr242 = mbt_ffi_str2ptr(iter_elem.name) + mbt_ffi_store32(iter_base + 4, iter_elem.name.length()) + mbt_ffi_store32(iter_base + 0, ptr242) + + match iter_elem.payload { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload244) => { + mbt_ffi_store8(iter_base + 8, 1) + mbt_ffi_store32(iter_base + 12, payload244) + + () + } + } + + match iter_elem.metadata.doc { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload246) => { + mbt_ffi_store8(iter_base + 16, 1) + + let ptr247 = mbt_ffi_str2ptr(payload246) + mbt_ffi_store32(iter_base + 24, payload246.length()) + mbt_ffi_store32(iter_base + 20, ptr247) + cleanup_list.push(ptr247) + + () + } + } + + let address249 = mbt_ffi_malloc( + iter_elem.metadata.aliases.length() * 8, + ) + for index250 = 0 + index250 < iter_elem.metadata.aliases.length() + index250 = index250 + 1 { + let iter_elem : String = iter_elem.metadata.aliases[index250] + let iter_base = address249 + index250 * 8 + + let ptr248 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr248) + cleanup_list.push(ptr248) + } + mbt_ffi_store32( + iter_base + 32, + iter_elem.metadata.aliases.length(), + ) + mbt_ffi_store32(iter_base + 28, address249) + + let address252 = mbt_ffi_malloc( + iter_elem.metadata.examples.length() * 8, + ) + for index253 = 0 + index253 < iter_elem.metadata.examples.length() + index253 = index253 + 1 { + let iter_elem : String = iter_elem.metadata.examples[index253] + let iter_base = address252 + index253 * 8 + + let ptr251 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr251) + cleanup_list.push(ptr251) + } + mbt_ffi_store32( + iter_base + 40, + iter_elem.metadata.examples.length(), + ) + mbt_ffi_store32(iter_base + 36, address252) + + match iter_elem.metadata.deprecated { + None => { + mbt_ffi_store8(iter_base + 44, 0) + + () + } + Some(payload255) => { + mbt_ffi_store8(iter_base + 44, 1) + + let ptr256 = mbt_ffi_str2ptr(payload255) + mbt_ffi_store32(iter_base + 52, payload255.length()) + mbt_ffi_store32(iter_base + 48, ptr256) + cleanup_list.push(ptr256) + + () + } + } + + match iter_elem.metadata.role { + None => { + mbt_ffi_store8(iter_base + 56, 0) + + () + } + Some(payload258) => { + mbt_ffi_store8(iter_base + 56, 1) + + match payload258 { + Multimodal => { + mbt_ffi_store8(iter_base + 60, 0) + + () + } + UnstructuredText => { + mbt_ffi_store8(iter_base + 60, 1) + + () + } + UnstructuredBinary => { + mbt_ffi_store8(iter_base + 60, 2) + + () + } + Other(payload262) => { + mbt_ffi_store8(iter_base + 60, 3) + + let ptr263 = mbt_ffi_str2ptr(payload262) + mbt_ffi_store32( + iter_base + 68, + payload262.length(), + ) + mbt_ffi_store32(iter_base + 64, ptr263) + cleanup_list.push(ptr263) + + () + } + } + + () + } + } + cleanup_list.push(ptr242) + cleanup_list.push(address249) + cleanup_list.push(address252) + } + mbt_ffi_store32(iter_base + 12, payload241.length()) + mbt_ffi_store32(iter_base + 8, address264) + cleanup_list.push(address264) + + () + } + EnumType(payload266) => { + mbt_ffi_store8(iter_base + 0, 16) + + let address268 = mbt_ffi_malloc(payload266.length() * 8) + for index269 = 0 + index269 < payload266.length() + index269 = index269 + 1 { + let iter_elem : String = payload266[index269] + let iter_base = address268 + index269 * 8 + + let ptr267 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr267) + cleanup_list.push(ptr267) + } + mbt_ffi_store32(iter_base + 12, payload266.length()) + mbt_ffi_store32(iter_base + 8, address268) + cleanup_list.push(address268) + + () + } + FlagsType(payload270) => { + mbt_ffi_store8(iter_base + 0, 17) + + let address272 = mbt_ffi_malloc(payload270.length() * 8) + for index273 = 0 + index273 < payload270.length() + index273 = index273 + 1 { + let iter_elem : String = payload270[index273] + let iter_base = address272 + index273 * 8 + + let ptr271 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr271) + cleanup_list.push(ptr271) + } + mbt_ffi_store32(iter_base + 12, payload270.length()) + mbt_ffi_store32(iter_base + 8, address272) + cleanup_list.push(address272) + + () + } + TupleType(payload274) => { + mbt_ffi_store8(iter_base + 0, 18) + + let address275 = mbt_ffi_malloc(payload274.length() * 4) + for index276 = 0 + index276 < payload274.length() + index276 = index276 + 1 { + let iter_elem : Int = payload274[index276] + let iter_base = address275 + index276 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(iter_base + 12, payload274.length()) + mbt_ffi_store32(iter_base + 8, address275) + cleanup_list.push(address275) + + () + } + ListType(payload277) => { + mbt_ffi_store8(iter_base + 0, 19) + mbt_ffi_store32(iter_base + 8, payload277) + + () + } + FixedListType(payload278) => { + mbt_ffi_store8(iter_base + 0, 20) + mbt_ffi_store32(iter_base + 8, payload278.element) + mbt_ffi_store32( + iter_base + 12, + payload278.length.reinterpret_as_int(), + ) + + () + } + MapType(payload279) => { + mbt_ffi_store8(iter_base + 0, 21) + mbt_ffi_store32(iter_base + 8, payload279.key) + mbt_ffi_store32(iter_base + 12, payload279.value) + + () + } + OptionType(payload280) => { + mbt_ffi_store8(iter_base + 0, 22) + mbt_ffi_store32(iter_base + 8, payload280) + + () + } + ResultType(payload281) => { + mbt_ffi_store8(iter_base + 0, 23) + + match payload281.ok { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload283) => { + mbt_ffi_store8(iter_base + 8, 1) + mbt_ffi_store32(iter_base + 12, payload283) + + () + } + } + + match payload281.err { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload285) => { + mbt_ffi_store8(iter_base + 16, 1) + mbt_ffi_store32(iter_base + 20, payload285) + + () + } + } + + () + } + TextType(payload286) => { + mbt_ffi_store8(iter_base + 0, 24) + + match payload286.languages { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload288) => { + mbt_ffi_store8(iter_base + 8, 1) + + let address290 = mbt_ffi_malloc(payload288.length() * 8) + for index291 = 0 + index291 < payload288.length() + index291 = index291 + 1 { + let iter_elem : String = payload288[index291] + let iter_base = address290 + index291 * 8 + + let ptr289 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr289) + cleanup_list.push(ptr289) + } + mbt_ffi_store32(iter_base + 16, payload288.length()) + mbt_ffi_store32(iter_base + 12, address290) + cleanup_list.push(address290) + + () + } + } + + match payload286.min_length { + None => { + mbt_ffi_store8(iter_base + 20, 0) + + () + } + Some(payload293) => { + mbt_ffi_store8(iter_base + 20, 1) + mbt_ffi_store32( + iter_base + 24, + payload293.reinterpret_as_int(), + ) + + () + } + } + + match payload286.max_length { + None => { + mbt_ffi_store8(iter_base + 28, 0) + + () + } + Some(payload295) => { + mbt_ffi_store8(iter_base + 28, 1) + mbt_ffi_store32( + iter_base + 32, + payload295.reinterpret_as_int(), + ) + + () + } + } + + match payload286.regex { + None => { + mbt_ffi_store8(iter_base + 36, 0) + + () + } + Some(payload297) => { + mbt_ffi_store8(iter_base + 36, 1) + + let ptr298 = mbt_ffi_str2ptr(payload297) + mbt_ffi_store32(iter_base + 44, payload297.length()) + mbt_ffi_store32(iter_base + 40, ptr298) + cleanup_list.push(ptr298) + + () + } + } + + () + } + BinaryType(payload299) => { + mbt_ffi_store8(iter_base + 0, 25) + + match payload299.mime_types { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload301) => { + mbt_ffi_store8(iter_base + 8, 1) + + let address303 = mbt_ffi_malloc(payload301.length() * 8) + for index304 = 0 + index304 < payload301.length() + index304 = index304 + 1 { + let iter_elem : String = payload301[index304] + let iter_base = address303 + index304 * 8 + + let ptr302 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr302) + cleanup_list.push(ptr302) + } + mbt_ffi_store32(iter_base + 16, payload301.length()) + mbt_ffi_store32(iter_base + 12, address303) + cleanup_list.push(address303) + + () + } + } + + match payload299.min_bytes { + None => { + mbt_ffi_store8(iter_base + 20, 0) + + () + } + Some(payload306) => { + mbt_ffi_store8(iter_base + 20, 1) + mbt_ffi_store32( + iter_base + 24, + payload306.reinterpret_as_int(), + ) + + () + } + } + + match payload299.max_bytes { + None => { + mbt_ffi_store8(iter_base + 28, 0) + + () + } + Some(payload308) => { + mbt_ffi_store8(iter_base + 28, 1) + mbt_ffi_store32( + iter_base + 32, + payload308.reinterpret_as_int(), + ) + + () + } + } + + () + } + PathType(payload309) => { + mbt_ffi_store8(iter_base + 0, 26) + mbt_ffi_store8( + iter_base + 8, + payload309.direction.ordinal(), + ) + mbt_ffi_store8(iter_base + 9, payload309.kind.ordinal()) + + match payload309.allowed_mime_types { + None => { + mbt_ffi_store8(iter_base + 12, 0) + + () + } + Some(payload311) => { + mbt_ffi_store8(iter_base + 12, 1) + + let address313 = mbt_ffi_malloc(payload311.length() * 8) + for index314 = 0 + index314 < payload311.length() + index314 = index314 + 1 { + let iter_elem : String = payload311[index314] + let iter_base = address313 + index314 * 8 + + let ptr312 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr312) + cleanup_list.push(ptr312) + } + mbt_ffi_store32(iter_base + 20, payload311.length()) + mbt_ffi_store32(iter_base + 16, address313) + cleanup_list.push(address313) + + () + } + } + + match payload309.allowed_extensions { + None => { + mbt_ffi_store8(iter_base + 24, 0) + + () + } + Some(payload316) => { + mbt_ffi_store8(iter_base + 24, 1) + + let address318 = mbt_ffi_malloc(payload316.length() * 8) + for index319 = 0 + index319 < payload316.length() + index319 = index319 + 1 { + let iter_elem : String = payload316[index319] + let iter_base = address318 + index319 * 8 + + let ptr317 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr317) + cleanup_list.push(ptr317) + } + mbt_ffi_store32(iter_base + 32, payload316.length()) + mbt_ffi_store32(iter_base + 28, address318) + cleanup_list.push(address318) + + () + } + } + + () + } + UrlType(payload320) => { + mbt_ffi_store8(iter_base + 0, 27) + + match payload320.allowed_schemes { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload322) => { + mbt_ffi_store8(iter_base + 8, 1) + + let address324 = mbt_ffi_malloc(payload322.length() * 8) + for index325 = 0 + index325 < payload322.length() + index325 = index325 + 1 { + let iter_elem : String = payload322[index325] + let iter_base = address324 + index325 * 8 + + let ptr323 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr323) + cleanup_list.push(ptr323) + } + mbt_ffi_store32(iter_base + 16, payload322.length()) + mbt_ffi_store32(iter_base + 12, address324) + cleanup_list.push(address324) + + () + } + } + + match payload320.allowed_hosts { + None => { + mbt_ffi_store8(iter_base + 20, 0) + + () + } + Some(payload327) => { + mbt_ffi_store8(iter_base + 20, 1) + + let address329 = mbt_ffi_malloc(payload327.length() * 8) + for index330 = 0 + index330 < payload327.length() + index330 = index330 + 1 { + let iter_elem : String = payload327[index330] + let iter_base = address329 + index330 * 8 + + let ptr328 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr328) + cleanup_list.push(ptr328) + } + mbt_ffi_store32(iter_base + 28, payload327.length()) + mbt_ffi_store32(iter_base + 24, address329) + cleanup_list.push(address329) + + () + } + } + + () + } + DatetimeType => { + mbt_ffi_store8(iter_base + 0, 28) + + () + } + DurationType => { + mbt_ffi_store8(iter_base + 0, 29) + + () + } + QuantityType(payload333) => { + mbt_ffi_store8(iter_base + 0, 30) + + let ptr334 = mbt_ffi_str2ptr(payload333.base_unit) + mbt_ffi_store32( + iter_base + 12, + payload333.base_unit.length(), + ) + mbt_ffi_store32(iter_base + 8, ptr334) + + let address336 = mbt_ffi_malloc( + payload333.allowed_suffixes.length() * 8, + ) + for index337 = 0 + index337 < payload333.allowed_suffixes.length() + index337 = index337 + 1 { + let iter_elem : String = payload333.allowed_suffixes[index337] + let iter_base = address336 + index337 * 8 + + let ptr335 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr335) + cleanup_list.push(ptr335) + } + mbt_ffi_store32( + iter_base + 20, + payload333.allowed_suffixes.length(), + ) + mbt_ffi_store32(iter_base + 16, address336) + + match payload333.min { + None => { + mbt_ffi_store8(iter_base + 24, 0) + + () + } + Some(payload339) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64(iter_base + 32, payload339.mantissa) + mbt_ffi_store32(iter_base + 40, payload339.scale) + + let ptr340 = mbt_ffi_str2ptr(payload339.unit) + mbt_ffi_store32( + iter_base + 48, + payload339.unit.length(), + ) + mbt_ffi_store32(iter_base + 44, ptr340) + cleanup_list.push(ptr340) + + () + } + } + + match payload333.max { + None => { + mbt_ffi_store8(iter_base + 56, 0) + + () + } + Some(payload342) => { + mbt_ffi_store8(iter_base + 56, 1) + mbt_ffi_store64(iter_base + 64, payload342.mantissa) + mbt_ffi_store32(iter_base + 72, payload342.scale) + + let ptr343 = mbt_ffi_str2ptr(payload342.unit) + mbt_ffi_store32( + iter_base + 80, + payload342.unit.length(), + ) + mbt_ffi_store32(iter_base + 76, ptr343) + cleanup_list.push(ptr343) + + () + } + } + cleanup_list.push(ptr334) + cleanup_list.push(address336) + + () + } + UnionType(payload344) => { + mbt_ffi_store8(iter_base + 0, 31) + + let address380 = mbt_ffi_malloc( + payload344.branches.length() * 92, + ) + for index381 = 0 + index381 < payload344.branches.length() + index381 = index381 + 1 { + let iter_elem : @types.UnionBranch = payload344.branches[index381] + let iter_base = address380 + index381 * 92 + + let ptr345 = mbt_ffi_str2ptr(iter_elem.tag) + mbt_ffi_store32(iter_base + 4, iter_elem.tag.length()) + mbt_ffi_store32(iter_base + 0, ptr345) + mbt_ffi_store32(iter_base + 8, iter_elem.body) + + match iter_elem.discriminator { + Prefix(payload346) => { + mbt_ffi_store8(iter_base + 12, 0) + + let ptr347 = mbt_ffi_str2ptr(payload346) + mbt_ffi_store32(iter_base + 20, payload346.length()) + mbt_ffi_store32(iter_base + 16, ptr347) + cleanup_list.push(ptr347) + + () + } + Suffix(payload348) => { + mbt_ffi_store8(iter_base + 12, 1) + + let ptr349 = mbt_ffi_str2ptr(payload348) + mbt_ffi_store32(iter_base + 20, payload348.length()) + mbt_ffi_store32(iter_base + 16, ptr349) + cleanup_list.push(ptr349) + + () + } + Contains(payload350) => { + mbt_ffi_store8(iter_base + 12, 2) + + let ptr351 = mbt_ffi_str2ptr(payload350) + mbt_ffi_store32(iter_base + 20, payload350.length()) + mbt_ffi_store32(iter_base + 16, ptr351) + cleanup_list.push(ptr351) + + () + } + Regex(payload352) => { + mbt_ffi_store8(iter_base + 12, 3) + + let ptr353 = mbt_ffi_str2ptr(payload352) + mbt_ffi_store32(iter_base + 20, payload352.length()) + mbt_ffi_store32(iter_base + 16, ptr353) + cleanup_list.push(ptr353) + + () + } + FieldEquals(payload354) => { + mbt_ffi_store8(iter_base + 12, 4) + + let ptr355 = mbt_ffi_str2ptr(payload354.field_name) + mbt_ffi_store32( + iter_base + 20, + payload354.field_name.length(), + ) + mbt_ffi_store32(iter_base + 16, ptr355) + + match payload354.literal { + None => { + mbt_ffi_store8(iter_base + 24, 0) + + () + } + Some(payload357) => { + mbt_ffi_store8(iter_base + 24, 1) + + let ptr358 = mbt_ffi_str2ptr(payload357) + mbt_ffi_store32( + iter_base + 32, + payload357.length(), + ) + mbt_ffi_store32(iter_base + 28, ptr358) + cleanup_list.push(ptr358) + + () + } + } + cleanup_list.push(ptr355) + + () + } + FieldAbsent(payload359) => { + mbt_ffi_store8(iter_base + 12, 5) + + let ptr360 = mbt_ffi_str2ptr(payload359) + mbt_ffi_store32(iter_base + 20, payload359.length()) + mbt_ffi_store32(iter_base + 16, ptr360) + cleanup_list.push(ptr360) + + () + } + } + + match iter_elem.metadata.doc { + None => { + mbt_ffi_store8(iter_base + 36, 0) + + () + } + Some(payload362) => { + mbt_ffi_store8(iter_base + 36, 1) + + let ptr363 = mbt_ffi_str2ptr(payload362) + mbt_ffi_store32(iter_base + 44, payload362.length()) + mbt_ffi_store32(iter_base + 40, ptr363) + cleanup_list.push(ptr363) + + () + } + } + + let address365 = mbt_ffi_malloc( + iter_elem.metadata.aliases.length() * 8, + ) + for index366 = 0 + index366 < iter_elem.metadata.aliases.length() + index366 = index366 + 1 { + let iter_elem : String = iter_elem.metadata.aliases[index366] + let iter_base = address365 + index366 * 8 + + let ptr364 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr364) + cleanup_list.push(ptr364) + } + mbt_ffi_store32( + iter_base + 52, + iter_elem.metadata.aliases.length(), + ) + mbt_ffi_store32(iter_base + 48, address365) + + let address368 = mbt_ffi_malloc( + iter_elem.metadata.examples.length() * 8, + ) + for index369 = 0 + index369 < iter_elem.metadata.examples.length() + index369 = index369 + 1 { + let iter_elem : String = iter_elem.metadata.examples[index369] + let iter_base = address368 + index369 * 8 + + let ptr367 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr367) + cleanup_list.push(ptr367) + } + mbt_ffi_store32( + iter_base + 60, + iter_elem.metadata.examples.length(), + ) + mbt_ffi_store32(iter_base + 56, address368) + + match iter_elem.metadata.deprecated { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload371) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr372 = mbt_ffi_str2ptr(payload371) + mbt_ffi_store32(iter_base + 72, payload371.length()) + mbt_ffi_store32(iter_base + 68, ptr372) + cleanup_list.push(ptr372) + + () + } + } + + match iter_elem.metadata.role { + None => { + mbt_ffi_store8(iter_base + 76, 0) + + () + } + Some(payload374) => { + mbt_ffi_store8(iter_base + 76, 1) + + match payload374 { + Multimodal => { + mbt_ffi_store8(iter_base + 80, 0) + + () + } + UnstructuredText => { + mbt_ffi_store8(iter_base + 80, 1) + + () + } + UnstructuredBinary => { + mbt_ffi_store8(iter_base + 80, 2) + + () + } + Other(payload378) => { + mbt_ffi_store8(iter_base + 80, 3) + + let ptr379 = mbt_ffi_str2ptr(payload378) + mbt_ffi_store32( + iter_base + 88, + payload378.length(), + ) + mbt_ffi_store32(iter_base + 84, ptr379) + cleanup_list.push(ptr379) + + () + } + } + + () + } + } + cleanup_list.push(ptr345) + cleanup_list.push(address365) + cleanup_list.push(address368) + } + mbt_ffi_store32( + iter_base + 12, + payload344.branches.length(), + ) + mbt_ffi_store32(iter_base + 8, address380) + cleanup_list.push(address380) + + () + } + SecretType(payload382) => { + mbt_ffi_store8(iter_base + 0, 32) + mbt_ffi_store32(iter_base + 8, payload382.inner) + + match payload382.category { + None => { + mbt_ffi_store8(iter_base + 12, 0) + + () + } + Some(payload384) => { + mbt_ffi_store8(iter_base + 12, 1) + + let ptr385 = mbt_ffi_str2ptr(payload384) + mbt_ffi_store32(iter_base + 20, payload384.length()) + mbt_ffi_store32(iter_base + 16, ptr385) + cleanup_list.push(ptr385) + + () + } + } + + () + } + QuotaTokenType(payload386) => { + mbt_ffi_store8(iter_base + 0, 33) + + match payload386.resource_name { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload388) => { + mbt_ffi_store8(iter_base + 8, 1) + + let ptr389 = mbt_ffi_str2ptr(payload388) + mbt_ffi_store32(iter_base + 16, payload388.length()) + mbt_ffi_store32(iter_base + 12, ptr389) + cleanup_list.push(ptr389) + + () + } + } + + () + } + PermissionCardType(payload390) => { + mbt_ffi_store8(iter_base + 0, 34) + mbt_ffi_store8( + iter_base + 8, + if payload390.polymorphic { + 1 + } else { + 0 + }, + ) + + () + } + FutureType(payload391) => { + mbt_ffi_store8(iter_base + 0, 35) + + match payload391 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload393) => { + mbt_ffi_store8(iter_base + 8, 1) + mbt_ffi_store32(iter_base + 12, payload393) + + () + } + } + + () + } + StreamType(payload394) => { + mbt_ffi_store8(iter_base + 0, 36) + + match payload394 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload396) => { + mbt_ffi_store8(iter_base + 8, 1) + mbt_ffi_store32(iter_base + 12, payload396) + + () + } + } + + () + } + } + + match iter_elem.metadata.doc { + None => { + mbt_ffi_store8(iter_base + 88, 0) + + () + } + Some(payload398) => { + mbt_ffi_store8(iter_base + 88, 1) + + let ptr399 = mbt_ffi_str2ptr(payload398) + mbt_ffi_store32(iter_base + 96, payload398.length()) + mbt_ffi_store32(iter_base + 92, ptr399) + cleanup_list.push(ptr399) + + () + } + } + + let address401 = mbt_ffi_malloc( + iter_elem.metadata.aliases.length() * 8, + ) + for index402 = 0 + index402 < iter_elem.metadata.aliases.length() + index402 = index402 + 1 { + let iter_elem : String = iter_elem.metadata.aliases[index402] + let iter_base = address401 + index402 * 8 + + let ptr400 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr400) + cleanup_list.push(ptr400) + } + mbt_ffi_store32( + iter_base + 104, + iter_elem.metadata.aliases.length(), + ) + mbt_ffi_store32(iter_base + 100, address401) + + let address404 = mbt_ffi_malloc( + iter_elem.metadata.examples.length() * 8, + ) + for index405 = 0 + index405 < iter_elem.metadata.examples.length() + index405 = index405 + 1 { + let iter_elem : String = iter_elem.metadata.examples[index405] + let iter_base = address404 + index405 * 8 + + let ptr403 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr403) + cleanup_list.push(ptr403) + } + mbt_ffi_store32( + iter_base + 112, + iter_elem.metadata.examples.length(), + ) + mbt_ffi_store32(iter_base + 108, address404) + + match iter_elem.metadata.deprecated { + None => { + mbt_ffi_store8(iter_base + 116, 0) + + () + } + Some(payload407) => { + mbt_ffi_store8(iter_base + 116, 1) + + let ptr408 = mbt_ffi_str2ptr(payload407) + mbt_ffi_store32(iter_base + 124, payload407.length()) + mbt_ffi_store32(iter_base + 120, ptr408) + cleanup_list.push(ptr408) + + () + } + } + + match iter_elem.metadata.role { + None => { + mbt_ffi_store8(iter_base + 128, 0) + + () + } + Some(payload410) => { + mbt_ffi_store8(iter_base + 128, 1) + + match payload410 { + Multimodal => { + mbt_ffi_store8(iter_base + 132, 0) + + () + } + UnstructuredText => { + mbt_ffi_store8(iter_base + 132, 1) + + () + } + UnstructuredBinary => { + mbt_ffi_store8(iter_base + 132, 2) + + () + } + Other(payload414) => { + mbt_ffi_store8(iter_base + 132, 3) + + let ptr415 = mbt_ffi_str2ptr(payload414) + mbt_ffi_store32(iter_base + 140, payload414.length()) + mbt_ffi_store32(iter_base + 136, ptr415) + cleanup_list.push(ptr415) + + () + } + } + + () + } + } + cleanup_list.push(address401) + cleanup_list.push(address404) + } + + let address422 = mbt_ffi_malloc( + payload54.graph.defs.length() * 24, + ) + for index423 = 0 + index423 < payload54.graph.defs.length() + index423 = index423 + 1 { + let iter_elem : @types.SchemaTypeDef = payload54.graph.defs[index423] + let iter_base = address422 + index423 * 24 + + let ptr418 = mbt_ffi_str2ptr(iter_elem.id) + mbt_ffi_store32(iter_base + 4, iter_elem.id.length()) + mbt_ffi_store32(iter_base + 0, ptr418) + + match iter_elem.name { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload420) => { + mbt_ffi_store8(iter_base + 8, 1) + + let ptr421 = mbt_ffi_str2ptr(payload420) + mbt_ffi_store32(iter_base + 16, payload420.length()) + mbt_ffi_store32(iter_base + 12, ptr421) + cleanup_list.push(ptr421) + + () + } + } + mbt_ffi_store32(iter_base + 20, iter_elem.body) + cleanup_list.push(ptr418) + } + + let address495 = mbt_ffi_malloc( + payload54.value.value_nodes.length() * 32, + ) + for index496 = 0 + index496 < payload54.value.value_nodes.length() + index496 = index496 + 1 { + let iter_elem : @types.SchemaValueNode = payload54.value.value_nodes[index496] + let iter_base = address495 + index496 * 32 + + match iter_elem { + BoolValue(payload424) => { + mbt_ffi_store8(iter_base + 0, 0) + mbt_ffi_store8( + iter_base + 8, + if payload424 { + 1 + } else { + 0 + }, + ) + + () + } + S8Value(payload425) => { + mbt_ffi_store8(iter_base + 0, 1) + mbt_ffi_store8(iter_base + 8, mbt_ffi_extend8(payload425)) + + () + } + S16Value(payload426) => { + mbt_ffi_store8(iter_base + 0, 2) + mbt_ffi_store16(iter_base + 8, mbt_ffi_extend16(payload426)) + + () + } + S32Value(payload427) => { + mbt_ffi_store8(iter_base + 0, 3) + mbt_ffi_store32(iter_base + 8, payload427) + + () + } + S64Value(payload428) => { + mbt_ffi_store8(iter_base + 0, 4) + mbt_ffi_store64(iter_base + 8, payload428) + + () + } + U8Value(payload429) => { + mbt_ffi_store8(iter_base + 0, 5) + mbt_ffi_store8(iter_base + 8, payload429.to_int()) + + () + } + U16Value(payload430) => { + mbt_ffi_store8(iter_base + 0, 6) + mbt_ffi_store16( + iter_base + 8, + payload430.reinterpret_as_int(), + ) + + () + } + U32Value(payload431) => { + mbt_ffi_store8(iter_base + 0, 7) + mbt_ffi_store32( + iter_base + 8, + payload431.reinterpret_as_int(), + ) + + () + } + U64Value(payload432) => { + mbt_ffi_store8(iter_base + 0, 8) + mbt_ffi_store64( + iter_base + 8, + payload432.reinterpret_as_int64(), + ) + + () + } + F32Value(payload433) => { + mbt_ffi_store8(iter_base + 0, 9) + mbt_ffi_storef32(iter_base + 8, payload433) + + () + } + F64Value(payload434) => { + mbt_ffi_store8(iter_base + 0, 10) + mbt_ffi_storef64(iter_base + 8, payload434) + + () + } + CharValue(payload435) => { + mbt_ffi_store8(iter_base + 0, 11) + mbt_ffi_store32(iter_base + 8, payload435.to_int()) + + () + } + StringValue(payload436) => { + mbt_ffi_store8(iter_base + 0, 12) + + let ptr437 = mbt_ffi_str2ptr(payload436) + mbt_ffi_store32(iter_base + 12, payload436.length()) + mbt_ffi_store32(iter_base + 8, ptr437) + cleanup_list.push(ptr437) + + () + } + RecordValue(payload438) => { + mbt_ffi_store8(iter_base + 0, 13) + + let address439 = mbt_ffi_malloc(payload438.length() * 4) + for index440 = 0 + index440 < payload438.length() + index440 = index440 + 1 { + let iter_elem : Int = payload438[index440] + let iter_base = address439 + index440 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(iter_base + 12, payload438.length()) + mbt_ffi_store32(iter_base + 8, address439) + cleanup_list.push(address439) + + () + } + VariantValue(payload441) => { + mbt_ffi_store8(iter_base + 0, 14) + mbt_ffi_store32( + iter_base + 8, + payload441.case.reinterpret_as_int(), + ) + + match payload441.payload { + None => { + mbt_ffi_store8(iter_base + 12, 0) + + () + } + Some(payload443) => { + mbt_ffi_store8(iter_base + 12, 1) + mbt_ffi_store32(iter_base + 16, payload443) + + () + } + } + + () + } + EnumValue(payload444) => { + mbt_ffi_store8(iter_base + 0, 15) + mbt_ffi_store32( + iter_base + 8, + payload444.reinterpret_as_int(), + ) + + () + } + FlagsValue(payload445) => { + mbt_ffi_store8(iter_base + 0, 16) + + let address446 = mbt_ffi_malloc(payload445.length() * 1) + for index447 = 0 + index447 < payload445.length() + index447 = index447 + 1 { + let iter_elem : Bool = payload445[index447] + let iter_base = address446 + index447 * 1 + mbt_ffi_store8( + iter_base + 0, + if iter_elem { + 1 + } else { + 0 + }, + ) + } + mbt_ffi_store32(iter_base + 12, payload445.length()) + mbt_ffi_store32(iter_base + 8, address446) + cleanup_list.push(address446) + + () + } + TupleValue(payload448) => { + mbt_ffi_store8(iter_base + 0, 17) + + let address449 = mbt_ffi_malloc(payload448.length() * 4) + for index450 = 0 + index450 < payload448.length() + index450 = index450 + 1 { + let iter_elem : Int = payload448[index450] + let iter_base = address449 + index450 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(iter_base + 12, payload448.length()) + mbt_ffi_store32(iter_base + 8, address449) + cleanup_list.push(address449) + + () + } + ListValue(payload451) => { + mbt_ffi_store8(iter_base + 0, 18) + + let address452 = mbt_ffi_malloc(payload451.length() * 4) + for index453 = 0 + index453 < payload451.length() + index453 = index453 + 1 { + let iter_elem : Int = payload451[index453] + let iter_base = address452 + index453 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(iter_base + 12, payload451.length()) + mbt_ffi_store32(iter_base + 8, address452) + cleanup_list.push(address452) + + () + } + FixedListValue(payload454) => { + mbt_ffi_store8(iter_base + 0, 19) + + let address455 = mbt_ffi_malloc(payload454.length() * 4) + for index456 = 0 + index456 < payload454.length() + index456 = index456 + 1 { + let iter_elem : Int = payload454[index456] + let iter_base = address455 + index456 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(iter_base + 12, payload454.length()) + mbt_ffi_store32(iter_base + 8, address455) + cleanup_list.push(address455) + + () + } + MapValue(payload457) => { + mbt_ffi_store8(iter_base + 0, 20) + + let address458 = mbt_ffi_malloc(payload457.length() * 8) + for index459 = 0 + index459 < payload457.length() + index459 = index459 + 1 { + let iter_elem : @types.MapEntry = payload457[index459] + let iter_base = address458 + index459 * 8 + mbt_ffi_store32(iter_base + 0, iter_elem.key) + mbt_ffi_store32(iter_base + 4, iter_elem.value) + } + mbt_ffi_store32(iter_base + 12, payload457.length()) + mbt_ffi_store32(iter_base + 8, address458) + cleanup_list.push(address458) + + () + } + OptionValue(payload460) => { + mbt_ffi_store8(iter_base + 0, 21) + + match payload460 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload462) => { + mbt_ffi_store8(iter_base + 8, 1) + mbt_ffi_store32(iter_base + 12, payload462) + + () + } + } + + () + } + ResultValue(payload463) => { + mbt_ffi_store8(iter_base + 0, 22) + + match payload463 { + OkValue(payload464) => { + mbt_ffi_store8(iter_base + 8, 0) + + match payload464 { + None => { + mbt_ffi_store8(iter_base + 12, 0) + + () + } + Some(payload466) => { + mbt_ffi_store8(iter_base + 12, 1) + mbt_ffi_store32(iter_base + 16, payload466) + + () + } + } + + () + } + ErrValue(payload467) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload467 { + None => { + mbt_ffi_store8(iter_base + 12, 0) + + () + } + Some(payload469) => { + mbt_ffi_store8(iter_base + 12, 1) + mbt_ffi_store32(iter_base + 16, payload469) + + () + } + } + + () + } + } + + () + } + TextValue(payload470) => { + mbt_ffi_store8(iter_base + 0, 23) + + let ptr471 = mbt_ffi_str2ptr(payload470.text) + mbt_ffi_store32(iter_base + 12, payload470.text.length()) + mbt_ffi_store32(iter_base + 8, ptr471) + + match payload470.language { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload473) => { + mbt_ffi_store8(iter_base + 16, 1) + + let ptr474 = mbt_ffi_str2ptr(payload473) + mbt_ffi_store32(iter_base + 24, payload473.length()) + mbt_ffi_store32(iter_base + 20, ptr474) + cleanup_list.push(ptr474) + + () + } + } + cleanup_list.push(ptr471) + + () + } + BinaryValue(payload475) => { + mbt_ffi_store8(iter_base + 0, 24) + + let ptr476 = mbt_ffi_bytes2ptr(payload475.bytes) + + mbt_ffi_store32(iter_base + 12, payload475.bytes.length()) + mbt_ffi_store32(iter_base + 8, ptr476) + + match payload475.mime_type { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload478) => { + mbt_ffi_store8(iter_base + 16, 1) + + let ptr479 = mbt_ffi_str2ptr(payload478) + mbt_ffi_store32(iter_base + 24, payload478.length()) + mbt_ffi_store32(iter_base + 20, ptr479) + cleanup_list.push(ptr479) + + () + } + } + cleanup_list.push(ptr476) + + () + } + PathValue(payload480) => { + mbt_ffi_store8(iter_base + 0, 25) + + let ptr481 = mbt_ffi_str2ptr(payload480) + mbt_ffi_store32(iter_base + 12, payload480.length()) + mbt_ffi_store32(iter_base + 8, ptr481) + cleanup_list.push(ptr481) + + () + } + UrlValue(payload482) => { + mbt_ffi_store8(iter_base + 0, 26) + + let ptr483 = mbt_ffi_str2ptr(payload482) + mbt_ffi_store32(iter_base + 12, payload482.length()) + mbt_ffi_store32(iter_base + 8, ptr483) + cleanup_list.push(ptr483) + + () + } + DatetimeValue(payload484) => { + mbt_ffi_store8(iter_base + 0, 27) + mbt_ffi_store64(iter_base + 8, payload484.seconds) + mbt_ffi_store32( + iter_base + 16, + payload484.nanoseconds.reinterpret_as_int(), + ) + + () + } + DurationValue(payload485) => { + mbt_ffi_store8(iter_base + 0, 28) + mbt_ffi_store64(iter_base + 8, payload485.nanoseconds) + + () + } + QuantityValueNode(payload486) => { + mbt_ffi_store8(iter_base + 0, 29) + mbt_ffi_store64(iter_base + 8, payload486.mantissa) + mbt_ffi_store32(iter_base + 16, payload486.scale) + + let ptr487 = mbt_ffi_str2ptr(payload486.unit) + mbt_ffi_store32(iter_base + 24, payload486.unit.length()) + mbt_ffi_store32(iter_base + 20, ptr487) + cleanup_list.push(ptr487) + + () + } + UnionValue(payload488) => { + mbt_ffi_store8(iter_base + 0, 30) + + let ptr489 = mbt_ffi_str2ptr(payload488.tag) + mbt_ffi_store32(iter_base + 12, payload488.tag.length()) + mbt_ffi_store32(iter_base + 8, ptr489) + mbt_ffi_store32(iter_base + 16, payload488.body) + cleanup_list.push(ptr489) + + () + } + SecretValue(payload490) => { + mbt_ffi_store8(iter_base + 0, 31) + + let @types.Secret(handle) = payload490 + mbt_ffi_store32(iter_base + 8, handle) + + () + } + QuotaTokenHandle(payload491) => { + mbt_ffi_store8(iter_base + 0, 32) + + let @types.QuotaToken(handle492) = payload491 + mbt_ffi_store32(iter_base + 8, handle492) + + () + } + PermissionCardHandle(payload493) => { + mbt_ffi_store8(iter_base + 0, 33) + + let @types.PermissionCard(handle494) = payload493 + mbt_ffi_store32(iter_base + 8, handle494) + + () + } + } + } + cleanup_list.push(address416) + cleanup_list.push(address422) + cleanup_list.push(address495) + + ( + 4, + address416, + payload54.graph.type_nodes.length(), + address422, + payload54.graph.defs.length(), + payload54.graph.root, + address495, + payload54.value.value_nodes.length(), + payload54.value.root, + ) + } + } + + ( + 1, lowered, lowered497, lowered498, lowered499, lowered500, lowered501, + lowered502, lowered503, lowered504, + ) + } + } + + wasmExportAsyncInitializeTaskReturn( + lowered505, lowered506, lowered507, lowered508, lowered509, lowered510, lowered511, + lowered512, lowered513, lowered514, + ) + + cleanup_list.each(mbt_ffi_free) + + @async-core.task_returned() + } + None => () + } +} + +///| +#doc(hidden) +pub fn wasmExportAsyncInitialize( + event_raw : Int, + waitable : Int, + code : Int, +) -> Int { + @async-core.cb(event_raw, waitable, code) +} + +///| +#doc(hidden) +pub fn wasmExportInvokeGolemAgentGuest(p0 : Int) -> Int { + @async-core.with_waitableset(async fn() { + @async-core.with_task_group(async fn(background_group) { + let result = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 0), + mbt_ffi_load32(p0 + 4), + ) + + let array26 : Array[@types.SchemaValueNode] = [] + for index27 = 0; index27 < mbt_ffi_load32(p0 + 12); index27 = index27 + 1 { + let iter_base = mbt_ffi_load32(p0 + 8) + index27 * 32 + + let lifted25 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue( + mbt_ffi_load8_u(iter_base + 8) != 0, + ) + 1 => @types.SchemaValueNode::S8Value(mbt_ffi_load8(iter_base + 8)) + 2 => @types.SchemaValueNode::S16Value(mbt_ffi_load16(iter_base + 8)) + 3 => @types.SchemaValueNode::S32Value(mbt_ffi_load32(iter_base + 8)) + 4 => @types.SchemaValueNode::S64Value(mbt_ffi_load64(iter_base + 8)) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8).land(0xFFFF).reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => @types.SchemaValueNode::F32Value(mbt_ffi_loadf32(iter_base + 8)) + 10 => @types.SchemaValueNode::F64Value(mbt_ffi_loadf64(iter_base + 8)) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result0 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result0) + } + 13 => { + let array : Array[Int] = [] + for index = 0 + index < mbt_ffi_load32(iter_base + 12) + index = index + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index * 4 + + array.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array) + } + 14 => { + let lifted : Int? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array1 : Array[Bool] = [] + for index2 = 0 + index2 < mbt_ffi_load32(iter_base + 12) + index2 = index2 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index2 * 1 + + array1.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array1) + } + 17 => { + let array3 : Array[Int] = [] + for index4 = 0 + index4 < mbt_ffi_load32(iter_base + 12) + index4 = index4 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index4 * 4 + + array3.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array3) + } + 18 => { + let array5 : Array[Int] = [] + for index6 = 0 + index6 < mbt_ffi_load32(iter_base + 12) + index6 = index6 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index6 * 4 + + array5.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array5) + } + 19 => { + let array7 : Array[Int] = [] + for index8 = 0 + index8 < mbt_ffi_load32(iter_base + 12) + index8 = index8 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index8 * 4 + + array7.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array7) + } + 20 => { + let array9 : Array[@types.MapEntry] = [] + for index10 = 0 + index10 < mbt_ffi_load32(iter_base + 12) + index10 = index10 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index10 * 8 + + array9.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array9) + } + 21 => { + let lifted11 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted11) + } + 22 => { + let lifted14 = match mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted12 : Int? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted12) + } + 1 => { + let lifted13 : Int? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted13) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted14) + } + 23 => { + let result15 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted17 : String? = match mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result16 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result16) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result15, + language: lifted17, + }) + } + 24 => { + let result18 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted20 : String? = match mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result19 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result19) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result18, + mime_type: lifted20, + }) + } + 25 => { + let result21 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result21) + } + 26 => { + let result22 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result22) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result23 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result23, + }) + } + 30 => { + let result24 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result24, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken(mbt_ffi_load32(iter_base + 8)), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ), + ) + _ => panic() + } + + array26.push(lifted25) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + + let lifted45 = match mbt_ffi_load8_u(p0 + 24) { + 0 => { + let result28 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 32), + mbt_ffi_load32(p0 + 36), + ) + + let result29 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 40), + mbt_ffi_load32(p0 + 44), + ) + + let lifted31 : String? = match mbt_ffi_load8_u(p0 + 48) { + 0 => Option::None + 1 => { + let result30 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 52), + mbt_ffi_load32(p0 + 56), + ) + + Option::Some(result30) + } + _ => panic() + } + + let lifted33 : String? = match mbt_ffi_load8_u(p0 + 60) { + 0 => Option::None + 1 => { + let result32 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 64), + mbt_ffi_load32(p0 + 68), + ) + + Option::Some(result32) + } + _ => panic() + } + + let lifted34 : Bool? = match mbt_ffi_load8_u(p0 + 72) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load8_u(p0 + 73) != 0) + _ => panic() + } + + let lifted36 : String? = match mbt_ffi_load8_u(p0 + 76) { + 0 => Option::None + 1 => { + let result35 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 80), + mbt_ffi_load32(p0 + 84), + ) + + Option::Some(result35) + } + _ => panic() + } + + let lifted38 : String? = match mbt_ffi_load8_u(p0 + 88) { + 0 => Option::None + 1 => { + let result37 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 92), + mbt_ffi_load32(p0 + 96), + ) + + Option::Some(result37) + } + _ => panic() + } + + let lifted40 : String? = match mbt_ffi_load8_u(p0 + 100) { + 0 => Option::None + 1 => { + let result39 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 104), + mbt_ffi_load32(p0 + 108), + ) + + Option::Some(result39) + } + _ => panic() + } + + let lifted42 : String? = match mbt_ffi_load8_u(p0 + 112) { + 0 => Option::None + 1 => { + let result41 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 116), + mbt_ffi_load32(p0 + 120), + ) + + Option::Some(result41) + } + _ => panic() + } + + let result43 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 124), + mbt_ffi_load32(p0 + 128), + ) + + @common.Principal::Oidc(@common.OidcPrincipal::{ + sub: result28, + issuer: result29, + email: lifted31, + name: lifted33, + email_verified: lifted34, + given_name: lifted36, + family_name: lifted38, + picture: lifted40, + preferred_username: lifted42, + claims: result43, + }) + } + 1 => { + let result44 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 48), + mbt_ffi_load32(p0 + 52), + ) + + @common.Principal::Agent(@common.AgentPrincipal::{ + agent_id: @types.AgentId::{ + component_id: @types.ComponentId::{ + uuid: @types.Uuid::{ + high_bits: mbt_ffi_load64(p0 + 32).reinterpret_as_uint64(), + low_bits: mbt_ffi_load64(p0 + 40).reinterpret_as_uint64(), + }, + }, + agent_id: result44, + }, + }) + } + 2 => + @common.Principal::GolemUser(@common.GolemUserPrincipal::{ + account_id: @types.AccountId::{ + uuid: @types.Uuid::{ + high_bits: mbt_ffi_load64(p0 + 32).reinterpret_as_uint64(), + low_bits: mbt_ffi_load64(p0 + 40).reinterpret_as_uint64(), + }, + }, + }) + 3 => @common.Principal::Anonymous + _ => panic() + } + + let return_result : Ref[ + Result[@types.SchemaValueTree?, @common.AgentError]?, + ] = Ref(None) + return_result.val = Some( + invoke( + result, + @types.SchemaValueTree::{ + value_nodes: array26, + root: mbt_ffi_load32(p0 + 16), + }, + lifted45, + background_group, + ), + ) + invoke_task_return(return_result) + }) + }) +} + +///| +fn wasmExportAsyncInvokeGolemAgentGuestTaskReturn( + p0 : Int, + p1 : Int, + p2 : Int, + p3 : Int, + p4 : Int, + p5 : Int, + p6 : Int, + p7 : Int, + p8 : Int, + p9 : Int, +) = "[export]golem:agent/guest@2.0.0" "[task-return]invoke" + +///| +fn invoke_task_return( + return_result : Ref[Result[@types.SchemaValueTree?, @common.AgentError]?], +) -> Unit { + match return_result.val { + Some(return_value) => { + let cleanup_list : Array[Int] = [] + + let ( + lowered585, + lowered586, + lowered587, + lowered588, + lowered589, + lowered590, + lowered591, + lowered592, + lowered593, + lowered594, + ) = match return_value { + Ok(payload) => { + let (lowered, lowered119, lowered120, lowered121) = match payload { + None => (0, 0, 0, 0) + Some(payload47) => { + let address117 = mbt_ffi_malloc( + payload47.value_nodes.length() * 32, + ) + for index118 = 0 + index118 < payload47.value_nodes.length() + index118 = index118 + 1 { + let iter_elem : @types.SchemaValueNode = payload47.value_nodes[index118] + let iter_base = address117 + index118 * 32 + + match iter_elem { + BoolValue(payload48) => { + mbt_ffi_store8(iter_base + 0, 0) + mbt_ffi_store8(iter_base + 8, if payload48 { 1 } else { 0 }) + + () + } + S8Value(payload49) => { + mbt_ffi_store8(iter_base + 0, 1) + mbt_ffi_store8(iter_base + 8, mbt_ffi_extend8(payload49)) + + () + } + S16Value(payload50) => { + mbt_ffi_store8(iter_base + 0, 2) + mbt_ffi_store16(iter_base + 8, mbt_ffi_extend16(payload50)) + + () + } + S32Value(payload51) => { + mbt_ffi_store8(iter_base + 0, 3) + mbt_ffi_store32(iter_base + 8, payload51) + + () + } + S64Value(payload52) => { + mbt_ffi_store8(iter_base + 0, 4) + mbt_ffi_store64(iter_base + 8, payload52) + + () + } + U8Value(payload53) => { + mbt_ffi_store8(iter_base + 0, 5) + mbt_ffi_store8(iter_base + 8, payload53.to_int()) + + () + } + U16Value(payload54) => { + mbt_ffi_store8(iter_base + 0, 6) + mbt_ffi_store16( + iter_base + 8, + payload54.reinterpret_as_int(), + ) + + () + } + U32Value(payload55) => { + mbt_ffi_store8(iter_base + 0, 7) + mbt_ffi_store32( + iter_base + 8, + payload55.reinterpret_as_int(), + ) + + () + } + U64Value(payload56) => { + mbt_ffi_store8(iter_base + 0, 8) + mbt_ffi_store64( + iter_base + 8, + payload56.reinterpret_as_int64(), + ) + + () + } + F32Value(payload57) => { + mbt_ffi_store8(iter_base + 0, 9) + mbt_ffi_storef32(iter_base + 8, payload57) + + () + } + F64Value(payload58) => { + mbt_ffi_store8(iter_base + 0, 10) + mbt_ffi_storef64(iter_base + 8, payload58) + + () + } + CharValue(payload59) => { + mbt_ffi_store8(iter_base + 0, 11) + mbt_ffi_store32(iter_base + 8, payload59.to_int()) + + () + } + StringValue(payload60) => { + mbt_ffi_store8(iter_base + 0, 12) + + let ptr = mbt_ffi_str2ptr(payload60) + mbt_ffi_store32(iter_base + 12, payload60.length()) + mbt_ffi_store32(iter_base + 8, ptr) + cleanup_list.push(ptr) + + () + } + RecordValue(payload61) => { + mbt_ffi_store8(iter_base + 0, 13) + + let address = mbt_ffi_malloc(payload61.length() * 4) + for index62 = 0 + index62 < payload61.length() + index62 = index62 + 1 { + let iter_elem : Int = payload61[index62] + let iter_base = address + index62 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(iter_base + 12, payload61.length()) + mbt_ffi_store32(iter_base + 8, address) + cleanup_list.push(address) + + () + } + VariantValue(payload63) => { + mbt_ffi_store8(iter_base + 0, 14) + mbt_ffi_store32( + iter_base + 8, + payload63.case.reinterpret_as_int(), + ) + + match payload63.payload { + None => { + mbt_ffi_store8(iter_base + 12, 0) + + () + } + Some(payload65) => { + mbt_ffi_store8(iter_base + 12, 1) + mbt_ffi_store32(iter_base + 16, payload65) + + () + } + } + + () + } + EnumValue(payload66) => { + mbt_ffi_store8(iter_base + 0, 15) + mbt_ffi_store32( + iter_base + 8, + payload66.reinterpret_as_int(), + ) + + () + } + FlagsValue(payload67) => { + mbt_ffi_store8(iter_base + 0, 16) + + let address68 = mbt_ffi_malloc(payload67.length() * 1) + for index69 = 0 + index69 < payload67.length() + index69 = index69 + 1 { + let iter_elem : Bool = payload67[index69] + let iter_base = address68 + index69 * 1 + mbt_ffi_store8( + iter_base + 0, + if iter_elem { + 1 + } else { + 0 + }, + ) + } + mbt_ffi_store32(iter_base + 12, payload67.length()) + mbt_ffi_store32(iter_base + 8, address68) + cleanup_list.push(address68) + + () + } + TupleValue(payload70) => { + mbt_ffi_store8(iter_base + 0, 17) + + let address71 = mbt_ffi_malloc(payload70.length() * 4) + for index72 = 0 + index72 < payload70.length() + index72 = index72 + 1 { + let iter_elem : Int = payload70[index72] + let iter_base = address71 + index72 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(iter_base + 12, payload70.length()) + mbt_ffi_store32(iter_base + 8, address71) + cleanup_list.push(address71) + + () + } + ListValue(payload73) => { + mbt_ffi_store8(iter_base + 0, 18) + + let address74 = mbt_ffi_malloc(payload73.length() * 4) + for index75 = 0 + index75 < payload73.length() + index75 = index75 + 1 { + let iter_elem : Int = payload73[index75] + let iter_base = address74 + index75 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(iter_base + 12, payload73.length()) + mbt_ffi_store32(iter_base + 8, address74) + cleanup_list.push(address74) + + () + } + FixedListValue(payload76) => { + mbt_ffi_store8(iter_base + 0, 19) + + let address77 = mbt_ffi_malloc(payload76.length() * 4) + for index78 = 0 + index78 < payload76.length() + index78 = index78 + 1 { + let iter_elem : Int = payload76[index78] + let iter_base = address77 + index78 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(iter_base + 12, payload76.length()) + mbt_ffi_store32(iter_base + 8, address77) + cleanup_list.push(address77) + + () + } + MapValue(payload79) => { + mbt_ffi_store8(iter_base + 0, 20) + + let address80 = mbt_ffi_malloc(payload79.length() * 8) + for index81 = 0 + index81 < payload79.length() + index81 = index81 + 1 { + let iter_elem : @types.MapEntry = payload79[index81] + let iter_base = address80 + index81 * 8 + mbt_ffi_store32(iter_base + 0, iter_elem.key) + mbt_ffi_store32(iter_base + 4, iter_elem.value) + } + mbt_ffi_store32(iter_base + 12, payload79.length()) + mbt_ffi_store32(iter_base + 8, address80) + cleanup_list.push(address80) + + () + } + OptionValue(payload82) => { + mbt_ffi_store8(iter_base + 0, 21) + + match payload82 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload84) => { + mbt_ffi_store8(iter_base + 8, 1) + mbt_ffi_store32(iter_base + 12, payload84) + + () + } + } + + () + } + ResultValue(payload85) => { + mbt_ffi_store8(iter_base + 0, 22) + + match payload85 { + OkValue(payload86) => { + mbt_ffi_store8(iter_base + 8, 0) + + match payload86 { + None => { + mbt_ffi_store8(iter_base + 12, 0) + + () + } + Some(payload88) => { + mbt_ffi_store8(iter_base + 12, 1) + mbt_ffi_store32(iter_base + 16, payload88) + + () + } + } + + () + } + ErrValue(payload89) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload89 { + None => { + mbt_ffi_store8(iter_base + 12, 0) + + () + } + Some(payload91) => { + mbt_ffi_store8(iter_base + 12, 1) + mbt_ffi_store32(iter_base + 16, payload91) + + () + } + } + + () + } + } + + () + } + TextValue(payload92) => { + mbt_ffi_store8(iter_base + 0, 23) + + let ptr93 = mbt_ffi_str2ptr(payload92.text) + mbt_ffi_store32(iter_base + 12, payload92.text.length()) + mbt_ffi_store32(iter_base + 8, ptr93) + + match payload92.language { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload95) => { + mbt_ffi_store8(iter_base + 16, 1) + + let ptr96 = mbt_ffi_str2ptr(payload95) + mbt_ffi_store32(iter_base + 24, payload95.length()) + mbt_ffi_store32(iter_base + 20, ptr96) + cleanup_list.push(ptr96) + + () + } + } + cleanup_list.push(ptr93) + + () + } + BinaryValue(payload97) => { + mbt_ffi_store8(iter_base + 0, 24) + + let ptr98 = mbt_ffi_bytes2ptr(payload97.bytes) + + mbt_ffi_store32(iter_base + 12, payload97.bytes.length()) + mbt_ffi_store32(iter_base + 8, ptr98) + + match payload97.mime_type { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload100) => { + mbt_ffi_store8(iter_base + 16, 1) + + let ptr101 = mbt_ffi_str2ptr(payload100) + mbt_ffi_store32(iter_base + 24, payload100.length()) + mbt_ffi_store32(iter_base + 20, ptr101) + cleanup_list.push(ptr101) + + () + } + } + cleanup_list.push(ptr98) + + () + } + PathValue(payload102) => { + mbt_ffi_store8(iter_base + 0, 25) + + let ptr103 = mbt_ffi_str2ptr(payload102) + mbt_ffi_store32(iter_base + 12, payload102.length()) + mbt_ffi_store32(iter_base + 8, ptr103) + cleanup_list.push(ptr103) + + () + } + UrlValue(payload104) => { + mbt_ffi_store8(iter_base + 0, 26) + + let ptr105 = mbt_ffi_str2ptr(payload104) + mbt_ffi_store32(iter_base + 12, payload104.length()) + mbt_ffi_store32(iter_base + 8, ptr105) + cleanup_list.push(ptr105) + + () + } + DatetimeValue(payload106) => { + mbt_ffi_store8(iter_base + 0, 27) + mbt_ffi_store64(iter_base + 8, payload106.seconds) + mbt_ffi_store32( + iter_base + 16, + payload106.nanoseconds.reinterpret_as_int(), + ) + + () + } + DurationValue(payload107) => { + mbt_ffi_store8(iter_base + 0, 28) + mbt_ffi_store64(iter_base + 8, payload107.nanoseconds) + + () + } + QuantityValueNode(payload108) => { + mbt_ffi_store8(iter_base + 0, 29) + mbt_ffi_store64(iter_base + 8, payload108.mantissa) + mbt_ffi_store32(iter_base + 16, payload108.scale) + + let ptr109 = mbt_ffi_str2ptr(payload108.unit) + mbt_ffi_store32(iter_base + 24, payload108.unit.length()) + mbt_ffi_store32(iter_base + 20, ptr109) + cleanup_list.push(ptr109) + + () + } + UnionValue(payload110) => { + mbt_ffi_store8(iter_base + 0, 30) + + let ptr111 = mbt_ffi_str2ptr(payload110.tag) + mbt_ffi_store32(iter_base + 12, payload110.tag.length()) + mbt_ffi_store32(iter_base + 8, ptr111) + mbt_ffi_store32(iter_base + 16, payload110.body) + cleanup_list.push(ptr111) + + () + } + SecretValue(payload112) => { + mbt_ffi_store8(iter_base + 0, 31) + + let @types.Secret(handle) = payload112 + mbt_ffi_store32(iter_base + 8, handle) + + () + } + QuotaTokenHandle(payload113) => { + mbt_ffi_store8(iter_base + 0, 32) + + let @types.QuotaToken(handle114) = payload113 + mbt_ffi_store32(iter_base + 8, handle114) + + () + } + PermissionCardHandle(payload115) => { + mbt_ffi_store8(iter_base + 0, 33) + + let @types.PermissionCard(handle116) = payload115 + mbt_ffi_store32(iter_base + 8, handle116) + + () + } + } + } + cleanup_list.push(address117) + + (1, address117, payload47.value_nodes.length(), payload47.root) + } + } + + (0, lowered, lowered119, lowered120, lowered121, 0, 0, 0, 0, 0) + } + Err(payload122) => { + let ( + lowered576, + lowered577, + lowered578, + lowered579, + lowered580, + lowered581, + lowered582, + lowered583, + lowered584, + ) = match payload122 { + InvalidInput(payload123) => { + let ptr124 = mbt_ffi_str2ptr(payload123) + cleanup_list.push(ptr124) + + (0, ptr124, payload123.length(), 0, 0, 0, 0, 0, 0) + } + InvalidMethod(payload125) => { + let ptr126 = mbt_ffi_str2ptr(payload125) + cleanup_list.push(ptr126) + + (1, ptr126, payload125.length(), 0, 0, 0, 0, 0, 0) + } + InvalidType(payload127) => { + let ptr128 = mbt_ffi_str2ptr(payload127) + cleanup_list.push(ptr128) + + (2, ptr128, payload127.length(), 0, 0, 0, 0, 0, 0) + } + InvalidAgentId(payload129) => { + let ptr130 = mbt_ffi_str2ptr(payload129) + cleanup_list.push(ptr130) + + (3, ptr130, payload129.length(), 0, 0, 0, 0, 0, 0) + } + CustomError(payload131) => { + let address494 = mbt_ffi_malloc( + payload131.graph.type_nodes.length() * 144, + ) + for index495 = 0 + index495 < payload131.graph.type_nodes.length() + index495 = index495 + 1 { + let iter_elem : @types.SchemaTypeNode = payload131.graph.type_nodes[index495] + let iter_base = address494 + index495 * 144 + + match iter_elem.body { + RefType(payload132) => { + mbt_ffi_store8(iter_base + 0, 0) + mbt_ffi_store32(iter_base + 8, payload132) + + () + } + BoolType => { + mbt_ffi_store8(iter_base + 0, 1) + + () + } + S8Type(payload134) => { + mbt_ffi_store8(iter_base + 0, 2) + + match payload134 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload136) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload136.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload138) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload138 { + Signed(payload139) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload139) + + () + } + Unsigned(payload140) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload140.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload141) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload141.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload136.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload143) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload143 { + Signed(payload144) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload144) + + () + } + Unsigned(payload145) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload145.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload146) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload146.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload136.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload148) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr149 = mbt_ffi_str2ptr(payload148) + mbt_ffi_store32(iter_base + 72, payload148.length()) + mbt_ffi_store32(iter_base + 68, ptr149) + cleanup_list.push(ptr149) + + () + } + } + + () + } + } + + () + } + S16Type(payload150) => { + mbt_ffi_store8(iter_base + 0, 3) + + match payload150 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload152) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload152.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload154) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload154 { + Signed(payload155) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload155) + + () + } + Unsigned(payload156) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload156.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload157) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload157.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload152.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload159) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload159 { + Signed(payload160) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload160) + + () + } + Unsigned(payload161) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload161.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload162) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload162.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload152.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload164) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr165 = mbt_ffi_str2ptr(payload164) + mbt_ffi_store32(iter_base + 72, payload164.length()) + mbt_ffi_store32(iter_base + 68, ptr165) + cleanup_list.push(ptr165) + + () + } + } + + () + } + } + + () + } + S32Type(payload166) => { + mbt_ffi_store8(iter_base + 0, 4) + + match payload166 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload168) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload168.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload170) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload170 { + Signed(payload171) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload171) + + () + } + Unsigned(payload172) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload172.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload173) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload173.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload168.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload175) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload175 { + Signed(payload176) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload176) + + () + } + Unsigned(payload177) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload177.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload178) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload178.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload168.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload180) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr181 = mbt_ffi_str2ptr(payload180) + mbt_ffi_store32(iter_base + 72, payload180.length()) + mbt_ffi_store32(iter_base + 68, ptr181) + cleanup_list.push(ptr181) + + () + } + } + + () + } + } + + () + } + S64Type(payload182) => { + mbt_ffi_store8(iter_base + 0, 5) + + match payload182 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload184) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload184.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload186) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload186 { + Signed(payload187) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload187) + + () + } + Unsigned(payload188) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload188.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload189) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload189.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload184.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload191) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload191 { + Signed(payload192) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload192) + + () + } + Unsigned(payload193) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload193.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload194) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload194.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload184.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload196) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr197 = mbt_ffi_str2ptr(payload196) + mbt_ffi_store32(iter_base + 72, payload196.length()) + mbt_ffi_store32(iter_base + 68, ptr197) + cleanup_list.push(ptr197) + + () + } + } + + () + } + } + + () + } + U8Type(payload198) => { + mbt_ffi_store8(iter_base + 0, 6) + + match payload198 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload200) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload200.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload202) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload202 { + Signed(payload203) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload203) + + () + } + Unsigned(payload204) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload204.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload205) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload205.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload200.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload207) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload207 { + Signed(payload208) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload208) + + () + } + Unsigned(payload209) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload209.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload210) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload210.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload200.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload212) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr213 = mbt_ffi_str2ptr(payload212) + mbt_ffi_store32(iter_base + 72, payload212.length()) + mbt_ffi_store32(iter_base + 68, ptr213) + cleanup_list.push(ptr213) + + () + } + } + + () + } + } + + () + } + U16Type(payload214) => { + mbt_ffi_store8(iter_base + 0, 7) + + match payload214 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload216) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload216.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload218) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload218 { + Signed(payload219) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload219) + + () + } + Unsigned(payload220) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload220.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload221) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload221.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload216.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload223) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload223 { + Signed(payload224) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload224) + + () + } + Unsigned(payload225) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload225.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload226) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload226.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload216.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload228) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr229 = mbt_ffi_str2ptr(payload228) + mbt_ffi_store32(iter_base + 72, payload228.length()) + mbt_ffi_store32(iter_base + 68, ptr229) + cleanup_list.push(ptr229) + + () + } + } + + () + } + } + + () + } + U32Type(payload230) => { + mbt_ffi_store8(iter_base + 0, 8) + + match payload230 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload232) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload232.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload234) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload234 { + Signed(payload235) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload235) + + () + } + Unsigned(payload236) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload236.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload237) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload237.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload232.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload239) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload239 { + Signed(payload240) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload240) + + () + } + Unsigned(payload241) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload241.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload242) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload242.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload232.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload244) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr245 = mbt_ffi_str2ptr(payload244) + mbt_ffi_store32(iter_base + 72, payload244.length()) + mbt_ffi_store32(iter_base + 68, ptr245) + cleanup_list.push(ptr245) + + () + } + } + + () + } + } + + () + } + U64Type(payload246) => { + mbt_ffi_store8(iter_base + 0, 9) + + match payload246 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload248) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload248.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload250) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload250 { + Signed(payload251) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload251) + + () + } + Unsigned(payload252) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload252.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload253) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload253.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload248.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload255) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload255 { + Signed(payload256) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload256) + + () + } + Unsigned(payload257) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload257.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload258) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload258.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload248.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload260) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr261 = mbt_ffi_str2ptr(payload260) + mbt_ffi_store32(iter_base + 72, payload260.length()) + mbt_ffi_store32(iter_base + 68, ptr261) + cleanup_list.push(ptr261) + + () + } + } + + () + } + } + + () + } + F32Type(payload262) => { + mbt_ffi_store8(iter_base + 0, 10) + + match payload262 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload264) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload264.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload266) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload266 { + Signed(payload267) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload267) + + () + } + Unsigned(payload268) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload268.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload269) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload269.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload264.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload271) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload271 { + Signed(payload272) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload272) + + () + } + Unsigned(payload273) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload273.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload274) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload274.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload264.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload276) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr277 = mbt_ffi_str2ptr(payload276) + mbt_ffi_store32(iter_base + 72, payload276.length()) + mbt_ffi_store32(iter_base + 68, ptr277) + cleanup_list.push(ptr277) + + () + } + } + + () + } + } + + () + } + F64Type(payload278) => { + mbt_ffi_store8(iter_base + 0, 11) + + match payload278 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload280) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload280.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload282) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload282 { + Signed(payload283) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload283) + + () + } + Unsigned(payload284) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload284.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload285) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload285.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload280.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload287) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload287 { + Signed(payload288) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload288) + + () + } + Unsigned(payload289) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload289.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload290) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload290.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload280.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload292) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr293 = mbt_ffi_str2ptr(payload292) + mbt_ffi_store32(iter_base + 72, payload292.length()) + mbt_ffi_store32(iter_base + 68, ptr293) + cleanup_list.push(ptr293) + + () + } + } + + () + } + } + + () + } + CharType => { + mbt_ffi_store8(iter_base + 0, 12) + + () + } + StringType => { + mbt_ffi_store8(iter_base + 0, 13) + + () + } + RecordType(payload296) => { + mbt_ffi_store8(iter_base + 0, 14) + + let address317 = mbt_ffi_malloc(payload296.length() * 68) + for index318 = 0 + index318 < payload296.length() + index318 = index318 + 1 { + let iter_elem : @types.NamedFieldType = payload296[index318] + let iter_base = address317 + index318 * 68 + + let ptr297 = mbt_ffi_str2ptr(iter_elem.name) + mbt_ffi_store32(iter_base + 4, iter_elem.name.length()) + mbt_ffi_store32(iter_base + 0, ptr297) + mbt_ffi_store32(iter_base + 8, iter_elem.body) + + match iter_elem.metadata.doc { + None => { + mbt_ffi_store8(iter_base + 12, 0) + + () + } + Some(payload299) => { + mbt_ffi_store8(iter_base + 12, 1) + + let ptr300 = mbt_ffi_str2ptr(payload299) + mbt_ffi_store32(iter_base + 20, payload299.length()) + mbt_ffi_store32(iter_base + 16, ptr300) + cleanup_list.push(ptr300) + + () + } + } + + let address302 = mbt_ffi_malloc( + iter_elem.metadata.aliases.length() * 8, + ) + for index303 = 0 + index303 < iter_elem.metadata.aliases.length() + index303 = index303 + 1 { + let iter_elem : String = iter_elem.metadata.aliases[index303] + let iter_base = address302 + index303 * 8 + + let ptr301 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr301) + cleanup_list.push(ptr301) + } + mbt_ffi_store32( + iter_base + 28, + iter_elem.metadata.aliases.length(), + ) + mbt_ffi_store32(iter_base + 24, address302) + + let address305 = mbt_ffi_malloc( + iter_elem.metadata.examples.length() * 8, + ) + for index306 = 0 + index306 < iter_elem.metadata.examples.length() + index306 = index306 + 1 { + let iter_elem : String = iter_elem.metadata.examples[index306] + let iter_base = address305 + index306 * 8 + + let ptr304 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr304) + cleanup_list.push(ptr304) + } + mbt_ffi_store32( + iter_base + 36, + iter_elem.metadata.examples.length(), + ) + mbt_ffi_store32(iter_base + 32, address305) + + match iter_elem.metadata.deprecated { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload308) => { + mbt_ffi_store8(iter_base + 40, 1) + + let ptr309 = mbt_ffi_str2ptr(payload308) + mbt_ffi_store32(iter_base + 48, payload308.length()) + mbt_ffi_store32(iter_base + 44, ptr309) + cleanup_list.push(ptr309) + + () + } + } + + match iter_elem.metadata.role { + None => { + mbt_ffi_store8(iter_base + 52, 0) + + () + } + Some(payload311) => { + mbt_ffi_store8(iter_base + 52, 1) + + match payload311 { + Multimodal => { + mbt_ffi_store8(iter_base + 56, 0) + + () + } + UnstructuredText => { + mbt_ffi_store8(iter_base + 56, 1) + + () + } + UnstructuredBinary => { + mbt_ffi_store8(iter_base + 56, 2) + + () + } + Other(payload315) => { + mbt_ffi_store8(iter_base + 56, 3) + + let ptr316 = mbt_ffi_str2ptr(payload315) + mbt_ffi_store32( + iter_base + 64, + payload315.length(), + ) + mbt_ffi_store32(iter_base + 60, ptr316) + cleanup_list.push(ptr316) + + () + } + } + + () + } + } + cleanup_list.push(ptr297) + cleanup_list.push(address302) + cleanup_list.push(address305) + } + mbt_ffi_store32(iter_base + 12, payload296.length()) + mbt_ffi_store32(iter_base + 8, address317) + cleanup_list.push(address317) + + () + } + VariantType(payload319) => { + mbt_ffi_store8(iter_base + 0, 15) + + let address342 = mbt_ffi_malloc(payload319.length() * 72) + for index343 = 0 + index343 < payload319.length() + index343 = index343 + 1 { + let iter_elem : @types.VariantCaseType = payload319[index343] + let iter_base = address342 + index343 * 72 + + let ptr320 = mbt_ffi_str2ptr(iter_elem.name) + mbt_ffi_store32(iter_base + 4, iter_elem.name.length()) + mbt_ffi_store32(iter_base + 0, ptr320) + + match iter_elem.payload { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload322) => { + mbt_ffi_store8(iter_base + 8, 1) + mbt_ffi_store32(iter_base + 12, payload322) + + () + } + } + + match iter_elem.metadata.doc { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload324) => { + mbt_ffi_store8(iter_base + 16, 1) + + let ptr325 = mbt_ffi_str2ptr(payload324) + mbt_ffi_store32(iter_base + 24, payload324.length()) + mbt_ffi_store32(iter_base + 20, ptr325) + cleanup_list.push(ptr325) + + () + } + } + + let address327 = mbt_ffi_malloc( + iter_elem.metadata.aliases.length() * 8, + ) + for index328 = 0 + index328 < iter_elem.metadata.aliases.length() + index328 = index328 + 1 { + let iter_elem : String = iter_elem.metadata.aliases[index328] + let iter_base = address327 + index328 * 8 + + let ptr326 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr326) + cleanup_list.push(ptr326) + } + mbt_ffi_store32( + iter_base + 32, + iter_elem.metadata.aliases.length(), + ) + mbt_ffi_store32(iter_base + 28, address327) + + let address330 = mbt_ffi_malloc( + iter_elem.metadata.examples.length() * 8, + ) + for index331 = 0 + index331 < iter_elem.metadata.examples.length() + index331 = index331 + 1 { + let iter_elem : String = iter_elem.metadata.examples[index331] + let iter_base = address330 + index331 * 8 + + let ptr329 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr329) + cleanup_list.push(ptr329) + } + mbt_ffi_store32( + iter_base + 40, + iter_elem.metadata.examples.length(), + ) + mbt_ffi_store32(iter_base + 36, address330) + + match iter_elem.metadata.deprecated { + None => { + mbt_ffi_store8(iter_base + 44, 0) + + () + } + Some(payload333) => { + mbt_ffi_store8(iter_base + 44, 1) + + let ptr334 = mbt_ffi_str2ptr(payload333) + mbt_ffi_store32(iter_base + 52, payload333.length()) + mbt_ffi_store32(iter_base + 48, ptr334) + cleanup_list.push(ptr334) + + () + } + } + + match iter_elem.metadata.role { + None => { + mbt_ffi_store8(iter_base + 56, 0) + + () + } + Some(payload336) => { + mbt_ffi_store8(iter_base + 56, 1) + + match payload336 { + Multimodal => { + mbt_ffi_store8(iter_base + 60, 0) + + () + } + UnstructuredText => { + mbt_ffi_store8(iter_base + 60, 1) + + () + } + UnstructuredBinary => { + mbt_ffi_store8(iter_base + 60, 2) + + () + } + Other(payload340) => { + mbt_ffi_store8(iter_base + 60, 3) + + let ptr341 = mbt_ffi_str2ptr(payload340) + mbt_ffi_store32( + iter_base + 68, + payload340.length(), + ) + mbt_ffi_store32(iter_base + 64, ptr341) + cleanup_list.push(ptr341) + + () + } + } + + () + } + } + cleanup_list.push(ptr320) + cleanup_list.push(address327) + cleanup_list.push(address330) + } + mbt_ffi_store32(iter_base + 12, payload319.length()) + mbt_ffi_store32(iter_base + 8, address342) + cleanup_list.push(address342) + + () + } + EnumType(payload344) => { + mbt_ffi_store8(iter_base + 0, 16) + + let address346 = mbt_ffi_malloc(payload344.length() * 8) + for index347 = 0 + index347 < payload344.length() + index347 = index347 + 1 { + let iter_elem : String = payload344[index347] + let iter_base = address346 + index347 * 8 + + let ptr345 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr345) + cleanup_list.push(ptr345) + } + mbt_ffi_store32(iter_base + 12, payload344.length()) + mbt_ffi_store32(iter_base + 8, address346) + cleanup_list.push(address346) + + () + } + FlagsType(payload348) => { + mbt_ffi_store8(iter_base + 0, 17) + + let address350 = mbt_ffi_malloc(payload348.length() * 8) + for index351 = 0 + index351 < payload348.length() + index351 = index351 + 1 { + let iter_elem : String = payload348[index351] + let iter_base = address350 + index351 * 8 + + let ptr349 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr349) + cleanup_list.push(ptr349) + } + mbt_ffi_store32(iter_base + 12, payload348.length()) + mbt_ffi_store32(iter_base + 8, address350) + cleanup_list.push(address350) + + () + } + TupleType(payload352) => { + mbt_ffi_store8(iter_base + 0, 18) + + let address353 = mbt_ffi_malloc(payload352.length() * 4) + for index354 = 0 + index354 < payload352.length() + index354 = index354 + 1 { + let iter_elem : Int = payload352[index354] + let iter_base = address353 + index354 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(iter_base + 12, payload352.length()) + mbt_ffi_store32(iter_base + 8, address353) + cleanup_list.push(address353) + + () + } + ListType(payload355) => { + mbt_ffi_store8(iter_base + 0, 19) + mbt_ffi_store32(iter_base + 8, payload355) + + () + } + FixedListType(payload356) => { + mbt_ffi_store8(iter_base + 0, 20) + mbt_ffi_store32(iter_base + 8, payload356.element) + mbt_ffi_store32( + iter_base + 12, + payload356.length.reinterpret_as_int(), + ) + + () + } + MapType(payload357) => { + mbt_ffi_store8(iter_base + 0, 21) + mbt_ffi_store32(iter_base + 8, payload357.key) + mbt_ffi_store32(iter_base + 12, payload357.value) + + () + } + OptionType(payload358) => { + mbt_ffi_store8(iter_base + 0, 22) + mbt_ffi_store32(iter_base + 8, payload358) + + () + } + ResultType(payload359) => { + mbt_ffi_store8(iter_base + 0, 23) + + match payload359.ok { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload361) => { + mbt_ffi_store8(iter_base + 8, 1) + mbt_ffi_store32(iter_base + 12, payload361) + + () + } + } + + match payload359.err { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload363) => { + mbt_ffi_store8(iter_base + 16, 1) + mbt_ffi_store32(iter_base + 20, payload363) + + () + } + } + + () + } + TextType(payload364) => { + mbt_ffi_store8(iter_base + 0, 24) + + match payload364.languages { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload366) => { + mbt_ffi_store8(iter_base + 8, 1) + + let address368 = mbt_ffi_malloc(payload366.length() * 8) + for index369 = 0 + index369 < payload366.length() + index369 = index369 + 1 { + let iter_elem : String = payload366[index369] + let iter_base = address368 + index369 * 8 + + let ptr367 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr367) + cleanup_list.push(ptr367) + } + mbt_ffi_store32(iter_base + 16, payload366.length()) + mbt_ffi_store32(iter_base + 12, address368) + cleanup_list.push(address368) + + () + } + } + + match payload364.min_length { + None => { + mbt_ffi_store8(iter_base + 20, 0) + + () + } + Some(payload371) => { + mbt_ffi_store8(iter_base + 20, 1) + mbt_ffi_store32( + iter_base + 24, + payload371.reinterpret_as_int(), + ) + + () + } + } + + match payload364.max_length { + None => { + mbt_ffi_store8(iter_base + 28, 0) + + () + } + Some(payload373) => { + mbt_ffi_store8(iter_base + 28, 1) + mbt_ffi_store32( + iter_base + 32, + payload373.reinterpret_as_int(), + ) + + () + } + } + + match payload364.regex { + None => { + mbt_ffi_store8(iter_base + 36, 0) + + () + } + Some(payload375) => { + mbt_ffi_store8(iter_base + 36, 1) + + let ptr376 = mbt_ffi_str2ptr(payload375) + mbt_ffi_store32(iter_base + 44, payload375.length()) + mbt_ffi_store32(iter_base + 40, ptr376) + cleanup_list.push(ptr376) + + () + } + } + + () + } + BinaryType(payload377) => { + mbt_ffi_store8(iter_base + 0, 25) + + match payload377.mime_types { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload379) => { + mbt_ffi_store8(iter_base + 8, 1) + + let address381 = mbt_ffi_malloc(payload379.length() * 8) + for index382 = 0 + index382 < payload379.length() + index382 = index382 + 1 { + let iter_elem : String = payload379[index382] + let iter_base = address381 + index382 * 8 + + let ptr380 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr380) + cleanup_list.push(ptr380) + } + mbt_ffi_store32(iter_base + 16, payload379.length()) + mbt_ffi_store32(iter_base + 12, address381) + cleanup_list.push(address381) + + () + } + } + + match payload377.min_bytes { + None => { + mbt_ffi_store8(iter_base + 20, 0) + + () + } + Some(payload384) => { + mbt_ffi_store8(iter_base + 20, 1) + mbt_ffi_store32( + iter_base + 24, + payload384.reinterpret_as_int(), + ) + + () + } + } + + match payload377.max_bytes { + None => { + mbt_ffi_store8(iter_base + 28, 0) + + () + } + Some(payload386) => { + mbt_ffi_store8(iter_base + 28, 1) + mbt_ffi_store32( + iter_base + 32, + payload386.reinterpret_as_int(), + ) + + () + } + } + + () + } + PathType(payload387) => { + mbt_ffi_store8(iter_base + 0, 26) + mbt_ffi_store8( + iter_base + 8, + payload387.direction.ordinal(), + ) + mbt_ffi_store8(iter_base + 9, payload387.kind.ordinal()) + + match payload387.allowed_mime_types { + None => { + mbt_ffi_store8(iter_base + 12, 0) + + () + } + Some(payload389) => { + mbt_ffi_store8(iter_base + 12, 1) + + let address391 = mbt_ffi_malloc(payload389.length() * 8) + for index392 = 0 + index392 < payload389.length() + index392 = index392 + 1 { + let iter_elem : String = payload389[index392] + let iter_base = address391 + index392 * 8 + + let ptr390 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr390) + cleanup_list.push(ptr390) + } + mbt_ffi_store32(iter_base + 20, payload389.length()) + mbt_ffi_store32(iter_base + 16, address391) + cleanup_list.push(address391) + + () + } + } + + match payload387.allowed_extensions { + None => { + mbt_ffi_store8(iter_base + 24, 0) + + () + } + Some(payload394) => { + mbt_ffi_store8(iter_base + 24, 1) + + let address396 = mbt_ffi_malloc(payload394.length() * 8) + for index397 = 0 + index397 < payload394.length() + index397 = index397 + 1 { + let iter_elem : String = payload394[index397] + let iter_base = address396 + index397 * 8 + + let ptr395 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr395) + cleanup_list.push(ptr395) + } + mbt_ffi_store32(iter_base + 32, payload394.length()) + mbt_ffi_store32(iter_base + 28, address396) + cleanup_list.push(address396) + + () + } + } + + () + } + UrlType(payload398) => { + mbt_ffi_store8(iter_base + 0, 27) + + match payload398.allowed_schemes { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload400) => { + mbt_ffi_store8(iter_base + 8, 1) + + let address402 = mbt_ffi_malloc(payload400.length() * 8) + for index403 = 0 + index403 < payload400.length() + index403 = index403 + 1 { + let iter_elem : String = payload400[index403] + let iter_base = address402 + index403 * 8 + + let ptr401 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr401) + cleanup_list.push(ptr401) + } + mbt_ffi_store32(iter_base + 16, payload400.length()) + mbt_ffi_store32(iter_base + 12, address402) + cleanup_list.push(address402) + + () + } + } + + match payload398.allowed_hosts { + None => { + mbt_ffi_store8(iter_base + 20, 0) + + () + } + Some(payload405) => { + mbt_ffi_store8(iter_base + 20, 1) + + let address407 = mbt_ffi_malloc(payload405.length() * 8) + for index408 = 0 + index408 < payload405.length() + index408 = index408 + 1 { + let iter_elem : String = payload405[index408] + let iter_base = address407 + index408 * 8 + + let ptr406 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr406) + cleanup_list.push(ptr406) + } + mbt_ffi_store32(iter_base + 28, payload405.length()) + mbt_ffi_store32(iter_base + 24, address407) + cleanup_list.push(address407) + + () + } + } + + () + } + DatetimeType => { + mbt_ffi_store8(iter_base + 0, 28) + + () + } + DurationType => { + mbt_ffi_store8(iter_base + 0, 29) + + () + } + QuantityType(payload411) => { + mbt_ffi_store8(iter_base + 0, 30) + + let ptr412 = mbt_ffi_str2ptr(payload411.base_unit) + mbt_ffi_store32( + iter_base + 12, + payload411.base_unit.length(), + ) + mbt_ffi_store32(iter_base + 8, ptr412) + + let address414 = mbt_ffi_malloc( + payload411.allowed_suffixes.length() * 8, + ) + for index415 = 0 + index415 < payload411.allowed_suffixes.length() + index415 = index415 + 1 { + let iter_elem : String = payload411.allowed_suffixes[index415] + let iter_base = address414 + index415 * 8 + + let ptr413 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr413) + cleanup_list.push(ptr413) + } + mbt_ffi_store32( + iter_base + 20, + payload411.allowed_suffixes.length(), + ) + mbt_ffi_store32(iter_base + 16, address414) + + match payload411.min { + None => { + mbt_ffi_store8(iter_base + 24, 0) + + () + } + Some(payload417) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64(iter_base + 32, payload417.mantissa) + mbt_ffi_store32(iter_base + 40, payload417.scale) + + let ptr418 = mbt_ffi_str2ptr(payload417.unit) + mbt_ffi_store32( + iter_base + 48, + payload417.unit.length(), + ) + mbt_ffi_store32(iter_base + 44, ptr418) + cleanup_list.push(ptr418) + + () + } + } + + match payload411.max { + None => { + mbt_ffi_store8(iter_base + 56, 0) + + () + } + Some(payload420) => { + mbt_ffi_store8(iter_base + 56, 1) + mbt_ffi_store64(iter_base + 64, payload420.mantissa) + mbt_ffi_store32(iter_base + 72, payload420.scale) + + let ptr421 = mbt_ffi_str2ptr(payload420.unit) + mbt_ffi_store32( + iter_base + 80, + payload420.unit.length(), + ) + mbt_ffi_store32(iter_base + 76, ptr421) + cleanup_list.push(ptr421) + + () + } + } + cleanup_list.push(ptr412) + cleanup_list.push(address414) + + () + } + UnionType(payload422) => { + mbt_ffi_store8(iter_base + 0, 31) + + let address458 = mbt_ffi_malloc( + payload422.branches.length() * 92, + ) + for index459 = 0 + index459 < payload422.branches.length() + index459 = index459 + 1 { + let iter_elem : @types.UnionBranch = payload422.branches[index459] + let iter_base = address458 + index459 * 92 + + let ptr423 = mbt_ffi_str2ptr(iter_elem.tag) + mbt_ffi_store32(iter_base + 4, iter_elem.tag.length()) + mbt_ffi_store32(iter_base + 0, ptr423) + mbt_ffi_store32(iter_base + 8, iter_elem.body) + + match iter_elem.discriminator { + Prefix(payload424) => { + mbt_ffi_store8(iter_base + 12, 0) + + let ptr425 = mbt_ffi_str2ptr(payload424) + mbt_ffi_store32(iter_base + 20, payload424.length()) + mbt_ffi_store32(iter_base + 16, ptr425) + cleanup_list.push(ptr425) + + () + } + Suffix(payload426) => { + mbt_ffi_store8(iter_base + 12, 1) + + let ptr427 = mbt_ffi_str2ptr(payload426) + mbt_ffi_store32(iter_base + 20, payload426.length()) + mbt_ffi_store32(iter_base + 16, ptr427) + cleanup_list.push(ptr427) + + () + } + Contains(payload428) => { + mbt_ffi_store8(iter_base + 12, 2) + + let ptr429 = mbt_ffi_str2ptr(payload428) + mbt_ffi_store32(iter_base + 20, payload428.length()) + mbt_ffi_store32(iter_base + 16, ptr429) + cleanup_list.push(ptr429) + + () + } + Regex(payload430) => { + mbt_ffi_store8(iter_base + 12, 3) + + let ptr431 = mbt_ffi_str2ptr(payload430) + mbt_ffi_store32(iter_base + 20, payload430.length()) + mbt_ffi_store32(iter_base + 16, ptr431) + cleanup_list.push(ptr431) + + () + } + FieldEquals(payload432) => { + mbt_ffi_store8(iter_base + 12, 4) + + let ptr433 = mbt_ffi_str2ptr(payload432.field_name) + mbt_ffi_store32( + iter_base + 20, + payload432.field_name.length(), + ) + mbt_ffi_store32(iter_base + 16, ptr433) + + match payload432.literal { + None => { + mbt_ffi_store8(iter_base + 24, 0) + + () + } + Some(payload435) => { + mbt_ffi_store8(iter_base + 24, 1) + + let ptr436 = mbt_ffi_str2ptr(payload435) + mbt_ffi_store32( + iter_base + 32, + payload435.length(), + ) + mbt_ffi_store32(iter_base + 28, ptr436) + cleanup_list.push(ptr436) + + () + } + } + cleanup_list.push(ptr433) + + () + } + FieldAbsent(payload437) => { + mbt_ffi_store8(iter_base + 12, 5) + + let ptr438 = mbt_ffi_str2ptr(payload437) + mbt_ffi_store32(iter_base + 20, payload437.length()) + mbt_ffi_store32(iter_base + 16, ptr438) + cleanup_list.push(ptr438) + + () + } + } + + match iter_elem.metadata.doc { + None => { + mbt_ffi_store8(iter_base + 36, 0) + + () + } + Some(payload440) => { + mbt_ffi_store8(iter_base + 36, 1) + + let ptr441 = mbt_ffi_str2ptr(payload440) + mbt_ffi_store32(iter_base + 44, payload440.length()) + mbt_ffi_store32(iter_base + 40, ptr441) + cleanup_list.push(ptr441) + + () + } + } + + let address443 = mbt_ffi_malloc( + iter_elem.metadata.aliases.length() * 8, + ) + for index444 = 0 + index444 < iter_elem.metadata.aliases.length() + index444 = index444 + 1 { + let iter_elem : String = iter_elem.metadata.aliases[index444] + let iter_base = address443 + index444 * 8 + + let ptr442 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr442) + cleanup_list.push(ptr442) + } + mbt_ffi_store32( + iter_base + 52, + iter_elem.metadata.aliases.length(), + ) + mbt_ffi_store32(iter_base + 48, address443) + + let address446 = mbt_ffi_malloc( + iter_elem.metadata.examples.length() * 8, + ) + for index447 = 0 + index447 < iter_elem.metadata.examples.length() + index447 = index447 + 1 { + let iter_elem : String = iter_elem.metadata.examples[index447] + let iter_base = address446 + index447 * 8 + + let ptr445 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr445) + cleanup_list.push(ptr445) + } + mbt_ffi_store32( + iter_base + 60, + iter_elem.metadata.examples.length(), + ) + mbt_ffi_store32(iter_base + 56, address446) + + match iter_elem.metadata.deprecated { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload449) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr450 = mbt_ffi_str2ptr(payload449) + mbt_ffi_store32(iter_base + 72, payload449.length()) + mbt_ffi_store32(iter_base + 68, ptr450) + cleanup_list.push(ptr450) + + () + } + } + + match iter_elem.metadata.role { + None => { + mbt_ffi_store8(iter_base + 76, 0) + + () + } + Some(payload452) => { + mbt_ffi_store8(iter_base + 76, 1) + + match payload452 { + Multimodal => { + mbt_ffi_store8(iter_base + 80, 0) + + () + } + UnstructuredText => { + mbt_ffi_store8(iter_base + 80, 1) + + () + } + UnstructuredBinary => { + mbt_ffi_store8(iter_base + 80, 2) + + () + } + Other(payload456) => { + mbt_ffi_store8(iter_base + 80, 3) + + let ptr457 = mbt_ffi_str2ptr(payload456) + mbt_ffi_store32( + iter_base + 88, + payload456.length(), + ) + mbt_ffi_store32(iter_base + 84, ptr457) + cleanup_list.push(ptr457) + + () + } + } + + () + } + } + cleanup_list.push(ptr423) + cleanup_list.push(address443) + cleanup_list.push(address446) + } + mbt_ffi_store32( + iter_base + 12, + payload422.branches.length(), + ) + mbt_ffi_store32(iter_base + 8, address458) + cleanup_list.push(address458) + + () + } + SecretType(payload460) => { + mbt_ffi_store8(iter_base + 0, 32) + mbt_ffi_store32(iter_base + 8, payload460.inner) + + match payload460.category { + None => { + mbt_ffi_store8(iter_base + 12, 0) + + () + } + Some(payload462) => { + mbt_ffi_store8(iter_base + 12, 1) + + let ptr463 = mbt_ffi_str2ptr(payload462) + mbt_ffi_store32(iter_base + 20, payload462.length()) + mbt_ffi_store32(iter_base + 16, ptr463) + cleanup_list.push(ptr463) + + () + } + } + + () + } + QuotaTokenType(payload464) => { + mbt_ffi_store8(iter_base + 0, 33) + + match payload464.resource_name { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload466) => { + mbt_ffi_store8(iter_base + 8, 1) + + let ptr467 = mbt_ffi_str2ptr(payload466) + mbt_ffi_store32(iter_base + 16, payload466.length()) + mbt_ffi_store32(iter_base + 12, ptr467) + cleanup_list.push(ptr467) + + () + } + } + + () + } + PermissionCardType(payload468) => { + mbt_ffi_store8(iter_base + 0, 34) + mbt_ffi_store8( + iter_base + 8, + if payload468.polymorphic { + 1 + } else { + 0 + }, + ) + + () + } + FutureType(payload469) => { + mbt_ffi_store8(iter_base + 0, 35) + + match payload469 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload471) => { + mbt_ffi_store8(iter_base + 8, 1) + mbt_ffi_store32(iter_base + 12, payload471) + + () + } + } + + () + } + StreamType(payload472) => { + mbt_ffi_store8(iter_base + 0, 36) + + match payload472 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload474) => { + mbt_ffi_store8(iter_base + 8, 1) + mbt_ffi_store32(iter_base + 12, payload474) + + () + } + } + + () + } + } + + match iter_elem.metadata.doc { + None => { + mbt_ffi_store8(iter_base + 88, 0) + + () + } + Some(payload476) => { + mbt_ffi_store8(iter_base + 88, 1) + + let ptr477 = mbt_ffi_str2ptr(payload476) + mbt_ffi_store32(iter_base + 96, payload476.length()) + mbt_ffi_store32(iter_base + 92, ptr477) + cleanup_list.push(ptr477) + + () + } + } + + let address479 = mbt_ffi_malloc( + iter_elem.metadata.aliases.length() * 8, + ) + for index480 = 0 + index480 < iter_elem.metadata.aliases.length() + index480 = index480 + 1 { + let iter_elem : String = iter_elem.metadata.aliases[index480] + let iter_base = address479 + index480 * 8 + + let ptr478 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr478) + cleanup_list.push(ptr478) + } + mbt_ffi_store32( + iter_base + 104, + iter_elem.metadata.aliases.length(), + ) + mbt_ffi_store32(iter_base + 100, address479) + + let address482 = mbt_ffi_malloc( + iter_elem.metadata.examples.length() * 8, + ) + for index483 = 0 + index483 < iter_elem.metadata.examples.length() + index483 = index483 + 1 { + let iter_elem : String = iter_elem.metadata.examples[index483] + let iter_base = address482 + index483 * 8 + + let ptr481 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr481) + cleanup_list.push(ptr481) + } + mbt_ffi_store32( + iter_base + 112, + iter_elem.metadata.examples.length(), + ) + mbt_ffi_store32(iter_base + 108, address482) + + match iter_elem.metadata.deprecated { + None => { + mbt_ffi_store8(iter_base + 116, 0) + + () + } + Some(payload485) => { + mbt_ffi_store8(iter_base + 116, 1) + + let ptr486 = mbt_ffi_str2ptr(payload485) + mbt_ffi_store32(iter_base + 124, payload485.length()) + mbt_ffi_store32(iter_base + 120, ptr486) + cleanup_list.push(ptr486) + + () + } + } + + match iter_elem.metadata.role { + None => { + mbt_ffi_store8(iter_base + 128, 0) + + () + } + Some(payload488) => { + mbt_ffi_store8(iter_base + 128, 1) + + match payload488 { + Multimodal => { + mbt_ffi_store8(iter_base + 132, 0) + + () + } + UnstructuredText => { + mbt_ffi_store8(iter_base + 132, 1) + + () + } + UnstructuredBinary => { + mbt_ffi_store8(iter_base + 132, 2) + + () + } + Other(payload492) => { + mbt_ffi_store8(iter_base + 132, 3) + + let ptr493 = mbt_ffi_str2ptr(payload492) + mbt_ffi_store32(iter_base + 140, payload492.length()) + mbt_ffi_store32(iter_base + 136, ptr493) + cleanup_list.push(ptr493) + + () + } + } + + () + } + } + cleanup_list.push(address479) + cleanup_list.push(address482) + } + + let address500 = mbt_ffi_malloc( + payload131.graph.defs.length() * 24, + ) + for index501 = 0 + index501 < payload131.graph.defs.length() + index501 = index501 + 1 { + let iter_elem : @types.SchemaTypeDef = payload131.graph.defs[index501] + let iter_base = address500 + index501 * 24 + + let ptr496 = mbt_ffi_str2ptr(iter_elem.id) + mbt_ffi_store32(iter_base + 4, iter_elem.id.length()) + mbt_ffi_store32(iter_base + 0, ptr496) + + match iter_elem.name { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload498) => { + mbt_ffi_store8(iter_base + 8, 1) + + let ptr499 = mbt_ffi_str2ptr(payload498) + mbt_ffi_store32(iter_base + 16, payload498.length()) + mbt_ffi_store32(iter_base + 12, ptr499) + cleanup_list.push(ptr499) + + () + } + } + mbt_ffi_store32(iter_base + 20, iter_elem.body) + cleanup_list.push(ptr496) + } + + let address574 = mbt_ffi_malloc( + payload131.value.value_nodes.length() * 32, + ) + for index575 = 0 + index575 < payload131.value.value_nodes.length() + index575 = index575 + 1 { + let iter_elem : @types.SchemaValueNode = payload131.value.value_nodes[index575] + let iter_base = address574 + index575 * 32 + + match iter_elem { + BoolValue(payload502) => { + mbt_ffi_store8(iter_base + 0, 0) + mbt_ffi_store8( + iter_base + 8, + if payload502 { + 1 + } else { + 0 + }, + ) + + () + } + S8Value(payload503) => { + mbt_ffi_store8(iter_base + 0, 1) + mbt_ffi_store8(iter_base + 8, mbt_ffi_extend8(payload503)) + + () + } + S16Value(payload504) => { + mbt_ffi_store8(iter_base + 0, 2) + mbt_ffi_store16(iter_base + 8, mbt_ffi_extend16(payload504)) + + () + } + S32Value(payload505) => { + mbt_ffi_store8(iter_base + 0, 3) + mbt_ffi_store32(iter_base + 8, payload505) + + () + } + S64Value(payload506) => { + mbt_ffi_store8(iter_base + 0, 4) + mbt_ffi_store64(iter_base + 8, payload506) + + () + } + U8Value(payload507) => { + mbt_ffi_store8(iter_base + 0, 5) + mbt_ffi_store8(iter_base + 8, payload507.to_int()) + + () + } + U16Value(payload508) => { + mbt_ffi_store8(iter_base + 0, 6) + mbt_ffi_store16( + iter_base + 8, + payload508.reinterpret_as_int(), + ) + + () + } + U32Value(payload509) => { + mbt_ffi_store8(iter_base + 0, 7) + mbt_ffi_store32( + iter_base + 8, + payload509.reinterpret_as_int(), + ) + + () + } + U64Value(payload510) => { + mbt_ffi_store8(iter_base + 0, 8) + mbt_ffi_store64( + iter_base + 8, + payload510.reinterpret_as_int64(), + ) + + () + } + F32Value(payload511) => { + mbt_ffi_store8(iter_base + 0, 9) + mbt_ffi_storef32(iter_base + 8, payload511) + + () + } + F64Value(payload512) => { + mbt_ffi_store8(iter_base + 0, 10) + mbt_ffi_storef64(iter_base + 8, payload512) + + () + } + CharValue(payload513) => { + mbt_ffi_store8(iter_base + 0, 11) + mbt_ffi_store32(iter_base + 8, payload513.to_int()) + + () + } + StringValue(payload514) => { + mbt_ffi_store8(iter_base + 0, 12) + + let ptr515 = mbt_ffi_str2ptr(payload514) + mbt_ffi_store32(iter_base + 12, payload514.length()) + mbt_ffi_store32(iter_base + 8, ptr515) + cleanup_list.push(ptr515) + + () + } + RecordValue(payload516) => { + mbt_ffi_store8(iter_base + 0, 13) + + let address517 = mbt_ffi_malloc(payload516.length() * 4) + for index518 = 0 + index518 < payload516.length() + index518 = index518 + 1 { + let iter_elem : Int = payload516[index518] + let iter_base = address517 + index518 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(iter_base + 12, payload516.length()) + mbt_ffi_store32(iter_base + 8, address517) + cleanup_list.push(address517) + + () + } + VariantValue(payload519) => { + mbt_ffi_store8(iter_base + 0, 14) + mbt_ffi_store32( + iter_base + 8, + payload519.case.reinterpret_as_int(), + ) + + match payload519.payload { + None => { + mbt_ffi_store8(iter_base + 12, 0) + + () + } + Some(payload521) => { + mbt_ffi_store8(iter_base + 12, 1) + mbt_ffi_store32(iter_base + 16, payload521) + + () + } + } + + () + } + EnumValue(payload522) => { + mbt_ffi_store8(iter_base + 0, 15) + mbt_ffi_store32( + iter_base + 8, + payload522.reinterpret_as_int(), + ) + + () + } + FlagsValue(payload523) => { + mbt_ffi_store8(iter_base + 0, 16) + + let address524 = mbt_ffi_malloc(payload523.length() * 1) + for index525 = 0 + index525 < payload523.length() + index525 = index525 + 1 { + let iter_elem : Bool = payload523[index525] + let iter_base = address524 + index525 * 1 + mbt_ffi_store8( + iter_base + 0, + if iter_elem { + 1 + } else { + 0 + }, + ) + } + mbt_ffi_store32(iter_base + 12, payload523.length()) + mbt_ffi_store32(iter_base + 8, address524) + cleanup_list.push(address524) + + () + } + TupleValue(payload526) => { + mbt_ffi_store8(iter_base + 0, 17) + + let address527 = mbt_ffi_malloc(payload526.length() * 4) + for index528 = 0 + index528 < payload526.length() + index528 = index528 + 1 { + let iter_elem : Int = payload526[index528] + let iter_base = address527 + index528 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(iter_base + 12, payload526.length()) + mbt_ffi_store32(iter_base + 8, address527) + cleanup_list.push(address527) + + () + } + ListValue(payload529) => { + mbt_ffi_store8(iter_base + 0, 18) + + let address530 = mbt_ffi_malloc(payload529.length() * 4) + for index531 = 0 + index531 < payload529.length() + index531 = index531 + 1 { + let iter_elem : Int = payload529[index531] + let iter_base = address530 + index531 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(iter_base + 12, payload529.length()) + mbt_ffi_store32(iter_base + 8, address530) + cleanup_list.push(address530) + + () + } + FixedListValue(payload532) => { + mbt_ffi_store8(iter_base + 0, 19) + + let address533 = mbt_ffi_malloc(payload532.length() * 4) + for index534 = 0 + index534 < payload532.length() + index534 = index534 + 1 { + let iter_elem : Int = payload532[index534] + let iter_base = address533 + index534 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(iter_base + 12, payload532.length()) + mbt_ffi_store32(iter_base + 8, address533) + cleanup_list.push(address533) + + () + } + MapValue(payload535) => { + mbt_ffi_store8(iter_base + 0, 20) + + let address536 = mbt_ffi_malloc(payload535.length() * 8) + for index537 = 0 + index537 < payload535.length() + index537 = index537 + 1 { + let iter_elem : @types.MapEntry = payload535[index537] + let iter_base = address536 + index537 * 8 + mbt_ffi_store32(iter_base + 0, iter_elem.key) + mbt_ffi_store32(iter_base + 4, iter_elem.value) + } + mbt_ffi_store32(iter_base + 12, payload535.length()) + mbt_ffi_store32(iter_base + 8, address536) + cleanup_list.push(address536) + + () + } + OptionValue(payload538) => { + mbt_ffi_store8(iter_base + 0, 21) + + match payload538 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload540) => { + mbt_ffi_store8(iter_base + 8, 1) + mbt_ffi_store32(iter_base + 12, payload540) + + () + } + } + + () + } + ResultValue(payload541) => { + mbt_ffi_store8(iter_base + 0, 22) + + match payload541 { + OkValue(payload542) => { + mbt_ffi_store8(iter_base + 8, 0) + + match payload542 { + None => { + mbt_ffi_store8(iter_base + 12, 0) + + () + } + Some(payload544) => { + mbt_ffi_store8(iter_base + 12, 1) + mbt_ffi_store32(iter_base + 16, payload544) + + () + } + } + + () + } + ErrValue(payload545) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload545 { + None => { + mbt_ffi_store8(iter_base + 12, 0) + + () + } + Some(payload547) => { + mbt_ffi_store8(iter_base + 12, 1) + mbt_ffi_store32(iter_base + 16, payload547) + + () + } + } + + () + } + } + + () + } + TextValue(payload548) => { + mbt_ffi_store8(iter_base + 0, 23) + + let ptr549 = mbt_ffi_str2ptr(payload548.text) + mbt_ffi_store32(iter_base + 12, payload548.text.length()) + mbt_ffi_store32(iter_base + 8, ptr549) + + match payload548.language { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload551) => { + mbt_ffi_store8(iter_base + 16, 1) + + let ptr552 = mbt_ffi_str2ptr(payload551) + mbt_ffi_store32(iter_base + 24, payload551.length()) + mbt_ffi_store32(iter_base + 20, ptr552) + cleanup_list.push(ptr552) + + () + } + } + cleanup_list.push(ptr549) + + () + } + BinaryValue(payload553) => { + mbt_ffi_store8(iter_base + 0, 24) + + let ptr554 = mbt_ffi_bytes2ptr(payload553.bytes) + + mbt_ffi_store32(iter_base + 12, payload553.bytes.length()) + mbt_ffi_store32(iter_base + 8, ptr554) + + match payload553.mime_type { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload556) => { + mbt_ffi_store8(iter_base + 16, 1) + + let ptr557 = mbt_ffi_str2ptr(payload556) + mbt_ffi_store32(iter_base + 24, payload556.length()) + mbt_ffi_store32(iter_base + 20, ptr557) + cleanup_list.push(ptr557) + + () + } + } + cleanup_list.push(ptr554) + + () + } + PathValue(payload558) => { + mbt_ffi_store8(iter_base + 0, 25) + + let ptr559 = mbt_ffi_str2ptr(payload558) + mbt_ffi_store32(iter_base + 12, payload558.length()) + mbt_ffi_store32(iter_base + 8, ptr559) + cleanup_list.push(ptr559) + + () + } + UrlValue(payload560) => { + mbt_ffi_store8(iter_base + 0, 26) + + let ptr561 = mbt_ffi_str2ptr(payload560) + mbt_ffi_store32(iter_base + 12, payload560.length()) + mbt_ffi_store32(iter_base + 8, ptr561) + cleanup_list.push(ptr561) + + () + } + DatetimeValue(payload562) => { + mbt_ffi_store8(iter_base + 0, 27) + mbt_ffi_store64(iter_base + 8, payload562.seconds) + mbt_ffi_store32( + iter_base + 16, + payload562.nanoseconds.reinterpret_as_int(), + ) + + () + } + DurationValue(payload563) => { + mbt_ffi_store8(iter_base + 0, 28) + mbt_ffi_store64(iter_base + 8, payload563.nanoseconds) + + () + } + QuantityValueNode(payload564) => { + mbt_ffi_store8(iter_base + 0, 29) + mbt_ffi_store64(iter_base + 8, payload564.mantissa) + mbt_ffi_store32(iter_base + 16, payload564.scale) + + let ptr565 = mbt_ffi_str2ptr(payload564.unit) + mbt_ffi_store32(iter_base + 24, payload564.unit.length()) + mbt_ffi_store32(iter_base + 20, ptr565) + cleanup_list.push(ptr565) + + () + } + UnionValue(payload566) => { + mbt_ffi_store8(iter_base + 0, 30) + + let ptr567 = mbt_ffi_str2ptr(payload566.tag) + mbt_ffi_store32(iter_base + 12, payload566.tag.length()) + mbt_ffi_store32(iter_base + 8, ptr567) + mbt_ffi_store32(iter_base + 16, payload566.body) + cleanup_list.push(ptr567) + + () + } + SecretValue(payload568) => { + mbt_ffi_store8(iter_base + 0, 31) + + let @types.Secret(handle569) = payload568 + mbt_ffi_store32(iter_base + 8, handle569) + + () + } + QuotaTokenHandle(payload570) => { + mbt_ffi_store8(iter_base + 0, 32) + + let @types.QuotaToken(handle571) = payload570 + mbt_ffi_store32(iter_base + 8, handle571) + + () + } + PermissionCardHandle(payload572) => { + mbt_ffi_store8(iter_base + 0, 33) + + let @types.PermissionCard(handle573) = payload572 + mbt_ffi_store32(iter_base + 8, handle573) + + () + } + } + } + cleanup_list.push(address494) + cleanup_list.push(address500) + cleanup_list.push(address574) + + ( + 4, + address494, + payload131.graph.type_nodes.length(), + address500, + payload131.graph.defs.length(), + payload131.graph.root, + address574, + payload131.value.value_nodes.length(), + payload131.value.root, + ) + } + } + + ( + 1, lowered576, lowered577, lowered578, lowered579, lowered580, lowered581, + lowered582, lowered583, lowered584, + ) + } + } + + wasmExportAsyncInvokeGolemAgentGuestTaskReturn( + lowered585, lowered586, lowered587, lowered588, lowered589, lowered590, lowered591, + lowered592, lowered593, lowered594, + ) + + cleanup_list.each(mbt_ffi_free) + + @async-core.task_returned() + } + None => () + } +} + +///| +#doc(hidden) +pub fn wasmExportAsyncInvokeGolemAgentGuest( + event_raw : Int, + waitable : Int, + code : Int, +) -> Int { + @async-core.cb(event_raw, waitable, code) +} + +///| +#doc(hidden) +pub fn wasmExportGetDefinition() -> Int { + let result : @common.AgentType = get_definition() + let return_area = mbt_ffi_malloc(176) + __wit_bindgen_lower_t406(return_area + 0, result) + let ret = return_area + return ret +} + +///| +#doc(hidden) +pub fn wasmExportGetDefinitionPostReturn(p0 : Int) -> Unit { + mbt_ffi_free(mbt_ffi_load32(p0 + 0)) + mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + mbt_ffi_free(mbt_ffi_load32(p0 + 16)) + + for index19 = 0; index19 < mbt_ffi_load32(p0 + 28); index19 = index19 + 1 { + let iter_base = mbt_ffi_load32(p0 + 24) + index19 * 144 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 3 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 4 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 5 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 6 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 7 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 8 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 9 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 10 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 11 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 12 => () + 13 => () + 14 => { + for index1 = 0 + index1 < mbt_ffi_load32(iter_base + 12) + index1 = index1 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index1 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + for index = 0 + index < mbt_ffi_load32(iter_base + 28) + index = index + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index0 = 0 + index0 < mbt_ffi_load32(iter_base + 36) + index0 = index0 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index0 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 52) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 60)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 15 => { + for index4 = 0 + index4 < mbt_ffi_load32(iter_base + 12) + index4 = index4 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index4 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index2 = 0 + index2 < mbt_ffi_load32(iter_base + 32) + index2 = index2 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index2 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index3 = 0 + index3 < mbt_ffi_load32(iter_base + 40) + index3 = index3 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + index3 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 16 => { + for index5 = 0 + index5 < mbt_ffi_load32(iter_base + 12) + index5 = index5 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index5 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 17 => { + for index6 = 0 + index6 < mbt_ffi_load32(iter_base + 12) + index6 = index6 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index6 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => () + 20 => () + 21 => () + 22 => () + 23 => () + 24 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index7 = 0 + index7 < mbt_ffi_load32(iter_base + 16) + index7 = index7 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index7 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + } + 25 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index8 = 0 + index8 < mbt_ffi_load32(iter_base + 16) + index8 = index8 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index8 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + 26 => { + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => { + for index9 = 0 + index9 < mbt_ffi_load32(iter_base + 20) + index9 = index9 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index9 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => { + for index10 = 0 + index10 < mbt_ffi_load32(iter_base + 32) + index10 = index10 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index10 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + } + _ => panic() + } + } + 27 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index11 = 0 + index11 < mbt_ffi_load32(iter_base + 16) + index11 = index11 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index11 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 20) { + 0 => () + 1 => { + for index12 = 0 + index12 < mbt_ffi_load32(iter_base + 28) + index12 = index12 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index12 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + _ => panic() + } + } + 28 => () + 29 => () + 30 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index13 = 0 + index13 < mbt_ffi_load32(iter_base + 20) + index13 = index13 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index13 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 76)) + _ => panic() + } + } + 31 => { + for index16 = 0 + index16 < mbt_ffi_load32(iter_base + 12) + index16 = index16 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index16 * 92 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 4 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + } + 5 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + + for index14 = 0 + index14 < mbt_ffi_load32(iter_base + 52) + index14 = index14 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + index14 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + for index15 = 0 + index15 < mbt_ffi_load32(iter_base + 60) + index15 = index15 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + index15 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 32 => + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + 33 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + 34 => () + 35 => () + 36 => () + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 88) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 92)) + _ => panic() + } + + for index17 = 0 + index17 < mbt_ffi_load32(iter_base + 104) + index17 = index17 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index17 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + for index18 = 0 + index18 < mbt_ffi_load32(iter_base + 112) + index18 = index18 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index18 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + match mbt_ffi_load8_u(iter_base + 116) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 120)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 128) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 132) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 136)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 24)) + + for index20 = 0; index20 < mbt_ffi_load32(p0 + 36); index20 = index20 + 1 { + let iter_base = mbt_ffi_load32(p0 + 32) + index20 * 24 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 32)) + + match mbt_ffi_load8_u(p0 + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(p0 + 48)) + _ => panic() + } + mbt_ffi_free(mbt_ffi_load32(p0 + 56)) + + match mbt_ffi_load8_u(p0 + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(p0 + 68)) + _ => panic() + } + + match mbt_ffi_load8_u(p0 + 76) { + 0 => { + for index23 = 0; index23 < mbt_ffi_load32(p0 + 84); index23 = index23 + 1 { + let iter_base = mbt_ffi_load32(p0 + 80) + index23 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index21 = 0 + index21 < mbt_ffi_load32(iter_base + 32) + index21 = index21 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index21 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index22 = 0 + index22 < mbt_ffi_load32(iter_base + 40) + index22 = index22 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + index22 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 80)) + } + _ => panic() + } + + for index32 = 0; index32 < mbt_ffi_load32(p0 + 92); index32 = index32 + 1 { + let iter_base = mbt_ffi_load32(p0 + 88) + index32 * 88 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index28 = 0 + index28 < mbt_ffi_load32(iter_base + 20) + index28 = index28 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index28 * 48 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + _ => panic() + } + + for index24 = 0 + index24 < mbt_ffi_load32(iter_base + 16) + index24 = index24 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index24 * 12 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => () + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + for index25 = 0 + index25 < mbt_ffi_load32(iter_base + 24) + index25 = index25 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 20) + index25 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + + for index26 = 0 + index26 < mbt_ffi_load32(iter_base + 32) + index26 = index26 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index26 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index27 = 0 + index27 < mbt_ffi_load32(iter_base + 44) + index27 = index27 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index27 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => { + for index31 = 0 + index31 < mbt_ffi_load32(iter_base + 44) + index31 = index31 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index31 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index29 = 0 + index29 < mbt_ffi_load32(iter_base + 32) + index29 = index29 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index29 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index30 = 0 + index30 < mbt_ffi_load32(iter_base + 40) + index30 = index30 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + index30 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 88)) + + for index67 = 0; index67 < mbt_ffi_load32(p0 + 100); index67 = index67 + 1 { + let iter_base = mbt_ffi_load32(p0 + 96) + index67 * 92 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + for index53 = 0 + index53 < mbt_ffi_load32(iter_base + 24) + index53 = index53 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 20) + index53 * 144 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 3 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 4 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 5 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 6 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 7 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 8 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 9 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 10 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 11 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 12 => () + 13 => () + 14 => { + for index35 = 0 + index35 < mbt_ffi_load32(iter_base + 12) + index35 = index35 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index35 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + for index33 = 0 + index33 < mbt_ffi_load32(iter_base + 28) + index33 = index33 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index33 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index34 = 0 + index34 < mbt_ffi_load32(iter_base + 36) + index34 = index34 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index34 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 52) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 60)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 15 => { + for index38 = 0 + index38 < mbt_ffi_load32(iter_base + 12) + index38 = index38 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index38 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index36 = 0 + index36 < mbt_ffi_load32(iter_base + 32) + index36 = index36 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index36 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index37 = 0 + index37 < mbt_ffi_load32(iter_base + 40) + index37 = index37 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + index37 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 16 => { + for index39 = 0 + index39 < mbt_ffi_load32(iter_base + 12) + index39 = index39 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index39 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 17 => { + for index40 = 0 + index40 < mbt_ffi_load32(iter_base + 12) + index40 = index40 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index40 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => () + 20 => () + 21 => () + 22 => () + 23 => () + 24 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index41 = 0 + index41 < mbt_ffi_load32(iter_base + 16) + index41 = index41 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index41 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + } + 25 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index42 = 0 + index42 < mbt_ffi_load32(iter_base + 16) + index42 = index42 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index42 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + 26 => { + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => { + for index43 = 0 + index43 < mbt_ffi_load32(iter_base + 20) + index43 = index43 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index43 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => { + for index44 = 0 + index44 < mbt_ffi_load32(iter_base + 32) + index44 = index44 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index44 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + } + _ => panic() + } + } + 27 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index45 = 0 + index45 < mbt_ffi_load32(iter_base + 16) + index45 = index45 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index45 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 20) { + 0 => () + 1 => { + for index46 = 0 + index46 < mbt_ffi_load32(iter_base + 28) + index46 = index46 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index46 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + _ => panic() + } + } + 28 => () + 29 => () + 30 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index47 = 0 + index47 < mbt_ffi_load32(iter_base + 20) + index47 = index47 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index47 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 76)) + _ => panic() + } + } + 31 => { + for index50 = 0 + index50 < mbt_ffi_load32(iter_base + 12) + index50 = index50 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index50 * 92 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 4 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + } + 5 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + + for index48 = 0 + index48 < mbt_ffi_load32(iter_base + 52) + index48 = index48 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + index48 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + for index49 = 0 + index49 < mbt_ffi_load32(iter_base + 60) + index49 = index49 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + index49 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 32 => + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + 33 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + 34 => () + 35 => () + 36 => () + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 88) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 92)) + _ => panic() + } + + for index51 = 0 + index51 < mbt_ffi_load32(iter_base + 104) + index51 = index51 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index51 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + for index52 = 0 + index52 < mbt_ffi_load32(iter_base + 112) + index52 = index52 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index52 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + match mbt_ffi_load8_u(iter_base + 116) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 120)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 128) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 132) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 136)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + + for index54 = 0 + index54 < mbt_ffi_load32(iter_base + 32) + index54 = index54 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index54 * 24 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 72) { + 0 => { + for index57 = 0 + index57 < mbt_ffi_load32(iter_base + 80) + index57 = index57 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 76) + index57 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index55 = 0 + index55 < mbt_ffi_load32(iter_base + 32) + index55 = index55 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index55 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index56 = 0 + index56 < mbt_ffi_load32(iter_base + 40) + index56 = index56 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + index56 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 76)) + } + _ => panic() + } + + for index66 = 0 + index66 < mbt_ffi_load32(iter_base + 88) + index66 = index66 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 84) + index66 * 88 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index62 = 0 + index62 < mbt_ffi_load32(iter_base + 20) + index62 = index62 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index62 * 48 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + _ => panic() + } + + for index58 = 0 + index58 < mbt_ffi_load32(iter_base + 16) + index58 = index58 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index58 * 12 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => () + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + for index59 = 0 + index59 < mbt_ffi_load32(iter_base + 24) + index59 = index59 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 20) + index59 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + + for index60 = 0 + index60 < mbt_ffi_load32(iter_base + 32) + index60 = index60 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index60 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index61 = 0 + index61 < mbt_ffi_load32(iter_base + 44) + index61 = index61 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index61 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => { + for index65 = 0 + index65 < mbt_ffi_load32(iter_base + 44) + index65 = index65 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index65 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index63 = 0 + index63 < mbt_ffi_load32(iter_base + 32) + index63 = index63 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index63 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index64 = 0 + index64 < mbt_ffi_load32(iter_base + 40) + index64 = index64 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + index64 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 96)) + + match mbt_ffi_load8_u(p0 + 108) { + 0 => () + 1 => { + for index68 = 0; index68 < mbt_ffi_load32(p0 + 116); index68 = index68 + 1 { + let iter_base = mbt_ffi_load32(p0 + 112) + index68 * 12 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => () + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 112)) + + for index69 = 0; index69 < mbt_ffi_load32(p0 + 128); index69 = index69 + 1 { + let iter_base = mbt_ffi_load32(p0 + 124) + index69 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 124)) + + for index70 = 0; index70 < mbt_ffi_load32(p0 + 136); index70 = index70 + 1 { + let iter_base = mbt_ffi_load32(p0 + 132) + index70 * 12 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => () + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 132)) + } + _ => panic() + } + + for index72 = 0; index72 < mbt_ffi_load32(p0 + 172); index72 = index72 + 1 { + let iter_base = mbt_ffi_load32(p0 + 168) + index72 * 16 + + for index71 = 0 + index71 < mbt_ffi_load32(iter_base + 8) + index71 = index71 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + index71 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 168)) +} + +///| +#doc(hidden) +pub fn wasmExportDiscoverAgentTypes() -> Int { + let result : Result[Array[@common.AgentType], @common.AgentError] = discover_agent_types() + let return_area = mbt_ffi_malloc(40) + + match result { + Ok(payload) => { + mbt_ffi_store8(return_area + 0, 0) + + let address = mbt_ffi_malloc(payload.length() * 176) + for index = 0; index < payload.length(); index = index + 1 { + let iter_elem : @common.AgentType = payload[index] + let iter_base = address + index * 176 + __wit_bindgen_lower_t406(iter_base + 0, iter_elem) + } + mbt_ffi_store32(return_area + 8, payload.length()) + mbt_ffi_store32(return_area + 4, address) + + () + } + Err(payload0) => { + mbt_ffi_store8(return_area + 0, 1) + __wit_bindgen_lower_t409(return_area + 4, payload0) + + () + } + } + let ret = return_area + return ret +} + +///| +#doc(hidden) +pub fn wasmExportDiscoverAgentTypesPostReturn(p0 : Int) -> Unit { + match mbt_ffi_load8_u(p0 + 0) { + 0 => { + for index73 = 0; index73 < mbt_ffi_load32(p0 + 8); index73 = index73 + 1 { + let iter_base = mbt_ffi_load32(p0 + 4) + index73 * 176 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index19 = 0 + index19 < mbt_ffi_load32(iter_base + 28) + index19 = index19 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index19 * 144 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 3 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 4 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 5 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 6 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 7 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 8 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 9 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 10 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 11 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 12 => () + 13 => () + 14 => { + for index1 = 0 + index1 < mbt_ffi_load32(iter_base + 12) + index1 = index1 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index1 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + for index = 0 + index < mbt_ffi_load32(iter_base + 28) + index = index + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index0 = 0 + index0 < mbt_ffi_load32(iter_base + 36) + index0 = index0 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index0 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 52) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 60)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 15 => { + for index4 = 0 + index4 < mbt_ffi_load32(iter_base + 12) + index4 = index4 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index4 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index2 = 0 + index2 < mbt_ffi_load32(iter_base + 32) + index2 = index2 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index2 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index3 = 0 + index3 < mbt_ffi_load32(iter_base + 40) + index3 = index3 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + index3 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 16 => { + for index5 = 0 + index5 < mbt_ffi_load32(iter_base + 12) + index5 = index5 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index5 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 17 => { + for index6 = 0 + index6 < mbt_ffi_load32(iter_base + 12) + index6 = index6 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index6 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => () + 20 => () + 21 => () + 22 => () + 23 => () + 24 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index7 = 0 + index7 < mbt_ffi_load32(iter_base + 16) + index7 = index7 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index7 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + } + 25 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index8 = 0 + index8 < mbt_ffi_load32(iter_base + 16) + index8 = index8 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index8 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + 26 => { + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => { + for index9 = 0 + index9 < mbt_ffi_load32(iter_base + 20) + index9 = index9 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index9 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => { + for index10 = 0 + index10 < mbt_ffi_load32(iter_base + 32) + index10 = index10 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index10 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + } + _ => panic() + } + } + 27 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index11 = 0 + index11 < mbt_ffi_load32(iter_base + 16) + index11 = index11 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index11 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 20) { + 0 => () + 1 => { + for index12 = 0 + index12 < mbt_ffi_load32(iter_base + 28) + index12 = index12 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index12 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + _ => panic() + } + } + 28 => () + 29 => () + 30 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index13 = 0 + index13 < mbt_ffi_load32(iter_base + 20) + index13 = index13 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index13 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 76)) + _ => panic() + } + } + 31 => { + for index16 = 0 + index16 < mbt_ffi_load32(iter_base + 12) + index16 = index16 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index16 * 92 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 4 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + } + 5 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + + for index14 = 0 + index14 < mbt_ffi_load32(iter_base + 52) + index14 = index14 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + index14 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + for index15 = 0 + index15 < mbt_ffi_load32(iter_base + 60) + index15 = index15 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + index15 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 32 => + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + 33 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + 34 => () + 35 => () + 36 => () + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 88) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 92)) + _ => panic() + } + + for index17 = 0 + index17 < mbt_ffi_load32(iter_base + 104) + index17 = index17 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index17 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + for index18 = 0 + index18 < mbt_ffi_load32(iter_base + 112) + index18 = index18 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index18 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + match mbt_ffi_load8_u(iter_base + 116) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 120)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 128) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 132) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 136)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index20 = 0 + index20 < mbt_ffi_load32(iter_base + 36) + index20 = index20 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index20 * 24 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => { + for index23 = 0 + index23 < mbt_ffi_load32(iter_base + 84) + index23 = index23 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 80) + index23 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index21 = 0 + index21 < mbt_ffi_load32(iter_base + 32) + index21 = index21 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index21 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index22 = 0 + index22 < mbt_ffi_load32(iter_base + 40) + index22 = index22 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + index22 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 80)) + } + _ => panic() + } + + for index32 = 0 + index32 < mbt_ffi_load32(iter_base + 92) + index32 = index32 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 88) + index32 * 88 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index28 = 0 + index28 < mbt_ffi_load32(iter_base + 20) + index28 = index28 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index28 * 48 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + _ => panic() + } + + for index24 = 0 + index24 < mbt_ffi_load32(iter_base + 16) + index24 = index24 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index24 * 12 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => () + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + for index25 = 0 + index25 < mbt_ffi_load32(iter_base + 24) + index25 = index25 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 20) + index25 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + + for index26 = 0 + index26 < mbt_ffi_load32(iter_base + 32) + index26 = index26 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index26 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index27 = 0 + index27 < mbt_ffi_load32(iter_base + 44) + index27 = index27 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index27 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => { + for index31 = 0 + index31 < mbt_ffi_load32(iter_base + 44) + index31 = index31 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index31 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index29 = 0 + index29 < mbt_ffi_load32(iter_base + 32) + index29 = index29 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index29 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index30 = 0 + index30 < mbt_ffi_load32(iter_base + 40) + index30 = index30 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + index30 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 88)) + + for index67 = 0 + index67 < mbt_ffi_load32(iter_base + 100) + index67 = index67 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 96) + index67 * 92 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + for index53 = 0 + index53 < mbt_ffi_load32(iter_base + 24) + index53 = index53 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 20) + index53 * 144 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 3 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 4 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 5 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 6 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 7 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 8 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 9 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 10 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 11 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 12 => () + 13 => () + 14 => { + for index35 = 0 + index35 < mbt_ffi_load32(iter_base + 12) + index35 = index35 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index35 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + for index33 = 0 + index33 < mbt_ffi_load32(iter_base + 28) + index33 = index33 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index33 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index34 = 0 + index34 < mbt_ffi_load32(iter_base + 36) + index34 = index34 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index34 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 52) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 60)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 15 => { + for index38 = 0 + index38 < mbt_ffi_load32(iter_base + 12) + index38 = index38 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index38 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index36 = 0 + index36 < mbt_ffi_load32(iter_base + 32) + index36 = index36 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index36 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index37 = 0 + index37 < mbt_ffi_load32(iter_base + 40) + index37 = index37 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + index37 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 16 => { + for index39 = 0 + index39 < mbt_ffi_load32(iter_base + 12) + index39 = index39 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index39 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 17 => { + for index40 = 0 + index40 < mbt_ffi_load32(iter_base + 12) + index40 = index40 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index40 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => () + 20 => () + 21 => () + 22 => () + 23 => () + 24 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index41 = 0 + index41 < mbt_ffi_load32(iter_base + 16) + index41 = index41 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index41 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + } + 25 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index42 = 0 + index42 < mbt_ffi_load32(iter_base + 16) + index42 = index42 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index42 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + 26 => { + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => { + for index43 = 0 + index43 < mbt_ffi_load32(iter_base + 20) + index43 = index43 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index43 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => { + for index44 = 0 + index44 < mbt_ffi_load32(iter_base + 32) + index44 = index44 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index44 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + } + _ => panic() + } + } + 27 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index45 = 0 + index45 < mbt_ffi_load32(iter_base + 16) + index45 = index45 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index45 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 20) { + 0 => () + 1 => { + for index46 = 0 + index46 < mbt_ffi_load32(iter_base + 28) + index46 = index46 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index46 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + _ => panic() + } + } + 28 => () + 29 => () + 30 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index47 = 0 + index47 < mbt_ffi_load32(iter_base + 20) + index47 = index47 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index47 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 76)) + _ => panic() + } + } + 31 => { + for index50 = 0 + index50 < mbt_ffi_load32(iter_base + 12) + index50 = index50 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index50 * 92 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 4 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + } + 5 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + + for index48 = 0 + index48 < mbt_ffi_load32(iter_base + 52) + index48 = index48 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + index48 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + for index49 = 0 + index49 < mbt_ffi_load32(iter_base + 60) + index49 = index49 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + index49 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 32 => + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + 33 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + 34 => () + 35 => () + 36 => () + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 88) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 92)) + _ => panic() + } + + for index51 = 0 + index51 < mbt_ffi_load32(iter_base + 104) + index51 = index51 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index51 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + for index52 = 0 + index52 < mbt_ffi_load32(iter_base + 112) + index52 = index52 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index52 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + match mbt_ffi_load8_u(iter_base + 116) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 120)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 128) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 132) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 136)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + + for index54 = 0 + index54 < mbt_ffi_load32(iter_base + 32) + index54 = index54 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index54 * 24 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 72) { + 0 => { + for index57 = 0 + index57 < mbt_ffi_load32(iter_base + 80) + index57 = index57 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 76) + index57 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index55 = 0 + index55 < mbt_ffi_load32(iter_base + 32) + index55 = index55 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index55 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index56 = 0 + index56 < mbt_ffi_load32(iter_base + 40) + index56 = index56 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + index56 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 76)) + } + _ => panic() + } + + for index66 = 0 + index66 < mbt_ffi_load32(iter_base + 88) + index66 = index66 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 84) + index66 * 88 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index62 = 0 + index62 < mbt_ffi_load32(iter_base + 20) + index62 = index62 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index62 * 48 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + _ => panic() + } + + for index58 = 0 + index58 < mbt_ffi_load32(iter_base + 16) + index58 = index58 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index58 * 12 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => () + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + for index59 = 0 + index59 < mbt_ffi_load32(iter_base + 24) + index59 = index59 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 20) + index59 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + + for index60 = 0 + index60 < mbt_ffi_load32(iter_base + 32) + index60 = index60 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index60 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index61 = 0 + index61 < mbt_ffi_load32(iter_base + 44) + index61 = index61 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index61 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => { + for index65 = 0 + index65 < mbt_ffi_load32(iter_base + 44) + index65 = index65 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index65 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index63 = 0 + index63 < mbt_ffi_load32(iter_base + 32) + index63 = index63 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index63 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index64 = 0 + index64 < mbt_ffi_load32(iter_base + 40) + index64 = index64 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + index64 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 96)) + + match mbt_ffi_load8_u(iter_base + 108) { + 0 => () + 1 => { + for index68 = 0 + index68 < mbt_ffi_load32(iter_base + 116) + index68 = index68 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 112) + index68 * 12 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => () + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 112)) + + for index69 = 0 + index69 < mbt_ffi_load32(iter_base + 128) + index69 = index69 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 124) + index69 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 124)) + + for index70 = 0 + index70 < mbt_ffi_load32(iter_base + 136) + index70 = index70 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 132) + index70 * 12 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => () + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 132)) + } + _ => panic() + } + + for index72 = 0 + index72 < mbt_ffi_load32(iter_base + 172) + index72 = index72 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 168) + index72 * 16 + + for index71 = 0 + index71 < mbt_ffi_load32(iter_base + 8) + index71 = index71 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + index71 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 168)) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 4)) + } + 1 => + match mbt_ffi_load8_u(p0 + 4) { + 0 => mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + 1 => mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + 2 => mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + 3 => mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + 4 => { + for index94 = 0 + index94 < mbt_ffi_load32(p0 + 12) + index94 = index94 + 1 { + let iter_base = mbt_ffi_load32(p0 + 8) + index94 * 144 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 3 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 4 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 5 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 6 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 7 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 8 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 9 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 10 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 11 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 12 => () + 13 => () + 14 => { + for index76 = 0 + index76 < mbt_ffi_load32(iter_base + 12) + index76 = index76 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index76 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + for index74 = 0 + index74 < mbt_ffi_load32(iter_base + 28) + index74 = index74 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index74 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index75 = 0 + index75 < mbt_ffi_load32(iter_base + 36) + index75 = index75 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index75 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 52) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 60)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 15 => { + for index79 = 0 + index79 < mbt_ffi_load32(iter_base + 12) + index79 = index79 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index79 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index77 = 0 + index77 < mbt_ffi_load32(iter_base + 32) + index77 = index77 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index77 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index78 = 0 + index78 < mbt_ffi_load32(iter_base + 40) + index78 = index78 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + index78 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 16 => { + for index80 = 0 + index80 < mbt_ffi_load32(iter_base + 12) + index80 = index80 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index80 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 17 => { + for index81 = 0 + index81 < mbt_ffi_load32(iter_base + 12) + index81 = index81 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index81 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => () + 20 => () + 21 => () + 22 => () + 23 => () + 24 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index82 = 0 + index82 < mbt_ffi_load32(iter_base + 16) + index82 = index82 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index82 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + } + 25 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index83 = 0 + index83 < mbt_ffi_load32(iter_base + 16) + index83 = index83 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index83 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + 26 => { + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => { + for index84 = 0 + index84 < mbt_ffi_load32(iter_base + 20) + index84 = index84 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index84 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => { + for index85 = 0 + index85 < mbt_ffi_load32(iter_base + 32) + index85 = index85 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index85 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + } + _ => panic() + } + } + 27 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index86 = 0 + index86 < mbt_ffi_load32(iter_base + 16) + index86 = index86 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index86 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 20) { + 0 => () + 1 => { + for index87 = 0 + index87 < mbt_ffi_load32(iter_base + 28) + index87 = index87 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index87 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + _ => panic() + } + } + 28 => () + 29 => () + 30 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index88 = 0 + index88 < mbt_ffi_load32(iter_base + 20) + index88 = index88 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index88 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 76)) + _ => panic() + } + } + 31 => { + for index91 = 0 + index91 < mbt_ffi_load32(iter_base + 12) + index91 = index91 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index91 * 92 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 4 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + } + 5 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + + for index89 = 0 + index89 < mbt_ffi_load32(iter_base + 52) + index89 = index89 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + index89 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + for index90 = 0 + index90 < mbt_ffi_load32(iter_base + 60) + index90 = index90 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + index90 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 32 => + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + 33 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + 34 => () + 35 => () + 36 => () + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 88) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 92)) + _ => panic() + } + + for index92 = 0 + index92 < mbt_ffi_load32(iter_base + 104) + index92 = index92 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index92 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + for index93 = 0 + index93 < mbt_ffi_load32(iter_base + 112) + index93 = index93 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index93 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + match mbt_ffi_load8_u(iter_base + 116) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 120)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 128) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 132) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 136)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + + for index95 = 0 + index95 < mbt_ffi_load32(p0 + 20) + index95 = index95 + 1 { + let iter_base = mbt_ffi_load32(p0 + 16) + index95 * 24 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 16)) + + for index96 = 0 + index96 < mbt_ffi_load32(p0 + 32) + index96 = index96 + 1 { + let iter_base = mbt_ffi_load32(p0 + 28) + index96 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 28)) + } + _ => panic() + } + _ => panic() + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t5(ptr : Int, value : @types.Datetime) -> Unit { + mbt_ffi_store64(ptr + 0, value.seconds) + mbt_ffi_store32(ptr + 8, value.nanoseconds.reinterpret_as_int()) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t17(ptr : Int, value : @types.SchemaTypeDef) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.id) + mbt_ffi_store32(ptr + 4, value.id.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + match value.name { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 8, 1) + + let ptr2 = mbt_ffi_str2ptr(payload1) + mbt_ffi_store32(ptr + 16, payload1.length()) + mbt_ffi_store32(ptr + 12, ptr2) + + () + } + } + mbt_ffi_store32(ptr + 20, value.body) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t18(ptr : Int, value : @types.Role) -> Unit { + match value { + Multimodal => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + UnstructuredText => { + mbt_ffi_store8(ptr + 0, 1) + + () + } + UnstructuredBinary => { + mbt_ffi_store8(ptr + 0, 2) + + () + } + Other(payload2) => { + mbt_ffi_store8(ptr + 0, 3) + + let ptr3 = mbt_ffi_str2ptr(payload2) + mbt_ffi_store32(ptr + 8, payload2.length()) + mbt_ffi_store32(ptr + 4, ptr3) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t21(ptr : Int, value : @types.MetadataEnvelope) -> Unit { + match value.doc { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + + let ptr1 = mbt_ffi_str2ptr(payload0) + mbt_ffi_store32(ptr + 8, payload0.length()) + mbt_ffi_store32(ptr + 4, ptr1) + + () + } + } + + let address = mbt_ffi_malloc(value.aliases.length() * 8) + for index = 0; index < value.aliases.length(); index = index + 1 { + let iter_elem : String = value.aliases[index] + let iter_base = address + index * 8 + + let ptr2 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr2) + } + mbt_ffi_store32(ptr + 16, value.aliases.length()) + mbt_ffi_store32(ptr + 12, address) + + let address4 = mbt_ffi_malloc(value.examples.length() * 8) + for index5 = 0; index5 < value.examples.length(); index5 = index5 + 1 { + let iter_elem : String = value.examples[index5] + let iter_base = address4 + index5 * 8 + + let ptr3 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr3) + } + mbt_ffi_store32(ptr + 24, value.examples.length()) + mbt_ffi_store32(ptr + 20, address4) + + match value.deprecated { + None => { + mbt_ffi_store8(ptr + 28, 0) + + () + } + Some(payload7) => { + mbt_ffi_store8(ptr + 28, 1) + + let ptr8 = mbt_ffi_str2ptr(payload7) + mbt_ffi_store32(ptr + 36, payload7.length()) + mbt_ffi_store32(ptr + 32, ptr8) + + () + } + } + + match value.role { + None => { + mbt_ffi_store8(ptr + 40, 0) + + () + } + Some(payload10) => { + mbt_ffi_store8(ptr + 40, 1) + __wit_bindgen_lower_t18(ptr + 44, payload10) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t22(ptr : Int, value : @types.NamedFieldType) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + mbt_ffi_store32(ptr + 8, value.body) + __wit_bindgen_lower_t21(ptr + 12, value.metadata) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t24(ptr : Int, value : @types.VariantCaseType) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + match value.payload { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 8, 1) + mbt_ffi_store32(ptr + 12, payload1) + + () + } + } + __wit_bindgen_lower_t21(ptr + 16, value.metadata) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t25(ptr : Int, value : @types.FixedListSpec) -> Unit { + mbt_ffi_store32(ptr + 0, value.element) + mbt_ffi_store32(ptr + 4, value.length.reinterpret_as_int()) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t26(ptr : Int, value : @types.MapSpec) -> Unit { + mbt_ffi_store32(ptr + 0, value.key) + mbt_ffi_store32(ptr + 4, value.value) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t27(ptr : Int, value : @types.ResultSpec) -> Unit { + match value.ok { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + mbt_ffi_store32(ptr + 4, payload0) + + () + } + } + + match value.err { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload2) => { + mbt_ffi_store8(ptr + 8, 1) + mbt_ffi_store32(ptr + 12, payload2) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t28(ptr : Int, value : @types.NumericBound) -> Unit { + match value { + Signed(payload) => { + mbt_ffi_store8(ptr + 0, 0) + mbt_ffi_store64(ptr + 8, payload) + + () + } + Unsigned(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + mbt_ffi_store64(ptr + 8, payload0.reinterpret_as_int64()) + + () + } + FloatBits(payload1) => { + mbt_ffi_store8(ptr + 0, 2) + mbt_ffi_store64(ptr + 8, payload1.reinterpret_as_int64()) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t30( + ptr : Int, + value : @types.NumericRestrictions, +) -> Unit { + match value.min { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + __wit_bindgen_lower_t28(ptr + 8, payload0) + + () + } + } + + match value.max { + None => { + mbt_ffi_store8(ptr + 24, 0) + + () + } + Some(payload2) => { + mbt_ffi_store8(ptr + 24, 1) + __wit_bindgen_lower_t28(ptr + 32, payload2) + + () + } + } + + match value.unit { + None => { + mbt_ffi_store8(ptr + 48, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 48, 1) + + let ptr5 = mbt_ffi_str2ptr(payload4) + mbt_ffi_store32(ptr + 56, payload4.length()) + mbt_ffi_store32(ptr + 52, ptr5) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t33(ptr : Int, value : @types.TextRestrictions) -> Unit { + match value.languages { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + + let address = mbt_ffi_malloc(payload0.length() * 8) + for index = 0; index < payload0.length(); index = index + 1 { + let iter_elem : String = payload0[index] + let iter_base = address + index * 8 + + let ptr1 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr1) + } + mbt_ffi_store32(ptr + 8, payload0.length()) + mbt_ffi_store32(ptr + 4, address) + + () + } + } + + match value.min_length { + None => { + mbt_ffi_store8(ptr + 12, 0) + + () + } + Some(payload3) => { + mbt_ffi_store8(ptr + 12, 1) + mbt_ffi_store32(ptr + 16, payload3.reinterpret_as_int()) + + () + } + } + + match value.max_length { + None => { + mbt_ffi_store8(ptr + 20, 0) + + () + } + Some(payload5) => { + mbt_ffi_store8(ptr + 20, 1) + mbt_ffi_store32(ptr + 24, payload5.reinterpret_as_int()) + + () + } + } + + match value.regex { + None => { + mbt_ffi_store8(ptr + 28, 0) + + () + } + Some(payload7) => { + mbt_ffi_store8(ptr + 28, 1) + + let ptr8 = mbt_ffi_str2ptr(payload7) + mbt_ffi_store32(ptr + 36, payload7.length()) + mbt_ffi_store32(ptr + 32, ptr8) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t34( + ptr : Int, + value : @types.BinaryRestrictions, +) -> Unit { + match value.mime_types { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + + let address = mbt_ffi_malloc(payload0.length() * 8) + for index = 0; index < payload0.length(); index = index + 1 { + let iter_elem : String = payload0[index] + let iter_base = address + index * 8 + + let ptr1 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr1) + } + mbt_ffi_store32(ptr + 8, payload0.length()) + mbt_ffi_store32(ptr + 4, address) + + () + } + } + + match value.min_bytes { + None => { + mbt_ffi_store8(ptr + 12, 0) + + () + } + Some(payload3) => { + mbt_ffi_store8(ptr + 12, 1) + mbt_ffi_store32(ptr + 16, payload3.reinterpret_as_int()) + + () + } + } + + match value.max_bytes { + None => { + mbt_ffi_store8(ptr + 20, 0) + + () + } + Some(payload5) => { + mbt_ffi_store8(ptr + 20, 1) + mbt_ffi_store32(ptr + 24, payload5.reinterpret_as_int()) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t37(ptr : Int, value : @types.PathSpec) -> Unit { + mbt_ffi_store8(ptr + 0, value.direction.ordinal()) + mbt_ffi_store8(ptr + 1, value.kind.ordinal()) + + match value.allowed_mime_types { + None => { + mbt_ffi_store8(ptr + 4, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 4, 1) + + let address = mbt_ffi_malloc(payload0.length() * 8) + for index = 0; index < payload0.length(); index = index + 1 { + let iter_elem : String = payload0[index] + let iter_base = address + index * 8 + + let ptr1 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr1) + } + mbt_ffi_store32(ptr + 12, payload0.length()) + mbt_ffi_store32(ptr + 8, address) + + () + } + } + + match value.allowed_extensions { + None => { + mbt_ffi_store8(ptr + 16, 0) + + () + } + Some(payload3) => { + mbt_ffi_store8(ptr + 16, 1) + + let address5 = mbt_ffi_malloc(payload3.length() * 8) + for index6 = 0; index6 < payload3.length(); index6 = index6 + 1 { + let iter_elem : String = payload3[index6] + let iter_base = address5 + index6 * 8 + + let ptr4 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr4) + } + mbt_ffi_store32(ptr + 24, payload3.length()) + mbt_ffi_store32(ptr + 20, address5) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t38(ptr : Int, value : @types.UrlRestrictions) -> Unit { + match value.allowed_schemes { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + + let address = mbt_ffi_malloc(payload0.length() * 8) + for index = 0; index < payload0.length(); index = index + 1 { + let iter_elem : String = payload0[index] + let iter_base = address + index * 8 + + let ptr1 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr1) + } + mbt_ffi_store32(ptr + 8, payload0.length()) + mbt_ffi_store32(ptr + 4, address) + + () + } + } + + match value.allowed_hosts { + None => { + mbt_ffi_store8(ptr + 12, 0) + + () + } + Some(payload3) => { + mbt_ffi_store8(ptr + 12, 1) + + let address5 = mbt_ffi_malloc(payload3.length() * 8) + for index6 = 0; index6 < payload3.length(); index6 = index6 + 1 { + let iter_elem : String = payload3[index6] + let iter_base = address5 + index6 * 8 + + let ptr4 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr4) + } + mbt_ffi_store32(ptr + 20, payload3.length()) + mbt_ffi_store32(ptr + 16, address5) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t39(ptr : Int, value : @types.QuantityValue) -> Unit { + mbt_ffi_store64(ptr + 0, value.mantissa) + mbt_ffi_store32(ptr + 8, value.scale) + + let ptr0 = mbt_ffi_str2ptr(value.unit) + mbt_ffi_store32(ptr + 16, value.unit.length()) + mbt_ffi_store32(ptr + 12, ptr0) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t41(ptr : Int, value : @types.QuantitySpec) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.base_unit) + mbt_ffi_store32(ptr + 4, value.base_unit.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + let address = mbt_ffi_malloc(value.allowed_suffixes.length() * 8) + for index = 0; index < value.allowed_suffixes.length(); index = index + 1 { + let iter_elem : String = value.allowed_suffixes[index] + let iter_base = address + index * 8 + + let ptr1 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr1) + } + mbt_ffi_store32(ptr + 12, value.allowed_suffixes.length()) + mbt_ffi_store32(ptr + 8, address) + + match value.min { + None => { + mbt_ffi_store8(ptr + 16, 0) + + () + } + Some(payload2) => { + mbt_ffi_store8(ptr + 16, 1) + __wit_bindgen_lower_t39(ptr + 24, payload2) + + () + } + } + + match value.max { + None => { + mbt_ffi_store8(ptr + 48, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 48, 1) + __wit_bindgen_lower_t39(ptr + 56, payload4) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t42( + ptr : Int, + value : @types.FieldDiscriminator, +) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.field_name) + mbt_ffi_store32(ptr + 4, value.field_name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + match value.literal { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 8, 1) + + let ptr2 = mbt_ffi_str2ptr(payload1) + mbt_ffi_store32(ptr + 16, payload1.length()) + mbt_ffi_store32(ptr + 12, ptr2) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t43(ptr : Int, value : @types.DiscriminatorRule) -> Unit { + match value { + Prefix(payload) => { + mbt_ffi_store8(ptr + 0, 0) + + let ptr0 = mbt_ffi_str2ptr(payload) + mbt_ffi_store32(ptr + 8, payload.length()) + mbt_ffi_store32(ptr + 4, ptr0) + + () + } + Suffix(payload1) => { + mbt_ffi_store8(ptr + 0, 1) + + let ptr2 = mbt_ffi_str2ptr(payload1) + mbt_ffi_store32(ptr + 8, payload1.length()) + mbt_ffi_store32(ptr + 4, ptr2) + + () + } + Contains(payload3) => { + mbt_ffi_store8(ptr + 0, 2) + + let ptr4 = mbt_ffi_str2ptr(payload3) + mbt_ffi_store32(ptr + 8, payload3.length()) + mbt_ffi_store32(ptr + 4, ptr4) + + () + } + Regex(payload5) => { + mbt_ffi_store8(ptr + 0, 3) + + let ptr6 = mbt_ffi_str2ptr(payload5) + mbt_ffi_store32(ptr + 8, payload5.length()) + mbt_ffi_store32(ptr + 4, ptr6) + + () + } + FieldEquals(payload7) => { + mbt_ffi_store8(ptr + 0, 4) + __wit_bindgen_lower_t42(ptr + 4, payload7) + + () + } + FieldAbsent(payload8) => { + mbt_ffi_store8(ptr + 0, 5) + + let ptr9 = mbt_ffi_str2ptr(payload8) + mbt_ffi_store32(ptr + 8, payload8.length()) + mbt_ffi_store32(ptr + 4, ptr9) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t44(ptr : Int, value : @types.UnionBranch) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.tag) + mbt_ffi_store32(ptr + 4, value.tag.length()) + mbt_ffi_store32(ptr + 0, ptr0) + mbt_ffi_store32(ptr + 8, value.body) + __wit_bindgen_lower_t43(ptr + 12, value.discriminator) + __wit_bindgen_lower_t21(ptr + 36, value.metadata) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t46(ptr : Int, value : @types.UnionSpec) -> Unit { + let address = mbt_ffi_malloc(value.branches.length() * 92) + for index = 0; index < value.branches.length(); index = index + 1 { + let iter_elem : @types.UnionBranch = value.branches[index] + let iter_base = address + index * 92 + __wit_bindgen_lower_t44(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 4, value.branches.length()) + mbt_ffi_store32(ptr + 0, address) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t47(ptr : Int, value : @types.SecretSpec) -> Unit { + mbt_ffi_store32(ptr + 0, value.inner) + + match value.category { + None => { + mbt_ffi_store8(ptr + 4, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 4, 1) + + let ptr1 = mbt_ffi_str2ptr(payload0) + mbt_ffi_store32(ptr + 12, payload0.length()) + mbt_ffi_store32(ptr + 8, ptr1) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t48(ptr : Int, value : @types.QuotaTokenSpec) -> Unit { + match value.resource_name { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + + let ptr1 = mbt_ffi_str2ptr(payload0) + mbt_ffi_store32(ptr + 8, payload0.length()) + mbt_ffi_store32(ptr + 4, ptr1) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t49( + ptr : Int, + value : @types.PermissionCardSpec, +) -> Unit { + mbt_ffi_store8(ptr + 0, if value.polymorphic { 1 } else { 0 }) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t54(ptr : Int, value : @types.SchemaTypeBody) -> Unit { + match value { + RefType(payload) => { + mbt_ffi_store8(ptr + 0, 0) + mbt_ffi_store32(ptr + 8, payload) + + () + } + BoolType => { + mbt_ffi_store8(ptr + 0, 1) + + () + } + S8Type(payload1) => { + mbt_ffi_store8(ptr + 0, 2) + + match payload1 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload3) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload3) + + () + } + } + + () + } + S16Type(payload4) => { + mbt_ffi_store8(ptr + 0, 3) + + match payload4 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload6) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload6) + + () + } + } + + () + } + S32Type(payload7) => { + mbt_ffi_store8(ptr + 0, 4) + + match payload7 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload9) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload9) + + () + } + } + + () + } + S64Type(payload10) => { + mbt_ffi_store8(ptr + 0, 5) + + match payload10 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload12) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload12) + + () + } + } + + () + } + U8Type(payload13) => { + mbt_ffi_store8(ptr + 0, 6) + + match payload13 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload15) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload15) + + () + } + } + + () + } + U16Type(payload16) => { + mbt_ffi_store8(ptr + 0, 7) + + match payload16 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload18) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload18) + + () + } + } + + () + } + U32Type(payload19) => { + mbt_ffi_store8(ptr + 0, 8) + + match payload19 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload21) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload21) + + () + } + } + + () + } + U64Type(payload22) => { + mbt_ffi_store8(ptr + 0, 9) + + match payload22 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload24) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload24) + + () + } + } + + () + } + F32Type(payload25) => { + mbt_ffi_store8(ptr + 0, 10) + + match payload25 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload27) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload27) + + () + } + } + + () + } + F64Type(payload28) => { + mbt_ffi_store8(ptr + 0, 11) + + match payload28 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload30) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload30) + + () + } + } + + () + } + CharType => { + mbt_ffi_store8(ptr + 0, 12) + + () + } + StringType => { + mbt_ffi_store8(ptr + 0, 13) + + () + } + RecordType(payload33) => { + mbt_ffi_store8(ptr + 0, 14) + + let address = mbt_ffi_malloc(payload33.length() * 68) + for index = 0; index < payload33.length(); index = index + 1 { + let iter_elem : @types.NamedFieldType = payload33[index] + let iter_base = address + index * 68 + __wit_bindgen_lower_t22(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload33.length()) + mbt_ffi_store32(ptr + 8, address) + + () + } + VariantType(payload34) => { + mbt_ffi_store8(ptr + 0, 15) + + let address35 = mbt_ffi_malloc(payload34.length() * 72) + for index36 = 0; index36 < payload34.length(); index36 = index36 + 1 { + let iter_elem : @types.VariantCaseType = payload34[index36] + let iter_base = address35 + index36 * 72 + __wit_bindgen_lower_t24(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload34.length()) + mbt_ffi_store32(ptr + 8, address35) + + () + } + EnumType(payload37) => { + mbt_ffi_store8(ptr + 0, 16) + + let address39 = mbt_ffi_malloc(payload37.length() * 8) + for index40 = 0; index40 < payload37.length(); index40 = index40 + 1 { + let iter_elem : String = payload37[index40] + let iter_base = address39 + index40 * 8 + + let ptr38 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr38) + } + mbt_ffi_store32(ptr + 12, payload37.length()) + mbt_ffi_store32(ptr + 8, address39) + + () + } + FlagsType(payload41) => { + mbt_ffi_store8(ptr + 0, 17) + + let address43 = mbt_ffi_malloc(payload41.length() * 8) + for index44 = 0; index44 < payload41.length(); index44 = index44 + 1 { + let iter_elem : String = payload41[index44] + let iter_base = address43 + index44 * 8 + + let ptr42 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr42) + } + mbt_ffi_store32(ptr + 12, payload41.length()) + mbt_ffi_store32(ptr + 8, address43) + + () + } + TupleType(payload45) => { + mbt_ffi_store8(ptr + 0, 18) + + let address46 = mbt_ffi_malloc(payload45.length() * 4) + for index47 = 0; index47 < payload45.length(); index47 = index47 + 1 { + let iter_elem : Int = payload45[index47] + let iter_base = address46 + index47 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload45.length()) + mbt_ffi_store32(ptr + 8, address46) + + () + } + ListType(payload48) => { + mbt_ffi_store8(ptr + 0, 19) + mbt_ffi_store32(ptr + 8, payload48) + + () + } + FixedListType(payload49) => { + mbt_ffi_store8(ptr + 0, 20) + __wit_bindgen_lower_t25(ptr + 8, payload49) + + () + } + MapType(payload50) => { + mbt_ffi_store8(ptr + 0, 21) + __wit_bindgen_lower_t26(ptr + 8, payload50) + + () + } + OptionType(payload51) => { + mbt_ffi_store8(ptr + 0, 22) + mbt_ffi_store32(ptr + 8, payload51) + + () + } + ResultType(payload52) => { + mbt_ffi_store8(ptr + 0, 23) + __wit_bindgen_lower_t27(ptr + 8, payload52) + + () + } + TextType(payload53) => { + mbt_ffi_store8(ptr + 0, 24) + __wit_bindgen_lower_t33(ptr + 8, payload53) + + () + } + BinaryType(payload54) => { + mbt_ffi_store8(ptr + 0, 25) + __wit_bindgen_lower_t34(ptr + 8, payload54) + + () + } + PathType(payload55) => { + mbt_ffi_store8(ptr + 0, 26) + __wit_bindgen_lower_t37(ptr + 8, payload55) + + () + } + UrlType(payload56) => { + mbt_ffi_store8(ptr + 0, 27) + __wit_bindgen_lower_t38(ptr + 8, payload56) + + () + } + DatetimeType => { + mbt_ffi_store8(ptr + 0, 28) + + () + } + DurationType => { + mbt_ffi_store8(ptr + 0, 29) + + () + } + QuantityType(payload59) => { + mbt_ffi_store8(ptr + 0, 30) + __wit_bindgen_lower_t41(ptr + 8, payload59) + + () + } + UnionType(payload60) => { + mbt_ffi_store8(ptr + 0, 31) + __wit_bindgen_lower_t46(ptr + 8, payload60) + + () + } + SecretType(payload61) => { + mbt_ffi_store8(ptr + 0, 32) + __wit_bindgen_lower_t47(ptr + 8, payload61) + + () + } + QuotaTokenType(payload62) => { + mbt_ffi_store8(ptr + 0, 33) + __wit_bindgen_lower_t48(ptr + 8, payload62) + + () + } + PermissionCardType(payload63) => { + mbt_ffi_store8(ptr + 0, 34) + __wit_bindgen_lower_t49(ptr + 8, payload63) + + () + } + FutureType(payload64) => { + mbt_ffi_store8(ptr + 0, 35) + + match payload64 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload66) => { + mbt_ffi_store8(ptr + 8, 1) + mbt_ffi_store32(ptr + 12, payload66) + + () + } + } + + () + } + StreamType(payload67) => { + mbt_ffi_store8(ptr + 0, 36) + + match payload67 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload69) => { + mbt_ffi_store8(ptr + 8, 1) + mbt_ffi_store32(ptr + 12, payload69) + + () + } + } + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t55(ptr : Int, value : @types.SchemaTypeNode) -> Unit { + __wit_bindgen_lower_t54(ptr + 0, value.body) + __wit_bindgen_lower_t21(ptr + 88, value.metadata) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t58(ptr : Int, value : @types.SchemaGraph) -> Unit { + let address = mbt_ffi_malloc(value.type_nodes.length() * 144) + for index = 0; index < value.type_nodes.length(); index = index + 1 { + let iter_elem : @types.SchemaTypeNode = value.type_nodes[index] + let iter_base = address + index * 144 + __wit_bindgen_lower_t55(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 4, value.type_nodes.length()) + mbt_ffi_store32(ptr + 0, address) + + let address0 = mbt_ffi_malloc(value.defs.length() * 24) + for index1 = 0; index1 < value.defs.length(); index1 = index1 + 1 { + let iter_elem : @types.SchemaTypeDef = value.defs[index1] + let iter_base = address0 + index1 * 24 + __wit_bindgen_lower_t17(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, value.defs.length()) + mbt_ffi_store32(ptr + 8, address0) + mbt_ffi_store32(ptr + 16, value.root) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t60( + ptr : Int, + value : @types.VariantValuePayload, +) -> Unit { + mbt_ffi_store32(ptr + 0, value.case.reinterpret_as_int()) + + match value.payload { + None => { + mbt_ffi_store8(ptr + 4, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 4, 1) + mbt_ffi_store32(ptr + 8, payload0) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t61(ptr : Int, value : @types.MapEntry) -> Unit { + mbt_ffi_store32(ptr + 0, value.key) + mbt_ffi_store32(ptr + 4, value.value) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t62( + ptr : Int, + value : @types.ResultValuePayload, +) -> Unit { + match value { + OkValue(payload) => { + mbt_ffi_store8(ptr + 0, 0) + + match payload { + None => { + mbt_ffi_store8(ptr + 4, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 4, 1) + mbt_ffi_store32(ptr + 8, payload1) + + () + } + } + + () + } + ErrValue(payload2) => { + mbt_ffi_store8(ptr + 0, 1) + + match payload2 { + None => { + mbt_ffi_store8(ptr + 4, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 4, 1) + mbt_ffi_store32(ptr + 8, payload4) + + () + } + } + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t63(ptr : Int, value : @types.TextValuePayload) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.text) + mbt_ffi_store32(ptr + 4, value.text.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + match value.language { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 8, 1) + + let ptr2 = mbt_ffi_str2ptr(payload1) + mbt_ffi_store32(ptr + 16, payload1.length()) + mbt_ffi_store32(ptr + 12, ptr2) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t65( + ptr : Int, + value : @types.BinaryValuePayload, +) -> Unit { + let ptr0 = mbt_ffi_bytes2ptr(value.bytes) + + mbt_ffi_store32(ptr + 4, value.bytes.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + match value.mime_type { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 8, 1) + + let ptr2 = mbt_ffi_str2ptr(payload1) + mbt_ffi_store32(ptr + 16, payload1.length()) + mbt_ffi_store32(ptr + 12, ptr2) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t66( + ptr : Int, + value : @types.DurationValuePayload, +) -> Unit { + mbt_ffi_store64(ptr + 0, value.nanoseconds) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t67(ptr : Int, value : @types.UnionValuePayload) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.tag) + mbt_ffi_store32(ptr + 4, value.tag.length()) + mbt_ffi_store32(ptr + 0, ptr0) + mbt_ffi_store32(ptr + 8, value.body) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t74(ptr : Int, value : @types.SchemaValueNode) -> Unit { + match value { + BoolValue(payload) => { + mbt_ffi_store8(ptr + 0, 0) + mbt_ffi_store8(ptr + 8, if payload { 1 } else { 0 }) + + () + } + S8Value(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + mbt_ffi_store8(ptr + 8, mbt_ffi_extend8(payload0)) + + () + } + S16Value(payload1) => { + mbt_ffi_store8(ptr + 0, 2) + mbt_ffi_store16(ptr + 8, mbt_ffi_extend16(payload1)) + + () + } + S32Value(payload2) => { + mbt_ffi_store8(ptr + 0, 3) + mbt_ffi_store32(ptr + 8, payload2) + + () + } + S64Value(payload3) => { + mbt_ffi_store8(ptr + 0, 4) + mbt_ffi_store64(ptr + 8, payload3) + + () + } + U8Value(payload4) => { + mbt_ffi_store8(ptr + 0, 5) + mbt_ffi_store8(ptr + 8, payload4.to_int()) + + () + } + U16Value(payload5) => { + mbt_ffi_store8(ptr + 0, 6) + mbt_ffi_store16(ptr + 8, payload5.reinterpret_as_int()) + + () + } + U32Value(payload6) => { + mbt_ffi_store8(ptr + 0, 7) + mbt_ffi_store32(ptr + 8, payload6.reinterpret_as_int()) + + () + } + U64Value(payload7) => { + mbt_ffi_store8(ptr + 0, 8) + mbt_ffi_store64(ptr + 8, payload7.reinterpret_as_int64()) + + () + } + F32Value(payload8) => { + mbt_ffi_store8(ptr + 0, 9) + mbt_ffi_storef32(ptr + 8, payload8) + + () + } + F64Value(payload9) => { + mbt_ffi_store8(ptr + 0, 10) + mbt_ffi_storef64(ptr + 8, payload9) + + () + } + CharValue(payload10) => { + mbt_ffi_store8(ptr + 0, 11) + mbt_ffi_store32(ptr + 8, payload10.to_int()) + + () + } + StringValue(payload11) => { + mbt_ffi_store8(ptr + 0, 12) + + let ptr12 = mbt_ffi_str2ptr(payload11) + mbt_ffi_store32(ptr + 12, payload11.length()) + mbt_ffi_store32(ptr + 8, ptr12) + + () + } + RecordValue(payload13) => { + mbt_ffi_store8(ptr + 0, 13) + + let address = mbt_ffi_malloc(payload13.length() * 4) + for index = 0; index < payload13.length(); index = index + 1 { + let iter_elem : Int = payload13[index] + let iter_base = address + index * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload13.length()) + mbt_ffi_store32(ptr + 8, address) + + () + } + VariantValue(payload14) => { + mbt_ffi_store8(ptr + 0, 14) + __wit_bindgen_lower_t60(ptr + 8, payload14) + + () + } + EnumValue(payload15) => { + mbt_ffi_store8(ptr + 0, 15) + mbt_ffi_store32(ptr + 8, payload15.reinterpret_as_int()) + + () + } + FlagsValue(payload16) => { + mbt_ffi_store8(ptr + 0, 16) + + let address17 = mbt_ffi_malloc(payload16.length() * 1) + for index18 = 0; index18 < payload16.length(); index18 = index18 + 1 { + let iter_elem : Bool = payload16[index18] + let iter_base = address17 + index18 * 1 + mbt_ffi_store8(iter_base + 0, if iter_elem { 1 } else { 0 }) + } + mbt_ffi_store32(ptr + 12, payload16.length()) + mbt_ffi_store32(ptr + 8, address17) + + () + } + TupleValue(payload19) => { + mbt_ffi_store8(ptr + 0, 17) + + let address20 = mbt_ffi_malloc(payload19.length() * 4) + for index21 = 0; index21 < payload19.length(); index21 = index21 + 1 { + let iter_elem : Int = payload19[index21] + let iter_base = address20 + index21 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload19.length()) + mbt_ffi_store32(ptr + 8, address20) + + () + } + ListValue(payload22) => { + mbt_ffi_store8(ptr + 0, 18) + + let address23 = mbt_ffi_malloc(payload22.length() * 4) + for index24 = 0; index24 < payload22.length(); index24 = index24 + 1 { + let iter_elem : Int = payload22[index24] + let iter_base = address23 + index24 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload22.length()) + mbt_ffi_store32(ptr + 8, address23) + + () + } + FixedListValue(payload25) => { + mbt_ffi_store8(ptr + 0, 19) + + let address26 = mbt_ffi_malloc(payload25.length() * 4) + for index27 = 0; index27 < payload25.length(); index27 = index27 + 1 { + let iter_elem : Int = payload25[index27] + let iter_base = address26 + index27 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload25.length()) + mbt_ffi_store32(ptr + 8, address26) + + () + } + MapValue(payload28) => { + mbt_ffi_store8(ptr + 0, 20) + + let address29 = mbt_ffi_malloc(payload28.length() * 8) + for index30 = 0; index30 < payload28.length(); index30 = index30 + 1 { + let iter_elem : @types.MapEntry = payload28[index30] + let iter_base = address29 + index30 * 8 + __wit_bindgen_lower_t61(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload28.length()) + mbt_ffi_store32(ptr + 8, address29) + + () + } + OptionValue(payload31) => { + mbt_ffi_store8(ptr + 0, 21) + + match payload31 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload33) => { + mbt_ffi_store8(ptr + 8, 1) + mbt_ffi_store32(ptr + 12, payload33) + + () + } + } + + () + } + ResultValue(payload34) => { + mbt_ffi_store8(ptr + 0, 22) + __wit_bindgen_lower_t62(ptr + 8, payload34) + + () + } + TextValue(payload35) => { + mbt_ffi_store8(ptr + 0, 23) + __wit_bindgen_lower_t63(ptr + 8, payload35) + + () + } + BinaryValue(payload36) => { + mbt_ffi_store8(ptr + 0, 24) + __wit_bindgen_lower_t65(ptr + 8, payload36) + + () + } + PathValue(payload37) => { + mbt_ffi_store8(ptr + 0, 25) + + let ptr38 = mbt_ffi_str2ptr(payload37) + mbt_ffi_store32(ptr + 12, payload37.length()) + mbt_ffi_store32(ptr + 8, ptr38) + + () + } + UrlValue(payload39) => { + mbt_ffi_store8(ptr + 0, 26) + + let ptr40 = mbt_ffi_str2ptr(payload39) + mbt_ffi_store32(ptr + 12, payload39.length()) + mbt_ffi_store32(ptr + 8, ptr40) + + () + } + DatetimeValue(payload41) => { + mbt_ffi_store8(ptr + 0, 27) + __wit_bindgen_lower_t5(ptr + 8, payload41) + + () + } + DurationValue(payload42) => { + mbt_ffi_store8(ptr + 0, 28) + __wit_bindgen_lower_t66(ptr + 8, payload42) + + () + } + QuantityValueNode(payload43) => { + mbt_ffi_store8(ptr + 0, 29) + __wit_bindgen_lower_t39(ptr + 8, payload43) + + () + } + UnionValue(payload44) => { + mbt_ffi_store8(ptr + 0, 30) + __wit_bindgen_lower_t67(ptr + 8, payload44) + + () + } + SecretValue(payload45) => { + mbt_ffi_store8(ptr + 0, 31) + + let @types.Secret(handle) = payload45 + mbt_ffi_store32(ptr + 8, handle) + + () + } + QuotaTokenHandle(payload46) => { + mbt_ffi_store8(ptr + 0, 32) + + let @types.QuotaToken(handle47) = payload46 + mbt_ffi_store32(ptr + 8, handle47) + + () + } + PermissionCardHandle(payload48) => { + mbt_ffi_store8(ptr + 0, 33) + + let @types.PermissionCard(handle49) = payload48 + mbt_ffi_store32(ptr + 8, handle49) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t76(ptr : Int, value : @types.SchemaValueTree) -> Unit { + let address = mbt_ffi_malloc(value.value_nodes.length() * 32) + for index = 0; index < value.value_nodes.length(); index = index + 1 { + let iter_elem : @types.SchemaValueNode = value.value_nodes[index] + let iter_base = address + index * 32 + __wit_bindgen_lower_t74(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 4, value.value_nodes.length()) + mbt_ffi_store32(ptr + 0, address) + mbt_ffi_store32(ptr + 8, value.root) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t77(ptr : Int, value : @types.TypedSchemaValue) -> Unit { + __wit_bindgen_lower_t58(ptr + 0, value.graph) + __wit_bindgen_lower_t76(ptr + 20, value.value) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t365(ptr : Int, value : @common.FieldSource) -> Unit { + match value { + UserSupplied => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + AutoInjected(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + mbt_ffi_store8(ptr + 1, payload0.ordinal()) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t366(ptr : Int, value : @common.NamedField) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + __wit_bindgen_lower_t365(ptr + 8, value.source) + mbt_ffi_store32(ptr + 12, value.schema) + __wit_bindgen_lower_t21(ptr + 16, value.metadata) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t368(ptr : Int, value : @common.InputSchema) -> Unit { + match value { + Parameters(payload) => { + mbt_ffi_store8(ptr + 0, 0) + + let address = mbt_ffi_malloc(payload.length() * 72) + for index = 0; index < payload.length(); index = index + 1 { + let iter_elem : @common.NamedField = payload[index] + let iter_base = address + index * 72 + __wit_bindgen_lower_t366(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 8, payload.length()) + mbt_ffi_store32(ptr + 4, address) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t369(ptr : Int, value : @common.OutputSchema) -> Unit { + match value { + Unit => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Single(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + mbt_ffi_store32(ptr + 4, payload0) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t370(ptr : Int, value : @common.CachePolicy) -> Unit { + match value { + NoCache => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + UntilWrite => { + mbt_ffi_store8(ptr + 0, 1) + + () + } + Ttl(payload1) => { + mbt_ffi_store8(ptr + 0, 2) + mbt_ffi_store64(ptr + 8, payload1.reinterpret_as_int64()) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t371(ptr : Int, value : @common.ReadOnlyConfig) -> Unit { + __wit_bindgen_lower_t370(ptr + 0, value.cache_policy) + mbt_ffi_store8(ptr + 16, if value.uses_principal { 1 } else { 0 }) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t373(ptr : Int, value : @common.CorsOptions) -> Unit { + let address = mbt_ffi_malloc(value.allowed_patterns.length() * 8) + for index = 0; index < value.allowed_patterns.length(); index = index + 1 { + let iter_elem : String = value.allowed_patterns[index] + let iter_base = address + index * 8 + + let ptr0 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr0) + } + mbt_ffi_store32(ptr + 4, value.allowed_patterns.length()) + mbt_ffi_store32(ptr + 0, address) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t374(ptr : Int, value : @common.HttpMethod) -> Unit { + match value { + Get => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Head => { + mbt_ffi_store8(ptr + 0, 1) + + () + } + Post => { + mbt_ffi_store8(ptr + 0, 2) + + () + } + Put => { + mbt_ffi_store8(ptr + 0, 3) + + () + } + Delete => { + mbt_ffi_store8(ptr + 0, 4) + + () + } + Connect => { + mbt_ffi_store8(ptr + 0, 5) + + () + } + Options => { + mbt_ffi_store8(ptr + 0, 6) + + () + } + Trace => { + mbt_ffi_store8(ptr + 0, 7) + + () + } + Patch => { + mbt_ffi_store8(ptr + 0, 8) + + () + } + Custom(payload8) => { + mbt_ffi_store8(ptr + 0, 9) + + let ptr9 = mbt_ffi_str2ptr(payload8) + mbt_ffi_store32(ptr + 8, payload8.length()) + mbt_ffi_store32(ptr + 4, ptr9) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t376(ptr : Int, value : @common.PathVariable) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.variable_name) + mbt_ffi_store32(ptr + 4, value.variable_name.length()) + mbt_ffi_store32(ptr + 0, ptr0) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t377(ptr : Int, value : @common.PathSegment) -> Unit { + match value { + Literal(payload) => { + mbt_ffi_store8(ptr + 0, 0) + + let ptr0 = mbt_ffi_str2ptr(payload) + mbt_ffi_store32(ptr + 8, payload.length()) + mbt_ffi_store32(ptr + 4, ptr0) + + () + } + SystemVariable(payload1) => { + mbt_ffi_store8(ptr + 0, 1) + mbt_ffi_store8(ptr + 4, payload1.ordinal()) + + () + } + PathVariable(payload2) => { + mbt_ffi_store8(ptr + 0, 2) + __wit_bindgen_lower_t376(ptr + 4, payload2) + + () + } + RemainingPathVariable(payload3) => { + mbt_ffi_store8(ptr + 0, 3) + __wit_bindgen_lower_t376(ptr + 4, payload3) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t378(ptr : Int, value : @common.HeaderVariable) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.header_name) + mbt_ffi_store32(ptr + 4, value.header_name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + let ptr1 = mbt_ffi_str2ptr(value.variable_name) + mbt_ffi_store32(ptr + 12, value.variable_name.length()) + mbt_ffi_store32(ptr + 8, ptr1) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t379(ptr : Int, value : @common.QueryVariable) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.query_param_name) + mbt_ffi_store32(ptr + 4, value.query_param_name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + let ptr1 = mbt_ffi_str2ptr(value.variable_name) + mbt_ffi_store32(ptr + 12, value.variable_name.length()) + mbt_ffi_store32(ptr + 8, ptr1) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t380(ptr : Int, value : @common.AuthDetails) -> Unit { + mbt_ffi_store8(ptr + 0, if value.required { 1 } else { 0 }) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t383( + ptr : Int, + value : @common.HttpMountDetails, +) -> Unit { + let address = mbt_ffi_malloc(value.path_prefix.length() * 12) + for index = 0; index < value.path_prefix.length(); index = index + 1 { + let iter_elem : @common.PathSegment = value.path_prefix[index] + let iter_base = address + index * 12 + __wit_bindgen_lower_t377(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 4, value.path_prefix.length()) + mbt_ffi_store32(ptr + 0, address) + + match value.auth_details { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t380(ptr + 9, payload0) + + () + } + } + mbt_ffi_store8(ptr + 10, if value.phantom_agent { 1 } else { 0 }) + __wit_bindgen_lower_t373(ptr + 12, value.cors_options) + + let address1 = mbt_ffi_malloc(value.webhook_suffix.length() * 12) + for index2 = 0; index2 < value.webhook_suffix.length(); index2 = index2 + 1 { + let iter_elem : @common.PathSegment = value.webhook_suffix[index2] + let iter_base = address1 + index2 * 12 + __wit_bindgen_lower_t377(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 24, value.webhook_suffix.length()) + mbt_ffi_store32(ptr + 20, address1) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t386( + ptr : Int, + value : @common.HttpEndpointDetails, +) -> Unit { + __wit_bindgen_lower_t374(ptr + 0, value.http_method) + + let address = mbt_ffi_malloc(value.path_suffix.length() * 12) + for index = 0; index < value.path_suffix.length(); index = index + 1 { + let iter_elem : @common.PathSegment = value.path_suffix[index] + let iter_base = address + index * 12 + __wit_bindgen_lower_t377(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 16, value.path_suffix.length()) + mbt_ffi_store32(ptr + 12, address) + + let address0 = mbt_ffi_malloc(value.header_vars.length() * 16) + for index1 = 0; index1 < value.header_vars.length(); index1 = index1 + 1 { + let iter_elem : @common.HeaderVariable = value.header_vars[index1] + let iter_base = address0 + index1 * 16 + __wit_bindgen_lower_t378(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 24, value.header_vars.length()) + mbt_ffi_store32(ptr + 20, address0) + + let address2 = mbt_ffi_malloc(value.query_vars.length() * 16) + for index3 = 0; index3 < value.query_vars.length(); index3 = index3 + 1 { + let iter_elem : @common.QueryVariable = value.query_vars[index3] + let iter_base = address2 + index3 * 16 + __wit_bindgen_lower_t379(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 32, value.query_vars.length()) + mbt_ffi_store32(ptr + 28, address2) + + match value.auth_details { + None => { + mbt_ffi_store8(ptr + 36, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 36, 1) + __wit_bindgen_lower_t380(ptr + 37, payload4) + + () + } + } + __wit_bindgen_lower_t373(ptr + 40, value.cors_options) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t390(ptr : Int, value : @common.AgentMethod) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + let ptr1 = mbt_ffi_str2ptr(value.description) + mbt_ffi_store32(ptr + 12, value.description.length()) + mbt_ffi_store32(ptr + 8, ptr1) + + let address = mbt_ffi_malloc(value.http_endpoint.length() * 48) + for index = 0; index < value.http_endpoint.length(); index = index + 1 { + let iter_elem : @common.HttpEndpointDetails = value.http_endpoint[index] + let iter_base = address + index * 48 + __wit_bindgen_lower_t386(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 20, value.http_endpoint.length()) + mbt_ffi_store32(ptr + 16, address) + + match value.prompt_hint { + None => { + mbt_ffi_store8(ptr + 24, 0) + + () + } + Some(payload2) => { + mbt_ffi_store8(ptr + 24, 1) + + let ptr3 = mbt_ffi_str2ptr(payload2) + mbt_ffi_store32(ptr + 32, payload2.length()) + mbt_ffi_store32(ptr + 28, ptr3) + + () + } + } + __wit_bindgen_lower_t368(ptr + 36, value.input_schema) + __wit_bindgen_lower_t369(ptr + 48, value.output_schema) + + match value.read_only { + None => { + mbt_ffi_store8(ptr + 56, 0) + + () + } + Some(payload5) => { + mbt_ffi_store8(ptr + 56, 1) + __wit_bindgen_lower_t371(ptr + 64, payload5) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t396( + ptr : Int, + value : @common.AgentConstructor, +) -> Unit { + match value.name { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + + let ptr1 = mbt_ffi_str2ptr(payload0) + mbt_ffi_store32(ptr + 8, payload0.length()) + mbt_ffi_store32(ptr + 4, ptr1) + + () + } + } + + let ptr2 = mbt_ffi_str2ptr(value.description) + mbt_ffi_store32(ptr + 16, value.description.length()) + mbt_ffi_store32(ptr + 12, ptr2) + + match value.prompt_hint { + None => { + mbt_ffi_store8(ptr + 20, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 20, 1) + + let ptr5 = mbt_ffi_str2ptr(payload4) + mbt_ffi_store32(ptr + 28, payload4.length()) + mbt_ffi_store32(ptr + 24, ptr5) + + () + } + } + __wit_bindgen_lower_t368(ptr + 32, value.input_schema) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t398(ptr : Int, value : @common.AgentDependency) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.type_name) + mbt_ffi_store32(ptr + 4, value.type_name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + match value.description { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 8, 1) + + let ptr2 = mbt_ffi_str2ptr(payload1) + mbt_ffi_store32(ptr + 16, payload1.length()) + mbt_ffi_store32(ptr + 12, ptr2) + + () + } + } + __wit_bindgen_lower_t58(ptr + 20, value.schema) + __wit_bindgen_lower_t396(ptr + 40, value.constructor_) + + let address = mbt_ffi_malloc(value.methods.length() * 88) + for index = 0; index < value.methods.length(); index = index + 1 { + let iter_elem : @common.AgentMethod = value.methods[index] + let iter_base = address + index * 88 + __wit_bindgen_lower_t390(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 88, value.methods.length()) + mbt_ffi_store32(ptr + 84, address) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t399( + ptr : Int, + value : @common.SnapshottingConfig, +) -> Unit { + match value { + Default => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Periodic(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + mbt_ffi_store64(ptr + 8, payload0.reinterpret_as_int64()) + + () + } + EveryNInvocation(payload1) => { + mbt_ffi_store8(ptr + 0, 2) + mbt_ffi_store16(ptr + 8, payload1.reinterpret_as_int()) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t400(ptr : Int, value : @common.Snapshotting) -> Unit { + match value { + Disabled => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Enabled(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + __wit_bindgen_lower_t399(ptr + 8, payload0) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t402( + ptr : Int, + value : @common.AgentConfigDeclaration, +) -> Unit { + mbt_ffi_store8(ptr + 0, value.source.ordinal()) + + let address = mbt_ffi_malloc(value.path.length() * 8) + for index = 0; index < value.path.length(); index = index + 1 { + let iter_elem : String = value.path[index] + let iter_base = address + index * 8 + + let ptr0 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr0) + } + mbt_ffi_store32(ptr + 8, value.path.length()) + mbt_ffi_store32(ptr + 4, address) + mbt_ffi_store32(ptr + 12, value.value_type) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t406(ptr : Int, value : @common.AgentType) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.type_name) + mbt_ffi_store32(ptr + 4, value.type_name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + let ptr1 = mbt_ffi_str2ptr(value.description) + mbt_ffi_store32(ptr + 12, value.description.length()) + mbt_ffi_store32(ptr + 8, ptr1) + + let ptr2 = mbt_ffi_str2ptr(value.source_language) + mbt_ffi_store32(ptr + 20, value.source_language.length()) + mbt_ffi_store32(ptr + 16, ptr2) + __wit_bindgen_lower_t58(ptr + 24, value.schema) + __wit_bindgen_lower_t396(ptr + 44, value.constructor_) + + let address = mbt_ffi_malloc(value.methods.length() * 88) + for index = 0; index < value.methods.length(); index = index + 1 { + let iter_elem : @common.AgentMethod = value.methods[index] + let iter_base = address + index * 88 + __wit_bindgen_lower_t390(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 92, value.methods.length()) + mbt_ffi_store32(ptr + 88, address) + + let address3 = mbt_ffi_malloc(value.dependencies.length() * 92) + for index4 = 0; index4 < value.dependencies.length(); index4 = index4 + 1 { + let iter_elem : @common.AgentDependency = value.dependencies[index4] + let iter_base = address3 + index4 * 92 + __wit_bindgen_lower_t398(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 100, value.dependencies.length()) + mbt_ffi_store32(ptr + 96, address3) + mbt_ffi_store8(ptr + 104, value.mode.ordinal()) + + match value.http_mount { + None => { + mbt_ffi_store8(ptr + 108, 0) + + () + } + Some(payload5) => { + mbt_ffi_store8(ptr + 108, 1) + __wit_bindgen_lower_t383(ptr + 112, payload5) + + () + } + } + __wit_bindgen_lower_t400(ptr + 144, value.snapshotting) + + let address6 = mbt_ffi_malloc(value.config.length() * 16) + for index7 = 0; index7 < value.config.length(); index7 = index7 + 1 { + let iter_elem : @common.AgentConfigDeclaration = value.config[index7] + let iter_base = address6 + index7 * 16 + __wit_bindgen_lower_t402(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 172, value.config.length()) + mbt_ffi_store32(ptr + 168, address6) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t409(ptr : Int, value : @common.AgentError) -> Unit { + match value { + InvalidInput(payload) => { + mbt_ffi_store8(ptr + 0, 0) + + let ptr0 = mbt_ffi_str2ptr(payload) + mbt_ffi_store32(ptr + 8, payload.length()) + mbt_ffi_store32(ptr + 4, ptr0) + + () + } + InvalidMethod(payload1) => { + mbt_ffi_store8(ptr + 0, 1) + + let ptr2 = mbt_ffi_str2ptr(payload1) + mbt_ffi_store32(ptr + 8, payload1.length()) + mbt_ffi_store32(ptr + 4, ptr2) + + () + } + InvalidType(payload3) => { + mbt_ffi_store8(ptr + 0, 2) + + let ptr4 = mbt_ffi_str2ptr(payload3) + mbt_ffi_store32(ptr + 8, payload3.length()) + mbt_ffi_store32(ptr + 4, ptr4) + + () + } + InvalidAgentId(payload5) => { + mbt_ffi_store8(ptr + 0, 3) + + let ptr6 = mbt_ffi_str2ptr(payload5) + mbt_ffi_store32(ptr + 8, payload5.length()) + mbt_ffi_store32(ptr + 4, ptr6) + + () + } + CustomError(payload7) => { + mbt_ffi_store8(ptr + 0, 4) + __wit_bindgen_lower_t77(ptr + 4, payload7) + + () + } + } +} + +///| +#owned(bytes) +extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = + #|(func (param i32) (result i32) local.get 0) + +///| +extern "wasm" fn mbt_ffi_extend16(value : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.extend16_s) + +///| +extern "wasm" fn mbt_ffi_extend8(value : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.extend8_s) + +///| +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) + +///| +extern "wasm" fn mbt_ffi_load16(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load16_s) + +///| +extern "wasm" fn mbt_ffi_load16_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load16_u) + +///| +extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load) + +///| +extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = + #|(func (param i32) (result i64) local.get 0 i64.load) + +///| +extern "wasm" fn mbt_ffi_load8(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_s) + +///| +extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_u) + +///| +extern "wasm" fn mbt_ffi_loadf32(offset : Int) -> Float = + #|(func (param i32) (result f32) local.get 0 f32.load) + +///| +extern "wasm" fn mbt_ffi_loadf64(offset : Int) -> Double = + #|(func (param i32) (result f64) local.get 0 f64.load) + +///| +extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = + #|(func (param i32) (result i32) (local i32) + #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc + #| local.tee 1 i32.const 0 call $moonbit.init_array8 + #| local.get 1) + +///| +extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array8 + #| local.get 0) + +///| +extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array16 + #| local.get 0) + +///| +extern "wasm" fn mbt_ffi_store16(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store16) + +///| +extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) + +///| +extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = + #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) + +///| +extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) + +///| +extern "wasm" fn mbt_ffi_storef32(offset : Int, value : Float) = + #|(func (param i32) (param f32) local.get 0 local.get 1 f32.store) + +///| +extern "wasm" fn mbt_ffi_storef64(offset : Int, value : Double) = + #|(func (param i32) (param f64) local.get 0 local.get 1 f64.store) + +///| +#owned(str) +extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = + #|(func (param i32) (result i32) local.get 0) diff --git a/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/agent/guest/moon.pkg b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/agent/guest/moon.pkg new file mode 100644 index 0000000000..ddd1097013 --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/agent/guest/moon.pkg @@ -0,0 +1,9 @@ +warnings = "-44" + +import { + "golemcloud/golem_sdk/async-core", + "golemcloud/golem_sdk/interface/golem/agent/common", + "golemcloud/golem_sdk/interface/golem/core/types", +} + +supported_targets = "+wasm" diff --git a/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/agent/guest/pkg.generated.mbti b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/agent/guest/pkg.generated.mbti new file mode 100644 index 0000000000..6ca195505c --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/agent/guest/pkg.generated.mbti @@ -0,0 +1,25 @@ +// Generated using `moon info`, DON'T EDIT IT +package "golemcloud/golem_sdk/gen-agent-tool-middleware/interface/golem/agent/guest" + +import { + "golemcloud/golem_sdk/async-core", + "golemcloud/golem_sdk/interface/golem/agent/common", + "golemcloud/golem_sdk/interface/golem/core/types", +} + +// Values +pub fn discover_agent_types() -> Result[Array[@common.AgentType], @common.AgentError] + +pub fn get_definition() -> @common.AgentType + +pub async fn initialize(String, @types.SchemaValueTree, @common.Principal, @async-core.TaskGroup[Unit]) -> Result[Unit, @common.AgentError] + +pub async fn invoke(String, @types.SchemaValueTree, @common.Principal, @async-core.TaskGroup[Unit]) -> Result[@types.SchemaValueTree?, @common.AgentError] + +// Errors + +// Types and methods + +// Type aliases + +// Traits diff --git a/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/agent/guest/top.mbt b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/agent/guest/top.mbt new file mode 100644 index 0000000000..4c7a922e0c --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/agent/guest/top.mbt @@ -0,0 +1,39 @@ +// Generated by `wit-bindgen` 0.59.0. DO NOT EDIT! + +///| +/// Initializes the agent of a given type with the given constructor parameters. +/// If called a second time, it fails. +/// +/// `input` is a value tree whose root encodes the constructor's parameter +/// list (one record field per declared `named-field`, in declaration order). +/// The guest interprets it against its own constructor `input-schema`. +declare pub async fn initialize( + agent_type : String, + input : @types.SchemaValueTree, + principal : @common.Principal, + background_group : @async-core.TaskGroup[Unit], +) -> Result[Unit, @common.AgentError] + +///| +/// Invokes an agent. If create was not called before, it fails. +/// +/// `input` is a value tree whose root encodes the method's parameter list. +/// The result is `none` when the method's `output-schema` is `unit`, and +/// `some(value)` for a `single` output. +declare pub async fn invoke( + method_name : String, + input : @types.SchemaValueTree, + principal : @common.Principal, + background_group : @async-core.TaskGroup[Unit], +) -> Result[@types.SchemaValueTree?, @common.AgentError] + +///| +/// Gets the agent type. If create was not called before, it fails +declare pub fn get_definition() -> @common.AgentType + +///| +/// Gets the agent types defined by this component +declare pub fn discover_agent_types() -> Result[ + Array[@common.AgentType], + @common.AgentError, +] diff --git a/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/load-snapshot/README.md b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/load-snapshot/README.md new file mode 100644 index 0000000000..215b32e52c --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/load-snapshot/README.md @@ -0,0 +1,2 @@ +Interface providing user-defined snapshotting capability. This can be used to perform manual update of agents +when the new component incompatible with the old one. \ No newline at end of file diff --git a/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/load-snapshot/ffi.mbt b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/load-snapshot/ffi.mbt new file mode 100644 index 0000000000..5bec9f55b9 --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/load-snapshot/ffi.mbt @@ -0,0 +1,80 @@ +// Generated by `wit-bindgen` 0.59.0. DO NOT EDIT! + +///| +#doc(hidden) +pub fn wasmExportLoad(p0 : Int, p1 : Int, p2 : Int, p3 : Int) -> Int { + @async-core.with_waitableset(async fn() { + @async-core.with_task_group(async fn(background_group) { + let result = mbt_ffi_ptr2bytes(p0, p1) + + let result0 = mbt_ffi_ptr2str(p2, p3) + + let return_result : Ref[Result[Unit, String]?] = Ref(None) + return_result.val = Some( + load( + @host.Snapshot::{ payload: result, mime_type: result0 }, + background_group, + ), + ) + load_task_return(return_result) + }) + }) +} + +///| +fn wasmExportAsyncLoadTaskReturn(p0 : Int, p1 : Int, p2 : Int) = "[export]golem:api/load-snapshot@1.5.0" "[task-return]load" + +///| +fn load_task_return(return_result : Ref[Result[Unit, String]?]) -> Unit { + match return_result.val { + Some(return_value) => { + let cleanup_list : Array[Int] = [] + + let (lowered, lowered2, lowered3) = match return_value { + Ok(_payload) => (0, 0, 0) + Err(payload1) => { + let ptr = mbt_ffi_str2ptr(payload1) + cleanup_list.push(ptr) + + (1, ptr, payload1.length()) + } + } + + wasmExportAsyncLoadTaskReturn(lowered, lowered2, lowered3) + + cleanup_list.each(mbt_ffi_free) + + @async-core.task_returned() + } + None => () + } +} + +///| +#doc(hidden) +pub fn wasmExportAsyncLoad(event_raw : Int, waitable : Int, code : Int) -> Int { + @async-core.cb(event_raw, waitable, code) +} + +///| +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) + +///| +extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array8 + #| local.get 0) + +///| +extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array16 + #| local.get 0) + +///| +#owned(str) +extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = + #|(func (param i32) (result i32) local.get 0) diff --git a/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/load-snapshot/moon.pkg b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/load-snapshot/moon.pkg new file mode 100644 index 0000000000..79da8138a4 --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/load-snapshot/moon.pkg @@ -0,0 +1,8 @@ +warnings = "-44" + +import { + "golemcloud/golem_sdk/async-core", + "golemcloud/golem_sdk/interface/golem/api/host", +} + +supported_targets = "+wasm" diff --git a/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/load-snapshot/pkg.generated.mbti b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/load-snapshot/pkg.generated.mbti new file mode 100644 index 0000000000..9d451e511c --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/load-snapshot/pkg.generated.mbti @@ -0,0 +1,18 @@ +// Generated using `moon info`, DON'T EDIT IT +package "golemcloud/golem_sdk/gen-agent-tool-middleware/interface/golem/api/load-snapshot" + +import { + "golemcloud/golem_sdk/async-core", + "golemcloud/golem_sdk/interface/golem/api/host", +} + +// Values +pub async fn load(@host.Snapshot, @async-core.TaskGroup[Unit]) -> Result[Unit, String] + +// Errors + +// Types and methods + +// Type aliases + +// Traits diff --git a/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/load-snapshot/top.mbt b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/load-snapshot/top.mbt new file mode 100644 index 0000000000..826f5c23b2 --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/load-snapshot/top.mbt @@ -0,0 +1,9 @@ +// Generated by `wit-bindgen` 0.59.0. DO NOT EDIT! + +///| +/// Tries to load a user-defined snapshot, setting up the agent's state based on it. +/// The function can return with a failure to indicate that the update is not possible. +declare pub async fn load( + snapshot : @host.Snapshot, + background_group : @async-core.TaskGroup[Unit], +) -> Result[Unit, String] diff --git a/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/save-snapshot/README.md b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/save-snapshot/README.md new file mode 100644 index 0000000000..215b32e52c --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/save-snapshot/README.md @@ -0,0 +1,2 @@ +Interface providing user-defined snapshotting capability. This can be used to perform manual update of agents +when the new component incompatible with the old one. \ No newline at end of file diff --git a/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/save-snapshot/ffi.mbt b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/save-snapshot/ffi.mbt new file mode 100644 index 0000000000..8df0bf3980 --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/save-snapshot/ffi.mbt @@ -0,0 +1,53 @@ +// Generated by `wit-bindgen` 0.59.0. DO NOT EDIT! + +///| +#doc(hidden) +pub fn wasmExportSave() -> Int { + @async-core.with_waitableset(async fn() { + @async-core.with_task_group(async fn(background_group) { + let return_result : Ref[@host.Snapshot?] = Ref(None) + return_result.val = Some(save(background_group)) + save_task_return(return_result) + }) + }) +} + +///| +fn wasmExportAsyncSaveTaskReturn(p0 : Int, p1 : Int, p2 : Int, p3 : Int) = "[export]golem:api/save-snapshot@1.5.0" "[task-return]save" + +///| +fn save_task_return(return_result : Ref[@host.Snapshot?]) -> Unit { + match return_result.val { + Some(return_value) => { + let ptr = mbt_ffi_bytes2ptr(return_value.payload) + + let ptr0 = mbt_ffi_str2ptr(return_value.mime_type) + + wasmExportAsyncSaveTaskReturn( + ptr, + return_value.payload.length(), + ptr0, + return_value.mime_type.length(), + ) + + @async-core.task_returned() + } + None => () + } +} + +///| +#doc(hidden) +pub fn wasmExportAsyncSave(event_raw : Int, waitable : Int, code : Int) -> Int { + @async-core.cb(event_raw, waitable, code) +} + +///| +#owned(bytes) +extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = + #|(func (param i32) (result i32) local.get 0) + +///| +#owned(str) +extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = + #|(func (param i32) (result i32) local.get 0) diff --git a/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/save-snapshot/moon.pkg b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/save-snapshot/moon.pkg new file mode 100644 index 0000000000..79da8138a4 --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/save-snapshot/moon.pkg @@ -0,0 +1,8 @@ +warnings = "-44" + +import { + "golemcloud/golem_sdk/async-core", + "golemcloud/golem_sdk/interface/golem/api/host", +} + +supported_targets = "+wasm" diff --git a/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/save-snapshot/pkg.generated.mbti b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/save-snapshot/pkg.generated.mbti new file mode 100644 index 0000000000..ac0e412545 --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/save-snapshot/pkg.generated.mbti @@ -0,0 +1,18 @@ +// Generated using `moon info`, DON'T EDIT IT +package "golemcloud/golem_sdk/gen-agent-tool-middleware/interface/golem/api/save-snapshot" + +import { + "golemcloud/golem_sdk/async-core", + "golemcloud/golem_sdk/interface/golem/api/host", +} + +// Values +pub async fn save(@async-core.TaskGroup[Unit]) -> @host.Snapshot + +// Errors + +// Types and methods + +// Type aliases + +// Traits diff --git a/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/save-snapshot/top.mbt b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/save-snapshot/top.mbt new file mode 100644 index 0000000000..331bddcfe2 --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/api/save-snapshot/top.mbt @@ -0,0 +1,7 @@ +// Generated by `wit-bindgen` 0.59.0. DO NOT EDIT! + +///| +/// Saves the component's state into a user-defined snapshot +declare pub async fn save( + background_group : @async-core.TaskGroup[Unit], +) -> @host.Snapshot diff --git a/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/guest/README.md b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/guest/README.md new file mode 100644 index 0000000000..2dfaf65a9b --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/guest/README.md @@ -0,0 +1,8 @@ +Interface exported by a component that provides tools. The component +declares which tools it exposes, supplies their metadata, and accepts +invocations against a chosen leaf command of any tool. + +Tools are stateless from the host's perspective: each invocation is +independent. State accumulated by the underlying agent (file-system +writes, config-store updates, etc.) persists per the agent's normal +rules and is independent of the tool calling convention. \ No newline at end of file diff --git a/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/guest/ffi.mbt b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/guest/ffi.mbt new file mode 100644 index 0000000000..6e67219411 --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/guest/ffi.mbt @@ -0,0 +1,10388 @@ +// Generated by `wit-bindgen` 0.59.0. DO NOT EDIT! + +///| +#doc(hidden) +pub fn wasmExportDiscoverTools() -> Int { + let result : Result[Array[@common.Tool], @common.ToolError] = discover_tools() + let return_area = mbt_ffi_malloc(40) + + match result { + Ok(payload) => { + mbt_ffi_store8(return_area + 0, 0) + + let address = mbt_ffi_malloc(payload.length() * 36) + for index = 0; index < payload.length(); index = index + 1 { + let iter_elem : @common.Tool = payload[index] + let iter_base = address + index * 36 + __wit_bindgen_lower_t523(iter_base + 0, iter_elem) + } + mbt_ffi_store32(return_area + 8, payload.length()) + mbt_ffi_store32(return_area + 4, address) + + () + } + Err(payload0) => { + mbt_ffi_store8(return_area + 0, 1) + __wit_bindgen_lower_t528(return_area + 4, payload0) + + () + } + } + let ret = return_area + return ret +} + +///| +#doc(hidden) +pub fn wasmExportDiscoverToolsPostReturn(p0 : Int) -> Unit { + match mbt_ffi_load8_u(p0 + 0) { + 0 => { + for index69 = 0; index69 < mbt_ffi_load32(p0 + 8); index69 = index69 + 1 { + let iter_base = mbt_ffi_load32(p0 + 4) + index69 * 36 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index46 = 0 + index46 < mbt_ffi_load32(iter_base + 12) + index46 = index46 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index46 * 324 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index = 0 + index < mbt_ffi_load32(iter_base + 12) + index = index + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index0 = 0 + index0 < mbt_ffi_load32(iter_base + 36) + index0 = index0 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index0 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index4 = 0 + index4 < mbt_ffi_load32(iter_base + 44) + index4 = index4 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index4 * 112 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index1 = 0 + index1 < mbt_ffi_load32(iter_base + 20) + index1 = index1 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index1 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index2 = 0 + index2 < mbt_ffi_load32(iter_base + 44) + index2 = index2 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index2 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => { + for index3 = 0 + index3 < mbt_ffi_load32(iter_base + 88) + index3 = index3 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 84) + index3 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 100) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + for index7 = 0 + index7 < mbt_ffi_load32(iter_base + 52) + index7 = index7 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + index7 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index5 = 0 + index5 < mbt_ffi_load32(iter_base + 20) + index5 = index5 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index5 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index6 = 0 + index6 < mbt_ffi_load32(iter_base + 44) + index6 = index6 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index6 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => { + for index10 = 0 + index10 < mbt_ffi_load32(iter_base + 72) + index10 = index10 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 68) + index10 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index8 = 0 + index8 < mbt_ffi_load32(iter_base + 28) + index8 = index8 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index8 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + match mbt_ffi_load8_u(iter_base + 32) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => { + for index9 = 0 + index9 < mbt_ffi_load32(iter_base + 56) + index9 = index9 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 52) + + index9 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 80)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 88)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 96)) + + for index11 = 0 + index11 < mbt_ffi_load32(iter_base + 108) + index11 = index11 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 104) + + index11 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + + match mbt_ffi_load8_u(iter_base + 112) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 116)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 140) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 144)) + _ => panic() + } + } + _ => panic() + } + + for index15 = 0 + index15 < mbt_ffi_load32(iter_base + 160) + index15 = index15 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 156) + index15 * 112 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index12 = 0 + index12 < mbt_ffi_load32(iter_base + 20) + index12 = index12 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index12 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index13 = 0 + index13 < mbt_ffi_load32(iter_base + 44) + index13 = index13 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index13 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => { + for index14 = 0 + index14 < mbt_ffi_load32(iter_base + 88) + index14 = index14 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 84) + + index14 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 100) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 156)) + + for index18 = 0 + index18 < mbt_ffi_load32(iter_base + 168) + index18 = index18 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 164) + index18 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index16 = 0 + index16 < mbt_ffi_load32(iter_base + 20) + index16 = index16 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index16 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index17 = 0 + index17 < mbt_ffi_load32(iter_base + 44) + index17 = index17 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index17 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 164)) + + for index36 = 0 + index36 < mbt_ffi_load32(iter_base + 176) + index36 = index36 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 172) + index36 * 28 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => { + for index20 = 0 + index20 < mbt_ffi_load32(iter_base + 8) + index20 = index20 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index20 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index19 = 0 + index19 < mbt_ffi_load32(iter_base + 16) + index19 = index19 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index19 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 1 => { + for index22 = 0 + index22 < mbt_ffi_load32(iter_base + 8) + index22 = index22 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index22 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index21 = 0 + index21 < mbt_ffi_load32(iter_base + 16) + index21 = index21 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index21 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 2 => { + for index24 = 0 + index24 < mbt_ffi_load32(iter_base + 8) + index24 = index24 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index24 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index23 = 0 + index23 < mbt_ffi_load32(iter_base + 16) + index23 = index23 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index23 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 3 => { + for index27 = 0 + index27 < mbt_ffi_load32(iter_base + 8) + index27 = index27 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index27 * 8 + + for index26 = 0 + index26 < mbt_ffi_load32(iter_base + 4) + index26 = index26 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 0) + + index26 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index25 = 0 + index25 < mbt_ffi_load32(iter_base + 16) + index25 = index25 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index25 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 4 => { + for index29 = 0 + index29 < mbt_ffi_load32(iter_base + 12) + index29 = index29 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index29 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index28 = 0 + index28 < mbt_ffi_load32(iter_base + 16) + index28 = index28 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index28 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index31 = 0 + index31 < mbt_ffi_load32(iter_base + 24) + index31 = index31 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 20) + + index31 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index30 = 0 + index30 < mbt_ffi_load32(iter_base + 16) + index30 = index30 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index30 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + } + 5 => { + for index33 = 0 + index33 < mbt_ffi_load32(iter_base + 12) + index33 = index33 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index33 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index32 = 0 + index32 < mbt_ffi_load32(iter_base + 16) + index32 = index32 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index32 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index35 = 0 + index35 < mbt_ffi_load32(iter_base + 20) + index35 = index35 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index35 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index34 = 0 + index34 < mbt_ffi_load32(iter_base + 16) + index34 = index34 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index34 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 172)) + + match mbt_ffi_load8_u(iter_base + 180) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 184)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 192)) + + for index37 = 0 + index37 < mbt_ffi_load32(iter_base + 204) + index37 = index37 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 200) + + index37 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 200)) + + for index38 = 0 + index38 < mbt_ffi_load32(iter_base + 212) + index38 = index38 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 208) + + index38 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 208)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 220) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 224)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 232)) + + for index39 = 0 + index39 < mbt_ffi_load32(iter_base + 244) + index39 = index39 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 240) + + index39 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 240)) + + for index40 = 0 + index40 < mbt_ffi_load32(iter_base + 252) + index40 = index40 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 248) + + index40 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 248)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 260) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 268)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 276)) + + for index41 = 0 + index41 < mbt_ffi_load32(iter_base + 288) + index41 = index41 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 284) + + index41 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 284)) + + for index43 = 0 + index43 < mbt_ffi_load32(iter_base + 296) + index43 = index43 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 292) + + index43 * 32 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index42 = 0 + index42 < mbt_ffi_load32(iter_base + 28) + index42 = index42 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index42 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 292)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 300)) + } + _ => panic() + } + + for index45 = 0 + index45 < mbt_ffi_load32(iter_base + 312) + index45 = index45 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 308) + index45 * 44 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index44 = 0 + index44 < mbt_ffi_load32(iter_base + 28) + index44 = index44 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index44 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 308)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index67 = 0 + index67 < mbt_ffi_load32(iter_base + 20) + index67 = index67 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index67 * 144 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 3 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 4 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 5 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 6 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 7 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 8 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 9 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 10 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 11 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 12 => () + 13 => () + 14 => { + for index49 = 0 + index49 < mbt_ffi_load32(iter_base + 12) + index49 = index49 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index49 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + for index47 = 0 + index47 < mbt_ffi_load32(iter_base + 28) + index47 = index47 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index47 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index48 = 0 + index48 < mbt_ffi_load32(iter_base + 36) + index48 = index48 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index48 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 52) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 60)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 15 => { + for index52 = 0 + index52 < mbt_ffi_load32(iter_base + 12) + index52 = index52 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index52 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index50 = 0 + index50 < mbt_ffi_load32(iter_base + 32) + index50 = index50 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index50 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index51 = 0 + index51 < mbt_ffi_load32(iter_base + 40) + index51 = index51 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + index51 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 16 => { + for index53 = 0 + index53 < mbt_ffi_load32(iter_base + 12) + index53 = index53 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index53 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 17 => { + for index54 = 0 + index54 < mbt_ffi_load32(iter_base + 12) + index54 = index54 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index54 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => () + 20 => () + 21 => () + 22 => () + 23 => () + 24 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index55 = 0 + index55 < mbt_ffi_load32(iter_base + 16) + index55 = index55 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index55 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + } + 25 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index56 = 0 + index56 < mbt_ffi_load32(iter_base + 16) + index56 = index56 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index56 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + 26 => { + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => { + for index57 = 0 + index57 < mbt_ffi_load32(iter_base + 20) + index57 = index57 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index57 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => { + for index58 = 0 + index58 < mbt_ffi_load32(iter_base + 32) + index58 = index58 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index58 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + } + _ => panic() + } + } + 27 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index59 = 0 + index59 < mbt_ffi_load32(iter_base + 16) + index59 = index59 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index59 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 20) { + 0 => () + 1 => { + for index60 = 0 + index60 < mbt_ffi_load32(iter_base + 28) + index60 = index60 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index60 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + _ => panic() + } + } + 28 => () + 29 => () + 30 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index61 = 0 + index61 < mbt_ffi_load32(iter_base + 20) + index61 = index61 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index61 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 76)) + _ => panic() + } + } + 31 => { + for index64 = 0 + index64 < mbt_ffi_load32(iter_base + 12) + index64 = index64 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index64 * 92 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 4 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + } + 5 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + + for index62 = 0 + index62 < mbt_ffi_load32(iter_base + 52) + index62 = index62 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + index62 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + for index63 = 0 + index63 < mbt_ffi_load32(iter_base + 60) + index63 = index63 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + index63 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 32 => + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + 33 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + 34 => () + 35 => () + 36 => () + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 88) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 92)) + _ => panic() + } + + for index65 = 0 + index65 < mbt_ffi_load32(iter_base + 104) + index65 = index65 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index65 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + for index66 = 0 + index66 < mbt_ffi_load32(iter_base + 112) + index66 = index66 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index66 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + match mbt_ffi_load8_u(iter_base + 116) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 120)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 128) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 132) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 136)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index68 = 0 + index68 < mbt_ffi_load32(iter_base + 28) + index68 = index68 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index68 * 24 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 4)) + } + 1 => + match mbt_ffi_load8_u(p0 + 4) { + 0 => mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + 1 => { + for index70 = 0 + index70 < mbt_ffi_load32(p0 + 12) + index70 = index70 + 1 { + let iter_base = mbt_ffi_load32(p0 + 8) + index70 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + } + 2 => mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + 3 => mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + 4 => mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + 5 => { + for index91 = 0 + index91 < mbt_ffi_load32(p0 + 12) + index91 = index91 + 1 { + let iter_base = mbt_ffi_load32(p0 + 8) + index91 * 144 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 3 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 4 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 5 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 6 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 7 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 8 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 9 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 10 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 11 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 12 => () + 13 => () + 14 => { + for index73 = 0 + index73 < mbt_ffi_load32(iter_base + 12) + index73 = index73 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index73 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + for index71 = 0 + index71 < mbt_ffi_load32(iter_base + 28) + index71 = index71 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index71 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index72 = 0 + index72 < mbt_ffi_load32(iter_base + 36) + index72 = index72 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index72 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 52) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 60)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 15 => { + for index76 = 0 + index76 < mbt_ffi_load32(iter_base + 12) + index76 = index76 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index76 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index74 = 0 + index74 < mbt_ffi_load32(iter_base + 32) + index74 = index74 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index74 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index75 = 0 + index75 < mbt_ffi_load32(iter_base + 40) + index75 = index75 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + index75 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 16 => { + for index77 = 0 + index77 < mbt_ffi_load32(iter_base + 12) + index77 = index77 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index77 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 17 => { + for index78 = 0 + index78 < mbt_ffi_load32(iter_base + 12) + index78 = index78 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index78 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => () + 20 => () + 21 => () + 22 => () + 23 => () + 24 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index79 = 0 + index79 < mbt_ffi_load32(iter_base + 16) + index79 = index79 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index79 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + } + 25 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index80 = 0 + index80 < mbt_ffi_load32(iter_base + 16) + index80 = index80 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index80 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + 26 => { + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => { + for index81 = 0 + index81 < mbt_ffi_load32(iter_base + 20) + index81 = index81 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index81 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => { + for index82 = 0 + index82 < mbt_ffi_load32(iter_base + 32) + index82 = index82 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index82 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + } + _ => panic() + } + } + 27 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index83 = 0 + index83 < mbt_ffi_load32(iter_base + 16) + index83 = index83 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index83 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 20) { + 0 => () + 1 => { + for index84 = 0 + index84 < mbt_ffi_load32(iter_base + 28) + index84 = index84 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index84 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + _ => panic() + } + } + 28 => () + 29 => () + 30 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index85 = 0 + index85 < mbt_ffi_load32(iter_base + 20) + index85 = index85 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index85 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 76)) + _ => panic() + } + } + 31 => { + for index88 = 0 + index88 < mbt_ffi_load32(iter_base + 12) + index88 = index88 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index88 * 92 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 4 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + } + 5 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + + for index86 = 0 + index86 < mbt_ffi_load32(iter_base + 52) + index86 = index86 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + index86 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + for index87 = 0 + index87 < mbt_ffi_load32(iter_base + 60) + index87 = index87 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + index87 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 32 => + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + 33 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + 34 => () + 35 => () + 36 => () + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 88) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 92)) + _ => panic() + } + + for index89 = 0 + index89 < mbt_ffi_load32(iter_base + 104) + index89 = index89 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index89 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + for index90 = 0 + index90 < mbt_ffi_load32(iter_base + 112) + index90 = index90 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index90 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + match mbt_ffi_load8_u(iter_base + 116) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 120)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 128) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 132) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 136)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + + for index92 = 0 + index92 < mbt_ffi_load32(p0 + 20) + index92 = index92 + 1 { + let iter_base = mbt_ffi_load32(p0 + 16) + index92 * 24 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 16)) + + for index93 = 0 + index93 < mbt_ffi_load32(p0 + 32) + index93 = index93 + 1 { + let iter_base = mbt_ffi_load32(p0 + 28) + index93 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 28)) + } + _ => panic() + } + _ => panic() + } +} + +///| +#doc(hidden) +pub fn wasmExportGetTool(p0 : Int, p1 : Int) -> Int { + let result = mbt_ffi_ptr2str(p0, p1) + + let result0 : Result[@common.Tool, @common.ToolError] = get_tool(result) + let return_area = mbt_ffi_malloc(40) + + match result0 { + Ok(payload) => { + mbt_ffi_store8(return_area + 0, 0) + __wit_bindgen_lower_t523(return_area + 4, payload) + + () + } + Err(payload1) => { + mbt_ffi_store8(return_area + 0, 1) + __wit_bindgen_lower_t528(return_area + 4, payload1) + + () + } + } + let ret = return_area + return ret +} + +///| +#doc(hidden) +pub fn wasmExportGetToolPostReturn(p0 : Int) -> Unit { + match mbt_ffi_load8_u(p0 + 0) { + 0 => { + mbt_ffi_free(mbt_ffi_load32(p0 + 4)) + + for index46 = 0; index46 < mbt_ffi_load32(p0 + 16); index46 = index46 + 1 { + let iter_base = mbt_ffi_load32(p0 + 12) + index46 * 324 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index = 0; index < mbt_ffi_load32(iter_base + 12); index = index + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index0 = 0 + index0 < mbt_ffi_load32(iter_base + 36) + index0 = index0 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index0 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index4 = 0 + index4 < mbt_ffi_load32(iter_base + 44) + index4 = index4 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index4 * 112 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index1 = 0 + index1 < mbt_ffi_load32(iter_base + 20) + index1 = index1 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index1 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index2 = 0 + index2 < mbt_ffi_load32(iter_base + 44) + index2 = index2 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index2 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => { + for index3 = 0 + index3 < mbt_ffi_load32(iter_base + 88) + index3 = index3 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 84) + index3 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 100) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + for index7 = 0 + index7 < mbt_ffi_load32(iter_base + 52) + index7 = index7 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + index7 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index5 = 0 + index5 < mbt_ffi_load32(iter_base + 20) + index5 = index5 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index5 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index6 = 0 + index6 < mbt_ffi_load32(iter_base + 44) + index6 = index6 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index6 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => { + for index10 = 0 + index10 < mbt_ffi_load32(iter_base + 72) + index10 = index10 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 68) + index10 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index8 = 0 + index8 < mbt_ffi_load32(iter_base + 28) + index8 = index8 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index8 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + match mbt_ffi_load8_u(iter_base + 32) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => { + for index9 = 0 + index9 < mbt_ffi_load32(iter_base + 56) + index9 = index9 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 52) + index9 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 80)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 88)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 96)) + + for index11 = 0 + index11 < mbt_ffi_load32(iter_base + 108) + index11 = index11 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 104) + index11 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + + match mbt_ffi_load8_u(iter_base + 112) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 116)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 140) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 144)) + _ => panic() + } + } + _ => panic() + } + + for index15 = 0 + index15 < mbt_ffi_load32(iter_base + 160) + index15 = index15 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 156) + index15 * 112 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index12 = 0 + index12 < mbt_ffi_load32(iter_base + 20) + index12 = index12 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index12 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index13 = 0 + index13 < mbt_ffi_load32(iter_base + 44) + index13 = index13 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index13 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => { + for index14 = 0 + index14 < mbt_ffi_load32(iter_base + 88) + index14 = index14 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 84) + + index14 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 100) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 156)) + + for index18 = 0 + index18 < mbt_ffi_load32(iter_base + 168) + index18 = index18 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 164) + index18 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index16 = 0 + index16 < mbt_ffi_load32(iter_base + 20) + index16 = index16 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index16 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index17 = 0 + index17 < mbt_ffi_load32(iter_base + 44) + index17 = index17 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index17 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 164)) + + for index36 = 0 + index36 < mbt_ffi_load32(iter_base + 176) + index36 = index36 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 172) + index36 * 28 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => { + for index20 = 0 + index20 < mbt_ffi_load32(iter_base + 8) + index20 = index20 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + index20 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index19 = 0 + index19 < mbt_ffi_load32(iter_base + 16) + index19 = index19 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index19 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 1 => { + for index22 = 0 + index22 < mbt_ffi_load32(iter_base + 8) + index22 = index22 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + index22 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index21 = 0 + index21 < mbt_ffi_load32(iter_base + 16) + index21 = index21 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index21 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 2 => { + for index24 = 0 + index24 < mbt_ffi_load32(iter_base + 8) + index24 = index24 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + index24 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index23 = 0 + index23 < mbt_ffi_load32(iter_base + 16) + index23 = index23 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index23 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 3 => { + for index27 = 0 + index27 < mbt_ffi_load32(iter_base + 8) + index27 = index27 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + index27 * 8 + + for index26 = 0 + index26 < mbt_ffi_load32(iter_base + 4) + index26 = index26 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 0) + + index26 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index25 = 0 + index25 < mbt_ffi_load32(iter_base + 16) + index25 = index25 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index25 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 4 => { + for index29 = 0 + index29 < mbt_ffi_load32(iter_base + 12) + index29 = index29 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index29 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index28 = 0 + index28 < mbt_ffi_load32(iter_base + 16) + index28 = index28 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index28 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index31 = 0 + index31 < mbt_ffi_load32(iter_base + 24) + index31 = index31 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 20) + + index31 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index30 = 0 + index30 < mbt_ffi_load32(iter_base + 16) + index30 = index30 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index30 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + } + 5 => { + for index33 = 0 + index33 < mbt_ffi_load32(iter_base + 12) + index33 = index33 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index33 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index32 = 0 + index32 < mbt_ffi_load32(iter_base + 16) + index32 = index32 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index32 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index35 = 0 + index35 < mbt_ffi_load32(iter_base + 20) + index35 = index35 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index35 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index34 = 0 + index34 < mbt_ffi_load32(iter_base + 16) + index34 = index34 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index34 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 172)) + + match mbt_ffi_load8_u(iter_base + 180) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 184)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 192)) + + for index37 = 0 + index37 < mbt_ffi_load32(iter_base + 204) + index37 = index37 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 200) + index37 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 200)) + + for index38 = 0 + index38 < mbt_ffi_load32(iter_base + 212) + index38 = index38 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 208) + index38 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 208)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 220) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 224)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 232)) + + for index39 = 0 + index39 < mbt_ffi_load32(iter_base + 244) + index39 = index39 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 240) + index39 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 240)) + + for index40 = 0 + index40 < mbt_ffi_load32(iter_base + 252) + index40 = index40 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 248) + index40 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 248)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 260) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 268)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 276)) + + for index41 = 0 + index41 < mbt_ffi_load32(iter_base + 288) + index41 = index41 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 284) + index41 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 284)) + + for index43 = 0 + index43 < mbt_ffi_load32(iter_base + 296) + index43 = index43 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 292) + index43 * 32 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index42 = 0 + index42 < mbt_ffi_load32(iter_base + 28) + index42 = index42 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index42 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 292)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 300)) + } + _ => panic() + } + + for index45 = 0 + index45 < mbt_ffi_load32(iter_base + 312) + index45 = index45 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 308) + index45 * 44 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index44 = 0 + index44 < mbt_ffi_load32(iter_base + 28) + index44 = index44 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index44 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 308)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 12)) + + for index67 = 0; index67 < mbt_ffi_load32(p0 + 24); index67 = index67 + 1 { + let iter_base = mbt_ffi_load32(p0 + 20) + index67 * 144 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 3 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 4 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 5 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 6 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 7 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 8 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 9 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 10 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 11 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 12 => () + 13 => () + 14 => { + for index49 = 0 + index49 < mbt_ffi_load32(iter_base + 12) + index49 = index49 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index49 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + for index47 = 0 + index47 < mbt_ffi_load32(iter_base + 28) + index47 = index47 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index47 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index48 = 0 + index48 < mbt_ffi_load32(iter_base + 36) + index48 = index48 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index48 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 52) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 60)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 15 => { + for index52 = 0 + index52 < mbt_ffi_load32(iter_base + 12) + index52 = index52 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index52 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index50 = 0 + index50 < mbt_ffi_load32(iter_base + 32) + index50 = index50 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index50 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index51 = 0 + index51 < mbt_ffi_load32(iter_base + 40) + index51 = index51 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + index51 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 16 => { + for index53 = 0 + index53 < mbt_ffi_load32(iter_base + 12) + index53 = index53 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index53 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 17 => { + for index54 = 0 + index54 < mbt_ffi_load32(iter_base + 12) + index54 = index54 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index54 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => () + 20 => () + 21 => () + 22 => () + 23 => () + 24 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index55 = 0 + index55 < mbt_ffi_load32(iter_base + 16) + index55 = index55 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index55 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + } + 25 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index56 = 0 + index56 < mbt_ffi_load32(iter_base + 16) + index56 = index56 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index56 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + 26 => { + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => { + for index57 = 0 + index57 < mbt_ffi_load32(iter_base + 20) + index57 = index57 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index57 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => { + for index58 = 0 + index58 < mbt_ffi_load32(iter_base + 32) + index58 = index58 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index58 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + } + _ => panic() + } + } + 27 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index59 = 0 + index59 < mbt_ffi_load32(iter_base + 16) + index59 = index59 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index59 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 20) { + 0 => () + 1 => { + for index60 = 0 + index60 < mbt_ffi_load32(iter_base + 28) + index60 = index60 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index60 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + _ => panic() + } + } + 28 => () + 29 => () + 30 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index61 = 0 + index61 < mbt_ffi_load32(iter_base + 20) + index61 = index61 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index61 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 76)) + _ => panic() + } + } + 31 => { + for index64 = 0 + index64 < mbt_ffi_load32(iter_base + 12) + index64 = index64 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index64 * 92 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 4 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + } + 5 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + + for index62 = 0 + index62 < mbt_ffi_load32(iter_base + 52) + index62 = index62 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + index62 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + for index63 = 0 + index63 < mbt_ffi_load32(iter_base + 60) + index63 = index63 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + index63 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 32 => + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + 33 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + 34 => () + 35 => () + 36 => () + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 88) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 92)) + _ => panic() + } + + for index65 = 0 + index65 < mbt_ffi_load32(iter_base + 104) + index65 = index65 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index65 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + for index66 = 0 + index66 < mbt_ffi_load32(iter_base + 112) + index66 = index66 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index66 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + match mbt_ffi_load8_u(iter_base + 116) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 120)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 128) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 132) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 136)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 20)) + + for index68 = 0; index68 < mbt_ffi_load32(p0 + 32); index68 = index68 + 1 { + let iter_base = mbt_ffi_load32(p0 + 28) + index68 * 24 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 28)) + } + 1 => + match mbt_ffi_load8_u(p0 + 4) { + 0 => mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + 1 => { + for index69 = 0 + index69 < mbt_ffi_load32(p0 + 12) + index69 = index69 + 1 { + let iter_base = mbt_ffi_load32(p0 + 8) + index69 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + } + 2 => mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + 3 => mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + 4 => mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + 5 => { + for index90 = 0 + index90 < mbt_ffi_load32(p0 + 12) + index90 = index90 + 1 { + let iter_base = mbt_ffi_load32(p0 + 8) + index90 * 144 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 3 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 4 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 5 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 6 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 7 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 8 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 9 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 10 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 11 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 12 => () + 13 => () + 14 => { + for index72 = 0 + index72 < mbt_ffi_load32(iter_base + 12) + index72 = index72 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index72 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + for index70 = 0 + index70 < mbt_ffi_load32(iter_base + 28) + index70 = index70 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index70 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index71 = 0 + index71 < mbt_ffi_load32(iter_base + 36) + index71 = index71 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index71 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 52) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 60)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 15 => { + for index75 = 0 + index75 < mbt_ffi_load32(iter_base + 12) + index75 = index75 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index75 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index73 = 0 + index73 < mbt_ffi_load32(iter_base + 32) + index73 = index73 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index73 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index74 = 0 + index74 < mbt_ffi_load32(iter_base + 40) + index74 = index74 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + index74 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 16 => { + for index76 = 0 + index76 < mbt_ffi_load32(iter_base + 12) + index76 = index76 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index76 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 17 => { + for index77 = 0 + index77 < mbt_ffi_load32(iter_base + 12) + index77 = index77 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index77 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => () + 20 => () + 21 => () + 22 => () + 23 => () + 24 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index78 = 0 + index78 < mbt_ffi_load32(iter_base + 16) + index78 = index78 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index78 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + } + 25 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index79 = 0 + index79 < mbt_ffi_load32(iter_base + 16) + index79 = index79 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index79 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + 26 => { + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => { + for index80 = 0 + index80 < mbt_ffi_load32(iter_base + 20) + index80 = index80 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index80 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => { + for index81 = 0 + index81 < mbt_ffi_load32(iter_base + 32) + index81 = index81 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index81 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + } + _ => panic() + } + } + 27 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index82 = 0 + index82 < mbt_ffi_load32(iter_base + 16) + index82 = index82 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index82 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 20) { + 0 => () + 1 => { + for index83 = 0 + index83 < mbt_ffi_load32(iter_base + 28) + index83 = index83 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index83 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + _ => panic() + } + } + 28 => () + 29 => () + 30 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index84 = 0 + index84 < mbt_ffi_load32(iter_base + 20) + index84 = index84 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index84 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 76)) + _ => panic() + } + } + 31 => { + for index87 = 0 + index87 < mbt_ffi_load32(iter_base + 12) + index87 = index87 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index87 * 92 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 4 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + } + 5 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + + for index85 = 0 + index85 < mbt_ffi_load32(iter_base + 52) + index85 = index85 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + index85 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + for index86 = 0 + index86 < mbt_ffi_load32(iter_base + 60) + index86 = index86 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + index86 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 32 => + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + 33 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + 34 => () + 35 => () + 36 => () + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 88) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 92)) + _ => panic() + } + + for index88 = 0 + index88 < mbt_ffi_load32(iter_base + 104) + index88 = index88 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index88 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + for index89 = 0 + index89 < mbt_ffi_load32(iter_base + 112) + index89 = index89 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index89 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + match mbt_ffi_load8_u(iter_base + 116) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 120)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 128) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 132) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 136)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + + for index91 = 0 + index91 < mbt_ffi_load32(p0 + 20) + index91 = index91 + 1 { + let iter_base = mbt_ffi_load32(p0 + 16) + index91 * 24 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 16)) + + for index92 = 0 + index92 < mbt_ffi_load32(p0 + 32) + index92 = index92 + 1 { + let iter_base = mbt_ffi_load32(p0 + 28) + index92 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 28)) + } + _ => panic() + } + _ => panic() + } +} + +///| +fn wasmImportExportGolemToolGuest010InvokeStream0Read( + handle : Int, + buffer_ptr : Int, + length : Int, +) -> Int = "[export]golem:tool/guest@0.1.0" "[async-lower][stream-read-0]invoke" + +///| +fn wasmImportExportGolemToolGuest010InvokeStream0CancelRead( + handle : Int, +) -> Int = "[export]golem:tool/guest@0.1.0" "[stream-cancel-read-0]invoke" + +///| +fn wasmImportExportGolemToolGuest010InvokeStream0DropReadable(handle : Int) = "[export]golem:tool/guest@0.1.0" "[stream-drop-readable-0]invoke" + +///| +fn wasmExportGolemToolGuest010InvokeStream0Malloc(length : Int) -> Int { + let ptr = mbt_ffi_malloc(1 * length) + ptr +} + +///| +fn wasmExportGolemToolGuest010InvokeStream0Reject( + ptr : Int, + start : Int, + length : Int, +) -> Unit { + ignore((ptr, start, length)) +} + +///| +fn wasmExportGolemToolGuest010InvokeStream0ListLift( + ptr : Int, + length : Int, +) -> FixedArray[Byte] { + mbt_ffi_ptr2bytes(ptr, length) +} + +///| +priv struct WasmExportGolemToolGuest010InvokeStream0StreamSource { + handle : Int + mut closed : Bool + mut reading : Bool + mut read_task : Int + mut read_buffer : Int + mut read_discarding : Bool + mut read_cleanup_done : Bool + read_cleanup : @async-core.CondVar +} + +///| +fn WasmExportGolemToolGuest010InvokeStream0StreamSource::finish_read( + self : WasmExportGolemToolGuest010InvokeStream0StreamSource, +) -> Unit { + self.reading = false + self.read_task = 0 + self.read_buffer = 0 + self.read_discarding = false + // Keep completion latched until a later read starts so every waiter woken + // by the broadcast can observe it. +} + +///| +async fn WasmExportGolemToolGuest010InvokeStream0StreamSource::wait_for_read_cleanup( + self : WasmExportGolemToolGuest010InvokeStream0StreamSource, +) -> Unit noraise { + @async-core.protect_from_cancel( + () => { + while !self.read_cleanup_done { + self.read_cleanup.wait() + } + }, + resume_on_cancel=true, + ) catch { + _ => () + } +} + +///| +async fn WasmExportGolemToolGuest010InvokeStream0StreamSource::cancel_active_read( + self : WasmExportGolemToolGuest010InvokeStream0StreamSource, +) -> Unit noraise { + if !self.reading { + return + } + if self.read_discarding { + self.wait_for_read_cleanup() + return + } + self.read_discarding = true + let progress_ref = Ref(0) + @async-core.protect_from_cancel( + () => { + progress_ref.val = @async-core.cancel_stream_read( + self.read_task, + self.handle, + () => { + wasmImportExportGolemToolGuest010InvokeStream0CancelRead(self.handle) + }, + ) + }, + resume_on_cancel=true, + ) catch { + _ => () + } + let progress = progress_ref.val + if progress > 0 && self.read_buffer != 0 { + wasmExportGolemToolGuest010InvokeStream0Reject( + self.read_buffer, + 0, + progress, + ) + } + self.read_cleanup_done = true + self.read_cleanup.broadcast() +} + +///| +async fn WasmExportGolemToolGuest010InvokeStream0StreamSource::close( + self : WasmExportGolemToolGuest010InvokeStream0StreamSource, +) -> Unit noraise { + if self.closed { + return + } + if self.reading { + self.cancel_active_read() + } + self.closed = true + wasmImportExportGolemToolGuest010InvokeStream0DropReadable(self.handle) +} + +///| +fn WasmExportGolemToolGuest010InvokeStream0StreamSource::close_sync( + self : WasmExportGolemToolGuest010InvokeStream0StreamSource, +) -> Unit { + if self.closed || self.reading { + return + } + + self.closed = true + wasmImportExportGolemToolGuest010InvokeStream0DropReadable(self.handle) +} + +///| +async fn WasmExportGolemToolGuest010InvokeStream0StreamSource::read( + self : WasmExportGolemToolGuest010InvokeStream0StreamSource, + count : Int, +) -> FixedArray[Byte]? { + if self.closed { + return None + } + if count <= 0 { + return Some([]) + } + if self.reading { + raise @async-core.EndpointBusy::Read + } + // `Stream.read` promises at most `count`; bound one canonical allocation. + let read_count = if count < 64 { count } else { 64 } + let ptr = wasmExportGolemToolGuest010InvokeStream0Malloc(read_count) + let mut owns_buffer = false + defer (if !owns_buffer { mbt_ffi_free(ptr) }) + self.reading = true + self.read_task = @async-core.current_component_task_token() + self.read_buffer = ptr + self.read_discarding = false + self.read_cleanup_done = false + let (progress, end) = @async-core.suspend_for_stream_read( + self.handle, + wasmImportExportGolemToolGuest010InvokeStream0Read( + self.handle, + ptr, + read_count, + ), + ) catch { + err => { + if self.read_discarding { + self.wait_for_read_cleanup() + self.finish_read() + return None + } + if err is @async-core.Cancelled::Cancelled { + self.cancel_active_read() + if !self.closed { + self.closed = true + wasmImportExportGolemToolGuest010InvokeStream0DropReadable( + self.handle, + ) + } + } + self.finish_read() + raise err + } + } + if self.read_discarding { + self.wait_for_read_cleanup() + self.finish_read() + return None + } + if progress == 0 { + self.finish_read() + if end { + self.close() + return None + } + return Some([]) + } + let values = wasmExportGolemToolGuest010InvokeStream0ListLift(ptr, progress) + owns_buffer = true + self.finish_read() + if end { + self.close() + } + Some(values) +} + +///| +fn wasmExportGolemToolGuest010InvokeStream0StreamLift( + handle : Int, +) -> @async-core.Stream[Byte] { + let source = WasmExportGolemToolGuest010InvokeStream0StreamSource::{ + handle, + closed: false, + reading: false, + read_task: 0, + read_buffer: 0, + read_discarding: false, + read_cleanup_done: false, + read_cleanup: CondVar(), + } + @async-core.Stream::from_source( + count => source.read(count), + () => source.close(), + () => source.close_sync(), + ) +} + +///| +fn wasmImportExportGolemToolGuest010InvokeStream1DropReadable(handle : Int) = "[export]golem:tool/guest@0.1.0" "[stream-drop-readable-0]invoke" + +///| +fn wasmImportExportGolemToolGuest010InvokeStream1New() -> UInt64 = "[export]golem:tool/guest@0.1.0" "[stream-new-0]invoke" + +///| +fn wasmImportExportGolemToolGuest010InvokeStream1Write( + handle : Int, + buffer_ptr : Int, + length : Int, +) -> Int = "[export]golem:tool/guest@0.1.0" "[async-lower][stream-write-0]invoke" + +///| +fn wasmImportExportGolemToolGuest010InvokeStream1CancelWrite( + handle : Int, +) -> Int = "[export]golem:tool/guest@0.1.0" "[stream-cancel-write-0]invoke" + +///| +fn wasmImportExportGolemToolGuest010InvokeStream1DropWritable(handle : Int) = "[export]golem:tool/guest@0.1.0" "[stream-drop-writable-0]invoke" + +///| +fn wasmExportGolemToolGuest010InvokeStream1Malloc(length : Int) -> Int { + let ptr = mbt_ffi_malloc(1 * length) + ptr +} + +///| +fn wasmExportGolemToolGuest010InvokeStream1Commit( + ptr : Int, + start : Int, + length : Int, +) -> Unit { + ignore((ptr, start, length)) +} + +///| +fn wasmExportGolemToolGuest010InvokeStream1Reject( + ptr : Int, + start : Int, + length : Int, +) -> Unit { + ignore((ptr, start, length)) +} + +///| +fn wasmExportGolemToolGuest010InvokeStream1Lower( + value : Byte, + ptr : Int, +) -> Unit { + mbt_ffi_store8(ptr + 0, value.to_int()) +} + +///| +priv struct WasmExportGolemToolGuest010InvokeStream1StreamProducer { + stream : @async-core.Stream[Byte] + writer : Int +} + +///| +let wasmExportGolemToolGuest010InvokeStream1StreamProducers : Map[ + Int, + WasmExportGolemToolGuest010InvokeStream1StreamProducer, +] = Map([]) + +///| +fn wasmExportGolemToolGuest010InvokeStream1StreamCommit(handle : Int) -> Unit { + guard wasmExportGolemToolGuest010InvokeStream1StreamProducers.get(handle) + is Some(prepared) else { + return + } + wasmExportGolemToolGuest010InvokeStream1StreamProducers.remove(handle) + let stream = prepared.stream + let writer = prepared.writer + if !@async-core.has_component_task_scope() { + abort("component stream producer requires an async task scope") + } + let producer = stream.take_producer() + @async-core.spawn_component_task_current(async fn() { + let writer_closed = Ref(false) + let writer_lock = @async-core.Mutex() + let close_writer = fn() -> Unit { + if !writer_closed.val { + writer_closed.val = true + wasmImportExportGolemToolGuest010InvokeStream1DropWritable(writer) + } + } + let close_writer_serialized = async fn() -> Unit { + writer_lock.acquire() + defer writer_lock.release() + close_writer() + } + let cleanup_value = fn(value : Byte) -> Unit { + let ptr = wasmExportGolemToolGuest010InvokeStream1Malloc(1) + wasmExportGolemToolGuest010InvokeStream1Lower(value, ptr) + wasmExportGolemToolGuest010InvokeStream1Reject(ptr, 0, 1) + mbt_ffi_free(ptr) + } + let sink = @async-core.Sink::from_callbacks( + (data : ArrayView[Byte]) => { + writer_lock.acquire() + defer writer_lock.release() + if writer_closed.val || data.length() == 0 { + return 0 + } + let data_len = if data.length() < 64 { data.length() } else { 64 } + let ptr = wasmExportGolemToolGuest010InvokeStream1Malloc(data_len) + for i in 0.. Unit { + wasmExportGolemToolGuest010InvokeStream1Commit(ptr, 0, transferred) + if transferred < data_len { + wasmExportGolemToolGuest010InvokeStream1Reject( + ptr, + transferred, + data_len - transferred, + ) + } + mbt_ffi_free(ptr) + } + let mut total = 0 + let mut dropped = false + while total < data_len { + let (progress, end) = @async-core.suspend_for_stream_write( + writer, + wasmImportExportGolemToolGuest010InvokeStream1Write( + writer, + ptr + total * 1, + data_len - total, + ), + ) catch { + _ => { + total = total + + @async-core.cancel_stream_write(writer, () => { + wasmImportExportGolemToolGuest010InvokeStream1CancelWrite( + writer, + ) + }) + settle_staging(total) + close_writer() + return data_len + } + } + total = total + progress + if end { + dropped = true + break + } + } + settle_staging(total) + if dropped { + close_writer() + } + // The canonical writer accepted `total`; generated cleanup + // consumed the rest of this staging window. + data_len + }, + () => close_writer_serialized(), + () => !writer_closed.val, + Some(cleanup_value), + ) + let relay_source = producer is None + let run_producer = async fn() -> Unit { + match producer { + Some(producer) => { + producer(sink) + sink.close() + } + None => + for ;; { + match stream.read(64) { + Some(data) => + if !sink.write_all(data[:]) { + stream.reject(cleanup_value) + return + } + None => { + sink.close() + return + } + } + } + } + } + run_producer() catch { + _ => + if relay_source { + @async-core.protect_from_cancel( + () => stream.reject(cleanup_value), + resume_on_cancel=true, + ) catch { + _ => () + } + } + } + // A retained Sink may still own an in-flight canonical write after its + // producer returns. Do not drop the writable endpoint until that write + // has reached a terminal event and released its staging buffer. + @async-core.protect_from_cancel( + () => close_writer_serialized(), + resume_on_cancel=true, + ) + }) +} + +///| +fn wasmExportGolemToolGuest010InvokeStream1StreamLower( + stream : @async-core.Stream[Byte], +) -> Int { + if !@async-core.has_component_task_scope() { + abort("component stream producer requires an async task scope") + } + let pair = wasmImportExportGolemToolGuest010InvokeStream1New() + let reader = pair.to_int() + let writer = (pair >> 32).to_int() + wasmExportGolemToolGuest010InvokeStream1StreamProducers.set(reader, { + stream, + writer, + }) + reader +} + +///| +fn wasmExportGolemToolGuest010InvokeStream1StreamLowerCommitted( + stream : @async-core.Stream[Byte], +) -> Int { + let reader = wasmExportGolemToolGuest010InvokeStream1StreamLower(stream) + wasmExportGolemToolGuest010InvokeStream1StreamCommit(reader) + reader +} + +///| +#doc(hidden) +pub fn wasmExportInvokeGolemToolGuest(p0 : Int) -> Int { + @async-core.with_waitableset(async fn() { + @async-core.with_task_group(async fn(background_group) { + let result = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 0), + mbt_ffi_load32(p0 + 4), + ) + + let array : Array[String] = [] + for index = 0; index < mbt_ffi_load32(p0 + 12); index = index + 1 { + let iter_base = mbt_ffi_load32(p0 + 8) + index * 8 + + let result0 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array.push(result0) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + + let array196 : Array[@types.SchemaTypeNode] = [] + for index197 = 0 + index197 < mbt_ffi_load32(p0 + 20) + index197 = index197 + 1 { + let iter_base = mbt_ffi_load32(p0 + 16) + index197 * 144 + + let lifted182 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => @types.SchemaTypeBody::RefType(mbt_ffi_load32(iter_base + 8)) + 1 => @types.SchemaTypeBody::BoolType + 2 => { + let lifted6 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted1 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted) + } + _ => panic() + } + + let lifted3 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted2 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted2) + } + _ => panic() + } + + let lifted5 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result4 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result4) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted1, + max: lifted3, + unit: lifted5, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::S8Type(lifted6) + } + 3 => { + let lifted13 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted8 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted7 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted7) + } + _ => panic() + } + + let lifted10 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted9 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted9) + } + _ => panic() + } + + let lifted12 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result11 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result11) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted8, + max: lifted10, + unit: lifted12, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::S16Type(lifted13) + } + 4 => { + let lifted20 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted15 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted14 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted14) + } + _ => panic() + } + + let lifted17 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted16 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted16) + } + _ => panic() + } + + let lifted19 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result18 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result18) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted15, + max: lifted17, + unit: lifted19, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::S32Type(lifted20) + } + 5 => { + let lifted27 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted22 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted21 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted21) + } + _ => panic() + } + + let lifted24 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted23 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted23) + } + _ => panic() + } + + let lifted26 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result25 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result25) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted22, + max: lifted24, + unit: lifted26, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::S64Type(lifted27) + } + 6 => { + let lifted34 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted29 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted28 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted28) + } + _ => panic() + } + + let lifted31 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted30 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted30) + } + _ => panic() + } + + let lifted33 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result32 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result32) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted29, + max: lifted31, + unit: lifted33, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::U8Type(lifted34) + } + 7 => { + let lifted41 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted36 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted35 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted35) + } + _ => panic() + } + + let lifted38 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted37 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted37) + } + _ => panic() + } + + let lifted40 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result39 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result39) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted36, + max: lifted38, + unit: lifted40, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::U16Type(lifted41) + } + 8 => { + let lifted48 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted43 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted42 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted42) + } + _ => panic() + } + + let lifted45 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted44 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted44) + } + _ => panic() + } + + let lifted47 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result46 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result46) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted43, + max: lifted45, + unit: lifted47, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::U32Type(lifted48) + } + 9 => { + let lifted55 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted50 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted49 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted49) + } + _ => panic() + } + + let lifted52 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted51 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted51) + } + _ => panic() + } + + let lifted54 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result53 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result53) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted50, + max: lifted52, + unit: lifted54, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::U64Type(lifted55) + } + 10 => { + let lifted62 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted57 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted56 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted56) + } + _ => panic() + } + + let lifted59 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted58 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted58) + } + _ => panic() + } + + let lifted61 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result60 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result60) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted57, + max: lifted59, + unit: lifted61, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::F32Type(lifted62) + } + 11 => { + let lifted69 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted64 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted63 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted63) + } + _ => panic() + } + + let lifted66 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted65 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted65) + } + _ => panic() + } + + let lifted68 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result67 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result67) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted64, + max: lifted66, + unit: lifted68, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::F64Type(lifted69) + } + 12 => @types.SchemaTypeBody::CharType + 13 => @types.SchemaTypeBody::StringType + 14 => { + let array84 : Array[@types.NamedFieldType] = [] + for index85 = 0 + index85 < mbt_ffi_load32(iter_base + 12) + index85 = index85 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index85 * 68 + + let result70 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted72 : String? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => { + let result71 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + Option::Some(result71) + } + _ => panic() + } + + let array74 : Array[String] = [] + for index75 = 0 + index75 < mbt_ffi_load32(iter_base + 28) + index75 = index75 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index75 * 8 + + let result73 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array74.push(result73) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + let array77 : Array[String] = [] + for index78 = 0 + index78 < mbt_ffi_load32(iter_base + 36) + index78 = index78 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index78 * 8 + + let result76 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array77.push(result76) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + let lifted80 : String? = match mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let result79 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 44), + mbt_ffi_load32(iter_base + 48), + ) + + Option::Some(result79) + } + _ => panic() + } + + let lifted83 : @types.Role? = match + mbt_ffi_load8_u(iter_base + 52) { + 0 => Option::None + 1 => { + let lifted82 = match mbt_ffi_load8_u(iter_base + 56) { + 0 => @types.Role::Multimodal + 1 => @types.Role::UnstructuredText + 2 => @types.Role::UnstructuredBinary + 3 => { + let result81 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 60), + mbt_ffi_load32(iter_base + 64), + ) + + @types.Role::Other(result81) + } + _ => panic() + } + + Option::Some(lifted82) + } + _ => panic() + } + + array84.push(@types.NamedFieldType::{ + name: result70, + body: mbt_ffi_load32(iter_base + 8), + metadata: @types.MetadataEnvelope::{ + doc: lifted72, + aliases: array74, + examples: array77, + deprecated: lifted80, + role: lifted83, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::RecordType(array84) + } + 15 => { + let array101 : Array[@types.VariantCaseType] = [] + for index102 = 0 + index102 < mbt_ffi_load32(iter_base + 12) + index102 = index102 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index102 * 72 + + let result86 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted87 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + let lifted89 : String? = match mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result88 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result88) + } + _ => panic() + } + + let array91 : Array[String] = [] + for index92 = 0 + index92 < mbt_ffi_load32(iter_base + 32) + index92 = index92 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index92 * 8 + + let result90 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array91.push(result90) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + let array94 : Array[String] = [] + for index95 = 0 + index95 < mbt_ffi_load32(iter_base + 40) + index95 = index95 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + index95 * 8 + + let result93 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array94.push(result93) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + let lifted97 : String? = match mbt_ffi_load8_u(iter_base + 44) { + 0 => Option::None + 1 => { + let result96 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 48), + mbt_ffi_load32(iter_base + 52), + ) + + Option::Some(result96) + } + _ => panic() + } + + let lifted100 : @types.Role? = match + mbt_ffi_load8_u(iter_base + 56) { + 0 => Option::None + 1 => { + let lifted99 = match mbt_ffi_load8_u(iter_base + 60) { + 0 => @types.Role::Multimodal + 1 => @types.Role::UnstructuredText + 2 => @types.Role::UnstructuredBinary + 3 => { + let result98 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 64), + mbt_ffi_load32(iter_base + 68), + ) + + @types.Role::Other(result98) + } + _ => panic() + } + + Option::Some(lifted99) + } + _ => panic() + } + + array101.push(@types.VariantCaseType::{ + name: result86, + payload: lifted87, + metadata: @types.MetadataEnvelope::{ + doc: lifted89, + aliases: array91, + examples: array94, + deprecated: lifted97, + role: lifted100, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::VariantType(array101) + } + 16 => { + let array104 : Array[String] = [] + for index105 = 0 + index105 < mbt_ffi_load32(iter_base + 12) + index105 = index105 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index105 * 8 + + let result103 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array104.push(result103) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::EnumType(array104) + } + 17 => { + let array107 : Array[String] = [] + for index108 = 0 + index108 < mbt_ffi_load32(iter_base + 12) + index108 = index108 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index108 * 8 + + let result106 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array107.push(result106) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::FlagsType(array107) + } + 18 => { + let array109 : Array[Int] = [] + for index110 = 0 + index110 < mbt_ffi_load32(iter_base + 12) + index110 = index110 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index110 * 4 + + array109.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::TupleType(array109) + } + 19 => @types.SchemaTypeBody::ListType(mbt_ffi_load32(iter_base + 8)) + 20 => + @types.SchemaTypeBody::FixedListType(@types.FixedListSpec::{ + element: mbt_ffi_load32(iter_base + 8), + length: mbt_ffi_load32(iter_base + 12).reinterpret_as_uint(), + }) + 21 => + @types.SchemaTypeBody::MapType(@types.MapSpec::{ + key: mbt_ffi_load32(iter_base + 8), + value: mbt_ffi_load32(iter_base + 12), + }) + 22 => @types.SchemaTypeBody::OptionType(mbt_ffi_load32(iter_base + 8)) + 23 => { + let lifted111 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + let lifted112 : Int? = match mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + @types.SchemaTypeBody::ResultType(@types.ResultSpec::{ + ok: lifted111, + err: lifted112, + }) + } + 24 => { + let lifted116 : Array[String]? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let array114 : Array[String] = [] + for index115 = 0 + index115 < mbt_ffi_load32(iter_base + 16) + index115 = index115 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index115 * 8 + + let result113 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array114.push(result113) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + Option::Some(array114) + } + _ => panic() + } + + let lifted117 : UInt? = match mbt_ffi_load8_u(iter_base + 20) { + 0 => Option::None + 1 => + Option::Some( + mbt_ffi_load32(iter_base + 24).reinterpret_as_uint(), + ) + _ => panic() + } + + let lifted118 : UInt? = match mbt_ffi_load8_u(iter_base + 28) { + 0 => Option::None + 1 => + Option::Some( + mbt_ffi_load32(iter_base + 32).reinterpret_as_uint(), + ) + _ => panic() + } + + let lifted120 : String? = match mbt_ffi_load8_u(iter_base + 36) { + 0 => Option::None + 1 => { + let result119 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 40), + mbt_ffi_load32(iter_base + 44), + ) + + Option::Some(result119) + } + _ => panic() + } + + @types.SchemaTypeBody::TextType(@types.TextRestrictions::{ + languages: lifted116, + min_length: lifted117, + max_length: lifted118, + regex: lifted120, + }) + } + 25 => { + let lifted124 : Array[String]? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let array122 : Array[String] = [] + for index123 = 0 + index123 < mbt_ffi_load32(iter_base + 16) + index123 = index123 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index123 * 8 + + let result121 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array122.push(result121) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + Option::Some(array122) + } + _ => panic() + } + + let lifted125 : UInt? = match mbt_ffi_load8_u(iter_base + 20) { + 0 => Option::None + 1 => + Option::Some( + mbt_ffi_load32(iter_base + 24).reinterpret_as_uint(), + ) + _ => panic() + } + + let lifted126 : UInt? = match mbt_ffi_load8_u(iter_base + 28) { + 0 => Option::None + 1 => + Option::Some( + mbt_ffi_load32(iter_base + 32).reinterpret_as_uint(), + ) + _ => panic() + } + + @types.SchemaTypeBody::BinaryType(@types.BinaryRestrictions::{ + mime_types: lifted124, + min_bytes: lifted125, + max_bytes: lifted126, + }) + } + 26 => { + let lifted130 : Array[String]? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => { + let array128 : Array[String] = [] + for index129 = 0 + index129 < mbt_ffi_load32(iter_base + 20) + index129 = index129 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index129 * 8 + + let result127 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array128.push(result127) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + Option::Some(array128) + } + _ => panic() + } + + let lifted134 : Array[String]? = match + mbt_ffi_load8_u(iter_base + 24) { + 0 => Option::None + 1 => { + let array132 : Array[String] = [] + for index133 = 0 + index133 < mbt_ffi_load32(iter_base + 32) + index133 = index133 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index133 * 8 + + let result131 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array132.push(result131) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + Option::Some(array132) + } + _ => panic() + } + + @types.SchemaTypeBody::PathType(@types.PathSpec::{ + direction: @types.PathDirection::from( + mbt_ffi_load8_u(iter_base + 8), + ), + kind: @types.PathKind::from(mbt_ffi_load8_u(iter_base + 9)), + allowed_mime_types: lifted130, + allowed_extensions: lifted134, + }) + } + 27 => { + let lifted138 : Array[String]? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let array136 : Array[String] = [] + for index137 = 0 + index137 < mbt_ffi_load32(iter_base + 16) + index137 = index137 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index137 * 8 + + let result135 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array136.push(result135) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + Option::Some(array136) + } + _ => panic() + } + + let lifted142 : Array[String]? = match + mbt_ffi_load8_u(iter_base + 20) { + 0 => Option::None + 1 => { + let array140 : Array[String] = [] + for index141 = 0 + index141 < mbt_ffi_load32(iter_base + 28) + index141 = index141 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index141 * 8 + + let result139 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array140.push(result139) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + Option::Some(array140) + } + _ => panic() + } + + @types.SchemaTypeBody::UrlType(@types.UrlRestrictions::{ + allowed_schemes: lifted138, + allowed_hosts: lifted142, + }) + } + 28 => @types.SchemaTypeBody::DatetimeType + 29 => @types.SchemaTypeBody::DurationType + 30 => { + let result143 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let array145 : Array[String] = [] + for index146 = 0 + index146 < mbt_ffi_load32(iter_base + 20) + index146 = index146 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index146 * 8 + + let result144 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array145.push(result144) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + let lifted148 : @types.QuantityValue? = match + mbt_ffi_load8_u(iter_base + 24) { + 0 => Option::None + 1 => { + let result147 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 44), + mbt_ffi_load32(iter_base + 48), + ) + + Option::Some(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 32), + scale: mbt_ffi_load32(iter_base + 40), + unit: result147, + }) + } + _ => panic() + } + + let lifted150 : @types.QuantityValue? = match + mbt_ffi_load8_u(iter_base + 56) { + 0 => Option::None + 1 => { + let result149 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 76), + mbt_ffi_load32(iter_base + 80), + ) + + Option::Some(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 64), + scale: mbt_ffi_load32(iter_base + 72), + unit: result149, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::QuantityType(@types.QuantitySpec::{ + base_unit: result143, + allowed_suffixes: array145, + min: lifted148, + max: lifted150, + }) + } + 31 => { + let array174 : Array[@types.UnionBranch] = [] + for index175 = 0 + index175 < mbt_ffi_load32(iter_base + 12) + index175 = index175 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index175 * 92 + + let result151 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted160 = match mbt_ffi_load8_u(iter_base + 12) { + 0 => { + let result152 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::Prefix(result152) + } + 1 => { + let result153 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::Suffix(result153) + } + 2 => { + let result154 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::Contains(result154) + } + 3 => { + let result155 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::Regex(result155) + } + 4 => { + let result156 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + let lifted158 : String? = match + mbt_ffi_load8_u(iter_base + 24) { + 0 => Option::None + 1 => { + let result157 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 28), + mbt_ffi_load32(iter_base + 32), + ) + + Option::Some(result157) + } + _ => panic() + } + + @types.DiscriminatorRule::FieldEquals(@types.FieldDiscriminator::{ + field_name: result156, + literal: lifted158, + }) + } + 5 => { + let result159 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::FieldAbsent(result159) + } + _ => panic() + } + + let lifted162 : String? = match mbt_ffi_load8_u(iter_base + 36) { + 0 => Option::None + 1 => { + let result161 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 40), + mbt_ffi_load32(iter_base + 44), + ) + + Option::Some(result161) + } + _ => panic() + } + + let array164 : Array[String] = [] + for index165 = 0 + index165 < mbt_ffi_load32(iter_base + 52) + index165 = index165 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + index165 * 8 + + let result163 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array164.push(result163) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + let array167 : Array[String] = [] + for index168 = 0 + index168 < mbt_ffi_load32(iter_base + 60) + index168 = index168 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + index168 * 8 + + let result166 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array167.push(result166) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + let lifted170 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result169 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result169) + } + _ => panic() + } + + let lifted173 : @types.Role? = match + mbt_ffi_load8_u(iter_base + 76) { + 0 => Option::None + 1 => { + let lifted172 = match mbt_ffi_load8_u(iter_base + 80) { + 0 => @types.Role::Multimodal + 1 => @types.Role::UnstructuredText + 2 => @types.Role::UnstructuredBinary + 3 => { + let result171 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 84), + mbt_ffi_load32(iter_base + 88), + ) + + @types.Role::Other(result171) + } + _ => panic() + } + + Option::Some(lifted172) + } + _ => panic() + } + + array174.push(@types.UnionBranch::{ + tag: result151, + body: mbt_ffi_load32(iter_base + 8), + discriminator: lifted160, + metadata: @types.MetadataEnvelope::{ + doc: lifted162, + aliases: array164, + examples: array167, + deprecated: lifted170, + role: lifted173, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::UnionType(@types.UnionSpec::{ + branches: array174, + }) + } + 32 => { + let lifted177 : String? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => { + let result176 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + Option::Some(result176) + } + _ => panic() + } + + @types.SchemaTypeBody::SecretType(@types.SecretSpec::{ + inner: mbt_ffi_load32(iter_base + 8), + category: lifted177, + }) + } + 33 => { + let lifted179 : String? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let result178 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 12), + mbt_ffi_load32(iter_base + 16), + ) + + Option::Some(result178) + } + _ => panic() + } + + @types.SchemaTypeBody::QuotaTokenType(@types.QuotaTokenSpec::{ + resource_name: lifted179, + }) + } + 34 => + @types.SchemaTypeBody::PermissionCardType(@types.PermissionCardSpec::{ + polymorphic: mbt_ffi_load8_u(iter_base + 8) != 0, + }) + 35 => { + let lifted180 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaTypeBody::FutureType(lifted180) + } + 36 => { + let lifted181 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaTypeBody::StreamType(lifted181) + } + _ => panic() + } + + let lifted184 : String? = match mbt_ffi_load8_u(iter_base + 88) { + 0 => Option::None + 1 => { + let result183 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 92), + mbt_ffi_load32(iter_base + 96), + ) + + Option::Some(result183) + } + _ => panic() + } + + let array186 : Array[String] = [] + for index187 = 0 + index187 < mbt_ffi_load32(iter_base + 104) + index187 = index187 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index187 * 8 + + let result185 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array186.push(result185) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + let array189 : Array[String] = [] + for index190 = 0 + index190 < mbt_ffi_load32(iter_base + 112) + index190 = index190 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index190 * 8 + + let result188 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array189.push(result188) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + let lifted192 : String? = match mbt_ffi_load8_u(iter_base + 116) { + 0 => Option::None + 1 => { + let result191 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 120), + mbt_ffi_load32(iter_base + 124), + ) + + Option::Some(result191) + } + _ => panic() + } + + let lifted195 : @types.Role? = match mbt_ffi_load8_u(iter_base + 128) { + 0 => Option::None + 1 => { + let lifted194 = match mbt_ffi_load8_u(iter_base + 132) { + 0 => @types.Role::Multimodal + 1 => @types.Role::UnstructuredText + 2 => @types.Role::UnstructuredBinary + 3 => { + let result193 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 136), + mbt_ffi_load32(iter_base + 140), + ) + + @types.Role::Other(result193) + } + _ => panic() + } + + Option::Some(lifted194) + } + _ => panic() + } + + array196.push(@types.SchemaTypeNode::{ + body: lifted182, + metadata: @types.MetadataEnvelope::{ + doc: lifted184, + aliases: array186, + examples: array189, + deprecated: lifted192, + role: lifted195, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 16)) + + let array201 : Array[@types.SchemaTypeDef] = [] + for index202 = 0 + index202 < mbt_ffi_load32(p0 + 28) + index202 = index202 + 1 { + let iter_base = mbt_ffi_load32(p0 + 24) + index202 * 24 + + let result198 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted200 : String? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let result199 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 12), + mbt_ffi_load32(iter_base + 16), + ) + + Option::Some(result199) + } + _ => panic() + } + + array201.push(@types.SchemaTypeDef::{ + id: result198, + name: lifted200, + body: mbt_ffi_load32(iter_base + 20), + }) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 24)) + + let array232 : Array[@types.SchemaValueNode] = [] + for index233 = 0 + index233 < mbt_ffi_load32(p0 + 40) + index233 = index233 + 1 { + let iter_base = mbt_ffi_load32(p0 + 36) + index233 * 32 + + let lifted231 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue( + mbt_ffi_load8_u(iter_base + 8) != 0, + ) + 1 => @types.SchemaValueNode::S8Value(mbt_ffi_load8(iter_base + 8)) + 2 => @types.SchemaValueNode::S16Value(mbt_ffi_load16(iter_base + 8)) + 3 => @types.SchemaValueNode::S32Value(mbt_ffi_load32(iter_base + 8)) + 4 => @types.SchemaValueNode::S64Value(mbt_ffi_load64(iter_base + 8)) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8).land(0xFFFF).reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => @types.SchemaValueNode::F32Value(mbt_ffi_loadf32(iter_base + 8)) + 10 => @types.SchemaValueNode::F64Value(mbt_ffi_loadf64(iter_base + 8)) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result203 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result203) + } + 13 => { + let array204 : Array[Int] = [] + for index205 = 0 + index205 < mbt_ffi_load32(iter_base + 12) + index205 = index205 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index205 * 4 + + array204.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array204) + } + 14 => { + let lifted206 : Int? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted206, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array207 : Array[Bool] = [] + for index208 = 0 + index208 < mbt_ffi_load32(iter_base + 12) + index208 = index208 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index208 * 1 + + array207.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array207) + } + 17 => { + let array209 : Array[Int] = [] + for index210 = 0 + index210 < mbt_ffi_load32(iter_base + 12) + index210 = index210 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index210 * 4 + + array209.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array209) + } + 18 => { + let array211 : Array[Int] = [] + for index212 = 0 + index212 < mbt_ffi_load32(iter_base + 12) + index212 = index212 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index212 * 4 + + array211.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array211) + } + 19 => { + let array213 : Array[Int] = [] + for index214 = 0 + index214 < mbt_ffi_load32(iter_base + 12) + index214 = index214 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index214 * 4 + + array213.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array213) + } + 20 => { + let array215 : Array[@types.MapEntry] = [] + for index216 = 0 + index216 < mbt_ffi_load32(iter_base + 12) + index216 = index216 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index216 * 8 + + array215.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array215) + } + 21 => { + let lifted217 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted217) + } + 22 => { + let lifted220 = match mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted218 : Int? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted218) + } + 1 => { + let lifted219 : Int? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted219) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted220) + } + 23 => { + let result221 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted223 : String? = match mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result222 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result222) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result221, + language: lifted223, + }) + } + 24 => { + let result224 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted226 : String? = match mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result225 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result225) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result224, + mime_type: lifted226, + }) + } + 25 => { + let result227 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result227) + } + 26 => { + let result228 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result228) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result229 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result229, + }) + } + 30 => { + let result230 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result230, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken(mbt_ffi_load32(iter_base + 8)), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ), + ) + _ => panic() + } + + array232.push(lifted231) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 36)) + + let lifted235 : @async-core.Stream[Byte]? = match + mbt_ffi_load8_u(p0 + 48) { + 0 => Option::None + 1 => { + let result234 = wasmExportGolemToolGuest010InvokeStream0StreamLift( + mbt_ffi_load32(p0 + 52), + ) + + Option::Some(result234) + } + _ => panic() + } + + let lifted253 = match mbt_ffi_load8_u(p0 + 56) { + 0 => { + let result236 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 64), + mbt_ffi_load32(p0 + 68), + ) + + let result237 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 72), + mbt_ffi_load32(p0 + 76), + ) + + let lifted239 : String? = match mbt_ffi_load8_u(p0 + 80) { + 0 => Option::None + 1 => { + let result238 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 84), + mbt_ffi_load32(p0 + 88), + ) + + Option::Some(result238) + } + _ => panic() + } + + let lifted241 : String? = match mbt_ffi_load8_u(p0 + 92) { + 0 => Option::None + 1 => { + let result240 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 96), + mbt_ffi_load32(p0 + 100), + ) + + Option::Some(result240) + } + _ => panic() + } + + let lifted242 : Bool? = match mbt_ffi_load8_u(p0 + 104) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load8_u(p0 + 105) != 0) + _ => panic() + } + + let lifted244 : String? = match mbt_ffi_load8_u(p0 + 108) { + 0 => Option::None + 1 => { + let result243 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 112), + mbt_ffi_load32(p0 + 116), + ) + + Option::Some(result243) + } + _ => panic() + } + + let lifted246 : String? = match mbt_ffi_load8_u(p0 + 120) { + 0 => Option::None + 1 => { + let result245 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 124), + mbt_ffi_load32(p0 + 128), + ) + + Option::Some(result245) + } + _ => panic() + } + + let lifted248 : String? = match mbt_ffi_load8_u(p0 + 132) { + 0 => Option::None + 1 => { + let result247 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 136), + mbt_ffi_load32(p0 + 140), + ) + + Option::Some(result247) + } + _ => panic() + } + + let lifted250 : String? = match mbt_ffi_load8_u(p0 + 144) { + 0 => Option::None + 1 => { + let result249 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 148), + mbt_ffi_load32(p0 + 152), + ) + + Option::Some(result249) + } + _ => panic() + } + + let result251 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 156), + mbt_ffi_load32(p0 + 160), + ) + + @common0.Principal::Oidc(@common0.OidcPrincipal::{ + sub: result236, + issuer: result237, + email: lifted239, + name: lifted241, + email_verified: lifted242, + given_name: lifted244, + family_name: lifted246, + picture: lifted248, + preferred_username: lifted250, + claims: result251, + }) + } + 1 => { + let result252 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 80), + mbt_ffi_load32(p0 + 84), + ) + + @common0.Principal::Agent(@common0.AgentPrincipal::{ + agent_id: @types.AgentId::{ + component_id: @types.ComponentId::{ + uuid: @types.Uuid::{ + high_bits: mbt_ffi_load64(p0 + 64).reinterpret_as_uint64(), + low_bits: mbt_ffi_load64(p0 + 72).reinterpret_as_uint64(), + }, + }, + agent_id: result252, + }, + }) + } + 2 => + @common0.Principal::GolemUser(@common0.GolemUserPrincipal::{ + account_id: @types.AccountId::{ + uuid: @types.Uuid::{ + high_bits: mbt_ffi_load64(p0 + 64).reinterpret_as_uint64(), + low_bits: mbt_ffi_load64(p0 + 72).reinterpret_as_uint64(), + }, + }, + }) + 3 => @common0.Principal::Anonymous + _ => panic() + } + + let return_result : Ref[ + Result[@common.InvocationResult, @common.ToolError]?, + ] = Ref(None) + return_result.val = Some( + invoke( + result, + array, + @types.TypedSchemaValue::{ + graph: @types.SchemaGraph::{ + type_nodes: array196, + defs: array201, + root: mbt_ffi_load32(p0 + 32), + }, + value: @types.SchemaValueTree::{ + value_nodes: array232, + root: mbt_ffi_load32(p0 + 44), + }, + }, + lifted235, + lifted253, + background_group, + ), + ) + invoke_task_return(return_result) + }) + }) +} + +///| +fn wasmExportAsyncInvokeGolemToolGuestTaskReturn( + p0 : Int, + p1 : Int, + p2 : Int, + p3 : Int, + p4 : Int, + p5 : Int, + p6 : Int, + p7 : Int, + p8 : Int, + p9 : Int, + p10 : Int, + p11 : Int, +) = "[export]golem:tool/guest@0.1.0" "[task-return]invoke" + +///| +fn invoke_task_return( + return_result : Ref[Result[@common.InvocationResult, @common.ToolError]?], +) -> Unit { + match return_result.val { + Some(return_value) => { + let cleanup_list : Array[Int] = [] + + let ( + lowered301, + lowered302, + lowered303, + lowered304, + lowered305, + lowered306, + lowered307, + lowered308, + lowered309, + lowered310, + lowered311, + lowered312, + ) = match return_value { + Ok(payload) => { + let ( + lowered, + lowered261, + lowered262, + lowered263, + lowered264, + lowered265, + lowered266, + lowered267, + lowered268, + ) = match payload.result { + None => (0, 0, 0, 0, 0, 0, 0, 0, 0) + Some(payload255) => { + let address = mbt_ffi_malloc( + payload255.graph.type_nodes.length() * 144, + ) + for index256 = 0 + index256 < payload255.graph.type_nodes.length() + index256 = index256 + 1 { + let iter_elem : @types.SchemaTypeNode = payload255.graph.type_nodes[index256] + let iter_base = address + index256 * 144 + __wit_bindgen_lower_t55(iter_base + 0, iter_elem) + } + + let address257 = mbt_ffi_malloc( + payload255.graph.defs.length() * 24, + ) + for index258 = 0 + index258 < payload255.graph.defs.length() + index258 = index258 + 1 { + let iter_elem : @types.SchemaTypeDef = payload255.graph.defs[index258] + let iter_base = address257 + index258 * 24 + __wit_bindgen_lower_t17(iter_base + 0, iter_elem) + } + + let address259 = mbt_ffi_malloc( + payload255.value.value_nodes.length() * 32, + ) + for index260 = 0 + index260 < payload255.value.value_nodes.length() + index260 = index260 + 1 { + let iter_elem : @types.SchemaValueNode = payload255.value.value_nodes[index260] + let iter_base = address259 + index260 * 32 + __wit_bindgen_lower_t74(iter_base + 0, iter_elem) + } + cleanup_list.push(address) + cleanup_list.push(address257) + cleanup_list.push(address259) + + ( + 1, + address, + payload255.graph.type_nodes.length(), + address257, + payload255.graph.defs.length(), + payload255.graph.root, + address259, + payload255.value.value_nodes.length(), + payload255.value.root, + ) + } + } + + let (lowered271, lowered272) = match payload.stdout { + None => (0, 0) + Some(payload270) => + ( + 1, + wasmExportGolemToolGuest010InvokeStream1StreamLowerCommitted( + payload270, + ), + ) + } + + ( + 0, lowered, lowered261, lowered262, lowered263, lowered264, lowered265, + lowered266, lowered267, lowered268, lowered271, lowered272, + ) + } + Err(payload273) => { + let ( + lowered292, + lowered293, + lowered294, + lowered295, + lowered296, + lowered297, + lowered298, + lowered299, + lowered300, + ) = match payload273 { + InvalidToolName(payload274) => { + let ptr = mbt_ffi_str2ptr(payload274) + cleanup_list.push(ptr) + + (0, ptr, payload274.length(), 0, 0, 0, 0, 0, 0) + } + InvalidCommandPath(payload275) => { + let address277 = mbt_ffi_malloc(payload275.length() * 8) + for index278 = 0 + index278 < payload275.length() + index278 = index278 + 1 { + let iter_elem : String = payload275[index278] + let iter_base = address277 + index278 * 8 + + let ptr276 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr276) + cleanup_list.push(ptr276) + } + cleanup_list.push(address277) + + (1, address277, payload275.length(), 0, 0, 0, 0, 0, 0) + } + InvalidInput(payload279) => { + let ptr280 = mbt_ffi_str2ptr(payload279) + cleanup_list.push(ptr280) + + (2, ptr280, payload279.length(), 0, 0, 0, 0, 0, 0) + } + ConstraintViolation(payload281) => { + let ptr282 = mbt_ffi_str2ptr(payload281) + cleanup_list.push(ptr282) + + (3, ptr282, payload281.length(), 0, 0, 0, 0, 0, 0) + } + InvalidResult(payload283) => { + let ptr284 = mbt_ffi_str2ptr(payload283) + cleanup_list.push(ptr284) + + (4, ptr284, payload283.length(), 0, 0, 0, 0, 0, 0) + } + CustomError(payload285) => { + let address286 = mbt_ffi_malloc( + payload285.graph.type_nodes.length() * 144, + ) + for index287 = 0 + index287 < payload285.graph.type_nodes.length() + index287 = index287 + 1 { + let iter_elem : @types.SchemaTypeNode = payload285.graph.type_nodes[index287] + let iter_base = address286 + index287 * 144 + __wit_bindgen_lower_t55(iter_base + 0, iter_elem) + } + + let address288 = mbt_ffi_malloc( + payload285.graph.defs.length() * 24, + ) + for index289 = 0 + index289 < payload285.graph.defs.length() + index289 = index289 + 1 { + let iter_elem : @types.SchemaTypeDef = payload285.graph.defs[index289] + let iter_base = address288 + index289 * 24 + __wit_bindgen_lower_t17(iter_base + 0, iter_elem) + } + + let address290 = mbt_ffi_malloc( + payload285.value.value_nodes.length() * 32, + ) + for index291 = 0 + index291 < payload285.value.value_nodes.length() + index291 = index291 + 1 { + let iter_elem : @types.SchemaValueNode = payload285.value.value_nodes[index291] + let iter_base = address290 + index291 * 32 + __wit_bindgen_lower_t74(iter_base + 0, iter_elem) + } + cleanup_list.push(address286) + cleanup_list.push(address288) + cleanup_list.push(address290) + + ( + 5, + address286, + payload285.graph.type_nodes.length(), + address288, + payload285.graph.defs.length(), + payload285.graph.root, + address290, + payload285.value.value_nodes.length(), + payload285.value.root, + ) + } + } + + ( + 1, lowered292, lowered293, lowered294, lowered295, lowered296, lowered297, + lowered298, lowered299, lowered300, 0, 0, + ) + } + } + + wasmExportAsyncInvokeGolemToolGuestTaskReturn( + lowered301, lowered302, lowered303, lowered304, lowered305, lowered306, lowered307, + lowered308, lowered309, lowered310, lowered311, lowered312, + ) + + cleanup_list.each(mbt_ffi_free) + + @async-core.task_returned() + } + None => () + } +} + +///| +#doc(hidden) +pub fn wasmExportAsyncInvokeGolemToolGuest( + event_raw : Int, + waitable : Int, + code : Int, +) -> Int { + @async-core.cb(event_raw, waitable, code) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t5(ptr : Int, value : @types.Datetime) -> Unit { + mbt_ffi_store64(ptr + 0, value.seconds) + mbt_ffi_store32(ptr + 8, value.nanoseconds.reinterpret_as_int()) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t17(ptr : Int, value : @types.SchemaTypeDef) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.id) + mbt_ffi_store32(ptr + 4, value.id.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + match value.name { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 8, 1) + + let ptr2 = mbt_ffi_str2ptr(payload1) + mbt_ffi_store32(ptr + 16, payload1.length()) + mbt_ffi_store32(ptr + 12, ptr2) + + () + } + } + mbt_ffi_store32(ptr + 20, value.body) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t18(ptr : Int, value : @types.Role) -> Unit { + match value { + Multimodal => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + UnstructuredText => { + mbt_ffi_store8(ptr + 0, 1) + + () + } + UnstructuredBinary => { + mbt_ffi_store8(ptr + 0, 2) + + () + } + Other(payload2) => { + mbt_ffi_store8(ptr + 0, 3) + + let ptr3 = mbt_ffi_str2ptr(payload2) + mbt_ffi_store32(ptr + 8, payload2.length()) + mbt_ffi_store32(ptr + 4, ptr3) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t21(ptr : Int, value : @types.MetadataEnvelope) -> Unit { + match value.doc { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + + let ptr1 = mbt_ffi_str2ptr(payload0) + mbt_ffi_store32(ptr + 8, payload0.length()) + mbt_ffi_store32(ptr + 4, ptr1) + + () + } + } + + let address = mbt_ffi_malloc(value.aliases.length() * 8) + for index = 0; index < value.aliases.length(); index = index + 1 { + let iter_elem : String = value.aliases[index] + let iter_base = address + index * 8 + + let ptr2 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr2) + } + mbt_ffi_store32(ptr + 16, value.aliases.length()) + mbt_ffi_store32(ptr + 12, address) + + let address4 = mbt_ffi_malloc(value.examples.length() * 8) + for index5 = 0; index5 < value.examples.length(); index5 = index5 + 1 { + let iter_elem : String = value.examples[index5] + let iter_base = address4 + index5 * 8 + + let ptr3 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr3) + } + mbt_ffi_store32(ptr + 24, value.examples.length()) + mbt_ffi_store32(ptr + 20, address4) + + match value.deprecated { + None => { + mbt_ffi_store8(ptr + 28, 0) + + () + } + Some(payload7) => { + mbt_ffi_store8(ptr + 28, 1) + + let ptr8 = mbt_ffi_str2ptr(payload7) + mbt_ffi_store32(ptr + 36, payload7.length()) + mbt_ffi_store32(ptr + 32, ptr8) + + () + } + } + + match value.role { + None => { + mbt_ffi_store8(ptr + 40, 0) + + () + } + Some(payload10) => { + mbt_ffi_store8(ptr + 40, 1) + __wit_bindgen_lower_t18(ptr + 44, payload10) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t22(ptr : Int, value : @types.NamedFieldType) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + mbt_ffi_store32(ptr + 8, value.body) + __wit_bindgen_lower_t21(ptr + 12, value.metadata) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t24(ptr : Int, value : @types.VariantCaseType) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + match value.payload { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 8, 1) + mbt_ffi_store32(ptr + 12, payload1) + + () + } + } + __wit_bindgen_lower_t21(ptr + 16, value.metadata) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t25(ptr : Int, value : @types.FixedListSpec) -> Unit { + mbt_ffi_store32(ptr + 0, value.element) + mbt_ffi_store32(ptr + 4, value.length.reinterpret_as_int()) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t26(ptr : Int, value : @types.MapSpec) -> Unit { + mbt_ffi_store32(ptr + 0, value.key) + mbt_ffi_store32(ptr + 4, value.value) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t27(ptr : Int, value : @types.ResultSpec) -> Unit { + match value.ok { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + mbt_ffi_store32(ptr + 4, payload0) + + () + } + } + + match value.err { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload2) => { + mbt_ffi_store8(ptr + 8, 1) + mbt_ffi_store32(ptr + 12, payload2) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t28(ptr : Int, value : @types.NumericBound) -> Unit { + match value { + Signed(payload) => { + mbt_ffi_store8(ptr + 0, 0) + mbt_ffi_store64(ptr + 8, payload) + + () + } + Unsigned(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + mbt_ffi_store64(ptr + 8, payload0.reinterpret_as_int64()) + + () + } + FloatBits(payload1) => { + mbt_ffi_store8(ptr + 0, 2) + mbt_ffi_store64(ptr + 8, payload1.reinterpret_as_int64()) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t30( + ptr : Int, + value : @types.NumericRestrictions, +) -> Unit { + match value.min { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + __wit_bindgen_lower_t28(ptr + 8, payload0) + + () + } + } + + match value.max { + None => { + mbt_ffi_store8(ptr + 24, 0) + + () + } + Some(payload2) => { + mbt_ffi_store8(ptr + 24, 1) + __wit_bindgen_lower_t28(ptr + 32, payload2) + + () + } + } + + match value.unit { + None => { + mbt_ffi_store8(ptr + 48, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 48, 1) + + let ptr5 = mbt_ffi_str2ptr(payload4) + mbt_ffi_store32(ptr + 56, payload4.length()) + mbt_ffi_store32(ptr + 52, ptr5) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t33(ptr : Int, value : @types.TextRestrictions) -> Unit { + match value.languages { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + + let address = mbt_ffi_malloc(payload0.length() * 8) + for index = 0; index < payload0.length(); index = index + 1 { + let iter_elem : String = payload0[index] + let iter_base = address + index * 8 + + let ptr1 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr1) + } + mbt_ffi_store32(ptr + 8, payload0.length()) + mbt_ffi_store32(ptr + 4, address) + + () + } + } + + match value.min_length { + None => { + mbt_ffi_store8(ptr + 12, 0) + + () + } + Some(payload3) => { + mbt_ffi_store8(ptr + 12, 1) + mbt_ffi_store32(ptr + 16, payload3.reinterpret_as_int()) + + () + } + } + + match value.max_length { + None => { + mbt_ffi_store8(ptr + 20, 0) + + () + } + Some(payload5) => { + mbt_ffi_store8(ptr + 20, 1) + mbt_ffi_store32(ptr + 24, payload5.reinterpret_as_int()) + + () + } + } + + match value.regex { + None => { + mbt_ffi_store8(ptr + 28, 0) + + () + } + Some(payload7) => { + mbt_ffi_store8(ptr + 28, 1) + + let ptr8 = mbt_ffi_str2ptr(payload7) + mbt_ffi_store32(ptr + 36, payload7.length()) + mbt_ffi_store32(ptr + 32, ptr8) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t34( + ptr : Int, + value : @types.BinaryRestrictions, +) -> Unit { + match value.mime_types { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + + let address = mbt_ffi_malloc(payload0.length() * 8) + for index = 0; index < payload0.length(); index = index + 1 { + let iter_elem : String = payload0[index] + let iter_base = address + index * 8 + + let ptr1 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr1) + } + mbt_ffi_store32(ptr + 8, payload0.length()) + mbt_ffi_store32(ptr + 4, address) + + () + } + } + + match value.min_bytes { + None => { + mbt_ffi_store8(ptr + 12, 0) + + () + } + Some(payload3) => { + mbt_ffi_store8(ptr + 12, 1) + mbt_ffi_store32(ptr + 16, payload3.reinterpret_as_int()) + + () + } + } + + match value.max_bytes { + None => { + mbt_ffi_store8(ptr + 20, 0) + + () + } + Some(payload5) => { + mbt_ffi_store8(ptr + 20, 1) + mbt_ffi_store32(ptr + 24, payload5.reinterpret_as_int()) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t37(ptr : Int, value : @types.PathSpec) -> Unit { + mbt_ffi_store8(ptr + 0, value.direction.ordinal()) + mbt_ffi_store8(ptr + 1, value.kind.ordinal()) + + match value.allowed_mime_types { + None => { + mbt_ffi_store8(ptr + 4, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 4, 1) + + let address = mbt_ffi_malloc(payload0.length() * 8) + for index = 0; index < payload0.length(); index = index + 1 { + let iter_elem : String = payload0[index] + let iter_base = address + index * 8 + + let ptr1 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr1) + } + mbt_ffi_store32(ptr + 12, payload0.length()) + mbt_ffi_store32(ptr + 8, address) + + () + } + } + + match value.allowed_extensions { + None => { + mbt_ffi_store8(ptr + 16, 0) + + () + } + Some(payload3) => { + mbt_ffi_store8(ptr + 16, 1) + + let address5 = mbt_ffi_malloc(payload3.length() * 8) + for index6 = 0; index6 < payload3.length(); index6 = index6 + 1 { + let iter_elem : String = payload3[index6] + let iter_base = address5 + index6 * 8 + + let ptr4 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr4) + } + mbt_ffi_store32(ptr + 24, payload3.length()) + mbt_ffi_store32(ptr + 20, address5) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t38(ptr : Int, value : @types.UrlRestrictions) -> Unit { + match value.allowed_schemes { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + + let address = mbt_ffi_malloc(payload0.length() * 8) + for index = 0; index < payload0.length(); index = index + 1 { + let iter_elem : String = payload0[index] + let iter_base = address + index * 8 + + let ptr1 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr1) + } + mbt_ffi_store32(ptr + 8, payload0.length()) + mbt_ffi_store32(ptr + 4, address) + + () + } + } + + match value.allowed_hosts { + None => { + mbt_ffi_store8(ptr + 12, 0) + + () + } + Some(payload3) => { + mbt_ffi_store8(ptr + 12, 1) + + let address5 = mbt_ffi_malloc(payload3.length() * 8) + for index6 = 0; index6 < payload3.length(); index6 = index6 + 1 { + let iter_elem : String = payload3[index6] + let iter_base = address5 + index6 * 8 + + let ptr4 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr4) + } + mbt_ffi_store32(ptr + 20, payload3.length()) + mbt_ffi_store32(ptr + 16, address5) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t39(ptr : Int, value : @types.QuantityValue) -> Unit { + mbt_ffi_store64(ptr + 0, value.mantissa) + mbt_ffi_store32(ptr + 8, value.scale) + + let ptr0 = mbt_ffi_str2ptr(value.unit) + mbt_ffi_store32(ptr + 16, value.unit.length()) + mbt_ffi_store32(ptr + 12, ptr0) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t41(ptr : Int, value : @types.QuantitySpec) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.base_unit) + mbt_ffi_store32(ptr + 4, value.base_unit.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + let address = mbt_ffi_malloc(value.allowed_suffixes.length() * 8) + for index = 0; index < value.allowed_suffixes.length(); index = index + 1 { + let iter_elem : String = value.allowed_suffixes[index] + let iter_base = address + index * 8 + + let ptr1 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr1) + } + mbt_ffi_store32(ptr + 12, value.allowed_suffixes.length()) + mbt_ffi_store32(ptr + 8, address) + + match value.min { + None => { + mbt_ffi_store8(ptr + 16, 0) + + () + } + Some(payload2) => { + mbt_ffi_store8(ptr + 16, 1) + __wit_bindgen_lower_t39(ptr + 24, payload2) + + () + } + } + + match value.max { + None => { + mbt_ffi_store8(ptr + 48, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 48, 1) + __wit_bindgen_lower_t39(ptr + 56, payload4) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t42( + ptr : Int, + value : @types.FieldDiscriminator, +) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.field_name) + mbt_ffi_store32(ptr + 4, value.field_name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + match value.literal { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 8, 1) + + let ptr2 = mbt_ffi_str2ptr(payload1) + mbt_ffi_store32(ptr + 16, payload1.length()) + mbt_ffi_store32(ptr + 12, ptr2) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t43(ptr : Int, value : @types.DiscriminatorRule) -> Unit { + match value { + Prefix(payload) => { + mbt_ffi_store8(ptr + 0, 0) + + let ptr0 = mbt_ffi_str2ptr(payload) + mbt_ffi_store32(ptr + 8, payload.length()) + mbt_ffi_store32(ptr + 4, ptr0) + + () + } + Suffix(payload1) => { + mbt_ffi_store8(ptr + 0, 1) + + let ptr2 = mbt_ffi_str2ptr(payload1) + mbt_ffi_store32(ptr + 8, payload1.length()) + mbt_ffi_store32(ptr + 4, ptr2) + + () + } + Contains(payload3) => { + mbt_ffi_store8(ptr + 0, 2) + + let ptr4 = mbt_ffi_str2ptr(payload3) + mbt_ffi_store32(ptr + 8, payload3.length()) + mbt_ffi_store32(ptr + 4, ptr4) + + () + } + Regex(payload5) => { + mbt_ffi_store8(ptr + 0, 3) + + let ptr6 = mbt_ffi_str2ptr(payload5) + mbt_ffi_store32(ptr + 8, payload5.length()) + mbt_ffi_store32(ptr + 4, ptr6) + + () + } + FieldEquals(payload7) => { + mbt_ffi_store8(ptr + 0, 4) + __wit_bindgen_lower_t42(ptr + 4, payload7) + + () + } + FieldAbsent(payload8) => { + mbt_ffi_store8(ptr + 0, 5) + + let ptr9 = mbt_ffi_str2ptr(payload8) + mbt_ffi_store32(ptr + 8, payload8.length()) + mbt_ffi_store32(ptr + 4, ptr9) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t44(ptr : Int, value : @types.UnionBranch) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.tag) + mbt_ffi_store32(ptr + 4, value.tag.length()) + mbt_ffi_store32(ptr + 0, ptr0) + mbt_ffi_store32(ptr + 8, value.body) + __wit_bindgen_lower_t43(ptr + 12, value.discriminator) + __wit_bindgen_lower_t21(ptr + 36, value.metadata) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t46(ptr : Int, value : @types.UnionSpec) -> Unit { + let address = mbt_ffi_malloc(value.branches.length() * 92) + for index = 0; index < value.branches.length(); index = index + 1 { + let iter_elem : @types.UnionBranch = value.branches[index] + let iter_base = address + index * 92 + __wit_bindgen_lower_t44(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 4, value.branches.length()) + mbt_ffi_store32(ptr + 0, address) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t47(ptr : Int, value : @types.SecretSpec) -> Unit { + mbt_ffi_store32(ptr + 0, value.inner) + + match value.category { + None => { + mbt_ffi_store8(ptr + 4, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 4, 1) + + let ptr1 = mbt_ffi_str2ptr(payload0) + mbt_ffi_store32(ptr + 12, payload0.length()) + mbt_ffi_store32(ptr + 8, ptr1) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t48(ptr : Int, value : @types.QuotaTokenSpec) -> Unit { + match value.resource_name { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + + let ptr1 = mbt_ffi_str2ptr(payload0) + mbt_ffi_store32(ptr + 8, payload0.length()) + mbt_ffi_store32(ptr + 4, ptr1) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t49( + ptr : Int, + value : @types.PermissionCardSpec, +) -> Unit { + mbt_ffi_store8(ptr + 0, if value.polymorphic { 1 } else { 0 }) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t54(ptr : Int, value : @types.SchemaTypeBody) -> Unit { + match value { + RefType(payload) => { + mbt_ffi_store8(ptr + 0, 0) + mbt_ffi_store32(ptr + 8, payload) + + () + } + BoolType => { + mbt_ffi_store8(ptr + 0, 1) + + () + } + S8Type(payload1) => { + mbt_ffi_store8(ptr + 0, 2) + + match payload1 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload3) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload3) + + () + } + } + + () + } + S16Type(payload4) => { + mbt_ffi_store8(ptr + 0, 3) + + match payload4 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload6) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload6) + + () + } + } + + () + } + S32Type(payload7) => { + mbt_ffi_store8(ptr + 0, 4) + + match payload7 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload9) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload9) + + () + } + } + + () + } + S64Type(payload10) => { + mbt_ffi_store8(ptr + 0, 5) + + match payload10 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload12) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload12) + + () + } + } + + () + } + U8Type(payload13) => { + mbt_ffi_store8(ptr + 0, 6) + + match payload13 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload15) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload15) + + () + } + } + + () + } + U16Type(payload16) => { + mbt_ffi_store8(ptr + 0, 7) + + match payload16 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload18) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload18) + + () + } + } + + () + } + U32Type(payload19) => { + mbt_ffi_store8(ptr + 0, 8) + + match payload19 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload21) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload21) + + () + } + } + + () + } + U64Type(payload22) => { + mbt_ffi_store8(ptr + 0, 9) + + match payload22 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload24) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload24) + + () + } + } + + () + } + F32Type(payload25) => { + mbt_ffi_store8(ptr + 0, 10) + + match payload25 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload27) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload27) + + () + } + } + + () + } + F64Type(payload28) => { + mbt_ffi_store8(ptr + 0, 11) + + match payload28 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload30) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload30) + + () + } + } + + () + } + CharType => { + mbt_ffi_store8(ptr + 0, 12) + + () + } + StringType => { + mbt_ffi_store8(ptr + 0, 13) + + () + } + RecordType(payload33) => { + mbt_ffi_store8(ptr + 0, 14) + + let address = mbt_ffi_malloc(payload33.length() * 68) + for index = 0; index < payload33.length(); index = index + 1 { + let iter_elem : @types.NamedFieldType = payload33[index] + let iter_base = address + index * 68 + __wit_bindgen_lower_t22(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload33.length()) + mbt_ffi_store32(ptr + 8, address) + + () + } + VariantType(payload34) => { + mbt_ffi_store8(ptr + 0, 15) + + let address35 = mbt_ffi_malloc(payload34.length() * 72) + for index36 = 0; index36 < payload34.length(); index36 = index36 + 1 { + let iter_elem : @types.VariantCaseType = payload34[index36] + let iter_base = address35 + index36 * 72 + __wit_bindgen_lower_t24(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload34.length()) + mbt_ffi_store32(ptr + 8, address35) + + () + } + EnumType(payload37) => { + mbt_ffi_store8(ptr + 0, 16) + + let address39 = mbt_ffi_malloc(payload37.length() * 8) + for index40 = 0; index40 < payload37.length(); index40 = index40 + 1 { + let iter_elem : String = payload37[index40] + let iter_base = address39 + index40 * 8 + + let ptr38 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr38) + } + mbt_ffi_store32(ptr + 12, payload37.length()) + mbt_ffi_store32(ptr + 8, address39) + + () + } + FlagsType(payload41) => { + mbt_ffi_store8(ptr + 0, 17) + + let address43 = mbt_ffi_malloc(payload41.length() * 8) + for index44 = 0; index44 < payload41.length(); index44 = index44 + 1 { + let iter_elem : String = payload41[index44] + let iter_base = address43 + index44 * 8 + + let ptr42 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr42) + } + mbt_ffi_store32(ptr + 12, payload41.length()) + mbt_ffi_store32(ptr + 8, address43) + + () + } + TupleType(payload45) => { + mbt_ffi_store8(ptr + 0, 18) + + let address46 = mbt_ffi_malloc(payload45.length() * 4) + for index47 = 0; index47 < payload45.length(); index47 = index47 + 1 { + let iter_elem : Int = payload45[index47] + let iter_base = address46 + index47 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload45.length()) + mbt_ffi_store32(ptr + 8, address46) + + () + } + ListType(payload48) => { + mbt_ffi_store8(ptr + 0, 19) + mbt_ffi_store32(ptr + 8, payload48) + + () + } + FixedListType(payload49) => { + mbt_ffi_store8(ptr + 0, 20) + __wit_bindgen_lower_t25(ptr + 8, payload49) + + () + } + MapType(payload50) => { + mbt_ffi_store8(ptr + 0, 21) + __wit_bindgen_lower_t26(ptr + 8, payload50) + + () + } + OptionType(payload51) => { + mbt_ffi_store8(ptr + 0, 22) + mbt_ffi_store32(ptr + 8, payload51) + + () + } + ResultType(payload52) => { + mbt_ffi_store8(ptr + 0, 23) + __wit_bindgen_lower_t27(ptr + 8, payload52) + + () + } + TextType(payload53) => { + mbt_ffi_store8(ptr + 0, 24) + __wit_bindgen_lower_t33(ptr + 8, payload53) + + () + } + BinaryType(payload54) => { + mbt_ffi_store8(ptr + 0, 25) + __wit_bindgen_lower_t34(ptr + 8, payload54) + + () + } + PathType(payload55) => { + mbt_ffi_store8(ptr + 0, 26) + __wit_bindgen_lower_t37(ptr + 8, payload55) + + () + } + UrlType(payload56) => { + mbt_ffi_store8(ptr + 0, 27) + __wit_bindgen_lower_t38(ptr + 8, payload56) + + () + } + DatetimeType => { + mbt_ffi_store8(ptr + 0, 28) + + () + } + DurationType => { + mbt_ffi_store8(ptr + 0, 29) + + () + } + QuantityType(payload59) => { + mbt_ffi_store8(ptr + 0, 30) + __wit_bindgen_lower_t41(ptr + 8, payload59) + + () + } + UnionType(payload60) => { + mbt_ffi_store8(ptr + 0, 31) + __wit_bindgen_lower_t46(ptr + 8, payload60) + + () + } + SecretType(payload61) => { + mbt_ffi_store8(ptr + 0, 32) + __wit_bindgen_lower_t47(ptr + 8, payload61) + + () + } + QuotaTokenType(payload62) => { + mbt_ffi_store8(ptr + 0, 33) + __wit_bindgen_lower_t48(ptr + 8, payload62) + + () + } + PermissionCardType(payload63) => { + mbt_ffi_store8(ptr + 0, 34) + __wit_bindgen_lower_t49(ptr + 8, payload63) + + () + } + FutureType(payload64) => { + mbt_ffi_store8(ptr + 0, 35) + + match payload64 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload66) => { + mbt_ffi_store8(ptr + 8, 1) + mbt_ffi_store32(ptr + 12, payload66) + + () + } + } + + () + } + StreamType(payload67) => { + mbt_ffi_store8(ptr + 0, 36) + + match payload67 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload69) => { + mbt_ffi_store8(ptr + 8, 1) + mbt_ffi_store32(ptr + 12, payload69) + + () + } + } + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t55(ptr : Int, value : @types.SchemaTypeNode) -> Unit { + __wit_bindgen_lower_t54(ptr + 0, value.body) + __wit_bindgen_lower_t21(ptr + 88, value.metadata) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t58(ptr : Int, value : @types.SchemaGraph) -> Unit { + let address = mbt_ffi_malloc(value.type_nodes.length() * 144) + for index = 0; index < value.type_nodes.length(); index = index + 1 { + let iter_elem : @types.SchemaTypeNode = value.type_nodes[index] + let iter_base = address + index * 144 + __wit_bindgen_lower_t55(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 4, value.type_nodes.length()) + mbt_ffi_store32(ptr + 0, address) + + let address0 = mbt_ffi_malloc(value.defs.length() * 24) + for index1 = 0; index1 < value.defs.length(); index1 = index1 + 1 { + let iter_elem : @types.SchemaTypeDef = value.defs[index1] + let iter_base = address0 + index1 * 24 + __wit_bindgen_lower_t17(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, value.defs.length()) + mbt_ffi_store32(ptr + 8, address0) + mbt_ffi_store32(ptr + 16, value.root) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t60( + ptr : Int, + value : @types.VariantValuePayload, +) -> Unit { + mbt_ffi_store32(ptr + 0, value.case.reinterpret_as_int()) + + match value.payload { + None => { + mbt_ffi_store8(ptr + 4, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 4, 1) + mbt_ffi_store32(ptr + 8, payload0) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t61(ptr : Int, value : @types.MapEntry) -> Unit { + mbt_ffi_store32(ptr + 0, value.key) + mbt_ffi_store32(ptr + 4, value.value) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t62( + ptr : Int, + value : @types.ResultValuePayload, +) -> Unit { + match value { + OkValue(payload) => { + mbt_ffi_store8(ptr + 0, 0) + + match payload { + None => { + mbt_ffi_store8(ptr + 4, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 4, 1) + mbt_ffi_store32(ptr + 8, payload1) + + () + } + } + + () + } + ErrValue(payload2) => { + mbt_ffi_store8(ptr + 0, 1) + + match payload2 { + None => { + mbt_ffi_store8(ptr + 4, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 4, 1) + mbt_ffi_store32(ptr + 8, payload4) + + () + } + } + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t63(ptr : Int, value : @types.TextValuePayload) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.text) + mbt_ffi_store32(ptr + 4, value.text.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + match value.language { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 8, 1) + + let ptr2 = mbt_ffi_str2ptr(payload1) + mbt_ffi_store32(ptr + 16, payload1.length()) + mbt_ffi_store32(ptr + 12, ptr2) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t65( + ptr : Int, + value : @types.BinaryValuePayload, +) -> Unit { + let ptr0 = mbt_ffi_bytes2ptr(value.bytes) + + mbt_ffi_store32(ptr + 4, value.bytes.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + match value.mime_type { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 8, 1) + + let ptr2 = mbt_ffi_str2ptr(payload1) + mbt_ffi_store32(ptr + 16, payload1.length()) + mbt_ffi_store32(ptr + 12, ptr2) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t66( + ptr : Int, + value : @types.DurationValuePayload, +) -> Unit { + mbt_ffi_store64(ptr + 0, value.nanoseconds) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t67(ptr : Int, value : @types.UnionValuePayload) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.tag) + mbt_ffi_store32(ptr + 4, value.tag.length()) + mbt_ffi_store32(ptr + 0, ptr0) + mbt_ffi_store32(ptr + 8, value.body) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t74(ptr : Int, value : @types.SchemaValueNode) -> Unit { + match value { + BoolValue(payload) => { + mbt_ffi_store8(ptr + 0, 0) + mbt_ffi_store8(ptr + 8, if payload { 1 } else { 0 }) + + () + } + S8Value(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + mbt_ffi_store8(ptr + 8, mbt_ffi_extend8(payload0)) + + () + } + S16Value(payload1) => { + mbt_ffi_store8(ptr + 0, 2) + mbt_ffi_store16(ptr + 8, mbt_ffi_extend16(payload1)) + + () + } + S32Value(payload2) => { + mbt_ffi_store8(ptr + 0, 3) + mbt_ffi_store32(ptr + 8, payload2) + + () + } + S64Value(payload3) => { + mbt_ffi_store8(ptr + 0, 4) + mbt_ffi_store64(ptr + 8, payload3) + + () + } + U8Value(payload4) => { + mbt_ffi_store8(ptr + 0, 5) + mbt_ffi_store8(ptr + 8, payload4.to_int()) + + () + } + U16Value(payload5) => { + mbt_ffi_store8(ptr + 0, 6) + mbt_ffi_store16(ptr + 8, payload5.reinterpret_as_int()) + + () + } + U32Value(payload6) => { + mbt_ffi_store8(ptr + 0, 7) + mbt_ffi_store32(ptr + 8, payload6.reinterpret_as_int()) + + () + } + U64Value(payload7) => { + mbt_ffi_store8(ptr + 0, 8) + mbt_ffi_store64(ptr + 8, payload7.reinterpret_as_int64()) + + () + } + F32Value(payload8) => { + mbt_ffi_store8(ptr + 0, 9) + mbt_ffi_storef32(ptr + 8, payload8) + + () + } + F64Value(payload9) => { + mbt_ffi_store8(ptr + 0, 10) + mbt_ffi_storef64(ptr + 8, payload9) + + () + } + CharValue(payload10) => { + mbt_ffi_store8(ptr + 0, 11) + mbt_ffi_store32(ptr + 8, payload10.to_int()) + + () + } + StringValue(payload11) => { + mbt_ffi_store8(ptr + 0, 12) + + let ptr12 = mbt_ffi_str2ptr(payload11) + mbt_ffi_store32(ptr + 12, payload11.length()) + mbt_ffi_store32(ptr + 8, ptr12) + + () + } + RecordValue(payload13) => { + mbt_ffi_store8(ptr + 0, 13) + + let address = mbt_ffi_malloc(payload13.length() * 4) + for index = 0; index < payload13.length(); index = index + 1 { + let iter_elem : Int = payload13[index] + let iter_base = address + index * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload13.length()) + mbt_ffi_store32(ptr + 8, address) + + () + } + VariantValue(payload14) => { + mbt_ffi_store8(ptr + 0, 14) + __wit_bindgen_lower_t60(ptr + 8, payload14) + + () + } + EnumValue(payload15) => { + mbt_ffi_store8(ptr + 0, 15) + mbt_ffi_store32(ptr + 8, payload15.reinterpret_as_int()) + + () + } + FlagsValue(payload16) => { + mbt_ffi_store8(ptr + 0, 16) + + let address17 = mbt_ffi_malloc(payload16.length() * 1) + for index18 = 0; index18 < payload16.length(); index18 = index18 + 1 { + let iter_elem : Bool = payload16[index18] + let iter_base = address17 + index18 * 1 + mbt_ffi_store8(iter_base + 0, if iter_elem { 1 } else { 0 }) + } + mbt_ffi_store32(ptr + 12, payload16.length()) + mbt_ffi_store32(ptr + 8, address17) + + () + } + TupleValue(payload19) => { + mbt_ffi_store8(ptr + 0, 17) + + let address20 = mbt_ffi_malloc(payload19.length() * 4) + for index21 = 0; index21 < payload19.length(); index21 = index21 + 1 { + let iter_elem : Int = payload19[index21] + let iter_base = address20 + index21 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload19.length()) + mbt_ffi_store32(ptr + 8, address20) + + () + } + ListValue(payload22) => { + mbt_ffi_store8(ptr + 0, 18) + + let address23 = mbt_ffi_malloc(payload22.length() * 4) + for index24 = 0; index24 < payload22.length(); index24 = index24 + 1 { + let iter_elem : Int = payload22[index24] + let iter_base = address23 + index24 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload22.length()) + mbt_ffi_store32(ptr + 8, address23) + + () + } + FixedListValue(payload25) => { + mbt_ffi_store8(ptr + 0, 19) + + let address26 = mbt_ffi_malloc(payload25.length() * 4) + for index27 = 0; index27 < payload25.length(); index27 = index27 + 1 { + let iter_elem : Int = payload25[index27] + let iter_base = address26 + index27 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload25.length()) + mbt_ffi_store32(ptr + 8, address26) + + () + } + MapValue(payload28) => { + mbt_ffi_store8(ptr + 0, 20) + + let address29 = mbt_ffi_malloc(payload28.length() * 8) + for index30 = 0; index30 < payload28.length(); index30 = index30 + 1 { + let iter_elem : @types.MapEntry = payload28[index30] + let iter_base = address29 + index30 * 8 + __wit_bindgen_lower_t61(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload28.length()) + mbt_ffi_store32(ptr + 8, address29) + + () + } + OptionValue(payload31) => { + mbt_ffi_store8(ptr + 0, 21) + + match payload31 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload33) => { + mbt_ffi_store8(ptr + 8, 1) + mbt_ffi_store32(ptr + 12, payload33) + + () + } + } + + () + } + ResultValue(payload34) => { + mbt_ffi_store8(ptr + 0, 22) + __wit_bindgen_lower_t62(ptr + 8, payload34) + + () + } + TextValue(payload35) => { + mbt_ffi_store8(ptr + 0, 23) + __wit_bindgen_lower_t63(ptr + 8, payload35) + + () + } + BinaryValue(payload36) => { + mbt_ffi_store8(ptr + 0, 24) + __wit_bindgen_lower_t65(ptr + 8, payload36) + + () + } + PathValue(payload37) => { + mbt_ffi_store8(ptr + 0, 25) + + let ptr38 = mbt_ffi_str2ptr(payload37) + mbt_ffi_store32(ptr + 12, payload37.length()) + mbt_ffi_store32(ptr + 8, ptr38) + + () + } + UrlValue(payload39) => { + mbt_ffi_store8(ptr + 0, 26) + + let ptr40 = mbt_ffi_str2ptr(payload39) + mbt_ffi_store32(ptr + 12, payload39.length()) + mbt_ffi_store32(ptr + 8, ptr40) + + () + } + DatetimeValue(payload41) => { + mbt_ffi_store8(ptr + 0, 27) + __wit_bindgen_lower_t5(ptr + 8, payload41) + + () + } + DurationValue(payload42) => { + mbt_ffi_store8(ptr + 0, 28) + __wit_bindgen_lower_t66(ptr + 8, payload42) + + () + } + QuantityValueNode(payload43) => { + mbt_ffi_store8(ptr + 0, 29) + __wit_bindgen_lower_t39(ptr + 8, payload43) + + () + } + UnionValue(payload44) => { + mbt_ffi_store8(ptr + 0, 30) + __wit_bindgen_lower_t67(ptr + 8, payload44) + + () + } + SecretValue(payload45) => { + mbt_ffi_store8(ptr + 0, 31) + + let @types.Secret(handle) = payload45 + mbt_ffi_store32(ptr + 8, handle) + + () + } + QuotaTokenHandle(payload46) => { + mbt_ffi_store8(ptr + 0, 32) + + let @types.QuotaToken(handle47) = payload46 + mbt_ffi_store32(ptr + 8, handle47) + + () + } + PermissionCardHandle(payload48) => { + mbt_ffi_store8(ptr + 0, 33) + + let @types.PermissionCard(handle49) = payload48 + mbt_ffi_store32(ptr + 8, handle49) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t76(ptr : Int, value : @types.SchemaValueTree) -> Unit { + let address = mbt_ffi_malloc(value.value_nodes.length() * 32) + for index = 0; index < value.value_nodes.length(); index = index + 1 { + let iter_elem : @types.SchemaValueNode = value.value_nodes[index] + let iter_base = address + index * 32 + __wit_bindgen_lower_t74(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 4, value.value_nodes.length()) + mbt_ffi_store32(ptr + 0, address) + mbt_ffi_store32(ptr + 8, value.root) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t77(ptr : Int, value : @types.TypedSchemaValue) -> Unit { + __wit_bindgen_lower_t58(ptr + 0, value.graph) + __wit_bindgen_lower_t76(ptr + 20, value.value) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t470( + ptr : Int, + value : @common.CommandAnnotations, +) -> Unit { + mbt_ffi_store8(ptr + 0, if value.read_only { 1 } else { 0 }) + mbt_ffi_store8(ptr + 1, if value.destructive { 1 } else { 0 }) + mbt_ffi_store8(ptr + 2, if value.idempotent { 1 } else { 0 }) + mbt_ffi_store8(ptr + 3, if value.open_world { 1 } else { 0 }) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t472(ptr : Int, value : @common.Repetition) -> Unit { + match value { + Repeated => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Delimited(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + mbt_ffi_store32(ptr + 4, payload0.to_int()) + + () + } + Either(payload1) => { + mbt_ffi_store8(ptr + 0, 2) + mbt_ffi_store32(ptr + 4, payload1.to_int()) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t473( + ptr : Int, + value : @common.RepeatableListShape, +) -> Unit { + __wit_bindgen_lower_t472(ptr + 0, value.repetition) + mbt_ffi_store32(ptr + 8, value.item_type) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t474( + ptr : Int, + value : @common.RepeatableMapShape, +) -> Unit { + __wit_bindgen_lower_t472(ptr + 0, value.repetition) + mbt_ffi_store32(ptr + 8, value.map_type) + mbt_ffi_store8(ptr + 12, value.duplicate_key_policy.ordinal()) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t475(ptr : Int, value : @common.OptionShape) -> Unit { + match value { + Scalar(payload) => { + mbt_ffi_store8(ptr + 0, 0) + mbt_ffi_store32(ptr + 4, payload) + + () + } + OptionalScalar(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + mbt_ffi_store32(ptr + 4, payload0) + + () + } + RepeatableList(payload1) => { + mbt_ffi_store8(ptr + 0, 2) + __wit_bindgen_lower_t473(ptr + 4, payload1) + + () + } + RepeatableMap(payload2) => { + mbt_ffi_store8(ptr + 0, 3) + __wit_bindgen_lower_t474(ptr + 4, payload2) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t476(ptr : Int, value : @common.BoolFlagShape) -> Unit { + mbt_ffi_store8(ptr + 0, if value.default { 1 } else { 0 }) + mbt_ffi_store8(ptr + 1, if value.negatable { 1 } else { 0 }) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t478(ptr : Int, value : @common.FlagShape) -> Unit { + match value { + BoolFlag(payload) => { + mbt_ffi_store8(ptr + 0, 0) + __wit_bindgen_lower_t476(ptr + 4, payload) + + () + } + CountFlag(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + + match payload0 { + None => { + mbt_ffi_store8(ptr + 4, 0) + + () + } + Some(payload2) => { + mbt_ffi_store8(ptr + 4, 1) + mbt_ffi_store32(ptr + 8, payload2.reinterpret_as_int()) + + () + } + } + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t479(ptr : Int, value : @common.ValueIsRef) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + __wit_bindgen_lower_t76(ptr + 8, value.value) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t480(ptr : Int, value : @common.Ref) -> Unit { + match value { + Present(payload) => { + mbt_ffi_store8(ptr + 0, 0) + + let ptr0 = mbt_ffi_str2ptr(payload) + mbt_ffi_store32(ptr + 8, payload.length()) + mbt_ffi_store32(ptr + 4, ptr0) + + () + } + ValueIs(payload1) => { + mbt_ffi_store8(ptr + 0, 1) + __wit_bindgen_lower_t479(ptr + 4, payload1) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t482(ptr : Int, value : @common.RefGroup) -> Unit { + let address = mbt_ffi_malloc(value.refs.length() * 24) + for index = 0; index < value.refs.length(); index = index + 1 { + let iter_elem : @common.Ref = value.refs[index] + let iter_base = address + index * 24 + __wit_bindgen_lower_t480(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 4, value.refs.length()) + mbt_ffi_store32(ptr + 0, address) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t484(ptr : Int, value : @common.ImpliesC) -> Unit { + mbt_ffi_store8(ptr + 0, value.lhs_quant.ordinal()) + + let address = mbt_ffi_malloc(value.lhs.length() * 24) + for index = 0; index < value.lhs.length(); index = index + 1 { + let iter_elem : @common.Ref = value.lhs[index] + let iter_base = address + index * 24 + __wit_bindgen_lower_t480(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 8, value.lhs.length()) + mbt_ffi_store32(ptr + 4, address) + mbt_ffi_store8(ptr + 12, value.rhs_quant.ordinal()) + + let address0 = mbt_ffi_malloc(value.rhs.length() * 24) + for index1 = 0; index1 < value.rhs.length(); index1 = index1 + 1 { + let iter_elem : @common.Ref = value.rhs[index1] + let iter_base = address0 + index1 * 24 + __wit_bindgen_lower_t480(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 20, value.rhs.length()) + mbt_ffi_store32(ptr + 16, address0) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t485(ptr : Int, value : @common.ForbidsC) -> Unit { + mbt_ffi_store8(ptr + 0, value.lhs_quant.ordinal()) + + let address = mbt_ffi_malloc(value.lhs.length() * 24) + for index = 0; index < value.lhs.length(); index = index + 1 { + let iter_elem : @common.Ref = value.lhs[index] + let iter_base = address + index * 24 + __wit_bindgen_lower_t480(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 8, value.lhs.length()) + mbt_ffi_store32(ptr + 4, address) + + let address0 = mbt_ffi_malloc(value.rhs.length() * 24) + for index1 = 0; index1 < value.rhs.length(); index1 = index1 + 1 { + let iter_elem : @common.Ref = value.rhs[index1] + let iter_base = address0 + index1 * 24 + __wit_bindgen_lower_t480(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 16, value.rhs.length()) + mbt_ffi_store32(ptr + 12, address0) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t487(ptr : Int, value : @common.Constraint) -> Unit { + match value { + RequiresAll(payload) => { + mbt_ffi_store8(ptr + 0, 0) + + let address = mbt_ffi_malloc(payload.length() * 24) + for index = 0; index < payload.length(); index = index + 1 { + let iter_elem : @common.Ref = payload[index] + let iter_base = address + index * 24 + __wit_bindgen_lower_t480(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 8, payload.length()) + mbt_ffi_store32(ptr + 4, address) + + () + } + AllOrNone(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + + let address1 = mbt_ffi_malloc(payload0.length() * 24) + for index2 = 0; index2 < payload0.length(); index2 = index2 + 1 { + let iter_elem : @common.Ref = payload0[index2] + let iter_base = address1 + index2 * 24 + __wit_bindgen_lower_t480(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 8, payload0.length()) + mbt_ffi_store32(ptr + 4, address1) + + () + } + RequiresAny(payload3) => { + mbt_ffi_store8(ptr + 0, 2) + + let address4 = mbt_ffi_malloc(payload3.length() * 24) + for index5 = 0; index5 < payload3.length(); index5 = index5 + 1 { + let iter_elem : @common.Ref = payload3[index5] + let iter_base = address4 + index5 * 24 + __wit_bindgen_lower_t480(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 8, payload3.length()) + mbt_ffi_store32(ptr + 4, address4) + + () + } + MutexGroups(payload6) => { + mbt_ffi_store8(ptr + 0, 3) + + let address7 = mbt_ffi_malloc(payload6.length() * 8) + for index8 = 0; index8 < payload6.length(); index8 = index8 + 1 { + let iter_elem : @common.RefGroup = payload6[index8] + let iter_base = address7 + index8 * 8 + __wit_bindgen_lower_t482(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 8, payload6.length()) + mbt_ffi_store32(ptr + 4, address7) + + () + } + Implies(payload9) => { + mbt_ffi_store8(ptr + 0, 4) + __wit_bindgen_lower_t484(ptr + 4, payload9) + + () + } + Forbids(payload10) => { + mbt_ffi_store8(ptr + 0, 5) + __wit_bindgen_lower_t485(ptr + 4, payload10) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t489(ptr : Int, value : @common.Example) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.title) + mbt_ffi_store32(ptr + 4, value.title.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + let ptr1 = mbt_ffi_str2ptr(value.body) + mbt_ffi_store32(ptr + 12, value.body.length()) + mbt_ffi_store32(ptr + 8, ptr1) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t491(ptr : Int, value : @common.Doc) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.summary) + mbt_ffi_store32(ptr + 4, value.summary.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + let ptr1 = mbt_ffi_str2ptr(value.description) + mbt_ffi_store32(ptr + 12, value.description.length()) + mbt_ffi_store32(ptr + 8, ptr1) + + let address = mbt_ffi_malloc(value.examples.length() * 16) + for index = 0; index < value.examples.length(); index = index + 1 { + let iter_elem : @common.Example = value.examples[index] + let iter_base = address + index * 16 + __wit_bindgen_lower_t489(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 20, value.examples.length()) + mbt_ffi_store32(ptr + 16, address) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t494(ptr : Int, value : @common.Positional) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + __wit_bindgen_lower_t491(ptr + 8, value.doc) + + match value.value_name { + None => { + mbt_ffi_store8(ptr + 32, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 32, 1) + + let ptr2 = mbt_ffi_str2ptr(payload1) + mbt_ffi_store32(ptr + 40, payload1.length()) + mbt_ffi_store32(ptr + 36, ptr2) + + () + } + } + mbt_ffi_store32(ptr + 44, value.type_) + + match value.default { + None => { + mbt_ffi_store8(ptr + 48, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 48, 1) + __wit_bindgen_lower_t76(ptr + 52, payload4) + + () + } + } + mbt_ffi_store8(ptr + 64, if value.required { 1 } else { 0 }) + mbt_ffi_store8(ptr + 65, if value.accepts_stdio { 1 } else { 0 }) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t495(ptr : Int, value : @common.TailPositional) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + __wit_bindgen_lower_t491(ptr + 8, value.doc) + + match value.value_name { + None => { + mbt_ffi_store8(ptr + 32, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 32, 1) + + let ptr2 = mbt_ffi_str2ptr(payload1) + mbt_ffi_store32(ptr + 40, payload1.length()) + mbt_ffi_store32(ptr + 36, ptr2) + + () + } + } + mbt_ffi_store32(ptr + 44, value.item_type) + mbt_ffi_store32(ptr + 48, value.min.reinterpret_as_int()) + + match value.max { + None => { + mbt_ffi_store8(ptr + 52, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 52, 1) + mbt_ffi_store32(ptr + 56, payload4.reinterpret_as_int()) + + () + } + } + + match value.separator { + None => { + mbt_ffi_store8(ptr + 60, 0) + + () + } + Some(payload6) => { + mbt_ffi_store8(ptr + 60, 1) + + let ptr7 = mbt_ffi_str2ptr(payload6) + mbt_ffi_store32(ptr + 68, payload6.length()) + mbt_ffi_store32(ptr + 64, ptr7) + + () + } + } + mbt_ffi_store8(ptr + 72, if value.verbatim { 1 } else { 0 }) + mbt_ffi_store8(ptr + 73, if value.accepts_stdio { 1 } else { 0 }) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t498(ptr : Int, value : @common.Positionals) -> Unit { + let address = mbt_ffi_malloc(value.fixed.length() * 68) + for index = 0; index < value.fixed.length(); index = index + 1 { + let iter_elem : @common.Positional = value.fixed[index] + let iter_base = address + index * 68 + __wit_bindgen_lower_t494(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 4, value.fixed.length()) + mbt_ffi_store32(ptr + 0, address) + + match value.tail { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t495(ptr + 12, payload0) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t501(ptr : Int, value : @common.OptionSpec) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.long) + mbt_ffi_store32(ptr + 4, value.long.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + match value.short { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 8, 1) + mbt_ffi_store32(ptr + 12, payload1.to_int()) + + () + } + } + + let address = mbt_ffi_malloc(value.aliases.length() * 8) + for index = 0; index < value.aliases.length(); index = index + 1 { + let iter_elem : String = value.aliases[index] + let iter_base = address + index * 8 + + let ptr2 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr2) + } + mbt_ffi_store32(ptr + 20, value.aliases.length()) + mbt_ffi_store32(ptr + 16, address) + __wit_bindgen_lower_t491(ptr + 24, value.doc) + + match value.value_name { + None => { + mbt_ffi_store8(ptr + 48, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 48, 1) + + let ptr5 = mbt_ffi_str2ptr(payload4) + mbt_ffi_store32(ptr + 56, payload4.length()) + mbt_ffi_store32(ptr + 52, ptr5) + + () + } + } + __wit_bindgen_lower_t475(ptr + 60, value.shape) + + match value.default { + None => { + mbt_ffi_store8(ptr + 80, 0) + + () + } + Some(payload7) => { + mbt_ffi_store8(ptr + 80, 1) + __wit_bindgen_lower_t76(ptr + 84, payload7) + + () + } + } + mbt_ffi_store8(ptr + 96, if value.required { 1 } else { 0 }) + + match value.env_var { + None => { + mbt_ffi_store8(ptr + 100, 0) + + () + } + Some(payload9) => { + mbt_ffi_store8(ptr + 100, 1) + + let ptr10 = mbt_ffi_str2ptr(payload9) + mbt_ffi_store32(ptr + 108, payload9.length()) + mbt_ffi_store32(ptr + 104, ptr10) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t502(ptr : Int, value : @common.FlagSpec) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.long) + mbt_ffi_store32(ptr + 4, value.long.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + match value.short { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 8, 1) + mbt_ffi_store32(ptr + 12, payload1.to_int()) + + () + } + } + + let address = mbt_ffi_malloc(value.aliases.length() * 8) + for index = 0; index < value.aliases.length(); index = index + 1 { + let iter_elem : String = value.aliases[index] + let iter_base = address + index * 8 + + let ptr2 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr2) + } + mbt_ffi_store32(ptr + 20, value.aliases.length()) + mbt_ffi_store32(ptr + 16, address) + __wit_bindgen_lower_t491(ptr + 24, value.doc) + __wit_bindgen_lower_t478(ptr + 48, value.shape) + + match value.env_var { + None => { + mbt_ffi_store8(ptr + 60, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 60, 1) + + let ptr5 = mbt_ffi_str2ptr(payload4) + mbt_ffi_store32(ptr + 68, payload4.length()) + mbt_ffi_store32(ptr + 64, ptr5) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t505(ptr : Int, value : @common.Globals) -> Unit { + let address = mbt_ffi_malloc(value.options.length() * 112) + for index = 0; index < value.options.length(); index = index + 1 { + let iter_elem : @common.OptionSpec = value.options[index] + let iter_base = address + index * 112 + __wit_bindgen_lower_t501(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 4, value.options.length()) + mbt_ffi_store32(ptr + 0, address) + + let address0 = mbt_ffi_malloc(value.flags.length() * 72) + for index1 = 0; index1 < value.flags.length(); index1 = index1 + 1 { + let iter_elem : @common.FlagSpec = value.flags[index1] + let iter_base = address0 + index1 * 72 + __wit_bindgen_lower_t502(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, value.flags.length()) + mbt_ffi_store32(ptr + 8, address0) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t506(ptr : Int, value : @common.StreamSpec) -> Unit { + __wit_bindgen_lower_t491(ptr + 0, value.doc) + + let address = mbt_ffi_malloc(value.mime.length() * 8) + for index = 0; index < value.mime.length(); index = index + 1 { + let iter_elem : String = value.mime[index] + let iter_base = address + index * 8 + + let ptr0 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr0) + } + mbt_ffi_store32(ptr + 28, value.mime.length()) + mbt_ffi_store32(ptr + 24, address) + mbt_ffi_store8(ptr + 32, if value.required { 1 } else { 0 }) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t507(ptr : Int, value : @common.Formatter) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + __wit_bindgen_lower_t491(ptr + 8, value.doc) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t509(ptr : Int, value : @common.ResultSpec) -> Unit { + mbt_ffi_store32(ptr + 0, value.type_) + __wit_bindgen_lower_t491(ptr + 4, value.doc) + + let address = mbt_ffi_malloc(value.formatters.length() * 32) + for index = 0; index < value.formatters.length(); index = index + 1 { + let iter_elem : @common.Formatter = value.formatters[index] + let iter_base = address + index * 32 + __wit_bindgen_lower_t507(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 32, value.formatters.length()) + mbt_ffi_store32(ptr + 28, address) + + let ptr0 = mbt_ffi_str2ptr(value.default_formatter) + mbt_ffi_store32(ptr + 40, value.default_formatter.length()) + mbt_ffi_store32(ptr + 36, ptr0) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t511(ptr : Int, value : @common.ErrorCase) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + __wit_bindgen_lower_t491(ptr + 8, value.doc) + mbt_ffi_store8(ptr + 32, value.kind.ordinal()) + mbt_ffi_store8(ptr + 33, value.exit_code.to_int()) + + match value.payload { + None => { + mbt_ffi_store8(ptr + 36, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 36, 1) + mbt_ffi_store32(ptr + 40, payload1) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t517(ptr : Int, value : @common.CommandBody) -> Unit { + __wit_bindgen_lower_t498(ptr + 0, value.positionals) + + let address = mbt_ffi_malloc(value.options.length() * 112) + for index = 0; index < value.options.length(); index = index + 1 { + let iter_elem : @common.OptionSpec = value.options[index] + let iter_base = address + index * 112 + __wit_bindgen_lower_t501(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 92, value.options.length()) + mbt_ffi_store32(ptr + 88, address) + + let address0 = mbt_ffi_malloc(value.flags.length() * 72) + for index1 = 0; index1 < value.flags.length(); index1 = index1 + 1 { + let iter_elem : @common.FlagSpec = value.flags[index1] + let iter_base = address0 + index1 * 72 + __wit_bindgen_lower_t502(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 100, value.flags.length()) + mbt_ffi_store32(ptr + 96, address0) + + let address2 = mbt_ffi_malloc(value.constraints.length() * 28) + for index3 = 0; index3 < value.constraints.length(); index3 = index3 + 1 { + let iter_elem : @common.Constraint = value.constraints[index3] + let iter_base = address2 + index3 * 28 + __wit_bindgen_lower_t487(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 108, value.constraints.length()) + mbt_ffi_store32(ptr + 104, address2) + + match value.stdin { + None => { + mbt_ffi_store8(ptr + 112, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 112, 1) + __wit_bindgen_lower_t506(ptr + 116, payload4) + + () + } + } + + match value.stdout { + None => { + mbt_ffi_store8(ptr + 152, 0) + + () + } + Some(payload6) => { + mbt_ffi_store8(ptr + 152, 1) + __wit_bindgen_lower_t506(ptr + 156, payload6) + + () + } + } + + match value.result { + None => { + mbt_ffi_store8(ptr + 192, 0) + + () + } + Some(payload8) => { + mbt_ffi_store8(ptr + 192, 1) + __wit_bindgen_lower_t509(ptr + 196, payload8) + + () + } + } + + let address9 = mbt_ffi_malloc(value.errors.length() * 44) + for index10 = 0; index10 < value.errors.length(); index10 = index10 + 1 { + let iter_elem : @common.ErrorCase = value.errors[index10] + let iter_base = address9 + index10 * 44 + __wit_bindgen_lower_t511(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 244, value.errors.length()) + mbt_ffi_store32(ptr + 240, address9) + + match value.annotations { + None => { + mbt_ffi_store8(ptr + 248, 0) + + () + } + Some(payload12) => { + mbt_ffi_store8(ptr + 248, 1) + __wit_bindgen_lower_t470(ptr + 249, payload12) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t520(ptr : Int, value : @common.CommandNode) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + let address = mbt_ffi_malloc(value.aliases.length() * 8) + for index = 0; index < value.aliases.length(); index = index + 1 { + let iter_elem : String = value.aliases[index] + let iter_base = address + index * 8 + + let ptr1 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr1) + } + mbt_ffi_store32(ptr + 12, value.aliases.length()) + mbt_ffi_store32(ptr + 8, address) + __wit_bindgen_lower_t491(ptr + 16, value.doc) + __wit_bindgen_lower_t505(ptr + 40, value.globals) + + let address2 = mbt_ffi_malloc(value.subcommands.length() * 4) + for index3 = 0; index3 < value.subcommands.length(); index3 = index3 + 1 { + let iter_elem : Int = value.subcommands[index3] + let iter_base = address2 + index3 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 60, value.subcommands.length()) + mbt_ffi_store32(ptr + 56, address2) + + match value.body { + None => { + mbt_ffi_store8(ptr + 64, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 64, 1) + __wit_bindgen_lower_t517(ptr + 68, payload4) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t522(ptr : Int, value : @common.CommandTree) -> Unit { + let address = mbt_ffi_malloc(value.nodes.length() * 324) + for index = 0; index < value.nodes.length(); index = index + 1 { + let iter_elem : @common.CommandNode = value.nodes[index] + let iter_base = address + index * 324 + __wit_bindgen_lower_t520(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 4, value.nodes.length()) + mbt_ffi_store32(ptr + 0, address) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t523(ptr : Int, value : @common.Tool) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.version) + mbt_ffi_store32(ptr + 4, value.version.length()) + mbt_ffi_store32(ptr + 0, ptr0) + __wit_bindgen_lower_t522(ptr + 8, value.commands) + __wit_bindgen_lower_t58(ptr + 16, value.schema) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t528(ptr : Int, value : @common.ToolError) -> Unit { + match value { + InvalidToolName(payload) => { + mbt_ffi_store8(ptr + 0, 0) + + let ptr0 = mbt_ffi_str2ptr(payload) + mbt_ffi_store32(ptr + 8, payload.length()) + mbt_ffi_store32(ptr + 4, ptr0) + + () + } + InvalidCommandPath(payload1) => { + mbt_ffi_store8(ptr + 0, 1) + + let address = mbt_ffi_malloc(payload1.length() * 8) + for index = 0; index < payload1.length(); index = index + 1 { + let iter_elem : String = payload1[index] + let iter_base = address + index * 8 + + let ptr2 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr2) + } + mbt_ffi_store32(ptr + 8, payload1.length()) + mbt_ffi_store32(ptr + 4, address) + + () + } + InvalidInput(payload3) => { + mbt_ffi_store8(ptr + 0, 2) + + let ptr4 = mbt_ffi_str2ptr(payload3) + mbt_ffi_store32(ptr + 8, payload3.length()) + mbt_ffi_store32(ptr + 4, ptr4) + + () + } + ConstraintViolation(payload5) => { + mbt_ffi_store8(ptr + 0, 3) + + let ptr6 = mbt_ffi_str2ptr(payload5) + mbt_ffi_store32(ptr + 8, payload5.length()) + mbt_ffi_store32(ptr + 4, ptr6) + + () + } + InvalidResult(payload7) => { + mbt_ffi_store8(ptr + 0, 4) + + let ptr8 = mbt_ffi_str2ptr(payload7) + mbt_ffi_store32(ptr + 8, payload7.length()) + mbt_ffi_store32(ptr + 4, ptr8) + + () + } + CustomError(payload9) => { + mbt_ffi_store8(ptr + 0, 5) + __wit_bindgen_lower_t77(ptr + 4, payload9) + + () + } + } +} + +///| +#owned(bytes) +extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = + #|(func (param i32) (result i32) local.get 0) + +///| +extern "wasm" fn mbt_ffi_extend16(value : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.extend16_s) + +///| +extern "wasm" fn mbt_ffi_extend8(value : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.extend8_s) + +///| +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) + +///| +extern "wasm" fn mbt_ffi_load16(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load16_s) + +///| +extern "wasm" fn mbt_ffi_load16_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load16_u) + +///| +extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load) + +///| +extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = + #|(func (param i32) (result i64) local.get 0 i64.load) + +///| +extern "wasm" fn mbt_ffi_load8(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_s) + +///| +extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_u) + +///| +extern "wasm" fn mbt_ffi_loadf32(offset : Int) -> Float = + #|(func (param i32) (result f32) local.get 0 f32.load) + +///| +extern "wasm" fn mbt_ffi_loadf64(offset : Int) -> Double = + #|(func (param i32) (result f64) local.get 0 f64.load) + +///| +extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = + #|(func (param i32) (result i32) (local i32) + #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc + #| local.tee 1 i32.const 0 call $moonbit.init_array8 + #| local.get 1) + +///| +extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array8 + #| local.get 0) + +///| +extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array16 + #| local.get 0) + +///| +extern "wasm" fn mbt_ffi_store16(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store16) + +///| +extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) + +///| +extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = + #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) + +///| +extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) + +///| +extern "wasm" fn mbt_ffi_storef32(offset : Int, value : Float) = + #|(func (param i32) (param f32) local.get 0 local.get 1 f32.store) + +///| +extern "wasm" fn mbt_ffi_storef64(offset : Int, value : Double) = + #|(func (param i32) (param f64) local.get 0 local.get 1 f64.store) + +///| +#owned(str) +extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = + #|(func (param i32) (result i32) local.get 0) diff --git a/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/guest/moon.pkg b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/guest/moon.pkg new file mode 100644 index 0000000000..ca380a46c7 --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/guest/moon.pkg @@ -0,0 +1,10 @@ +warnings = "-44" + +import { + "golemcloud/golem_sdk/async-core", + "golemcloud/golem_sdk/interface/golem/agent/common" @common0, + "golemcloud/golem_sdk/interface/golem/core/types", + "golemcloud/golem_sdk/interface/golem/tool/common", +} + +supported_targets = "+wasm" diff --git a/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/guest/pkg.generated.mbti b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/guest/pkg.generated.mbti new file mode 100644 index 0000000000..2ce006e9d7 --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/guest/pkg.generated.mbti @@ -0,0 +1,22 @@ +// Generated using `moon info`, DON'T EDIT IT +package "golemcloud/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/guest" + +import { + "golemcloud/golem_sdk/async-core", + "golemcloud/golem_sdk/interface/golem/core/types", +} + +// Values +pub fn discover_tools() -> Result[Array[@golemcloud/golem_sdk/interface/golem/tool/common.Tool], @golemcloud/golem_sdk/interface/golem/tool/common.ToolError] + +pub fn get_tool(String) -> Result[@golemcloud/golem_sdk/interface/golem/tool/common.Tool, @golemcloud/golem_sdk/interface/golem/tool/common.ToolError] + +pub async fn invoke(String, Array[String], @types.TypedSchemaValue, @async-core.Stream[Byte]?, @golemcloud/golem_sdk/interface/golem/agent/common.Principal, @async-core.TaskGroup[Unit]) -> Result[@golemcloud/golem_sdk/interface/golem/tool/common.InvocationResult, @golemcloud/golem_sdk/interface/golem/tool/common.ToolError] + +// Errors + +// Types and methods + +// Type aliases + +// Traits diff --git a/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/guest/top.mbt b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/guest/top.mbt new file mode 100644 index 0000000000..89c8eee98e --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/guest/top.mbt @@ -0,0 +1,45 @@ +// Generated by `wit-bindgen` 0.59.0. DO NOT EDIT! + +///| +/// Enumerate the tools this component exposes. The returned metadata +/// is complete (full command tree and schema graph). +declare pub fn discover_tools() -> Result[ + Array[@common.Tool], + @common.ToolError, +] + +///| +/// Look up a single tool by name. +declare pub fn get_tool( + name : String, +) -> Result[@common.Tool, @common.ToolError] + +///| +/// Invoke a command of a tool. +/// +/// `command-path` selects the command body to execute. An empty list +/// targets the root command's body; non-empty lists walk the +/// `subcommands` field, each segment matching a `command-node.name` +/// or alias. +/// +/// `input` is a self-contained `typed-schema-value` whose root must +/// structurally match the selected body's input schema — a record with +/// one field per positional, option, flag, and inherited global declared +/// on or above the body, each field typed by the matching type node in +/// the body's schema. +/// +/// `stdin` is supplied when the selected body declared a stdin +/// `stream-spec`. The callee consumes the stream for the duration of the +/// call; dropping its reader closes further consumption. +/// +/// `principal` carries the caller's authenticated identity for +/// authorization and audit, identical in semantics to the parameter +/// of the same name in `golem:agent/guest.invoke`. +declare pub async fn invoke( + tool_name : String, + command_path : Array[String], + input : @types.TypedSchemaValue, + stdin : @async-core.Stream[Byte]?, + principal : @common0.Principal, + background_group : @async-core.TaskGroup[Unit], +) -> Result[@common.InvocationResult, @common.ToolError] diff --git a/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/tool-middleware-guest/README.md b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/tool-middleware-guest/README.md new file mode 100644 index 0000000000..2bfd6083da --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/tool-middleware-guest/README.md @@ -0,0 +1 @@ +Interface exported by components that provide tool middleware. \ No newline at end of file diff --git a/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/tool-middleware-guest/ffi.mbt b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/tool-middleware-guest/ffi.mbt new file mode 100644 index 0000000000..2986b36e82 --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/tool-middleware-guest/ffi.mbt @@ -0,0 +1,21887 @@ +// Generated by `wit-bindgen` 0.59.0. DO NOT EDIT! + +///| +#doc(hidden) +pub fn wasmExportDiscoverToolMiddlewares() -> Int { + let result : Result[Array[@common.ToolMiddleware], @common.ToolError] = discover_tool_middlewares() + let return_area = mbt_ffi_malloc(40) + + match result { + Ok(payload) => { + mbt_ffi_store8(return_area + 0, 0) + + let address = mbt_ffi_malloc(payload.length() * 120) + for index = 0; index < payload.length(); index = index + 1 { + let iter_elem : @common.ToolMiddleware = payload[index] + let iter_base = address + index * 120 + __wit_bindgen_lower_t527(iter_base + 0, iter_elem) + } + mbt_ffi_store32(return_area + 8, payload.length()) + mbt_ffi_store32(return_area + 4, address) + + () + } + Err(payload0) => { + mbt_ffi_store8(return_area + 0, 1) + __wit_bindgen_lower_t528(return_area + 4, payload0) + + () + } + } + let ret = return_area + return ret +} + +///| +#doc(hidden) +pub fn wasmExportDiscoverToolMiddlewaresPostReturn(p0 : Int) -> Unit { + match mbt_ffi_load8_u(p0 + 0) { + 0 => { + for index141 = 0 + index141 < mbt_ffi_load32(p0 + 8) + index141 = index141 + 1 { + let iter_base = mbt_ffi_load32(p0 + 4) + index141 * 120 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index = 0; index < mbt_ffi_load32(iter_base + 12); index = index + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index0 = 0 + index0 < mbt_ffi_load32(iter_base + 36) + index0 = index0 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index0 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + + for index48 = 0 + index48 < mbt_ffi_load32(iter_base + 56) + index48 = index48 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 52) + index48 * 324 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index1 = 0 + index1 < mbt_ffi_load32(iter_base + 12) + index1 = index1 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index1 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index2 = 0 + index2 < mbt_ffi_load32(iter_base + 36) + index2 = index2 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index2 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index6 = 0 + index6 < mbt_ffi_load32(iter_base + 44) + index6 = index6 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index6 * 112 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index3 = 0 + index3 < mbt_ffi_load32(iter_base + 20) + index3 = index3 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index3 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index4 = 0 + index4 < mbt_ffi_load32(iter_base + 44) + index4 = index4 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index4 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => { + for index5 = 0 + index5 < mbt_ffi_load32(iter_base + 88) + index5 = index5 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 84) + + index5 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 100) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + for index9 = 0 + index9 < mbt_ffi_load32(iter_base + 52) + index9 = index9 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + index9 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index7 = 0 + index7 < mbt_ffi_load32(iter_base + 20) + index7 = index7 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index7 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index8 = 0 + index8 < mbt_ffi_load32(iter_base + 44) + index8 = index8 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index8 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => { + for index12 = 0 + index12 < mbt_ffi_load32(iter_base + 72) + index12 = index12 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 68) + + index12 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index10 = 0 + index10 < mbt_ffi_load32(iter_base + 28) + index10 = index10 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index10 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + match mbt_ffi_load8_u(iter_base + 32) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => { + for index11 = 0 + index11 < mbt_ffi_load32(iter_base + 56) + index11 = index11 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 52) + + index11 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 80)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 88)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 96)) + + for index13 = 0 + index13 < mbt_ffi_load32(iter_base + 108) + index13 = index13 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 104) + + index13 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + + match mbt_ffi_load8_u(iter_base + 112) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 116)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 140) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 144)) + _ => panic() + } + } + _ => panic() + } + + for index17 = 0 + index17 < mbt_ffi_load32(iter_base + 160) + index17 = index17 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 156) + + index17 * 112 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index14 = 0 + index14 < mbt_ffi_load32(iter_base + 20) + index14 = index14 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index14 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index15 = 0 + index15 < mbt_ffi_load32(iter_base + 44) + index15 = index15 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + + index15 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => { + for index16 = 0 + index16 < mbt_ffi_load32(iter_base + 88) + index16 = index16 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 84) + + index16 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 100) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 156)) + + for index20 = 0 + index20 < mbt_ffi_load32(iter_base + 168) + index20 = index20 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 164) + + index20 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index18 = 0 + index18 < mbt_ffi_load32(iter_base + 20) + index18 = index18 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index18 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index19 = 0 + index19 < mbt_ffi_load32(iter_base + 44) + index19 = index19 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + + index19 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 164)) + + for index38 = 0 + index38 < mbt_ffi_load32(iter_base + 176) + index38 = index38 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 172) + + index38 * 28 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => { + for index22 = 0 + index22 < mbt_ffi_load32(iter_base + 8) + index22 = index22 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index22 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index21 = 0 + index21 < mbt_ffi_load32(iter_base + 16) + index21 = index21 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index21 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 1 => { + for index24 = 0 + index24 < mbt_ffi_load32(iter_base + 8) + index24 = index24 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index24 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index23 = 0 + index23 < mbt_ffi_load32(iter_base + 16) + index23 = index23 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index23 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 2 => { + for index26 = 0 + index26 < mbt_ffi_load32(iter_base + 8) + index26 = index26 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index26 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index25 = 0 + index25 < mbt_ffi_load32(iter_base + 16) + index25 = index25 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index25 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 3 => { + for index29 = 0 + index29 < mbt_ffi_load32(iter_base + 8) + index29 = index29 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index29 * 8 + + for index28 = 0 + index28 < mbt_ffi_load32(iter_base + 4) + index28 = index28 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 0) + + index28 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index27 = 0 + index27 < mbt_ffi_load32(iter_base + 16) + index27 = index27 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index27 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 4 => { + for index31 = 0 + index31 < mbt_ffi_load32(iter_base + 12) + index31 = index31 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index31 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index30 = 0 + index30 < mbt_ffi_load32(iter_base + 16) + index30 = index30 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index30 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index33 = 0 + index33 < mbt_ffi_load32(iter_base + 24) + index33 = index33 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 20) + + index33 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index32 = 0 + index32 < mbt_ffi_load32(iter_base + 16) + index32 = index32 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index32 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + } + 5 => { + for index35 = 0 + index35 < mbt_ffi_load32(iter_base + 12) + index35 = index35 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index35 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index34 = 0 + index34 < mbt_ffi_load32(iter_base + 16) + index34 = index34 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index34 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index37 = 0 + index37 < mbt_ffi_load32(iter_base + 20) + index37 = index37 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index37 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index36 = 0 + index36 < mbt_ffi_load32(iter_base + 16) + index36 = index36 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index36 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 172)) + + match mbt_ffi_load8_u(iter_base + 180) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 184)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 192)) + + for index39 = 0 + index39 < mbt_ffi_load32(iter_base + 204) + index39 = index39 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 200) + + index39 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 200)) + + for index40 = 0 + index40 < mbt_ffi_load32(iter_base + 212) + index40 = index40 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 208) + + index40 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 208)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 220) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 224)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 232)) + + for index41 = 0 + index41 < mbt_ffi_load32(iter_base + 244) + index41 = index41 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 240) + + index41 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 240)) + + for index42 = 0 + index42 < mbt_ffi_load32(iter_base + 252) + index42 = index42 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 248) + + index42 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 248)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 260) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 268)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 276)) + + for index43 = 0 + index43 < mbt_ffi_load32(iter_base + 288) + index43 = index43 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 284) + + index43 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 284)) + + for index45 = 0 + index45 < mbt_ffi_load32(iter_base + 296) + index45 = index45 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 292) + + index45 * 32 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index44 = 0 + index44 < mbt_ffi_load32(iter_base + 28) + index44 = index44 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index44 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 292)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 300)) + } + _ => panic() + } + + for index47 = 0 + index47 < mbt_ffi_load32(iter_base + 312) + index47 = index47 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 308) + + index47 * 44 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index46 = 0 + index46 < mbt_ffi_load32(iter_base + 28) + index46 = index46 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index46 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 308)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + + for index69 = 0 + index69 < mbt_ffi_load32(iter_base + 64) + index69 = index69 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 60) + index69 * 144 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 3 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 4 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 5 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 6 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 7 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 8 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 9 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 10 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 11 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 12 => () + 13 => () + 14 => { + for index51 = 0 + index51 < mbt_ffi_load32(iter_base + 12) + index51 = index51 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index51 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + for index49 = 0 + index49 < mbt_ffi_load32(iter_base + 28) + index49 = index49 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index49 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index50 = 0 + index50 < mbt_ffi_load32(iter_base + 36) + index50 = index50 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + + index50 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 52) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 60)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 15 => { + for index54 = 0 + index54 < mbt_ffi_load32(iter_base + 12) + index54 = index54 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index54 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index52 = 0 + index52 < mbt_ffi_load32(iter_base + 32) + index52 = index52 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index52 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index53 = 0 + index53 < mbt_ffi_load32(iter_base + 40) + index53 = index53 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + + index53 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 16 => { + for index55 = 0 + index55 < mbt_ffi_load32(iter_base + 12) + index55 = index55 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index55 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 17 => { + for index56 = 0 + index56 < mbt_ffi_load32(iter_base + 12) + index56 = index56 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index56 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => () + 20 => () + 21 => () + 22 => () + 23 => () + 24 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index57 = 0 + index57 < mbt_ffi_load32(iter_base + 16) + index57 = index57 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index57 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + } + 25 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index58 = 0 + index58 < mbt_ffi_load32(iter_base + 16) + index58 = index58 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index58 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + 26 => { + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => { + for index59 = 0 + index59 < mbt_ffi_load32(iter_base + 20) + index59 = index59 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index59 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => { + for index60 = 0 + index60 < mbt_ffi_load32(iter_base + 32) + index60 = index60 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index60 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + } + _ => panic() + } + } + 27 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index61 = 0 + index61 < mbt_ffi_load32(iter_base + 16) + index61 = index61 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index61 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 20) { + 0 => () + 1 => { + for index62 = 0 + index62 < mbt_ffi_load32(iter_base + 28) + index62 = index62 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index62 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + _ => panic() + } + } + 28 => () + 29 => () + 30 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index63 = 0 + index63 < mbt_ffi_load32(iter_base + 20) + index63 = index63 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index63 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 76)) + _ => panic() + } + } + 31 => { + for index66 = 0 + index66 < mbt_ffi_load32(iter_base + 12) + index66 = index66 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index66 * 92 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 4 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + } + 5 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + + for index64 = 0 + index64 < mbt_ffi_load32(iter_base + 52) + index64 = index64 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + + index64 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + for index65 = 0 + index65 < mbt_ffi_load32(iter_base + 60) + index65 = index65 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + + index65 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 32 => + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + 33 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + 34 => () + 35 => () + 36 => () + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 88) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 92)) + _ => panic() + } + + for index67 = 0 + index67 < mbt_ffi_load32(iter_base + 104) + index67 = index67 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index67 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + for index68 = 0 + index68 < mbt_ffi_load32(iter_base + 112) + index68 = index68 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index68 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + match mbt_ffi_load8_u(iter_base + 116) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 120)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 128) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 132) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 136)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 60)) + + for index70 = 0 + index70 < mbt_ffi_load32(iter_base + 72) + index70 = index70 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 68) + index70 * 24 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + + for index118 = 0 + index118 < mbt_ffi_load32(iter_base + 96) + index118 = index118 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 92) + + index118 * 324 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index71 = 0 + index71 < mbt_ffi_load32(iter_base + 12) + index71 = index71 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index71 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index72 = 0 + index72 < mbt_ffi_load32(iter_base + 36) + index72 = index72 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + + index72 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index76 = 0 + index76 < mbt_ffi_load32(iter_base + 44) + index76 = index76 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + + index76 * 112 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index73 = 0 + index73 < mbt_ffi_load32(iter_base + 20) + index73 = index73 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index73 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index74 = 0 + index74 < mbt_ffi_load32(iter_base + 44) + index74 = index74 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + + index74 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => { + for index75 = 0 + index75 < mbt_ffi_load32(iter_base + 88) + index75 = index75 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 84) + + index75 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 100) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + for index79 = 0 + index79 < mbt_ffi_load32(iter_base + 52) + index79 = index79 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + + index79 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index77 = 0 + index77 < mbt_ffi_load32(iter_base + 20) + index77 = index77 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index77 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index78 = 0 + index78 < mbt_ffi_load32(iter_base + 44) + index78 = index78 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + + index78 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => { + for index82 = 0 + index82 < mbt_ffi_load32(iter_base + 72) + index82 = index82 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 68) + + index82 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index80 = 0 + index80 < mbt_ffi_load32(iter_base + 28) + index80 = index80 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index80 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + match mbt_ffi_load8_u(iter_base + 32) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => { + for index81 = 0 + index81 < mbt_ffi_load32(iter_base + 56) + index81 = index81 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 52) + + index81 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 80)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 88)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 96)) + + for index83 = 0 + index83 < mbt_ffi_load32(iter_base + 108) + index83 = index83 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 104) + + index83 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + + match mbt_ffi_load8_u(iter_base + 112) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 116)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 140) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 144)) + _ => panic() + } + } + _ => panic() + } + + for index87 = 0 + index87 < mbt_ffi_load32(iter_base + 160) + index87 = index87 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 156) + + index87 * 112 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index84 = 0 + index84 < mbt_ffi_load32(iter_base + 20) + index84 = index84 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index84 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index85 = 0 + index85 < mbt_ffi_load32(iter_base + 44) + index85 = index85 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + + index85 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => { + for index86 = 0 + index86 < mbt_ffi_load32(iter_base + 88) + index86 = index86 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 84) + + index86 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 100) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 156)) + + for index90 = 0 + index90 < mbt_ffi_load32(iter_base + 168) + index90 = index90 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 164) + + index90 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index88 = 0 + index88 < mbt_ffi_load32(iter_base + 20) + index88 = index88 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index88 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index89 = 0 + index89 < mbt_ffi_load32(iter_base + 44) + index89 = index89 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + + index89 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 164)) + + for index108 = 0 + index108 < mbt_ffi_load32(iter_base + 176) + index108 = index108 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 172) + + index108 * 28 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => { + for index92 = 0 + index92 < mbt_ffi_load32(iter_base + 8) + index92 = index92 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index92 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index91 = 0 + index91 < mbt_ffi_load32(iter_base + 16) + index91 = index91 + 1 { + let iter_base = mbt_ffi_load32( + iter_base + 12, + ) + + index91 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 1 => { + for index94 = 0 + index94 < mbt_ffi_load32(iter_base + 8) + index94 = index94 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index94 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index93 = 0 + index93 < mbt_ffi_load32(iter_base + 16) + index93 = index93 + 1 { + let iter_base = mbt_ffi_load32( + iter_base + 12, + ) + + index93 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 2 => { + for index96 = 0 + index96 < mbt_ffi_load32(iter_base + 8) + index96 = index96 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index96 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index95 = 0 + index95 < mbt_ffi_load32(iter_base + 16) + index95 = index95 + 1 { + let iter_base = mbt_ffi_load32( + iter_base + 12, + ) + + index95 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 3 => { + for index99 = 0 + index99 < mbt_ffi_load32(iter_base + 8) + index99 = index99 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index99 * 8 + + for index98 = 0 + index98 < mbt_ffi_load32(iter_base + 4) + index98 = index98 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 0) + + index98 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index97 = 0 + index97 < mbt_ffi_load32(iter_base + 16) + index97 = index97 + 1 { + let iter_base = mbt_ffi_load32( + iter_base + 12, + ) + + index97 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match + mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match + mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 4 => { + for index101 = 0 + index101 < mbt_ffi_load32(iter_base + 12) + index101 = index101 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index101 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index100 = 0 + index100 < mbt_ffi_load32(iter_base + 16) + index100 = index100 + 1 { + let iter_base = mbt_ffi_load32( + iter_base + 12, + ) + + index100 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index103 = 0 + index103 < mbt_ffi_load32(iter_base + 24) + index103 = index103 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 20) + + index103 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index102 = 0 + index102 < mbt_ffi_load32(iter_base + 16) + index102 = index102 + 1 { + let iter_base = mbt_ffi_load32( + iter_base + 12, + ) + + index102 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + } + 5 => { + for index105 = 0 + index105 < mbt_ffi_load32(iter_base + 12) + index105 = index105 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index105 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index104 = 0 + index104 < mbt_ffi_load32(iter_base + 16) + index104 = index104 + 1 { + let iter_base = mbt_ffi_load32( + iter_base + 12, + ) + + index104 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index107 = 0 + index107 < mbt_ffi_load32(iter_base + 20) + index107 = index107 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index107 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index106 = 0 + index106 < mbt_ffi_load32(iter_base + 16) + index106 = index106 + 1 { + let iter_base = mbt_ffi_load32( + iter_base + 12, + ) + + index106 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 172)) + + match mbt_ffi_load8_u(iter_base + 180) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 184)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 192)) + + for index109 = 0 + index109 < mbt_ffi_load32(iter_base + 204) + index109 = index109 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 200) + + index109 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 200)) + + for index110 = 0 + index110 < mbt_ffi_load32(iter_base + 212) + index110 = index110 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 208) + + index110 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 208)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 220) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 224)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 232)) + + for index111 = 0 + index111 < mbt_ffi_load32(iter_base + 244) + index111 = index111 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 240) + + index111 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 240)) + + for index112 = 0 + index112 < mbt_ffi_load32(iter_base + 252) + index112 = index112 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 248) + + index112 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 248)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 260) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 268)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 276)) + + for index113 = 0 + index113 < mbt_ffi_load32(iter_base + 288) + index113 = index113 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 284) + + index113 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 284)) + + for index115 = 0 + index115 < mbt_ffi_load32(iter_base + 296) + index115 = index115 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 292) + + index115 * 32 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index114 = 0 + index114 < mbt_ffi_load32(iter_base + 28) + index114 = index114 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index114 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 292)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 300)) + } + _ => panic() + } + + for index117 = 0 + index117 < mbt_ffi_load32(iter_base + 312) + index117 = index117 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 308) + + index117 * 44 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index116 = 0 + index116 < mbt_ffi_load32(iter_base + 28) + index116 = index116 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index116 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 308)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 92)) + + for index139 = 0 + index139 < mbt_ffi_load32(iter_base + 104) + index139 = index139 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + + index139 * 144 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 3 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 4 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 5 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 6 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 7 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 8 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 9 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 10 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 11 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 12 => () + 13 => () + 14 => { + for index121 = 0 + index121 < mbt_ffi_load32(iter_base + 12) + index121 = index121 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index121 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + for index119 = 0 + index119 < mbt_ffi_load32(iter_base + 28) + index119 = index119 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index119 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index120 = 0 + index120 < mbt_ffi_load32(iter_base + 36) + index120 = index120 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + + index120 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 52) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 60)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 15 => { + for index124 = 0 + index124 < mbt_ffi_load32(iter_base + 12) + index124 = index124 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index124 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index122 = 0 + index122 < mbt_ffi_load32(iter_base + 32) + index122 = index122 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index122 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index123 = 0 + index123 < mbt_ffi_load32(iter_base + 40) + index123 = index123 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + + index123 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 16 => { + for index125 = 0 + index125 < mbt_ffi_load32(iter_base + 12) + index125 = index125 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index125 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 17 => { + for index126 = 0 + index126 < mbt_ffi_load32(iter_base + 12) + index126 = index126 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index126 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => () + 20 => () + 21 => () + 22 => () + 23 => () + 24 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index127 = 0 + index127 < mbt_ffi_load32(iter_base + 16) + index127 = index127 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index127 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + } + 25 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index128 = 0 + index128 < mbt_ffi_load32(iter_base + 16) + index128 = index128 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index128 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + 26 => { + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => { + for index129 = 0 + index129 < mbt_ffi_load32(iter_base + 20) + index129 = index129 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index129 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => { + for index130 = 0 + index130 < mbt_ffi_load32(iter_base + 32) + index130 = index130 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index130 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + } + _ => panic() + } + } + 27 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index131 = 0 + index131 < mbt_ffi_load32(iter_base + 16) + index131 = index131 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index131 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 20) { + 0 => () + 1 => { + for index132 = 0 + index132 < mbt_ffi_load32(iter_base + 28) + index132 = index132 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index132 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + _ => panic() + } + } + 28 => () + 29 => () + 30 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index133 = 0 + index133 < mbt_ffi_load32(iter_base + 20) + index133 = index133 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index133 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 76)) + _ => panic() + } + } + 31 => { + for index136 = 0 + index136 < mbt_ffi_load32(iter_base + 12) + index136 = index136 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index136 * 92 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 4 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + } + 5 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + + for index134 = 0 + index134 < mbt_ffi_load32(iter_base + 52) + index134 = index134 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + + index134 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + for index135 = 0 + index135 < mbt_ffi_load32(iter_base + 60) + index135 = index135 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + + index135 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 32 => + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + 33 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + 34 => () + 35 => () + 36 => () + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 88) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 92)) + _ => panic() + } + + for index137 = 0 + index137 < mbt_ffi_load32(iter_base + 104) + index137 = index137 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + + index137 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + for index138 = 0 + index138 < mbt_ffi_load32(iter_base + 112) + index138 = index138 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + + index138 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + match mbt_ffi_load8_u(iter_base + 116) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 120)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 128) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 132) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 136)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + for index140 = 0 + index140 < mbt_ffi_load32(iter_base + 112) + index140 = index140 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + + index140 * 24 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + } + _ => panic() + } + } + 1 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 4)) + } + 1 => + match mbt_ffi_load8_u(p0 + 4) { + 0 => mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + 1 => { + for index142 = 0 + index142 < mbt_ffi_load32(p0 + 12) + index142 = index142 + 1 { + let iter_base = mbt_ffi_load32(p0 + 8) + index142 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + } + 2 => mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + 3 => mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + 4 => mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + 5 => { + for index163 = 0 + index163 < mbt_ffi_load32(p0 + 12) + index163 = index163 + 1 { + let iter_base = mbt_ffi_load32(p0 + 8) + index163 * 144 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 3 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 4 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 5 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 6 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 7 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 8 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 9 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 10 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 11 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 12 => () + 13 => () + 14 => { + for index145 = 0 + index145 < mbt_ffi_load32(iter_base + 12) + index145 = index145 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index145 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + for index143 = 0 + index143 < mbt_ffi_load32(iter_base + 28) + index143 = index143 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index143 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index144 = 0 + index144 < mbt_ffi_load32(iter_base + 36) + index144 = index144 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + + index144 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 52) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 60)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 15 => { + for index148 = 0 + index148 < mbt_ffi_load32(iter_base + 12) + index148 = index148 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index148 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index146 = 0 + index146 < mbt_ffi_load32(iter_base + 32) + index146 = index146 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index146 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index147 = 0 + index147 < mbt_ffi_load32(iter_base + 40) + index147 = index147 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + + index147 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 16 => { + for index149 = 0 + index149 < mbt_ffi_load32(iter_base + 12) + index149 = index149 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index149 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 17 => { + for index150 = 0 + index150 < mbt_ffi_load32(iter_base + 12) + index150 = index150 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index150 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => () + 20 => () + 21 => () + 22 => () + 23 => () + 24 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index151 = 0 + index151 < mbt_ffi_load32(iter_base + 16) + index151 = index151 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index151 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + } + 25 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index152 = 0 + index152 < mbt_ffi_load32(iter_base + 16) + index152 = index152 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index152 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + 26 => { + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => { + for index153 = 0 + index153 < mbt_ffi_load32(iter_base + 20) + index153 = index153 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index153 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => { + for index154 = 0 + index154 < mbt_ffi_load32(iter_base + 32) + index154 = index154 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index154 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + } + _ => panic() + } + } + 27 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index155 = 0 + index155 < mbt_ffi_load32(iter_base + 16) + index155 = index155 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index155 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 20) { + 0 => () + 1 => { + for index156 = 0 + index156 < mbt_ffi_load32(iter_base + 28) + index156 = index156 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index156 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + _ => panic() + } + } + 28 => () + 29 => () + 30 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index157 = 0 + index157 < mbt_ffi_load32(iter_base + 20) + index157 = index157 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index157 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 76)) + _ => panic() + } + } + 31 => { + for index160 = 0 + index160 < mbt_ffi_load32(iter_base + 12) + index160 = index160 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index160 * 92 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 4 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + } + 5 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + + for index158 = 0 + index158 < mbt_ffi_load32(iter_base + 52) + index158 = index158 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + + index158 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + for index159 = 0 + index159 < mbt_ffi_load32(iter_base + 60) + index159 = index159 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + + index159 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 32 => + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + 33 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + 34 => () + 35 => () + 36 => () + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 88) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 92)) + _ => panic() + } + + for index161 = 0 + index161 < mbt_ffi_load32(iter_base + 104) + index161 = index161 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index161 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + for index162 = 0 + index162 < mbt_ffi_load32(iter_base + 112) + index162 = index162 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index162 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + match mbt_ffi_load8_u(iter_base + 116) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 120)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 128) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 132) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 136)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + + for index164 = 0 + index164 < mbt_ffi_load32(p0 + 20) + index164 = index164 + 1 { + let iter_base = mbt_ffi_load32(p0 + 16) + index164 * 24 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 16)) + + for index165 = 0 + index165 < mbt_ffi_load32(p0 + 32) + index165 = index165 + 1 { + let iter_base = mbt_ffi_load32(p0 + 28) + index165 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 28)) + } + _ => panic() + } + _ => panic() + } +} + +///| +#doc(hidden) +pub fn wasmExportGetToolMiddleware(p0 : Int, p1 : Int) -> Int { + let result = mbt_ffi_ptr2str(p0, p1) + + let result0 : Result[@common.ToolMiddleware, @common.ToolError] = get_tool_middleware( + result, + ) + let return_area = mbt_ffi_malloc(124) + + match result0 { + Ok(payload) => { + mbt_ffi_store8(return_area + 0, 0) + __wit_bindgen_lower_t527(return_area + 4, payload) + + () + } + Err(payload1) => { + mbt_ffi_store8(return_area + 0, 1) + __wit_bindgen_lower_t528(return_area + 4, payload1) + + () + } + } + let ret = return_area + return ret +} + +///| +#doc(hidden) +pub fn wasmExportGetToolMiddlewarePostReturn(p0 : Int) -> Unit { + match mbt_ffi_load8_u(p0 + 0) { + 0 => { + mbt_ffi_free(mbt_ffi_load32(p0 + 4)) + + for index = 0; index < mbt_ffi_load32(p0 + 16); index = index + 1 { + let iter_base = mbt_ffi_load32(p0 + 12) + index * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 12)) + mbt_ffi_free(mbt_ffi_load32(p0 + 20)) + mbt_ffi_free(mbt_ffi_load32(p0 + 28)) + + for index0 = 0; index0 < mbt_ffi_load32(p0 + 40); index0 = index0 + 1 { + let iter_base = mbt_ffi_load32(p0 + 36) + index0 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 36)) + + match mbt_ffi_load8_u(p0 + 44) { + 0 => { + mbt_ffi_free(mbt_ffi_load32(p0 + 48)) + + for index48 = 0 + index48 < mbt_ffi_load32(p0 + 60) + index48 = index48 + 1 { + let iter_base = mbt_ffi_load32(p0 + 56) + index48 * 324 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index1 = 0 + index1 < mbt_ffi_load32(iter_base + 12) + index1 = index1 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index1 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index2 = 0 + index2 < mbt_ffi_load32(iter_base + 36) + index2 = index2 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index2 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index6 = 0 + index6 < mbt_ffi_load32(iter_base + 44) + index6 = index6 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index6 * 112 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index3 = 0 + index3 < mbt_ffi_load32(iter_base + 20) + index3 = index3 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index3 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index4 = 0 + index4 < mbt_ffi_load32(iter_base + 44) + index4 = index4 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index4 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => { + for index5 = 0 + index5 < mbt_ffi_load32(iter_base + 88) + index5 = index5 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 84) + index5 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 100) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + for index9 = 0 + index9 < mbt_ffi_load32(iter_base + 52) + index9 = index9 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + index9 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index7 = 0 + index7 < mbt_ffi_load32(iter_base + 20) + index7 = index7 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index7 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index8 = 0 + index8 < mbt_ffi_load32(iter_base + 44) + index8 = index8 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index8 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => { + for index12 = 0 + index12 < mbt_ffi_load32(iter_base + 72) + index12 = index12 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 68) + index12 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index10 = 0 + index10 < mbt_ffi_load32(iter_base + 28) + index10 = index10 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index10 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + match mbt_ffi_load8_u(iter_base + 32) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => { + for index11 = 0 + index11 < mbt_ffi_load32(iter_base + 56) + index11 = index11 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 52) + + index11 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 80)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 88)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 96)) + + for index13 = 0 + index13 < mbt_ffi_load32(iter_base + 108) + index13 = index13 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 104) + + index13 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + + match mbt_ffi_load8_u(iter_base + 112) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 116)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 140) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 144)) + _ => panic() + } + } + _ => panic() + } + + for index17 = 0 + index17 < mbt_ffi_load32(iter_base + 160) + index17 = index17 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 156) + + index17 * 112 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index14 = 0 + index14 < mbt_ffi_load32(iter_base + 20) + index14 = index14 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index14 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index15 = 0 + index15 < mbt_ffi_load32(iter_base + 44) + index15 = index15 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + + index15 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => { + for index16 = 0 + index16 < mbt_ffi_load32(iter_base + 88) + index16 = index16 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 84) + + index16 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 100) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 156)) + + for index20 = 0 + index20 < mbt_ffi_load32(iter_base + 168) + index20 = index20 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 164) + index20 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index18 = 0 + index18 < mbt_ffi_load32(iter_base + 20) + index18 = index18 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index18 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index19 = 0 + index19 < mbt_ffi_load32(iter_base + 44) + index19 = index19 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + + index19 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 164)) + + for index38 = 0 + index38 < mbt_ffi_load32(iter_base + 176) + index38 = index38 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 172) + index38 * 28 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => { + for index22 = 0 + index22 < mbt_ffi_load32(iter_base + 8) + index22 = index22 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index22 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index21 = 0 + index21 < mbt_ffi_load32(iter_base + 16) + index21 = index21 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index21 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 1 => { + for index24 = 0 + index24 < mbt_ffi_load32(iter_base + 8) + index24 = index24 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index24 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index23 = 0 + index23 < mbt_ffi_load32(iter_base + 16) + index23 = index23 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index23 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 2 => { + for index26 = 0 + index26 < mbt_ffi_load32(iter_base + 8) + index26 = index26 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index26 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index25 = 0 + index25 < mbt_ffi_load32(iter_base + 16) + index25 = index25 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index25 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 3 => { + for index29 = 0 + index29 < mbt_ffi_load32(iter_base + 8) + index29 = index29 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index29 * 8 + + for index28 = 0 + index28 < mbt_ffi_load32(iter_base + 4) + index28 = index28 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 0) + + index28 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index27 = 0 + index27 < mbt_ffi_load32(iter_base + 16) + index27 = index27 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index27 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 4 => { + for index31 = 0 + index31 < mbt_ffi_load32(iter_base + 12) + index31 = index31 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index31 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index30 = 0 + index30 < mbt_ffi_load32(iter_base + 16) + index30 = index30 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index30 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index33 = 0 + index33 < mbt_ffi_load32(iter_base + 24) + index33 = index33 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 20) + + index33 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index32 = 0 + index32 < mbt_ffi_load32(iter_base + 16) + index32 = index32 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index32 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + } + 5 => { + for index35 = 0 + index35 < mbt_ffi_load32(iter_base + 12) + index35 = index35 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index35 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index34 = 0 + index34 < mbt_ffi_load32(iter_base + 16) + index34 = index34 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index34 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index37 = 0 + index37 < mbt_ffi_load32(iter_base + 20) + index37 = index37 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index37 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index36 = 0 + index36 < mbt_ffi_load32(iter_base + 16) + index36 = index36 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index36 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 172)) + + match mbt_ffi_load8_u(iter_base + 180) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 184)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 192)) + + for index39 = 0 + index39 < mbt_ffi_load32(iter_base + 204) + index39 = index39 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 200) + + index39 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 200)) + + for index40 = 0 + index40 < mbt_ffi_load32(iter_base + 212) + index40 = index40 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 208) + + index40 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 208)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 220) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 224)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 232)) + + for index41 = 0 + index41 < mbt_ffi_load32(iter_base + 244) + index41 = index41 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 240) + + index41 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 240)) + + for index42 = 0 + index42 < mbt_ffi_load32(iter_base + 252) + index42 = index42 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 248) + + index42 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 248)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 260) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 268)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 276)) + + for index43 = 0 + index43 < mbt_ffi_load32(iter_base + 288) + index43 = index43 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 284) + + index43 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 284)) + + for index45 = 0 + index45 < mbt_ffi_load32(iter_base + 296) + index45 = index45 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 292) + + index45 * 32 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index44 = 0 + index44 < mbt_ffi_load32(iter_base + 28) + index44 = index44 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index44 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 292)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 300)) + } + _ => panic() + } + + for index47 = 0 + index47 < mbt_ffi_load32(iter_base + 312) + index47 = index47 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 308) + index47 * 44 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index46 = 0 + index46 < mbt_ffi_load32(iter_base + 28) + index46 = index46 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index46 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 308)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 56)) + + for index69 = 0 + index69 < mbt_ffi_load32(p0 + 68) + index69 = index69 + 1 { + let iter_base = mbt_ffi_load32(p0 + 64) + index69 * 144 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 3 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 4 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 5 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 6 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 7 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 8 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 9 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 10 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 11 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 12 => () + 13 => () + 14 => { + for index51 = 0 + index51 < mbt_ffi_load32(iter_base + 12) + index51 = index51 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index51 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + for index49 = 0 + index49 < mbt_ffi_load32(iter_base + 28) + index49 = index49 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index49 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index50 = 0 + index50 < mbt_ffi_load32(iter_base + 36) + index50 = index50 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index50 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 52) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 60)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 15 => { + for index54 = 0 + index54 < mbt_ffi_load32(iter_base + 12) + index54 = index54 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index54 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index52 = 0 + index52 < mbt_ffi_load32(iter_base + 32) + index52 = index52 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index52 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index53 = 0 + index53 < mbt_ffi_load32(iter_base + 40) + index53 = index53 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + index53 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 16 => { + for index55 = 0 + index55 < mbt_ffi_load32(iter_base + 12) + index55 = index55 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index55 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 17 => { + for index56 = 0 + index56 < mbt_ffi_load32(iter_base + 12) + index56 = index56 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index56 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => () + 20 => () + 21 => () + 22 => () + 23 => () + 24 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index57 = 0 + index57 < mbt_ffi_load32(iter_base + 16) + index57 = index57 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index57 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + } + 25 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index58 = 0 + index58 < mbt_ffi_load32(iter_base + 16) + index58 = index58 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index58 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + 26 => { + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => { + for index59 = 0 + index59 < mbt_ffi_load32(iter_base + 20) + index59 = index59 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index59 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => { + for index60 = 0 + index60 < mbt_ffi_load32(iter_base + 32) + index60 = index60 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index60 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + } + _ => panic() + } + } + 27 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index61 = 0 + index61 < mbt_ffi_load32(iter_base + 16) + index61 = index61 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index61 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 20) { + 0 => () + 1 => { + for index62 = 0 + index62 < mbt_ffi_load32(iter_base + 28) + index62 = index62 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index62 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + _ => panic() + } + } + 28 => () + 29 => () + 30 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index63 = 0 + index63 < mbt_ffi_load32(iter_base + 20) + index63 = index63 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index63 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 76)) + _ => panic() + } + } + 31 => { + for index66 = 0 + index66 < mbt_ffi_load32(iter_base + 12) + index66 = index66 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index66 * 92 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 4 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + } + 5 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + + for index64 = 0 + index64 < mbt_ffi_load32(iter_base + 52) + index64 = index64 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + index64 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + for index65 = 0 + index65 < mbt_ffi_load32(iter_base + 60) + index65 = index65 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + index65 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 32 => + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + 33 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + 34 => () + 35 => () + 36 => () + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 88) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 92)) + _ => panic() + } + + for index67 = 0 + index67 < mbt_ffi_load32(iter_base + 104) + index67 = index67 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index67 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + for index68 = 0 + index68 < mbt_ffi_load32(iter_base + 112) + index68 = index68 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index68 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + match mbt_ffi_load8_u(iter_base + 116) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 120)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 128) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 132) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 136)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 64)) + + for index70 = 0 + index70 < mbt_ffi_load32(p0 + 76) + index70 = index70 + 1 { + let iter_base = mbt_ffi_load32(p0 + 72) + index70 * 24 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 72)) + + match mbt_ffi_load8_u(p0 + 84) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(p0 + 88)) + + for index118 = 0 + index118 < mbt_ffi_load32(p0 + 100) + index118 = index118 + 1 { + let iter_base = mbt_ffi_load32(p0 + 96) + index118 * 324 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index71 = 0 + index71 < mbt_ffi_load32(iter_base + 12) + index71 = index71 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index71 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index72 = 0 + index72 < mbt_ffi_load32(iter_base + 36) + index72 = index72 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index72 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index76 = 0 + index76 < mbt_ffi_load32(iter_base + 44) + index76 = index76 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index76 * 112 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index73 = 0 + index73 < mbt_ffi_load32(iter_base + 20) + index73 = index73 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index73 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index74 = 0 + index74 < mbt_ffi_load32(iter_base + 44) + index74 = index74 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + + index74 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => { + for index75 = 0 + index75 < mbt_ffi_load32(iter_base + 88) + index75 = index75 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 84) + + index75 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 100) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + for index79 = 0 + index79 < mbt_ffi_load32(iter_base + 52) + index79 = index79 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + index79 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index77 = 0 + index77 < mbt_ffi_load32(iter_base + 20) + index77 = index77 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index77 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index78 = 0 + index78 < mbt_ffi_load32(iter_base + 44) + index78 = index78 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + + index78 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => { + for index82 = 0 + index82 < mbt_ffi_load32(iter_base + 72) + index82 = index82 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 68) + + index82 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index80 = 0 + index80 < mbt_ffi_load32(iter_base + 28) + index80 = index80 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index80 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + match mbt_ffi_load8_u(iter_base + 32) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => { + for index81 = 0 + index81 < mbt_ffi_load32(iter_base + 56) + index81 = index81 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 52) + + index81 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 80)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 88)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 96)) + + for index83 = 0 + index83 < mbt_ffi_load32(iter_base + 108) + index83 = index83 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 104) + + index83 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + + match mbt_ffi_load8_u(iter_base + 112) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 116)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 140) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 144)) + _ => panic() + } + } + _ => panic() + } + + for index87 = 0 + index87 < mbt_ffi_load32(iter_base + 160) + index87 = index87 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 156) + + index87 * 112 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index84 = 0 + index84 < mbt_ffi_load32(iter_base + 20) + index84 = index84 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index84 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index85 = 0 + index85 < mbt_ffi_load32(iter_base + 44) + index85 = index85 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + + index85 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => { + for index86 = 0 + index86 < mbt_ffi_load32(iter_base + 88) + index86 = index86 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 84) + + index86 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 100) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 156)) + + for index90 = 0 + index90 < mbt_ffi_load32(iter_base + 168) + index90 = index90 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 164) + + index90 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index88 = 0 + index88 < mbt_ffi_load32(iter_base + 20) + index88 = index88 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index88 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index89 = 0 + index89 < mbt_ffi_load32(iter_base + 44) + index89 = index89 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + + index89 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 164)) + + for index108 = 0 + index108 < mbt_ffi_load32(iter_base + 176) + index108 = index108 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 172) + + index108 * 28 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => { + for index92 = 0 + index92 < mbt_ffi_load32(iter_base + 8) + index92 = index92 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index92 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index91 = 0 + index91 < mbt_ffi_load32(iter_base + 16) + index91 = index91 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index91 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 1 => { + for index94 = 0 + index94 < mbt_ffi_load32(iter_base + 8) + index94 = index94 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index94 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index93 = 0 + index93 < mbt_ffi_load32(iter_base + 16) + index93 = index93 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index93 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 2 => { + for index96 = 0 + index96 < mbt_ffi_load32(iter_base + 8) + index96 = index96 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index96 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index95 = 0 + index95 < mbt_ffi_load32(iter_base + 16) + index95 = index95 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index95 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 3 => { + for index99 = 0 + index99 < mbt_ffi_load32(iter_base + 8) + index99 = index99 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index99 * 8 + + for index98 = 0 + index98 < mbt_ffi_load32(iter_base + 4) + index98 = index98 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 0) + + index98 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index97 = 0 + index97 < mbt_ffi_load32(iter_base + 16) + index97 = index97 + 1 { + let iter_base = mbt_ffi_load32( + iter_base + 12, + ) + + index97 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 4 => { + for index101 = 0 + index101 < mbt_ffi_load32(iter_base + 12) + index101 = index101 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index101 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index100 = 0 + index100 < mbt_ffi_load32(iter_base + 16) + index100 = index100 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index100 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index103 = 0 + index103 < mbt_ffi_load32(iter_base + 24) + index103 = index103 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 20) + + index103 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index102 = 0 + index102 < mbt_ffi_load32(iter_base + 16) + index102 = index102 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index102 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + } + 5 => { + for index105 = 0 + index105 < mbt_ffi_load32(iter_base + 12) + index105 = index105 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index105 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index104 = 0 + index104 < mbt_ffi_load32(iter_base + 16) + index104 = index104 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index104 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index107 = 0 + index107 < mbt_ffi_load32(iter_base + 20) + index107 = index107 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index107 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index106 = 0 + index106 < mbt_ffi_load32(iter_base + 16) + index106 = index106 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index106 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 172)) + + match mbt_ffi_load8_u(iter_base + 180) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 184)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 192)) + + for index109 = 0 + index109 < mbt_ffi_load32(iter_base + 204) + index109 = index109 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 200) + + index109 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 200)) + + for index110 = 0 + index110 < mbt_ffi_load32(iter_base + 212) + index110 = index110 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 208) + + index110 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 208)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 220) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 224)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 232)) + + for index111 = 0 + index111 < mbt_ffi_load32(iter_base + 244) + index111 = index111 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 240) + + index111 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 240)) + + for index112 = 0 + index112 < mbt_ffi_load32(iter_base + 252) + index112 = index112 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 248) + + index112 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 248)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 260) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 268)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 276)) + + for index113 = 0 + index113 < mbt_ffi_load32(iter_base + 288) + index113 = index113 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 284) + + index113 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 284)) + + for index115 = 0 + index115 < mbt_ffi_load32(iter_base + 296) + index115 = index115 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 292) + + index115 * 32 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index114 = 0 + index114 < mbt_ffi_load32(iter_base + 28) + index114 = index114 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index114 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 292)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 300)) + } + _ => panic() + } + + for index117 = 0 + index117 < mbt_ffi_load32(iter_base + 312) + index117 = index117 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 308) + + index117 * 44 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index116 = 0 + index116 < mbt_ffi_load32(iter_base + 28) + index116 = index116 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index116 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 308)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 96)) + + for index139 = 0 + index139 < mbt_ffi_load32(p0 + 108) + index139 = index139 + 1 { + let iter_base = mbt_ffi_load32(p0 + 104) + index139 * 144 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 3 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 4 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 5 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 6 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 7 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 8 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 9 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 10 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 11 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 12 => () + 13 => () + 14 => { + for index121 = 0 + index121 < mbt_ffi_load32(iter_base + 12) + index121 = index121 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index121 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + for index119 = 0 + index119 < mbt_ffi_load32(iter_base + 28) + index119 = index119 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index119 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index120 = 0 + index120 < mbt_ffi_load32(iter_base + 36) + index120 = index120 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + + index120 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 52) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 60)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 15 => { + for index124 = 0 + index124 < mbt_ffi_load32(iter_base + 12) + index124 = index124 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index124 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index122 = 0 + index122 < mbt_ffi_load32(iter_base + 32) + index122 = index122 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index122 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index123 = 0 + index123 < mbt_ffi_load32(iter_base + 40) + index123 = index123 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + + index123 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 16 => { + for index125 = 0 + index125 < mbt_ffi_load32(iter_base + 12) + index125 = index125 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index125 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 17 => { + for index126 = 0 + index126 < mbt_ffi_load32(iter_base + 12) + index126 = index126 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index126 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => () + 20 => () + 21 => () + 22 => () + 23 => () + 24 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index127 = 0 + index127 < mbt_ffi_load32(iter_base + 16) + index127 = index127 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index127 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + } + 25 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index128 = 0 + index128 < mbt_ffi_load32(iter_base + 16) + index128 = index128 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index128 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + 26 => { + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => { + for index129 = 0 + index129 < mbt_ffi_load32(iter_base + 20) + index129 = index129 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index129 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => { + for index130 = 0 + index130 < mbt_ffi_load32(iter_base + 32) + index130 = index130 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index130 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + } + _ => panic() + } + } + 27 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index131 = 0 + index131 < mbt_ffi_load32(iter_base + 16) + index131 = index131 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index131 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 20) { + 0 => () + 1 => { + for index132 = 0 + index132 < mbt_ffi_load32(iter_base + 28) + index132 = index132 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index132 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + _ => panic() + } + } + 28 => () + 29 => () + 30 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index133 = 0 + index133 < mbt_ffi_load32(iter_base + 20) + index133 = index133 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index133 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 76)) + _ => panic() + } + } + 31 => { + for index136 = 0 + index136 < mbt_ffi_load32(iter_base + 12) + index136 = index136 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index136 * 92 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 4 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + } + 5 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + + for index134 = 0 + index134 < mbt_ffi_load32(iter_base + 52) + index134 = index134 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + + index134 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + for index135 = 0 + index135 < mbt_ffi_load32(iter_base + 60) + index135 = index135 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + + index135 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 32 => + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + 33 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + 34 => () + 35 => () + 36 => () + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 88) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 92)) + _ => panic() + } + + for index137 = 0 + index137 < mbt_ffi_load32(iter_base + 104) + index137 = index137 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index137 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + for index138 = 0 + index138 < mbt_ffi_load32(iter_base + 112) + index138 = index138 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index138 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + match mbt_ffi_load8_u(iter_base + 116) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 120)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 128) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 132) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 136)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 104)) + + for index140 = 0 + index140 < mbt_ffi_load32(p0 + 116) + index140 = index140 + 1 { + let iter_base = mbt_ffi_load32(p0 + 112) + index140 * 24 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 112)) + } + _ => panic() + } + } + 1 => () + _ => panic() + } + } + 1 => + match mbt_ffi_load8_u(p0 + 4) { + 0 => mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + 1 => { + for index141 = 0 + index141 < mbt_ffi_load32(p0 + 12) + index141 = index141 + 1 { + let iter_base = mbt_ffi_load32(p0 + 8) + index141 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + } + 2 => mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + 3 => mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + 4 => mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + 5 => { + for index162 = 0 + index162 < mbt_ffi_load32(p0 + 12) + index162 = index162 + 1 { + let iter_base = mbt_ffi_load32(p0 + 8) + index162 * 144 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 3 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 4 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 5 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 6 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 7 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 8 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 9 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 10 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 11 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 12 => () + 13 => () + 14 => { + for index144 = 0 + index144 < mbt_ffi_load32(iter_base + 12) + index144 = index144 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index144 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + for index142 = 0 + index142 < mbt_ffi_load32(iter_base + 28) + index142 = index142 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index142 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index143 = 0 + index143 < mbt_ffi_load32(iter_base + 36) + index143 = index143 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + + index143 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 52) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 60)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 15 => { + for index147 = 0 + index147 < mbt_ffi_load32(iter_base + 12) + index147 = index147 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index147 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index145 = 0 + index145 < mbt_ffi_load32(iter_base + 32) + index145 = index145 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index145 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index146 = 0 + index146 < mbt_ffi_load32(iter_base + 40) + index146 = index146 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + + index146 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 16 => { + for index148 = 0 + index148 < mbt_ffi_load32(iter_base + 12) + index148 = index148 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index148 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 17 => { + for index149 = 0 + index149 < mbt_ffi_load32(iter_base + 12) + index149 = index149 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index149 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => () + 20 => () + 21 => () + 22 => () + 23 => () + 24 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index150 = 0 + index150 < mbt_ffi_load32(iter_base + 16) + index150 = index150 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index150 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + } + 25 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index151 = 0 + index151 < mbt_ffi_load32(iter_base + 16) + index151 = index151 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index151 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + 26 => { + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => { + for index152 = 0 + index152 < mbt_ffi_load32(iter_base + 20) + index152 = index152 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index152 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => { + for index153 = 0 + index153 < mbt_ffi_load32(iter_base + 32) + index153 = index153 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index153 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + } + _ => panic() + } + } + 27 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index154 = 0 + index154 < mbt_ffi_load32(iter_base + 16) + index154 = index154 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index154 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 20) { + 0 => () + 1 => { + for index155 = 0 + index155 < mbt_ffi_load32(iter_base + 28) + index155 = index155 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index155 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + _ => panic() + } + } + 28 => () + 29 => () + 30 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index156 = 0 + index156 < mbt_ffi_load32(iter_base + 20) + index156 = index156 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index156 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 76)) + _ => panic() + } + } + 31 => { + for index159 = 0 + index159 < mbt_ffi_load32(iter_base + 12) + index159 = index159 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index159 * 92 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 4 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + } + 5 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + + for index157 = 0 + index157 < mbt_ffi_load32(iter_base + 52) + index157 = index157 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + + index157 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + for index158 = 0 + index158 < mbt_ffi_load32(iter_base + 60) + index158 = index158 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + + index158 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 32 => + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + 33 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + 34 => () + 35 => () + 36 => () + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 88) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 92)) + _ => panic() + } + + for index160 = 0 + index160 < mbt_ffi_load32(iter_base + 104) + index160 = index160 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index160 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + for index161 = 0 + index161 < mbt_ffi_load32(iter_base + 112) + index161 = index161 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index161 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + match mbt_ffi_load8_u(iter_base + 116) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 120)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 128) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 132) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 136)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + + for index163 = 0 + index163 < mbt_ffi_load32(p0 + 20) + index163 = index163 + 1 { + let iter_base = mbt_ffi_load32(p0 + 16) + index163 * 24 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 16)) + + for index164 = 0 + index164 < mbt_ffi_load32(p0 + 32) + index164 = index164 + 1 { + let iter_base = mbt_ffi_load32(p0 + 28) + index164 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 28)) + } + _ => panic() + } + _ => panic() + } +} + +///| +fn wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0Read( + handle : Int, + buffer_ptr : Int, + length : Int, +) -> Int = "[export]golem:tool/tool-middleware-guest@0.1.0" "[async-lower][stream-read-0]invoke-tool-middleware" + +///| +fn wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0CancelRead( + handle : Int, +) -> Int = "[export]golem:tool/tool-middleware-guest@0.1.0" "[stream-cancel-read-0]invoke-tool-middleware" + +///| +fn wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0DropReadable( + handle : Int, +) = "[export]golem:tool/tool-middleware-guest@0.1.0" "[stream-drop-readable-0]invoke-tool-middleware" + +///| +fn wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0Malloc( + length : Int, +) -> Int { + let ptr = mbt_ffi_malloc(1 * length) + ptr +} + +///| +fn wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0Reject( + ptr : Int, + start : Int, + length : Int, +) -> Unit { + ignore((ptr, start, length)) +} + +///| +fn wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0ListLift( + ptr : Int, + length : Int, +) -> FixedArray[Byte] { + mbt_ffi_ptr2bytes(ptr, length) +} + +///| +priv struct WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamSource { + handle : Int + mut closed : Bool + mut reading : Bool + mut read_task : Int + mut read_buffer : Int + mut read_discarding : Bool + mut read_cleanup_done : Bool + read_cleanup : @async-core.CondVar +} + +///| +fn WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamSource::finish_read( + self : WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamSource, +) -> Unit { + self.reading = false + self.read_task = 0 + self.read_buffer = 0 + self.read_discarding = false + // Keep completion latched until a later read starts so every waiter woken + // by the broadcast can observe it. +} + +///| +async fn WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamSource::wait_for_read_cleanup( + self : WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamSource, +) -> Unit noraise { + @async-core.protect_from_cancel( + () => { + while !self.read_cleanup_done { + self.read_cleanup.wait() + } + }, + resume_on_cancel=true, + ) catch { + _ => () + } +} + +///| +async fn WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamSource::cancel_active_read( + self : WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamSource, +) -> Unit noraise { + if !self.reading { + return + } + if self.read_discarding { + self.wait_for_read_cleanup() + return + } + self.read_discarding = true + let progress_ref = Ref(0) + @async-core.protect_from_cancel( + () => { + progress_ref.val = @async-core.cancel_stream_read( + self.read_task, + self.handle, + () => { + wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0CancelRead( + self.handle, + ) + }, + ) + }, + resume_on_cancel=true, + ) catch { + _ => () + } + let progress = progress_ref.val + if progress > 0 && self.read_buffer != 0 { + wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0Reject( + self.read_buffer, + 0, + progress, + ) + } + self.read_cleanup_done = true + self.read_cleanup.broadcast() +} + +///| +async fn WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamSource::close( + self : WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamSource, +) -> Unit noraise { + if self.closed { + return + } + if self.reading { + self.cancel_active_read() + } + self.closed = true + wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0DropReadable( + self.handle, + ) +} + +///| +fn WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamSource::close_sync( + self : WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamSource, +) -> Unit { + if self.closed || self.reading { + return + } + + self.closed = true + wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0DropReadable( + self.handle, + ) +} + +///| +async fn WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamSource::read( + self : WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamSource, + count : Int, +) -> FixedArray[Byte]? { + if self.closed { + return None + } + if count <= 0 { + return Some([]) + } + if self.reading { + raise @async-core.EndpointBusy::Read + } + // `Stream.read` promises at most `count`; bound one canonical allocation. + let read_count = if count < 64 { count } else { 64 } + let ptr = wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0Malloc( + read_count, + ) + let mut owns_buffer = false + defer (if !owns_buffer { mbt_ffi_free(ptr) }) + self.reading = true + self.read_task = @async-core.current_component_task_token() + self.read_buffer = ptr + self.read_discarding = false + self.read_cleanup_done = false + let (progress, end) = @async-core.suspend_for_stream_read( + self.handle, + wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0Read( + self.handle, + ptr, + read_count, + ), + ) catch { + err => { + if self.read_discarding { + self.wait_for_read_cleanup() + self.finish_read() + return None + } + if err is @async-core.Cancelled::Cancelled { + self.cancel_active_read() + if !self.closed { + self.closed = true + wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0DropReadable( + self.handle, + ) + } + } + self.finish_read() + raise err + } + } + if self.read_discarding { + self.wait_for_read_cleanup() + self.finish_read() + return None + } + if progress == 0 { + self.finish_read() + if end { + self.close() + return None + } + return Some([]) + } + let values = wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0ListLift( + ptr, progress, + ) + owns_buffer = true + self.finish_read() + if end { + self.close() + } + Some(values) +} + +///| +fn wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamLift( + handle : Int, +) -> @async-core.Stream[Byte] { + let source = WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamSource::{ + handle, + closed: false, + reading: false, + read_task: 0, + read_buffer: 0, + read_discarding: false, + read_cleanup_done: false, + read_cleanup: CondVar(), + } + @async-core.Stream::from_source( + count => source.read(count), + () => source.close(), + () => source.close_sync(), + ) +} + +///| +fn wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1DropReadable( + handle : Int, +) = "[export]golem:tool/tool-middleware-guest@0.1.0" "[stream-drop-readable-0]invoke-tool-middleware" + +///| +fn wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1New() -> UInt64 = "[export]golem:tool/tool-middleware-guest@0.1.0" "[stream-new-0]invoke-tool-middleware" + +///| +fn wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1Write( + handle : Int, + buffer_ptr : Int, + length : Int, +) -> Int = "[export]golem:tool/tool-middleware-guest@0.1.0" "[async-lower][stream-write-0]invoke-tool-middleware" + +///| +fn wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1CancelWrite( + handle : Int, +) -> Int = "[export]golem:tool/tool-middleware-guest@0.1.0" "[stream-cancel-write-0]invoke-tool-middleware" + +///| +fn wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1DropWritable( + handle : Int, +) = "[export]golem:tool/tool-middleware-guest@0.1.0" "[stream-drop-writable-0]invoke-tool-middleware" + +///| +fn wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1Malloc( + length : Int, +) -> Int { + let ptr = mbt_ffi_malloc(1 * length) + ptr +} + +///| +fn wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1Commit( + ptr : Int, + start : Int, + length : Int, +) -> Unit { + ignore((ptr, start, length)) +} + +///| +fn wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1Reject( + ptr : Int, + start : Int, + length : Int, +) -> Unit { + ignore((ptr, start, length)) +} + +///| +fn wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1Lower( + value : Byte, + ptr : Int, +) -> Unit { + mbt_ffi_store8(ptr + 0, value.to_int()) +} + +///| +priv struct WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1StreamProducer { + stream : @async-core.Stream[Byte] + writer : Int +} + +///| +let wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1StreamProducers : Map[ + Int, + WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1StreamProducer, +] = Map([]) + +///| +fn wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1StreamCommit( + handle : Int, +) -> Unit { + guard wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1StreamProducers.get( + handle, + ) + is Some(prepared) else { + return + } + wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1StreamProducers.remove( + handle, + ) + let stream = prepared.stream + let writer = prepared.writer + if !@async-core.has_component_task_scope() { + abort("component stream producer requires an async task scope") + } + let producer = stream.take_producer() + @async-core.spawn_component_task_current(async fn() { + let writer_closed = Ref(false) + let writer_lock = @async-core.Mutex() + let close_writer = fn() -> Unit { + if !writer_closed.val { + writer_closed.val = true + wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1DropWritable( + writer, + ) + } + } + let close_writer_serialized = async fn() -> Unit { + writer_lock.acquire() + defer writer_lock.release() + close_writer() + } + let cleanup_value = fn(value : Byte) -> Unit { + let ptr = wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1Malloc( + 1, + ) + wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1Lower( + value, ptr, + ) + wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1Reject( + ptr, 0, 1, + ) + mbt_ffi_free(ptr) + } + let sink = @async-core.Sink::from_callbacks( + (data : ArrayView[Byte]) => { + writer_lock.acquire() + defer writer_lock.release() + if writer_closed.val || data.length() == 0 { + return 0 + } + let data_len = if data.length() < 64 { data.length() } else { 64 } + let ptr = wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1Malloc( + data_len, + ) + for i in 0.. Unit { + wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1Commit( + ptr, 0, transferred, + ) + if transferred < data_len { + wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1Reject( + ptr, + transferred, + data_len - transferred, + ) + } + mbt_ffi_free(ptr) + } + let mut total = 0 + let mut dropped = false + while total < data_len { + let (progress, end) = @async-core.suspend_for_stream_write( + writer, + wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1Write( + writer, + ptr + total * 1, + data_len - total, + ), + ) catch { + _ => { + total = total + + @async-core.cancel_stream_write(writer, () => { + wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1CancelWrite( + writer, + ) + }) + settle_staging(total) + close_writer() + return data_len + } + } + total = total + progress + if end { + dropped = true + break + } + } + settle_staging(total) + if dropped { + close_writer() + } + // The canonical writer accepted `total`; generated cleanup + // consumed the rest of this staging window. + data_len + }, + () => close_writer_serialized(), + () => !writer_closed.val, + Some(cleanup_value), + ) + let relay_source = producer is None + let run_producer = async fn() -> Unit { + match producer { + Some(producer) => { + producer(sink) + sink.close() + } + None => + for ;; { + match stream.read(64) { + Some(data) => + if !sink.write_all(data[:]) { + stream.reject(cleanup_value) + return + } + None => { + sink.close() + return + } + } + } + } + } + run_producer() catch { + _ => + if relay_source { + @async-core.protect_from_cancel( + () => stream.reject(cleanup_value), + resume_on_cancel=true, + ) catch { + _ => () + } + } + } + // A retained Sink may still own an in-flight canonical write after its + // producer returns. Do not drop the writable endpoint until that write + // has reached a terminal event and released its staging buffer. + @async-core.protect_from_cancel( + () => close_writer_serialized(), + resume_on_cancel=true, + ) + }) +} + +///| +fn wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1StreamLower( + stream : @async-core.Stream[Byte], +) -> Int { + if !@async-core.has_component_task_scope() { + abort("component stream producer requires an async task scope") + } + let pair = wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1New() + let reader = pair.to_int() + let writer = (pair >> 32).to_int() + wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1StreamProducers.set( + reader, + { stream, writer }, + ) + reader +} + +///| +fn wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1StreamLowerCommitted( + stream : @async-core.Stream[Byte], +) -> Int { + let reader = wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1StreamLower( + stream, + ) + wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1StreamCommit( + reader, + ) + reader +} + +///| +fn __wit_bindgen_lift_invoke_tool_commands(p0 : Int) -> @common.CommandTree { + let array547 : Array[@common.CommandNode] = [] + for index548 = 0; index548 < mbt_ffi_load32(p0 + 28); index548 = index548 + 1 { + let iter_base = mbt_ffi_load32(p0 + 24) + index548 * 324 + + let result2 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let array : Array[String] = [] + for index = 0; index < mbt_ffi_load32(iter_base + 12); index = index + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index * 8 + + let result3 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array.push(result3) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + let result4 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + let result5 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 24), + mbt_ffi_load32(iter_base + 28), + ) + + let array8 : Array[@common.Example] = [] + for index9 = 0; index9 < mbt_ffi_load32(iter_base + 36); index9 = index9 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index9 * 16 + + let result6 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result7 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + array8.push(@common.Example::{ title: result6, body: result7 }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + let array59 : Array[@common.OptionSpec] = [] + for index60 = 0 + index60 < mbt_ffi_load32(iter_base + 44) + index60 = index60 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index60 * 112 + + let result10 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted : Char? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(Int::unsafe_to_char(mbt_ffi_load32(iter_base + 12))) + _ => panic() + } + + let array12 : Array[String] = [] + for index13 = 0 + index13 < mbt_ffi_load32(iter_base + 20) + index13 = index13 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index13 * 8 + + let result11 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array12.push(result11) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + let result14 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 24), + mbt_ffi_load32(iter_base + 28), + ) + + let result15 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 32), + mbt_ffi_load32(iter_base + 36), + ) + + let array18 : Array[@common.Example] = [] + for index19 = 0 + index19 < mbt_ffi_load32(iter_base + 44) + index19 = index19 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index19 * 16 + + let result16 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result17 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + array18.push(@common.Example::{ title: result16, body: result17 }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + let lifted21 : String? = match mbt_ffi_load8_u(iter_base + 48) { + 0 => Option::None + 1 => { + let result20 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 52), + mbt_ffi_load32(iter_base + 56), + ) + + Option::Some(result20) + } + _ => panic() + } + + let lifted24 = match mbt_ffi_load8_u(iter_base + 60) { + 0 => @common.OptionShape::Scalar(mbt_ffi_load32(iter_base + 64)) + 1 => @common.OptionShape::OptionalScalar(mbt_ffi_load32(iter_base + 64)) + 2 => { + let lifted22 = match mbt_ffi_load8_u(iter_base + 64) { + 0 => @common.Repetition::Repeated + 1 => + @common.Repetition::Delimited( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 68)), + ) + 2 => + @common.Repetition::Either( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 68)), + ) + _ => panic() + } + + @common.OptionShape::RepeatableList(@common.RepeatableListShape::{ + repetition: lifted22, + item_type: mbt_ffi_load32(iter_base + 72), + }) + } + 3 => { + let lifted23 = match mbt_ffi_load8_u(iter_base + 64) { + 0 => @common.Repetition::Repeated + 1 => + @common.Repetition::Delimited( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 68)), + ) + 2 => + @common.Repetition::Either( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 68)), + ) + _ => panic() + } + + @common.OptionShape::RepeatableMap(@common.RepeatableMapShape::{ + repetition: lifted23, + map_type: mbt_ffi_load32(iter_base + 72), + duplicate_key_policy: @common.DuplicateKeyPolicy::from( + mbt_ffi_load8_u(iter_base + 76), + ), + }) + } + _ => panic() + } + + let lifted56 : @types.SchemaValueTree? = match + mbt_ffi_load8_u(iter_base + 80) { + 0 => Option::None + 1 => { + let array54 : Array[@types.SchemaValueNode] = [] + for index55 = 0 + index55 < mbt_ffi_load32(iter_base + 88) + index55 = index55 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 84) + index55 * 32 + + let lifted53 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue( + mbt_ffi_load8_u(iter_base + 8) != 0, + ) + 1 => @types.SchemaValueNode::S8Value(mbt_ffi_load8(iter_base + 8)) + 2 => + @types.SchemaValueNode::S16Value(mbt_ffi_load16(iter_base + 8)) + 3 => + @types.SchemaValueNode::S32Value(mbt_ffi_load32(iter_base + 8)) + 4 => + @types.SchemaValueNode::S64Value(mbt_ffi_load64(iter_base + 8)) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8) + .land(0xFFFF) + .reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => + @types.SchemaValueNode::F32Value(mbt_ffi_loadf32(iter_base + 8)) + 10 => + @types.SchemaValueNode::F64Value(mbt_ffi_loadf64(iter_base + 8)) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result25 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result25) + } + 13 => { + let array26 : Array[Int] = [] + for index27 = 0 + index27 < mbt_ffi_load32(iter_base + 12) + index27 = index27 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index27 * 4 + + array26.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array26) + } + 14 => { + let lifted28 : Int? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted28, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array29 : Array[Bool] = [] + for index30 = 0 + index30 < mbt_ffi_load32(iter_base + 12) + index30 = index30 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index30 * 1 + + array29.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array29) + } + 17 => { + let array31 : Array[Int] = [] + for index32 = 0 + index32 < mbt_ffi_load32(iter_base + 12) + index32 = index32 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index32 * 4 + + array31.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array31) + } + 18 => { + let array33 : Array[Int] = [] + for index34 = 0 + index34 < mbt_ffi_load32(iter_base + 12) + index34 = index34 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index34 * 4 + + array33.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array33) + } + 19 => { + let array35 : Array[Int] = [] + for index36 = 0 + index36 < mbt_ffi_load32(iter_base + 12) + index36 = index36 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index36 * 4 + + array35.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array35) + } + 20 => { + let array37 : Array[@types.MapEntry] = [] + for index38 = 0 + index38 < mbt_ffi_load32(iter_base + 12) + index38 = index38 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index38 * 8 + + array37.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array37) + } + 21 => { + let lifted39 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted39) + } + 22 => { + let lifted42 = match mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted40 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted40) + } + 1 => { + let lifted41 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted41) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted42) + } + 23 => { + let result43 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted45 : String? = match mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result44 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result44) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result43, + language: lifted45, + }) + } + 24 => { + let result46 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted48 : String? = match mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result47 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result47) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result46, + mime_type: lifted48, + }) + } + 25 => { + let result49 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result49) + } + 26 => { + let result50 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result50) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result51 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result51, + }) + } + 30 => { + let result52 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result52, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken(mbt_ffi_load32(iter_base + 8)), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ), + ) + _ => panic() + } + + array54.push(lifted53) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + + Option::Some(@types.SchemaValueTree::{ + value_nodes: array54, + root: mbt_ffi_load32(iter_base + 92), + }) + } + _ => panic() + } + + let lifted58 : String? = match mbt_ffi_load8_u(iter_base + 100) { + 0 => Option::None + 1 => { + let result57 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 104), + mbt_ffi_load32(iter_base + 108), + ) + + Option::Some(result57) + } + _ => panic() + } + + array59.push(@common.OptionSpec::{ + long: result10, + short: lifted, + aliases: array12, + doc: @common.Doc::{ + summary: result14, + description: result15, + examples: array18, + }, + value_name: lifted21, + shape: lifted24, + default: lifted56, + required: mbt_ffi_load8_u(iter_base + 96) != 0, + env_var: lifted58, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + let array76 : Array[@common.FlagSpec] = [] + for index77 = 0 + index77 < mbt_ffi_load32(iter_base + 52) + index77 = index77 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + index77 * 72 + + let result61 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted62 : Char? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(Int::unsafe_to_char(mbt_ffi_load32(iter_base + 12))) + _ => panic() + } + + let array64 : Array[String] = [] + for index65 = 0 + index65 < mbt_ffi_load32(iter_base + 20) + index65 = index65 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index65 * 8 + + let result63 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array64.push(result63) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + let result66 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 24), + mbt_ffi_load32(iter_base + 28), + ) + + let result67 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 32), + mbt_ffi_load32(iter_base + 36), + ) + + let array70 : Array[@common.Example] = [] + for index71 = 0 + index71 < mbt_ffi_load32(iter_base + 44) + index71 = index71 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index71 * 16 + + let result68 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result69 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + array70.push(@common.Example::{ title: result68, body: result69 }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + let lifted73 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @common.FlagShape::BoolFlag(@common.BoolFlagShape::{ + default: mbt_ffi_load8_u(iter_base + 52) != 0, + negatable: mbt_ffi_load8_u(iter_base + 53) != 0, + }) + 1 => { + let lifted72 : UInt? = match mbt_ffi_load8_u(iter_base + 52) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 56).reinterpret_as_uint()) + _ => panic() + } + + @common.FlagShape::CountFlag(lifted72) + } + _ => panic() + } + + let lifted75 : String? = match mbt_ffi_load8_u(iter_base + 60) { + 0 => Option::None + 1 => { + let result74 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 64), + mbt_ffi_load32(iter_base + 68), + ) + + Option::Some(result74) + } + _ => panic() + } + + array76.push(@common.FlagSpec::{ + long: result61, + short: lifted62, + aliases: array64, + doc: @common.Doc::{ + summary: result66, + description: result67, + examples: array70, + }, + shape: lifted73, + env_var: lifted75, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + let array78 : Array[Int] = [] + for index79 = 0 + index79 < mbt_ffi_load32(iter_base + 60) + index79 = index79 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + index79 * 4 + + array78.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + let lifted546 : @common.CommandBody? = match + mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let array121 : Array[@common.Positional] = [] + for index122 = 0 + index122 < mbt_ffi_load32(iter_base + 72) + index122 = index122 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 68) + index122 * 68 + + let result80 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result81 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let result82 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + let array85 : Array[@common.Example] = [] + for index86 = 0 + index86 < mbt_ffi_load32(iter_base + 28) + index86 = index86 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index86 * 16 + + let result83 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result84 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + array85.push(@common.Example::{ title: result83, body: result84 }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + let lifted88 : String? = match mbt_ffi_load8_u(iter_base + 32) { + 0 => Option::None + 1 => { + let result87 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 36), + mbt_ffi_load32(iter_base + 40), + ) + + Option::Some(result87) + } + _ => panic() + } + + let lifted120 : @types.SchemaValueTree? = match + mbt_ffi_load8_u(iter_base + 48) { + 0 => Option::None + 1 => { + let array118 : Array[@types.SchemaValueNode] = [] + for index119 = 0 + index119 < mbt_ffi_load32(iter_base + 56) + index119 = index119 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 52) + index119 * 32 + + let lifted117 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue( + mbt_ffi_load8_u(iter_base + 8) != 0, + ) + 1 => + @types.SchemaValueNode::S8Value( + mbt_ffi_load8(iter_base + 8), + ) + 2 => + @types.SchemaValueNode::S16Value( + mbt_ffi_load16(iter_base + 8), + ) + 3 => + @types.SchemaValueNode::S32Value( + mbt_ffi_load32(iter_base + 8), + ) + 4 => + @types.SchemaValueNode::S64Value( + mbt_ffi_load64(iter_base + 8), + ) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8) + .land(0xFFFF) + .reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => + @types.SchemaValueNode::F32Value( + mbt_ffi_loadf32(iter_base + 8), + ) + 10 => + @types.SchemaValueNode::F64Value( + mbt_ffi_loadf64(iter_base + 8), + ) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result89 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result89) + } + 13 => { + let array90 : Array[Int] = [] + for index91 = 0 + index91 < mbt_ffi_load32(iter_base + 12) + index91 = index91 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index91 * 4 + + array90.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array90) + } + 14 => { + let lifted92 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted92, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array93 : Array[Bool] = [] + for index94 = 0 + index94 < mbt_ffi_load32(iter_base + 12) + index94 = index94 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index94 * 1 + + array93.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array93) + } + 17 => { + let array95 : Array[Int] = [] + for index96 = 0 + index96 < mbt_ffi_load32(iter_base + 12) + index96 = index96 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index96 * 4 + + array95.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array95) + } + 18 => { + let array97 : Array[Int] = [] + for index98 = 0 + index98 < mbt_ffi_load32(iter_base + 12) + index98 = index98 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index98 * 4 + + array97.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array97) + } + 19 => { + let array99 : Array[Int] = [] + for index100 = 0 + index100 < mbt_ffi_load32(iter_base + 12) + index100 = index100 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index100 * 4 + + array99.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array99) + } + 20 => { + let array101 : Array[@types.MapEntry] = [] + for index102 = 0 + index102 < mbt_ffi_load32(iter_base + 12) + index102 = index102 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index102 * 8 + + array101.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array101) + } + 21 => { + let lifted103 : Int? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted103) + } + 22 => { + let lifted106 = match mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted104 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted104) + } + 1 => { + let lifted105 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted105) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted106) + } + 23 => { + let result107 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted109 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result108 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result108) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result107, + language: lifted109, + }) + } + 24 => { + let result110 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted112 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result111 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result111) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result110, + mime_type: lifted112, + }) + } + 25 => { + let result113 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result113) + } + 26 => { + let result114 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result114) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result115 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result115, + }) + } + 30 => { + let result116 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result116, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken( + mbt_ffi_load32(iter_base + 8), + ), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ), + ) + _ => panic() + } + + array118.push(lifted117) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + + Option::Some(@types.SchemaValueTree::{ + value_nodes: array118, + root: mbt_ffi_load32(iter_base + 60), + }) + } + _ => panic() + } + + array121.push(@common.Positional::{ + name: result80, + doc: @common.Doc::{ + summary: result81, + description: result82, + examples: array85, + }, + value_name: lifted88, + type_: mbt_ffi_load32(iter_base + 44), + default: lifted120, + required: mbt_ffi_load8_u(iter_base + 64) != 0, + accepts_stdio: mbt_ffi_load8_u(iter_base + 65) != 0, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + + let lifted135 : @common.TailPositional? = match + mbt_ffi_load8_u(iter_base + 76) { + 0 => Option::None + 1 => { + let result123 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 80), + mbt_ffi_load32(iter_base + 84), + ) + + let result124 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 88), + mbt_ffi_load32(iter_base + 92), + ) + + let result125 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 96), + mbt_ffi_load32(iter_base + 100), + ) + + let array128 : Array[@common.Example] = [] + for index129 = 0 + index129 < mbt_ffi_load32(iter_base + 108) + index129 = index129 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 104) + index129 * 16 + + let result126 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result127 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + array128.push(@common.Example::{ + title: result126, + body: result127, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + + let lifted131 : String? = match mbt_ffi_load8_u(iter_base + 112) { + 0 => Option::None + 1 => { + let result130 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 116), + mbt_ffi_load32(iter_base + 120), + ) + + Option::Some(result130) + } + _ => panic() + } + + let lifted132 : UInt? = match mbt_ffi_load8_u(iter_base + 132) { + 0 => Option::None + 1 => + Option::Some( + mbt_ffi_load32(iter_base + 136).reinterpret_as_uint(), + ) + _ => panic() + } + + let lifted134 : String? = match mbt_ffi_load8_u(iter_base + 140) { + 0 => Option::None + 1 => { + let result133 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 144), + mbt_ffi_load32(iter_base + 148), + ) + + Option::Some(result133) + } + _ => panic() + } + + Option::Some(@common.TailPositional::{ + name: result123, + doc: @common.Doc::{ + summary: result124, + description: result125, + examples: array128, + }, + value_name: lifted131, + item_type: mbt_ffi_load32(iter_base + 124), + min: mbt_ffi_load32(iter_base + 128).reinterpret_as_uint(), + max: lifted132, + separator: lifted134, + verbatim: mbt_ffi_load8_u(iter_base + 152) != 0, + accepts_stdio: mbt_ffi_load8_u(iter_base + 153) != 0, + }) + } + _ => panic() + } + + let array186 : Array[@common.OptionSpec] = [] + for index187 = 0 + index187 < mbt_ffi_load32(iter_base + 160) + index187 = index187 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 156) + index187 * 112 + + let result136 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted137 : Char? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => + Option::Some(Int::unsafe_to_char(mbt_ffi_load32(iter_base + 12))) + _ => panic() + } + + let array139 : Array[String] = [] + for index140 = 0 + index140 < mbt_ffi_load32(iter_base + 20) + index140 = index140 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index140 * 8 + + let result138 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array139.push(result138) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + let result141 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 24), + mbt_ffi_load32(iter_base + 28), + ) + + let result142 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 32), + mbt_ffi_load32(iter_base + 36), + ) + + let array145 : Array[@common.Example] = [] + for index146 = 0 + index146 < mbt_ffi_load32(iter_base + 44) + index146 = index146 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index146 * 16 + + let result143 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result144 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + array145.push(@common.Example::{ title: result143, body: result144 }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + let lifted148 : String? = match mbt_ffi_load8_u(iter_base + 48) { + 0 => Option::None + 1 => { + let result147 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 52), + mbt_ffi_load32(iter_base + 56), + ) + + Option::Some(result147) + } + _ => panic() + } + + let lifted151 = match mbt_ffi_load8_u(iter_base + 60) { + 0 => @common.OptionShape::Scalar(mbt_ffi_load32(iter_base + 64)) + 1 => + @common.OptionShape::OptionalScalar( + mbt_ffi_load32(iter_base + 64), + ) + 2 => { + let lifted149 = match mbt_ffi_load8_u(iter_base + 64) { + 0 => @common.Repetition::Repeated + 1 => + @common.Repetition::Delimited( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 68)), + ) + 2 => + @common.Repetition::Either( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 68)), + ) + _ => panic() + } + + @common.OptionShape::RepeatableList(@common.RepeatableListShape::{ + repetition: lifted149, + item_type: mbt_ffi_load32(iter_base + 72), + }) + } + 3 => { + let lifted150 = match mbt_ffi_load8_u(iter_base + 64) { + 0 => @common.Repetition::Repeated + 1 => + @common.Repetition::Delimited( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 68)), + ) + 2 => + @common.Repetition::Either( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 68)), + ) + _ => panic() + } + + @common.OptionShape::RepeatableMap(@common.RepeatableMapShape::{ + repetition: lifted150, + map_type: mbt_ffi_load32(iter_base + 72), + duplicate_key_policy: @common.DuplicateKeyPolicy::from( + mbt_ffi_load8_u(iter_base + 76), + ), + }) + } + _ => panic() + } + + let lifted183 : @types.SchemaValueTree? = match + mbt_ffi_load8_u(iter_base + 80) { + 0 => Option::None + 1 => { + let array181 : Array[@types.SchemaValueNode] = [] + for index182 = 0 + index182 < mbt_ffi_load32(iter_base + 88) + index182 = index182 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 84) + index182 * 32 + + let lifted180 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue( + mbt_ffi_load8_u(iter_base + 8) != 0, + ) + 1 => + @types.SchemaValueNode::S8Value( + mbt_ffi_load8(iter_base + 8), + ) + 2 => + @types.SchemaValueNode::S16Value( + mbt_ffi_load16(iter_base + 8), + ) + 3 => + @types.SchemaValueNode::S32Value( + mbt_ffi_load32(iter_base + 8), + ) + 4 => + @types.SchemaValueNode::S64Value( + mbt_ffi_load64(iter_base + 8), + ) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8) + .land(0xFFFF) + .reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => + @types.SchemaValueNode::F32Value( + mbt_ffi_loadf32(iter_base + 8), + ) + 10 => + @types.SchemaValueNode::F64Value( + mbt_ffi_loadf64(iter_base + 8), + ) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result152 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result152) + } + 13 => { + let array153 : Array[Int] = [] + for index154 = 0 + index154 < mbt_ffi_load32(iter_base + 12) + index154 = index154 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index154 * 4 + + array153.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array153) + } + 14 => { + let lifted155 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted155, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array156 : Array[Bool] = [] + for index157 = 0 + index157 < mbt_ffi_load32(iter_base + 12) + index157 = index157 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index157 * 1 + + array156.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array156) + } + 17 => { + let array158 : Array[Int] = [] + for index159 = 0 + index159 < mbt_ffi_load32(iter_base + 12) + index159 = index159 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index159 * 4 + + array158.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array158) + } + 18 => { + let array160 : Array[Int] = [] + for index161 = 0 + index161 < mbt_ffi_load32(iter_base + 12) + index161 = index161 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index161 * 4 + + array160.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array160) + } + 19 => { + let array162 : Array[Int] = [] + for index163 = 0 + index163 < mbt_ffi_load32(iter_base + 12) + index163 = index163 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index163 * 4 + + array162.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array162) + } + 20 => { + let array164 : Array[@types.MapEntry] = [] + for index165 = 0 + index165 < mbt_ffi_load32(iter_base + 12) + index165 = index165 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index165 * 8 + + array164.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array164) + } + 21 => { + let lifted166 : Int? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted166) + } + 22 => { + let lifted169 = match mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted167 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted167) + } + 1 => { + let lifted168 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted168) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted169) + } + 23 => { + let result170 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted172 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result171 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result171) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result170, + language: lifted172, + }) + } + 24 => { + let result173 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted175 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result174 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result174) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result173, + mime_type: lifted175, + }) + } + 25 => { + let result176 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result176) + } + 26 => { + let result177 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result177) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result178 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result178, + }) + } + 30 => { + let result179 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result179, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken( + mbt_ffi_load32(iter_base + 8), + ), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ), + ) + _ => panic() + } + + array181.push(lifted180) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + + Option::Some(@types.SchemaValueTree::{ + value_nodes: array181, + root: mbt_ffi_load32(iter_base + 92), + }) + } + _ => panic() + } + + let lifted185 : String? = match mbt_ffi_load8_u(iter_base + 100) { + 0 => Option::None + 1 => { + let result184 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 104), + mbt_ffi_load32(iter_base + 108), + ) + + Option::Some(result184) + } + _ => panic() + } + + array186.push(@common.OptionSpec::{ + long: result136, + short: lifted137, + aliases: array139, + doc: @common.Doc::{ + summary: result141, + description: result142, + examples: array145, + }, + value_name: lifted148, + shape: lifted151, + default: lifted183, + required: mbt_ffi_load8_u(iter_base + 96) != 0, + env_var: lifted185, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 156)) + + let array203 : Array[@common.FlagSpec] = [] + for index204 = 0 + index204 < mbt_ffi_load32(iter_base + 168) + index204 = index204 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 164) + index204 * 72 + + let result188 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted189 : Char? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => + Option::Some(Int::unsafe_to_char(mbt_ffi_load32(iter_base + 12))) + _ => panic() + } + + let array191 : Array[String] = [] + for index192 = 0 + index192 < mbt_ffi_load32(iter_base + 20) + index192 = index192 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index192 * 8 + + let result190 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array191.push(result190) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + let result193 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 24), + mbt_ffi_load32(iter_base + 28), + ) + + let result194 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 32), + mbt_ffi_load32(iter_base + 36), + ) + + let array197 : Array[@common.Example] = [] + for index198 = 0 + index198 < mbt_ffi_load32(iter_base + 44) + index198 = index198 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index198 * 16 + + let result195 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result196 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + array197.push(@common.Example::{ title: result195, body: result196 }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + let lifted200 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @common.FlagShape::BoolFlag(@common.BoolFlagShape::{ + default: mbt_ffi_load8_u(iter_base + 52) != 0, + negatable: mbt_ffi_load8_u(iter_base + 53) != 0, + }) + 1 => { + let lifted199 : UInt? = match mbt_ffi_load8_u(iter_base + 52) { + 0 => Option::None + 1 => + Option::Some( + mbt_ffi_load32(iter_base + 56).reinterpret_as_uint(), + ) + _ => panic() + } + + @common.FlagShape::CountFlag(lifted199) + } + _ => panic() + } + + let lifted202 : String? = match mbt_ffi_load8_u(iter_base + 60) { + 0 => Option::None + 1 => { + let result201 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 64), + mbt_ffi_load32(iter_base + 68), + ) + + Option::Some(result201) + } + _ => panic() + } + + array203.push(@common.FlagSpec::{ + long: result188, + short: lifted189, + aliases: array191, + doc: @common.Doc::{ + summary: result193, + description: result194, + examples: array197, + }, + shape: lifted200, + env_var: lifted202, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 164)) + + let array496 : Array[@common.Constraint] = [] + for index497 = 0 + index497 < mbt_ffi_load32(iter_base + 176) + index497 = index497 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 172) + index497 * 28 + + let lifted495 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => { + let array239 : Array[@common.Ref] = [] + for index240 = 0 + index240 < mbt_ffi_load32(iter_base + 8) + index240 = index240 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + index240 * 24 + + let lifted238 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => { + let result205 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + @common.Ref::Present(result205) + } + 1 => { + let result206 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + let array236 : Array[@types.SchemaValueNode] = [] + for index237 = 0 + index237 < mbt_ffi_load32(iter_base + 16) + index237 = index237 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index237 * 32 + + let lifted235 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue( + mbt_ffi_load8_u(iter_base + 8) != 0, + ) + 1 => + @types.SchemaValueNode::S8Value( + mbt_ffi_load8(iter_base + 8), + ) + 2 => + @types.SchemaValueNode::S16Value( + mbt_ffi_load16(iter_base + 8), + ) + 3 => + @types.SchemaValueNode::S32Value( + mbt_ffi_load32(iter_base + 8), + ) + 4 => + @types.SchemaValueNode::S64Value( + mbt_ffi_load64(iter_base + 8), + ) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8) + .land(0xFFFF) + .reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => + @types.SchemaValueNode::F32Value( + mbt_ffi_loadf32(iter_base + 8), + ) + 10 => + @types.SchemaValueNode::F64Value( + mbt_ffi_loadf64(iter_base + 8), + ) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result207 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result207) + } + 13 => { + let array208 : Array[Int] = [] + for index209 = 0 + index209 < mbt_ffi_load32(iter_base + 12) + index209 = index209 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index209 * 4 + + array208.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array208) + } + 14 => { + let lifted210 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted210, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array211 : Array[Bool] = [] + for index212 = 0 + index212 < mbt_ffi_load32(iter_base + 12) + index212 = index212 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index212 * 1 + + array211.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array211) + } + 17 => { + let array213 : Array[Int] = [] + for index214 = 0 + index214 < mbt_ffi_load32(iter_base + 12) + index214 = index214 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index214 * 4 + + array213.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array213) + } + 18 => { + let array215 : Array[Int] = [] + for index216 = 0 + index216 < mbt_ffi_load32(iter_base + 12) + index216 = index216 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index216 * 4 + + array215.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array215) + } + 19 => { + let array217 : Array[Int] = [] + for index218 = 0 + index218 < mbt_ffi_load32(iter_base + 12) + index218 = index218 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index218 * 4 + + array217.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array217) + } + 20 => { + let array219 : Array[@types.MapEntry] = [] + for index220 = 0 + index220 < mbt_ffi_load32(iter_base + 12) + index220 = index220 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index220 * 8 + + array219.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array219) + } + 21 => { + let lifted221 : Int? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted221) + } + 22 => { + let lifted224 = match mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted222 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted222) + } + 1 => { + let lifted223 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted223) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted224) + } + 23 => { + let result225 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted227 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result226 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result226) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result225, + language: lifted227, + }) + } + 24 => { + let result228 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted230 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result229 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result229) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result228, + mime_type: lifted230, + }) + } + 25 => { + let result231 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result231) + } + 26 => { + let result232 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result232) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result233 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result233, + }) + } + 30 => { + let result234 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result234, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken( + mbt_ffi_load32(iter_base + 8), + ), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ), + ) + _ => panic() + } + + array236.push(lifted235) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + @common.Ref::ValueIs(@common.ValueIsRef::{ + name: result206, + value: @types.SchemaValueTree::{ + value_nodes: array236, + root: mbt_ffi_load32(iter_base + 20), + }, + }) + } + _ => panic() + } + + array239.push(lifted238) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + @common.Constraint::RequiresAll(array239) + } + 1 => { + let array275 : Array[@common.Ref] = [] + for index276 = 0 + index276 < mbt_ffi_load32(iter_base + 8) + index276 = index276 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + index276 * 24 + + let lifted274 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => { + let result241 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + @common.Ref::Present(result241) + } + 1 => { + let result242 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + let array272 : Array[@types.SchemaValueNode] = [] + for index273 = 0 + index273 < mbt_ffi_load32(iter_base + 16) + index273 = index273 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index273 * 32 + + let lifted271 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue( + mbt_ffi_load8_u(iter_base + 8) != 0, + ) + 1 => + @types.SchemaValueNode::S8Value( + mbt_ffi_load8(iter_base + 8), + ) + 2 => + @types.SchemaValueNode::S16Value( + mbt_ffi_load16(iter_base + 8), + ) + 3 => + @types.SchemaValueNode::S32Value( + mbt_ffi_load32(iter_base + 8), + ) + 4 => + @types.SchemaValueNode::S64Value( + mbt_ffi_load64(iter_base + 8), + ) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8) + .land(0xFFFF) + .reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => + @types.SchemaValueNode::F32Value( + mbt_ffi_loadf32(iter_base + 8), + ) + 10 => + @types.SchemaValueNode::F64Value( + mbt_ffi_loadf64(iter_base + 8), + ) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result243 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result243) + } + 13 => { + let array244 : Array[Int] = [] + for index245 = 0 + index245 < mbt_ffi_load32(iter_base + 12) + index245 = index245 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index245 * 4 + + array244.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array244) + } + 14 => { + let lifted246 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted246, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array247 : Array[Bool] = [] + for index248 = 0 + index248 < mbt_ffi_load32(iter_base + 12) + index248 = index248 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index248 * 1 + + array247.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array247) + } + 17 => { + let array249 : Array[Int] = [] + for index250 = 0 + index250 < mbt_ffi_load32(iter_base + 12) + index250 = index250 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index250 * 4 + + array249.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array249) + } + 18 => { + let array251 : Array[Int] = [] + for index252 = 0 + index252 < mbt_ffi_load32(iter_base + 12) + index252 = index252 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index252 * 4 + + array251.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array251) + } + 19 => { + let array253 : Array[Int] = [] + for index254 = 0 + index254 < mbt_ffi_load32(iter_base + 12) + index254 = index254 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index254 * 4 + + array253.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array253) + } + 20 => { + let array255 : Array[@types.MapEntry] = [] + for index256 = 0 + index256 < mbt_ffi_load32(iter_base + 12) + index256 = index256 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index256 * 8 + + array255.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array255) + } + 21 => { + let lifted257 : Int? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted257) + } + 22 => { + let lifted260 = match mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted258 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted258) + } + 1 => { + let lifted259 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted259) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted260) + } + 23 => { + let result261 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted263 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result262 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result262) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result261, + language: lifted263, + }) + } + 24 => { + let result264 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted266 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result265 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result265) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result264, + mime_type: lifted266, + }) + } + 25 => { + let result267 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result267) + } + 26 => { + let result268 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result268) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result269 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result269, + }) + } + 30 => { + let result270 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result270, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken( + mbt_ffi_load32(iter_base + 8), + ), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ), + ) + _ => panic() + } + + array272.push(lifted271) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + @common.Ref::ValueIs(@common.ValueIsRef::{ + name: result242, + value: @types.SchemaValueTree::{ + value_nodes: array272, + root: mbt_ffi_load32(iter_base + 20), + }, + }) + } + _ => panic() + } + + array275.push(lifted274) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + @common.Constraint::AllOrNone(array275) + } + 2 => { + let array311 : Array[@common.Ref] = [] + for index312 = 0 + index312 < mbt_ffi_load32(iter_base + 8) + index312 = index312 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + index312 * 24 + + let lifted310 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => { + let result277 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + @common.Ref::Present(result277) + } + 1 => { + let result278 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + let array308 : Array[@types.SchemaValueNode] = [] + for index309 = 0 + index309 < mbt_ffi_load32(iter_base + 16) + index309 = index309 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index309 * 32 + + let lifted307 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue( + mbt_ffi_load8_u(iter_base + 8) != 0, + ) + 1 => + @types.SchemaValueNode::S8Value( + mbt_ffi_load8(iter_base + 8), + ) + 2 => + @types.SchemaValueNode::S16Value( + mbt_ffi_load16(iter_base + 8), + ) + 3 => + @types.SchemaValueNode::S32Value( + mbt_ffi_load32(iter_base + 8), + ) + 4 => + @types.SchemaValueNode::S64Value( + mbt_ffi_load64(iter_base + 8), + ) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8) + .land(0xFFFF) + .reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => + @types.SchemaValueNode::F32Value( + mbt_ffi_loadf32(iter_base + 8), + ) + 10 => + @types.SchemaValueNode::F64Value( + mbt_ffi_loadf64(iter_base + 8), + ) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result279 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result279) + } + 13 => { + let array280 : Array[Int] = [] + for index281 = 0 + index281 < mbt_ffi_load32(iter_base + 12) + index281 = index281 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index281 * 4 + + array280.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array280) + } + 14 => { + let lifted282 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted282, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array283 : Array[Bool] = [] + for index284 = 0 + index284 < mbt_ffi_load32(iter_base + 12) + index284 = index284 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index284 * 1 + + array283.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array283) + } + 17 => { + let array285 : Array[Int] = [] + for index286 = 0 + index286 < mbt_ffi_load32(iter_base + 12) + index286 = index286 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index286 * 4 + + array285.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array285) + } + 18 => { + let array287 : Array[Int] = [] + for index288 = 0 + index288 < mbt_ffi_load32(iter_base + 12) + index288 = index288 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index288 * 4 + + array287.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array287) + } + 19 => { + let array289 : Array[Int] = [] + for index290 = 0 + index290 < mbt_ffi_load32(iter_base + 12) + index290 = index290 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index290 * 4 + + array289.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array289) + } + 20 => { + let array291 : Array[@types.MapEntry] = [] + for index292 = 0 + index292 < mbt_ffi_load32(iter_base + 12) + index292 = index292 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index292 * 8 + + array291.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array291) + } + 21 => { + let lifted293 : Int? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted293) + } + 22 => { + let lifted296 = match mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted294 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted294) + } + 1 => { + let lifted295 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted295) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted296) + } + 23 => { + let result297 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted299 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result298 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result298) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result297, + language: lifted299, + }) + } + 24 => { + let result300 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted302 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result301 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result301) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result300, + mime_type: lifted302, + }) + } + 25 => { + let result303 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result303) + } + 26 => { + let result304 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result304) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result305 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result305, + }) + } + 30 => { + let result306 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result306, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken( + mbt_ffi_load32(iter_base + 8), + ), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ), + ) + _ => panic() + } + + array308.push(lifted307) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + @common.Ref::ValueIs(@common.ValueIsRef::{ + name: result278, + value: @types.SchemaValueTree::{ + value_nodes: array308, + root: mbt_ffi_load32(iter_base + 20), + }, + }) + } + _ => panic() + } + + array311.push(lifted310) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + @common.Constraint::RequiresAny(array311) + } + 3 => { + let array349 : Array[@common.RefGroup] = [] + for index350 = 0 + index350 < mbt_ffi_load32(iter_base + 8) + index350 = index350 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + index350 * 8 + + let array347 : Array[@common.Ref] = [] + for index348 = 0 + index348 < mbt_ffi_load32(iter_base + 4) + index348 = index348 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 0) + index348 * 24 + + let lifted346 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => { + let result313 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + @common.Ref::Present(result313) + } + 1 => { + let result314 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + let array344 : Array[@types.SchemaValueNode] = [] + for index345 = 0 + index345 < mbt_ffi_load32(iter_base + 16) + index345 = index345 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index345 * 32 + + let lifted343 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue( + mbt_ffi_load8_u(iter_base + 8) != 0, + ) + 1 => + @types.SchemaValueNode::S8Value( + mbt_ffi_load8(iter_base + 8), + ) + 2 => + @types.SchemaValueNode::S16Value( + mbt_ffi_load16(iter_base + 8), + ) + 3 => + @types.SchemaValueNode::S32Value( + mbt_ffi_load32(iter_base + 8), + ) + 4 => + @types.SchemaValueNode::S64Value( + mbt_ffi_load64(iter_base + 8), + ) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8) + .land(0xFFFF) + .reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => + @types.SchemaValueNode::F32Value( + mbt_ffi_loadf32(iter_base + 8), + ) + 10 => + @types.SchemaValueNode::F64Value( + mbt_ffi_loadf64(iter_base + 8), + ) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result315 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result315) + } + 13 => { + let array316 : Array[Int] = [] + for index317 = 0 + index317 < mbt_ffi_load32(iter_base + 12) + index317 = index317 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index317 * 4 + + array316.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array316) + } + 14 => { + let lifted318 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted318, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array319 : Array[Bool] = [] + for index320 = 0 + index320 < mbt_ffi_load32(iter_base + 12) + index320 = index320 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index320 * 1 + + array319.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array319) + } + 17 => { + let array321 : Array[Int] = [] + for index322 = 0 + index322 < mbt_ffi_load32(iter_base + 12) + index322 = index322 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index322 * 4 + + array321.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array321) + } + 18 => { + let array323 : Array[Int] = [] + for index324 = 0 + index324 < mbt_ffi_load32(iter_base + 12) + index324 = index324 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index324 * 4 + + array323.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array323) + } + 19 => { + let array325 : Array[Int] = [] + for index326 = 0 + index326 < mbt_ffi_load32(iter_base + 12) + index326 = index326 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index326 * 4 + + array325.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array325) + } + 20 => { + let array327 : Array[@types.MapEntry] = [] + for index328 = 0 + index328 < mbt_ffi_load32(iter_base + 12) + index328 = index328 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index328 * 8 + + array327.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array327) + } + 21 => { + let lifted329 : Int? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted329) + } + 22 => { + let lifted332 = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted330 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted330) + } + 1 => { + let lifted331 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted331) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted332) + } + 23 => { + let result333 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted335 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result334 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result334) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result333, + language: lifted335, + }) + } + 24 => { + let result336 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted338 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result337 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result337) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result336, + mime_type: lifted338, + }) + } + 25 => { + let result339 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result339) + } + 26 => { + let result340 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result340) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result341 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result341, + }) + } + 30 => { + let result342 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result342, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret( + mbt_ffi_load32(iter_base + 8), + ), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken( + mbt_ffi_load32(iter_base + 8), + ), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ), + ) + _ => panic() + } + + array344.push(lifted343) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + @common.Ref::ValueIs(@common.ValueIsRef::{ + name: result314, + value: @types.SchemaValueTree::{ + value_nodes: array344, + root: mbt_ffi_load32(iter_base + 20), + }, + }) + } + _ => panic() + } + + array347.push(lifted346) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + array349.push(@common.RefGroup::{ refs: array347 }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + @common.Constraint::MutexGroups(array349) + } + 4 => { + let array385 : Array[@common.Ref] = [] + for index386 = 0 + index386 < mbt_ffi_load32(iter_base + 12) + index386 = index386 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index386 * 24 + + let lifted384 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => { + let result351 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + @common.Ref::Present(result351) + } + 1 => { + let result352 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + let array382 : Array[@types.SchemaValueNode] = [] + for index383 = 0 + index383 < mbt_ffi_load32(iter_base + 16) + index383 = index383 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index383 * 32 + + let lifted381 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue( + mbt_ffi_load8_u(iter_base + 8) != 0, + ) + 1 => + @types.SchemaValueNode::S8Value( + mbt_ffi_load8(iter_base + 8), + ) + 2 => + @types.SchemaValueNode::S16Value( + mbt_ffi_load16(iter_base + 8), + ) + 3 => + @types.SchemaValueNode::S32Value( + mbt_ffi_load32(iter_base + 8), + ) + 4 => + @types.SchemaValueNode::S64Value( + mbt_ffi_load64(iter_base + 8), + ) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8) + .land(0xFFFF) + .reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => + @types.SchemaValueNode::F32Value( + mbt_ffi_loadf32(iter_base + 8), + ) + 10 => + @types.SchemaValueNode::F64Value( + mbt_ffi_loadf64(iter_base + 8), + ) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result353 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result353) + } + 13 => { + let array354 : Array[Int] = [] + for index355 = 0 + index355 < mbt_ffi_load32(iter_base + 12) + index355 = index355 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index355 * 4 + + array354.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array354) + } + 14 => { + let lifted356 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted356, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array357 : Array[Bool] = [] + for index358 = 0 + index358 < mbt_ffi_load32(iter_base + 12) + index358 = index358 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index358 * 1 + + array357.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array357) + } + 17 => { + let array359 : Array[Int] = [] + for index360 = 0 + index360 < mbt_ffi_load32(iter_base + 12) + index360 = index360 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index360 * 4 + + array359.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array359) + } + 18 => { + let array361 : Array[Int] = [] + for index362 = 0 + index362 < mbt_ffi_load32(iter_base + 12) + index362 = index362 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index362 * 4 + + array361.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array361) + } + 19 => { + let array363 : Array[Int] = [] + for index364 = 0 + index364 < mbt_ffi_load32(iter_base + 12) + index364 = index364 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index364 * 4 + + array363.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array363) + } + 20 => { + let array365 : Array[@types.MapEntry] = [] + for index366 = 0 + index366 < mbt_ffi_load32(iter_base + 12) + index366 = index366 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index366 * 8 + + array365.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array365) + } + 21 => { + let lifted367 : Int? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted367) + } + 22 => { + let lifted370 = match mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted368 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted368) + } + 1 => { + let lifted369 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted369) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted370) + } + 23 => { + let result371 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted373 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result372 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result372) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result371, + language: lifted373, + }) + } + 24 => { + let result374 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted376 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result375 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result375) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result374, + mime_type: lifted376, + }) + } + 25 => { + let result377 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result377) + } + 26 => { + let result378 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result378) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result379 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result379, + }) + } + 30 => { + let result380 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result380, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken( + mbt_ffi_load32(iter_base + 8), + ), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ), + ) + _ => panic() + } + + array382.push(lifted381) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + @common.Ref::ValueIs(@common.ValueIsRef::{ + name: result352, + value: @types.SchemaValueTree::{ + value_nodes: array382, + root: mbt_ffi_load32(iter_base + 20), + }, + }) + } + _ => panic() + } + + array385.push(lifted384) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + let array421 : Array[@common.Ref] = [] + for index422 = 0 + index422 < mbt_ffi_load32(iter_base + 24) + index422 = index422 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 20) + index422 * 24 + + let lifted420 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => { + let result387 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + @common.Ref::Present(result387) + } + 1 => { + let result388 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + let array418 : Array[@types.SchemaValueNode] = [] + for index419 = 0 + index419 < mbt_ffi_load32(iter_base + 16) + index419 = index419 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index419 * 32 + + let lifted417 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue( + mbt_ffi_load8_u(iter_base + 8) != 0, + ) + 1 => + @types.SchemaValueNode::S8Value( + mbt_ffi_load8(iter_base + 8), + ) + 2 => + @types.SchemaValueNode::S16Value( + mbt_ffi_load16(iter_base + 8), + ) + 3 => + @types.SchemaValueNode::S32Value( + mbt_ffi_load32(iter_base + 8), + ) + 4 => + @types.SchemaValueNode::S64Value( + mbt_ffi_load64(iter_base + 8), + ) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8) + .land(0xFFFF) + .reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => + @types.SchemaValueNode::F32Value( + mbt_ffi_loadf32(iter_base + 8), + ) + 10 => + @types.SchemaValueNode::F64Value( + mbt_ffi_loadf64(iter_base + 8), + ) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result389 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result389) + } + 13 => { + let array390 : Array[Int] = [] + for index391 = 0 + index391 < mbt_ffi_load32(iter_base + 12) + index391 = index391 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index391 * 4 + + array390.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array390) + } + 14 => { + let lifted392 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted392, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array393 : Array[Bool] = [] + for index394 = 0 + index394 < mbt_ffi_load32(iter_base + 12) + index394 = index394 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index394 * 1 + + array393.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array393) + } + 17 => { + let array395 : Array[Int] = [] + for index396 = 0 + index396 < mbt_ffi_load32(iter_base + 12) + index396 = index396 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index396 * 4 + + array395.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array395) + } + 18 => { + let array397 : Array[Int] = [] + for index398 = 0 + index398 < mbt_ffi_load32(iter_base + 12) + index398 = index398 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index398 * 4 + + array397.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array397) + } + 19 => { + let array399 : Array[Int] = [] + for index400 = 0 + index400 < mbt_ffi_load32(iter_base + 12) + index400 = index400 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index400 * 4 + + array399.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array399) + } + 20 => { + let array401 : Array[@types.MapEntry] = [] + for index402 = 0 + index402 < mbt_ffi_load32(iter_base + 12) + index402 = index402 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index402 * 8 + + array401.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array401) + } + 21 => { + let lifted403 : Int? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted403) + } + 22 => { + let lifted406 = match mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted404 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted404) + } + 1 => { + let lifted405 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted405) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted406) + } + 23 => { + let result407 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted409 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result408 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result408) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result407, + language: lifted409, + }) + } + 24 => { + let result410 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted412 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result411 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result411) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result410, + mime_type: lifted412, + }) + } + 25 => { + let result413 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result413) + } + 26 => { + let result414 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result414) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result415 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result415, + }) + } + 30 => { + let result416 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result416, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken( + mbt_ffi_load32(iter_base + 8), + ), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ), + ) + _ => panic() + } + + array418.push(lifted417) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + @common.Ref::ValueIs(@common.ValueIsRef::{ + name: result388, + value: @types.SchemaValueTree::{ + value_nodes: array418, + root: mbt_ffi_load32(iter_base + 20), + }, + }) + } + _ => panic() + } + + array421.push(lifted420) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + + @common.Constraint::Implies(@common.ImpliesC::{ + lhs_quant: @common.Quantifier::from( + mbt_ffi_load8_u(iter_base + 4), + ), + lhs: array385, + rhs_quant: @common.Quantifier::from( + mbt_ffi_load8_u(iter_base + 16), + ), + rhs: array421, + }) + } + 5 => { + let array457 : Array[@common.Ref] = [] + for index458 = 0 + index458 < mbt_ffi_load32(iter_base + 12) + index458 = index458 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index458 * 24 + + let lifted456 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => { + let result423 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + @common.Ref::Present(result423) + } + 1 => { + let result424 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + let array454 : Array[@types.SchemaValueNode] = [] + for index455 = 0 + index455 < mbt_ffi_load32(iter_base + 16) + index455 = index455 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index455 * 32 + + let lifted453 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue( + mbt_ffi_load8_u(iter_base + 8) != 0, + ) + 1 => + @types.SchemaValueNode::S8Value( + mbt_ffi_load8(iter_base + 8), + ) + 2 => + @types.SchemaValueNode::S16Value( + mbt_ffi_load16(iter_base + 8), + ) + 3 => + @types.SchemaValueNode::S32Value( + mbt_ffi_load32(iter_base + 8), + ) + 4 => + @types.SchemaValueNode::S64Value( + mbt_ffi_load64(iter_base + 8), + ) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8) + .land(0xFFFF) + .reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => + @types.SchemaValueNode::F32Value( + mbt_ffi_loadf32(iter_base + 8), + ) + 10 => + @types.SchemaValueNode::F64Value( + mbt_ffi_loadf64(iter_base + 8), + ) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result425 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result425) + } + 13 => { + let array426 : Array[Int] = [] + for index427 = 0 + index427 < mbt_ffi_load32(iter_base + 12) + index427 = index427 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index427 * 4 + + array426.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array426) + } + 14 => { + let lifted428 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted428, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array429 : Array[Bool] = [] + for index430 = 0 + index430 < mbt_ffi_load32(iter_base + 12) + index430 = index430 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index430 * 1 + + array429.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array429) + } + 17 => { + let array431 : Array[Int] = [] + for index432 = 0 + index432 < mbt_ffi_load32(iter_base + 12) + index432 = index432 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index432 * 4 + + array431.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array431) + } + 18 => { + let array433 : Array[Int] = [] + for index434 = 0 + index434 < mbt_ffi_load32(iter_base + 12) + index434 = index434 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index434 * 4 + + array433.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array433) + } + 19 => { + let array435 : Array[Int] = [] + for index436 = 0 + index436 < mbt_ffi_load32(iter_base + 12) + index436 = index436 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index436 * 4 + + array435.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array435) + } + 20 => { + let array437 : Array[@types.MapEntry] = [] + for index438 = 0 + index438 < mbt_ffi_load32(iter_base + 12) + index438 = index438 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index438 * 8 + + array437.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array437) + } + 21 => { + let lifted439 : Int? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted439) + } + 22 => { + let lifted442 = match mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted440 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted440) + } + 1 => { + let lifted441 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted441) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted442) + } + 23 => { + let result443 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted445 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result444 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result444) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result443, + language: lifted445, + }) + } + 24 => { + let result446 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted448 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result447 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result447) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result446, + mime_type: lifted448, + }) + } + 25 => { + let result449 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result449) + } + 26 => { + let result450 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result450) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result451 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result451, + }) + } + 30 => { + let result452 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result452, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken( + mbt_ffi_load32(iter_base + 8), + ), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ), + ) + _ => panic() + } + + array454.push(lifted453) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + @common.Ref::ValueIs(@common.ValueIsRef::{ + name: result424, + value: @types.SchemaValueTree::{ + value_nodes: array454, + root: mbt_ffi_load32(iter_base + 20), + }, + }) + } + _ => panic() + } + + array457.push(lifted456) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + let array493 : Array[@common.Ref] = [] + for index494 = 0 + index494 < mbt_ffi_load32(iter_base + 20) + index494 = index494 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index494 * 24 + + let lifted492 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => { + let result459 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + @common.Ref::Present(result459) + } + 1 => { + let result460 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + let array490 : Array[@types.SchemaValueNode] = [] + for index491 = 0 + index491 < mbt_ffi_load32(iter_base + 16) + index491 = index491 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index491 * 32 + + let lifted489 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue( + mbt_ffi_load8_u(iter_base + 8) != 0, + ) + 1 => + @types.SchemaValueNode::S8Value( + mbt_ffi_load8(iter_base + 8), + ) + 2 => + @types.SchemaValueNode::S16Value( + mbt_ffi_load16(iter_base + 8), + ) + 3 => + @types.SchemaValueNode::S32Value( + mbt_ffi_load32(iter_base + 8), + ) + 4 => + @types.SchemaValueNode::S64Value( + mbt_ffi_load64(iter_base + 8), + ) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8) + .land(0xFFFF) + .reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => + @types.SchemaValueNode::F32Value( + mbt_ffi_loadf32(iter_base + 8), + ) + 10 => + @types.SchemaValueNode::F64Value( + mbt_ffi_loadf64(iter_base + 8), + ) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result461 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result461) + } + 13 => { + let array462 : Array[Int] = [] + for index463 = 0 + index463 < mbt_ffi_load32(iter_base + 12) + index463 = index463 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index463 * 4 + + array462.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array462) + } + 14 => { + let lifted464 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted464, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array465 : Array[Bool] = [] + for index466 = 0 + index466 < mbt_ffi_load32(iter_base + 12) + index466 = index466 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index466 * 1 + + array465.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array465) + } + 17 => { + let array467 : Array[Int] = [] + for index468 = 0 + index468 < mbt_ffi_load32(iter_base + 12) + index468 = index468 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index468 * 4 + + array467.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array467) + } + 18 => { + let array469 : Array[Int] = [] + for index470 = 0 + index470 < mbt_ffi_load32(iter_base + 12) + index470 = index470 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index470 * 4 + + array469.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array469) + } + 19 => { + let array471 : Array[Int] = [] + for index472 = 0 + index472 < mbt_ffi_load32(iter_base + 12) + index472 = index472 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index472 * 4 + + array471.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array471) + } + 20 => { + let array473 : Array[@types.MapEntry] = [] + for index474 = 0 + index474 < mbt_ffi_load32(iter_base + 12) + index474 = index474 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index474 * 8 + + array473.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array473) + } + 21 => { + let lifted475 : Int? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted475) + } + 22 => { + let lifted478 = match mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted476 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted476) + } + 1 => { + let lifted477 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted477) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted478) + } + 23 => { + let result479 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted481 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result480 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result480) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result479, + language: lifted481, + }) + } + 24 => { + let result482 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted484 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result483 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result483) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result482, + mime_type: lifted484, + }) + } + 25 => { + let result485 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result485) + } + 26 => { + let result486 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result486) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result487 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result487, + }) + } + 30 => { + let result488 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result488, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken( + mbt_ffi_load32(iter_base + 8), + ), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ), + ) + _ => panic() + } + + array490.push(lifted489) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + @common.Ref::ValueIs(@common.ValueIsRef::{ + name: result460, + value: @types.SchemaValueTree::{ + value_nodes: array490, + root: mbt_ffi_load32(iter_base + 20), + }, + }) + } + _ => panic() + } + + array493.push(lifted492) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + @common.Constraint::Forbids(@common.ForbidsC::{ + lhs_quant: @common.Quantifier::from( + mbt_ffi_load8_u(iter_base + 4), + ), + lhs: array457, + rhs: array493, + }) + } + _ => panic() + } + + array496.push(lifted495) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 172)) + + let lifted507 : @common.StreamSpec? = match + mbt_ffi_load8_u(iter_base + 180) { + 0 => Option::None + 1 => { + let result498 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 184), + mbt_ffi_load32(iter_base + 188), + ) + + let result499 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 192), + mbt_ffi_load32(iter_base + 196), + ) + + let array502 : Array[@common.Example] = [] + for index503 = 0 + index503 < mbt_ffi_load32(iter_base + 204) + index503 = index503 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 200) + index503 * 16 + + let result500 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result501 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + array502.push(@common.Example::{ + title: result500, + body: result501, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 200)) + + let array505 : Array[String] = [] + for index506 = 0 + index506 < mbt_ffi_load32(iter_base + 212) + index506 = index506 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 208) + index506 * 8 + + let result504 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array505.push(result504) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 208)) + + Option::Some(@common.StreamSpec::{ + doc: @common.Doc::{ + summary: result498, + description: result499, + examples: array502, + }, + mime: array505, + required: mbt_ffi_load8_u(iter_base + 216) != 0, + }) + } + _ => panic() + } + + let lifted517 : @common.StreamSpec? = match + mbt_ffi_load8_u(iter_base + 220) { + 0 => Option::None + 1 => { + let result508 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 224), + mbt_ffi_load32(iter_base + 228), + ) + + let result509 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 232), + mbt_ffi_load32(iter_base + 236), + ) + + let array512 : Array[@common.Example] = [] + for index513 = 0 + index513 < mbt_ffi_load32(iter_base + 244) + index513 = index513 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 240) + index513 * 16 + + let result510 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result511 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + array512.push(@common.Example::{ + title: result510, + body: result511, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 240)) + + let array515 : Array[String] = [] + for index516 = 0 + index516 < mbt_ffi_load32(iter_base + 252) + index516 = index516 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 248) + index516 * 8 + + let result514 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array515.push(result514) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 248)) + + Option::Some(@common.StreamSpec::{ + doc: @common.Doc::{ + summary: result508, + description: result509, + examples: array512, + }, + mime: array515, + required: mbt_ffi_load8_u(iter_base + 256) != 0, + }) + } + _ => panic() + } + + let lifted534 : @common.ResultSpec? = match + mbt_ffi_load8_u(iter_base + 260) { + 0 => Option::None + 1 => { + let result518 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 268), + mbt_ffi_load32(iter_base + 272), + ) + + let result519 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 276), + mbt_ffi_load32(iter_base + 280), + ) + + let array522 : Array[@common.Example] = [] + for index523 = 0 + index523 < mbt_ffi_load32(iter_base + 288) + index523 = index523 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 284) + index523 * 16 + + let result520 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result521 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + array522.push(@common.Example::{ + title: result520, + body: result521, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 284)) + + let array531 : Array[@common.Formatter] = [] + for index532 = 0 + index532 < mbt_ffi_load32(iter_base + 296) + index532 = index532 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 292) + index532 * 32 + + let result524 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result525 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let result526 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + let array529 : Array[@common.Example] = [] + for index530 = 0 + index530 < mbt_ffi_load32(iter_base + 28) + index530 = index530 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index530 * 16 + + let result527 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result528 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + array529.push(@common.Example::{ + title: result527, + body: result528, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + array531.push(@common.Formatter::{ + name: result524, + doc: @common.Doc::{ + summary: result525, + description: result526, + examples: array529, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 292)) + + let result533 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 300), + mbt_ffi_load32(iter_base + 304), + ) + + Option::Some(@common.ResultSpec::{ + type_: mbt_ffi_load32(iter_base + 264), + doc: @common.Doc::{ + summary: result518, + description: result519, + examples: array522, + }, + formatters: array531, + default_formatter: result533, + }) + } + _ => panic() + } + + let array543 : Array[@common.ErrorCase] = [] + for index544 = 0 + index544 < mbt_ffi_load32(iter_base + 312) + index544 = index544 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 308) + index544 * 44 + + let result535 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result536 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let result537 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + let array540 : Array[@common.Example] = [] + for index541 = 0 + index541 < mbt_ffi_load32(iter_base + 28) + index541 = index541 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index541 * 16 + + let result538 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result539 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + array540.push(@common.Example::{ title: result538, body: result539 }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + let lifted542 : Int? = match mbt_ffi_load8_u(iter_base + 36) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + + array543.push(@common.ErrorCase::{ + name: result535, + doc: @common.Doc::{ + summary: result536, + description: result537, + examples: array540, + }, + kind: @common.ErrorKind::from(mbt_ffi_load8_u(iter_base + 32)), + exit_code: mbt_ffi_load8_u(iter_base + 33).to_byte(), + payload: lifted542, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 308)) + + let lifted545 : @common.CommandAnnotations? = match + mbt_ffi_load8_u(iter_base + 316) { + 0 => Option::None + 1 => + Option::Some(@common.CommandAnnotations::{ + read_only: mbt_ffi_load8_u(iter_base + 317) != 0, + destructive: mbt_ffi_load8_u(iter_base + 318) != 0, + idempotent: mbt_ffi_load8_u(iter_base + 319) != 0, + open_world: mbt_ffi_load8_u(iter_base + 320) != 0, + }) + _ => panic() + } + + Option::Some(@common.CommandBody::{ + positionals: @common.Positionals::{ fixed: array121, tail: lifted135 }, + options: array186, + flags: array203, + constraints: array496, + stdin: lifted507, + stdout: lifted517, + result: lifted534, + errors: array543, + annotations: lifted545, + }) + } + _ => panic() + } + + array547.push(@common.CommandNode::{ + name: result2, + aliases: array, + doc: @common.Doc::{ + summary: result4, + description: result5, + examples: array8, + }, + globals: @common.Globals::{ options: array59, flags: array76 }, + subcommands: array78, + body: lifted546, + }) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 24)) + @common.CommandTree::{ nodes: array547 } +} + +///| +fn __wit_bindgen_lift_invoke_tool_schema(p0 : Int) -> @types.SchemaGraph { + let array745 : Array[@types.SchemaTypeNode] = [] + for index746 = 0; index746 < mbt_ffi_load32(p0 + 36); index746 = index746 + 1 { + let iter_base = mbt_ffi_load32(p0 + 32) + index746 * 144 + + let lifted731 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => @types.SchemaTypeBody::RefType(mbt_ffi_load32(iter_base + 8)) + 1 => @types.SchemaTypeBody::BoolType + 2 => { + let lifted555 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted550 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted549 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted549) + } + _ => panic() + } + + let lifted552 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted551 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted551) + } + _ => panic() + } + + let lifted554 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result553 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result553) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted550, + max: lifted552, + unit: lifted554, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::S8Type(lifted555) + } + 3 => { + let lifted562 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted557 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted556 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted556) + } + _ => panic() + } + + let lifted559 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted558 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted558) + } + _ => panic() + } + + let lifted561 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result560 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result560) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted557, + max: lifted559, + unit: lifted561, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::S16Type(lifted562) + } + 4 => { + let lifted569 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted564 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted563 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted563) + } + _ => panic() + } + + let lifted566 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted565 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted565) + } + _ => panic() + } + + let lifted568 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result567 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result567) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted564, + max: lifted566, + unit: lifted568, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::S32Type(lifted569) + } + 5 => { + let lifted576 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted571 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted570 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted570) + } + _ => panic() + } + + let lifted573 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted572 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted572) + } + _ => panic() + } + + let lifted575 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result574 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result574) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted571, + max: lifted573, + unit: lifted575, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::S64Type(lifted576) + } + 6 => { + let lifted583 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted578 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted577 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted577) + } + _ => panic() + } + + let lifted580 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted579 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted579) + } + _ => panic() + } + + let lifted582 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result581 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result581) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted578, + max: lifted580, + unit: lifted582, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::U8Type(lifted583) + } + 7 => { + let lifted590 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted585 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted584 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted584) + } + _ => panic() + } + + let lifted587 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted586 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted586) + } + _ => panic() + } + + let lifted589 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result588 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result588) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted585, + max: lifted587, + unit: lifted589, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::U16Type(lifted590) + } + 8 => { + let lifted597 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted592 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted591 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted591) + } + _ => panic() + } + + let lifted594 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted593 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted593) + } + _ => panic() + } + + let lifted596 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result595 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result595) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted592, + max: lifted594, + unit: lifted596, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::U32Type(lifted597) + } + 9 => { + let lifted604 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted599 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted598 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted598) + } + _ => panic() + } + + let lifted601 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted600 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted600) + } + _ => panic() + } + + let lifted603 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result602 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result602) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted599, + max: lifted601, + unit: lifted603, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::U64Type(lifted604) + } + 10 => { + let lifted611 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted606 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted605 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted605) + } + _ => panic() + } + + let lifted608 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted607 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted607) + } + _ => panic() + } + + let lifted610 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result609 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result609) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted606, + max: lifted608, + unit: lifted610, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::F32Type(lifted611) + } + 11 => { + let lifted618 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted613 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted612 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted612) + } + _ => panic() + } + + let lifted615 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted614 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted614) + } + _ => panic() + } + + let lifted617 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result616 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result616) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted613, + max: lifted615, + unit: lifted617, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::F64Type(lifted618) + } + 12 => @types.SchemaTypeBody::CharType + 13 => @types.SchemaTypeBody::StringType + 14 => { + let array633 : Array[@types.NamedFieldType] = [] + for index634 = 0 + index634 < mbt_ffi_load32(iter_base + 12) + index634 = index634 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index634 * 68 + + let result619 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted621 : String? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => { + let result620 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + Option::Some(result620) + } + _ => panic() + } + + let array623 : Array[String] = [] + for index624 = 0 + index624 < mbt_ffi_load32(iter_base + 28) + index624 = index624 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index624 * 8 + + let result622 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array623.push(result622) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + let array626 : Array[String] = [] + for index627 = 0 + index627 < mbt_ffi_load32(iter_base + 36) + index627 = index627 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index627 * 8 + + let result625 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array626.push(result625) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + let lifted629 : String? = match mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let result628 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 44), + mbt_ffi_load32(iter_base + 48), + ) + + Option::Some(result628) + } + _ => panic() + } + + let lifted632 : @types.Role? = match mbt_ffi_load8_u(iter_base + 52) { + 0 => Option::None + 1 => { + let lifted631 = match mbt_ffi_load8_u(iter_base + 56) { + 0 => @types.Role::Multimodal + 1 => @types.Role::UnstructuredText + 2 => @types.Role::UnstructuredBinary + 3 => { + let result630 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 60), + mbt_ffi_load32(iter_base + 64), + ) + + @types.Role::Other(result630) + } + _ => panic() + } + + Option::Some(lifted631) + } + _ => panic() + } + + array633.push(@types.NamedFieldType::{ + name: result619, + body: mbt_ffi_load32(iter_base + 8), + metadata: @types.MetadataEnvelope::{ + doc: lifted621, + aliases: array623, + examples: array626, + deprecated: lifted629, + role: lifted632, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::RecordType(array633) + } + 15 => { + let array650 : Array[@types.VariantCaseType] = [] + for index651 = 0 + index651 < mbt_ffi_load32(iter_base + 12) + index651 = index651 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index651 * 72 + + let result635 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted636 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + let lifted638 : String? = match mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result637 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result637) + } + _ => panic() + } + + let array640 : Array[String] = [] + for index641 = 0 + index641 < mbt_ffi_load32(iter_base + 32) + index641 = index641 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index641 * 8 + + let result639 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array640.push(result639) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + let array643 : Array[String] = [] + for index644 = 0 + index644 < mbt_ffi_load32(iter_base + 40) + index644 = index644 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + index644 * 8 + + let result642 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array643.push(result642) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + let lifted646 : String? = match mbt_ffi_load8_u(iter_base + 44) { + 0 => Option::None + 1 => { + let result645 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 48), + mbt_ffi_load32(iter_base + 52), + ) + + Option::Some(result645) + } + _ => panic() + } + + let lifted649 : @types.Role? = match mbt_ffi_load8_u(iter_base + 56) { + 0 => Option::None + 1 => { + let lifted648 = match mbt_ffi_load8_u(iter_base + 60) { + 0 => @types.Role::Multimodal + 1 => @types.Role::UnstructuredText + 2 => @types.Role::UnstructuredBinary + 3 => { + let result647 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 64), + mbt_ffi_load32(iter_base + 68), + ) + + @types.Role::Other(result647) + } + _ => panic() + } + + Option::Some(lifted648) + } + _ => panic() + } + + array650.push(@types.VariantCaseType::{ + name: result635, + payload: lifted636, + metadata: @types.MetadataEnvelope::{ + doc: lifted638, + aliases: array640, + examples: array643, + deprecated: lifted646, + role: lifted649, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::VariantType(array650) + } + 16 => { + let array653 : Array[String] = [] + for index654 = 0 + index654 < mbt_ffi_load32(iter_base + 12) + index654 = index654 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index654 * 8 + + let result652 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array653.push(result652) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::EnumType(array653) + } + 17 => { + let array656 : Array[String] = [] + for index657 = 0 + index657 < mbt_ffi_load32(iter_base + 12) + index657 = index657 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index657 * 8 + + let result655 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array656.push(result655) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::FlagsType(array656) + } + 18 => { + let array658 : Array[Int] = [] + for index659 = 0 + index659 < mbt_ffi_load32(iter_base + 12) + index659 = index659 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index659 * 4 + + array658.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::TupleType(array658) + } + 19 => @types.SchemaTypeBody::ListType(mbt_ffi_load32(iter_base + 8)) + 20 => + @types.SchemaTypeBody::FixedListType(@types.FixedListSpec::{ + element: mbt_ffi_load32(iter_base + 8), + length: mbt_ffi_load32(iter_base + 12).reinterpret_as_uint(), + }) + 21 => + @types.SchemaTypeBody::MapType(@types.MapSpec::{ + key: mbt_ffi_load32(iter_base + 8), + value: mbt_ffi_load32(iter_base + 12), + }) + 22 => @types.SchemaTypeBody::OptionType(mbt_ffi_load32(iter_base + 8)) + 23 => { + let lifted660 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + let lifted661 : Int? = match mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + @types.SchemaTypeBody::ResultType(@types.ResultSpec::{ + ok: lifted660, + err: lifted661, + }) + } + 24 => { + let lifted665 : Array[String]? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let array663 : Array[String] = [] + for index664 = 0 + index664 < mbt_ffi_load32(iter_base + 16) + index664 = index664 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index664 * 8 + + let result662 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array663.push(result662) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + Option::Some(array663) + } + _ => panic() + } + + let lifted666 : UInt? = match mbt_ffi_load8_u(iter_base + 20) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 24).reinterpret_as_uint()) + _ => panic() + } + + let lifted667 : UInt? = match mbt_ffi_load8_u(iter_base + 28) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 32).reinterpret_as_uint()) + _ => panic() + } + + let lifted669 : String? = match mbt_ffi_load8_u(iter_base + 36) { + 0 => Option::None + 1 => { + let result668 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 40), + mbt_ffi_load32(iter_base + 44), + ) + + Option::Some(result668) + } + _ => panic() + } + + @types.SchemaTypeBody::TextType(@types.TextRestrictions::{ + languages: lifted665, + min_length: lifted666, + max_length: lifted667, + regex: lifted669, + }) + } + 25 => { + let lifted673 : Array[String]? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let array671 : Array[String] = [] + for index672 = 0 + index672 < mbt_ffi_load32(iter_base + 16) + index672 = index672 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index672 * 8 + + let result670 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array671.push(result670) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + Option::Some(array671) + } + _ => panic() + } + + let lifted674 : UInt? = match mbt_ffi_load8_u(iter_base + 20) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 24).reinterpret_as_uint()) + _ => panic() + } + + let lifted675 : UInt? = match mbt_ffi_load8_u(iter_base + 28) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 32).reinterpret_as_uint()) + _ => panic() + } + + @types.SchemaTypeBody::BinaryType(@types.BinaryRestrictions::{ + mime_types: lifted673, + min_bytes: lifted674, + max_bytes: lifted675, + }) + } + 26 => { + let lifted679 : Array[String]? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => { + let array677 : Array[String] = [] + for index678 = 0 + index678 < mbt_ffi_load32(iter_base + 20) + index678 = index678 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index678 * 8 + + let result676 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array677.push(result676) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + Option::Some(array677) + } + _ => panic() + } + + let lifted683 : Array[String]? = match mbt_ffi_load8_u(iter_base + 24) { + 0 => Option::None + 1 => { + let array681 : Array[String] = [] + for index682 = 0 + index682 < mbt_ffi_load32(iter_base + 32) + index682 = index682 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index682 * 8 + + let result680 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array681.push(result680) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + Option::Some(array681) + } + _ => panic() + } + + @types.SchemaTypeBody::PathType(@types.PathSpec::{ + direction: @types.PathDirection::from(mbt_ffi_load8_u(iter_base + 8)), + kind: @types.PathKind::from(mbt_ffi_load8_u(iter_base + 9)), + allowed_mime_types: lifted679, + allowed_extensions: lifted683, + }) + } + 27 => { + let lifted687 : Array[String]? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let array685 : Array[String] = [] + for index686 = 0 + index686 < mbt_ffi_load32(iter_base + 16) + index686 = index686 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index686 * 8 + + let result684 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array685.push(result684) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + Option::Some(array685) + } + _ => panic() + } + + let lifted691 : Array[String]? = match mbt_ffi_load8_u(iter_base + 20) { + 0 => Option::None + 1 => { + let array689 : Array[String] = [] + for index690 = 0 + index690 < mbt_ffi_load32(iter_base + 28) + index690 = index690 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index690 * 8 + + let result688 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array689.push(result688) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + Option::Some(array689) + } + _ => panic() + } + + @types.SchemaTypeBody::UrlType(@types.UrlRestrictions::{ + allowed_schemes: lifted687, + allowed_hosts: lifted691, + }) + } + 28 => @types.SchemaTypeBody::DatetimeType + 29 => @types.SchemaTypeBody::DurationType + 30 => { + let result692 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let array694 : Array[String] = [] + for index695 = 0 + index695 < mbt_ffi_load32(iter_base + 20) + index695 = index695 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index695 * 8 + + let result693 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array694.push(result693) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + let lifted697 : @types.QuantityValue? = match + mbt_ffi_load8_u(iter_base + 24) { + 0 => Option::None + 1 => { + let result696 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 44), + mbt_ffi_load32(iter_base + 48), + ) + + Option::Some(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 32), + scale: mbt_ffi_load32(iter_base + 40), + unit: result696, + }) + } + _ => panic() + } + + let lifted699 : @types.QuantityValue? = match + mbt_ffi_load8_u(iter_base + 56) { + 0 => Option::None + 1 => { + let result698 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 76), + mbt_ffi_load32(iter_base + 80), + ) + + Option::Some(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 64), + scale: mbt_ffi_load32(iter_base + 72), + unit: result698, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::QuantityType(@types.QuantitySpec::{ + base_unit: result692, + allowed_suffixes: array694, + min: lifted697, + max: lifted699, + }) + } + 31 => { + let array723 : Array[@types.UnionBranch] = [] + for index724 = 0 + index724 < mbt_ffi_load32(iter_base + 12) + index724 = index724 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index724 * 92 + + let result700 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted709 = match mbt_ffi_load8_u(iter_base + 12) { + 0 => { + let result701 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::Prefix(result701) + } + 1 => { + let result702 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::Suffix(result702) + } + 2 => { + let result703 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::Contains(result703) + } + 3 => { + let result704 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::Regex(result704) + } + 4 => { + let result705 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + let lifted707 : String? = match mbt_ffi_load8_u(iter_base + 24) { + 0 => Option::None + 1 => { + let result706 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 28), + mbt_ffi_load32(iter_base + 32), + ) + + Option::Some(result706) + } + _ => panic() + } + + @types.DiscriminatorRule::FieldEquals(@types.FieldDiscriminator::{ + field_name: result705, + literal: lifted707, + }) + } + 5 => { + let result708 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::FieldAbsent(result708) + } + _ => panic() + } + + let lifted711 : String? = match mbt_ffi_load8_u(iter_base + 36) { + 0 => Option::None + 1 => { + let result710 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 40), + mbt_ffi_load32(iter_base + 44), + ) + + Option::Some(result710) + } + _ => panic() + } + + let array713 : Array[String] = [] + for index714 = 0 + index714 < mbt_ffi_load32(iter_base + 52) + index714 = index714 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + index714 * 8 + + let result712 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array713.push(result712) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + let array716 : Array[String] = [] + for index717 = 0 + index717 < mbt_ffi_load32(iter_base + 60) + index717 = index717 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + index717 * 8 + + let result715 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array716.push(result715) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + let lifted719 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result718 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result718) + } + _ => panic() + } + + let lifted722 : @types.Role? = match mbt_ffi_load8_u(iter_base + 76) { + 0 => Option::None + 1 => { + let lifted721 = match mbt_ffi_load8_u(iter_base + 80) { + 0 => @types.Role::Multimodal + 1 => @types.Role::UnstructuredText + 2 => @types.Role::UnstructuredBinary + 3 => { + let result720 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 84), + mbt_ffi_load32(iter_base + 88), + ) + + @types.Role::Other(result720) + } + _ => panic() + } + + Option::Some(lifted721) + } + _ => panic() + } + + array723.push(@types.UnionBranch::{ + tag: result700, + body: mbt_ffi_load32(iter_base + 8), + discriminator: lifted709, + metadata: @types.MetadataEnvelope::{ + doc: lifted711, + aliases: array713, + examples: array716, + deprecated: lifted719, + role: lifted722, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::UnionType(@types.UnionSpec::{ + branches: array723, + }) + } + 32 => { + let lifted726 : String? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => { + let result725 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + Option::Some(result725) + } + _ => panic() + } + + @types.SchemaTypeBody::SecretType(@types.SecretSpec::{ + inner: mbt_ffi_load32(iter_base + 8), + category: lifted726, + }) + } + 33 => { + let lifted728 : String? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let result727 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 12), + mbt_ffi_load32(iter_base + 16), + ) + + Option::Some(result727) + } + _ => panic() + } + + @types.SchemaTypeBody::QuotaTokenType(@types.QuotaTokenSpec::{ + resource_name: lifted728, + }) + } + 34 => + @types.SchemaTypeBody::PermissionCardType(@types.PermissionCardSpec::{ + polymorphic: mbt_ffi_load8_u(iter_base + 8) != 0, + }) + 35 => { + let lifted729 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaTypeBody::FutureType(lifted729) + } + 36 => { + let lifted730 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaTypeBody::StreamType(lifted730) + } + _ => panic() + } + + let lifted733 : String? = match mbt_ffi_load8_u(iter_base + 88) { + 0 => Option::None + 1 => { + let result732 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 92), + mbt_ffi_load32(iter_base + 96), + ) + + Option::Some(result732) + } + _ => panic() + } + + let array735 : Array[String] = [] + for index736 = 0 + index736 < mbt_ffi_load32(iter_base + 104) + index736 = index736 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index736 * 8 + + let result734 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array735.push(result734) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + let array738 : Array[String] = [] + for index739 = 0 + index739 < mbt_ffi_load32(iter_base + 112) + index739 = index739 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index739 * 8 + + let result737 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array738.push(result737) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + let lifted741 : String? = match mbt_ffi_load8_u(iter_base + 116) { + 0 => Option::None + 1 => { + let result740 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 120), + mbt_ffi_load32(iter_base + 124), + ) + + Option::Some(result740) + } + _ => panic() + } + + let lifted744 : @types.Role? = match mbt_ffi_load8_u(iter_base + 128) { + 0 => Option::None + 1 => { + let lifted743 = match mbt_ffi_load8_u(iter_base + 132) { + 0 => @types.Role::Multimodal + 1 => @types.Role::UnstructuredText + 2 => @types.Role::UnstructuredBinary + 3 => { + let result742 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 136), + mbt_ffi_load32(iter_base + 140), + ) + + @types.Role::Other(result742) + } + _ => panic() + } + + Option::Some(lifted743) + } + _ => panic() + } + + array745.push(@types.SchemaTypeNode::{ + body: lifted731, + metadata: @types.MetadataEnvelope::{ + doc: lifted733, + aliases: array735, + examples: array738, + deprecated: lifted741, + role: lifted744, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 32)) + + let array750 : Array[@types.SchemaTypeDef] = [] + for index751 = 0; index751 < mbt_ffi_load32(p0 + 44); index751 = index751 + 1 { + let iter_base = mbt_ffi_load32(p0 + 40) + index751 * 24 + + let result747 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted749 : String? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let result748 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 12), + mbt_ffi_load32(iter_base + 16), + ) + + Option::Some(result748) + } + _ => panic() + } + + array750.push(@types.SchemaTypeDef::{ + id: result747, + name: lifted749, + body: mbt_ffi_load32(iter_base + 20), + }) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 40)) + @types.SchemaGraph::{ + type_nodes: array745, + defs: array750, + root: mbt_ffi_load32(p0 + 48), + } +} + +///| +fn __wit_bindgen_lift_invoke_command_path(p0 : Int) -> Array[String] { + let array753 : Array[String] = [] + for index754 = 0; index754 < mbt_ffi_load32(p0 + 56); index754 = index754 + 1 { + let iter_base = mbt_ffi_load32(p0 + 52) + index754 * 8 + + let result752 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array753.push(result752) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 52)) + array753 +} + +///| +fn __wit_bindgen_lift_invoke_input_graph(p0 : Int) -> @types.SchemaGraph { + let array951 : Array[@types.SchemaTypeNode] = [] + for index952 = 0; index952 < mbt_ffi_load32(p0 + 64); index952 = index952 + 1 { + let iter_base = mbt_ffi_load32(p0 + 60) + index952 * 144 + + let lifted937 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => @types.SchemaTypeBody::RefType(mbt_ffi_load32(iter_base + 8)) + 1 => @types.SchemaTypeBody::BoolType + 2 => { + let lifted761 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted756 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted755 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted755) + } + _ => panic() + } + + let lifted758 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted757 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted757) + } + _ => panic() + } + + let lifted760 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result759 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result759) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted756, + max: lifted758, + unit: lifted760, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::S8Type(lifted761) + } + 3 => { + let lifted768 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted763 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted762 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted762) + } + _ => panic() + } + + let lifted765 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted764 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted764) + } + _ => panic() + } + + let lifted767 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result766 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result766) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted763, + max: lifted765, + unit: lifted767, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::S16Type(lifted768) + } + 4 => { + let lifted775 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted770 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted769 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted769) + } + _ => panic() + } + + let lifted772 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted771 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted771) + } + _ => panic() + } + + let lifted774 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result773 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result773) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted770, + max: lifted772, + unit: lifted774, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::S32Type(lifted775) + } + 5 => { + let lifted782 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted777 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted776 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted776) + } + _ => panic() + } + + let lifted779 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted778 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted778) + } + _ => panic() + } + + let lifted781 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result780 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result780) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted777, + max: lifted779, + unit: lifted781, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::S64Type(lifted782) + } + 6 => { + let lifted789 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted784 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted783 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted783) + } + _ => panic() + } + + let lifted786 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted785 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted785) + } + _ => panic() + } + + let lifted788 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result787 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result787) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted784, + max: lifted786, + unit: lifted788, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::U8Type(lifted789) + } + 7 => { + let lifted796 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted791 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted790 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted790) + } + _ => panic() + } + + let lifted793 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted792 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted792) + } + _ => panic() + } + + let lifted795 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result794 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result794) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted791, + max: lifted793, + unit: lifted795, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::U16Type(lifted796) + } + 8 => { + let lifted803 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted798 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted797 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted797) + } + _ => panic() + } + + let lifted800 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted799 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted799) + } + _ => panic() + } + + let lifted802 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result801 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result801) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted798, + max: lifted800, + unit: lifted802, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::U32Type(lifted803) + } + 9 => { + let lifted810 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted805 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted804 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted804) + } + _ => panic() + } + + let lifted807 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted806 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted806) + } + _ => panic() + } + + let lifted809 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result808 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result808) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted805, + max: lifted807, + unit: lifted809, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::U64Type(lifted810) + } + 10 => { + let lifted817 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted812 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted811 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted811) + } + _ => panic() + } + + let lifted814 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted813 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted813) + } + _ => panic() + } + + let lifted816 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result815 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result815) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted812, + max: lifted814, + unit: lifted816, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::F32Type(lifted817) + } + 11 => { + let lifted824 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted819 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted818 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted818) + } + _ => panic() + } + + let lifted821 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted820 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted820) + } + _ => panic() + } + + let lifted823 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result822 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result822) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted819, + max: lifted821, + unit: lifted823, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::F64Type(lifted824) + } + 12 => @types.SchemaTypeBody::CharType + 13 => @types.SchemaTypeBody::StringType + 14 => { + let array839 : Array[@types.NamedFieldType] = [] + for index840 = 0 + index840 < mbt_ffi_load32(iter_base + 12) + index840 = index840 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index840 * 68 + + let result825 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted827 : String? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => { + let result826 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + Option::Some(result826) + } + _ => panic() + } + + let array829 : Array[String] = [] + for index830 = 0 + index830 < mbt_ffi_load32(iter_base + 28) + index830 = index830 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index830 * 8 + + let result828 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array829.push(result828) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + let array832 : Array[String] = [] + for index833 = 0 + index833 < mbt_ffi_load32(iter_base + 36) + index833 = index833 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index833 * 8 + + let result831 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array832.push(result831) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + let lifted835 : String? = match mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let result834 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 44), + mbt_ffi_load32(iter_base + 48), + ) + + Option::Some(result834) + } + _ => panic() + } + + let lifted838 : @types.Role? = match mbt_ffi_load8_u(iter_base + 52) { + 0 => Option::None + 1 => { + let lifted837 = match mbt_ffi_load8_u(iter_base + 56) { + 0 => @types.Role::Multimodal + 1 => @types.Role::UnstructuredText + 2 => @types.Role::UnstructuredBinary + 3 => { + let result836 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 60), + mbt_ffi_load32(iter_base + 64), + ) + + @types.Role::Other(result836) + } + _ => panic() + } + + Option::Some(lifted837) + } + _ => panic() + } + + array839.push(@types.NamedFieldType::{ + name: result825, + body: mbt_ffi_load32(iter_base + 8), + metadata: @types.MetadataEnvelope::{ + doc: lifted827, + aliases: array829, + examples: array832, + deprecated: lifted835, + role: lifted838, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::RecordType(array839) + } + 15 => { + let array856 : Array[@types.VariantCaseType] = [] + for index857 = 0 + index857 < mbt_ffi_load32(iter_base + 12) + index857 = index857 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index857 * 72 + + let result841 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted842 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + let lifted844 : String? = match mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result843 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result843) + } + _ => panic() + } + + let array846 : Array[String] = [] + for index847 = 0 + index847 < mbt_ffi_load32(iter_base + 32) + index847 = index847 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index847 * 8 + + let result845 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array846.push(result845) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + let array849 : Array[String] = [] + for index850 = 0 + index850 < mbt_ffi_load32(iter_base + 40) + index850 = index850 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + index850 * 8 + + let result848 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array849.push(result848) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + let lifted852 : String? = match mbt_ffi_load8_u(iter_base + 44) { + 0 => Option::None + 1 => { + let result851 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 48), + mbt_ffi_load32(iter_base + 52), + ) + + Option::Some(result851) + } + _ => panic() + } + + let lifted855 : @types.Role? = match mbt_ffi_load8_u(iter_base + 56) { + 0 => Option::None + 1 => { + let lifted854 = match mbt_ffi_load8_u(iter_base + 60) { + 0 => @types.Role::Multimodal + 1 => @types.Role::UnstructuredText + 2 => @types.Role::UnstructuredBinary + 3 => { + let result853 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 64), + mbt_ffi_load32(iter_base + 68), + ) + + @types.Role::Other(result853) + } + _ => panic() + } + + Option::Some(lifted854) + } + _ => panic() + } + + array856.push(@types.VariantCaseType::{ + name: result841, + payload: lifted842, + metadata: @types.MetadataEnvelope::{ + doc: lifted844, + aliases: array846, + examples: array849, + deprecated: lifted852, + role: lifted855, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::VariantType(array856) + } + 16 => { + let array859 : Array[String] = [] + for index860 = 0 + index860 < mbt_ffi_load32(iter_base + 12) + index860 = index860 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index860 * 8 + + let result858 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array859.push(result858) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::EnumType(array859) + } + 17 => { + let array862 : Array[String] = [] + for index863 = 0 + index863 < mbt_ffi_load32(iter_base + 12) + index863 = index863 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index863 * 8 + + let result861 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array862.push(result861) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::FlagsType(array862) + } + 18 => { + let array864 : Array[Int] = [] + for index865 = 0 + index865 < mbt_ffi_load32(iter_base + 12) + index865 = index865 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index865 * 4 + + array864.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::TupleType(array864) + } + 19 => @types.SchemaTypeBody::ListType(mbt_ffi_load32(iter_base + 8)) + 20 => + @types.SchemaTypeBody::FixedListType(@types.FixedListSpec::{ + element: mbt_ffi_load32(iter_base + 8), + length: mbt_ffi_load32(iter_base + 12).reinterpret_as_uint(), + }) + 21 => + @types.SchemaTypeBody::MapType(@types.MapSpec::{ + key: mbt_ffi_load32(iter_base + 8), + value: mbt_ffi_load32(iter_base + 12), + }) + 22 => @types.SchemaTypeBody::OptionType(mbt_ffi_load32(iter_base + 8)) + 23 => { + let lifted866 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + let lifted867 : Int? = match mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + @types.SchemaTypeBody::ResultType(@types.ResultSpec::{ + ok: lifted866, + err: lifted867, + }) + } + 24 => { + let lifted871 : Array[String]? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let array869 : Array[String] = [] + for index870 = 0 + index870 < mbt_ffi_load32(iter_base + 16) + index870 = index870 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index870 * 8 + + let result868 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array869.push(result868) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + Option::Some(array869) + } + _ => panic() + } + + let lifted872 : UInt? = match mbt_ffi_load8_u(iter_base + 20) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 24).reinterpret_as_uint()) + _ => panic() + } + + let lifted873 : UInt? = match mbt_ffi_load8_u(iter_base + 28) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 32).reinterpret_as_uint()) + _ => panic() + } + + let lifted875 : String? = match mbt_ffi_load8_u(iter_base + 36) { + 0 => Option::None + 1 => { + let result874 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 40), + mbt_ffi_load32(iter_base + 44), + ) + + Option::Some(result874) + } + _ => panic() + } + + @types.SchemaTypeBody::TextType(@types.TextRestrictions::{ + languages: lifted871, + min_length: lifted872, + max_length: lifted873, + regex: lifted875, + }) + } + 25 => { + let lifted879 : Array[String]? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let array877 : Array[String] = [] + for index878 = 0 + index878 < mbt_ffi_load32(iter_base + 16) + index878 = index878 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index878 * 8 + + let result876 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array877.push(result876) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + Option::Some(array877) + } + _ => panic() + } + + let lifted880 : UInt? = match mbt_ffi_load8_u(iter_base + 20) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 24).reinterpret_as_uint()) + _ => panic() + } + + let lifted881 : UInt? = match mbt_ffi_load8_u(iter_base + 28) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 32).reinterpret_as_uint()) + _ => panic() + } + + @types.SchemaTypeBody::BinaryType(@types.BinaryRestrictions::{ + mime_types: lifted879, + min_bytes: lifted880, + max_bytes: lifted881, + }) + } + 26 => { + let lifted885 : Array[String]? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => { + let array883 : Array[String] = [] + for index884 = 0 + index884 < mbt_ffi_load32(iter_base + 20) + index884 = index884 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index884 * 8 + + let result882 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array883.push(result882) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + Option::Some(array883) + } + _ => panic() + } + + let lifted889 : Array[String]? = match mbt_ffi_load8_u(iter_base + 24) { + 0 => Option::None + 1 => { + let array887 : Array[String] = [] + for index888 = 0 + index888 < mbt_ffi_load32(iter_base + 32) + index888 = index888 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index888 * 8 + + let result886 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array887.push(result886) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + Option::Some(array887) + } + _ => panic() + } + + @types.SchemaTypeBody::PathType(@types.PathSpec::{ + direction: @types.PathDirection::from(mbt_ffi_load8_u(iter_base + 8)), + kind: @types.PathKind::from(mbt_ffi_load8_u(iter_base + 9)), + allowed_mime_types: lifted885, + allowed_extensions: lifted889, + }) + } + 27 => { + let lifted893 : Array[String]? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let array891 : Array[String] = [] + for index892 = 0 + index892 < mbt_ffi_load32(iter_base + 16) + index892 = index892 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index892 * 8 + + let result890 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array891.push(result890) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + Option::Some(array891) + } + _ => panic() + } + + let lifted897 : Array[String]? = match mbt_ffi_load8_u(iter_base + 20) { + 0 => Option::None + 1 => { + let array895 : Array[String] = [] + for index896 = 0 + index896 < mbt_ffi_load32(iter_base + 28) + index896 = index896 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index896 * 8 + + let result894 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array895.push(result894) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + Option::Some(array895) + } + _ => panic() + } + + @types.SchemaTypeBody::UrlType(@types.UrlRestrictions::{ + allowed_schemes: lifted893, + allowed_hosts: lifted897, + }) + } + 28 => @types.SchemaTypeBody::DatetimeType + 29 => @types.SchemaTypeBody::DurationType + 30 => { + let result898 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let array900 : Array[String] = [] + for index901 = 0 + index901 < mbt_ffi_load32(iter_base + 20) + index901 = index901 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index901 * 8 + + let result899 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array900.push(result899) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + let lifted903 : @types.QuantityValue? = match + mbt_ffi_load8_u(iter_base + 24) { + 0 => Option::None + 1 => { + let result902 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 44), + mbt_ffi_load32(iter_base + 48), + ) + + Option::Some(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 32), + scale: mbt_ffi_load32(iter_base + 40), + unit: result902, + }) + } + _ => panic() + } + + let lifted905 : @types.QuantityValue? = match + mbt_ffi_load8_u(iter_base + 56) { + 0 => Option::None + 1 => { + let result904 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 76), + mbt_ffi_load32(iter_base + 80), + ) + + Option::Some(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 64), + scale: mbt_ffi_load32(iter_base + 72), + unit: result904, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::QuantityType(@types.QuantitySpec::{ + base_unit: result898, + allowed_suffixes: array900, + min: lifted903, + max: lifted905, + }) + } + 31 => { + let array929 : Array[@types.UnionBranch] = [] + for index930 = 0 + index930 < mbt_ffi_load32(iter_base + 12) + index930 = index930 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index930 * 92 + + let result906 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted915 = match mbt_ffi_load8_u(iter_base + 12) { + 0 => { + let result907 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::Prefix(result907) + } + 1 => { + let result908 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::Suffix(result908) + } + 2 => { + let result909 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::Contains(result909) + } + 3 => { + let result910 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::Regex(result910) + } + 4 => { + let result911 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + let lifted913 : String? = match mbt_ffi_load8_u(iter_base + 24) { + 0 => Option::None + 1 => { + let result912 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 28), + mbt_ffi_load32(iter_base + 32), + ) + + Option::Some(result912) + } + _ => panic() + } + + @types.DiscriminatorRule::FieldEquals(@types.FieldDiscriminator::{ + field_name: result911, + literal: lifted913, + }) + } + 5 => { + let result914 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::FieldAbsent(result914) + } + _ => panic() + } + + let lifted917 : String? = match mbt_ffi_load8_u(iter_base + 36) { + 0 => Option::None + 1 => { + let result916 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 40), + mbt_ffi_load32(iter_base + 44), + ) + + Option::Some(result916) + } + _ => panic() + } + + let array919 : Array[String] = [] + for index920 = 0 + index920 < mbt_ffi_load32(iter_base + 52) + index920 = index920 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + index920 * 8 + + let result918 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array919.push(result918) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + let array922 : Array[String] = [] + for index923 = 0 + index923 < mbt_ffi_load32(iter_base + 60) + index923 = index923 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + index923 * 8 + + let result921 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array922.push(result921) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + let lifted925 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result924 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result924) + } + _ => panic() + } + + let lifted928 : @types.Role? = match mbt_ffi_load8_u(iter_base + 76) { + 0 => Option::None + 1 => { + let lifted927 = match mbt_ffi_load8_u(iter_base + 80) { + 0 => @types.Role::Multimodal + 1 => @types.Role::UnstructuredText + 2 => @types.Role::UnstructuredBinary + 3 => { + let result926 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 84), + mbt_ffi_load32(iter_base + 88), + ) + + @types.Role::Other(result926) + } + _ => panic() + } + + Option::Some(lifted927) + } + _ => panic() + } + + array929.push(@types.UnionBranch::{ + tag: result906, + body: mbt_ffi_load32(iter_base + 8), + discriminator: lifted915, + metadata: @types.MetadataEnvelope::{ + doc: lifted917, + aliases: array919, + examples: array922, + deprecated: lifted925, + role: lifted928, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::UnionType(@types.UnionSpec::{ + branches: array929, + }) + } + 32 => { + let lifted932 : String? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => { + let result931 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + Option::Some(result931) + } + _ => panic() + } + + @types.SchemaTypeBody::SecretType(@types.SecretSpec::{ + inner: mbt_ffi_load32(iter_base + 8), + category: lifted932, + }) + } + 33 => { + let lifted934 : String? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let result933 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 12), + mbt_ffi_load32(iter_base + 16), + ) + + Option::Some(result933) + } + _ => panic() + } + + @types.SchemaTypeBody::QuotaTokenType(@types.QuotaTokenSpec::{ + resource_name: lifted934, + }) + } + 34 => + @types.SchemaTypeBody::PermissionCardType(@types.PermissionCardSpec::{ + polymorphic: mbt_ffi_load8_u(iter_base + 8) != 0, + }) + 35 => { + let lifted935 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaTypeBody::FutureType(lifted935) + } + 36 => { + let lifted936 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaTypeBody::StreamType(lifted936) + } + _ => panic() + } + + let lifted939 : String? = match mbt_ffi_load8_u(iter_base + 88) { + 0 => Option::None + 1 => { + let result938 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 92), + mbt_ffi_load32(iter_base + 96), + ) + + Option::Some(result938) + } + _ => panic() + } + + let array941 : Array[String] = [] + for index942 = 0 + index942 < mbt_ffi_load32(iter_base + 104) + index942 = index942 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index942 * 8 + + let result940 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array941.push(result940) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + let array944 : Array[String] = [] + for index945 = 0 + index945 < mbt_ffi_load32(iter_base + 112) + index945 = index945 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index945 * 8 + + let result943 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array944.push(result943) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + let lifted947 : String? = match mbt_ffi_load8_u(iter_base + 116) { + 0 => Option::None + 1 => { + let result946 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 120), + mbt_ffi_load32(iter_base + 124), + ) + + Option::Some(result946) + } + _ => panic() + } + + let lifted950 : @types.Role? = match mbt_ffi_load8_u(iter_base + 128) { + 0 => Option::None + 1 => { + let lifted949 = match mbt_ffi_load8_u(iter_base + 132) { + 0 => @types.Role::Multimodal + 1 => @types.Role::UnstructuredText + 2 => @types.Role::UnstructuredBinary + 3 => { + let result948 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 136), + mbt_ffi_load32(iter_base + 140), + ) + + @types.Role::Other(result948) + } + _ => panic() + } + + Option::Some(lifted949) + } + _ => panic() + } + + array951.push(@types.SchemaTypeNode::{ + body: lifted937, + metadata: @types.MetadataEnvelope::{ + doc: lifted939, + aliases: array941, + examples: array944, + deprecated: lifted947, + role: lifted950, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 60)) + + let array956 : Array[@types.SchemaTypeDef] = [] + for index957 = 0; index957 < mbt_ffi_load32(p0 + 72); index957 = index957 + 1 { + let iter_base = mbt_ffi_load32(p0 + 68) + index957 * 24 + + let result953 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted955 : String? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let result954 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 12), + mbt_ffi_load32(iter_base + 16), + ) + + Option::Some(result954) + } + _ => panic() + } + + array956.push(@types.SchemaTypeDef::{ + id: result953, + name: lifted955, + body: mbt_ffi_load32(iter_base + 20), + }) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 68)) + @types.SchemaGraph::{ + type_nodes: array951, + defs: array956, + root: mbt_ffi_load32(p0 + 76), + } +} + +///| +fn __wit_bindgen_lift_invoke_input_value(p0 : Int) -> @types.SchemaValueTree { + let array987 : Array[@types.SchemaValueNode] = [] + for index988 = 0; index988 < mbt_ffi_load32(p0 + 84); index988 = index988 + 1 { + let iter_base = mbt_ffi_load32(p0 + 80) + index988 * 32 + + let lifted986 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue(mbt_ffi_load8_u(iter_base + 8) != 0) + 1 => @types.SchemaValueNode::S8Value(mbt_ffi_load8(iter_base + 8)) + 2 => @types.SchemaValueNode::S16Value(mbt_ffi_load16(iter_base + 8)) + 3 => @types.SchemaValueNode::S32Value(mbt_ffi_load32(iter_base + 8)) + 4 => @types.SchemaValueNode::S64Value(mbt_ffi_load64(iter_base + 8)) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8).land(0xFFFF).reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => @types.SchemaValueNode::F32Value(mbt_ffi_loadf32(iter_base + 8)) + 10 => @types.SchemaValueNode::F64Value(mbt_ffi_loadf64(iter_base + 8)) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result958 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result958) + } + 13 => { + let array959 : Array[Int] = [] + for index960 = 0 + index960 < mbt_ffi_load32(iter_base + 12) + index960 = index960 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index960 * 4 + + array959.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array959) + } + 14 => { + let lifted961 : Int? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted961, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array962 : Array[Bool] = [] + for index963 = 0 + index963 < mbt_ffi_load32(iter_base + 12) + index963 = index963 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index963 * 1 + + array962.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array962) + } + 17 => { + let array964 : Array[Int] = [] + for index965 = 0 + index965 < mbt_ffi_load32(iter_base + 12) + index965 = index965 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index965 * 4 + + array964.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array964) + } + 18 => { + let array966 : Array[Int] = [] + for index967 = 0 + index967 < mbt_ffi_load32(iter_base + 12) + index967 = index967 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index967 * 4 + + array966.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array966) + } + 19 => { + let array968 : Array[Int] = [] + for index969 = 0 + index969 < mbt_ffi_load32(iter_base + 12) + index969 = index969 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index969 * 4 + + array968.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array968) + } + 20 => { + let array970 : Array[@types.MapEntry] = [] + for index971 = 0 + index971 < mbt_ffi_load32(iter_base + 12) + index971 = index971 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index971 * 8 + + array970.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array970) + } + 21 => { + let lifted972 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted972) + } + 22 => { + let lifted975 = match mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted973 : Int? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted973) + } + 1 => { + let lifted974 : Int? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted974) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted975) + } + 23 => { + let result976 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted978 : String? = match mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result977 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result977) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result976, + language: lifted978, + }) + } + 24 => { + let result979 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted981 : String? = match mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result980 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result980) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result979, + mime_type: lifted981, + }) + } + 25 => { + let result982 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result982) + } + 26 => { + let result983 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result983) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result984 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result984, + }) + } + 30 => { + let result985 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result985, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken(mbt_ffi_load32(iter_base + 8)), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard(mbt_ffi_load32(iter_base + 8)), + ) + _ => panic() + } + + array987.push(lifted986) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 80)) + @types.SchemaValueTree::{ + value_nodes: array987, + root: mbt_ffi_load32(p0 + 88), + } +} + +///| +fn __wit_bindgen_lift_invoke_stdin(p0 : Int) -> @async-core.Stream[Byte]? { + let lifted990 : @async-core.Stream[Byte]? = match mbt_ffi_load8_u(p0 + 92) { + 0 => Option::None + 1 => { + let result989 = wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamLift( + mbt_ffi_load32(p0 + 96), + ) + + Option::Some(result989) + } + _ => panic() + } + lifted990 +} + +///| +fn __wit_bindgen_lift_invoke_principal(p0 : Int) -> @common0.Principal { + let lifted1008 = match mbt_ffi_load8_u(p0 + 104) { + 0 => { + let result991 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 112), + mbt_ffi_load32(p0 + 116), + ) + + let result992 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 120), + mbt_ffi_load32(p0 + 124), + ) + + let lifted994 : String? = match mbt_ffi_load8_u(p0 + 128) { + 0 => Option::None + 1 => { + let result993 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 132), + mbt_ffi_load32(p0 + 136), + ) + + Option::Some(result993) + } + _ => panic() + } + + let lifted996 : String? = match mbt_ffi_load8_u(p0 + 140) { + 0 => Option::None + 1 => { + let result995 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 144), + mbt_ffi_load32(p0 + 148), + ) + + Option::Some(result995) + } + _ => panic() + } + + let lifted997 : Bool? = match mbt_ffi_load8_u(p0 + 152) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load8_u(p0 + 153) != 0) + _ => panic() + } + + let lifted999 : String? = match mbt_ffi_load8_u(p0 + 156) { + 0 => Option::None + 1 => { + let result998 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 160), + mbt_ffi_load32(p0 + 164), + ) + + Option::Some(result998) + } + _ => panic() + } + + let lifted1001 : String? = match mbt_ffi_load8_u(p0 + 168) { + 0 => Option::None + 1 => { + let result1000 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 172), + mbt_ffi_load32(p0 + 176), + ) + + Option::Some(result1000) + } + _ => panic() + } + + let lifted1003 : String? = match mbt_ffi_load8_u(p0 + 180) { + 0 => Option::None + 1 => { + let result1002 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 184), + mbt_ffi_load32(p0 + 188), + ) + + Option::Some(result1002) + } + _ => panic() + } + + let lifted1005 : String? = match mbt_ffi_load8_u(p0 + 192) { + 0 => Option::None + 1 => { + let result1004 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 196), + mbt_ffi_load32(p0 + 200), + ) + + Option::Some(result1004) + } + _ => panic() + } + + let result1006 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 204), + mbt_ffi_load32(p0 + 208), + ) + + @common0.Principal::Oidc(@common0.OidcPrincipal::{ + sub: result991, + issuer: result992, + email: lifted994, + name: lifted996, + email_verified: lifted997, + given_name: lifted999, + family_name: lifted1001, + picture: lifted1003, + preferred_username: lifted1005, + claims: result1006, + }) + } + 1 => { + let result1007 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 128), + mbt_ffi_load32(p0 + 132), + ) + + @common0.Principal::Agent(@common0.AgentPrincipal::{ + agent_id: @types.AgentId::{ + component_id: @types.ComponentId::{ + uuid: @types.Uuid::{ + high_bits: mbt_ffi_load64(p0 + 112).reinterpret_as_uint64(), + low_bits: mbt_ffi_load64(p0 + 120).reinterpret_as_uint64(), + }, + }, + agent_id: result1007, + }, + }) + } + 2 => + @common0.Principal::GolemUser(@common0.GolemUserPrincipal::{ + account_id: @types.AccountId::{ + uuid: @types.Uuid::{ + high_bits: mbt_ffi_load64(p0 + 112).reinterpret_as_uint64(), + low_bits: mbt_ffi_load64(p0 + 120).reinterpret_as_uint64(), + }, + }, + }) + 3 => @common0.Principal::Anonymous + _ => panic() + } + lifted1008 +} + +///| +#doc(hidden) +pub fn wasmExportInvokeToolMiddleware(p0 : Int) -> Int { + @async-core.with_waitableset(async fn() { + @async-core.with_task_group(async fn(background_group) { + let middleware_name = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 0), + mbt_ffi_load32(p0 + 4), + ) + let tool_name = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 8), + mbt_ffi_load32(p0 + 12), + ) + let version = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 16), + mbt_ffi_load32(p0 + 20), + ) + let tool_metadata = @common.Tool::{ + version, + commands: __wit_bindgen_lift_invoke_tool_commands(p0), + schema: __wit_bindgen_lift_invoke_tool_schema(p0), + } + let input = @types.TypedSchemaValue::{ + graph: __wit_bindgen_lift_invoke_input_graph(p0), + value: __wit_bindgen_lift_invoke_input_value(p0), + } + let return_result : Ref[ + Result[@common.InvocationResult, @common.ToolError]?, + ] = Ref(None) + return_result.val = Some( + invoke_tool_middleware( + middleware_name, + tool_name, + tool_metadata, + __wit_bindgen_lift_invoke_command_path(p0), + input, + __wit_bindgen_lift_invoke_stdin(p0), + __wit_bindgen_lift_invoke_principal(p0), + @common.UnderlyingTool::UnderlyingTool(mbt_ffi_load32(p0 + 216)), + background_group, + ), + ) + invoke_tool_middleware_task_return(return_result) + }) + }) +} + +///| +fn wasmExportAsyncInvokeToolMiddlewareTaskReturn( + p0 : Int, + p1 : Int, + p2 : Int, + p3 : Int, + p4 : Int, + p5 : Int, + p6 : Int, + p7 : Int, + p8 : Int, + p9 : Int, + p10 : Int, + p11 : Int, +) = "[export]golem:tool/tool-middleware-guest@0.1.0" "[task-return]invoke-tool-middleware" + +///| +fn invoke_tool_middleware_task_return( + return_result : Ref[Result[@common.InvocationResult, @common.ToolError]?], +) -> Unit { + match return_result.val { + Some(return_value) => { + let cleanup_list : Array[Int] = [] + + let ( + lowered1056, + lowered1057, + lowered1058, + lowered1059, + lowered1060, + lowered1061, + lowered1062, + lowered1063, + lowered1064, + lowered1065, + lowered1066, + lowered1067, + ) = match return_value { + Ok(payload) => { + let ( + lowered, + lowered1016, + lowered1017, + lowered1018, + lowered1019, + lowered1020, + lowered1021, + lowered1022, + lowered1023, + ) = match payload.result { + None => (0, 0, 0, 0, 0, 0, 0, 0, 0) + Some(payload1010) => { + let address = mbt_ffi_malloc( + payload1010.graph.type_nodes.length() * 144, + ) + for index1011 = 0 + index1011 < payload1010.graph.type_nodes.length() + index1011 = index1011 + 1 { + let iter_elem : @types.SchemaTypeNode = payload1010.graph.type_nodes[index1011] + let iter_base = address + index1011 * 144 + __wit_bindgen_lower_t55(iter_base + 0, iter_elem) + } + + let address1012 = mbt_ffi_malloc( + payload1010.graph.defs.length() * 24, + ) + for index1013 = 0 + index1013 < payload1010.graph.defs.length() + index1013 = index1013 + 1 { + let iter_elem : @types.SchemaTypeDef = payload1010.graph.defs[index1013] + let iter_base = address1012 + index1013 * 24 + __wit_bindgen_lower_t17(iter_base + 0, iter_elem) + } + + let address1014 = mbt_ffi_malloc( + payload1010.value.value_nodes.length() * 32, + ) + for index1015 = 0 + index1015 < payload1010.value.value_nodes.length() + index1015 = index1015 + 1 { + let iter_elem : @types.SchemaValueNode = payload1010.value.value_nodes[index1015] + let iter_base = address1014 + index1015 * 32 + __wit_bindgen_lower_t74(iter_base + 0, iter_elem) + } + cleanup_list.push(address) + cleanup_list.push(address1012) + cleanup_list.push(address1014) + + ( + 1, + address, + payload1010.graph.type_nodes.length(), + address1012, + payload1010.graph.defs.length(), + payload1010.graph.root, + address1014, + payload1010.value.value_nodes.length(), + payload1010.value.root, + ) + } + } + + let (lowered1026, lowered1027) = match payload.stdout { + None => (0, 0) + Some(payload1025) => + ( + 1, + wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1StreamLowerCommitted( + payload1025, + ), + ) + } + + ( + 0, lowered, lowered1016, lowered1017, lowered1018, lowered1019, lowered1020, + lowered1021, lowered1022, lowered1023, lowered1026, lowered1027, + ) + } + Err(payload1028) => { + let ( + lowered1047, + lowered1048, + lowered1049, + lowered1050, + lowered1051, + lowered1052, + lowered1053, + lowered1054, + lowered1055, + ) = match payload1028 { + InvalidToolName(payload1029) => { + let ptr = mbt_ffi_str2ptr(payload1029) + cleanup_list.push(ptr) + + (0, ptr, payload1029.length(), 0, 0, 0, 0, 0, 0) + } + InvalidCommandPath(payload1030) => { + let address1032 = mbt_ffi_malloc(payload1030.length() * 8) + for index1033 = 0 + index1033 < payload1030.length() + index1033 = index1033 + 1 { + let iter_elem : String = payload1030[index1033] + let iter_base = address1032 + index1033 * 8 + + let ptr1031 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr1031) + cleanup_list.push(ptr1031) + } + cleanup_list.push(address1032) + + (1, address1032, payload1030.length(), 0, 0, 0, 0, 0, 0) + } + InvalidInput(payload1034) => { + let ptr1035 = mbt_ffi_str2ptr(payload1034) + cleanup_list.push(ptr1035) + + (2, ptr1035, payload1034.length(), 0, 0, 0, 0, 0, 0) + } + ConstraintViolation(payload1036) => { + let ptr1037 = mbt_ffi_str2ptr(payload1036) + cleanup_list.push(ptr1037) + + (3, ptr1037, payload1036.length(), 0, 0, 0, 0, 0, 0) + } + InvalidResult(payload1038) => { + let ptr1039 = mbt_ffi_str2ptr(payload1038) + cleanup_list.push(ptr1039) + + (4, ptr1039, payload1038.length(), 0, 0, 0, 0, 0, 0) + } + CustomError(payload1040) => { + let address1041 = mbt_ffi_malloc( + payload1040.graph.type_nodes.length() * 144, + ) + for index1042 = 0 + index1042 < payload1040.graph.type_nodes.length() + index1042 = index1042 + 1 { + let iter_elem : @types.SchemaTypeNode = payload1040.graph.type_nodes[index1042] + let iter_base = address1041 + index1042 * 144 + __wit_bindgen_lower_t55(iter_base + 0, iter_elem) + } + + let address1043 = mbt_ffi_malloc( + payload1040.graph.defs.length() * 24, + ) + for index1044 = 0 + index1044 < payload1040.graph.defs.length() + index1044 = index1044 + 1 { + let iter_elem : @types.SchemaTypeDef = payload1040.graph.defs[index1044] + let iter_base = address1043 + index1044 * 24 + __wit_bindgen_lower_t17(iter_base + 0, iter_elem) + } + + let address1045 = mbt_ffi_malloc( + payload1040.value.value_nodes.length() * 32, + ) + for index1046 = 0 + index1046 < payload1040.value.value_nodes.length() + index1046 = index1046 + 1 { + let iter_elem : @types.SchemaValueNode = payload1040.value.value_nodes[index1046] + let iter_base = address1045 + index1046 * 32 + __wit_bindgen_lower_t74(iter_base + 0, iter_elem) + } + cleanup_list.push(address1041) + cleanup_list.push(address1043) + cleanup_list.push(address1045) + + ( + 5, + address1041, + payload1040.graph.type_nodes.length(), + address1043, + payload1040.graph.defs.length(), + payload1040.graph.root, + address1045, + payload1040.value.value_nodes.length(), + payload1040.value.root, + ) + } + } + + ( + 1, lowered1047, lowered1048, lowered1049, lowered1050, lowered1051, lowered1052, + lowered1053, lowered1054, lowered1055, 0, 0, + ) + } + } + + wasmExportAsyncInvokeToolMiddlewareTaskReturn( + lowered1056, lowered1057, lowered1058, lowered1059, lowered1060, lowered1061, + lowered1062, lowered1063, lowered1064, lowered1065, lowered1066, lowered1067, + ) + + cleanup_list.each(mbt_ffi_free) + + @async-core.task_returned() + } + None => () + } +} + +///| +#doc(hidden) +pub fn wasmExportAsyncInvokeToolMiddleware( + event_raw : Int, + waitable : Int, + code : Int, +) -> Int { + @async-core.cb(event_raw, waitable, code) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t5(ptr : Int, value : @types.Datetime) -> Unit { + mbt_ffi_store64(ptr + 0, value.seconds) + mbt_ffi_store32(ptr + 8, value.nanoseconds.reinterpret_as_int()) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t17(ptr : Int, value : @types.SchemaTypeDef) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.id) + mbt_ffi_store32(ptr + 4, value.id.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + match value.name { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 8, 1) + + let ptr2 = mbt_ffi_str2ptr(payload1) + mbt_ffi_store32(ptr + 16, payload1.length()) + mbt_ffi_store32(ptr + 12, ptr2) + + () + } + } + mbt_ffi_store32(ptr + 20, value.body) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t18(ptr : Int, value : @types.Role) -> Unit { + match value { + Multimodal => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + UnstructuredText => { + mbt_ffi_store8(ptr + 0, 1) + + () + } + UnstructuredBinary => { + mbt_ffi_store8(ptr + 0, 2) + + () + } + Other(payload2) => { + mbt_ffi_store8(ptr + 0, 3) + + let ptr3 = mbt_ffi_str2ptr(payload2) + mbt_ffi_store32(ptr + 8, payload2.length()) + mbt_ffi_store32(ptr + 4, ptr3) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t21(ptr : Int, value : @types.MetadataEnvelope) -> Unit { + match value.doc { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + + let ptr1 = mbt_ffi_str2ptr(payload0) + mbt_ffi_store32(ptr + 8, payload0.length()) + mbt_ffi_store32(ptr + 4, ptr1) + + () + } + } + + let address = mbt_ffi_malloc(value.aliases.length() * 8) + for index = 0; index < value.aliases.length(); index = index + 1 { + let iter_elem : String = value.aliases[index] + let iter_base = address + index * 8 + + let ptr2 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr2) + } + mbt_ffi_store32(ptr + 16, value.aliases.length()) + mbt_ffi_store32(ptr + 12, address) + + let address4 = mbt_ffi_malloc(value.examples.length() * 8) + for index5 = 0; index5 < value.examples.length(); index5 = index5 + 1 { + let iter_elem : String = value.examples[index5] + let iter_base = address4 + index5 * 8 + + let ptr3 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr3) + } + mbt_ffi_store32(ptr + 24, value.examples.length()) + mbt_ffi_store32(ptr + 20, address4) + + match value.deprecated { + None => { + mbt_ffi_store8(ptr + 28, 0) + + () + } + Some(payload7) => { + mbt_ffi_store8(ptr + 28, 1) + + let ptr8 = mbt_ffi_str2ptr(payload7) + mbt_ffi_store32(ptr + 36, payload7.length()) + mbt_ffi_store32(ptr + 32, ptr8) + + () + } + } + + match value.role { + None => { + mbt_ffi_store8(ptr + 40, 0) + + () + } + Some(payload10) => { + mbt_ffi_store8(ptr + 40, 1) + __wit_bindgen_lower_t18(ptr + 44, payload10) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t22(ptr : Int, value : @types.NamedFieldType) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + mbt_ffi_store32(ptr + 8, value.body) + __wit_bindgen_lower_t21(ptr + 12, value.metadata) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t24(ptr : Int, value : @types.VariantCaseType) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + match value.payload { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 8, 1) + mbt_ffi_store32(ptr + 12, payload1) + + () + } + } + __wit_bindgen_lower_t21(ptr + 16, value.metadata) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t25(ptr : Int, value : @types.FixedListSpec) -> Unit { + mbt_ffi_store32(ptr + 0, value.element) + mbt_ffi_store32(ptr + 4, value.length.reinterpret_as_int()) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t26(ptr : Int, value : @types.MapSpec) -> Unit { + mbt_ffi_store32(ptr + 0, value.key) + mbt_ffi_store32(ptr + 4, value.value) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t27(ptr : Int, value : @types.ResultSpec) -> Unit { + match value.ok { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + mbt_ffi_store32(ptr + 4, payload0) + + () + } + } + + match value.err { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload2) => { + mbt_ffi_store8(ptr + 8, 1) + mbt_ffi_store32(ptr + 12, payload2) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t28(ptr : Int, value : @types.NumericBound) -> Unit { + match value { + Signed(payload) => { + mbt_ffi_store8(ptr + 0, 0) + mbt_ffi_store64(ptr + 8, payload) + + () + } + Unsigned(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + mbt_ffi_store64(ptr + 8, payload0.reinterpret_as_int64()) + + () + } + FloatBits(payload1) => { + mbt_ffi_store8(ptr + 0, 2) + mbt_ffi_store64(ptr + 8, payload1.reinterpret_as_int64()) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t30( + ptr : Int, + value : @types.NumericRestrictions, +) -> Unit { + match value.min { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + __wit_bindgen_lower_t28(ptr + 8, payload0) + + () + } + } + + match value.max { + None => { + mbt_ffi_store8(ptr + 24, 0) + + () + } + Some(payload2) => { + mbt_ffi_store8(ptr + 24, 1) + __wit_bindgen_lower_t28(ptr + 32, payload2) + + () + } + } + + match value.unit { + None => { + mbt_ffi_store8(ptr + 48, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 48, 1) + + let ptr5 = mbt_ffi_str2ptr(payload4) + mbt_ffi_store32(ptr + 56, payload4.length()) + mbt_ffi_store32(ptr + 52, ptr5) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t33(ptr : Int, value : @types.TextRestrictions) -> Unit { + match value.languages { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + + let address = mbt_ffi_malloc(payload0.length() * 8) + for index = 0; index < payload0.length(); index = index + 1 { + let iter_elem : String = payload0[index] + let iter_base = address + index * 8 + + let ptr1 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr1) + } + mbt_ffi_store32(ptr + 8, payload0.length()) + mbt_ffi_store32(ptr + 4, address) + + () + } + } + + match value.min_length { + None => { + mbt_ffi_store8(ptr + 12, 0) + + () + } + Some(payload3) => { + mbt_ffi_store8(ptr + 12, 1) + mbt_ffi_store32(ptr + 16, payload3.reinterpret_as_int()) + + () + } + } + + match value.max_length { + None => { + mbt_ffi_store8(ptr + 20, 0) + + () + } + Some(payload5) => { + mbt_ffi_store8(ptr + 20, 1) + mbt_ffi_store32(ptr + 24, payload5.reinterpret_as_int()) + + () + } + } + + match value.regex { + None => { + mbt_ffi_store8(ptr + 28, 0) + + () + } + Some(payload7) => { + mbt_ffi_store8(ptr + 28, 1) + + let ptr8 = mbt_ffi_str2ptr(payload7) + mbt_ffi_store32(ptr + 36, payload7.length()) + mbt_ffi_store32(ptr + 32, ptr8) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t34( + ptr : Int, + value : @types.BinaryRestrictions, +) -> Unit { + match value.mime_types { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + + let address = mbt_ffi_malloc(payload0.length() * 8) + for index = 0; index < payload0.length(); index = index + 1 { + let iter_elem : String = payload0[index] + let iter_base = address + index * 8 + + let ptr1 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr1) + } + mbt_ffi_store32(ptr + 8, payload0.length()) + mbt_ffi_store32(ptr + 4, address) + + () + } + } + + match value.min_bytes { + None => { + mbt_ffi_store8(ptr + 12, 0) + + () + } + Some(payload3) => { + mbt_ffi_store8(ptr + 12, 1) + mbt_ffi_store32(ptr + 16, payload3.reinterpret_as_int()) + + () + } + } + + match value.max_bytes { + None => { + mbt_ffi_store8(ptr + 20, 0) + + () + } + Some(payload5) => { + mbt_ffi_store8(ptr + 20, 1) + mbt_ffi_store32(ptr + 24, payload5.reinterpret_as_int()) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t37(ptr : Int, value : @types.PathSpec) -> Unit { + mbt_ffi_store8(ptr + 0, value.direction.ordinal()) + mbt_ffi_store8(ptr + 1, value.kind.ordinal()) + + match value.allowed_mime_types { + None => { + mbt_ffi_store8(ptr + 4, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 4, 1) + + let address = mbt_ffi_malloc(payload0.length() * 8) + for index = 0; index < payload0.length(); index = index + 1 { + let iter_elem : String = payload0[index] + let iter_base = address + index * 8 + + let ptr1 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr1) + } + mbt_ffi_store32(ptr + 12, payload0.length()) + mbt_ffi_store32(ptr + 8, address) + + () + } + } + + match value.allowed_extensions { + None => { + mbt_ffi_store8(ptr + 16, 0) + + () + } + Some(payload3) => { + mbt_ffi_store8(ptr + 16, 1) + + let address5 = mbt_ffi_malloc(payload3.length() * 8) + for index6 = 0; index6 < payload3.length(); index6 = index6 + 1 { + let iter_elem : String = payload3[index6] + let iter_base = address5 + index6 * 8 + + let ptr4 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr4) + } + mbt_ffi_store32(ptr + 24, payload3.length()) + mbt_ffi_store32(ptr + 20, address5) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t38(ptr : Int, value : @types.UrlRestrictions) -> Unit { + match value.allowed_schemes { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + + let address = mbt_ffi_malloc(payload0.length() * 8) + for index = 0; index < payload0.length(); index = index + 1 { + let iter_elem : String = payload0[index] + let iter_base = address + index * 8 + + let ptr1 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr1) + } + mbt_ffi_store32(ptr + 8, payload0.length()) + mbt_ffi_store32(ptr + 4, address) + + () + } + } + + match value.allowed_hosts { + None => { + mbt_ffi_store8(ptr + 12, 0) + + () + } + Some(payload3) => { + mbt_ffi_store8(ptr + 12, 1) + + let address5 = mbt_ffi_malloc(payload3.length() * 8) + for index6 = 0; index6 < payload3.length(); index6 = index6 + 1 { + let iter_elem : String = payload3[index6] + let iter_base = address5 + index6 * 8 + + let ptr4 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr4) + } + mbt_ffi_store32(ptr + 20, payload3.length()) + mbt_ffi_store32(ptr + 16, address5) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t39(ptr : Int, value : @types.QuantityValue) -> Unit { + mbt_ffi_store64(ptr + 0, value.mantissa) + mbt_ffi_store32(ptr + 8, value.scale) + + let ptr0 = mbt_ffi_str2ptr(value.unit) + mbt_ffi_store32(ptr + 16, value.unit.length()) + mbt_ffi_store32(ptr + 12, ptr0) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t41(ptr : Int, value : @types.QuantitySpec) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.base_unit) + mbt_ffi_store32(ptr + 4, value.base_unit.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + let address = mbt_ffi_malloc(value.allowed_suffixes.length() * 8) + for index = 0; index < value.allowed_suffixes.length(); index = index + 1 { + let iter_elem : String = value.allowed_suffixes[index] + let iter_base = address + index * 8 + + let ptr1 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr1) + } + mbt_ffi_store32(ptr + 12, value.allowed_suffixes.length()) + mbt_ffi_store32(ptr + 8, address) + + match value.min { + None => { + mbt_ffi_store8(ptr + 16, 0) + + () + } + Some(payload2) => { + mbt_ffi_store8(ptr + 16, 1) + __wit_bindgen_lower_t39(ptr + 24, payload2) + + () + } + } + + match value.max { + None => { + mbt_ffi_store8(ptr + 48, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 48, 1) + __wit_bindgen_lower_t39(ptr + 56, payload4) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t42( + ptr : Int, + value : @types.FieldDiscriminator, +) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.field_name) + mbt_ffi_store32(ptr + 4, value.field_name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + match value.literal { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 8, 1) + + let ptr2 = mbt_ffi_str2ptr(payload1) + mbt_ffi_store32(ptr + 16, payload1.length()) + mbt_ffi_store32(ptr + 12, ptr2) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t43(ptr : Int, value : @types.DiscriminatorRule) -> Unit { + match value { + Prefix(payload) => { + mbt_ffi_store8(ptr + 0, 0) + + let ptr0 = mbt_ffi_str2ptr(payload) + mbt_ffi_store32(ptr + 8, payload.length()) + mbt_ffi_store32(ptr + 4, ptr0) + + () + } + Suffix(payload1) => { + mbt_ffi_store8(ptr + 0, 1) + + let ptr2 = mbt_ffi_str2ptr(payload1) + mbt_ffi_store32(ptr + 8, payload1.length()) + mbt_ffi_store32(ptr + 4, ptr2) + + () + } + Contains(payload3) => { + mbt_ffi_store8(ptr + 0, 2) + + let ptr4 = mbt_ffi_str2ptr(payload3) + mbt_ffi_store32(ptr + 8, payload3.length()) + mbt_ffi_store32(ptr + 4, ptr4) + + () + } + Regex(payload5) => { + mbt_ffi_store8(ptr + 0, 3) + + let ptr6 = mbt_ffi_str2ptr(payload5) + mbt_ffi_store32(ptr + 8, payload5.length()) + mbt_ffi_store32(ptr + 4, ptr6) + + () + } + FieldEquals(payload7) => { + mbt_ffi_store8(ptr + 0, 4) + __wit_bindgen_lower_t42(ptr + 4, payload7) + + () + } + FieldAbsent(payload8) => { + mbt_ffi_store8(ptr + 0, 5) + + let ptr9 = mbt_ffi_str2ptr(payload8) + mbt_ffi_store32(ptr + 8, payload8.length()) + mbt_ffi_store32(ptr + 4, ptr9) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t44(ptr : Int, value : @types.UnionBranch) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.tag) + mbt_ffi_store32(ptr + 4, value.tag.length()) + mbt_ffi_store32(ptr + 0, ptr0) + mbt_ffi_store32(ptr + 8, value.body) + __wit_bindgen_lower_t43(ptr + 12, value.discriminator) + __wit_bindgen_lower_t21(ptr + 36, value.metadata) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t46(ptr : Int, value : @types.UnionSpec) -> Unit { + let address = mbt_ffi_malloc(value.branches.length() * 92) + for index = 0; index < value.branches.length(); index = index + 1 { + let iter_elem : @types.UnionBranch = value.branches[index] + let iter_base = address + index * 92 + __wit_bindgen_lower_t44(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 4, value.branches.length()) + mbt_ffi_store32(ptr + 0, address) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t47(ptr : Int, value : @types.SecretSpec) -> Unit { + mbt_ffi_store32(ptr + 0, value.inner) + + match value.category { + None => { + mbt_ffi_store8(ptr + 4, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 4, 1) + + let ptr1 = mbt_ffi_str2ptr(payload0) + mbt_ffi_store32(ptr + 12, payload0.length()) + mbt_ffi_store32(ptr + 8, ptr1) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t48(ptr : Int, value : @types.QuotaTokenSpec) -> Unit { + match value.resource_name { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + + let ptr1 = mbt_ffi_str2ptr(payload0) + mbt_ffi_store32(ptr + 8, payload0.length()) + mbt_ffi_store32(ptr + 4, ptr1) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t49( + ptr : Int, + value : @types.PermissionCardSpec, +) -> Unit { + mbt_ffi_store8(ptr + 0, if value.polymorphic { 1 } else { 0 }) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t54(ptr : Int, value : @types.SchemaTypeBody) -> Unit { + match value { + RefType(payload) => { + mbt_ffi_store8(ptr + 0, 0) + mbt_ffi_store32(ptr + 8, payload) + + () + } + BoolType => { + mbt_ffi_store8(ptr + 0, 1) + + () + } + S8Type(payload1) => { + mbt_ffi_store8(ptr + 0, 2) + + match payload1 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload3) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload3) + + () + } + } + + () + } + S16Type(payload4) => { + mbt_ffi_store8(ptr + 0, 3) + + match payload4 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload6) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload6) + + () + } + } + + () + } + S32Type(payload7) => { + mbt_ffi_store8(ptr + 0, 4) + + match payload7 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload9) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload9) + + () + } + } + + () + } + S64Type(payload10) => { + mbt_ffi_store8(ptr + 0, 5) + + match payload10 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload12) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload12) + + () + } + } + + () + } + U8Type(payload13) => { + mbt_ffi_store8(ptr + 0, 6) + + match payload13 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload15) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload15) + + () + } + } + + () + } + U16Type(payload16) => { + mbt_ffi_store8(ptr + 0, 7) + + match payload16 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload18) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload18) + + () + } + } + + () + } + U32Type(payload19) => { + mbt_ffi_store8(ptr + 0, 8) + + match payload19 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload21) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload21) + + () + } + } + + () + } + U64Type(payload22) => { + mbt_ffi_store8(ptr + 0, 9) + + match payload22 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload24) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload24) + + () + } + } + + () + } + F32Type(payload25) => { + mbt_ffi_store8(ptr + 0, 10) + + match payload25 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload27) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload27) + + () + } + } + + () + } + F64Type(payload28) => { + mbt_ffi_store8(ptr + 0, 11) + + match payload28 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload30) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload30) + + () + } + } + + () + } + CharType => { + mbt_ffi_store8(ptr + 0, 12) + + () + } + StringType => { + mbt_ffi_store8(ptr + 0, 13) + + () + } + RecordType(payload33) => { + mbt_ffi_store8(ptr + 0, 14) + + let address = mbt_ffi_malloc(payload33.length() * 68) + for index = 0; index < payload33.length(); index = index + 1 { + let iter_elem : @types.NamedFieldType = payload33[index] + let iter_base = address + index * 68 + __wit_bindgen_lower_t22(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload33.length()) + mbt_ffi_store32(ptr + 8, address) + + () + } + VariantType(payload34) => { + mbt_ffi_store8(ptr + 0, 15) + + let address35 = mbt_ffi_malloc(payload34.length() * 72) + for index36 = 0; index36 < payload34.length(); index36 = index36 + 1 { + let iter_elem : @types.VariantCaseType = payload34[index36] + let iter_base = address35 + index36 * 72 + __wit_bindgen_lower_t24(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload34.length()) + mbt_ffi_store32(ptr + 8, address35) + + () + } + EnumType(payload37) => { + mbt_ffi_store8(ptr + 0, 16) + + let address39 = mbt_ffi_malloc(payload37.length() * 8) + for index40 = 0; index40 < payload37.length(); index40 = index40 + 1 { + let iter_elem : String = payload37[index40] + let iter_base = address39 + index40 * 8 + + let ptr38 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr38) + } + mbt_ffi_store32(ptr + 12, payload37.length()) + mbt_ffi_store32(ptr + 8, address39) + + () + } + FlagsType(payload41) => { + mbt_ffi_store8(ptr + 0, 17) + + let address43 = mbt_ffi_malloc(payload41.length() * 8) + for index44 = 0; index44 < payload41.length(); index44 = index44 + 1 { + let iter_elem : String = payload41[index44] + let iter_base = address43 + index44 * 8 + + let ptr42 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr42) + } + mbt_ffi_store32(ptr + 12, payload41.length()) + mbt_ffi_store32(ptr + 8, address43) + + () + } + TupleType(payload45) => { + mbt_ffi_store8(ptr + 0, 18) + + let address46 = mbt_ffi_malloc(payload45.length() * 4) + for index47 = 0; index47 < payload45.length(); index47 = index47 + 1 { + let iter_elem : Int = payload45[index47] + let iter_base = address46 + index47 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload45.length()) + mbt_ffi_store32(ptr + 8, address46) + + () + } + ListType(payload48) => { + mbt_ffi_store8(ptr + 0, 19) + mbt_ffi_store32(ptr + 8, payload48) + + () + } + FixedListType(payload49) => { + mbt_ffi_store8(ptr + 0, 20) + __wit_bindgen_lower_t25(ptr + 8, payload49) + + () + } + MapType(payload50) => { + mbt_ffi_store8(ptr + 0, 21) + __wit_bindgen_lower_t26(ptr + 8, payload50) + + () + } + OptionType(payload51) => { + mbt_ffi_store8(ptr + 0, 22) + mbt_ffi_store32(ptr + 8, payload51) + + () + } + ResultType(payload52) => { + mbt_ffi_store8(ptr + 0, 23) + __wit_bindgen_lower_t27(ptr + 8, payload52) + + () + } + TextType(payload53) => { + mbt_ffi_store8(ptr + 0, 24) + __wit_bindgen_lower_t33(ptr + 8, payload53) + + () + } + BinaryType(payload54) => { + mbt_ffi_store8(ptr + 0, 25) + __wit_bindgen_lower_t34(ptr + 8, payload54) + + () + } + PathType(payload55) => { + mbt_ffi_store8(ptr + 0, 26) + __wit_bindgen_lower_t37(ptr + 8, payload55) + + () + } + UrlType(payload56) => { + mbt_ffi_store8(ptr + 0, 27) + __wit_bindgen_lower_t38(ptr + 8, payload56) + + () + } + DatetimeType => { + mbt_ffi_store8(ptr + 0, 28) + + () + } + DurationType => { + mbt_ffi_store8(ptr + 0, 29) + + () + } + QuantityType(payload59) => { + mbt_ffi_store8(ptr + 0, 30) + __wit_bindgen_lower_t41(ptr + 8, payload59) + + () + } + UnionType(payload60) => { + mbt_ffi_store8(ptr + 0, 31) + __wit_bindgen_lower_t46(ptr + 8, payload60) + + () + } + SecretType(payload61) => { + mbt_ffi_store8(ptr + 0, 32) + __wit_bindgen_lower_t47(ptr + 8, payload61) + + () + } + QuotaTokenType(payload62) => { + mbt_ffi_store8(ptr + 0, 33) + __wit_bindgen_lower_t48(ptr + 8, payload62) + + () + } + PermissionCardType(payload63) => { + mbt_ffi_store8(ptr + 0, 34) + __wit_bindgen_lower_t49(ptr + 8, payload63) + + () + } + FutureType(payload64) => { + mbt_ffi_store8(ptr + 0, 35) + + match payload64 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload66) => { + mbt_ffi_store8(ptr + 8, 1) + mbt_ffi_store32(ptr + 12, payload66) + + () + } + } + + () + } + StreamType(payload67) => { + mbt_ffi_store8(ptr + 0, 36) + + match payload67 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload69) => { + mbt_ffi_store8(ptr + 8, 1) + mbt_ffi_store32(ptr + 12, payload69) + + () + } + } + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t55(ptr : Int, value : @types.SchemaTypeNode) -> Unit { + __wit_bindgen_lower_t54(ptr + 0, value.body) + __wit_bindgen_lower_t21(ptr + 88, value.metadata) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t58(ptr : Int, value : @types.SchemaGraph) -> Unit { + let address = mbt_ffi_malloc(value.type_nodes.length() * 144) + for index = 0; index < value.type_nodes.length(); index = index + 1 { + let iter_elem : @types.SchemaTypeNode = value.type_nodes[index] + let iter_base = address + index * 144 + __wit_bindgen_lower_t55(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 4, value.type_nodes.length()) + mbt_ffi_store32(ptr + 0, address) + + let address0 = mbt_ffi_malloc(value.defs.length() * 24) + for index1 = 0; index1 < value.defs.length(); index1 = index1 + 1 { + let iter_elem : @types.SchemaTypeDef = value.defs[index1] + let iter_base = address0 + index1 * 24 + __wit_bindgen_lower_t17(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, value.defs.length()) + mbt_ffi_store32(ptr + 8, address0) + mbt_ffi_store32(ptr + 16, value.root) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t60( + ptr : Int, + value : @types.VariantValuePayload, +) -> Unit { + mbt_ffi_store32(ptr + 0, value.case.reinterpret_as_int()) + + match value.payload { + None => { + mbt_ffi_store8(ptr + 4, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 4, 1) + mbt_ffi_store32(ptr + 8, payload0) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t61(ptr : Int, value : @types.MapEntry) -> Unit { + mbt_ffi_store32(ptr + 0, value.key) + mbt_ffi_store32(ptr + 4, value.value) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t62( + ptr : Int, + value : @types.ResultValuePayload, +) -> Unit { + match value { + OkValue(payload) => { + mbt_ffi_store8(ptr + 0, 0) + + match payload { + None => { + mbt_ffi_store8(ptr + 4, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 4, 1) + mbt_ffi_store32(ptr + 8, payload1) + + () + } + } + + () + } + ErrValue(payload2) => { + mbt_ffi_store8(ptr + 0, 1) + + match payload2 { + None => { + mbt_ffi_store8(ptr + 4, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 4, 1) + mbt_ffi_store32(ptr + 8, payload4) + + () + } + } + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t63(ptr : Int, value : @types.TextValuePayload) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.text) + mbt_ffi_store32(ptr + 4, value.text.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + match value.language { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 8, 1) + + let ptr2 = mbt_ffi_str2ptr(payload1) + mbt_ffi_store32(ptr + 16, payload1.length()) + mbt_ffi_store32(ptr + 12, ptr2) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t65( + ptr : Int, + value : @types.BinaryValuePayload, +) -> Unit { + let ptr0 = mbt_ffi_bytes2ptr(value.bytes) + + mbt_ffi_store32(ptr + 4, value.bytes.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + match value.mime_type { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 8, 1) + + let ptr2 = mbt_ffi_str2ptr(payload1) + mbt_ffi_store32(ptr + 16, payload1.length()) + mbt_ffi_store32(ptr + 12, ptr2) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t66( + ptr : Int, + value : @types.DurationValuePayload, +) -> Unit { + mbt_ffi_store64(ptr + 0, value.nanoseconds) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t67(ptr : Int, value : @types.UnionValuePayload) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.tag) + mbt_ffi_store32(ptr + 4, value.tag.length()) + mbt_ffi_store32(ptr + 0, ptr0) + mbt_ffi_store32(ptr + 8, value.body) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t74(ptr : Int, value : @types.SchemaValueNode) -> Unit { + match value { + BoolValue(payload) => { + mbt_ffi_store8(ptr + 0, 0) + mbt_ffi_store8(ptr + 8, if payload { 1 } else { 0 }) + + () + } + S8Value(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + mbt_ffi_store8(ptr + 8, mbt_ffi_extend8(payload0)) + + () + } + S16Value(payload1) => { + mbt_ffi_store8(ptr + 0, 2) + mbt_ffi_store16(ptr + 8, mbt_ffi_extend16(payload1)) + + () + } + S32Value(payload2) => { + mbt_ffi_store8(ptr + 0, 3) + mbt_ffi_store32(ptr + 8, payload2) + + () + } + S64Value(payload3) => { + mbt_ffi_store8(ptr + 0, 4) + mbt_ffi_store64(ptr + 8, payload3) + + () + } + U8Value(payload4) => { + mbt_ffi_store8(ptr + 0, 5) + mbt_ffi_store8(ptr + 8, payload4.to_int()) + + () + } + U16Value(payload5) => { + mbt_ffi_store8(ptr + 0, 6) + mbt_ffi_store16(ptr + 8, payload5.reinterpret_as_int()) + + () + } + U32Value(payload6) => { + mbt_ffi_store8(ptr + 0, 7) + mbt_ffi_store32(ptr + 8, payload6.reinterpret_as_int()) + + () + } + U64Value(payload7) => { + mbt_ffi_store8(ptr + 0, 8) + mbt_ffi_store64(ptr + 8, payload7.reinterpret_as_int64()) + + () + } + F32Value(payload8) => { + mbt_ffi_store8(ptr + 0, 9) + mbt_ffi_storef32(ptr + 8, payload8) + + () + } + F64Value(payload9) => { + mbt_ffi_store8(ptr + 0, 10) + mbt_ffi_storef64(ptr + 8, payload9) + + () + } + CharValue(payload10) => { + mbt_ffi_store8(ptr + 0, 11) + mbt_ffi_store32(ptr + 8, payload10.to_int()) + + () + } + StringValue(payload11) => { + mbt_ffi_store8(ptr + 0, 12) + + let ptr12 = mbt_ffi_str2ptr(payload11) + mbt_ffi_store32(ptr + 12, payload11.length()) + mbt_ffi_store32(ptr + 8, ptr12) + + () + } + RecordValue(payload13) => { + mbt_ffi_store8(ptr + 0, 13) + + let address = mbt_ffi_malloc(payload13.length() * 4) + for index = 0; index < payload13.length(); index = index + 1 { + let iter_elem : Int = payload13[index] + let iter_base = address + index * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload13.length()) + mbt_ffi_store32(ptr + 8, address) + + () + } + VariantValue(payload14) => { + mbt_ffi_store8(ptr + 0, 14) + __wit_bindgen_lower_t60(ptr + 8, payload14) + + () + } + EnumValue(payload15) => { + mbt_ffi_store8(ptr + 0, 15) + mbt_ffi_store32(ptr + 8, payload15.reinterpret_as_int()) + + () + } + FlagsValue(payload16) => { + mbt_ffi_store8(ptr + 0, 16) + + let address17 = mbt_ffi_malloc(payload16.length() * 1) + for index18 = 0; index18 < payload16.length(); index18 = index18 + 1 { + let iter_elem : Bool = payload16[index18] + let iter_base = address17 + index18 * 1 + mbt_ffi_store8(iter_base + 0, if iter_elem { 1 } else { 0 }) + } + mbt_ffi_store32(ptr + 12, payload16.length()) + mbt_ffi_store32(ptr + 8, address17) + + () + } + TupleValue(payload19) => { + mbt_ffi_store8(ptr + 0, 17) + + let address20 = mbt_ffi_malloc(payload19.length() * 4) + for index21 = 0; index21 < payload19.length(); index21 = index21 + 1 { + let iter_elem : Int = payload19[index21] + let iter_base = address20 + index21 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload19.length()) + mbt_ffi_store32(ptr + 8, address20) + + () + } + ListValue(payload22) => { + mbt_ffi_store8(ptr + 0, 18) + + let address23 = mbt_ffi_malloc(payload22.length() * 4) + for index24 = 0; index24 < payload22.length(); index24 = index24 + 1 { + let iter_elem : Int = payload22[index24] + let iter_base = address23 + index24 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload22.length()) + mbt_ffi_store32(ptr + 8, address23) + + () + } + FixedListValue(payload25) => { + mbt_ffi_store8(ptr + 0, 19) + + let address26 = mbt_ffi_malloc(payload25.length() * 4) + for index27 = 0; index27 < payload25.length(); index27 = index27 + 1 { + let iter_elem : Int = payload25[index27] + let iter_base = address26 + index27 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload25.length()) + mbt_ffi_store32(ptr + 8, address26) + + () + } + MapValue(payload28) => { + mbt_ffi_store8(ptr + 0, 20) + + let address29 = mbt_ffi_malloc(payload28.length() * 8) + for index30 = 0; index30 < payload28.length(); index30 = index30 + 1 { + let iter_elem : @types.MapEntry = payload28[index30] + let iter_base = address29 + index30 * 8 + __wit_bindgen_lower_t61(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload28.length()) + mbt_ffi_store32(ptr + 8, address29) + + () + } + OptionValue(payload31) => { + mbt_ffi_store8(ptr + 0, 21) + + match payload31 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload33) => { + mbt_ffi_store8(ptr + 8, 1) + mbt_ffi_store32(ptr + 12, payload33) + + () + } + } + + () + } + ResultValue(payload34) => { + mbt_ffi_store8(ptr + 0, 22) + __wit_bindgen_lower_t62(ptr + 8, payload34) + + () + } + TextValue(payload35) => { + mbt_ffi_store8(ptr + 0, 23) + __wit_bindgen_lower_t63(ptr + 8, payload35) + + () + } + BinaryValue(payload36) => { + mbt_ffi_store8(ptr + 0, 24) + __wit_bindgen_lower_t65(ptr + 8, payload36) + + () + } + PathValue(payload37) => { + mbt_ffi_store8(ptr + 0, 25) + + let ptr38 = mbt_ffi_str2ptr(payload37) + mbt_ffi_store32(ptr + 12, payload37.length()) + mbt_ffi_store32(ptr + 8, ptr38) + + () + } + UrlValue(payload39) => { + mbt_ffi_store8(ptr + 0, 26) + + let ptr40 = mbt_ffi_str2ptr(payload39) + mbt_ffi_store32(ptr + 12, payload39.length()) + mbt_ffi_store32(ptr + 8, ptr40) + + () + } + DatetimeValue(payload41) => { + mbt_ffi_store8(ptr + 0, 27) + __wit_bindgen_lower_t5(ptr + 8, payload41) + + () + } + DurationValue(payload42) => { + mbt_ffi_store8(ptr + 0, 28) + __wit_bindgen_lower_t66(ptr + 8, payload42) + + () + } + QuantityValueNode(payload43) => { + mbt_ffi_store8(ptr + 0, 29) + __wit_bindgen_lower_t39(ptr + 8, payload43) + + () + } + UnionValue(payload44) => { + mbt_ffi_store8(ptr + 0, 30) + __wit_bindgen_lower_t67(ptr + 8, payload44) + + () + } + SecretValue(payload45) => { + mbt_ffi_store8(ptr + 0, 31) + + let @types.Secret(handle) = payload45 + mbt_ffi_store32(ptr + 8, handle) + + () + } + QuotaTokenHandle(payload46) => { + mbt_ffi_store8(ptr + 0, 32) + + let @types.QuotaToken(handle47) = payload46 + mbt_ffi_store32(ptr + 8, handle47) + + () + } + PermissionCardHandle(payload48) => { + mbt_ffi_store8(ptr + 0, 33) + + let @types.PermissionCard(handle49) = payload48 + mbt_ffi_store32(ptr + 8, handle49) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t76(ptr : Int, value : @types.SchemaValueTree) -> Unit { + let address = mbt_ffi_malloc(value.value_nodes.length() * 32) + for index = 0; index < value.value_nodes.length(); index = index + 1 { + let iter_elem : @types.SchemaValueNode = value.value_nodes[index] + let iter_base = address + index * 32 + __wit_bindgen_lower_t74(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 4, value.value_nodes.length()) + mbt_ffi_store32(ptr + 0, address) + mbt_ffi_store32(ptr + 8, value.root) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t77(ptr : Int, value : @types.TypedSchemaValue) -> Unit { + __wit_bindgen_lower_t58(ptr + 0, value.graph) + __wit_bindgen_lower_t76(ptr + 20, value.value) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t470( + ptr : Int, + value : @common.CommandAnnotations, +) -> Unit { + mbt_ffi_store8(ptr + 0, if value.read_only { 1 } else { 0 }) + mbt_ffi_store8(ptr + 1, if value.destructive { 1 } else { 0 }) + mbt_ffi_store8(ptr + 2, if value.idempotent { 1 } else { 0 }) + mbt_ffi_store8(ptr + 3, if value.open_world { 1 } else { 0 }) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t472(ptr : Int, value : @common.Repetition) -> Unit { + match value { + Repeated => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Delimited(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + mbt_ffi_store32(ptr + 4, payload0.to_int()) + + () + } + Either(payload1) => { + mbt_ffi_store8(ptr + 0, 2) + mbt_ffi_store32(ptr + 4, payload1.to_int()) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t473( + ptr : Int, + value : @common.RepeatableListShape, +) -> Unit { + __wit_bindgen_lower_t472(ptr + 0, value.repetition) + mbt_ffi_store32(ptr + 8, value.item_type) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t474( + ptr : Int, + value : @common.RepeatableMapShape, +) -> Unit { + __wit_bindgen_lower_t472(ptr + 0, value.repetition) + mbt_ffi_store32(ptr + 8, value.map_type) + mbt_ffi_store8(ptr + 12, value.duplicate_key_policy.ordinal()) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t475(ptr : Int, value : @common.OptionShape) -> Unit { + match value { + Scalar(payload) => { + mbt_ffi_store8(ptr + 0, 0) + mbt_ffi_store32(ptr + 4, payload) + + () + } + OptionalScalar(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + mbt_ffi_store32(ptr + 4, payload0) + + () + } + RepeatableList(payload1) => { + mbt_ffi_store8(ptr + 0, 2) + __wit_bindgen_lower_t473(ptr + 4, payload1) + + () + } + RepeatableMap(payload2) => { + mbt_ffi_store8(ptr + 0, 3) + __wit_bindgen_lower_t474(ptr + 4, payload2) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t476(ptr : Int, value : @common.BoolFlagShape) -> Unit { + mbt_ffi_store8(ptr + 0, if value.default { 1 } else { 0 }) + mbt_ffi_store8(ptr + 1, if value.negatable { 1 } else { 0 }) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t478(ptr : Int, value : @common.FlagShape) -> Unit { + match value { + BoolFlag(payload) => { + mbt_ffi_store8(ptr + 0, 0) + __wit_bindgen_lower_t476(ptr + 4, payload) + + () + } + CountFlag(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + + match payload0 { + None => { + mbt_ffi_store8(ptr + 4, 0) + + () + } + Some(payload2) => { + mbt_ffi_store8(ptr + 4, 1) + mbt_ffi_store32(ptr + 8, payload2.reinterpret_as_int()) + + () + } + } + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t479(ptr : Int, value : @common.ValueIsRef) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + __wit_bindgen_lower_t76(ptr + 8, value.value) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t480(ptr : Int, value : @common.Ref) -> Unit { + match value { + Present(payload) => { + mbt_ffi_store8(ptr + 0, 0) + + let ptr0 = mbt_ffi_str2ptr(payload) + mbt_ffi_store32(ptr + 8, payload.length()) + mbt_ffi_store32(ptr + 4, ptr0) + + () + } + ValueIs(payload1) => { + mbt_ffi_store8(ptr + 0, 1) + __wit_bindgen_lower_t479(ptr + 4, payload1) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t482(ptr : Int, value : @common.RefGroup) -> Unit { + let address = mbt_ffi_malloc(value.refs.length() * 24) + for index = 0; index < value.refs.length(); index = index + 1 { + let iter_elem : @common.Ref = value.refs[index] + let iter_base = address + index * 24 + __wit_bindgen_lower_t480(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 4, value.refs.length()) + mbt_ffi_store32(ptr + 0, address) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t484(ptr : Int, value : @common.ImpliesC) -> Unit { + mbt_ffi_store8(ptr + 0, value.lhs_quant.ordinal()) + + let address = mbt_ffi_malloc(value.lhs.length() * 24) + for index = 0; index < value.lhs.length(); index = index + 1 { + let iter_elem : @common.Ref = value.lhs[index] + let iter_base = address + index * 24 + __wit_bindgen_lower_t480(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 8, value.lhs.length()) + mbt_ffi_store32(ptr + 4, address) + mbt_ffi_store8(ptr + 12, value.rhs_quant.ordinal()) + + let address0 = mbt_ffi_malloc(value.rhs.length() * 24) + for index1 = 0; index1 < value.rhs.length(); index1 = index1 + 1 { + let iter_elem : @common.Ref = value.rhs[index1] + let iter_base = address0 + index1 * 24 + __wit_bindgen_lower_t480(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 20, value.rhs.length()) + mbt_ffi_store32(ptr + 16, address0) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t485(ptr : Int, value : @common.ForbidsC) -> Unit { + mbt_ffi_store8(ptr + 0, value.lhs_quant.ordinal()) + + let address = mbt_ffi_malloc(value.lhs.length() * 24) + for index = 0; index < value.lhs.length(); index = index + 1 { + let iter_elem : @common.Ref = value.lhs[index] + let iter_base = address + index * 24 + __wit_bindgen_lower_t480(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 8, value.lhs.length()) + mbt_ffi_store32(ptr + 4, address) + + let address0 = mbt_ffi_malloc(value.rhs.length() * 24) + for index1 = 0; index1 < value.rhs.length(); index1 = index1 + 1 { + let iter_elem : @common.Ref = value.rhs[index1] + let iter_base = address0 + index1 * 24 + __wit_bindgen_lower_t480(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 16, value.rhs.length()) + mbt_ffi_store32(ptr + 12, address0) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t487(ptr : Int, value : @common.Constraint) -> Unit { + match value { + RequiresAll(payload) => { + mbt_ffi_store8(ptr + 0, 0) + + let address = mbt_ffi_malloc(payload.length() * 24) + for index = 0; index < payload.length(); index = index + 1 { + let iter_elem : @common.Ref = payload[index] + let iter_base = address + index * 24 + __wit_bindgen_lower_t480(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 8, payload.length()) + mbt_ffi_store32(ptr + 4, address) + + () + } + AllOrNone(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + + let address1 = mbt_ffi_malloc(payload0.length() * 24) + for index2 = 0; index2 < payload0.length(); index2 = index2 + 1 { + let iter_elem : @common.Ref = payload0[index2] + let iter_base = address1 + index2 * 24 + __wit_bindgen_lower_t480(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 8, payload0.length()) + mbt_ffi_store32(ptr + 4, address1) + + () + } + RequiresAny(payload3) => { + mbt_ffi_store8(ptr + 0, 2) + + let address4 = mbt_ffi_malloc(payload3.length() * 24) + for index5 = 0; index5 < payload3.length(); index5 = index5 + 1 { + let iter_elem : @common.Ref = payload3[index5] + let iter_base = address4 + index5 * 24 + __wit_bindgen_lower_t480(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 8, payload3.length()) + mbt_ffi_store32(ptr + 4, address4) + + () + } + MutexGroups(payload6) => { + mbt_ffi_store8(ptr + 0, 3) + + let address7 = mbt_ffi_malloc(payload6.length() * 8) + for index8 = 0; index8 < payload6.length(); index8 = index8 + 1 { + let iter_elem : @common.RefGroup = payload6[index8] + let iter_base = address7 + index8 * 8 + __wit_bindgen_lower_t482(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 8, payload6.length()) + mbt_ffi_store32(ptr + 4, address7) + + () + } + Implies(payload9) => { + mbt_ffi_store8(ptr + 0, 4) + __wit_bindgen_lower_t484(ptr + 4, payload9) + + () + } + Forbids(payload10) => { + mbt_ffi_store8(ptr + 0, 5) + __wit_bindgen_lower_t485(ptr + 4, payload10) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t489(ptr : Int, value : @common.Example) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.title) + mbt_ffi_store32(ptr + 4, value.title.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + let ptr1 = mbt_ffi_str2ptr(value.body) + mbt_ffi_store32(ptr + 12, value.body.length()) + mbt_ffi_store32(ptr + 8, ptr1) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t491(ptr : Int, value : @common.Doc) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.summary) + mbt_ffi_store32(ptr + 4, value.summary.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + let ptr1 = mbt_ffi_str2ptr(value.description) + mbt_ffi_store32(ptr + 12, value.description.length()) + mbt_ffi_store32(ptr + 8, ptr1) + + let address = mbt_ffi_malloc(value.examples.length() * 16) + for index = 0; index < value.examples.length(); index = index + 1 { + let iter_elem : @common.Example = value.examples[index] + let iter_base = address + index * 16 + __wit_bindgen_lower_t489(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 20, value.examples.length()) + mbt_ffi_store32(ptr + 16, address) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t494(ptr : Int, value : @common.Positional) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + __wit_bindgen_lower_t491(ptr + 8, value.doc) + + match value.value_name { + None => { + mbt_ffi_store8(ptr + 32, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 32, 1) + + let ptr2 = mbt_ffi_str2ptr(payload1) + mbt_ffi_store32(ptr + 40, payload1.length()) + mbt_ffi_store32(ptr + 36, ptr2) + + () + } + } + mbt_ffi_store32(ptr + 44, value.type_) + + match value.default { + None => { + mbt_ffi_store8(ptr + 48, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 48, 1) + __wit_bindgen_lower_t76(ptr + 52, payload4) + + () + } + } + mbt_ffi_store8(ptr + 64, if value.required { 1 } else { 0 }) + mbt_ffi_store8(ptr + 65, if value.accepts_stdio { 1 } else { 0 }) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t495(ptr : Int, value : @common.TailPositional) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + __wit_bindgen_lower_t491(ptr + 8, value.doc) + + match value.value_name { + None => { + mbt_ffi_store8(ptr + 32, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 32, 1) + + let ptr2 = mbt_ffi_str2ptr(payload1) + mbt_ffi_store32(ptr + 40, payload1.length()) + mbt_ffi_store32(ptr + 36, ptr2) + + () + } + } + mbt_ffi_store32(ptr + 44, value.item_type) + mbt_ffi_store32(ptr + 48, value.min.reinterpret_as_int()) + + match value.max { + None => { + mbt_ffi_store8(ptr + 52, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 52, 1) + mbt_ffi_store32(ptr + 56, payload4.reinterpret_as_int()) + + () + } + } + + match value.separator { + None => { + mbt_ffi_store8(ptr + 60, 0) + + () + } + Some(payload6) => { + mbt_ffi_store8(ptr + 60, 1) + + let ptr7 = mbt_ffi_str2ptr(payload6) + mbt_ffi_store32(ptr + 68, payload6.length()) + mbt_ffi_store32(ptr + 64, ptr7) + + () + } + } + mbt_ffi_store8(ptr + 72, if value.verbatim { 1 } else { 0 }) + mbt_ffi_store8(ptr + 73, if value.accepts_stdio { 1 } else { 0 }) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t498(ptr : Int, value : @common.Positionals) -> Unit { + let address = mbt_ffi_malloc(value.fixed.length() * 68) + for index = 0; index < value.fixed.length(); index = index + 1 { + let iter_elem : @common.Positional = value.fixed[index] + let iter_base = address + index * 68 + __wit_bindgen_lower_t494(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 4, value.fixed.length()) + mbt_ffi_store32(ptr + 0, address) + + match value.tail { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t495(ptr + 12, payload0) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t501(ptr : Int, value : @common.OptionSpec) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.long) + mbt_ffi_store32(ptr + 4, value.long.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + match value.short { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 8, 1) + mbt_ffi_store32(ptr + 12, payload1.to_int()) + + () + } + } + + let address = mbt_ffi_malloc(value.aliases.length() * 8) + for index = 0; index < value.aliases.length(); index = index + 1 { + let iter_elem : String = value.aliases[index] + let iter_base = address + index * 8 + + let ptr2 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr2) + } + mbt_ffi_store32(ptr + 20, value.aliases.length()) + mbt_ffi_store32(ptr + 16, address) + __wit_bindgen_lower_t491(ptr + 24, value.doc) + + match value.value_name { + None => { + mbt_ffi_store8(ptr + 48, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 48, 1) + + let ptr5 = mbt_ffi_str2ptr(payload4) + mbt_ffi_store32(ptr + 56, payload4.length()) + mbt_ffi_store32(ptr + 52, ptr5) + + () + } + } + __wit_bindgen_lower_t475(ptr + 60, value.shape) + + match value.default { + None => { + mbt_ffi_store8(ptr + 80, 0) + + () + } + Some(payload7) => { + mbt_ffi_store8(ptr + 80, 1) + __wit_bindgen_lower_t76(ptr + 84, payload7) + + () + } + } + mbt_ffi_store8(ptr + 96, if value.required { 1 } else { 0 }) + + match value.env_var { + None => { + mbt_ffi_store8(ptr + 100, 0) + + () + } + Some(payload9) => { + mbt_ffi_store8(ptr + 100, 1) + + let ptr10 = mbt_ffi_str2ptr(payload9) + mbt_ffi_store32(ptr + 108, payload9.length()) + mbt_ffi_store32(ptr + 104, ptr10) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t502(ptr : Int, value : @common.FlagSpec) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.long) + mbt_ffi_store32(ptr + 4, value.long.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + match value.short { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 8, 1) + mbt_ffi_store32(ptr + 12, payload1.to_int()) + + () + } + } + + let address = mbt_ffi_malloc(value.aliases.length() * 8) + for index = 0; index < value.aliases.length(); index = index + 1 { + let iter_elem : String = value.aliases[index] + let iter_base = address + index * 8 + + let ptr2 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr2) + } + mbt_ffi_store32(ptr + 20, value.aliases.length()) + mbt_ffi_store32(ptr + 16, address) + __wit_bindgen_lower_t491(ptr + 24, value.doc) + __wit_bindgen_lower_t478(ptr + 48, value.shape) + + match value.env_var { + None => { + mbt_ffi_store8(ptr + 60, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 60, 1) + + let ptr5 = mbt_ffi_str2ptr(payload4) + mbt_ffi_store32(ptr + 68, payload4.length()) + mbt_ffi_store32(ptr + 64, ptr5) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t505(ptr : Int, value : @common.Globals) -> Unit { + let address = mbt_ffi_malloc(value.options.length() * 112) + for index = 0; index < value.options.length(); index = index + 1 { + let iter_elem : @common.OptionSpec = value.options[index] + let iter_base = address + index * 112 + __wit_bindgen_lower_t501(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 4, value.options.length()) + mbt_ffi_store32(ptr + 0, address) + + let address0 = mbt_ffi_malloc(value.flags.length() * 72) + for index1 = 0; index1 < value.flags.length(); index1 = index1 + 1 { + let iter_elem : @common.FlagSpec = value.flags[index1] + let iter_base = address0 + index1 * 72 + __wit_bindgen_lower_t502(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, value.flags.length()) + mbt_ffi_store32(ptr + 8, address0) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t506(ptr : Int, value : @common.StreamSpec) -> Unit { + __wit_bindgen_lower_t491(ptr + 0, value.doc) + + let address = mbt_ffi_malloc(value.mime.length() * 8) + for index = 0; index < value.mime.length(); index = index + 1 { + let iter_elem : String = value.mime[index] + let iter_base = address + index * 8 + + let ptr0 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr0) + } + mbt_ffi_store32(ptr + 28, value.mime.length()) + mbt_ffi_store32(ptr + 24, address) + mbt_ffi_store8(ptr + 32, if value.required { 1 } else { 0 }) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t507(ptr : Int, value : @common.Formatter) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + __wit_bindgen_lower_t491(ptr + 8, value.doc) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t509(ptr : Int, value : @common.ResultSpec) -> Unit { + mbt_ffi_store32(ptr + 0, value.type_) + __wit_bindgen_lower_t491(ptr + 4, value.doc) + + let address = mbt_ffi_malloc(value.formatters.length() * 32) + for index = 0; index < value.formatters.length(); index = index + 1 { + let iter_elem : @common.Formatter = value.formatters[index] + let iter_base = address + index * 32 + __wit_bindgen_lower_t507(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 32, value.formatters.length()) + mbt_ffi_store32(ptr + 28, address) + + let ptr0 = mbt_ffi_str2ptr(value.default_formatter) + mbt_ffi_store32(ptr + 40, value.default_formatter.length()) + mbt_ffi_store32(ptr + 36, ptr0) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t511(ptr : Int, value : @common.ErrorCase) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + __wit_bindgen_lower_t491(ptr + 8, value.doc) + mbt_ffi_store8(ptr + 32, value.kind.ordinal()) + mbt_ffi_store8(ptr + 33, value.exit_code.to_int()) + + match value.payload { + None => { + mbt_ffi_store8(ptr + 36, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 36, 1) + mbt_ffi_store32(ptr + 40, payload1) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t517(ptr : Int, value : @common.CommandBody) -> Unit { + __wit_bindgen_lower_t498(ptr + 0, value.positionals) + + let address = mbt_ffi_malloc(value.options.length() * 112) + for index = 0; index < value.options.length(); index = index + 1 { + let iter_elem : @common.OptionSpec = value.options[index] + let iter_base = address + index * 112 + __wit_bindgen_lower_t501(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 92, value.options.length()) + mbt_ffi_store32(ptr + 88, address) + + let address0 = mbt_ffi_malloc(value.flags.length() * 72) + for index1 = 0; index1 < value.flags.length(); index1 = index1 + 1 { + let iter_elem : @common.FlagSpec = value.flags[index1] + let iter_base = address0 + index1 * 72 + __wit_bindgen_lower_t502(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 100, value.flags.length()) + mbt_ffi_store32(ptr + 96, address0) + + let address2 = mbt_ffi_malloc(value.constraints.length() * 28) + for index3 = 0; index3 < value.constraints.length(); index3 = index3 + 1 { + let iter_elem : @common.Constraint = value.constraints[index3] + let iter_base = address2 + index3 * 28 + __wit_bindgen_lower_t487(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 108, value.constraints.length()) + mbt_ffi_store32(ptr + 104, address2) + + match value.stdin { + None => { + mbt_ffi_store8(ptr + 112, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 112, 1) + __wit_bindgen_lower_t506(ptr + 116, payload4) + + () + } + } + + match value.stdout { + None => { + mbt_ffi_store8(ptr + 152, 0) + + () + } + Some(payload6) => { + mbt_ffi_store8(ptr + 152, 1) + __wit_bindgen_lower_t506(ptr + 156, payload6) + + () + } + } + + match value.result { + None => { + mbt_ffi_store8(ptr + 192, 0) + + () + } + Some(payload8) => { + mbt_ffi_store8(ptr + 192, 1) + __wit_bindgen_lower_t509(ptr + 196, payload8) + + () + } + } + + let address9 = mbt_ffi_malloc(value.errors.length() * 44) + for index10 = 0; index10 < value.errors.length(); index10 = index10 + 1 { + let iter_elem : @common.ErrorCase = value.errors[index10] + let iter_base = address9 + index10 * 44 + __wit_bindgen_lower_t511(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 244, value.errors.length()) + mbt_ffi_store32(ptr + 240, address9) + + match value.annotations { + None => { + mbt_ffi_store8(ptr + 248, 0) + + () + } + Some(payload12) => { + mbt_ffi_store8(ptr + 248, 1) + __wit_bindgen_lower_t470(ptr + 249, payload12) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t520(ptr : Int, value : @common.CommandNode) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + let address = mbt_ffi_malloc(value.aliases.length() * 8) + for index = 0; index < value.aliases.length(); index = index + 1 { + let iter_elem : String = value.aliases[index] + let iter_base = address + index * 8 + + let ptr1 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr1) + } + mbt_ffi_store32(ptr + 12, value.aliases.length()) + mbt_ffi_store32(ptr + 8, address) + __wit_bindgen_lower_t491(ptr + 16, value.doc) + __wit_bindgen_lower_t505(ptr + 40, value.globals) + + let address2 = mbt_ffi_malloc(value.subcommands.length() * 4) + for index3 = 0; index3 < value.subcommands.length(); index3 = index3 + 1 { + let iter_elem : Int = value.subcommands[index3] + let iter_base = address2 + index3 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 60, value.subcommands.length()) + mbt_ffi_store32(ptr + 56, address2) + + match value.body { + None => { + mbt_ffi_store8(ptr + 64, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 64, 1) + __wit_bindgen_lower_t517(ptr + 68, payload4) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t522(ptr : Int, value : @common.CommandTree) -> Unit { + let address = mbt_ffi_malloc(value.nodes.length() * 324) + for index = 0; index < value.nodes.length(); index = index + 1 { + let iter_elem : @common.CommandNode = value.nodes[index] + let iter_base = address + index * 324 + __wit_bindgen_lower_t520(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 4, value.nodes.length()) + mbt_ffi_store32(ptr + 0, address) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t523(ptr : Int, value : @common.Tool) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.version) + mbt_ffi_store32(ptr + 4, value.version.length()) + mbt_ffi_store32(ptr + 0, ptr0) + __wit_bindgen_lower_t522(ptr + 8, value.commands) + __wit_bindgen_lower_t58(ptr + 16, value.schema) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t525( + ptr : Int, + value : @common.MonomorphicScope, +) -> Unit { + __wit_bindgen_lower_t523(ptr + 0, value.presented) + + match value.expected { + None => { + mbt_ffi_store8(ptr + 36, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 36, 1) + __wit_bindgen_lower_t523(ptr + 40, payload0) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t526( + ptr : Int, + value : @common.ToolMiddlewareScope, +) -> Unit { + match value { + Monomorphic(payload) => { + mbt_ffi_store8(ptr + 0, 0) + __wit_bindgen_lower_t525(ptr + 4, payload) + + () + } + Universal => { + mbt_ffi_store8(ptr + 0, 1) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t527(ptr : Int, value : @common.ToolMiddleware) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + let address = mbt_ffi_malloc(value.aliases.length() * 8) + for index = 0; index < value.aliases.length(); index = index + 1 { + let iter_elem : String = value.aliases[index] + let iter_base = address + index * 8 + + let ptr1 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr1) + } + mbt_ffi_store32(ptr + 12, value.aliases.length()) + mbt_ffi_store32(ptr + 8, address) + __wit_bindgen_lower_t491(ptr + 16, value.doc) + __wit_bindgen_lower_t526(ptr + 40, value.scope) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t528(ptr : Int, value : @common.ToolError) -> Unit { + match value { + InvalidToolName(payload) => { + mbt_ffi_store8(ptr + 0, 0) + + let ptr0 = mbt_ffi_str2ptr(payload) + mbt_ffi_store32(ptr + 8, payload.length()) + mbt_ffi_store32(ptr + 4, ptr0) + + () + } + InvalidCommandPath(payload1) => { + mbt_ffi_store8(ptr + 0, 1) + + let address = mbt_ffi_malloc(payload1.length() * 8) + for index = 0; index < payload1.length(); index = index + 1 { + let iter_elem : String = payload1[index] + let iter_base = address + index * 8 + + let ptr2 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr2) + } + mbt_ffi_store32(ptr + 8, payload1.length()) + mbt_ffi_store32(ptr + 4, address) + + () + } + InvalidInput(payload3) => { + mbt_ffi_store8(ptr + 0, 2) + + let ptr4 = mbt_ffi_str2ptr(payload3) + mbt_ffi_store32(ptr + 8, payload3.length()) + mbt_ffi_store32(ptr + 4, ptr4) + + () + } + ConstraintViolation(payload5) => { + mbt_ffi_store8(ptr + 0, 3) + + let ptr6 = mbt_ffi_str2ptr(payload5) + mbt_ffi_store32(ptr + 8, payload5.length()) + mbt_ffi_store32(ptr + 4, ptr6) + + () + } + InvalidResult(payload7) => { + mbt_ffi_store8(ptr + 0, 4) + + let ptr8 = mbt_ffi_str2ptr(payload7) + mbt_ffi_store32(ptr + 8, payload7.length()) + mbt_ffi_store32(ptr + 4, ptr8) + + () + } + CustomError(payload9) => { + mbt_ffi_store8(ptr + 0, 5) + __wit_bindgen_lower_t77(ptr + 4, payload9) + + () + } + } +} + +///| +#owned(bytes) +extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = + #|(func (param i32) (result i32) local.get 0) + +///| +extern "wasm" fn mbt_ffi_extend16(value : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.extend16_s) + +///| +extern "wasm" fn mbt_ffi_extend8(value : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.extend8_s) + +///| +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) + +///| +extern "wasm" fn mbt_ffi_load16(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load16_s) + +///| +extern "wasm" fn mbt_ffi_load16_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load16_u) + +///| +extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load) + +///| +extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = + #|(func (param i32) (result i64) local.get 0 i64.load) + +///| +extern "wasm" fn mbt_ffi_load8(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_s) + +///| +extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_u) + +///| +extern "wasm" fn mbt_ffi_loadf32(offset : Int) -> Float = + #|(func (param i32) (result f32) local.get 0 f32.load) + +///| +extern "wasm" fn mbt_ffi_loadf64(offset : Int) -> Double = + #|(func (param i32) (result f64) local.get 0 f64.load) + +///| +extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = + #|(func (param i32) (result i32) (local i32) + #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc + #| local.tee 1 i32.const 0 call $moonbit.init_array8 + #| local.get 1) + +///| +extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array8 + #| local.get 0) + +///| +extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array16 + #| local.get 0) + +///| +extern "wasm" fn mbt_ffi_store16(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store16) + +///| +extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) + +///| +extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = + #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) + +///| +extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) + +///| +extern "wasm" fn mbt_ffi_storef32(offset : Int, value : Float) = + #|(func (param i32) (param f32) local.get 0 local.get 1 f32.store) + +///| +extern "wasm" fn mbt_ffi_storef64(offset : Int, value : Double) = + #|(func (param i32) (param f64) local.get 0 local.get 1 f64.store) + +///| +#owned(str) +extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = + #|(func (param i32) (result i32) local.get 0) diff --git a/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/tool-middleware-guest/moon.pkg b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/tool-middleware-guest/moon.pkg new file mode 100644 index 0000000000..d68a855101 --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/tool-middleware-guest/moon.pkg @@ -0,0 +1,11 @@ +import { + "golemcloud/golem_sdk/async-core", + "golemcloud/golem_sdk/interface/golem/agent/common" @common0, + "golemcloud/golem_sdk/interface/golem/core/types", + "golemcloud/golem_sdk/interface/golem/tool/common", + "golemcloud/golem_sdk/tool-middleware" @toolMiddleware, +} + +warnings = "-44" + +supported_targets = "+wasm" diff --git a/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/tool-middleware-guest/pkg.generated.mbti b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/tool-middleware-guest/pkg.generated.mbti new file mode 100644 index 0000000000..014923274b --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/tool-middleware-guest/pkg.generated.mbti @@ -0,0 +1,22 @@ +// Generated using `moon info`, DON'T EDIT IT +package "golemcloud/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/tool-middleware-guest" + +import { + "golemcloud/golem_sdk/async-core", + "golemcloud/golem_sdk/interface/golem/core/types", +} + +// Values +pub fn discover_tool_middlewares() -> Result[Array[@golemcloud/golem_sdk/interface/golem/tool/common.ToolMiddleware], @golemcloud/golem_sdk/interface/golem/tool/common.ToolError] + +pub fn get_tool_middleware(String) -> Result[@golemcloud/golem_sdk/interface/golem/tool/common.ToolMiddleware, @golemcloud/golem_sdk/interface/golem/tool/common.ToolError] + +pub async fn invoke_tool_middleware(String, String, @golemcloud/golem_sdk/interface/golem/tool/common.Tool, Array[String], @types.TypedSchemaValue, @async-core.Stream[Byte]?, @golemcloud/golem_sdk/interface/golem/agent/common.Principal, @golemcloud/golem_sdk/interface/golem/tool/common.UnderlyingTool, @async-core.TaskGroup[Unit]) -> Result[@golemcloud/golem_sdk/interface/golem/tool/common.InvocationResult, @golemcloud/golem_sdk/interface/golem/tool/common.ToolError] + +// Errors + +// Types and methods + +// Type aliases + +// Traits diff --git a/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/tool-middleware-guest/stub.mbt b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/tool-middleware-guest/stub.mbt new file mode 100644 index 0000000000..d854fb3d27 --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/tool-middleware-guest/stub.mbt @@ -0,0 +1,38 @@ +///| +/// Enumerate every middleware definition exported by this component. +pub fn discover_tool_middlewares() -> Result[ + Array[@common.ToolMiddleware], + @common.ToolError, +] { + Ok(@toolMiddleware.discover_tool_middlewares()) +} + +///| +/// Look up one middleware definition by canonical name. +pub fn get_tool_middleware( + name : String, +) -> Result[@common.ToolMiddleware, @common.ToolError] { + @toolMiddleware.get_registered_tool_middleware(name) +} + +///| +/// Invoke one middleware layer around its runtime-bound next inner layer. +pub async fn invoke_tool_middleware( + middleware_name : String, + tool_name : String, + tool_metadata : @common.Tool, + command_path : Array[String], + input : @types.TypedSchemaValue, + stdin : @async-core.Stream[Byte]?, + principal : @common0.Principal, + wrapped : @common.UnderlyingTool, + background_group : @async-core.TaskGroup[Unit], +) -> Result[@common.InvocationResult, @common.ToolError] { + let underlying = @toolMiddleware.UnderlyingTool::from_wit( + wrapped, background_group, + ) + @toolMiddleware.invoke_registered_tool_middleware( + middleware_name, tool_name, tool_metadata, command_path, input, stdin, principal, + underlying, + ) +} diff --git a/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/tool-middleware-guest/top.mbt b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/tool-middleware-guest/top.mbt new file mode 100644 index 0000000000..f1231a40d6 --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/tool-middleware-guest/top.mbt @@ -0,0 +1,28 @@ +// Generated by `wit-bindgen` 0.59.0. DO NOT EDIT! + +///| +/// Enumerate every middleware definition exported by this component. +declare pub fn discover_tool_middlewares() -> Result[ + Array[@common.ToolMiddleware], + @common.ToolError, +] + +///| +/// Look up one middleware definition by canonical name. +declare pub fn get_tool_middleware( + name : String, +) -> Result[@common.ToolMiddleware, @common.ToolError] + +///| +/// Invoke one middleware layer around its runtime-bound next inner layer. +declare pub async fn invoke_tool_middleware( + middleware_name : String, + tool_name : String, + tool_metadata : @common.Tool, + command_path : Array[String], + input : @types.TypedSchemaValue, + stdin : @async-core.Stream[Byte]?, + principal : @common0.Principal, + wrapped : @common.UnderlyingTool, + background_group : @async-core.TaskGroup[Unit], +) -> Result[@common.InvocationResult, @common.ToolError] diff --git a/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/moon.pkg b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/moon.pkg new file mode 100644 index 0000000000..e3a92cb0c1 --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/moon.pkg @@ -0,0 +1,47 @@ +warnings = "-44" + +import { + "golemcloud/golem_sdk/gen-agent-tool-middleware/interface/golem/agent/guest" @guest0, + "golemcloud/golem_sdk/gen-agent-tool-middleware/interface/golem/api/load-snapshot", + "golemcloud/golem_sdk/gen-agent-tool-middleware/interface/golem/api/save-snapshot", + "golemcloud/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/guest", + "golemcloud/golem_sdk/gen-agent-tool-middleware/interface/golem/tool/tool-middleware-guest", +} + +supported_targets = "+wasm" + +options( + link: { + "wasm": { + "export-memory-name": "memory", + "heap-start-address": 16, + "exports": [ + "mbt_ffi_cabi_realloc:cabi_realloc", + "wasmExportAsyncInitialize:[callback][async-lift]golem:agent/guest@2.0.0#initialize", + "wasmExportAsyncInvokeGolemAgentGuest:[callback][async-lift]golem:agent/guest@2.0.0#invoke", + "wasmExportAsyncInvokeGolemToolGuest:[callback][async-lift]golem:tool/guest@0.1.0#invoke", + "wasmExportAsyncInvokeToolMiddleware:[callback][async-lift]golem:tool/tool-middleware-guest@0.1.0#invoke-tool-middleware", + "wasmExportAsyncLoad:[callback][async-lift]golem:api/load-snapshot@1.5.0#load", + "wasmExportAsyncSave:[callback][async-lift]golem:api/save-snapshot@1.5.0#save", + "wasmExportDiscoverAgentTypes:golem:agent/guest@2.0.0#discover-agent-types", + "wasmExportDiscoverAgentTypesPostReturn:cabi_post_golem:agent/guest@2.0.0#discover-agent-types", + "wasmExportDiscoverToolMiddlewares:golem:tool/tool-middleware-guest@0.1.0#discover-tool-middlewares", + "wasmExportDiscoverToolMiddlewaresPostReturn:cabi_post_golem:tool/tool-middleware-guest@0.1.0#discover-tool-middlewares", + "wasmExportDiscoverTools:golem:tool/guest@0.1.0#discover-tools", + "wasmExportDiscoverToolsPostReturn:cabi_post_golem:tool/guest@0.1.0#discover-tools", + "wasmExportGetDefinition:golem:agent/guest@2.0.0#get-definition", + "wasmExportGetDefinitionPostReturn:cabi_post_golem:agent/guest@2.0.0#get-definition", + "wasmExportGetTool:golem:tool/guest@0.1.0#get-tool", + "wasmExportGetToolMiddleware:golem:tool/tool-middleware-guest@0.1.0#get-tool-middleware", + "wasmExportGetToolMiddlewarePostReturn:cabi_post_golem:tool/tool-middleware-guest@0.1.0#get-tool-middleware", + "wasmExportGetToolPostReturn:cabi_post_golem:tool/guest@0.1.0#get-tool", + "wasmExportInitialize:[async-lift]golem:agent/guest@2.0.0#initialize", + "wasmExportInvokeGolemAgentGuest:[async-lift]golem:agent/guest@2.0.0#invoke", + "wasmExportInvokeGolemToolGuest:[async-lift]golem:tool/guest@0.1.0#invoke", + "wasmExportInvokeToolMiddleware:[async-lift]golem:tool/tool-middleware-guest@0.1.0#invoke-tool-middleware", + "wasmExportLoad:[async-lift]golem:api/load-snapshot@1.5.0#load", + "wasmExportSave:[async-lift]golem:api/save-snapshot@1.5.0#save", + ], + }, + }, +) diff --git a/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/pkg.generated.mbti b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/pkg.generated.mbti new file mode 100644 index 0000000000..a7c7d3cc6d --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-agent-tool-middleware/pkg.generated.mbti @@ -0,0 +1,13 @@ +// Generated using `moon info`, DON'T EDIT IT +package "golemcloud/golem_sdk/gen-agent-tool-middleware" + +// Values +pub fn mbt_ffi_cabi_realloc(Int, Int, Int, Int) -> Int + +// Errors + +// Types and methods + +// Type aliases + +// Traits diff --git a/sdks/moonbit/golem_sdk/gen-tool-middleware/ffi.mbt b/sdks/moonbit/golem_sdk/gen-tool-middleware/ffi.mbt new file mode 100644 index 0000000000..cbdbd52e5f --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-tool-middleware/ffi.mbt @@ -0,0 +1,89 @@ +// Generated by `wit-bindgen` 0.59.0. DO NOT EDIT! + +///| +pub fn mbt_ffi_cabi_realloc( + src_offset : Int, + src_size : Int, + _dst_alignment : Int, + dst_size : Int, +) -> Int { + // malloc + if src_offset == 0 && src_size == 0 { + return mbt_ffi_malloc(dst_size) + } + // free + if dst_size == 0 { + mbt_ffi_free(src_offset) + return 0 + } + // realloc + let dst = mbt_ffi_malloc(dst_size) + mbt_ffi_copy( + dst, + src_offset, + if src_size < dst_size { + src_size + } else { + dst_size + }, + ) + mbt_ffi_free(src_offset) + dst +} + +///| +extern "wasm" fn mbt_ffi_copy(dest : Int, src : Int, len : Int) = + #|(func (param i32) (param i32) (param i32) local.get 0 local.get 1 local.get 2 memory.copy) + +///| +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) + +///| +extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = + #|(func (param i32) (result i32) (local i32) + #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc + #| local.tee 1 i32.const 0 call $moonbit.init_array8 + #| local.get 1) + +///| +#doc(hidden) +pub fn wasmExportAsyncInvokeToolMiddleware( + event_raw : Int, + waitable : Int, + code : Int, +) -> Int { + @tool-middleware-guest.wasmExportAsyncInvokeToolMiddleware( + event_raw, waitable, code, + ) +} + +///| +#doc(hidden) +pub fn wasmExportDiscoverToolMiddlewares() -> Int { + @tool-middleware-guest.wasmExportDiscoverToolMiddlewares() +} + +///| +#doc(hidden) +pub fn wasmExportDiscoverToolMiddlewaresPostReturn(p0 : Int) -> Unit { + @tool-middleware-guest.wasmExportDiscoverToolMiddlewaresPostReturn(p0) +} + +///| +#doc(hidden) +pub fn wasmExportGetToolMiddleware(p0 : Int, p1 : Int) -> Int { + @tool-middleware-guest.wasmExportGetToolMiddleware(p0, p1) +} + +///| +#doc(hidden) +pub fn wasmExportGetToolMiddlewarePostReturn(p0 : Int) -> Unit { + @tool-middleware-guest.wasmExportGetToolMiddlewarePostReturn(p0) +} + +///| +#doc(hidden) +pub fn wasmExportInvokeToolMiddleware(p0 : Int) -> Int { + @tool-middleware-guest.wasmExportInvokeToolMiddleware(p0) +} diff --git a/sdks/moonbit/golem_sdk/gen-tool-middleware/interface/golem/tool/tool-middleware-guest/README.md b/sdks/moonbit/golem_sdk/gen-tool-middleware/interface/golem/tool/tool-middleware-guest/README.md new file mode 100644 index 0000000000..2bfd6083da --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-tool-middleware/interface/golem/tool/tool-middleware-guest/README.md @@ -0,0 +1 @@ +Interface exported by components that provide tool middleware. \ No newline at end of file diff --git a/sdks/moonbit/golem_sdk/gen-tool-middleware/interface/golem/tool/tool-middleware-guest/ffi.mbt b/sdks/moonbit/golem_sdk/gen-tool-middleware/interface/golem/tool/tool-middleware-guest/ffi.mbt new file mode 100644 index 0000000000..2986b36e82 --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-tool-middleware/interface/golem/tool/tool-middleware-guest/ffi.mbt @@ -0,0 +1,21887 @@ +// Generated by `wit-bindgen` 0.59.0. DO NOT EDIT! + +///| +#doc(hidden) +pub fn wasmExportDiscoverToolMiddlewares() -> Int { + let result : Result[Array[@common.ToolMiddleware], @common.ToolError] = discover_tool_middlewares() + let return_area = mbt_ffi_malloc(40) + + match result { + Ok(payload) => { + mbt_ffi_store8(return_area + 0, 0) + + let address = mbt_ffi_malloc(payload.length() * 120) + for index = 0; index < payload.length(); index = index + 1 { + let iter_elem : @common.ToolMiddleware = payload[index] + let iter_base = address + index * 120 + __wit_bindgen_lower_t527(iter_base + 0, iter_elem) + } + mbt_ffi_store32(return_area + 8, payload.length()) + mbt_ffi_store32(return_area + 4, address) + + () + } + Err(payload0) => { + mbt_ffi_store8(return_area + 0, 1) + __wit_bindgen_lower_t528(return_area + 4, payload0) + + () + } + } + let ret = return_area + return ret +} + +///| +#doc(hidden) +pub fn wasmExportDiscoverToolMiddlewaresPostReturn(p0 : Int) -> Unit { + match mbt_ffi_load8_u(p0 + 0) { + 0 => { + for index141 = 0 + index141 < mbt_ffi_load32(p0 + 8) + index141 = index141 + 1 { + let iter_base = mbt_ffi_load32(p0 + 4) + index141 * 120 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index = 0; index < mbt_ffi_load32(iter_base + 12); index = index + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index0 = 0 + index0 < mbt_ffi_load32(iter_base + 36) + index0 = index0 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index0 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + + for index48 = 0 + index48 < mbt_ffi_load32(iter_base + 56) + index48 = index48 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 52) + index48 * 324 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index1 = 0 + index1 < mbt_ffi_load32(iter_base + 12) + index1 = index1 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index1 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index2 = 0 + index2 < mbt_ffi_load32(iter_base + 36) + index2 = index2 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index2 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index6 = 0 + index6 < mbt_ffi_load32(iter_base + 44) + index6 = index6 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index6 * 112 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index3 = 0 + index3 < mbt_ffi_load32(iter_base + 20) + index3 = index3 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index3 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index4 = 0 + index4 < mbt_ffi_load32(iter_base + 44) + index4 = index4 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index4 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => { + for index5 = 0 + index5 < mbt_ffi_load32(iter_base + 88) + index5 = index5 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 84) + + index5 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 100) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + for index9 = 0 + index9 < mbt_ffi_load32(iter_base + 52) + index9 = index9 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + index9 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index7 = 0 + index7 < mbt_ffi_load32(iter_base + 20) + index7 = index7 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index7 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index8 = 0 + index8 < mbt_ffi_load32(iter_base + 44) + index8 = index8 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index8 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => { + for index12 = 0 + index12 < mbt_ffi_load32(iter_base + 72) + index12 = index12 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 68) + + index12 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index10 = 0 + index10 < mbt_ffi_load32(iter_base + 28) + index10 = index10 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index10 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + match mbt_ffi_load8_u(iter_base + 32) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => { + for index11 = 0 + index11 < mbt_ffi_load32(iter_base + 56) + index11 = index11 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 52) + + index11 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 80)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 88)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 96)) + + for index13 = 0 + index13 < mbt_ffi_load32(iter_base + 108) + index13 = index13 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 104) + + index13 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + + match mbt_ffi_load8_u(iter_base + 112) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 116)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 140) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 144)) + _ => panic() + } + } + _ => panic() + } + + for index17 = 0 + index17 < mbt_ffi_load32(iter_base + 160) + index17 = index17 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 156) + + index17 * 112 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index14 = 0 + index14 < mbt_ffi_load32(iter_base + 20) + index14 = index14 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index14 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index15 = 0 + index15 < mbt_ffi_load32(iter_base + 44) + index15 = index15 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + + index15 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => { + for index16 = 0 + index16 < mbt_ffi_load32(iter_base + 88) + index16 = index16 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 84) + + index16 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 100) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 156)) + + for index20 = 0 + index20 < mbt_ffi_load32(iter_base + 168) + index20 = index20 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 164) + + index20 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index18 = 0 + index18 < mbt_ffi_load32(iter_base + 20) + index18 = index18 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index18 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index19 = 0 + index19 < mbt_ffi_load32(iter_base + 44) + index19 = index19 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + + index19 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 164)) + + for index38 = 0 + index38 < mbt_ffi_load32(iter_base + 176) + index38 = index38 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 172) + + index38 * 28 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => { + for index22 = 0 + index22 < mbt_ffi_load32(iter_base + 8) + index22 = index22 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index22 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index21 = 0 + index21 < mbt_ffi_load32(iter_base + 16) + index21 = index21 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index21 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 1 => { + for index24 = 0 + index24 < mbt_ffi_load32(iter_base + 8) + index24 = index24 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index24 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index23 = 0 + index23 < mbt_ffi_load32(iter_base + 16) + index23 = index23 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index23 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 2 => { + for index26 = 0 + index26 < mbt_ffi_load32(iter_base + 8) + index26 = index26 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index26 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index25 = 0 + index25 < mbt_ffi_load32(iter_base + 16) + index25 = index25 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index25 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 3 => { + for index29 = 0 + index29 < mbt_ffi_load32(iter_base + 8) + index29 = index29 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index29 * 8 + + for index28 = 0 + index28 < mbt_ffi_load32(iter_base + 4) + index28 = index28 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 0) + + index28 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index27 = 0 + index27 < mbt_ffi_load32(iter_base + 16) + index27 = index27 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index27 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 4 => { + for index31 = 0 + index31 < mbt_ffi_load32(iter_base + 12) + index31 = index31 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index31 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index30 = 0 + index30 < mbt_ffi_load32(iter_base + 16) + index30 = index30 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index30 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index33 = 0 + index33 < mbt_ffi_load32(iter_base + 24) + index33 = index33 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 20) + + index33 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index32 = 0 + index32 < mbt_ffi_load32(iter_base + 16) + index32 = index32 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index32 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + } + 5 => { + for index35 = 0 + index35 < mbt_ffi_load32(iter_base + 12) + index35 = index35 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index35 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index34 = 0 + index34 < mbt_ffi_load32(iter_base + 16) + index34 = index34 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index34 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index37 = 0 + index37 < mbt_ffi_load32(iter_base + 20) + index37 = index37 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index37 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index36 = 0 + index36 < mbt_ffi_load32(iter_base + 16) + index36 = index36 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index36 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 172)) + + match mbt_ffi_load8_u(iter_base + 180) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 184)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 192)) + + for index39 = 0 + index39 < mbt_ffi_load32(iter_base + 204) + index39 = index39 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 200) + + index39 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 200)) + + for index40 = 0 + index40 < mbt_ffi_load32(iter_base + 212) + index40 = index40 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 208) + + index40 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 208)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 220) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 224)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 232)) + + for index41 = 0 + index41 < mbt_ffi_load32(iter_base + 244) + index41 = index41 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 240) + + index41 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 240)) + + for index42 = 0 + index42 < mbt_ffi_load32(iter_base + 252) + index42 = index42 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 248) + + index42 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 248)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 260) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 268)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 276)) + + for index43 = 0 + index43 < mbt_ffi_load32(iter_base + 288) + index43 = index43 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 284) + + index43 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 284)) + + for index45 = 0 + index45 < mbt_ffi_load32(iter_base + 296) + index45 = index45 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 292) + + index45 * 32 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index44 = 0 + index44 < mbt_ffi_load32(iter_base + 28) + index44 = index44 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index44 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 292)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 300)) + } + _ => panic() + } + + for index47 = 0 + index47 < mbt_ffi_load32(iter_base + 312) + index47 = index47 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 308) + + index47 * 44 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index46 = 0 + index46 < mbt_ffi_load32(iter_base + 28) + index46 = index46 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index46 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 308)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + + for index69 = 0 + index69 < mbt_ffi_load32(iter_base + 64) + index69 = index69 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 60) + index69 * 144 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 3 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 4 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 5 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 6 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 7 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 8 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 9 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 10 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 11 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 12 => () + 13 => () + 14 => { + for index51 = 0 + index51 < mbt_ffi_load32(iter_base + 12) + index51 = index51 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index51 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + for index49 = 0 + index49 < mbt_ffi_load32(iter_base + 28) + index49 = index49 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index49 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index50 = 0 + index50 < mbt_ffi_load32(iter_base + 36) + index50 = index50 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + + index50 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 52) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 60)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 15 => { + for index54 = 0 + index54 < mbt_ffi_load32(iter_base + 12) + index54 = index54 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index54 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index52 = 0 + index52 < mbt_ffi_load32(iter_base + 32) + index52 = index52 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index52 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index53 = 0 + index53 < mbt_ffi_load32(iter_base + 40) + index53 = index53 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + + index53 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 16 => { + for index55 = 0 + index55 < mbt_ffi_load32(iter_base + 12) + index55 = index55 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index55 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 17 => { + for index56 = 0 + index56 < mbt_ffi_load32(iter_base + 12) + index56 = index56 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index56 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => () + 20 => () + 21 => () + 22 => () + 23 => () + 24 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index57 = 0 + index57 < mbt_ffi_load32(iter_base + 16) + index57 = index57 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index57 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + } + 25 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index58 = 0 + index58 < mbt_ffi_load32(iter_base + 16) + index58 = index58 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index58 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + 26 => { + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => { + for index59 = 0 + index59 < mbt_ffi_load32(iter_base + 20) + index59 = index59 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index59 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => { + for index60 = 0 + index60 < mbt_ffi_load32(iter_base + 32) + index60 = index60 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index60 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + } + _ => panic() + } + } + 27 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index61 = 0 + index61 < mbt_ffi_load32(iter_base + 16) + index61 = index61 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index61 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 20) { + 0 => () + 1 => { + for index62 = 0 + index62 < mbt_ffi_load32(iter_base + 28) + index62 = index62 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index62 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + _ => panic() + } + } + 28 => () + 29 => () + 30 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index63 = 0 + index63 < mbt_ffi_load32(iter_base + 20) + index63 = index63 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index63 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 76)) + _ => panic() + } + } + 31 => { + for index66 = 0 + index66 < mbt_ffi_load32(iter_base + 12) + index66 = index66 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index66 * 92 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 4 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + } + 5 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + + for index64 = 0 + index64 < mbt_ffi_load32(iter_base + 52) + index64 = index64 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + + index64 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + for index65 = 0 + index65 < mbt_ffi_load32(iter_base + 60) + index65 = index65 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + + index65 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 32 => + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + 33 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + 34 => () + 35 => () + 36 => () + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 88) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 92)) + _ => panic() + } + + for index67 = 0 + index67 < mbt_ffi_load32(iter_base + 104) + index67 = index67 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index67 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + for index68 = 0 + index68 < mbt_ffi_load32(iter_base + 112) + index68 = index68 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index68 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + match mbt_ffi_load8_u(iter_base + 116) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 120)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 128) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 132) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 136)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 60)) + + for index70 = 0 + index70 < mbt_ffi_load32(iter_base + 72) + index70 = index70 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 68) + index70 * 24 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + + for index118 = 0 + index118 < mbt_ffi_load32(iter_base + 96) + index118 = index118 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 92) + + index118 * 324 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index71 = 0 + index71 < mbt_ffi_load32(iter_base + 12) + index71 = index71 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index71 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index72 = 0 + index72 < mbt_ffi_load32(iter_base + 36) + index72 = index72 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + + index72 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index76 = 0 + index76 < mbt_ffi_load32(iter_base + 44) + index76 = index76 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + + index76 * 112 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index73 = 0 + index73 < mbt_ffi_load32(iter_base + 20) + index73 = index73 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index73 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index74 = 0 + index74 < mbt_ffi_load32(iter_base + 44) + index74 = index74 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + + index74 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => { + for index75 = 0 + index75 < mbt_ffi_load32(iter_base + 88) + index75 = index75 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 84) + + index75 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 100) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + for index79 = 0 + index79 < mbt_ffi_load32(iter_base + 52) + index79 = index79 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + + index79 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index77 = 0 + index77 < mbt_ffi_load32(iter_base + 20) + index77 = index77 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index77 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index78 = 0 + index78 < mbt_ffi_load32(iter_base + 44) + index78 = index78 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + + index78 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => { + for index82 = 0 + index82 < mbt_ffi_load32(iter_base + 72) + index82 = index82 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 68) + + index82 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index80 = 0 + index80 < mbt_ffi_load32(iter_base + 28) + index80 = index80 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index80 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + match mbt_ffi_load8_u(iter_base + 32) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => { + for index81 = 0 + index81 < mbt_ffi_load32(iter_base + 56) + index81 = index81 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 52) + + index81 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 80)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 88)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 96)) + + for index83 = 0 + index83 < mbt_ffi_load32(iter_base + 108) + index83 = index83 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 104) + + index83 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + + match mbt_ffi_load8_u(iter_base + 112) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 116)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 140) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 144)) + _ => panic() + } + } + _ => panic() + } + + for index87 = 0 + index87 < mbt_ffi_load32(iter_base + 160) + index87 = index87 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 156) + + index87 * 112 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index84 = 0 + index84 < mbt_ffi_load32(iter_base + 20) + index84 = index84 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index84 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index85 = 0 + index85 < mbt_ffi_load32(iter_base + 44) + index85 = index85 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + + index85 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => { + for index86 = 0 + index86 < mbt_ffi_load32(iter_base + 88) + index86 = index86 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 84) + + index86 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 100) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 156)) + + for index90 = 0 + index90 < mbt_ffi_load32(iter_base + 168) + index90 = index90 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 164) + + index90 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index88 = 0 + index88 < mbt_ffi_load32(iter_base + 20) + index88 = index88 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index88 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index89 = 0 + index89 < mbt_ffi_load32(iter_base + 44) + index89 = index89 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + + index89 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 164)) + + for index108 = 0 + index108 < mbt_ffi_load32(iter_base + 176) + index108 = index108 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 172) + + index108 * 28 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => { + for index92 = 0 + index92 < mbt_ffi_load32(iter_base + 8) + index92 = index92 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index92 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index91 = 0 + index91 < mbt_ffi_load32(iter_base + 16) + index91 = index91 + 1 { + let iter_base = mbt_ffi_load32( + iter_base + 12, + ) + + index91 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 1 => { + for index94 = 0 + index94 < mbt_ffi_load32(iter_base + 8) + index94 = index94 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index94 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index93 = 0 + index93 < mbt_ffi_load32(iter_base + 16) + index93 = index93 + 1 { + let iter_base = mbt_ffi_load32( + iter_base + 12, + ) + + index93 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 2 => { + for index96 = 0 + index96 < mbt_ffi_load32(iter_base + 8) + index96 = index96 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index96 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index95 = 0 + index95 < mbt_ffi_load32(iter_base + 16) + index95 = index95 + 1 { + let iter_base = mbt_ffi_load32( + iter_base + 12, + ) + + index95 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 3 => { + for index99 = 0 + index99 < mbt_ffi_load32(iter_base + 8) + index99 = index99 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index99 * 8 + + for index98 = 0 + index98 < mbt_ffi_load32(iter_base + 4) + index98 = index98 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 0) + + index98 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index97 = 0 + index97 < mbt_ffi_load32(iter_base + 16) + index97 = index97 + 1 { + let iter_base = mbt_ffi_load32( + iter_base + 12, + ) + + index97 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match + mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match + mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 4 => { + for index101 = 0 + index101 < mbt_ffi_load32(iter_base + 12) + index101 = index101 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index101 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index100 = 0 + index100 < mbt_ffi_load32(iter_base + 16) + index100 = index100 + 1 { + let iter_base = mbt_ffi_load32( + iter_base + 12, + ) + + index100 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index103 = 0 + index103 < mbt_ffi_load32(iter_base + 24) + index103 = index103 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 20) + + index103 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index102 = 0 + index102 < mbt_ffi_load32(iter_base + 16) + index102 = index102 + 1 { + let iter_base = mbt_ffi_load32( + iter_base + 12, + ) + + index102 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + } + 5 => { + for index105 = 0 + index105 < mbt_ffi_load32(iter_base + 12) + index105 = index105 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index105 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index104 = 0 + index104 < mbt_ffi_load32(iter_base + 16) + index104 = index104 + 1 { + let iter_base = mbt_ffi_load32( + iter_base + 12, + ) + + index104 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index107 = 0 + index107 < mbt_ffi_load32(iter_base + 20) + index107 = index107 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index107 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index106 = 0 + index106 < mbt_ffi_load32(iter_base + 16) + index106 = index106 + 1 { + let iter_base = mbt_ffi_load32( + iter_base + 12, + ) + + index106 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 172)) + + match mbt_ffi_load8_u(iter_base + 180) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 184)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 192)) + + for index109 = 0 + index109 < mbt_ffi_load32(iter_base + 204) + index109 = index109 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 200) + + index109 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 200)) + + for index110 = 0 + index110 < mbt_ffi_load32(iter_base + 212) + index110 = index110 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 208) + + index110 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 208)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 220) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 224)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 232)) + + for index111 = 0 + index111 < mbt_ffi_load32(iter_base + 244) + index111 = index111 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 240) + + index111 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 240)) + + for index112 = 0 + index112 < mbt_ffi_load32(iter_base + 252) + index112 = index112 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 248) + + index112 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 248)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 260) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 268)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 276)) + + for index113 = 0 + index113 < mbt_ffi_load32(iter_base + 288) + index113 = index113 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 284) + + index113 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 284)) + + for index115 = 0 + index115 < mbt_ffi_load32(iter_base + 296) + index115 = index115 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 292) + + index115 * 32 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index114 = 0 + index114 < mbt_ffi_load32(iter_base + 28) + index114 = index114 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index114 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 292)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 300)) + } + _ => panic() + } + + for index117 = 0 + index117 < mbt_ffi_load32(iter_base + 312) + index117 = index117 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 308) + + index117 * 44 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index116 = 0 + index116 < mbt_ffi_load32(iter_base + 28) + index116 = index116 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index116 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 308)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 92)) + + for index139 = 0 + index139 < mbt_ffi_load32(iter_base + 104) + index139 = index139 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + + index139 * 144 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 3 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 4 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 5 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 6 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 7 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 8 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 9 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 10 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 11 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 12 => () + 13 => () + 14 => { + for index121 = 0 + index121 < mbt_ffi_load32(iter_base + 12) + index121 = index121 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index121 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + for index119 = 0 + index119 < mbt_ffi_load32(iter_base + 28) + index119 = index119 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index119 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index120 = 0 + index120 < mbt_ffi_load32(iter_base + 36) + index120 = index120 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + + index120 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 52) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 60)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 15 => { + for index124 = 0 + index124 < mbt_ffi_load32(iter_base + 12) + index124 = index124 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index124 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index122 = 0 + index122 < mbt_ffi_load32(iter_base + 32) + index122 = index122 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index122 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index123 = 0 + index123 < mbt_ffi_load32(iter_base + 40) + index123 = index123 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + + index123 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 16 => { + for index125 = 0 + index125 < mbt_ffi_load32(iter_base + 12) + index125 = index125 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index125 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 17 => { + for index126 = 0 + index126 < mbt_ffi_load32(iter_base + 12) + index126 = index126 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index126 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => () + 20 => () + 21 => () + 22 => () + 23 => () + 24 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index127 = 0 + index127 < mbt_ffi_load32(iter_base + 16) + index127 = index127 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index127 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + } + 25 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index128 = 0 + index128 < mbt_ffi_load32(iter_base + 16) + index128 = index128 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index128 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + 26 => { + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => { + for index129 = 0 + index129 < mbt_ffi_load32(iter_base + 20) + index129 = index129 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index129 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => { + for index130 = 0 + index130 < mbt_ffi_load32(iter_base + 32) + index130 = index130 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index130 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + } + _ => panic() + } + } + 27 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index131 = 0 + index131 < mbt_ffi_load32(iter_base + 16) + index131 = index131 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index131 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 20) { + 0 => () + 1 => { + for index132 = 0 + index132 < mbt_ffi_load32(iter_base + 28) + index132 = index132 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index132 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + _ => panic() + } + } + 28 => () + 29 => () + 30 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index133 = 0 + index133 < mbt_ffi_load32(iter_base + 20) + index133 = index133 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index133 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 76)) + _ => panic() + } + } + 31 => { + for index136 = 0 + index136 < mbt_ffi_load32(iter_base + 12) + index136 = index136 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index136 * 92 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 4 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + } + 5 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + + for index134 = 0 + index134 < mbt_ffi_load32(iter_base + 52) + index134 = index134 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + + index134 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + for index135 = 0 + index135 < mbt_ffi_load32(iter_base + 60) + index135 = index135 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + + index135 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 32 => + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + 33 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + 34 => () + 35 => () + 36 => () + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 88) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 92)) + _ => panic() + } + + for index137 = 0 + index137 < mbt_ffi_load32(iter_base + 104) + index137 = index137 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + + index137 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + for index138 = 0 + index138 < mbt_ffi_load32(iter_base + 112) + index138 = index138 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + + index138 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + match mbt_ffi_load8_u(iter_base + 116) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 120)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 128) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 132) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 136)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + for index140 = 0 + index140 < mbt_ffi_load32(iter_base + 112) + index140 = index140 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + + index140 * 24 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + } + _ => panic() + } + } + 1 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 4)) + } + 1 => + match mbt_ffi_load8_u(p0 + 4) { + 0 => mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + 1 => { + for index142 = 0 + index142 < mbt_ffi_load32(p0 + 12) + index142 = index142 + 1 { + let iter_base = mbt_ffi_load32(p0 + 8) + index142 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + } + 2 => mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + 3 => mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + 4 => mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + 5 => { + for index163 = 0 + index163 < mbt_ffi_load32(p0 + 12) + index163 = index163 + 1 { + let iter_base = mbt_ffi_load32(p0 + 8) + index163 * 144 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 3 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 4 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 5 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 6 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 7 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 8 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 9 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 10 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 11 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 12 => () + 13 => () + 14 => { + for index145 = 0 + index145 < mbt_ffi_load32(iter_base + 12) + index145 = index145 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index145 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + for index143 = 0 + index143 < mbt_ffi_load32(iter_base + 28) + index143 = index143 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index143 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index144 = 0 + index144 < mbt_ffi_load32(iter_base + 36) + index144 = index144 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + + index144 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 52) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 60)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 15 => { + for index148 = 0 + index148 < mbt_ffi_load32(iter_base + 12) + index148 = index148 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index148 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index146 = 0 + index146 < mbt_ffi_load32(iter_base + 32) + index146 = index146 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index146 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index147 = 0 + index147 < mbt_ffi_load32(iter_base + 40) + index147 = index147 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + + index147 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 16 => { + for index149 = 0 + index149 < mbt_ffi_load32(iter_base + 12) + index149 = index149 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index149 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 17 => { + for index150 = 0 + index150 < mbt_ffi_load32(iter_base + 12) + index150 = index150 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index150 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => () + 20 => () + 21 => () + 22 => () + 23 => () + 24 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index151 = 0 + index151 < mbt_ffi_load32(iter_base + 16) + index151 = index151 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index151 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + } + 25 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index152 = 0 + index152 < mbt_ffi_load32(iter_base + 16) + index152 = index152 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index152 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + 26 => { + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => { + for index153 = 0 + index153 < mbt_ffi_load32(iter_base + 20) + index153 = index153 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index153 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => { + for index154 = 0 + index154 < mbt_ffi_load32(iter_base + 32) + index154 = index154 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index154 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + } + _ => panic() + } + } + 27 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index155 = 0 + index155 < mbt_ffi_load32(iter_base + 16) + index155 = index155 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index155 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 20) { + 0 => () + 1 => { + for index156 = 0 + index156 < mbt_ffi_load32(iter_base + 28) + index156 = index156 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index156 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + _ => panic() + } + } + 28 => () + 29 => () + 30 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index157 = 0 + index157 < mbt_ffi_load32(iter_base + 20) + index157 = index157 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index157 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 76)) + _ => panic() + } + } + 31 => { + for index160 = 0 + index160 < mbt_ffi_load32(iter_base + 12) + index160 = index160 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index160 * 92 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 4 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + } + 5 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + + for index158 = 0 + index158 < mbt_ffi_load32(iter_base + 52) + index158 = index158 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + + index158 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + for index159 = 0 + index159 < mbt_ffi_load32(iter_base + 60) + index159 = index159 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + + index159 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 32 => + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + 33 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + 34 => () + 35 => () + 36 => () + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 88) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 92)) + _ => panic() + } + + for index161 = 0 + index161 < mbt_ffi_load32(iter_base + 104) + index161 = index161 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index161 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + for index162 = 0 + index162 < mbt_ffi_load32(iter_base + 112) + index162 = index162 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index162 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + match mbt_ffi_load8_u(iter_base + 116) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 120)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 128) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 132) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 136)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + + for index164 = 0 + index164 < mbt_ffi_load32(p0 + 20) + index164 = index164 + 1 { + let iter_base = mbt_ffi_load32(p0 + 16) + index164 * 24 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 16)) + + for index165 = 0 + index165 < mbt_ffi_load32(p0 + 32) + index165 = index165 + 1 { + let iter_base = mbt_ffi_load32(p0 + 28) + index165 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 28)) + } + _ => panic() + } + _ => panic() + } +} + +///| +#doc(hidden) +pub fn wasmExportGetToolMiddleware(p0 : Int, p1 : Int) -> Int { + let result = mbt_ffi_ptr2str(p0, p1) + + let result0 : Result[@common.ToolMiddleware, @common.ToolError] = get_tool_middleware( + result, + ) + let return_area = mbt_ffi_malloc(124) + + match result0 { + Ok(payload) => { + mbt_ffi_store8(return_area + 0, 0) + __wit_bindgen_lower_t527(return_area + 4, payload) + + () + } + Err(payload1) => { + mbt_ffi_store8(return_area + 0, 1) + __wit_bindgen_lower_t528(return_area + 4, payload1) + + () + } + } + let ret = return_area + return ret +} + +///| +#doc(hidden) +pub fn wasmExportGetToolMiddlewarePostReturn(p0 : Int) -> Unit { + match mbt_ffi_load8_u(p0 + 0) { + 0 => { + mbt_ffi_free(mbt_ffi_load32(p0 + 4)) + + for index = 0; index < mbt_ffi_load32(p0 + 16); index = index + 1 { + let iter_base = mbt_ffi_load32(p0 + 12) + index * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 12)) + mbt_ffi_free(mbt_ffi_load32(p0 + 20)) + mbt_ffi_free(mbt_ffi_load32(p0 + 28)) + + for index0 = 0; index0 < mbt_ffi_load32(p0 + 40); index0 = index0 + 1 { + let iter_base = mbt_ffi_load32(p0 + 36) + index0 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 36)) + + match mbt_ffi_load8_u(p0 + 44) { + 0 => { + mbt_ffi_free(mbt_ffi_load32(p0 + 48)) + + for index48 = 0 + index48 < mbt_ffi_load32(p0 + 60) + index48 = index48 + 1 { + let iter_base = mbt_ffi_load32(p0 + 56) + index48 * 324 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index1 = 0 + index1 < mbt_ffi_load32(iter_base + 12) + index1 = index1 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index1 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index2 = 0 + index2 < mbt_ffi_load32(iter_base + 36) + index2 = index2 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index2 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index6 = 0 + index6 < mbt_ffi_load32(iter_base + 44) + index6 = index6 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index6 * 112 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index3 = 0 + index3 < mbt_ffi_load32(iter_base + 20) + index3 = index3 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index3 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index4 = 0 + index4 < mbt_ffi_load32(iter_base + 44) + index4 = index4 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index4 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => { + for index5 = 0 + index5 < mbt_ffi_load32(iter_base + 88) + index5 = index5 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 84) + index5 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 100) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + for index9 = 0 + index9 < mbt_ffi_load32(iter_base + 52) + index9 = index9 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + index9 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index7 = 0 + index7 < mbt_ffi_load32(iter_base + 20) + index7 = index7 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index7 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index8 = 0 + index8 < mbt_ffi_load32(iter_base + 44) + index8 = index8 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index8 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => { + for index12 = 0 + index12 < mbt_ffi_load32(iter_base + 72) + index12 = index12 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 68) + index12 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index10 = 0 + index10 < mbt_ffi_load32(iter_base + 28) + index10 = index10 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index10 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + match mbt_ffi_load8_u(iter_base + 32) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => { + for index11 = 0 + index11 < mbt_ffi_load32(iter_base + 56) + index11 = index11 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 52) + + index11 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 80)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 88)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 96)) + + for index13 = 0 + index13 < mbt_ffi_load32(iter_base + 108) + index13 = index13 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 104) + + index13 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + + match mbt_ffi_load8_u(iter_base + 112) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 116)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 140) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 144)) + _ => panic() + } + } + _ => panic() + } + + for index17 = 0 + index17 < mbt_ffi_load32(iter_base + 160) + index17 = index17 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 156) + + index17 * 112 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index14 = 0 + index14 < mbt_ffi_load32(iter_base + 20) + index14 = index14 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index14 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index15 = 0 + index15 < mbt_ffi_load32(iter_base + 44) + index15 = index15 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + + index15 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => { + for index16 = 0 + index16 < mbt_ffi_load32(iter_base + 88) + index16 = index16 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 84) + + index16 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 100) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 156)) + + for index20 = 0 + index20 < mbt_ffi_load32(iter_base + 168) + index20 = index20 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 164) + index20 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index18 = 0 + index18 < mbt_ffi_load32(iter_base + 20) + index18 = index18 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index18 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index19 = 0 + index19 < mbt_ffi_load32(iter_base + 44) + index19 = index19 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + + index19 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 164)) + + for index38 = 0 + index38 < mbt_ffi_load32(iter_base + 176) + index38 = index38 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 172) + index38 * 28 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => { + for index22 = 0 + index22 < mbt_ffi_load32(iter_base + 8) + index22 = index22 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index22 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index21 = 0 + index21 < mbt_ffi_load32(iter_base + 16) + index21 = index21 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index21 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 1 => { + for index24 = 0 + index24 < mbt_ffi_load32(iter_base + 8) + index24 = index24 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index24 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index23 = 0 + index23 < mbt_ffi_load32(iter_base + 16) + index23 = index23 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index23 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 2 => { + for index26 = 0 + index26 < mbt_ffi_load32(iter_base + 8) + index26 = index26 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index26 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index25 = 0 + index25 < mbt_ffi_load32(iter_base + 16) + index25 = index25 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index25 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 3 => { + for index29 = 0 + index29 < mbt_ffi_load32(iter_base + 8) + index29 = index29 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index29 * 8 + + for index28 = 0 + index28 < mbt_ffi_load32(iter_base + 4) + index28 = index28 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 0) + + index28 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index27 = 0 + index27 < mbt_ffi_load32(iter_base + 16) + index27 = index27 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index27 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 4 => { + for index31 = 0 + index31 < mbt_ffi_load32(iter_base + 12) + index31 = index31 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index31 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index30 = 0 + index30 < mbt_ffi_load32(iter_base + 16) + index30 = index30 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index30 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index33 = 0 + index33 < mbt_ffi_load32(iter_base + 24) + index33 = index33 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 20) + + index33 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index32 = 0 + index32 < mbt_ffi_load32(iter_base + 16) + index32 = index32 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index32 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + } + 5 => { + for index35 = 0 + index35 < mbt_ffi_load32(iter_base + 12) + index35 = index35 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index35 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index34 = 0 + index34 < mbt_ffi_load32(iter_base + 16) + index34 = index34 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index34 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index37 = 0 + index37 < mbt_ffi_load32(iter_base + 20) + index37 = index37 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index37 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index36 = 0 + index36 < mbt_ffi_load32(iter_base + 16) + index36 = index36 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index36 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 172)) + + match mbt_ffi_load8_u(iter_base + 180) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 184)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 192)) + + for index39 = 0 + index39 < mbt_ffi_load32(iter_base + 204) + index39 = index39 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 200) + + index39 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 200)) + + for index40 = 0 + index40 < mbt_ffi_load32(iter_base + 212) + index40 = index40 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 208) + + index40 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 208)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 220) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 224)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 232)) + + for index41 = 0 + index41 < mbt_ffi_load32(iter_base + 244) + index41 = index41 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 240) + + index41 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 240)) + + for index42 = 0 + index42 < mbt_ffi_load32(iter_base + 252) + index42 = index42 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 248) + + index42 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 248)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 260) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 268)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 276)) + + for index43 = 0 + index43 < mbt_ffi_load32(iter_base + 288) + index43 = index43 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 284) + + index43 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 284)) + + for index45 = 0 + index45 < mbt_ffi_load32(iter_base + 296) + index45 = index45 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 292) + + index45 * 32 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index44 = 0 + index44 < mbt_ffi_load32(iter_base + 28) + index44 = index44 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index44 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 292)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 300)) + } + _ => panic() + } + + for index47 = 0 + index47 < mbt_ffi_load32(iter_base + 312) + index47 = index47 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 308) + index47 * 44 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index46 = 0 + index46 < mbt_ffi_load32(iter_base + 28) + index46 = index46 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index46 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 308)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 56)) + + for index69 = 0 + index69 < mbt_ffi_load32(p0 + 68) + index69 = index69 + 1 { + let iter_base = mbt_ffi_load32(p0 + 64) + index69 * 144 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 3 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 4 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 5 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 6 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 7 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 8 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 9 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 10 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 11 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 12 => () + 13 => () + 14 => { + for index51 = 0 + index51 < mbt_ffi_load32(iter_base + 12) + index51 = index51 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index51 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + for index49 = 0 + index49 < mbt_ffi_load32(iter_base + 28) + index49 = index49 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index49 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index50 = 0 + index50 < mbt_ffi_load32(iter_base + 36) + index50 = index50 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index50 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 52) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 60)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 15 => { + for index54 = 0 + index54 < mbt_ffi_load32(iter_base + 12) + index54 = index54 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index54 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index52 = 0 + index52 < mbt_ffi_load32(iter_base + 32) + index52 = index52 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index52 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index53 = 0 + index53 < mbt_ffi_load32(iter_base + 40) + index53 = index53 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + index53 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 16 => { + for index55 = 0 + index55 < mbt_ffi_load32(iter_base + 12) + index55 = index55 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index55 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 17 => { + for index56 = 0 + index56 < mbt_ffi_load32(iter_base + 12) + index56 = index56 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index56 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => () + 20 => () + 21 => () + 22 => () + 23 => () + 24 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index57 = 0 + index57 < mbt_ffi_load32(iter_base + 16) + index57 = index57 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index57 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + } + 25 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index58 = 0 + index58 < mbt_ffi_load32(iter_base + 16) + index58 = index58 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index58 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + 26 => { + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => { + for index59 = 0 + index59 < mbt_ffi_load32(iter_base + 20) + index59 = index59 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index59 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => { + for index60 = 0 + index60 < mbt_ffi_load32(iter_base + 32) + index60 = index60 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index60 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + } + _ => panic() + } + } + 27 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index61 = 0 + index61 < mbt_ffi_load32(iter_base + 16) + index61 = index61 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index61 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 20) { + 0 => () + 1 => { + for index62 = 0 + index62 < mbt_ffi_load32(iter_base + 28) + index62 = index62 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index62 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + _ => panic() + } + } + 28 => () + 29 => () + 30 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index63 = 0 + index63 < mbt_ffi_load32(iter_base + 20) + index63 = index63 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index63 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 76)) + _ => panic() + } + } + 31 => { + for index66 = 0 + index66 < mbt_ffi_load32(iter_base + 12) + index66 = index66 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index66 * 92 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 4 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + } + 5 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + + for index64 = 0 + index64 < mbt_ffi_load32(iter_base + 52) + index64 = index64 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + index64 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + for index65 = 0 + index65 < mbt_ffi_load32(iter_base + 60) + index65 = index65 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + index65 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 32 => + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + 33 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + 34 => () + 35 => () + 36 => () + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 88) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 92)) + _ => panic() + } + + for index67 = 0 + index67 < mbt_ffi_load32(iter_base + 104) + index67 = index67 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index67 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + for index68 = 0 + index68 < mbt_ffi_load32(iter_base + 112) + index68 = index68 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index68 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + match mbt_ffi_load8_u(iter_base + 116) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 120)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 128) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 132) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 136)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 64)) + + for index70 = 0 + index70 < mbt_ffi_load32(p0 + 76) + index70 = index70 + 1 { + let iter_base = mbt_ffi_load32(p0 + 72) + index70 * 24 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 72)) + + match mbt_ffi_load8_u(p0 + 84) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(p0 + 88)) + + for index118 = 0 + index118 < mbt_ffi_load32(p0 + 100) + index118 = index118 + 1 { + let iter_base = mbt_ffi_load32(p0 + 96) + index118 * 324 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index71 = 0 + index71 < mbt_ffi_load32(iter_base + 12) + index71 = index71 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index71 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index72 = 0 + index72 < mbt_ffi_load32(iter_base + 36) + index72 = index72 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index72 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index76 = 0 + index76 < mbt_ffi_load32(iter_base + 44) + index76 = index76 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index76 * 112 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index73 = 0 + index73 < mbt_ffi_load32(iter_base + 20) + index73 = index73 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index73 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index74 = 0 + index74 < mbt_ffi_load32(iter_base + 44) + index74 = index74 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + + index74 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => { + for index75 = 0 + index75 < mbt_ffi_load32(iter_base + 88) + index75 = index75 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 84) + + index75 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 100) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + for index79 = 0 + index79 < mbt_ffi_load32(iter_base + 52) + index79 = index79 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + index79 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index77 = 0 + index77 < mbt_ffi_load32(iter_base + 20) + index77 = index77 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index77 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index78 = 0 + index78 < mbt_ffi_load32(iter_base + 44) + index78 = index78 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + + index78 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => { + for index82 = 0 + index82 < mbt_ffi_load32(iter_base + 72) + index82 = index82 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 68) + + index82 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index80 = 0 + index80 < mbt_ffi_load32(iter_base + 28) + index80 = index80 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index80 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + match mbt_ffi_load8_u(iter_base + 32) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => { + for index81 = 0 + index81 < mbt_ffi_load32(iter_base + 56) + index81 = index81 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 52) + + index81 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 80)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 88)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 96)) + + for index83 = 0 + index83 < mbt_ffi_load32(iter_base + 108) + index83 = index83 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 104) + + index83 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + + match mbt_ffi_load8_u(iter_base + 112) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 116)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 140) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 144)) + _ => panic() + } + } + _ => panic() + } + + for index87 = 0 + index87 < mbt_ffi_load32(iter_base + 160) + index87 = index87 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 156) + + index87 * 112 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index84 = 0 + index84 < mbt_ffi_load32(iter_base + 20) + index84 = index84 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index84 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index85 = 0 + index85 < mbt_ffi_load32(iter_base + 44) + index85 = index85 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + + index85 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 48) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => { + for index86 = 0 + index86 < mbt_ffi_load32(iter_base + 88) + index86 = index86 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 84) + + index86 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 100) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 156)) + + for index90 = 0 + index90 < mbt_ffi_load32(iter_base + 168) + index90 = index90 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 164) + + index90 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + for index88 = 0 + index88 < mbt_ffi_load32(iter_base + 20) + index88 = index88 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index88 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + for index89 = 0 + index89 < mbt_ffi_load32(iter_base + 44) + index89 = index89 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + + index89 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 164)) + + for index108 = 0 + index108 < mbt_ffi_load32(iter_base + 176) + index108 = index108 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 172) + + index108 * 28 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => { + for index92 = 0 + index92 < mbt_ffi_load32(iter_base + 8) + index92 = index92 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index92 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index91 = 0 + index91 < mbt_ffi_load32(iter_base + 16) + index91 = index91 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index91 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 1 => { + for index94 = 0 + index94 < mbt_ffi_load32(iter_base + 8) + index94 = index94 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index94 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index93 = 0 + index93 < mbt_ffi_load32(iter_base + 16) + index93 = index93 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index93 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 2 => { + for index96 = 0 + index96 < mbt_ffi_load32(iter_base + 8) + index96 = index96 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index96 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index95 = 0 + index95 < mbt_ffi_load32(iter_base + 16) + index95 = index95 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index95 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 3 => { + for index99 = 0 + index99 < mbt_ffi_load32(iter_base + 8) + index99 = index99 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + + index99 * 8 + + for index98 = 0 + index98 < mbt_ffi_load32(iter_base + 4) + index98 = index98 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 0) + + index98 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index97 = 0 + index97 < mbt_ffi_load32(iter_base + 16) + index97 = index97 + 1 { + let iter_base = mbt_ffi_load32( + iter_base + 12, + ) + + index97 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + } + 4 => { + for index101 = 0 + index101 < mbt_ffi_load32(iter_base + 12) + index101 = index101 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index101 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index100 = 0 + index100 < mbt_ffi_load32(iter_base + 16) + index100 = index100 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index100 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index103 = 0 + index103 < mbt_ffi_load32(iter_base + 24) + index103 = index103 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 20) + + index103 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index102 = 0 + index102 < mbt_ffi_load32(iter_base + 16) + index102 = index102 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index102 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + } + 5 => { + for index105 = 0 + index105 < mbt_ffi_load32(iter_base + 12) + index105 = index105 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index105 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index104 = 0 + index104 < mbt_ffi_load32(iter_base + 16) + index104 = index104 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index104 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index107 = 0 + index107 < mbt_ffi_load32(iter_base + 20) + index107 = index107 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index107 * 24 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + for index106 = 0 + index106 < mbt_ffi_load32(iter_base + 16) + index106 = index106 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index106 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 13 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 14 => () + 15 => () + 16 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 17 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 18 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 19 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 20 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 21 => () + 22 => () + 23 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 24 => { + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + _ => panic() + } + } + 25 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 26 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 27 => () + 28 => () + 29 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 20), + ) + 30 => + mbt_ffi_free( + mbt_ffi_load32(iter_base + 8), + ) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 172)) + + match mbt_ffi_load8_u(iter_base + 180) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 184)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 192)) + + for index109 = 0 + index109 < mbt_ffi_load32(iter_base + 204) + index109 = index109 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 200) + + index109 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 200)) + + for index110 = 0 + index110 < mbt_ffi_load32(iter_base + 212) + index110 = index110 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 208) + + index110 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 208)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 220) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 224)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 232)) + + for index111 = 0 + index111 < mbt_ffi_load32(iter_base + 244) + index111 = index111 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 240) + + index111 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 240)) + + for index112 = 0 + index112 < mbt_ffi_load32(iter_base + 252) + index112 = index112 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 248) + + index112 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 248)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 260) { + 0 => () + 1 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 268)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 276)) + + for index113 = 0 + index113 < mbt_ffi_load32(iter_base + 288) + index113 = index113 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 284) + + index113 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 284)) + + for index115 = 0 + index115 < mbt_ffi_load32(iter_base + 296) + index115 = index115 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 292) + + index115 * 32 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index114 = 0 + index114 < mbt_ffi_load32(iter_base + 28) + index114 = index114 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index114 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 292)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 300)) + } + _ => panic() + } + + for index117 = 0 + index117 < mbt_ffi_load32(iter_base + 312) + index117 = index117 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 308) + + index117 * 44 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + for index116 = 0 + index116 < mbt_ffi_load32(iter_base + 28) + index116 = index116 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index116 * 16 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 308)) + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 96)) + + for index139 = 0 + index139 < mbt_ffi_load32(p0 + 108) + index139 = index139 + 1 { + let iter_base = mbt_ffi_load32(p0 + 104) + index139 * 144 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 3 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 4 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 5 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 6 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 7 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 8 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 9 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 10 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 11 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 12 => () + 13 => () + 14 => { + for index121 = 0 + index121 < mbt_ffi_load32(iter_base + 12) + index121 = index121 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index121 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + for index119 = 0 + index119 < mbt_ffi_load32(iter_base + 28) + index119 = index119 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index119 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index120 = 0 + index120 < mbt_ffi_load32(iter_base + 36) + index120 = index120 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + + index120 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 52) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 60)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 15 => { + for index124 = 0 + index124 < mbt_ffi_load32(iter_base + 12) + index124 = index124 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index124 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index122 = 0 + index122 < mbt_ffi_load32(iter_base + 32) + index122 = index122 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index122 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index123 = 0 + index123 < mbt_ffi_load32(iter_base + 40) + index123 = index123 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + + index123 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 16 => { + for index125 = 0 + index125 < mbt_ffi_load32(iter_base + 12) + index125 = index125 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index125 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 17 => { + for index126 = 0 + index126 < mbt_ffi_load32(iter_base + 12) + index126 = index126 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index126 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => () + 20 => () + 21 => () + 22 => () + 23 => () + 24 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index127 = 0 + index127 < mbt_ffi_load32(iter_base + 16) + index127 = index127 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index127 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + } + 25 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index128 = 0 + index128 < mbt_ffi_load32(iter_base + 16) + index128 = index128 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index128 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + 26 => { + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => { + for index129 = 0 + index129 < mbt_ffi_load32(iter_base + 20) + index129 = index129 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index129 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => { + for index130 = 0 + index130 < mbt_ffi_load32(iter_base + 32) + index130 = index130 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index130 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + } + _ => panic() + } + } + 27 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index131 = 0 + index131 < mbt_ffi_load32(iter_base + 16) + index131 = index131 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index131 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 20) { + 0 => () + 1 => { + for index132 = 0 + index132 < mbt_ffi_load32(iter_base + 28) + index132 = index132 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index132 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + _ => panic() + } + } + 28 => () + 29 => () + 30 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index133 = 0 + index133 < mbt_ffi_load32(iter_base + 20) + index133 = index133 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index133 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 76)) + _ => panic() + } + } + 31 => { + for index136 = 0 + index136 < mbt_ffi_load32(iter_base + 12) + index136 = index136 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index136 * 92 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 4 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + } + 5 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + + for index134 = 0 + index134 < mbt_ffi_load32(iter_base + 52) + index134 = index134 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + + index134 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + for index135 = 0 + index135 < mbt_ffi_load32(iter_base + 60) + index135 = index135 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + + index135 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 32 => + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + 33 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + 34 => () + 35 => () + 36 => () + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 88) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 92)) + _ => panic() + } + + for index137 = 0 + index137 < mbt_ffi_load32(iter_base + 104) + index137 = index137 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index137 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + for index138 = 0 + index138 < mbt_ffi_load32(iter_base + 112) + index138 = index138 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index138 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + match mbt_ffi_load8_u(iter_base + 116) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 120)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 128) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 132) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 136)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 104)) + + for index140 = 0 + index140 < mbt_ffi_load32(p0 + 116) + index140 = index140 + 1 { + let iter_base = mbt_ffi_load32(p0 + 112) + index140 * 24 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 112)) + } + _ => panic() + } + } + 1 => () + _ => panic() + } + } + 1 => + match mbt_ffi_load8_u(p0 + 4) { + 0 => mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + 1 => { + for index141 = 0 + index141 < mbt_ffi_load32(p0 + 12) + index141 = index141 + 1 { + let iter_base = mbt_ffi_load32(p0 + 8) + index141 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + } + 2 => mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + 3 => mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + 4 => mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + 5 => { + for index162 = 0 + index162 < mbt_ffi_load32(p0 + 12) + index162 = index162 + 1 { + let iter_base = mbt_ffi_load32(p0 + 8) + index162 * 144 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 3 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 4 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 5 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 6 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 7 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 8 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 9 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 10 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 11 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 12 => () + 13 => () + 14 => { + for index144 = 0 + index144 < mbt_ffi_load32(iter_base + 12) + index144 = index144 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index144 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + for index142 = 0 + index142 < mbt_ffi_load32(iter_base + 28) + index142 = index142 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index142 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index143 = 0 + index143 < mbt_ffi_load32(iter_base + 36) + index143 = index143 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + + index143 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 52) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 60)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 15 => { + for index147 = 0 + index147 < mbt_ffi_load32(iter_base + 12) + index147 = index147 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index147 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index145 = 0 + index145 < mbt_ffi_load32(iter_base + 32) + index145 = index145 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index145 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index146 = 0 + index146 < mbt_ffi_load32(iter_base + 40) + index146 = index146 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + + index146 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 16 => { + for index148 = 0 + index148 < mbt_ffi_load32(iter_base + 12) + index148 = index148 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index148 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 17 => { + for index149 = 0 + index149 < mbt_ffi_load32(iter_base + 12) + index149 = index149 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index149 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => () + 20 => () + 21 => () + 22 => () + 23 => () + 24 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index150 = 0 + index150 < mbt_ffi_load32(iter_base + 16) + index150 = index150 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index150 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + } + 25 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index151 = 0 + index151 < mbt_ffi_load32(iter_base + 16) + index151 = index151 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index151 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + 26 => { + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => { + for index152 = 0 + index152 < mbt_ffi_load32(iter_base + 20) + index152 = index152 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index152 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => { + for index153 = 0 + index153 < mbt_ffi_load32(iter_base + 32) + index153 = index153 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index153 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + } + _ => panic() + } + } + 27 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index154 = 0 + index154 < mbt_ffi_load32(iter_base + 16) + index154 = index154 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index154 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 20) { + 0 => () + 1 => { + for index155 = 0 + index155 < mbt_ffi_load32(iter_base + 28) + index155 = index155 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index155 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + _ => panic() + } + } + 28 => () + 29 => () + 30 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index156 = 0 + index156 < mbt_ffi_load32(iter_base + 20) + index156 = index156 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index156 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 76)) + _ => panic() + } + } + 31 => { + for index159 = 0 + index159 < mbt_ffi_load32(iter_base + 12) + index159 = index159 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index159 * 92 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 4 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + } + 5 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + + for index157 = 0 + index157 < mbt_ffi_load32(iter_base + 52) + index157 = index157 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + + index157 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + for index158 = 0 + index158 < mbt_ffi_load32(iter_base + 60) + index158 = index158 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + + index158 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 32 => + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + 33 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + 34 => () + 35 => () + 36 => () + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 88) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 92)) + _ => panic() + } + + for index160 = 0 + index160 < mbt_ffi_load32(iter_base + 104) + index160 = index160 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index160 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + for index161 = 0 + index161 < mbt_ffi_load32(iter_base + 112) + index161 = index161 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index161 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + match mbt_ffi_load8_u(iter_base + 116) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 120)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 128) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 132) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 136)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 8)) + + for index163 = 0 + index163 < mbt_ffi_load32(p0 + 20) + index163 = index163 + 1 { + let iter_base = mbt_ffi_load32(p0 + 16) + index163 * 24 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 16)) + + for index164 = 0 + index164 < mbt_ffi_load32(p0 + 32) + index164 = index164 + 1 { + let iter_base = mbt_ffi_load32(p0 + 28) + index164 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(p0 + 28)) + } + _ => panic() + } + _ => panic() + } +} + +///| +fn wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0Read( + handle : Int, + buffer_ptr : Int, + length : Int, +) -> Int = "[export]golem:tool/tool-middleware-guest@0.1.0" "[async-lower][stream-read-0]invoke-tool-middleware" + +///| +fn wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0CancelRead( + handle : Int, +) -> Int = "[export]golem:tool/tool-middleware-guest@0.1.0" "[stream-cancel-read-0]invoke-tool-middleware" + +///| +fn wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0DropReadable( + handle : Int, +) = "[export]golem:tool/tool-middleware-guest@0.1.0" "[stream-drop-readable-0]invoke-tool-middleware" + +///| +fn wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0Malloc( + length : Int, +) -> Int { + let ptr = mbt_ffi_malloc(1 * length) + ptr +} + +///| +fn wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0Reject( + ptr : Int, + start : Int, + length : Int, +) -> Unit { + ignore((ptr, start, length)) +} + +///| +fn wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0ListLift( + ptr : Int, + length : Int, +) -> FixedArray[Byte] { + mbt_ffi_ptr2bytes(ptr, length) +} + +///| +priv struct WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamSource { + handle : Int + mut closed : Bool + mut reading : Bool + mut read_task : Int + mut read_buffer : Int + mut read_discarding : Bool + mut read_cleanup_done : Bool + read_cleanup : @async-core.CondVar +} + +///| +fn WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamSource::finish_read( + self : WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamSource, +) -> Unit { + self.reading = false + self.read_task = 0 + self.read_buffer = 0 + self.read_discarding = false + // Keep completion latched until a later read starts so every waiter woken + // by the broadcast can observe it. +} + +///| +async fn WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamSource::wait_for_read_cleanup( + self : WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamSource, +) -> Unit noraise { + @async-core.protect_from_cancel( + () => { + while !self.read_cleanup_done { + self.read_cleanup.wait() + } + }, + resume_on_cancel=true, + ) catch { + _ => () + } +} + +///| +async fn WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamSource::cancel_active_read( + self : WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamSource, +) -> Unit noraise { + if !self.reading { + return + } + if self.read_discarding { + self.wait_for_read_cleanup() + return + } + self.read_discarding = true + let progress_ref = Ref(0) + @async-core.protect_from_cancel( + () => { + progress_ref.val = @async-core.cancel_stream_read( + self.read_task, + self.handle, + () => { + wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0CancelRead( + self.handle, + ) + }, + ) + }, + resume_on_cancel=true, + ) catch { + _ => () + } + let progress = progress_ref.val + if progress > 0 && self.read_buffer != 0 { + wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0Reject( + self.read_buffer, + 0, + progress, + ) + } + self.read_cleanup_done = true + self.read_cleanup.broadcast() +} + +///| +async fn WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamSource::close( + self : WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamSource, +) -> Unit noraise { + if self.closed { + return + } + if self.reading { + self.cancel_active_read() + } + self.closed = true + wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0DropReadable( + self.handle, + ) +} + +///| +fn WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamSource::close_sync( + self : WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamSource, +) -> Unit { + if self.closed || self.reading { + return + } + + self.closed = true + wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0DropReadable( + self.handle, + ) +} + +///| +async fn WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamSource::read( + self : WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamSource, + count : Int, +) -> FixedArray[Byte]? { + if self.closed { + return None + } + if count <= 0 { + return Some([]) + } + if self.reading { + raise @async-core.EndpointBusy::Read + } + // `Stream.read` promises at most `count`; bound one canonical allocation. + let read_count = if count < 64 { count } else { 64 } + let ptr = wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0Malloc( + read_count, + ) + let mut owns_buffer = false + defer (if !owns_buffer { mbt_ffi_free(ptr) }) + self.reading = true + self.read_task = @async-core.current_component_task_token() + self.read_buffer = ptr + self.read_discarding = false + self.read_cleanup_done = false + let (progress, end) = @async-core.suspend_for_stream_read( + self.handle, + wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0Read( + self.handle, + ptr, + read_count, + ), + ) catch { + err => { + if self.read_discarding { + self.wait_for_read_cleanup() + self.finish_read() + return None + } + if err is @async-core.Cancelled::Cancelled { + self.cancel_active_read() + if !self.closed { + self.closed = true + wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0DropReadable( + self.handle, + ) + } + } + self.finish_read() + raise err + } + } + if self.read_discarding { + self.wait_for_read_cleanup() + self.finish_read() + return None + } + if progress == 0 { + self.finish_read() + if end { + self.close() + return None + } + return Some([]) + } + let values = wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0ListLift( + ptr, progress, + ) + owns_buffer = true + self.finish_read() + if end { + self.close() + } + Some(values) +} + +///| +fn wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamLift( + handle : Int, +) -> @async-core.Stream[Byte] { + let source = WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamSource::{ + handle, + closed: false, + reading: false, + read_task: 0, + read_buffer: 0, + read_discarding: false, + read_cleanup_done: false, + read_cleanup: CondVar(), + } + @async-core.Stream::from_source( + count => source.read(count), + () => source.close(), + () => source.close_sync(), + ) +} + +///| +fn wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1DropReadable( + handle : Int, +) = "[export]golem:tool/tool-middleware-guest@0.1.0" "[stream-drop-readable-0]invoke-tool-middleware" + +///| +fn wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1New() -> UInt64 = "[export]golem:tool/tool-middleware-guest@0.1.0" "[stream-new-0]invoke-tool-middleware" + +///| +fn wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1Write( + handle : Int, + buffer_ptr : Int, + length : Int, +) -> Int = "[export]golem:tool/tool-middleware-guest@0.1.0" "[async-lower][stream-write-0]invoke-tool-middleware" + +///| +fn wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1CancelWrite( + handle : Int, +) -> Int = "[export]golem:tool/tool-middleware-guest@0.1.0" "[stream-cancel-write-0]invoke-tool-middleware" + +///| +fn wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1DropWritable( + handle : Int, +) = "[export]golem:tool/tool-middleware-guest@0.1.0" "[stream-drop-writable-0]invoke-tool-middleware" + +///| +fn wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1Malloc( + length : Int, +) -> Int { + let ptr = mbt_ffi_malloc(1 * length) + ptr +} + +///| +fn wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1Commit( + ptr : Int, + start : Int, + length : Int, +) -> Unit { + ignore((ptr, start, length)) +} + +///| +fn wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1Reject( + ptr : Int, + start : Int, + length : Int, +) -> Unit { + ignore((ptr, start, length)) +} + +///| +fn wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1Lower( + value : Byte, + ptr : Int, +) -> Unit { + mbt_ffi_store8(ptr + 0, value.to_int()) +} + +///| +priv struct WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1StreamProducer { + stream : @async-core.Stream[Byte] + writer : Int +} + +///| +let wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1StreamProducers : Map[ + Int, + WasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1StreamProducer, +] = Map([]) + +///| +fn wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1StreamCommit( + handle : Int, +) -> Unit { + guard wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1StreamProducers.get( + handle, + ) + is Some(prepared) else { + return + } + wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1StreamProducers.remove( + handle, + ) + let stream = prepared.stream + let writer = prepared.writer + if !@async-core.has_component_task_scope() { + abort("component stream producer requires an async task scope") + } + let producer = stream.take_producer() + @async-core.spawn_component_task_current(async fn() { + let writer_closed = Ref(false) + let writer_lock = @async-core.Mutex() + let close_writer = fn() -> Unit { + if !writer_closed.val { + writer_closed.val = true + wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1DropWritable( + writer, + ) + } + } + let close_writer_serialized = async fn() -> Unit { + writer_lock.acquire() + defer writer_lock.release() + close_writer() + } + let cleanup_value = fn(value : Byte) -> Unit { + let ptr = wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1Malloc( + 1, + ) + wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1Lower( + value, ptr, + ) + wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1Reject( + ptr, 0, 1, + ) + mbt_ffi_free(ptr) + } + let sink = @async-core.Sink::from_callbacks( + (data : ArrayView[Byte]) => { + writer_lock.acquire() + defer writer_lock.release() + if writer_closed.val || data.length() == 0 { + return 0 + } + let data_len = if data.length() < 64 { data.length() } else { 64 } + let ptr = wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1Malloc( + data_len, + ) + for i in 0.. Unit { + wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1Commit( + ptr, 0, transferred, + ) + if transferred < data_len { + wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1Reject( + ptr, + transferred, + data_len - transferred, + ) + } + mbt_ffi_free(ptr) + } + let mut total = 0 + let mut dropped = false + while total < data_len { + let (progress, end) = @async-core.suspend_for_stream_write( + writer, + wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1Write( + writer, + ptr + total * 1, + data_len - total, + ), + ) catch { + _ => { + total = total + + @async-core.cancel_stream_write(writer, () => { + wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1CancelWrite( + writer, + ) + }) + settle_staging(total) + close_writer() + return data_len + } + } + total = total + progress + if end { + dropped = true + break + } + } + settle_staging(total) + if dropped { + close_writer() + } + // The canonical writer accepted `total`; generated cleanup + // consumed the rest of this staging window. + data_len + }, + () => close_writer_serialized(), + () => !writer_closed.val, + Some(cleanup_value), + ) + let relay_source = producer is None + let run_producer = async fn() -> Unit { + match producer { + Some(producer) => { + producer(sink) + sink.close() + } + None => + for ;; { + match stream.read(64) { + Some(data) => + if !sink.write_all(data[:]) { + stream.reject(cleanup_value) + return + } + None => { + sink.close() + return + } + } + } + } + } + run_producer() catch { + _ => + if relay_source { + @async-core.protect_from_cancel( + () => stream.reject(cleanup_value), + resume_on_cancel=true, + ) catch { + _ => () + } + } + } + // A retained Sink may still own an in-flight canonical write after its + // producer returns. Do not drop the writable endpoint until that write + // has reached a terminal event and released its staging buffer. + @async-core.protect_from_cancel( + () => close_writer_serialized(), + resume_on_cancel=true, + ) + }) +} + +///| +fn wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1StreamLower( + stream : @async-core.Stream[Byte], +) -> Int { + if !@async-core.has_component_task_scope() { + abort("component stream producer requires an async task scope") + } + let pair = wasmImportExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1New() + let reader = pair.to_int() + let writer = (pair >> 32).to_int() + wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1StreamProducers.set( + reader, + { stream, writer }, + ) + reader +} + +///| +fn wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1StreamLowerCommitted( + stream : @async-core.Stream[Byte], +) -> Int { + let reader = wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1StreamLower( + stream, + ) + wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1StreamCommit( + reader, + ) + reader +} + +///| +fn __wit_bindgen_lift_invoke_tool_commands(p0 : Int) -> @common.CommandTree { + let array547 : Array[@common.CommandNode] = [] + for index548 = 0; index548 < mbt_ffi_load32(p0 + 28); index548 = index548 + 1 { + let iter_base = mbt_ffi_load32(p0 + 24) + index548 * 324 + + let result2 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let array : Array[String] = [] + for index = 0; index < mbt_ffi_load32(iter_base + 12); index = index + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index * 8 + + let result3 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array.push(result3) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + let result4 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + let result5 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 24), + mbt_ffi_load32(iter_base + 28), + ) + + let array8 : Array[@common.Example] = [] + for index9 = 0; index9 < mbt_ffi_load32(iter_base + 36); index9 = index9 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index9 * 16 + + let result6 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result7 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + array8.push(@common.Example::{ title: result6, body: result7 }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + let array59 : Array[@common.OptionSpec] = [] + for index60 = 0 + index60 < mbt_ffi_load32(iter_base + 44) + index60 = index60 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index60 * 112 + + let result10 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted : Char? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(Int::unsafe_to_char(mbt_ffi_load32(iter_base + 12))) + _ => panic() + } + + let array12 : Array[String] = [] + for index13 = 0 + index13 < mbt_ffi_load32(iter_base + 20) + index13 = index13 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index13 * 8 + + let result11 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array12.push(result11) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + let result14 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 24), + mbt_ffi_load32(iter_base + 28), + ) + + let result15 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 32), + mbt_ffi_load32(iter_base + 36), + ) + + let array18 : Array[@common.Example] = [] + for index19 = 0 + index19 < mbt_ffi_load32(iter_base + 44) + index19 = index19 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index19 * 16 + + let result16 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result17 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + array18.push(@common.Example::{ title: result16, body: result17 }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + let lifted21 : String? = match mbt_ffi_load8_u(iter_base + 48) { + 0 => Option::None + 1 => { + let result20 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 52), + mbt_ffi_load32(iter_base + 56), + ) + + Option::Some(result20) + } + _ => panic() + } + + let lifted24 = match mbt_ffi_load8_u(iter_base + 60) { + 0 => @common.OptionShape::Scalar(mbt_ffi_load32(iter_base + 64)) + 1 => @common.OptionShape::OptionalScalar(mbt_ffi_load32(iter_base + 64)) + 2 => { + let lifted22 = match mbt_ffi_load8_u(iter_base + 64) { + 0 => @common.Repetition::Repeated + 1 => + @common.Repetition::Delimited( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 68)), + ) + 2 => + @common.Repetition::Either( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 68)), + ) + _ => panic() + } + + @common.OptionShape::RepeatableList(@common.RepeatableListShape::{ + repetition: lifted22, + item_type: mbt_ffi_load32(iter_base + 72), + }) + } + 3 => { + let lifted23 = match mbt_ffi_load8_u(iter_base + 64) { + 0 => @common.Repetition::Repeated + 1 => + @common.Repetition::Delimited( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 68)), + ) + 2 => + @common.Repetition::Either( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 68)), + ) + _ => panic() + } + + @common.OptionShape::RepeatableMap(@common.RepeatableMapShape::{ + repetition: lifted23, + map_type: mbt_ffi_load32(iter_base + 72), + duplicate_key_policy: @common.DuplicateKeyPolicy::from( + mbt_ffi_load8_u(iter_base + 76), + ), + }) + } + _ => panic() + } + + let lifted56 : @types.SchemaValueTree? = match + mbt_ffi_load8_u(iter_base + 80) { + 0 => Option::None + 1 => { + let array54 : Array[@types.SchemaValueNode] = [] + for index55 = 0 + index55 < mbt_ffi_load32(iter_base + 88) + index55 = index55 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 84) + index55 * 32 + + let lifted53 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue( + mbt_ffi_load8_u(iter_base + 8) != 0, + ) + 1 => @types.SchemaValueNode::S8Value(mbt_ffi_load8(iter_base + 8)) + 2 => + @types.SchemaValueNode::S16Value(mbt_ffi_load16(iter_base + 8)) + 3 => + @types.SchemaValueNode::S32Value(mbt_ffi_load32(iter_base + 8)) + 4 => + @types.SchemaValueNode::S64Value(mbt_ffi_load64(iter_base + 8)) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8) + .land(0xFFFF) + .reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => + @types.SchemaValueNode::F32Value(mbt_ffi_loadf32(iter_base + 8)) + 10 => + @types.SchemaValueNode::F64Value(mbt_ffi_loadf64(iter_base + 8)) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result25 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result25) + } + 13 => { + let array26 : Array[Int] = [] + for index27 = 0 + index27 < mbt_ffi_load32(iter_base + 12) + index27 = index27 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index27 * 4 + + array26.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array26) + } + 14 => { + let lifted28 : Int? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted28, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array29 : Array[Bool] = [] + for index30 = 0 + index30 < mbt_ffi_load32(iter_base + 12) + index30 = index30 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index30 * 1 + + array29.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array29) + } + 17 => { + let array31 : Array[Int] = [] + for index32 = 0 + index32 < mbt_ffi_load32(iter_base + 12) + index32 = index32 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index32 * 4 + + array31.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array31) + } + 18 => { + let array33 : Array[Int] = [] + for index34 = 0 + index34 < mbt_ffi_load32(iter_base + 12) + index34 = index34 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index34 * 4 + + array33.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array33) + } + 19 => { + let array35 : Array[Int] = [] + for index36 = 0 + index36 < mbt_ffi_load32(iter_base + 12) + index36 = index36 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index36 * 4 + + array35.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array35) + } + 20 => { + let array37 : Array[@types.MapEntry] = [] + for index38 = 0 + index38 < mbt_ffi_load32(iter_base + 12) + index38 = index38 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index38 * 8 + + array37.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array37) + } + 21 => { + let lifted39 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted39) + } + 22 => { + let lifted42 = match mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted40 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted40) + } + 1 => { + let lifted41 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted41) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted42) + } + 23 => { + let result43 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted45 : String? = match mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result44 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result44) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result43, + language: lifted45, + }) + } + 24 => { + let result46 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted48 : String? = match mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result47 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result47) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result46, + mime_type: lifted48, + }) + } + 25 => { + let result49 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result49) + } + 26 => { + let result50 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result50) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result51 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result51, + }) + } + 30 => { + let result52 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result52, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken(mbt_ffi_load32(iter_base + 8)), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ), + ) + _ => panic() + } + + array54.push(lifted53) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + + Option::Some(@types.SchemaValueTree::{ + value_nodes: array54, + root: mbt_ffi_load32(iter_base + 92), + }) + } + _ => panic() + } + + let lifted58 : String? = match mbt_ffi_load8_u(iter_base + 100) { + 0 => Option::None + 1 => { + let result57 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 104), + mbt_ffi_load32(iter_base + 108), + ) + + Option::Some(result57) + } + _ => panic() + } + + array59.push(@common.OptionSpec::{ + long: result10, + short: lifted, + aliases: array12, + doc: @common.Doc::{ + summary: result14, + description: result15, + examples: array18, + }, + value_name: lifted21, + shape: lifted24, + default: lifted56, + required: mbt_ffi_load8_u(iter_base + 96) != 0, + env_var: lifted58, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + let array76 : Array[@common.FlagSpec] = [] + for index77 = 0 + index77 < mbt_ffi_load32(iter_base + 52) + index77 = index77 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + index77 * 72 + + let result61 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted62 : Char? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(Int::unsafe_to_char(mbt_ffi_load32(iter_base + 12))) + _ => panic() + } + + let array64 : Array[String] = [] + for index65 = 0 + index65 < mbt_ffi_load32(iter_base + 20) + index65 = index65 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index65 * 8 + + let result63 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array64.push(result63) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + let result66 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 24), + mbt_ffi_load32(iter_base + 28), + ) + + let result67 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 32), + mbt_ffi_load32(iter_base + 36), + ) + + let array70 : Array[@common.Example] = [] + for index71 = 0 + index71 < mbt_ffi_load32(iter_base + 44) + index71 = index71 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index71 * 16 + + let result68 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result69 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + array70.push(@common.Example::{ title: result68, body: result69 }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + let lifted73 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @common.FlagShape::BoolFlag(@common.BoolFlagShape::{ + default: mbt_ffi_load8_u(iter_base + 52) != 0, + negatable: mbt_ffi_load8_u(iter_base + 53) != 0, + }) + 1 => { + let lifted72 : UInt? = match mbt_ffi_load8_u(iter_base + 52) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 56).reinterpret_as_uint()) + _ => panic() + } + + @common.FlagShape::CountFlag(lifted72) + } + _ => panic() + } + + let lifted75 : String? = match mbt_ffi_load8_u(iter_base + 60) { + 0 => Option::None + 1 => { + let result74 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 64), + mbt_ffi_load32(iter_base + 68), + ) + + Option::Some(result74) + } + _ => panic() + } + + array76.push(@common.FlagSpec::{ + long: result61, + short: lifted62, + aliases: array64, + doc: @common.Doc::{ + summary: result66, + description: result67, + examples: array70, + }, + shape: lifted73, + env_var: lifted75, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + let array78 : Array[Int] = [] + for index79 = 0 + index79 < mbt_ffi_load32(iter_base + 60) + index79 = index79 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + index79 * 4 + + array78.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + let lifted546 : @common.CommandBody? = match + mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let array121 : Array[@common.Positional] = [] + for index122 = 0 + index122 < mbt_ffi_load32(iter_base + 72) + index122 = index122 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 68) + index122 * 68 + + let result80 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result81 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let result82 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + let array85 : Array[@common.Example] = [] + for index86 = 0 + index86 < mbt_ffi_load32(iter_base + 28) + index86 = index86 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index86 * 16 + + let result83 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result84 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + array85.push(@common.Example::{ title: result83, body: result84 }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + let lifted88 : String? = match mbt_ffi_load8_u(iter_base + 32) { + 0 => Option::None + 1 => { + let result87 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 36), + mbt_ffi_load32(iter_base + 40), + ) + + Option::Some(result87) + } + _ => panic() + } + + let lifted120 : @types.SchemaValueTree? = match + mbt_ffi_load8_u(iter_base + 48) { + 0 => Option::None + 1 => { + let array118 : Array[@types.SchemaValueNode] = [] + for index119 = 0 + index119 < mbt_ffi_load32(iter_base + 56) + index119 = index119 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 52) + index119 * 32 + + let lifted117 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue( + mbt_ffi_load8_u(iter_base + 8) != 0, + ) + 1 => + @types.SchemaValueNode::S8Value( + mbt_ffi_load8(iter_base + 8), + ) + 2 => + @types.SchemaValueNode::S16Value( + mbt_ffi_load16(iter_base + 8), + ) + 3 => + @types.SchemaValueNode::S32Value( + mbt_ffi_load32(iter_base + 8), + ) + 4 => + @types.SchemaValueNode::S64Value( + mbt_ffi_load64(iter_base + 8), + ) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8) + .land(0xFFFF) + .reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => + @types.SchemaValueNode::F32Value( + mbt_ffi_loadf32(iter_base + 8), + ) + 10 => + @types.SchemaValueNode::F64Value( + mbt_ffi_loadf64(iter_base + 8), + ) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result89 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result89) + } + 13 => { + let array90 : Array[Int] = [] + for index91 = 0 + index91 < mbt_ffi_load32(iter_base + 12) + index91 = index91 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index91 * 4 + + array90.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array90) + } + 14 => { + let lifted92 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted92, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array93 : Array[Bool] = [] + for index94 = 0 + index94 < mbt_ffi_load32(iter_base + 12) + index94 = index94 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index94 * 1 + + array93.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array93) + } + 17 => { + let array95 : Array[Int] = [] + for index96 = 0 + index96 < mbt_ffi_load32(iter_base + 12) + index96 = index96 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index96 * 4 + + array95.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array95) + } + 18 => { + let array97 : Array[Int] = [] + for index98 = 0 + index98 < mbt_ffi_load32(iter_base + 12) + index98 = index98 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index98 * 4 + + array97.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array97) + } + 19 => { + let array99 : Array[Int] = [] + for index100 = 0 + index100 < mbt_ffi_load32(iter_base + 12) + index100 = index100 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index100 * 4 + + array99.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array99) + } + 20 => { + let array101 : Array[@types.MapEntry] = [] + for index102 = 0 + index102 < mbt_ffi_load32(iter_base + 12) + index102 = index102 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index102 * 8 + + array101.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array101) + } + 21 => { + let lifted103 : Int? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted103) + } + 22 => { + let lifted106 = match mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted104 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted104) + } + 1 => { + let lifted105 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted105) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted106) + } + 23 => { + let result107 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted109 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result108 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result108) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result107, + language: lifted109, + }) + } + 24 => { + let result110 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted112 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result111 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result111) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result110, + mime_type: lifted112, + }) + } + 25 => { + let result113 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result113) + } + 26 => { + let result114 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result114) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result115 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result115, + }) + } + 30 => { + let result116 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result116, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken( + mbt_ffi_load32(iter_base + 8), + ), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ), + ) + _ => panic() + } + + array118.push(lifted117) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 52)) + + Option::Some(@types.SchemaValueTree::{ + value_nodes: array118, + root: mbt_ffi_load32(iter_base + 60), + }) + } + _ => panic() + } + + array121.push(@common.Positional::{ + name: result80, + doc: @common.Doc::{ + summary: result81, + description: result82, + examples: array85, + }, + value_name: lifted88, + type_: mbt_ffi_load32(iter_base + 44), + default: lifted120, + required: mbt_ffi_load8_u(iter_base + 64) != 0, + accepts_stdio: mbt_ffi_load8_u(iter_base + 65) != 0, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + + let lifted135 : @common.TailPositional? = match + mbt_ffi_load8_u(iter_base + 76) { + 0 => Option::None + 1 => { + let result123 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 80), + mbt_ffi_load32(iter_base + 84), + ) + + let result124 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 88), + mbt_ffi_load32(iter_base + 92), + ) + + let result125 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 96), + mbt_ffi_load32(iter_base + 100), + ) + + let array128 : Array[@common.Example] = [] + for index129 = 0 + index129 < mbt_ffi_load32(iter_base + 108) + index129 = index129 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 104) + index129 * 16 + + let result126 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result127 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + array128.push(@common.Example::{ + title: result126, + body: result127, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 104)) + + let lifted131 : String? = match mbt_ffi_load8_u(iter_base + 112) { + 0 => Option::None + 1 => { + let result130 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 116), + mbt_ffi_load32(iter_base + 120), + ) + + Option::Some(result130) + } + _ => panic() + } + + let lifted132 : UInt? = match mbt_ffi_load8_u(iter_base + 132) { + 0 => Option::None + 1 => + Option::Some( + mbt_ffi_load32(iter_base + 136).reinterpret_as_uint(), + ) + _ => panic() + } + + let lifted134 : String? = match mbt_ffi_load8_u(iter_base + 140) { + 0 => Option::None + 1 => { + let result133 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 144), + mbt_ffi_load32(iter_base + 148), + ) + + Option::Some(result133) + } + _ => panic() + } + + Option::Some(@common.TailPositional::{ + name: result123, + doc: @common.Doc::{ + summary: result124, + description: result125, + examples: array128, + }, + value_name: lifted131, + item_type: mbt_ffi_load32(iter_base + 124), + min: mbt_ffi_load32(iter_base + 128).reinterpret_as_uint(), + max: lifted132, + separator: lifted134, + verbatim: mbt_ffi_load8_u(iter_base + 152) != 0, + accepts_stdio: mbt_ffi_load8_u(iter_base + 153) != 0, + }) + } + _ => panic() + } + + let array186 : Array[@common.OptionSpec] = [] + for index187 = 0 + index187 < mbt_ffi_load32(iter_base + 160) + index187 = index187 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 156) + index187 * 112 + + let result136 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted137 : Char? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => + Option::Some(Int::unsafe_to_char(mbt_ffi_load32(iter_base + 12))) + _ => panic() + } + + let array139 : Array[String] = [] + for index140 = 0 + index140 < mbt_ffi_load32(iter_base + 20) + index140 = index140 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index140 * 8 + + let result138 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array139.push(result138) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + let result141 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 24), + mbt_ffi_load32(iter_base + 28), + ) + + let result142 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 32), + mbt_ffi_load32(iter_base + 36), + ) + + let array145 : Array[@common.Example] = [] + for index146 = 0 + index146 < mbt_ffi_load32(iter_base + 44) + index146 = index146 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index146 * 16 + + let result143 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result144 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + array145.push(@common.Example::{ title: result143, body: result144 }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + let lifted148 : String? = match mbt_ffi_load8_u(iter_base + 48) { + 0 => Option::None + 1 => { + let result147 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 52), + mbt_ffi_load32(iter_base + 56), + ) + + Option::Some(result147) + } + _ => panic() + } + + let lifted151 = match mbt_ffi_load8_u(iter_base + 60) { + 0 => @common.OptionShape::Scalar(mbt_ffi_load32(iter_base + 64)) + 1 => + @common.OptionShape::OptionalScalar( + mbt_ffi_load32(iter_base + 64), + ) + 2 => { + let lifted149 = match mbt_ffi_load8_u(iter_base + 64) { + 0 => @common.Repetition::Repeated + 1 => + @common.Repetition::Delimited( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 68)), + ) + 2 => + @common.Repetition::Either( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 68)), + ) + _ => panic() + } + + @common.OptionShape::RepeatableList(@common.RepeatableListShape::{ + repetition: lifted149, + item_type: mbt_ffi_load32(iter_base + 72), + }) + } + 3 => { + let lifted150 = match mbt_ffi_load8_u(iter_base + 64) { + 0 => @common.Repetition::Repeated + 1 => + @common.Repetition::Delimited( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 68)), + ) + 2 => + @common.Repetition::Either( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 68)), + ) + _ => panic() + } + + @common.OptionShape::RepeatableMap(@common.RepeatableMapShape::{ + repetition: lifted150, + map_type: mbt_ffi_load32(iter_base + 72), + duplicate_key_policy: @common.DuplicateKeyPolicy::from( + mbt_ffi_load8_u(iter_base + 76), + ), + }) + } + _ => panic() + } + + let lifted183 : @types.SchemaValueTree? = match + mbt_ffi_load8_u(iter_base + 80) { + 0 => Option::None + 1 => { + let array181 : Array[@types.SchemaValueNode] = [] + for index182 = 0 + index182 < mbt_ffi_load32(iter_base + 88) + index182 = index182 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 84) + index182 * 32 + + let lifted180 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue( + mbt_ffi_load8_u(iter_base + 8) != 0, + ) + 1 => + @types.SchemaValueNode::S8Value( + mbt_ffi_load8(iter_base + 8), + ) + 2 => + @types.SchemaValueNode::S16Value( + mbt_ffi_load16(iter_base + 8), + ) + 3 => + @types.SchemaValueNode::S32Value( + mbt_ffi_load32(iter_base + 8), + ) + 4 => + @types.SchemaValueNode::S64Value( + mbt_ffi_load64(iter_base + 8), + ) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8) + .land(0xFFFF) + .reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => + @types.SchemaValueNode::F32Value( + mbt_ffi_loadf32(iter_base + 8), + ) + 10 => + @types.SchemaValueNode::F64Value( + mbt_ffi_loadf64(iter_base + 8), + ) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result152 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result152) + } + 13 => { + let array153 : Array[Int] = [] + for index154 = 0 + index154 < mbt_ffi_load32(iter_base + 12) + index154 = index154 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index154 * 4 + + array153.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array153) + } + 14 => { + let lifted155 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted155, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array156 : Array[Bool] = [] + for index157 = 0 + index157 < mbt_ffi_load32(iter_base + 12) + index157 = index157 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index157 * 1 + + array156.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array156) + } + 17 => { + let array158 : Array[Int] = [] + for index159 = 0 + index159 < mbt_ffi_load32(iter_base + 12) + index159 = index159 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index159 * 4 + + array158.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array158) + } + 18 => { + let array160 : Array[Int] = [] + for index161 = 0 + index161 < mbt_ffi_load32(iter_base + 12) + index161 = index161 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index161 * 4 + + array160.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array160) + } + 19 => { + let array162 : Array[Int] = [] + for index163 = 0 + index163 < mbt_ffi_load32(iter_base + 12) + index163 = index163 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index163 * 4 + + array162.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array162) + } + 20 => { + let array164 : Array[@types.MapEntry] = [] + for index165 = 0 + index165 < mbt_ffi_load32(iter_base + 12) + index165 = index165 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index165 * 8 + + array164.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array164) + } + 21 => { + let lifted166 : Int? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted166) + } + 22 => { + let lifted169 = match mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted167 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted167) + } + 1 => { + let lifted168 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted168) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted169) + } + 23 => { + let result170 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted172 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result171 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result171) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result170, + language: lifted172, + }) + } + 24 => { + let result173 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted175 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result174 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result174) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result173, + mime_type: lifted175, + }) + } + 25 => { + let result176 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result176) + } + 26 => { + let result177 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result177) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result178 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result178, + }) + } + 30 => { + let result179 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result179, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken( + mbt_ffi_load32(iter_base + 8), + ), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ), + ) + _ => panic() + } + + array181.push(lifted180) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + + Option::Some(@types.SchemaValueTree::{ + value_nodes: array181, + root: mbt_ffi_load32(iter_base + 92), + }) + } + _ => panic() + } + + let lifted185 : String? = match mbt_ffi_load8_u(iter_base + 100) { + 0 => Option::None + 1 => { + let result184 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 104), + mbt_ffi_load32(iter_base + 108), + ) + + Option::Some(result184) + } + _ => panic() + } + + array186.push(@common.OptionSpec::{ + long: result136, + short: lifted137, + aliases: array139, + doc: @common.Doc::{ + summary: result141, + description: result142, + examples: array145, + }, + value_name: lifted148, + shape: lifted151, + default: lifted183, + required: mbt_ffi_load8_u(iter_base + 96) != 0, + env_var: lifted185, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 156)) + + let array203 : Array[@common.FlagSpec] = [] + for index204 = 0 + index204 < mbt_ffi_load32(iter_base + 168) + index204 = index204 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 164) + index204 * 72 + + let result188 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted189 : Char? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => + Option::Some(Int::unsafe_to_char(mbt_ffi_load32(iter_base + 12))) + _ => panic() + } + + let array191 : Array[String] = [] + for index192 = 0 + index192 < mbt_ffi_load32(iter_base + 20) + index192 = index192 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index192 * 8 + + let result190 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array191.push(result190) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + let result193 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 24), + mbt_ffi_load32(iter_base + 28), + ) + + let result194 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 32), + mbt_ffi_load32(iter_base + 36), + ) + + let array197 : Array[@common.Example] = [] + for index198 = 0 + index198 < mbt_ffi_load32(iter_base + 44) + index198 = index198 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 40) + index198 * 16 + + let result195 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result196 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + array197.push(@common.Example::{ title: result195, body: result196 }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + + let lifted200 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @common.FlagShape::BoolFlag(@common.BoolFlagShape::{ + default: mbt_ffi_load8_u(iter_base + 52) != 0, + negatable: mbt_ffi_load8_u(iter_base + 53) != 0, + }) + 1 => { + let lifted199 : UInt? = match mbt_ffi_load8_u(iter_base + 52) { + 0 => Option::None + 1 => + Option::Some( + mbt_ffi_load32(iter_base + 56).reinterpret_as_uint(), + ) + _ => panic() + } + + @common.FlagShape::CountFlag(lifted199) + } + _ => panic() + } + + let lifted202 : String? = match mbt_ffi_load8_u(iter_base + 60) { + 0 => Option::None + 1 => { + let result201 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 64), + mbt_ffi_load32(iter_base + 68), + ) + + Option::Some(result201) + } + _ => panic() + } + + array203.push(@common.FlagSpec::{ + long: result188, + short: lifted189, + aliases: array191, + doc: @common.Doc::{ + summary: result193, + description: result194, + examples: array197, + }, + shape: lifted200, + env_var: lifted202, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 164)) + + let array496 : Array[@common.Constraint] = [] + for index497 = 0 + index497 < mbt_ffi_load32(iter_base + 176) + index497 = index497 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 172) + index497 * 28 + + let lifted495 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => { + let array239 : Array[@common.Ref] = [] + for index240 = 0 + index240 < mbt_ffi_load32(iter_base + 8) + index240 = index240 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + index240 * 24 + + let lifted238 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => { + let result205 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + @common.Ref::Present(result205) + } + 1 => { + let result206 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + let array236 : Array[@types.SchemaValueNode] = [] + for index237 = 0 + index237 < mbt_ffi_load32(iter_base + 16) + index237 = index237 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index237 * 32 + + let lifted235 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue( + mbt_ffi_load8_u(iter_base + 8) != 0, + ) + 1 => + @types.SchemaValueNode::S8Value( + mbt_ffi_load8(iter_base + 8), + ) + 2 => + @types.SchemaValueNode::S16Value( + mbt_ffi_load16(iter_base + 8), + ) + 3 => + @types.SchemaValueNode::S32Value( + mbt_ffi_load32(iter_base + 8), + ) + 4 => + @types.SchemaValueNode::S64Value( + mbt_ffi_load64(iter_base + 8), + ) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8) + .land(0xFFFF) + .reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => + @types.SchemaValueNode::F32Value( + mbt_ffi_loadf32(iter_base + 8), + ) + 10 => + @types.SchemaValueNode::F64Value( + mbt_ffi_loadf64(iter_base + 8), + ) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result207 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result207) + } + 13 => { + let array208 : Array[Int] = [] + for index209 = 0 + index209 < mbt_ffi_load32(iter_base + 12) + index209 = index209 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index209 * 4 + + array208.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array208) + } + 14 => { + let lifted210 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted210, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array211 : Array[Bool] = [] + for index212 = 0 + index212 < mbt_ffi_load32(iter_base + 12) + index212 = index212 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index212 * 1 + + array211.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array211) + } + 17 => { + let array213 : Array[Int] = [] + for index214 = 0 + index214 < mbt_ffi_load32(iter_base + 12) + index214 = index214 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index214 * 4 + + array213.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array213) + } + 18 => { + let array215 : Array[Int] = [] + for index216 = 0 + index216 < mbt_ffi_load32(iter_base + 12) + index216 = index216 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index216 * 4 + + array215.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array215) + } + 19 => { + let array217 : Array[Int] = [] + for index218 = 0 + index218 < mbt_ffi_load32(iter_base + 12) + index218 = index218 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index218 * 4 + + array217.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array217) + } + 20 => { + let array219 : Array[@types.MapEntry] = [] + for index220 = 0 + index220 < mbt_ffi_load32(iter_base + 12) + index220 = index220 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index220 * 8 + + array219.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array219) + } + 21 => { + let lifted221 : Int? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted221) + } + 22 => { + let lifted224 = match mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted222 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted222) + } + 1 => { + let lifted223 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted223) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted224) + } + 23 => { + let result225 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted227 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result226 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result226) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result225, + language: lifted227, + }) + } + 24 => { + let result228 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted230 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result229 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result229) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result228, + mime_type: lifted230, + }) + } + 25 => { + let result231 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result231) + } + 26 => { + let result232 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result232) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result233 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result233, + }) + } + 30 => { + let result234 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result234, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken( + mbt_ffi_load32(iter_base + 8), + ), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ), + ) + _ => panic() + } + + array236.push(lifted235) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + @common.Ref::ValueIs(@common.ValueIsRef::{ + name: result206, + value: @types.SchemaValueTree::{ + value_nodes: array236, + root: mbt_ffi_load32(iter_base + 20), + }, + }) + } + _ => panic() + } + + array239.push(lifted238) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + @common.Constraint::RequiresAll(array239) + } + 1 => { + let array275 : Array[@common.Ref] = [] + for index276 = 0 + index276 < mbt_ffi_load32(iter_base + 8) + index276 = index276 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + index276 * 24 + + let lifted274 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => { + let result241 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + @common.Ref::Present(result241) + } + 1 => { + let result242 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + let array272 : Array[@types.SchemaValueNode] = [] + for index273 = 0 + index273 < mbt_ffi_load32(iter_base + 16) + index273 = index273 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index273 * 32 + + let lifted271 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue( + mbt_ffi_load8_u(iter_base + 8) != 0, + ) + 1 => + @types.SchemaValueNode::S8Value( + mbt_ffi_load8(iter_base + 8), + ) + 2 => + @types.SchemaValueNode::S16Value( + mbt_ffi_load16(iter_base + 8), + ) + 3 => + @types.SchemaValueNode::S32Value( + mbt_ffi_load32(iter_base + 8), + ) + 4 => + @types.SchemaValueNode::S64Value( + mbt_ffi_load64(iter_base + 8), + ) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8) + .land(0xFFFF) + .reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => + @types.SchemaValueNode::F32Value( + mbt_ffi_loadf32(iter_base + 8), + ) + 10 => + @types.SchemaValueNode::F64Value( + mbt_ffi_loadf64(iter_base + 8), + ) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result243 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result243) + } + 13 => { + let array244 : Array[Int] = [] + for index245 = 0 + index245 < mbt_ffi_load32(iter_base + 12) + index245 = index245 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index245 * 4 + + array244.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array244) + } + 14 => { + let lifted246 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted246, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array247 : Array[Bool] = [] + for index248 = 0 + index248 < mbt_ffi_load32(iter_base + 12) + index248 = index248 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index248 * 1 + + array247.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array247) + } + 17 => { + let array249 : Array[Int] = [] + for index250 = 0 + index250 < mbt_ffi_load32(iter_base + 12) + index250 = index250 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index250 * 4 + + array249.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array249) + } + 18 => { + let array251 : Array[Int] = [] + for index252 = 0 + index252 < mbt_ffi_load32(iter_base + 12) + index252 = index252 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index252 * 4 + + array251.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array251) + } + 19 => { + let array253 : Array[Int] = [] + for index254 = 0 + index254 < mbt_ffi_load32(iter_base + 12) + index254 = index254 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index254 * 4 + + array253.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array253) + } + 20 => { + let array255 : Array[@types.MapEntry] = [] + for index256 = 0 + index256 < mbt_ffi_load32(iter_base + 12) + index256 = index256 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index256 * 8 + + array255.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array255) + } + 21 => { + let lifted257 : Int? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted257) + } + 22 => { + let lifted260 = match mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted258 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted258) + } + 1 => { + let lifted259 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted259) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted260) + } + 23 => { + let result261 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted263 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result262 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result262) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result261, + language: lifted263, + }) + } + 24 => { + let result264 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted266 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result265 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result265) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result264, + mime_type: lifted266, + }) + } + 25 => { + let result267 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result267) + } + 26 => { + let result268 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result268) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result269 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result269, + }) + } + 30 => { + let result270 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result270, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken( + mbt_ffi_load32(iter_base + 8), + ), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ), + ) + _ => panic() + } + + array272.push(lifted271) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + @common.Ref::ValueIs(@common.ValueIsRef::{ + name: result242, + value: @types.SchemaValueTree::{ + value_nodes: array272, + root: mbt_ffi_load32(iter_base + 20), + }, + }) + } + _ => panic() + } + + array275.push(lifted274) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + @common.Constraint::AllOrNone(array275) + } + 2 => { + let array311 : Array[@common.Ref] = [] + for index312 = 0 + index312 < mbt_ffi_load32(iter_base + 8) + index312 = index312 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + index312 * 24 + + let lifted310 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => { + let result277 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + @common.Ref::Present(result277) + } + 1 => { + let result278 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + let array308 : Array[@types.SchemaValueNode] = [] + for index309 = 0 + index309 < mbt_ffi_load32(iter_base + 16) + index309 = index309 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index309 * 32 + + let lifted307 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue( + mbt_ffi_load8_u(iter_base + 8) != 0, + ) + 1 => + @types.SchemaValueNode::S8Value( + mbt_ffi_load8(iter_base + 8), + ) + 2 => + @types.SchemaValueNode::S16Value( + mbt_ffi_load16(iter_base + 8), + ) + 3 => + @types.SchemaValueNode::S32Value( + mbt_ffi_load32(iter_base + 8), + ) + 4 => + @types.SchemaValueNode::S64Value( + mbt_ffi_load64(iter_base + 8), + ) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8) + .land(0xFFFF) + .reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => + @types.SchemaValueNode::F32Value( + mbt_ffi_loadf32(iter_base + 8), + ) + 10 => + @types.SchemaValueNode::F64Value( + mbt_ffi_loadf64(iter_base + 8), + ) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result279 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result279) + } + 13 => { + let array280 : Array[Int] = [] + for index281 = 0 + index281 < mbt_ffi_load32(iter_base + 12) + index281 = index281 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index281 * 4 + + array280.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array280) + } + 14 => { + let lifted282 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted282, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array283 : Array[Bool] = [] + for index284 = 0 + index284 < mbt_ffi_load32(iter_base + 12) + index284 = index284 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index284 * 1 + + array283.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array283) + } + 17 => { + let array285 : Array[Int] = [] + for index286 = 0 + index286 < mbt_ffi_load32(iter_base + 12) + index286 = index286 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index286 * 4 + + array285.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array285) + } + 18 => { + let array287 : Array[Int] = [] + for index288 = 0 + index288 < mbt_ffi_load32(iter_base + 12) + index288 = index288 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index288 * 4 + + array287.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array287) + } + 19 => { + let array289 : Array[Int] = [] + for index290 = 0 + index290 < mbt_ffi_load32(iter_base + 12) + index290 = index290 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index290 * 4 + + array289.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array289) + } + 20 => { + let array291 : Array[@types.MapEntry] = [] + for index292 = 0 + index292 < mbt_ffi_load32(iter_base + 12) + index292 = index292 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index292 * 8 + + array291.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array291) + } + 21 => { + let lifted293 : Int? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted293) + } + 22 => { + let lifted296 = match mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted294 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted294) + } + 1 => { + let lifted295 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted295) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted296) + } + 23 => { + let result297 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted299 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result298 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result298) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result297, + language: lifted299, + }) + } + 24 => { + let result300 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted302 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result301 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result301) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result300, + mime_type: lifted302, + }) + } + 25 => { + let result303 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result303) + } + 26 => { + let result304 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result304) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result305 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result305, + }) + } + 30 => { + let result306 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result306, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken( + mbt_ffi_load32(iter_base + 8), + ), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ), + ) + _ => panic() + } + + array308.push(lifted307) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + @common.Ref::ValueIs(@common.ValueIsRef::{ + name: result278, + value: @types.SchemaValueTree::{ + value_nodes: array308, + root: mbt_ffi_load32(iter_base + 20), + }, + }) + } + _ => panic() + } + + array311.push(lifted310) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + @common.Constraint::RequiresAny(array311) + } + 3 => { + let array349 : Array[@common.RefGroup] = [] + for index350 = 0 + index350 < mbt_ffi_load32(iter_base + 8) + index350 = index350 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 4) + index350 * 8 + + let array347 : Array[@common.Ref] = [] + for index348 = 0 + index348 < mbt_ffi_load32(iter_base + 4) + index348 = index348 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 0) + index348 * 24 + + let lifted346 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => { + let result313 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + @common.Ref::Present(result313) + } + 1 => { + let result314 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + let array344 : Array[@types.SchemaValueNode] = [] + for index345 = 0 + index345 < mbt_ffi_load32(iter_base + 16) + index345 = index345 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index345 * 32 + + let lifted343 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue( + mbt_ffi_load8_u(iter_base + 8) != 0, + ) + 1 => + @types.SchemaValueNode::S8Value( + mbt_ffi_load8(iter_base + 8), + ) + 2 => + @types.SchemaValueNode::S16Value( + mbt_ffi_load16(iter_base + 8), + ) + 3 => + @types.SchemaValueNode::S32Value( + mbt_ffi_load32(iter_base + 8), + ) + 4 => + @types.SchemaValueNode::S64Value( + mbt_ffi_load64(iter_base + 8), + ) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8) + .land(0xFFFF) + .reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => + @types.SchemaValueNode::F32Value( + mbt_ffi_loadf32(iter_base + 8), + ) + 10 => + @types.SchemaValueNode::F64Value( + mbt_ffi_loadf64(iter_base + 8), + ) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result315 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result315) + } + 13 => { + let array316 : Array[Int] = [] + for index317 = 0 + index317 < mbt_ffi_load32(iter_base + 12) + index317 = index317 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index317 * 4 + + array316.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array316) + } + 14 => { + let lifted318 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted318, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array319 : Array[Bool] = [] + for index320 = 0 + index320 < mbt_ffi_load32(iter_base + 12) + index320 = index320 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index320 * 1 + + array319.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array319) + } + 17 => { + let array321 : Array[Int] = [] + for index322 = 0 + index322 < mbt_ffi_load32(iter_base + 12) + index322 = index322 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index322 * 4 + + array321.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array321) + } + 18 => { + let array323 : Array[Int] = [] + for index324 = 0 + index324 < mbt_ffi_load32(iter_base + 12) + index324 = index324 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index324 * 4 + + array323.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array323) + } + 19 => { + let array325 : Array[Int] = [] + for index326 = 0 + index326 < mbt_ffi_load32(iter_base + 12) + index326 = index326 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index326 * 4 + + array325.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array325) + } + 20 => { + let array327 : Array[@types.MapEntry] = [] + for index328 = 0 + index328 < mbt_ffi_load32(iter_base + 12) + index328 = index328 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index328 * 8 + + array327.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array327) + } + 21 => { + let lifted329 : Int? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted329) + } + 22 => { + let lifted332 = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted330 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted330) + } + 1 => { + let lifted331 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted331) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted332) + } + 23 => { + let result333 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted335 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result334 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result334) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result333, + language: lifted335, + }) + } + 24 => { + let result336 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted338 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result337 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result337) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result336, + mime_type: lifted338, + }) + } + 25 => { + let result339 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result339) + } + 26 => { + let result340 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result340) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result341 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result341, + }) + } + 30 => { + let result342 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result342, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret( + mbt_ffi_load32(iter_base + 8), + ), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken( + mbt_ffi_load32(iter_base + 8), + ), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ), + ) + _ => panic() + } + + array344.push(lifted343) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + @common.Ref::ValueIs(@common.ValueIsRef::{ + name: result314, + value: @types.SchemaValueTree::{ + value_nodes: array344, + root: mbt_ffi_load32(iter_base + 20), + }, + }) + } + _ => panic() + } + + array347.push(lifted346) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + array349.push(@common.RefGroup::{ refs: array347 }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 4)) + + @common.Constraint::MutexGroups(array349) + } + 4 => { + let array385 : Array[@common.Ref] = [] + for index386 = 0 + index386 < mbt_ffi_load32(iter_base + 12) + index386 = index386 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index386 * 24 + + let lifted384 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => { + let result351 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + @common.Ref::Present(result351) + } + 1 => { + let result352 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + let array382 : Array[@types.SchemaValueNode] = [] + for index383 = 0 + index383 < mbt_ffi_load32(iter_base + 16) + index383 = index383 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index383 * 32 + + let lifted381 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue( + mbt_ffi_load8_u(iter_base + 8) != 0, + ) + 1 => + @types.SchemaValueNode::S8Value( + mbt_ffi_load8(iter_base + 8), + ) + 2 => + @types.SchemaValueNode::S16Value( + mbt_ffi_load16(iter_base + 8), + ) + 3 => + @types.SchemaValueNode::S32Value( + mbt_ffi_load32(iter_base + 8), + ) + 4 => + @types.SchemaValueNode::S64Value( + mbt_ffi_load64(iter_base + 8), + ) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8) + .land(0xFFFF) + .reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => + @types.SchemaValueNode::F32Value( + mbt_ffi_loadf32(iter_base + 8), + ) + 10 => + @types.SchemaValueNode::F64Value( + mbt_ffi_loadf64(iter_base + 8), + ) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result353 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result353) + } + 13 => { + let array354 : Array[Int] = [] + for index355 = 0 + index355 < mbt_ffi_load32(iter_base + 12) + index355 = index355 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index355 * 4 + + array354.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array354) + } + 14 => { + let lifted356 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted356, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array357 : Array[Bool] = [] + for index358 = 0 + index358 < mbt_ffi_load32(iter_base + 12) + index358 = index358 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index358 * 1 + + array357.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array357) + } + 17 => { + let array359 : Array[Int] = [] + for index360 = 0 + index360 < mbt_ffi_load32(iter_base + 12) + index360 = index360 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index360 * 4 + + array359.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array359) + } + 18 => { + let array361 : Array[Int] = [] + for index362 = 0 + index362 < mbt_ffi_load32(iter_base + 12) + index362 = index362 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index362 * 4 + + array361.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array361) + } + 19 => { + let array363 : Array[Int] = [] + for index364 = 0 + index364 < mbt_ffi_load32(iter_base + 12) + index364 = index364 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index364 * 4 + + array363.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array363) + } + 20 => { + let array365 : Array[@types.MapEntry] = [] + for index366 = 0 + index366 < mbt_ffi_load32(iter_base + 12) + index366 = index366 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index366 * 8 + + array365.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array365) + } + 21 => { + let lifted367 : Int? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted367) + } + 22 => { + let lifted370 = match mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted368 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted368) + } + 1 => { + let lifted369 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted369) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted370) + } + 23 => { + let result371 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted373 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result372 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result372) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result371, + language: lifted373, + }) + } + 24 => { + let result374 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted376 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result375 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result375) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result374, + mime_type: lifted376, + }) + } + 25 => { + let result377 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result377) + } + 26 => { + let result378 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result378) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result379 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result379, + }) + } + 30 => { + let result380 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result380, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken( + mbt_ffi_load32(iter_base + 8), + ), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ), + ) + _ => panic() + } + + array382.push(lifted381) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + @common.Ref::ValueIs(@common.ValueIsRef::{ + name: result352, + value: @types.SchemaValueTree::{ + value_nodes: array382, + root: mbt_ffi_load32(iter_base + 20), + }, + }) + } + _ => panic() + } + + array385.push(lifted384) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + let array421 : Array[@common.Ref] = [] + for index422 = 0 + index422 < mbt_ffi_load32(iter_base + 24) + index422 = index422 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 20) + index422 * 24 + + let lifted420 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => { + let result387 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + @common.Ref::Present(result387) + } + 1 => { + let result388 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + let array418 : Array[@types.SchemaValueNode] = [] + for index419 = 0 + index419 < mbt_ffi_load32(iter_base + 16) + index419 = index419 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index419 * 32 + + let lifted417 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue( + mbt_ffi_load8_u(iter_base + 8) != 0, + ) + 1 => + @types.SchemaValueNode::S8Value( + mbt_ffi_load8(iter_base + 8), + ) + 2 => + @types.SchemaValueNode::S16Value( + mbt_ffi_load16(iter_base + 8), + ) + 3 => + @types.SchemaValueNode::S32Value( + mbt_ffi_load32(iter_base + 8), + ) + 4 => + @types.SchemaValueNode::S64Value( + mbt_ffi_load64(iter_base + 8), + ) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8) + .land(0xFFFF) + .reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => + @types.SchemaValueNode::F32Value( + mbt_ffi_loadf32(iter_base + 8), + ) + 10 => + @types.SchemaValueNode::F64Value( + mbt_ffi_loadf64(iter_base + 8), + ) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result389 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result389) + } + 13 => { + let array390 : Array[Int] = [] + for index391 = 0 + index391 < mbt_ffi_load32(iter_base + 12) + index391 = index391 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index391 * 4 + + array390.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array390) + } + 14 => { + let lifted392 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted392, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array393 : Array[Bool] = [] + for index394 = 0 + index394 < mbt_ffi_load32(iter_base + 12) + index394 = index394 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index394 * 1 + + array393.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array393) + } + 17 => { + let array395 : Array[Int] = [] + for index396 = 0 + index396 < mbt_ffi_load32(iter_base + 12) + index396 = index396 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index396 * 4 + + array395.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array395) + } + 18 => { + let array397 : Array[Int] = [] + for index398 = 0 + index398 < mbt_ffi_load32(iter_base + 12) + index398 = index398 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index398 * 4 + + array397.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array397) + } + 19 => { + let array399 : Array[Int] = [] + for index400 = 0 + index400 < mbt_ffi_load32(iter_base + 12) + index400 = index400 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index400 * 4 + + array399.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array399) + } + 20 => { + let array401 : Array[@types.MapEntry] = [] + for index402 = 0 + index402 < mbt_ffi_load32(iter_base + 12) + index402 = index402 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index402 * 8 + + array401.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array401) + } + 21 => { + let lifted403 : Int? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted403) + } + 22 => { + let lifted406 = match mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted404 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted404) + } + 1 => { + let lifted405 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted405) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted406) + } + 23 => { + let result407 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted409 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result408 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result408) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result407, + language: lifted409, + }) + } + 24 => { + let result410 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted412 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result411 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result411) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result410, + mime_type: lifted412, + }) + } + 25 => { + let result413 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result413) + } + 26 => { + let result414 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result414) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result415 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result415, + }) + } + 30 => { + let result416 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result416, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken( + mbt_ffi_load32(iter_base + 8), + ), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ), + ) + _ => panic() + } + + array418.push(lifted417) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + @common.Ref::ValueIs(@common.ValueIsRef::{ + name: result388, + value: @types.SchemaValueTree::{ + value_nodes: array418, + root: mbt_ffi_load32(iter_base + 20), + }, + }) + } + _ => panic() + } + + array421.push(lifted420) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + + @common.Constraint::Implies(@common.ImpliesC::{ + lhs_quant: @common.Quantifier::from( + mbt_ffi_load8_u(iter_base + 4), + ), + lhs: array385, + rhs_quant: @common.Quantifier::from( + mbt_ffi_load8_u(iter_base + 16), + ), + rhs: array421, + }) + } + 5 => { + let array457 : Array[@common.Ref] = [] + for index458 = 0 + index458 < mbt_ffi_load32(iter_base + 12) + index458 = index458 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index458 * 24 + + let lifted456 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => { + let result423 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + @common.Ref::Present(result423) + } + 1 => { + let result424 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + let array454 : Array[@types.SchemaValueNode] = [] + for index455 = 0 + index455 < mbt_ffi_load32(iter_base + 16) + index455 = index455 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index455 * 32 + + let lifted453 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue( + mbt_ffi_load8_u(iter_base + 8) != 0, + ) + 1 => + @types.SchemaValueNode::S8Value( + mbt_ffi_load8(iter_base + 8), + ) + 2 => + @types.SchemaValueNode::S16Value( + mbt_ffi_load16(iter_base + 8), + ) + 3 => + @types.SchemaValueNode::S32Value( + mbt_ffi_load32(iter_base + 8), + ) + 4 => + @types.SchemaValueNode::S64Value( + mbt_ffi_load64(iter_base + 8), + ) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8) + .land(0xFFFF) + .reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => + @types.SchemaValueNode::F32Value( + mbt_ffi_loadf32(iter_base + 8), + ) + 10 => + @types.SchemaValueNode::F64Value( + mbt_ffi_loadf64(iter_base + 8), + ) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result425 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result425) + } + 13 => { + let array426 : Array[Int] = [] + for index427 = 0 + index427 < mbt_ffi_load32(iter_base + 12) + index427 = index427 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index427 * 4 + + array426.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array426) + } + 14 => { + let lifted428 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted428, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array429 : Array[Bool] = [] + for index430 = 0 + index430 < mbt_ffi_load32(iter_base + 12) + index430 = index430 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index430 * 1 + + array429.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array429) + } + 17 => { + let array431 : Array[Int] = [] + for index432 = 0 + index432 < mbt_ffi_load32(iter_base + 12) + index432 = index432 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index432 * 4 + + array431.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array431) + } + 18 => { + let array433 : Array[Int] = [] + for index434 = 0 + index434 < mbt_ffi_load32(iter_base + 12) + index434 = index434 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index434 * 4 + + array433.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array433) + } + 19 => { + let array435 : Array[Int] = [] + for index436 = 0 + index436 < mbt_ffi_load32(iter_base + 12) + index436 = index436 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index436 * 4 + + array435.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array435) + } + 20 => { + let array437 : Array[@types.MapEntry] = [] + for index438 = 0 + index438 < mbt_ffi_load32(iter_base + 12) + index438 = index438 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index438 * 8 + + array437.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array437) + } + 21 => { + let lifted439 : Int? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted439) + } + 22 => { + let lifted442 = match mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted440 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted440) + } + 1 => { + let lifted441 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted441) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted442) + } + 23 => { + let result443 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted445 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result444 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result444) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result443, + language: lifted445, + }) + } + 24 => { + let result446 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted448 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result447 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result447) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result446, + mime_type: lifted448, + }) + } + 25 => { + let result449 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result449) + } + 26 => { + let result450 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result450) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result451 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result451, + }) + } + 30 => { + let result452 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result452, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken( + mbt_ffi_load32(iter_base + 8), + ), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ), + ) + _ => panic() + } + + array454.push(lifted453) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + @common.Ref::ValueIs(@common.ValueIsRef::{ + name: result424, + value: @types.SchemaValueTree::{ + value_nodes: array454, + root: mbt_ffi_load32(iter_base + 20), + }, + }) + } + _ => panic() + } + + array457.push(lifted456) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + let array493 : Array[@common.Ref] = [] + for index494 = 0 + index494 < mbt_ffi_load32(iter_base + 20) + index494 = index494 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index494 * 24 + + let lifted492 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => { + let result459 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + @common.Ref::Present(result459) + } + 1 => { + let result460 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 4), + mbt_ffi_load32(iter_base + 8), + ) + + let array490 : Array[@types.SchemaValueNode] = [] + for index491 = 0 + index491 < mbt_ffi_load32(iter_base + 16) + index491 = index491 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index491 * 32 + + let lifted489 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue( + mbt_ffi_load8_u(iter_base + 8) != 0, + ) + 1 => + @types.SchemaValueNode::S8Value( + mbt_ffi_load8(iter_base + 8), + ) + 2 => + @types.SchemaValueNode::S16Value( + mbt_ffi_load16(iter_base + 8), + ) + 3 => + @types.SchemaValueNode::S32Value( + mbt_ffi_load32(iter_base + 8), + ) + 4 => + @types.SchemaValueNode::S64Value( + mbt_ffi_load64(iter_base + 8), + ) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8) + .land(0xFFFF) + .reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => + @types.SchemaValueNode::F32Value( + mbt_ffi_loadf32(iter_base + 8), + ) + 10 => + @types.SchemaValueNode::F64Value( + mbt_ffi_loadf64(iter_base + 8), + ) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result461 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result461) + } + 13 => { + let array462 : Array[Int] = [] + for index463 = 0 + index463 < mbt_ffi_load32(iter_base + 12) + index463 = index463 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index463 * 4 + + array462.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array462) + } + 14 => { + let lifted464 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted464, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array465 : Array[Bool] = [] + for index466 = 0 + index466 < mbt_ffi_load32(iter_base + 12) + index466 = index466 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index466 * 1 + + array465.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array465) + } + 17 => { + let array467 : Array[Int] = [] + for index468 = 0 + index468 < mbt_ffi_load32(iter_base + 12) + index468 = index468 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index468 * 4 + + array467.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array467) + } + 18 => { + let array469 : Array[Int] = [] + for index470 = 0 + index470 < mbt_ffi_load32(iter_base + 12) + index470 = index470 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index470 * 4 + + array469.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array469) + } + 19 => { + let array471 : Array[Int] = [] + for index472 = 0 + index472 < mbt_ffi_load32(iter_base + 12) + index472 = index472 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index472 * 4 + + array471.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array471) + } + 20 => { + let array473 : Array[@types.MapEntry] = [] + for index474 = 0 + index474 < mbt_ffi_load32(iter_base + 12) + index474 = index474 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index474 * 8 + + array473.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array473) + } + 21 => { + let lifted475 : Int? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted475) + } + 22 => { + let lifted478 = match mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted476 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted476) + } + 1 => { + let lifted477 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted477) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted478) + } + 23 => { + let result479 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted481 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result480 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result480) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result479, + language: lifted481, + }) + } + 24 => { + let result482 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted484 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result483 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result483) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result482, + mime_type: lifted484, + }) + } + 25 => { + let result485 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result485) + } + 26 => { + let result486 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result486) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result487 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result487, + }) + } + 30 => { + let result488 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result488, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken( + mbt_ffi_load32(iter_base + 8), + ), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ), + ) + _ => panic() + } + + array490.push(lifted489) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + @common.Ref::ValueIs(@common.ValueIsRef::{ + name: result460, + value: @types.SchemaValueTree::{ + value_nodes: array490, + root: mbt_ffi_load32(iter_base + 20), + }, + }) + } + _ => panic() + } + + array493.push(lifted492) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + @common.Constraint::Forbids(@common.ForbidsC::{ + lhs_quant: @common.Quantifier::from( + mbt_ffi_load8_u(iter_base + 4), + ), + lhs: array457, + rhs: array493, + }) + } + _ => panic() + } + + array496.push(lifted495) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 172)) + + let lifted507 : @common.StreamSpec? = match + mbt_ffi_load8_u(iter_base + 180) { + 0 => Option::None + 1 => { + let result498 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 184), + mbt_ffi_load32(iter_base + 188), + ) + + let result499 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 192), + mbt_ffi_load32(iter_base + 196), + ) + + let array502 : Array[@common.Example] = [] + for index503 = 0 + index503 < mbt_ffi_load32(iter_base + 204) + index503 = index503 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 200) + index503 * 16 + + let result500 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result501 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + array502.push(@common.Example::{ + title: result500, + body: result501, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 200)) + + let array505 : Array[String] = [] + for index506 = 0 + index506 < mbt_ffi_load32(iter_base + 212) + index506 = index506 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 208) + index506 * 8 + + let result504 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array505.push(result504) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 208)) + + Option::Some(@common.StreamSpec::{ + doc: @common.Doc::{ + summary: result498, + description: result499, + examples: array502, + }, + mime: array505, + required: mbt_ffi_load8_u(iter_base + 216) != 0, + }) + } + _ => panic() + } + + let lifted517 : @common.StreamSpec? = match + mbt_ffi_load8_u(iter_base + 220) { + 0 => Option::None + 1 => { + let result508 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 224), + mbt_ffi_load32(iter_base + 228), + ) + + let result509 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 232), + mbt_ffi_load32(iter_base + 236), + ) + + let array512 : Array[@common.Example] = [] + for index513 = 0 + index513 < mbt_ffi_load32(iter_base + 244) + index513 = index513 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 240) + index513 * 16 + + let result510 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result511 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + array512.push(@common.Example::{ + title: result510, + body: result511, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 240)) + + let array515 : Array[String] = [] + for index516 = 0 + index516 < mbt_ffi_load32(iter_base + 252) + index516 = index516 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 248) + index516 * 8 + + let result514 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array515.push(result514) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 248)) + + Option::Some(@common.StreamSpec::{ + doc: @common.Doc::{ + summary: result508, + description: result509, + examples: array512, + }, + mime: array515, + required: mbt_ffi_load8_u(iter_base + 256) != 0, + }) + } + _ => panic() + } + + let lifted534 : @common.ResultSpec? = match + mbt_ffi_load8_u(iter_base + 260) { + 0 => Option::None + 1 => { + let result518 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 268), + mbt_ffi_load32(iter_base + 272), + ) + + let result519 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 276), + mbt_ffi_load32(iter_base + 280), + ) + + let array522 : Array[@common.Example] = [] + for index523 = 0 + index523 < mbt_ffi_load32(iter_base + 288) + index523 = index523 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 284) + index523 * 16 + + let result520 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result521 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + array522.push(@common.Example::{ + title: result520, + body: result521, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 284)) + + let array531 : Array[@common.Formatter] = [] + for index532 = 0 + index532 < mbt_ffi_load32(iter_base + 296) + index532 = index532 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 292) + index532 * 32 + + let result524 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result525 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let result526 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + let array529 : Array[@common.Example] = [] + for index530 = 0 + index530 < mbt_ffi_load32(iter_base + 28) + index530 = index530 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index530 * 16 + + let result527 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result528 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + array529.push(@common.Example::{ + title: result527, + body: result528, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + array531.push(@common.Formatter::{ + name: result524, + doc: @common.Doc::{ + summary: result525, + description: result526, + examples: array529, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 292)) + + let result533 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 300), + mbt_ffi_load32(iter_base + 304), + ) + + Option::Some(@common.ResultSpec::{ + type_: mbt_ffi_load32(iter_base + 264), + doc: @common.Doc::{ + summary: result518, + description: result519, + examples: array522, + }, + formatters: array531, + default_formatter: result533, + }) + } + _ => panic() + } + + let array543 : Array[@common.ErrorCase] = [] + for index544 = 0 + index544 < mbt_ffi_load32(iter_base + 312) + index544 = index544 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 308) + index544 * 44 + + let result535 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result536 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let result537 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + let array540 : Array[@common.Example] = [] + for index541 = 0 + index541 < mbt_ffi_load32(iter_base + 28) + index541 = index541 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index541 * 16 + + let result538 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let result539 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + array540.push(@common.Example::{ title: result538, body: result539 }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + let lifted542 : Int? = match mbt_ffi_load8_u(iter_base + 36) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + + array543.push(@common.ErrorCase::{ + name: result535, + doc: @common.Doc::{ + summary: result536, + description: result537, + examples: array540, + }, + kind: @common.ErrorKind::from(mbt_ffi_load8_u(iter_base + 32)), + exit_code: mbt_ffi_load8_u(iter_base + 33).to_byte(), + payload: lifted542, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 308)) + + let lifted545 : @common.CommandAnnotations? = match + mbt_ffi_load8_u(iter_base + 316) { + 0 => Option::None + 1 => + Option::Some(@common.CommandAnnotations::{ + read_only: mbt_ffi_load8_u(iter_base + 317) != 0, + destructive: mbt_ffi_load8_u(iter_base + 318) != 0, + idempotent: mbt_ffi_load8_u(iter_base + 319) != 0, + open_world: mbt_ffi_load8_u(iter_base + 320) != 0, + }) + _ => panic() + } + + Option::Some(@common.CommandBody::{ + positionals: @common.Positionals::{ fixed: array121, tail: lifted135 }, + options: array186, + flags: array203, + constraints: array496, + stdin: lifted507, + stdout: lifted517, + result: lifted534, + errors: array543, + annotations: lifted545, + }) + } + _ => panic() + } + + array547.push(@common.CommandNode::{ + name: result2, + aliases: array, + doc: @common.Doc::{ + summary: result4, + description: result5, + examples: array8, + }, + globals: @common.Globals::{ options: array59, flags: array76 }, + subcommands: array78, + body: lifted546, + }) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 24)) + @common.CommandTree::{ nodes: array547 } +} + +///| +fn __wit_bindgen_lift_invoke_tool_schema(p0 : Int) -> @types.SchemaGraph { + let array745 : Array[@types.SchemaTypeNode] = [] + for index746 = 0; index746 < mbt_ffi_load32(p0 + 36); index746 = index746 + 1 { + let iter_base = mbt_ffi_load32(p0 + 32) + index746 * 144 + + let lifted731 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => @types.SchemaTypeBody::RefType(mbt_ffi_load32(iter_base + 8)) + 1 => @types.SchemaTypeBody::BoolType + 2 => { + let lifted555 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted550 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted549 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted549) + } + _ => panic() + } + + let lifted552 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted551 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted551) + } + _ => panic() + } + + let lifted554 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result553 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result553) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted550, + max: lifted552, + unit: lifted554, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::S8Type(lifted555) + } + 3 => { + let lifted562 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted557 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted556 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted556) + } + _ => panic() + } + + let lifted559 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted558 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted558) + } + _ => panic() + } + + let lifted561 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result560 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result560) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted557, + max: lifted559, + unit: lifted561, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::S16Type(lifted562) + } + 4 => { + let lifted569 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted564 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted563 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted563) + } + _ => panic() + } + + let lifted566 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted565 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted565) + } + _ => panic() + } + + let lifted568 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result567 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result567) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted564, + max: lifted566, + unit: lifted568, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::S32Type(lifted569) + } + 5 => { + let lifted576 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted571 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted570 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted570) + } + _ => panic() + } + + let lifted573 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted572 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted572) + } + _ => panic() + } + + let lifted575 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result574 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result574) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted571, + max: lifted573, + unit: lifted575, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::S64Type(lifted576) + } + 6 => { + let lifted583 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted578 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted577 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted577) + } + _ => panic() + } + + let lifted580 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted579 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted579) + } + _ => panic() + } + + let lifted582 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result581 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result581) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted578, + max: lifted580, + unit: lifted582, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::U8Type(lifted583) + } + 7 => { + let lifted590 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted585 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted584 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted584) + } + _ => panic() + } + + let lifted587 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted586 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted586) + } + _ => panic() + } + + let lifted589 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result588 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result588) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted585, + max: lifted587, + unit: lifted589, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::U16Type(lifted590) + } + 8 => { + let lifted597 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted592 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted591 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted591) + } + _ => panic() + } + + let lifted594 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted593 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted593) + } + _ => panic() + } + + let lifted596 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result595 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result595) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted592, + max: lifted594, + unit: lifted596, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::U32Type(lifted597) + } + 9 => { + let lifted604 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted599 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted598 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted598) + } + _ => panic() + } + + let lifted601 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted600 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted600) + } + _ => panic() + } + + let lifted603 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result602 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result602) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted599, + max: lifted601, + unit: lifted603, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::U64Type(lifted604) + } + 10 => { + let lifted611 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted606 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted605 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted605) + } + _ => panic() + } + + let lifted608 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted607 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted607) + } + _ => panic() + } + + let lifted610 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result609 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result609) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted606, + max: lifted608, + unit: lifted610, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::F32Type(lifted611) + } + 11 => { + let lifted618 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted613 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted612 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted612) + } + _ => panic() + } + + let lifted615 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted614 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted614) + } + _ => panic() + } + + let lifted617 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result616 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result616) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted613, + max: lifted615, + unit: lifted617, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::F64Type(lifted618) + } + 12 => @types.SchemaTypeBody::CharType + 13 => @types.SchemaTypeBody::StringType + 14 => { + let array633 : Array[@types.NamedFieldType] = [] + for index634 = 0 + index634 < mbt_ffi_load32(iter_base + 12) + index634 = index634 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index634 * 68 + + let result619 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted621 : String? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => { + let result620 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + Option::Some(result620) + } + _ => panic() + } + + let array623 : Array[String] = [] + for index624 = 0 + index624 < mbt_ffi_load32(iter_base + 28) + index624 = index624 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index624 * 8 + + let result622 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array623.push(result622) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + let array626 : Array[String] = [] + for index627 = 0 + index627 < mbt_ffi_load32(iter_base + 36) + index627 = index627 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index627 * 8 + + let result625 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array626.push(result625) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + let lifted629 : String? = match mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let result628 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 44), + mbt_ffi_load32(iter_base + 48), + ) + + Option::Some(result628) + } + _ => panic() + } + + let lifted632 : @types.Role? = match mbt_ffi_load8_u(iter_base + 52) { + 0 => Option::None + 1 => { + let lifted631 = match mbt_ffi_load8_u(iter_base + 56) { + 0 => @types.Role::Multimodal + 1 => @types.Role::UnstructuredText + 2 => @types.Role::UnstructuredBinary + 3 => { + let result630 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 60), + mbt_ffi_load32(iter_base + 64), + ) + + @types.Role::Other(result630) + } + _ => panic() + } + + Option::Some(lifted631) + } + _ => panic() + } + + array633.push(@types.NamedFieldType::{ + name: result619, + body: mbt_ffi_load32(iter_base + 8), + metadata: @types.MetadataEnvelope::{ + doc: lifted621, + aliases: array623, + examples: array626, + deprecated: lifted629, + role: lifted632, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::RecordType(array633) + } + 15 => { + let array650 : Array[@types.VariantCaseType] = [] + for index651 = 0 + index651 < mbt_ffi_load32(iter_base + 12) + index651 = index651 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index651 * 72 + + let result635 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted636 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + let lifted638 : String? = match mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result637 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result637) + } + _ => panic() + } + + let array640 : Array[String] = [] + for index641 = 0 + index641 < mbt_ffi_load32(iter_base + 32) + index641 = index641 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index641 * 8 + + let result639 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array640.push(result639) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + let array643 : Array[String] = [] + for index644 = 0 + index644 < mbt_ffi_load32(iter_base + 40) + index644 = index644 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + index644 * 8 + + let result642 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array643.push(result642) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + let lifted646 : String? = match mbt_ffi_load8_u(iter_base + 44) { + 0 => Option::None + 1 => { + let result645 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 48), + mbt_ffi_load32(iter_base + 52), + ) + + Option::Some(result645) + } + _ => panic() + } + + let lifted649 : @types.Role? = match mbt_ffi_load8_u(iter_base + 56) { + 0 => Option::None + 1 => { + let lifted648 = match mbt_ffi_load8_u(iter_base + 60) { + 0 => @types.Role::Multimodal + 1 => @types.Role::UnstructuredText + 2 => @types.Role::UnstructuredBinary + 3 => { + let result647 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 64), + mbt_ffi_load32(iter_base + 68), + ) + + @types.Role::Other(result647) + } + _ => panic() + } + + Option::Some(lifted648) + } + _ => panic() + } + + array650.push(@types.VariantCaseType::{ + name: result635, + payload: lifted636, + metadata: @types.MetadataEnvelope::{ + doc: lifted638, + aliases: array640, + examples: array643, + deprecated: lifted646, + role: lifted649, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::VariantType(array650) + } + 16 => { + let array653 : Array[String] = [] + for index654 = 0 + index654 < mbt_ffi_load32(iter_base + 12) + index654 = index654 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index654 * 8 + + let result652 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array653.push(result652) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::EnumType(array653) + } + 17 => { + let array656 : Array[String] = [] + for index657 = 0 + index657 < mbt_ffi_load32(iter_base + 12) + index657 = index657 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index657 * 8 + + let result655 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array656.push(result655) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::FlagsType(array656) + } + 18 => { + let array658 : Array[Int] = [] + for index659 = 0 + index659 < mbt_ffi_load32(iter_base + 12) + index659 = index659 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index659 * 4 + + array658.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::TupleType(array658) + } + 19 => @types.SchemaTypeBody::ListType(mbt_ffi_load32(iter_base + 8)) + 20 => + @types.SchemaTypeBody::FixedListType(@types.FixedListSpec::{ + element: mbt_ffi_load32(iter_base + 8), + length: mbt_ffi_load32(iter_base + 12).reinterpret_as_uint(), + }) + 21 => + @types.SchemaTypeBody::MapType(@types.MapSpec::{ + key: mbt_ffi_load32(iter_base + 8), + value: mbt_ffi_load32(iter_base + 12), + }) + 22 => @types.SchemaTypeBody::OptionType(mbt_ffi_load32(iter_base + 8)) + 23 => { + let lifted660 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + let lifted661 : Int? = match mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + @types.SchemaTypeBody::ResultType(@types.ResultSpec::{ + ok: lifted660, + err: lifted661, + }) + } + 24 => { + let lifted665 : Array[String]? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let array663 : Array[String] = [] + for index664 = 0 + index664 < mbt_ffi_load32(iter_base + 16) + index664 = index664 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index664 * 8 + + let result662 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array663.push(result662) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + Option::Some(array663) + } + _ => panic() + } + + let lifted666 : UInt? = match mbt_ffi_load8_u(iter_base + 20) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 24).reinterpret_as_uint()) + _ => panic() + } + + let lifted667 : UInt? = match mbt_ffi_load8_u(iter_base + 28) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 32).reinterpret_as_uint()) + _ => panic() + } + + let lifted669 : String? = match mbt_ffi_load8_u(iter_base + 36) { + 0 => Option::None + 1 => { + let result668 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 40), + mbt_ffi_load32(iter_base + 44), + ) + + Option::Some(result668) + } + _ => panic() + } + + @types.SchemaTypeBody::TextType(@types.TextRestrictions::{ + languages: lifted665, + min_length: lifted666, + max_length: lifted667, + regex: lifted669, + }) + } + 25 => { + let lifted673 : Array[String]? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let array671 : Array[String] = [] + for index672 = 0 + index672 < mbt_ffi_load32(iter_base + 16) + index672 = index672 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index672 * 8 + + let result670 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array671.push(result670) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + Option::Some(array671) + } + _ => panic() + } + + let lifted674 : UInt? = match mbt_ffi_load8_u(iter_base + 20) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 24).reinterpret_as_uint()) + _ => panic() + } + + let lifted675 : UInt? = match mbt_ffi_load8_u(iter_base + 28) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 32).reinterpret_as_uint()) + _ => panic() + } + + @types.SchemaTypeBody::BinaryType(@types.BinaryRestrictions::{ + mime_types: lifted673, + min_bytes: lifted674, + max_bytes: lifted675, + }) + } + 26 => { + let lifted679 : Array[String]? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => { + let array677 : Array[String] = [] + for index678 = 0 + index678 < mbt_ffi_load32(iter_base + 20) + index678 = index678 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index678 * 8 + + let result676 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array677.push(result676) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + Option::Some(array677) + } + _ => panic() + } + + let lifted683 : Array[String]? = match mbt_ffi_load8_u(iter_base + 24) { + 0 => Option::None + 1 => { + let array681 : Array[String] = [] + for index682 = 0 + index682 < mbt_ffi_load32(iter_base + 32) + index682 = index682 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index682 * 8 + + let result680 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array681.push(result680) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + Option::Some(array681) + } + _ => panic() + } + + @types.SchemaTypeBody::PathType(@types.PathSpec::{ + direction: @types.PathDirection::from(mbt_ffi_load8_u(iter_base + 8)), + kind: @types.PathKind::from(mbt_ffi_load8_u(iter_base + 9)), + allowed_mime_types: lifted679, + allowed_extensions: lifted683, + }) + } + 27 => { + let lifted687 : Array[String]? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let array685 : Array[String] = [] + for index686 = 0 + index686 < mbt_ffi_load32(iter_base + 16) + index686 = index686 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index686 * 8 + + let result684 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array685.push(result684) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + Option::Some(array685) + } + _ => panic() + } + + let lifted691 : Array[String]? = match mbt_ffi_load8_u(iter_base + 20) { + 0 => Option::None + 1 => { + let array689 : Array[String] = [] + for index690 = 0 + index690 < mbt_ffi_load32(iter_base + 28) + index690 = index690 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index690 * 8 + + let result688 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array689.push(result688) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + Option::Some(array689) + } + _ => panic() + } + + @types.SchemaTypeBody::UrlType(@types.UrlRestrictions::{ + allowed_schemes: lifted687, + allowed_hosts: lifted691, + }) + } + 28 => @types.SchemaTypeBody::DatetimeType + 29 => @types.SchemaTypeBody::DurationType + 30 => { + let result692 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let array694 : Array[String] = [] + for index695 = 0 + index695 < mbt_ffi_load32(iter_base + 20) + index695 = index695 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index695 * 8 + + let result693 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array694.push(result693) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + let lifted697 : @types.QuantityValue? = match + mbt_ffi_load8_u(iter_base + 24) { + 0 => Option::None + 1 => { + let result696 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 44), + mbt_ffi_load32(iter_base + 48), + ) + + Option::Some(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 32), + scale: mbt_ffi_load32(iter_base + 40), + unit: result696, + }) + } + _ => panic() + } + + let lifted699 : @types.QuantityValue? = match + mbt_ffi_load8_u(iter_base + 56) { + 0 => Option::None + 1 => { + let result698 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 76), + mbt_ffi_load32(iter_base + 80), + ) + + Option::Some(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 64), + scale: mbt_ffi_load32(iter_base + 72), + unit: result698, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::QuantityType(@types.QuantitySpec::{ + base_unit: result692, + allowed_suffixes: array694, + min: lifted697, + max: lifted699, + }) + } + 31 => { + let array723 : Array[@types.UnionBranch] = [] + for index724 = 0 + index724 < mbt_ffi_load32(iter_base + 12) + index724 = index724 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index724 * 92 + + let result700 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted709 = match mbt_ffi_load8_u(iter_base + 12) { + 0 => { + let result701 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::Prefix(result701) + } + 1 => { + let result702 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::Suffix(result702) + } + 2 => { + let result703 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::Contains(result703) + } + 3 => { + let result704 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::Regex(result704) + } + 4 => { + let result705 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + let lifted707 : String? = match mbt_ffi_load8_u(iter_base + 24) { + 0 => Option::None + 1 => { + let result706 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 28), + mbt_ffi_load32(iter_base + 32), + ) + + Option::Some(result706) + } + _ => panic() + } + + @types.DiscriminatorRule::FieldEquals(@types.FieldDiscriminator::{ + field_name: result705, + literal: lifted707, + }) + } + 5 => { + let result708 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::FieldAbsent(result708) + } + _ => panic() + } + + let lifted711 : String? = match mbt_ffi_load8_u(iter_base + 36) { + 0 => Option::None + 1 => { + let result710 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 40), + mbt_ffi_load32(iter_base + 44), + ) + + Option::Some(result710) + } + _ => panic() + } + + let array713 : Array[String] = [] + for index714 = 0 + index714 < mbt_ffi_load32(iter_base + 52) + index714 = index714 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + index714 * 8 + + let result712 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array713.push(result712) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + let array716 : Array[String] = [] + for index717 = 0 + index717 < mbt_ffi_load32(iter_base + 60) + index717 = index717 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + index717 * 8 + + let result715 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array716.push(result715) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + let lifted719 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result718 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result718) + } + _ => panic() + } + + let lifted722 : @types.Role? = match mbt_ffi_load8_u(iter_base + 76) { + 0 => Option::None + 1 => { + let lifted721 = match mbt_ffi_load8_u(iter_base + 80) { + 0 => @types.Role::Multimodal + 1 => @types.Role::UnstructuredText + 2 => @types.Role::UnstructuredBinary + 3 => { + let result720 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 84), + mbt_ffi_load32(iter_base + 88), + ) + + @types.Role::Other(result720) + } + _ => panic() + } + + Option::Some(lifted721) + } + _ => panic() + } + + array723.push(@types.UnionBranch::{ + tag: result700, + body: mbt_ffi_load32(iter_base + 8), + discriminator: lifted709, + metadata: @types.MetadataEnvelope::{ + doc: lifted711, + aliases: array713, + examples: array716, + deprecated: lifted719, + role: lifted722, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::UnionType(@types.UnionSpec::{ + branches: array723, + }) + } + 32 => { + let lifted726 : String? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => { + let result725 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + Option::Some(result725) + } + _ => panic() + } + + @types.SchemaTypeBody::SecretType(@types.SecretSpec::{ + inner: mbt_ffi_load32(iter_base + 8), + category: lifted726, + }) + } + 33 => { + let lifted728 : String? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let result727 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 12), + mbt_ffi_load32(iter_base + 16), + ) + + Option::Some(result727) + } + _ => panic() + } + + @types.SchemaTypeBody::QuotaTokenType(@types.QuotaTokenSpec::{ + resource_name: lifted728, + }) + } + 34 => + @types.SchemaTypeBody::PermissionCardType(@types.PermissionCardSpec::{ + polymorphic: mbt_ffi_load8_u(iter_base + 8) != 0, + }) + 35 => { + let lifted729 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaTypeBody::FutureType(lifted729) + } + 36 => { + let lifted730 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaTypeBody::StreamType(lifted730) + } + _ => panic() + } + + let lifted733 : String? = match mbt_ffi_load8_u(iter_base + 88) { + 0 => Option::None + 1 => { + let result732 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 92), + mbt_ffi_load32(iter_base + 96), + ) + + Option::Some(result732) + } + _ => panic() + } + + let array735 : Array[String] = [] + for index736 = 0 + index736 < mbt_ffi_load32(iter_base + 104) + index736 = index736 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index736 * 8 + + let result734 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array735.push(result734) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + let array738 : Array[String] = [] + for index739 = 0 + index739 < mbt_ffi_load32(iter_base + 112) + index739 = index739 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index739 * 8 + + let result737 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array738.push(result737) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + let lifted741 : String? = match mbt_ffi_load8_u(iter_base + 116) { + 0 => Option::None + 1 => { + let result740 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 120), + mbt_ffi_load32(iter_base + 124), + ) + + Option::Some(result740) + } + _ => panic() + } + + let lifted744 : @types.Role? = match mbt_ffi_load8_u(iter_base + 128) { + 0 => Option::None + 1 => { + let lifted743 = match mbt_ffi_load8_u(iter_base + 132) { + 0 => @types.Role::Multimodal + 1 => @types.Role::UnstructuredText + 2 => @types.Role::UnstructuredBinary + 3 => { + let result742 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 136), + mbt_ffi_load32(iter_base + 140), + ) + + @types.Role::Other(result742) + } + _ => panic() + } + + Option::Some(lifted743) + } + _ => panic() + } + + array745.push(@types.SchemaTypeNode::{ + body: lifted731, + metadata: @types.MetadataEnvelope::{ + doc: lifted733, + aliases: array735, + examples: array738, + deprecated: lifted741, + role: lifted744, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 32)) + + let array750 : Array[@types.SchemaTypeDef] = [] + for index751 = 0; index751 < mbt_ffi_load32(p0 + 44); index751 = index751 + 1 { + let iter_base = mbt_ffi_load32(p0 + 40) + index751 * 24 + + let result747 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted749 : String? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let result748 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 12), + mbt_ffi_load32(iter_base + 16), + ) + + Option::Some(result748) + } + _ => panic() + } + + array750.push(@types.SchemaTypeDef::{ + id: result747, + name: lifted749, + body: mbt_ffi_load32(iter_base + 20), + }) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 40)) + @types.SchemaGraph::{ + type_nodes: array745, + defs: array750, + root: mbt_ffi_load32(p0 + 48), + } +} + +///| +fn __wit_bindgen_lift_invoke_command_path(p0 : Int) -> Array[String] { + let array753 : Array[String] = [] + for index754 = 0; index754 < mbt_ffi_load32(p0 + 56); index754 = index754 + 1 { + let iter_base = mbt_ffi_load32(p0 + 52) + index754 * 8 + + let result752 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array753.push(result752) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 52)) + array753 +} + +///| +fn __wit_bindgen_lift_invoke_input_graph(p0 : Int) -> @types.SchemaGraph { + let array951 : Array[@types.SchemaTypeNode] = [] + for index952 = 0; index952 < mbt_ffi_load32(p0 + 64); index952 = index952 + 1 { + let iter_base = mbt_ffi_load32(p0 + 60) + index952 * 144 + + let lifted937 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => @types.SchemaTypeBody::RefType(mbt_ffi_load32(iter_base + 8)) + 1 => @types.SchemaTypeBody::BoolType + 2 => { + let lifted761 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted756 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted755 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted755) + } + _ => panic() + } + + let lifted758 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted757 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted757) + } + _ => panic() + } + + let lifted760 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result759 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result759) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted756, + max: lifted758, + unit: lifted760, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::S8Type(lifted761) + } + 3 => { + let lifted768 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted763 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted762 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted762) + } + _ => panic() + } + + let lifted765 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted764 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted764) + } + _ => panic() + } + + let lifted767 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result766 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result766) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted763, + max: lifted765, + unit: lifted767, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::S16Type(lifted768) + } + 4 => { + let lifted775 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted770 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted769 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted769) + } + _ => panic() + } + + let lifted772 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted771 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted771) + } + _ => panic() + } + + let lifted774 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result773 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result773) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted770, + max: lifted772, + unit: lifted774, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::S32Type(lifted775) + } + 5 => { + let lifted782 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted777 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted776 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted776) + } + _ => panic() + } + + let lifted779 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted778 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted778) + } + _ => panic() + } + + let lifted781 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result780 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result780) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted777, + max: lifted779, + unit: lifted781, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::S64Type(lifted782) + } + 6 => { + let lifted789 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted784 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted783 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted783) + } + _ => panic() + } + + let lifted786 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted785 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted785) + } + _ => panic() + } + + let lifted788 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result787 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result787) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted784, + max: lifted786, + unit: lifted788, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::U8Type(lifted789) + } + 7 => { + let lifted796 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted791 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted790 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted790) + } + _ => panic() + } + + let lifted793 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted792 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted792) + } + _ => panic() + } + + let lifted795 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result794 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result794) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted791, + max: lifted793, + unit: lifted795, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::U16Type(lifted796) + } + 8 => { + let lifted803 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted798 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted797 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted797) + } + _ => panic() + } + + let lifted800 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted799 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted799) + } + _ => panic() + } + + let lifted802 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result801 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result801) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted798, + max: lifted800, + unit: lifted802, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::U32Type(lifted803) + } + 9 => { + let lifted810 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted805 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted804 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted804) + } + _ => panic() + } + + let lifted807 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted806 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted806) + } + _ => panic() + } + + let lifted809 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result808 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result808) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted805, + max: lifted807, + unit: lifted809, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::U64Type(lifted810) + } + 10 => { + let lifted817 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted812 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted811 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted811) + } + _ => panic() + } + + let lifted814 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted813 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted813) + } + _ => panic() + } + + let lifted816 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result815 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result815) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted812, + max: lifted814, + unit: lifted816, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::F32Type(lifted817) + } + 11 => { + let lifted824 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted819 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted818 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 32)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted818) + } + _ => panic() + } + + let lifted821 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted820 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed(mbt_ffi_load64(iter_base + 56)) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted820) + } + _ => panic() + } + + let lifted823 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result822 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result822) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted819, + max: lifted821, + unit: lifted823, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::F64Type(lifted824) + } + 12 => @types.SchemaTypeBody::CharType + 13 => @types.SchemaTypeBody::StringType + 14 => { + let array839 : Array[@types.NamedFieldType] = [] + for index840 = 0 + index840 < mbt_ffi_load32(iter_base + 12) + index840 = index840 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index840 * 68 + + let result825 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted827 : String? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => { + let result826 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + Option::Some(result826) + } + _ => panic() + } + + let array829 : Array[String] = [] + for index830 = 0 + index830 < mbt_ffi_load32(iter_base + 28) + index830 = index830 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index830 * 8 + + let result828 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array829.push(result828) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + let array832 : Array[String] = [] + for index833 = 0 + index833 < mbt_ffi_load32(iter_base + 36) + index833 = index833 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index833 * 8 + + let result831 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array832.push(result831) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + let lifted835 : String? = match mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let result834 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 44), + mbt_ffi_load32(iter_base + 48), + ) + + Option::Some(result834) + } + _ => panic() + } + + let lifted838 : @types.Role? = match mbt_ffi_load8_u(iter_base + 52) { + 0 => Option::None + 1 => { + let lifted837 = match mbt_ffi_load8_u(iter_base + 56) { + 0 => @types.Role::Multimodal + 1 => @types.Role::UnstructuredText + 2 => @types.Role::UnstructuredBinary + 3 => { + let result836 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 60), + mbt_ffi_load32(iter_base + 64), + ) + + @types.Role::Other(result836) + } + _ => panic() + } + + Option::Some(lifted837) + } + _ => panic() + } + + array839.push(@types.NamedFieldType::{ + name: result825, + body: mbt_ffi_load32(iter_base + 8), + metadata: @types.MetadataEnvelope::{ + doc: lifted827, + aliases: array829, + examples: array832, + deprecated: lifted835, + role: lifted838, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::RecordType(array839) + } + 15 => { + let array856 : Array[@types.VariantCaseType] = [] + for index857 = 0 + index857 < mbt_ffi_load32(iter_base + 12) + index857 = index857 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index857 * 72 + + let result841 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted842 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + let lifted844 : String? = match mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result843 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result843) + } + _ => panic() + } + + let array846 : Array[String] = [] + for index847 = 0 + index847 < mbt_ffi_load32(iter_base + 32) + index847 = index847 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index847 * 8 + + let result845 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array846.push(result845) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + let array849 : Array[String] = [] + for index850 = 0 + index850 < mbt_ffi_load32(iter_base + 40) + index850 = index850 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + index850 * 8 + + let result848 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array849.push(result848) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + let lifted852 : String? = match mbt_ffi_load8_u(iter_base + 44) { + 0 => Option::None + 1 => { + let result851 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 48), + mbt_ffi_load32(iter_base + 52), + ) + + Option::Some(result851) + } + _ => panic() + } + + let lifted855 : @types.Role? = match mbt_ffi_load8_u(iter_base + 56) { + 0 => Option::None + 1 => { + let lifted854 = match mbt_ffi_load8_u(iter_base + 60) { + 0 => @types.Role::Multimodal + 1 => @types.Role::UnstructuredText + 2 => @types.Role::UnstructuredBinary + 3 => { + let result853 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 64), + mbt_ffi_load32(iter_base + 68), + ) + + @types.Role::Other(result853) + } + _ => panic() + } + + Option::Some(lifted854) + } + _ => panic() + } + + array856.push(@types.VariantCaseType::{ + name: result841, + payload: lifted842, + metadata: @types.MetadataEnvelope::{ + doc: lifted844, + aliases: array846, + examples: array849, + deprecated: lifted852, + role: lifted855, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::VariantType(array856) + } + 16 => { + let array859 : Array[String] = [] + for index860 = 0 + index860 < mbt_ffi_load32(iter_base + 12) + index860 = index860 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index860 * 8 + + let result858 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array859.push(result858) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::EnumType(array859) + } + 17 => { + let array862 : Array[String] = [] + for index863 = 0 + index863 < mbt_ffi_load32(iter_base + 12) + index863 = index863 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index863 * 8 + + let result861 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array862.push(result861) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::FlagsType(array862) + } + 18 => { + let array864 : Array[Int] = [] + for index865 = 0 + index865 < mbt_ffi_load32(iter_base + 12) + index865 = index865 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index865 * 4 + + array864.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::TupleType(array864) + } + 19 => @types.SchemaTypeBody::ListType(mbt_ffi_load32(iter_base + 8)) + 20 => + @types.SchemaTypeBody::FixedListType(@types.FixedListSpec::{ + element: mbt_ffi_load32(iter_base + 8), + length: mbt_ffi_load32(iter_base + 12).reinterpret_as_uint(), + }) + 21 => + @types.SchemaTypeBody::MapType(@types.MapSpec::{ + key: mbt_ffi_load32(iter_base + 8), + value: mbt_ffi_load32(iter_base + 12), + }) + 22 => @types.SchemaTypeBody::OptionType(mbt_ffi_load32(iter_base + 8)) + 23 => { + let lifted866 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + let lifted867 : Int? = match mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + @types.SchemaTypeBody::ResultType(@types.ResultSpec::{ + ok: lifted866, + err: lifted867, + }) + } + 24 => { + let lifted871 : Array[String]? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let array869 : Array[String] = [] + for index870 = 0 + index870 < mbt_ffi_load32(iter_base + 16) + index870 = index870 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index870 * 8 + + let result868 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array869.push(result868) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + Option::Some(array869) + } + _ => panic() + } + + let lifted872 : UInt? = match mbt_ffi_load8_u(iter_base + 20) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 24).reinterpret_as_uint()) + _ => panic() + } + + let lifted873 : UInt? = match mbt_ffi_load8_u(iter_base + 28) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 32).reinterpret_as_uint()) + _ => panic() + } + + let lifted875 : String? = match mbt_ffi_load8_u(iter_base + 36) { + 0 => Option::None + 1 => { + let result874 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 40), + mbt_ffi_load32(iter_base + 44), + ) + + Option::Some(result874) + } + _ => panic() + } + + @types.SchemaTypeBody::TextType(@types.TextRestrictions::{ + languages: lifted871, + min_length: lifted872, + max_length: lifted873, + regex: lifted875, + }) + } + 25 => { + let lifted879 : Array[String]? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let array877 : Array[String] = [] + for index878 = 0 + index878 < mbt_ffi_load32(iter_base + 16) + index878 = index878 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index878 * 8 + + let result876 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array877.push(result876) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + Option::Some(array877) + } + _ => panic() + } + + let lifted880 : UInt? = match mbt_ffi_load8_u(iter_base + 20) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 24).reinterpret_as_uint()) + _ => panic() + } + + let lifted881 : UInt? = match mbt_ffi_load8_u(iter_base + 28) { + 0 => Option::None + 1 => + Option::Some(mbt_ffi_load32(iter_base + 32).reinterpret_as_uint()) + _ => panic() + } + + @types.SchemaTypeBody::BinaryType(@types.BinaryRestrictions::{ + mime_types: lifted879, + min_bytes: lifted880, + max_bytes: lifted881, + }) + } + 26 => { + let lifted885 : Array[String]? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => { + let array883 : Array[String] = [] + for index884 = 0 + index884 < mbt_ffi_load32(iter_base + 20) + index884 = index884 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index884 * 8 + + let result882 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array883.push(result882) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + Option::Some(array883) + } + _ => panic() + } + + let lifted889 : Array[String]? = match mbt_ffi_load8_u(iter_base + 24) { + 0 => Option::None + 1 => { + let array887 : Array[String] = [] + for index888 = 0 + index888 < mbt_ffi_load32(iter_base + 32) + index888 = index888 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index888 * 8 + + let result886 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array887.push(result886) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + Option::Some(array887) + } + _ => panic() + } + + @types.SchemaTypeBody::PathType(@types.PathSpec::{ + direction: @types.PathDirection::from(mbt_ffi_load8_u(iter_base + 8)), + kind: @types.PathKind::from(mbt_ffi_load8_u(iter_base + 9)), + allowed_mime_types: lifted885, + allowed_extensions: lifted889, + }) + } + 27 => { + let lifted893 : Array[String]? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let array891 : Array[String] = [] + for index892 = 0 + index892 < mbt_ffi_load32(iter_base + 16) + index892 = index892 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index892 * 8 + + let result890 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array891.push(result890) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + Option::Some(array891) + } + _ => panic() + } + + let lifted897 : Array[String]? = match mbt_ffi_load8_u(iter_base + 20) { + 0 => Option::None + 1 => { + let array895 : Array[String] = [] + for index896 = 0 + index896 < mbt_ffi_load32(iter_base + 28) + index896 = index896 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index896 * 8 + + let result894 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array895.push(result894) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + Option::Some(array895) + } + _ => panic() + } + + @types.SchemaTypeBody::UrlType(@types.UrlRestrictions::{ + allowed_schemes: lifted893, + allowed_hosts: lifted897, + }) + } + 28 => @types.SchemaTypeBody::DatetimeType + 29 => @types.SchemaTypeBody::DurationType + 30 => { + let result898 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let array900 : Array[String] = [] + for index901 = 0 + index901 < mbt_ffi_load32(iter_base + 20) + index901 = index901 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index901 * 8 + + let result899 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array900.push(result899) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + let lifted903 : @types.QuantityValue? = match + mbt_ffi_load8_u(iter_base + 24) { + 0 => Option::None + 1 => { + let result902 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 44), + mbt_ffi_load32(iter_base + 48), + ) + + Option::Some(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 32), + scale: mbt_ffi_load32(iter_base + 40), + unit: result902, + }) + } + _ => panic() + } + + let lifted905 : @types.QuantityValue? = match + mbt_ffi_load8_u(iter_base + 56) { + 0 => Option::None + 1 => { + let result904 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 76), + mbt_ffi_load32(iter_base + 80), + ) + + Option::Some(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 64), + scale: mbt_ffi_load32(iter_base + 72), + unit: result904, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::QuantityType(@types.QuantitySpec::{ + base_unit: result898, + allowed_suffixes: array900, + min: lifted903, + max: lifted905, + }) + } + 31 => { + let array929 : Array[@types.UnionBranch] = [] + for index930 = 0 + index930 < mbt_ffi_load32(iter_base + 12) + index930 = index930 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index930 * 92 + + let result906 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted915 = match mbt_ffi_load8_u(iter_base + 12) { + 0 => { + let result907 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::Prefix(result907) + } + 1 => { + let result908 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::Suffix(result908) + } + 2 => { + let result909 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::Contains(result909) + } + 3 => { + let result910 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::Regex(result910) + } + 4 => { + let result911 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + let lifted913 : String? = match mbt_ffi_load8_u(iter_base + 24) { + 0 => Option::None + 1 => { + let result912 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 28), + mbt_ffi_load32(iter_base + 32), + ) + + Option::Some(result912) + } + _ => panic() + } + + @types.DiscriminatorRule::FieldEquals(@types.FieldDiscriminator::{ + field_name: result911, + literal: lifted913, + }) + } + 5 => { + let result914 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::FieldAbsent(result914) + } + _ => panic() + } + + let lifted917 : String? = match mbt_ffi_load8_u(iter_base + 36) { + 0 => Option::None + 1 => { + let result916 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 40), + mbt_ffi_load32(iter_base + 44), + ) + + Option::Some(result916) + } + _ => panic() + } + + let array919 : Array[String] = [] + for index920 = 0 + index920 < mbt_ffi_load32(iter_base + 52) + index920 = index920 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + index920 * 8 + + let result918 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array919.push(result918) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + let array922 : Array[String] = [] + for index923 = 0 + index923 < mbt_ffi_load32(iter_base + 60) + index923 = index923 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + index923 * 8 + + let result921 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array922.push(result921) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + let lifted925 : String? = match mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result924 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result924) + } + _ => panic() + } + + let lifted928 : @types.Role? = match mbt_ffi_load8_u(iter_base + 76) { + 0 => Option::None + 1 => { + let lifted927 = match mbt_ffi_load8_u(iter_base + 80) { + 0 => @types.Role::Multimodal + 1 => @types.Role::UnstructuredText + 2 => @types.Role::UnstructuredBinary + 3 => { + let result926 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 84), + mbt_ffi_load32(iter_base + 88), + ) + + @types.Role::Other(result926) + } + _ => panic() + } + + Option::Some(lifted927) + } + _ => panic() + } + + array929.push(@types.UnionBranch::{ + tag: result906, + body: mbt_ffi_load32(iter_base + 8), + discriminator: lifted915, + metadata: @types.MetadataEnvelope::{ + doc: lifted917, + aliases: array919, + examples: array922, + deprecated: lifted925, + role: lifted928, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::UnionType(@types.UnionSpec::{ + branches: array929, + }) + } + 32 => { + let lifted932 : String? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => { + let result931 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + Option::Some(result931) + } + _ => panic() + } + + @types.SchemaTypeBody::SecretType(@types.SecretSpec::{ + inner: mbt_ffi_load32(iter_base + 8), + category: lifted932, + }) + } + 33 => { + let lifted934 : String? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let result933 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 12), + mbt_ffi_load32(iter_base + 16), + ) + + Option::Some(result933) + } + _ => panic() + } + + @types.SchemaTypeBody::QuotaTokenType(@types.QuotaTokenSpec::{ + resource_name: lifted934, + }) + } + 34 => + @types.SchemaTypeBody::PermissionCardType(@types.PermissionCardSpec::{ + polymorphic: mbt_ffi_load8_u(iter_base + 8) != 0, + }) + 35 => { + let lifted935 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaTypeBody::FutureType(lifted935) + } + 36 => { + let lifted936 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaTypeBody::StreamType(lifted936) + } + _ => panic() + } + + let lifted939 : String? = match mbt_ffi_load8_u(iter_base + 88) { + 0 => Option::None + 1 => { + let result938 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 92), + mbt_ffi_load32(iter_base + 96), + ) + + Option::Some(result938) + } + _ => panic() + } + + let array941 : Array[String] = [] + for index942 = 0 + index942 < mbt_ffi_load32(iter_base + 104) + index942 = index942 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index942 * 8 + + let result940 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array941.push(result940) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + let array944 : Array[String] = [] + for index945 = 0 + index945 < mbt_ffi_load32(iter_base + 112) + index945 = index945 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index945 * 8 + + let result943 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array944.push(result943) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + let lifted947 : String? = match mbt_ffi_load8_u(iter_base + 116) { + 0 => Option::None + 1 => { + let result946 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 120), + mbt_ffi_load32(iter_base + 124), + ) + + Option::Some(result946) + } + _ => panic() + } + + let lifted950 : @types.Role? = match mbt_ffi_load8_u(iter_base + 128) { + 0 => Option::None + 1 => { + let lifted949 = match mbt_ffi_load8_u(iter_base + 132) { + 0 => @types.Role::Multimodal + 1 => @types.Role::UnstructuredText + 2 => @types.Role::UnstructuredBinary + 3 => { + let result948 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 136), + mbt_ffi_load32(iter_base + 140), + ) + + @types.Role::Other(result948) + } + _ => panic() + } + + Option::Some(lifted949) + } + _ => panic() + } + + array951.push(@types.SchemaTypeNode::{ + body: lifted937, + metadata: @types.MetadataEnvelope::{ + doc: lifted939, + aliases: array941, + examples: array944, + deprecated: lifted947, + role: lifted950, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 60)) + + let array956 : Array[@types.SchemaTypeDef] = [] + for index957 = 0; index957 < mbt_ffi_load32(p0 + 72); index957 = index957 + 1 { + let iter_base = mbt_ffi_load32(p0 + 68) + index957 * 24 + + let result953 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted955 : String? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let result954 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 12), + mbt_ffi_load32(iter_base + 16), + ) + + Option::Some(result954) + } + _ => panic() + } + + array956.push(@types.SchemaTypeDef::{ + id: result953, + name: lifted955, + body: mbt_ffi_load32(iter_base + 20), + }) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 68)) + @types.SchemaGraph::{ + type_nodes: array951, + defs: array956, + root: mbt_ffi_load32(p0 + 76), + } +} + +///| +fn __wit_bindgen_lift_invoke_input_value(p0 : Int) -> @types.SchemaValueTree { + let array987 : Array[@types.SchemaValueNode] = [] + for index988 = 0; index988 < mbt_ffi_load32(p0 + 84); index988 = index988 + 1 { + let iter_base = mbt_ffi_load32(p0 + 80) + index988 * 32 + + let lifted986 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue(mbt_ffi_load8_u(iter_base + 8) != 0) + 1 => @types.SchemaValueNode::S8Value(mbt_ffi_load8(iter_base + 8)) + 2 => @types.SchemaValueNode::S16Value(mbt_ffi_load16(iter_base + 8)) + 3 => @types.SchemaValueNode::S32Value(mbt_ffi_load32(iter_base + 8)) + 4 => @types.SchemaValueNode::S64Value(mbt_ffi_load64(iter_base + 8)) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8).land(0xFFFF).reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => @types.SchemaValueNode::F32Value(mbt_ffi_loadf32(iter_base + 8)) + 10 => @types.SchemaValueNode::F64Value(mbt_ffi_loadf64(iter_base + 8)) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result958 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result958) + } + 13 => { + let array959 : Array[Int] = [] + for index960 = 0 + index960 < mbt_ffi_load32(iter_base + 12) + index960 = index960 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index960 * 4 + + array959.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array959) + } + 14 => { + let lifted961 : Int? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted961, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array962 : Array[Bool] = [] + for index963 = 0 + index963 < mbt_ffi_load32(iter_base + 12) + index963 = index963 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index963 * 1 + + array962.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array962) + } + 17 => { + let array964 : Array[Int] = [] + for index965 = 0 + index965 < mbt_ffi_load32(iter_base + 12) + index965 = index965 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index965 * 4 + + array964.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array964) + } + 18 => { + let array966 : Array[Int] = [] + for index967 = 0 + index967 < mbt_ffi_load32(iter_base + 12) + index967 = index967 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index967 * 4 + + array966.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array966) + } + 19 => { + let array968 : Array[Int] = [] + for index969 = 0 + index969 < mbt_ffi_load32(iter_base + 12) + index969 = index969 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index969 * 4 + + array968.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array968) + } + 20 => { + let array970 : Array[@types.MapEntry] = [] + for index971 = 0 + index971 < mbt_ffi_load32(iter_base + 12) + index971 = index971 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index971 * 8 + + array970.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array970) + } + 21 => { + let lifted972 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted972) + } + 22 => { + let lifted975 = match mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted973 : Int? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted973) + } + 1 => { + let lifted974 : Int? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted974) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted975) + } + 23 => { + let result976 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted978 : String? = match mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result977 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result977) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result976, + language: lifted978, + }) + } + 24 => { + let result979 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted981 : String? = match mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result980 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result980) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result979, + mime_type: lifted981, + }) + } + 25 => { + let result982 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result982) + } + 26 => { + let result983 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result983) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result984 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result984, + }) + } + 30 => { + let result985 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result985, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken(mbt_ffi_load32(iter_base + 8)), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard(mbt_ffi_load32(iter_base + 8)), + ) + _ => panic() + } + + array987.push(lifted986) + } + mbt_ffi_free(mbt_ffi_load32(p0 + 80)) + @types.SchemaValueTree::{ + value_nodes: array987, + root: mbt_ffi_load32(p0 + 88), + } +} + +///| +fn __wit_bindgen_lift_invoke_stdin(p0 : Int) -> @async-core.Stream[Byte]? { + let lifted990 : @async-core.Stream[Byte]? = match mbt_ffi_load8_u(p0 + 92) { + 0 => Option::None + 1 => { + let result989 = wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream0StreamLift( + mbt_ffi_load32(p0 + 96), + ) + + Option::Some(result989) + } + _ => panic() + } + lifted990 +} + +///| +fn __wit_bindgen_lift_invoke_principal(p0 : Int) -> @common0.Principal { + let lifted1008 = match mbt_ffi_load8_u(p0 + 104) { + 0 => { + let result991 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 112), + mbt_ffi_load32(p0 + 116), + ) + + let result992 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 120), + mbt_ffi_load32(p0 + 124), + ) + + let lifted994 : String? = match mbt_ffi_load8_u(p0 + 128) { + 0 => Option::None + 1 => { + let result993 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 132), + mbt_ffi_load32(p0 + 136), + ) + + Option::Some(result993) + } + _ => panic() + } + + let lifted996 : String? = match mbt_ffi_load8_u(p0 + 140) { + 0 => Option::None + 1 => { + let result995 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 144), + mbt_ffi_load32(p0 + 148), + ) + + Option::Some(result995) + } + _ => panic() + } + + let lifted997 : Bool? = match mbt_ffi_load8_u(p0 + 152) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load8_u(p0 + 153) != 0) + _ => panic() + } + + let lifted999 : String? = match mbt_ffi_load8_u(p0 + 156) { + 0 => Option::None + 1 => { + let result998 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 160), + mbt_ffi_load32(p0 + 164), + ) + + Option::Some(result998) + } + _ => panic() + } + + let lifted1001 : String? = match mbt_ffi_load8_u(p0 + 168) { + 0 => Option::None + 1 => { + let result1000 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 172), + mbt_ffi_load32(p0 + 176), + ) + + Option::Some(result1000) + } + _ => panic() + } + + let lifted1003 : String? = match mbt_ffi_load8_u(p0 + 180) { + 0 => Option::None + 1 => { + let result1002 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 184), + mbt_ffi_load32(p0 + 188), + ) + + Option::Some(result1002) + } + _ => panic() + } + + let lifted1005 : String? = match mbt_ffi_load8_u(p0 + 192) { + 0 => Option::None + 1 => { + let result1004 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 196), + mbt_ffi_load32(p0 + 200), + ) + + Option::Some(result1004) + } + _ => panic() + } + + let result1006 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 204), + mbt_ffi_load32(p0 + 208), + ) + + @common0.Principal::Oidc(@common0.OidcPrincipal::{ + sub: result991, + issuer: result992, + email: lifted994, + name: lifted996, + email_verified: lifted997, + given_name: lifted999, + family_name: lifted1001, + picture: lifted1003, + preferred_username: lifted1005, + claims: result1006, + }) + } + 1 => { + let result1007 = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 128), + mbt_ffi_load32(p0 + 132), + ) + + @common0.Principal::Agent(@common0.AgentPrincipal::{ + agent_id: @types.AgentId::{ + component_id: @types.ComponentId::{ + uuid: @types.Uuid::{ + high_bits: mbt_ffi_load64(p0 + 112).reinterpret_as_uint64(), + low_bits: mbt_ffi_load64(p0 + 120).reinterpret_as_uint64(), + }, + }, + agent_id: result1007, + }, + }) + } + 2 => + @common0.Principal::GolemUser(@common0.GolemUserPrincipal::{ + account_id: @types.AccountId::{ + uuid: @types.Uuid::{ + high_bits: mbt_ffi_load64(p0 + 112).reinterpret_as_uint64(), + low_bits: mbt_ffi_load64(p0 + 120).reinterpret_as_uint64(), + }, + }, + }) + 3 => @common0.Principal::Anonymous + _ => panic() + } + lifted1008 +} + +///| +#doc(hidden) +pub fn wasmExportInvokeToolMiddleware(p0 : Int) -> Int { + @async-core.with_waitableset(async fn() { + @async-core.with_task_group(async fn(background_group) { + let middleware_name = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 0), + mbt_ffi_load32(p0 + 4), + ) + let tool_name = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 8), + mbt_ffi_load32(p0 + 12), + ) + let version = mbt_ffi_ptr2str( + mbt_ffi_load32(p0 + 16), + mbt_ffi_load32(p0 + 20), + ) + let tool_metadata = @common.Tool::{ + version, + commands: __wit_bindgen_lift_invoke_tool_commands(p0), + schema: __wit_bindgen_lift_invoke_tool_schema(p0), + } + let input = @types.TypedSchemaValue::{ + graph: __wit_bindgen_lift_invoke_input_graph(p0), + value: __wit_bindgen_lift_invoke_input_value(p0), + } + let return_result : Ref[ + Result[@common.InvocationResult, @common.ToolError]?, + ] = Ref(None) + return_result.val = Some( + invoke_tool_middleware( + middleware_name, + tool_name, + tool_metadata, + __wit_bindgen_lift_invoke_command_path(p0), + input, + __wit_bindgen_lift_invoke_stdin(p0), + __wit_bindgen_lift_invoke_principal(p0), + @common.UnderlyingTool::UnderlyingTool(mbt_ffi_load32(p0 + 216)), + background_group, + ), + ) + invoke_tool_middleware_task_return(return_result) + }) + }) +} + +///| +fn wasmExportAsyncInvokeToolMiddlewareTaskReturn( + p0 : Int, + p1 : Int, + p2 : Int, + p3 : Int, + p4 : Int, + p5 : Int, + p6 : Int, + p7 : Int, + p8 : Int, + p9 : Int, + p10 : Int, + p11 : Int, +) = "[export]golem:tool/tool-middleware-guest@0.1.0" "[task-return]invoke-tool-middleware" + +///| +fn invoke_tool_middleware_task_return( + return_result : Ref[Result[@common.InvocationResult, @common.ToolError]?], +) -> Unit { + match return_result.val { + Some(return_value) => { + let cleanup_list : Array[Int] = [] + + let ( + lowered1056, + lowered1057, + lowered1058, + lowered1059, + lowered1060, + lowered1061, + lowered1062, + lowered1063, + lowered1064, + lowered1065, + lowered1066, + lowered1067, + ) = match return_value { + Ok(payload) => { + let ( + lowered, + lowered1016, + lowered1017, + lowered1018, + lowered1019, + lowered1020, + lowered1021, + lowered1022, + lowered1023, + ) = match payload.result { + None => (0, 0, 0, 0, 0, 0, 0, 0, 0) + Some(payload1010) => { + let address = mbt_ffi_malloc( + payload1010.graph.type_nodes.length() * 144, + ) + for index1011 = 0 + index1011 < payload1010.graph.type_nodes.length() + index1011 = index1011 + 1 { + let iter_elem : @types.SchemaTypeNode = payload1010.graph.type_nodes[index1011] + let iter_base = address + index1011 * 144 + __wit_bindgen_lower_t55(iter_base + 0, iter_elem) + } + + let address1012 = mbt_ffi_malloc( + payload1010.graph.defs.length() * 24, + ) + for index1013 = 0 + index1013 < payload1010.graph.defs.length() + index1013 = index1013 + 1 { + let iter_elem : @types.SchemaTypeDef = payload1010.graph.defs[index1013] + let iter_base = address1012 + index1013 * 24 + __wit_bindgen_lower_t17(iter_base + 0, iter_elem) + } + + let address1014 = mbt_ffi_malloc( + payload1010.value.value_nodes.length() * 32, + ) + for index1015 = 0 + index1015 < payload1010.value.value_nodes.length() + index1015 = index1015 + 1 { + let iter_elem : @types.SchemaValueNode = payload1010.value.value_nodes[index1015] + let iter_base = address1014 + index1015 * 32 + __wit_bindgen_lower_t74(iter_base + 0, iter_elem) + } + cleanup_list.push(address) + cleanup_list.push(address1012) + cleanup_list.push(address1014) + + ( + 1, + address, + payload1010.graph.type_nodes.length(), + address1012, + payload1010.graph.defs.length(), + payload1010.graph.root, + address1014, + payload1010.value.value_nodes.length(), + payload1010.value.root, + ) + } + } + + let (lowered1026, lowered1027) = match payload.stdout { + None => (0, 0) + Some(payload1025) => + ( + 1, + wasmExportGolemToolToolMiddlewareGuest010InvokeToolMiddlewareStream1StreamLowerCommitted( + payload1025, + ), + ) + } + + ( + 0, lowered, lowered1016, lowered1017, lowered1018, lowered1019, lowered1020, + lowered1021, lowered1022, lowered1023, lowered1026, lowered1027, + ) + } + Err(payload1028) => { + let ( + lowered1047, + lowered1048, + lowered1049, + lowered1050, + lowered1051, + lowered1052, + lowered1053, + lowered1054, + lowered1055, + ) = match payload1028 { + InvalidToolName(payload1029) => { + let ptr = mbt_ffi_str2ptr(payload1029) + cleanup_list.push(ptr) + + (0, ptr, payload1029.length(), 0, 0, 0, 0, 0, 0) + } + InvalidCommandPath(payload1030) => { + let address1032 = mbt_ffi_malloc(payload1030.length() * 8) + for index1033 = 0 + index1033 < payload1030.length() + index1033 = index1033 + 1 { + let iter_elem : String = payload1030[index1033] + let iter_base = address1032 + index1033 * 8 + + let ptr1031 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr1031) + cleanup_list.push(ptr1031) + } + cleanup_list.push(address1032) + + (1, address1032, payload1030.length(), 0, 0, 0, 0, 0, 0) + } + InvalidInput(payload1034) => { + let ptr1035 = mbt_ffi_str2ptr(payload1034) + cleanup_list.push(ptr1035) + + (2, ptr1035, payload1034.length(), 0, 0, 0, 0, 0, 0) + } + ConstraintViolation(payload1036) => { + let ptr1037 = mbt_ffi_str2ptr(payload1036) + cleanup_list.push(ptr1037) + + (3, ptr1037, payload1036.length(), 0, 0, 0, 0, 0, 0) + } + InvalidResult(payload1038) => { + let ptr1039 = mbt_ffi_str2ptr(payload1038) + cleanup_list.push(ptr1039) + + (4, ptr1039, payload1038.length(), 0, 0, 0, 0, 0, 0) + } + CustomError(payload1040) => { + let address1041 = mbt_ffi_malloc( + payload1040.graph.type_nodes.length() * 144, + ) + for index1042 = 0 + index1042 < payload1040.graph.type_nodes.length() + index1042 = index1042 + 1 { + let iter_elem : @types.SchemaTypeNode = payload1040.graph.type_nodes[index1042] + let iter_base = address1041 + index1042 * 144 + __wit_bindgen_lower_t55(iter_base + 0, iter_elem) + } + + let address1043 = mbt_ffi_malloc( + payload1040.graph.defs.length() * 24, + ) + for index1044 = 0 + index1044 < payload1040.graph.defs.length() + index1044 = index1044 + 1 { + let iter_elem : @types.SchemaTypeDef = payload1040.graph.defs[index1044] + let iter_base = address1043 + index1044 * 24 + __wit_bindgen_lower_t17(iter_base + 0, iter_elem) + } + + let address1045 = mbt_ffi_malloc( + payload1040.value.value_nodes.length() * 32, + ) + for index1046 = 0 + index1046 < payload1040.value.value_nodes.length() + index1046 = index1046 + 1 { + let iter_elem : @types.SchemaValueNode = payload1040.value.value_nodes[index1046] + let iter_base = address1045 + index1046 * 32 + __wit_bindgen_lower_t74(iter_base + 0, iter_elem) + } + cleanup_list.push(address1041) + cleanup_list.push(address1043) + cleanup_list.push(address1045) + + ( + 5, + address1041, + payload1040.graph.type_nodes.length(), + address1043, + payload1040.graph.defs.length(), + payload1040.graph.root, + address1045, + payload1040.value.value_nodes.length(), + payload1040.value.root, + ) + } + } + + ( + 1, lowered1047, lowered1048, lowered1049, lowered1050, lowered1051, lowered1052, + lowered1053, lowered1054, lowered1055, 0, 0, + ) + } + } + + wasmExportAsyncInvokeToolMiddlewareTaskReturn( + lowered1056, lowered1057, lowered1058, lowered1059, lowered1060, lowered1061, + lowered1062, lowered1063, lowered1064, lowered1065, lowered1066, lowered1067, + ) + + cleanup_list.each(mbt_ffi_free) + + @async-core.task_returned() + } + None => () + } +} + +///| +#doc(hidden) +pub fn wasmExportAsyncInvokeToolMiddleware( + event_raw : Int, + waitable : Int, + code : Int, +) -> Int { + @async-core.cb(event_raw, waitable, code) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t5(ptr : Int, value : @types.Datetime) -> Unit { + mbt_ffi_store64(ptr + 0, value.seconds) + mbt_ffi_store32(ptr + 8, value.nanoseconds.reinterpret_as_int()) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t17(ptr : Int, value : @types.SchemaTypeDef) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.id) + mbt_ffi_store32(ptr + 4, value.id.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + match value.name { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 8, 1) + + let ptr2 = mbt_ffi_str2ptr(payload1) + mbt_ffi_store32(ptr + 16, payload1.length()) + mbt_ffi_store32(ptr + 12, ptr2) + + () + } + } + mbt_ffi_store32(ptr + 20, value.body) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t18(ptr : Int, value : @types.Role) -> Unit { + match value { + Multimodal => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + UnstructuredText => { + mbt_ffi_store8(ptr + 0, 1) + + () + } + UnstructuredBinary => { + mbt_ffi_store8(ptr + 0, 2) + + () + } + Other(payload2) => { + mbt_ffi_store8(ptr + 0, 3) + + let ptr3 = mbt_ffi_str2ptr(payload2) + mbt_ffi_store32(ptr + 8, payload2.length()) + mbt_ffi_store32(ptr + 4, ptr3) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t21(ptr : Int, value : @types.MetadataEnvelope) -> Unit { + match value.doc { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + + let ptr1 = mbt_ffi_str2ptr(payload0) + mbt_ffi_store32(ptr + 8, payload0.length()) + mbt_ffi_store32(ptr + 4, ptr1) + + () + } + } + + let address = mbt_ffi_malloc(value.aliases.length() * 8) + for index = 0; index < value.aliases.length(); index = index + 1 { + let iter_elem : String = value.aliases[index] + let iter_base = address + index * 8 + + let ptr2 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr2) + } + mbt_ffi_store32(ptr + 16, value.aliases.length()) + mbt_ffi_store32(ptr + 12, address) + + let address4 = mbt_ffi_malloc(value.examples.length() * 8) + for index5 = 0; index5 < value.examples.length(); index5 = index5 + 1 { + let iter_elem : String = value.examples[index5] + let iter_base = address4 + index5 * 8 + + let ptr3 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr3) + } + mbt_ffi_store32(ptr + 24, value.examples.length()) + mbt_ffi_store32(ptr + 20, address4) + + match value.deprecated { + None => { + mbt_ffi_store8(ptr + 28, 0) + + () + } + Some(payload7) => { + mbt_ffi_store8(ptr + 28, 1) + + let ptr8 = mbt_ffi_str2ptr(payload7) + mbt_ffi_store32(ptr + 36, payload7.length()) + mbt_ffi_store32(ptr + 32, ptr8) + + () + } + } + + match value.role { + None => { + mbt_ffi_store8(ptr + 40, 0) + + () + } + Some(payload10) => { + mbt_ffi_store8(ptr + 40, 1) + __wit_bindgen_lower_t18(ptr + 44, payload10) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t22(ptr : Int, value : @types.NamedFieldType) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + mbt_ffi_store32(ptr + 8, value.body) + __wit_bindgen_lower_t21(ptr + 12, value.metadata) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t24(ptr : Int, value : @types.VariantCaseType) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + match value.payload { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 8, 1) + mbt_ffi_store32(ptr + 12, payload1) + + () + } + } + __wit_bindgen_lower_t21(ptr + 16, value.metadata) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t25(ptr : Int, value : @types.FixedListSpec) -> Unit { + mbt_ffi_store32(ptr + 0, value.element) + mbt_ffi_store32(ptr + 4, value.length.reinterpret_as_int()) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t26(ptr : Int, value : @types.MapSpec) -> Unit { + mbt_ffi_store32(ptr + 0, value.key) + mbt_ffi_store32(ptr + 4, value.value) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t27(ptr : Int, value : @types.ResultSpec) -> Unit { + match value.ok { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + mbt_ffi_store32(ptr + 4, payload0) + + () + } + } + + match value.err { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload2) => { + mbt_ffi_store8(ptr + 8, 1) + mbt_ffi_store32(ptr + 12, payload2) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t28(ptr : Int, value : @types.NumericBound) -> Unit { + match value { + Signed(payload) => { + mbt_ffi_store8(ptr + 0, 0) + mbt_ffi_store64(ptr + 8, payload) + + () + } + Unsigned(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + mbt_ffi_store64(ptr + 8, payload0.reinterpret_as_int64()) + + () + } + FloatBits(payload1) => { + mbt_ffi_store8(ptr + 0, 2) + mbt_ffi_store64(ptr + 8, payload1.reinterpret_as_int64()) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t30( + ptr : Int, + value : @types.NumericRestrictions, +) -> Unit { + match value.min { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + __wit_bindgen_lower_t28(ptr + 8, payload0) + + () + } + } + + match value.max { + None => { + mbt_ffi_store8(ptr + 24, 0) + + () + } + Some(payload2) => { + mbt_ffi_store8(ptr + 24, 1) + __wit_bindgen_lower_t28(ptr + 32, payload2) + + () + } + } + + match value.unit { + None => { + mbt_ffi_store8(ptr + 48, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 48, 1) + + let ptr5 = mbt_ffi_str2ptr(payload4) + mbt_ffi_store32(ptr + 56, payload4.length()) + mbt_ffi_store32(ptr + 52, ptr5) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t33(ptr : Int, value : @types.TextRestrictions) -> Unit { + match value.languages { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + + let address = mbt_ffi_malloc(payload0.length() * 8) + for index = 0; index < payload0.length(); index = index + 1 { + let iter_elem : String = payload0[index] + let iter_base = address + index * 8 + + let ptr1 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr1) + } + mbt_ffi_store32(ptr + 8, payload0.length()) + mbt_ffi_store32(ptr + 4, address) + + () + } + } + + match value.min_length { + None => { + mbt_ffi_store8(ptr + 12, 0) + + () + } + Some(payload3) => { + mbt_ffi_store8(ptr + 12, 1) + mbt_ffi_store32(ptr + 16, payload3.reinterpret_as_int()) + + () + } + } + + match value.max_length { + None => { + mbt_ffi_store8(ptr + 20, 0) + + () + } + Some(payload5) => { + mbt_ffi_store8(ptr + 20, 1) + mbt_ffi_store32(ptr + 24, payload5.reinterpret_as_int()) + + () + } + } + + match value.regex { + None => { + mbt_ffi_store8(ptr + 28, 0) + + () + } + Some(payload7) => { + mbt_ffi_store8(ptr + 28, 1) + + let ptr8 = mbt_ffi_str2ptr(payload7) + mbt_ffi_store32(ptr + 36, payload7.length()) + mbt_ffi_store32(ptr + 32, ptr8) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t34( + ptr : Int, + value : @types.BinaryRestrictions, +) -> Unit { + match value.mime_types { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + + let address = mbt_ffi_malloc(payload0.length() * 8) + for index = 0; index < payload0.length(); index = index + 1 { + let iter_elem : String = payload0[index] + let iter_base = address + index * 8 + + let ptr1 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr1) + } + mbt_ffi_store32(ptr + 8, payload0.length()) + mbt_ffi_store32(ptr + 4, address) + + () + } + } + + match value.min_bytes { + None => { + mbt_ffi_store8(ptr + 12, 0) + + () + } + Some(payload3) => { + mbt_ffi_store8(ptr + 12, 1) + mbt_ffi_store32(ptr + 16, payload3.reinterpret_as_int()) + + () + } + } + + match value.max_bytes { + None => { + mbt_ffi_store8(ptr + 20, 0) + + () + } + Some(payload5) => { + mbt_ffi_store8(ptr + 20, 1) + mbt_ffi_store32(ptr + 24, payload5.reinterpret_as_int()) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t37(ptr : Int, value : @types.PathSpec) -> Unit { + mbt_ffi_store8(ptr + 0, value.direction.ordinal()) + mbt_ffi_store8(ptr + 1, value.kind.ordinal()) + + match value.allowed_mime_types { + None => { + mbt_ffi_store8(ptr + 4, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 4, 1) + + let address = mbt_ffi_malloc(payload0.length() * 8) + for index = 0; index < payload0.length(); index = index + 1 { + let iter_elem : String = payload0[index] + let iter_base = address + index * 8 + + let ptr1 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr1) + } + mbt_ffi_store32(ptr + 12, payload0.length()) + mbt_ffi_store32(ptr + 8, address) + + () + } + } + + match value.allowed_extensions { + None => { + mbt_ffi_store8(ptr + 16, 0) + + () + } + Some(payload3) => { + mbt_ffi_store8(ptr + 16, 1) + + let address5 = mbt_ffi_malloc(payload3.length() * 8) + for index6 = 0; index6 < payload3.length(); index6 = index6 + 1 { + let iter_elem : String = payload3[index6] + let iter_base = address5 + index6 * 8 + + let ptr4 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr4) + } + mbt_ffi_store32(ptr + 24, payload3.length()) + mbt_ffi_store32(ptr + 20, address5) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t38(ptr : Int, value : @types.UrlRestrictions) -> Unit { + match value.allowed_schemes { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + + let address = mbt_ffi_malloc(payload0.length() * 8) + for index = 0; index < payload0.length(); index = index + 1 { + let iter_elem : String = payload0[index] + let iter_base = address + index * 8 + + let ptr1 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr1) + } + mbt_ffi_store32(ptr + 8, payload0.length()) + mbt_ffi_store32(ptr + 4, address) + + () + } + } + + match value.allowed_hosts { + None => { + mbt_ffi_store8(ptr + 12, 0) + + () + } + Some(payload3) => { + mbt_ffi_store8(ptr + 12, 1) + + let address5 = mbt_ffi_malloc(payload3.length() * 8) + for index6 = 0; index6 < payload3.length(); index6 = index6 + 1 { + let iter_elem : String = payload3[index6] + let iter_base = address5 + index6 * 8 + + let ptr4 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr4) + } + mbt_ffi_store32(ptr + 20, payload3.length()) + mbt_ffi_store32(ptr + 16, address5) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t39(ptr : Int, value : @types.QuantityValue) -> Unit { + mbt_ffi_store64(ptr + 0, value.mantissa) + mbt_ffi_store32(ptr + 8, value.scale) + + let ptr0 = mbt_ffi_str2ptr(value.unit) + mbt_ffi_store32(ptr + 16, value.unit.length()) + mbt_ffi_store32(ptr + 12, ptr0) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t41(ptr : Int, value : @types.QuantitySpec) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.base_unit) + mbt_ffi_store32(ptr + 4, value.base_unit.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + let address = mbt_ffi_malloc(value.allowed_suffixes.length() * 8) + for index = 0; index < value.allowed_suffixes.length(); index = index + 1 { + let iter_elem : String = value.allowed_suffixes[index] + let iter_base = address + index * 8 + + let ptr1 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr1) + } + mbt_ffi_store32(ptr + 12, value.allowed_suffixes.length()) + mbt_ffi_store32(ptr + 8, address) + + match value.min { + None => { + mbt_ffi_store8(ptr + 16, 0) + + () + } + Some(payload2) => { + mbt_ffi_store8(ptr + 16, 1) + __wit_bindgen_lower_t39(ptr + 24, payload2) + + () + } + } + + match value.max { + None => { + mbt_ffi_store8(ptr + 48, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 48, 1) + __wit_bindgen_lower_t39(ptr + 56, payload4) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t42( + ptr : Int, + value : @types.FieldDiscriminator, +) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.field_name) + mbt_ffi_store32(ptr + 4, value.field_name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + match value.literal { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 8, 1) + + let ptr2 = mbt_ffi_str2ptr(payload1) + mbt_ffi_store32(ptr + 16, payload1.length()) + mbt_ffi_store32(ptr + 12, ptr2) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t43(ptr : Int, value : @types.DiscriminatorRule) -> Unit { + match value { + Prefix(payload) => { + mbt_ffi_store8(ptr + 0, 0) + + let ptr0 = mbt_ffi_str2ptr(payload) + mbt_ffi_store32(ptr + 8, payload.length()) + mbt_ffi_store32(ptr + 4, ptr0) + + () + } + Suffix(payload1) => { + mbt_ffi_store8(ptr + 0, 1) + + let ptr2 = mbt_ffi_str2ptr(payload1) + mbt_ffi_store32(ptr + 8, payload1.length()) + mbt_ffi_store32(ptr + 4, ptr2) + + () + } + Contains(payload3) => { + mbt_ffi_store8(ptr + 0, 2) + + let ptr4 = mbt_ffi_str2ptr(payload3) + mbt_ffi_store32(ptr + 8, payload3.length()) + mbt_ffi_store32(ptr + 4, ptr4) + + () + } + Regex(payload5) => { + mbt_ffi_store8(ptr + 0, 3) + + let ptr6 = mbt_ffi_str2ptr(payload5) + mbt_ffi_store32(ptr + 8, payload5.length()) + mbt_ffi_store32(ptr + 4, ptr6) + + () + } + FieldEquals(payload7) => { + mbt_ffi_store8(ptr + 0, 4) + __wit_bindgen_lower_t42(ptr + 4, payload7) + + () + } + FieldAbsent(payload8) => { + mbt_ffi_store8(ptr + 0, 5) + + let ptr9 = mbt_ffi_str2ptr(payload8) + mbt_ffi_store32(ptr + 8, payload8.length()) + mbt_ffi_store32(ptr + 4, ptr9) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t44(ptr : Int, value : @types.UnionBranch) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.tag) + mbt_ffi_store32(ptr + 4, value.tag.length()) + mbt_ffi_store32(ptr + 0, ptr0) + mbt_ffi_store32(ptr + 8, value.body) + __wit_bindgen_lower_t43(ptr + 12, value.discriminator) + __wit_bindgen_lower_t21(ptr + 36, value.metadata) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t46(ptr : Int, value : @types.UnionSpec) -> Unit { + let address = mbt_ffi_malloc(value.branches.length() * 92) + for index = 0; index < value.branches.length(); index = index + 1 { + let iter_elem : @types.UnionBranch = value.branches[index] + let iter_base = address + index * 92 + __wit_bindgen_lower_t44(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 4, value.branches.length()) + mbt_ffi_store32(ptr + 0, address) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t47(ptr : Int, value : @types.SecretSpec) -> Unit { + mbt_ffi_store32(ptr + 0, value.inner) + + match value.category { + None => { + mbt_ffi_store8(ptr + 4, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 4, 1) + + let ptr1 = mbt_ffi_str2ptr(payload0) + mbt_ffi_store32(ptr + 12, payload0.length()) + mbt_ffi_store32(ptr + 8, ptr1) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t48(ptr : Int, value : @types.QuotaTokenSpec) -> Unit { + match value.resource_name { + None => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + + let ptr1 = mbt_ffi_str2ptr(payload0) + mbt_ffi_store32(ptr + 8, payload0.length()) + mbt_ffi_store32(ptr + 4, ptr1) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t49( + ptr : Int, + value : @types.PermissionCardSpec, +) -> Unit { + mbt_ffi_store8(ptr + 0, if value.polymorphic { 1 } else { 0 }) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t54(ptr : Int, value : @types.SchemaTypeBody) -> Unit { + match value { + RefType(payload) => { + mbt_ffi_store8(ptr + 0, 0) + mbt_ffi_store32(ptr + 8, payload) + + () + } + BoolType => { + mbt_ffi_store8(ptr + 0, 1) + + () + } + S8Type(payload1) => { + mbt_ffi_store8(ptr + 0, 2) + + match payload1 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload3) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload3) + + () + } + } + + () + } + S16Type(payload4) => { + mbt_ffi_store8(ptr + 0, 3) + + match payload4 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload6) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload6) + + () + } + } + + () + } + S32Type(payload7) => { + mbt_ffi_store8(ptr + 0, 4) + + match payload7 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload9) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload9) + + () + } + } + + () + } + S64Type(payload10) => { + mbt_ffi_store8(ptr + 0, 5) + + match payload10 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload12) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload12) + + () + } + } + + () + } + U8Type(payload13) => { + mbt_ffi_store8(ptr + 0, 6) + + match payload13 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload15) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload15) + + () + } + } + + () + } + U16Type(payload16) => { + mbt_ffi_store8(ptr + 0, 7) + + match payload16 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload18) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload18) + + () + } + } + + () + } + U32Type(payload19) => { + mbt_ffi_store8(ptr + 0, 8) + + match payload19 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload21) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload21) + + () + } + } + + () + } + U64Type(payload22) => { + mbt_ffi_store8(ptr + 0, 9) + + match payload22 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload24) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload24) + + () + } + } + + () + } + F32Type(payload25) => { + mbt_ffi_store8(ptr + 0, 10) + + match payload25 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload27) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload27) + + () + } + } + + () + } + F64Type(payload28) => { + mbt_ffi_store8(ptr + 0, 11) + + match payload28 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload30) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t30(ptr + 16, payload30) + + () + } + } + + () + } + CharType => { + mbt_ffi_store8(ptr + 0, 12) + + () + } + StringType => { + mbt_ffi_store8(ptr + 0, 13) + + () + } + RecordType(payload33) => { + mbt_ffi_store8(ptr + 0, 14) + + let address = mbt_ffi_malloc(payload33.length() * 68) + for index = 0; index < payload33.length(); index = index + 1 { + let iter_elem : @types.NamedFieldType = payload33[index] + let iter_base = address + index * 68 + __wit_bindgen_lower_t22(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload33.length()) + mbt_ffi_store32(ptr + 8, address) + + () + } + VariantType(payload34) => { + mbt_ffi_store8(ptr + 0, 15) + + let address35 = mbt_ffi_malloc(payload34.length() * 72) + for index36 = 0; index36 < payload34.length(); index36 = index36 + 1 { + let iter_elem : @types.VariantCaseType = payload34[index36] + let iter_base = address35 + index36 * 72 + __wit_bindgen_lower_t24(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload34.length()) + mbt_ffi_store32(ptr + 8, address35) + + () + } + EnumType(payload37) => { + mbt_ffi_store8(ptr + 0, 16) + + let address39 = mbt_ffi_malloc(payload37.length() * 8) + for index40 = 0; index40 < payload37.length(); index40 = index40 + 1 { + let iter_elem : String = payload37[index40] + let iter_base = address39 + index40 * 8 + + let ptr38 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr38) + } + mbt_ffi_store32(ptr + 12, payload37.length()) + mbt_ffi_store32(ptr + 8, address39) + + () + } + FlagsType(payload41) => { + mbt_ffi_store8(ptr + 0, 17) + + let address43 = mbt_ffi_malloc(payload41.length() * 8) + for index44 = 0; index44 < payload41.length(); index44 = index44 + 1 { + let iter_elem : String = payload41[index44] + let iter_base = address43 + index44 * 8 + + let ptr42 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr42) + } + mbt_ffi_store32(ptr + 12, payload41.length()) + mbt_ffi_store32(ptr + 8, address43) + + () + } + TupleType(payload45) => { + mbt_ffi_store8(ptr + 0, 18) + + let address46 = mbt_ffi_malloc(payload45.length() * 4) + for index47 = 0; index47 < payload45.length(); index47 = index47 + 1 { + let iter_elem : Int = payload45[index47] + let iter_base = address46 + index47 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload45.length()) + mbt_ffi_store32(ptr + 8, address46) + + () + } + ListType(payload48) => { + mbt_ffi_store8(ptr + 0, 19) + mbt_ffi_store32(ptr + 8, payload48) + + () + } + FixedListType(payload49) => { + mbt_ffi_store8(ptr + 0, 20) + __wit_bindgen_lower_t25(ptr + 8, payload49) + + () + } + MapType(payload50) => { + mbt_ffi_store8(ptr + 0, 21) + __wit_bindgen_lower_t26(ptr + 8, payload50) + + () + } + OptionType(payload51) => { + mbt_ffi_store8(ptr + 0, 22) + mbt_ffi_store32(ptr + 8, payload51) + + () + } + ResultType(payload52) => { + mbt_ffi_store8(ptr + 0, 23) + __wit_bindgen_lower_t27(ptr + 8, payload52) + + () + } + TextType(payload53) => { + mbt_ffi_store8(ptr + 0, 24) + __wit_bindgen_lower_t33(ptr + 8, payload53) + + () + } + BinaryType(payload54) => { + mbt_ffi_store8(ptr + 0, 25) + __wit_bindgen_lower_t34(ptr + 8, payload54) + + () + } + PathType(payload55) => { + mbt_ffi_store8(ptr + 0, 26) + __wit_bindgen_lower_t37(ptr + 8, payload55) + + () + } + UrlType(payload56) => { + mbt_ffi_store8(ptr + 0, 27) + __wit_bindgen_lower_t38(ptr + 8, payload56) + + () + } + DatetimeType => { + mbt_ffi_store8(ptr + 0, 28) + + () + } + DurationType => { + mbt_ffi_store8(ptr + 0, 29) + + () + } + QuantityType(payload59) => { + mbt_ffi_store8(ptr + 0, 30) + __wit_bindgen_lower_t41(ptr + 8, payload59) + + () + } + UnionType(payload60) => { + mbt_ffi_store8(ptr + 0, 31) + __wit_bindgen_lower_t46(ptr + 8, payload60) + + () + } + SecretType(payload61) => { + mbt_ffi_store8(ptr + 0, 32) + __wit_bindgen_lower_t47(ptr + 8, payload61) + + () + } + QuotaTokenType(payload62) => { + mbt_ffi_store8(ptr + 0, 33) + __wit_bindgen_lower_t48(ptr + 8, payload62) + + () + } + PermissionCardType(payload63) => { + mbt_ffi_store8(ptr + 0, 34) + __wit_bindgen_lower_t49(ptr + 8, payload63) + + () + } + FutureType(payload64) => { + mbt_ffi_store8(ptr + 0, 35) + + match payload64 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload66) => { + mbt_ffi_store8(ptr + 8, 1) + mbt_ffi_store32(ptr + 12, payload66) + + () + } + } + + () + } + StreamType(payload67) => { + mbt_ffi_store8(ptr + 0, 36) + + match payload67 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload69) => { + mbt_ffi_store8(ptr + 8, 1) + mbt_ffi_store32(ptr + 12, payload69) + + () + } + } + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t55(ptr : Int, value : @types.SchemaTypeNode) -> Unit { + __wit_bindgen_lower_t54(ptr + 0, value.body) + __wit_bindgen_lower_t21(ptr + 88, value.metadata) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t58(ptr : Int, value : @types.SchemaGraph) -> Unit { + let address = mbt_ffi_malloc(value.type_nodes.length() * 144) + for index = 0; index < value.type_nodes.length(); index = index + 1 { + let iter_elem : @types.SchemaTypeNode = value.type_nodes[index] + let iter_base = address + index * 144 + __wit_bindgen_lower_t55(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 4, value.type_nodes.length()) + mbt_ffi_store32(ptr + 0, address) + + let address0 = mbt_ffi_malloc(value.defs.length() * 24) + for index1 = 0; index1 < value.defs.length(); index1 = index1 + 1 { + let iter_elem : @types.SchemaTypeDef = value.defs[index1] + let iter_base = address0 + index1 * 24 + __wit_bindgen_lower_t17(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, value.defs.length()) + mbt_ffi_store32(ptr + 8, address0) + mbt_ffi_store32(ptr + 16, value.root) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t60( + ptr : Int, + value : @types.VariantValuePayload, +) -> Unit { + mbt_ffi_store32(ptr + 0, value.case.reinterpret_as_int()) + + match value.payload { + None => { + mbt_ffi_store8(ptr + 4, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 4, 1) + mbt_ffi_store32(ptr + 8, payload0) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t61(ptr : Int, value : @types.MapEntry) -> Unit { + mbt_ffi_store32(ptr + 0, value.key) + mbt_ffi_store32(ptr + 4, value.value) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t62( + ptr : Int, + value : @types.ResultValuePayload, +) -> Unit { + match value { + OkValue(payload) => { + mbt_ffi_store8(ptr + 0, 0) + + match payload { + None => { + mbt_ffi_store8(ptr + 4, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 4, 1) + mbt_ffi_store32(ptr + 8, payload1) + + () + } + } + + () + } + ErrValue(payload2) => { + mbt_ffi_store8(ptr + 0, 1) + + match payload2 { + None => { + mbt_ffi_store8(ptr + 4, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 4, 1) + mbt_ffi_store32(ptr + 8, payload4) + + () + } + } + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t63(ptr : Int, value : @types.TextValuePayload) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.text) + mbt_ffi_store32(ptr + 4, value.text.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + match value.language { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 8, 1) + + let ptr2 = mbt_ffi_str2ptr(payload1) + mbt_ffi_store32(ptr + 16, payload1.length()) + mbt_ffi_store32(ptr + 12, ptr2) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t65( + ptr : Int, + value : @types.BinaryValuePayload, +) -> Unit { + let ptr0 = mbt_ffi_bytes2ptr(value.bytes) + + mbt_ffi_store32(ptr + 4, value.bytes.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + match value.mime_type { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 8, 1) + + let ptr2 = mbt_ffi_str2ptr(payload1) + mbt_ffi_store32(ptr + 16, payload1.length()) + mbt_ffi_store32(ptr + 12, ptr2) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t66( + ptr : Int, + value : @types.DurationValuePayload, +) -> Unit { + mbt_ffi_store64(ptr + 0, value.nanoseconds) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t67(ptr : Int, value : @types.UnionValuePayload) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.tag) + mbt_ffi_store32(ptr + 4, value.tag.length()) + mbt_ffi_store32(ptr + 0, ptr0) + mbt_ffi_store32(ptr + 8, value.body) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t74(ptr : Int, value : @types.SchemaValueNode) -> Unit { + match value { + BoolValue(payload) => { + mbt_ffi_store8(ptr + 0, 0) + mbt_ffi_store8(ptr + 8, if payload { 1 } else { 0 }) + + () + } + S8Value(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + mbt_ffi_store8(ptr + 8, mbt_ffi_extend8(payload0)) + + () + } + S16Value(payload1) => { + mbt_ffi_store8(ptr + 0, 2) + mbt_ffi_store16(ptr + 8, mbt_ffi_extend16(payload1)) + + () + } + S32Value(payload2) => { + mbt_ffi_store8(ptr + 0, 3) + mbt_ffi_store32(ptr + 8, payload2) + + () + } + S64Value(payload3) => { + mbt_ffi_store8(ptr + 0, 4) + mbt_ffi_store64(ptr + 8, payload3) + + () + } + U8Value(payload4) => { + mbt_ffi_store8(ptr + 0, 5) + mbt_ffi_store8(ptr + 8, payload4.to_int()) + + () + } + U16Value(payload5) => { + mbt_ffi_store8(ptr + 0, 6) + mbt_ffi_store16(ptr + 8, payload5.reinterpret_as_int()) + + () + } + U32Value(payload6) => { + mbt_ffi_store8(ptr + 0, 7) + mbt_ffi_store32(ptr + 8, payload6.reinterpret_as_int()) + + () + } + U64Value(payload7) => { + mbt_ffi_store8(ptr + 0, 8) + mbt_ffi_store64(ptr + 8, payload7.reinterpret_as_int64()) + + () + } + F32Value(payload8) => { + mbt_ffi_store8(ptr + 0, 9) + mbt_ffi_storef32(ptr + 8, payload8) + + () + } + F64Value(payload9) => { + mbt_ffi_store8(ptr + 0, 10) + mbt_ffi_storef64(ptr + 8, payload9) + + () + } + CharValue(payload10) => { + mbt_ffi_store8(ptr + 0, 11) + mbt_ffi_store32(ptr + 8, payload10.to_int()) + + () + } + StringValue(payload11) => { + mbt_ffi_store8(ptr + 0, 12) + + let ptr12 = mbt_ffi_str2ptr(payload11) + mbt_ffi_store32(ptr + 12, payload11.length()) + mbt_ffi_store32(ptr + 8, ptr12) + + () + } + RecordValue(payload13) => { + mbt_ffi_store8(ptr + 0, 13) + + let address = mbt_ffi_malloc(payload13.length() * 4) + for index = 0; index < payload13.length(); index = index + 1 { + let iter_elem : Int = payload13[index] + let iter_base = address + index * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload13.length()) + mbt_ffi_store32(ptr + 8, address) + + () + } + VariantValue(payload14) => { + mbt_ffi_store8(ptr + 0, 14) + __wit_bindgen_lower_t60(ptr + 8, payload14) + + () + } + EnumValue(payload15) => { + mbt_ffi_store8(ptr + 0, 15) + mbt_ffi_store32(ptr + 8, payload15.reinterpret_as_int()) + + () + } + FlagsValue(payload16) => { + mbt_ffi_store8(ptr + 0, 16) + + let address17 = mbt_ffi_malloc(payload16.length() * 1) + for index18 = 0; index18 < payload16.length(); index18 = index18 + 1 { + let iter_elem : Bool = payload16[index18] + let iter_base = address17 + index18 * 1 + mbt_ffi_store8(iter_base + 0, if iter_elem { 1 } else { 0 }) + } + mbt_ffi_store32(ptr + 12, payload16.length()) + mbt_ffi_store32(ptr + 8, address17) + + () + } + TupleValue(payload19) => { + mbt_ffi_store8(ptr + 0, 17) + + let address20 = mbt_ffi_malloc(payload19.length() * 4) + for index21 = 0; index21 < payload19.length(); index21 = index21 + 1 { + let iter_elem : Int = payload19[index21] + let iter_base = address20 + index21 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload19.length()) + mbt_ffi_store32(ptr + 8, address20) + + () + } + ListValue(payload22) => { + mbt_ffi_store8(ptr + 0, 18) + + let address23 = mbt_ffi_malloc(payload22.length() * 4) + for index24 = 0; index24 < payload22.length(); index24 = index24 + 1 { + let iter_elem : Int = payload22[index24] + let iter_base = address23 + index24 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload22.length()) + mbt_ffi_store32(ptr + 8, address23) + + () + } + FixedListValue(payload25) => { + mbt_ffi_store8(ptr + 0, 19) + + let address26 = mbt_ffi_malloc(payload25.length() * 4) + for index27 = 0; index27 < payload25.length(); index27 = index27 + 1 { + let iter_elem : Int = payload25[index27] + let iter_base = address26 + index27 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload25.length()) + mbt_ffi_store32(ptr + 8, address26) + + () + } + MapValue(payload28) => { + mbt_ffi_store8(ptr + 0, 20) + + let address29 = mbt_ffi_malloc(payload28.length() * 8) + for index30 = 0; index30 < payload28.length(); index30 = index30 + 1 { + let iter_elem : @types.MapEntry = payload28[index30] + let iter_base = address29 + index30 * 8 + __wit_bindgen_lower_t61(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, payload28.length()) + mbt_ffi_store32(ptr + 8, address29) + + () + } + OptionValue(payload31) => { + mbt_ffi_store8(ptr + 0, 21) + + match payload31 { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload33) => { + mbt_ffi_store8(ptr + 8, 1) + mbt_ffi_store32(ptr + 12, payload33) + + () + } + } + + () + } + ResultValue(payload34) => { + mbt_ffi_store8(ptr + 0, 22) + __wit_bindgen_lower_t62(ptr + 8, payload34) + + () + } + TextValue(payload35) => { + mbt_ffi_store8(ptr + 0, 23) + __wit_bindgen_lower_t63(ptr + 8, payload35) + + () + } + BinaryValue(payload36) => { + mbt_ffi_store8(ptr + 0, 24) + __wit_bindgen_lower_t65(ptr + 8, payload36) + + () + } + PathValue(payload37) => { + mbt_ffi_store8(ptr + 0, 25) + + let ptr38 = mbt_ffi_str2ptr(payload37) + mbt_ffi_store32(ptr + 12, payload37.length()) + mbt_ffi_store32(ptr + 8, ptr38) + + () + } + UrlValue(payload39) => { + mbt_ffi_store8(ptr + 0, 26) + + let ptr40 = mbt_ffi_str2ptr(payload39) + mbt_ffi_store32(ptr + 12, payload39.length()) + mbt_ffi_store32(ptr + 8, ptr40) + + () + } + DatetimeValue(payload41) => { + mbt_ffi_store8(ptr + 0, 27) + __wit_bindgen_lower_t5(ptr + 8, payload41) + + () + } + DurationValue(payload42) => { + mbt_ffi_store8(ptr + 0, 28) + __wit_bindgen_lower_t66(ptr + 8, payload42) + + () + } + QuantityValueNode(payload43) => { + mbt_ffi_store8(ptr + 0, 29) + __wit_bindgen_lower_t39(ptr + 8, payload43) + + () + } + UnionValue(payload44) => { + mbt_ffi_store8(ptr + 0, 30) + __wit_bindgen_lower_t67(ptr + 8, payload44) + + () + } + SecretValue(payload45) => { + mbt_ffi_store8(ptr + 0, 31) + + let @types.Secret(handle) = payload45 + mbt_ffi_store32(ptr + 8, handle) + + () + } + QuotaTokenHandle(payload46) => { + mbt_ffi_store8(ptr + 0, 32) + + let @types.QuotaToken(handle47) = payload46 + mbt_ffi_store32(ptr + 8, handle47) + + () + } + PermissionCardHandle(payload48) => { + mbt_ffi_store8(ptr + 0, 33) + + let @types.PermissionCard(handle49) = payload48 + mbt_ffi_store32(ptr + 8, handle49) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t76(ptr : Int, value : @types.SchemaValueTree) -> Unit { + let address = mbt_ffi_malloc(value.value_nodes.length() * 32) + for index = 0; index < value.value_nodes.length(); index = index + 1 { + let iter_elem : @types.SchemaValueNode = value.value_nodes[index] + let iter_base = address + index * 32 + __wit_bindgen_lower_t74(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 4, value.value_nodes.length()) + mbt_ffi_store32(ptr + 0, address) + mbt_ffi_store32(ptr + 8, value.root) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t77(ptr : Int, value : @types.TypedSchemaValue) -> Unit { + __wit_bindgen_lower_t58(ptr + 0, value.graph) + __wit_bindgen_lower_t76(ptr + 20, value.value) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t470( + ptr : Int, + value : @common.CommandAnnotations, +) -> Unit { + mbt_ffi_store8(ptr + 0, if value.read_only { 1 } else { 0 }) + mbt_ffi_store8(ptr + 1, if value.destructive { 1 } else { 0 }) + mbt_ffi_store8(ptr + 2, if value.idempotent { 1 } else { 0 }) + mbt_ffi_store8(ptr + 3, if value.open_world { 1 } else { 0 }) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t472(ptr : Int, value : @common.Repetition) -> Unit { + match value { + Repeated => { + mbt_ffi_store8(ptr + 0, 0) + + () + } + Delimited(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + mbt_ffi_store32(ptr + 4, payload0.to_int()) + + () + } + Either(payload1) => { + mbt_ffi_store8(ptr + 0, 2) + mbt_ffi_store32(ptr + 4, payload1.to_int()) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t473( + ptr : Int, + value : @common.RepeatableListShape, +) -> Unit { + __wit_bindgen_lower_t472(ptr + 0, value.repetition) + mbt_ffi_store32(ptr + 8, value.item_type) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t474( + ptr : Int, + value : @common.RepeatableMapShape, +) -> Unit { + __wit_bindgen_lower_t472(ptr + 0, value.repetition) + mbt_ffi_store32(ptr + 8, value.map_type) + mbt_ffi_store8(ptr + 12, value.duplicate_key_policy.ordinal()) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t475(ptr : Int, value : @common.OptionShape) -> Unit { + match value { + Scalar(payload) => { + mbt_ffi_store8(ptr + 0, 0) + mbt_ffi_store32(ptr + 4, payload) + + () + } + OptionalScalar(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + mbt_ffi_store32(ptr + 4, payload0) + + () + } + RepeatableList(payload1) => { + mbt_ffi_store8(ptr + 0, 2) + __wit_bindgen_lower_t473(ptr + 4, payload1) + + () + } + RepeatableMap(payload2) => { + mbt_ffi_store8(ptr + 0, 3) + __wit_bindgen_lower_t474(ptr + 4, payload2) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t476(ptr : Int, value : @common.BoolFlagShape) -> Unit { + mbt_ffi_store8(ptr + 0, if value.default { 1 } else { 0 }) + mbt_ffi_store8(ptr + 1, if value.negatable { 1 } else { 0 }) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t478(ptr : Int, value : @common.FlagShape) -> Unit { + match value { + BoolFlag(payload) => { + mbt_ffi_store8(ptr + 0, 0) + __wit_bindgen_lower_t476(ptr + 4, payload) + + () + } + CountFlag(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + + match payload0 { + None => { + mbt_ffi_store8(ptr + 4, 0) + + () + } + Some(payload2) => { + mbt_ffi_store8(ptr + 4, 1) + mbt_ffi_store32(ptr + 8, payload2.reinterpret_as_int()) + + () + } + } + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t479(ptr : Int, value : @common.ValueIsRef) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + __wit_bindgen_lower_t76(ptr + 8, value.value) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t480(ptr : Int, value : @common.Ref) -> Unit { + match value { + Present(payload) => { + mbt_ffi_store8(ptr + 0, 0) + + let ptr0 = mbt_ffi_str2ptr(payload) + mbt_ffi_store32(ptr + 8, payload.length()) + mbt_ffi_store32(ptr + 4, ptr0) + + () + } + ValueIs(payload1) => { + mbt_ffi_store8(ptr + 0, 1) + __wit_bindgen_lower_t479(ptr + 4, payload1) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t482(ptr : Int, value : @common.RefGroup) -> Unit { + let address = mbt_ffi_malloc(value.refs.length() * 24) + for index = 0; index < value.refs.length(); index = index + 1 { + let iter_elem : @common.Ref = value.refs[index] + let iter_base = address + index * 24 + __wit_bindgen_lower_t480(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 4, value.refs.length()) + mbt_ffi_store32(ptr + 0, address) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t484(ptr : Int, value : @common.ImpliesC) -> Unit { + mbt_ffi_store8(ptr + 0, value.lhs_quant.ordinal()) + + let address = mbt_ffi_malloc(value.lhs.length() * 24) + for index = 0; index < value.lhs.length(); index = index + 1 { + let iter_elem : @common.Ref = value.lhs[index] + let iter_base = address + index * 24 + __wit_bindgen_lower_t480(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 8, value.lhs.length()) + mbt_ffi_store32(ptr + 4, address) + mbt_ffi_store8(ptr + 12, value.rhs_quant.ordinal()) + + let address0 = mbt_ffi_malloc(value.rhs.length() * 24) + for index1 = 0; index1 < value.rhs.length(); index1 = index1 + 1 { + let iter_elem : @common.Ref = value.rhs[index1] + let iter_base = address0 + index1 * 24 + __wit_bindgen_lower_t480(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 20, value.rhs.length()) + mbt_ffi_store32(ptr + 16, address0) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t485(ptr : Int, value : @common.ForbidsC) -> Unit { + mbt_ffi_store8(ptr + 0, value.lhs_quant.ordinal()) + + let address = mbt_ffi_malloc(value.lhs.length() * 24) + for index = 0; index < value.lhs.length(); index = index + 1 { + let iter_elem : @common.Ref = value.lhs[index] + let iter_base = address + index * 24 + __wit_bindgen_lower_t480(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 8, value.lhs.length()) + mbt_ffi_store32(ptr + 4, address) + + let address0 = mbt_ffi_malloc(value.rhs.length() * 24) + for index1 = 0; index1 < value.rhs.length(); index1 = index1 + 1 { + let iter_elem : @common.Ref = value.rhs[index1] + let iter_base = address0 + index1 * 24 + __wit_bindgen_lower_t480(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 16, value.rhs.length()) + mbt_ffi_store32(ptr + 12, address0) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t487(ptr : Int, value : @common.Constraint) -> Unit { + match value { + RequiresAll(payload) => { + mbt_ffi_store8(ptr + 0, 0) + + let address = mbt_ffi_malloc(payload.length() * 24) + for index = 0; index < payload.length(); index = index + 1 { + let iter_elem : @common.Ref = payload[index] + let iter_base = address + index * 24 + __wit_bindgen_lower_t480(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 8, payload.length()) + mbt_ffi_store32(ptr + 4, address) + + () + } + AllOrNone(payload0) => { + mbt_ffi_store8(ptr + 0, 1) + + let address1 = mbt_ffi_malloc(payload0.length() * 24) + for index2 = 0; index2 < payload0.length(); index2 = index2 + 1 { + let iter_elem : @common.Ref = payload0[index2] + let iter_base = address1 + index2 * 24 + __wit_bindgen_lower_t480(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 8, payload0.length()) + mbt_ffi_store32(ptr + 4, address1) + + () + } + RequiresAny(payload3) => { + mbt_ffi_store8(ptr + 0, 2) + + let address4 = mbt_ffi_malloc(payload3.length() * 24) + for index5 = 0; index5 < payload3.length(); index5 = index5 + 1 { + let iter_elem : @common.Ref = payload3[index5] + let iter_base = address4 + index5 * 24 + __wit_bindgen_lower_t480(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 8, payload3.length()) + mbt_ffi_store32(ptr + 4, address4) + + () + } + MutexGroups(payload6) => { + mbt_ffi_store8(ptr + 0, 3) + + let address7 = mbt_ffi_malloc(payload6.length() * 8) + for index8 = 0; index8 < payload6.length(); index8 = index8 + 1 { + let iter_elem : @common.RefGroup = payload6[index8] + let iter_base = address7 + index8 * 8 + __wit_bindgen_lower_t482(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 8, payload6.length()) + mbt_ffi_store32(ptr + 4, address7) + + () + } + Implies(payload9) => { + mbt_ffi_store8(ptr + 0, 4) + __wit_bindgen_lower_t484(ptr + 4, payload9) + + () + } + Forbids(payload10) => { + mbt_ffi_store8(ptr + 0, 5) + __wit_bindgen_lower_t485(ptr + 4, payload10) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t489(ptr : Int, value : @common.Example) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.title) + mbt_ffi_store32(ptr + 4, value.title.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + let ptr1 = mbt_ffi_str2ptr(value.body) + mbt_ffi_store32(ptr + 12, value.body.length()) + mbt_ffi_store32(ptr + 8, ptr1) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t491(ptr : Int, value : @common.Doc) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.summary) + mbt_ffi_store32(ptr + 4, value.summary.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + let ptr1 = mbt_ffi_str2ptr(value.description) + mbt_ffi_store32(ptr + 12, value.description.length()) + mbt_ffi_store32(ptr + 8, ptr1) + + let address = mbt_ffi_malloc(value.examples.length() * 16) + for index = 0; index < value.examples.length(); index = index + 1 { + let iter_elem : @common.Example = value.examples[index] + let iter_base = address + index * 16 + __wit_bindgen_lower_t489(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 20, value.examples.length()) + mbt_ffi_store32(ptr + 16, address) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t494(ptr : Int, value : @common.Positional) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + __wit_bindgen_lower_t491(ptr + 8, value.doc) + + match value.value_name { + None => { + mbt_ffi_store8(ptr + 32, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 32, 1) + + let ptr2 = mbt_ffi_str2ptr(payload1) + mbt_ffi_store32(ptr + 40, payload1.length()) + mbt_ffi_store32(ptr + 36, ptr2) + + () + } + } + mbt_ffi_store32(ptr + 44, value.type_) + + match value.default { + None => { + mbt_ffi_store8(ptr + 48, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 48, 1) + __wit_bindgen_lower_t76(ptr + 52, payload4) + + () + } + } + mbt_ffi_store8(ptr + 64, if value.required { 1 } else { 0 }) + mbt_ffi_store8(ptr + 65, if value.accepts_stdio { 1 } else { 0 }) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t495(ptr : Int, value : @common.TailPositional) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + __wit_bindgen_lower_t491(ptr + 8, value.doc) + + match value.value_name { + None => { + mbt_ffi_store8(ptr + 32, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 32, 1) + + let ptr2 = mbt_ffi_str2ptr(payload1) + mbt_ffi_store32(ptr + 40, payload1.length()) + mbt_ffi_store32(ptr + 36, ptr2) + + () + } + } + mbt_ffi_store32(ptr + 44, value.item_type) + mbt_ffi_store32(ptr + 48, value.min.reinterpret_as_int()) + + match value.max { + None => { + mbt_ffi_store8(ptr + 52, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 52, 1) + mbt_ffi_store32(ptr + 56, payload4.reinterpret_as_int()) + + () + } + } + + match value.separator { + None => { + mbt_ffi_store8(ptr + 60, 0) + + () + } + Some(payload6) => { + mbt_ffi_store8(ptr + 60, 1) + + let ptr7 = mbt_ffi_str2ptr(payload6) + mbt_ffi_store32(ptr + 68, payload6.length()) + mbt_ffi_store32(ptr + 64, ptr7) + + () + } + } + mbt_ffi_store8(ptr + 72, if value.verbatim { 1 } else { 0 }) + mbt_ffi_store8(ptr + 73, if value.accepts_stdio { 1 } else { 0 }) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t498(ptr : Int, value : @common.Positionals) -> Unit { + let address = mbt_ffi_malloc(value.fixed.length() * 68) + for index = 0; index < value.fixed.length(); index = index + 1 { + let iter_elem : @common.Positional = value.fixed[index] + let iter_base = address + index * 68 + __wit_bindgen_lower_t494(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 4, value.fixed.length()) + mbt_ffi_store32(ptr + 0, address) + + match value.tail { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 8, 1) + __wit_bindgen_lower_t495(ptr + 12, payload0) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t501(ptr : Int, value : @common.OptionSpec) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.long) + mbt_ffi_store32(ptr + 4, value.long.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + match value.short { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 8, 1) + mbt_ffi_store32(ptr + 12, payload1.to_int()) + + () + } + } + + let address = mbt_ffi_malloc(value.aliases.length() * 8) + for index = 0; index < value.aliases.length(); index = index + 1 { + let iter_elem : String = value.aliases[index] + let iter_base = address + index * 8 + + let ptr2 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr2) + } + mbt_ffi_store32(ptr + 20, value.aliases.length()) + mbt_ffi_store32(ptr + 16, address) + __wit_bindgen_lower_t491(ptr + 24, value.doc) + + match value.value_name { + None => { + mbt_ffi_store8(ptr + 48, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 48, 1) + + let ptr5 = mbt_ffi_str2ptr(payload4) + mbt_ffi_store32(ptr + 56, payload4.length()) + mbt_ffi_store32(ptr + 52, ptr5) + + () + } + } + __wit_bindgen_lower_t475(ptr + 60, value.shape) + + match value.default { + None => { + mbt_ffi_store8(ptr + 80, 0) + + () + } + Some(payload7) => { + mbt_ffi_store8(ptr + 80, 1) + __wit_bindgen_lower_t76(ptr + 84, payload7) + + () + } + } + mbt_ffi_store8(ptr + 96, if value.required { 1 } else { 0 }) + + match value.env_var { + None => { + mbt_ffi_store8(ptr + 100, 0) + + () + } + Some(payload9) => { + mbt_ffi_store8(ptr + 100, 1) + + let ptr10 = mbt_ffi_str2ptr(payload9) + mbt_ffi_store32(ptr + 108, payload9.length()) + mbt_ffi_store32(ptr + 104, ptr10) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t502(ptr : Int, value : @common.FlagSpec) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.long) + mbt_ffi_store32(ptr + 4, value.long.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + match value.short { + None => { + mbt_ffi_store8(ptr + 8, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 8, 1) + mbt_ffi_store32(ptr + 12, payload1.to_int()) + + () + } + } + + let address = mbt_ffi_malloc(value.aliases.length() * 8) + for index = 0; index < value.aliases.length(); index = index + 1 { + let iter_elem : String = value.aliases[index] + let iter_base = address + index * 8 + + let ptr2 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr2) + } + mbt_ffi_store32(ptr + 20, value.aliases.length()) + mbt_ffi_store32(ptr + 16, address) + __wit_bindgen_lower_t491(ptr + 24, value.doc) + __wit_bindgen_lower_t478(ptr + 48, value.shape) + + match value.env_var { + None => { + mbt_ffi_store8(ptr + 60, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 60, 1) + + let ptr5 = mbt_ffi_str2ptr(payload4) + mbt_ffi_store32(ptr + 68, payload4.length()) + mbt_ffi_store32(ptr + 64, ptr5) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t505(ptr : Int, value : @common.Globals) -> Unit { + let address = mbt_ffi_malloc(value.options.length() * 112) + for index = 0; index < value.options.length(); index = index + 1 { + let iter_elem : @common.OptionSpec = value.options[index] + let iter_base = address + index * 112 + __wit_bindgen_lower_t501(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 4, value.options.length()) + mbt_ffi_store32(ptr + 0, address) + + let address0 = mbt_ffi_malloc(value.flags.length() * 72) + for index1 = 0; index1 < value.flags.length(); index1 = index1 + 1 { + let iter_elem : @common.FlagSpec = value.flags[index1] + let iter_base = address0 + index1 * 72 + __wit_bindgen_lower_t502(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 12, value.flags.length()) + mbt_ffi_store32(ptr + 8, address0) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t506(ptr : Int, value : @common.StreamSpec) -> Unit { + __wit_bindgen_lower_t491(ptr + 0, value.doc) + + let address = mbt_ffi_malloc(value.mime.length() * 8) + for index = 0; index < value.mime.length(); index = index + 1 { + let iter_elem : String = value.mime[index] + let iter_base = address + index * 8 + + let ptr0 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr0) + } + mbt_ffi_store32(ptr + 28, value.mime.length()) + mbt_ffi_store32(ptr + 24, address) + mbt_ffi_store8(ptr + 32, if value.required { 1 } else { 0 }) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t507(ptr : Int, value : @common.Formatter) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + __wit_bindgen_lower_t491(ptr + 8, value.doc) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t509(ptr : Int, value : @common.ResultSpec) -> Unit { + mbt_ffi_store32(ptr + 0, value.type_) + __wit_bindgen_lower_t491(ptr + 4, value.doc) + + let address = mbt_ffi_malloc(value.formatters.length() * 32) + for index = 0; index < value.formatters.length(); index = index + 1 { + let iter_elem : @common.Formatter = value.formatters[index] + let iter_base = address + index * 32 + __wit_bindgen_lower_t507(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 32, value.formatters.length()) + mbt_ffi_store32(ptr + 28, address) + + let ptr0 = mbt_ffi_str2ptr(value.default_formatter) + mbt_ffi_store32(ptr + 40, value.default_formatter.length()) + mbt_ffi_store32(ptr + 36, ptr0) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t511(ptr : Int, value : @common.ErrorCase) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + __wit_bindgen_lower_t491(ptr + 8, value.doc) + mbt_ffi_store8(ptr + 32, value.kind.ordinal()) + mbt_ffi_store8(ptr + 33, value.exit_code.to_int()) + + match value.payload { + None => { + mbt_ffi_store8(ptr + 36, 0) + + () + } + Some(payload1) => { + mbt_ffi_store8(ptr + 36, 1) + mbt_ffi_store32(ptr + 40, payload1) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t517(ptr : Int, value : @common.CommandBody) -> Unit { + __wit_bindgen_lower_t498(ptr + 0, value.positionals) + + let address = mbt_ffi_malloc(value.options.length() * 112) + for index = 0; index < value.options.length(); index = index + 1 { + let iter_elem : @common.OptionSpec = value.options[index] + let iter_base = address + index * 112 + __wit_bindgen_lower_t501(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 92, value.options.length()) + mbt_ffi_store32(ptr + 88, address) + + let address0 = mbt_ffi_malloc(value.flags.length() * 72) + for index1 = 0; index1 < value.flags.length(); index1 = index1 + 1 { + let iter_elem : @common.FlagSpec = value.flags[index1] + let iter_base = address0 + index1 * 72 + __wit_bindgen_lower_t502(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 100, value.flags.length()) + mbt_ffi_store32(ptr + 96, address0) + + let address2 = mbt_ffi_malloc(value.constraints.length() * 28) + for index3 = 0; index3 < value.constraints.length(); index3 = index3 + 1 { + let iter_elem : @common.Constraint = value.constraints[index3] + let iter_base = address2 + index3 * 28 + __wit_bindgen_lower_t487(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 108, value.constraints.length()) + mbt_ffi_store32(ptr + 104, address2) + + match value.stdin { + None => { + mbt_ffi_store8(ptr + 112, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 112, 1) + __wit_bindgen_lower_t506(ptr + 116, payload4) + + () + } + } + + match value.stdout { + None => { + mbt_ffi_store8(ptr + 152, 0) + + () + } + Some(payload6) => { + mbt_ffi_store8(ptr + 152, 1) + __wit_bindgen_lower_t506(ptr + 156, payload6) + + () + } + } + + match value.result { + None => { + mbt_ffi_store8(ptr + 192, 0) + + () + } + Some(payload8) => { + mbt_ffi_store8(ptr + 192, 1) + __wit_bindgen_lower_t509(ptr + 196, payload8) + + () + } + } + + let address9 = mbt_ffi_malloc(value.errors.length() * 44) + for index10 = 0; index10 < value.errors.length(); index10 = index10 + 1 { + let iter_elem : @common.ErrorCase = value.errors[index10] + let iter_base = address9 + index10 * 44 + __wit_bindgen_lower_t511(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 244, value.errors.length()) + mbt_ffi_store32(ptr + 240, address9) + + match value.annotations { + None => { + mbt_ffi_store8(ptr + 248, 0) + + () + } + Some(payload12) => { + mbt_ffi_store8(ptr + 248, 1) + __wit_bindgen_lower_t470(ptr + 249, payload12) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t520(ptr : Int, value : @common.CommandNode) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + let address = mbt_ffi_malloc(value.aliases.length() * 8) + for index = 0; index < value.aliases.length(); index = index + 1 { + let iter_elem : String = value.aliases[index] + let iter_base = address + index * 8 + + let ptr1 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr1) + } + mbt_ffi_store32(ptr + 12, value.aliases.length()) + mbt_ffi_store32(ptr + 8, address) + __wit_bindgen_lower_t491(ptr + 16, value.doc) + __wit_bindgen_lower_t505(ptr + 40, value.globals) + + let address2 = mbt_ffi_malloc(value.subcommands.length() * 4) + for index3 = 0; index3 < value.subcommands.length(); index3 = index3 + 1 { + let iter_elem : Int = value.subcommands[index3] + let iter_base = address2 + index3 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 60, value.subcommands.length()) + mbt_ffi_store32(ptr + 56, address2) + + match value.body { + None => { + mbt_ffi_store8(ptr + 64, 0) + + () + } + Some(payload4) => { + mbt_ffi_store8(ptr + 64, 1) + __wit_bindgen_lower_t517(ptr + 68, payload4) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t522(ptr : Int, value : @common.CommandTree) -> Unit { + let address = mbt_ffi_malloc(value.nodes.length() * 324) + for index = 0; index < value.nodes.length(); index = index + 1 { + let iter_elem : @common.CommandNode = value.nodes[index] + let iter_base = address + index * 324 + __wit_bindgen_lower_t520(iter_base + 0, iter_elem) + } + mbt_ffi_store32(ptr + 4, value.nodes.length()) + mbt_ffi_store32(ptr + 0, address) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t523(ptr : Int, value : @common.Tool) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.version) + mbt_ffi_store32(ptr + 4, value.version.length()) + mbt_ffi_store32(ptr + 0, ptr0) + __wit_bindgen_lower_t522(ptr + 8, value.commands) + __wit_bindgen_lower_t58(ptr + 16, value.schema) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t525( + ptr : Int, + value : @common.MonomorphicScope, +) -> Unit { + __wit_bindgen_lower_t523(ptr + 0, value.presented) + + match value.expected { + None => { + mbt_ffi_store8(ptr + 36, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(ptr + 36, 1) + __wit_bindgen_lower_t523(ptr + 40, payload0) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t526( + ptr : Int, + value : @common.ToolMiddlewareScope, +) -> Unit { + match value { + Monomorphic(payload) => { + mbt_ffi_store8(ptr + 0, 0) + __wit_bindgen_lower_t525(ptr + 4, payload) + + () + } + Universal => { + mbt_ffi_store8(ptr + 0, 1) + + () + } + } +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t527(ptr : Int, value : @common.ToolMiddleware) -> Unit { + let ptr0 = mbt_ffi_str2ptr(value.name) + mbt_ffi_store32(ptr + 4, value.name.length()) + mbt_ffi_store32(ptr + 0, ptr0) + + let address = mbt_ffi_malloc(value.aliases.length() * 8) + for index = 0; index < value.aliases.length(); index = index + 1 { + let iter_elem : String = value.aliases[index] + let iter_base = address + index * 8 + + let ptr1 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr1) + } + mbt_ffi_store32(ptr + 12, value.aliases.length()) + mbt_ffi_store32(ptr + 8, address) + __wit_bindgen_lower_t491(ptr + 16, value.doc) + __wit_bindgen_lower_t526(ptr + 40, value.scope) +} + +///| +#doc(hidden) +fn __wit_bindgen_lower_t528(ptr : Int, value : @common.ToolError) -> Unit { + match value { + InvalidToolName(payload) => { + mbt_ffi_store8(ptr + 0, 0) + + let ptr0 = mbt_ffi_str2ptr(payload) + mbt_ffi_store32(ptr + 8, payload.length()) + mbt_ffi_store32(ptr + 4, ptr0) + + () + } + InvalidCommandPath(payload1) => { + mbt_ffi_store8(ptr + 0, 1) + + let address = mbt_ffi_malloc(payload1.length() * 8) + for index = 0; index < payload1.length(); index = index + 1 { + let iter_elem : String = payload1[index] + let iter_base = address + index * 8 + + let ptr2 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr2) + } + mbt_ffi_store32(ptr + 8, payload1.length()) + mbt_ffi_store32(ptr + 4, address) + + () + } + InvalidInput(payload3) => { + mbt_ffi_store8(ptr + 0, 2) + + let ptr4 = mbt_ffi_str2ptr(payload3) + mbt_ffi_store32(ptr + 8, payload3.length()) + mbt_ffi_store32(ptr + 4, ptr4) + + () + } + ConstraintViolation(payload5) => { + mbt_ffi_store8(ptr + 0, 3) + + let ptr6 = mbt_ffi_str2ptr(payload5) + mbt_ffi_store32(ptr + 8, payload5.length()) + mbt_ffi_store32(ptr + 4, ptr6) + + () + } + InvalidResult(payload7) => { + mbt_ffi_store8(ptr + 0, 4) + + let ptr8 = mbt_ffi_str2ptr(payload7) + mbt_ffi_store32(ptr + 8, payload7.length()) + mbt_ffi_store32(ptr + 4, ptr8) + + () + } + CustomError(payload9) => { + mbt_ffi_store8(ptr + 0, 5) + __wit_bindgen_lower_t77(ptr + 4, payload9) + + () + } + } +} + +///| +#owned(bytes) +extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = + #|(func (param i32) (result i32) local.get 0) + +///| +extern "wasm" fn mbt_ffi_extend16(value : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.extend16_s) + +///| +extern "wasm" fn mbt_ffi_extend8(value : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.extend8_s) + +///| +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) + +///| +extern "wasm" fn mbt_ffi_load16(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load16_s) + +///| +extern "wasm" fn mbt_ffi_load16_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load16_u) + +///| +extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load) + +///| +extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = + #|(func (param i32) (result i64) local.get 0 i64.load) + +///| +extern "wasm" fn mbt_ffi_load8(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_s) + +///| +extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_u) + +///| +extern "wasm" fn mbt_ffi_loadf32(offset : Int) -> Float = + #|(func (param i32) (result f32) local.get 0 f32.load) + +///| +extern "wasm" fn mbt_ffi_loadf64(offset : Int) -> Double = + #|(func (param i32) (result f64) local.get 0 f64.load) + +///| +extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = + #|(func (param i32) (result i32) (local i32) + #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc + #| local.tee 1 i32.const 0 call $moonbit.init_array8 + #| local.get 1) + +///| +extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array8 + #| local.get 0) + +///| +extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array16 + #| local.get 0) + +///| +extern "wasm" fn mbt_ffi_store16(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store16) + +///| +extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) + +///| +extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = + #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) + +///| +extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) + +///| +extern "wasm" fn mbt_ffi_storef32(offset : Int, value : Float) = + #|(func (param i32) (param f32) local.get 0 local.get 1 f32.store) + +///| +extern "wasm" fn mbt_ffi_storef64(offset : Int, value : Double) = + #|(func (param i32) (param f64) local.get 0 local.get 1 f64.store) + +///| +#owned(str) +extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = + #|(func (param i32) (result i32) local.get 0) diff --git a/sdks/moonbit/golem_sdk/gen-tool-middleware/interface/golem/tool/tool-middleware-guest/moon.pkg b/sdks/moonbit/golem_sdk/gen-tool-middleware/interface/golem/tool/tool-middleware-guest/moon.pkg new file mode 100644 index 0000000000..d68a855101 --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-tool-middleware/interface/golem/tool/tool-middleware-guest/moon.pkg @@ -0,0 +1,11 @@ +import { + "golemcloud/golem_sdk/async-core", + "golemcloud/golem_sdk/interface/golem/agent/common" @common0, + "golemcloud/golem_sdk/interface/golem/core/types", + "golemcloud/golem_sdk/interface/golem/tool/common", + "golemcloud/golem_sdk/tool-middleware" @toolMiddleware, +} + +warnings = "-44" + +supported_targets = "+wasm" diff --git a/sdks/moonbit/golem_sdk/gen-tool-middleware/interface/golem/tool/tool-middleware-guest/pkg.generated.mbti b/sdks/moonbit/golem_sdk/gen-tool-middleware/interface/golem/tool/tool-middleware-guest/pkg.generated.mbti new file mode 100644 index 0000000000..6b8abf53dc --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-tool-middleware/interface/golem/tool/tool-middleware-guest/pkg.generated.mbti @@ -0,0 +1,22 @@ +// Generated using `moon info`, DON'T EDIT IT +package "golemcloud/golem_sdk/gen-tool-middleware/interface/golem/tool/tool-middleware-guest" + +import { + "golemcloud/golem_sdk/async-core", + "golemcloud/golem_sdk/interface/golem/core/types", +} + +// Values +pub fn discover_tool_middlewares() -> Result[Array[@golemcloud/golem_sdk/interface/golem/tool/common.ToolMiddleware], @golemcloud/golem_sdk/interface/golem/tool/common.ToolError] + +pub fn get_tool_middleware(String) -> Result[@golemcloud/golem_sdk/interface/golem/tool/common.ToolMiddleware, @golemcloud/golem_sdk/interface/golem/tool/common.ToolError] + +pub async fn invoke_tool_middleware(String, String, @golemcloud/golem_sdk/interface/golem/tool/common.Tool, Array[String], @types.TypedSchemaValue, @async-core.Stream[Byte]?, @golemcloud/golem_sdk/interface/golem/agent/common.Principal, @golemcloud/golem_sdk/interface/golem/tool/common.UnderlyingTool, @async-core.TaskGroup[Unit]) -> Result[@golemcloud/golem_sdk/interface/golem/tool/common.InvocationResult, @golemcloud/golem_sdk/interface/golem/tool/common.ToolError] + +// Errors + +// Types and methods + +// Type aliases + +// Traits diff --git a/sdks/moonbit/golem_sdk/gen-tool-middleware/interface/golem/tool/tool-middleware-guest/stub.mbt b/sdks/moonbit/golem_sdk/gen-tool-middleware/interface/golem/tool/tool-middleware-guest/stub.mbt new file mode 100644 index 0000000000..d854fb3d27 --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-tool-middleware/interface/golem/tool/tool-middleware-guest/stub.mbt @@ -0,0 +1,38 @@ +///| +/// Enumerate every middleware definition exported by this component. +pub fn discover_tool_middlewares() -> Result[ + Array[@common.ToolMiddleware], + @common.ToolError, +] { + Ok(@toolMiddleware.discover_tool_middlewares()) +} + +///| +/// Look up one middleware definition by canonical name. +pub fn get_tool_middleware( + name : String, +) -> Result[@common.ToolMiddleware, @common.ToolError] { + @toolMiddleware.get_registered_tool_middleware(name) +} + +///| +/// Invoke one middleware layer around its runtime-bound next inner layer. +pub async fn invoke_tool_middleware( + middleware_name : String, + tool_name : String, + tool_metadata : @common.Tool, + command_path : Array[String], + input : @types.TypedSchemaValue, + stdin : @async-core.Stream[Byte]?, + principal : @common0.Principal, + wrapped : @common.UnderlyingTool, + background_group : @async-core.TaskGroup[Unit], +) -> Result[@common.InvocationResult, @common.ToolError] { + let underlying = @toolMiddleware.UnderlyingTool::from_wit( + wrapped, background_group, + ) + @toolMiddleware.invoke_registered_tool_middleware( + middleware_name, tool_name, tool_metadata, command_path, input, stdin, principal, + underlying, + ) +} diff --git a/sdks/moonbit/golem_sdk/gen-tool-middleware/interface/golem/tool/tool-middleware-guest/top.mbt b/sdks/moonbit/golem_sdk/gen-tool-middleware/interface/golem/tool/tool-middleware-guest/top.mbt new file mode 100644 index 0000000000..f1231a40d6 --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-tool-middleware/interface/golem/tool/tool-middleware-guest/top.mbt @@ -0,0 +1,28 @@ +// Generated by `wit-bindgen` 0.59.0. DO NOT EDIT! + +///| +/// Enumerate every middleware definition exported by this component. +declare pub fn discover_tool_middlewares() -> Result[ + Array[@common.ToolMiddleware], + @common.ToolError, +] + +///| +/// Look up one middleware definition by canonical name. +declare pub fn get_tool_middleware( + name : String, +) -> Result[@common.ToolMiddleware, @common.ToolError] + +///| +/// Invoke one middleware layer around its runtime-bound next inner layer. +declare pub async fn invoke_tool_middleware( + middleware_name : String, + tool_name : String, + tool_metadata : @common.Tool, + command_path : Array[String], + input : @types.TypedSchemaValue, + stdin : @async-core.Stream[Byte]?, + principal : @common0.Principal, + wrapped : @common.UnderlyingTool, + background_group : @async-core.TaskGroup[Unit], +) -> Result[@common.InvocationResult, @common.ToolError] diff --git a/sdks/moonbit/golem_sdk/gen-tool-middleware/moon.pkg b/sdks/moonbit/golem_sdk/gen-tool-middleware/moon.pkg new file mode 100644 index 0000000000..2278923887 --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-tool-middleware/moon.pkg @@ -0,0 +1,25 @@ +warnings = "-44" + +import { + "golemcloud/golem_sdk/gen-tool-middleware/interface/golem/tool/tool-middleware-guest", +} + +supported_targets = "+wasm" + +options( + link: { + "wasm": { + "export-memory-name": "memory", + "heap-start-address": 16, + "exports": [ + "mbt_ffi_cabi_realloc:cabi_realloc", + "wasmExportAsyncInvokeToolMiddleware:[callback][async-lift]golem:tool/tool-middleware-guest@0.1.0#invoke-tool-middleware", + "wasmExportDiscoverToolMiddlewares:golem:tool/tool-middleware-guest@0.1.0#discover-tool-middlewares", + "wasmExportDiscoverToolMiddlewaresPostReturn:cabi_post_golem:tool/tool-middleware-guest@0.1.0#discover-tool-middlewares", + "wasmExportGetToolMiddleware:golem:tool/tool-middleware-guest@0.1.0#get-tool-middleware", + "wasmExportGetToolMiddlewarePostReturn:cabi_post_golem:tool/tool-middleware-guest@0.1.0#get-tool-middleware", + "wasmExportInvokeToolMiddleware:[async-lift]golem:tool/tool-middleware-guest@0.1.0#invoke-tool-middleware", + ], + }, + }, +) diff --git a/sdks/moonbit/golem_sdk/gen-tool-middleware/pkg.generated.mbti b/sdks/moonbit/golem_sdk/gen-tool-middleware/pkg.generated.mbti new file mode 100644 index 0000000000..5e0cd97535 --- /dev/null +++ b/sdks/moonbit/golem_sdk/gen-tool-middleware/pkg.generated.mbti @@ -0,0 +1,13 @@ +// Generated using `moon info`, DON'T EDIT IT +package "golemcloud/golem_sdk/gen-tool-middleware" + +// Values +pub fn mbt_ffi_cabi_realloc(Int, Int, Int, Int) -> Int + +// Errors + +// Types and methods + +// Type aliases + +// Traits diff --git a/sdks/moonbit/golem_sdk/gen/ffi.mbt b/sdks/moonbit/golem_sdk/gen/ffi.mbt index 51e1fb06b9..4656378792 100644 --- a/sdks/moonbit/golem_sdk/gen/ffi.mbt +++ b/sdks/moonbit/golem_sdk/gen/ffi.mbt @@ -35,6 +35,10 @@ pub fn mbt_ffi_cabi_realloc( extern "wasm" fn mbt_ffi_copy(dest : Int, src : Int, len : Int) = #|(func (param i32) (param i32) (param i32) local.get 0 local.get 1 local.get 2 memory.copy) +///| +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) + ///| extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #|(func (param i32) (result i32) (local i32) @@ -42,126 +46,122 @@ extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #| local.tee 1 i32.const 0 call $moonbit.init_array8 #| local.get 1) -///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) - ///| #doc(hidden) -pub fn wasmExportAsyncSave(event_raw : Int, waitable : Int, code : Int) -> Int { - @save-snapshot.wasmExportAsyncSave(event_raw, waitable, code) +pub fn wasmExportAsyncInitialize( + event_raw : Int, + waitable : Int, + code : Int, +) -> Int { + @guest0.wasmExportAsyncInitialize(event_raw, waitable, code) } ///| #doc(hidden) -pub fn wasmExportDiscoverTools() -> Int { - @guest.wasmExportDiscoverTools() +pub fn wasmExportAsyncInvokeGolemAgentGuest( + event_raw : Int, + waitable : Int, + code : Int, +) -> Int { + @guest0.wasmExportAsyncInvokeGolemAgentGuest(event_raw, waitable, code) } ///| #doc(hidden) -pub fn wasmExportGetToolPostReturn(p0 : Int) -> Unit { - @guest.wasmExportGetToolPostReturn(p0) +pub fn wasmExportAsyncInvokeGolemToolGuest( + event_raw : Int, + waitable : Int, + code : Int, +) -> Int { + @guest.wasmExportAsyncInvokeGolemToolGuest(event_raw, waitable, code) } ///| #doc(hidden) -pub fn wasmExportLoad(p0 : Int, p1 : Int, p2 : Int, p3 : Int) -> Int { - @load-snapshot.wasmExportLoad(p0, p1, p2, p3) +pub fn wasmExportAsyncLoad(event_raw : Int, waitable : Int, code : Int) -> Int { + @load-snapshot.wasmExportAsyncLoad(event_raw, waitable, code) } ///| #doc(hidden) -pub fn wasmExportAsyncInvokeGolemAgentGuest( - event_raw : Int, - waitable : Int, - code : Int, -) -> Int { - @guest0.wasmExportAsyncInvokeGolemAgentGuest(event_raw, waitable, code) +pub fn wasmExportAsyncSave(event_raw : Int, waitable : Int, code : Int) -> Int { + @save-snapshot.wasmExportAsyncSave(event_raw, waitable, code) } ///| #doc(hidden) -pub fn wasmExportAsyncInitialize( - event_raw : Int, - waitable : Int, - code : Int, -) -> Int { - @guest0.wasmExportAsyncInitialize(event_raw, waitable, code) +pub fn wasmExportDiscoverAgentTypes() -> Int { + @guest0.wasmExportDiscoverAgentTypes() } ///| #doc(hidden) -pub fn wasmExportInvokeGolemAgentGuest(p0 : Int) -> Int { - @guest0.wasmExportInvokeGolemAgentGuest(p0) +pub fn wasmExportDiscoverAgentTypesPostReturn(p0 : Int) -> Unit { + @guest0.wasmExportDiscoverAgentTypesPostReturn(p0) } ///| #doc(hidden) -pub fn wasmExportSave() -> Int { - @save-snapshot.wasmExportSave() +pub fn wasmExportDiscoverTools() -> Int { + @guest.wasmExportDiscoverTools() } ///| #doc(hidden) -pub fn wasmExportInvokeGolemToolGuest(p0 : Int) -> Int { - @guest.wasmExportInvokeGolemToolGuest(p0) +pub fn wasmExportDiscoverToolsPostReturn(p0 : Int) -> Unit { + @guest.wasmExportDiscoverToolsPostReturn(p0) } ///| #doc(hidden) -pub fn wasmExportAsyncLoad(event_raw : Int, waitable : Int, code : Int) -> Int { - @load-snapshot.wasmExportAsyncLoad(event_raw, waitable, code) +pub fn wasmExportGetDefinition() -> Int { + @guest0.wasmExportGetDefinition() } ///| #doc(hidden) -pub fn wasmExportDiscoverAgentTypes() -> Int { - @guest0.wasmExportDiscoverAgentTypes() +pub fn wasmExportGetDefinitionPostReturn(p0 : Int) -> Unit { + @guest0.wasmExportGetDefinitionPostReturn(p0) } ///| #doc(hidden) -pub fn wasmExportInitialize(p0 : Int) -> Int { - @guest0.wasmExportInitialize(p0) +pub fn wasmExportGetTool(p0 : Int, p1 : Int) -> Int { + @guest.wasmExportGetTool(p0, p1) } ///| #doc(hidden) -pub fn wasmExportAsyncInvokeGolemToolGuest( - event_raw : Int, - waitable : Int, - code : Int, -) -> Int { - @guest.wasmExportAsyncInvokeGolemToolGuest(event_raw, waitable, code) +pub fn wasmExportGetToolPostReturn(p0 : Int) -> Unit { + @guest.wasmExportGetToolPostReturn(p0) } ///| #doc(hidden) -pub fn wasmExportDiscoverAgentTypesPostReturn(p0 : Int) -> Unit { - @guest0.wasmExportDiscoverAgentTypesPostReturn(p0) +pub fn wasmExportInitialize(p0 : Int) -> Int { + @guest0.wasmExportInitialize(p0) } ///| #doc(hidden) -pub fn wasmExportGetDefinition() -> Int { - @guest0.wasmExportGetDefinition() +pub fn wasmExportInvokeGolemAgentGuest(p0 : Int) -> Int { + @guest0.wasmExportInvokeGolemAgentGuest(p0) } ///| #doc(hidden) -pub fn wasmExportGetTool(p0 : Int, p1 : Int) -> Int { - @guest.wasmExportGetTool(p0, p1) +pub fn wasmExportInvokeGolemToolGuest(p0 : Int) -> Int { + @guest.wasmExportInvokeGolemToolGuest(p0) } ///| #doc(hidden) -pub fn wasmExportGetDefinitionPostReturn(p0 : Int) -> Unit { - @guest0.wasmExportGetDefinitionPostReturn(p0) +pub fn wasmExportLoad(p0 : Int, p1 : Int, p2 : Int, p3 : Int) -> Int { + @load-snapshot.wasmExportLoad(p0, p1, p2, p3) } ///| #doc(hidden) -pub fn wasmExportDiscoverToolsPostReturn(p0 : Int) -> Unit { - @guest.wasmExportDiscoverToolsPostReturn(p0) +pub fn wasmExportSave() -> Int { + @save-snapshot.wasmExportSave() } diff --git a/sdks/moonbit/golem_sdk/gen/interface/golem/agent/guest/ffi.mbt b/sdks/moonbit/golem_sdk/gen/interface/golem/agent/guest/ffi.mbt index 179bd708de..f7e5767e30 100644 --- a/sdks/moonbit/golem_sdk/gen/interface/golem/agent/guest/ffi.mbt +++ b/sdks/moonbit/golem_sdk/gen/interface/golem/agent/guest/ffi.mbt @@ -13423,76 +13423,60 @@ fn __wit_bindgen_lower_t409(ptr : Int, value : @common.AgentError) -> Unit { } ///| -#owned(str) -extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = +#owned(bytes) +extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = #|(func (param i32) (result i32) local.get 0) -///| -extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = - #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) - ///| extern "wasm" fn mbt_ffi_extend16(value : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.extend16_s) -///| -extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = - #|(func (param i32) (result i64) local.get 0 i64.load) - -///| -extern "wasm" fn mbt_ffi_store16(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store16) - -///| -#owned(bytes) -extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = - #|(func (param i32) (result i32) local.get 0) - ///| extern "wasm" fn mbt_ffi_extend8(value : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.extend8_s) ///| -extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = - #|(func (param i32) (result i32) (local i32) - #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc - #| local.tee 1 i32.const 0 call $moonbit.init_array8 - #| local.get 1) - -///| -extern "wasm" fn mbt_ffi_storef32(offset : Int, value : Float) = - #|(func (param i32) (param f32) local.get 0 local.get 1 f32.store) +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) ///| extern "wasm" fn mbt_ffi_load16(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load16_s) ///| -extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load8_u) +extern "wasm" fn mbt_ffi_load16_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load16_u) ///| -extern "wasm" fn mbt_ffi_storef64(offset : Int, value : Double) = - #|(func (param i32) (param f64) local.get 0 local.get 1 f64.store) +extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load) ///| -extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = - #|(func (param i32) (param i32) (result i32) - #| local.get 0 - #| local.get 1 call $moonbit.init_array16 - #| local.get 0) +extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = + #|(func (param i32) (result i64) local.get 0 i64.load) ///| extern "wasm" fn mbt_ffi_load8(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load8_s) ///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) +extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_u) ///| -extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load) +extern "wasm" fn mbt_ffi_loadf32(offset : Int) -> Float = + #|(func (param i32) (result f32) local.get 0 f32.load) + +///| +extern "wasm" fn mbt_ffi_loadf64(offset : Int) -> Double = + #|(func (param i32) (result f64) local.get 0 f64.load) + +///| +extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = + #|(func (param i32) (result i32) (local i32) + #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc + #| local.tee 1 i32.const 0 call $moonbit.init_array8 + #| local.get 1) ///| extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = @@ -13502,21 +13486,37 @@ extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = #| local.get 0) ///| -extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) +extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array16 + #| local.get 0) ///| -extern "wasm" fn mbt_ffi_load16_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load16_u) +extern "wasm" fn mbt_ffi_store16(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store16) ///| extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) ///| -extern "wasm" fn mbt_ffi_loadf32(offset : Int) -> Float = - #|(func (param i32) (result f32) local.get 0 f32.load) +extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = + #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) ///| -extern "wasm" fn mbt_ffi_loadf64(offset : Int) -> Double = - #|(func (param i32) (result f64) local.get 0 f64.load) +extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) + +///| +extern "wasm" fn mbt_ffi_storef32(offset : Int, value : Float) = + #|(func (param i32) (param f32) local.get 0 local.get 1 f32.store) + +///| +extern "wasm" fn mbt_ffi_storef64(offset : Int, value : Double) = + #|(func (param i32) (param f64) local.get 0 local.get 1 f64.store) + +///| +#owned(str) +extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = + #|(func (param i32) (result i32) local.get 0) diff --git a/sdks/moonbit/golem_sdk/gen/interface/golem/api/load-snapshot/ffi.mbt b/sdks/moonbit/golem_sdk/gen/interface/golem/api/load-snapshot/ffi.mbt index c1c66e32bc..5bec9f55b9 100644 --- a/sdks/moonbit/golem_sdk/gen/interface/golem/api/load-snapshot/ffi.mbt +++ b/sdks/moonbit/golem_sdk/gen/interface/golem/api/load-snapshot/ffi.mbt @@ -56,6 +56,10 @@ pub fn wasmExportAsyncLoad(event_raw : Int, waitable : Int, code : Int) -> Int { @async-core.cb(event_raw, waitable, code) } +///| +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) + ///| extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = #|(func (param i32) (param i32) (result i32) @@ -63,18 +67,14 @@ extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = #| local.get 1 call $moonbit.init_array8 #| local.get 0) -///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) - -///| -#owned(str) -extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = - #|(func (param i32) (result i32) local.get 0) - ///| extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = #|(func (param i32) (param i32) (result i32) #| local.get 0 #| local.get 1 call $moonbit.init_array16 #| local.get 0) + +///| +#owned(str) +extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = + #|(func (param i32) (result i32) local.get 0) diff --git a/sdks/moonbit/golem_sdk/gen/interface/golem/api/loadSnapshot/ffi.mbt b/sdks/moonbit/golem_sdk/gen/interface/golem/api/loadSnapshot/ffi.mbt deleted file mode 100644 index 3022fa5311..0000000000 --- a/sdks/moonbit/golem_sdk/gen/interface/golem/api/loadSnapshot/ffi.mbt +++ /dev/null @@ -1,90 +0,0 @@ -// Generated by `wit-bindgen` 0.58.0. DO NOT EDIT! - -///| -#doc(hidden) -pub fn wasmExportLoad(p0 : Int, p1 : Int, p2 : Int, p3 : Int) -> Int { - let result = mbt_ffi_ptr2bytes(p0, p1) - - let result0 = mbt_ffi_ptr2str(p2, p3) - - let result1 : Result[Unit, String] = load(@host.Snapshot::{ - payload: result, - mime_type: result0, - }) - let return_area = mbt_ffi_malloc(12) - - match result1 { - Ok(_payload) => { - mbt_ffi_store8(return_area + 0, 0) - - () - } - Err(payload2) => { - mbt_ffi_store8(return_area + 0, 1) - - let ptr = mbt_ffi_str2ptr(payload2) - mbt_ffi_store32(return_area + 8, payload2.length()) - mbt_ffi_store32(return_area + 4, ptr) - - () - } - } - let ret = return_area - return ret -} - -///| -#doc(hidden) -pub fn wasmExportLoadPostReturn(p0 : Int) -> Unit { - match mbt_ffi_load8_u(p0 + 0) { - 0 => () - 1 => mbt_ffi_free(mbt_ffi_load32(p0 + 4)) - _ => panic() - } -} - -///| -extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) - -///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) - -///| -extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load8_u) - -///| -extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = - #|(func (param i32) (result i32) (local i32) - #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc - #| local.tee 1 i32.const 0 call $moonbit.init_array8 - #| local.get 1) - -///| -extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = - #|(func (param i32) (param i32) (result i32) - #| local.get 0 - #| local.get 1 call $moonbit.init_array16 - #| local.get 0) - -///| -extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = - #|(func (param i32) (param i32) (result i32) - #| local.get 0 - #| local.get 1 call $moonbit.init_array8 - #| local.get 0) - -///| -#owned(str) -extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = - #|(func (param i32) (result i32) local.get 0) - -///| -extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) - -///| -extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load) diff --git a/sdks/moonbit/golem_sdk/gen/interface/golem/api/saveSnapshot/ffi.mbt b/sdks/moonbit/golem_sdk/gen/interface/golem/api/saveSnapshot/ffi.mbt deleted file mode 100644 index f8c6379c76..0000000000 --- a/sdks/moonbit/golem_sdk/gen/interface/golem/api/saveSnapshot/ffi.mbt +++ /dev/null @@ -1,55 +0,0 @@ -// Generated by `wit-bindgen` 0.58.0. DO NOT EDIT! - -///| -#doc(hidden) -pub fn wasmExportSave() -> Int { - let result : @host.Snapshot = save() - let return_area = mbt_ffi_malloc(16) - - let ptr = mbt_ffi_bytes2ptr(result.payload) - - mbt_ffi_store32(return_area + 4, result.payload.length()) - mbt_ffi_store32(return_area + 0, ptr) - - let ptr0 = mbt_ffi_str2ptr(result.mime_type) - mbt_ffi_store32(return_area + 12, result.mime_type.length()) - mbt_ffi_store32(return_area + 8, ptr0) - let ret = return_area - return ret -} - -///| -#doc(hidden) -pub fn wasmExportSavePostReturn(p0 : Int) -> Unit { - mbt_ffi_free(mbt_ffi_load32(p0 + 0)) - mbt_ffi_free(mbt_ffi_load32(p0 + 8)) -} - -///| -extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = - #|(func (param i32) (result i32) (local i32) - #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc - #| local.tee 1 i32.const 0 call $moonbit.init_array8 - #| local.get 1) - -///| -extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) - -///| -#owned(str) -extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = - #|(func (param i32) (result i32) local.get 0) - -///| -extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load) - -///| -#owned(bytes) -extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = - #|(func (param i32) (result i32) local.get 0) - -///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) diff --git a/sdks/moonbit/golem_sdk/gen/interface/golem/tool/guest/ffi.mbt b/sdks/moonbit/golem_sdk/gen/interface/golem/tool/guest/ffi.mbt index e92580f4da..6e67219411 100644 --- a/sdks/moonbit/golem_sdk/gen/interface/golem/tool/guest/ffi.mbt +++ b/sdks/moonbit/golem_sdk/gen/interface/golem/tool/guest/ffi.mbt @@ -23,7 +23,7 @@ pub fn wasmExportDiscoverTools() -> Int { } Err(payload0) => { mbt_ffi_store8(return_area + 0, 1) - __wit_bindgen_lower_t524(return_area + 4, payload0) + __wit_bindgen_lower_t528(return_area + 4, payload0) () } @@ -2393,7 +2393,7 @@ pub fn wasmExportGetTool(p0 : Int, p1 : Int) -> Int { } Err(payload1) => { mbt_ffi_store8(return_area + 0, 1) - __wit_bindgen_lower_t524(return_area + 4, payload1) + __wit_bindgen_lower_t528(return_area + 4, payload1) () } @@ -10224,7 +10224,7 @@ fn __wit_bindgen_lower_t523(ptr : Int, value : @common.Tool) -> Unit { ///| #doc(hidden) -fn __wit_bindgen_lower_t524(ptr : Int, value : @common.ToolError) -> Unit { +fn __wit_bindgen_lower_t528(ptr : Int, value : @common.ToolError) -> Unit { match value { InvalidToolName(payload) => { mbt_ffi_store8(ptr + 0, 0) @@ -10288,42 +10288,46 @@ fn __wit_bindgen_lower_t524(ptr : Int, value : @common.ToolError) -> Unit { } } +///| +#owned(bytes) +extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = + #|(func (param i32) (result i32) local.get 0) + ///| extern "wasm" fn mbt_ffi_extend16(value : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.extend16_s) ///| -extern "wasm" fn mbt_ffi_storef32(offset : Int, value : Float) = - #|(func (param i32) (param f32) local.get 0 local.get 1 f32.store) +extern "wasm" fn mbt_ffi_extend8(value : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.extend8_s) ///| -extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = - #|(func (param i32) (param i32) (result i32) - #| local.get 0 - #| local.get 1 call $moonbit.init_array8 - #| local.get 0) +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) ///| -#owned(str) -extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = - #|(func (param i32) (result i32) local.get 0) +extern "wasm" fn mbt_ffi_load16(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load16_s) ///| extern "wasm" fn mbt_ffi_load16_u(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load16_u) ///| -#owned(bytes) -extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = - #|(func (param i32) (result i32) local.get 0) +extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load) ///| -extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load8_u) +extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = + #|(func (param i32) (result i64) local.get 0 i64.load) ///| -extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) +extern "wasm" fn mbt_ffi_load8(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_s) + +///| +extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_u) ///| extern "wasm" fn mbt_ffi_loadf32(offset : Int) -> Float = @@ -10334,12 +10338,18 @@ extern "wasm" fn mbt_ffi_loadf64(offset : Int) -> Double = #|(func (param i32) (result f64) local.get 0 f64.load) ///| -extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load) +extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = + #|(func (param i32) (result i32) (local i32) + #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc + #| local.tee 1 i32.const 0 call $moonbit.init_array8 + #| local.get 1) ///| -extern "wasm" fn mbt_ffi_storef64(offset : Int, value : Double) = - #|(func (param i32) (param f64) local.get 0 local.get 1 f64.store) +extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array8 + #| local.get 0) ///| extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = @@ -10348,29 +10358,10 @@ extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = #| local.get 1 call $moonbit.init_array16 #| local.get 0) -///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) - -///| -extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = - #|(func (param i32) (result i64) local.get 0 i64.load) - -///| -extern "wasm" fn mbt_ffi_load8(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load8_s) - ///| extern "wasm" fn mbt_ffi_store16(offset : Int, value : Int) = #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store16) -///| -extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = - #|(func (param i32) (result i32) (local i32) - #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc - #| local.tee 1 i32.const 0 call $moonbit.init_array8 - #| local.get 1) - ///| extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) @@ -10380,9 +10371,18 @@ extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) ///| -extern "wasm" fn mbt_ffi_load16(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load16_s) +extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) ///| -extern "wasm" fn mbt_ffi_extend8(value : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.extend8_s) +extern "wasm" fn mbt_ffi_storef32(offset : Int, value : Float) = + #|(func (param i32) (param f32) local.get 0 local.get 1 f32.store) + +///| +extern "wasm" fn mbt_ffi_storef64(offset : Int, value : Double) = + #|(func (param i32) (param f64) local.get 0 local.get 1 f64.store) + +///| +#owned(str) +extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = + #|(func (param i32) (result i32) local.get 0) diff --git a/sdks/moonbit/golem_sdk/interface/golem/agent/host/ffi.mbt b/sdks/moonbit/golem_sdk/interface/golem/agent/host/ffi.mbt index ac3bf6d86c..e5d84adb97 100644 --- a/sdks/moonbit/golem_sdk/interface/golem/agent/host/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/golem/agent/host/ffi.mbt @@ -146,45 +146,53 @@ fn wasmImportGetConfigValue( ) = "golem:agent/host@2.0.0" "get-config-value" ///| -extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load) +#owned(bytes) +extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = + #|(func (param i32) (result i32) local.get 0) + +///| +extern "wasm" fn mbt_ffi_extend16(value : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.extend16_s) + +///| +extern "wasm" fn mbt_ffi_extend8(value : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.extend8_s) ///| extern "wasm" fn mbt_ffi_free(position : Int) = #|(func (param i32) local.get 0 call $moonbit.decref) ///| -extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) +extern "wasm" fn mbt_ffi_load16(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load16_s) ///| -extern "wasm" fn mbt_ffi_store16(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store16) +extern "wasm" fn mbt_ffi_load16_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load16_u) ///| -extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) +extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load) ///| -#owned(bytes) -extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = - #|(func (param i32) (result i32) local.get 0) +extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = + #|(func (param i32) (result i64) local.get 0 i64.load) ///| extern "wasm" fn mbt_ffi_load8(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load8_s) ///| -extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = - #|(func (param i32) (param i32) (result i32) - #| local.get 0 - #| local.get 1 call $moonbit.init_array8 - #| local.get 0) +extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_u) ///| -#owned(str) -extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = - #|(func (param i32) (result i32) local.get 0) +extern "wasm" fn mbt_ffi_loadf32(offset : Int) -> Float = + #|(func (param i32) (result f32) local.get 0 f32.load) + +///| +extern "wasm" fn mbt_ffi_loadf64(offset : Int) -> Double = + #|(func (param i32) (result f64) local.get 0 f64.load) ///| extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = @@ -194,52 +202,44 @@ extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #| local.get 1) ///| -extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = - #|(func (param i32) (result i64) local.get 0 i64.load) - -///| -extern "wasm" fn mbt_ffi_extend8(value : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.extend8_s) - -///| -extern "wasm" fn mbt_ffi_extend16(value : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.extend16_s) - -///| -extern "wasm" fn mbt_ffi_storef64(offset : Int, value : Double) = - #|(func (param i32) (param f64) local.get 0 local.get 1 f64.store) - -///| -extern "wasm" fn mbt_ffi_load16(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load16_s) +extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array8 + #| local.get 0) ///| -extern "wasm" fn mbt_ffi_load16_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load16_u) +extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array16 + #| local.get 0) ///| -extern "wasm" fn mbt_ffi_loadf32(offset : Int) -> Float = - #|(func (param i32) (result f32) local.get 0 f32.load) +extern "wasm" fn mbt_ffi_store16(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store16) ///| -extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load8_u) +extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) ///| extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) +///| +extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) + ///| extern "wasm" fn mbt_ffi_storef32(offset : Int, value : Float) = #|(func (param i32) (param f32) local.get 0 local.get 1 f32.store) ///| -extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = - #|(func (param i32) (param i32) (result i32) - #| local.get 0 - #| local.get 1 call $moonbit.init_array16 - #| local.get 0) +extern "wasm" fn mbt_ffi_storef64(offset : Int, value : Double) = + #|(func (param i32) (param f64) local.get 0 local.get 1 f64.store) ///| -extern "wasm" fn mbt_ffi_loadf64(offset : Int) -> Double = - #|(func (param i32) (result f64) local.get 0 f64.load) +#owned(str) +extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = + #|(func (param i32) (result i32) local.get 0) diff --git a/sdks/moonbit/golem_sdk/interface/golem/api/context/ffi.mbt b/sdks/moonbit/golem_sdk/interface/golem/api/context/ffi.mbt index 8e644f0bb6..82af08da2c 100644 --- a/sdks/moonbit/golem_sdk/interface/golem/api/context/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/golem/api/context/ffi.mbt @@ -69,13 +69,21 @@ fn wasmImportMethodInvocationContextGetAttributeChains(p0 : Int, p1 : Int) = "go ///| fn wasmImportMethodInvocationContextTraceContextHeaders(p0 : Int, p1 : Int) = "golem:api/context@1.5.0" "[method]invocation-context.trace-context-headers" +///| +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) + +///| +extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load) + ///| extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = #|(func (param i32) (result i64) local.get 0 i64.load) ///| -extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) +extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_u) ///| extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = @@ -84,6 +92,17 @@ extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #| local.tee 1 i32.const 0 call $moonbit.init_array8 #| local.get 1) +///| +extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array16 + #| local.get 0) + +///| +extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) + ///| extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) @@ -92,22 +111,3 @@ extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = #owned(str) extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = #|(func (param i32) (result i32) local.get 0) - -///| -extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load) - -///| -extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load8_u) - -///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) - -///| -extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = - #|(func (param i32) (param i32) (result i32) - #| local.get 0 - #| local.get 1 call $moonbit.init_array16 - #| local.get 0) diff --git a/sdks/moonbit/golem_sdk/interface/golem/api/host/ffi.mbt b/sdks/moonbit/golem_sdk/interface/golem/api/host/ffi.mbt index 6b33500b45..35ad1363f3 100644 --- a/sdks/moonbit/golem_sdk/interface/golem/api/host/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/golem/api/host/ffi.mbt @@ -139,25 +139,39 @@ fn wasmImportResolveAgentIdStrict( fn wasmImportFork(p0 : Int) = "golem:api/host@1.5.0" "fork" ///| -extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = - #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) +#owned(bytes) +extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = + #|(func (param i32) (result i32) local.get 0) ///| -extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load8_u) +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) ///| -extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) +extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load) ///| extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = #|(func (param i32) (result i64) local.get 0 i64.load) ///| -#owned(bytes) -extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = - #|(func (param i32) (result i32) local.get 0) +extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_u) + +///| +extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = + #|(func (param i32) (result i32) (local i32) + #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc + #| local.tee 1 i32.const 0 call $moonbit.init_array8 + #| local.get 1) + +///| +extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array8 + #| local.get 0) ///| extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = @@ -166,6 +180,14 @@ extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = #| local.get 1 call $moonbit.init_array16 #| local.get 0) +///| +extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) + +///| +extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = + #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) + ///| extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) @@ -174,25 +196,3 @@ extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = #owned(str) extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = #|(func (param i32) (result i32) local.get 0) - -///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) - -///| -extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = - #|(func (param i32) (result i32) (local i32) - #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc - #| local.tee 1 i32.const 0 call $moonbit.init_array8 - #| local.get 1) - -///| -extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load) - -///| -extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = - #|(func (param i32) (param i32) (result i32) - #| local.get 0 - #| local.get 1 call $moonbit.init_array8 - #| local.get 0) diff --git a/sdks/moonbit/golem_sdk/interface/golem/api/oplog/ffi.mbt b/sdks/moonbit/golem_sdk/interface/golem/api/oplog/ffi.mbt index bb087d887a..85cce6b603 100644 --- a/sdks/moonbit/golem_sdk/interface/golem/api/oplog/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/golem/api/oplog/ffi.mbt @@ -45,57 +45,61 @@ fn wasmImportConstructorSearchOplog( ///| fn wasmImportMethodSearchOplogGetNext(p0 : Int, p1 : Int) = "golem:api/oplog@1.5.0" "[method]search-oplog.get-next" -///| -extern "wasm" fn mbt_ffi_extend8(value : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.extend8_s) - ///| #owned(bytes) extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = #|(func (param i32) (result i32) local.get 0) ///| -extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load) +extern "wasm" fn mbt_ffi_extend16(value : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.extend16_s) ///| -extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = - #|(func (param i32) (param i32) (result i32) - #| local.get 0 - #| local.get 1 call $moonbit.init_array16 - #| local.get 0) +extern "wasm" fn mbt_ffi_extend8(value : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.extend8_s) ///| -extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = - #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) ///| -extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) +extern "wasm" fn mbt_ffi_load16(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load16_s) ///| -extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = - #|(func (param i32) (result i32) (local i32) - #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc - #| local.tee 1 i32.const 0 call $moonbit.init_array8 - #| local.get 1) +extern "wasm" fn mbt_ffi_load16_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load16_u) ///| -extern "wasm" fn mbt_ffi_storef64(offset : Int, value : Double) = - #|(func (param i32) (param f64) local.get 0 local.get 1 f64.store) +extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load) ///| -#owned(str) -extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = - #|(func (param i32) (result i32) local.get 0) +extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = + #|(func (param i32) (result i64) local.get 0 i64.load) ///| extern "wasm" fn mbt_ffi_load8(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load8_s) ///| -extern "wasm" fn mbt_ffi_load16(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load16_s) +extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_u) + +///| +extern "wasm" fn mbt_ffi_loadf32(offset : Int) -> Float = + #|(func (param i32) (result f32) local.get 0 f32.load) + +///| +extern "wasm" fn mbt_ffi_loadf64(offset : Int) -> Double = + #|(func (param i32) (result f64) local.get 0 f64.load) + +///| +extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = + #|(func (param i32) (result i32) (local i32) + #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc + #| local.tee 1 i32.const 0 call $moonbit.init_array8 + #| local.get 1) ///| extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = @@ -105,12 +109,11 @@ extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = #| local.get 0) ///| -extern "wasm" fn mbt_ffi_storef32(offset : Int, value : Float) = - #|(func (param i32) (param f32) local.get 0 local.get 1 f32.store) - -///| -extern "wasm" fn mbt_ffi_extend16(value : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.extend16_s) +extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array16 + #| local.get 0) ///| extern "wasm" fn mbt_ffi_store16(offset : Int, value : Int) = @@ -121,25 +124,22 @@ extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) ///| -extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = - #|(func (param i32) (result i64) local.get 0 i64.load) - -///| -extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load8_u) +extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = + #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) ///| -extern "wasm" fn mbt_ffi_load16_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load16_u) +extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) ///| -extern "wasm" fn mbt_ffi_loadf64(offset : Int) -> Double = - #|(func (param i32) (result f64) local.get 0 f64.load) +extern "wasm" fn mbt_ffi_storef32(offset : Int, value : Float) = + #|(func (param i32) (param f32) local.get 0 local.get 1 f32.store) ///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) +extern "wasm" fn mbt_ffi_storef64(offset : Int, value : Double) = + #|(func (param i32) (param f64) local.get 0 local.get 1 f64.store) ///| -extern "wasm" fn mbt_ffi_loadf32(offset : Int) -> Float = - #|(func (param i32) (result f32) local.get 0 f32.load) +#owned(str) +extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = + #|(func (param i32) (result i32) local.get 0) diff --git a/sdks/moonbit/golem_sdk/interface/golem/api/retry/ffi.mbt b/sdks/moonbit/golem_sdk/interface/golem/api/retry/ffi.mbt index d84b5f1e02..d62490c3f4 100644 --- a/sdks/moonbit/golem_sdk/interface/golem/api/retry/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/golem/api/retry/ffi.mbt @@ -31,42 +31,26 @@ fn wasmImportSetRetryPolicy( ///| fn wasmImportRemoveRetryPolicy(p0 : Int, p1 : Int) = "golem:api/retry@1.5.0" "remove-retry-policy" +///| +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) + ///| extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load) ///| -extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = - #|(func (param i32) (param i32) (result i32) - #| local.get 0 - #| local.get 1 call $moonbit.init_array16 - #| local.get 0) +extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = + #|(func (param i32) (result i64) local.get 0 i64.load) ///| extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load8_u) -///| -#owned(str) -extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = - #|(func (param i32) (result i32) local.get 0) - -///| -extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) - -///| -extern "wasm" fn mbt_ffi_storef64(offset : Int, value : Double) = - #|(func (param i32) (param f64) local.get 0 local.get 1 f64.store) - ///| extern "wasm" fn mbt_ffi_loadf64(offset : Int) -> Double = #|(func (param i32) (result f64) local.get 0 f64.load) -///| -extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = - #|(func (param i32) (result i64) local.get 0 i64.load) - ///| extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #|(func (param i32) (result i32) (local i32) @@ -75,13 +59,29 @@ extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #| local.get 1) ///| -extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) +extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array16 + #| local.get 0) ///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) +extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) ///| extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) + +///| +extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) + +///| +extern "wasm" fn mbt_ffi_storef64(offset : Int, value : Double) = + #|(func (param i32) (param f64) local.get 0 local.get 1 f64.store) + +///| +#owned(str) +extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = + #|(func (param i32) (result i32) local.get 0) diff --git a/sdks/moonbit/golem_sdk/interface/golem/core/types/ffi.mbt b/sdks/moonbit/golem_sdk/interface/golem/core/types/ffi.mbt index ea0d84d506..b793e62230 100644 --- a/sdks/moonbit/golem_sdk/interface/golem/core/types/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/golem/core/types/ffi.mbt @@ -16,9 +16,20 @@ fn wasmImportParseUuid(p0 : Int, p1 : Int, p2 : Int) = "golem:core/types@2.0.0" fn wasmImportUuidToString(p0 : Int64, p1 : Int64, p2 : Int) = "golem:core/types@2.0.0" "uuid-to-string" ///| -#owned(str) -extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = - #|(func (param i32) (result i32) local.get 0) +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) + +///| +extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load) + +///| +extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = + #|(func (param i32) (result i64) local.get 0 i64.load) + +///| +extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_u) ///| extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = @@ -35,17 +46,6 @@ extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = #| local.get 0) ///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) - -///| -extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = - #|(func (param i32) (result i64) local.get 0 i64.load) - -///| -extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load) - -///| -extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load8_u) +#owned(str) +extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = + #|(func (param i32) (result i32) local.get 0) diff --git a/sdks/moonbit/golem_sdk/interface/golem/durability/durability/ffi.mbt b/sdks/moonbit/golem_sdk/interface/golem/durability/durability/ffi.mbt index 172794c339..05d383ed39 100644 --- a/sdks/moonbit/golem_sdk/interface/golem/durability/durability/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/golem/durability/durability/ffi.mbt @@ -38,36 +38,50 @@ fn wasmImportBeginCustomDurableInvocation( p13 : Int, ) = "golem:durability/durability@1.6.0" "begin-custom-durable-invocation" +///| +#owned(bytes) +extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = + #|(func (param i32) (result i32) local.get 0) + +///| +extern "wasm" fn mbt_ffi_extend16(value : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.extend16_s) + +///| +extern "wasm" fn mbt_ffi_extend8(value : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.extend8_s) + ///| extern "wasm" fn mbt_ffi_free(position : Int) = #|(func (param i32) local.get 0 call $moonbit.decref) ///| -extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = - #|(func (param i32) (param i32) (result i32) - #| local.get 0 - #| local.get 1 call $moonbit.init_array16 - #| local.get 0) +extern "wasm" fn mbt_ffi_load16(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load16_s) + +///| +extern "wasm" fn mbt_ffi_load16_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load16_u) + +///| +extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load) ///| extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = #|(func (param i32) (result i64) local.get 0 i64.load) ///| -extern "wasm" fn mbt_ffi_loadf32(offset : Int) -> Float = - #|(func (param i32) (result f32) local.get 0 f32.load) +extern "wasm" fn mbt_ffi_load8(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_s) ///| extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load8_u) ///| -extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) - -///| -extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) +extern "wasm" fn mbt_ffi_loadf32(offset : Int) -> Float = + #|(func (param i32) (result f32) local.get 0 f32.load) ///| extern "wasm" fn mbt_ffi_loadf64(offset : Int) -> Double = @@ -80,14 +94,6 @@ extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #| local.tee 1 i32.const 0 call $moonbit.init_array8 #| local.get 1) -///| -extern "wasm" fn mbt_ffi_extend16(value : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.extend16_s) - -///| -extern "wasm" fn mbt_ffi_load8(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load8_s) - ///| extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = #|(func (param i32) (param i32) (result i32) @@ -95,44 +101,38 @@ extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = #| local.get 1 call $moonbit.init_array8 #| local.get 0) +///| +extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array16 + #| local.get 0) + ///| extern "wasm" fn mbt_ffi_store16(offset : Int, value : Int) = #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store16) ///| -extern "wasm" fn mbt_ffi_load16_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load16_u) +extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) ///| -#owned(str) -extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = - #|(func (param i32) (result i32) local.get 0) +extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = + #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) ///| -extern "wasm" fn mbt_ffi_load16(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load16_s) +extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) ///| extern "wasm" fn mbt_ffi_storef32(offset : Int, value : Float) = #|(func (param i32) (param f32) local.get 0 local.get 1 f32.store) -///| -#owned(bytes) -extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = - #|(func (param i32) (result i32) local.get 0) - -///| -extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load) - -///| -extern "wasm" fn mbt_ffi_extend8(value : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.extend8_s) - ///| extern "wasm" fn mbt_ffi_storef64(offset : Int, value : Double) = #|(func (param i32) (param f64) local.get 0 local.get 1 f64.store) ///| -extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = - #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) +#owned(str) +extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = + #|(func (param i32) (result i32) local.get 0) diff --git a/sdks/moonbit/golem_sdk/interface/golem/quota/types/ffi.mbt b/sdks/moonbit/golem_sdk/interface/golem/quota/types/ffi.mbt index 67c8a3662b..9f22089070 100644 --- a/sdks/moonbit/golem_sdk/interface/golem/quota/types/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/golem/quota/types/ffi.mbt @@ -18,6 +18,10 @@ fn wasmImportSplit(p0 : Int, p1 : Int64) -> Int = "golem:quota/types@1.5.0" "spl ///| fn wasmImportMerge(p0 : Int, p1 : Int) = "golem:quota/types@1.5.0" "merge" +///| +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) + ///| extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load) @@ -26,6 +30,10 @@ extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = #|(func (param i32) (result i64) local.get 0 i64.load) +///| +extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_u) + ///| extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #|(func (param i32) (result i32) (local i32) @@ -37,11 +45,3 @@ extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #owned(str) extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = #|(func (param i32) (result i32) local.get 0) - -///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) - -///| -extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load8_u) diff --git a/sdks/moonbit/golem_sdk/interface/golem/rdbms/ignite2/ffi.mbt b/sdks/moonbit/golem_sdk/interface/golem/rdbms/ignite2/ffi.mbt index e2977134b3..c3bd3a3151 100644 --- a/sdks/moonbit/golem_sdk/interface/golem/rdbms/ignite2/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/golem/rdbms/ignite2/ffi.mbt @@ -88,61 +88,53 @@ fn wasmImportMethodDbConnectionExecute( fn wasmImportMethodDbConnectionBeginTransaction(p0 : Int, p1 : Int) = "golem:rdbms/ignite2@1.5.0" "[method]db-connection.begin-transaction" ///| -extern "wasm" fn mbt_ffi_store16(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store16) +#owned(bytes) +extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = + #|(func (param i32) (result i32) local.get 0) ///| -extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) +extern "wasm" fn mbt_ffi_extend16(value : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.extend16_s) ///| -extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load) +extern "wasm" fn mbt_ffi_extend8(value : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.extend8_s) ///| -extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) + +///| +extern "wasm" fn mbt_ffi_load16(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load16_s) ///| extern "wasm" fn mbt_ffi_load16_u(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load16_u) ///| -extern "wasm" fn mbt_ffi_storef32(offset : Int, value : Float) = - #|(func (param i32) (param f32) local.get 0 local.get 1 f32.store) +extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load) ///| extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = #|(func (param i32) (result i64) local.get 0 i64.load) -///| -#owned(str) -extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = - #|(func (param i32) (result i32) local.get 0) - -///| -extern "wasm" fn mbt_ffi_loadf32(offset : Int) -> Float = - #|(func (param i32) (result f32) local.get 0 f32.load) - ///| extern "wasm" fn mbt_ffi_load8(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load8_s) ///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) - -///| -extern "wasm" fn mbt_ffi_load16(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load16_s) +extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_u) ///| -extern "wasm" fn mbt_ffi_extend8(value : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.extend8_s) +extern "wasm" fn mbt_ffi_loadf32(offset : Int) -> Float = + #|(func (param i32) (result f32) local.get 0 f32.load) ///| -extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = - #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) +extern "wasm" fn mbt_ffi_loadf64(offset : Int) -> Double = + #|(func (param i32) (result f64) local.get 0 f64.load) ///| extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = @@ -151,11 +143,6 @@ extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #| local.tee 1 i32.const 0 call $moonbit.init_array8 #| local.get 1) -///| -#owned(bytes) -extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = - #|(func (param i32) (result i32) local.get 0) - ///| extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = #|(func (param i32) (param i32) (result i32) @@ -164,24 +151,37 @@ extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = #| local.get 0) ///| -extern "wasm" fn mbt_ffi_loadf64(offset : Int) -> Double = - #|(func (param i32) (result f64) local.get 0 f64.load) +extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array16 + #| local.get 0) ///| -extern "wasm" fn mbt_ffi_storef64(offset : Int, value : Double) = - #|(func (param i32) (param f64) local.get 0 local.get 1 f64.store) +extern "wasm" fn mbt_ffi_store16(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store16) ///| -extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load8_u) +extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) ///| -extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = - #|(func (param i32) (param i32) (result i32) - #| local.get 0 - #| local.get 1 call $moonbit.init_array16 - #| local.get 0) +extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = + #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) ///| -extern "wasm" fn mbt_ffi_extend16(value : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.extend16_s) +extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) + +///| +extern "wasm" fn mbt_ffi_storef32(offset : Int, value : Float) = + #|(func (param i32) (param f32) local.get 0 local.get 1 f32.store) + +///| +extern "wasm" fn mbt_ffi_storef64(offset : Int, value : Double) = + #|(func (param i32) (param f64) local.get 0 local.get 1 f64.store) + +///| +#owned(str) +extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = + #|(func (param i32) (result i32) local.get 0) diff --git a/sdks/moonbit/golem_sdk/interface/golem/rdbms/mysql/ffi.mbt b/sdks/moonbit/golem_sdk/interface/golem/rdbms/mysql/ffi.mbt index efa8986949..b092bde89d 100644 --- a/sdks/moonbit/golem_sdk/interface/golem/rdbms/mysql/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/golem/rdbms/mysql/ffi.mbt @@ -93,66 +93,56 @@ extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = #|(func (param i32) (result i32) local.get 0) ///| -#owned(str) -extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = - #|(func (param i32) (result i32) local.get 0) - -///| -extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) +extern "wasm" fn mbt_ffi_extend16(value : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.extend16_s) ///| -extern "wasm" fn mbt_ffi_storef64(offset : Int, value : Double) = - #|(func (param i32) (param f64) local.get 0 local.get 1 f64.store) +extern "wasm" fn mbt_ffi_extend8(value : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.extend8_s) ///| extern "wasm" fn mbt_ffi_free(position : Int) = #|(func (param i32) local.get 0 call $moonbit.decref) ///| -extern "wasm" fn mbt_ffi_extend16(value : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.extend16_s) +extern "wasm" fn mbt_ffi_load16(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load16_s) ///| -extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = - #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) +extern "wasm" fn mbt_ffi_load16_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load16_u) ///| extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load) ///| -extern "wasm" fn mbt_ffi_loadf32(offset : Int) -> Float = - #|(func (param i32) (result f32) local.get 0 f32.load) - -///| -extern "wasm" fn mbt_ffi_extend8(value : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.extend8_s) - -///| -extern "wasm" fn mbt_ffi_store16(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store16) - -///| -extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) +extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = + #|(func (param i32) (result i64) local.get 0 i64.load) ///| extern "wasm" fn mbt_ffi_load8(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load8_s) ///| -extern "wasm" fn mbt_ffi_storef32(offset : Int, value : Float) = - #|(func (param i32) (param f32) local.get 0 local.get 1 f32.store) +extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_u) ///| -extern "wasm" fn mbt_ffi_load16_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load16_u) +extern "wasm" fn mbt_ffi_loadf32(offset : Int) -> Float = + #|(func (param i32) (result f32) local.get 0 f32.load) ///| extern "wasm" fn mbt_ffi_loadf64(offset : Int) -> Double = #|(func (param i32) (result f64) local.get 0 f64.load) +///| +extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = + #|(func (param i32) (result i32) (local i32) + #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc + #| local.tee 1 i32.const 0 call $moonbit.init_array8 + #| local.get 1) + ///| extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = #|(func (param i32) (param i32) (result i32) @@ -168,20 +158,30 @@ extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = #| local.get 0) ///| -extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = - #|(func (param i32) (result i32) (local i32) - #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc - #| local.tee 1 i32.const 0 call $moonbit.init_array8 - #| local.get 1) +extern "wasm" fn mbt_ffi_store16(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store16) ///| -extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = - #|(func (param i32) (result i64) local.get 0 i64.load) +extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) ///| -extern "wasm" fn mbt_ffi_load16(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load16_s) +extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = + #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) ///| -extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load8_u) +extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) + +///| +extern "wasm" fn mbt_ffi_storef32(offset : Int, value : Float) = + #|(func (param i32) (param f32) local.get 0 local.get 1 f32.store) + +///| +extern "wasm" fn mbt_ffi_storef64(offset : Int, value : Double) = + #|(func (param i32) (param f64) local.get 0 local.get 1 f64.store) + +///| +#owned(str) +extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = + #|(func (param i32) (result i32) local.get 0) diff --git a/sdks/moonbit/golem_sdk/interface/golem/rdbms/postgres/ffi.mbt b/sdks/moonbit/golem_sdk/interface/golem/rdbms/postgres/ffi.mbt index 5fb7c56c31..5f8c641707 100644 --- a/sdks/moonbit/golem_sdk/interface/golem/rdbms/postgres/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/golem/rdbms/postgres/ffi.mbt @@ -112,29 +112,30 @@ fn wasmImportMethodDbTransactionCommit(p0 : Int, p1 : Int) = "golem:rdbms/postgr fn wasmImportMethodDbTransactionRollback(p0 : Int, p1 : Int) = "golem:rdbms/postgres@1.5.0" "[method]db-transaction.rollback" ///| -extern "wasm" fn mbt_ffi_loadf64(offset : Int) -> Double = - #|(func (param i32) (result f64) local.get 0 f64.load) +#owned(bytes) +extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = + #|(func (param i32) (result i32) local.get 0) ///| -#owned(array) -extern "wasm" fn mbt_ffi_float_array2ptr(array : FixedArray[Float]) -> Int = - #|(func (param i32) (result i32) local.get 0) +extern "wasm" fn mbt_ffi_extend16(value : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.extend16_s) ///| -extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = - #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) +extern "wasm" fn mbt_ffi_extend8(value : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.extend8_s) ///| -extern "wasm" fn mbt_ffi_loadf32(offset : Int) -> Float = - #|(func (param i32) (result f32) local.get 0 f32.load) +#owned(array) +extern "wasm" fn mbt_ffi_float_array2ptr(array : FixedArray[Float]) -> Int = + #|(func (param i32) (result i32) local.get 0) ///| -extern "wasm" fn mbt_ffi_storef32(offset : Int, value : Float) = - #|(func (param i32) (param f32) local.get 0 local.get 1 f32.store) +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) ///| -#owned(bytes) -extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = +#owned(array) +extern "wasm" fn mbt_ffi_int_array2ptr(array : FixedArray[Int]) -> Int = #|(func (param i32) (result i32) local.get 0) ///| @@ -142,58 +143,56 @@ extern "wasm" fn mbt_ffi_load16(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load16_s) ///| -extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load) +extern "wasm" fn mbt_ffi_load16_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load16_u) ///| -extern "wasm" fn mbt_ffi_ptr2float_array( - ptr : Int, - len : Int, -) -> FixedArray[Float] = - #|(func (param i32) (param i32) (result i32) - #| local.get 0 - #| local.get 1 call $moonbit.init_array32 - #| local.get 0) +extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load) ///| -extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = - #|(func (param i32) (param i32) (result i32) - #| local.get 0 - #| local.get 1 call $moonbit.init_array16 - #| local.get 0) +extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = + #|(func (param i32) (result i64) local.get 0 i64.load) ///| -extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) +extern "wasm" fn mbt_ffi_load8(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_s) ///| -extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = - #|(func (param i32) (param i32) (result i32) - #| local.get 0 - #| local.get 1 call $moonbit.init_array8 - #| local.get 0) +extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_u) ///| -extern "wasm" fn mbt_ffi_extend16(value : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.extend16_s) +extern "wasm" fn mbt_ffi_loadf32(offset : Int) -> Float = + #|(func (param i32) (result f32) local.get 0 f32.load) ///| -#owned(str) -extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = - #|(func (param i32) (result i32) local.get 0) +extern "wasm" fn mbt_ffi_loadf64(offset : Int) -> Double = + #|(func (param i32) (result f64) local.get 0 f64.load) ///| -#owned(array) -extern "wasm" fn mbt_ffi_int_array2ptr(array : FixedArray[Int]) -> Int = - #|(func (param i32) (result i32) local.get 0) +extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = + #|(func (param i32) (result i32) (local i32) + #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc + #| local.tee 1 i32.const 0 call $moonbit.init_array8 + #| local.get 1) ///| -extern "wasm" fn mbt_ffi_storef64(offset : Int, value : Double) = - #|(func (param i32) (param f64) local.get 0 local.get 1 f64.store) +extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array8 + #| local.get 0) ///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) +extern "wasm" fn mbt_ffi_ptr2float_array( + ptr : Int, + len : Int, +) -> FixedArray[Float] = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array32 + #| local.get 0) ///| extern "wasm" fn mbt_ffi_ptr2int_array(ptr : Int, len : Int) -> FixedArray[Int] = @@ -202,37 +201,38 @@ extern "wasm" fn mbt_ffi_ptr2int_array(ptr : Int, len : Int) -> FixedArray[Int] #| local.get 1 call $moonbit.init_array32 #| local.get 0) +///| +extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array16 + #| local.get 0) + ///| extern "wasm" fn mbt_ffi_store16(offset : Int, value : Int) = #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store16) ///| -extern "wasm" fn mbt_ffi_load8(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load8_s) +extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) ///| -extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = - #|(func (param i32) (result i32) (local i32) - #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc - #| local.tee 1 i32.const 0 call $moonbit.init_array8 - #| local.get 1) +extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = + #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) ///| extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) ///| -extern "wasm" fn mbt_ffi_extend8(value : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.extend8_s) - -///| -extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = - #|(func (param i32) (result i64) local.get 0 i64.load) +extern "wasm" fn mbt_ffi_storef32(offset : Int, value : Float) = + #|(func (param i32) (param f32) local.get 0 local.get 1 f32.store) ///| -extern "wasm" fn mbt_ffi_load16_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load16_u) +extern "wasm" fn mbt_ffi_storef64(offset : Int, value : Double) = + #|(func (param i32) (param f64) local.get 0 local.get 1 f64.store) ///| -extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load8_u) +#owned(str) +extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = + #|(func (param i32) (result i32) local.get 0) diff --git a/sdks/moonbit/golem_sdk/interface/golem/secrets/reveal/ffi.mbt b/sdks/moonbit/golem_sdk/interface/golem/secrets/reveal/ffi.mbt index 3ef08c17b8..cff3d43f7a 100644 --- a/sdks/moonbit/golem_sdk/interface/golem/secrets/reveal/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/golem/secrets/reveal/ffi.mbt @@ -12,75 +12,75 @@ fn wasmImportReveal( ) = "golem:secrets/reveal@0.1.0" "reveal" ///| -extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = - #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) - -///| -extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) ///| -extern "wasm" fn mbt_ffi_loadf32(offset : Int) -> Float = - #|(func (param i32) (result f32) local.get 0 f32.load) +extern "wasm" fn mbt_ffi_load16(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load16_s) ///| -extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = - #|(func (param i32) (result i32) (local i32) - #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc - #| local.tee 1 i32.const 0 call $moonbit.init_array8 - #| local.get 1) +extern "wasm" fn mbt_ffi_load16_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load16_u) ///| -extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = - #|(func (param i32) (param i32) (result i32) - #| local.get 0 - #| local.get 1 call $moonbit.init_array16 - #| local.get 0) +extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load) ///| -#owned(str) -extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = - #|(func (param i32) (result i32) local.get 0) +extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = + #|(func (param i32) (result i64) local.get 0 i64.load) ///| -extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = - #|(func (param i32) (param i32) (result i32) - #| local.get 0 - #| local.get 1 call $moonbit.init_array8 - #| local.get 0) +extern "wasm" fn mbt_ffi_load8(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_s) ///| extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load8_u) ///| -extern "wasm" fn mbt_ffi_load16(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load16_s) +extern "wasm" fn mbt_ffi_loadf32(offset : Int) -> Float = + #|(func (param i32) (result f32) local.get 0 f32.load) ///| extern "wasm" fn mbt_ffi_loadf64(offset : Int) -> Double = #|(func (param i32) (result f64) local.get 0 f64.load) ///| -extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = - #|(func (param i32) (result i64) local.get 0 i64.load) +extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = + #|(func (param i32) (result i32) (local i32) + #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc + #| local.tee 1 i32.const 0 call $moonbit.init_array8 + #| local.get 1) ///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) +extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array8 + #| local.get 0) ///| -extern "wasm" fn mbt_ffi_load8(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load8_s) +extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array16 + #| local.get 0) ///| -extern "wasm" fn mbt_ffi_load16_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load16_u) +extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) ///| -extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load) +extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = + #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) ///| extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) + +///| +#owned(str) +extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = + #|(func (param i32) (result i32) local.get 0) diff --git a/sdks/moonbit/golem_sdk/interface/golem/secrets/types/ffi.mbt b/sdks/moonbit/golem_sdk/interface/golem/secrets/types/ffi.mbt index 0aa31c0662..349ba8dede 100644 --- a/sdks/moonbit/golem_sdk/interface/golem/secrets/types/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/golem/secrets/types/ffi.mbt @@ -6,6 +6,10 @@ fn wasmImportId(p0 : Int, p1 : Int) = "golem:secrets/types@0.1.0" "id" ///| fn wasmImportMetadata(p0 : Int, p1 : Int) = "golem:secrets/types@0.1.0" "metadata" +///| +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) + ///| extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load) @@ -14,6 +18,10 @@ extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = #|(func (param i32) (result i64) local.get 0 i64.load) +///| +extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_u) + ///| extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #|(func (param i32) (result i32) (local i32) @@ -28,17 +36,9 @@ extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = #| local.get 1 call $moonbit.init_array8 #| local.get 0) -///| -extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load8_u) - ///| extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = #|(func (param i32) (param i32) (result i32) #| local.get 0 #| local.get 1 call $moonbit.init_array16 #| local.get 0) - -///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) diff --git a/sdks/moonbit/golem_sdk/interface/golem/tool/common/ffi.mbt b/sdks/moonbit/golem_sdk/interface/golem/tool/common/ffi.mbt index 01e5518ad5..fa922a4fae 100644 --- a/sdks/moonbit/golem_sdk/interface/golem/tool/common/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/golem/tool/common/ffi.mbt @@ -1 +1,882 @@ // Generated by `wit-bindgen` 0.59.0. DO NOT EDIT! + +///| +fn wasmImportResourceDropUnderlyingTool(resource : Int) = "golem:tool/common@0.1.0" "[resource-drop]underlying-tool" + +///| +fn wasmImportMethodUnderlyingToolInvoke(p0 : Int, p1 : Int) -> Int = "golem:tool/common@0.1.0" "[async-lower][method]underlying-tool.invoke" + +///| +fn wasmImportGolemToolCommon010MethodUnderlyingToolInvokeStream0Read( + handle : Int, + buffer_ptr : Int, + length : Int, +) -> Int = "golem:tool/common@0.1.0" "[async-lower][stream-read-0][method]underlying-tool.invoke" + +///| +fn wasmImportGolemToolCommon010MethodUnderlyingToolInvokeStream0CancelRead( + handle : Int, +) -> Int = "golem:tool/common@0.1.0" "[stream-cancel-read-0][method]underlying-tool.invoke" + +///| +fn wasmImportGolemToolCommon010MethodUnderlyingToolInvokeStream0DropReadable( + handle : Int, +) = "golem:tool/common@0.1.0" "[stream-drop-readable-0][method]underlying-tool.invoke" + +///| +fn wasmImportGolemToolCommon010MethodUnderlyingToolInvokeStream0New() -> UInt64 = "golem:tool/common@0.1.0" "[stream-new-0][method]underlying-tool.invoke" + +///| +fn wasmImportGolemToolCommon010MethodUnderlyingToolInvokeStream0Write( + handle : Int, + buffer_ptr : Int, + length : Int, +) -> Int = "golem:tool/common@0.1.0" "[async-lower][stream-write-0][method]underlying-tool.invoke" + +///| +fn wasmImportGolemToolCommon010MethodUnderlyingToolInvokeStream0CancelWrite( + handle : Int, +) -> Int = "golem:tool/common@0.1.0" "[stream-cancel-write-0][method]underlying-tool.invoke" + +///| +fn wasmImportGolemToolCommon010MethodUnderlyingToolInvokeStream0DropWritable( + handle : Int, +) = "golem:tool/common@0.1.0" "[stream-drop-writable-0][method]underlying-tool.invoke" + +///| +fn wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0Malloc( + length : Int, +) -> Int { + let ptr = mbt_ffi_malloc(1 * length) + ptr +} + +///| +fn wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0Commit( + ptr : Int, + start : Int, + length : Int, +) -> Unit { + ignore((ptr, start, length)) +} + +///| +fn wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0Reject( + ptr : Int, + start : Int, + length : Int, +) -> Unit { + ignore((ptr, start, length)) +} + +///| +fn wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0Lower( + value : Byte, + ptr : Int, +) -> Unit { + mbt_ffi_store8(ptr + 0, value.to_int()) +} + +///| +fn wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0ListLift( + ptr : Int, + length : Int, +) -> FixedArray[Byte] { + mbt_ffi_ptr2bytes(ptr, length) +} + +///| +priv struct WasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamSource { + handle : Int + mut closed : Bool + mut reading : Bool + mut read_task : Int + mut read_buffer : Int + mut read_discarding : Bool + mut read_cleanup_done : Bool + read_cleanup : @async-core.CondVar +} + +///| +fn WasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamSource::finish_read( + self : WasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamSource, +) -> Unit { + self.reading = false + self.read_task = 0 + self.read_buffer = 0 + self.read_discarding = false + // Keep completion latched until a later read starts so every waiter woken + // by the broadcast can observe it. +} + +///| +async fn WasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamSource::wait_for_read_cleanup( + self : WasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamSource, +) -> Unit noraise { + @async-core.protect_from_cancel( + () => { + while !self.read_cleanup_done { + self.read_cleanup.wait() + } + }, + resume_on_cancel=true, + ) catch { + _ => () + } +} + +///| +async fn WasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamSource::cancel_active_read( + self : WasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamSource, +) -> Unit noraise { + if !self.reading { + return + } + if self.read_discarding { + self.wait_for_read_cleanup() + return + } + self.read_discarding = true + let progress_ref = Ref(0) + @async-core.protect_from_cancel( + () => { + progress_ref.val = @async-core.cancel_stream_read( + self.read_task, + self.handle, + () => { + wasmImportGolemToolCommon010MethodUnderlyingToolInvokeStream0CancelRead( + self.handle, + ) + }, + ) + }, + resume_on_cancel=true, + ) catch { + _ => () + } + let progress = progress_ref.val + if progress > 0 && self.read_buffer != 0 { + wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0Reject( + self.read_buffer, + 0, + progress, + ) + } + self.read_cleanup_done = true + self.read_cleanup.broadcast() +} + +///| +async fn WasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamSource::close( + self : WasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamSource, +) -> Unit noraise { + if self.closed { + return + } + if self.reading { + self.cancel_active_read() + } + self.closed = true + wasmImportGolemToolCommon010MethodUnderlyingToolInvokeStream0DropReadable( + self.handle, + ) +} + +///| +fn WasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamSource::close_sync( + self : WasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamSource, +) -> Unit { + if self.closed || self.reading { + return + } + + if wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamRejectPrepared( + self.handle, + ) { + self.closed = true + return + } + + self.closed = true + wasmImportGolemToolCommon010MethodUnderlyingToolInvokeStream0DropReadable( + self.handle, + ) +} + +///| +async fn WasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamSource::read( + self : WasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamSource, + count : Int, +) -> FixedArray[Byte]? { + if self.closed { + return None + } + if count <= 0 { + return Some([]) + } + if self.reading { + raise @async-core.EndpointBusy::Read + } + // `Stream.read` promises at most `count`; bound one canonical allocation. + let read_count = if count < 64 { count } else { 64 } + let ptr = wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0Malloc( + read_count, + ) + let mut owns_buffer = false + defer (if !owns_buffer { mbt_ffi_free(ptr) }) + self.reading = true + self.read_task = @async-core.current_component_task_token() + self.read_buffer = ptr + self.read_discarding = false + self.read_cleanup_done = false + let (progress, end) = @async-core.suspend_for_stream_read( + self.handle, + wasmImportGolemToolCommon010MethodUnderlyingToolInvokeStream0Read( + self.handle, + ptr, + read_count, + ), + ) catch { + err => { + if self.read_discarding { + self.wait_for_read_cleanup() + self.finish_read() + return None + } + if err is @async-core.Cancelled::Cancelled { + self.cancel_active_read() + if !self.closed { + self.closed = true + wasmImportGolemToolCommon010MethodUnderlyingToolInvokeStream0DropReadable( + self.handle, + ) + } + } + self.finish_read() + raise err + } + } + if self.read_discarding { + self.wait_for_read_cleanup() + self.finish_read() + return None + } + if progress == 0 { + self.finish_read() + if end { + self.close() + return None + } + return Some([]) + } + let values = wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0ListLift( + ptr, progress, + ) + owns_buffer = true + self.finish_read() + if end { + self.close() + } + Some(values) +} + +///| +fn wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamLift( + handle : Int, +) -> @async-core.Stream[Byte] { + let source = WasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamSource::{ + handle, + closed: false, + reading: false, + read_task: 0, + read_buffer: 0, + read_discarding: false, + read_cleanup_done: false, + read_cleanup: CondVar(), + } + @async-core.Stream::from_source( + count => source.read(count), + () => source.close(), + () => source.close_sync(), + ) +} + +///| +priv struct WasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamProducer { + stream : @async-core.Stream[Byte] + writer : Int +} + +///| +let wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamProducers : Map[ + Int, + WasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamProducer, +] = Map([]) + +///| +fn wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamRejectPrepared( + handle : Int, +) -> Bool { + guard wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamProducers.get( + handle, + ) + is Some(prepared) else { + return false + } + wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamProducers.remove( + handle, + ) + let writer = prepared.writer + wasmImportGolemToolCommon010MethodUnderlyingToolInvokeStream0DropReadable( + handle, + ) + wasmImportGolemToolCommon010MethodUnderlyingToolInvokeStream0DropWritable( + writer, + ) + @async-core.spawn_component_task_current(async fn() { + @async-core.protect_from_cancel( + () => { + prepared.stream.reject((value : Byte) => { + let ptr = wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0Malloc( + 1, + ) + wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0Lower( + value, ptr, + ) + wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0Reject( + ptr, 0, 1, + ) + mbt_ffi_free(ptr) + }) + }, + resume_on_cancel=true, + ) catch { + _ => () + } + }) + true +} + +///| +fn wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamCommit( + handle : Int, +) -> Unit { + guard wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamProducers.get( + handle, + ) + is Some(prepared) else { + return + } + wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamProducers.remove( + handle, + ) + let stream = prepared.stream + let writer = prepared.writer + if !@async-core.has_component_task_scope() { + abort("component stream producer requires an async task scope") + } + let producer = stream.take_producer() + @async-core.spawn_component_task_current(async fn() { + let writer_closed = Ref(false) + let writer_lock = @async-core.Mutex() + let close_writer = fn() -> Unit { + if !writer_closed.val { + writer_closed.val = true + wasmImportGolemToolCommon010MethodUnderlyingToolInvokeStream0DropWritable( + writer, + ) + } + } + let close_writer_serialized = async fn() -> Unit { + writer_lock.acquire() + defer writer_lock.release() + close_writer() + } + let cleanup_value = fn(value : Byte) -> Unit { + let ptr = wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0Malloc(1) + wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0Lower(value, ptr) + wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0Reject(ptr, 0, 1) + mbt_ffi_free(ptr) + } + let sink = @async-core.Sink::from_callbacks( + (data : ArrayView[Byte]) => { + writer_lock.acquire() + defer writer_lock.release() + if writer_closed.val || data.length() == 0 { + return 0 + } + let data_len = if data.length() < 64 { data.length() } else { 64 } + let ptr = wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0Malloc( + data_len, + ) + for i in 0.. Unit { + wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0Commit( + ptr, 0, transferred, + ) + if transferred < data_len { + wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0Reject( + ptr, + transferred, + data_len - transferred, + ) + } + mbt_ffi_free(ptr) + } + let mut total = 0 + let mut dropped = false + while total < data_len { + let (progress, end) = @async-core.suspend_for_stream_write( + writer, + wasmImportGolemToolCommon010MethodUnderlyingToolInvokeStream0Write( + writer, + ptr + total * 1, + data_len - total, + ), + ) catch { + _ => { + total = total + + @async-core.cancel_stream_write(writer, () => { + wasmImportGolemToolCommon010MethodUnderlyingToolInvokeStream0CancelWrite( + writer, + ) + }) + settle_staging(total) + close_writer() + return data_len + } + } + total = total + progress + if end { + dropped = true + break + } + } + settle_staging(total) + if dropped { + close_writer() + } + // The canonical writer accepted `total`; generated cleanup + // consumed the rest of this staging window. + data_len + }, + () => close_writer_serialized(), + () => !writer_closed.val, + Some(cleanup_value), + ) + let relay_source = producer is None + let run_producer = async fn() -> Unit { + match producer { + Some(producer) => { + producer(sink) + sink.close() + } + None => + for ;; { + match stream.read(64) { + Some(data) => + if !sink.write_all(data[:]) { + stream.reject(cleanup_value) + return + } + None => { + sink.close() + return + } + } + } + } + } + run_producer() catch { + _ => + if relay_source { + @async-core.protect_from_cancel( + () => stream.reject(cleanup_value), + resume_on_cancel=true, + ) catch { + _ => () + } + } + } + // A retained Sink may still own an in-flight canonical write after its + // producer returns. Do not drop the writable endpoint until that write + // has reached a terminal event and released its staging buffer. + @async-core.protect_from_cancel( + () => close_writer_serialized(), + resume_on_cancel=true, + ) + }) +} + +///| +fn wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamLower( + stream : @async-core.Stream[Byte], +) -> Int { + if !@async-core.has_component_task_scope() { + abort("component stream producer requires an async task scope") + } + let pair = wasmImportGolemToolCommon010MethodUnderlyingToolInvokeStream0New() + let reader = pair.to_int() + let writer = (pair >> 32).to_int() + wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamProducers.set( + reader, + { stream, writer }, + ) + reader +} + +///| +fn wasmImportGolemToolCommon010MethodUnderlyingToolInvokeStream1Read( + handle : Int, + buffer_ptr : Int, + length : Int, +) -> Int = "golem:tool/common@0.1.0" "[async-lower][stream-read-0][method]underlying-tool.invoke" + +///| +fn wasmImportGolemToolCommon010MethodUnderlyingToolInvokeStream1CancelRead( + handle : Int, +) -> Int = "golem:tool/common@0.1.0" "[stream-cancel-read-0][method]underlying-tool.invoke" + +///| +fn wasmImportGolemToolCommon010MethodUnderlyingToolInvokeStream1DropReadable( + handle : Int, +) = "golem:tool/common@0.1.0" "[stream-drop-readable-0][method]underlying-tool.invoke" + +///| +fn wasmGolemToolCommon010MethodUnderlyingToolInvokeStream1Malloc( + length : Int, +) -> Int { + let ptr = mbt_ffi_malloc(1 * length) + ptr +} + +///| +fn wasmGolemToolCommon010MethodUnderlyingToolInvokeStream1Reject( + ptr : Int, + start : Int, + length : Int, +) -> Unit { + ignore((ptr, start, length)) +} + +///| +fn wasmGolemToolCommon010MethodUnderlyingToolInvokeStream1ListLift( + ptr : Int, + length : Int, +) -> FixedArray[Byte] { + mbt_ffi_ptr2bytes(ptr, length) +} + +///| +priv struct WasmGolemToolCommon010MethodUnderlyingToolInvokeStream1StreamSource { + handle : Int + mut closed : Bool + mut reading : Bool + mut read_task : Int + mut read_buffer : Int + mut read_discarding : Bool + mut read_cleanup_done : Bool + read_cleanup : @async-core.CondVar +} + +///| +fn WasmGolemToolCommon010MethodUnderlyingToolInvokeStream1StreamSource::finish_read( + self : WasmGolemToolCommon010MethodUnderlyingToolInvokeStream1StreamSource, +) -> Unit { + self.reading = false + self.read_task = 0 + self.read_buffer = 0 + self.read_discarding = false + // Keep completion latched until a later read starts so every waiter woken + // by the broadcast can observe it. +} + +///| +async fn WasmGolemToolCommon010MethodUnderlyingToolInvokeStream1StreamSource::wait_for_read_cleanup( + self : WasmGolemToolCommon010MethodUnderlyingToolInvokeStream1StreamSource, +) -> Unit noraise { + @async-core.protect_from_cancel( + () => { + while !self.read_cleanup_done { + self.read_cleanup.wait() + } + }, + resume_on_cancel=true, + ) catch { + _ => () + } +} + +///| +async fn WasmGolemToolCommon010MethodUnderlyingToolInvokeStream1StreamSource::cancel_active_read( + self : WasmGolemToolCommon010MethodUnderlyingToolInvokeStream1StreamSource, +) -> Unit noraise { + if !self.reading { + return + } + if self.read_discarding { + self.wait_for_read_cleanup() + return + } + self.read_discarding = true + let progress_ref = Ref(0) + @async-core.protect_from_cancel( + () => { + progress_ref.val = @async-core.cancel_stream_read( + self.read_task, + self.handle, + () => { + wasmImportGolemToolCommon010MethodUnderlyingToolInvokeStream1CancelRead( + self.handle, + ) + }, + ) + }, + resume_on_cancel=true, + ) catch { + _ => () + } + let progress = progress_ref.val + if progress > 0 && self.read_buffer != 0 { + wasmGolemToolCommon010MethodUnderlyingToolInvokeStream1Reject( + self.read_buffer, + 0, + progress, + ) + } + self.read_cleanup_done = true + self.read_cleanup.broadcast() +} + +///| +async fn WasmGolemToolCommon010MethodUnderlyingToolInvokeStream1StreamSource::close( + self : WasmGolemToolCommon010MethodUnderlyingToolInvokeStream1StreamSource, +) -> Unit noraise { + if self.closed { + return + } + if self.reading { + self.cancel_active_read() + } + self.closed = true + wasmImportGolemToolCommon010MethodUnderlyingToolInvokeStream1DropReadable( + self.handle, + ) +} + +///| +fn WasmGolemToolCommon010MethodUnderlyingToolInvokeStream1StreamSource::close_sync( + self : WasmGolemToolCommon010MethodUnderlyingToolInvokeStream1StreamSource, +) -> Unit { + if self.closed || self.reading { + return + } + + self.closed = true + wasmImportGolemToolCommon010MethodUnderlyingToolInvokeStream1DropReadable( + self.handle, + ) +} + +///| +async fn WasmGolemToolCommon010MethodUnderlyingToolInvokeStream1StreamSource::read( + self : WasmGolemToolCommon010MethodUnderlyingToolInvokeStream1StreamSource, + count : Int, +) -> FixedArray[Byte]? { + if self.closed { + return None + } + if count <= 0 { + return Some([]) + } + if self.reading { + raise @async-core.EndpointBusy::Read + } + // `Stream.read` promises at most `count`; bound one canonical allocation. + let read_count = if count < 64 { count } else { 64 } + let ptr = wasmGolemToolCommon010MethodUnderlyingToolInvokeStream1Malloc( + read_count, + ) + let mut owns_buffer = false + defer (if !owns_buffer { mbt_ffi_free(ptr) }) + self.reading = true + self.read_task = @async-core.current_component_task_token() + self.read_buffer = ptr + self.read_discarding = false + self.read_cleanup_done = false + let (progress, end) = @async-core.suspend_for_stream_read( + self.handle, + wasmImportGolemToolCommon010MethodUnderlyingToolInvokeStream1Read( + self.handle, + ptr, + read_count, + ), + ) catch { + err => { + if self.read_discarding { + self.wait_for_read_cleanup() + self.finish_read() + return None + } + if err is @async-core.Cancelled::Cancelled { + self.cancel_active_read() + if !self.closed { + self.closed = true + wasmImportGolemToolCommon010MethodUnderlyingToolInvokeStream1DropReadable( + self.handle, + ) + } + } + self.finish_read() + raise err + } + } + if self.read_discarding { + self.wait_for_read_cleanup() + self.finish_read() + return None + } + if progress == 0 { + self.finish_read() + if end { + self.close() + return None + } + return Some([]) + } + let values = wasmGolemToolCommon010MethodUnderlyingToolInvokeStream1ListLift( + ptr, progress, + ) + owns_buffer = true + self.finish_read() + if end { + self.close() + } + Some(values) +} + +///| +fn wasmGolemToolCommon010MethodUnderlyingToolInvokeStream1StreamLift( + handle : Int, +) -> @async-core.Stream[Byte] { + let source = WasmGolemToolCommon010MethodUnderlyingToolInvokeStream1StreamSource::{ + handle, + closed: false, + reading: false, + read_task: 0, + read_buffer: 0, + read_discarding: false, + read_cleanup_done: false, + read_cleanup: CondVar(), + } + @async-core.Stream::from_source( + count => source.read(count), + () => source.close(), + () => source.close_sync(), + ) +} + +///| +#owned(bytes) +extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = + #|(func (param i32) (result i32) local.get 0) + +///| +extern "wasm" fn mbt_ffi_extend16(value : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.extend16_s) + +///| +extern "wasm" fn mbt_ffi_extend8(value : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.extend8_s) + +///| +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) + +///| +extern "wasm" fn mbt_ffi_load16(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load16_s) + +///| +extern "wasm" fn mbt_ffi_load16_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load16_u) + +///| +extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load) + +///| +extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = + #|(func (param i32) (result i64) local.get 0 i64.load) + +///| +extern "wasm" fn mbt_ffi_load8(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_s) + +///| +extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_u) + +///| +extern "wasm" fn mbt_ffi_loadf32(offset : Int) -> Float = + #|(func (param i32) (result f32) local.get 0 f32.load) + +///| +extern "wasm" fn mbt_ffi_loadf64(offset : Int) -> Double = + #|(func (param i32) (result f64) local.get 0 f64.load) + +///| +extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = + #|(func (param i32) (result i32) (local i32) + #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc + #| local.tee 1 i32.const 0 call $moonbit.init_array8 + #| local.get 1) + +///| +extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array8 + #| local.get 0) + +///| +extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array16 + #| local.get 0) + +///| +extern "wasm" fn mbt_ffi_store16(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store16) + +///| +extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) + +///| +extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = + #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) + +///| +extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) + +///| +extern "wasm" fn mbt_ffi_storef32(offset : Int, value : Float) = + #|(func (param i32) (param f32) local.get 0 local.get 1 f32.store) + +///| +extern "wasm" fn mbt_ffi_storef64(offset : Int, value : Double) = + #|(func (param i32) (param f64) local.get 0 local.get 1 f64.store) + +///| +#owned(str) +extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = + #|(func (param i32) (result i32) local.get 0) diff --git a/sdks/moonbit/golem_sdk/interface/golem/tool/common/pkg.generated.mbti b/sdks/moonbit/golem_sdk/interface/golem/tool/common/pkg.generated.mbti index 91d8739184..33abdb927f 100644 --- a/sdks/moonbit/golem_sdk/interface/golem/tool/common/pkg.generated.mbti +++ b/sdks/moonbit/golem_sdk/interface/golem/tool/common/pkg.generated.mbti @@ -140,6 +140,11 @@ pub(all) struct InvocationResult { stdout : @async-core.Stream[Byte]? } +pub(all) struct MonomorphicScope { + presented : Tool + expected : Tool? +} derive(Eq, Show) + pub(all) enum OptionShape { Scalar(Int) OptionalScalar(Int) @@ -238,6 +243,22 @@ pub(all) struct Tool { schema : @types.SchemaGraph } derive(Eq, Show) +pub(all) struct ToolMiddleware { + name : String + aliases : Array[String] + doc : Doc + scope : ToolMiddlewareScope +} derive(Eq, Show) + +pub(all) enum ToolMiddlewareScope { + Monomorphic(MonomorphicScope) + Universal +} derive(Eq, Show) + +pub(all) struct UnderlyingTool(Int) derive(Eq, Show) +pub fn UnderlyingTool::drop(Self) -> Unit +pub async fn UnderlyingTool::invoke(Self, Array[String], @types.TypedSchemaValue, @async-core.Stream[Byte]?) -> Result[InvocationResult, ToolError] + pub(all) struct ValueIsRef { name : String value : @types.SchemaValueTree diff --git a/sdks/moonbit/golem_sdk/interface/golem/tool/common/top.mbt b/sdks/moonbit/golem_sdk/interface/golem/tool/common/top.mbt index 66692dc41f..e522eaac41 100644 --- a/sdks/moonbit/golem_sdk/interface/golem/tool/common/top.mbt +++ b/sdks/moonbit/golem_sdk/interface/golem/tool/common/top.mbt @@ -312,6 +312,26 @@ pub(all) struct Tool { schema : @types.SchemaGraph } derive(Show, Eq) +///| +pub(all) struct MonomorphicScope { + presented : Tool + expected : Tool? +} derive(Show, Eq) + +///| +pub(all) enum ToolMiddlewareScope { + Monomorphic(MonomorphicScope) + Universal +} derive(Show, Eq) + +///| +pub(all) struct ToolMiddleware { + name : String + aliases : Array[String] + doc : Doc + scope : ToolMiddlewareScope +} derive(Show, Eq) + ///| /// Invocation contract — shared between guest and host pub(all) suberror ToolError { @@ -328,3 +348,9489 @@ pub(all) struct InvocationResult { result : @types.TypedSchemaValue? stdout : @async-core.Stream[Byte]? } + +///| +/// Invocation-scoped access to exactly the next inner layer in a tool +/// middleware chain. The runtime creates this resource; guests cannot. +pub(all) struct UnderlyingTool(Int) derive(Show, Eq) + +///| +/// Drops a resource handle. +pub fn UnderlyingTool::drop(self : UnderlyingTool) -> Unit { + let UnderlyingTool(resource) = self + wasmImportResourceDropUnderlyingTool(resource) +} + +///| +pub async fn UnderlyingTool::invoke( + self : UnderlyingTool, + command_path : Array[String], + input : @types.TypedSchemaValue, + stdin : @async-core.Stream[Byte]?, +) -> Result[InvocationResult, ToolError] { + let lower_ptr : Int = mbt_ffi_malloc(52) + defer mbt_ffi_free(lower_ptr) + + let UnderlyingTool(handle) = self + mbt_ffi_store32(lower_ptr + 0 + 0, handle) + + let address = mbt_ffi_malloc(command_path.length() * 8) + for index = 0; index < command_path.length(); index = index + 1 { + let iter_elem : String = command_path[index] + let iter_base = address + index * 8 + + let ptr = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr) + } + mbt_ffi_store32(lower_ptr + 4 + 4, command_path.length()) + mbt_ffi_store32(lower_ptr + 4 + 0, address) + + let address358 = mbt_ffi_malloc(input.graph.type_nodes.length() * 144) + for index359 = 0 + index359 < input.graph.type_nodes.length() + index359 = index359 + 1 { + let iter_elem : @types.SchemaTypeNode = input.graph.type_nodes[index359] + let iter_base = address358 + index359 * 144 + + match iter_elem.body { + RefType(payload) => { + mbt_ffi_store8(iter_base + 0, 0) + mbt_ffi_store32(iter_base + 8, payload) + + () + } + BoolType => { + mbt_ffi_store8(iter_base + 0, 1) + + () + } + S8Type(payload1) => { + mbt_ffi_store8(iter_base + 0, 2) + + match payload1 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload3) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload3.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload5) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload5 { + Signed(payload6) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload6) + + () + } + Unsigned(payload7) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload7.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload8) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload8.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload3.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload10) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload10 { + Signed(payload11) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload11) + + () + } + Unsigned(payload12) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload12.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload13) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload13.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload3.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload15) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr = mbt_ffi_str2ptr(payload15) + mbt_ffi_store32(iter_base + 72, payload15.length()) + mbt_ffi_store32(iter_base + 68, ptr) + + () + } + } + + () + } + } + + () + } + S16Type(payload16) => { + mbt_ffi_store8(iter_base + 0, 3) + + match payload16 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload18) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload18.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload20) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload20 { + Signed(payload21) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload21) + + () + } + Unsigned(payload22) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload22.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload23) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload23.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload18.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload25) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload25 { + Signed(payload26) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload26) + + () + } + Unsigned(payload27) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload27.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload28) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload28.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload18.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload30) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr31 = mbt_ffi_str2ptr(payload30) + mbt_ffi_store32(iter_base + 72, payload30.length()) + mbt_ffi_store32(iter_base + 68, ptr31) + + () + } + } + + () + } + } + + () + } + S32Type(payload32) => { + mbt_ffi_store8(iter_base + 0, 4) + + match payload32 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload34) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload34.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload36) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload36 { + Signed(payload37) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload37) + + () + } + Unsigned(payload38) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload38.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload39) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload39.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload34.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload41) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload41 { + Signed(payload42) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload42) + + () + } + Unsigned(payload43) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload43.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload44) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload44.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload34.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload46) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr47 = mbt_ffi_str2ptr(payload46) + mbt_ffi_store32(iter_base + 72, payload46.length()) + mbt_ffi_store32(iter_base + 68, ptr47) + + () + } + } + + () + } + } + + () + } + S64Type(payload48) => { + mbt_ffi_store8(iter_base + 0, 5) + + match payload48 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload50) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload50.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload52) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload52 { + Signed(payload53) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload53) + + () + } + Unsigned(payload54) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload54.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload55) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload55.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload50.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload57) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload57 { + Signed(payload58) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload58) + + () + } + Unsigned(payload59) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload59.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload60) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload60.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload50.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload62) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr63 = mbt_ffi_str2ptr(payload62) + mbt_ffi_store32(iter_base + 72, payload62.length()) + mbt_ffi_store32(iter_base + 68, ptr63) + + () + } + } + + () + } + } + + () + } + U8Type(payload64) => { + mbt_ffi_store8(iter_base + 0, 6) + + match payload64 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload66) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload66.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload68) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload68 { + Signed(payload69) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload69) + + () + } + Unsigned(payload70) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload70.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload71) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload71.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload66.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload73) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload73 { + Signed(payload74) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload74) + + () + } + Unsigned(payload75) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload75.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload76) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload76.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload66.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload78) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr79 = mbt_ffi_str2ptr(payload78) + mbt_ffi_store32(iter_base + 72, payload78.length()) + mbt_ffi_store32(iter_base + 68, ptr79) + + () + } + } + + () + } + } + + () + } + U16Type(payload80) => { + mbt_ffi_store8(iter_base + 0, 7) + + match payload80 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload82) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload82.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload84) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload84 { + Signed(payload85) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload85) + + () + } + Unsigned(payload86) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload86.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload87) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload87.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload82.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload89) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload89 { + Signed(payload90) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload90) + + () + } + Unsigned(payload91) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload91.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload92) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload92.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload82.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload94) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr95 = mbt_ffi_str2ptr(payload94) + mbt_ffi_store32(iter_base + 72, payload94.length()) + mbt_ffi_store32(iter_base + 68, ptr95) + + () + } + } + + () + } + } + + () + } + U32Type(payload96) => { + mbt_ffi_store8(iter_base + 0, 8) + + match payload96 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload98) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload98.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload100) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload100 { + Signed(payload101) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload101) + + () + } + Unsigned(payload102) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload102.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload103) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload103.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload98.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload105) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload105 { + Signed(payload106) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload106) + + () + } + Unsigned(payload107) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload107.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload108) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload108.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload98.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload110) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr111 = mbt_ffi_str2ptr(payload110) + mbt_ffi_store32(iter_base + 72, payload110.length()) + mbt_ffi_store32(iter_base + 68, ptr111) + + () + } + } + + () + } + } + + () + } + U64Type(payload112) => { + mbt_ffi_store8(iter_base + 0, 9) + + match payload112 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload114) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload114.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload116) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload116 { + Signed(payload117) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload117) + + () + } + Unsigned(payload118) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload118.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload119) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload119.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload114.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload121) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload121 { + Signed(payload122) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload122) + + () + } + Unsigned(payload123) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload123.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload124) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload124.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload114.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload126) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr127 = mbt_ffi_str2ptr(payload126) + mbt_ffi_store32(iter_base + 72, payload126.length()) + mbt_ffi_store32(iter_base + 68, ptr127) + + () + } + } + + () + } + } + + () + } + F32Type(payload128) => { + mbt_ffi_store8(iter_base + 0, 10) + + match payload128 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload130) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload130.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload132) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload132 { + Signed(payload133) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload133) + + () + } + Unsigned(payload134) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload134.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload135) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload135.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload130.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload137) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload137 { + Signed(payload138) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload138) + + () + } + Unsigned(payload139) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload139.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload140) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload140.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload130.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload142) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr143 = mbt_ffi_str2ptr(payload142) + mbt_ffi_store32(iter_base + 72, payload142.length()) + mbt_ffi_store32(iter_base + 68, ptr143) + + () + } + } + + () + } + } + + () + } + F64Type(payload144) => { + mbt_ffi_store8(iter_base + 0, 11) + + match payload144 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload146) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload146.min { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload148) => { + mbt_ffi_store8(iter_base + 16, 1) + + match payload148 { + Signed(payload149) => { + mbt_ffi_store8(iter_base + 24, 0) + mbt_ffi_store64(iter_base + 32, payload149) + + () + } + Unsigned(payload150) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64( + iter_base + 32, + payload150.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload151) => { + mbt_ffi_store8(iter_base + 24, 2) + mbt_ffi_store64( + iter_base + 32, + payload151.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload146.max { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload153) => { + mbt_ffi_store8(iter_base + 40, 1) + + match payload153 { + Signed(payload154) => { + mbt_ffi_store8(iter_base + 48, 0) + mbt_ffi_store64(iter_base + 56, payload154) + + () + } + Unsigned(payload155) => { + mbt_ffi_store8(iter_base + 48, 1) + mbt_ffi_store64( + iter_base + 56, + payload155.reinterpret_as_int64(), + ) + + () + } + FloatBits(payload156) => { + mbt_ffi_store8(iter_base + 48, 2) + mbt_ffi_store64( + iter_base + 56, + payload156.reinterpret_as_int64(), + ) + + () + } + } + + () + } + } + + match payload146.unit { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload158) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr159 = mbt_ffi_str2ptr(payload158) + mbt_ffi_store32(iter_base + 72, payload158.length()) + mbt_ffi_store32(iter_base + 68, ptr159) + + () + } + } + + () + } + } + + () + } + CharType => { + mbt_ffi_store8(iter_base + 0, 12) + + () + } + StringType => { + mbt_ffi_store8(iter_base + 0, 13) + + () + } + RecordType(payload162) => { + mbt_ffi_store8(iter_base + 0, 14) + + let address181 = mbt_ffi_malloc(payload162.length() * 68) + for index182 = 0 + index182 < payload162.length() + index182 = index182 + 1 { + let iter_elem : @types.NamedFieldType = payload162[index182] + let iter_base = address181 + index182 * 68 + + let ptr163 = mbt_ffi_str2ptr(iter_elem.name) + mbt_ffi_store32(iter_base + 4, iter_elem.name.length()) + mbt_ffi_store32(iter_base + 0, ptr163) + mbt_ffi_store32(iter_base + 8, iter_elem.body) + + match iter_elem.metadata.doc { + None => { + mbt_ffi_store8(iter_base + 12, 0) + + () + } + Some(payload165) => { + mbt_ffi_store8(iter_base + 12, 1) + + let ptr166 = mbt_ffi_str2ptr(payload165) + mbt_ffi_store32(iter_base + 20, payload165.length()) + mbt_ffi_store32(iter_base + 16, ptr166) + + () + } + } + + let address = mbt_ffi_malloc(iter_elem.metadata.aliases.length() * 8) + for index = 0 + index < iter_elem.metadata.aliases.length() + index = index + 1 { + let iter_elem : String = iter_elem.metadata.aliases[index] + let iter_base = address + index * 8 + + let ptr167 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr167) + } + mbt_ffi_store32(iter_base + 28, iter_elem.metadata.aliases.length()) + mbt_ffi_store32(iter_base + 24, address) + + let address169 = mbt_ffi_malloc( + iter_elem.metadata.examples.length() * 8, + ) + for index170 = 0 + index170 < iter_elem.metadata.examples.length() + index170 = index170 + 1 { + let iter_elem : String = iter_elem.metadata.examples[index170] + let iter_base = address169 + index170 * 8 + + let ptr168 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr168) + } + mbt_ffi_store32(iter_base + 36, iter_elem.metadata.examples.length()) + mbt_ffi_store32(iter_base + 32, address169) + + match iter_elem.metadata.deprecated { + None => { + mbt_ffi_store8(iter_base + 40, 0) + + () + } + Some(payload172) => { + mbt_ffi_store8(iter_base + 40, 1) + + let ptr173 = mbt_ffi_str2ptr(payload172) + mbt_ffi_store32(iter_base + 48, payload172.length()) + mbt_ffi_store32(iter_base + 44, ptr173) + + () + } + } + + match iter_elem.metadata.role { + None => { + mbt_ffi_store8(iter_base + 52, 0) + + () + } + Some(payload175) => { + mbt_ffi_store8(iter_base + 52, 1) + + match payload175 { + Multimodal => { + mbt_ffi_store8(iter_base + 56, 0) + + () + } + UnstructuredText => { + mbt_ffi_store8(iter_base + 56, 1) + + () + } + UnstructuredBinary => { + mbt_ffi_store8(iter_base + 56, 2) + + () + } + Other(payload179) => { + mbt_ffi_store8(iter_base + 56, 3) + + let ptr180 = mbt_ffi_str2ptr(payload179) + mbt_ffi_store32(iter_base + 64, payload179.length()) + mbt_ffi_store32(iter_base + 60, ptr180) + + () + } + } + + () + } + } + } + mbt_ffi_store32(iter_base + 12, payload162.length()) + mbt_ffi_store32(iter_base + 8, address181) + + () + } + VariantType(payload183) => { + mbt_ffi_store8(iter_base + 0, 15) + + let address206 = mbt_ffi_malloc(payload183.length() * 72) + for index207 = 0 + index207 < payload183.length() + index207 = index207 + 1 { + let iter_elem : @types.VariantCaseType = payload183[index207] + let iter_base = address206 + index207 * 72 + + let ptr184 = mbt_ffi_str2ptr(iter_elem.name) + mbt_ffi_store32(iter_base + 4, iter_elem.name.length()) + mbt_ffi_store32(iter_base + 0, ptr184) + + match iter_elem.payload { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload186) => { + mbt_ffi_store8(iter_base + 8, 1) + mbt_ffi_store32(iter_base + 12, payload186) + + () + } + } + + match iter_elem.metadata.doc { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload188) => { + mbt_ffi_store8(iter_base + 16, 1) + + let ptr189 = mbt_ffi_str2ptr(payload188) + mbt_ffi_store32(iter_base + 24, payload188.length()) + mbt_ffi_store32(iter_base + 20, ptr189) + + () + } + } + + let address191 = mbt_ffi_malloc( + iter_elem.metadata.aliases.length() * 8, + ) + for index192 = 0 + index192 < iter_elem.metadata.aliases.length() + index192 = index192 + 1 { + let iter_elem : String = iter_elem.metadata.aliases[index192] + let iter_base = address191 + index192 * 8 + + let ptr190 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr190) + } + mbt_ffi_store32(iter_base + 32, iter_elem.metadata.aliases.length()) + mbt_ffi_store32(iter_base + 28, address191) + + let address194 = mbt_ffi_malloc( + iter_elem.metadata.examples.length() * 8, + ) + for index195 = 0 + index195 < iter_elem.metadata.examples.length() + index195 = index195 + 1 { + let iter_elem : String = iter_elem.metadata.examples[index195] + let iter_base = address194 + index195 * 8 + + let ptr193 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr193) + } + mbt_ffi_store32(iter_base + 40, iter_elem.metadata.examples.length()) + mbt_ffi_store32(iter_base + 36, address194) + + match iter_elem.metadata.deprecated { + None => { + mbt_ffi_store8(iter_base + 44, 0) + + () + } + Some(payload197) => { + mbt_ffi_store8(iter_base + 44, 1) + + let ptr198 = mbt_ffi_str2ptr(payload197) + mbt_ffi_store32(iter_base + 52, payload197.length()) + mbt_ffi_store32(iter_base + 48, ptr198) + + () + } + } + + match iter_elem.metadata.role { + None => { + mbt_ffi_store8(iter_base + 56, 0) + + () + } + Some(payload200) => { + mbt_ffi_store8(iter_base + 56, 1) + + match payload200 { + Multimodal => { + mbt_ffi_store8(iter_base + 60, 0) + + () + } + UnstructuredText => { + mbt_ffi_store8(iter_base + 60, 1) + + () + } + UnstructuredBinary => { + mbt_ffi_store8(iter_base + 60, 2) + + () + } + Other(payload204) => { + mbt_ffi_store8(iter_base + 60, 3) + + let ptr205 = mbt_ffi_str2ptr(payload204) + mbt_ffi_store32(iter_base + 68, payload204.length()) + mbt_ffi_store32(iter_base + 64, ptr205) + + () + } + } + + () + } + } + } + mbt_ffi_store32(iter_base + 12, payload183.length()) + mbt_ffi_store32(iter_base + 8, address206) + + () + } + EnumType(payload208) => { + mbt_ffi_store8(iter_base + 0, 16) + + let address210 = mbt_ffi_malloc(payload208.length() * 8) + for index211 = 0 + index211 < payload208.length() + index211 = index211 + 1 { + let iter_elem : String = payload208[index211] + let iter_base = address210 + index211 * 8 + + let ptr209 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr209) + } + mbt_ffi_store32(iter_base + 12, payload208.length()) + mbt_ffi_store32(iter_base + 8, address210) + + () + } + FlagsType(payload212) => { + mbt_ffi_store8(iter_base + 0, 17) + + let address214 = mbt_ffi_malloc(payload212.length() * 8) + for index215 = 0 + index215 < payload212.length() + index215 = index215 + 1 { + let iter_elem : String = payload212[index215] + let iter_base = address214 + index215 * 8 + + let ptr213 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr213) + } + mbt_ffi_store32(iter_base + 12, payload212.length()) + mbt_ffi_store32(iter_base + 8, address214) + + () + } + TupleType(payload216) => { + mbt_ffi_store8(iter_base + 0, 18) + + let address217 = mbt_ffi_malloc(payload216.length() * 4) + for index218 = 0 + index218 < payload216.length() + index218 = index218 + 1 { + let iter_elem : Int = payload216[index218] + let iter_base = address217 + index218 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(iter_base + 12, payload216.length()) + mbt_ffi_store32(iter_base + 8, address217) + + () + } + ListType(payload219) => { + mbt_ffi_store8(iter_base + 0, 19) + mbt_ffi_store32(iter_base + 8, payload219) + + () + } + FixedListType(payload220) => { + mbt_ffi_store8(iter_base + 0, 20) + mbt_ffi_store32(iter_base + 8, payload220.element) + mbt_ffi_store32(iter_base + 12, payload220.length.reinterpret_as_int()) + + () + } + MapType(payload221) => { + mbt_ffi_store8(iter_base + 0, 21) + mbt_ffi_store32(iter_base + 8, payload221.key) + mbt_ffi_store32(iter_base + 12, payload221.value) + + () + } + OptionType(payload222) => { + mbt_ffi_store8(iter_base + 0, 22) + mbt_ffi_store32(iter_base + 8, payload222) + + () + } + ResultType(payload223) => { + mbt_ffi_store8(iter_base + 0, 23) + + match payload223.ok { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload225) => { + mbt_ffi_store8(iter_base + 8, 1) + mbt_ffi_store32(iter_base + 12, payload225) + + () + } + } + + match payload223.err { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload227) => { + mbt_ffi_store8(iter_base + 16, 1) + mbt_ffi_store32(iter_base + 20, payload227) + + () + } + } + + () + } + TextType(payload228) => { + mbt_ffi_store8(iter_base + 0, 24) + + match payload228.languages { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload230) => { + mbt_ffi_store8(iter_base + 8, 1) + + let address232 = mbt_ffi_malloc(payload230.length() * 8) + for index233 = 0 + index233 < payload230.length() + index233 = index233 + 1 { + let iter_elem : String = payload230[index233] + let iter_base = address232 + index233 * 8 + + let ptr231 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr231) + } + mbt_ffi_store32(iter_base + 16, payload230.length()) + mbt_ffi_store32(iter_base + 12, address232) + + () + } + } + + match payload228.min_length { + None => { + mbt_ffi_store8(iter_base + 20, 0) + + () + } + Some(payload235) => { + mbt_ffi_store8(iter_base + 20, 1) + mbt_ffi_store32(iter_base + 24, payload235.reinterpret_as_int()) + + () + } + } + + match payload228.max_length { + None => { + mbt_ffi_store8(iter_base + 28, 0) + + () + } + Some(payload237) => { + mbt_ffi_store8(iter_base + 28, 1) + mbt_ffi_store32(iter_base + 32, payload237.reinterpret_as_int()) + + () + } + } + + match payload228.regex { + None => { + mbt_ffi_store8(iter_base + 36, 0) + + () + } + Some(payload239) => { + mbt_ffi_store8(iter_base + 36, 1) + + let ptr240 = mbt_ffi_str2ptr(payload239) + mbt_ffi_store32(iter_base + 44, payload239.length()) + mbt_ffi_store32(iter_base + 40, ptr240) + + () + } + } + + () + } + BinaryType(payload241) => { + mbt_ffi_store8(iter_base + 0, 25) + + match payload241.mime_types { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload243) => { + mbt_ffi_store8(iter_base + 8, 1) + + let address245 = mbt_ffi_malloc(payload243.length() * 8) + for index246 = 0 + index246 < payload243.length() + index246 = index246 + 1 { + let iter_elem : String = payload243[index246] + let iter_base = address245 + index246 * 8 + + let ptr244 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr244) + } + mbt_ffi_store32(iter_base + 16, payload243.length()) + mbt_ffi_store32(iter_base + 12, address245) + + () + } + } + + match payload241.min_bytes { + None => { + mbt_ffi_store8(iter_base + 20, 0) + + () + } + Some(payload248) => { + mbt_ffi_store8(iter_base + 20, 1) + mbt_ffi_store32(iter_base + 24, payload248.reinterpret_as_int()) + + () + } + } + + match payload241.max_bytes { + None => { + mbt_ffi_store8(iter_base + 28, 0) + + () + } + Some(payload250) => { + mbt_ffi_store8(iter_base + 28, 1) + mbt_ffi_store32(iter_base + 32, payload250.reinterpret_as_int()) + + () + } + } + + () + } + PathType(payload251) => { + mbt_ffi_store8(iter_base + 0, 26) + mbt_ffi_store8(iter_base + 8, payload251.direction.ordinal()) + mbt_ffi_store8(iter_base + 9, payload251.kind.ordinal()) + + match payload251.allowed_mime_types { + None => { + mbt_ffi_store8(iter_base + 12, 0) + + () + } + Some(payload253) => { + mbt_ffi_store8(iter_base + 12, 1) + + let address255 = mbt_ffi_malloc(payload253.length() * 8) + for index256 = 0 + index256 < payload253.length() + index256 = index256 + 1 { + let iter_elem : String = payload253[index256] + let iter_base = address255 + index256 * 8 + + let ptr254 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr254) + } + mbt_ffi_store32(iter_base + 20, payload253.length()) + mbt_ffi_store32(iter_base + 16, address255) + + () + } + } + + match payload251.allowed_extensions { + None => { + mbt_ffi_store8(iter_base + 24, 0) + + () + } + Some(payload258) => { + mbt_ffi_store8(iter_base + 24, 1) + + let address260 = mbt_ffi_malloc(payload258.length() * 8) + for index261 = 0 + index261 < payload258.length() + index261 = index261 + 1 { + let iter_elem : String = payload258[index261] + let iter_base = address260 + index261 * 8 + + let ptr259 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr259) + } + mbt_ffi_store32(iter_base + 32, payload258.length()) + mbt_ffi_store32(iter_base + 28, address260) + + () + } + } + + () + } + UrlType(payload262) => { + mbt_ffi_store8(iter_base + 0, 27) + + match payload262.allowed_schemes { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload264) => { + mbt_ffi_store8(iter_base + 8, 1) + + let address266 = mbt_ffi_malloc(payload264.length() * 8) + for index267 = 0 + index267 < payload264.length() + index267 = index267 + 1 { + let iter_elem : String = payload264[index267] + let iter_base = address266 + index267 * 8 + + let ptr265 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr265) + } + mbt_ffi_store32(iter_base + 16, payload264.length()) + mbt_ffi_store32(iter_base + 12, address266) + + () + } + } + + match payload262.allowed_hosts { + None => { + mbt_ffi_store8(iter_base + 20, 0) + + () + } + Some(payload269) => { + mbt_ffi_store8(iter_base + 20, 1) + + let address271 = mbt_ffi_malloc(payload269.length() * 8) + for index272 = 0 + index272 < payload269.length() + index272 = index272 + 1 { + let iter_elem : String = payload269[index272] + let iter_base = address271 + index272 * 8 + + let ptr270 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr270) + } + mbt_ffi_store32(iter_base + 28, payload269.length()) + mbt_ffi_store32(iter_base + 24, address271) + + () + } + } + + () + } + DatetimeType => { + mbt_ffi_store8(iter_base + 0, 28) + + () + } + DurationType => { + mbt_ffi_store8(iter_base + 0, 29) + + () + } + QuantityType(payload275) => { + mbt_ffi_store8(iter_base + 0, 30) + + let ptr276 = mbt_ffi_str2ptr(payload275.base_unit) + mbt_ffi_store32(iter_base + 12, payload275.base_unit.length()) + mbt_ffi_store32(iter_base + 8, ptr276) + + let address278 = mbt_ffi_malloc( + payload275.allowed_suffixes.length() * 8, + ) + for index279 = 0 + index279 < payload275.allowed_suffixes.length() + index279 = index279 + 1 { + let iter_elem : String = payload275.allowed_suffixes[index279] + let iter_base = address278 + index279 * 8 + + let ptr277 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr277) + } + mbt_ffi_store32(iter_base + 20, payload275.allowed_suffixes.length()) + mbt_ffi_store32(iter_base + 16, address278) + + match payload275.min { + None => { + mbt_ffi_store8(iter_base + 24, 0) + + () + } + Some(payload281) => { + mbt_ffi_store8(iter_base + 24, 1) + mbt_ffi_store64(iter_base + 32, payload281.mantissa) + mbt_ffi_store32(iter_base + 40, payload281.scale) + + let ptr282 = mbt_ffi_str2ptr(payload281.unit) + mbt_ffi_store32(iter_base + 48, payload281.unit.length()) + mbt_ffi_store32(iter_base + 44, ptr282) + + () + } + } + + match payload275.max { + None => { + mbt_ffi_store8(iter_base + 56, 0) + + () + } + Some(payload284) => { + mbt_ffi_store8(iter_base + 56, 1) + mbt_ffi_store64(iter_base + 64, payload284.mantissa) + mbt_ffi_store32(iter_base + 72, payload284.scale) + + let ptr285 = mbt_ffi_str2ptr(payload284.unit) + mbt_ffi_store32(iter_base + 80, payload284.unit.length()) + mbt_ffi_store32(iter_base + 76, ptr285) + + () + } + } + + () + } + UnionType(payload286) => { + mbt_ffi_store8(iter_base + 0, 31) + + let address322 = mbt_ffi_malloc(payload286.branches.length() * 92) + for index323 = 0 + index323 < payload286.branches.length() + index323 = index323 + 1 { + let iter_elem : @types.UnionBranch = payload286.branches[index323] + let iter_base = address322 + index323 * 92 + + let ptr287 = mbt_ffi_str2ptr(iter_elem.tag) + mbt_ffi_store32(iter_base + 4, iter_elem.tag.length()) + mbt_ffi_store32(iter_base + 0, ptr287) + mbt_ffi_store32(iter_base + 8, iter_elem.body) + + match iter_elem.discriminator { + Prefix(payload288) => { + mbt_ffi_store8(iter_base + 12, 0) + + let ptr289 = mbt_ffi_str2ptr(payload288) + mbt_ffi_store32(iter_base + 20, payload288.length()) + mbt_ffi_store32(iter_base + 16, ptr289) + + () + } + Suffix(payload290) => { + mbt_ffi_store8(iter_base + 12, 1) + + let ptr291 = mbt_ffi_str2ptr(payload290) + mbt_ffi_store32(iter_base + 20, payload290.length()) + mbt_ffi_store32(iter_base + 16, ptr291) + + () + } + Contains(payload292) => { + mbt_ffi_store8(iter_base + 12, 2) + + let ptr293 = mbt_ffi_str2ptr(payload292) + mbt_ffi_store32(iter_base + 20, payload292.length()) + mbt_ffi_store32(iter_base + 16, ptr293) + + () + } + Regex(payload294) => { + mbt_ffi_store8(iter_base + 12, 3) + + let ptr295 = mbt_ffi_str2ptr(payload294) + mbt_ffi_store32(iter_base + 20, payload294.length()) + mbt_ffi_store32(iter_base + 16, ptr295) + + () + } + FieldEquals(payload296) => { + mbt_ffi_store8(iter_base + 12, 4) + + let ptr297 = mbt_ffi_str2ptr(payload296.field_name) + mbt_ffi_store32(iter_base + 20, payload296.field_name.length()) + mbt_ffi_store32(iter_base + 16, ptr297) + + match payload296.literal { + None => { + mbt_ffi_store8(iter_base + 24, 0) + + () + } + Some(payload299) => { + mbt_ffi_store8(iter_base + 24, 1) + + let ptr300 = mbt_ffi_str2ptr(payload299) + mbt_ffi_store32(iter_base + 32, payload299.length()) + mbt_ffi_store32(iter_base + 28, ptr300) + + () + } + } + + () + } + FieldAbsent(payload301) => { + mbt_ffi_store8(iter_base + 12, 5) + + let ptr302 = mbt_ffi_str2ptr(payload301) + mbt_ffi_store32(iter_base + 20, payload301.length()) + mbt_ffi_store32(iter_base + 16, ptr302) + + () + } + } + + match iter_elem.metadata.doc { + None => { + mbt_ffi_store8(iter_base + 36, 0) + + () + } + Some(payload304) => { + mbt_ffi_store8(iter_base + 36, 1) + + let ptr305 = mbt_ffi_str2ptr(payload304) + mbt_ffi_store32(iter_base + 44, payload304.length()) + mbt_ffi_store32(iter_base + 40, ptr305) + + () + } + } + + let address307 = mbt_ffi_malloc( + iter_elem.metadata.aliases.length() * 8, + ) + for index308 = 0 + index308 < iter_elem.metadata.aliases.length() + index308 = index308 + 1 { + let iter_elem : String = iter_elem.metadata.aliases[index308] + let iter_base = address307 + index308 * 8 + + let ptr306 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr306) + } + mbt_ffi_store32(iter_base + 52, iter_elem.metadata.aliases.length()) + mbt_ffi_store32(iter_base + 48, address307) + + let address310 = mbt_ffi_malloc( + iter_elem.metadata.examples.length() * 8, + ) + for index311 = 0 + index311 < iter_elem.metadata.examples.length() + index311 = index311 + 1 { + let iter_elem : String = iter_elem.metadata.examples[index311] + let iter_base = address310 + index311 * 8 + + let ptr309 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr309) + } + mbt_ffi_store32(iter_base + 60, iter_elem.metadata.examples.length()) + mbt_ffi_store32(iter_base + 56, address310) + + match iter_elem.metadata.deprecated { + None => { + mbt_ffi_store8(iter_base + 64, 0) + + () + } + Some(payload313) => { + mbt_ffi_store8(iter_base + 64, 1) + + let ptr314 = mbt_ffi_str2ptr(payload313) + mbt_ffi_store32(iter_base + 72, payload313.length()) + mbt_ffi_store32(iter_base + 68, ptr314) + + () + } + } + + match iter_elem.metadata.role { + None => { + mbt_ffi_store8(iter_base + 76, 0) + + () + } + Some(payload316) => { + mbt_ffi_store8(iter_base + 76, 1) + + match payload316 { + Multimodal => { + mbt_ffi_store8(iter_base + 80, 0) + + () + } + UnstructuredText => { + mbt_ffi_store8(iter_base + 80, 1) + + () + } + UnstructuredBinary => { + mbt_ffi_store8(iter_base + 80, 2) + + () + } + Other(payload320) => { + mbt_ffi_store8(iter_base + 80, 3) + + let ptr321 = mbt_ffi_str2ptr(payload320) + mbt_ffi_store32(iter_base + 88, payload320.length()) + mbt_ffi_store32(iter_base + 84, ptr321) + + () + } + } + + () + } + } + } + mbt_ffi_store32(iter_base + 12, payload286.branches.length()) + mbt_ffi_store32(iter_base + 8, address322) + + () + } + SecretType(payload324) => { + mbt_ffi_store8(iter_base + 0, 32) + mbt_ffi_store32(iter_base + 8, payload324.inner) + + match payload324.category { + None => { + mbt_ffi_store8(iter_base + 12, 0) + + () + } + Some(payload326) => { + mbt_ffi_store8(iter_base + 12, 1) + + let ptr327 = mbt_ffi_str2ptr(payload326) + mbt_ffi_store32(iter_base + 20, payload326.length()) + mbt_ffi_store32(iter_base + 16, ptr327) + + () + } + } + + () + } + QuotaTokenType(payload328) => { + mbt_ffi_store8(iter_base + 0, 33) + + match payload328.resource_name { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload330) => { + mbt_ffi_store8(iter_base + 8, 1) + + let ptr331 = mbt_ffi_str2ptr(payload330) + mbt_ffi_store32(iter_base + 16, payload330.length()) + mbt_ffi_store32(iter_base + 12, ptr331) + + () + } + } + + () + } + PermissionCardType(payload332) => { + mbt_ffi_store8(iter_base + 0, 34) + mbt_ffi_store8( + iter_base + 8, + if payload332.polymorphic { + 1 + } else { + 0 + }, + ) + + () + } + FutureType(payload333) => { + mbt_ffi_store8(iter_base + 0, 35) + + match payload333 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload335) => { + mbt_ffi_store8(iter_base + 8, 1) + mbt_ffi_store32(iter_base + 12, payload335) + + () + } + } + + () + } + StreamType(payload336) => { + mbt_ffi_store8(iter_base + 0, 36) + + match payload336 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload338) => { + mbt_ffi_store8(iter_base + 8, 1) + mbt_ffi_store32(iter_base + 12, payload338) + + () + } + } + + () + } + } + + match iter_elem.metadata.doc { + None => { + mbt_ffi_store8(iter_base + 88, 0) + + () + } + Some(payload340) => { + mbt_ffi_store8(iter_base + 88, 1) + + let ptr341 = mbt_ffi_str2ptr(payload340) + mbt_ffi_store32(iter_base + 96, payload340.length()) + mbt_ffi_store32(iter_base + 92, ptr341) + + () + } + } + + let address343 = mbt_ffi_malloc(iter_elem.metadata.aliases.length() * 8) + for index344 = 0 + index344 < iter_elem.metadata.aliases.length() + index344 = index344 + 1 { + let iter_elem : String = iter_elem.metadata.aliases[index344] + let iter_base = address343 + index344 * 8 + + let ptr342 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr342) + } + mbt_ffi_store32(iter_base + 104, iter_elem.metadata.aliases.length()) + mbt_ffi_store32(iter_base + 100, address343) + + let address346 = mbt_ffi_malloc(iter_elem.metadata.examples.length() * 8) + for index347 = 0 + index347 < iter_elem.metadata.examples.length() + index347 = index347 + 1 { + let iter_elem : String = iter_elem.metadata.examples[index347] + let iter_base = address346 + index347 * 8 + + let ptr345 = mbt_ffi_str2ptr(iter_elem) + mbt_ffi_store32(iter_base + 4, iter_elem.length()) + mbt_ffi_store32(iter_base + 0, ptr345) + } + mbt_ffi_store32(iter_base + 112, iter_elem.metadata.examples.length()) + mbt_ffi_store32(iter_base + 108, address346) + + match iter_elem.metadata.deprecated { + None => { + mbt_ffi_store8(iter_base + 116, 0) + + () + } + Some(payload349) => { + mbt_ffi_store8(iter_base + 116, 1) + + let ptr350 = mbt_ffi_str2ptr(payload349) + mbt_ffi_store32(iter_base + 124, payload349.length()) + mbt_ffi_store32(iter_base + 120, ptr350) + + () + } + } + + match iter_elem.metadata.role { + None => { + mbt_ffi_store8(iter_base + 128, 0) + + () + } + Some(payload352) => { + mbt_ffi_store8(iter_base + 128, 1) + + match payload352 { + Multimodal => { + mbt_ffi_store8(iter_base + 132, 0) + + () + } + UnstructuredText => { + mbt_ffi_store8(iter_base + 132, 1) + + () + } + UnstructuredBinary => { + mbt_ffi_store8(iter_base + 132, 2) + + () + } + Other(payload356) => { + mbt_ffi_store8(iter_base + 132, 3) + + let ptr357 = mbt_ffi_str2ptr(payload356) + mbt_ffi_store32(iter_base + 140, payload356.length()) + mbt_ffi_store32(iter_base + 136, ptr357) + + () + } + } + + () + } + } + } + mbt_ffi_store32(lower_ptr + 12 + 4, input.graph.type_nodes.length()) + mbt_ffi_store32(lower_ptr + 12 + 0, address358) + + let address364 = mbt_ffi_malloc(input.graph.defs.length() * 24) + for index365 = 0 + index365 < input.graph.defs.length() + index365 = index365 + 1 { + let iter_elem : @types.SchemaTypeDef = input.graph.defs[index365] + let iter_base = address364 + index365 * 24 + + let ptr360 = mbt_ffi_str2ptr(iter_elem.id) + mbt_ffi_store32(iter_base + 4, iter_elem.id.length()) + mbt_ffi_store32(iter_base + 0, ptr360) + + match iter_elem.name { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload362) => { + mbt_ffi_store8(iter_base + 8, 1) + + let ptr363 = mbt_ffi_str2ptr(payload362) + mbt_ffi_store32(iter_base + 16, payload362.length()) + mbt_ffi_store32(iter_base + 12, ptr363) + + () + } + } + mbt_ffi_store32(iter_base + 20, iter_elem.body) + } + mbt_ffi_store32(lower_ptr + 12 + 12, input.graph.defs.length()) + mbt_ffi_store32(lower_ptr + 12 + 8, address364) + mbt_ffi_store32(lower_ptr + 12 + 16, input.graph.root) + + let address437 = mbt_ffi_malloc(input.value.value_nodes.length() * 32) + for index438 = 0 + index438 < input.value.value_nodes.length() + index438 = index438 + 1 { + let iter_elem : @types.SchemaValueNode = input.value.value_nodes[index438] + let iter_base = address437 + index438 * 32 + + match iter_elem { + BoolValue(payload366) => { + mbt_ffi_store8(iter_base + 0, 0) + mbt_ffi_store8(iter_base + 8, if payload366 { 1 } else { 0 }) + + () + } + S8Value(payload367) => { + mbt_ffi_store8(iter_base + 0, 1) + mbt_ffi_store8(iter_base + 8, mbt_ffi_extend8(payload367)) + + () + } + S16Value(payload368) => { + mbt_ffi_store8(iter_base + 0, 2) + mbt_ffi_store16(iter_base + 8, mbt_ffi_extend16(payload368)) + + () + } + S32Value(payload369) => { + mbt_ffi_store8(iter_base + 0, 3) + mbt_ffi_store32(iter_base + 8, payload369) + + () + } + S64Value(payload370) => { + mbt_ffi_store8(iter_base + 0, 4) + mbt_ffi_store64(iter_base + 8, payload370) + + () + } + U8Value(payload371) => { + mbt_ffi_store8(iter_base + 0, 5) + mbt_ffi_store8(iter_base + 8, payload371.to_int()) + + () + } + U16Value(payload372) => { + mbt_ffi_store8(iter_base + 0, 6) + mbt_ffi_store16(iter_base + 8, payload372.reinterpret_as_int()) + + () + } + U32Value(payload373) => { + mbt_ffi_store8(iter_base + 0, 7) + mbt_ffi_store32(iter_base + 8, payload373.reinterpret_as_int()) + + () + } + U64Value(payload374) => { + mbt_ffi_store8(iter_base + 0, 8) + mbt_ffi_store64(iter_base + 8, payload374.reinterpret_as_int64()) + + () + } + F32Value(payload375) => { + mbt_ffi_store8(iter_base + 0, 9) + mbt_ffi_storef32(iter_base + 8, payload375) + + () + } + F64Value(payload376) => { + mbt_ffi_store8(iter_base + 0, 10) + mbt_ffi_storef64(iter_base + 8, payload376) + + () + } + CharValue(payload377) => { + mbt_ffi_store8(iter_base + 0, 11) + mbt_ffi_store32(iter_base + 8, payload377.to_int()) + + () + } + StringValue(payload378) => { + mbt_ffi_store8(iter_base + 0, 12) + + let ptr379 = mbt_ffi_str2ptr(payload378) + mbt_ffi_store32(iter_base + 12, payload378.length()) + mbt_ffi_store32(iter_base + 8, ptr379) + + () + } + RecordValue(payload380) => { + mbt_ffi_store8(iter_base + 0, 13) + + let address381 = mbt_ffi_malloc(payload380.length() * 4) + for index382 = 0 + index382 < payload380.length() + index382 = index382 + 1 { + let iter_elem : Int = payload380[index382] + let iter_base = address381 + index382 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(iter_base + 12, payload380.length()) + mbt_ffi_store32(iter_base + 8, address381) + + () + } + VariantValue(payload383) => { + mbt_ffi_store8(iter_base + 0, 14) + mbt_ffi_store32(iter_base + 8, payload383.case.reinterpret_as_int()) + + match payload383.payload { + None => { + mbt_ffi_store8(iter_base + 12, 0) + + () + } + Some(payload385) => { + mbt_ffi_store8(iter_base + 12, 1) + mbt_ffi_store32(iter_base + 16, payload385) + + () + } + } + + () + } + EnumValue(payload386) => { + mbt_ffi_store8(iter_base + 0, 15) + mbt_ffi_store32(iter_base + 8, payload386.reinterpret_as_int()) + + () + } + FlagsValue(payload387) => { + mbt_ffi_store8(iter_base + 0, 16) + + let address388 = mbt_ffi_malloc(payload387.length() * 1) + for index389 = 0 + index389 < payload387.length() + index389 = index389 + 1 { + let iter_elem : Bool = payload387[index389] + let iter_base = address388 + index389 * 1 + mbt_ffi_store8(iter_base + 0, if iter_elem { 1 } else { 0 }) + } + mbt_ffi_store32(iter_base + 12, payload387.length()) + mbt_ffi_store32(iter_base + 8, address388) + + () + } + TupleValue(payload390) => { + mbt_ffi_store8(iter_base + 0, 17) + + let address391 = mbt_ffi_malloc(payload390.length() * 4) + for index392 = 0 + index392 < payload390.length() + index392 = index392 + 1 { + let iter_elem : Int = payload390[index392] + let iter_base = address391 + index392 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(iter_base + 12, payload390.length()) + mbt_ffi_store32(iter_base + 8, address391) + + () + } + ListValue(payload393) => { + mbt_ffi_store8(iter_base + 0, 18) + + let address394 = mbt_ffi_malloc(payload393.length() * 4) + for index395 = 0 + index395 < payload393.length() + index395 = index395 + 1 { + let iter_elem : Int = payload393[index395] + let iter_base = address394 + index395 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(iter_base + 12, payload393.length()) + mbt_ffi_store32(iter_base + 8, address394) + + () + } + FixedListValue(payload396) => { + mbt_ffi_store8(iter_base + 0, 19) + + let address397 = mbt_ffi_malloc(payload396.length() * 4) + for index398 = 0 + index398 < payload396.length() + index398 = index398 + 1 { + let iter_elem : Int = payload396[index398] + let iter_base = address397 + index398 * 4 + mbt_ffi_store32(iter_base + 0, iter_elem) + } + mbt_ffi_store32(iter_base + 12, payload396.length()) + mbt_ffi_store32(iter_base + 8, address397) + + () + } + MapValue(payload399) => { + mbt_ffi_store8(iter_base + 0, 20) + + let address400 = mbt_ffi_malloc(payload399.length() * 8) + for index401 = 0 + index401 < payload399.length() + index401 = index401 + 1 { + let iter_elem : @types.MapEntry = payload399[index401] + let iter_base = address400 + index401 * 8 + mbt_ffi_store32(iter_base + 0, iter_elem.key) + mbt_ffi_store32(iter_base + 4, iter_elem.value) + } + mbt_ffi_store32(iter_base + 12, payload399.length()) + mbt_ffi_store32(iter_base + 8, address400) + + () + } + OptionValue(payload402) => { + mbt_ffi_store8(iter_base + 0, 21) + + match payload402 { + None => { + mbt_ffi_store8(iter_base + 8, 0) + + () + } + Some(payload404) => { + mbt_ffi_store8(iter_base + 8, 1) + mbt_ffi_store32(iter_base + 12, payload404) + + () + } + } + + () + } + ResultValue(payload405) => { + mbt_ffi_store8(iter_base + 0, 22) + + match payload405 { + OkValue(payload406) => { + mbt_ffi_store8(iter_base + 8, 0) + + match payload406 { + None => { + mbt_ffi_store8(iter_base + 12, 0) + + () + } + Some(payload408) => { + mbt_ffi_store8(iter_base + 12, 1) + mbt_ffi_store32(iter_base + 16, payload408) + + () + } + } + + () + } + ErrValue(payload409) => { + mbt_ffi_store8(iter_base + 8, 1) + + match payload409 { + None => { + mbt_ffi_store8(iter_base + 12, 0) + + () + } + Some(payload411) => { + mbt_ffi_store8(iter_base + 12, 1) + mbt_ffi_store32(iter_base + 16, payload411) + + () + } + } + + () + } + } + + () + } + TextValue(payload412) => { + mbt_ffi_store8(iter_base + 0, 23) + + let ptr413 = mbt_ffi_str2ptr(payload412.text) + mbt_ffi_store32(iter_base + 12, payload412.text.length()) + mbt_ffi_store32(iter_base + 8, ptr413) + + match payload412.language { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload415) => { + mbt_ffi_store8(iter_base + 16, 1) + + let ptr416 = mbt_ffi_str2ptr(payload415) + mbt_ffi_store32(iter_base + 24, payload415.length()) + mbt_ffi_store32(iter_base + 20, ptr416) + + () + } + } + + () + } + BinaryValue(payload417) => { + mbt_ffi_store8(iter_base + 0, 24) + + let ptr418 = mbt_ffi_bytes2ptr(payload417.bytes) + + mbt_ffi_store32(iter_base + 12, payload417.bytes.length()) + mbt_ffi_store32(iter_base + 8, ptr418) + + match payload417.mime_type { + None => { + mbt_ffi_store8(iter_base + 16, 0) + + () + } + Some(payload420) => { + mbt_ffi_store8(iter_base + 16, 1) + + let ptr421 = mbt_ffi_str2ptr(payload420) + mbt_ffi_store32(iter_base + 24, payload420.length()) + mbt_ffi_store32(iter_base + 20, ptr421) + + () + } + } + + () + } + PathValue(payload422) => { + mbt_ffi_store8(iter_base + 0, 25) + + let ptr423 = mbt_ffi_str2ptr(payload422) + mbt_ffi_store32(iter_base + 12, payload422.length()) + mbt_ffi_store32(iter_base + 8, ptr423) + + () + } + UrlValue(payload424) => { + mbt_ffi_store8(iter_base + 0, 26) + + let ptr425 = mbt_ffi_str2ptr(payload424) + mbt_ffi_store32(iter_base + 12, payload424.length()) + mbt_ffi_store32(iter_base + 8, ptr425) + + () + } + DatetimeValue(payload426) => { + mbt_ffi_store8(iter_base + 0, 27) + mbt_ffi_store64(iter_base + 8, payload426.seconds) + mbt_ffi_store32( + iter_base + 16, + payload426.nanoseconds.reinterpret_as_int(), + ) + + () + } + DurationValue(payload427) => { + mbt_ffi_store8(iter_base + 0, 28) + mbt_ffi_store64(iter_base + 8, payload427.nanoseconds) + + () + } + QuantityValueNode(payload428) => { + mbt_ffi_store8(iter_base + 0, 29) + mbt_ffi_store64(iter_base + 8, payload428.mantissa) + mbt_ffi_store32(iter_base + 16, payload428.scale) + + let ptr429 = mbt_ffi_str2ptr(payload428.unit) + mbt_ffi_store32(iter_base + 24, payload428.unit.length()) + mbt_ffi_store32(iter_base + 20, ptr429) + + () + } + UnionValue(payload430) => { + mbt_ffi_store8(iter_base + 0, 30) + + let ptr431 = mbt_ffi_str2ptr(payload430.tag) + mbt_ffi_store32(iter_base + 12, payload430.tag.length()) + mbt_ffi_store32(iter_base + 8, ptr431) + mbt_ffi_store32(iter_base + 16, payload430.body) + + () + } + SecretValue(payload432) => { + mbt_ffi_store8(iter_base + 0, 31) + + let @types.Secret(handle) = payload432 + mbt_ffi_store32(iter_base + 8, handle) + + () + } + QuotaTokenHandle(payload433) => { + mbt_ffi_store8(iter_base + 0, 32) + + let @types.QuotaToken(handle434) = payload433 + mbt_ffi_store32(iter_base + 8, handle434) + + () + } + PermissionCardHandle(payload435) => { + mbt_ffi_store8(iter_base + 0, 33) + + let @types.PermissionCard(handle436) = payload435 + mbt_ffi_store32(iter_base + 8, handle436) + + () + } + } + } + mbt_ffi_store32(lower_ptr + 12 + 24, input.value.value_nodes.length()) + mbt_ffi_store32(lower_ptr + 12 + 20, address437) + mbt_ffi_store32(lower_ptr + 12 + 28, input.value.root) + + match stdin { + None => { + mbt_ffi_store8(lower_ptr + 44 + 0, 0) + + () + } + Some(payload0) => { + mbt_ffi_store8(lower_ptr + 44 + 0, 1) + mbt_ffi_store32( + lower_ptr + 44 + 4, + wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamLower( + payload0, + ), + ) + + () + } + } + + let result_ptr = mbt_ffi_malloc(48 * 1) + defer mbt_ffi_free(result_ptr) + + let subtask_code = wasmImportMethodUnderlyingToolInvoke(lower_ptr, result_ptr) + @async-core.suspend_for_subtask( + subtask_code, + fn(before_started) { + if before_started { + for index = 0; index < mbt_ffi_load32(lower_ptr + 8); index = index + 1 { + let iter_base = mbt_ffi_load32(lower_ptr + 4) + index * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(lower_ptr + 4)) + + for index20 = 0 + index20 < mbt_ffi_load32(lower_ptr + 16) + index20 = index20 + 1 { + let iter_base = mbt_ffi_load32(lower_ptr + 12) + index20 * 144 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 3 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 4 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 5 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 6 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 7 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 8 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 9 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 10 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 11 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 12 => () + 13 => () + 14 => { + for index2 = 0 + index2 < mbt_ffi_load32(iter_base + 12) + index2 = index2 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index2 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + for index0 = 0 + index0 < mbt_ffi_load32(iter_base + 28) + index0 = index0 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index0 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index1 = 0 + index1 < mbt_ffi_load32(iter_base + 36) + index1 = index1 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index1 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 52) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 60)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 15 => { + for index5 = 0 + index5 < mbt_ffi_load32(iter_base + 12) + index5 = index5 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index5 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index3 = 0 + index3 < mbt_ffi_load32(iter_base + 32) + index3 = index3 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index3 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index4 = 0 + index4 < mbt_ffi_load32(iter_base + 40) + index4 = index4 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + index4 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 16 => { + for index6 = 0 + index6 < mbt_ffi_load32(iter_base + 12) + index6 = index6 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index6 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 17 => { + for index7 = 0 + index7 < mbt_ffi_load32(iter_base + 12) + index7 = index7 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index7 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => () + 20 => () + 21 => () + 22 => () + 23 => () + 24 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index8 = 0 + index8 < mbt_ffi_load32(iter_base + 16) + index8 = index8 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index8 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + } + 25 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index9 = 0 + index9 < mbt_ffi_load32(iter_base + 16) + index9 = index9 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index9 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + 26 => { + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => { + for index10 = 0 + index10 < mbt_ffi_load32(iter_base + 20) + index10 = index10 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index10 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => { + for index11 = 0 + index11 < mbt_ffi_load32(iter_base + 32) + index11 = index11 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index11 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + } + _ => panic() + } + } + 27 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index12 = 0 + index12 < mbt_ffi_load32(iter_base + 16) + index12 = index12 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index12 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 20) { + 0 => () + 1 => { + for index13 = 0 + index13 < mbt_ffi_load32(iter_base + 28) + index13 = index13 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index13 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + _ => panic() + } + } + 28 => () + 29 => () + 30 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index14 = 0 + index14 < mbt_ffi_load32(iter_base + 20) + index14 = index14 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index14 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 76)) + _ => panic() + } + } + 31 => { + for index17 = 0 + index17 < mbt_ffi_load32(iter_base + 12) + index17 = index17 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index17 * 92 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 4 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + } + 5 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + + for index15 = 0 + index15 < mbt_ffi_load32(iter_base + 52) + index15 = index15 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + index15 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + for index16 = 0 + index16 < mbt_ffi_load32(iter_base + 60) + index16 = index16 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + index16 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 32 => + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + 33 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + 34 => () + 35 => () + 36 => () + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 88) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 92)) + _ => panic() + } + + for index18 = 0 + index18 < mbt_ffi_load32(iter_base + 104) + index18 = index18 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index18 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + for index19 = 0 + index19 < mbt_ffi_load32(iter_base + 112) + index19 = index19 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index19 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + match mbt_ffi_load8_u(iter_base + 116) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 120)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 128) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 132) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 136)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(lower_ptr + 12)) + + for index21 = 0 + index21 < mbt_ffi_load32(lower_ptr + 24) + index21 = index21 + 1 { + let iter_base = mbt_ffi_load32(lower_ptr + 20) + index21 * 24 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(lower_ptr + 20)) + + for index22 = 0 + index22 < mbt_ffi_load32(lower_ptr + 36) + index22 = index22 + 1 { + let iter_base = mbt_ffi_load32(lower_ptr + 32) + index22 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)).drop() + 32 => + @types.QuotaToken::QuotaToken(mbt_ffi_load32(iter_base + 8)).drop() + 33 => + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ).drop() + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(lower_ptr + 32)) + + match mbt_ffi_load8_u(lower_ptr + 44) { + 0 => () + 1 => { + let result = wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamLift( + mbt_ffi_load32(lower_ptr + 48), + ) + result.drop_sync() + } + _ => panic() + } + } else { + for index = 0; index < mbt_ffi_load32(lower_ptr + 8); index = index + 1 { + let iter_base = mbt_ffi_load32(lower_ptr + 4) + index * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(lower_ptr + 4)) + + for index20 = 0 + index20 < mbt_ffi_load32(lower_ptr + 16) + index20 = index20 + 1 { + let iter_base = mbt_ffi_load32(lower_ptr + 12) + index20 * 144 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 3 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 4 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 5 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 6 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 7 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 8 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 9 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 10 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 11 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 12 => () + 13 => () + 14 => { + for index2 = 0 + index2 < mbt_ffi_load32(iter_base + 12) + index2 = index2 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index2 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + for index0 = 0 + index0 < mbt_ffi_load32(iter_base + 28) + index0 = index0 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index0 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index1 = 0 + index1 < mbt_ffi_load32(iter_base + 36) + index1 = index1 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index1 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 52) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 60)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 15 => { + for index5 = 0 + index5 < mbt_ffi_load32(iter_base + 12) + index5 = index5 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index5 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index3 = 0 + index3 < mbt_ffi_load32(iter_base + 32) + index3 = index3 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index3 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index4 = 0 + index4 < mbt_ffi_load32(iter_base + 40) + index4 = index4 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + index4 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 16 => { + for index6 = 0 + index6 < mbt_ffi_load32(iter_base + 12) + index6 = index6 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index6 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 17 => { + for index7 = 0 + index7 < mbt_ffi_load32(iter_base + 12) + index7 = index7 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index7 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => () + 20 => () + 21 => () + 22 => () + 23 => () + 24 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index8 = 0 + index8 < mbt_ffi_load32(iter_base + 16) + index8 = index8 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index8 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + } + 25 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index9 = 0 + index9 < mbt_ffi_load32(iter_base + 16) + index9 = index9 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index9 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + 26 => { + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => { + for index10 = 0 + index10 < mbt_ffi_load32(iter_base + 20) + index10 = index10 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index10 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => { + for index11 = 0 + index11 < mbt_ffi_load32(iter_base + 32) + index11 = index11 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index11 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + } + _ => panic() + } + } + 27 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index12 = 0 + index12 < mbt_ffi_load32(iter_base + 16) + index12 = index12 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + index12 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 20) { + 0 => () + 1 => { + for index13 = 0 + index13 < mbt_ffi_load32(iter_base + 28) + index13 = index13 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index13 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + _ => panic() + } + } + 28 => () + 29 => () + 30 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index14 = 0 + index14 < mbt_ffi_load32(iter_base + 20) + index14 = index14 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index14 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 76)) + _ => panic() + } + } + 31 => { + for index17 = 0 + index17 < mbt_ffi_load32(iter_base + 12) + index17 = index17 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index17 * 92 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 4 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + } + 5 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + + for index15 = 0 + index15 < mbt_ffi_load32(iter_base + 52) + index15 = index15 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + index15 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + for index16 = 0 + index16 < mbt_ffi_load32(iter_base + 60) + index16 = index16 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + index16 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 32 => + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + 33 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + 34 => () + 35 => () + 36 => () + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 88) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 92)) + _ => panic() + } + + for index18 = 0 + index18 < mbt_ffi_load32(iter_base + 104) + index18 = index18 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index18 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + for index19 = 0 + index19 < mbt_ffi_load32(iter_base + 112) + index19 = index19 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index19 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + match mbt_ffi_load8_u(iter_base + 116) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 120)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 128) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 132) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 136)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(lower_ptr + 12)) + + for index21 = 0 + index21 < mbt_ffi_load32(lower_ptr + 24) + index21 = index21 + 1 { + let iter_base = mbt_ffi_load32(lower_ptr + 20) + index21 * 24 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(lower_ptr + 20)) + + for index22 = 0 + index22 < mbt_ffi_load32(lower_ptr + 36) + index22 = index22 + 1 { + let iter_base = mbt_ffi_load32(lower_ptr + 32) + index22 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => () + 32 => () + 33 => () + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(lower_ptr + 32)) + + match mbt_ffi_load8_u(lower_ptr + 44) { + 0 => () + 1 => + wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamCommit( + mbt_ffi_load32(lower_ptr + 48), + ) + _ => panic() + } + } + }, + fn() { + match mbt_ffi_load8_u(result_ptr + 0) { + 0 => { + match mbt_ffi_load8_u(result_ptr + 4) { + 0 => () + 1 => { + for index19 = 0 + index19 < mbt_ffi_load32(result_ptr + 12) + index19 = index19 + 1 { + let iter_base = mbt_ffi_load32(result_ptr + 8) + index19 * 144 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 3 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 4 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 5 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 6 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 7 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 8 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 9 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 10 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 11 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 12 => () + 13 => () + 14 => { + for index1 = 0 + index1 < mbt_ffi_load32(iter_base + 12) + index1 = index1 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index1 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + for index = 0 + index < mbt_ffi_load32(iter_base + 28) + index = index + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index0 = 0 + index0 < mbt_ffi_load32(iter_base + 36) + index0 = index0 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + + index0 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 52) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 60)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 15 => { + for index4 = 0 + index4 < mbt_ffi_load32(iter_base + 12) + index4 = index4 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index4 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index2 = 0 + index2 < mbt_ffi_load32(iter_base + 32) + index2 = index2 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index2 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index3 = 0 + index3 < mbt_ffi_load32(iter_base + 40) + index3 = index3 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + + index3 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 16 => { + for index5 = 0 + index5 < mbt_ffi_load32(iter_base + 12) + index5 = index5 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index5 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 17 => { + for index6 = 0 + index6 < mbt_ffi_load32(iter_base + 12) + index6 = index6 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index6 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => () + 20 => () + 21 => () + 22 => () + 23 => () + 24 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index7 = 0 + index7 < mbt_ffi_load32(iter_base + 16) + index7 = index7 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index7 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + } + 25 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index8 = 0 + index8 < mbt_ffi_load32(iter_base + 16) + index8 = index8 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index8 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + 26 => { + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => { + for index9 = 0 + index9 < mbt_ffi_load32(iter_base + 20) + index9 = index9 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index9 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => { + for index10 = 0 + index10 < mbt_ffi_load32(iter_base + 32) + index10 = index10 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index10 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + } + _ => panic() + } + } + 27 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index11 = 0 + index11 < mbt_ffi_load32(iter_base + 16) + index11 = index11 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index11 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 20) { + 0 => () + 1 => { + for index12 = 0 + index12 < mbt_ffi_load32(iter_base + 28) + index12 = index12 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index12 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + _ => panic() + } + } + 28 => () + 29 => () + 30 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index13 = 0 + index13 < mbt_ffi_load32(iter_base + 20) + index13 = index13 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index13 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 76)) + _ => panic() + } + } + 31 => { + for index16 = 0 + index16 < mbt_ffi_load32(iter_base + 12) + index16 = index16 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index16 * 92 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 4 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + } + 5 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + + for index14 = 0 + index14 < mbt_ffi_load32(iter_base + 52) + index14 = index14 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + + index14 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + for index15 = 0 + index15 < mbt_ffi_load32(iter_base + 60) + index15 = index15 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + + index15 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 32 => + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + 33 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + 34 => () + 35 => () + 36 => () + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 88) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 92)) + _ => panic() + } + + for index17 = 0 + index17 < mbt_ffi_load32(iter_base + 104) + index17 = index17 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index17 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + for index18 = 0 + index18 < mbt_ffi_load32(iter_base + 112) + index18 = index18 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index18 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + match mbt_ffi_load8_u(iter_base + 116) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 120)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 128) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 132) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 136)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(result_ptr + 8)) + + for index20 = 0 + index20 < mbt_ffi_load32(result_ptr + 20) + index20 = index20 + 1 { + let iter_base = mbt_ffi_load32(result_ptr + 16) + index20 * 24 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(result_ptr + 16)) + + for index21 = 0 + index21 < mbt_ffi_load32(result_ptr + 32) + index21 = index21 + 1 { + let iter_base = mbt_ffi_load32(result_ptr + 28) + index21 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)).drop() + 32 => + @types.QuotaToken::QuotaToken(mbt_ffi_load32(iter_base + 8)).drop() + 33 => + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ).drop() + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(result_ptr + 28)) + } + _ => panic() + } + + match mbt_ffi_load8_u(result_ptr + 40) { + 0 => () + 1 => { + let result = wasmGolemToolCommon010MethodUnderlyingToolInvokeStream0StreamLift( + mbt_ffi_load32(result_ptr + 44), + ) + result.drop_sync() + } + _ => panic() + } + } + 1 => + match mbt_ffi_load8_u(result_ptr + 4) { + 0 => mbt_ffi_free(mbt_ffi_load32(result_ptr + 8)) + 1 => { + for index22 = 0 + index22 < mbt_ffi_load32(result_ptr + 12) + index22 = index22 + 1 { + let iter_base = mbt_ffi_load32(result_ptr + 8) + index22 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(result_ptr + 8)) + } + 2 => mbt_ffi_free(mbt_ffi_load32(result_ptr + 8)) + 3 => mbt_ffi_free(mbt_ffi_load32(result_ptr + 8)) + 4 => mbt_ffi_free(mbt_ffi_load32(result_ptr + 8)) + 5 => { + for index43 = 0 + index43 < mbt_ffi_load32(result_ptr + 12) + index43 = index43 + 1 { + let iter_base = mbt_ffi_load32(result_ptr + 8) + index43 * 144 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 3 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 4 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 5 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 6 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 7 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 8 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 9 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 10 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 11 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + _ => panic() + } + 12 => () + 13 => () + 14 => { + for index25 = 0 + index25 < mbt_ffi_load32(iter_base + 12) + index25 = index25 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index25 * 68 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + for index23 = 0 + index23 < mbt_ffi_load32(iter_base + 28) + index23 = index23 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index23 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + for index24 = 0 + index24 < mbt_ffi_load32(iter_base + 36) + index24 = index24 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + + index24 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + match mbt_ffi_load8_u(iter_base + 40) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 52) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 60)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 15 => { + for index28 = 0 + index28 < mbt_ffi_load32(iter_base + 12) + index28 = index28 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index28 * 72 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + for index26 = 0 + index26 < mbt_ffi_load32(iter_base + 32) + index26 = index26 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index26 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + for index27 = 0 + index27 < mbt_ffi_load32(iter_base + 40) + index27 = index27 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + + index27 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + match mbt_ffi_load8_u(iter_base + 44) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 60) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 64)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 16 => { + for index29 = 0 + index29 < mbt_ffi_load32(iter_base + 12) + index29 = index29 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index29 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 17 => { + for index30 = 0 + index30 < mbt_ffi_load32(iter_base + 12) + index30 = index30 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index30 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => () + 20 => () + 21 => () + 22 => () + 23 => () + 24 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index31 = 0 + index31 < mbt_ffi_load32(iter_base + 16) + index31 = index31 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index31 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + } + 25 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index32 = 0 + index32 < mbt_ffi_load32(iter_base + 16) + index32 = index32 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index32 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + 26 => { + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => { + for index33 = 0 + index33 < mbt_ffi_load32(iter_base + 20) + index33 = index33 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index33 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => { + for index34 = 0 + index34 < mbt_ffi_load32(iter_base + 32) + index34 = index34 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index34 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + } + _ => panic() + } + } + 27 => { + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => { + for index35 = 0 + index35 < mbt_ffi_load32(iter_base + 16) + index35 = index35 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index35 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + } + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 20) { + 0 => () + 1 => { + for index36 = 0 + index36 < mbt_ffi_load32(iter_base + 28) + index36 = index36 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index36 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + } + _ => panic() + } + } + 28 => () + 29 => () + 30 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + for index37 = 0 + index37 < mbt_ffi_load32(iter_base + 20) + index37 = index37 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index37 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 44)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 56) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 76)) + _ => panic() + } + } + 31 => { + for index40 = 0 + index40 < mbt_ffi_load32(iter_base + 12) + index40 = index40 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + + index40 * 92 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 12) { + 0 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 2 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + 4 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + match mbt_ffi_load8_u(iter_base + 24) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + _ => panic() + } + } + 5 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 36) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 40)) + _ => panic() + } + + for index38 = 0 + index38 < mbt_ffi_load32(iter_base + 52) + index38 = index38 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + + index38 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + for index39 = 0 + index39 < mbt_ffi_load32(iter_base + 60) + index39 = index39 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + + index39 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + match mbt_ffi_load8_u(iter_base + 64) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 68)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 76) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 80) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 84)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + } + 32 => + match mbt_ffi_load8_u(iter_base + 12) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + 33 => + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + 34 => () + 35 => () + 36 => () + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 88) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 92)) + _ => panic() + } + + for index41 = 0 + index41 < mbt_ffi_load32(iter_base + 104) + index41 = index41 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index41 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + for index42 = 0 + index42 < mbt_ffi_load32(iter_base + 112) + index42 = index42 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index42 * 8 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + match mbt_ffi_load8_u(iter_base + 116) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 120)) + _ => panic() + } + + match mbt_ffi_load8_u(iter_base + 128) { + 0 => () + 1 => + match mbt_ffi_load8_u(iter_base + 132) { + 0 => () + 1 => () + 2 => () + 3 => mbt_ffi_free(mbt_ffi_load32(iter_base + 136)) + _ => panic() + } + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(result_ptr + 8)) + + for index44 = 0 + index44 < mbt_ffi_load32(result_ptr + 20) + index44 = index44 + 1 { + let iter_base = mbt_ffi_load32(result_ptr + 16) + index44 * 24 + mbt_ffi_free(mbt_ffi_load32(iter_base + 0)) + + match mbt_ffi_load8_u(iter_base + 8) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(result_ptr + 16)) + + for index45 = 0 + index45 < mbt_ffi_load32(result_ptr + 32) + index45 = index45 + 1 { + let iter_base = mbt_ffi_load32(result_ptr + 28) + index45 * 32 + + match mbt_ffi_load8_u(iter_base + 0) { + 0 => () + 1 => () + 2 => () + 3 => () + 4 => () + 5 => () + 6 => () + 7 => () + 8 => () + 9 => () + 10 => () + 11 => () + 12 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 13 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 14 => () + 15 => () + 16 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 17 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 18 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 19 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 20 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 21 => () + 22 => () + 23 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 24 => { + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + match mbt_ffi_load8_u(iter_base + 16) { + 0 => () + 1 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + } + 25 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 26 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 27 => () + 28 => () + 29 => mbt_ffi_free(mbt_ffi_load32(iter_base + 20)) + 30 => mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + 31 => + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)).drop() + 32 => + @types.QuotaToken::QuotaToken(mbt_ffi_load32(iter_base + 8)).drop() + 33 => + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ).drop() + _ => panic() + } + } + mbt_ffi_free(mbt_ffi_load32(result_ptr + 28)) + } + _ => panic() + } + _ => panic() + } + }, + ) + + let lifted475 = match mbt_ffi_load8_u(result_ptr + 0) { + 0 => { + let lifted230 : @types.TypedSchemaValue? = match + mbt_ffi_load8_u(result_ptr + 4) { + 0 => Option::None + 1 => { + let array192 : Array[@types.SchemaTypeNode] = [] + for index193 = 0 + index193 < mbt_ffi_load32(result_ptr + 12) + index193 = index193 + 1 { + let iter_base = mbt_ffi_load32(result_ptr + 8) + index193 * 144 + + let lifted178 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => @types.SchemaTypeBody::RefType(mbt_ffi_load32(iter_base + 8)) + 1 => @types.SchemaTypeBody::BoolType + 2 => { + let lifted4 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted0 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted) + } + _ => panic() + } + + let lifted2 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted1 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted1) + } + _ => panic() + } + + let lifted3 : String? = match + mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted0, + max: lifted2, + unit: lifted3, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::S8Type(lifted4) + } + 3 => { + let lifted11 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted6 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted5 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted5) + } + _ => panic() + } + + let lifted8 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted7 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted7) + } + _ => panic() + } + + let lifted10 : String? = match + mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result9 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result9) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted6, + max: lifted8, + unit: lifted10, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::S16Type(lifted11) + } + 4 => { + let lifted18 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted13 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted12 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted12) + } + _ => panic() + } + + let lifted15 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted14 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted14) + } + _ => panic() + } + + let lifted17 : String? = match + mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result16 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result16) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted13, + max: lifted15, + unit: lifted17, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::S32Type(lifted18) + } + 5 => { + let lifted25 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted20 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted19 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted19) + } + _ => panic() + } + + let lifted22 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted21 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted21) + } + _ => panic() + } + + let lifted24 : String? = match + mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result23 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result23) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted20, + max: lifted22, + unit: lifted24, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::S64Type(lifted25) + } + 6 => { + let lifted32 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted27 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted26 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted26) + } + _ => panic() + } + + let lifted29 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted28 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted28) + } + _ => panic() + } + + let lifted31 : String? = match + mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result30 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result30) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted27, + max: lifted29, + unit: lifted31, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::U8Type(lifted32) + } + 7 => { + let lifted39 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted34 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted33 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted33) + } + _ => panic() + } + + let lifted36 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted35 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted35) + } + _ => panic() + } + + let lifted38 : String? = match + mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result37 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result37) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted34, + max: lifted36, + unit: lifted38, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::U16Type(lifted39) + } + 8 => { + let lifted46 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted41 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted40 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted40) + } + _ => panic() + } + + let lifted43 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted42 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted42) + } + _ => panic() + } + + let lifted45 : String? = match + mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result44 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result44) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted41, + max: lifted43, + unit: lifted45, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::U32Type(lifted46) + } + 9 => { + let lifted53 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted48 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted47 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted47) + } + _ => panic() + } + + let lifted50 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted49 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted49) + } + _ => panic() + } + + let lifted52 : String? = match + mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result51 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result51) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted48, + max: lifted50, + unit: lifted52, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::U64Type(lifted53) + } + 10 => { + let lifted60 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted55 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted54 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted54) + } + _ => panic() + } + + let lifted57 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted56 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted56) + } + _ => panic() + } + + let lifted59 : String? = match + mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result58 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result58) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted55, + max: lifted57, + unit: lifted59, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::F32Type(lifted60) + } + 11 => { + let lifted67 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted62 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted61 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted61) + } + _ => panic() + } + + let lifted64 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted63 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted63) + } + _ => panic() + } + + let lifted66 : String? = match + mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result65 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result65) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted62, + max: lifted64, + unit: lifted66, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::F64Type(lifted67) + } + 12 => @types.SchemaTypeBody::CharType + 13 => @types.SchemaTypeBody::StringType + 14 => { + let array80 : Array[@types.NamedFieldType] = [] + for index81 = 0 + index81 < mbt_ffi_load32(iter_base + 12) + index81 = index81 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index81 * 68 + + let result68 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted70 : String? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => { + let result69 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + Option::Some(result69) + } + _ => panic() + } + + let array : Array[String] = [] + for index = 0 + index < mbt_ffi_load32(iter_base + 28) + index = index + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + index * 8 + + let result71 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array.push(result71) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + let array73 : Array[String] = [] + for index74 = 0 + index74 < mbt_ffi_load32(iter_base + 36) + index74 = index74 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + index74 * 8 + + let result72 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array73.push(result72) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + let lifted76 : String? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let result75 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 44), + mbt_ffi_load32(iter_base + 48), + ) + + Option::Some(result75) + } + _ => panic() + } + + let lifted79 : @types.Role? = match + mbt_ffi_load8_u(iter_base + 52) { + 0 => Option::None + 1 => { + let lifted78 = match mbt_ffi_load8_u(iter_base + 56) { + 0 => @types.Role::Multimodal + 1 => @types.Role::UnstructuredText + 2 => @types.Role::UnstructuredBinary + 3 => { + let result77 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 60), + mbt_ffi_load32(iter_base + 64), + ) + + @types.Role::Other(result77) + } + _ => panic() + } + + Option::Some(lifted78) + } + _ => panic() + } + + array80.push(@types.NamedFieldType::{ + name: result68, + body: mbt_ffi_load32(iter_base + 8), + metadata: @types.MetadataEnvelope::{ + doc: lifted70, + aliases: array, + examples: array73, + deprecated: lifted76, + role: lifted79, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::RecordType(array80) + } + 15 => { + let array97 : Array[@types.VariantCaseType] = [] + for index98 = 0 + index98 < mbt_ffi_load32(iter_base + 12) + index98 = index98 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index98 * 72 + + let result82 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted83 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + let lifted85 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result84 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result84) + } + _ => panic() + } + + let array87 : Array[String] = [] + for index88 = 0 + index88 < mbt_ffi_load32(iter_base + 32) + index88 = index88 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + index88 * 8 + + let result86 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array87.push(result86) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + let array90 : Array[String] = [] + for index91 = 0 + index91 < mbt_ffi_load32(iter_base + 40) + index91 = index91 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + index91 * 8 + + let result89 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array90.push(result89) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + let lifted93 : String? = match + mbt_ffi_load8_u(iter_base + 44) { + 0 => Option::None + 1 => { + let result92 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 48), + mbt_ffi_load32(iter_base + 52), + ) + + Option::Some(result92) + } + _ => panic() + } + + let lifted96 : @types.Role? = match + mbt_ffi_load8_u(iter_base + 56) { + 0 => Option::None + 1 => { + let lifted95 = match mbt_ffi_load8_u(iter_base + 60) { + 0 => @types.Role::Multimodal + 1 => @types.Role::UnstructuredText + 2 => @types.Role::UnstructuredBinary + 3 => { + let result94 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 64), + mbt_ffi_load32(iter_base + 68), + ) + + @types.Role::Other(result94) + } + _ => panic() + } + + Option::Some(lifted95) + } + _ => panic() + } + + array97.push(@types.VariantCaseType::{ + name: result82, + payload: lifted83, + metadata: @types.MetadataEnvelope::{ + doc: lifted85, + aliases: array87, + examples: array90, + deprecated: lifted93, + role: lifted96, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::VariantType(array97) + } + 16 => { + let array100 : Array[String] = [] + for index101 = 0 + index101 < mbt_ffi_load32(iter_base + 12) + index101 = index101 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index101 * 8 + + let result99 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array100.push(result99) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::EnumType(array100) + } + 17 => { + let array103 : Array[String] = [] + for index104 = 0 + index104 < mbt_ffi_load32(iter_base + 12) + index104 = index104 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index104 * 8 + + let result102 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array103.push(result102) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::FlagsType(array103) + } + 18 => { + let array105 : Array[Int] = [] + for index106 = 0 + index106 < mbt_ffi_load32(iter_base + 12) + index106 = index106 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index106 * 4 + + array105.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::TupleType(array105) + } + 19 => + @types.SchemaTypeBody::ListType(mbt_ffi_load32(iter_base + 8)) + 20 => + @types.SchemaTypeBody::FixedListType(@types.FixedListSpec::{ + element: mbt_ffi_load32(iter_base + 8), + length: mbt_ffi_load32(iter_base + 12).reinterpret_as_uint(), + }) + 21 => + @types.SchemaTypeBody::MapType(@types.MapSpec::{ + key: mbt_ffi_load32(iter_base + 8), + value: mbt_ffi_load32(iter_base + 12), + }) + 22 => + @types.SchemaTypeBody::OptionType(mbt_ffi_load32(iter_base + 8)) + 23 => { + let lifted107 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + let lifted108 : Int? = match mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + @types.SchemaTypeBody::ResultType(@types.ResultSpec::{ + ok: lifted107, + err: lifted108, + }) + } + 24 => { + let lifted112 : Array[String]? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let array110 : Array[String] = [] + for index111 = 0 + index111 < mbt_ffi_load32(iter_base + 16) + index111 = index111 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index111 * 8 + + let result109 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array110.push(result109) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + Option::Some(array110) + } + _ => panic() + } + + let lifted113 : UInt? = match mbt_ffi_load8_u(iter_base + 20) { + 0 => Option::None + 1 => + Option::Some( + mbt_ffi_load32(iter_base + 24).reinterpret_as_uint(), + ) + _ => panic() + } + + let lifted114 : UInt? = match mbt_ffi_load8_u(iter_base + 28) { + 0 => Option::None + 1 => + Option::Some( + mbt_ffi_load32(iter_base + 32).reinterpret_as_uint(), + ) + _ => panic() + } + + let lifted116 : String? = match + mbt_ffi_load8_u(iter_base + 36) { + 0 => Option::None + 1 => { + let result115 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 40), + mbt_ffi_load32(iter_base + 44), + ) + + Option::Some(result115) + } + _ => panic() + } + + @types.SchemaTypeBody::TextType(@types.TextRestrictions::{ + languages: lifted112, + min_length: lifted113, + max_length: lifted114, + regex: lifted116, + }) + } + 25 => { + let lifted120 : Array[String]? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let array118 : Array[String] = [] + for index119 = 0 + index119 < mbt_ffi_load32(iter_base + 16) + index119 = index119 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index119 * 8 + + let result117 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array118.push(result117) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + Option::Some(array118) + } + _ => panic() + } + + let lifted121 : UInt? = match mbt_ffi_load8_u(iter_base + 20) { + 0 => Option::None + 1 => + Option::Some( + mbt_ffi_load32(iter_base + 24).reinterpret_as_uint(), + ) + _ => panic() + } + + let lifted122 : UInt? = match mbt_ffi_load8_u(iter_base + 28) { + 0 => Option::None + 1 => + Option::Some( + mbt_ffi_load32(iter_base + 32).reinterpret_as_uint(), + ) + _ => panic() + } + + @types.SchemaTypeBody::BinaryType(@types.BinaryRestrictions::{ + mime_types: lifted120, + min_bytes: lifted121, + max_bytes: lifted122, + }) + } + 26 => { + let lifted126 : Array[String]? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => { + let array124 : Array[String] = [] + for index125 = 0 + index125 < mbt_ffi_load32(iter_base + 20) + index125 = index125 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index125 * 8 + + let result123 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array124.push(result123) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + Option::Some(array124) + } + _ => panic() + } + + let lifted130 : Array[String]? = match + mbt_ffi_load8_u(iter_base + 24) { + 0 => Option::None + 1 => { + let array128 : Array[String] = [] + for index129 = 0 + index129 < mbt_ffi_load32(iter_base + 32) + index129 = index129 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index129 * 8 + + let result127 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array128.push(result127) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + Option::Some(array128) + } + _ => panic() + } + + @types.SchemaTypeBody::PathType(@types.PathSpec::{ + direction: @types.PathDirection::from( + mbt_ffi_load8_u(iter_base + 8), + ), + kind: @types.PathKind::from(mbt_ffi_load8_u(iter_base + 9)), + allowed_mime_types: lifted126, + allowed_extensions: lifted130, + }) + } + 27 => { + let lifted134 : Array[String]? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let array132 : Array[String] = [] + for index133 = 0 + index133 < mbt_ffi_load32(iter_base + 16) + index133 = index133 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index133 * 8 + + let result131 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array132.push(result131) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + Option::Some(array132) + } + _ => panic() + } + + let lifted138 : Array[String]? = match + mbt_ffi_load8_u(iter_base + 20) { + 0 => Option::None + 1 => { + let array136 : Array[String] = [] + for index137 = 0 + index137 < mbt_ffi_load32(iter_base + 28) + index137 = index137 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index137 * 8 + + let result135 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array136.push(result135) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + Option::Some(array136) + } + _ => panic() + } + + @types.SchemaTypeBody::UrlType(@types.UrlRestrictions::{ + allowed_schemes: lifted134, + allowed_hosts: lifted138, + }) + } + 28 => @types.SchemaTypeBody::DatetimeType + 29 => @types.SchemaTypeBody::DurationType + 30 => { + let result139 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let array141 : Array[String] = [] + for index142 = 0 + index142 < mbt_ffi_load32(iter_base + 20) + index142 = index142 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index142 * 8 + + let result140 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array141.push(result140) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + let lifted144 : @types.QuantityValue? = match + mbt_ffi_load8_u(iter_base + 24) { + 0 => Option::None + 1 => { + let result143 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 44), + mbt_ffi_load32(iter_base + 48), + ) + + Option::Some(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 32), + scale: mbt_ffi_load32(iter_base + 40), + unit: result143, + }) + } + _ => panic() + } + + let lifted146 : @types.QuantityValue? = match + mbt_ffi_load8_u(iter_base + 56) { + 0 => Option::None + 1 => { + let result145 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 76), + mbt_ffi_load32(iter_base + 80), + ) + + Option::Some(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 64), + scale: mbt_ffi_load32(iter_base + 72), + unit: result145, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::QuantityType(@types.QuantitySpec::{ + base_unit: result139, + allowed_suffixes: array141, + min: lifted144, + max: lifted146, + }) + } + 31 => { + let array170 : Array[@types.UnionBranch] = [] + for index171 = 0 + index171 < mbt_ffi_load32(iter_base + 12) + index171 = index171 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index171 * 92 + + let result147 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted156 = match mbt_ffi_load8_u(iter_base + 12) { + 0 => { + let result148 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::Prefix(result148) + } + 1 => { + let result149 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::Suffix(result149) + } + 2 => { + let result150 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::Contains(result150) + } + 3 => { + let result151 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::Regex(result151) + } + 4 => { + let result152 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + let lifted154 : String? = match + mbt_ffi_load8_u(iter_base + 24) { + 0 => Option::None + 1 => { + let result153 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 28), + mbt_ffi_load32(iter_base + 32), + ) + + Option::Some(result153) + } + _ => panic() + } + + @types.DiscriminatorRule::FieldEquals(@types.FieldDiscriminator::{ + field_name: result152, + literal: lifted154, + }) + } + 5 => { + let result155 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::FieldAbsent(result155) + } + _ => panic() + } + + let lifted158 : String? = match + mbt_ffi_load8_u(iter_base + 36) { + 0 => Option::None + 1 => { + let result157 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 40), + mbt_ffi_load32(iter_base + 44), + ) + + Option::Some(result157) + } + _ => panic() + } + + let array160 : Array[String] = [] + for index161 = 0 + index161 < mbt_ffi_load32(iter_base + 52) + index161 = index161 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + + index161 * 8 + + let result159 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array160.push(result159) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + let array163 : Array[String] = [] + for index164 = 0 + index164 < mbt_ffi_load32(iter_base + 60) + index164 = index164 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + + index164 * 8 + + let result162 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array163.push(result162) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + let lifted166 : String? = match + mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result165 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result165) + } + _ => panic() + } + + let lifted169 : @types.Role? = match + mbt_ffi_load8_u(iter_base + 76) { + 0 => Option::None + 1 => { + let lifted168 = match mbt_ffi_load8_u(iter_base + 80) { + 0 => @types.Role::Multimodal + 1 => @types.Role::UnstructuredText + 2 => @types.Role::UnstructuredBinary + 3 => { + let result167 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 84), + mbt_ffi_load32(iter_base + 88), + ) + + @types.Role::Other(result167) + } + _ => panic() + } + + Option::Some(lifted168) + } + _ => panic() + } + + array170.push(@types.UnionBranch::{ + tag: result147, + body: mbt_ffi_load32(iter_base + 8), + discriminator: lifted156, + metadata: @types.MetadataEnvelope::{ + doc: lifted158, + aliases: array160, + examples: array163, + deprecated: lifted166, + role: lifted169, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::UnionType(@types.UnionSpec::{ + branches: array170, + }) + } + 32 => { + let lifted173 : String? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => { + let result172 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + Option::Some(result172) + } + _ => panic() + } + + @types.SchemaTypeBody::SecretType(@types.SecretSpec::{ + inner: mbt_ffi_load32(iter_base + 8), + category: lifted173, + }) + } + 33 => { + let lifted175 : String? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let result174 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 12), + mbt_ffi_load32(iter_base + 16), + ) + + Option::Some(result174) + } + _ => panic() + } + + @types.SchemaTypeBody::QuotaTokenType(@types.QuotaTokenSpec::{ + resource_name: lifted175, + }) + } + 34 => + @types.SchemaTypeBody::PermissionCardType(@types.PermissionCardSpec::{ + polymorphic: mbt_ffi_load8_u(iter_base + 8) != 0, + }) + 35 => { + let lifted176 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaTypeBody::FutureType(lifted176) + } + 36 => { + let lifted177 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaTypeBody::StreamType(lifted177) + } + _ => panic() + } + + let lifted180 : String? = match mbt_ffi_load8_u(iter_base + 88) { + 0 => Option::None + 1 => { + let result179 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 92), + mbt_ffi_load32(iter_base + 96), + ) + + Option::Some(result179) + } + _ => panic() + } + + let array182 : Array[String] = [] + for index183 = 0 + index183 < mbt_ffi_load32(iter_base + 104) + index183 = index183 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index183 * 8 + + let result181 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array182.push(result181) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + let array185 : Array[String] = [] + for index186 = 0 + index186 < mbt_ffi_load32(iter_base + 112) + index186 = index186 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index186 * 8 + + let result184 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array185.push(result184) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + let lifted188 : String? = match mbt_ffi_load8_u(iter_base + 116) { + 0 => Option::None + 1 => { + let result187 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 120), + mbt_ffi_load32(iter_base + 124), + ) + + Option::Some(result187) + } + _ => panic() + } + + let lifted191 : @types.Role? = match + mbt_ffi_load8_u(iter_base + 128) { + 0 => Option::None + 1 => { + let lifted190 = match mbt_ffi_load8_u(iter_base + 132) { + 0 => @types.Role::Multimodal + 1 => @types.Role::UnstructuredText + 2 => @types.Role::UnstructuredBinary + 3 => { + let result189 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 136), + mbt_ffi_load32(iter_base + 140), + ) + + @types.Role::Other(result189) + } + _ => panic() + } + + Option::Some(lifted190) + } + _ => panic() + } + + array192.push(@types.SchemaTypeNode::{ + body: lifted178, + metadata: @types.MetadataEnvelope::{ + doc: lifted180, + aliases: array182, + examples: array185, + deprecated: lifted188, + role: lifted191, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(result_ptr + 8)) + + let array197 : Array[@types.SchemaTypeDef] = [] + for index198 = 0 + index198 < mbt_ffi_load32(result_ptr + 20) + index198 = index198 + 1 { + let iter_base = mbt_ffi_load32(result_ptr + 16) + index198 * 24 + + let result194 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted196 : String? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let result195 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 12), + mbt_ffi_load32(iter_base + 16), + ) + + Option::Some(result195) + } + _ => panic() + } + + array197.push(@types.SchemaTypeDef::{ + id: result194, + name: lifted196, + body: mbt_ffi_load32(iter_base + 20), + }) + } + mbt_ffi_free(mbt_ffi_load32(result_ptr + 16)) + + let array228 : Array[@types.SchemaValueNode] = [] + for index229 = 0 + index229 < mbt_ffi_load32(result_ptr + 32) + index229 = index229 + 1 { + let iter_base = mbt_ffi_load32(result_ptr + 28) + index229 * 32 + + let lifted227 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue( + mbt_ffi_load8_u(iter_base + 8) != 0, + ) + 1 => @types.SchemaValueNode::S8Value(mbt_ffi_load8(iter_base + 8)) + 2 => + @types.SchemaValueNode::S16Value(mbt_ffi_load16(iter_base + 8)) + 3 => + @types.SchemaValueNode::S32Value(mbt_ffi_load32(iter_base + 8)) + 4 => + @types.SchemaValueNode::S64Value(mbt_ffi_load64(iter_base + 8)) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8) + .land(0xFFFF) + .reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => + @types.SchemaValueNode::F32Value(mbt_ffi_loadf32(iter_base + 8)) + 10 => + @types.SchemaValueNode::F64Value(mbt_ffi_loadf64(iter_base + 8)) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result199 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result199) + } + 13 => { + let array200 : Array[Int] = [] + for index201 = 0 + index201 < mbt_ffi_load32(iter_base + 12) + index201 = index201 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index201 * 4 + + array200.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array200) + } + 14 => { + let lifted202 : Int? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted202, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array203 : Array[Bool] = [] + for index204 = 0 + index204 < mbt_ffi_load32(iter_base + 12) + index204 = index204 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index204 * 1 + + array203.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array203) + } + 17 => { + let array205 : Array[Int] = [] + for index206 = 0 + index206 < mbt_ffi_load32(iter_base + 12) + index206 = index206 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index206 * 4 + + array205.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array205) + } + 18 => { + let array207 : Array[Int] = [] + for index208 = 0 + index208 < mbt_ffi_load32(iter_base + 12) + index208 = index208 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index208 * 4 + + array207.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array207) + } + 19 => { + let array209 : Array[Int] = [] + for index210 = 0 + index210 < mbt_ffi_load32(iter_base + 12) + index210 = index210 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index210 * 4 + + array209.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array209) + } + 20 => { + let array211 : Array[@types.MapEntry] = [] + for index212 = 0 + index212 < mbt_ffi_load32(iter_base + 12) + index212 = index212 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index212 * 8 + + array211.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array211) + } + 21 => { + let lifted213 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted213) + } + 22 => { + let lifted216 = match mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted214 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted214) + } + 1 => { + let lifted215 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted215) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted216) + } + 23 => { + let result217 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted219 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result218 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result218) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result217, + language: lifted219, + }) + } + 24 => { + let result220 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted222 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result221 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result221) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result220, + mime_type: lifted222, + }) + } + 25 => { + let result223 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result223) + } + 26 => { + let result224 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result224) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result225 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result225, + }) + } + 30 => { + let result226 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result226, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken(mbt_ffi_load32(iter_base + 8)), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ), + ) + _ => panic() + } + + array228.push(lifted227) + } + mbt_ffi_free(mbt_ffi_load32(result_ptr + 28)) + + Option::Some(@types.TypedSchemaValue::{ + graph: @types.SchemaGraph::{ + type_nodes: array192, + defs: array197, + root: mbt_ffi_load32(result_ptr + 24), + }, + value: @types.SchemaValueTree::{ + value_nodes: array228, + root: mbt_ffi_load32(result_ptr + 36), + }, + }) + } + _ => panic() + } + + let lifted232 : @async-core.Stream[Byte]? = match + mbt_ffi_load8_u(result_ptr + 40) { + 0 => Option::None + 1 => { + let result231 = wasmGolemToolCommon010MethodUnderlyingToolInvokeStream1StreamLift( + mbt_ffi_load32(result_ptr + 44), + ) + + Option::Some(result231) + } + _ => panic() + } + + Result::Ok(InvocationResult::{ result: lifted230, stdout: lifted232 }) + } + 1 => { + let lifted474 = match mbt_ffi_load8_u(result_ptr + 4) { + 0 => { + let result233 = mbt_ffi_ptr2str( + mbt_ffi_load32(result_ptr + 8), + mbt_ffi_load32(result_ptr + 12), + ) + + ToolError::InvalidToolName(result233) + } + 1 => { + let array235 : Array[String] = [] + for index236 = 0 + index236 < mbt_ffi_load32(result_ptr + 12) + index236 = index236 + 1 { + let iter_base = mbt_ffi_load32(result_ptr + 8) + index236 * 8 + + let result234 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array235.push(result234) + } + mbt_ffi_free(mbt_ffi_load32(result_ptr + 8)) + + ToolError::InvalidCommandPath(array235) + } + 2 => { + let result237 = mbt_ffi_ptr2str( + mbt_ffi_load32(result_ptr + 8), + mbt_ffi_load32(result_ptr + 12), + ) + + ToolError::InvalidInput(result237) + } + 3 => { + let result238 = mbt_ffi_ptr2str( + mbt_ffi_load32(result_ptr + 8), + mbt_ffi_load32(result_ptr + 12), + ) + + ToolError::ConstraintViolation(result238) + } + 4 => { + let result239 = mbt_ffi_ptr2str( + mbt_ffi_load32(result_ptr + 8), + mbt_ffi_load32(result_ptr + 12), + ) + + ToolError::InvalidResult(result239) + } + 5 => { + let array436 : Array[@types.SchemaTypeNode] = [] + for index437 = 0 + index437 < mbt_ffi_load32(result_ptr + 12) + index437 = index437 + 1 { + let iter_base = mbt_ffi_load32(result_ptr + 8) + index437 * 144 + + let lifted422 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => @types.SchemaTypeBody::RefType(mbt_ffi_load32(iter_base + 8)) + 1 => @types.SchemaTypeBody::BoolType + 2 => { + let lifted246 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted241 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted240 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted240) + } + _ => panic() + } + + let lifted243 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted242 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted242) + } + _ => panic() + } + + let lifted245 : String? = match + mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result244 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result244) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted241, + max: lifted243, + unit: lifted245, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::S8Type(lifted246) + } + 3 => { + let lifted253 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted248 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted247 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted247) + } + _ => panic() + } + + let lifted250 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted249 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted249) + } + _ => panic() + } + + let lifted252 : String? = match + mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result251 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result251) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted248, + max: lifted250, + unit: lifted252, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::S16Type(lifted253) + } + 4 => { + let lifted260 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted255 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted254 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted254) + } + _ => panic() + } + + let lifted257 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted256 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted256) + } + _ => panic() + } + + let lifted259 : String? = match + mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result258 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result258) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted255, + max: lifted257, + unit: lifted259, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::S32Type(lifted260) + } + 5 => { + let lifted267 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted262 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted261 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted261) + } + _ => panic() + } + + let lifted264 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted263 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted263) + } + _ => panic() + } + + let lifted266 : String? = match + mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result265 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result265) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted262, + max: lifted264, + unit: lifted266, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::S64Type(lifted267) + } + 6 => { + let lifted274 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted269 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted268 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted268) + } + _ => panic() + } + + let lifted271 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted270 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted270) + } + _ => panic() + } + + let lifted273 : String? = match + mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result272 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result272) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted269, + max: lifted271, + unit: lifted273, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::U8Type(lifted274) + } + 7 => { + let lifted281 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted276 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted275 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted275) + } + _ => panic() + } + + let lifted278 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted277 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted277) + } + _ => panic() + } + + let lifted280 : String? = match + mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result279 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result279) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted276, + max: lifted278, + unit: lifted280, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::U16Type(lifted281) + } + 8 => { + let lifted288 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted283 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted282 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted282) + } + _ => panic() + } + + let lifted285 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted284 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted284) + } + _ => panic() + } + + let lifted287 : String? = match + mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result286 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result286) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted283, + max: lifted285, + unit: lifted287, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::U32Type(lifted288) + } + 9 => { + let lifted295 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted290 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted289 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted289) + } + _ => panic() + } + + let lifted292 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted291 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted291) + } + _ => panic() + } + + let lifted294 : String? = match + mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result293 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result293) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted290, + max: lifted292, + unit: lifted294, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::U64Type(lifted295) + } + 10 => { + let lifted302 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted297 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted296 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted296) + } + _ => panic() + } + + let lifted299 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted298 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted298) + } + _ => panic() + } + + let lifted301 : String? = match + mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result300 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result300) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted297, + max: lifted299, + unit: lifted301, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::F32Type(lifted302) + } + 11 => { + let lifted309 : @types.NumericRestrictions? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let lifted304 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let lifted303 = match mbt_ffi_load8_u(iter_base + 24) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 32), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 32).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted303) + } + _ => panic() + } + + let lifted306 : @types.NumericBound? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let lifted305 = match mbt_ffi_load8_u(iter_base + 48) { + 0 => + @types.NumericBound::Signed( + mbt_ffi_load64(iter_base + 56), + ) + 1 => + @types.NumericBound::Unsigned( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + 2 => + @types.NumericBound::FloatBits( + mbt_ffi_load64(iter_base + 56).reinterpret_as_uint64(), + ) + _ => panic() + } + + Option::Some(lifted305) + } + _ => panic() + } + + let lifted308 : String? = match + mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result307 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result307) + } + _ => panic() + } + + Option::Some(@types.NumericRestrictions::{ + min: lifted304, + max: lifted306, + unit: lifted308, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::F64Type(lifted309) + } + 12 => @types.SchemaTypeBody::CharType + 13 => @types.SchemaTypeBody::StringType + 14 => { + let array324 : Array[@types.NamedFieldType] = [] + for index325 = 0 + index325 < mbt_ffi_load32(iter_base + 12) + index325 = index325 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index325 * 68 + + let result310 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted312 : String? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => { + let result311 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + Option::Some(result311) + } + _ => panic() + } + + let array314 : Array[String] = [] + for index315 = 0 + index315 < mbt_ffi_load32(iter_base + 28) + index315 = index315 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index315 * 8 + + let result313 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array314.push(result313) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + let array317 : Array[String] = [] + for index318 = 0 + index318 < mbt_ffi_load32(iter_base + 36) + index318 = index318 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 32) + + index318 * 8 + + let result316 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array317.push(result316) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 32)) + + let lifted320 : String? = match + mbt_ffi_load8_u(iter_base + 40) { + 0 => Option::None + 1 => { + let result319 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 44), + mbt_ffi_load32(iter_base + 48), + ) + + Option::Some(result319) + } + _ => panic() + } + + let lifted323 : @types.Role? = match + mbt_ffi_load8_u(iter_base + 52) { + 0 => Option::None + 1 => { + let lifted322 = match mbt_ffi_load8_u(iter_base + 56) { + 0 => @types.Role::Multimodal + 1 => @types.Role::UnstructuredText + 2 => @types.Role::UnstructuredBinary + 3 => { + let result321 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 60), + mbt_ffi_load32(iter_base + 64), + ) + + @types.Role::Other(result321) + } + _ => panic() + } + + Option::Some(lifted322) + } + _ => panic() + } + + array324.push(@types.NamedFieldType::{ + name: result310, + body: mbt_ffi_load32(iter_base + 8), + metadata: @types.MetadataEnvelope::{ + doc: lifted312, + aliases: array314, + examples: array317, + deprecated: lifted320, + role: lifted323, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::RecordType(array324) + } + 15 => { + let array341 : Array[@types.VariantCaseType] = [] + for index342 = 0 + index342 < mbt_ffi_load32(iter_base + 12) + index342 = index342 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index342 * 72 + + let result326 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted327 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + let lifted329 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result328 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result328) + } + _ => panic() + } + + let array331 : Array[String] = [] + for index332 = 0 + index332 < mbt_ffi_load32(iter_base + 32) + index332 = index332 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index332 * 8 + + let result330 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array331.push(result330) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + let array334 : Array[String] = [] + for index335 = 0 + index335 < mbt_ffi_load32(iter_base + 40) + index335 = index335 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 36) + + index335 * 8 + + let result333 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array334.push(result333) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 36)) + + let lifted337 : String? = match + mbt_ffi_load8_u(iter_base + 44) { + 0 => Option::None + 1 => { + let result336 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 48), + mbt_ffi_load32(iter_base + 52), + ) + + Option::Some(result336) + } + _ => panic() + } + + let lifted340 : @types.Role? = match + mbt_ffi_load8_u(iter_base + 56) { + 0 => Option::None + 1 => { + let lifted339 = match mbt_ffi_load8_u(iter_base + 60) { + 0 => @types.Role::Multimodal + 1 => @types.Role::UnstructuredText + 2 => @types.Role::UnstructuredBinary + 3 => { + let result338 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 64), + mbt_ffi_load32(iter_base + 68), + ) + + @types.Role::Other(result338) + } + _ => panic() + } + + Option::Some(lifted339) + } + _ => panic() + } + + array341.push(@types.VariantCaseType::{ + name: result326, + payload: lifted327, + metadata: @types.MetadataEnvelope::{ + doc: lifted329, + aliases: array331, + examples: array334, + deprecated: lifted337, + role: lifted340, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::VariantType(array341) + } + 16 => { + let array344 : Array[String] = [] + for index345 = 0 + index345 < mbt_ffi_load32(iter_base + 12) + index345 = index345 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index345 * 8 + + let result343 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array344.push(result343) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::EnumType(array344) + } + 17 => { + let array347 : Array[String] = [] + for index348 = 0 + index348 < mbt_ffi_load32(iter_base + 12) + index348 = index348 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index348 * 8 + + let result346 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array347.push(result346) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::FlagsType(array347) + } + 18 => { + let array349 : Array[Int] = [] + for index350 = 0 + index350 < mbt_ffi_load32(iter_base + 12) + index350 = index350 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index350 * 4 + + array349.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::TupleType(array349) + } + 19 => + @types.SchemaTypeBody::ListType(mbt_ffi_load32(iter_base + 8)) + 20 => + @types.SchemaTypeBody::FixedListType(@types.FixedListSpec::{ + element: mbt_ffi_load32(iter_base + 8), + length: mbt_ffi_load32(iter_base + 12).reinterpret_as_uint(), + }) + 21 => + @types.SchemaTypeBody::MapType(@types.MapSpec::{ + key: mbt_ffi_load32(iter_base + 8), + value: mbt_ffi_load32(iter_base + 12), + }) + 22 => + @types.SchemaTypeBody::OptionType(mbt_ffi_load32(iter_base + 8)) + 23 => { + let lifted351 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + let lifted352 : Int? = match mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 20)) + _ => panic() + } + + @types.SchemaTypeBody::ResultType(@types.ResultSpec::{ + ok: lifted351, + err: lifted352, + }) + } + 24 => { + let lifted356 : Array[String]? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let array354 : Array[String] = [] + for index355 = 0 + index355 < mbt_ffi_load32(iter_base + 16) + index355 = index355 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index355 * 8 + + let result353 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array354.push(result353) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + Option::Some(array354) + } + _ => panic() + } + + let lifted357 : UInt? = match mbt_ffi_load8_u(iter_base + 20) { + 0 => Option::None + 1 => + Option::Some( + mbt_ffi_load32(iter_base + 24).reinterpret_as_uint(), + ) + _ => panic() + } + + let lifted358 : UInt? = match mbt_ffi_load8_u(iter_base + 28) { + 0 => Option::None + 1 => + Option::Some( + mbt_ffi_load32(iter_base + 32).reinterpret_as_uint(), + ) + _ => panic() + } + + let lifted360 : String? = match + mbt_ffi_load8_u(iter_base + 36) { + 0 => Option::None + 1 => { + let result359 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 40), + mbt_ffi_load32(iter_base + 44), + ) + + Option::Some(result359) + } + _ => panic() + } + + @types.SchemaTypeBody::TextType(@types.TextRestrictions::{ + languages: lifted356, + min_length: lifted357, + max_length: lifted358, + regex: lifted360, + }) + } + 25 => { + let lifted364 : Array[String]? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let array362 : Array[String] = [] + for index363 = 0 + index363 < mbt_ffi_load32(iter_base + 16) + index363 = index363 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index363 * 8 + + let result361 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array362.push(result361) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + Option::Some(array362) + } + _ => panic() + } + + let lifted365 : UInt? = match mbt_ffi_load8_u(iter_base + 20) { + 0 => Option::None + 1 => + Option::Some( + mbt_ffi_load32(iter_base + 24).reinterpret_as_uint(), + ) + _ => panic() + } + + let lifted366 : UInt? = match mbt_ffi_load8_u(iter_base + 28) { + 0 => Option::None + 1 => + Option::Some( + mbt_ffi_load32(iter_base + 32).reinterpret_as_uint(), + ) + _ => panic() + } + + @types.SchemaTypeBody::BinaryType(@types.BinaryRestrictions::{ + mime_types: lifted364, + min_bytes: lifted365, + max_bytes: lifted366, + }) + } + 26 => { + let lifted370 : Array[String]? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => { + let array368 : Array[String] = [] + for index369 = 0 + index369 < mbt_ffi_load32(iter_base + 20) + index369 = index369 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + + index369 * 8 + + let result367 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array368.push(result367) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + Option::Some(array368) + } + _ => panic() + } + + let lifted374 : Array[String]? = match + mbt_ffi_load8_u(iter_base + 24) { + 0 => Option::None + 1 => { + let array372 : Array[String] = [] + for index373 = 0 + index373 < mbt_ffi_load32(iter_base + 32) + index373 = index373 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 28) + + index373 * 8 + + let result371 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array372.push(result371) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 28)) + + Option::Some(array372) + } + _ => panic() + } + + @types.SchemaTypeBody::PathType(@types.PathSpec::{ + direction: @types.PathDirection::from( + mbt_ffi_load8_u(iter_base + 8), + ), + kind: @types.PathKind::from(mbt_ffi_load8_u(iter_base + 9)), + allowed_mime_types: lifted370, + allowed_extensions: lifted374, + }) + } + 27 => { + let lifted378 : Array[String]? = match + mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let array376 : Array[String] = [] + for index377 = 0 + index377 < mbt_ffi_load32(iter_base + 16) + index377 = index377 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 12) + + index377 * 8 + + let result375 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array376.push(result375) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 12)) + + Option::Some(array376) + } + _ => panic() + } + + let lifted382 : Array[String]? = match + mbt_ffi_load8_u(iter_base + 20) { + 0 => Option::None + 1 => { + let array380 : Array[String] = [] + for index381 = 0 + index381 < mbt_ffi_load32(iter_base + 28) + index381 = index381 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 24) + + index381 * 8 + + let result379 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array380.push(result379) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 24)) + + Option::Some(array380) + } + _ => panic() + } + + @types.SchemaTypeBody::UrlType(@types.UrlRestrictions::{ + allowed_schemes: lifted378, + allowed_hosts: lifted382, + }) + } + 28 => @types.SchemaTypeBody::DatetimeType + 29 => @types.SchemaTypeBody::DurationType + 30 => { + let result383 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let array385 : Array[String] = [] + for index386 = 0 + index386 < mbt_ffi_load32(iter_base + 20) + index386 = index386 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 16) + index386 * 8 + + let result384 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array385.push(result384) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 16)) + + let lifted388 : @types.QuantityValue? = match + mbt_ffi_load8_u(iter_base + 24) { + 0 => Option::None + 1 => { + let result387 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 44), + mbt_ffi_load32(iter_base + 48), + ) + + Option::Some(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 32), + scale: mbt_ffi_load32(iter_base + 40), + unit: result387, + }) + } + _ => panic() + } + + let lifted390 : @types.QuantityValue? = match + mbt_ffi_load8_u(iter_base + 56) { + 0 => Option::None + 1 => { + let result389 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 76), + mbt_ffi_load32(iter_base + 80), + ) + + Option::Some(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 64), + scale: mbt_ffi_load32(iter_base + 72), + unit: result389, + }) + } + _ => panic() + } + + @types.SchemaTypeBody::QuantityType(@types.QuantitySpec::{ + base_unit: result383, + allowed_suffixes: array385, + min: lifted388, + max: lifted390, + }) + } + 31 => { + let array414 : Array[@types.UnionBranch] = [] + for index415 = 0 + index415 < mbt_ffi_load32(iter_base + 12) + index415 = index415 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index415 * 92 + + let result391 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted400 = match mbt_ffi_load8_u(iter_base + 12) { + 0 => { + let result392 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::Prefix(result392) + } + 1 => { + let result393 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::Suffix(result393) + } + 2 => { + let result394 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::Contains(result394) + } + 3 => { + let result395 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::Regex(result395) + } + 4 => { + let result396 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + let lifted398 : String? = match + mbt_ffi_load8_u(iter_base + 24) { + 0 => Option::None + 1 => { + let result397 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 28), + mbt_ffi_load32(iter_base + 32), + ) + + Option::Some(result397) + } + _ => panic() + } + + @types.DiscriminatorRule::FieldEquals(@types.FieldDiscriminator::{ + field_name: result396, + literal: lifted398, + }) + } + 5 => { + let result399 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + @types.DiscriminatorRule::FieldAbsent(result399) + } + _ => panic() + } + + let lifted402 : String? = match + mbt_ffi_load8_u(iter_base + 36) { + 0 => Option::None + 1 => { + let result401 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 40), + mbt_ffi_load32(iter_base + 44), + ) + + Option::Some(result401) + } + _ => panic() + } + + let array404 : Array[String] = [] + for index405 = 0 + index405 < mbt_ffi_load32(iter_base + 52) + index405 = index405 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 48) + + index405 * 8 + + let result403 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array404.push(result403) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 48)) + + let array407 : Array[String] = [] + for index408 = 0 + index408 < mbt_ffi_load32(iter_base + 60) + index408 = index408 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 56) + + index408 * 8 + + let result406 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array407.push(result406) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 56)) + + let lifted410 : String? = match + mbt_ffi_load8_u(iter_base + 64) { + 0 => Option::None + 1 => { + let result409 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 68), + mbt_ffi_load32(iter_base + 72), + ) + + Option::Some(result409) + } + _ => panic() + } + + let lifted413 : @types.Role? = match + mbt_ffi_load8_u(iter_base + 76) { + 0 => Option::None + 1 => { + let lifted412 = match mbt_ffi_load8_u(iter_base + 80) { + 0 => @types.Role::Multimodal + 1 => @types.Role::UnstructuredText + 2 => @types.Role::UnstructuredBinary + 3 => { + let result411 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 84), + mbt_ffi_load32(iter_base + 88), + ) + + @types.Role::Other(result411) + } + _ => panic() + } + + Option::Some(lifted412) + } + _ => panic() + } + + array414.push(@types.UnionBranch::{ + tag: result391, + body: mbt_ffi_load32(iter_base + 8), + discriminator: lifted400, + metadata: @types.MetadataEnvelope::{ + doc: lifted402, + aliases: array404, + examples: array407, + deprecated: lifted410, + role: lifted413, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaTypeBody::UnionType(@types.UnionSpec::{ + branches: array414, + }) + } + 32 => { + let lifted417 : String? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => { + let result416 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 16), + mbt_ffi_load32(iter_base + 20), + ) + + Option::Some(result416) + } + _ => panic() + } + + @types.SchemaTypeBody::SecretType(@types.SecretSpec::{ + inner: mbt_ffi_load32(iter_base + 8), + category: lifted417, + }) + } + 33 => { + let lifted419 : String? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let result418 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 12), + mbt_ffi_load32(iter_base + 16), + ) + + Option::Some(result418) + } + _ => panic() + } + + @types.SchemaTypeBody::QuotaTokenType(@types.QuotaTokenSpec::{ + resource_name: lifted419, + }) + } + 34 => + @types.SchemaTypeBody::PermissionCardType(@types.PermissionCardSpec::{ + polymorphic: mbt_ffi_load8_u(iter_base + 8) != 0, + }) + 35 => { + let lifted420 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaTypeBody::FutureType(lifted420) + } + 36 => { + let lifted421 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaTypeBody::StreamType(lifted421) + } + _ => panic() + } + + let lifted424 : String? = match mbt_ffi_load8_u(iter_base + 88) { + 0 => Option::None + 1 => { + let result423 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 92), + mbt_ffi_load32(iter_base + 96), + ) + + Option::Some(result423) + } + _ => panic() + } + + let array426 : Array[String] = [] + for index427 = 0 + index427 < mbt_ffi_load32(iter_base + 104) + index427 = index427 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 100) + index427 * 8 + + let result425 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array426.push(result425) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 100)) + + let array429 : Array[String] = [] + for index430 = 0 + index430 < mbt_ffi_load32(iter_base + 112) + index430 = index430 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 108) + index430 * 8 + + let result428 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + array429.push(result428) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 108)) + + let lifted432 : String? = match mbt_ffi_load8_u(iter_base + 116) { + 0 => Option::None + 1 => { + let result431 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 120), + mbt_ffi_load32(iter_base + 124), + ) + + Option::Some(result431) + } + _ => panic() + } + + let lifted435 : @types.Role? = match + mbt_ffi_load8_u(iter_base + 128) { + 0 => Option::None + 1 => { + let lifted434 = match mbt_ffi_load8_u(iter_base + 132) { + 0 => @types.Role::Multimodal + 1 => @types.Role::UnstructuredText + 2 => @types.Role::UnstructuredBinary + 3 => { + let result433 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 136), + mbt_ffi_load32(iter_base + 140), + ) + + @types.Role::Other(result433) + } + _ => panic() + } + + Option::Some(lifted434) + } + _ => panic() + } + + array436.push(@types.SchemaTypeNode::{ + body: lifted422, + metadata: @types.MetadataEnvelope::{ + doc: lifted424, + aliases: array426, + examples: array429, + deprecated: lifted432, + role: lifted435, + }, + }) + } + mbt_ffi_free(mbt_ffi_load32(result_ptr + 8)) + + let array441 : Array[@types.SchemaTypeDef] = [] + for index442 = 0 + index442 < mbt_ffi_load32(result_ptr + 20) + index442 = index442 + 1 { + let iter_base = mbt_ffi_load32(result_ptr + 16) + index442 * 24 + + let result438 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 0), + mbt_ffi_load32(iter_base + 4), + ) + + let lifted440 : String? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => { + let result439 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 12), + mbt_ffi_load32(iter_base + 16), + ) + + Option::Some(result439) + } + _ => panic() + } + + array441.push(@types.SchemaTypeDef::{ + id: result438, + name: lifted440, + body: mbt_ffi_load32(iter_base + 20), + }) + } + mbt_ffi_free(mbt_ffi_load32(result_ptr + 16)) + + let array472 : Array[@types.SchemaValueNode] = [] + for index473 = 0 + index473 < mbt_ffi_load32(result_ptr + 32) + index473 = index473 + 1 { + let iter_base = mbt_ffi_load32(result_ptr + 28) + index473 * 32 + + let lifted471 = match mbt_ffi_load8_u(iter_base + 0) { + 0 => + @types.SchemaValueNode::BoolValue( + mbt_ffi_load8_u(iter_base + 8) != 0, + ) + 1 => @types.SchemaValueNode::S8Value(mbt_ffi_load8(iter_base + 8)) + 2 => + @types.SchemaValueNode::S16Value(mbt_ffi_load16(iter_base + 8)) + 3 => + @types.SchemaValueNode::S32Value(mbt_ffi_load32(iter_base + 8)) + 4 => + @types.SchemaValueNode::S64Value(mbt_ffi_load64(iter_base + 8)) + 5 => + @types.SchemaValueNode::U8Value( + mbt_ffi_load8_u(iter_base + 8).to_byte(), + ) + 6 => + @types.SchemaValueNode::U16Value( + mbt_ffi_load16_u(iter_base + 8) + .land(0xFFFF) + .reinterpret_as_uint(), + ) + 7 => + @types.SchemaValueNode::U32Value( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 8 => + @types.SchemaValueNode::U64Value( + mbt_ffi_load64(iter_base + 8).reinterpret_as_uint64(), + ) + 9 => + @types.SchemaValueNode::F32Value(mbt_ffi_loadf32(iter_base + 8)) + 10 => + @types.SchemaValueNode::F64Value(mbt_ffi_loadf64(iter_base + 8)) + 11 => + @types.SchemaValueNode::CharValue( + Int::unsafe_to_char(mbt_ffi_load32(iter_base + 8)), + ) + 12 => { + let result443 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::StringValue(result443) + } + 13 => { + let array444 : Array[Int] = [] + for index445 = 0 + index445 < mbt_ffi_load32(iter_base + 12) + index445 = index445 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index445 * 4 + + array444.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::RecordValue(array444) + } + 14 => { + let lifted446 : Int? = match mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.SchemaValueNode::VariantValue(@types.VariantValuePayload::{ + case: mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + payload: lifted446, + }) + } + 15 => + @types.SchemaValueNode::EnumValue( + mbt_ffi_load32(iter_base + 8).reinterpret_as_uint(), + ) + 16 => { + let array447 : Array[Bool] = [] + for index448 = 0 + index448 < mbt_ffi_load32(iter_base + 12) + index448 = index448 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index448 * 1 + + array447.push(mbt_ffi_load8_u(iter_base + 0) != 0) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FlagsValue(array447) + } + 17 => { + let array449 : Array[Int] = [] + for index450 = 0 + index450 < mbt_ffi_load32(iter_base + 12) + index450 = index450 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index450 * 4 + + array449.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::TupleValue(array449) + } + 18 => { + let array451 : Array[Int] = [] + for index452 = 0 + index452 < mbt_ffi_load32(iter_base + 12) + index452 = index452 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index452 * 4 + + array451.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::ListValue(array451) + } + 19 => { + let array453 : Array[Int] = [] + for index454 = 0 + index454 < mbt_ffi_load32(iter_base + 12) + index454 = index454 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index454 * 4 + + array453.push(mbt_ffi_load32(iter_base + 0)) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::FixedListValue(array453) + } + 20 => { + let array455 : Array[@types.MapEntry] = [] + for index456 = 0 + index456 < mbt_ffi_load32(iter_base + 12) + index456 = index456 + 1 { + let iter_base = mbt_ffi_load32(iter_base + 8) + index456 * 8 + + array455.push(@types.MapEntry::{ + key: mbt_ffi_load32(iter_base + 0), + value: mbt_ffi_load32(iter_base + 4), + }) + } + mbt_ffi_free(mbt_ffi_load32(iter_base + 8)) + + @types.SchemaValueNode::MapValue(array455) + } + 21 => { + let lifted457 : Int? = match mbt_ffi_load8_u(iter_base + 8) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 12)) + _ => panic() + } + + @types.SchemaValueNode::OptionValue(lifted457) + } + 22 => { + let lifted460 = match mbt_ffi_load8_u(iter_base + 8) { + 0 => { + let lifted458 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::OkValue(lifted458) + } + 1 => { + let lifted459 : Int? = match + mbt_ffi_load8_u(iter_base + 12) { + 0 => Option::None + 1 => Option::Some(mbt_ffi_load32(iter_base + 16)) + _ => panic() + } + + @types.ResultValuePayload::ErrValue(lifted459) + } + _ => panic() + } + + @types.SchemaValueNode::ResultValue(lifted460) + } + 23 => { + let result461 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted463 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result462 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result462) + } + _ => panic() + } + + @types.SchemaValueNode::TextValue(@types.TextValuePayload::{ + text: result461, + language: lifted463, + }) + } + 24 => { + let result464 = mbt_ffi_ptr2bytes( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + let lifted466 : String? = match + mbt_ffi_load8_u(iter_base + 16) { + 0 => Option::None + 1 => { + let result465 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + Option::Some(result465) + } + _ => panic() + } + + @types.SchemaValueNode::BinaryValue(@types.BinaryValuePayload::{ + bytes: result464, + mime_type: lifted466, + }) + } + 25 => { + let result467 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::PathValue(result467) + } + 26 => { + let result468 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UrlValue(result468) + } + 27 => + @types.SchemaValueNode::DatetimeValue(@types.Datetime::{ + seconds: mbt_ffi_load64(iter_base + 8), + nanoseconds: mbt_ffi_load32(iter_base + 16).reinterpret_as_uint(), + }) + 28 => + @types.SchemaValueNode::DurationValue(@types.DurationValuePayload::{ + nanoseconds: mbt_ffi_load64(iter_base + 8), + }) + 29 => { + let result469 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 20), + mbt_ffi_load32(iter_base + 24), + ) + + @types.SchemaValueNode::QuantityValueNode(@types.QuantityValue::{ + mantissa: mbt_ffi_load64(iter_base + 8), + scale: mbt_ffi_load32(iter_base + 16), + unit: result469, + }) + } + 30 => { + let result470 = mbt_ffi_ptr2str( + mbt_ffi_load32(iter_base + 8), + mbt_ffi_load32(iter_base + 12), + ) + + @types.SchemaValueNode::UnionValue(@types.UnionValuePayload::{ + tag: result470, + body: mbt_ffi_load32(iter_base + 16), + }) + } + 31 => + @types.SchemaValueNode::SecretValue( + @types.Secret::Secret(mbt_ffi_load32(iter_base + 8)), + ) + 32 => + @types.SchemaValueNode::QuotaTokenHandle( + @types.QuotaToken::QuotaToken(mbt_ffi_load32(iter_base + 8)), + ) + 33 => + @types.SchemaValueNode::PermissionCardHandle( + @types.PermissionCard::PermissionCard( + mbt_ffi_load32(iter_base + 8), + ), + ) + _ => panic() + } + + array472.push(lifted471) + } + mbt_ffi_free(mbt_ffi_load32(result_ptr + 28)) + + ToolError::CustomError(@types.TypedSchemaValue::{ + graph: @types.SchemaGraph::{ + type_nodes: array436, + defs: array441, + root: mbt_ffi_load32(result_ptr + 24), + }, + value: @types.SchemaValueTree::{ + value_nodes: array472, + root: mbt_ffi_load32(result_ptr + 36), + }, + }) + } + _ => panic() + } + + Result::Err(lifted474) + } + _ => panic() + } + + lifted475 +} diff --git a/sdks/moonbit/golem_sdk/interface/golem/tool/host/ffi.mbt b/sdks/moonbit/golem_sdk/interface/golem/tool/host/ffi.mbt index bb5a18dd85..58e778eaf4 100644 --- a/sdks/moonbit/golem_sdk/interface/golem/tool/host/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/golem/tool/host/ffi.mbt @@ -2087,34 +2087,38 @@ fn wasmGolemToolHost010MethodFutureInvokeResultGetStream0StreamLift( ///| fn wasmImportMethodFutureInvokeResultCancel(p0 : Int) = "golem:tool/host@0.1.0" "[method]future-invoke-result.cancel" +///| +#owned(bytes) +extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = + #|(func (param i32) (result i32) local.get 0) + +///| +extern "wasm" fn mbt_ffi_extend16(value : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.extend16_s) + ///| extern "wasm" fn mbt_ffi_extend8(value : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.extend8_s) ///| -extern "wasm" fn mbt_ffi_storef64(offset : Int, value : Double) = - #|(func (param i32) (param f64) local.get 0 local.get 1 f64.store) +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) ///| -extern "wasm" fn mbt_ffi_store16(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store16) +extern "wasm" fn mbt_ffi_load16(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load16_s) ///| extern "wasm" fn mbt_ffi_load16_u(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load16_u) ///| -extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = - #|(func (param i32) (result i64) local.get 0 i64.load) - -///| -#owned(str) -extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = - #|(func (param i32) (result i32) local.get 0) +extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load) ///| -extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = - #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) +extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = + #|(func (param i32) (result i64) local.get 0 i64.load) ///| extern "wasm" fn mbt_ffi_load8(offset : Int) -> Int = @@ -2124,38 +2128,14 @@ extern "wasm" fn mbt_ffi_load8(offset : Int) -> Int = extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load8_u) -///| -extern "wasm" fn mbt_ffi_extend16(value : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.extend16_s) - ///| extern "wasm" fn mbt_ffi_loadf32(offset : Int) -> Float = #|(func (param i32) (result f32) local.get 0 f32.load) -///| -extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = - #|(func (param i32) (param i32) (result i32) - #| local.get 0 - #| local.get 1 call $moonbit.init_array16 - #| local.get 0) - ///| extern "wasm" fn mbt_ffi_loadf64(offset : Int) -> Double = #|(func (param i32) (result f64) local.get 0 f64.load) -///| -#owned(bytes) -extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = - #|(func (param i32) (result i32) local.get 0) - -///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) - -///| -extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) - ///| extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #|(func (param i32) (result i32) (local i32) @@ -2163,10 +2143,6 @@ extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #| local.tee 1 i32.const 0 call $moonbit.init_array8 #| local.get 1) -///| -extern "wasm" fn mbt_ffi_load16(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load16_s) - ///| extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = #|(func (param i32) (param i32) (result i32) @@ -2174,6 +2150,25 @@ extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = #| local.get 1 call $moonbit.init_array8 #| local.get 0) +///| +extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array16 + #| local.get 0) + +///| +extern "wasm" fn mbt_ffi_store16(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store16) + +///| +extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) + +///| +extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = + #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) + ///| extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) @@ -2183,5 +2178,10 @@ extern "wasm" fn mbt_ffi_storef32(offset : Int, value : Float) = #|(func (param i32) (param f32) local.get 0 local.get 1 f32.store) ///| -extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load) +extern "wasm" fn mbt_ffi_storef64(offset : Int, value : Double) = + #|(func (param i32) (param f64) local.get 0 local.get 1 f64.store) + +///| +#owned(str) +extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = + #|(func (param i32) (result i32) local.get 0) diff --git a/sdks/moonbit/golem_sdk/interface/golem/websocket/client/ffi.mbt b/sdks/moonbit/golem_sdk/interface/golem/websocket/client/ffi.mbt index 2121fd2d39..806d4049f7 100644 --- a/sdks/moonbit/golem_sdk/interface/golem/websocket/client/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/golem/websocket/client/ffi.mbt @@ -44,25 +44,26 @@ fn wasmImportMethodWebsocketConnectionClose( ) = "golem:websocket/client@1.5.0" "[method]websocket-connection.close" ///| -#owned(str) -extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = +#owned(bytes) +extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = #|(func (param i32) (result i32) local.get 0) ///| -extern "wasm" fn mbt_ffi_load16_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load16_u) +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) ///| -extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = - #|(func (param i32) (param i32) (result i32) - #| local.get 0 - #| local.get 1 call $moonbit.init_array16 - #| local.get 0) +extern "wasm" fn mbt_ffi_load16_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load16_u) ///| extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load) +///| +extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_u) + ///| extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #|(func (param i32) (result i32) (local i32) @@ -71,25 +72,24 @@ extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #| local.get 1) ///| -extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) - -///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) +extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array8 + #| local.get 0) ///| -#owned(bytes) -extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = - #|(func (param i32) (result i32) local.get 0) +extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array16 + #| local.get 0) ///| -extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load8_u) +extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) ///| -extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = - #|(func (param i32) (param i32) (result i32) - #| local.get 0 - #| local.get 1 call $moonbit.init_array8 - #| local.get 0) +#owned(str) +extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = + #|(func (param i32) (result i32) local.get 0) diff --git a/sdks/moonbit/golem_sdk/interface/wasi/blobstore/blobstore/ffi.mbt b/sdks/moonbit/golem_sdk/interface/wasi/blobstore/blobstore/ffi.mbt index b2fd28a413..3f3affd13c 100644 --- a/sdks/moonbit/golem_sdk/interface/wasi/blobstore/blobstore/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/wasi/blobstore/blobstore/ffi.mbt @@ -39,25 +39,24 @@ fn wasmImportMoveObject( ) = "wasi:blobstore/blobstore" "move-object" ///| -extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = - #|(func (param i32) (result i32) (local i32) - #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc - #| local.tee 1 i32.const 0 call $moonbit.init_array8 - #| local.get 1) +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) ///| extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load) -///| -#owned(str) -extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = - #|(func (param i32) (result i32) local.get 0) - ///| extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load8_u) +///| +extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = + #|(func (param i32) (result i32) (local i32) + #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc + #| local.tee 1 i32.const 0 call $moonbit.init_array8 + #| local.get 1) + ///| extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = #|(func (param i32) (param i32) (result i32) @@ -66,5 +65,6 @@ extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = #| local.get 0) ///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) +#owned(str) +extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = + #|(func (param i32) (result i32) local.get 0) diff --git a/sdks/moonbit/golem_sdk/interface/wasi/blobstore/container/ffi.mbt b/sdks/moonbit/golem_sdk/interface/wasi/blobstore/container/ffi.mbt index 2689a2f01d..ea8ee8f194 100644 --- a/sdks/moonbit/golem_sdk/interface/wasi/blobstore/container/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/wasi/blobstore/container/ffi.mbt @@ -323,20 +323,27 @@ fn wasmImportMethodContainerObjectInfo(p0 : Int, p1 : Int, p2 : Int, p3 : Int) = fn wasmImportMethodContainerClear(p0 : Int, p1 : Int) = "wasi:blobstore/container" "[method]container.clear" ///| -extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = - #|(func (param i32) (result i32) (local i32) - #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc - #| local.tee 1 i32.const 0 call $moonbit.init_array8 - #| local.get 1) +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) ///| extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load) ///| -#owned(str) -extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = - #|(func (param i32) (result i32) local.get 0) +extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = + #|(func (param i32) (result i64) local.get 0 i64.load) + +///| +extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_u) + +///| +extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = + #|(func (param i32) (result i32) (local i32) + #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc + #| local.tee 1 i32.const 0 call $moonbit.init_array8 + #| local.get 1) ///| extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = @@ -345,18 +352,11 @@ extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = #| local.get 1 call $moonbit.init_array16 #| local.get 0) -///| -extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load8_u) - -///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) - ///| extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) ///| -extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = - #|(func (param i32) (result i64) local.get 0 i64.load) +#owned(str) +extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = + #|(func (param i32) (result i32) local.get 0) diff --git a/sdks/moonbit/golem_sdk/interface/wasi/blobstore/types/ffi.mbt b/sdks/moonbit/golem_sdk/interface/wasi/blobstore/types/ffi.mbt index 53b9447427..c5b0a1fe83 100644 --- a/sdks/moonbit/golem_sdk/interface/wasi/blobstore/types/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/wasi/blobstore/types/ffi.mbt @@ -806,6 +806,18 @@ fn wasmWasiBlobstoreTypesMethodIncomingValueIncomingValueConsumeAsyncStream0Stre ///| fn wasmImportMethodIncomingValueSize(p0 : Int) -> Int64 = "wasi:blobstore/types" "[method]incoming-value.size" +///| +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) + +///| +extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load) + +///| +extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_u) + ///| extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #|(func (param i32) (result i32) (local i32) @@ -814,31 +826,19 @@ extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #| local.get 1) ///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) - -///| -extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = +extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = #|(func (param i32) (param i32) (result i32) #| local.get 0 - #| local.get 1 call $moonbit.init_array16 + #| local.get 1 call $moonbit.init_array8 #| local.get 0) ///| -extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = +extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = #|(func (param i32) (param i32) (result i32) #| local.get 0 - #| local.get 1 call $moonbit.init_array8 + #| local.get 1 call $moonbit.init_array16 #| local.get 0) ///| extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) - -///| -extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load) - -///| -extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load8_u) diff --git a/sdks/moonbit/golem_sdk/interface/wasi/cli/environment/ffi.mbt b/sdks/moonbit/golem_sdk/interface/wasi/cli/environment/ffi.mbt index 575e91319c..874d5f2177 100644 --- a/sdks/moonbit/golem_sdk/interface/wasi/cli/environment/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/wasi/cli/environment/ffi.mbt @@ -9,24 +9,17 @@ fn wasmImportGetArguments(p0 : Int) = "wasi:cli/environment@0.3.0" "get-argument ///| fn wasmImportGetInitialCwd(p0 : Int) = "wasi:cli/environment@0.3.0" "get-initial-cwd" -///| -extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load) - ///| extern "wasm" fn mbt_ffi_free(position : Int) = #|(func (param i32) local.get 0 call $moonbit.decref) ///| -extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load8_u) +extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load) ///| -extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = - #|(func (param i32) (param i32) (result i32) - #| local.get 0 - #| local.get 1 call $moonbit.init_array16 - #| local.get 0) +extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_u) ///| extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = @@ -34,3 +27,10 @@ extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc #| local.tee 1 i32.const 0 call $moonbit.init_array8 #| local.get 1) + +///| +extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array16 + #| local.get 0) diff --git a/sdks/moonbit/golem_sdk/interface/wasi/cli/types/pkg.generated.mbti b/sdks/moonbit/golem_sdk/interface/wasi/cli/types/pkg.generated.mbti index 0998df10cf..bac9784c43 100644 --- a/sdks/moonbit/golem_sdk/interface/wasi/cli/types/pkg.generated.mbti +++ b/sdks/moonbit/golem_sdk/interface/wasi/cli/types/pkg.generated.mbti @@ -4,13 +4,6 @@ package "golemcloud/golem_sdk/interface/wasi/cli/types" // Values // Errors -pub(all) suberror ErrorCode { - IO - ILLEGAL_BYTE_SEQUENCE - PIPE -} derive(Eq, Show) -pub fn ErrorCode::from(Int) -> Self -pub fn ErrorCode::ordinal(Self) -> Int // Types and methods diff --git a/sdks/moonbit/golem_sdk/interface/wasi/cli/types/top.mbt b/sdks/moonbit/golem_sdk/interface/wasi/cli/types/top.mbt deleted file mode 100644 index 6bd979922a..0000000000 --- a/sdks/moonbit/golem_sdk/interface/wasi/cli/types/top.mbt +++ /dev/null @@ -1,27 +0,0 @@ -// Generated by `wit-bindgen` 0.59.0. DO NOT EDIT! - -///| -pub(all) suberror ErrorCode { - IO - ILLEGAL_BYTE_SEQUENCE - PIPE -} derive(Show, Eq) - -///| -pub fn ErrorCode::ordinal(self : ErrorCode) -> Int { - match self { - IO => 0 - ILLEGAL_BYTE_SEQUENCE => 1 - PIPE => 2 - } -} - -///| -pub fn ErrorCode::from(self : Int) -> ErrorCode { - match self { - 0 => IO - 1 => ILLEGAL_BYTE_SEQUENCE - 2 => PIPE - _ => panic() - } -} diff --git a/sdks/moonbit/golem_sdk/interface/wasi/clocks/system-clock/ffi.mbt b/sdks/moonbit/golem_sdk/interface/wasi/clocks/system-clock/ffi.mbt index ac251875bb..3b7e689717 100644 --- a/sdks/moonbit/golem_sdk/interface/wasi/clocks/system-clock/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/wasi/clocks/system-clock/ffi.mbt @@ -7,20 +7,20 @@ fn wasmImportNow(p0 : Int) = "wasi:clocks/system-clock@0.3.0" "now" fn wasmImportGetResolution() -> Int64 = "wasi:clocks/system-clock@0.3.0" "get-resolution" ///| -extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = - #|(func (param i32) (result i32) (local i32) - #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc - #| local.tee 1 i32.const 0 call $moonbit.init_array8 - #| local.get 1) - -///| -extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = - #|(func (param i32) (result i64) local.get 0 i64.load) +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) ///| extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load) ///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) +extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = + #|(func (param i32) (result i64) local.get 0 i64.load) + +///| +extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = + #|(func (param i32) (result i32) (local i32) + #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc + #| local.tee 1 i32.const 0 call $moonbit.init_array8 + #| local.get 1) diff --git a/sdks/moonbit/golem_sdk/interface/wasi/config/store/ffi.mbt b/sdks/moonbit/golem_sdk/interface/wasi/config/store/ffi.mbt index 68ed3f4d63..b3333c5b80 100644 --- a/sdks/moonbit/golem_sdk/interface/wasi/config/store/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/wasi/config/store/ffi.mbt @@ -7,32 +7,32 @@ fn wasmImportGet(p0 : Int, p1 : Int, p2 : Int) = "wasi:config/store@0.2.0-draft" fn wasmImportGetAll(p0 : Int) = "wasi:config/store@0.2.0-draft" "get-all" ///| -#owned(str) -extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = - #|(func (param i32) (result i32) local.get 0) +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) ///| extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load) -///| -extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = - #|(func (param i32) (param i32) (result i32) - #| local.get 0 - #| local.get 1 call $moonbit.init_array16 - #| local.get 0) - ///| extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load8_u) -///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) - ///| extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #|(func (param i32) (result i32) (local i32) #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc #| local.tee 1 i32.const 0 call $moonbit.init_array8 #| local.get 1) + +///| +extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array16 + #| local.get 0) + +///| +#owned(str) +extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = + #|(func (param i32) (result i32) local.get 0) diff --git a/sdks/moonbit/golem_sdk/interface/wasi/filesystem/preopens/ffi.mbt b/sdks/moonbit/golem_sdk/interface/wasi/filesystem/preopens/ffi.mbt index f42c8460ee..8699a1be5a 100644 --- a/sdks/moonbit/golem_sdk/interface/wasi/filesystem/preopens/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/wasi/filesystem/preopens/ffi.mbt @@ -3,17 +3,14 @@ ///| fn wasmImportGetDirectories(p0 : Int) = "wasi:filesystem/preopens@0.3.0" "get-directories" -///| -extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = - #|(func (param i32) (param i32) (result i32) - #| local.get 0 - #| local.get 1 call $moonbit.init_array16 - #| local.get 0) - ///| extern "wasm" fn mbt_ffi_free(position : Int) = #|(func (param i32) local.get 0 call $moonbit.decref) +///| +extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load) + ///| extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #|(func (param i32) (result i32) (local i32) @@ -22,5 +19,8 @@ extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #| local.get 1) ///| -extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load) +extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array16 + #| local.get 0) diff --git a/sdks/moonbit/golem_sdk/interface/wasi/filesystem/types/ffi.mbt b/sdks/moonbit/golem_sdk/interface/wasi/filesystem/types/ffi.mbt index 644e01aac9..e79682c0c3 100644 --- a/sdks/moonbit/golem_sdk/interface/wasi/filesystem/types/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/wasi/filesystem/types/ffi.mbt @@ -3146,10 +3146,18 @@ fn wasmImportMethodDescriptorMetadataHashAt( extern "wasm" fn mbt_ffi_free(position : Int) = #|(func (param i32) local.get 0 call $moonbit.decref) +///| +extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load) + ///| extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = #|(func (param i32) (result i64) local.get 0 i64.load) +///| +extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_u) + ///| extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #|(func (param i32) (result i32) (local i32) @@ -3158,16 +3166,18 @@ extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #| local.get 1) ///| -extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load) - -///| -extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) +extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array8 + #| local.get 0) ///| -extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load8_u) +extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array16 + #| local.get 0) ///| extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = @@ -3177,21 +3187,11 @@ extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) +///| +extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) + ///| #owned(str) extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = #|(func (param i32) (result i32) local.get 0) - -///| -extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = - #|(func (param i32) (param i32) (result i32) - #| local.get 0 - #| local.get 1 call $moonbit.init_array8 - #| local.get 0) - -///| -extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = - #|(func (param i32) (param i32) (result i32) - #| local.get 0 - #| local.get 1 call $moonbit.init_array16 - #| local.get 0) diff --git a/sdks/moonbit/golem_sdk/interface/wasi/http/client/ffi.mbt b/sdks/moonbit/golem_sdk/interface/wasi/http/client/ffi.mbt index d48c964fe1..b0c37d8cff 100644 --- a/sdks/moonbit/golem_sdk/interface/wasi/http/client/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/wasi/http/client/ffi.mbt @@ -4,17 +4,25 @@ fn wasmImportSend(p0 : Int, p1 : Int) -> Int = "wasi:http/client@0.3.0" "[async-lower]send" ///| -extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load) +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) ///| extern "wasm" fn mbt_ffi_load16_u(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load16_u) +///| +extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load) + ///| extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = #|(func (param i32) (result i64) local.get 0 i64.load) +///| +extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_u) + ///| extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #|(func (param i32) (result i32) (local i32) @@ -28,11 +36,3 @@ extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = #| local.get 0 #| local.get 1 call $moonbit.init_array16 #| local.get 0) - -///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) - -///| -extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load8_u) diff --git a/sdks/moonbit/golem_sdk/interface/wasi/http/types/ffi.mbt b/sdks/moonbit/golem_sdk/interface/wasi/http/types/ffi.mbt index 61d1c13e90..f0777d5c95 100644 --- a/sdks/moonbit/golem_sdk/interface/wasi/http/types/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/wasi/http/types/ffi.mbt @@ -9918,24 +9918,43 @@ fn wasmWasiHttpTypes030StaticResponseConsumeBodyFuture2FutureLift( } ///| -extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) - -///| -extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load8_u) +#owned(bytes) +extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = + #|(func (param i32) (result i32) local.get 0) ///| extern "wasm" fn mbt_ffi_free(position : Int) = #|(func (param i32) local.get 0 call $moonbit.decref) +///| +extern "wasm" fn mbt_ffi_load16_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load16_u) + +///| +extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load) + ///| extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = #|(func (param i32) (result i64) local.get 0 i64.load) ///| -extern "wasm" fn mbt_ffi_store16(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store16) +extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_u) + +///| +extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = + #|(func (param i32) (result i32) (local i32) + #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc + #| local.tee 1 i32.const 0 call $moonbit.init_array8 + #| local.get 1) + +///| +extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array8 + #| local.get 0) ///| extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = @@ -9945,41 +9964,22 @@ extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = #| local.get 0) ///| -extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) +extern "wasm" fn mbt_ffi_store16(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store16) ///| -extern "wasm" fn mbt_ffi_load16_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load16_u) +extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) ///| -#owned(bytes) -extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = - #|(func (param i32) (result i32) local.get 0) +extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = + #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) ///| -extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load) +extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) ///| #owned(str) extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = #|(func (param i32) (result i32) local.get 0) - -///| -extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = - #|(func (param i32) (param i32) (result i32) - #| local.get 0 - #| local.get 1 call $moonbit.init_array8 - #| local.get 0) - -///| -extern "wasm" fn mbt_ffi_store64(offset : Int, value : Int64) = - #|(func (param i32) (param i64) local.get 0 local.get 1 i64.store) - -///| -extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = - #|(func (param i32) (result i32) (local i32) - #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc - #| local.tee 1 i32.const 0 call $moonbit.init_array8 - #| local.get 1) diff --git a/sdks/moonbit/golem_sdk/interface/wasi/io/error/ffi.mbt b/sdks/moonbit/golem_sdk/interface/wasi/io/error/ffi.mbt index ab00f3aae6..25c62349d8 100644 --- a/sdks/moonbit/golem_sdk/interface/wasi/io/error/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/wasi/io/error/ffi.mbt @@ -7,11 +7,12 @@ fn wasmImportResourceDropError_(resource : Int) = "wasi:io/error@0.2.6" "[resour fn wasmImportMethodErrorToDebugString(p0 : Int, p1 : Int) = "wasi:io/error@0.2.6" "[method]error.to-debug-string" ///| -extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = - #|(func (param i32) (param i32) (result i32) - #| local.get 0 - #| local.get 1 call $moonbit.init_array16 - #| local.get 0) +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) + +///| +extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load) ///| extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = @@ -21,9 +22,8 @@ extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #| local.get 1) ///| -extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load) - -///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) +extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array16 + #| local.get 0) diff --git a/sdks/moonbit/golem_sdk/interface/wasi/io/error/pkg.generated.mbti b/sdks/moonbit/golem_sdk/interface/wasi/io/error/pkg.generated.mbti index 980e73427f..8fafbdfe38 100644 --- a/sdks/moonbit/golem_sdk/interface/wasi/io/error/pkg.generated.mbti +++ b/sdks/moonbit/golem_sdk/interface/wasi/io/error/pkg.generated.mbti @@ -4,7 +4,9 @@ package "golemcloud/golem_sdk/interface/wasi/io/error" // Values // Errors -pub(all) suberror Error_ Int derive(Eq, Show) +pub(all) suberror Error_ { + Error_(Int) +} derive(Eq, Show) pub fn Error_::drop(Self) -> Unit pub fn Error_::to_debug_string(Self) -> String diff --git a/sdks/moonbit/golem_sdk/interface/wasi/io/poll/ffi.mbt b/sdks/moonbit/golem_sdk/interface/wasi/io/poll/ffi.mbt index 7fc7d98596..18212beb4d 100644 --- a/sdks/moonbit/golem_sdk/interface/wasi/io/poll/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/wasi/io/poll/ffi.mbt @@ -17,8 +17,8 @@ extern "wasm" fn mbt_ffi_free(position : Int) = #|(func (param i32) local.get 0 call $moonbit.decref) ///| -extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) +extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load) ///| extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = @@ -27,10 +27,6 @@ extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #| local.tee 1 i32.const 0 call $moonbit.init_array8 #| local.get 1) -///| -extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load) - ///| extern "wasm" fn mbt_ffi_ptr2uint_array( ptr : Int, @@ -40,3 +36,7 @@ extern "wasm" fn mbt_ffi_ptr2uint_array( #| local.get 0 #| local.get 1 call $moonbit.init_array32 #| local.get 0) + +///| +extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) diff --git a/sdks/moonbit/golem_sdk/interface/wasi/io/streams/ffi.mbt b/sdks/moonbit/golem_sdk/interface/wasi/io/streams/ffi.mbt index 952a871221..e9bd6ddaff 100644 --- a/sdks/moonbit/golem_sdk/interface/wasi/io/streams/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/wasi/io/streams/ffi.mbt @@ -66,28 +66,32 @@ fn wasmImportMethodOutputStreamBlockingSplice( ) = "wasi:io/streams@0.2.6" "[method]output-stream.blocking-splice" ///| -extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = - #|(func (param i32) (result i32) (local i32) - #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc - #| local.tee 1 i32.const 0 call $moonbit.init_array8 - #| local.get 1) +#owned(bytes) +extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = + #|(func (param i32) (result i32) local.get 0) ///| -extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load8_u) +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) ///| extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load) ///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) +extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = + #|(func (param i32) (result i64) local.get 0 i64.load) ///| -#owned(bytes) -extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = - #|(func (param i32) (result i32) local.get 0) +extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_u) + +///| +extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = + #|(func (param i32) (result i32) (local i32) + #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc + #| local.tee 1 i32.const 0 call $moonbit.init_array8 + #| local.get 1) ///| extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = @@ -95,7 +99,3 @@ extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = #| local.get 0 #| local.get 1 call $moonbit.init_array8 #| local.get 0) - -///| -extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = - #|(func (param i32) (result i64) local.get 0 i64.load) diff --git a/sdks/moonbit/golem_sdk/interface/wasi/keyvalue/atomic/ffi.mbt b/sdks/moonbit/golem_sdk/interface/wasi/keyvalue/atomic/ffi.mbt deleted file mode 100644 index 974e9e663c..0000000000 --- a/sdks/moonbit/golem_sdk/interface/wasi/keyvalue/atomic/ffi.mbt +++ /dev/null @@ -1,42 +0,0 @@ -// Generated by `wit-bindgen` 0.58.0. DO NOT EDIT! - -///| -fn wasmImportIncrement(p0 : Int, p1 : Int, p2 : Int, p3 : Int64, p4 : Int) = "wasi:keyvalue/atomic@0.1.0" "increment" - -///| -fn wasmImportCompareAndSwap( - p0 : Int, - p1 : Int, - p2 : Int, - p3 : Int64, - p4 : Int64, - p5 : Int, -) = "wasi:keyvalue/atomic@0.1.0" "compare-and-swap" - -///| -#owned(str) -extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = - #|(func (param i32) (result i32) local.get 0) - -///| -extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = - #|(func (param i32) (result i64) local.get 0 i64.load) - -///| -extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = - #|(func (param i32) (result i32) (local i32) - #| local.get 0 i32.const 4 i32.add call $moonbit.gc.malloc - #| local.tee 1 i32.const 0 call $moonbit.init_array8 - #| local.get 1) - -///| -extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load8_u) - -///| -extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load) - -///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) diff --git a/sdks/moonbit/golem_sdk/interface/wasi/keyvalue/cache/ffi.mbt b/sdks/moonbit/golem_sdk/interface/wasi/keyvalue/cache/ffi.mbt index 4f3b3390e9..e5ad74e080 100644 --- a/sdks/moonbit/golem_sdk/interface/wasi/keyvalue/cache/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/wasi/keyvalue/cache/ffi.mbt @@ -45,10 +45,18 @@ fn wasmImportMethodVacancyVacancyFill(p0 : Int, p1 : Int, p2 : Int) -> Int = "wa ///| fn wasmImportDelete(p0 : Int, p1 : Int) -> Int = "wasi:keyvalue/cache@0.1.0" "delete" +///| +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) + ///| extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load) +///| +extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_u) + ///| extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #|(func (param i32) (result i32) (local i32) @@ -56,14 +64,6 @@ extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #| local.tee 1 i32.const 0 call $moonbit.init_array8 #| local.get 1) -///| -extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load8_u) - -///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) - ///| #owned(str) extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = diff --git a/sdks/moonbit/golem_sdk/interface/wasi/keyvalue/eventual-batch/ffi.mbt b/sdks/moonbit/golem_sdk/interface/wasi/keyvalue/eventual-batch/ffi.mbt index 51444df735..b2ba36a92a 100644 --- a/sdks/moonbit/golem_sdk/interface/wasi/keyvalue/eventual-batch/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/wasi/keyvalue/eventual-batch/ffi.mbt @@ -13,19 +13,16 @@ fn wasmImportSetMany(p0 : Int, p1 : Int, p2 : Int, p3 : Int) = "wasi:keyvalue/ev fn wasmImportDeleteMany(p0 : Int, p1 : Int, p2 : Int, p3 : Int) = "wasi:keyvalue/eventual-batch@0.1.0" "delete-many" ///| -extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = - #|(func (param i32) (param i32) (result i32) - #| local.get 0 - #| local.get 1 call $moonbit.init_array16 - #| local.get 0) +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) ///| extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load) ///| -extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) +extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load8_u) ///| extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = @@ -35,12 +32,15 @@ extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #| local.get 1) ///| -extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load8_u) +extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = + #|(func (param i32) (param i32) (result i32) + #| local.get 0 + #| local.get 1 call $moonbit.init_array16 + #| local.get 0) ///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) +extern "wasm" fn mbt_ffi_store32(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store) ///| #owned(str) diff --git a/sdks/moonbit/golem_sdk/interface/wasi/keyvalue/eventual/ffi.mbt b/sdks/moonbit/golem_sdk/interface/wasi/keyvalue/eventual/ffi.mbt index 577dea2f37..a5e7f2fae0 100644 --- a/sdks/moonbit/golem_sdk/interface/wasi/keyvalue/eventual/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/wasi/keyvalue/eventual/ffi.mbt @@ -12,15 +12,14 @@ fn wasmImportDelete(p0 : Int, p1 : Int, p2 : Int, p3 : Int) = "wasi:keyvalue/eve ///| fn wasmImportExists(p0 : Int, p1 : Int, p2 : Int, p3 : Int) = "wasi:keyvalue/eventual@0.1.0" "exists" -///| -#owned(str) -extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = - #|(func (param i32) (result i32) local.get 0) - ///| extern "wasm" fn mbt_ffi_free(position : Int) = #|(func (param i32) local.get 0 call $moonbit.decref) +///| +extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load) + ///| extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load8_u) @@ -33,5 +32,6 @@ extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #| local.get 1) ///| -extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load) +#owned(str) +extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = + #|(func (param i32) (result i32) local.get 0) diff --git a/sdks/moonbit/golem_sdk/interface/wasi/keyvalue/types/ffi.mbt b/sdks/moonbit/golem_sdk/interface/wasi/keyvalue/types/ffi.mbt index 564e7da890..54b92c50b0 100644 --- a/sdks/moonbit/golem_sdk/interface/wasi/keyvalue/types/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/wasi/keyvalue/types/ffi.mbt @@ -822,8 +822,9 @@ fn wasmWasiKeyvalueTypes010MethodIncomingValueIncomingValueConsumeAsyncStream0St fn wasmImportMethodIncomingValueIncomingValueSize(p0 : Int, p1 : Int) = "wasi:keyvalue/types@0.1.0" "[method]incoming-value.incoming-value-size" ///| -extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = - #|(func (param i32) (result i64) local.get 0 i64.load) +#owned(bytes) +extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = + #|(func (param i32) (result i32) local.get 0) ///| extern "wasm" fn mbt_ffi_free(position : Int) = @@ -834,23 +835,13 @@ extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load) ///| -extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = - #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) +extern "wasm" fn mbt_ffi_load64(offset : Int) -> Int64 = + #|(func (param i32) (result i64) local.get 0 i64.load) ///| extern "wasm" fn mbt_ffi_load8_u(offset : Int) -> Int = #|(func (param i32) (result i32) local.get 0 i32.load8_u) -///| -#owned(bytes) -extern "wasm" fn mbt_ffi_bytes2ptr(bytes : FixedArray[Byte]) -> Int = - #|(func (param i32) (result i32) local.get 0) - -///| -#owned(str) -extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = - #|(func (param i32) (result i32) local.get 0) - ///| extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #|(func (param i32) (result i32) (local i32) @@ -864,3 +855,12 @@ extern "wasm" fn mbt_ffi_ptr2bytes(ptr : Int, len : Int) -> FixedArray[Byte] = #| local.get 0 #| local.get 1 call $moonbit.init_array8 #| local.get 0) + +///| +extern "wasm" fn mbt_ffi_store8(offset : Int, value : Int) = + #|(func (param i32) (param i32) local.get 0 local.get 1 i32.store8) + +///| +#owned(str) +extern "wasm" fn mbt_ffi_str2ptr(str : String) -> Int = + #|(func (param i32) (result i32) local.get 0) diff --git a/sdks/moonbit/golem_sdk/interface/wasi/keyvalue/wasi-keyvalue-error/ffi.mbt b/sdks/moonbit/golem_sdk/interface/wasi/keyvalue/wasi-keyvalue-error/ffi.mbt index 19a246bab1..37006c8786 100644 --- a/sdks/moonbit/golem_sdk/interface/wasi/keyvalue/wasi-keyvalue-error/ffi.mbt +++ b/sdks/moonbit/golem_sdk/interface/wasi/keyvalue/wasi-keyvalue-error/ffi.mbt @@ -6,6 +6,14 @@ fn wasmImportResourceDropError_(resource : Int) = "wasi:keyvalue/wasi-keyvalue-e ///| fn wasmImportMethodErrorTrace(p0 : Int, p1 : Int) = "wasi:keyvalue/wasi-keyvalue-error@0.1.0" "[method]error.trace" +///| +extern "wasm" fn mbt_ffi_free(position : Int) = + #|(func (param i32) local.get 0 call $moonbit.decref) + +///| +extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = + #|(func (param i32) (result i32) local.get 0 i32.load) + ///| extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #|(func (param i32) (result i32) (local i32) @@ -13,17 +21,9 @@ extern "wasm" fn mbt_ffi_malloc(size : Int) -> Int = #| local.tee 1 i32.const 0 call $moonbit.init_array8 #| local.get 1) -///| -extern "wasm" fn mbt_ffi_free(position : Int) = - #|(func (param i32) local.get 0 call $moonbit.decref) - ///| extern "wasm" fn mbt_ffi_ptr2str(ptr : Int, len : Int) -> String = #|(func (param i32) (param i32) (result i32) #| local.get 0 #| local.get 1 call $moonbit.init_array16 #| local.get 0) - -///| -extern "wasm" fn mbt_ffi_load32(offset : Int) -> Int = - #|(func (param i32) (result i32) local.get 0 i32.load) diff --git a/sdks/moonbit/golem_sdk/interface/wasi/keyvalue/wasi-keyvalue-error/pkg.generated.mbti b/sdks/moonbit/golem_sdk/interface/wasi/keyvalue/wasi-keyvalue-error/pkg.generated.mbti index b713d3b3bf..26c75b2900 100644 --- a/sdks/moonbit/golem_sdk/interface/wasi/keyvalue/wasi-keyvalue-error/pkg.generated.mbti +++ b/sdks/moonbit/golem_sdk/interface/wasi/keyvalue/wasi-keyvalue-error/pkg.generated.mbti @@ -4,7 +4,9 @@ package "golemcloud/golem_sdk/interface/wasi/keyvalue/wasi-keyvalue-error" // Values // Errors -pub(all) suberror Error_ Int derive(Eq, Show) +pub(all) suberror Error_ { + Error_(Int) +} derive(Eq, Show) pub fn Error_::drop(Self) -> Unit pub fn Error_::trace(Self) -> String diff --git a/sdks/moonbit/golem_sdk/schema_model/ownership.mbt b/sdks/moonbit/golem_sdk/schema_model/ownership.mbt new file mode 100644 index 0000000000..37d32d8823 --- /dev/null +++ b/sdks/moonbit/golem_sdk/schema_model/ownership.mbt @@ -0,0 +1,117 @@ +///| +/// Drops every still-owned capability reachable from a recursive schema value. +/// Repeated references and distinct holders for the same raw resource are +/// canonicalized so malformed values still issue at most one resource drop. +#doc(hidden) +pub fn drop_owned_capabilities(value : SchemaValue) -> Unit { + let secrets : Array[@types.Secret] = [] + let quota_tokens : Array[@types.QuotaToken] = [] + let permission_cards : Array[@types.PermissionCard] = [] + take_owned_capabilities(value, secrets, quota_tokens, permission_cards) + for secret in secrets { + secret.drop() + } + for quota_token in quota_tokens { + quota_token.drop() + } + for permission_card in permission_cards { + permission_card.drop() + } +} + +///| +fn[T : Eq] push_unique(values : Array[T], value : T) -> Unit { + for existing in values { + if existing == value { + return + } + } + values.push(value) +} + +///| +fn take_owned_capabilities( + value : SchemaValue, + secrets : Array[@types.Secret], + quota_tokens : Array[@types.QuotaToken], + permission_cards : Array[@types.PermissionCard], +) -> Unit { + match value { + Secret(handle) => + match handle.take() { + Some(raw) => push_unique(secrets, raw) + None => () + } + QuotaToken(handle) => + match handle.take() { + Some(raw) => push_unique(quota_tokens, raw) + None => () + } + PermissionCard(handle) => + match handle.take() { + Some(raw) => push_unique(permission_cards, raw) + None => () + } + Record(values) | Tuple(values) | List(values) | FixedList(values) => + for nested in values { + take_owned_capabilities(nested, secrets, quota_tokens, permission_cards) + } + Variant(_, nested) + | Option(nested) + | ResultOk(nested) + | ResultErr(nested) => + match nested { + Some(nested) => + take_owned_capabilities( + nested, secrets, quota_tokens, permission_cards, + ) + None => () + } + Map(entries) => + for entry in entries { + take_owned_capabilities( + entry.key, + secrets, + quota_tokens, + permission_cards, + ) + take_owned_capabilities( + entry.value, + secrets, + quota_tokens, + permission_cards, + ) + } + Union(_, nested) => + take_owned_capabilities(nested, secrets, quota_tokens, permission_cards) + _ => () + } +} + +///| +/// Drops each distinct capability handle stored in a flat wire value exactly +/// once. This is used when malformed wire values cannot be lifted into the +/// recursive SDK model and no decoded owner exists to release them. +#doc(hidden) +pub fn drop_wit_capabilities(value : @types.SchemaValueTree) -> Unit { + let secrets : Array[@types.Secret] = [] + let quota_tokens : Array[@types.QuotaToken] = [] + let permission_cards : Array[@types.PermissionCard] = [] + for node in value.value_nodes { + match node { + @types.SecretValue(raw) => push_unique(secrets, raw) + @types.QuotaTokenHandle(raw) => push_unique(quota_tokens, raw) + @types.PermissionCardHandle(raw) => push_unique(permission_cards, raw) + _ => () + } + } + for secret in secrets { + secret.drop() + } + for quota_token in quota_tokens { + quota_token.drop() + } + for permission_card in permission_cards { + permission_card.drop() + } +} diff --git a/sdks/moonbit/golem_sdk/scripts/check-middleware-host-neutral.py b/sdks/moonbit/golem_sdk/scripts/check-middleware-host-neutral.py new file mode 100644 index 0000000000..674ca705a5 --- /dev/null +++ b/sdks/moonbit/golem_sdk/scripts/check-middleware-host-neutral.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python3 +"""Reject ambient tool-host dependencies from pure middleware packages.""" + +import re +from collections import deque +from pathlib import Path + + +MODULE = "golemcloud/golem_sdk" +FORBIDDEN = f"{MODULE}/interface/golem/tool/host" +ROOTS = ( + f"{MODULE}/tool-core", + f"{MODULE}/tool-middleware", + f"{MODULE}/gen-tool-middleware", +) +EXTERNAL_ALLOWLIST = frozenset( + { + "moonbitlang/core/deque", + "moonbitlang/core/ref", + "moonbitlang/core/set", + "moonbitlang/core/strconv", + } +) +PACKAGE_PATH = re.compile( + r'"([A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+(?:/[^"\s]+)*)"' +) + + +def descriptor(module_root: Path, package: str) -> Path: + relative = package.removeprefix(MODULE).removeprefix("/") + directory = module_root / relative + for name in ("moon.pkg", "moon.pkg.json"): + candidate = directory / name + if candidate.is_file(): + return candidate + raise SystemExit(f"local package has no descriptor: {package}") + + +def imports(module_root: Path, package: str) -> list[str]: + path = descriptor(module_root, package) + return sorted(set(PACKAGE_PATH.findall(path.read_text()))) + + +def check_dependency_closure( + module_root: Path, + roots: tuple[str, ...] = ROOTS, + external_allowlist: frozenset[str] = EXTERNAL_ALLOWLIST, +) -> dict[str, str | None]: + parent: dict[str, str | None] = {root: None for root in roots} + pending = deque(roots) + while pending: + package = pending.popleft() + if package == FORBIDDEN: + chain = [package] + while parent[chain[-1]] is not None: + chain.append(parent[chain[-1]]) + chain.reverse() + raise SystemExit( + "pure middleware dependency closure imports ambient tool host:\n " + + "\n -> ".join(chain) + ) + for imported in imports(module_root, package): + if not imported.startswith(f"{MODULE}/"): + if imported not in external_allowlist: + chain = [package] + while parent[chain[-1]] is not None: + chain.append(parent[chain[-1]]) + chain.reverse() + chain.append(imported) + raise SystemExit( + "pure middleware dependency closure imports an unapproved external package:\n " + + "\n -> ".join(chain) + ) + continue + if imported not in parent: + parent[imported] = package + pending.append(imported) + return parent + + +def main() -> None: + module_root = Path(__file__).resolve().parent.parent + closure = check_dependency_closure(module_root) + print( + f"middleware dependency closure is host-neutral ({len(closure)} local packages checked)" + ) + + +if __name__ == "__main__": + main() diff --git a/sdks/moonbit/golem_sdk/scripts/normalize-generated-ffi.py b/sdks/moonbit/golem_sdk/scripts/normalize-generated-ffi.py new file mode 100644 index 0000000000..70f4a59cff --- /dev/null +++ b/sdks/moonbit/golem_sdk/scripts/normalize-generated-ffi.py @@ -0,0 +1,130 @@ +#!/usr/bin/env python3 +"""Make nondeterministically ordered generated MoonBit FFI declarations stable.""" + +import argparse +import re +from pathlib import Path + + +GENERATED_HEADER = "// Generated by `wit-bindgen`" +BLOCK_DELIMITER = "\n///|\n" +WRAPPER_DELIMITER = "\n\n#doc(hidden)\n" +ROOT_GEN_PACKAGES = {"gen", "gen-tool-middleware", "gen-agent-tool-middleware"} +HELPER_DECL = re.compile( + r'^extern "wasm" fn (mbt_ffi_[A-Za-z0-9_]+)', re.MULTILINE +) +ANY_HELPER_DECL = re.compile( + r'^[ \t]*extern "wasm" fn (mbt_ffi_[A-Za-z0-9_]+)', re.MULTILINE +) +WRAPPER_DECL = re.compile(r"^pub fn (wasmExport[A-Za-z0-9_]+)", re.MULTILINE) +ANY_WRAPPER_DECL = re.compile( + r"^[ \t]*pub fn (wasmExport[A-Za-z0-9_]+)", re.MULTILINE +) + + +def helper_name(block: str, path: Path) -> str | None: + candidate = block.split(WRAPPER_DELIMITER, 1)[0] + matches = list(HELPER_DECL.finditer(candidate)) + if not matches: + return None + if len(matches) != 1: + raise SystemExit(f"expected one generated FFI helper per block in {path}") + match = matches[0] + prefix = candidate[: match.start()].strip() + if prefix and re.fullmatch(r"#owned\([A-Za-z0-9_]+\)", prefix) is None: + raise SystemExit(f"unexpected generated FFI helper prefix in {path}") + return match.group(1) + + +def normalize_wrappers(trailer: str, path: Path) -> tuple[str, list[str]]: + if not trailer.startswith("#doc(hidden)\n"): + raise SystemExit(f"unexpected generated wrapper trailer in {path}") + blocks = trailer.removeprefix("#doc(hidden)\n").split(WRAPPER_DELIMITER) + normalized: list[tuple[str, str]] = [] + for block in blocks: + block = block.strip() + matches = list(WRAPPER_DECL.finditer(block)) + if len(matches) != 1 or matches[0].start() != 0: + raise SystemExit( + f"expected one generated export wrapper per block in {path}" + ) + match = matches[0] + normalized.append((match.group(1), block)) + names = [name for name, _ in normalized] + if len(names) != len(set(names)): + raise SystemExit(f"duplicate generated wrapper in {path}") + result = "#doc(hidden)\n" + WRAPPER_DELIMITER.join( + block for _, block in sorted(normalized) + ) + return result, names + + +def normalize(text: str, path: Path) -> str: + if not text.startswith(GENERATED_HEADER): + raise SystemExit(f"refusing to normalize non-generated file: {path}") + parts = text.split(BLOCK_DELIMITER) + helpers: list[tuple[str, str]] = [] + helper_indices: list[int] = [] + wrapper_index: int | None = None + wrapper_trailer: str | None = None + wrapper_names: list[str] = [] + for index, part in enumerate(parts): + name = helper_name(part, path) + if name is None: + continue + helper = part + if WRAPPER_DELIMITER in helper: + if wrapper_index is not None: + raise SystemExit(f"multiple generated wrapper trailers in {path}") + helper, wrapper_trailer = helper.split(WRAPPER_DELIMITER, 1) + wrapper_index = index + wrapper_trailer = "#doc(hidden)\n" + wrapper_trailer + helpers.append((name, helper.strip())) + helper_indices.append(index) + names = [name for name, _ in helpers] + if len(names) != len(set(names)): + raise SystemExit(f"duplicate generated FFI helper in {path}") + for index, (_, helper) in zip(helper_indices, sorted(helpers), strict=True): + parts[index] = helper + if wrapper_index is not None and wrapper_trailer is not None: + normalized_wrappers, wrapper_names = normalize_wrappers(wrapper_trailer, path) + parts[wrapper_index] += "\n\n" + normalized_wrappers + all_helper_names = ANY_HELPER_DECL.findall(text) + if sorted(all_helper_names) != sorted(names): + raise SystemExit(f"unrecognized generated FFI helper declaration in {path}") + if path.parent.name in ROOT_GEN_PACKAGES: + all_wrapper_names = ANY_WRAPPER_DECL.findall(text) + if sorted(all_wrapper_names) != sorted(wrapper_names): + raise SystemExit(f"unrecognized generated export wrapper declaration in {path}") + return BLOCK_DELIMITER.join(parts).rstrip() + "\n" + + +def main() -> None: + parser = argparse.ArgumentParser() + parser.add_argument("roots", nargs="+", type=Path) + parser.add_argument("--check", action="store_true") + args = parser.parse_args() + paths = sorted( + path + for root in args.roots + for path in ([root] if root.is_file() else root.rglob("ffi.mbt")) + ) + if not paths: + raise SystemExit("no generated ffi.mbt files found") + changed: list[Path] = [] + for path in paths: + text = path.read_text() + normalized = normalize(text, path) + if normalize(normalized, path) != normalized: + raise SystemExit(f"normalization is not idempotent: {path}") + if normalized != text: + changed.append(path) + if not args.check: + path.write_text(normalized) + if args.check and changed: + files = "\n".join(str(path) for path in changed) + raise SystemExit(f"generated FFI files are not normalized:\n{files}") + + +if __name__ == "__main__": + main() diff --git a/sdks/moonbit/golem_sdk/scripts/regen-bindings.sh b/sdks/moonbit/golem_sdk/scripts/regen-bindings.sh index 0ce5e17c91..9662b189e5 100755 --- a/sdks/moonbit/golem_sdk/scripts/regen-bindings.sh +++ b/sdks/moonbit/golem_sdk/scripts/regen-bindings.sh @@ -9,16 +9,24 @@ # bash scripts/regen-bindings.sh # # Steps: -# 1. Run the pinned `wit-bindgen moonbit` (--ignore-stub keeps hand-maintained -# stubs). -# 2. Fix the s8/s16 lifting bug: the generated code reads signed +# 1. Generate ordinary, pure-middleware, and combined worlds into isolated +# roots. The combined world owns the shared interface/async runtime, while +# each world retains isolated export glue. +# 2. Verify shared public bindings agree, preserve hand-maintained stubs and +# package descriptors, and assemble the role-specific roots. +# 3. Split the oversized generated middleware argument lift whose unsplit +# shape currently triggers a MoonBit compiler ICE. +# 4. Stabilize generated FFI helper and export-wrapper ordering, which the +# pinned generator currently emits from unordered collections. +# 5. Fix the s8/s16 lifting bug: the generated code reads signed # bytes/shorts with `mbt_ffi_load8`/`mbt_ffi_load16` (i32.load8_s/load16_s) # AND then subtracts 0x100/0x10000 — a double sign-extension that corrupts # every s8/s16 value lifted from the component ABI. We strip the spurious # subtraction (the signed load alone already yields the correct value). -# 3. Remove an emitted `moon.pkg.json` only where a sibling hand-maintained +# 6. Remove an emitted `moon.pkg.json` only where a sibling hand-maintained # `moon.pkg` owns package metadata (the export stubs and gen link package). -# 4. Assert the s8/s16 bug is gone. +# 7. Regenerate package interfaces and assert normalization, the s8/s16 fix, +# and the pure-middleware host-neutral dependency closure. # set -euo pipefail @@ -40,33 +48,148 @@ EOF exit 1 fi -echo "==> Running pinned Golem wit-bindgen fork" -wit-bindgen moonbit ./wit \ - --derive-show --derive-eq --derive-error \ - --project-name golemcloud/golem_sdk --ignore-stub +readonly GENERATED_ROOTS=( + interface + async-core + world + gen + gen-tool-middleware + gen-agent-tool-middleware +) + +tmp_root="$(mktemp -d "${TMPDIR:-/tmp}/golem-moonbit-bindings.XXXXXX")" +trap 'rm -rf "$tmp_root"' EXIT +readonly preserved_root="$tmp_root/preserved" + +echo "==> Preserving hand-maintained generated-package files" +for root in "${GENERATED_ROOTS[@]}"; do + if [[ ! -d "$root" ]]; then + continue + fi + find "$root" -type f \ + \( -name 'moon.pkg' -o -name 'stub.mbt' \) \ + -print0 | + while IFS= read -r -d '' file; do + destination="$preserved_root/$file" + mkdir -p "$(dirname "$destination")" + cp "$file" "$destination" + done +done + +generate_world() { + local output_name="$1" + local world_name="$2" + local gen_dir="$3" + local output_dir="$tmp_root/$output_name" + + echo "==> Generating $world_name" + wit-bindgen moonbit "$PWD/wit" \ + --world "$world_name" \ + --gen-dir "$gen_dir" \ + --derive-show --derive-eq --derive-error \ + --project-name golemcloud/golem_sdk \ + --out-dir "$output_dir" +} + +generate_world ordinary agent-guest gen +generate_world middleware tool-middleware-guest gen-tool-middleware +generate_world combined agent-tool-middleware-guest gen-agent-tool-middleware + +verify_public_subset() { + local subset="$1" + local superset="$2" + find "$subset/interface" -type f \ + \( -name 'top.mbt' -o -name 'moon.pkg.json' \) -print0 | + while IFS= read -r -d '' file; do + relative="${file#"$subset/interface/"}" + candidate="$superset/interface/$relative" + if [[ ! -f "$candidate" ]] || ! cmp -s "$file" "$candidate"; then + echo "ERROR: incompatible shared generated binding: $relative" >&2 + exit 1 + fi + done +} + +echo "==> Verifying compatible shared generated bindings" +verify_public_subset "$tmp_root/ordinary" "$tmp_root/combined" +verify_public_subset "$tmp_root/middleware" "$tmp_root/combined" +if ! diff -qr "$tmp_root/ordinary/async-core" "$tmp_root/combined/async-core" || + ! diff -qr "$tmp_root/middleware/async-core" "$tmp_root/combined/async-core"; then + echo "ERROR: generated async-core roots are incompatible" >&2 + exit 1 +fi + +echo "==> Splitting oversized middleware argument lifts" +python3 scripts/split-middleware-lift.py \ + "$tmp_root/middleware/gen-tool-middleware/interface/golem/tool/tool-middleware-guest/ffi.mbt" +python3 scripts/split-middleware-lift.py \ + "$tmp_root/combined/gen-agent-tool-middleware/interface/golem/tool/tool-middleware-guest/ffi.mbt" + +echo "==> Assembling shared and role-specific generated roots" +rm -rf "${GENERATED_ROOTS[@]}" +cp -R "$tmp_root/combined/interface" interface +cp -R "$tmp_root/combined/async-core" async-core +mkdir -p world +cp -R "$tmp_root/ordinary/world/agent-guest" world/ +cp -R "$tmp_root/middleware/world/tool-middleware-guest" world/ +cp -R "$tmp_root/combined/world/agent-tool-middleware-guest" world/ +cp -R "$tmp_root/ordinary/gen" gen +cp -R "$tmp_root/middleware/gen-tool-middleware" gen-tool-middleware +cp -R "$tmp_root/combined/gen-agent-tool-middleware" gen-agent-tool-middleware + +if [[ -d "$preserved_root" ]]; then + find "$preserved_root" -type f -print0 | + while IFS= read -r -d '' file; do + relative="${file#"$preserved_root/"}" + mkdir -p "$(dirname "$relative")" + cp "$file" "$relative" + done +fi + +echo "==> Stabilizing generated FFI declaration order" +python3 scripts/normalize-generated-ffi.py "${GENERATED_ROOTS[@]}" echo "==> Fixing s8/s16 double sign-extension" # Only strip the subtraction where it follows the matching SIGNED load, so the # unsigned `mbt_ffi_load8_u`/`mbt_ffi_load16_u` paths are never touched. # `\b` after `load8`/`load16` ensures `load8_u`/`load16_u` are excluded, and the # `0x10000` rule runs before `0x100` to avoid corrupting the wider literal. -find interface world gen -name '*.mbt' -type f -print0 | while IFS= read -r -d '' f; do +find "${GENERATED_ROOTS[@]}" -name '*.mbt' -type f -print0 | + while IFS= read -r -d '' f; do perl -i -pe 's/(mbt_ffi_load16\b[^\n]*?\)) - 0x10000\b/$1/g; s/(mbt_ffi_load8\b[^\n]*?\)) - 0x100\b/$1/g' "$f" done echo "==> Removing generated package descriptors shadowed by hand-maintained moon.pkg files" -find interface world gen async-core -name 'moon.pkg.json' -type f -print0 | +find "${GENERATED_ROOTS[@]}" -name 'moon.pkg.json' -type f -print0 | while IFS= read -r -d '' package; do if [[ -f "$(dirname "$package")/moon.pkg" ]]; then rm "$package" fi done +echo "==> Regenerating generated package interfaces" +generated_packages=() +while IFS= read -r -d '' descriptor; do + generated_packages+=("$(dirname "$descriptor")") +done < <( + find "${GENERATED_ROOTS[@]}" -type f \ + \( -name 'moon.pkg' -o -name 'moon.pkg.json' \) -print0 +) +moon info --target wasm "${generated_packages[@]}" + +echo "==> Verifying generated FFI declaration order" +python3 scripts/normalize-generated-ffi.py --check "${GENERATED_ROOTS[@]}" + echo "==> Verifying s8/s16 fix" -if rg -n -g '*.mbt' -e ' - 0x100\b' -e ' - 0x10000\b' interface world gen >/dev/null 2>&1; then +if rg -n -g '*.mbt' -e ' - 0x100\b' -e ' - 0x10000\b' \ + "${GENERATED_ROOTS[@]}" >/dev/null 2>&1; then echo "ERROR: residual s8/s16 double sign-extension found after post-processing:" >&2 - rg -n -g '*.mbt' -e ' - 0x100\b' -e ' - 0x10000\b' interface world gen >&2 + rg -n -g '*.mbt' -e ' - 0x100\b' -e ' - 0x10000\b' \ + "${GENERATED_ROOTS[@]}" >&2 exit 1 fi +echo "==> Verifying pure middleware dependency closure" +python3 scripts/check-middleware-host-neutral.py + echo "==> Bindings regenerated and post-processed successfully" diff --git a/sdks/moonbit/golem_sdk/scripts/run-sdk-tests.sh b/sdks/moonbit/golem_sdk/scripts/run-sdk-tests.sh new file mode 100755 index 0000000000..b91ced1ac6 --- /dev/null +++ b/sdks/moonbit/golem_sdk/scripts/run-sdk-tests.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash + +set -euo pipefail + +script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) + +if [[ ${GOLEM_MOONRUN_DISPATCH:-} == 1 ]]; then + artifact="" + for arg in "$@"; do + if [[ $arg == *.wasm ]]; then + artifact=$arg + fi + done + + if [[ -z $artifact ]]; then + echo "Golem MoonBit test runner did not receive a WASM artifact" >&2 + exit 2 + fi + + if grep -aFq 'golem:core/types@2.0.0' "$artifact"; then + exec node "$script_dir/run-wasm-test.mjs" "$artifact" + fi + + unset GOLEM_MOONRUN_DISPATCH MOONRUN_OVERRIDE + exec "$GOLEM_REAL_MOONRUN" "$@" +fi + +real_moonrun=$(command -v moonrun) +GOLEM_MOONRUN_DISPATCH=1 \ + GOLEM_REAL_MOONRUN=$real_moonrun \ + MOONRUN_OVERRIDE=$script_dir/run-sdk-tests.sh \ + moon test --target wasm "$@" diff --git a/sdks/moonbit/golem_sdk/scripts/run-wasm-test.mjs b/sdks/moonbit/golem_sdk/scripts/run-wasm-test.mjs new file mode 100644 index 0000000000..1c5542367f --- /dev/null +++ b/sdks/moonbit/golem_sdk/scripts/run-wasm-test.mjs @@ -0,0 +1,130 @@ +#!/usr/bin/env node + +import fs from "node:fs" + +const wasmPath = process.argv[2] +if (!wasmPath) { + console.error("usage: node scripts/run-wasm-test.mjs ") + process.exit(2) +} + +const bytes = fs.readFileSync(wasmPath) +const module = new WebAssembly.Module(bytes) +const exceptionTag = new WebAssembly.Tag({ parameters: [] }) +let instance +let componentContext = 0 +let nextWaitableSet = 1 +const resourceDrops = { + secret: 0, + "quota-token": 0, + "permission-card": 0, +} + +const rootImports = new Proxy( + {}, + { + get(_target, name) { + switch (name) { + case "[context-get-0]": + return () => componentContext + case "[context-set-0]": + return value => { + componentContext = value + } + case "[waitable-set-new]": + return () => nextWaitableSet++ + case "[stream-new-unit]": + return () => 0n + default: + return () => 0 + } + }, + }, +) + +const importObject = { + exception: { + tag: exceptionTag, + throw() { + throw new WebAssembly.Exception(exceptionTag, []) + }, + }, + wasi_snapshot_preview1: { + fd_write(_fd, iovecs, iovecCount, bytesWritten) { + const memory = new DataView(instance.exports.memory.buffer) + const output = [] + let total = 0 + for (let index = 0; index < iovecCount; index++) { + const base = iovecs + index * 8 + const pointer = memory.getUint32(base, true) + const length = memory.getUint32(base + 4, true) + total += length + output.push( + new TextDecoder().decode( + new Uint8Array(instance.exports.memory.buffer, pointer, length), + ), + ) + } + memory.setUint32(bytesWritten, total, true) + process.stdout.write(output.join("")) + return 0 + }, + }, + __moonbit_fs_unstable: { + begin_read_string(value) { + return value + }, + string_read_char() { + return -1 + }, + finish_read_string() {}, + }, + "$root": rootImports, + "[export]$root": rootImports, + "golem:test": { + "reset-resource-drop-counts"() { + for (const kind of Object.keys(resourceDrops)) { + resourceDrops[kind] = 0 + } + }, + "resource-drop-count"(kind) { + switch (kind) { + case 0: + return resourceDrops.secret + case 1: + return resourceDrops["quota-token"] + case 2: + return resourceDrops["permission-card"] + default: + throw new Error(`unknown resource kind requested by test: ${kind}`) + } + }, + }, +} + +for (const imported of WebAssembly.Module.imports(module)) { + if ( + imported.kind === "function" && + imported.module === "golem:core/types@2.0.0" && + imported.name.startsWith("[resource-drop]") + ) { + importObject[imported.module] ??= {} + const kind = imported.name.slice("[resource-drop]".length) + if (!(kind in resourceDrops)) { + throw new Error(`unsupported resource-drop test import: ${kind}`) + } + importObject[imported.module][imported.name] = () => { + resourceDrops[kind]++ + } + continue + } + if (importObject[imported.module]) { + continue + } + throw new Error( + `unsupported WebAssembly test import: ${imported.module}#${imported.name}`, + ) +} + +instance = await WebAssembly.instantiate(module, importObject) +instance.exports._start() diff --git a/sdks/moonbit/golem_sdk/scripts/split-middleware-lift.py b/sdks/moonbit/golem_sdk/scripts/split-middleware-lift.py new file mode 100644 index 0000000000..e5a523124f --- /dev/null +++ b/sdks/moonbit/golem_sdk/scripts/split-middleware-lift.py @@ -0,0 +1,137 @@ +#!/usr/bin/env python3 +"""Split the pinned generator's oversized middleware argument lift. + +The MoonBit compiler currently ICEs on the generated ~7,500-line +wasmExportInvokeToolMiddleware function. This checked transformation only +accepts the exact shape emitted by the repository-pinned wit-bindgen revision. +""" + +import hashlib +import sys +from pathlib import Path + + +EXPECTED_INVOKE_LIFT_SHA256 = ( + "0506e6210f1cce9fc336df85551e8106a8366adc5898d1b6bb3105167589154b" +) + + +def main() -> None: + if len(sys.argv) != 2: + raise SystemExit("usage: split-middleware-lift.py ") + path = Path(sys.argv[1]) + lines = path.read_text().splitlines() + signature = "pub fn wasmExportInvokeToolMiddleware(p0 : Int) -> Int {" + if lines.count(signature) != 1: + raise SystemExit("expected exactly one invoke-tool-middleware binding") + if len(lines) <= 19252: + raise SystemExit("unexpected truncated invoke-tool-middleware binding") + if lines[11693] != "pub fn wasmExportInvokeToolMiddleware(p0 : Int) -> Int {": + raise SystemExit("unexpected invoke-tool-middleware binding shape") + if not lines[19252].startswith( + "fn wasmExportAsyncInvokeToolMiddlewareTaskReturn(" + ): + raise SystemExit("unexpected invoke-tool-middleware binding end") + raw_lift = "\n".join(lines[11692:19251]) + "\n" + digest = hashlib.sha256(raw_lift.encode()).hexdigest() + if digest != EXPECTED_INVOKE_LIFT_SHA256: + raise SystemExit( + "unexpected invoke-tool-middleware lift digest: " + f"expected {EXPECTED_INVOKE_LIFT_SHA256}, got {digest}" + ) + output = lines[:11692] + + def block(start: int, end: int) -> list[str]: + return [ + line[12:] if line.startswith(" ") else line + for line in lines[start - 1 : end] + ] + + def helper(signature: str, start: int, end: int, result: str) -> None: + output.extend(["///|", signature]) + output.extend(" " + line if line else "" for line in block(start, end)) + output.extend([" " + result, "}", ""]) + + helper( + "fn __wit_bindgen_lift_invoke_tool_commands(p0 : Int) -> @common.CommandTree {", + 11704, + 15752, + "@common.CommandTree::{nodes : array547}", + ) + helper( + "fn __wit_bindgen_lift_invoke_tool_schema(p0 : Int) -> @types.SchemaGraph {", + 15754, + 17296, + "@types.SchemaGraph::{type_nodes : array745, defs : array750, root : mbt_ffi_load32((p0) + 48)}", + ) + helper( + "fn __wit_bindgen_lift_invoke_command_path(p0 : Int) -> Array[String] {", + 17298, + 17306, + "array753", + ) + helper( + "fn __wit_bindgen_lift_invoke_input_graph(p0 : Int) -> @types.SchemaGraph {", + 17308, + 18850, + "@types.SchemaGraph::{type_nodes : array951, defs : array956, root : mbt_ffi_load32((p0) + 76)}", + ) + helper( + "fn __wit_bindgen_lift_invoke_input_value(p0 : Int) -> @types.SchemaValueTree {", + 18852, + 19130, + "@types.SchemaValueTree::{value_nodes : array987, root : mbt_ffi_load32((p0) + 88)}", + ) + helper( + "fn __wit_bindgen_lift_invoke_stdin(p0 : Int) -> @async-core.Stream[Byte]? {", + 19132, + 19140, + "lifted990", + ) + helper( + "fn __wit_bindgen_lift_invoke_principal(p0 : Int) -> @common0.Principal {", + 19142, + 19243, + "lifted1008", + ) + output.extend( + """#doc(hidden) +pub fn wasmExportInvokeToolMiddleware(p0 : Int) -> Int { + @async-core.with_waitableset(async fn() { + @async-core.with_task_group(async fn(background_group) { + let middleware_name = mbt_ffi_ptr2str(mbt_ffi_load32((p0) + 0), mbt_ffi_load32((p0) + 4)) + let tool_name = mbt_ffi_ptr2str(mbt_ffi_load32((p0) + 8), mbt_ffi_load32((p0) + 12)) + let version = mbt_ffi_ptr2str(mbt_ffi_load32((p0) + 16), mbt_ffi_load32((p0) + 20)) + let tool_metadata = @common.Tool::{ + version, + commands: __wit_bindgen_lift_invoke_tool_commands(p0), + schema: __wit_bindgen_lift_invoke_tool_schema(p0), + } + let input = @types.TypedSchemaValue::{ + graph: __wit_bindgen_lift_invoke_input_graph(p0), + value: __wit_bindgen_lift_invoke_input_value(p0), + } + let return_result: Ref[Result[@common.InvocationResult, @common.ToolError]?] = Ref(None) + return_result.val = Some(invoke_tool_middleware( + middleware_name, + tool_name, + tool_metadata, + __wit_bindgen_lift_invoke_command_path(p0), + input, + __wit_bindgen_lift_invoke_stdin(p0), + __wit_bindgen_lift_invoke_principal(p0), + @common.UnderlyingTool::UnderlyingTool(mbt_ffi_load32((p0) + 216)), + background_group, + )) + invoke_tool_middleware_task_return(return_result) + }) + }) +} +""".splitlines() + ) + output.extend(lines[19252:]) + path.write_text("\n".join(output) + "\n") + + +if __name__ == "__main__": + main() diff --git a/sdks/moonbit/golem_sdk/scripts/test-check-middleware-host-neutral.py b/sdks/moonbit/golem_sdk/scripts/test-check-middleware-host-neutral.py new file mode 100644 index 0000000000..14e1a0ed40 --- /dev/null +++ b/sdks/moonbit/golem_sdk/scripts/test-check-middleware-host-neutral.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python3 +"""Tests for the pure-middleware dependency-closure checker.""" + +import importlib.util +import tempfile +import unittest +from pathlib import Path + + +SCRIPT = Path(__file__).with_name("check-middleware-host-neutral.py") +SPEC = importlib.util.spec_from_file_location("host_neutral", SCRIPT) +if SPEC is None or SPEC.loader is None: + raise RuntimeError(f"cannot load {SCRIPT}") +HOST_NEUTRAL = importlib.util.module_from_spec(SPEC) +SPEC.loader.exec_module(HOST_NEUTRAL) + + +class DependencyClosureTest(unittest.TestCase): + def test_rejects_transitive_tool_host_import_with_chain(self) -> None: + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + self.write_package( + root, + "tool-core", + 'import { "golemcloud/golem_sdk/helper" }\n', + ) + self.write_package( + root, + "helper", + 'import { "golemcloud/golem_sdk/interface/golem/tool/host" }\n', + ) + self.write_package(root, "interface/golem/tool/host", "") + + with self.assertRaisesRegex( + SystemExit, + "(?s)tool-core.*helper.*interface/golem/tool/host", + ): + HOST_NEUTRAL.check_dependency_closure( + root, ("golemcloud/golem_sdk/tool-core",) + ) + + def test_rejects_unknown_external_import_with_chain(self) -> None: + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + self.write_package( + root, + "tool-core", + 'import { "golemcloud/golem_sdk/helper" }\n', + ) + self.write_package( + root, + "helper", + 'import { "third-party/ambient-tool-client" }\n', + ) + + with self.assertRaisesRegex( + SystemExit, + "(?s)unapproved external package.*tool-core.*helper.*third-party/ambient-tool-client", + ): + HOST_NEUTRAL.check_dependency_closure( + root, ("golemcloud/golem_sdk/tool-core",) + ) + + def test_accepts_an_explicitly_audited_external_import(self) -> None: + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + self.write_package( + root, + "tool-core", + 'import { "audited/pure-helper" }\n', + ) + + closure = HOST_NEUTRAL.check_dependency_closure( + root, + ("golemcloud/golem_sdk/tool-core",), + frozenset({"audited/pure-helper"}), + ) + + self.assertEqual( + closure, + {"golemcloud/golem_sdk/tool-core": None}, + ) + + @staticmethod + def write_package(root: Path, relative: str, descriptor: str) -> None: + package = root / relative + package.mkdir(parents=True) + (package / "moon.pkg").write_text(descriptor) + + +if __name__ == "__main__": + unittest.main() diff --git a/sdks/moonbit/golem_sdk/tool/canonical_input.mbt b/sdks/moonbit/golem_sdk/tool-core/canonical_input.mbt similarity index 96% rename from sdks/moonbit/golem_sdk/tool/canonical_input.mbt rename to sdks/moonbit/golem_sdk/tool-core/canonical_input.mbt index 43c2b89bb6..a8ed1bc7ba 100644 --- a/sdks/moonbit/golem_sdk/tool/canonical_input.mbt +++ b/sdks/moonbit/golem_sdk/tool-core/canonical_input.mbt @@ -281,16 +281,36 @@ pub fn decode_canonical_input( input : @types.TypedSchemaValue, context : String, ) -> Array[CanonicalInputValue] raise @toolCommon.ToolError { - let model = def.canonical_input_model(command_index) catch { - error => + let typed = @model.typed_schema_value_from_wit(input) catch { + error => { + @model.drop_wit_capabilities(input.value) raise @toolCommon.ToolError::InvalidInput( - "\{context}: invalid canonical input model: \{to_repr(error)}", + "\{context}: invalid typed schema value input: \{error}", ) + } } - let typed = @model.typed_schema_value_from_wit(input) catch { + decode_canonical_input_value(def, command_index, typed, context) catch { + error => { + @model.drop_owned_capabilities(typed.value) + raise error + } + } +} + +///| +/// Validates and projects an already-owned SDK schema value against a command's +/// canonical input model. +#doc(hidden) +pub fn decode_canonical_input_value( + def : ToolDef, + command_index : Int, + typed : @model.TypedSchemaValue, + context : String, +) -> Array[CanonicalInputValue] raise @toolCommon.ToolError { + let model = def.canonical_input_model(command_index) catch { error => raise @toolCommon.ToolError::InvalidInput( - "\{context}: invalid typed schema value input: \{error}", + "\{context}: invalid canonical input model: \{to_repr(error)}", ) } if typed.graph != model.record_graph { diff --git a/sdks/moonbit/golem_sdk/tool/composition.mbt b/sdks/moonbit/golem_sdk/tool-core/composition.mbt similarity index 100% rename from sdks/moonbit/golem_sdk/tool/composition.mbt rename to sdks/moonbit/golem_sdk/tool-core/composition.mbt diff --git a/sdks/moonbit/golem_sdk/tool/dispatch.mbt b/sdks/moonbit/golem_sdk/tool-core/dispatch.mbt similarity index 100% rename from sdks/moonbit/golem_sdk/tool/dispatch.mbt rename to sdks/moonbit/golem_sdk/tool-core/dispatch.mbt diff --git a/sdks/moonbit/golem_sdk/tool/help.mbt b/sdks/moonbit/golem_sdk/tool-core/help.mbt similarity index 100% rename from sdks/moonbit/golem_sdk/tool/help.mbt rename to sdks/moonbit/golem_sdk/tool-core/help.mbt diff --git a/sdks/moonbit/golem_sdk/tool-core/invocation.mbt b/sdks/moonbit/golem_sdk/tool-core/invocation.mbt new file mode 100644 index 0000000000..8941f3dd50 --- /dev/null +++ b/sdks/moonbit/golem_sdk/tool-core/invocation.mbt @@ -0,0 +1,213 @@ +///| +pub(all) struct InvocationResult { + result : @model.TypedSchemaValue? + stdout : @async-core.Stream[Byte]? +} + +///| +/// Empty custom-error type for tools whose command surface declares no typed +/// custom errors. +pub(all) enum NoToolError {} + +///| +pub fn encode_typed_input( + input : @model.TypedSchemaValue, +) -> Result[@types.TypedSchemaValue, String] { + try @model.typed_schema_value_to_wit(input) catch { + error => Err("failed to encode tool input: \{error}") + } noraise { + encoded => Ok(encoded) + } +} + +///| +pub fn decode_typed_value( + value : @types.TypedSchemaValue, + context : String, +) -> Result[@model.TypedSchemaValue, String] { + try @model.typed_schema_value_from_wit(value) catch { + error => { + @model.drop_wit_capabilities(value.value) + Err("failed to decode \{context}: \{error}") + } + } noraise { + decoded => Ok(decoded) + } +} + +///| +pub fn decode_invocation_result( + result : @toolCommon.InvocationResult, +) -> Result[InvocationResult, String] { + let decoded = match result.result { + Some(value) => + match decode_typed_value(value, "tool result") { + Ok(decoded) => Some(decoded) + Err(error) => { + match result.stdout { + Some(stdout) => stdout.drop_sync() + None => () + } + return Err(error) + } + } + None => None + } + Ok({ result: decoded, stdout: result.stdout }) +} + +///| +/// Releases every still-owned capability and stdout stream in a decoded tool +/// result. The operation is safe to repeat because schema capability holders +/// and streams share take/drop state across copies. +#doc(hidden) +pub fn drop_invocation_result(result : InvocationResult) -> Unit { + match result.result { + Some(value) => @model.drop_owned_capabilities(value.value) + None => () + } + match result.stdout { + Some(stdout) => stdout.drop_sync() + None => () + } +} + +///| +pub fn[T : @schema.FromSchema] decode_custom_error( + value : @model.TypedSchemaValue, +) -> Result[T, String] { + try @schema.from_value_as(value.value) catch { + error => { + @model.drop_owned_capabilities(value.value) + Err("failed to decode remote tool error: \{error}") + } + } noraise { + decoded => Ok(decoded) + } +} + +///| +pub fn[T : @schema.FromSchema] project_result_with_stdout( + result : InvocationResult, +) -> Result[(T, @async-core.Stream[Byte]), String] { + let stdout = expect_stdout(result.stdout) + let value = decode_expected_value(result.result) + match (stdout, value) { + (Ok(stdout), Ok(value)) => Ok((value, stdout)) + (Err(error), _) => { + drop_invocation_result(result) + Err(error) + } + (_, Err(error)) => { + drop_invocation_result(result) + Err(error) + } + } +} + +///| +pub fn[T : @schema.FromSchema] project_result_value( + result : InvocationResult, +) -> Result[T, String] { + match expect_no_stdout(result.stdout) { + Err(error) => { + drop_invocation_result(result) + Err(error) + } + Ok(_) => + match decode_expected_value(result.result) { + Ok(value) => Ok(value) + Err(error) => { + drop_invocation_result(result) + Err(error) + } + } + } +} + +///| +pub fn project_result_stdout_only( + result : InvocationResult, +) -> Result[@async-core.Stream[Byte], String] { + let stdout = expect_stdout(result.stdout) + match (stdout, expect_no_value(result.result)) { + (Ok(stdout), Ok(_)) => Ok(stdout) + (Err(error), _) => { + drop_invocation_result(result) + Err(error) + } + (_, Err(error)) => { + drop_invocation_result(result) + Err(error) + } + } +} + +///| +pub fn project_result_empty(result : InvocationResult) -> Result[Unit, String] { + match expect_no_stdout(result.stdout) { + Err(error) => { + drop_invocation_result(result) + Err(error) + } + Ok(_) => + match expect_no_value(result.result) { + Ok(_) => Ok(()) + Err(error) => { + drop_invocation_result(result) + Err(error) + } + } + } +} + +///| +fn expect_stdout( + stdout : @async-core.Stream[Byte]?, +) -> Result[@async-core.Stream[Byte], String] { + match stdout { + Some(stdout) => Ok(stdout) + None => Err("tool result did not contain declared stdout stream") + } +} + +///| +fn expect_no_stdout(stdout : @async-core.Stream[Byte]?) -> Result[Unit, String] { + match stdout { + Some(_) => Err("tool result unexpectedly contained stdout stream") + None => Ok(()) + } +} + +///| +fn expect_value( + value : @model.TypedSchemaValue?, +) -> Result[@model.TypedSchemaValue, String] { + match value { + Some(value) => Ok(value) + None => Err("tool result did not contain a value") + } +} + +///| +fn expect_no_value(value : @model.TypedSchemaValue?) -> Result[Unit, String] { + match value { + Some(_) => Err("tool result unexpectedly contained a value") + None => Ok(()) + } +} + +///| +fn[T : @schema.FromSchema] decode_expected_value( + value : @model.TypedSchemaValue?, +) -> Result[T, String] { + let value = match expect_value(value) { + Ok(value) => value + Err(error) => return Err(error) + } + try @schema.from_value_as(value.value) catch { + error => Err("failed to decode tool result: \{error}") + } noraise { + decoded => Ok(decoded) + } +} diff --git a/sdks/moonbit/golem_sdk/tool/literal.mbt b/sdks/moonbit/golem_sdk/tool-core/literal.mbt similarity index 100% rename from sdks/moonbit/golem_sdk/tool/literal.mbt rename to sdks/moonbit/golem_sdk/tool-core/literal.mbt diff --git a/sdks/moonbit/golem_sdk/tool/model.mbt b/sdks/moonbit/golem_sdk/tool-core/model.mbt similarity index 100% rename from sdks/moonbit/golem_sdk/tool/model.mbt rename to sdks/moonbit/golem_sdk/tool-core/model.mbt diff --git a/sdks/moonbit/golem_sdk/tool-core/moon.pkg b/sdks/moonbit/golem_sdk/tool-core/moon.pkg new file mode 100644 index 0000000000..7a0ccf76cf --- /dev/null +++ b/sdks/moonbit/golem_sdk/tool-core/moon.pkg @@ -0,0 +1,18 @@ +import { + "golemcloud/golem_sdk/async-core", + "golemcloud/golem_sdk/interface/golem/agent/common" @agentCommon, + "golemcloud/golem_sdk/interface/golem/core/types", + "golemcloud/golem_sdk/interface/golem/tool/common" @toolCommon, + "golemcloud/golem_sdk/schema", + "golemcloud/golem_sdk/schema_model" @model, + "moonbitlang/core/strconv", +} + +import { + "golemcloud/golem_sdk/schema", + "golemcloud/golem_sdk/schema_model" @model, +} for "test" + +warnings = "-44" + +supported_targets = "+wasm" diff --git a/sdks/moonbit/golem_sdk/tool-core/pkg.generated.mbti b/sdks/moonbit/golem_sdk/tool-core/pkg.generated.mbti new file mode 100644 index 0000000000..9c78b4d52a --- /dev/null +++ b/sdks/moonbit/golem_sdk/tool-core/pkg.generated.mbti @@ -0,0 +1,303 @@ +// Generated using `moon info`, DON'T EDIT IT +package "golemcloud/golem_sdk/tool-core" + +import { + "golemcloud/golem_sdk/async-core", + "golemcloud/golem_sdk/interface/golem/core/types", + "golemcloud/golem_sdk/schema", + "golemcloud/golem_sdk/schema_model", + "moonbitlang/core/debug", +} + +// Values +pub fn build_canonical_input(CanonicalInputModel, Array[(String, @schema_model.SchemaValue)]) -> @schema_model.TypedSchemaValue raise ToolBuildError + +pub fn[T : @schema.IntoSchema + @schema.FromSchema] decode_canonical_field(Array[CanonicalInputValue], String, String) -> T raise @golemcloud/golem_sdk/interface/golem/tool/common.ToolError + +pub fn decode_canonical_input(ToolDef, Int, @types.TypedSchemaValue, String) -> Array[CanonicalInputValue] raise @golemcloud/golem_sdk/interface/golem/tool/common.ToolError + +pub fn[T : @schema.FromSchema] decode_custom_error(@schema_model.TypedSchemaValue) -> Result[T, String] + +pub fn decode_invocation_input(@types.TypedSchemaValue, Int, String) -> Array[@schema_model.SchemaValue] raise @golemcloud/golem_sdk/interface/golem/tool/common.ToolError + +pub fn decode_invocation_result(@golemcloud/golem_sdk/interface/golem/tool/common.InvocationResult) -> Result[InvocationResult, String] + +pub fn[T : @schema.FromSchema] decode_param(Array[@schema_model.SchemaValue], Int, String) -> T raise @golemcloud/golem_sdk/interface/golem/tool/common.ToolError + +pub fn decode_typed_value(@types.TypedSchemaValue, String) -> Result[@schema_model.TypedSchemaValue, String] + +pub fn discover_tools() -> Array[@golemcloud/golem_sdk/interface/golem/tool/common.Tool] + +pub fn encode_invocation_input(@schema_model.SchemaGraph, Array[@schema_model.SchemaValue]) -> @schema_model.TypedSchemaValue + +pub fn[T : @schema.IntoSchema] encode_result_value(T) -> @types.TypedSchemaValue raise @golemcloud/golem_sdk/interface/golem/tool/common.ToolError + +pub fn encode_typed_input(@schema_model.TypedSchemaValue) -> Result[@types.TypedSchemaValue, String] + +pub fn forward_canonical_input(Array[CanonicalInputValue], ToolDef, Int) -> @types.TypedSchemaValue raise @golemcloud/golem_sdk/interface/golem/tool/common.ToolError + +pub fn get_registered_tool(String) -> Result[@golemcloud/golem_sdk/interface/golem/tool/common.Tool, @golemcloud/golem_sdk/interface/golem/tool/common.ToolError] + +pub fn invocation_result_empty() -> @golemcloud/golem_sdk/interface/golem/tool/common.InvocationResult + +pub fn invocation_result_stdout(@async-core.Stream[Byte]) -> @golemcloud/golem_sdk/interface/golem/tool/common.InvocationResult + +pub fn[T : @schema.IntoSchema] invocation_result_value(T) -> @golemcloud/golem_sdk/interface/golem/tool/common.InvocationResult raise @golemcloud/golem_sdk/interface/golem/tool/common.ToolError + +pub fn[T : @schema.IntoSchema] invocation_result_value_with_stdout(T, @async-core.Stream[Byte]) -> @golemcloud/golem_sdk/interface/golem/tool/common.InvocationResult raise @golemcloud/golem_sdk/interface/golem/tool/common.ToolError + +pub fn invoke_registered_subtool(String, Array[String], Array[CanonicalInputValue], @async-core.Stream[Byte]?, @golemcloud/golem_sdk/interface/golem/agent/common.Principal) -> Result[@golemcloud/golem_sdk/interface/golem/tool/common.InvocationResult, @golemcloud/golem_sdk/interface/golem/tool/common.ToolError] + +pub fn invoke_registered_tool(String, Array[String], @types.TypedSchemaValue, @async-core.Stream[Byte]?, @golemcloud/golem_sdk/interface/golem/agent/common.Principal) -> Result[@golemcloud/golem_sdk/interface/golem/tool/common.InvocationResult, @golemcloud/golem_sdk/interface/golem/tool/common.ToolError] + +pub fn literal_to_schema_value(@schema_model.SchemaGraph, ToolLiteral) -> @schema_model.SchemaValue raise ToolBuildError + +pub fn new_stdout() -> (@async-core.Stream[Byte], @async-core.Sink[Byte]) + +pub fn project_result_empty(InvocationResult) -> Result[Unit, String] + +pub fn project_result_stdout_only(InvocationResult) -> Result[@async-core.Stream[Byte], String] + +pub fn[T : @schema.FromSchema] project_result_value(InvocationResult) -> Result[T, String] + +pub fn[T : @schema.FromSchema] project_result_with_stdout(InvocationResult) -> Result[(T, @async-core.Stream[Byte]), String] + +pub fn refine_numeric(@schema_model.SchemaGraph, String?, String?, String?) -> @schema_model.SchemaGraph raise ToolBuildError + +pub fn refine_path(@schema_model.SchemaGraph, @types.PathDirection?, @types.PathKind?, Array[String]?) -> @schema_model.SchemaGraph raise ToolBuildError + +pub fn refine_text(@schema_model.SchemaGraph, String?, UInt?, UInt?) -> @schema_model.SchemaGraph raise ToolBuildError + +pub fn refine_url(@schema_model.SchemaGraph, Array[String]?) -> @schema_model.SchemaGraph raise ToolBuildError + +pub fn register_subtool_def_invoker(ToolDef, (Array[String], @types.TypedSchemaValue, @async-core.Stream[Byte]?, @golemcloud/golem_sdk/interface/golem/agent/common.Principal) -> Result[@golemcloud/golem_sdk/interface/golem/tool/common.InvocationResult, @golemcloud/golem_sdk/interface/golem/tool/common.ToolError]) -> Unit raise ToolBuildError + +pub fn register_tool_def(ToolDef) -> Unit raise ToolBuildError + +pub fn register_tool_def_invoker(ToolDef, (Array[String], @types.TypedSchemaValue, @async-core.Stream[Byte]?, @golemcloud/golem_sdk/interface/golem/agent/common.Principal) -> Result[@golemcloud/golem_sdk/interface/golem/tool/common.InvocationResult, @golemcloud/golem_sdk/interface/golem/tool/common.ToolError]) -> Unit raise ToolBuildError + +pub fn register_wire_tool(@golemcloud/golem_sdk/interface/golem/tool/common.Tool) -> Unit raise ToolBuildError + +pub fn register_wire_tool_invoker(@golemcloud/golem_sdk/interface/golem/tool/common.Tool, (Array[String], @types.TypedSchemaValue, @async-core.Stream[Byte]?, @golemcloud/golem_sdk/interface/golem/agent/common.Principal) -> Result[@golemcloud/golem_sdk/interface/golem/tool/common.InvocationResult, @golemcloud/golem_sdk/interface/golem/tool/common.ToolError]) -> Unit raise ToolBuildError + +pub fn render_argument_help(@golemcloud/golem_sdk/interface/golem/tool/common.Tool, Array[String], String) -> Result[String, ToolBuildError] + +pub fn render_help(@golemcloud/golem_sdk/interface/golem/tool/common.Tool, Array[String]) -> Result[String, ToolBuildError] + +pub fn resolve_command_path(@golemcloud/golem_sdk/interface/golem/tool/common.Tool, Array[String]) -> Result[Int, ToolBuildError] + +pub fn tool_name(@golemcloud/golem_sdk/interface/golem/tool/common.Tool) -> Result[String, ToolBuildError] + +pub fn value_is_literal_to_schema_value(@schema_model.SchemaGraph, ToolLiteral) -> @schema_model.SchemaValue raise ToolBuildError + +// Errors +pub suberror ToolBuildError { + EmptyCommandTree + CommandNotFound(String) + InvalidCommandTree(String) + SubtreeRootNameMismatch(String, String) + InheritedGlobalConflict(String, String) + MissingCanonicalInputField(String) + SchemaModelError(String) + LiteralTypeMismatch(String) + InvalidLiteral(String) + RefinementTypeMismatch(String, String) + InvalidNumericBound(String) + ValueIsTypeMismatch(String) + UnresolvedValueIsLiteral(String) +} derive(Eq, @debug.Debug) +pub fn ToolBuildError::schema_model(String) -> Self + +// Types and methods +pub(all) struct CanonicalInputField { + name : String + aliases : Array[String] + type_ : @schema_model.SchemaGraph +} derive(Eq) + +pub(all) struct CanonicalInputModel { + fields : Array[CanonicalInputField] + record_graph : @schema_model.SchemaGraph +} derive(Eq) + +pub(all) struct CanonicalInputValue { + name : String + aliases : Array[String] + type_ : @schema_model.SchemaGraph + value : @schema_model.SchemaValue +} derive(Eq) + +pub(all) struct CommandBodyDef { + positionals : PositionalsDef + options : Array[OptionSpecDef] + flags : Array[@golemcloud/golem_sdk/interface/golem/tool/common.FlagSpec] + constraints : Array[ConstraintDef] + stdin : @golemcloud/golem_sdk/interface/golem/tool/common.StreamSpec? + stdout : @golemcloud/golem_sdk/interface/golem/tool/common.StreamSpec? + result : ResultSpecDef? + errors : Array[ErrorCaseDef] + annotations : @golemcloud/golem_sdk/interface/golem/tool/common.CommandAnnotations? +} + +pub(all) struct CommandNodeDef { + name : String + aliases : Array[String] + doc : @golemcloud/golem_sdk/interface/golem/tool/common.Doc + globals : GlobalsDef + subcommands : Array[Int] + body : CommandBodyDef? +} + +pub(all) enum ConstraintDef { + RequiresAll(Array[RefDef]) + AllOrNone(Array[RefDef]) + RequiresAny(Array[RefDef]) + MutexGroups(Array[RefGroupDef]) + Implies(ImpliesDef) + Forbids(ForbidsDef) +} + +pub(all) struct ErrorCaseDef { + name : String + doc : @golemcloud/golem_sdk/interface/golem/tool/common.Doc + kind : @golemcloud/golem_sdk/interface/golem/tool/common.ErrorKind + exit_code : Byte + payload : @schema_model.SchemaGraph? +} + +pub(all) struct ForbidsDef { + lhs_quant : @golemcloud/golem_sdk/interface/golem/tool/common.Quantifier + lhs : Array[RefDef] + rhs : Array[RefDef] +} + +pub(all) struct GlobalsDef { + options : Array[OptionSpecDef] + flags : Array[@golemcloud/golem_sdk/interface/golem/tool/common.FlagSpec] +} + +pub(all) struct ImpliesDef { + lhs_quant : @golemcloud/golem_sdk/interface/golem/tool/common.Quantifier + lhs : Array[RefDef] + rhs_quant : @golemcloud/golem_sdk/interface/golem/tool/common.Quantifier + rhs : Array[RefDef] +} + +pub(all) struct InvocationResult { + result : @schema_model.TypedSchemaValue? + stdout : @async-core.Stream[Byte]? +} + +pub(all) enum NoToolError { +} + +pub(all) enum OptionShapeDef { + Scalar(@schema_model.SchemaGraph) + OptionalScalar(@schema_model.SchemaGraph) + RepeatableList(RepeatableListShapeDef) + RepeatableMap(RepeatableMapShapeDef) +} + +pub(all) struct OptionSpecDef { + long : String + short : Char? + aliases : Array[String] + doc : @golemcloud/golem_sdk/interface/golem/tool/common.Doc + value_name : String? + shape : OptionShapeDef + default : @schema_model.SchemaValue? + required : Bool + env_var : String? +} + +pub(all) struct PositionalDef { + name : String + doc : @golemcloud/golem_sdk/interface/golem/tool/common.Doc + value_name : String? + type_ : @schema_model.SchemaGraph + default : @schema_model.SchemaValue? + required : Bool + accepts_stdio : Bool +} + +pub(all) struct PositionalsDef { + fixed : Array[PositionalDef] + tail : TailPositionalDef? +} + +pub(all) enum RefDef { + Present(String) + ValueIs(ValueIsRefDef) +} + +pub(all) struct RefGroupDef { + refs : Array[RefDef] +} + +pub(all) struct RepeatableListShapeDef { + repetition : @golemcloud/golem_sdk/interface/golem/tool/common.Repetition + item_type : @schema_model.SchemaGraph +} + +pub(all) struct RepeatableMapShapeDef { + repetition : @golemcloud/golem_sdk/interface/golem/tool/common.Repetition + map_type : @schema_model.SchemaGraph + duplicate_key_policy : @golemcloud/golem_sdk/interface/golem/tool/common.DuplicateKeyPolicy +} + +pub(all) struct ResultSpecDef { + type_ : @schema_model.SchemaGraph + doc : @golemcloud/golem_sdk/interface/golem/tool/common.Doc + formatters : Array[@golemcloud/golem_sdk/interface/golem/tool/common.Formatter] + default_formatter : String +} + +pub(all) struct TailPositionalDef { + name : String + doc : @golemcloud/golem_sdk/interface/golem/tool/common.Doc + value_name : String? + item_type : @schema_model.SchemaGraph + min : UInt + max : UInt? + separator : String? + verbatim : Bool + accepts_stdio : Bool +} + +pub(all) struct ToolDef { + version : String + commands : Array[CommandNodeDef] +} +pub fn ToolDef::canonical_input_fields(Self, Int) -> Array[CanonicalInputField] raise ToolBuildError +pub fn ToolDef::canonical_input_model(Self, Int) -> CanonicalInputModel raise ToolBuildError +pub fn ToolDef::command_index_by_path(Self, Array[String]) -> Int? +pub fn ToolDef::graft_subtree(Self, Self, String, GlobalsDef, String?, @golemcloud/golem_sdk/interface/golem/tool/common.Doc?, Array[String]?) -> Self raise ToolBuildError +pub fn ToolDef::normalize_inherited_globals(Self) -> Self raise ToolBuildError +pub fn ToolDef::to_tool(Self) -> @golemcloud/golem_sdk/interface/golem/tool/common.Tool raise ToolBuildError +pub fn ToolDef::tool_name(Self) -> Result[String, ToolBuildError] + +pub(all) enum ToolLiteral { + Scalar(String) + List(Array[String]) + Map(Array[(String, String)]) +} derive(Eq, @debug.Debug) + +pub(all) enum ValueIsLiteralDef { + Resolved(@schema_model.SchemaValue) + Deferred(ToolLiteral) +} + +pub(all) struct ValueIsRefDef { + name : String + value : ValueIsLiteralDef +} + +// Type aliases +pub using @golemcloud/golem_sdk/interface/golem/agent/common {type Principal} + +// Traits +pub(open) trait ToolErrorSchema { + fn error_cases() -> Result[Array[ErrorCaseDef], ToolBuildError] + fn to_error_payload_value(Self) -> Result[@schema_model.TypedSchemaValue, String] + fn from_error_payload_value(@schema_model.TypedSchemaValue) -> Result[Self, String] +} diff --git a/sdks/moonbit/golem_sdk/tool/refinement.mbt b/sdks/moonbit/golem_sdk/tool-core/refinement.mbt similarity index 100% rename from sdks/moonbit/golem_sdk/tool/refinement.mbt rename to sdks/moonbit/golem_sdk/tool-core/refinement.mbt diff --git a/sdks/moonbit/golem_sdk/tool/registry.mbt b/sdks/moonbit/golem_sdk/tool-core/registry.mbt similarity index 100% rename from sdks/moonbit/golem_sdk/tool/registry.mbt rename to sdks/moonbit/golem_sdk/tool-core/registry.mbt diff --git a/sdks/moonbit/golem_sdk/tool/tool_test.mbt b/sdks/moonbit/golem_sdk/tool-core/tool_test.mbt similarity index 100% rename from sdks/moonbit/golem_sdk/tool/tool_test.mbt rename to sdks/moonbit/golem_sdk/tool-core/tool_test.mbt diff --git a/sdks/moonbit/golem_sdk/tool-facade-test/facade_test.mbt b/sdks/moonbit/golem_sdk/tool-facade-test/facade_test.mbt new file mode 100644 index 0000000000..0d8f32ea88 --- /dev/null +++ b/sdks/moonbit/golem_sdk/tool-facade-test/facade_test.mbt @@ -0,0 +1,40 @@ +///| +enum FacadeError { + Rejected +} + +///| +impl @tool.ToolErrorSchema for FacadeError with fn error_cases() { + Ok([]) +} + +///| +impl @tool.ToolErrorSchema for FacadeError with fn to_error_payload_value(_) { + Err("not used by the facade check") +} + +///| +impl @tool.ToolErrorSchema for FacadeError with fn from_error_payload_value(_) { + Ok(Rejected) +} + +///| +test "ambient tool facade preserves nominal source syntax after core split" { + let root : @tool.CommandNodeDef = { + name: "facade", + aliases: [], + doc: { summary: "facade", description: "", examples: [] }, + globals: { options: [], flags: [] }, + subcommands: [], + body: None, + } + let def : @tool.ToolDef = { version: "1.0.0", commands: [root] } + assert_true(def.tool_name() is Ok("facade")) + let cases : Result[Array[@tool.ErrorCaseDef], @tool.ToolBuildError] = FacadeError::error_cases() + assert_true(cases is Ok([])) + let literal : @tool.ToolLiteral = @tool.ToolLiteral::Scalar("value") + assert_true(literal is @tool.ToolLiteral::Scalar("value")) + let _principal : @tool.Principal? = None + let _wire_error : @toolCommon.ToolError? = None + let _model_value : @model.TypedSchemaValue? = None +} diff --git a/sdks/moonbit/golem_sdk/tool-facade-test/moon.pkg b/sdks/moonbit/golem_sdk/tool-facade-test/moon.pkg new file mode 100644 index 0000000000..ade23c9465 --- /dev/null +++ b/sdks/moonbit/golem_sdk/tool-facade-test/moon.pkg @@ -0,0 +1,9 @@ +import { + "golemcloud/golem_sdk/interface/golem/tool/common" @toolCommon, + "golemcloud/golem_sdk/schema_model" @model, + "golemcloud/golem_sdk/tool", +} for "test" + +warnings = "-44" + +supported_targets = "+wasm" diff --git a/sdks/moonbit/golem_sdk/tool-facade-test/pkg.generated.mbti b/sdks/moonbit/golem_sdk/tool-facade-test/pkg.generated.mbti new file mode 100644 index 0000000000..f4131e7950 --- /dev/null +++ b/sdks/moonbit/golem_sdk/tool-facade-test/pkg.generated.mbti @@ -0,0 +1,12 @@ +// Generated using `moon info`, DON'T EDIT IT +package "golemcloud/golem_sdk/tool-facade-test" + +// Values + +// Errors + +// Types and methods + +// Type aliases + +// Traits diff --git a/sdks/moonbit/golem_sdk/tool-middleware-authoring-test/.golem-sdk-role b/sdks/moonbit/golem_sdk/tool-middleware-authoring-test/.golem-sdk-role new file mode 100644 index 0000000000..da6450b280 --- /dev/null +++ b/sdks/moonbit/golem_sdk/tool-middleware-authoring-test/.golem-sdk-role @@ -0,0 +1,2 @@ +# Generated by golem_sdk_tools; do not edit. +tool-middleware diff --git a/sdks/moonbit/golem_sdk/tool-middleware-authoring-test/authoring.mbt b/sdks/moonbit/golem_sdk/tool-middleware-authoring-test/authoring.mbt new file mode 100644 index 0000000000..6b87d3ede1 --- /dev/null +++ b/sdks/moonbit/golem_sdk/tool-middleware-authoring-test/authoring.mbt @@ -0,0 +1,324 @@ +///| +#derive.tool("presented") +struct Presented {} + +///| +#derive.golem_schema +pub(all) enum RunError { + #derive.error(kind="runtime-error") + Broken(String) +} + +///| +pub fn Presented::unit() -> Unit { + () +} + +///| +pub fn Presented::value(value : String) -> Int { + value.length() +} + +///| +pub fn Presented::retry(value : String) -> Int { + value.length() +} + +///| +pub fn Presented::stdout(output : @asyncCore.Sink[Byte]) -> Unit { + ignore(output) +} + +///| +pub fn Presented::abandon_stdout(output : @asyncCore.Sink[Byte]) -> Unit { + ignore(output) +} + +///| +pub fn Presented::value_stdout( + value : String, + output : @asyncCore.Sink[Byte], +) -> Int { + ignore(output) + value.length() +} + +///| +pub fn Presented::io( + input : @asyncCore.Stream[Byte], + output : @asyncCore.Sink[Byte], + principal : @tool.Principal, +) -> Result[String, RunError] { + ignore(input) + ignore(output) + ignore(principal) + Ok("done") +} + +///| +#derive.command(subtree="Nested") +pub fn Presented::admin(verbose : Bool) -> Unit { + ignore(verbose) +} + +///| +#derive.tool("nested") +struct Nested {} + +///| +pub fn Nested::run(name : String) -> String { + name +} + +///| +#derive.tool_middleware("policy", presented="Presented") +struct Policy {} + +///| +pub async fn Policy::unit( + underlying : PresentedUnderlying, +) -> Result[Unit, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + underlying.unit() +} + +///| +pub async fn Policy::value( + underlying : PresentedUnderlying, + value : String, +) -> Result[Int, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + underlying.value(value) +} + +///| +pub async fn Policy::retry( + underlying : PresentedUnderlying, + value : String, +) -> Result[Int, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + match underlying.retry(value) { + Ok(_) => underlying.retry(value) + Err(error) => Err(error) + } +} + +///| +pub async fn Policy::stdout( + underlying : PresentedUnderlying, +) -> Result[ + @asyncCore.Stream[Byte], + @toolMiddleware.ToolInvokeError[@tool.NoToolError], +] { + underlying.stdout() +} + +///| +pub async fn Policy::abandon_stdout( + underlying : PresentedUnderlying, +) -> Result[ + @asyncCore.Stream[Byte], + @toolMiddleware.ToolInvokeError[@tool.NoToolError], +] { + match underlying.abandon_stdout() { + Ok(_) => + Err(@toolMiddleware.ToolInvokeError::InvalidResult("abandoned stdout")) + Err(error) => Err(error) + } +} + +///| +pub async fn Policy::value_stdout( + underlying : PresentedUnderlying, + value : String, +) -> Result[ + (Int, @asyncCore.Stream[Byte]), + @toolMiddleware.ToolInvokeError[@tool.NoToolError], +] { + underlying.value_stdout(value) +} + +///| +pub async fn Policy::io( + underlying : PresentedUnderlying, + input : @toolMiddleware.MiddlewareStdin, + principal : @tool.Principal, +) -> Result[ + (String, @asyncCore.Stream[Byte]), + @toolMiddleware.ToolInvokeError[RunError], +] { + ignore(principal) + underlying.io(input) +} + +///| +pub async fn Policy::admin__run( + underlying : PresentedUnderlying, + verbose : Bool, + name : String, +) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + underlying.admin__run(verbose, name) +} + +///| +#derive.tool("storage") +struct Storage {} + +///| +pub fn Storage::fetch(key : String) -> String { + key +} + +///| +#derive.tool_middleware("adapter", presented="Presented", expected="Storage") +struct Adapter {} + +///| +pub async fn Adapter::unit( + underlying : StorageUnderlying, +) -> Result[Unit, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + ignore(underlying) + Ok(()) +} + +///| +pub async fn Adapter::value( + underlying : StorageUnderlying, + value : String, +) -> Result[Int, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + match underlying.fetch(value) { + Ok(value) => Ok(value.length()) + Err(error) => Err(error) + } +} + +///| +pub async fn Adapter::retry( + underlying : StorageUnderlying, + value : String, +) -> Result[Int, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + match underlying.fetch(value) { + Ok(value) => Ok(value.length()) + Err(error) => Err(error) + } +} + +///| +pub async fn Adapter::stdout( + underlying : StorageUnderlying, +) -> Result[ + @asyncCore.Stream[Byte], + @toolMiddleware.ToolInvokeError[@tool.NoToolError], +] { + ignore(underlying) + abort("compile fixture") +} + +///| +pub async fn Adapter::abandon_stdout( + underlying : StorageUnderlying, +) -> Result[ + @asyncCore.Stream[Byte], + @toolMiddleware.ToolInvokeError[@tool.NoToolError], +] { + ignore(underlying) + abort("compile fixture") +} + +///| +pub async fn Adapter::value_stdout( + underlying : StorageUnderlying, + value : String, +) -> Result[ + (Int, @asyncCore.Stream[Byte]), + @toolMiddleware.ToolInvokeError[@tool.NoToolError], +] { + ignore(underlying) + ignore(value) + abort("compile fixture") +} + +///| +pub async fn Adapter::io( + underlying : StorageUnderlying, + input : @toolMiddleware.MiddlewareStdin, + principal : @tool.Principal, +) -> Result[ + (String, @asyncCore.Stream[Byte]), + @toolMiddleware.ToolInvokeError[RunError], +] { + ignore(underlying) + ignore(input) + ignore(principal) + abort("compile fixture") +} + +///| +pub async fn Adapter::admin__run( + underlying : StorageUnderlying, + verbose : Bool, + name : String, +) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + ignore(verbose) + underlying.fetch(name) +} + +///| +#derive.universal_tool_middleware("audit") +pub async fn audit( + invocation : @toolMiddleware.RawToolInvocation, + underlying : @toolMiddleware.UnderlyingTool, +) -> Result[ + @toolMiddleware.RawInvocationResult, + @toolMiddleware.ToolInvokeError[@toolMiddleware.RawTypedSchemaValue], +] { + ignore(invocation.tool_name()) + ignore(invocation.tool_metadata()) + ignore(invocation.principal()) + underlying.invoke_raw( + invocation.command_path(), + invocation.input(), + invocation.stdin(), + ) +} + +///| +pub fn register_generated_middlewares_for_tests() -> Unit raise { + __golem_register_tool_middlewares() +} + +///| +pub fn generated_input_for_tests( + command_path : Array[String], + params : Array[(String, @model.SchemaValue)], +) -> @types.TypedSchemaValue raise { + let def = __golem_middleware_tool_def_Presented() + let index = match def.command_index_by_path(command_path) { + Some(index) => index + None => raise Failure::Failure("unknown generated test command") + } + let input = @tool.build_canonical_input( + def.canonical_input_model(index), + params, + ) + @model.typed_schema_value_to_wit(input) +} + +///| +pub fn run_error_payload_for_tests( + message : String, +) -> @types.TypedSchemaValue raise { + let payload = match RunError::to_error_payload_value(Broken(message)) { + Ok(payload) => payload + Err(message) => raise Failure::Failure(message) + } + @model.typed_schema_value_to_wit(payload) +} + +///| +pub fn decode_run_error_payload_for_tests( + payload : @types.TypedSchemaValue, +) -> RunError raise { + let payload = @model.typed_schema_value_from_wit(payload) + match RunError::from_error_payload_value(payload) { + Ok(error) => error + Err(message) => raise Failure::Failure(message) + } +} diff --git a/sdks/moonbit/golem_sdk/tool-middleware-authoring-test/golem_derive.mbt b/sdks/moonbit/golem_sdk/tool-middleware-authoring-test/golem_derive.mbt new file mode 100644 index 0000000000..6d1257a09d --- /dev/null +++ b/sdks/moonbit/golem_sdk/tool-middleware-authoring-test/golem_derive.mbt @@ -0,0 +1,58 @@ +// Generated by golem_sdk_tools — DO NOT EDIT! + +///| +pub impl @schema.IntoSchema for RunError with fn type_id() { + "tool-middleware-authoring-test.RunError" +} + +///| +pub impl @schema.IntoSchema for RunError with fn register_in(b) { + b.register( + "tool-middleware-authoring-test.RunError", + () => { + @model.schema_type( + Variant([ + @model.variant_case( + "Broken", + payload=@schema.register_in_with( + b, + (@schema.TypeTag::{ } : @schema.TypeTag[String]), + ), + ), + ]), + ) + }, + Some("tool-middleware-authoring-test.RunError"), + ) +} + +///| +pub impl @schema.IntoSchema for RunError with fn to_value(self) { + match self { + Broken(field0) => Variant(0, Some(@schema.to_value_as(field0))) + } +} + +///| +pub impl @schema.FromSchema for RunError with fn from_value(v) { + let (case, payload) = @schema.expect_variant( + v, "tool-middleware-authoring-test.RunError", + ) + @schema.check_case_index(case, 1, "tool-middleware-authoring-test.RunError") + match case { + 0 => { + let p : String = @schema.from_value_as( + @schema.expect_variant_payload( + payload, "tool-middleware-authoring-test.RunError.Broken", + ), + ) + Broken(p) + } + _ => { + let err = @schema.FromSchemaError::custom( + "unreachable variant case for tool-middleware-authoring-test.RunError", + ) + raise err + } + } +} diff --git a/sdks/moonbit/golem_sdk/tool-middleware-authoring-test/golem_tool_middlewares.mbt b/sdks/moonbit/golem_sdk/tool-middleware-authoring-test/golem_tool_middlewares.mbt new file mode 100644 index 0000000000..b2b44c0fa9 --- /dev/null +++ b/sdks/moonbit/golem_sdk/tool-middleware-authoring-test/golem_tool_middlewares.mbt @@ -0,0 +1,1735 @@ +// Generated by golem_sdk_tools — DO NOT EDIT! + +///| +pub impl @tool.ToolErrorSchema for RunError with fn error_cases() { + Ok([ + { + name: "broken", + doc: { summary: "", description: "", examples: [] }, + kind: @toolCommon.ErrorKind::RUNTIME_ERROR, + exit_code: 1, + payload: Some( + @schema.into_schema_graph( + (@schema.TypeTag::{ } : @schema.TypeTag[String]), + ), + ), + }, + ]) catch { + __golem_error => + Err(@tool.ToolBuildError::schema_model(__golem_error.to_string())) + } +} + +///| +pub impl @tool.ToolErrorSchema for RunError with fn to_error_payload_value(self) { + match self { + Broken(__golem_payload) => + Ok(@schema.try_into_typed_schema_value(__golem_payload)) catch { + __golem_error => Err(__golem_error.to_string()) + } + } +} + +///| +pub impl @tool.ToolErrorSchema for RunError with fn from_error_payload_value( + __golem_value, +) { + let __golem_decoded : String? = Some( + @schema.from_value_as(__golem_value.value), + ) catch { + _ => None + } + if __golem_decoded is Some(__golem_payload) { + return Ok(Broken(__golem_payload)) + } + Err("remote tool error payload did not match any declared error case") +} + +///| +fn[T] __golem_middleware_tool_concat_array( + left : Array[T], + right : Array[T], +) -> Array[T] { + let result = left.copy() + for value in right { + result.push(value) + } + result +} + +///| +fn __golem_middleware_tool_concat_globals( + left : @tool.GlobalsDef, + right : @tool.GlobalsDef, +) -> @tool.GlobalsDef { + { + options: __golem_middleware_tool_concat_array(left.options, right.options), + flags: __golem_middleware_tool_concat_array(left.flags, right.flags), + } +} + +///| +fn __golem_middleware_tool_rebase_node( + node : @tool.CommandNodeDef, + offset : Int, +) -> @tool.CommandNodeDef { + { + name: node.name, + aliases: node.aliases, + doc: node.doc, + globals: node.globals, + subcommands: node.subcommands.map(index => index + offset), + body: node.body, + } +} + +///| +fn __golem_middleware_tool_extract_prepared( + def : @tool.ToolDef, +) -> @tool.ToolDef { + { + version: def.version, + commands: def.commands[1:].map(node => { + __golem_middleware_tool_rebase_node(node, -1) + }), + } +} + +///| +fn __golem_middleware_tool_append_prepared( + def : @tool.ToolDef, + child : @tool.ToolDef, +) -> @tool.ToolDef { + let offset = def.commands.length() + let commands = def.commands.copy() + let root = commands[0] + commands[0] = { + name: root.name, + aliases: root.aliases, + doc: root.doc, + globals: root.globals, + subcommands: __golem_middleware_tool_concat_array(root.subcommands, [offset]), + body: root.body, + } + for node in child.commands { + commands.push(__golem_middleware_tool_rebase_node(node, offset)) + } + { version: def.version, commands } +} + +///| +fn __golem_middleware_tool_def_raw_Presented() -> @tool.ToolDef { + try { + let def : @tool.ToolDef = { + version: "0.0.0", + commands: [ + { + name: "presented", + aliases: [], + doc: { summary: "", description: "", examples: [] }, + globals: { options: [], flags: [] }, + subcommands: [1, 2, 3, 4, 5, 6, 7], + body: None, + }, + { + name: "unit", + aliases: [], + doc: { summary: "", description: "", examples: [] }, + globals: { options: [], flags: [] }, + subcommands: [], + body: Some({ + positionals: { fixed: [], tail: None }, + options: [], + flags: [], + constraints: [], + stdin: None, + stdout: None, + result: None, + errors: [], + annotations: Some({ + read_only: false, + destructive: true, + idempotent: false, + open_world: true, + }), + }), + }, + { + name: "value", + aliases: [], + doc: { summary: "", description: "", examples: [] }, + globals: { options: [], flags: [] }, + subcommands: [], + body: Some({ + positionals: { + fixed: [ + { + name: "value", + doc: { summary: "", description: "", examples: [] }, + value_name: None, + type_: @schema.into_schema_graph( + (@schema.TypeTag::{ } : @schema.TypeTag[String]), + ), + default: None, + required: true, + accepts_stdio: false, + }, + ], + tail: None, + }, + options: [], + flags: [], + constraints: [], + stdin: None, + stdout: None, + result: Some({ + type_: @schema.into_schema_graph( + (@schema.TypeTag::{ } : @schema.TypeTag[Int]), + ), + doc: { summary: "", description: "", examples: [] }, + formatters: [ + { + name: "default", + doc: { summary: "", description: "", examples: [] }, + }, + ], + default_formatter: "default", + }), + errors: [], + annotations: Some({ + read_only: false, + destructive: true, + idempotent: false, + open_world: true, + }), + }), + }, + { + name: "retry", + aliases: [], + doc: { summary: "", description: "", examples: [] }, + globals: { options: [], flags: [] }, + subcommands: [], + body: Some({ + positionals: { + fixed: [ + { + name: "value", + doc: { summary: "", description: "", examples: [] }, + value_name: None, + type_: @schema.into_schema_graph( + (@schema.TypeTag::{ } : @schema.TypeTag[String]), + ), + default: None, + required: true, + accepts_stdio: false, + }, + ], + tail: None, + }, + options: [], + flags: [], + constraints: [], + stdin: None, + stdout: None, + result: Some({ + type_: @schema.into_schema_graph( + (@schema.TypeTag::{ } : @schema.TypeTag[Int]), + ), + doc: { summary: "", description: "", examples: [] }, + formatters: [ + { + name: "default", + doc: { summary: "", description: "", examples: [] }, + }, + ], + default_formatter: "default", + }), + errors: [], + annotations: Some({ + read_only: false, + destructive: true, + idempotent: false, + open_world: true, + }), + }), + }, + { + name: "stdout", + aliases: [], + doc: { summary: "", description: "", examples: [] }, + globals: { options: [], flags: [] }, + subcommands: [], + body: Some({ + positionals: { fixed: [], tail: None }, + options: [], + flags: [], + constraints: [], + stdin: None, + stdout: Some({ + doc: { summary: "", description: "", examples: [] }, + mime: [], + required: true, + }), + result: None, + errors: [], + annotations: Some({ + read_only: false, + destructive: true, + idempotent: false, + open_world: true, + }), + }), + }, + { + name: "abandon-stdout", + aliases: [], + doc: { summary: "", description: "", examples: [] }, + globals: { options: [], flags: [] }, + subcommands: [], + body: Some({ + positionals: { fixed: [], tail: None }, + options: [], + flags: [], + constraints: [], + stdin: None, + stdout: Some({ + doc: { summary: "", description: "", examples: [] }, + mime: [], + required: true, + }), + result: None, + errors: [], + annotations: Some({ + read_only: false, + destructive: true, + idempotent: false, + open_world: true, + }), + }), + }, + { + name: "value-stdout", + aliases: [], + doc: { summary: "", description: "", examples: [] }, + globals: { options: [], flags: [] }, + subcommands: [], + body: Some({ + positionals: { + fixed: [ + { + name: "value", + doc: { summary: "", description: "", examples: [] }, + value_name: None, + type_: @schema.into_schema_graph( + (@schema.TypeTag::{ } : @schema.TypeTag[String]), + ), + default: None, + required: true, + accepts_stdio: false, + }, + ], + tail: None, + }, + options: [], + flags: [], + constraints: [], + stdin: None, + stdout: Some({ + doc: { summary: "", description: "", examples: [] }, + mime: [], + required: true, + }), + result: Some({ + type_: @schema.into_schema_graph( + (@schema.TypeTag::{ } : @schema.TypeTag[Int]), + ), + doc: { summary: "", description: "", examples: [] }, + formatters: [ + { + name: "default", + doc: { summary: "", description: "", examples: [] }, + }, + ], + default_formatter: "default", + }), + errors: [], + annotations: Some({ + read_only: false, + destructive: true, + idempotent: false, + open_world: true, + }), + }), + }, + { + name: "io", + aliases: [], + doc: { summary: "", description: "", examples: [] }, + globals: { options: [], flags: [] }, + subcommands: [], + body: Some({ + positionals: { fixed: [], tail: None }, + options: [], + flags: [], + constraints: [], + stdin: Some({ + doc: { summary: "", description: "", examples: [] }, + mime: [], + required: true, + }), + stdout: Some({ + doc: { summary: "", description: "", examples: [] }, + mime: [], + required: true, + }), + result: Some({ + type_: @schema.into_schema_graph( + (@schema.TypeTag::{ } : @schema.TypeTag[String]), + ), + doc: { summary: "", description: "", examples: [] }, + formatters: [ + { + name: "default", + doc: { summary: "", description: "", examples: [] }, + }, + ], + default_formatter: "default", + }), + errors: match RunError::error_cases() { + Ok(__golem_errors) => __golem_errors + Err(__golem_error) => raise __golem_error + }, + annotations: Some({ + read_only: false, + destructive: true, + idempotent: false, + open_world: true, + }), + }), + }, + ], + } + def + } catch { + error => abort("invalid generated raw tool definition: " + repr(error)) + } +} + +///| +fn __golem_middleware_tool_def_prepare_Presented( + strict_ancestors : @tool.GlobalsDef, + parent_globals : @tool.GlobalsDef, + override_name : String?, + override_doc : @toolCommon.Doc?, + override_aliases : Array[String]?, +) -> @tool.ToolDef { + try { + let carrier : @tool.ToolDef = { + version: "0.0.0", + commands: [ + { + name: "__golem_ancestry", + aliases: [], + doc: { summary: "", description: "", examples: [] }, + globals: strict_ancestors, + subcommands: [], + body: None, + }, + ], + } + let prepared = __golem_middleware_tool_extract_prepared( + carrier.graft_subtree( + __golem_middleware_tool_def_raw_Presented(), + "presented", + parent_globals, + override_name, + override_doc, + override_aliases, + ), + ) + let descendant_ancestors = __golem_middleware_tool_concat_globals( + strict_ancestors, + prepared.commands[0].globals, + ) + let def = prepared + let child = __golem_middleware_tool_def_prepare_Nested( + descendant_ancestors, + { + options: [], + flags: [ + { + long: "verbose", + short: None, + aliases: [], + doc: { summary: "", description: "", examples: [] }, + shape: @toolCommon.FlagShape::BoolFlag({ + default: false, + negatable: false, + }), + env_var: None, + }, + ], + }, + None, + None, + None, + ) + let def = __golem_middleware_tool_append_prepared(def, child) + def + } catch { + error => abort("invalid generated prepared tool definition: " + repr(error)) + } +} + +///| +fn __golem_middleware_tool_def_Presented() -> @tool.ToolDef { + __golem_middleware_tool_def_prepare_Presented( + { options: [], flags: [] }, + { options: [], flags: [] }, + None, + None, + None, + ).normalize_inherited_globals() catch { + error => abort("invalid generated tool definition: " + repr(error)) + } +} + +///| +fn __golem_middleware_tool_def_raw_Nested() -> @tool.ToolDef { + try { + let def : @tool.ToolDef = { + version: "0.0.0", + commands: [ + { + name: "nested", + aliases: [], + doc: { summary: "", description: "", examples: [] }, + globals: { options: [], flags: [] }, + subcommands: [1], + body: None, + }, + { + name: "run", + aliases: [], + doc: { summary: "", description: "", examples: [] }, + globals: { options: [], flags: [] }, + subcommands: [], + body: Some({ + positionals: { + fixed: [ + { + name: "name", + doc: { summary: "", description: "", examples: [] }, + value_name: None, + type_: @schema.into_schema_graph( + (@schema.TypeTag::{ } : @schema.TypeTag[String]), + ), + default: None, + required: true, + accepts_stdio: false, + }, + ], + tail: None, + }, + options: [], + flags: [], + constraints: [], + stdin: None, + stdout: None, + result: Some({ + type_: @schema.into_schema_graph( + (@schema.TypeTag::{ } : @schema.TypeTag[String]), + ), + doc: { summary: "", description: "", examples: [] }, + formatters: [ + { + name: "default", + doc: { summary: "", description: "", examples: [] }, + }, + ], + default_formatter: "default", + }), + errors: [], + annotations: Some({ + read_only: false, + destructive: true, + idempotent: false, + open_world: true, + }), + }), + }, + ], + } + def + } catch { + error => abort("invalid generated raw tool definition: " + repr(error)) + } +} + +///| +fn __golem_middleware_tool_def_prepare_Nested( + strict_ancestors : @tool.GlobalsDef, + parent_globals : @tool.GlobalsDef, + override_name : String?, + override_doc : @toolCommon.Doc?, + override_aliases : Array[String]?, +) -> @tool.ToolDef { + try { + let carrier : @tool.ToolDef = { + version: "0.0.0", + commands: [ + { + name: "__golem_ancestry", + aliases: [], + doc: { summary: "", description: "", examples: [] }, + globals: strict_ancestors, + subcommands: [], + body: None, + }, + ], + } + let prepared = __golem_middleware_tool_extract_prepared( + carrier.graft_subtree( + __golem_middleware_tool_def_raw_Nested(), + "nested", + parent_globals, + override_name, + override_doc, + override_aliases, + ), + ) + let def = prepared + def + } catch { + error => abort("invalid generated prepared tool definition: " + repr(error)) + } +} + +///| +fn __golem_middleware_tool_def_Nested() -> @tool.ToolDef { + __golem_middleware_tool_def_prepare_Nested( + { options: [], flags: [] }, + { options: [], flags: [] }, + None, + None, + None, + ).normalize_inherited_globals() catch { + error => abort("invalid generated tool definition: " + repr(error)) + } +} + +///| +fn __golem_middleware_tool_def_raw_Storage() -> @tool.ToolDef { + try { + let def : @tool.ToolDef = { + version: "0.0.0", + commands: [ + { + name: "storage", + aliases: [], + doc: { summary: "", description: "", examples: [] }, + globals: { options: [], flags: [] }, + subcommands: [1], + body: None, + }, + { + name: "fetch", + aliases: [], + doc: { summary: "", description: "", examples: [] }, + globals: { options: [], flags: [] }, + subcommands: [], + body: Some({ + positionals: { + fixed: [ + { + name: "key", + doc: { summary: "", description: "", examples: [] }, + value_name: None, + type_: @schema.into_schema_graph( + (@schema.TypeTag::{ } : @schema.TypeTag[String]), + ), + default: None, + required: true, + accepts_stdio: false, + }, + ], + tail: None, + }, + options: [], + flags: [], + constraints: [], + stdin: None, + stdout: None, + result: Some({ + type_: @schema.into_schema_graph( + (@schema.TypeTag::{ } : @schema.TypeTag[String]), + ), + doc: { summary: "", description: "", examples: [] }, + formatters: [ + { + name: "default", + doc: { summary: "", description: "", examples: [] }, + }, + ], + default_formatter: "default", + }), + errors: [], + annotations: Some({ + read_only: false, + destructive: true, + idempotent: false, + open_world: true, + }), + }), + }, + ], + } + def + } catch { + error => abort("invalid generated raw tool definition: " + repr(error)) + } +} + +///| +fn __golem_middleware_tool_def_prepare_Storage( + strict_ancestors : @tool.GlobalsDef, + parent_globals : @tool.GlobalsDef, + override_name : String?, + override_doc : @toolCommon.Doc?, + override_aliases : Array[String]?, +) -> @tool.ToolDef { + try { + let carrier : @tool.ToolDef = { + version: "0.0.0", + commands: [ + { + name: "__golem_ancestry", + aliases: [], + doc: { summary: "", description: "", examples: [] }, + globals: strict_ancestors, + subcommands: [], + body: None, + }, + ], + } + let prepared = __golem_middleware_tool_extract_prepared( + carrier.graft_subtree( + __golem_middleware_tool_def_raw_Storage(), + "storage", + parent_globals, + override_name, + override_doc, + override_aliases, + ), + ) + let def = prepared + def + } catch { + error => abort("invalid generated prepared tool definition: " + repr(error)) + } +} + +///| +fn __golem_middleware_tool_def_Storage() -> @tool.ToolDef { + __golem_middleware_tool_def_prepare_Storage( + { options: [], flags: [] }, + { options: [], flags: [] }, + None, + None, + None, + ).normalize_inherited_globals() catch { + error => abort("invalid generated tool definition: " + repr(error)) + } +} + +///| +fn[T : @schema.IntoSchema + @schema.FromSchema, E] __golem_middleware_decode_canonical_field( + fields : Array[@tool.CanonicalInputValue], + name : String, + context : String, +) -> Result[T, @toolMiddleware.ToolInvokeError[E]] { + try @tool.decode_canonical_field(fields, name, context) catch { + @toolCommon.ToolError::InvalidToolName(name) => + Err(@toolMiddleware.ToolInvokeError::InvalidToolName(name)) + @toolCommon.ToolError::InvalidCommandPath(path) => + Err(@toolMiddleware.ToolInvokeError::InvalidCommandPath(path)) + @toolCommon.ToolError::InvalidInput(message) => + Err(@toolMiddleware.ToolInvokeError::InvalidInput(message)) + @toolCommon.ToolError::ConstraintViolation(message) => + Err(@toolMiddleware.ToolInvokeError::ConstraintViolation(message)) + @toolCommon.ToolError::InvalidResult(message) => + Err(@toolMiddleware.ToolInvokeError::InvalidResult(message)) + @toolCommon.ToolError::CustomError(value) => { + @model.drop_wit_capabilities(value.value) + Err( + @toolMiddleware.ToolInvokeError::InvalidResult( + "canonical field decoding returned a custom tool error", + ), + ) + } + } noraise { + value => Ok(value) + } +} + +///| +pub struct PresentedUnderlying { + priv underlying : @toolMiddleware.UnderlyingTool +} + +///| +pub async fn PresentedUnderlying::unit( + self : PresentedUnderlying, +) -> Result[Unit, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + let __golem_command_path = ["unit"] + let __golem_def = __golem_middleware_tool_def_Presented() + let __golem_index = match + __golem_def.command_index_by_path(__golem_command_path) { + Some(__golem_index) => __golem_index + None => + return Err( + @toolMiddleware.ToolInvokeError::InvalidCommandPath( + __golem_command_path, + ), + ) + } + let __golem_model = __golem_def.canonical_input_model(__golem_index) catch { + __golem_error => + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput(repr(__golem_error)), + ) + } + let __golem_values : Array[(String, @model.SchemaValue)] = [] + let __golem_input = @tool.build_canonical_input(__golem_model, __golem_values) catch { + __golem_error => + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput(repr(__golem_error)), + ) + } + let __golem_result = match + self.underlying.invoke_with(__golem_command_path, __golem_input, None, fn( + _, + ) { + Err("underlying returned a custom error for an infallible command") + }) { + Ok(__golem_result) => __golem_result + Err(__golem_error) => return Err(__golem_error) + } + @toolMiddleware.decode_result_empty(__golem_result) +} + +///| +pub async fn PresentedUnderlying::value( + self : PresentedUnderlying, + value : String, +) -> Result[Int, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + let __golem_command_path = ["value"] + let __golem_def = __golem_middleware_tool_def_Presented() + let __golem_index = match + __golem_def.command_index_by_path(__golem_command_path) { + Some(__golem_index) => __golem_index + None => + return Err( + @toolMiddleware.ToolInvokeError::InvalidCommandPath( + __golem_command_path, + ), + ) + } + let __golem_model = __golem_def.canonical_input_model(__golem_index) catch { + __golem_error => + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput(repr(__golem_error)), + ) + } + let __golem_values : Array[(String, @model.SchemaValue)] = [] + __golem_values.push(("value", @schema.to_value_as(value))) + let __golem_input = @tool.build_canonical_input(__golem_model, __golem_values) catch { + __golem_error => + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput(repr(__golem_error)), + ) + } + let __golem_result = match + self.underlying.invoke_with(__golem_command_path, __golem_input, None, fn( + _, + ) { + Err("underlying returned a custom error for an infallible command") + }) { + Ok(__golem_result) => __golem_result + Err(__golem_error) => return Err(__golem_error) + } + @toolMiddleware.decode_result_value(__golem_result) +} + +///| +pub async fn PresentedUnderlying::retry( + self : PresentedUnderlying, + value : String, +) -> Result[Int, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + let __golem_command_path = ["retry"] + let __golem_def = __golem_middleware_tool_def_Presented() + let __golem_index = match + __golem_def.command_index_by_path(__golem_command_path) { + Some(__golem_index) => __golem_index + None => + return Err( + @toolMiddleware.ToolInvokeError::InvalidCommandPath( + __golem_command_path, + ), + ) + } + let __golem_model = __golem_def.canonical_input_model(__golem_index) catch { + __golem_error => + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput(repr(__golem_error)), + ) + } + let __golem_values : Array[(String, @model.SchemaValue)] = [] + __golem_values.push(("value", @schema.to_value_as(value))) + let __golem_input = @tool.build_canonical_input(__golem_model, __golem_values) catch { + __golem_error => + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput(repr(__golem_error)), + ) + } + let __golem_result = match + self.underlying.invoke_with(__golem_command_path, __golem_input, None, fn( + _, + ) { + Err("underlying returned a custom error for an infallible command") + }) { + Ok(__golem_result) => __golem_result + Err(__golem_error) => return Err(__golem_error) + } + @toolMiddleware.decode_result_value(__golem_result) +} + +///| +pub async fn PresentedUnderlying::stdout( + self : PresentedUnderlying, +) -> Result[ + @asyncCore.Stream[Byte], + @toolMiddleware.ToolInvokeError[@tool.NoToolError], +] { + let __golem_command_path = ["stdout"] + let __golem_def = __golem_middleware_tool_def_Presented() + let __golem_index = match + __golem_def.command_index_by_path(__golem_command_path) { + Some(__golem_index) => __golem_index + None => + return Err( + @toolMiddleware.ToolInvokeError::InvalidCommandPath( + __golem_command_path, + ), + ) + } + let __golem_model = __golem_def.canonical_input_model(__golem_index) catch { + __golem_error => + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput(repr(__golem_error)), + ) + } + let __golem_values : Array[(String, @model.SchemaValue)] = [] + let __golem_input = @tool.build_canonical_input(__golem_model, __golem_values) catch { + __golem_error => + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput(repr(__golem_error)), + ) + } + let __golem_result = match + self.underlying.invoke_with(__golem_command_path, __golem_input, None, fn( + _, + ) { + Err("underlying returned a custom error for an infallible command") + }) { + Ok(__golem_result) => __golem_result + Err(__golem_error) => return Err(__golem_error) + } + @toolMiddleware.decode_result_stdout_only(__golem_result) +} + +///| +pub async fn PresentedUnderlying::abandon_stdout( + self : PresentedUnderlying, +) -> Result[ + @asyncCore.Stream[Byte], + @toolMiddleware.ToolInvokeError[@tool.NoToolError], +] { + let __golem_command_path = ["abandon-stdout"] + let __golem_def = __golem_middleware_tool_def_Presented() + let __golem_index = match + __golem_def.command_index_by_path(__golem_command_path) { + Some(__golem_index) => __golem_index + None => + return Err( + @toolMiddleware.ToolInvokeError::InvalidCommandPath( + __golem_command_path, + ), + ) + } + let __golem_model = __golem_def.canonical_input_model(__golem_index) catch { + __golem_error => + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput(repr(__golem_error)), + ) + } + let __golem_values : Array[(String, @model.SchemaValue)] = [] + let __golem_input = @tool.build_canonical_input(__golem_model, __golem_values) catch { + __golem_error => + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput(repr(__golem_error)), + ) + } + let __golem_result = match + self.underlying.invoke_with(__golem_command_path, __golem_input, None, fn( + _, + ) { + Err("underlying returned a custom error for an infallible command") + }) { + Ok(__golem_result) => __golem_result + Err(__golem_error) => return Err(__golem_error) + } + @toolMiddleware.decode_result_stdout_only(__golem_result) +} + +///| +pub async fn PresentedUnderlying::value_stdout( + self : PresentedUnderlying, + value : String, +) -> Result[ + (Int, @asyncCore.Stream[Byte]), + @toolMiddleware.ToolInvokeError[@tool.NoToolError], +] { + let __golem_command_path = ["value-stdout"] + let __golem_def = __golem_middleware_tool_def_Presented() + let __golem_index = match + __golem_def.command_index_by_path(__golem_command_path) { + Some(__golem_index) => __golem_index + None => + return Err( + @toolMiddleware.ToolInvokeError::InvalidCommandPath( + __golem_command_path, + ), + ) + } + let __golem_model = __golem_def.canonical_input_model(__golem_index) catch { + __golem_error => + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput(repr(__golem_error)), + ) + } + let __golem_values : Array[(String, @model.SchemaValue)] = [] + __golem_values.push(("value", @schema.to_value_as(value))) + let __golem_input = @tool.build_canonical_input(__golem_model, __golem_values) catch { + __golem_error => + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput(repr(__golem_error)), + ) + } + let __golem_result = match + self.underlying.invoke_with(__golem_command_path, __golem_input, None, fn( + _, + ) { + Err("underlying returned a custom error for an infallible command") + }) { + Ok(__golem_result) => __golem_result + Err(__golem_error) => return Err(__golem_error) + } + @toolMiddleware.decode_result_with_stdout(__golem_result) +} + +///| +pub async fn PresentedUnderlying::io( + self : PresentedUnderlying, + input : @toolMiddleware.MiddlewareStdin, +) -> Result[ + (String, @asyncCore.Stream[Byte]), + @toolMiddleware.ToolInvokeError[RunError], +] { + let __golem_command_path = ["io"] + let __golem_def = __golem_middleware_tool_def_Presented() + let __golem_index = match + __golem_def.command_index_by_path(__golem_command_path) { + Some(__golem_index) => __golem_index + None => + return Err( + @toolMiddleware.ToolInvokeError::InvalidCommandPath( + __golem_command_path, + ), + ) + } + let __golem_model = __golem_def.canonical_input_model(__golem_index) catch { + __golem_error => + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput(repr(__golem_error)), + ) + } + let __golem_values : Array[(String, @model.SchemaValue)] = [] + let __golem_input = @tool.build_canonical_input(__golem_model, __golem_values) catch { + __golem_error => + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput(repr(__golem_error)), + ) + } + let __golem_result = match + self.underlying.invoke_with( + __golem_command_path, + __golem_input, + Some(input), + fn(__golem_error) { RunError::from_error_payload_value(__golem_error) }, + ) { + Ok(__golem_result) => __golem_result + Err(__golem_error) => return Err(__golem_error) + } + @toolMiddleware.decode_result_with_stdout(__golem_result) +} + +///| +pub async fn PresentedUnderlying::admin__run( + self : PresentedUnderlying, + verbose : Bool, + name : String, +) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + let __golem_command_path = ["admin", "run"] + let __golem_def = __golem_middleware_tool_def_Presented() + let __golem_index = match + __golem_def.command_index_by_path(__golem_command_path) { + Some(__golem_index) => __golem_index + None => + return Err( + @toolMiddleware.ToolInvokeError::InvalidCommandPath( + __golem_command_path, + ), + ) + } + let __golem_model = __golem_def.canonical_input_model(__golem_index) catch { + __golem_error => + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput(repr(__golem_error)), + ) + } + let __golem_values : Array[(String, @model.SchemaValue)] = [] + __golem_values.push(("verbose", @schema.to_value_as(verbose))) + __golem_values.push(("name", @schema.to_value_as(name))) + let __golem_input = @tool.build_canonical_input(__golem_model, __golem_values) catch { + __golem_error => + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput(repr(__golem_error)), + ) + } + let __golem_result = match + self.underlying.invoke_with(__golem_command_path, __golem_input, None, fn( + _, + ) { + Err("underlying returned a custom error for an infallible command") + }) { + Ok(__golem_result) => __golem_result + Err(__golem_error) => return Err(__golem_error) + } + @toolMiddleware.decode_result_value(__golem_result) +} + +///| +pub struct StorageUnderlying { + priv underlying : @toolMiddleware.UnderlyingTool +} + +///| +pub async fn StorageUnderlying::fetch( + self : StorageUnderlying, + key : String, +) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + let __golem_command_path = ["fetch"] + let __golem_def = __golem_middleware_tool_def_Storage() + let __golem_index = match + __golem_def.command_index_by_path(__golem_command_path) { + Some(__golem_index) => __golem_index + None => + return Err( + @toolMiddleware.ToolInvokeError::InvalidCommandPath( + __golem_command_path, + ), + ) + } + let __golem_model = __golem_def.canonical_input_model(__golem_index) catch { + __golem_error => + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput(repr(__golem_error)), + ) + } + let __golem_values : Array[(String, @model.SchemaValue)] = [] + __golem_values.push(("key", @schema.to_value_as(key))) + let __golem_input = @tool.build_canonical_input(__golem_model, __golem_values) catch { + __golem_error => + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput(repr(__golem_error)), + ) + } + let __golem_result = match + self.underlying.invoke_with(__golem_command_path, __golem_input, None, fn( + _, + ) { + Err("underlying returned a custom error for an infallible command") + }) { + Ok(__golem_result) => __golem_result + Err(__golem_error) => return Err(__golem_error) + } + @toolMiddleware.decode_result_value(__golem_result) +} + +///| +async fn __golem_universal_tool_middleware_invoke_audit( + invocation : @toolMiddleware.RawToolInvocation, + underlying : @toolMiddleware.UnderlyingTool, +) -> Result[ + @toolMiddleware.RawInvocationResult, + @toolMiddleware.ToolInvokeError[@toolMiddleware.RawTypedSchemaValue], +] { + audit(invocation, underlying) +} + +///| +async fn __golem_monomorphic_tool_middleware_invoke_Policy( + __golem_invocation : @toolMiddleware.RawToolInvocation, + __golem_underlying : @toolMiddleware.UnderlyingTool, +) -> Result[ + @toolMiddleware.RawInvocationResult, + @toolMiddleware.ToolInvokeError[@toolMiddleware.RawTypedSchemaValue], +] { + let __golem_command_path = __golem_invocation.command_path() + let __golem_def = __golem_middleware_tool_def_Presented() + let __golem_index = match + __golem_def.command_index_by_path(__golem_command_path) { + Some(__golem_index) => __golem_index + None => + return Err( + @toolMiddleware.ToolInvokeError::InvalidCommandPath( + __golem_command_path, + ), + ) + } + let __golem_decoded = match + __golem_invocation.decode_input( + __golem_def, __golem_index, "tool middleware policy invocation", + ) { + Ok(__golem_decoded) => __golem_decoded + Err(__golem_error) => return Err(__golem_error) + } + if __golem_def.command_index_by_path(["unit"]) == Some(__golem_index) { + if __golem_invocation.stdin() is Some(_) { + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput( + "tool invocation contained an unexpected stdin stream", + ), + ) + } + let __golem_expected = PresentedUnderlying::{ + underlying: __golem_underlying, + } + match Policy::unit(__golem_expected) { + Ok(__golem_result) => { + ignore(__golem_result) + return __golem_invocation.typed_result_empty() + } + Err(__golem_error) => + return Err( + __golem_invocation.encode_handler_error(__golem_error, fn(_) { + Err("infallible middleware handler returned a custom tool error") + }), + ) + } + } + if __golem_def.command_index_by_path(["value"]) == Some(__golem_index) { + if __golem_invocation.stdin() is Some(_) { + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput( + "tool invocation contained an unexpected stdin stream", + ), + ) + } + let value : String = match + __golem_middleware_decode_canonical_field( + __golem_decoded, "value", "tool middleware policy command value", + ) { + Ok(__golem_value) => __golem_value + Err(__golem_error) => return Err(__golem_error) + } + let __golem_expected = PresentedUnderlying::{ + underlying: __golem_underlying, + } + match Policy::value(__golem_expected, value) { + Ok(__golem_result) => + return __golem_invocation.typed_result_value(__golem_result) + Err(__golem_error) => + return Err( + __golem_invocation.encode_handler_error(__golem_error, fn(_) { + Err("infallible middleware handler returned a custom tool error") + }), + ) + } + } + if __golem_def.command_index_by_path(["retry"]) == Some(__golem_index) { + if __golem_invocation.stdin() is Some(_) { + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput( + "tool invocation contained an unexpected stdin stream", + ), + ) + } + let value : String = match + __golem_middleware_decode_canonical_field( + __golem_decoded, "value", "tool middleware policy command retry", + ) { + Ok(__golem_value) => __golem_value + Err(__golem_error) => return Err(__golem_error) + } + let __golem_expected = PresentedUnderlying::{ + underlying: __golem_underlying, + } + match Policy::retry(__golem_expected, value) { + Ok(__golem_result) => + return __golem_invocation.typed_result_value(__golem_result) + Err(__golem_error) => + return Err( + __golem_invocation.encode_handler_error(__golem_error, fn(_) { + Err("infallible middleware handler returned a custom tool error") + }), + ) + } + } + if __golem_def.command_index_by_path(["stdout"]) == Some(__golem_index) { + if __golem_invocation.stdin() is Some(_) { + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput( + "tool invocation contained an unexpected stdin stream", + ), + ) + } + let __golem_expected = PresentedUnderlying::{ + underlying: __golem_underlying, + } + match Policy::stdout(__golem_expected) { + Ok(__golem_result) => + return __golem_invocation.typed_result_stdout(__golem_result) + Err(__golem_error) => + return Err( + __golem_invocation.encode_handler_error(__golem_error, fn(_) { + Err("infallible middleware handler returned a custom tool error") + }), + ) + } + } + if __golem_def.command_index_by_path(["abandon-stdout"]) == + Some(__golem_index) { + if __golem_invocation.stdin() is Some(_) { + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput( + "tool invocation contained an unexpected stdin stream", + ), + ) + } + let __golem_expected = PresentedUnderlying::{ + underlying: __golem_underlying, + } + match Policy::abandon_stdout(__golem_expected) { + Ok(__golem_result) => + return __golem_invocation.typed_result_stdout(__golem_result) + Err(__golem_error) => + return Err( + __golem_invocation.encode_handler_error(__golem_error, fn(_) { + Err("infallible middleware handler returned a custom tool error") + }), + ) + } + } + if __golem_def.command_index_by_path(["value-stdout"]) == Some(__golem_index) { + if __golem_invocation.stdin() is Some(_) { + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput( + "tool invocation contained an unexpected stdin stream", + ), + ) + } + let value : String = match + __golem_middleware_decode_canonical_field( + __golem_decoded, "value", "tool middleware policy command value-stdout", + ) { + Ok(__golem_value) => __golem_value + Err(__golem_error) => return Err(__golem_error) + } + let __golem_expected = PresentedUnderlying::{ + underlying: __golem_underlying, + } + match Policy::value_stdout(__golem_expected, value) { + Ok(__golem_result) => { + let (__golem_value, __golem_stdout) = __golem_result + return __golem_invocation.typed_result_value_with_stdout( + __golem_value, __golem_stdout, + ) + } + Err(__golem_error) => + return Err( + __golem_invocation.encode_handler_error(__golem_error, fn(_) { + Err("infallible middleware handler returned a custom tool error") + }), + ) + } + } + if __golem_def.command_index_by_path(["io"]) == Some(__golem_index) { + let __golem_stdin = __golem_invocation.stdin() + let input = match __golem_stdin { + Some(__golem_stdin) => __golem_stdin + None => + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput( + "tool invocation did not contain declared stdin stream", + ), + ) + } + let principal = __golem_invocation.principal() + let __golem_expected = PresentedUnderlying::{ + underlying: __golem_underlying, + } + match Policy::io(__golem_expected, input, principal) { + Ok(__golem_result) => { + let (__golem_value, __golem_stdout) = __golem_result + return __golem_invocation.typed_result_value_with_stdout( + __golem_value, __golem_stdout, + ) + } + Err(__golem_error) => + return Err( + __golem_invocation.encode_handler_error(__golem_error, fn( + __golem_error, + ) { + RunError::to_error_payload_value(__golem_error) + }), + ) + } + } + if __golem_def.command_index_by_path(["admin", "run"]) == Some(__golem_index) { + if __golem_invocation.stdin() is Some(_) { + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput( + "tool invocation contained an unexpected stdin stream", + ), + ) + } + let verbose : Bool = match + __golem_middleware_decode_canonical_field( + __golem_decoded, "verbose", "tool middleware policy command admin/run", + ) { + Ok(__golem_value) => __golem_value + Err(__golem_error) => return Err(__golem_error) + } + let name : String = match + __golem_middleware_decode_canonical_field( + __golem_decoded, "name", "tool middleware policy command admin/run", + ) { + Ok(__golem_value) => __golem_value + Err(__golem_error) => return Err(__golem_error) + } + let __golem_expected = PresentedUnderlying::{ + underlying: __golem_underlying, + } + match Policy::admin__run(__golem_expected, verbose, name) { + Ok(__golem_result) => + return __golem_invocation.typed_result_value(__golem_result) + Err(__golem_error) => + return Err( + __golem_invocation.encode_handler_error(__golem_error, fn(_) { + Err("infallible middleware handler returned a custom tool error") + }), + ) + } + } + Err(@toolMiddleware.ToolInvokeError::InvalidCommandPath(__golem_command_path)) +} + +///| +async fn __golem_monomorphic_tool_middleware_invoke_Adapter( + __golem_invocation : @toolMiddleware.RawToolInvocation, + __golem_underlying : @toolMiddleware.UnderlyingTool, +) -> Result[ + @toolMiddleware.RawInvocationResult, + @toolMiddleware.ToolInvokeError[@toolMiddleware.RawTypedSchemaValue], +] { + let __golem_command_path = __golem_invocation.command_path() + let __golem_def = __golem_middleware_tool_def_Presented() + let __golem_index = match + __golem_def.command_index_by_path(__golem_command_path) { + Some(__golem_index) => __golem_index + None => + return Err( + @toolMiddleware.ToolInvokeError::InvalidCommandPath( + __golem_command_path, + ), + ) + } + let __golem_decoded = match + __golem_invocation.decode_input( + __golem_def, __golem_index, "tool middleware adapter invocation", + ) { + Ok(__golem_decoded) => __golem_decoded + Err(__golem_error) => return Err(__golem_error) + } + if __golem_def.command_index_by_path(["unit"]) == Some(__golem_index) { + if __golem_invocation.stdin() is Some(_) { + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput( + "tool invocation contained an unexpected stdin stream", + ), + ) + } + let __golem_expected = StorageUnderlying::{ underlying: __golem_underlying } + match Adapter::unit(__golem_expected) { + Ok(__golem_result) => { + ignore(__golem_result) + return __golem_invocation.typed_result_empty() + } + Err(__golem_error) => + return Err( + __golem_invocation.encode_handler_error(__golem_error, fn(_) { + Err("infallible middleware handler returned a custom tool error") + }), + ) + } + } + if __golem_def.command_index_by_path(["value"]) == Some(__golem_index) { + if __golem_invocation.stdin() is Some(_) { + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput( + "tool invocation contained an unexpected stdin stream", + ), + ) + } + let value : String = match + __golem_middleware_decode_canonical_field( + __golem_decoded, "value", "tool middleware adapter command value", + ) { + Ok(__golem_value) => __golem_value + Err(__golem_error) => return Err(__golem_error) + } + let __golem_expected = StorageUnderlying::{ underlying: __golem_underlying } + match Adapter::value(__golem_expected, value) { + Ok(__golem_result) => + return __golem_invocation.typed_result_value(__golem_result) + Err(__golem_error) => + return Err( + __golem_invocation.encode_handler_error(__golem_error, fn(_) { + Err("infallible middleware handler returned a custom tool error") + }), + ) + } + } + if __golem_def.command_index_by_path(["retry"]) == Some(__golem_index) { + if __golem_invocation.stdin() is Some(_) { + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput( + "tool invocation contained an unexpected stdin stream", + ), + ) + } + let value : String = match + __golem_middleware_decode_canonical_field( + __golem_decoded, "value", "tool middleware adapter command retry", + ) { + Ok(__golem_value) => __golem_value + Err(__golem_error) => return Err(__golem_error) + } + let __golem_expected = StorageUnderlying::{ underlying: __golem_underlying } + match Adapter::retry(__golem_expected, value) { + Ok(__golem_result) => + return __golem_invocation.typed_result_value(__golem_result) + Err(__golem_error) => + return Err( + __golem_invocation.encode_handler_error(__golem_error, fn(_) { + Err("infallible middleware handler returned a custom tool error") + }), + ) + } + } + if __golem_def.command_index_by_path(["stdout"]) == Some(__golem_index) { + if __golem_invocation.stdin() is Some(_) { + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput( + "tool invocation contained an unexpected stdin stream", + ), + ) + } + let __golem_expected = StorageUnderlying::{ underlying: __golem_underlying } + match Adapter::stdout(__golem_expected) { + Ok(__golem_result) => + return __golem_invocation.typed_result_stdout(__golem_result) + Err(__golem_error) => + return Err( + __golem_invocation.encode_handler_error(__golem_error, fn(_) { + Err("infallible middleware handler returned a custom tool error") + }), + ) + } + } + if __golem_def.command_index_by_path(["abandon-stdout"]) == + Some(__golem_index) { + if __golem_invocation.stdin() is Some(_) { + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput( + "tool invocation contained an unexpected stdin stream", + ), + ) + } + let __golem_expected = StorageUnderlying::{ underlying: __golem_underlying } + match Adapter::abandon_stdout(__golem_expected) { + Ok(__golem_result) => + return __golem_invocation.typed_result_stdout(__golem_result) + Err(__golem_error) => + return Err( + __golem_invocation.encode_handler_error(__golem_error, fn(_) { + Err("infallible middleware handler returned a custom tool error") + }), + ) + } + } + if __golem_def.command_index_by_path(["value-stdout"]) == Some(__golem_index) { + if __golem_invocation.stdin() is Some(_) { + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput( + "tool invocation contained an unexpected stdin stream", + ), + ) + } + let value : String = match + __golem_middleware_decode_canonical_field( + __golem_decoded, "value", "tool middleware adapter command value-stdout", + ) { + Ok(__golem_value) => __golem_value + Err(__golem_error) => return Err(__golem_error) + } + let __golem_expected = StorageUnderlying::{ underlying: __golem_underlying } + match Adapter::value_stdout(__golem_expected, value) { + Ok(__golem_result) => { + let (__golem_value, __golem_stdout) = __golem_result + return __golem_invocation.typed_result_value_with_stdout( + __golem_value, __golem_stdout, + ) + } + Err(__golem_error) => + return Err( + __golem_invocation.encode_handler_error(__golem_error, fn(_) { + Err("infallible middleware handler returned a custom tool error") + }), + ) + } + } + if __golem_def.command_index_by_path(["io"]) == Some(__golem_index) { + let __golem_stdin = __golem_invocation.stdin() + let input = match __golem_stdin { + Some(__golem_stdin) => __golem_stdin + None => + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput( + "tool invocation did not contain declared stdin stream", + ), + ) + } + let principal = __golem_invocation.principal() + let __golem_expected = StorageUnderlying::{ underlying: __golem_underlying } + match Adapter::io(__golem_expected, input, principal) { + Ok(__golem_result) => { + let (__golem_value, __golem_stdout) = __golem_result + return __golem_invocation.typed_result_value_with_stdout( + __golem_value, __golem_stdout, + ) + } + Err(__golem_error) => + return Err( + __golem_invocation.encode_handler_error(__golem_error, fn( + __golem_error, + ) { + RunError::to_error_payload_value(__golem_error) + }), + ) + } + } + if __golem_def.command_index_by_path(["admin", "run"]) == Some(__golem_index) { + if __golem_invocation.stdin() is Some(_) { + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput( + "tool invocation contained an unexpected stdin stream", + ), + ) + } + let verbose : Bool = match + __golem_middleware_decode_canonical_field( + __golem_decoded, "verbose", "tool middleware adapter command admin/run", + ) { + Ok(__golem_value) => __golem_value + Err(__golem_error) => return Err(__golem_error) + } + let name : String = match + __golem_middleware_decode_canonical_field( + __golem_decoded, "name", "tool middleware adapter command admin/run", + ) { + Ok(__golem_value) => __golem_value + Err(__golem_error) => return Err(__golem_error) + } + let __golem_expected = StorageUnderlying::{ underlying: __golem_underlying } + match Adapter::admin__run(__golem_expected, verbose, name) { + Ok(__golem_result) => + return __golem_invocation.typed_result_value(__golem_result) + Err(__golem_error) => + return Err( + __golem_invocation.encode_handler_error(__golem_error, fn(_) { + Err("infallible middleware handler returned a custom tool error") + }), + ) + } + } + Err(@toolMiddleware.ToolInvokeError::InvalidCommandPath(__golem_command_path)) +} + +///| +fn __golem_register_tool_middlewares() -> Unit raise { + @toolMiddleware.register_tool_middleware( + { + name: "audit", + aliases: [], + doc: { summary: "", description: "", examples: [] }, + scope: @toolMiddleware.ToolMiddlewareScope::Universal, + }, + __golem_universal_tool_middleware_invoke_audit, + ) + @toolMiddleware.register_tool_middleware( + { + name: "policy", + aliases: [], + doc: { summary: "", description: "", examples: [] }, + scope: @toolMiddleware.ToolMiddlewareScope::Monomorphic({ + presented: __golem_middleware_tool_def_Presented().to_tool(), + expected: __golem_middleware_tool_def_Presented().to_tool(), + }), + }, + __golem_monomorphic_tool_middleware_invoke_Policy, + ) + @toolMiddleware.register_tool_middleware( + { + name: "adapter", + aliases: [], + doc: { summary: "", description: "", examples: [] }, + scope: @toolMiddleware.ToolMiddlewareScope::Monomorphic({ + presented: __golem_middleware_tool_def_Presented().to_tool(), + expected: __golem_middleware_tool_def_Storage().to_tool(), + }), + }, + __golem_monomorphic_tool_middleware_invoke_Adapter, + ) +} + +///| +fn init { + __golem_register_tool_middlewares() catch { + error => + abort("failed to register generated tool middleware: " + repr(error)) + } +} diff --git a/sdks/moonbit/golem_sdk/tool-middleware-authoring-test/moon.pkg b/sdks/moonbit/golem_sdk/tool-middleware-authoring-test/moon.pkg new file mode 100644 index 0000000000..37c5b33adf --- /dev/null +++ b/sdks/moonbit/golem_sdk/tool-middleware-authoring-test/moon.pkg @@ -0,0 +1,13 @@ +import { + "golemcloud/golem_sdk/async-core" @asyncCore, + "golemcloud/golem_sdk/tool-core" @tool, + "golemcloud/golem_sdk/tool-middleware" @toolMiddleware, + "golemcloud/golem_sdk/schema", + "golemcloud/golem_sdk/schema_model" @model, + "golemcloud/golem_sdk/interface/golem/core/types", + "golemcloud/golem_sdk/interface/golem/tool/common" @toolCommon, +} + +warnings = "-44" + +supported_targets = "+wasm" diff --git a/sdks/moonbit/golem_sdk/tool-middleware-authoring-test/pkg.generated.mbti b/sdks/moonbit/golem_sdk/tool-middleware-authoring-test/pkg.generated.mbti new file mode 100644 index 0000000000..f7f4db30ef --- /dev/null +++ b/sdks/moonbit/golem_sdk/tool-middleware-authoring-test/pkg.generated.mbti @@ -0,0 +1,90 @@ +// Generated using `moon info`, DON'T EDIT IT +package "golemcloud/golem_sdk/tool-middleware-authoring-test" + +import { + "golemcloud/golem_sdk/async-core", + "golemcloud/golem_sdk/interface/golem/agent/common", + "golemcloud/golem_sdk/interface/golem/core/types", + "golemcloud/golem_sdk/schema", + "golemcloud/golem_sdk/schema_model", + "golemcloud/golem_sdk/tool-core", + "golemcloud/golem_sdk/tool-middleware", +} + +// Values +pub async fn audit(@tool-middleware.RawToolInvocation, @tool-middleware.UnderlyingTool) -> Result[@tool-middleware.RawInvocationResult, @tool-middleware.ToolInvokeError[@tool-middleware.RawTypedSchemaValue]] + +pub fn decode_run_error_payload_for_tests(@types.TypedSchemaValue) -> RunError raise + +pub fn generated_input_for_tests(Array[String], Array[(String, @schema_model.SchemaValue)]) -> @types.TypedSchemaValue raise + +pub fn register_generated_middlewares_for_tests() -> Unit raise + +pub fn run_error_payload_for_tests(String) -> @types.TypedSchemaValue raise + +// Errors + +// Types and methods +type Adapter +pub async fn Adapter::abandon_stdout(StorageUnderlying) -> Result[@async-core.Stream[Byte], @tool-middleware.ToolInvokeError[@tool-core.NoToolError]] +pub async fn Adapter::admin__run(StorageUnderlying, Bool, String) -> Result[String, @tool-middleware.ToolInvokeError[@tool-core.NoToolError]] +pub async fn Adapter::io(StorageUnderlying, @tool-middleware.MiddlewareStdin, @common.Principal) -> Result[(String, @async-core.Stream[Byte]), @tool-middleware.ToolInvokeError[RunError]] +pub async fn Adapter::retry(StorageUnderlying, String) -> Result[Int, @tool-middleware.ToolInvokeError[@tool-core.NoToolError]] +pub async fn Adapter::stdout(StorageUnderlying) -> Result[@async-core.Stream[Byte], @tool-middleware.ToolInvokeError[@tool-core.NoToolError]] +pub async fn Adapter::unit(StorageUnderlying) -> Result[Unit, @tool-middleware.ToolInvokeError[@tool-core.NoToolError]] +pub async fn Adapter::value(StorageUnderlying, String) -> Result[Int, @tool-middleware.ToolInvokeError[@tool-core.NoToolError]] +pub async fn Adapter::value_stdout(StorageUnderlying, String) -> Result[(Int, @async-core.Stream[Byte]), @tool-middleware.ToolInvokeError[@tool-core.NoToolError]] + +type Nested +pub fn Nested::run(String) -> String + +type Policy +pub async fn Policy::abandon_stdout(PresentedUnderlying) -> Result[@async-core.Stream[Byte], @tool-middleware.ToolInvokeError[@tool-core.NoToolError]] +pub async fn Policy::admin__run(PresentedUnderlying, Bool, String) -> Result[String, @tool-middleware.ToolInvokeError[@tool-core.NoToolError]] +pub async fn Policy::io(PresentedUnderlying, @tool-middleware.MiddlewareStdin, @common.Principal) -> Result[(String, @async-core.Stream[Byte]), @tool-middleware.ToolInvokeError[RunError]] +pub async fn Policy::retry(PresentedUnderlying, String) -> Result[Int, @tool-middleware.ToolInvokeError[@tool-core.NoToolError]] +pub async fn Policy::stdout(PresentedUnderlying) -> Result[@async-core.Stream[Byte], @tool-middleware.ToolInvokeError[@tool-core.NoToolError]] +pub async fn Policy::unit(PresentedUnderlying) -> Result[Unit, @tool-middleware.ToolInvokeError[@tool-core.NoToolError]] +pub async fn Policy::value(PresentedUnderlying, String) -> Result[Int, @tool-middleware.ToolInvokeError[@tool-core.NoToolError]] +pub async fn Policy::value_stdout(PresentedUnderlying, String) -> Result[(Int, @async-core.Stream[Byte]), @tool-middleware.ToolInvokeError[@tool-core.NoToolError]] + +type Presented +pub fn Presented::abandon_stdout(@async-core.Sink[Byte]) -> Unit +pub fn Presented::admin(Bool) -> Unit +pub fn Presented::io(@async-core.Stream[Byte], @async-core.Sink[Byte], @common.Principal) -> Result[String, RunError] +pub fn Presented::retry(String) -> Int +pub fn Presented::stdout(@async-core.Sink[Byte]) -> Unit +pub fn Presented::unit() -> Unit +pub fn Presented::value(String) -> Int +pub fn Presented::value_stdout(String, @async-core.Sink[Byte]) -> Int + +pub struct PresentedUnderlying { + // private fields +} +pub async fn PresentedUnderlying::abandon_stdout(Self) -> Result[@async-core.Stream[Byte], @tool-middleware.ToolInvokeError[@tool-core.NoToolError]] +pub async fn PresentedUnderlying::admin__run(Self, Bool, String) -> Result[String, @tool-middleware.ToolInvokeError[@tool-core.NoToolError]] +pub async fn PresentedUnderlying::io(Self, @tool-middleware.MiddlewareStdin) -> Result[(String, @async-core.Stream[Byte]), @tool-middleware.ToolInvokeError[RunError]] +pub async fn PresentedUnderlying::retry(Self, String) -> Result[Int, @tool-middleware.ToolInvokeError[@tool-core.NoToolError]] +pub async fn PresentedUnderlying::stdout(Self) -> Result[@async-core.Stream[Byte], @tool-middleware.ToolInvokeError[@tool-core.NoToolError]] +pub async fn PresentedUnderlying::unit(Self) -> Result[Unit, @tool-middleware.ToolInvokeError[@tool-core.NoToolError]] +pub async fn PresentedUnderlying::value(Self, String) -> Result[Int, @tool-middleware.ToolInvokeError[@tool-core.NoToolError]] +pub async fn PresentedUnderlying::value_stdout(Self, String) -> Result[(Int, @async-core.Stream[Byte]), @tool-middleware.ToolInvokeError[@tool-core.NoToolError]] + +pub(all) enum RunError { + Broken(String) +} +pub impl @schema.FromSchema for RunError +pub impl @schema.IntoSchema for RunError +pub impl @tool-core.ToolErrorSchema for RunError + +type Storage +pub fn Storage::fetch(String) -> String + +pub struct StorageUnderlying { + // private fields +} +pub async fn StorageUnderlying::fetch(Self, String) -> Result[String, @tool-middleware.ToolInvokeError[@tool-core.NoToolError]] + +// Type aliases + +// Traits diff --git a/sdks/moonbit/golem_sdk/tool-middleware/generated_dispatch_wbtest.mbt b/sdks/moonbit/golem_sdk/tool-middleware/generated_dispatch_wbtest.mbt new file mode 100644 index 0000000000..2546584bbf --- /dev/null +++ b/sdks/moonbit/golem_sdk/tool-middleware/generated_dispatch_wbtest.mbt @@ -0,0 +1,562 @@ +///| +fn generated_presented_tool(middleware_name : String) -> @toolCommon.Tool raise { + let middleware = match get_registered_tool_middleware(middleware_name) { + Ok(middleware) => middleware + Err(_) => + raise Failure::Failure("generated test middleware is not registered") + } + match middleware.scope { + @toolCommon.ToolMiddlewareScope::Monomorphic(scope) => scope.presented + @toolCommon.ToolMiddlewareScope::Universal => + raise Failure::Failure("generated test middleware is not monomorphic") + } +} + +///| +fn generated_input( + command_path : Array[String], + params : Array[(String, @model.SchemaValue)], +) -> @types.TypedSchemaValue raise { + @authoring.generated_input_for_tests(command_path, params) +} + +///| +fn[T : @schema.IntoSchema] generated_result( + value : T, +) -> @types.TypedSchemaValue raise { + @model.typed_schema_value_to_wit(@schema.try_into_typed_schema_value(value)) +} + +///| +fn[T : @schema.FromSchema] generated_result_value( + result : @toolCommon.InvocationResult, +) -> T raise { + let decoded = match @toolCore.decode_invocation_result(result) { + Ok(decoded) => decoded + Err(message) => raise Failure::Failure(message) + } + match @toolCore.project_result_value(decoded) { + Ok(value) => value + Err(message) => raise Failure::Failure(message) + } +} + +///| +async fn invoke_generated( + middleware_name : String, + command_path : Array[String], + input : @types.TypedSchemaValue, + stdin : @async-core.Stream[Byte]?, + underlying : UnderlyingTool, +) -> Result[@toolCommon.InvocationResult, @toolCommon.ToolError] { + invoke_registered_tool_middleware( + middleware_name, + "presented", + generated_presented_tool(middleware_name), + command_path, + input, + stdin, + @agentCommon.Principal::Anonymous, + underlying, + ) +} + +///| +fn reset_generated_middlewares() -> Unit raise { + clear_tool_middlewares_for_tests() + @authoring.register_generated_middlewares_for_tests() +} + +///| +fn counted_source_stream(drops : Ref[Int]) -> @async-core.Stream[Byte] { + let emitted = Ref(false) + let closed = Ref(false) + let close = fn() { + if !closed.val { + closed.val = true + drops.val = drops.val + 1 + } + } + @async-core.Stream::from_source( + async fn(_) { + if closed.val || emitted.val { + None + } else { + emitted.val = true + Some(([1, 2, 3] : FixedArray[Byte])) + } + }, + async fn() { close() }, + close, + ) +} + +///| +fn directly_counted_source_stream( + read : async (Int) -> FixedArray[Byte]?, + close_attempts : Ref[Int], +) -> @async-core.Stream[Byte] { + @async-core.Stream::from_source( + read, + async fn() { close_attempts.val = close_attempts.val + 1 }, + fn() { close_attempts.val = close_attempts.val + 1 }, + ) +} + +///| +fn projected_stdout_producer( + source : @async-core.Stream[Byte], +) -> async (@async-core.Sink[Byte]) -> Unit { + match transfer_aware_stdout(source).take_producer() { + Some(producer) => producer + None => abort("transfer-aware stdout did not expose its producer") + } +} + +///| +priv suberror ProjectedStdoutSourceFailure derive(Debug) + +///| +test "generated monomorphic dispatch forwards, short-circuits, and retries" { + reset_generated_middlewares() + run_component_async(async fn() { + let forward_calls = Ref(0) + @async-core.with_task_group(async fn(group) { + let underlying = new_scoped_underlying_tool( + async fn(path, _, stdin) { + forward_calls.val = forward_calls.val + 1 + assert_eq(path, ["value"]) + assert_true(stdin is None) + Ok({ result: Some(generated_result(5)), stdout: None }) + }, + no_raw_drop, + group, + ) + let result = invoke_generated( + "policy", + ["value"], + generated_input(["value"], [ + ("value", @model.SchemaValue::String("hello")), + ]), + None, + underlying, + ) + match result { + Ok(result) => { + let value : Int = generated_result_value(result) + assert_eq(value, 5) + } + Err(error) => fail("generated forwarding failed: \{error}") + } + }) + assert_eq(forward_calls.val, 1) + + let short_circuit_calls = Ref(0) + @async-core.with_task_group(async fn(group) { + let underlying = new_scoped_underlying_tool( + async fn(_, _, _) { + short_circuit_calls.val = short_circuit_calls.val + 1 + Ok({ result: Some(generated_result(())), stdout: None }) + }, + no_raw_drop, + group, + ) + let result = invoke_generated( + "adapter", + ["unit"], + generated_input(["unit"], []), + None, + underlying, + ) + assert_true(result is Ok({ result: None, stdout: None })) + }) + assert_eq(short_circuit_calls.val, 0) + + let adapter_calls = Ref(0) + @async-core.with_task_group(async fn(group) { + let underlying = new_scoped_underlying_tool( + async fn(path, _, stdin) { + adapter_calls.val = adapter_calls.val + 1 + assert_eq(path, ["fetch"]) + assert_true(stdin is None) + Ok({ result: Some(generated_result("stored")), stdout: None }) + }, + no_raw_drop, + group, + ) + let result = invoke_generated( + "adapter", + ["value"], + generated_input(["value"], [ + ("value", @model.SchemaValue::String("key")), + ]), + None, + underlying, + ) + match result { + Ok(result) => { + let value : Int = generated_result_value(result) + assert_eq(value, 6) + } + Err(error) => fail("generated adapter dispatch failed: \{error}") + } + }) + assert_eq(adapter_calls.val, 1) + + let retry_calls = Ref(0) + @async-core.with_task_group(async fn(group) { + let underlying = new_scoped_underlying_tool( + async fn(path, _, _) { + retry_calls.val = retry_calls.val + 1 + assert_eq(path, ["retry"]) + Ok({ result: Some(generated_result(retry_calls.val)), stdout: None }) + }, + no_raw_drop, + group, + ) + let result = invoke_generated( + "policy", + ["retry"], + generated_input(["retry"], [ + ("value", @model.SchemaValue::String("again")), + ]), + None, + underlying, + ) + match result { + Ok(result) => { + let value : Int = generated_result_value(result) + assert_eq(value, 2) + } + Err(error) => fail("generated retry failed: \{error}") + } + }) + assert_eq(retry_calls.val, 2) + }) +} + +///| +test "generated monomorphic dispatch rejects malformed input and result" { + reset_generated_middlewares() + run_component_async(async fn() { + let malformed_input_calls = Ref(0) + @async-core.with_task_group(async fn(group) { + let underlying = new_scoped_underlying_tool( + async fn(_, _, _) { + malformed_input_calls.val = malformed_input_calls.val + 1 + Ok({ result: Some(generated_result(1)), stdout: None }) + }, + no_raw_drop, + group, + ) + let result = invoke_generated( + "policy", + ["value"], + raw_unit_value(), + None, + underlying, + ) + assert_true(result is Err(@toolCommon.ToolError::InvalidInput(_))) + }) + assert_eq(malformed_input_calls.val, 0) + + let malformed_result_calls = Ref(0) + @async-core.with_task_group(async fn(group) { + let underlying = new_scoped_underlying_tool( + async fn(_, _, _) { + malformed_result_calls.val = malformed_result_calls.val + 1 + Ok({ result: Some(generated_result(())), stdout: None }) + }, + no_raw_drop, + group, + ) + let result = invoke_generated( + "policy", + ["value"], + generated_input(["value"], [ + ("value", @model.SchemaValue::String("hello")), + ]), + None, + underlying, + ) + assert_true(result is Err(@toolCommon.ToolError::InvalidResult(_))) + }) + assert_eq(malformed_result_calls.val, 1) + }) +} + +///| +test "generated monomorphic dispatch decodes and re-encodes custom errors" { + reset_generated_middlewares() + let stdin_drops = Ref(0) + run_component_async(async fn() { + @async-core.with_task_group(async fn(group) { + let underlying = new_scoped_underlying_tool( + async fn(path, _, stdin) { + assert_eq(path, ["io"]) + match stdin { + Some(stdin) => stdin.drop_sync() + None => fail("generated custom-error dispatch lost stdin") + } + Err( + @toolCommon.ToolError::CustomError( + @authoring.run_error_payload_for_tests("boom"), + ), + ) + }, + no_raw_drop, + group, + ) + let result = invoke_generated( + "policy", + ["io"], + generated_input(["io"], []), + Some(counted_stream(stdin_drops)), + underlying, + ) + match result { + Err(@toolCommon.ToolError::CustomError(payload)) => { + let decoded = @authoring.decode_run_error_payload_for_tests(payload) + assert_true(decoded is @authoring.RunError::Broken("boom")) + } + _ => fail("generated custom error did not round-trip") + } + }) + + @async-core.with_task_group(async fn(group) { + let underlying = new_scoped_underlying_tool( + async fn(path, _, stdin) { + assert_eq(path, ["io"]) + match stdin { + Some(stdin) => stdin.drop_sync() + None => fail("generated malformed-error dispatch lost stdin") + } + Err(@toolCommon.ToolError::CustomError(generated_result(()))) + }, + no_raw_drop, + group, + ) + let result = invoke_generated( + "policy", + ["io"], + generated_input(["io"], []), + Some(counted_stream(stdin_drops)), + underlying, + ) + assert_true(result is Err(@toolCommon.ToolError::InvalidResult(_))) + }) + }) + assert_eq(stdin_drops.val, 2) +} + +///| +test "generated monomorphic dispatch cleans abandoned stdout and transfers returned stdout" { + reset_generated_middlewares() + let abandoned_drops = Ref(0) + run_component_async(async fn() { + @async-core.with_task_group(async fn(group) { + let underlying = new_scoped_underlying_tool( + async fn(path, _, _) { + assert_eq(path, ["abandon-stdout"]) + Ok({ result: None, stdout: Some(counted_stream(abandoned_drops)) }) + }, + no_raw_drop, + group, + ) + let result = invoke_generated( + "policy", + ["abandon-stdout"], + generated_input(["abandon-stdout"], []), + None, + underlying, + ) + assert_true( + result is Err(@toolCommon.ToolError::InvalidResult("abandoned stdout")), + ) + assert_eq(abandoned_drops.val, 0) + }) + assert_eq(abandoned_drops.val, 1) + + let returned_drops = Ref(0) + let transferred_producer : Ref[(async (@async-core.Sink[Byte]) -> Unit)?] = Ref( + None, + ) + @async-core.with_task_group(async fn(group) { + let underlying = new_scoped_underlying_tool( + async fn(path, _, _) { + assert_eq(path, ["stdout"]) + Ok({ result: None, stdout: Some(counted_stream(returned_drops)) }) + }, + no_raw_drop, + group, + ) + match + invoke_generated( + "policy", + ["stdout"], + generated_input(["stdout"], []), + None, + underlying, + ) { + Ok(result) => { + assert_true(result.result is None) + match result.stdout { + Some(stdout) => transferred_producer.val = stdout.take_producer() + None => fail("generated stdout dispatch lost final stream") + } + } + Err(error) => fail("generated stdout dispatch failed: \{error}") + } + assert_eq(returned_drops.val, 0) + }) + assert_eq(returned_drops.val, 0) + match transferred_producer.val { + Some(producer) => { + let (stream, sink) = @async-core.Stream::new() + producer(sink) + stream.drop() + } + None => fail("generated stdout dispatch did not transfer its producer") + } + assert_eq(returned_drops.val, 0) + }) +} + +///| +test "generated monomorphic dispatch relays lifted stdout after group teardown" { + reset_generated_middlewares() + let source_drops = Ref(0) + let transferred_producer : Ref[(async (@async-core.Sink[Byte]) -> Unit)?] = Ref( + None, + ) + run_component_async(async fn() { + @async-core.with_task_group(async fn(group) { + let underlying = new_scoped_underlying_tool( + async fn(path, _, _) { + assert_eq(path, ["stdout"]) + Ok({ result: None, stdout: Some(counted_source_stream(source_drops)) }) + }, + no_raw_drop, + group, + ) + match + invoke_generated( + "policy", + ["stdout"], + generated_input(["stdout"], []), + None, + underlying, + ) { + Ok(result) => + match result.stdout { + Some(stdout) => transferred_producer.val = stdout.take_producer() + None => fail("generated stdout dispatch lost lifted source") + } + Err(error) => fail("generated stdout dispatch failed: \{error}") + } + assert_eq(source_drops.val, 0) + }) + assert_eq(source_drops.val, 0) + match transferred_producer.val { + Some(producer) => { + let (stream, sink) = @async-core.Stream::new(capacity=64) + producer(sink) + match stream.read(64) { + Some(data) => assert_eq(data, ([1, 2, 3] : FixedArray[Byte])) + None => fail("lifted stdout relay produced no data") + } + assert_true(stream.read(64) is None) + } + None => fail("lifted stdout relay did not transfer its producer") + } + assert_eq(source_drops.val, 1) + }) +} + +///| +test "transfer-aware stdout closes its source when the consumer closes early" { + let close_attempts = Ref(0) + run_component_async(async fn() { + let producer = projected_stdout_producer( + directly_counted_source_stream( + async fn(_) { Some(([1, 2, 3] : FixedArray[Byte])) }, + close_attempts, + ), + ) + let (stream, sink) = @async-core.Stream::new(capacity=64) + stream.drop() + producer(sink) + assert_eq(close_attempts.val, 1) + }) +} + +///| +test "transfer-aware stdout closes its source when reading raises" { + let close_attempts = Ref(0) + run_component_async(async fn() { + let producer = projected_stdout_producer( + directly_counted_source_stream( + async fn(_) { raise ProjectedStdoutSourceFailure }, + close_attempts, + ), + ) + let (stream, sink) = @async-core.Stream::new(capacity=64) + try producer(sink) catch { + ProjectedStdoutSourceFailure => () + _ => fail("unexpected transfer-aware stdout source error") + } noraise { + _ => fail("raising transfer-aware stdout source unexpectedly completed") + } + stream.drop() + assert_eq(close_attempts.val, 1) + }) +} + +///| +test "transfer-aware stdout closes its source when its producer is cancelled" { + let close_attempts = Ref(0) + run_component_async(async fn() { + let (started, started_promise) = @async-core.Future::new() + let (blocked, _blocked_promise) = @async-core.Future::new() + let producer = projected_stdout_producer( + directly_counted_source_stream( + async fn(_) { + ignore(started_promise.complete(())) + blocked.get() + None + }, + close_attempts, + ), + ) + let (stream, sink) = @async-core.Stream::new(capacity=64) + @async-core.with_task_group(async fn(group) { + let task = group.spawn(async fn() { producer(sink) }) + started.get() + task.cancel() + try task.wait() catch { + @async-core.Cancelled::Cancelled => () + _ => fail("unexpected transfer-aware stdout cancellation error") + } noraise { + _ => fail("cancelled transfer-aware stdout unexpectedly completed") + } + }) + stream.drop() + assert_eq(close_attempts.val, 1) + }) +} + +///| +test "transfer-aware stdout closes an unstarted source exactly once" { + let close_attempts = Ref(0) + run_component_async(async fn() { + let stdout = transfer_aware_stdout( + directly_counted_source_stream( + async fn(_) { Some(([1, 2, 3] : FixedArray[Byte])) }, + close_attempts, + ), + ) + stdout.drop() + stdout.drop() + assert_eq(close_attempts.val, 1) + }) +} diff --git a/sdks/moonbit/golem_sdk/tool-middleware/moon.pkg b/sdks/moonbit/golem_sdk/tool-middleware/moon.pkg new file mode 100644 index 0000000000..2d3012bd7d --- /dev/null +++ b/sdks/moonbit/golem_sdk/tool-middleware/moon.pkg @@ -0,0 +1,17 @@ +import { + "golemcloud/golem_sdk/async-core", + "golemcloud/golem_sdk/interface/golem/agent/common" @agentCommon, + "golemcloud/golem_sdk/interface/golem/core/types", + "golemcloud/golem_sdk/interface/golem/tool/common" @toolCommon, + "golemcloud/golem_sdk/schema", + "golemcloud/golem_sdk/schema_model" @model, + "golemcloud/golem_sdk/tool-core" @toolCore, +} + +import { + "golemcloud/golem_sdk/tool-middleware-authoring-test" @authoring, +} for "wbtest" + +warnings = "-44" + +supported_targets = "+wasm" diff --git a/sdks/moonbit/golem_sdk/tool-middleware/ownership.mbt b/sdks/moonbit/golem_sdk/tool-middleware/ownership.mbt new file mode 100644 index 0000000000..836c0a687b --- /dev/null +++ b/sdks/moonbit/golem_sdk/tool-middleware/ownership.mbt @@ -0,0 +1,618 @@ +///| +/// Capability classes that can occur in a schema value carried across a tool +/// middleware boundary. +pub(all) enum ResourceKind { + Secret + QuotaToken + PermissionCard +} derive(Eq, Debug) + +///| +/// One candidate resource observed while scanning a newly acquired wire +/// carrier. The constructor is hidden from generated documentation because it +/// is guest-boundary plumbing, not an authoring API. +pub struct ResourceCandidate { + priv kind : ResourceKind + priv raw_index : Int + priv drop_raw : () -> Unit +} + +///| +#doc(hidden) +pub fn resource_candidate( + kind : ResourceKind, + raw_index : Int, + drop_raw : () -> Unit, +) -> ResourceCandidate { + { kind, raw_index, drop_raw } +} + +///| +/// Exact identity of one locally acquired owned-resource lifetime. A raw +/// canonical-ABI table index can be reused, so the local generation is part of +/// the identity even though the token's fields remain private. +pub struct ResourceAcquisitionToken { + priv kind : ResourceKind + priv raw_index : Int + priv generation : Int +} derive(Eq, Debug) + +///| +priv enum ResourceOwnershipState { + ResourceAvailable + ResourceTransferredLocal + ResourceTransferredUnderlying + ResourceTransferredFinal + ResourceDropped +} derive(Eq) + +///| +priv struct ResourceAcquisition { + token : ResourceAcquisitionToken + mut state : ResourceOwnershipState + drop_raw : () -> Unit +} + +///| +priv struct InvocationOwnershipState { + mut active : Bool + mut revoked : Bool + mut raw_dropped : Bool + mut next_generation : Int + drop_raw : () -> Unit + acquisitions : Array[ResourceAcquisition] + cleanups : Array[() -> Unit] +} + +///| +/// Shared ownership state for one middleware guest invocation. Every copied +/// underlying wrapper and every owned carrier created for the invocation holds +/// this same context. +pub struct OwnershipContext { + priv state : Ref[InvocationOwnershipState] +} + +///| +#doc(hidden) +pub fn OwnershipContext::new(drop_raw : () -> Unit) -> OwnershipContext { + { + state: { + val: { + active: false, + revoked: false, + raw_dropped: false, + next_generation: 0, + drop_raw, + acquisitions: [], + cleanups: [], + }, + }, + } +} + +///| +fn OwnershipContext::register_cleanup( + self : OwnershipContext, + cleanup : () -> Unit, +) -> Unit { + self.state.val.cleanups.push(cleanup) + if self.state.val.revoked { + cleanup() + } +} + +///| +fn[E] OwnershipContext::begin_call( + self : OwnershipContext, +) -> Result[Unit, ToolInvokeError[E]] { + if self.state.val.revoked { + return Err(InvalidInput("underlying tool is no longer available")) + } + if self.state.val.active { + return Err(InvalidInput("underlying tool invocation is already active")) + } + self.state.val.active = true + Ok(()) +} + +///| +fn OwnershipContext::finish_call(self : OwnershipContext) -> Unit { + self.state.val.active = false + self.drop_raw_if_idle() +} + +///| +fn OwnershipContext::drop_raw_if_idle(self : OwnershipContext) -> Unit { + if self.state.val.revoked && + !self.state.val.active && + !self.state.val.raw_dropped { + self.state.val.raw_dropped = true + (self.state.val.drop_raw)() + } +} + +///| +fn OwnershipContext::is_revoked(self : OwnershipContext) -> Bool { + self.state.val.revoked +} + +///| +fn OwnershipContext::find_exact_acquisition( + self : OwnershipContext, + token : ResourceAcquisitionToken, +) -> ResourceAcquisition? { + for acquisition in self.state.val.acquisitions { + if acquisition.token == token { + return Some(acquisition) + } + } + None +} + +///| +fn OwnershipContext::find_available_acquisition( + self : OwnershipContext, + kind : ResourceKind, + raw_index : Int, +) -> ResourceAcquisition? { + for acquisition in self.state.val.acquisitions { + if acquisition.token.kind == kind && + acquisition.token.raw_index == raw_index && + acquisition.state == ResourceAvailable { + return Some(acquisition) + } + } + None +} + +///| +fn contains_resource_key( + tokens : Array[ResourceAcquisitionToken], + kind : ResourceKind, + raw_index : Int, +) -> Bool { + for token in tokens { + if token.kind == kind && token.raw_index == raw_index { + return true + } + } + false +} + +///| +fn ResourceKind::label(self : ResourceKind) -> String { + match self { + Secret => "secret" + QuotaToken => "quota-token" + PermissionCard => "permission-card" + } +} + +///| +/// Opaque ownership attachment for one unchanged raw WIT carrier. Copies share +/// ledger state through the context and therefore cannot transfer or drop the +/// same acquisitions twice. +pub struct ResourceCarrierOwnership { + priv context : OwnershipContext + priv tokens : Array[ResourceAcquisitionToken] + priv valid : Bool +} + +///| +/// Mints exact acquisition tokens for all unique resources in one newly lifted +/// carrier. Duplicate nodes in that carrier keep one owner but invalidate the +/// carrier. A resource already available through an older carrier also +/// invalidates the new carrier without claiming or dropping the older owner. +#doc(hidden) +pub fn OwnershipContext::acquire_resources( + self : OwnershipContext, + candidates : Array[ResourceCandidate], +) -> ResourceCarrierOwnership { + let tokens : Array[ResourceAcquisitionToken] = [] + let mut valid = !self.state.val.revoked + for candidate in candidates { + if contains_resource_key(tokens, candidate.kind, candidate.raw_index) { + valid = false + continue + } + if self.find_available_acquisition(candidate.kind, candidate.raw_index) + is Some(_) { + valid = false + continue + } + let token = { + kind: candidate.kind, + raw_index: candidate.raw_index, + generation: self.state.val.next_generation, + } + self.state.val.next_generation = self.state.val.next_generation + 1 + self.state.val.acquisitions.push({ + token, + state: ResourceAvailable, + drop_raw: candidate.drop_raw, + }) + tokens.push(token) + } + let carrier = { context: self, tokens, valid } + if self.state.val.revoked { + ignore(carrier.drop()) + } + carrier +} + +///| +fn ResourceCarrierOwnership::transition( + self : ResourceCarrierOwnership, + target : ResourceOwnershipState, +) -> Result[Unit, String] { + if !self.valid && target != ResourceDropped { + return Err( + "resource carrier is invalid because it contains duplicate ownership", + ) + } + if self.context.is_revoked() && target != ResourceDropped { + return Err("middleware invocation ownership has been revoked") + } + let acquisitions : Array[ResourceAcquisition] = [] + for token in self.tokens { + let acquisition = match self.context.find_exact_acquisition(token) { + Some(acquisition) => acquisition + None => return Err("resource acquisition token is not recognized") + } + if acquisition.state != ResourceAvailable { + return Err( + "resource acquisition is no longer available: \{token.kind.label()}:\{token.raw_index}:\{token.generation}", + ) + } + acquisitions.push(acquisition) + } + for acquisition in acquisitions { + acquisition.state = target + } + if target == ResourceDropped { + for acquisition in acquisitions { + (acquisition.drop_raw)() + } + } + Ok(()) +} + +///| +#doc(hidden) +fn ResourceCarrierOwnership::check_available( + self : ResourceCarrierOwnership, +) -> Result[Unit, String] { + if !self.valid { + return Err( + "resource carrier is invalid because it contains duplicate ownership", + ) + } + if self.context.is_revoked() { + return Err("middleware invocation ownership has been revoked") + } + for token in self.tokens { + let acquisition = match self.context.find_exact_acquisition(token) { + Some(acquisition) => acquisition + None => return Err("resource acquisition token is not recognized") + } + if acquisition.state != ResourceAvailable { + return Err( + "resource acquisition is no longer available: \{token.kind.label()}:\{token.raw_index}:\{token.generation}", + ) + } + } + Ok(()) +} + +///| +#doc(hidden) +fn ResourceCarrierOwnership::transfer_local( + self : ResourceCarrierOwnership, +) -> Result[Unit, String] { + self.transition(ResourceTransferredLocal) +} + +///| +#doc(hidden) +pub fn ResourceCarrierOwnership::transfer_underlying( + self : ResourceCarrierOwnership, +) -> Result[Unit, String] { + self.transition(ResourceTransferredUnderlying) +} + +///| +#doc(hidden) +pub fn ResourceCarrierOwnership::transfer_final( + self : ResourceCarrierOwnership, +) -> Result[Unit, String] { + self.transition(ResourceTransferredFinal) +} + +///| +#doc(hidden) +pub fn ResourceCarrierOwnership::drop( + self : ResourceCarrierOwnership, +) -> Result[Unit, String] { + self.transition(ResourceDropped) +} + +///| +priv enum StdinOwnershipState { + StdinAvailable + StdinTransferredUnderlying + StdinDropped +} derive(Eq) + +///| +priv struct MiddlewareStdinState { + mut stream : @async-core.Stream[Byte]? + mut ownership : StdinOwnershipState +} + +///| +/// Opaque one-shot owner of the outer middleware stdin stream. +pub struct MiddlewareStdin { + priv context : OwnershipContext + priv state : Ref[MiddlewareStdinState] +} + +///| +#doc(hidden) +pub fn OwnershipContext::own_stdin( + self : OwnershipContext, + stream : @async-core.Stream[Byte], +) -> MiddlewareStdin { + let state : Ref[MiddlewareStdinState] = { + val: { stream: Some(stream), ownership: StdinAvailable }, + } + let owned : MiddlewareStdin = { context: self, state } + self.register_cleanup(fn() { owned.drop_if_available() }) + owned +} + +///| +fn MiddlewareStdin::drop_if_available(self : MiddlewareStdin) -> Unit { + if self.state.val.ownership == StdinAvailable { + let stream = self.state.val.stream + self.state.val.stream = None + self.state.val.ownership = StdinDropped + match stream { + Some(stream) => stream.drop_sync() + None => () + } + } +} + +///| +fn MiddlewareStdin::check_for_underlying( + self : MiddlewareStdin, + context : OwnershipContext, +) -> Result[Unit, String] { + if !physical_equal(self.context.state, context.state) { + return Err("middleware stdin belongs to another invocation") + } + if self.context.is_revoked() { + return Err("middleware invocation ownership has been revoked") + } + if self.state.val.ownership != StdinAvailable || self.state.val.stream is None { + return Err("middleware stdin is no longer available") + } + Ok(()) +} + +///| +#doc(hidden) +pub fn MiddlewareStdin::take_for_underlying( + self : MiddlewareStdin, +) -> Result[@async-core.Stream[Byte], String] { + if self.context.is_revoked() { + return Err("middleware invocation ownership has been revoked") + } + if self.state.val.ownership != StdinAvailable { + return Err("middleware stdin is no longer available") + } + let stream = match self.state.val.stream { + Some(stream) => stream + None => return Err("middleware stdin is no longer available") + } + self.state.val.stream = None + self.state.val.ownership = StdinTransferredUnderlying + Ok(stream) +} + +///| +#doc(hidden) +pub fn MiddlewareStdin::drop(self : MiddlewareStdin) -> Result[Unit, String] { + if self.state.val.ownership != StdinAvailable { + return Err("middleware stdin is no longer available") + } + self.drop_if_available() + Ok(()) +} + +///| +priv enum InvocationResultOwnershipState { + ResultAvailable + ResultProjected + ResultTransferredFinal + ResultDropped +} derive(Eq) + +///| +priv struct OwnedInvocationResultState { + mut result : @toolCore.InvocationResult? + mut ownership : InvocationResultOwnershipState + cleanup : (@toolCore.InvocationResult) -> Unit +} + +///| +/// Opaque owner of a decoded underlying result. The value and stdout remain a +/// single cleanup unit until projection, final transfer, or abandonment. +pub struct OwnedInvocationResult { + priv context : OwnershipContext + priv state : Ref[OwnedInvocationResultState] +} + +///| +fn OwnershipContext::own_result( + self : OwnershipContext, + result : @toolCore.InvocationResult, +) -> OwnedInvocationResult { + self.own_result_with_cleanup(result, @toolCore.drop_invocation_result) +} + +///| +fn OwnershipContext::own_result_with_cleanup( + self : OwnershipContext, + result : @toolCore.InvocationResult, + cleanup : (@toolCore.InvocationResult) -> Unit, +) -> OwnedInvocationResult { + let state : Ref[OwnedInvocationResultState] = { + val: { result: Some(result), ownership: ResultAvailable, cleanup }, + } + let owned : OwnedInvocationResult = { context: self, state } + self.register_cleanup(fn() { owned.drop_if_available() }) + owned +} + +///| +fn OwnedInvocationResult::drop_if_available( + self : OwnedInvocationResult, +) -> Unit { + if self.state.val.ownership == ResultAvailable || + self.state.val.ownership == ResultProjected { + let result = self.state.val.result + self.state.val.result = None + self.state.val.ownership = ResultDropped + match result { + Some(result) => (self.state.val.cleanup)(result) + None => () + } + } +} + +///| +fn OwnedInvocationResult::take( + self : OwnedInvocationResult, + target : InvocationResultOwnershipState, +) -> Result[@toolCore.InvocationResult, String] { + if self.context.is_revoked() { + self.drop_if_available() + return Err("middleware invocation ownership has been revoked") + } + if self.state.val.ownership != ResultAvailable { + return Err("underlying invocation result is no longer available") + } + let result = match self.state.val.result { + Some(result) => result + None => return Err("underlying invocation result is no longer available") + } + self.state.val.result = None + self.state.val.ownership = target + Ok(result) +} + +///| +fn transfer_aware_stdout( + source : @async-core.Stream[Byte], +) -> @async-core.Stream[Byte] { + @async-core.Stream::produce( + async fn(sink) { + try { + for ;; { + match source.read(64) { + Some(data) => if !sink.write_all(data[:]) { break } + None => { + sink.close() + break + } + } + } + } catch { + error => { + @async-core.protect_from_cancel( + async fn() { source.drop() }, + resume_on_cancel=true, + ) + raise error + } + } noraise { + _ => + @async-core.protect_from_cancel( + async fn() { source.drop() }, + resume_on_cancel=true, + ) + } + }, + on_unstarted_drop=fn() { source.drop_sync() }, + ) +} + +///| +#doc(hidden) +pub fn OwnedInvocationResult::take_for_projection( + self : OwnedInvocationResult, +) -> Result[@toolCore.InvocationResult, String] { + if self.context.is_revoked() { + self.drop_if_available() + return Err("middleware invocation ownership has been revoked") + } + if self.state.val.ownership != ResultAvailable { + return Err("underlying invocation result is no longer available") + } + let result = match self.state.val.result { + Some(result) => result + None => return Err("underlying invocation result is no longer available") + } + let projected : @toolCore.InvocationResult = { + result: result.result, + stdout: match result.stdout { + Some(stdout) => Some(transfer_aware_stdout(stdout)) + None => None + }, + } + self.state.val.result = Some(projected) + self.state.val.ownership = ResultProjected + Ok(projected) +} + +///| +/// Marks the result as transferred before yielding it to final guest-result +/// lowering. Generated guest integration performs the actual lowering while +/// the enclosing task group is still alive. +#doc(hidden) +pub fn OwnedInvocationResult::take_for_final( + self : OwnedInvocationResult, +) -> Result[@toolCore.InvocationResult, String] { + self.take(ResultTransferredFinal) +} + +///| +#doc(hidden) +pub fn OwnedInvocationResult::drop( + self : OwnedInvocationResult, +) -> Result[Unit, String] { + if self.state.val.ownership != ResultAvailable { + return Err("underlying invocation result is no longer available") + } + self.drop_if_available() + Ok(()) +} + +///| +/// Revokes all copied wrappers, releases every still-available carrier, and +/// drops the raw underlying resource exactly once after active work ends. +#doc(hidden) +pub fn OwnershipContext::revoke(self : OwnershipContext) -> Unit { + self.state.val.revoked = true + for cleanup in self.state.val.cleanups { + cleanup() + } + for acquisition in self.state.val.acquisitions { + if acquisition.state == ResourceAvailable { + acquisition.state = ResourceDropped + (acquisition.drop_raw)() + } + } + self.drop_raw_if_idle() +} diff --git a/sdks/moonbit/golem_sdk/tool-middleware/pkg.generated.mbti b/sdks/moonbit/golem_sdk/tool-middleware/pkg.generated.mbti new file mode 100644 index 0000000000..171786097b --- /dev/null +++ b/sdks/moonbit/golem_sdk/tool-middleware/pkg.generated.mbti @@ -0,0 +1,115 @@ +// Generated using `moon info`, DON'T EDIT IT +package "golemcloud/golem_sdk/tool-middleware" + +import { + "golemcloud/golem_sdk/async-core", + "golemcloud/golem_sdk/interface/golem/core/types", + "golemcloud/golem_sdk/schema", + "golemcloud/golem_sdk/schema_model", + "moonbitlang/core/debug", +} + +// Values +pub fn[E] decode_result_empty(OwnedInvocationResult) -> Result[Unit, ToolInvokeError[E]] + +pub fn[E] decode_result_stdout_only(OwnedInvocationResult) -> Result[@async-core.Stream[Byte], ToolInvokeError[E]] + +pub fn[T : @schema.FromSchema, E] decode_result_value(OwnedInvocationResult) -> Result[T, ToolInvokeError[E]] + +pub fn[T : @schema.FromSchema, E] decode_result_with_stdout(OwnedInvocationResult) -> Result[(T, @async-core.Stream[Byte]), ToolInvokeError[E]] + +pub fn[E] decode_tool_error(@golemcloud/golem_sdk/interface/golem/tool/common.ToolError, (@schema_model.TypedSchemaValue) -> Result[E, String]) -> ToolInvokeError[E] + +pub fn encode_tool_error(ToolInvokeError[@schema_model.TypedSchemaValue]) -> @golemcloud/golem_sdk/interface/golem/tool/common.ToolError + +// Errors + +// Types and methods +pub struct MiddlewareStdin { + // private fields +} + +pub(all) struct MonomorphicToolMiddlewareScope { + presented : @golemcloud/golem_sdk/interface/golem/tool/common.Tool + expected : @golemcloud/golem_sdk/interface/golem/tool/common.Tool +} + +pub struct OwnedInvocationResult { + // private fields +} + +pub struct OwnershipContext { + // private fields +} + +pub struct RawInvocationResult { + // private fields +} +pub fn RawInvocationResult::drop(Self) -> Result[Unit, String] + +pub struct RawToolInvocation { + // private fields +} +pub fn RawToolInvocation::command_path(Self) -> Array[String] +pub fn RawToolInvocation::empty_result(Self) -> RawInvocationResult +pub fn RawToolInvocation::input(Self) -> RawTypedSchemaValue +pub fn RawToolInvocation::principal(Self) -> @golemcloud/golem_sdk/interface/golem/agent/common.Principal +pub fn RawToolInvocation::stdin(Self) -> MiddlewareStdin? +pub fn RawToolInvocation::tool_metadata(Self) -> @golemcloud/golem_sdk/interface/golem/tool/common.Tool +pub fn RawToolInvocation::tool_name(Self) -> String + +pub struct RawTypedSchemaValue { + // private fields +} +pub fn RawTypedSchemaValue::drop(Self) -> Result[Unit, String] +pub fn RawTypedSchemaValue::schema_graph(Self) -> Result[@types.SchemaGraph, String] + +pub struct ResourceAcquisitionToken { + // private fields +} derive(Eq, @debug.Debug) + +pub struct ResourceCandidate { + // private fields +} + +pub struct ResourceCarrierOwnership { + // private fields +} + +pub(all) enum ResourceKind { + Secret + QuotaToken + PermissionCard +} derive(Eq, @debug.Debug) + +pub(all) enum ToolInvokeError[E] { + InvalidToolName(String) + InvalidCommandPath(Array[String]) + InvalidInput(String) + ConstraintViolation(String) + InvalidResult(String) + Tool(E) +} derive(Eq, @debug.Debug) +pub fn[E, M] ToolInvokeError::map_tool(Self[E], (E) -> M) -> Self[M] + +pub(all) struct ToolMiddleware { + name : String + aliases : Array[String] + doc : @golemcloud/golem_sdk/interface/golem/tool/common.Doc + scope : ToolMiddlewareScope +} + +pub(all) enum ToolMiddlewareScope { + Monomorphic(MonomorphicToolMiddlewareScope) + Universal +} + +pub struct UnderlyingTool { + // private fields +} +pub async fn UnderlyingTool::invoke(Self, Array[String], @schema_model.TypedSchemaValue, MiddlewareStdin?) -> Result[OwnedInvocationResult, ToolInvokeError[@schema_model.TypedSchemaValue]] +pub async fn UnderlyingTool::invoke_raw(Self, Array[String], RawTypedSchemaValue, MiddlewareStdin?) -> Result[RawInvocationResult, ToolInvokeError[RawTypedSchemaValue]] + +// Type aliases + +// Traits diff --git a/sdks/moonbit/golem_sdk/tool-middleware/raw.mbt b/sdks/moonbit/golem_sdk/tool-middleware/raw.mbt new file mode 100644 index 0000000000..e0b4322736 --- /dev/null +++ b/sdks/moonbit/golem_sdk/tool-middleware/raw.mbt @@ -0,0 +1,591 @@ +///| +priv enum RawCarrierState { + Available + TransferredLocal + TransferredUnderlying + TransferredFinal + Dropped +} derive(Eq) + +///| +priv struct RawTypedSchemaValueState { + mut value : @types.TypedSchemaValue? + resources : ResourceCarrierOwnership + mut ownership : RawCarrierState +} + +///| +/// Opaque zero-copy owner of one WIT typed-schema-value. Copies share a +/// take-once state, including when the value contains no resource handles. +pub struct RawTypedSchemaValue { + priv context : OwnershipContext + priv state : Ref[RawTypedSchemaValueState] +} + +///| +fn raw_resource_candidates( + value : @types.TypedSchemaValue, +) -> Array[ResourceCandidate] { + let candidates : Array[ResourceCandidate] = [] + for node in value.value.value_nodes { + match node { + @types.SchemaValueNode::SecretValue(secret) => { + let @types.Secret(raw_index) = secret + candidates.push( + resource_candidate(ResourceKind::Secret, raw_index, () => { + secret.drop() + }), + ) + } + @types.SchemaValueNode::QuotaTokenHandle(token) => { + let @types.QuotaToken(raw_index) = token + candidates.push( + resource_candidate(ResourceKind::QuotaToken, raw_index, () => { + token.drop() + }), + ) + } + @types.SchemaValueNode::PermissionCardHandle(card) => { + let @types.PermissionCard(raw_index) = card + candidates.push( + resource_candidate(ResourceKind::PermissionCard, raw_index, () => { + card.drop() + }), + ) + } + _ => () + } + } + candidates +} + +///| +#doc(hidden) +pub fn OwnershipContext::own_raw_typed_schema_value( + self : OwnershipContext, + value : @types.TypedSchemaValue, +) -> RawTypedSchemaValue { + let state : Ref[RawTypedSchemaValueState] = { + val: { + value: Some(value), + resources: self.acquire_resources(raw_resource_candidates(value)), + ownership: Available, + }, + } + let owned : RawTypedSchemaValue = { context: self, state } + self.register_cleanup(() => owned.drop_if_available()) + owned +} + +///| +fn RawTypedSchemaValue::drop_if_available(self : RawTypedSchemaValue) -> Unit { + if self.state.val.ownership == Available { + self.state.val.value = None + self.state.val.ownership = Dropped + ignore(self.state.val.resources.drop()) + } +} + +///| +fn RawTypedSchemaValue::take( + self : RawTypedSchemaValue, + context : OwnershipContext, + target : RawCarrierState, +) -> Result[@types.TypedSchemaValue, String] { + if !physical_equal(self.context.state, context.state) { + return Err("raw typed schema value belongs to another invocation") + } + if self.context.is_revoked() { + self.drop_if_available() + return Err("middleware invocation ownership has been revoked") + } + if self.state.val.ownership != Available { + return Err("raw typed schema value is no longer available") + } + let value = match self.state.val.value { + Some(value) => value + None => return Err("raw typed schema value is no longer available") + } + let transition = match target { + TransferredUnderlying => self.state.val.resources.transfer_underlying() + TransferredFinal => self.state.val.resources.transfer_final() + Available | TransferredLocal | Dropped => + abort("invalid raw typed value transfer target") + } + match transition { + Err(message) => Err(message) + Ok(_) => { + self.state.val.value = None + self.state.val.ownership = target + Ok(value) + } + } +} + +///| +fn RawTypedSchemaValue::decode_model_for_local( + self : RawTypedSchemaValue, + context : OwnershipContext, +) -> Result[@model.TypedSchemaValue, String] { + if !physical_equal(self.context.state, context.state) { + return Err("raw typed schema value belongs to another invocation") + } + if self.context.is_revoked() { + self.drop_if_available() + return Err("middleware invocation ownership has been revoked") + } + if self.state.val.ownership != Available { + return Err("raw typed schema value is no longer available") + } + let value = match self.state.val.value { + Some(value) => value + None => return Err("raw typed schema value is no longer available") + } + match self.state.val.resources.check_available() { + Err(message) => { + self.drop_if_available() + return Err(message) + } + Ok(_) => () + } + match self.state.val.resources.transfer_local() { + Err(message) => return Err(message) + Ok(_) => () + } + self.state.val.value = None + self.state.val.ownership = TransferredLocal + let decoded = @model.typed_schema_value_from_wit(value) catch { + error => { + @model.drop_wit_capabilities(value.value) + return Err("failed to decode middleware input: \{error}") + } + } + context.register_cleanup(fn() { + @model.drop_owned_capabilities(decoded.value) + }) + Ok(decoded) +} + +///| +#doc(hidden) +pub fn RawTypedSchemaValue::take_for_underlying( + self : RawTypedSchemaValue, + context : OwnershipContext, +) -> Result[@types.TypedSchemaValue, String] { + self.take(context, TransferredUnderlying) +} + +///| +#doc(hidden) +pub fn RawTypedSchemaValue::take_for_final( + self : RawTypedSchemaValue, + context : OwnershipContext, +) -> Result[@types.TypedSchemaValue, String] { + self.take(context, TransferredFinal) +} + +///| +/// Releases this carrier if it has not already been forwarded or returned. +pub fn RawTypedSchemaValue::drop( + self : RawTypedSchemaValue, +) -> Result[Unit, String] { + if self.state.val.ownership != Available { + return Err("raw typed schema value is no longer available") + } + self.drop_if_available() + Ok(()) +} + +///| +/// Returns the resource-free schema graph without decoding or rebuilding it. +pub fn RawTypedSchemaValue::schema_graph( + self : RawTypedSchemaValue, +) -> Result[@types.SchemaGraph, String] { + match self.state.val.value { + Some(value) if self.state.val.ownership == Available => Ok(value.graph) + _ => Err("raw typed schema value is no longer available") + } +} + +///| +priv struct RawInvocationResultState { + mut result : RawTypedSchemaValue? + mut stdout : @async-core.Stream[Byte]? + mut ownership : RawCarrierState +} + +///| +/// Opaque zero-copy owner of an underlying invocation result and stdout. +pub struct RawInvocationResult { + priv context : OwnershipContext + priv state : Ref[RawInvocationResultState] +} + +///| +fn OwnershipContext::own_raw_invocation_result( + self : OwnershipContext, + result : @toolCommon.InvocationResult, +) -> RawInvocationResult { + let state : Ref[RawInvocationResultState] = { + val: { + result: result.result.map(value => self.own_raw_typed_schema_value(value)), + stdout: result.stdout, + ownership: Available, + }, + } + let owned : RawInvocationResult = { context: self, state } + self.register_cleanup(() => owned.drop_if_available()) + owned +} + +///| +fn RawInvocationResult::drop_if_available(self : RawInvocationResult) -> Unit { + if self.state.val.ownership == Available { + let result = self.state.val.result + let stdout = self.state.val.stdout + self.state.val.result = None + self.state.val.stdout = None + self.state.val.ownership = Dropped + match result { + Some(result) => ignore(result.drop()) + None => () + } + match stdout { + Some(stdout) => stdout.drop_sync() + None => () + } + } +} + +///| +#doc(hidden) +pub fn RawInvocationResult::take_for_final( + self : RawInvocationResult, + context : OwnershipContext, +) -> Result[@toolCommon.InvocationResult, String] { + if !physical_equal(self.context.state, context.state) { + return Err("raw invocation result belongs to another invocation") + } + if self.context.is_revoked() { + self.drop_if_available() + return Err("middleware invocation ownership has been revoked") + } + if self.state.val.ownership != Available { + return Err("raw invocation result is no longer available") + } + let result = match self.state.val.result { + Some(result) => + match result.take_for_final(context) { + Ok(value) => Some(value) + Err(message) => return Err(message) + } + None => None + } + let stdout = self.state.val.stdout + self.state.val.result = None + self.state.val.stdout = None + self.state.val.ownership = TransferredFinal + Ok({ result, stdout }) +} + +///| +/// Releases a raw result that will not be returned by the middleware. +pub fn RawInvocationResult::drop( + self : RawInvocationResult, +) -> Result[Unit, String] { + if self.state.val.ownership != Available { + return Err("raw invocation result is no longer available") + } + self.drop_if_available() + Ok(()) +} + +///| +/// Runtime invocation context passed to universal middleware. Resource-bearing +/// input and stdin remain opaque take-once owners. +pub struct RawToolInvocation { + priv context : OwnershipContext + priv tool_name : String + priv tool_metadata : @toolCommon.Tool + priv command_path : Array[String] + priv input : RawTypedSchemaValue + priv stdin : MiddlewareStdin? + priv principal : @agentCommon.Principal +} + +///| +#doc(hidden) +pub fn RawToolInvocation::from_wit( + context : OwnershipContext, + tool_name : String, + tool_metadata : @toolCommon.Tool, + command_path : Array[String], + input : @types.TypedSchemaValue, + stdin : @async-core.Stream[Byte]?, + principal : @agentCommon.Principal, +) -> RawToolInvocation { + { + context, + tool_name, + tool_metadata, + command_path, + input: context.own_raw_typed_schema_value(input), + stdin: stdin.map(stream => context.own_stdin(stream)), + principal, + } +} + +///| +pub fn RawToolInvocation::tool_name(self : RawToolInvocation) -> String { + self.tool_name +} + +///| +pub fn RawToolInvocation::tool_metadata( + self : RawToolInvocation, +) -> @toolCommon.Tool { + self.tool_metadata +} + +///| +pub fn RawToolInvocation::command_path( + self : RawToolInvocation, +) -> Array[String] { + self.command_path.copy() +} + +///| +pub fn RawToolInvocation::input( + self : RawToolInvocation, +) -> RawTypedSchemaValue { + self.input +} + +///| +pub fn RawToolInvocation::stdin(self : RawToolInvocation) -> MiddlewareStdin? { + self.stdin +} + +///| +pub fn RawToolInvocation::principal( + self : RawToolInvocation, +) -> @agentCommon.Principal { + self.principal +} + +///| +/// Creates a resource-free short-circuit result tied to this invocation. +pub fn RawToolInvocation::empty_result( + self : RawToolInvocation, +) -> RawInvocationResult { + self.context.own_raw_invocation_result({ result: None, stdout: None }) +} + +///| +#doc(hidden) +pub fn[E] RawToolInvocation::decode_input( + self : RawToolInvocation, + def : @toolCore.ToolDef, + command_index : Int, + context : String, +) -> Result[Array[@toolCore.CanonicalInputValue], ToolInvokeError[E]] { + let typed = match self.input.decode_model_for_local(self.context) { + Ok(typed) => typed + Err(message) => return Err(InvalidInput(message)) + } + Ok(@toolCore.decode_canonical_input_value(def, command_index, typed, context)) catch { + @toolCommon.ToolError::InvalidToolName(name) => Err(InvalidToolName(name)) + @toolCommon.ToolError::InvalidCommandPath(path) => + Err(InvalidCommandPath(path)) + @toolCommon.ToolError::InvalidInput(message) => Err(InvalidInput(message)) + @toolCommon.ToolError::ConstraintViolation(message) => + Err(ConstraintViolation(message)) + @toolCommon.ToolError::InvalidResult(message) => Err(InvalidResult(message)) + @toolCommon.ToolError::CustomError(value) => { + @model.drop_wit_capabilities(value.value) + Err( + InvalidResult("canonical input decoding returned a custom tool error"), + ) + } + } +} + +///| +fn[T : @schema.IntoSchema] encode_middleware_result_value( + value : T, +) -> Result[@types.TypedSchemaValue, String] { + let typed = @schema.try_into_typed_schema_value(value) catch { + error => return Err("failed to build middleware result schema: \{error}") + } + match @toolCore.encode_typed_input(typed) { + Ok(encoded) => Ok(encoded) + Err(message) => { + @model.drop_owned_capabilities(typed.value) + Err("failed to encode middleware result: \{message}") + } + } +} + +///| +#doc(hidden) +pub fn[E] RawToolInvocation::typed_result_empty( + self : RawToolInvocation, +) -> Result[RawInvocationResult, ToolInvokeError[E]] { + Ok(self.context.own_raw_invocation_result({ result: None, stdout: None })) +} + +///| +#doc(hidden) +pub fn[T : @schema.IntoSchema, E] RawToolInvocation::typed_result_value( + self : RawToolInvocation, + value : T, +) -> Result[RawInvocationResult, ToolInvokeError[E]] { + match encode_middleware_result_value(value) { + Ok(value) => + Ok( + self.context.own_raw_invocation_result({ + result: Some(value), + stdout: None, + }), + ) + Err(message) => Err(InvalidResult(message)) + } +} + +///| +#doc(hidden) +pub fn[E] RawToolInvocation::typed_result_stdout( + self : RawToolInvocation, + stdout : @async-core.Stream[Byte], +) -> Result[RawInvocationResult, ToolInvokeError[E]] { + Ok( + self.context.own_raw_invocation_result({ + result: None, + stdout: Some(stdout), + }), + ) +} + +///| +#doc(hidden) +pub fn[T : @schema.IntoSchema, E] RawToolInvocation::typed_result_value_with_stdout( + self : RawToolInvocation, + value : T, + stdout : @async-core.Stream[Byte], +) -> Result[RawInvocationResult, ToolInvokeError[E]] { + match encode_middleware_result_value(value) { + Ok(value) => + Ok( + self.context.own_raw_invocation_result({ + result: Some(value), + stdout: Some(stdout), + }), + ) + Err(message) => { + stdout.drop_sync() + Err(InvalidResult(message)) + } + } +} + +///| +#doc(hidden) +pub fn[E] RawToolInvocation::encode_handler_error( + self : RawToolInvocation, + error : ToolInvokeError[E], + encode_custom_error : (E) -> Result[@model.TypedSchemaValue, String], +) -> ToolInvokeError[RawTypedSchemaValue] { + match error { + InvalidToolName(name) => InvalidToolName(name) + InvalidCommandPath(path) => InvalidCommandPath(path) + InvalidInput(message) => InvalidInput(message) + ConstraintViolation(message) => ConstraintViolation(message) + InvalidResult(message) => InvalidResult(message) + Tool(error) => { + let typed = match encode_custom_error(error) { + Ok(typed) => typed + Err(message) => return InvalidResult(message) + } + match @toolCore.encode_typed_input(typed) { + Ok(encoded) => Tool(self.context.own_raw_typed_schema_value(encoded)) + Err(message) => { + @model.drop_owned_capabilities(typed.value) + InvalidResult("failed to encode middleware custom error: \{message}") + } + } + } + } +} + +///| +pub async fn UnderlyingTool::invoke_raw( + self : UnderlyingTool, + command_path : Array[String], + input : RawTypedSchemaValue, + stdin : MiddlewareStdin?, +) -> Result[RawInvocationResult, ToolInvokeError[RawTypedSchemaValue]] { + match self.ownership.begin_call() { + Err(error) => return Err(error) + Ok(_) => () + } + defer self.ownership.finish_call() + match stdin { + Some(stdin) => + match stdin.check_for_underlying(self.ownership) { + Ok(_) => () + Err(error) => return Err(InvalidInput(error)) + } + None => () + } + let wire_input = match input.take_for_underlying(self.ownership) { + Ok(value) => value + Err(error) => return Err(InvalidInput(error)) + } + let wire_stdin = match stdin { + Some(stdin) => + match stdin.take_for_underlying() { + Ok(stream) => Some(stream) + Err(error) => return Err(InvalidInput(error)) + } + None => None + } + match (self.invoke)(command_path.copy(), wire_input, wire_stdin) { + Ok(result) => Ok(self.ownership.own_raw_invocation_result(result)) + Err(error) => + Err( + match error { + @toolCommon.ToolError::InvalidToolName(name) => InvalidToolName(name) + @toolCommon.ToolError::InvalidCommandPath(path) => + InvalidCommandPath(path) + @toolCommon.ToolError::InvalidInput(message) => InvalidInput(message) + @toolCommon.ToolError::ConstraintViolation(message) => + ConstraintViolation(message) + @toolCommon.ToolError::InvalidResult(message) => + InvalidResult(message) + @toolCommon.ToolError::CustomError(value) => + Tool(self.ownership.own_raw_typed_schema_value(value)) + }, + ) + } +} + +///| +#doc(hidden) +pub fn encode_raw_tool_error( + error : ToolInvokeError[RawTypedSchemaValue], + context : OwnershipContext, +) -> @toolCommon.ToolError { + match error { + InvalidToolName(name) => @toolCommon.ToolError::InvalidToolName(name) + InvalidCommandPath(path) => @toolCommon.ToolError::InvalidCommandPath(path) + InvalidInput(message) => @toolCommon.ToolError::InvalidInput(message) + ConstraintViolation(message) => + @toolCommon.ToolError::ConstraintViolation(message) + InvalidResult(message) => @toolCommon.ToolError::InvalidResult(message) + Tool(value) => + match value.take_for_final(context) { + Ok(value) => @toolCommon.ToolError::CustomError(value) + Err(message) => @toolCommon.ToolError::InvalidResult(message) + } + } +} diff --git a/sdks/moonbit/golem_sdk/tool-middleware/registry.mbt b/sdks/moonbit/golem_sdk/tool-middleware/registry.mbt new file mode 100644 index 0000000000..57bae56b84 --- /dev/null +++ b/sdks/moonbit/golem_sdk/tool-middleware/registry.mbt @@ -0,0 +1,167 @@ +///| +pub(all) struct MonomorphicToolMiddlewareScope { + presented : @toolCommon.Tool + expected : @toolCommon.Tool +} + +///| +pub(all) enum ToolMiddlewareScope { + Monomorphic(MonomorphicToolMiddlewareScope) + Universal +} + +///| +pub(all) struct ToolMiddleware { + name : String + aliases : Array[String] + doc : @toolCommon.Doc + scope : ToolMiddlewareScope +} + +///| +#doc(hidden) +pub type ToolMiddlewareInvoker = async (RawToolInvocation, UnderlyingTool) -> Result[ + RawInvocationResult, + ToolInvokeError[RawTypedSchemaValue], +] + +///| +priv struct ToolMiddlewareState { + descriptors : Map[String, ToolMiddleware] + invokers : Map[String, ToolMiddlewareInvoker] + identities : Map[String, String] +} + +///| +let tool_middleware_state : ToolMiddlewareState = { + descriptors: {}, + invokers: {}, + identities: {}, +} + +///| +fn ToolMiddleware::to_wit(self : ToolMiddleware) -> @toolCommon.ToolMiddleware { + { + name: self.name, + aliases: self.aliases.copy(), + doc: self.doc, + scope: match self.scope { + Monomorphic(scope) => + @toolCommon.ToolMiddlewareScope::Monomorphic({ + presented: scope.presented, + expected: Some(scope.expected), + }) + Universal => @toolCommon.ToolMiddlewareScope::Universal + }, + } +} + +///| +fn ToolMiddleware::registration_error(self : ToolMiddleware) -> String? { + let seen : Map[String, Unit] = {} + let identities = [self.name] + identities.append(self.aliases) + for identity in identities { + if identity == "" { + return Some("tool middleware names and aliases must not be empty") + } + if seen.contains(identity) || + tool_middleware_state.identities.contains(identity) { + return Some( + "duplicate tool middleware registration for middleware name or alias: " + + identity, + ) + } + seen[identity] = () + } + None +} + +///| +fn register_tool_middleware_checked( + middleware : ToolMiddleware, + invoker : ToolMiddlewareInvoker, +) -> Result[Unit, String] { + match middleware.registration_error() { + Some(message) => return Err(message) + None => () + } + let canonical_name = middleware.name + tool_middleware_state.identities[canonical_name] = canonical_name + for alias_name in middleware.aliases { + tool_middleware_state.identities[alias_name] = canonical_name + } + tool_middleware_state.descriptors[canonical_name] = middleware + tool_middleware_state.invokers[canonical_name] = invoker + Ok(()) +} + +///| +#doc(hidden) +pub fn register_tool_middleware( + middleware : ToolMiddleware, + invoker : ToolMiddlewareInvoker, +) -> Unit { + match register_tool_middleware_checked(middleware, invoker) { + Ok(_) => () + Err(message) => abort(message) + } +} + +///| +#doc(hidden) +pub fn discover_tool_middlewares() -> Array[@toolCommon.ToolMiddleware] { + let descriptors = tool_middleware_state.descriptors + .to_array() + .map(entry => entry.1.to_wit()) + descriptors.sort_by((left, right) => left.name.compare(right.name)) + descriptors +} + +///| +#doc(hidden) +pub fn get_registered_tool_middleware( + name : String, +) -> Result[@toolCommon.ToolMiddleware, @toolCommon.ToolError] { + match tool_middleware_state.descriptors.get(name) { + Some(middleware) => Ok(middleware.to_wit()) + None => Err(@toolCommon.ToolError::InvalidToolName(name)) + } +} + +///| +#doc(hidden) +pub async fn invoke_registered_tool_middleware( + middleware_name : String, + tool_name : String, + tool_metadata : @toolCommon.Tool, + command_path : Array[String], + input : @types.TypedSchemaValue, + stdin : @async-core.Stream[Byte]?, + principal : @agentCommon.Principal, + underlying : UnderlyingTool, +) -> Result[@toolCommon.InvocationResult, @toolCommon.ToolError] { + let context = underlying.ownership_context() + let invocation = RawToolInvocation::from_wit( + context, tool_name, tool_metadata, command_path, input, stdin, principal, + ) + let invoker = match tool_middleware_state.invokers.get(middleware_name) { + Some(invoker) => invoker + None => return Err(@toolCommon.ToolError::InvalidToolName(middleware_name)) + } + match invoker(invocation, underlying) { + Ok(result) => + match result.take_for_final(context) { + Ok(result) => Ok(result) + Err(message) => Err(@toolCommon.ToolError::InvalidResult(message)) + } + Err(error) => Err(encode_raw_tool_error(error, context)) + } +} + +///| +fn clear_tool_middlewares_for_tests() -> Unit { + tool_middleware_state.descriptors.clear() + tool_middleware_state.invokers.clear() + tool_middleware_state.identities.clear() +} diff --git a/sdks/moonbit/golem_sdk/tool-middleware/registry_wbtest.mbt b/sdks/moonbit/golem_sdk/tool-middleware/registry_wbtest.mbt new file mode 100644 index 0000000000..11fe44babd --- /dev/null +++ b/sdks/moonbit/golem_sdk/tool-middleware/registry_wbtest.mbt @@ -0,0 +1,495 @@ +///| +fn registry_doc(summary : String) -> @toolCommon.Doc { + { summary, description: summary + " description", examples: [] } +} + +///| +fn registry_tool(name : String) -> @toolCommon.Tool { + { + version: "0.1.0", + commands: { + nodes: [ + { + name, + aliases: [], + doc: registry_doc(name), + globals: { options: [], flags: [] }, + subcommands: [], + body: None, + }, + ], + }, + schema: { type_nodes: [], defs: [], root: 0 }, + } +} + +///| +fn universal_middleware( + name : String, + aliases : Array[String], +) -> ToolMiddleware { + { name, aliases, doc: registry_doc(name), scope: Universal } +} + +///| +async fn empty_registry_invoker( + invocation : RawToolInvocation, + _underlying : UnderlyingTool, +) -> Result[RawInvocationResult, ToolInvokeError[RawTypedSchemaValue]] { + Ok(invocation.empty_result()) +} + +///| +test "middleware registry sorts discovery and keeps aliases out of lookup" { + clear_tool_middlewares_for_tests() + register_tool_middleware( + universal_middleware("zeta-policy", ["zeta-alias"]), + empty_registry_invoker, + ) + register_tool_middleware( + { + name: "alpha-policy", + aliases: ["alpha-alias"], + doc: registry_doc("alpha"), + scope: Monomorphic({ + presented: registry_tool("presented"), + expected: registry_tool("expected"), + }), + }, + empty_registry_invoker, + ) + let discovered = discover_tool_middlewares() + assert_eq(discovered.length(), 2) + assert_eq(discovered[0].name, "alpha-policy") + assert_eq(discovered[1].name, "zeta-policy") + match discovered[0].scope { + @toolCommon.ToolMiddlewareScope::Monomorphic(scope) => { + assert_eq(scope.presented.commands.nodes[0].name, "presented") + match scope.expected { + Some(expected) => assert_eq(expected.commands.nodes[0].name, "expected") + None => fail("monomorphic registry metadata lost expected tool") + } + } + _ => fail("monomorphic registry metadata changed scope") + } + match get_registered_tool_middleware("alpha-policy") { + Ok(middleware) => { + assert_eq(middleware.aliases, ["alpha-alias"]) + assert_eq(middleware.doc.summary, "alpha") + } + Err(_) => fail("canonical middleware lookup failed") + } + assert_true( + get_registered_tool_middleware("alpha-alias") + is Err(@toolCommon.ToolError::InvalidToolName("alpha-alias")), + ) + assert_true(tool_middleware_state.invokers.contains("alpha-policy")) + assert_true(!tool_middleware_state.invokers.contains("alpha-alias")) +} + +///| +test "middleware registration rejects every canonical and alias collision transactionally" { + clear_tool_middlewares_for_tests() + assert_true( + register_tool_middleware_checked( + universal_middleware("registered", ["registered-alias"]), + empty_registry_invoker, + ) + is Ok(_), + ) + let collisions = [ + universal_middleware("registered", []), + universal_middleware("registered-alias", []), + universal_middleware("new-canonical", ["registered"]), + universal_middleware("another-canonical", ["registered-alias"]), + universal_middleware("self-collision", ["self-collision"]), + universal_middleware("duplicate-alias", ["same", "same"]), + ] + for middleware in collisions { + assert_true( + register_tool_middleware_checked(middleware, empty_registry_invoker) + is Err(_), + ) + } + assert_true( + register_tool_middleware_checked( + universal_middleware("", []), + empty_registry_invoker, + ) + is Err(_), + ) + assert_eq(discover_tool_middlewares().length(), 1) + assert_true(tool_middleware_state.invokers.contains("registered")) +} + +///| +fn registry_counted_stream(drops : Ref[Int]) -> @async-core.Stream[Byte] { + @async-core.Stream::produce(_ => (), on_unstarted_drop=fn() { + drops.val = drops.val + 1 + }) +} + +///| +fn registry_raw_secret(index : Int) -> @types.TypedSchemaValue raise { + let unit = @schema.try_into_typed_schema_value(()) + @model.typed_schema_value_to_wit({ + graph: unit.graph, + value: @model.SchemaValue::Secret( + @model.GuestSecretHandle::new(@types.Secret::Secret(index)), + ), + }) +} + +///| +fn drop_registry_raw_resources(value : @types.TypedSchemaValue) -> Unit { + for node in value.value.value_nodes { + match node { + @types.SecretValue(secret) => secret.drop() + @types.QuotaTokenHandle(token) => token.drop() + @types.PermissionCardHandle(card) => card.drop() + _ => () + } + } +} + +///| +test "guest boundary preserves raw carriers and tears down after final transfer" { + clear_tool_middlewares_for_tests() + reset_resource_drop_counts() + let backend_calls = Ref(0) + let raw_drops = Ref(0) + let stdin_drops = Ref(0) + let stdout_drops = Ref(0) + register_tool_middleware(universal_middleware("pass-through", []), async fn( + invocation, + underlying, + ) { + assert_eq(invocation.tool_name(), "runtime-tool") + assert_eq( + invocation.tool_metadata().commands.nodes[0].name, + "runtime-metadata", + ) + assert_eq(invocation.command_path(), ["nested", "run"]) + assert_true(invocation.principal() is @agentCommon.Principal::Anonymous) + underlying.invoke_raw( + invocation.command_path(), + invocation.input(), + invocation.stdin(), + ) + }) + run_component_async(async fn() { + let final_result : Ref[@toolCommon.InvocationResult?] = Ref(None) + @async-core.with_task_group(async fn(group) { + let underlying = new_scoped_underlying_tool( + async fn(command_path, input, stdin) { + backend_calls.val = backend_calls.val + 1 + assert_eq(command_path, ["nested", "run"]) + match stdin { + Some(stream) => stream.drop_sync() + None => fail("guest boundary lost stdin") + } + Ok({ + result: Some(input), + stdout: Some(registry_counted_stream(stdout_drops)), + }) + }, + fn() { raw_drops.val = raw_drops.val + 1 }, + group, + ) + match + invoke_registered_tool_middleware( + "pass-through", + "runtime-tool", + registry_tool("runtime-metadata"), + ["nested", "run"], + registry_raw_secret(701), + Some(registry_counted_stream(stdin_drops)), + @agentCommon.Principal::Anonymous, + underlying, + ) { + Ok(result) => final_result.val = Some(result) + Err(_) => fail("registered middleware invocation failed") + } + assert_eq(raw_drops.val, 0) + assert_eq(stdout_drops.val, 0) + }) + assert_eq(backend_calls.val, 1) + assert_eq(raw_drops.val, 1) + assert_eq(stdin_drops.val, 1) + assert_eq(stdout_drops.val, 0) + assert_resource_drop_counts(0, 0, 0) + match final_result.val { + Some(result) => { + match result.result { + Some(value) => drop_registry_raw_resources(value) + None => fail("guest boundary lost raw result") + } + match result.stdout { + Some(stdout) => stdout.drop_sync() + None => fail("guest boundary lost stdout") + } + } + None => fail("guest boundary did not return a result") + } + assert_resource_drop_counts(1, 0, 0) + assert_eq(stdout_drops.val, 1) + }) +} + +///| +test "universal middleware short-circuits without invoking and cleans raw input" { + clear_tool_middlewares_for_tests() + reset_resource_drop_counts() + let backend_calls = Ref(0) + let raw_drops = Ref(0) + let stdin_drops = Ref(0) + register_tool_middleware( + universal_middleware("short-circuit", []), + empty_registry_invoker, + ) + run_component_async(async fn() { + @async-core.with_task_group(async fn(group) { + let underlying = new_scoped_underlying_tool( + (_, _, _) => { + backend_calls.val = backend_calls.val + 1 + Ok({ result: None, stdout: None }) + }, + fn() { raw_drops.val = raw_drops.val + 1 }, + group, + ) + let result = invoke_registered_tool_middleware( + "short-circuit", + "runtime-tool", + registry_tool("runtime-metadata"), + [], + registry_raw_secret(705), + Some(registry_counted_stream(stdin_drops)), + @agentCommon.Principal::Anonymous, + underlying, + ) + assert_true(result is Ok({ result: None, stdout: None })) + assert_eq(backend_calls.val, 0) + assert_eq(raw_drops.val, 0) + }) + assert_eq(backend_calls.val, 0) + assert_eq(raw_drops.val, 1) + assert_eq(stdin_drops.val, 1) + assert_resource_drop_counts(1, 0, 0) + }) +} + +///| +test "universal middleware can retry the underlying capability sequentially" { + clear_tool_middlewares_for_tests() + let backend_calls = Ref(0) + let raw_drops = Ref(0) + register_tool_middleware(universal_middleware("retry", []), async fn( + invocation, + underlying, + ) { + let first = underlying.invoke( + [], + @schema.try_into_typed_schema_value(()), + None, + ) + assert_true(first is Err(ConstraintViolation("retry"))) + let second = underlying.invoke( + [], + @schema.try_into_typed_schema_value(()), + None, + ) + assert_true(second is Ok(_)) + Ok(invocation.empty_result()) + }) + run_component_async(async fn() { + @async-core.with_task_group(async fn(group) { + let underlying = new_scoped_underlying_tool( + (_, _, _) => { + backend_calls.val = backend_calls.val + 1 + if backend_calls.val == 1 { + Err(@toolCommon.ToolError::ConstraintViolation("retry")) + } else { + Ok({ result: None, stdout: None }) + } + }, + fn() { raw_drops.val = raw_drops.val + 1 }, + group, + ) + let result = invoke_registered_tool_middleware( + "retry", + "runtime-tool", + registry_tool("runtime-metadata"), + [], + @model.typed_schema_value_to_wit( + @schema.try_into_typed_schema_value(()), + ), + None, + @agentCommon.Principal::Anonymous, + underlying, + ) + assert_true(result is Ok({ result: None, stdout: None })) + assert_eq(backend_calls.val, 2) + assert_eq(raw_drops.val, 0) + }) + assert_eq(raw_drops.val, 1) + }) +} + +///| +test "guest boundary cleans uninvoked input stdin and underlying on lookup failure" { + clear_tool_middlewares_for_tests() + reset_resource_drop_counts() + let backend_calls = Ref(0) + let raw_drops = Ref(0) + let stdin_drops = Ref(0) + run_component_async(async fn() { + @async-core.with_task_group(async fn(group) { + let underlying = new_scoped_underlying_tool( + (_, _, _) => { + backend_calls.val = backend_calls.val + 1 + Ok({ result: None, stdout: None }) + }, + fn() { raw_drops.val = raw_drops.val + 1 }, + group, + ) + let result = invoke_registered_tool_middleware( + "missing", + "runtime-tool", + registry_tool("runtime-metadata"), + [], + registry_raw_secret(702), + Some(registry_counted_stream(stdin_drops)), + @agentCommon.Principal::Anonymous, + underlying, + ) + assert_true( + result is Err(@toolCommon.ToolError::InvalidToolName("missing")), + ) + assert_eq(raw_drops.val, 0) + }) + assert_eq(backend_calls.val, 0) + assert_eq(raw_drops.val, 1) + assert_eq(stdin_drops.val, 1) + assert_resource_drop_counts(1, 0, 0) + }) +} + +///| +test "guest boundary preserves protocol errors and transfers raw custom errors" { + clear_tool_middlewares_for_tests() + reset_resource_drop_counts() + let raw_drops = Ref(0) + register_tool_middleware(universal_middleware("protocol-error", []), async fn( + _invocation, + _underlying, + ) { + Err(ConstraintViolation("denied")) + }) + register_tool_middleware(universal_middleware("custom-error", []), async fn( + invocation, + _underlying, + ) { + Err(Tool(invocation.input())) + }) + run_component_async(async fn() { + let custom_payload : Ref[@types.TypedSchemaValue?] = Ref(None) + @async-core.with_task_group(async fn(group) { + let protocol_underlying = new_scoped_underlying_tool( + (_, _, _) => Ok({ result: None, stdout: None }), + fn() { raw_drops.val = raw_drops.val + 1 }, + group, + ) + let protocol = invoke_registered_tool_middleware( + "protocol-error", + "runtime-tool", + registry_tool("runtime-metadata"), + [], + @model.typed_schema_value_to_wit( + @schema.try_into_typed_schema_value(()), + ), + None, + @agentCommon.Principal::Anonymous, + protocol_underlying, + ) + assert_true( + protocol is Err(@toolCommon.ToolError::ConstraintViolation("denied")), + ) + let custom_underlying = new_scoped_underlying_tool( + (_, _, _) => Ok({ result: None, stdout: None }), + fn() { raw_drops.val = raw_drops.val + 1 }, + group, + ) + match + invoke_registered_tool_middleware( + "custom-error", + "runtime-tool", + registry_tool("runtime-metadata"), + [], + registry_raw_secret(704), + None, + @agentCommon.Principal::Anonymous, + custom_underlying, + ) { + Err(@toolCommon.ToolError::CustomError(payload)) => + custom_payload.val = Some(payload) + _ => fail("guest boundary changed raw custom error") + } + assert_eq(raw_drops.val, 0) + }) + assert_eq(raw_drops.val, 2) + assert_resource_drop_counts(0, 0, 0) + match custom_payload.val { + Some(payload) => drop_registry_raw_resources(payload) + None => fail("guest boundary lost raw custom error payload") + } + assert_resource_drop_counts(1, 0, 0) + }) +} + +///| +priv suberror RegistryInvokerFailure derive(Debug) + +///| +test "guest boundary group teardown runs when a registered invoker raises" { + clear_tool_middlewares_for_tests() + reset_resource_drop_counts() + let raw_drops = Ref(0) + let stdin_drops = Ref(0) + register_tool_middleware(universal_middleware("raises", []), async fn( + _invocation, + _underlying, + ) { + raise RegistryInvokerFailure + }) + run_component_async(async fn() { + try + @async-core.with_task_group(async fn(group) { + let underlying = new_scoped_underlying_tool( + (_, _, _) => Ok({ result: None, stdout: None }), + fn() { raw_drops.val = raw_drops.val + 1 }, + group, + ) + ignore( + invoke_registered_tool_middleware( + "raises", + "runtime-tool", + registry_tool("runtime-metadata"), + [], + registry_raw_secret(703), + Some(registry_counted_stream(stdin_drops)), + @agentCommon.Principal::Anonymous, + underlying, + ), + ) + }) + catch { + RegistryInvokerFailure => () + _ => fail("unexpected registered invoker failure") + } noraise { + _ => fail("raised registered invoker unexpectedly returned") + } + assert_eq(raw_drops.val, 1) + assert_eq(stdin_drops.val, 1) + assert_resource_drop_counts(1, 0, 0) + }) +} diff --git a/sdks/moonbit/golem_sdk/tool-middleware/runtime.mbt b/sdks/moonbit/golem_sdk/tool-middleware/runtime.mbt new file mode 100644 index 0000000000..579c5e4103 --- /dev/null +++ b/sdks/moonbit/golem_sdk/tool-middleware/runtime.mbt @@ -0,0 +1,279 @@ +///| +pub(all) enum ToolInvokeError[E] { + InvalidToolName(String) + InvalidCommandPath(Array[String]) + InvalidInput(String) + ConstraintViolation(String) + InvalidResult(String) + Tool(E) +} derive(Eq, Debug) + +///| +pub fn[E, M] ToolInvokeError::map_tool( + self : ToolInvokeError[E], + transform : (E) -> M, +) -> ToolInvokeError[M] { + match self { + InvalidToolName(name) => InvalidToolName(name) + InvalidCommandPath(path) => InvalidCommandPath(path) + InvalidInput(message) => InvalidInput(message) + ConstraintViolation(message) => ConstraintViolation(message) + InvalidResult(message) => InvalidResult(message) + Tool(error) => Tool(transform(error)) + } +} + +///| +pub struct UnderlyingTool { + priv ownership : OwnershipContext + priv invoke : async ( + Array[String], + @types.TypedSchemaValue, + @async-core.Stream[Byte]?, + ) -> Result[@toolCommon.InvocationResult, @toolCommon.ToolError] +} + +///| +fn new_underlying_tool( + invoke : async ( + Array[String], + @types.TypedSchemaValue, + @async-core.Stream[Byte]?, + ) -> Result[@toolCommon.InvocationResult, @toolCommon.ToolError], + drop_raw : () -> Unit, +) -> UnderlyingTool { + { ownership: OwnershipContext::new(drop_raw), invoke } +} + +///| +fn new_scoped_underlying_tool( + invoke : async ( + Array[String], + @types.TypedSchemaValue, + @async-core.Stream[Byte]?, + ) -> Result[@toolCommon.InvocationResult, @toolCommon.ToolError], + drop_raw : () -> Unit, + background_group : @async-core.TaskGroup[Unit], +) -> UnderlyingTool { + let underlying = new_underlying_tool(invoke, drop_raw) + background_group.add_defer(() => underlying.ownership.revoke()) + underlying +} + +///| +#doc(hidden) +pub fn UnderlyingTool::from_wit( + raw : @toolCommon.UnderlyingTool, + background_group : @async-core.TaskGroup[Unit], +) -> UnderlyingTool { + new_scoped_underlying_tool( + async fn(command_path, input, stdin) { + raw.invoke(command_path, input, stdin) + }, + fn() { raw.drop() }, + background_group, + ) +} + +///| +#doc(hidden) +pub fn UnderlyingTool::ownership_context( + self : UnderlyingTool, +) -> OwnershipContext { + self.ownership +} + +///| +#doc(hidden) +pub fn UnderlyingTool::revoke(self : UnderlyingTool) -> Unit { + self.ownership.revoke() +} + +///| +pub async fn UnderlyingTool::invoke( + self : UnderlyingTool, + command_path : Array[String], + input : @model.TypedSchemaValue, + stdin : MiddlewareStdin?, +) -> Result[OwnedInvocationResult, ToolInvokeError[@model.TypedSchemaValue]] { + self.invoke_with(command_path, input, stdin, value => Ok(value)) +} + +///| +#doc(hidden) +pub async fn[E] UnderlyingTool::invoke_with( + self : UnderlyingTool, + command_path : Array[String], + input : @model.TypedSchemaValue, + stdin : MiddlewareStdin?, + decode_custom_error : (@model.TypedSchemaValue) -> Result[E, String], +) -> Result[OwnedInvocationResult, ToolInvokeError[E]] { + match self.ownership.begin_call() { + Err(error) => return Err(error) + Ok(_) => () + } + defer self.ownership.finish_call() + match stdin { + Some(stdin) => + match stdin.check_for_underlying(self.ownership) { + Ok(_) => () + Err(error) => return Err(InvalidInput(error)) + } + None => () + } + let wire_input = match @toolCore.encode_typed_input(input) { + Ok(encoded) => encoded + Err(error) => return Err(InvalidInput(error)) + } + let wire_stdin = match stdin { + Some(stdin) => + match stdin.take_for_underlying() { + Ok(stream) => Some(stream) + Err(error) => return Err(InvalidInput(error)) + } + None => None + } + let wire_result = match + (self.invoke)(command_path.copy(), wire_input, wire_stdin) { + Ok(result) => result + Err(error) => + return Err( + decode_tool_error_with_ownership( + error, + decode_custom_error, + Some(self.ownership), + ), + ) + } + match @toolCore.decode_invocation_result(wire_result) { + Ok(result) => Ok(self.ownership.own_result(result)) + Err(error) => Err(InvalidResult(error)) + } +} + +///| +pub fn[E] decode_tool_error( + error : @toolCommon.ToolError, + decode_custom_error : (@model.TypedSchemaValue) -> Result[E, String], +) -> ToolInvokeError[E] { + decode_tool_error_with_ownership(error, decode_custom_error, None) +} + +///| +fn[E] decode_tool_error_with_ownership( + error : @toolCommon.ToolError, + decode_custom_error : (@model.TypedSchemaValue) -> Result[E, String], + ownership : OwnershipContext?, +) -> ToolInvokeError[E] { + match error { + @toolCommon.ToolError::InvalidToolName(name) => InvalidToolName(name) + @toolCommon.ToolError::InvalidCommandPath(path) => InvalidCommandPath(path) + @toolCommon.ToolError::InvalidInput(message) => InvalidInput(message) + @toolCommon.ToolError::ConstraintViolation(message) => + ConstraintViolation(message) + @toolCommon.ToolError::InvalidResult(message) => InvalidResult(message) + @toolCommon.ToolError::CustomError(value) => { + let decoded = match @toolCore.decode_typed_value(value, "tool error") { + Ok(decoded) => decoded + Err(message) => return InvalidResult(message) + } + match decode_custom_error(decoded) { + Ok(error) => { + match ownership { + Some(ownership) => + ownership.register_cleanup(fn() { + @model.drop_owned_capabilities(decoded.value) + }) + None => () + } + Tool(error) + } + Err(message) => { + @model.drop_owned_capabilities(decoded.value) + InvalidResult(message) + } + } + } + } +} + +///| +pub fn encode_tool_error( + error : ToolInvokeError[@model.TypedSchemaValue], +) -> @toolCommon.ToolError { + match error { + InvalidToolName(name) => @toolCommon.ToolError::InvalidToolName(name) + InvalidCommandPath(path) => @toolCommon.ToolError::InvalidCommandPath(path) + InvalidInput(message) => @toolCommon.ToolError::InvalidInput(message) + ConstraintViolation(message) => + @toolCommon.ToolError::ConstraintViolation(message) + InvalidResult(message) => @toolCommon.ToolError::InvalidResult(message) + Tool(value) => { + let encoded = @model.typed_schema_value_to_wit(value) catch { + error => { + @model.drop_owned_capabilities(value.value) + return @toolCommon.ToolError::InvalidResult( + "failed to encode tool error: \{error}", + ) + } + } + @toolCommon.ToolError::CustomError(encoded) + } + } +} + +///| +pub fn[T : @schema.FromSchema, E] decode_result_with_stdout( + result : OwnedInvocationResult, +) -> Result[(T, @async-core.Stream[Byte]), ToolInvokeError[E]] { + let result = match result.take_for_projection() { + Ok(result) => result + Err(message) => return Err(InvalidResult(message)) + } + match @toolCore.project_result_with_stdout(result) { + Ok(projected) => Ok(projected) + Err(message) => Err(InvalidResult(message)) + } +} + +///| +pub fn[T : @schema.FromSchema, E] decode_result_value( + result : OwnedInvocationResult, +) -> Result[T, ToolInvokeError[E]] { + let result = match result.take_for_projection() { + Ok(result) => result + Err(message) => return Err(InvalidResult(message)) + } + match @toolCore.project_result_value(result) { + Ok(value) => Ok(value) + Err(message) => Err(InvalidResult(message)) + } +} + +///| +pub fn[E] decode_result_stdout_only( + result : OwnedInvocationResult, +) -> Result[@async-core.Stream[Byte], ToolInvokeError[E]] { + let result = match result.take_for_projection() { + Ok(result) => result + Err(message) => return Err(InvalidResult(message)) + } + match @toolCore.project_result_stdout_only(result) { + Ok(stdout) => Ok(stdout) + Err(message) => Err(InvalidResult(message)) + } +} + +///| +pub fn[E] decode_result_empty( + result : OwnedInvocationResult, +) -> Result[Unit, ToolInvokeError[E]] { + let result = match result.take_for_projection() { + Ok(result) => result + Err(message) => return Err(InvalidResult(message)) + } + match @toolCore.project_result_empty(result) { + Ok(_) => Ok(()) + Err(message) => Err(InvalidResult(message)) + } +} diff --git a/sdks/moonbit/golem_sdk/tool-middleware/runtime_wbtest.mbt b/sdks/moonbit/golem_sdk/tool-middleware/runtime_wbtest.mbt new file mode 100644 index 0000000000..ce76c08bb7 --- /dev/null +++ b/sdks/moonbit/golem_sdk/tool-middleware/runtime_wbtest.mbt @@ -0,0 +1,1156 @@ +///| +test "tool invoke error mapping preserves every protocol variant" { + let errors : Array[ToolInvokeError[Int]] = [ + InvalidToolName("missing"), + InvalidCommandPath(["nested", "command"]), + InvalidInput("input"), + ConstraintViolation("constraint"), + InvalidResult("result"), + ] + for error in errors { + let mapped : ToolInvokeError[String] = error.map_tool(value => { + value.to_string() + }) + match mapped { + Tool(_) => fail("protocol error was mapped as a custom tool error") + _ => () + } + } + match ToolInvokeError::Tool(42).map_tool(value => value.to_string()) { + Tool("42") => () + _ => fail("custom tool error was not mapped") + } +} + +///| +test "wire protocol errors retain their exact middleware variants" { + let decode = fn(error) { + decode_tool_error(error, (_ : @model.TypedSchemaValue) => Ok(0)) + } + assert_true( + decode(@toolCommon.ToolError::InvalidToolName("missing")) + is InvalidToolName("missing"), + ) + assert_true( + decode(@toolCommon.ToolError::InvalidCommandPath(["a", "b"])) + is InvalidCommandPath(["a", "b"]), + ) + assert_true( + decode(@toolCommon.ToolError::InvalidInput("bad")) is InvalidInput("bad"), + ) + assert_true( + decode(@toolCommon.ToolError::ConstraintViolation("denied")) + is ConstraintViolation("denied"), + ) + assert_true( + decode(@toolCommon.ToolError::InvalidResult("bad result")) + is InvalidResult("bad result"), + ) +} + +///| +test "underlying copies share overlap revocation and exactly-once drop state" { + let drops : Ref[Int] = Ref(0) + let underlying = new_underlying_tool( + (_, _, _) => Err(@toolCommon.ToolError::InvalidInput("unused")), + fn() { drops.val = drops.val + 1 }, + ) + let copy = underlying + let started : Result[Unit, ToolInvokeError[Unit]] = underlying.ownership.begin_call() + assert_true(started is Ok(_)) + let overlap : Result[Unit, ToolInvokeError[Unit]] = copy.ownership.begin_call() + assert_true(overlap is Err(InvalidInput(_))) + copy.revoke() + assert_eq(drops.val, 0) + underlying.ownership.finish_call() + assert_eq(drops.val, 1) + copy.revoke() + assert_eq(drops.val, 1) + let after_return : Result[Unit, ToolInvokeError[Unit]] = underlying.ownership.begin_call() + assert_true(after_return is Err(InvalidInput(_))) +} + +///| +fn counted_stream(drops : Ref[Int]) -> @async-core.Stream[Byte] { + @async-core.Stream::produce(_ => (), on_unstarted_drop=fn() { + drops.val = drops.val + 1 + }) +} + +///| +fn no_raw_drop() -> Unit { + () +} + +///| +fn run_component_async(body : async () -> Unit) -> Unit raise { + let mut callback = @async-core.with_waitableset(async fn() { + body() + @async-core.task_returned() + }) + let mut steps = 0 + while callback != 0 { + steps = steps + 1 + if steps > 1000 { + fail("component async test did not complete") + } + if (callback & 0xf) != 1 { + fail("component async test unexpectedly waited on a host event") + } + callback = @async-core.cb(0, 0, 0) + } +} + +///| +priv suberror FakeBackendFailure derive(Debug) + +///| +extern "wasm" fn reset_resource_drop_counts() = "golem:test" "reset-resource-drop-counts" + +///| +extern "wasm" fn resource_drop_count(kind : Int) -> Int = "golem:test" "resource-drop-count" + +///| +fn assert_resource_drop_counts( + secret : Int, + quota_token : Int, + permission_card : Int, +) -> Unit raise { + assert_eq(resource_drop_count(0), secret) + assert_eq(resource_drop_count(1), quota_token) + assert_eq(resource_drop_count(2), permission_card) +} + +///| +test "resource acquisitions make exact terminal transitions" { + let raw_drops = Ref(0) + let resource_drops = Ref(0) + let context = OwnershipContext::new(fn() { raw_drops.val = raw_drops.val + 1 }) + let underlying = context.acquire_resources([ + resource_candidate(Secret, 1, fn() { + resource_drops.val = resource_drops.val + 1 + }), + ]) + let returned = context.acquire_resources([ + resource_candidate(QuotaToken, 2, fn() { + resource_drops.val = resource_drops.val + 1 + }), + ]) + let abandoned = context.acquire_resources([ + resource_candidate(PermissionCard, 3, fn() { + resource_drops.val = resource_drops.val + 1 + }), + ]) + assert_true(underlying.transfer_underlying() is Ok(_)) + assert_true(returned.transfer_final() is Ok(_)) + assert_true(abandoned.drop() is Ok(_)) + assert_eq(resource_drops.val, 1) + assert_true(underlying.transfer_underlying() is Err(_)) + assert_true(returned.drop() is Err(_)) + assert_true(abandoned.drop() is Err(_)) + assert_eq(resource_drops.val, 1) + context.revoke() + assert_eq(resource_drops.val, 1) + assert_eq(raw_drops.val, 1) + context.revoke() + assert_eq(raw_drops.val, 1) +} + +///| +test "recursive owned capability cleanup canonicalizes duplicate raw handles" { + reset_resource_drop_counts() + let shared_secret = @model.GuestSecretHandle::new(@types.Secret::Secret(101)) + let duplicate_secret = @model.GuestSecretHandle::new( + @types.Secret::Secret(101), + ) + let quota_token = @model.GuestQuotaTokenHandle::new( + @types.QuotaToken::QuotaToken(102), + ) + let permission_card = @model.GuestPermissionCardHandle::new( + @types.PermissionCard::PermissionCard(103), + ) + let recursive = @model.SchemaValue::Tuple([ + @model.SchemaValue::Secret(shared_secret), + @model.SchemaValue::List([ + @model.SchemaValue::Secret(shared_secret), + @model.SchemaValue::QuotaToken(quota_token), + ]), + @model.SchemaValue::Map([ + { + key: @model.SchemaValue::String("capability"), + value: @model.SchemaValue::PermissionCard(permission_card), + }, + ]), + @model.SchemaValue::Secret(duplicate_secret), + ]) + @model.drop_owned_capabilities(recursive) + assert_resource_drop_counts(1, 1, 1) + @model.drop_owned_capabilities(recursive) + assert_resource_drop_counts(1, 1, 1) +} + +///| +test "malformed wire custom error drops each distinct capability exactly once" { + reset_resource_drop_counts() + let malformed : @types.TypedSchemaValue = { + graph: { type_nodes: [], defs: [], root: 0 }, + value: { + value_nodes: [ + @types.SecretValue(@types.Secret::Secret(201)), + @types.SecretValue(@types.Secret::Secret(201)), + @types.QuotaTokenHandle(@types.QuotaToken::QuotaToken(202)), + @types.PermissionCardHandle(@types.PermissionCard::PermissionCard(203)), + @types.TupleValue([0, 1, 2, 3]), + ], + root: 4, + }, + } + let decoded : ToolInvokeError[Unit] = decode_tool_error( + @toolCommon.ToolError::CustomError(malformed), + _ => Ok(()), + ) + assert_true(decoded is InvalidResult(_)) + assert_resource_drop_counts(1, 1, 1) +} + +///| +test "rejected custom error decoder drops lifted capabilities" { + reset_resource_drop_counts() + let unit = @schema.try_into_typed_schema_value(()) + let encoded = @model.typed_schema_value_to_wit({ + graph: unit.graph, + value: @model.SchemaValue::Secret( + @model.GuestSecretHandle::new(@types.Secret::Secret(301)), + ), + }) + let decoded : ToolInvokeError[Unit] = decode_tool_error( + @toolCommon.ToolError::CustomError(encoded), + _ => Err("custom error payload rejected"), + ) + assert_true(decoded is InvalidResult("custom error payload rejected")) + assert_resource_drop_counts(1, 0, 0) +} + +///| +test "successful custom error decode remains owned until invocation teardown" { + run_component_async(async fn() { + reset_resource_drop_counts() + let underlying = new_underlying_tool( + (_, _, _) => { + Err(@toolCommon.ToolError::CustomError(raw_secret_value(351))) + }, + no_raw_drop, + ) + let input = @schema.try_into_typed_schema_value(()) + let result = underlying.invoke_with([], input, None, value => Ok(value)) + guard result is Err(Tool(decoded)) else { + fail("backend custom error did not decode successfully") + } + assert_resource_drop_counts(0, 0, 0) + underlying.revoke() + assert_resource_drop_counts(1, 0, 0) + @model.drop_owned_capabilities(decoded.value) + assert_resource_drop_counts(1, 0, 0) + }) +} + +///| +test "failed custom error encoding drops untransferred capabilities" { + reset_resource_drop_counts() + let unit = @schema.try_into_typed_schema_value(()) + let malformed : @model.TypedSchemaValue = { + graph: unit.graph, + value: @model.SchemaValue::Tuple([ + @model.SchemaValue::PermissionCard( + @model.GuestPermissionCardHandle::new( + @types.PermissionCard::PermissionCard(401), + ), + ), + @model.SchemaValue::S8(128), + ]), + } + let encoded = encode_tool_error(Tool(malformed)) + assert_true(encoded is @toolCommon.ToolError::InvalidResult(_)) + assert_resource_drop_counts(0, 0, 1) +} + +///| +fn raw_unit_value() -> @types.TypedSchemaValue raise { + @model.typed_schema_value_to_wit(@schema.try_into_typed_schema_value(())) +} + +///| +fn raw_secret_value(index : Int) -> @types.TypedSchemaValue raise { + let unit = @schema.try_into_typed_schema_value(()) + @model.typed_schema_value_to_wit({ + graph: unit.graph, + value: @model.SchemaValue::Secret( + @model.GuestSecretHandle::new(@types.Secret::Secret(index)), + ), + }) +} + +///| +fn drop_raw_value_resources(value : @types.TypedSchemaValue) -> Unit { + for node in value.value.value_nodes { + match node { + @types.SecretValue(secret) => secret.drop() + @types.QuotaTokenHandle(token) => token.drop() + @types.PermissionCardHandle(card) => card.drop() + _ => () + } + } +} + +///| +test "raw typed values share take-once state even without resources" { + let context = OwnershipContext::new(no_raw_drop) + let raw = context.own_raw_typed_schema_value(raw_unit_value()) + let copy = raw + assert_true(raw.take_for_final(context) is Ok(_)) + assert_true(copy.take_for_final(context) is Err(_)) + assert_true(copy.drop() is Err(_)) + context.revoke() +} + +///| +test "raw resource values transfer exact acquisitions and reject duplicates" { + reset_resource_drop_counts() + let context = OwnershipContext::new(no_raw_drop) + let raw = context.own_raw_typed_schema_value(raw_secret_value(601)) + let transferred = raw.take_for_final(context) + assert_true(transferred is Ok(_)) + context.revoke() + assert_resource_drop_counts(0, 0, 0) + match transferred { + Ok(value) => drop_raw_value_resources(value) + Err(_) => fail("raw resource transfer unexpectedly failed") + } + assert_resource_drop_counts(1, 0, 0) + + reset_resource_drop_counts() + let malformed_context = OwnershipContext::new(no_raw_drop) + let malformed : @types.TypedSchemaValue = { + graph: { type_nodes: [], defs: [], root: 0 }, + value: { + value_nodes: [ + @types.SecretValue(@types.Secret::Secret(602)), + @types.SecretValue(@types.Secret::Secret(602)), + ], + root: 0, + }, + } + let duplicate = malformed_context.own_raw_typed_schema_value(malformed) + assert_true(duplicate.take_for_underlying(malformed_context) is Err(_)) + malformed_context.revoke() + assert_resource_drop_counts(1, 0, 0) + malformed_context.revoke() + assert_resource_drop_counts(1, 0, 0) +} + +///| +test "local typed decode transfers ownership to context-managed model values" { + reset_resource_drop_counts() + let context = OwnershipContext::new(no_raw_drop) + let raw = context.own_raw_typed_schema_value(raw_secret_value(610)) + let copy = raw + let decoded = raw.decode_model_for_local(context) + assert_true(decoded is Ok(_)) + assert_true(copy.take_for_final(context) is Err(_)) + assert_resource_drop_counts(0, 0, 0) + context.revoke() + assert_resource_drop_counts(1, 0, 0) + context.revoke() + assert_resource_drop_counts(1, 0, 0) +} + +///| +test "failed local typed decode drops raw capabilities exactly once" { + reset_resource_drop_counts() + let context = OwnershipContext::new(no_raw_drop) + let malformed : @types.TypedSchemaValue = { + graph: { type_nodes: [], defs: [], root: 0 }, + value: { + value_nodes: [@types.SecretValue(@types.Secret::Secret(611))], + root: 1, + }, + } + let raw = context.own_raw_typed_schema_value(malformed) + assert_true(raw.decode_model_for_local(context) is Err(_)) + assert_resource_drop_counts(1, 0, 0) + context.revoke() + assert_resource_drop_counts(1, 0, 0) +} + +///| +test "raw invocation results transfer result and stdout together once" { + let stdout_drops = Ref(0) + let context = OwnershipContext::new(no_raw_drop) + let result = context.own_raw_invocation_result({ + result: Some(raw_unit_value()), + stdout: Some(counted_stream(stdout_drops)), + }) + let copy = result + let transferred = result.take_for_final(context) + assert_true(transferred is Ok(_)) + assert_true(copy.take_for_final(context) is Err(_)) + assert_true(copy.drop() is Err(_)) + context.revoke() + assert_eq(stdout_drops.val, 0) + match transferred { + Ok(result) => { + assert_true(result.result is Some(_)) + match result.stdout { + Some(stdout) => stdout.drop_sync() + None => fail("raw result lost stdout during final transfer") + } + } + Err(_) => fail("raw result transfer unexpectedly failed") + } + assert_eq(stdout_drops.val, 1) +} + +///| +test "raw custom errors lower once and preserve resource ownership" { + reset_resource_drop_counts() + let context = OwnershipContext::new(no_raw_drop) + let payload = context.own_raw_typed_schema_value(raw_secret_value(603)) + let lowered = encode_raw_tool_error(Tool(payload), context) + match lowered { + @toolCommon.ToolError::CustomError(value) => drop_raw_value_resources(value) + _ => fail("raw custom error was not preserved") + } + assert_resource_drop_counts(1, 0, 0) + assert_true(payload.take_for_final(context) is Err(_)) + context.revoke() + assert_resource_drop_counts(1, 0, 0) +} + +///| +test "raw final lowering rejects foreign results and errors without consuming them" { + reset_resource_drop_counts() + let expected_context = OwnershipContext::new(no_raw_drop) + let foreign_context = OwnershipContext::new(no_raw_drop) + let stdout_drops = Ref(0) + let result = foreign_context.own_raw_invocation_result({ + result: Some(raw_secret_value(607)), + stdout: Some(counted_stream(stdout_drops)), + }) + assert_true(result.take_for_final(expected_context) is Err(_)) + assert_resource_drop_counts(0, 0, 0) + assert_eq(stdout_drops.val, 0) + match result.take_for_final(foreign_context) { + Ok(result) => { + match result.result { + Some(value) => drop_raw_value_resources(value) + None => fail("foreign result was consumed on rejection") + } + match result.stdout { + Some(stdout) => stdout.drop_sync() + None => fail("foreign stdout was consumed on rejection") + } + } + Err(_) => fail("foreign result was consumed on rejection") + } + assert_resource_drop_counts(1, 0, 0) + assert_eq(stdout_drops.val, 1) + + let payload = foreign_context.own_raw_typed_schema_value( + raw_secret_value(608), + ) + assert_true( + encode_raw_tool_error(Tool(payload), expected_context) + is @toolCommon.ToolError::InvalidResult(_), + ) + assert_resource_drop_counts(1, 0, 0) + match payload.take_for_final(foreign_context) { + Ok(value) => drop_raw_value_resources(value) + Err(_) => fail("foreign custom error was consumed on rejection") + } + assert_resource_drop_counts(2, 0, 0) + expected_context.revoke() + foreign_context.revoke() + assert_resource_drop_counts(2, 0, 0) +} + +///| +test "failed raw result transfer retains nested resources and stdout for teardown" { + reset_resource_drop_counts() + let context = OwnershipContext::new(no_raw_drop) + let stdout_drops = Ref(0) + let malformed : @types.TypedSchemaValue = { + graph: { type_nodes: [], defs: [], root: 0 }, + value: { + value_nodes: [ + @types.SecretValue(@types.Secret::Secret(609)), + @types.SecretValue(@types.Secret::Secret(609)), + ], + root: 0, + }, + } + let result = context.own_raw_invocation_result({ + result: Some(malformed), + stdout: Some(counted_stream(stdout_drops)), + }) + assert_true(result.take_for_final(context) is Err(_)) + assert_resource_drop_counts(0, 0, 0) + assert_eq(stdout_drops.val, 0) + context.revoke() + assert_resource_drop_counts(1, 0, 0) + assert_eq(stdout_drops.val, 1) + context.revoke() + assert_resource_drop_counts(1, 0, 0) + assert_eq(stdout_drops.val, 1) +} + +///| +test "raw invoke rejects foreign input without consuming it" { + run_component_async(async fn() { + reset_resource_drop_counts() + let backend_calls = Ref(0) + let underlying = new_underlying_tool( + (_, _, _) => { + backend_calls.val = backend_calls.val + 1 + Ok({ result: None, stdout: None }) + }, + no_raw_drop, + ) + let foreign_context = OwnershipContext::new(no_raw_drop) + let input = foreign_context.own_raw_typed_schema_value( + raw_secret_value(604), + ) + let result = underlying.invoke_raw([], input, None) + assert_true(result is Err(InvalidInput(_))) + assert_eq(backend_calls.val, 0) + let returned = input.take_for_final(foreign_context) + assert_true(returned is Ok(_)) + match returned { + Ok(value) => drop_raw_value_resources(value) + Err(_) => fail("foreign input was consumed on rejection") + } + assert_resource_drop_counts(1, 0, 0) + foreign_context.revoke() + underlying.revoke() + assert_resource_drop_counts(1, 0, 0) + }) +} + +///| +test "raw invoke preflights stdin before transferring input" { + run_component_async(async fn() { + reset_resource_drop_counts() + let backend_calls = Ref(0) + let underlying = new_underlying_tool( + (_, _, _) => { + backend_calls.val = backend_calls.val + 1 + Ok({ result: None, stdout: None }) + }, + no_raw_drop, + ) + let stdin_drops = Ref(0) + let stale = underlying.ownership.own_stdin(counted_stream(stdin_drops)) + let transferred_stdin = stale.take_for_underlying() + assert_true(transferred_stdin is Ok(_)) + let input = underlying.ownership.own_raw_typed_schema_value( + raw_secret_value(605), + ) + let result = underlying.invoke_raw([], input, Some(stale)) + assert_true(result is Err(InvalidInput(_))) + assert_eq(backend_calls.val, 0) + let returned = input.take_for_final(underlying.ownership) + assert_true(returned is Ok(_)) + match returned { + Ok(value) => drop_raw_value_resources(value) + Err(_) => fail("raw input was consumed before stdin rejection") + } + assert_resource_drop_counts(1, 0, 0) + match transferred_stdin { + Ok(stream) => stream.drop_sync() + Err(_) => fail("initial stdin transfer unexpectedly failed") + } + assert_eq(stdin_drops.val, 1) + underlying.revoke() + }) +} + +///| +test "raw invoke supports sequential calls and raw backend errors" { + run_component_async(async fn() { + reset_resource_drop_counts() + let calls = Ref(0) + let underlying = new_underlying_tool( + (_, _, _) => { + calls.val = calls.val + 1 + if calls.val == 3 { + Err(@toolCommon.ToolError::CustomError(raw_secret_value(606))) + } else { + Ok({ result: Some(raw_unit_value()), stdout: None }) + } + }, + no_raw_drop, + ) + for index = 0; index < 2; index = index + 1 { + ignore(index) + let input = underlying.ownership.own_raw_typed_schema_value( + raw_unit_value(), + ) + match underlying.invoke_raw([], input, None) { + Ok(result) => assert_true(result.drop() is Ok(_)) + Err(_) => fail("sequential raw invocation unexpectedly failed") + } + } + let input = underlying.ownership.own_raw_typed_schema_value( + raw_unit_value(), + ) + match underlying.invoke_raw([], input, None) { + Err(Tool(payload)) => + match encode_raw_tool_error(Tool(payload), underlying.ownership) { + @toolCommon.ToolError::CustomError(value) => + drop_raw_value_resources(value) + _ => fail("raw backend custom error changed protocol variant") + } + _ => fail("raw backend custom error was not returned") + } + assert_eq(calls.val, 3) + assert_true(!underlying.ownership.state.val.active) + assert_resource_drop_counts(1, 0, 0) + underlying.revoke() + assert_resource_drop_counts(1, 0, 0) + }) +} + +///| +test "duplicate resource nodes retain one owner and drop once" { + let drops = Ref(0) + let context = OwnershipContext::new(no_raw_drop) + let carrier = context.acquire_resources([ + resource_candidate(Secret, 7, fn() { drops.val = drops.val + 1 }), + resource_candidate(Secret, 7, fn() { drops.val = drops.val + 1 }), + ]) + assert_eq(carrier.tokens.length(), 1) + assert_true(!carrier.valid) + assert_true(carrier.transfer_underlying() is Err(_)) + assert_true(carrier.drop() is Ok(_)) + assert_eq(drops.val, 1) + assert_true(carrier.drop() is Err(_)) + context.revoke() + assert_eq(drops.val, 1) +} + +///| +test "an overlapping carrier cannot claim an older available acquisition" { + let old_drops = Ref(0) + let new_drops = Ref(0) + let context = OwnershipContext::new(no_raw_drop) + let older = context.acquire_resources([ + resource_candidate(QuotaToken, 11, fn() { + old_drops.val = old_drops.val + 1 + }), + ]) + let overlapping = context.acquire_resources([ + resource_candidate(QuotaToken, 11, fn() { + new_drops.val = new_drops.val + 1 + }), + ]) + assert_true(!overlapping.valid) + assert_eq(overlapping.tokens.length(), 0) + assert_true(overlapping.transfer_underlying() is Err(_)) + assert_true(overlapping.drop() is Ok(_)) + assert_eq(old_drops.val, 0) + assert_eq(new_drops.val, 0) + assert_true(older.drop() is Ok(_)) + assert_eq(old_drops.val, 1) +} + +///| +test "raw index reuse mints a new generation and rejects the stale carrier" { + let old_drops = Ref(0) + let new_drops = Ref(0) + let context = OwnershipContext::new(no_raw_drop) + let stale = context.acquire_resources([ + resource_candidate(PermissionCard, 19, fn() { + old_drops.val = old_drops.val + 1 + }), + ]) + let stale_generation = stale.tokens[0].generation + assert_true(stale.drop() is Ok(_)) + let current = context.acquire_resources([ + resource_candidate(PermissionCard, 19, fn() { + new_drops.val = new_drops.val + 1 + }), + ]) + assert_eq(current.tokens[0].generation, stale_generation + 1) + assert_true(stale.transfer_final() is Err(_)) + assert_true(stale.drop() is Err(_)) + assert_true(current.transfer_final() is Ok(_)) + assert_eq(old_drops.val, 1) + assert_eq(new_drops.val, 0) + context.revoke() + assert_eq(new_drops.val, 0) +} + +///| +test "stdin is dropped on short circuit and transfers at most once" { + let short_circuit_drops = Ref(0) + let short_circuit = OwnershipContext::new(no_raw_drop).own_stdin( + counted_stream(short_circuit_drops), + ) + short_circuit.context.revoke() + assert_eq(short_circuit_drops.val, 1) + assert_true(short_circuit.take_for_underlying() is Err(_)) + assert_eq(short_circuit_drops.val, 1) + + let forwarded_drops = Ref(0) + let context = OwnershipContext::new(no_raw_drop) + let forwarded = context.own_stdin(counted_stream(forwarded_drops)) + let transferred = forwarded.take_for_underlying() + assert_true(transferred is Ok(_)) + assert_true(forwarded.take_for_underlying() is Err(_)) + assert_true(forwarded.drop() is Err(_)) + context.revoke() + assert_eq(forwarded_drops.val, 0) + match transferred { + Ok(stream) => stream.drop_sync() + Err(_) => fail("stdin transfer unexpectedly failed") + } + assert_eq(forwarded_drops.val, 1) +} + +///| +test "stale stdin is rejected before fresh input capabilities transfer" { + run_component_async(async fn() { + reset_resource_drop_counts() + let backend_calls = Ref(0) + let underlying = new_underlying_tool( + (_, _, _) => { + backend_calls.val = backend_calls.val + 1 + Ok({ result: None, stdout: None }) + }, + no_raw_drop, + ) + let stdin_drops = Ref(0) + let stale = underlying.ownership.own_stdin(counted_stream(stdin_drops)) + let transferred_stdin = stale.take_for_underlying() + assert_true(transferred_stdin is Ok(_)) + let secret = @model.GuestSecretHandle::new(@types.Secret::Secret(501)) + let unit = @schema.try_into_typed_schema_value(()) + let input : @model.TypedSchemaValue = { + graph: unit.graph, + value: @model.SchemaValue::Secret(secret), + } + let result = underlying.invoke([], input, Some(stale)) + assert_true(result is Err(InvalidInput(_))) + assert_eq(backend_calls.val, 0) + assert_true(secret.is_present()) + assert_resource_drop_counts(0, 0, 0) + @model.drop_owned_capabilities(input.value) + assert_true(!secret.is_present()) + assert_resource_drop_counts(1, 0, 0) + @model.drop_owned_capabilities(input.value) + assert_resource_drop_counts(1, 0, 0) + match transferred_stdin { + Ok(stream) => stream.drop_sync() + Err(_) => fail("initial stdin transfer unexpectedly failed") + } + assert_eq(stdin_drops.val, 1) + }) +} + +///| +test "abandoned and explicitly rejected results synchronously clean up" { + let abandoned_drops = Ref(0) + let context = OwnershipContext::new(no_raw_drop) + let abandoned = context.own_result_with_cleanup( + { result: None, stdout: Some(counted_stream(abandoned_drops)) }, + fn(result) { + match result.stdout { + Some(stdout) => stdout.drop_sync() + None => () + } + }, + ) + context.revoke() + assert_eq(abandoned_drops.val, 1) + assert_true(abandoned.take_for_projection() is Err(_)) + + let rejected_drops = Ref(0) + let rejected_context = OwnershipContext::new(no_raw_drop) + let rejected = rejected_context.own_result_with_cleanup( + { result: None, stdout: Some(counted_stream(rejected_drops)) }, + fn(result) { + match result.stdout { + Some(stdout) => stdout.drop_sync() + None => () + } + }, + ) + assert_true(rejected.drop() is Ok(_)) + assert_eq(rejected_drops.val, 1) + rejected_context.revoke() + assert_eq(rejected_drops.val, 1) +} + +///| +test "projection rejection and malformed wire results release stdout" { + let rejected_drops = Ref(0) + let rejected_context = OwnershipContext::new(no_raw_drop) + let rejected = rejected_context.own_result({ + result: None, + stdout: Some(counted_stream(rejected_drops)), + }) + let projected : Result[Int, ToolInvokeError[Unit]] = decode_result_value( + rejected, + ) + assert_true(projected is Err(InvalidResult(_))) + assert_eq(rejected_drops.val, 1) + + let malformed_drops = Ref(0) + let malformed : @types.TypedSchemaValue = { + graph: { type_nodes: [], defs: [], root: 0 }, + value: { value_nodes: [], root: 0 }, + } + let decoded = @toolCore.decode_invocation_result({ + result: Some(malformed), + stdout: Some(counted_stream(malformed_drops)), + }) + assert_true(decoded is Err(_)) + assert_eq(malformed_drops.val, 1) +} + +///| +test "projected stdout and resources remain owned until teardown" { + let stdout_drops = Ref(0) + let stdout_context = OwnershipContext::new(no_raw_drop) + let stdout_result = stdout_context.own_result({ + result: None, + stdout: Some(counted_stream(stdout_drops)), + }) + let projected_stdout : Result[@async-core.Stream[Byte], ToolInvokeError[Unit]] = decode_result_stdout_only( + stdout_result, + ) + assert_true(projected_stdout is Ok(_)) + assert_eq(stdout_drops.val, 0) + stdout_context.revoke() + assert_eq(stdout_drops.val, 1) + match projected_stdout { + Ok(stdout) => stdout.drop_sync() + Err(_) => fail("stdout projection unexpectedly failed") + } + assert_eq(stdout_drops.val, 1) + + reset_resource_drop_counts() + let resource_context = OwnershipContext::new(no_raw_drop) + let unit = @schema.try_into_typed_schema_value(()) + let resource_result = resource_context.own_result({ + result: Some({ + graph: unit.graph, + value: @model.SchemaValue::Secret( + @model.GuestSecretHandle::new(@types.Secret::Secret(751)), + ), + }), + stdout: None, + }) + let projected_resource = resource_result.take_for_projection() + assert_true(projected_resource is Ok(_)) + assert_resource_drop_counts(0, 0, 0) + resource_context.revoke() + assert_resource_drop_counts(1, 0, 0) + match projected_resource { + Ok({ result: Some(result), .. }) => + @model.drop_owned_capabilities(result.value) + _ => fail("resource result projection unexpectedly failed") + } + assert_resource_drop_counts(1, 0, 0) +} + +///| +test "projected resource transferred to final encoding is not double-dropped" { + reset_resource_drop_counts() + let context = OwnershipContext::new(no_raw_drop) + let unit = @schema.try_into_typed_schema_value(()) + let owned = context.own_result({ + result: Some({ + graph: unit.graph, + value: @model.SchemaValue::Secret( + @model.GuestSecretHandle::new(@types.Secret::Secret(752)), + ), + }), + stdout: None, + }) + let projected = owned.take_for_projection() + let transferred = match projected { + Ok({ result: Some(result), .. }) => @model.typed_schema_value_to_wit(result) + _ => { + fail("resource result projection unexpectedly failed") + raw_unit_value() + } + } + context.revoke() + assert_resource_drop_counts(0, 0, 0) + drop_raw_value_resources(transferred) + assert_resource_drop_counts(1, 0, 0) + context.revoke() + assert_resource_drop_counts(1, 0, 0) +} + +///| +test "final result transfer precedes revocation and preserves stdout" { + let stdout_drops = Ref(0) + let context = OwnershipContext::new(no_raw_drop) + let owned = context.own_result_with_cleanup( + { result: None, stdout: Some(counted_stream(stdout_drops)) }, + fn(result) { + match result.stdout { + Some(stdout) => stdout.drop_sync() + None => () + } + }, + ) + let returned = owned.take_for_final() + assert_true(returned is Ok(_)) + context.revoke() + assert_eq(stdout_drops.val, 0) + match returned { + Ok(result) => + match result.stdout { + Some(stdout) => stdout.drop_sync() + None => fail("final result did not preserve stdout") + } + Err(_) => fail("final result transfer unexpectedly failed") + } + assert_eq(stdout_drops.val, 1) +} + +///| +test "fake backend supports sequential calls and clears active state" { + run_component_async(async fn() { + let calls = Ref(0) + let underlying = new_underlying_tool( + (_, _, _) => { + calls.val = calls.val + 1 + Ok({ result: None, stdout: None }) + }, + no_raw_drop, + ) + let input = @schema.try_into_typed_schema_value(()) + let first = underlying.invoke([], input, None) + let second = underlying.invoke([], input, None) + assert_true(first is Ok(_)) + assert_true(second is Ok(_)) + assert_eq(calls.val, 2) + assert_true(!underlying.ownership.state.val.active) + match first { + Ok(result) => ignore(result.drop()) + Err(_) => () + } + match second { + Ok(result) => ignore(result.drop()) + Err(_) => () + } + }) +} + +///| +test "fake backend overlap is rejected while the first call is suspended" { + run_component_async(async fn() { + let (started, started_promise) = @async-core.Future::new() + let (release, release_promise) = @async-core.Future::new() + let underlying = new_underlying_tool( + async fn(_, _, _) { + ignore(started_promise.complete(())) + release.get() + Ok({ result: None, stdout: None }) + }, + no_raw_drop, + ) + let input = @schema.try_into_typed_schema_value(()) + @async-core.with_task_group(async fn(group) { + let first = group.spawn(async fn() { underlying.invoke([], input, None) }) + started.get() + let overlap = underlying.invoke([], input, None) + assert_true(overlap is Err(InvalidInput(_))) + ignore(release_promise.complete(())) + match first.wait() { + Ok(result) => ignore(result.drop()) + Err(_) => fail("first invocation unexpectedly failed") + } + }) + assert_true(!underlying.ownership.state.val.active) + }) +} + +///| +test "revocation during an active call delays and deduplicates raw drop" { + run_component_async(async fn() { + let raw_drops = Ref(0) + let (started, started_promise) = @async-core.Future::new() + let (release, release_promise) = @async-core.Future::new() + let underlying = new_underlying_tool( + async fn(_, _, _) { + ignore(started_promise.complete(())) + release.get() + Ok({ result: None, stdout: None }) + }, + fn() { raw_drops.val = raw_drops.val + 1 }, + ) + let input = @schema.try_into_typed_schema_value(()) + @async-core.with_task_group(async fn(group) { + let call = group.spawn(async fn() { underlying.invoke([], input, None) }) + started.get() + underlying.revoke() + assert_eq(raw_drops.val, 0) + ignore(release_promise.complete(())) + match call.wait() { + Ok(result) => assert_true(result.drop() is Err(_)) + Err(_) => fail("active invocation unexpectedly failed") + } + }) + assert_true(!underlying.ownership.state.val.active) + assert_eq(raw_drops.val, 1) + underlying.revoke() + assert_eq(raw_drops.val, 1) + }) +} + +///| +test "backend protocol and raised errors both clear active state" { + run_component_async(async fn() { + let input = @schema.try_into_typed_schema_value(()) + let protocol_error = new_underlying_tool( + (_, _, _) => { + Err(@toolCommon.ToolError::InvalidInput("backend rejected input")) + }, + no_raw_drop, + ) + let result = protocol_error.invoke([], input, None) + assert_true(result is Err(InvalidInput("backend rejected input"))) + assert_true(!protocol_error.ownership.state.val.active) + + let raised_error = new_underlying_tool( + (_, _, _) => raise FakeBackendFailure, + no_raw_drop, + ) + try raised_error.invoke([], input, None) catch { + FakeBackendFailure => () + _ => fail("unexpected raised backend error") + } noraise { + _ => fail("raised backend error unexpectedly returned") + } + assert_true(!raised_error.ownership.state.val.active) + }) +} + +///| +test "cancelling a suspended backend call clears active state" { + run_component_async(async fn() { + let (started, started_promise) = @async-core.Future::new() + let (blocked, _blocked_promise) = @async-core.Future::new() + let underlying = new_underlying_tool( + async fn(_, _, _) { + ignore(started_promise.complete(())) + blocked.get() + Ok({ result: None, stdout: None }) + }, + no_raw_drop, + ) + let input = @schema.try_into_typed_schema_value(()) + @async-core.with_task_group(async fn(group) { + let call = group.spawn(async fn() { underlying.invoke([], input, None) }) + started.get() + call.cancel() + try call.wait() catch { + @async-core.Cancelled::Cancelled => () + _ => fail("unexpected cancellation error") + } noraise { + _ => fail("cancelled invocation unexpectedly returned") + } + }) + assert_true(!underlying.ownership.state.val.active) + }) +} + +///| +test "scoped underlying teardown runs after normal and raised group exits" { + run_component_async(async fn() { + let normal_drops = Ref(0) + @async-core.with_task_group(async fn(group) { + let _underlying = new_scoped_underlying_tool( + (_, _, _) => Ok({ result: None, stdout: None }), + fn() { normal_drops.val = normal_drops.val + 1 }, + group, + ) + assert_eq(normal_drops.val, 0) + }) + assert_eq(normal_drops.val, 1) + + let raised_drops = Ref(0) + try + @async-core.with_task_group(async fn(group) { + let _underlying = new_scoped_underlying_tool( + (_, _, _) => Ok({ result: None, stdout: None }), + fn() { raised_drops.val = raised_drops.val + 1 }, + group, + ) + raise FakeBackendFailure + }) + catch { + FakeBackendFailure => () + _ => fail("unexpected scoped group error") + } noraise { + _ => fail("raised scoped group unexpectedly returned") + } + assert_eq(raised_drops.val, 1) + }) +} + +///| +test "enclosing group cancellation settles active call before scoped raw drop" { + run_component_async(async fn() { + let raw_drops = Ref(0) + let active_at_drop = Ref(true) + let underlying_holder : Ref[UnderlyingTool?] = Ref(None) + let (started, started_promise) = @async-core.Future::new() + let (blocked, _blocked_promise) = @async-core.Future::new() + @async-core.with_task_group(async fn(outer_group) { + let scoped = outer_group.spawn(async fn() { + @async-core.with_task_group(async fn(inner_group) { + let underlying = new_scoped_underlying_tool( + async fn(_, _, _) { + ignore(started_promise.complete(())) + blocked.get() + Ok({ result: None, stdout: None }) + }, + fn() { + match underlying_holder.val { + Some(underlying) => + active_at_drop.val = underlying.ownership.state.val.active + None => active_at_drop.val = true + } + raw_drops.val = raw_drops.val + 1 + }, + inner_group, + ) + underlying_holder.val = Some(underlying) + let input = @schema.try_into_typed_schema_value(()) + try underlying.invoke([], input, None) catch { + @async-core.Cancelled::Cancelled => + raise @async-core.Cancelled::Cancelled + error => raise error + } noraise { + _ => () + } + }) + }) + started.get() + scoped.cancel() + try scoped.wait() catch { + @async-core.Cancelled::Cancelled => () + _ => fail("unexpected enclosing-group cancellation error") + } noraise { + _ => fail("cancelled scoped invocation unexpectedly returned") + } + }) + assert_eq(raw_drops.val, 1) + assert_true(!active_at_drop.val) + }) +} diff --git a/sdks/moonbit/golem_sdk/tool/client.mbt b/sdks/moonbit/golem_sdk/tool/client.mbt index 259dd72d72..a6d93e2782 100644 --- a/sdks/moonbit/golem_sdk/tool/client.mbt +++ b/sdks/moonbit/golem_sdk/tool/client.mbt @@ -1,6 +1,3 @@ -///| -pub(all) enum NoToolError {} - ///| pub(all) enum RpcError { Protocol(String) @@ -15,12 +12,6 @@ pub(all) enum ToolError[E] { Tool(E) } -///| -pub(all) struct InvocationResult { - result : @model.TypedSchemaValue? - stdout : @async-core.Stream[Byte]? -} - ///| pub(all) struct ToolClient { rpc : @toolHost.ToolRpc @@ -85,15 +76,19 @@ pub async fn[E] invoke_and_await( stdin : @async-core.Stream[Byte]?, decode_error : (@model.TypedSchemaValue) -> Result[E, String], ) -> Result[InvocationResult, ToolError[E]] { - let wire_input = @model.typed_schema_value_to_wit(input) catch { - e => return Err(tool_protocol_error("failed to encode tool input: \{e}")) + let wire_input = match @toolCore.encode_typed_input(input) { + Ok(encoded) => encoded + Err(error) => return Err(tool_protocol_error(error)) } let wire_result = match rpc.invoke_and_await(command_path, wire_input, stdin) { Ok(result) => result Err(e) => return Err(map_rpc_error(e, decode_error)) } - decode_invocation_result(wire_result) + match @toolCore.decode_invocation_result(wire_result) { + Ok(result) => Ok(result) + Err(error) => Err(tool_protocol_error(error)) + } } ///| @@ -130,33 +125,13 @@ pub async fn invoke_and_await_no_tool_error( }) } -///| -fn[E] decode_invocation_result( - result : @toolCommon.InvocationResult, -) -> Result[InvocationResult, ToolError[E]] { - let decoded = match result.result { - Some(value) => { - let decoded_value = @model.typed_schema_value_from_wit(value) catch { - e => - return Err(tool_protocol_error("failed to decode tool result: \{e}")) - } - Some(decoded_value) - } - None => None - } - Ok({ result: decoded, stdout: result.stdout }) -} - ///| pub fn[T : @schema.FromSchema, E] decode_result_with_stdout( result : InvocationResult, ) -> Result[(T, @async-core.Stream[Byte]), ToolError[E]] { - let stdout = expect_stdout(result.stdout) - let value = decode_expected_value(result.result) - match (stdout, value) { - (Ok(stdout), Ok(value)) => Ok((value, stdout)) - (Err(e), _) => Err(e) - (_, Err(e)) => Err(e) + match @toolCore.project_result_with_stdout(result) { + Ok(projected) => Ok(projected) + Err(error) => Err(tool_protocol_error(error)) } } @@ -164,9 +139,9 @@ pub fn[T : @schema.FromSchema, E] decode_result_with_stdout( pub fn[T : @schema.FromSchema, E] decode_result_value( result : InvocationResult, ) -> Result[T, ToolError[E]] { - match expect_no_stdout(result.stdout) { - Err(e) => Err(e) - Ok(_) => decode_expected_value(result.result) + match @toolCore.project_result_value(result) { + Ok(value) => Ok(value) + Err(error) => Err(tool_protocol_error(error)) } } @@ -174,11 +149,9 @@ pub fn[T : @schema.FromSchema, E] decode_result_value( pub fn[E] decode_result_stdout_only( result : InvocationResult, ) -> Result[@async-core.Stream[Byte], ToolError[E]] { - let stdout = expect_stdout(result.stdout) - match (stdout, expect_no_value(result.result)) { - (Ok(stdout), Ok(_)) => Ok(stdout) - (Err(e), _) => Err(e) - (_, Err(e)) => Err(e) + match @toolCore.project_result_stdout_only(result) { + Ok(stdout) => Ok(stdout) + Err(error) => Err(tool_protocol_error(error)) } } @@ -186,9 +159,9 @@ pub fn[E] decode_result_stdout_only( pub fn[E] decode_result_empty( result : InvocationResult, ) -> Result[Unit, ToolError[E]] { - match expect_no_stdout(result.stdout) { - Err(e) => Err(e) - Ok(_) => expect_no_value(result.result) + match @toolCore.project_result_empty(result) { + Ok(_) => Ok(()) + Err(error) => Err(tool_protocol_error(error)) } } @@ -246,30 +219,11 @@ pub fn[E] tool_protocol_error(message : String) -> ToolError[E] { ToolError::Rpc(RpcError::Protocol(message)) } -///| -fn[T : @schema.FromSchema, E] decode_expected_value( - value : @model.TypedSchemaValue?, -) -> Result[T, ToolError[E]] { - let value = match expect_value(value) { - Ok(value) => value - Err(e) => return Err(e) - } - try @schema.from_value_as(value.value) catch { - e => Err(tool_protocol_error("failed to decode tool result: \{e}")) - } noraise { - decoded => Ok(decoded) - } -} - ///| fn[E : @schema.FromSchema] decode_custom_tool_error( value : @model.TypedSchemaValue, ) -> Result[E, String] { - try @schema.from_value_as(value.value) catch { - e => Err("failed to decode remote tool error: \{e}") - } noraise { - decoded => Ok(decoded) - } + @toolCore.decode_custom_error(value) } ///| @@ -298,13 +252,17 @@ fn[E] map_remote_tool_error( ) -> ToolError[E] { match error { @toolCommon.ToolError::CustomError(value) => { - let decoded = @model.typed_schema_value_from_wit(value) catch { - e => - return tool_protocol_error("failed to decode remote tool error: \{e}") + let decoded = match + @toolCore.decode_typed_value(value, "remote tool error") { + Ok(decoded) => decoded + Err(message) => return tool_protocol_error(message) } match decode_error(decoded) { Ok(error) => ToolError::Tool(error) - Err(message) => ToolError::Rpc(RpcError::Protocol(message)) + Err(message) => { + @model.drop_owned_capabilities(decoded.value) + ToolError::Rpc(RpcError::Protocol(message)) + } } } other => diff --git a/sdks/moonbit/golem_sdk/tool/core.mbt b/sdks/moonbit/golem_sdk/tool/core.mbt new file mode 100644 index 0000000000..b97990d06d --- /dev/null +++ b/sdks/moonbit/golem_sdk/tool/core.mbt @@ -0,0 +1,64 @@ +///| +pub using @toolCore { + type Principal, + type NoToolError, + type ToolBuildError, + type ToolDef, + type CommandNodeDef, + type GlobalsDef, + type CommandBodyDef, + type PositionalsDef, + type PositionalDef, + type TailPositionalDef, + type OptionSpecDef, + type OptionShapeDef, + type RepeatableListShapeDef, + type RepeatableMapShapeDef, + type RefDef, + type ValueIsRefDef, + type ValueIsLiteralDef, + type RefGroupDef, + type ImpliesDef, + type ForbidsDef, + type ConstraintDef, + type ResultSpecDef, + type ErrorCaseDef, + type ToolLiteral, + type CanonicalInputField, + type CanonicalInputValue, + type CanonicalInputModel, + type InvocationResult, + trait ToolErrorSchema, + new_stdout, + register_tool_def, + register_tool_def_invoker, + register_subtool_def_invoker, + register_wire_tool, + register_wire_tool_invoker, + discover_tools, + get_registered_tool, + invoke_registered_tool, + invoke_registered_subtool, + refine_text, + refine_path, + refine_url, + refine_numeric, + tool_name, + literal_to_schema_value, + value_is_literal_to_schema_value, + render_help, + render_argument_help, + resolve_command_path, + decode_invocation_input, + decode_param, + encode_invocation_input, + encode_result_value, + invocation_result_empty, + invocation_result_value, + invocation_result_stdout, + invocation_result_value_with_stdout, + decode_canonical_input, + decode_canonical_field, + build_canonical_input, + forward_canonical_input, +} diff --git a/sdks/moonbit/golem_sdk/tool/moon.pkg b/sdks/moonbit/golem_sdk/tool/moon.pkg index 482067d02b..321ec41c8d 100644 --- a/sdks/moonbit/golem_sdk/tool/moon.pkg +++ b/sdks/moonbit/golem_sdk/tool/moon.pkg @@ -1,17 +1,12 @@ import { "golemcloud/golem_sdk/async-core", - "golemcloud/golem_sdk/interface/golem/agent/common" @agentCommon, - "golemcloud/golem_sdk/interface/golem/core/types", "golemcloud/golem_sdk/interface/golem/tool/common" @toolCommon, "golemcloud/golem_sdk/interface/golem/tool/host" @toolHost, "golemcloud/golem_sdk/schema", "golemcloud/golem_sdk/schema_model" @model, - "moonbitlang/core/strconv", + "golemcloud/golem_sdk/tool-core" @toolCore, } -import { - "golemcloud/golem_sdk/schema", - "golemcloud/golem_sdk/schema_model" @model, -} for "test" - warnings = "-44" + +supported_targets = "+wasm" diff --git a/sdks/moonbit/golem_sdk/tool/pkg.generated.mbti b/sdks/moonbit/golem_sdk/tool/pkg.generated.mbti index fb5ee0294c..9b4f192d57 100644 --- a/sdks/moonbit/golem_sdk/tool/pkg.generated.mbti +++ b/sdks/moonbit/golem_sdk/tool/pkg.generated.mbti @@ -7,27 +7,28 @@ import { "golemcloud/golem_sdk/interface/golem/tool/host", "golemcloud/golem_sdk/schema", "golemcloud/golem_sdk/schema_model", + "golemcloud/golem_sdk/tool-core", "moonbitlang/core/debug", } // Values -pub fn build_canonical_input(CanonicalInputModel, Array[(String, @schema_model.SchemaValue)]) -> @schema_model.TypedSchemaValue raise ToolBuildError +pub fn build_canonical_input(@tool-core.CanonicalInputModel, Array[(String, @schema_model.SchemaValue)]) -> @schema_model.TypedSchemaValue raise @tool-core.ToolBuildError -pub fn[T : @schema.IntoSchema + @schema.FromSchema] decode_canonical_field(Array[CanonicalInputValue], String, String) -> T raise @golemcloud/golem_sdk/interface/golem/tool/common.ToolError +pub fn[T : @schema.IntoSchema + @schema.FromSchema] decode_canonical_field(Array[@tool-core.CanonicalInputValue], String, String) -> T raise @golemcloud/golem_sdk/interface/golem/tool/common.ToolError -pub fn decode_canonical_input(ToolDef, Int, @types.TypedSchemaValue, String) -> Array[CanonicalInputValue] raise @golemcloud/golem_sdk/interface/golem/tool/common.ToolError +pub fn decode_canonical_input(@tool-core.ToolDef, Int, @types.TypedSchemaValue, String) -> Array[@tool-core.CanonicalInputValue] raise @golemcloud/golem_sdk/interface/golem/tool/common.ToolError pub fn decode_invocation_input(@types.TypedSchemaValue, Int, String) -> Array[@schema_model.SchemaValue] raise @golemcloud/golem_sdk/interface/golem/tool/common.ToolError pub fn[T : @schema.FromSchema] decode_param(Array[@schema_model.SchemaValue], Int, String) -> T raise @golemcloud/golem_sdk/interface/golem/tool/common.ToolError -pub fn[E] decode_result_empty(InvocationResult) -> Result[Unit, ToolError[E]] +pub fn[E] decode_result_empty(@tool-core.InvocationResult) -> Result[Unit, ToolError[E]] -pub fn[E] decode_result_stdout_only(InvocationResult) -> Result[@async-core.Stream[Byte], ToolError[E]] +pub fn[E] decode_result_stdout_only(@tool-core.InvocationResult) -> Result[@async-core.Stream[Byte], ToolError[E]] -pub fn[T : @schema.FromSchema, E] decode_result_value(InvocationResult) -> Result[T, ToolError[E]] +pub fn[T : @schema.FromSchema, E] decode_result_value(@tool-core.InvocationResult) -> Result[T, ToolError[E]] -pub fn[T : @schema.FromSchema, E] decode_result_with_stdout(InvocationResult) -> Result[(T, @async-core.Stream[Byte]), ToolError[E]] +pub fn[T : @schema.FromSchema, E] decode_result_with_stdout(@tool-core.InvocationResult) -> Result[(T, @async-core.Stream[Byte]), ToolError[E]] pub fn discover_tools() -> Array[@golemcloud/golem_sdk/interface/golem/tool/common.Tool] @@ -43,7 +44,7 @@ pub fn[E] expect_stdout(@async-core.Stream[Byte]?) -> Result[@async-core.Stream[ pub fn[E] expect_value(@schema_model.TypedSchemaValue?) -> Result[@schema_model.TypedSchemaValue, ToolError[E]] -pub fn forward_canonical_input(Array[CanonicalInputValue], ToolDef, Int) -> @types.TypedSchemaValue raise @golemcloud/golem_sdk/interface/golem/tool/common.ToolError +pub fn forward_canonical_input(Array[@tool-core.CanonicalInputValue], @tool-core.ToolDef, Int) -> @types.TypedSchemaValue raise @golemcloud/golem_sdk/interface/golem/tool/common.ToolError pub fn get_registered_tool(String) -> Result[@golemcloud/golem_sdk/interface/golem/tool/common.Tool, @golemcloud/golem_sdk/interface/golem/tool/common.ToolError] @@ -55,282 +56,134 @@ pub fn[T : @schema.IntoSchema] invocation_result_value(T) -> @golemcloud/golem_s pub fn[T : @schema.IntoSchema] invocation_result_value_with_stdout(T, @async-core.Stream[Byte]) -> @golemcloud/golem_sdk/interface/golem/tool/common.InvocationResult raise @golemcloud/golem_sdk/interface/golem/tool/common.ToolError -pub async fn[E] invoke_and_await(@host.ToolRpc, Array[String], @schema_model.TypedSchemaValue, @async-core.Stream[Byte]?, (@schema_model.TypedSchemaValue) -> Result[E, String]) -> Result[InvocationResult, ToolError[E]] +pub async fn[E] invoke_and_await(@host.ToolRpc, Array[String], @schema_model.TypedSchemaValue, @async-core.Stream[Byte]?, (@schema_model.TypedSchemaValue) -> Result[E, String]) -> Result[@tool-core.InvocationResult, ToolError[E]] -pub async fn invoke_and_await_no_tool_error(@host.ToolRpc, Array[String], @schema_model.TypedSchemaValue, @async-core.Stream[Byte]?) -> Result[InvocationResult, ToolError[NoToolError]] +pub async fn invoke_and_await_no_tool_error(@host.ToolRpc, Array[String], @schema_model.TypedSchemaValue, @async-core.Stream[Byte]?) -> Result[@tool-core.InvocationResult, ToolError[@tool-core.NoToolError]] -pub async fn[E : @schema.FromSchema] invoke_and_await_payload_error(@host.ToolRpc, Array[String], @schema_model.TypedSchemaValue, @async-core.Stream[Byte]?) -> Result[InvocationResult, ToolError[E]] +pub async fn[E : @schema.FromSchema] invoke_and_await_payload_error(@host.ToolRpc, Array[String], @schema_model.TypedSchemaValue, @async-core.Stream[Byte]?) -> Result[@tool-core.InvocationResult, ToolError[E]] -pub async fn[E : ToolErrorSchema] invoke_and_await_tool_error(@host.ToolRpc, Array[String], @schema_model.TypedSchemaValue, @async-core.Stream[Byte]?) -> Result[InvocationResult, ToolError[E]] +pub async fn[E : @tool-core.ToolErrorSchema] invoke_and_await_tool_error(@host.ToolRpc, Array[String], @schema_model.TypedSchemaValue, @async-core.Stream[Byte]?) -> Result[@tool-core.InvocationResult, ToolError[E]] -pub fn invoke_registered_subtool(String, Array[String], Array[CanonicalInputValue], @async-core.Stream[Byte]?, @golemcloud/golem_sdk/interface/golem/agent/common.Principal) -> Result[@golemcloud/golem_sdk/interface/golem/tool/common.InvocationResult, @golemcloud/golem_sdk/interface/golem/tool/common.ToolError] +pub fn invoke_registered_subtool(String, Array[String], Array[@tool-core.CanonicalInputValue], @async-core.Stream[Byte]?, @golemcloud/golem_sdk/interface/golem/agent/common.Principal) -> Result[@golemcloud/golem_sdk/interface/golem/tool/common.InvocationResult, @golemcloud/golem_sdk/interface/golem/tool/common.ToolError] pub fn invoke_registered_tool(String, Array[String], @types.TypedSchemaValue, @async-core.Stream[Byte]?, @golemcloud/golem_sdk/interface/golem/agent/common.Principal) -> Result[@golemcloud/golem_sdk/interface/golem/tool/common.InvocationResult, @golemcloud/golem_sdk/interface/golem/tool/common.ToolError] -pub fn literal_to_schema_value(@schema_model.SchemaGraph, ToolLiteral) -> @schema_model.SchemaValue raise ToolBuildError +pub fn literal_to_schema_value(@schema_model.SchemaGraph, @tool-core.ToolLiteral) -> @schema_model.SchemaValue raise @tool-core.ToolBuildError pub fn new_stdout() -> (@async-core.Stream[Byte], @async-core.Sink[Byte]) -pub fn refine_numeric(@schema_model.SchemaGraph, String?, String?, String?) -> @schema_model.SchemaGraph raise ToolBuildError +pub fn refine_numeric(@schema_model.SchemaGraph, String?, String?, String?) -> @schema_model.SchemaGraph raise @tool-core.ToolBuildError -pub fn refine_path(@schema_model.SchemaGraph, @types.PathDirection?, @types.PathKind?, Array[String]?) -> @schema_model.SchemaGraph raise ToolBuildError +pub fn refine_path(@schema_model.SchemaGraph, @types.PathDirection?, @types.PathKind?, Array[String]?) -> @schema_model.SchemaGraph raise @tool-core.ToolBuildError -pub fn refine_text(@schema_model.SchemaGraph, String?, UInt?, UInt?) -> @schema_model.SchemaGraph raise ToolBuildError +pub fn refine_text(@schema_model.SchemaGraph, String?, UInt?, UInt?) -> @schema_model.SchemaGraph raise @tool-core.ToolBuildError -pub fn refine_url(@schema_model.SchemaGraph, Array[String]?) -> @schema_model.SchemaGraph raise ToolBuildError +pub fn refine_url(@schema_model.SchemaGraph, Array[String]?) -> @schema_model.SchemaGraph raise @tool-core.ToolBuildError -pub fn register_subtool_def_invoker(ToolDef, (Array[String], @types.TypedSchemaValue, @async-core.Stream[Byte]?, @golemcloud/golem_sdk/interface/golem/agent/common.Principal) -> Result[@golemcloud/golem_sdk/interface/golem/tool/common.InvocationResult, @golemcloud/golem_sdk/interface/golem/tool/common.ToolError]) -> Unit raise ToolBuildError +pub fn register_subtool_def_invoker(@tool-core.ToolDef, (Array[String], @types.TypedSchemaValue, @async-core.Stream[Byte]?, @golemcloud/golem_sdk/interface/golem/agent/common.Principal) -> Result[@golemcloud/golem_sdk/interface/golem/tool/common.InvocationResult, @golemcloud/golem_sdk/interface/golem/tool/common.ToolError]) -> Unit raise @tool-core.ToolBuildError -pub fn register_tool_def(ToolDef) -> Unit raise ToolBuildError +pub fn register_tool_def(@tool-core.ToolDef) -> Unit raise @tool-core.ToolBuildError -pub fn register_tool_def_invoker(ToolDef, (Array[String], @types.TypedSchemaValue, @async-core.Stream[Byte]?, @golemcloud/golem_sdk/interface/golem/agent/common.Principal) -> Result[@golemcloud/golem_sdk/interface/golem/tool/common.InvocationResult, @golemcloud/golem_sdk/interface/golem/tool/common.ToolError]) -> Unit raise ToolBuildError +pub fn register_tool_def_invoker(@tool-core.ToolDef, (Array[String], @types.TypedSchemaValue, @async-core.Stream[Byte]?, @golemcloud/golem_sdk/interface/golem/agent/common.Principal) -> Result[@golemcloud/golem_sdk/interface/golem/tool/common.InvocationResult, @golemcloud/golem_sdk/interface/golem/tool/common.ToolError]) -> Unit raise @tool-core.ToolBuildError -pub fn register_wire_tool(@golemcloud/golem_sdk/interface/golem/tool/common.Tool) -> Unit raise ToolBuildError +pub fn register_wire_tool(@golemcloud/golem_sdk/interface/golem/tool/common.Tool) -> Unit raise @tool-core.ToolBuildError -pub fn register_wire_tool_invoker(@golemcloud/golem_sdk/interface/golem/tool/common.Tool, (Array[String], @types.TypedSchemaValue, @async-core.Stream[Byte]?, @golemcloud/golem_sdk/interface/golem/agent/common.Principal) -> Result[@golemcloud/golem_sdk/interface/golem/tool/common.InvocationResult, @golemcloud/golem_sdk/interface/golem/tool/common.ToolError]) -> Unit raise ToolBuildError +pub fn register_wire_tool_invoker(@golemcloud/golem_sdk/interface/golem/tool/common.Tool, (Array[String], @types.TypedSchemaValue, @async-core.Stream[Byte]?, @golemcloud/golem_sdk/interface/golem/agent/common.Principal) -> Result[@golemcloud/golem_sdk/interface/golem/tool/common.InvocationResult, @golemcloud/golem_sdk/interface/golem/tool/common.ToolError]) -> Unit raise @tool-core.ToolBuildError -pub fn render_argument_help(@golemcloud/golem_sdk/interface/golem/tool/common.Tool, Array[String], String) -> Result[String, ToolBuildError] +pub fn render_argument_help(@golemcloud/golem_sdk/interface/golem/tool/common.Tool, Array[String], String) -> Result[String, @tool-core.ToolBuildError] -pub fn render_help(@golemcloud/golem_sdk/interface/golem/tool/common.Tool, Array[String]) -> Result[String, ToolBuildError] +pub fn render_help(@golemcloud/golem_sdk/interface/golem/tool/common.Tool, Array[String]) -> Result[String, @tool-core.ToolBuildError] -pub fn resolve_command_path(@golemcloud/golem_sdk/interface/golem/tool/common.Tool, Array[String]) -> Result[Int, ToolBuildError] +pub fn resolve_command_path(@golemcloud/golem_sdk/interface/golem/tool/common.Tool, Array[String]) -> Result[Int, @tool-core.ToolBuildError] -pub fn tool_name(@golemcloud/golem_sdk/interface/golem/tool/common.Tool) -> Result[String, ToolBuildError] +pub fn tool_name(@golemcloud/golem_sdk/interface/golem/tool/common.Tool) -> Result[String, @tool-core.ToolBuildError] pub fn[E] tool_protocol_error(String) -> ToolError[E] -pub fn value_is_literal_to_schema_value(@schema_model.SchemaGraph, ToolLiteral) -> @schema_model.SchemaValue raise ToolBuildError +pub fn value_is_literal_to_schema_value(@schema_model.SchemaGraph, @tool-core.ToolLiteral) -> @schema_model.SchemaValue raise @tool-core.ToolBuildError // Errors -pub suberror ToolBuildError { - EmptyCommandTree - CommandNotFound(String) - InvalidCommandTree(String) - SubtreeRootNameMismatch(String, String) - InheritedGlobalConflict(String, String) - MissingCanonicalInputField(String) - SchemaModelError(String) - LiteralTypeMismatch(String) - InvalidLiteral(String) - RefinementTypeMismatch(String, String) - InvalidNumericBound(String) - ValueIsTypeMismatch(String) - UnresolvedValueIsLiteral(String) -} derive(Eq, @debug.Debug) -pub fn ToolBuildError::schema_model(String) -> Self // Types and methods -pub(all) struct CanonicalInputField { - name : String - aliases : Array[String] - type_ : @schema_model.SchemaGraph -} derive(Eq) - -pub(all) struct CanonicalInputModel { - fields : Array[CanonicalInputField] - record_graph : @schema_model.SchemaGraph -} derive(Eq) - -pub(all) struct CanonicalInputValue { - name : String - aliases : Array[String] - type_ : @schema_model.SchemaGraph - value : @schema_model.SchemaValue -} derive(Eq) - -pub(all) struct CommandBodyDef { - positionals : PositionalsDef - options : Array[OptionSpecDef] - flags : Array[@golemcloud/golem_sdk/interface/golem/tool/common.FlagSpec] - constraints : Array[ConstraintDef] - stdin : @golemcloud/golem_sdk/interface/golem/tool/common.StreamSpec? - stdout : @golemcloud/golem_sdk/interface/golem/tool/common.StreamSpec? - result : ResultSpecDef? - errors : Array[ErrorCaseDef] - annotations : @golemcloud/golem_sdk/interface/golem/tool/common.CommandAnnotations? -} +pub(all) enum RpcError { + Protocol(String) + Denied(String) + NotFound(String) + RemoteInternal(String) +} derive(Eq, @debug.Debug) -pub(all) struct CommandNodeDef { - name : String - aliases : Array[String] - doc : @golemcloud/golem_sdk/interface/golem/tool/common.Doc - globals : GlobalsDef - subcommands : Array[Int] - body : CommandBodyDef? +pub(all) struct ToolClient { + rpc : @host.ToolRpc } +pub fn ToolClient::drop(Self) -> Unit +pub async fn[E] ToolClient::invoke_and_await(Self, Array[String], @schema_model.TypedSchemaValue, @async-core.Stream[Byte]?, (@schema_model.TypedSchemaValue) -> Result[E, String]) -> Result[@tool-core.InvocationResult, ToolError[E]] +pub async fn ToolClient::invoke_and_await_no_tool_error(Self, Array[String], @schema_model.TypedSchemaValue, @async-core.Stream[Byte]?) -> Result[@tool-core.InvocationResult, ToolError[@tool-core.NoToolError]] +pub async fn[E : @schema.FromSchema] ToolClient::invoke_and_await_payload_error(Self, Array[String], @schema_model.TypedSchemaValue, @async-core.Stream[Byte]?) -> Result[@tool-core.InvocationResult, ToolError[E]] +pub async fn[E : @tool-core.ToolErrorSchema] ToolClient::invoke_and_await_tool_error(Self, Array[String], @schema_model.TypedSchemaValue, @async-core.Stream[Byte]?) -> Result[@tool-core.InvocationResult, ToolError[E]] +pub fn ToolClient::new(String) -> Self -pub(all) enum ConstraintDef { - RequiresAll(Array[RefDef]) - AllOrNone(Array[RefDef]) - RequiresAny(Array[RefDef]) - MutexGroups(Array[RefGroupDef]) - Implies(ImpliesDef) - Forbids(ForbidsDef) +pub(all) enum ToolError[E] { + Rpc(RpcError) + Tool(E) } -pub(all) struct ErrorCaseDef { - name : String - doc : @golemcloud/golem_sdk/interface/golem/tool/common.Doc - kind : @golemcloud/golem_sdk/interface/golem/tool/common.ErrorKind - exit_code : Byte - payload : @schema_model.SchemaGraph? -} +// Type aliases +pub using @tool-core {type CanonicalInputField} -pub(all) struct ForbidsDef { - lhs_quant : @golemcloud/golem_sdk/interface/golem/tool/common.Quantifier - lhs : Array[RefDef] - rhs : Array[RefDef] -} +pub using @tool-core {type CanonicalInputModel} -pub(all) struct GlobalsDef { - options : Array[OptionSpecDef] - flags : Array[@golemcloud/golem_sdk/interface/golem/tool/common.FlagSpec] -} +pub using @tool-core {type CanonicalInputValue} -pub(all) struct ImpliesDef { - lhs_quant : @golemcloud/golem_sdk/interface/golem/tool/common.Quantifier - lhs : Array[RefDef] - rhs_quant : @golemcloud/golem_sdk/interface/golem/tool/common.Quantifier - rhs : Array[RefDef] -} +pub using @tool-core {type CommandBodyDef} -pub(all) struct InvocationResult { - result : @schema_model.TypedSchemaValue? - stdout : @async-core.Stream[Byte]? -} +pub using @tool-core {type CommandNodeDef} -pub(all) enum NoToolError { -} +pub using @tool-core {type ConstraintDef} -pub(all) enum OptionShapeDef { - Scalar(@schema_model.SchemaGraph) - OptionalScalar(@schema_model.SchemaGraph) - RepeatableList(RepeatableListShapeDef) - RepeatableMap(RepeatableMapShapeDef) -} +pub using @tool-core {type ErrorCaseDef} -pub(all) struct OptionSpecDef { - long : String - short : Char? - aliases : Array[String] - doc : @golemcloud/golem_sdk/interface/golem/tool/common.Doc - value_name : String? - shape : OptionShapeDef - default : @schema_model.SchemaValue? - required : Bool - env_var : String? -} +pub using @tool-core {type ForbidsDef} -pub(all) struct PositionalDef { - name : String - doc : @golemcloud/golem_sdk/interface/golem/tool/common.Doc - value_name : String? - type_ : @schema_model.SchemaGraph - default : @schema_model.SchemaValue? - required : Bool - accepts_stdio : Bool -} +pub using @tool-core {type GlobalsDef} -pub(all) struct PositionalsDef { - fixed : Array[PositionalDef] - tail : TailPositionalDef? -} +pub using @tool-core {type ImpliesDef} -pub(all) enum RefDef { - Present(String) - ValueIs(ValueIsRefDef) -} +pub using @tool-core {type InvocationResult} -pub(all) struct RefGroupDef { - refs : Array[RefDef] -} +pub using @tool-core {type NoToolError} -pub(all) struct RepeatableListShapeDef { - repetition : @golemcloud/golem_sdk/interface/golem/tool/common.Repetition - item_type : @schema_model.SchemaGraph -} +pub using @tool-core {type OptionShapeDef} -pub(all) struct RepeatableMapShapeDef { - repetition : @golemcloud/golem_sdk/interface/golem/tool/common.Repetition - map_type : @schema_model.SchemaGraph - duplicate_key_policy : @golemcloud/golem_sdk/interface/golem/tool/common.DuplicateKeyPolicy -} +pub using @tool-core {type OptionSpecDef} -pub(all) struct ResultSpecDef { - type_ : @schema_model.SchemaGraph - doc : @golemcloud/golem_sdk/interface/golem/tool/common.Doc - formatters : Array[@golemcloud/golem_sdk/interface/golem/tool/common.Formatter] - default_formatter : String -} +pub using @tool-core {type PositionalDef} -pub(all) enum RpcError { - Protocol(String) - Denied(String) - NotFound(String) - RemoteInternal(String) -} derive(Eq, @debug.Debug) +pub using @tool-core {type PositionalsDef} -pub(all) struct TailPositionalDef { - name : String - doc : @golemcloud/golem_sdk/interface/golem/tool/common.Doc - value_name : String? - item_type : @schema_model.SchemaGraph - min : UInt - max : UInt? - separator : String? - verbatim : Bool - accepts_stdio : Bool -} +pub using @golemcloud/golem_sdk/interface/golem/agent/common {type Principal} -pub(all) struct ToolClient { - rpc : @host.ToolRpc -} -pub fn ToolClient::drop(Self) -> Unit -pub async fn[E] ToolClient::invoke_and_await(Self, Array[String], @schema_model.TypedSchemaValue, @async-core.Stream[Byte]?, (@schema_model.TypedSchemaValue) -> Result[E, String]) -> Result[InvocationResult, ToolError[E]] -pub async fn ToolClient::invoke_and_await_no_tool_error(Self, Array[String], @schema_model.TypedSchemaValue, @async-core.Stream[Byte]?) -> Result[InvocationResult, ToolError[NoToolError]] -pub async fn[E : @schema.FromSchema] ToolClient::invoke_and_await_payload_error(Self, Array[String], @schema_model.TypedSchemaValue, @async-core.Stream[Byte]?) -> Result[InvocationResult, ToolError[E]] -pub async fn[E : ToolErrorSchema] ToolClient::invoke_and_await_tool_error(Self, Array[String], @schema_model.TypedSchemaValue, @async-core.Stream[Byte]?) -> Result[InvocationResult, ToolError[E]] -pub fn ToolClient::new(String) -> Self +pub using @tool-core {type RefDef} -pub(all) struct ToolDef { - version : String - commands : Array[CommandNodeDef] -} -pub fn ToolDef::canonical_input_fields(Self, Int) -> Array[CanonicalInputField] raise ToolBuildError -pub fn ToolDef::canonical_input_model(Self, Int) -> CanonicalInputModel raise ToolBuildError -pub fn ToolDef::command_index_by_path(Self, Array[String]) -> Int? -pub fn ToolDef::graft_subtree(Self, Self, String, GlobalsDef, String?, @golemcloud/golem_sdk/interface/golem/tool/common.Doc?, Array[String]?) -> Self raise ToolBuildError -pub fn ToolDef::normalize_inherited_globals(Self) -> Self raise ToolBuildError -pub fn ToolDef::to_tool(Self) -> @golemcloud/golem_sdk/interface/golem/tool/common.Tool raise ToolBuildError -pub fn ToolDef::tool_name(Self) -> Result[String, ToolBuildError] +pub using @tool-core {type RefGroupDef} -pub(all) enum ToolError[E] { - Rpc(RpcError) - Tool(E) -} +pub using @tool-core {type RepeatableListShapeDef} -pub(all) enum ToolLiteral { - Scalar(String) - List(Array[String]) - Map(Array[(String, String)]) -} derive(Eq, @debug.Debug) +pub using @tool-core {type RepeatableMapShapeDef} -pub(all) enum ValueIsLiteralDef { - Resolved(@schema_model.SchemaValue) - Deferred(ToolLiteral) -} +pub using @tool-core {type ResultSpecDef} -pub(all) struct ValueIsRefDef { - name : String - value : ValueIsLiteralDef -} +pub using @tool-core {type TailPositionalDef} -// Type aliases -pub using @golemcloud/golem_sdk/interface/golem/agent/common {type Principal} +pub using @tool-core {type ToolBuildError} + +pub using @tool-core {type ToolDef} + +pub using @tool-core {type ToolLiteral} + +pub using @tool-core {type ValueIsLiteralDef} + +pub using @tool-core {type ValueIsRefDef} + +pub using @tool-core {trait ToolErrorSchema} // Traits -pub(open) trait ToolErrorSchema { - fn error_cases() -> Result[Array[ErrorCaseDef], ToolBuildError] - fn to_error_payload_value(Self) -> Result[@schema_model.TypedSchemaValue, String] - fn from_error_payload_value(@schema_model.TypedSchemaValue) -> Result[Self, String] -} diff --git a/sdks/moonbit/golem_sdk/wit/main.wit b/sdks/moonbit/golem_sdk/wit/main.wit index c655cb2636..a21f2f2227 100644 --- a/sdks/moonbit/golem_sdk/wit/main.wit +++ b/sdks/moonbit/golem_sdk/wit/main.wit @@ -51,3 +51,62 @@ world agent-guest { export golem:api/save-snapshot@1.5.0; export golem:api/load-snapshot@1.5.0; } + +/// Pure tool middleware SDK world. This deliberately excludes ambient tool-host. +world tool-middleware-guest { + include golem:tool/tool-middleware@0.1.0; +} + +/// Combined agent, ordinary tool, and tool middleware SDK world. +world agent-tool-middleware-guest { + import golem:api/host@1.5.0; + import golem:core/types@2.0.0; + import golem:agent/host@2.0.0; + import golem:tool/host@0.1.0; + + import golem:rdbms/postgres@1.5.0; + import golem:rdbms/mysql@1.5.0; + import golem:rdbms/ignite2@1.5.0; + import golem:rdbms/types@1.5.0; + + import golem:websocket/client@1.5.0; + + import golem:api/context@1.5.0; + import golem:api/oplog@1.5.0; + import golem:api/retry@1.5.0; + import golem:durability/durability@1.6.0; + + import golem:quota/types@1.5.0; + import golem:secrets/types@0.1.0; + import golem:secrets/reveal@0.1.0; + + import wasi:blobstore/blobstore; + import wasi:blobstore/container; + import wasi:blobstore/types; + + import wasi:logging/logging; + + import wasi:keyvalue/eventual@0.1.0; + import wasi:keyvalue/eventual-batch@0.1.0; + import wasi:keyvalue/cache@0.1.0; + import wasi:keyvalue/types@0.1.0; + import wasi:keyvalue/wasi-keyvalue-error@0.1.0; + + import wasi:config/store@0.2.0-draft; + + import wasi:cli/environment@0.3.0; + import wasi:cli/stdout@0.2.6; + + import wasi:filesystem/types@0.3.0; + import wasi:filesystem/preopens@0.3.0; + + import wasi:http/types@0.3.0; + import wasi:http/client@0.3.0; + + include golem:agent/agent-guest@2.0.0; + export golem:tool/guest@0.1.0; + export golem:tool/tool-middleware-guest@0.1.0; + + export golem:api/save-snapshot@1.5.0; + export golem:api/load-snapshot@1.5.0; +} diff --git a/sdks/moonbit/golem_sdk/world/agent-tool-middleware-guest/README.md b/sdks/moonbit/golem_sdk/world/agent-tool-middleware-guest/README.md new file mode 100644 index 0000000000..3172b4b18e --- /dev/null +++ b/sdks/moonbit/golem_sdk/world/agent-tool-middleware-guest/README.md @@ -0,0 +1 @@ +Combined agent, ordinary tool, and tool middleware SDK world. \ No newline at end of file diff --git a/sdks/moonbit/golem_sdk/interface/wasi/cli/types/ffi.mbt b/sdks/moonbit/golem_sdk/world/agent-tool-middleware-guest/ffi_import.mbt similarity index 100% rename from sdks/moonbit/golem_sdk/interface/wasi/cli/types/ffi.mbt rename to sdks/moonbit/golem_sdk/world/agent-tool-middleware-guest/ffi_import.mbt diff --git a/sdks/moonbit/golem_sdk/world/agent-tool-middleware-guest/import.mbt b/sdks/moonbit/golem_sdk/world/agent-tool-middleware-guest/import.mbt new file mode 100644 index 0000000000..01e5518ad5 --- /dev/null +++ b/sdks/moonbit/golem_sdk/world/agent-tool-middleware-guest/import.mbt @@ -0,0 +1 @@ +// Generated by `wit-bindgen` 0.59.0. DO NOT EDIT! diff --git a/sdks/moonbit/golem_sdk/world/agent-tool-middleware-guest/moon.pkg b/sdks/moonbit/golem_sdk/world/agent-tool-middleware-guest/moon.pkg new file mode 100644 index 0000000000..e2a6033b7d --- /dev/null +++ b/sdks/moonbit/golem_sdk/world/agent-tool-middleware-guest/moon.pkg @@ -0,0 +1 @@ +warnings = "-44" diff --git a/sdks/moonbit/golem_sdk/world/agent-tool-middleware-guest/pkg.generated.mbti b/sdks/moonbit/golem_sdk/world/agent-tool-middleware-guest/pkg.generated.mbti new file mode 100644 index 0000000000..fefba66ec3 --- /dev/null +++ b/sdks/moonbit/golem_sdk/world/agent-tool-middleware-guest/pkg.generated.mbti @@ -0,0 +1,12 @@ +// Generated using `moon info`, DON'T EDIT IT +package "golemcloud/golem_sdk/world/agent-tool-middleware-guest" + +// Values + +// Errors + +// Types and methods + +// Type aliases + +// Traits diff --git a/sdks/moonbit/golem_sdk/world/tool-middleware-guest/README.md b/sdks/moonbit/golem_sdk/world/tool-middleware-guest/README.md new file mode 100644 index 0000000000..915c0d8eef --- /dev/null +++ b/sdks/moonbit/golem_sdk/world/tool-middleware-guest/README.md @@ -0,0 +1 @@ +Pure tool middleware SDK world. This deliberately excludes ambient tool-host. \ No newline at end of file diff --git a/sdks/moonbit/golem_sdk/world/tool-middleware-guest/ffi_import.mbt b/sdks/moonbit/golem_sdk/world/tool-middleware-guest/ffi_import.mbt new file mode 100644 index 0000000000..01e5518ad5 --- /dev/null +++ b/sdks/moonbit/golem_sdk/world/tool-middleware-guest/ffi_import.mbt @@ -0,0 +1 @@ +// Generated by `wit-bindgen` 0.59.0. DO NOT EDIT! diff --git a/sdks/moonbit/golem_sdk/world/tool-middleware-guest/import.mbt b/sdks/moonbit/golem_sdk/world/tool-middleware-guest/import.mbt new file mode 100644 index 0000000000..01e5518ad5 --- /dev/null +++ b/sdks/moonbit/golem_sdk/world/tool-middleware-guest/import.mbt @@ -0,0 +1 @@ +// Generated by `wit-bindgen` 0.59.0. DO NOT EDIT! diff --git a/sdks/moonbit/golem_sdk/world/tool-middleware-guest/moon.pkg b/sdks/moonbit/golem_sdk/world/tool-middleware-guest/moon.pkg new file mode 100644 index 0000000000..e2a6033b7d --- /dev/null +++ b/sdks/moonbit/golem_sdk/world/tool-middleware-guest/moon.pkg @@ -0,0 +1 @@ +warnings = "-44" diff --git a/sdks/moonbit/golem_sdk/world/tool-middleware-guest/pkg.generated.mbti b/sdks/moonbit/golem_sdk/world/tool-middleware-guest/pkg.generated.mbti new file mode 100644 index 0000000000..7a534da964 --- /dev/null +++ b/sdks/moonbit/golem_sdk/world/tool-middleware-guest/pkg.generated.mbti @@ -0,0 +1,12 @@ +// Generated using `moon info`, DON'T EDIT IT +package "golemcloud/golem_sdk/world/tool-middleware-guest" + +// Values + +// Errors + +// Types and methods + +// Type aliases + +// Traits diff --git a/sdks/moonbit/golem_sdk_example1/README.mbt.md b/sdks/moonbit/golem_sdk_example1/README.mbt.md index bd9d90359c..e2d784ec04 100644 --- a/sdks/moonbit/golem_sdk_example1/README.mbt.md +++ b/sdks/moonbit/golem_sdk_example1/README.mbt.md @@ -1,6 +1,6 @@ # Golem SDK for MoonBit — Examples -Example agents built with the Golem SDK for MoonBit, targeting **Golem 1.4**. +Example agents and tool middleware built with MoonBit Golem SDK 0.5.x, targeting **Golem 1.6**. ## Agents @@ -27,18 +27,53 @@ iterating on this repository: ```sh cd ../golem_sdk_tools -moon run cmd -- agents ../golem_sdk_example1 +moon run cmd -- agents ../golem_sdk_example1 \ + --component-dir golem_moonbit_examples \ + --role ordinary ``` +## Tool middleware + +`golem_tool_middleware_examples/middleware.mbt` is a separate **pure middleware component**. It +contains: + +- `MessagePolicy`, a monomorphic policy that forwards allowed messages once and short-circuits + blocked messages without calling the underlying tool; +- `audit`, a universal pass-through that inspects runtime metadata and forwards opaque carriers; +- `FileAdapter`, a compact monomorphic adapter that presents `PublicFiles` while expecting + `Storage` from the next inner layer. + +The `moonbit-tool-middleware-local` template runs both generators with role `tool-middleware`, +embeds SDK world `tool-middleware-guest`, and produces +`golem_tool_middleware_examples.tool-middleware.wasm`. The package imports `tool-core` and +`tool-middleware`, but not ambient `tool`/`golem:tool/host`. + +Generated `golem_reexports.mbt`, `golem_tool_middlewares.mbt`, `.golem-sdk-role`, and the generated +entries in `moon.pkg` must not be edited manually. To regenerate this component directly: + +```sh +cd ../golem_sdk_tools +moon run cmd -- reexports ../golem_sdk \ + ../golem_sdk_example1/golem_tool_middleware_examples \ + --role tool-middleware +moon run cmd -- agents ../golem_sdk_example1 \ + --component-dir golem_tool_middleware_examples \ + --role tool-middleware +``` + +See the SDK and generator READMEs for the exact monomorphic/universal signatures, capability and +stream lifetime rules, same-package tool-shape limitation, and runtime ownership of placement and +chain ordering. + ## Building Requires [golem-cli](https://github.com/golemcloud/golem/releases), `wasm-tools`, and the MoonBit toolchain. ```sh -# Build for local (debug): +# Build both the ordinary and pure middleware components for local (debug): golem build -L -# Build for release: +# Build both components for release: golem build -L -P release ``` diff --git a/sdks/moonbit/golem_sdk_example1/golem.yaml b/sdks/moonbit/golem_sdk_example1/golem.yaml index d99649ba25..56e15247dd 100644 --- a/sdks/moonbit/golem_sdk_example1/golem.yaml +++ b/sdks/moonbit/golem_sdk_example1/golem.yaml @@ -24,27 +24,64 @@ componentTemplates: debug: default: true build: - - command: moon run cmd -- reexports ../golem_sdk ../golem_sdk_example1/{{ component_name | to_snake_case }} - dir: ../golem_sdk_tools - - command: moon run cmd -- agents ../golem_sdk_example1 - dir: ../golem_sdk_tools - - command: moon build --target wasm --release - - command: mkdir -p _build/wasm/debug - - command: wasm-tools component embed wit _build/wasm/release/build/{{ component_name | to_snake_case }}/{{ component_name | to_snake_case }}.wasm --encoding utf16 --output _build/wasm/debug/{{ component_name | to_snake_case }}.embed.wasm - - command: wasm-tools component new _build/wasm/debug/{{ component_name | to_snake_case }}.embed.wasm --output _build/wasm/debug/{{ component_name | to_snake_case }}.agent.wasm - componentWasm: _build/wasm/debug/{{ component_name | to_snake_case }}.agent.wasm + - command: moon run cmd -- reexports "{{ appRootDir }}/../golem_sdk" "{{ componentDir }}" --role ordinary + dir: "{{ appRootDir }}/../golem_sdk_tools" + - command: moon run cmd -- agents "{{ appRootDir }}" --component-dir "{{ componentDir }}" --role ordinary + dir: "{{ appRootDir }}/../golem_sdk_tools" + - command: moon -C "{{ appRootDir }}" build --target wasm + dir: "{{ appRootDir }}/../golem_sdk_tools" + - command: wasm-tools component embed "{{ appRootDir }}/../golem_sdk/wit" "{{ appRootDir }}/../_build/wasm/debug/build/golemcloud/golem_sdk_example1/{{ moonbitBuildPackagePath }}" --world agent-guest --encoding utf16 --output "{{ appRootDir }}/_build/wasm/debug/{{ componentName | to_snake_case }}.embed.wasm" + mkdirs: + - "{{ appRootDir }}/_build/wasm/debug" + - command: wasm-tools component new "{{ appRootDir }}/_build/wasm/debug/{{ componentName | to_snake_case }}.embed.wasm" --output "{{ appRootDir }}/_build/wasm/debug/{{ componentName | to_snake_case }}.agent.wasm" + componentWasm: "{{ appRootDir }}/_build/wasm/debug/{{ componentName | to_snake_case }}.agent.wasm" release: build: - - command: moon run cmd -- reexports ../golem_sdk ../golem_sdk_example1/{{ component_name | to_snake_case }} - dir: ../golem_sdk_tools - - command: moon run cmd -- agents ../golem_sdk_example1 - dir: ../golem_sdk_tools - - command: moon build --target wasm --release - - command: wasm-tools component embed wit _build/wasm/release/build/{{ component_name | to_snake_case }}/{{ component_name | to_snake_case }}.wasm --encoding utf16 --output _build/wasm/release/{{ component_name | to_snake_case }}.embed.wasm - - command: wasm-tools component new _build/wasm/release/{{ component_name | to_snake_case }}.embed.wasm --output _build/wasm/release/{{ component_name | to_snake_case }}.agent.wasm - componentWasm: _build/wasm/release/{{ component_name | to_snake_case }}.agent.wasm + - command: moon run cmd -- reexports "{{ appRootDir }}/../golem_sdk" "{{ componentDir }}" --role ordinary + dir: "{{ appRootDir }}/../golem_sdk_tools" + - command: moon run cmd -- agents "{{ appRootDir }}" --component-dir "{{ componentDir }}" --role ordinary + dir: "{{ appRootDir }}/../golem_sdk_tools" + - command: moon -C "{{ appRootDir }}" build --target wasm --release + dir: "{{ appRootDir }}/../golem_sdk_tools" + - command: wasm-tools component embed "{{ appRootDir }}/../golem_sdk/wit" "{{ appRootDir }}/../_build/wasm/release/build/golemcloud/golem_sdk_example1/{{ moonbitBuildPackagePath }}" --world agent-guest --encoding utf16 --output "{{ appRootDir }}/_build/wasm/release/{{ componentName | to_snake_case }}.embed.wasm" + mkdirs: + - "{{ appRootDir }}/_build/wasm/release" + - command: wasm-tools component new "{{ appRootDir }}/_build/wasm/release/{{ componentName | to_snake_case }}.embed.wasm" --output "{{ appRootDir }}/_build/wasm/release/{{ componentName | to_snake_case }}.agent.wasm" + componentWasm: "{{ appRootDir }}/_build/wasm/release/{{ componentName | to_snake_case }}.agent.wasm" + moonbit-tool-middleware-local: + presets: + debug: + default: true + build: + - command: moon run cmd -- reexports "{{ appRootDir }}/../golem_sdk" "{{ componentDir }}" --role tool-middleware + dir: "{{ appRootDir }}/../golem_sdk_tools" + - command: moon run cmd -- agents "{{ appRootDir }}" --component-dir "{{ componentDir }}" --role tool-middleware + dir: "{{ appRootDir }}/../golem_sdk_tools" + - command: moon -C "{{ appRootDir }}" build --target wasm + dir: "{{ appRootDir }}/../golem_sdk_tools" + - command: wasm-tools component embed "{{ appRootDir }}/../golem_sdk/wit" "{{ appRootDir }}/../_build/wasm/debug/build/golemcloud/golem_sdk_example1/{{ moonbitBuildPackagePath }}" --world tool-middleware-guest --encoding utf16 --output "{{ appRootDir }}/_build/wasm/debug/{{ componentName | to_snake_case }}.tool-middleware.embed.wasm" + mkdirs: + - "{{ appRootDir }}/_build/wasm/debug" + - command: wasm-tools component new "{{ appRootDir }}/_build/wasm/debug/{{ componentName | to_snake_case }}.tool-middleware.embed.wasm" --output "{{ appRootDir }}/_build/wasm/debug/{{ componentName | to_snake_case }}.tool-middleware.wasm" + componentWasm: "{{ appRootDir }}/_build/wasm/debug/{{ componentName | to_snake_case }}.tool-middleware.wasm" + release: + build: + - command: moon run cmd -- reexports "{{ appRootDir }}/../golem_sdk" "{{ componentDir }}" --role tool-middleware + dir: "{{ appRootDir }}/../golem_sdk_tools" + - command: moon run cmd -- agents "{{ appRootDir }}" --component-dir "{{ componentDir }}" --role tool-middleware + dir: "{{ appRootDir }}/../golem_sdk_tools" + - command: moon -C "{{ appRootDir }}" build --target wasm --release + dir: "{{ appRootDir }}/../golem_sdk_tools" + - command: wasm-tools component embed "{{ appRootDir }}/../golem_sdk/wit" "{{ appRootDir }}/../_build/wasm/release/build/golemcloud/golem_sdk_example1/{{ moonbitBuildPackagePath }}" --world tool-middleware-guest --encoding utf16 --output "{{ appRootDir }}/_build/wasm/release/{{ componentName | to_snake_case }}.tool-middleware.embed.wasm" + mkdirs: + - "{{ appRootDir }}/_build/wasm/release" + - command: wasm-tools component new "{{ appRootDir }}/_build/wasm/release/{{ componentName | to_snake_case }}.tool-middleware.embed.wasm" --output "{{ appRootDir }}/_build/wasm/release/{{ componentName | to_snake_case }}.tool-middleware.wasm" + componentWasm: "{{ appRootDir }}/_build/wasm/release/{{ componentName | to_snake_case }}.tool-middleware.wasm" components: golem:moonbit-examples: templates: moonbit-local - dir: "" + dir: golem_moonbit_examples + golem:tool-middleware-examples: + templates: moonbit-tool-middleware-local + dir: golem_tool_middleware_examples diff --git a/sdks/moonbit/golem_sdk_example1/golem_moonbit_examples/.golem-sdk-role b/sdks/moonbit/golem_sdk_example1/golem_moonbit_examples/.golem-sdk-role new file mode 100644 index 0000000000..4e8622d9fe --- /dev/null +++ b/sdks/moonbit/golem_sdk_example1/golem_moonbit_examples/.golem-sdk-role @@ -0,0 +1,2 @@ +# Generated by golem_sdk_tools; do not edit. +ordinary diff --git a/sdks/moonbit/golem_sdk_example1/golem_moonbit_examples/pkg.generated.mbti b/sdks/moonbit/golem_sdk_example1/golem_moonbit_examples/pkg.generated.mbti index 7b54461630..26a06bdf94 100644 --- a/sdks/moonbit/golem_sdk_example1/golem_moonbit_examples/pkg.generated.mbti +++ b/sdks/moonbit/golem_sdk_example1/golem_moonbit_examples/pkg.generated.mbti @@ -13,6 +13,7 @@ import { "golemcloud/golem_sdk/schema", "golemcloud/golem_sdk/schema_model", "golemcloud/golem_sdk/tool", + "golemcloud/golem_sdk/tool-core", "moonbitlang/core/json", } @@ -117,7 +118,7 @@ pub fn CanonicalBigBoundClient::drop(Self) -> Unit pub fn CanonicalBigBoundClient::new() -> Self type CanonicalCommitError -pub impl @tool.ToolErrorSchema for CanonicalCommitError +pub impl @tool-core.ToolErrorSchema for CanonicalCommitError pub(all) struct CanonicalCommitResult { hash : String @@ -191,7 +192,7 @@ pub impl @schema.FromSchema for CanonicalGrepColorMode pub impl @schema.IntoSchema for CanonicalGrepColorMode type CanonicalGrepError -pub impl @tool.ToolErrorSchema for CanonicalGrepError +pub impl @tool-core.ToolErrorSchema for CanonicalGrepError pub(all) struct CanonicalGrepHit { file : @schema.Path @@ -211,7 +212,7 @@ pub impl @schema.FromSchema for CanonicalLogEntry pub impl @schema.IntoSchema for CanonicalLogEntry type CanonicalLogError -pub impl @tool.ToolErrorSchema for CanonicalLogError +pub impl @tool-core.ToolErrorSchema for CanonicalLogError type CanonicalRemote pub fn CanonicalRemote::add(UInt, String, @schema.Url, Array[String], String?, Bool, Bool) -> Result[Unit, CanonicalRemoteError] @@ -219,10 +220,10 @@ pub fn CanonicalRemote::remove(String) -> Result[Unit, CanonicalRemoteError] pub fn CanonicalRemote::set_url(String, @schema.Url, @schema.Url?, Bool, Bool, Bool) -> Result[Unit, CanonicalSetUrlError] type CanonicalRemoteError -pub impl @tool.ToolErrorSchema for CanonicalRemoteError +pub impl @tool-core.ToolErrorSchema for CanonicalRemoteError type CanonicalSetUrlError -pub impl @tool.ToolErrorSchema for CanonicalSetUrlError +pub impl @tool-core.ToolErrorSchema for CanonicalSetUrlError type CanonicalStash pub fn CanonicalStash::apply(String?, UInt?) -> Result[Unit, CanonicalStashError] @@ -230,7 +231,7 @@ pub fn CanonicalStash::pop(String?, UInt?) -> Result[Unit, CanonicalStashError] pub fn CanonicalStash::stash(UInt, String, Bool) -> Result[Unit, CanonicalStashError] type CanonicalStashError -pub impl @tool.ToolErrorSchema for CanonicalStashError +pub impl @tool-core.ToolErrorSchema for CanonicalStashError type ConfiguredAgent pub fn ConfiguredAgent::get_request_count(Self) -> UInt64 diff --git a/sdks/moonbit/golem_sdk_example1/golem_tool_middleware_examples/.golem-sdk-role b/sdks/moonbit/golem_sdk_example1/golem_tool_middleware_examples/.golem-sdk-role new file mode 100644 index 0000000000..da6450b280 --- /dev/null +++ b/sdks/moonbit/golem_sdk_example1/golem_tool_middleware_examples/.golem-sdk-role @@ -0,0 +1,2 @@ +# Generated by golem_sdk_tools; do not edit. +tool-middleware diff --git a/sdks/moonbit/golem_sdk_example1/golem_tool_middleware_examples/golem_tool_middlewares.mbt b/sdks/moonbit/golem_sdk_example1/golem_tool_middleware_examples/golem_tool_middlewares.mbt new file mode 100644 index 0000000000..c04ee4d458 --- /dev/null +++ b/sdks/moonbit/golem_sdk_example1/golem_tool_middleware_examples/golem_tool_middlewares.mbt @@ -0,0 +1,767 @@ +// Generated by golem_sdk_tools — DO NOT EDIT! + +///| +fn[T] __golem_middleware_tool_concat_array( + left : Array[T], + right : Array[T], +) -> Array[T] { + let result = left.copy() + for value in right { + result.push(value) + } + result +} + +///| +fn __golem_middleware_tool_concat_globals( + left : @tool.GlobalsDef, + right : @tool.GlobalsDef, +) -> @tool.GlobalsDef { + { + options: __golem_middleware_tool_concat_array(left.options, right.options), + flags: __golem_middleware_tool_concat_array(left.flags, right.flags), + } +} + +///| +fn __golem_middleware_tool_rebase_node( + node : @tool.CommandNodeDef, + offset : Int, +) -> @tool.CommandNodeDef { + { + name: node.name, + aliases: node.aliases, + doc: node.doc, + globals: node.globals, + subcommands: node.subcommands.map(index => index + offset), + body: node.body, + } +} + +///| +fn __golem_middleware_tool_extract_prepared( + def : @tool.ToolDef, +) -> @tool.ToolDef { + { + version: def.version, + commands: def.commands[1:].map(node => { + __golem_middleware_tool_rebase_node(node, -1) + }), + } +} + +///| +fn __golem_middleware_tool_append_prepared( + def : @tool.ToolDef, + child : @tool.ToolDef, +) -> @tool.ToolDef { + let offset = def.commands.length() + let commands = def.commands.copy() + let root = commands[0] + commands[0] = { + name: root.name, + aliases: root.aliases, + doc: root.doc, + globals: root.globals, + subcommands: __golem_middleware_tool_concat_array(root.subcommands, [offset]), + body: root.body, + } + for node in child.commands { + commands.push(__golem_middleware_tool_rebase_node(node, offset)) + } + { version: def.version, commands } +} + +///| +fn __golem_middleware_tool_def_raw_Messages() -> @tool.ToolDef { + try { + let def : @tool.ToolDef = { + version: "0.0.0", + commands: [ + { + name: "messages", + aliases: [], + doc: { + summary: "The tool shape presented by the policy middleware.", + description: "", + examples: [], + }, + globals: { options: [], flags: [] }, + subcommands: [1], + body: None, + }, + { + name: "send", + aliases: [], + doc: { summary: "", description: "", examples: [] }, + globals: { options: [], flags: [] }, + subcommands: [], + body: Some({ + positionals: { + fixed: [ + { + name: "message", + doc: { summary: "", description: "", examples: [] }, + value_name: None, + type_: @schema.into_schema_graph( + (@schema.TypeTag::{ } : @schema.TypeTag[String]), + ), + default: None, + required: true, + accepts_stdio: false, + }, + ], + tail: None, + }, + options: [], + flags: [], + constraints: [], + stdin: None, + stdout: None, + result: Some({ + type_: @schema.into_schema_graph( + (@schema.TypeTag::{ } : @schema.TypeTag[String]), + ), + doc: { summary: "", description: "", examples: [] }, + formatters: [ + { + name: "default", + doc: { summary: "", description: "", examples: [] }, + }, + ], + default_formatter: "default", + }), + errors: [], + annotations: Some({ + read_only: false, + destructive: true, + idempotent: false, + open_world: true, + }), + }), + }, + ], + } + def + } catch { + error => abort("invalid generated raw tool definition: " + repr(error)) + } +} + +///| +fn __golem_middleware_tool_def_prepare_Messages( + strict_ancestors : @tool.GlobalsDef, + parent_globals : @tool.GlobalsDef, + override_name : String?, + override_doc : @toolCommon.Doc?, + override_aliases : Array[String]?, +) -> @tool.ToolDef { + try { + let carrier : @tool.ToolDef = { + version: "0.0.0", + commands: [ + { + name: "__golem_ancestry", + aliases: [], + doc: { summary: "", description: "", examples: [] }, + globals: strict_ancestors, + subcommands: [], + body: None, + }, + ], + } + let prepared = __golem_middleware_tool_extract_prepared( + carrier.graft_subtree( + __golem_middleware_tool_def_raw_Messages(), + "messages", + parent_globals, + override_name, + override_doc, + override_aliases, + ), + ) + let def = prepared + def + } catch { + error => abort("invalid generated prepared tool definition: " + repr(error)) + } +} + +///| +fn __golem_middleware_tool_def_Messages() -> @tool.ToolDef { + __golem_middleware_tool_def_prepare_Messages( + { options: [], flags: [] }, + { options: [], flags: [] }, + None, + None, + None, + ).normalize_inherited_globals() catch { + error => abort("invalid generated tool definition: " + repr(error)) + } +} + +///| +fn __golem_middleware_tool_def_raw_PublicFiles() -> @tool.ToolDef { + try { + let def : @tool.ToolDef = { + version: "0.0.0", + commands: [ + { + name: "public-files", + aliases: [], + doc: { + summary: "The public shape presented by the adapter.", + description: "", + examples: [], + }, + globals: { options: [], flags: [] }, + subcommands: [1], + body: None, + }, + { + name: "read", + aliases: [], + doc: { summary: "", description: "", examples: [] }, + globals: { options: [], flags: [] }, + subcommands: [], + body: Some({ + positionals: { + fixed: [ + { + name: "path", + doc: { summary: "", description: "", examples: [] }, + value_name: None, + type_: @schema.into_schema_graph( + (@schema.TypeTag::{ } : @schema.TypeTag[String]), + ), + default: None, + required: true, + accepts_stdio: false, + }, + ], + tail: None, + }, + options: [], + flags: [], + constraints: [], + stdin: None, + stdout: None, + result: Some({ + type_: @schema.into_schema_graph( + (@schema.TypeTag::{ } : @schema.TypeTag[String]), + ), + doc: { summary: "", description: "", examples: [] }, + formatters: [ + { + name: "default", + doc: { summary: "", description: "", examples: [] }, + }, + ], + default_formatter: "default", + }), + errors: [], + annotations: Some({ + read_only: false, + destructive: true, + idempotent: false, + open_world: true, + }), + }), + }, + ], + } + def + } catch { + error => abort("invalid generated raw tool definition: " + repr(error)) + } +} + +///| +fn __golem_middleware_tool_def_prepare_PublicFiles( + strict_ancestors : @tool.GlobalsDef, + parent_globals : @tool.GlobalsDef, + override_name : String?, + override_doc : @toolCommon.Doc?, + override_aliases : Array[String]?, +) -> @tool.ToolDef { + try { + let carrier : @tool.ToolDef = { + version: "0.0.0", + commands: [ + { + name: "__golem_ancestry", + aliases: [], + doc: { summary: "", description: "", examples: [] }, + globals: strict_ancestors, + subcommands: [], + body: None, + }, + ], + } + let prepared = __golem_middleware_tool_extract_prepared( + carrier.graft_subtree( + __golem_middleware_tool_def_raw_PublicFiles(), + "public-files", + parent_globals, + override_name, + override_doc, + override_aliases, + ), + ) + let def = prepared + def + } catch { + error => abort("invalid generated prepared tool definition: " + repr(error)) + } +} + +///| +fn __golem_middleware_tool_def_PublicFiles() -> @tool.ToolDef { + __golem_middleware_tool_def_prepare_PublicFiles( + { options: [], flags: [] }, + { options: [], flags: [] }, + None, + None, + None, + ).normalize_inherited_globals() catch { + error => abort("invalid generated tool definition: " + repr(error)) + } +} + +///| +fn __golem_middleware_tool_def_raw_Storage() -> @tool.ToolDef { + try { + let def : @tool.ToolDef = { + version: "0.0.0", + commands: [ + { + name: "storage", + aliases: [], + doc: { + summary: "The shape expected from the adapter's next inner layer.", + description: "", + examples: [], + }, + globals: { options: [], flags: [] }, + subcommands: [1], + body: None, + }, + { + name: "fetch", + aliases: [], + doc: { summary: "", description: "", examples: [] }, + globals: { options: [], flags: [] }, + subcommands: [], + body: Some({ + positionals: { + fixed: [ + { + name: "key", + doc: { summary: "", description: "", examples: [] }, + value_name: None, + type_: @schema.into_schema_graph( + (@schema.TypeTag::{ } : @schema.TypeTag[String]), + ), + default: None, + required: true, + accepts_stdio: false, + }, + ], + tail: None, + }, + options: [], + flags: [], + constraints: [], + stdin: None, + stdout: None, + result: Some({ + type_: @schema.into_schema_graph( + (@schema.TypeTag::{ } : @schema.TypeTag[String]), + ), + doc: { summary: "", description: "", examples: [] }, + formatters: [ + { + name: "default", + doc: { summary: "", description: "", examples: [] }, + }, + ], + default_formatter: "default", + }), + errors: [], + annotations: Some({ + read_only: false, + destructive: true, + idempotent: false, + open_world: true, + }), + }), + }, + ], + } + def + } catch { + error => abort("invalid generated raw tool definition: " + repr(error)) + } +} + +///| +fn __golem_middleware_tool_def_prepare_Storage( + strict_ancestors : @tool.GlobalsDef, + parent_globals : @tool.GlobalsDef, + override_name : String?, + override_doc : @toolCommon.Doc?, + override_aliases : Array[String]?, +) -> @tool.ToolDef { + try { + let carrier : @tool.ToolDef = { + version: "0.0.0", + commands: [ + { + name: "__golem_ancestry", + aliases: [], + doc: { summary: "", description: "", examples: [] }, + globals: strict_ancestors, + subcommands: [], + body: None, + }, + ], + } + let prepared = __golem_middleware_tool_extract_prepared( + carrier.graft_subtree( + __golem_middleware_tool_def_raw_Storage(), + "storage", + parent_globals, + override_name, + override_doc, + override_aliases, + ), + ) + let def = prepared + def + } catch { + error => abort("invalid generated prepared tool definition: " + repr(error)) + } +} + +///| +fn __golem_middleware_tool_def_Storage() -> @tool.ToolDef { + __golem_middleware_tool_def_prepare_Storage( + { options: [], flags: [] }, + { options: [], flags: [] }, + None, + None, + None, + ).normalize_inherited_globals() catch { + error => abort("invalid generated tool definition: " + repr(error)) + } +} + +///| +fn[T : @schema.IntoSchema + @schema.FromSchema, E] __golem_middleware_decode_canonical_field( + fields : Array[@tool.CanonicalInputValue], + name : String, + context : String, +) -> Result[T, @toolMiddleware.ToolInvokeError[E]] { + try @tool.decode_canonical_field(fields, name, context) catch { + @toolCommon.ToolError::InvalidToolName(name) => + Err(@toolMiddleware.ToolInvokeError::InvalidToolName(name)) + @toolCommon.ToolError::InvalidCommandPath(path) => + Err(@toolMiddleware.ToolInvokeError::InvalidCommandPath(path)) + @toolCommon.ToolError::InvalidInput(message) => + Err(@toolMiddleware.ToolInvokeError::InvalidInput(message)) + @toolCommon.ToolError::ConstraintViolation(message) => + Err(@toolMiddleware.ToolInvokeError::ConstraintViolation(message)) + @toolCommon.ToolError::InvalidResult(message) => + Err(@toolMiddleware.ToolInvokeError::InvalidResult(message)) + @toolCommon.ToolError::CustomError(value) => { + @model.drop_wit_capabilities(value.value) + Err( + @toolMiddleware.ToolInvokeError::InvalidResult( + "canonical field decoding returned a custom tool error", + ), + ) + } + } noraise { + value => Ok(value) + } +} + +///| +pub struct MessagesUnderlying { + priv underlying : @toolMiddleware.UnderlyingTool +} + +///| +pub async fn MessagesUnderlying::send( + self : MessagesUnderlying, + message : String, +) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + let __golem_command_path = ["send"] + let __golem_def = __golem_middleware_tool_def_Messages() + let __golem_index = match + __golem_def.command_index_by_path(__golem_command_path) { + Some(__golem_index) => __golem_index + None => + return Err( + @toolMiddleware.ToolInvokeError::InvalidCommandPath( + __golem_command_path, + ), + ) + } + let __golem_model = __golem_def.canonical_input_model(__golem_index) catch { + __golem_error => + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput(repr(__golem_error)), + ) + } + let __golem_values : Array[(String, @model.SchemaValue)] = [] + __golem_values.push(("message", @schema.to_value_as(message))) + let __golem_input = @tool.build_canonical_input(__golem_model, __golem_values) catch { + __golem_error => + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput(repr(__golem_error)), + ) + } + let __golem_result = match + self.underlying.invoke_with(__golem_command_path, __golem_input, None, fn( + _, + ) { + Err("underlying returned a custom error for an infallible command") + }) { + Ok(__golem_result) => __golem_result + Err(__golem_error) => return Err(__golem_error) + } + @toolMiddleware.decode_result_value(__golem_result) +} + +///| +pub struct StorageUnderlying { + priv underlying : @toolMiddleware.UnderlyingTool +} + +///| +pub async fn StorageUnderlying::fetch( + self : StorageUnderlying, + key : String, +) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + let __golem_command_path = ["fetch"] + let __golem_def = __golem_middleware_tool_def_Storage() + let __golem_index = match + __golem_def.command_index_by_path(__golem_command_path) { + Some(__golem_index) => __golem_index + None => + return Err( + @toolMiddleware.ToolInvokeError::InvalidCommandPath( + __golem_command_path, + ), + ) + } + let __golem_model = __golem_def.canonical_input_model(__golem_index) catch { + __golem_error => + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput(repr(__golem_error)), + ) + } + let __golem_values : Array[(String, @model.SchemaValue)] = [] + __golem_values.push(("key", @schema.to_value_as(key))) + let __golem_input = @tool.build_canonical_input(__golem_model, __golem_values) catch { + __golem_error => + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput(repr(__golem_error)), + ) + } + let __golem_result = match + self.underlying.invoke_with(__golem_command_path, __golem_input, None, fn( + _, + ) { + Err("underlying returned a custom error for an infallible command") + }) { + Ok(__golem_result) => __golem_result + Err(__golem_error) => return Err(__golem_error) + } + @toolMiddleware.decode_result_value(__golem_result) +} + +///| +async fn __golem_universal_tool_middleware_invoke_audit( + invocation : @toolMiddleware.RawToolInvocation, + underlying : @toolMiddleware.UnderlyingTool, +) -> Result[ + @toolMiddleware.RawInvocationResult, + @toolMiddleware.ToolInvokeError[@toolMiddleware.RawTypedSchemaValue], +] { + audit(invocation, underlying) +} + +///| +async fn __golem_monomorphic_tool_middleware_invoke_MessagePolicy( + __golem_invocation : @toolMiddleware.RawToolInvocation, + __golem_underlying : @toolMiddleware.UnderlyingTool, +) -> Result[ + @toolMiddleware.RawInvocationResult, + @toolMiddleware.ToolInvokeError[@toolMiddleware.RawTypedSchemaValue], +] { + let __golem_command_path = __golem_invocation.command_path() + let __golem_def = __golem_middleware_tool_def_Messages() + let __golem_index = match + __golem_def.command_index_by_path(__golem_command_path) { + Some(__golem_index) => __golem_index + None => + return Err( + @toolMiddleware.ToolInvokeError::InvalidCommandPath( + __golem_command_path, + ), + ) + } + let __golem_decoded = match + __golem_invocation.decode_input( + __golem_def, __golem_index, "tool middleware message-policy invocation", + ) { + Ok(__golem_decoded) => __golem_decoded + Err(__golem_error) => return Err(__golem_error) + } + if __golem_def.command_index_by_path(["send"]) == Some(__golem_index) { + if __golem_invocation.stdin() is Some(_) { + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput( + "tool invocation contained an unexpected stdin stream", + ), + ) + } + let message : String = match + __golem_middleware_decode_canonical_field( + __golem_decoded, "message", "tool middleware message-policy command send", + ) { + Ok(__golem_value) => __golem_value + Err(__golem_error) => return Err(__golem_error) + } + let __golem_expected = MessagesUnderlying::{ + underlying: __golem_underlying, + } + match MessagePolicy::send(__golem_expected, message) { + Ok(__golem_result) => + return __golem_invocation.typed_result_value(__golem_result) + Err(__golem_error) => + return Err( + __golem_invocation.encode_handler_error(__golem_error, fn(_) { + Err("infallible middleware handler returned a custom tool error") + }), + ) + } + } + Err(@toolMiddleware.ToolInvokeError::InvalidCommandPath(__golem_command_path)) +} + +///| +async fn __golem_monomorphic_tool_middleware_invoke_FileAdapter( + __golem_invocation : @toolMiddleware.RawToolInvocation, + __golem_underlying : @toolMiddleware.UnderlyingTool, +) -> Result[ + @toolMiddleware.RawInvocationResult, + @toolMiddleware.ToolInvokeError[@toolMiddleware.RawTypedSchemaValue], +] { + let __golem_command_path = __golem_invocation.command_path() + let __golem_def = __golem_middleware_tool_def_PublicFiles() + let __golem_index = match + __golem_def.command_index_by_path(__golem_command_path) { + Some(__golem_index) => __golem_index + None => + return Err( + @toolMiddleware.ToolInvokeError::InvalidCommandPath( + __golem_command_path, + ), + ) + } + let __golem_decoded = match + __golem_invocation.decode_input( + __golem_def, __golem_index, "tool middleware file-adapter invocation", + ) { + Ok(__golem_decoded) => __golem_decoded + Err(__golem_error) => return Err(__golem_error) + } + if __golem_def.command_index_by_path(["read"]) == Some(__golem_index) { + if __golem_invocation.stdin() is Some(_) { + return Err( + @toolMiddleware.ToolInvokeError::InvalidInput( + "tool invocation contained an unexpected stdin stream", + ), + ) + } + let path : String = match + __golem_middleware_decode_canonical_field( + __golem_decoded, "path", "tool middleware file-adapter command read", + ) { + Ok(__golem_value) => __golem_value + Err(__golem_error) => return Err(__golem_error) + } + let __golem_expected = StorageUnderlying::{ underlying: __golem_underlying } + match FileAdapter::read(__golem_expected, path) { + Ok(__golem_result) => + return __golem_invocation.typed_result_value(__golem_result) + Err(__golem_error) => + return Err( + __golem_invocation.encode_handler_error(__golem_error, fn(_) { + Err("infallible middleware handler returned a custom tool error") + }), + ) + } + } + Err(@toolMiddleware.ToolInvokeError::InvalidCommandPath(__golem_command_path)) +} + +///| +fn __golem_register_tool_middlewares() -> Unit raise { + @toolMiddleware.register_tool_middleware( + { + name: "audit", + aliases: [], + doc: { + summary: "Observes metadata for every tool shape and forwards its carriers unchanged.", + description: "", + examples: [], + }, + scope: @toolMiddleware.ToolMiddlewareScope::Universal, + }, + __golem_universal_tool_middleware_invoke_audit, + ) + @toolMiddleware.register_tool_middleware( + { + name: "message-policy", + aliases: [], + doc: { + summary: "Forwards ordinary messages and rejects blocked messages without invoking the next layer.", + description: "", + examples: [], + }, + scope: @toolMiddleware.ToolMiddlewareScope::Monomorphic({ + presented: __golem_middleware_tool_def_Messages().to_tool(), + expected: __golem_middleware_tool_def_Messages().to_tool(), + }), + }, + __golem_monomorphic_tool_middleware_invoke_MessagePolicy, + ) + @toolMiddleware.register_tool_middleware( + { + name: "file-adapter", + aliases: [], + doc: { + summary: "Adapts the public file shape to a differently shaped storage tool.", + description: "", + examples: [], + }, + scope: @toolMiddleware.ToolMiddlewareScope::Monomorphic({ + presented: __golem_middleware_tool_def_PublicFiles().to_tool(), + expected: __golem_middleware_tool_def_Storage().to_tool(), + }), + }, + __golem_monomorphic_tool_middleware_invoke_FileAdapter, + ) +} + +///| +fn init { + __golem_register_tool_middlewares() catch { + error => + abort("failed to register generated tool middleware: " + repr(error)) + } +} diff --git a/sdks/moonbit/golem_sdk_example1/golem_tool_middleware_examples/middleware.mbt b/sdks/moonbit/golem_sdk_example1/golem_tool_middleware_examples/middleware.mbt new file mode 100644 index 0000000000..5a5fa0081e --- /dev/null +++ b/sdks/moonbit/golem_sdk_example1/golem_tool_middleware_examples/middleware.mbt @@ -0,0 +1,88 @@ +///| +/// The tool shape presented by the policy middleware. +#derive.tool("messages") +struct Messages {} + +///| +pub fn Messages::send(message : String) -> String { + message +} + +///| +/// Forwards ordinary messages and rejects blocked messages without invoking the next layer. +#derive.tool_middleware("message-policy", presented="Messages") +struct MessagePolicy {} + +///| +pub async fn MessagePolicy::send( + underlying : MessagesUnderlying, + message : String, +) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + if message.contains("blocked") { + Err( + @toolMiddleware.ToolInvokeError::ConstraintViolation( + "messages containing 'blocked' are not allowed", + ), + ) + } else { + underlying.send(message) + } +} + +///| +/// Observes metadata for every tool shape and forwards its carriers unchanged. +#derive.universal_tool_middleware("audit") +pub async fn audit( + invocation : @toolMiddleware.RawToolInvocation, + underlying : @toolMiddleware.UnderlyingTool, +) -> Result[ + @toolMiddleware.RawInvocationResult, + @toolMiddleware.ToolInvokeError[@toolMiddleware.RawTypedSchemaValue], +] { + ignore(invocation.tool_name()) + ignore(invocation.tool_metadata()) + ignore(invocation.principal()) + underlying.invoke_raw( + invocation.command_path(), + invocation.input(), + invocation.stdin(), + ) +} + +///| +/// The public shape presented by the adapter. +#derive.tool("public-files") +struct PublicFiles {} + +///| +pub fn PublicFiles::read(path : String) -> String { + path +} + +///| +/// The shape expected from the adapter's next inner layer. +#derive.tool("storage") +struct Storage {} + +///| +pub fn Storage::fetch(key : String) -> String { + key +} + +///| +/// Adapts the public file shape to a differently shaped storage tool. +#derive.tool_middleware("file-adapter", presented="PublicFiles", expected="Storage") +struct FileAdapter {} + +///| +pub async fn FileAdapter::read( + underlying : StorageUnderlying, + path : String, +) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + underlying.fetch("files/" + path) +} + +///| +fn main { + +} diff --git a/sdks/moonbit/golem_sdk_example1/golem_tool_middleware_examples/moon.pkg b/sdks/moonbit/golem_sdk_example1/golem_tool_middleware_examples/moon.pkg new file mode 100644 index 0000000000..e8a5b06831 --- /dev/null +++ b/sdks/moonbit/golem_sdk_example1/golem_tool_middleware_examples/moon.pkg @@ -0,0 +1,31 @@ +import { + "golemcloud/golem_sdk/tool-core" @tool, + "golemcloud/golem_sdk/tool-middleware" @toolMiddleware, + "golemcloud/golem_sdk/gen-tool-middleware" @gen, + "golemcloud/golem_sdk/schema", // Generated by golem_sdk_tools + "golemcloud/golem_sdk/schema_model" @model, // Generated by golem_sdk_tools + "golemcloud/golem_sdk/interface/golem/core/types", // Generated by golem_sdk_tools + "golemcloud/golem_sdk/interface/golem/tool/common" @toolCommon, // Generated by golem_sdk_tools + "golemcloud/golem_sdk/async-core" @asyncCore, // Generated by golem_sdk_tools +} + +supported_targets = "+wasm" + +options( + "is-main": true, + link: { + "wasm": { + "export-memory-name": "memory", + "exports": [ + "cabi_realloc:cabi_realloc", + "wasmExportAsyncInvokeToolMiddleware:[callback][async-lift]golem:tool/tool-middleware-guest@0.1.0#invoke-tool-middleware", + "wasmExportDiscoverToolMiddlewares:golem:tool/tool-middleware-guest@0.1.0#discover-tool-middlewares", + "wasmExportDiscoverToolMiddlewaresPostReturn:cabi_post_golem:tool/tool-middleware-guest@0.1.0#discover-tool-middlewares", + "wasmExportGetToolMiddleware:golem:tool/tool-middleware-guest@0.1.0#get-tool-middleware", + "wasmExportGetToolMiddlewarePostReturn:cabi_post_golem:tool/tool-middleware-guest@0.1.0#get-tool-middleware", + "wasmExportInvokeToolMiddleware:[async-lift]golem:tool/tool-middleware-guest@0.1.0#invoke-tool-middleware", + ], + "heap-start-address": 16, + }, + }, +) diff --git a/sdks/moonbit/golem_sdk_example1/golem_tool_middleware_examples/pkg.generated.mbti b/sdks/moonbit/golem_sdk_example1/golem_tool_middleware_examples/pkg.generated.mbti new file mode 100644 index 0000000000..71672873eb --- /dev/null +++ b/sdks/moonbit/golem_sdk_example1/golem_tool_middleware_examples/pkg.generated.mbti @@ -0,0 +1,56 @@ +// Generated using `moon info`, DON'T EDIT IT +package "golemcloud/golem_sdk_example1/golem_tool_middleware_examples" + +import { + "golemcloud/golem_sdk/tool-core", + "golemcloud/golem_sdk/tool-middleware", +} + +// Values +pub async fn audit(@tool-middleware.RawToolInvocation, @tool-middleware.UnderlyingTool) -> Result[@tool-middleware.RawInvocationResult, @tool-middleware.ToolInvokeError[@tool-middleware.RawTypedSchemaValue]] + +pub fn cabi_realloc(Int, Int, Int, Int) -> Int + +pub fn wasmExportAsyncInvokeToolMiddleware(Int, Int, Int) -> Int + +pub fn wasmExportDiscoverToolMiddlewares() -> Int + +pub fn wasmExportDiscoverToolMiddlewaresPostReturn(Int) -> Unit + +pub fn wasmExportGetToolMiddleware(Int, Int) -> Int + +pub fn wasmExportGetToolMiddlewarePostReturn(Int) -> Unit + +pub fn wasmExportInvokeToolMiddleware(Int) -> Int + +// Errors + +// Types and methods +type FileAdapter +pub async fn FileAdapter::read(StorageUnderlying, String) -> Result[String, @tool-middleware.ToolInvokeError[@tool-core.NoToolError]] + +type MessagePolicy +pub async fn MessagePolicy::send(MessagesUnderlying, String) -> Result[String, @tool-middleware.ToolInvokeError[@tool-core.NoToolError]] + +type Messages +pub fn Messages::send(String) -> String + +pub struct MessagesUnderlying { + // private fields +} +pub async fn MessagesUnderlying::send(Self, String) -> Result[String, @tool-middleware.ToolInvokeError[@tool-core.NoToolError]] + +type PublicFiles +pub fn PublicFiles::read(String) -> String + +type Storage +pub fn Storage::fetch(String) -> String + +pub struct StorageUnderlying { + // private fields +} +pub async fn StorageUnderlying::fetch(Self, String) -> Result[String, @tool-middleware.ToolInvokeError[@tool-core.NoToolError]] + +// Type aliases + +// Traits diff --git a/sdks/moonbit/golem_sdk_tools/README.mbt.md b/sdks/moonbit/golem_sdk_tools/README.mbt.md index 4430bc3b46..fd3648b9e2 100644 --- a/sdks/moonbit/golem_sdk_tools/README.mbt.md +++ b/sdks/moonbit/golem_sdk_tools/README.mbt.md @@ -9,7 +9,7 @@ Code generation tools for the [Golem SDK for MoonBit](https://mooncakes.io/docs/ Generates `golem_reexports.mbt` and updates the target package's `moon.pkg` link section with WASM export declarations. ```sh -moon run cmd -- reexports +moon run cmd -- reexports --role ``` **What it does:** @@ -19,13 +19,16 @@ moon run cmd -- reexports ### `agents` -Generates agent and tool registration, serialization, dispatch, and typed RPC client code from -source annotations. +Generates role-appropriate agent, tool, and middleware registration, serialization, dispatch, and +typed client/wrapper code from source annotations. ```sh -moon run cmd -- agents +moon run cmd -- agents --component-dir --role ``` +`` is `ordinary`, `tool-middleware`, or `combined`. The component directory is the only +package the command mutates; project-root scanning supplies read-only project context. + **What it generates:** | File | Contents | @@ -35,11 +38,13 @@ moon run cmd -- agents | `golem_clients.mbt` | RPC client structs (`Client`) with awaited, fire-and-forget (`trigger_*`), and scheduled (`schedule_*`) method variants | | `golem_tools.mbt` | Tool descriptors, error schemas, registration, canonical-input decoding, and command dispatch | | `golem_tool_clients.mbt` | Typed tool clients (`Client`) and nested clients for subcommand trees | +| `golem_tool_middlewares.mbt` | Monomorphic/universal adapters, descriptors, typed underlying wrappers, and middleware registration | -It also auto-adds the required imports to the target `moon.pkg` (e.g. `agents`, `schema`, -`schema_model`, `tool`, `interface/golem/agent/common`, `interface/golem/tool/common`, -`interface/golem/core/types`, `rpc`, `multimodal`, and `config`). The `reexports` subcommand -additionally adds the `gen` import. +Generation is role-sensitive. `ordinary` emits agent/ordinary-tool files, `tool-middleware` emits +only pure middleware files, and `combined` emits both. It auto-adds only the required imports to +the target `moon.pkg`; `reexports` additionally selects `gen`, `gen-tool-middleware`, or +`gen-agent-tool-middleware`. The two commands persist and verify their shared role in +`.golem-sdk-role` so mismatched generation cannot silently combine worlds. ## Supported Annotations @@ -51,6 +56,8 @@ additionally adds the `gen` import. | `#derive.multimodal` | enum | Generates `@multimodal.MultimodalModality` trait impl | | `#derive.prompt_hint("...")` | method | Adds a prompt hint to the method definition | | `#derive.tool(...)` | empty struct | Defines a tool and optional wire name/version | +| `#derive.tool_middleware(...)` | empty struct | Defines monomorphic middleware over same-package presented/expected tool shapes | +| `#derive.universal_tool_middleware(...)` | async free function | Defines universal middleware over opaque runtime carriers | | `#derive.command(...)` | public tool method | Configures command name, aliases, subtree, and behavioral annotations | | `#derive.arg(...)` | public tool method | Maps one method parameter to a global, positional, tail, option, flag, or stream | | `#derive.constraint(...)` | public tool method | Adds argument-presence or `value-is` constraints | @@ -167,20 +174,119 @@ client.drop() Call `drop()` when the client is no longer needed. Generated files are replaced on every `agents` run and must not be edited by hand. +## Defining Tool Middleware + +Tool middleware components use the `tool-middleware` role and do not import the ambient +`golem:tool/host` interface. They can invoke only the runtime-provided next layer. + +### Monomorphic policy middleware + +Declare a presented tool shape with the existing empty-struct/static-method model, then annotate an +empty middleware struct. If `expected` is omitted, it defaults to `presented`: + +```moonbit nocheck +#derive.tool("messages") +struct Messages {} + +pub fn Messages::send(message : String) -> String { message } + +#derive.tool_middleware("message-policy", presented="Messages") +struct MessagePolicy {} + +pub async fn MessagePolicy::send( + underlying : MessagesUnderlying, + message : String, +) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + if message.contains("blocked") { + // Short-circuit: the expected tool still exists, but this path calls it zero times. + Err(@toolMiddleware.ToolInvokeError::ConstraintViolation("blocked")) + } else { + underlying.send(message) + } +} +``` + +The generated `Underlying` has no public constructor. It wraps the capability minted +for this invocation and exposes async typed methods projected from the expected shape. Handlers may +short-circuit with zero calls, forward once, or retry with multiple sequential calls. Overlapping +calls and use after the handler returns are rejected; this is runtime enforcement, not a MoonBit +affine type guarantee. + +For nested commands, handler and underlying method names flatten the full canonical path with +`__`, such as `admin__run`. Generation rejects flattened-name collisions. + +An adapter names a different expected shape in the same package: + +```moonbit nocheck +#derive.tool_middleware("file-adapter", presented="PublicFiles", expected="Storage") +struct FileAdapter {} + +pub async fn FileAdapter::read( + underlying : StorageUnderlying, + path : String, +) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + underlying.fetch("files/" + path) +} +``` + +The middleware handlers cover every command in `PublicFiles`, while `StorageUnderlying` exposes +the commands in `Storage`. Both tool declarations must be in the middleware's package. Qualified +or cross-package references produce: + +```text +Tool middleware '' references tool '' outside its package; GOL-34 supports same-package tool shapes only +``` + +### Universal middleware + +A universal annotation applies to exactly one async free function. The grouped invocation and +underlying wrappers keep tool metadata, typed input/results, errors, streams, and principal in the +generated WIT carrier types: + +```moonbit nocheck +#derive.universal_tool_middleware("audit", alias="trace-tools") +pub async fn audit( + invocation : @toolMiddleware.RawToolInvocation, + underlying : @toolMiddleware.UnderlyingTool, +) -> Result[ + @toolMiddleware.RawInvocationResult, + @toolMiddleware.ToolInvokeError[@toolMiddleware.RawTypedSchemaValue], +] { + ignore(invocation.tool_name()) + ignore(invocation.tool_metadata()) + ignore(invocation.principal()) + underlying.invoke_raw( + invocation.command_path(), + invocation.input(), + invocation.stdin(), + ) +} +``` + +Pass-through forwards those carriers directly; do not decode and rebuild them through +`schema_model`. Input capabilities and stdin transfer at most once, only final stdout transfers to +the host, and generated teardown drops abandoned resources. Every middleware is registered by the +generated `fn init` when the component loads. Registration order does not determine placement or +chain order; those belong to runtime/application-manifest configuration. + ## Usage with `golem.yaml` Typically invoked as build steps in a Golem application manifest: ```yaml build: - - command: moon run cmd -- reexports ../golem_sdk ../my_app/my_component + - command: moon run cmd -- reexports ../golem_sdk ../my_app/my_component --role tool-middleware dir: ../golem_sdk_tools - - command: moon run cmd -- agents ../my_app/my_component + - command: moon run cmd -- agents ../my_app --component-dir my_component --role tool-middleware dir: ../golem_sdk_tools - command: moon build --target wasm --release # ... wasm-tools component embed/new steps ``` +Embed pure middleware against SDK world `tool-middleware-guest`. Built-in Golem application +templates expose this pipeline as `moonbit-tool-middleware`; use `moonbit` for ordinary components +and `moonbit-agent-tool-middleware` for combined components. + ## Requirements - MoonBit toolchain (`moon`) diff --git a/sdks/moonbit/golem_sdk_tools/cmd/main.mbt b/sdks/moonbit/golem_sdk_tools/cmd/main.mbt index 34c9054366..0c8d453a77 100644 --- a/sdks/moonbit/golem_sdk_tools/cmd/main.mbt +++ b/sdks/moonbit/golem_sdk_tools/cmd/main.mbt @@ -38,41 +38,140 @@ fn fix_broken_strings(input : String) -> String { result.join("\n").trim_end(chars="\n").to_string() + "\n" } +///| +let generated_file_banner = "// Generated by golem_sdk_tools — DO NOT EDIT!" + +///| +priv struct GeneratedFileWrite { + path : String + content : String + message : String +} + +///| +priv struct GeneratedFilePlan { + writes : Array[GeneratedFileWrite] + removals : Array[String] +} + +///| +fn GeneratedFilePlan::new() -> GeneratedFilePlan { + { writes: [], removals: [] } +} + +///| +fn GeneratedFilePlan::stage_write( + self : GeneratedFilePlan, + path : String, + content : String, + message : String, +) -> Unit { + self.writes.push({ path, content, message }) +} + +///| +fn GeneratedFilePlan::stage_removal( + self : GeneratedFilePlan, + path : String, +) -> Unit { + self.removals.push(path) +} + +///| +fn GeneratedFilePlan::preflight(self : GeneratedFilePlan) -> Unit raise { + for write in self.writes { + validate_generated_write_path(write.path) + } + for path in self.removals { + validate_generated_removal_path(path) + } +} + +///| +fn GeneratedFilePlan::apply(self : GeneratedFilePlan) -> Unit raise { + for write in self.writes { + @fs.write_string_to_file(write.path, write.content) + println(write.message) + } + for path in self.removals { + if @fs.path_exists(path) { + @fs.remove_file(path) + println("Removed stale \{path}") + } + } +} + ///| fn main { let args = @env.args() if args.length() < 2 { println( - "Usage: golem_sdk_tools \nCommands:\n reexports \n agents ", + "Usage: golem_sdk_tools \nCommands:\n reexports --role \n agents --component-dir --role ", ) + @sys.exit(1) return } + let command_args : Array[String] = [] + for i = 2; i < args.length(); i = i + 1 { + command_args.push(args[i]) + } if args[1] == "reexports" { - if args.length() < 4 { - println("Usage: golem_sdk_tools reexports ") - return + let options = @lib.parse_reexports_command_args(command_args) catch { + @lib.ComponentRoleError(message) => { + println("Error: \{message}") + @sys.exit(1) + return + } } - run_reexports(args[2], args[3]) catch { - e => println("Error: \{e}") + run_reexports(options.sdk_path, options.target_dir, options.role) catch { + @lib.ComponentRoleError(message) => { + println("Error: \{message}") + @sys.exit(1) + } + e => { + println("Error: \{e}") + @sys.exit(1) + } } } else if args[1] == "agents" { - if args.length() < 3 { - println("Usage: golem_sdk_tools agents ") - return + let options = @lib.parse_agents_command_args(command_args) catch { + @lib.ComponentRoleError(message) => { + println("Error: \{message}") + @sys.exit(1) + return + } } - run_agents(args[2]) catch { - e => println("Error: \{e}") + run_agents(options.project_root, options.component_dir, options.role) catch { + @lib.ComponentRoleError(message) => { + println("Error: \{message}") + @sys.exit(1) + } + e => { + println("Error: \{e}") + @sys.exit(1) + } } } else { println("Unknown command: \{args[1]}") + @sys.exit(1) } } ///| -/// Runs the `agents` subcommand: scans all packages in a project and generates -/// agent, schema, RPC client, tool definition, and tool client code where needed. -fn run_agents(project_root : String) -> Unit raise { +/// Runs the `agents` subcommand: scans a project for shared schema context and +/// writes generated code only to the selected component package. +fn run_agents( + project_root : String, + component_dir : String, + role : @lib.ComponentRole, +) -> Unit raise { let scans = @lib.discover_and_scan(project_root) + let target_dir = @lib.component_target_dir(project_root, component_dir) + if !scans.iter().any(fn(scan) { scan.pkg.dir == target_dir }) { + @lib.raise_component_role_error( + "Component directory '" + target_dir + "' is not a package in the project", + ) + } // Collect all config types across all packages for cross-package validation let all_config_types : Array[@lib.ConfigTypeInfo] = [] for scan in scans { @@ -85,6 +184,9 @@ fn run_agents(project_root : String) -> Unit raise { } } for scan in scans { + if scan.pkg.dir != target_dir { + continue + } let pkg_dir = scan.pkg.dir let files = scan.files // Parse annotations from this package @@ -93,58 +195,117 @@ fn run_agents(project_root : String) -> Unit raise { let config_types = @lib.parse_config_types(files, package=scan.pkg.rel_path) let agents = @lib.parse_agents(files) let tools = @lib.parse_tools(files) + let has_middleware_annotations = @lib.has_middleware_annotations(files) + @lib.validate_component_role( + role, + agents.length(), + has_middleware_annotations, + ) + let middlewares = if has_middleware_annotations { + @lib.parse_tool_middlewares(files) + } else { + [] + } + validate_component_role_marker(pkg_dir, role) let has_derive = value_types.length() > 0 || multimodal_enums.length() > 0 || config_types.length() > 0 let has_agents = agents.length() > 0 let has_tools = tools.length() > 0 - if has_tools { + let has_middlewares = middlewares.length() > 0 + let required_pkg_imports : Array[(String, String)] = [] + let file_plan = GeneratedFilePlan::new() + if has_middlewares && role.allows_tool_middleware_registration() { + let middleware_impls = @lib.generate_tool_middleware_registration( + middlewares, tools, role, + ) + let middleware_formatted = fix_broken_strings( + @formatter.impls_to_string(middleware_impls), + ) + let middleware_output = generated_file_banner + + "\n\n" + + middleware_formatted + let middleware_path = "\{pkg_dir}/golem_tool_middlewares.mbt" + file_plan.stage_write( + middleware_path, + middleware_output, + "Generated \{middleware_path} with \{middlewares.length()} tool middleware(s)", + ) + required_pkg_imports.push( + ("golemcloud/golem_sdk/tool-middleware", "@toolMiddleware"), + ) + if middlewares.any(middleware => { + middleware.scope is @lib.ToolMiddlewareScopeInfo::Monomorphic(_) + }) { + required_pkg_imports.push( + ( + if role is @lib.ComponentRole::ToolMiddleware { + "golemcloud/golem_sdk/tool-core" + } else { + "golemcloud/golem_sdk/tool" + }, + "@tool", + ), + ) + required_pkg_imports.push(("golemcloud/golem_sdk/schema", "@schema")) + required_pkg_imports.push( + ("golemcloud/golem_sdk/schema_model", "@model"), + ) + required_pkg_imports.push( + ("golemcloud/golem_sdk/interface/golem/core/types", "@types"), + ) + required_pkg_imports.push( + ("golemcloud/golem_sdk/interface/golem/tool/common", "@toolCommon"), + ) + required_pkg_imports.push( + ("golemcloud/golem_sdk/async-core", "@asyncCore"), + ) + } + } else { + file_plan.stage_removal("\{pkg_dir}/golem_tool_middlewares.mbt") + } + if has_tools && role.allows_tool_registration() { let tool_impls = @lib.generate_tool_registration(tools) let tool_formatted = fix_broken_strings( @formatter.impls_to_string(tool_impls), ) - let tool_output = "// Generated by golem_sdk_tools — DO NOT EDIT!\n\n" + - tool_formatted + let tool_output = generated_file_banner + "\n\n" + tool_formatted let tool_path = "\{pkg_dir}/golem_tools.mbt" - @fs.write_string_to_file(tool_path, tool_output) - println("Generated \{tool_path} with \{tools.length()} tool(s)") + file_plan.stage_write( + tool_path, + tool_output, + "Generated \{tool_path} with \{tools.length()} tool(s)", + ) let tool_client_impls = @lib.generate_tool_client_code(tools) let tool_client_formatted = fix_broken_strings( @formatter.impls_to_string(tool_client_impls), ) - let tool_client_output = "// Generated by golem_sdk_tools — DO NOT EDIT!\n\n" + + let tool_client_output = generated_file_banner + + "\n\n" + tool_client_formatted let tool_client_path = "\{pkg_dir}/golem_tool_clients.mbt" - @fs.write_string_to_file(tool_client_path, tool_client_output) - println( + file_plan.stage_write( + tool_client_path, + tool_client_output, "Generated \{tool_client_path} with \{tools.length()} tool client(s)", ) - let pkg_path = "\{pkg_dir}/moon.pkg" - let mut pkg_content = @fs.read_file_to_string(pkg_path) - pkg_content = @lib.ensure_pkg_import( - pkg_content, "golemcloud/golem_sdk/tool", "@tool", - ) - pkg_content = @lib.ensure_pkg_import( - pkg_content, "golemcloud/golem_sdk/schema", "@schema", + required_pkg_imports.push(("golemcloud/golem_sdk/tool", "@tool")) + required_pkg_imports.push(("golemcloud/golem_sdk/schema", "@schema")) + required_pkg_imports.push(("golemcloud/golem_sdk/schema_model", "@model")) + required_pkg_imports.push( + ("golemcloud/golem_sdk/interface/golem/core/types", "@types"), ) - pkg_content = @lib.ensure_pkg_import( - pkg_content, "golemcloud/golem_sdk/schema_model", "@model", + required_pkg_imports.push( + ("golemcloud/golem_sdk/interface/golem/tool/common", "@toolCommon"), ) - pkg_content = @lib.ensure_pkg_import( - pkg_content, "golemcloud/golem_sdk/interface/golem/core/types", "@types", + required_pkg_imports.push( + ("golemcloud/golem_sdk/async-core", "@asyncCore"), ) - pkg_content = @lib.ensure_pkg_import( - pkg_content, "golemcloud/golem_sdk/interface/golem/tool/common", "@toolCommon", - ) - pkg_content = @lib.ensure_pkg_import( - pkg_content, "golemcloud/golem_sdk/async-core", "@asyncCore", - ) - @fs.write_string_to_file(pkg_path, pkg_content) } else { - cleanup_stale_file("\{pkg_dir}/golem_tools.mbt") - cleanup_stale_file("\{pkg_dir}/golem_tool_clients.mbt") + file_plan.stage_removal("\{pkg_dir}/golem_tools.mbt") + file_plan.stage_removal("\{pkg_dir}/golem_tool_clients.mbt") } - if has_agents { + if has_agents && role.allows_agent_registration() { // --- Agent package: generate golem_agents.mbt, golem_derive.mbt, golem_clients.mbt --- if agents[0].has_init { println( @@ -160,23 +321,30 @@ fn run_agents(project_root : String) -> Unit raise { // golem_agents.mbt let impls = @lib.generate_agent_registration(agents) let formatted = fix_broken_strings(@formatter.impls_to_string(impls)) - let output = "// Generated by golem_sdk_tools — DO NOT EDIT!\n\n" + - formatted + let output = generated_file_banner + "\n\n" + formatted let output_path = "\{pkg_dir}/golem_agents.mbt" - @fs.write_string_to_file(output_path, output) - println("Generated \{output_path} with \{agents.length()} agent(s)") + file_plan.stage_write( + output_path, + output, + "Generated \{output_path} with \{agents.length()} agent(s)", + ) // golem_derive.mbt if has_derive || all_config_types.length() > 0 { - generate_derive_file( - pkg_dir, + let derive_output = generate_derive_file( value_types, multimodal_enums, config_types, all_config_types~, type_id_prefix=dotted_pkg(scan.pkg.rel_path), ) + let derive_path = "\{pkg_dir}/golem_derive.mbt" + file_plan.stage_write( + derive_path, + derive_output, + "Generated \{derive_path} with \{value_types.length()} type(s), \{multimodal_enums.length()} multimodal enum(s), and \{config_types.length()} config type(s)", + ) } else { - cleanup_stale_file("\{pkg_dir}/golem_derive.mbt") + file_plan.stage_removal("\{pkg_dir}/golem_derive.mbt") } // golem_clients.mbt let client_impls = @lib.generate_client_code( @@ -187,114 +355,107 @@ fn run_agents(project_root : String) -> Unit raise { let client_formatted = fix_broken_strings( @formatter.impls_to_string(client_impls), ) - let client_output = "// Generated by golem_sdk_tools — DO NOT EDIT!\n\n" + - client_formatted + let client_output = generated_file_banner + "\n\n" + client_formatted let client_path = "\{pkg_dir}/golem_clients.mbt" - @fs.write_string_to_file(client_path, client_output) - println("Generated golem_clients.mbt with \{agents.length()} client(s)") - // Auto-add imports needed by the generated golem_agents.mbt / - // golem_clients.mbt to moon.pkg (idempotent; new schema model). - let pkg_path = "\{pkg_dir}/moon.pkg" - let mut pkg_content = @fs.read_file_to_string(pkg_path) - pkg_content = @lib.ensure_pkg_import( - pkg_content, "golemcloud/golem_sdk/agents", "@agents", - ) - pkg_content = @lib.ensure_pkg_import( - pkg_content, "golemcloud/golem_sdk/schema", "@schema", + file_plan.stage_write( + client_path, + client_output, + "Generated golem_clients.mbt with \{agents.length()} client(s)", ) - pkg_content = @lib.ensure_pkg_import( - pkg_content, "golemcloud/golem_sdk/interface/golem/agent/common", "@common", + required_pkg_imports.push(("golemcloud/golem_sdk/agents", "@agents")) + required_pkg_imports.push(("golemcloud/golem_sdk/schema", "@schema")) + required_pkg_imports.push( + ("golemcloud/golem_sdk/interface/golem/agent/common", "@common"), ) - pkg_content = @lib.ensure_pkg_import( - pkg_content, "golemcloud/golem_sdk/interface/golem/core/types", "@types", + required_pkg_imports.push( + ("golemcloud/golem_sdk/interface/golem/core/types", "@types"), ) - pkg_content = @lib.ensure_pkg_import( - pkg_content, "golemcloud/golem_sdk/rpc", "@rpc", + required_pkg_imports.push(("golemcloud/golem_sdk/rpc", "@rpc")) + required_pkg_imports.push( + ("golemcloud/golem_sdk/interface/golem/agent/host", "@agentHost"), ) - pkg_content = @lib.ensure_pkg_import( - pkg_content, "golemcloud/golem_sdk/interface/golem/agent/host", "@agentHost", - ) - pkg_content = @lib.ensure_pkg_import( - pkg_content, "golemcloud/golem_sdk/interface/wasi/clocks/system-clock", "@systemClock", + required_pkg_imports.push( + ( + "golemcloud/golem_sdk/interface/wasi/clocks/system-clock", "@systemClock", + ), ) // JSON snapshot helpers are emitted for agents deriving ToJson/FromJson. let needs_json = agents .iter() .any(fn(a) { a.has_json_derives && not(a.has_snapshottable) }) if needs_json { - pkg_content = @lib.ensure_pkg_import( - pkg_content, "moonbitlang/core/json", "@json", - ) - pkg_content = @lib.ensure_pkg_import( - pkg_content, "moonbitlang/core/encoding/utf8", "@utf8", - ) + required_pkg_imports.push(("moonbitlang/core/json", "@json")) + required_pkg_imports.push(("moonbitlang/core/encoding/utf8", "@utf8")) } // Custom #derive.golem_schema types emit a golem_derive.mbt in this same // package that references @model (schema_model). if has_derive { - pkg_content = @lib.ensure_pkg_import( - pkg_content, "golemcloud/golem_sdk/schema_model", "@model", + required_pkg_imports.push( + ("golemcloud/golem_sdk/schema_model", "@model"), ) } // Multimodal agents reference @multimodal.Multimodal[...] in the agent // type/dispatch, and #derive.multimodal enums emit MultimodalModality // impls into golem_derive.mbt. if has_multimodal_agent(agents) || multimodal_enums.length() > 0 { - pkg_content = @lib.ensure_pkg_import( - pkg_content, "golemcloud/golem_sdk/multimodal", "@multimodal", + required_pkg_imports.push( + ("golemcloud/golem_sdk/multimodal", "@multimodal"), ) } let uses_config = agents.iter().any(fn(a) { a.config_type is Some(_) }) if uses_config || config_types.length() > 0 { - pkg_content = @lib.ensure_pkg_import( - pkg_content, "golemcloud/golem_sdk/config", "@config", - ) + required_pkg_imports.push(("golemcloud/golem_sdk/config", "@config")) } - @fs.write_string_to_file(pkg_path, pkg_content) } else if has_derive { // --- Non-agent package with derive types: generate golem_derive.mbt only --- - generate_derive_file( - pkg_dir, + let derive_output = generate_derive_file( value_types, multimodal_enums, config_types, type_id_prefix=dotted_pkg(scan.pkg.rel_path), ) - // Ensure needed imports in moon.pkg - let pkg_path = "\{pkg_dir}/moon.pkg" - let mut pkg_content = @fs.read_file_to_string(pkg_path) - pkg_content = @lib.ensure_pkg_import( - pkg_content, "golemcloud/golem_sdk/schema", "@schema", - ) - pkg_content = @lib.ensure_pkg_import( - pkg_content, "golemcloud/golem_sdk/schema_model", "@model", + let derive_path = "\{pkg_dir}/golem_derive.mbt" + file_plan.stage_write( + derive_path, + derive_output, + "Generated \{derive_path} with \{value_types.length()} type(s), \{multimodal_enums.length()} multimodal enum(s), and \{config_types.length()} config type(s)", ) + required_pkg_imports.push(("golemcloud/golem_sdk/schema", "@schema")) + required_pkg_imports.push(("golemcloud/golem_sdk/schema_model", "@model")) if multimodal_enums.length() > 0 { - pkg_content = @lib.ensure_pkg_import( - pkg_content, "golemcloud/golem_sdk/multimodal", "@multimodal", + required_pkg_imports.push( + ("golemcloud/golem_sdk/multimodal", "@multimodal"), ) } if config_types.length() > 0 { - pkg_content = @lib.ensure_pkg_import( - pkg_content, "golemcloud/golem_sdk/config", "@config", - ) - pkg_content = @lib.ensure_pkg_import( - pkg_content, "golemcloud/golem_sdk/agents", "@agents", - ) - pkg_content = @lib.ensure_pkg_import( - pkg_content, "golemcloud/golem_sdk/interface/golem/agent/common", "@common", + required_pkg_imports.push(("golemcloud/golem_sdk/config", "@config")) + required_pkg_imports.push(("golemcloud/golem_sdk/agents", "@agents")) + required_pkg_imports.push( + ("golemcloud/golem_sdk/interface/golem/agent/common", "@common"), ) } - @fs.write_string_to_file(pkg_path, pkg_content) } // Clean up stale files for categories not present in this package if not(has_agents) { - cleanup_stale_file("\{pkg_dir}/golem_agents.mbt") - cleanup_stale_file("\{pkg_dir}/golem_clients.mbt") + file_plan.stage_removal("\{pkg_dir}/golem_agents.mbt") + file_plan.stage_removal("\{pkg_dir}/golem_clients.mbt") } if not(has_derive) && not(has_agents) { - cleanup_stale_file("\{pkg_dir}/golem_derive.mbt") + file_plan.stage_removal("\{pkg_dir}/golem_derive.mbt") + } + let pkg_path = "\{pkg_dir}/moon.pkg" + let pkg_content = @fs.read_file_to_string(pkg_path) + let reconciled_pkg = @lib.reconcile_generated_pkg_imports( + pkg_content, + required_pkg_imports, + forbid_ambient_tool=role is @lib.ComponentRole::ToolMiddleware, + ) + file_plan.preflight() + file_plan.apply() + if reconciled_pkg != pkg_content { + @fs.write_string_to_file(pkg_path, reconciled_pkg) } + commit_component_role_marker(pkg_dir, role) } } @@ -314,13 +475,12 @@ fn dotted_pkg(rel_path : String) -> String { /// When `all_config_types` is provided, also generates override types and walker /// functions for config types reachable from agents in this package. fn generate_derive_file( - pkg_dir : String, value_types : Array[@lib.ValueTypeInfo], multimodal_enums : Array[@lib.MultimodalEnumInfo], config_types : Array[@lib.ConfigTypeInfo], all_config_types? : Array[@lib.ConfigTypeInfo] = [], type_id_prefix? : String = "", -) -> Unit raise { +) -> String raise { let all_impls : Array[@syntax.Impl] = [] if value_types.length() > 0 { @lib.generate_value_type_impls(value_types, type_id_prefix~).each(fn(i) { @@ -350,26 +510,76 @@ fn generate_derive_file( let derive_formatted = @formatter.impls_to_string( @list.List::from_array(all_impls), ) - let derive_output = "// Generated by golem_sdk_tools — DO NOT EDIT!\n\n" + - derive_formatted - let derive_path = "\{pkg_dir}/golem_derive.mbt" - @fs.write_string_to_file(derive_path, derive_output) - println( - "Generated \{derive_path} with \{value_types.length()} type(s), \{multimodal_enums.length()} multimodal enum(s), and \{config_types.length()} config type(s)", - ) + generated_file_banner + "\n\n" + derive_formatted +} + +///| +/// Writes a generated file without replacing a user-owned file at the managed path. +fn write_generated_file(path : String, content : String) -> Unit raise { + validate_generated_write_path(path) + @fs.write_string_to_file(path, content) } ///| -/// Removes a generated file if it exists. -fn cleanup_stale_file(path : String) -> Unit { +fn validate_generated_write_path(path : String) -> Unit raise { if @fs.path_exists(path) { - @fs.remove_file(path) catch { - e => { - println("Warning: could not remove stale file \{path}: \{e}") - return - } + let existing = @fs.read_file_to_string(path) + if !existing.has_prefix(generated_file_banner + "\n") { + @lib.raise_component_role_error( + "Refusing to overwrite non-generated file '" + path + "'", + ) + } + } +} + +///| +fn validate_generated_removal_path(path : String) -> Unit raise { + if @fs.path_exists(path) { + let existing = @fs.read_file_to_string(path) + if !existing.has_prefix(generated_file_banner + "\n") { + @lib.raise_component_role_error( + "Refusing to remove non-generated file '" + path + "'", + ) + } + } +} + +///| +/// Validates that existing generated role state agrees with the selected role. +fn validate_component_role_marker( + component_dir : String, + role : @lib.ComponentRole, +) -> Unit raise { + let marker_path = "\{component_dir}/.golem-sdk-role" + if @fs.path_exists(marker_path) { + let selected = @lib.parse_component_role_marker( + @fs.read_file_to_string(marker_path), + ) + if selected != role { + @lib.raise_component_role_error( + "Component role mismatch: '" + + component_dir + + "' was already generated as '" + + selected.name() + + "' but this command selected '" + + role.name() + + "'", + ) } - println("Removed stale \{path}") + } +} + +///| +/// Commits role state after every other command operation has succeeded. +fn commit_component_role_marker( + component_dir : String, + role : @lib.ComponentRole, +) -> Unit raise { + validate_component_role_marker(component_dir, role) + let marker_path = "\{component_dir}/.golem-sdk-role" + if not(@fs.path_exists(marker_path)) { + @fs.write_string_to_file(marker_path, @lib.component_role_marker(role)) + println("Generated \{marker_path} for role \{role.name()}") } } @@ -398,10 +608,25 @@ fn has_multimodal_agent(agents : Array[@lib.AgentInfo]) -> Bool { } ///| -/// Runs the `reexports` subcommand: parses SDK gen sources and generates `golem_reexports.mbt` plus updates `moon.pkg`. -fn run_reexports(sdk_path : String, target_dir : String) -> Unit raise { - let gen_dir = "\{sdk_path}/gen" +/// Runs the `reexports` subcommand from the exact generated package selected by +/// the component role, then updates `golem_reexports.mbt` and `moon.pkg`. +fn run_reexports( + sdk_path : String, + target_dir : String, + role : @lib.ComponentRole, +) -> Unit raise { + validate_component_role_marker(target_dir, role) + let target_pkg_path = "\{target_dir}/moon.pkg" + let target_pkg_content = @fs.read_file_to_string(target_pkg_path) + let role_safe_pkg_content = if role is @lib.ComponentRole::ToolMiddleware { + @lib.reconcile_pure_role_pkg_imports(target_pkg_content) + } else { + target_pkg_content + } + let gen_package = role.gen_package() + let gen_dir = "\{sdk_path}/\{gen_package}" let entries = @fs.read_dir(gen_dir) + entries.sort_by((left, right) => left.compare(right)) let fns : Array[@lib.FnSignature] = [] for entry in entries { if entry.has_suffix(".mbt") { @@ -414,22 +639,26 @@ fn run_reexports(sdk_path : String, target_dir : String) -> Unit raise { } let impls = @lib.generate_reexports(fns, "gen") let formatted = @formatter.impls_to_string(impls) - let output = "// Generated by golem_sdk_tools — DO NOT EDIT!\n\n" + - formatted + let output = generated_file_banner + "\n\n" + formatted let output_path = "\{target_dir}/golem_reexports.mbt" - @fs.write_string_to_file(output_path, output) + write_generated_file(output_path, output) println("Generated \{output_path} with \{fns.length()} functions") - // Update target moon.pkg with link section from SDK's gen/moon.pkg - let gen_pkg_content = @fs.read_file_to_string("\{gen_dir}/moon.pkg") + // Update target moon.pkg with the selected generated package's link section. + let gen_pkg_path = if @fs.path_exists("\{gen_dir}/moon.pkg") { + "\{gen_dir}/moon.pkg" + } else { + "\{gen_dir}/moon.pkg.json" + } + let gen_pkg_content = @fs.read_file_to_string(gen_pkg_path) let exports = @lib.transform_exports(@lib.parse_pkg_exports(gen_pkg_content)) - let target_pkg_path = "\{target_dir}/moon.pkg" - let target_pkg_content = @fs.read_file_to_string(target_pkg_path) - // The generated golem_reexports.mbt references the SDK's `gen` package, so - // make sure it is imported. - let with_gen_import = @lib.ensure_pkg_import( - target_pkg_content, "golemcloud/golem_sdk/gen", "@gen", + // Generated wrappers consistently use @gen while the imported package is + // selected exactly from the component role. + let with_gen_import = @lib.ensure_role_gen_import( + role_safe_pkg_content, + "golemcloud/golem_sdk/\{gen_package}", ) let updated = @lib.update_pkg_link(with_gen_import, exports) @fs.write_string_to_file(target_pkg_path, updated) println("Updated \{target_pkg_path} with \{exports.length()} exports") + commit_component_role_marker(target_dir, role) } diff --git a/sdks/moonbit/golem_sdk_tools/cmd/moon.pkg b/sdks/moonbit/golem_sdk_tools/cmd/moon.pkg index e340592294..d99da2b85b 100644 --- a/sdks/moonbit/golem_sdk_tools/cmd/moon.pkg +++ b/sdks/moonbit/golem_sdk_tools/cmd/moon.pkg @@ -5,6 +5,7 @@ import { "moonbitlang/formatter", "moonbitlang/parser/syntax", "moonbitlang/x/fs", + "moonbitlang/x/sys", "golemcloud/golem_sdk_tools/lib", } diff --git a/sdks/moonbit/golem_sdk_tools/cmd/orchestration_wbtest.mbt b/sdks/moonbit/golem_sdk_tools/cmd/orchestration_wbtest.mbt new file mode 100644 index 0000000000..c91543da53 --- /dev/null +++ b/sdks/moonbit/golem_sdk_tools/cmd/orchestration_wbtest.mbt @@ -0,0 +1,535 @@ +///| +fn remove_fixture_tree(path : String) -> Unit raise { + if !@fs.path_exists(path) { + return + } + if @fs.is_dir(path) { + for entry in @fs.read_dir(path) { + remove_fixture_tree(path + "/" + entry) + } + @fs.remove_dir(path) + } else { + @fs.remove_file(path) + } +} + +///| +fn create_component_fixture(root : String, source : String) -> String raise { + if !@fs.path_exists("_build") { + @fs.create_dir("_build") + } + remove_fixture_tree(root) + @fs.create_dir(root) + let component = root + "/component" + @fs.create_dir(component) + @fs.write_string_to_file( + component + "/moon.pkg", + "options(\n \"is-main\": true,\n)\n", + ) + @fs.write_string_to_file(component + "/source.mbt", source) + component +} + +///| +fn generated_snapshot( + component : String, + files : Array[String], +) -> String raise { + let parts : Array[String] = [] + for file in files { + parts.push(file) + parts.push(@fs.read_file_to_string(component + "/" + file)) + } + parts.join("\n---\n") +} + +///| +fn append_package_snapshot( + root : String, + relative_dir : String, + parts : Array[String], +) -> Unit raise { + let dir = if relative_dir == "" { root } else { root + "/" + relative_dir } + let entries = @fs.read_dir(dir) + entries.sort_by((left, right) => left.compare(right)) + for entry in entries { + let relative_path = if relative_dir == "" { + entry + } else { + relative_dir + "/" + entry + } + let path = root + "/" + relative_path + if @fs.is_dir(path) { + append_package_snapshot(root, relative_path, parts) + } else { + parts.push(relative_path) + parts.push(@fs.read_file_to_string(path)) + } + } +} + +///| +fn package_snapshot(component : String) -> String raise { + let parts : Array[String] = [] + append_package_snapshot(component, "", parts) + parts.join("\n---\n") +} + +///| +fn agents_role_error( + project_root : String, + component_dir : String, + role : @lib.ComponentRole, +) -> String { + try run_agents(project_root, component_dir, role) catch { + @lib.ComponentRoleError(message) => message + error => "Unexpected error: \{error}" + } noraise { + _ => "NO ERROR" + } +} + +///| +fn reexports_role_error( + sdk_path : String, + target_dir : String, + role : @lib.ComponentRole, +) -> String { + try run_reexports(sdk_path, target_dir, role) catch { + @lib.ComponentRoleError(message) => message + error => "Unexpected error: \{error}" + } noraise { + _ => "NO ERROR" + } +} + +///| +test "pure middleware generation is targeted, idempotent, and cleans stale output" { + let root = "_build/gol34-phase8-pure" + let component = create_component_fixture( + root, + ( + #|#derive.tool("echo") + #|struct Echo {} + #| + #|pub fn Echo::echo(value : String) -> String { + #| value + #|} + #| + #|#derive.tool_middleware("policy", presented="Echo") + #|struct Policy {} + #| + #|pub async fn Policy::echo( + #| underlying : EchoUnderlying, + #| value : String, + #|) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + #| underlying.echo(value) + #|} + ), + ) + run_agents(root, "component", @lib.ComponentRole::ToolMiddleware) + assert_true(@fs.path_exists(component + "/golem_tool_middlewares.mbt")) + assert_false(@fs.path_exists(component + "/golem_tools.mbt")) + assert_false(@fs.path_exists(component + "/golem_tool_clients.mbt")) + assert_false(@fs.path_exists(component + "/golem_agents.mbt")) + let pkg = @fs.read_file_to_string(component + "/moon.pkg") + assert_true(pkg.contains("\"golemcloud/golem_sdk/tool-core\" @tool,")) + assert_false(pkg.contains("\"golemcloud/golem_sdk/tool\" @tool,")) + assert_false(pkg.contains("golem:tool/host")) + let generated = @fs.read_file_to_string( + component + "/golem_tool_middlewares.mbt", + ) + assert_eq( + generated.split("@toolMiddleware.register_tool_middleware(").count() - 1, + 1, + ) + assert_false(generated.contains("register_tool_def_invoker")) + assert_false(generated.contains("ToolClient")) + let before = generated_snapshot(component, [ + "moon.pkg", ".golem-sdk-role", "golem_tool_middlewares.mbt", + ]) + run_agents(root, "component", @lib.ComponentRole::ToolMiddleware) + let after = generated_snapshot(component, [ + "moon.pkg", ".golem-sdk-role", "golem_tool_middlewares.mbt", + ]) + assert_eq(after, before) + @fs.write_string_to_file( + component + "/source.mbt", + ( + #|#derive.tool("echo") + #|struct Echo {} + #| + #|pub fn Echo::echo(value : String) -> String { + #| value + #|} + ), + ) + run_agents(root, "component", @lib.ComponentRole::ToolMiddleware) + assert_false(@fs.path_exists(component + "/golem_tool_middlewares.mbt")) + let cleaned_pkg = @fs.read_file_to_string(component + "/moon.pkg") + assert_false(cleaned_pkg.contains("golemcloud/golem_sdk/")) + remove_fixture_tree(root) +} + +///| +test "universal pure generation adds only its runtime import" { + let root = "_build/gol34-phase8-universal" + let component = create_component_fixture( + root, + ( + #|#derive.universal_tool_middleware("audit") + #|pub async fn audit( + #| invocation : @toolMiddleware.RawToolInvocation, + #| underlying : @toolMiddleware.UnderlyingTool, + #|) -> Result[ + #| @toolMiddleware.RawInvocationResult, + #| @toolMiddleware.ToolInvokeError[@toolMiddleware.RawTypedSchemaValue], + #|] { + #| underlying.invoke_raw( + #| invocation.command_path(), + #| invocation.input(), + #| invocation.stdin(), + #| ) + #|} + ), + ) + run_agents(root, "component", @lib.ComponentRole::ToolMiddleware) + let pkg = @fs.read_file_to_string(component + "/moon.pkg") + assert_true( + pkg.contains("\"golemcloud/golem_sdk/tool-middleware\" @toolMiddleware,"), + ) + assert_false(pkg.contains("\"golemcloud/golem_sdk/tool-core\"")) + assert_false(pkg.contains("\"golemcloud/golem_sdk/tool\"")) + assert_false(pkg.contains("golemcloud/golem_sdk/schema")) + assert_false(pkg.contains("golemcloud/golem_sdk/interface/golem/tool")) + remove_fixture_tree(root) +} + +///| +test "ordinary and combined roles generate exactly their selected surfaces" { + let ordinary_root = "_build/gol34-phase8-ordinary" + let ordinary = create_component_fixture( + ordinary_root, + ( + #|#derive.tool("echo") + #|struct Echo {} + #| + #|pub fn Echo::echo(value : String) -> String { + #| value + #|} + ), + ) + run_agents(ordinary_root, "component", @lib.ComponentRole::Ordinary) + assert_true(@fs.path_exists(ordinary + "/golem_tools.mbt")) + assert_true(@fs.path_exists(ordinary + "/golem_tool_clients.mbt")) + assert_false(@fs.path_exists(ordinary + "/golem_tool_middlewares.mbt")) + assert_false( + @fs.read_file_to_string(ordinary + "/moon.pkg").contains( + "golem_sdk/tool-middleware", + ), + ) + let combined_root = "_build/gol34-phase8-combined" + let combined = create_component_fixture( + combined_root, + ( + #|#derive.agent + #|struct CombinedAgent {} + #| + #|fn CombinedAgent::new() -> CombinedAgent { + #| {} + #|} + #| + #|pub fn CombinedAgent::status(self : Self) -> String { + #| ignore(self) + #| "ready" + #|} + #| + #|#derive.tool("echo") + #|struct Echo {} + #| + #|pub fn Echo::echo(value : String) -> String { + #| value + #|} + #| + #|#derive.tool_middleware("policy", presented="Echo") + #|struct Policy {} + #| + #|pub async fn Policy::echo( + #| underlying : EchoUnderlying, + #| value : String, + #|) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + #| underlying.echo(value) + #|} + ), + ) + run_agents(combined_root, "component", @lib.ComponentRole::Combined) + let combined_files = [ + "moon.pkg", ".golem-sdk-role", "golem_agents.mbt", "golem_clients.mbt", "golem_tools.mbt", + "golem_tool_clients.mbt", "golem_tool_middlewares.mbt", + ] + for file in combined_files { + assert_true(@fs.path_exists(combined + "/" + file)) + } + let agents = @fs.read_file_to_string(combined + "/golem_agents.mbt") + let tools = @fs.read_file_to_string(combined + "/golem_tools.mbt") + let middlewares = @fs.read_file_to_string( + combined + "/golem_tool_middlewares.mbt", + ) + assert_eq(agents.split("fn init {").count() - 1, 1) + assert_eq(tools.split("fn init {").count() - 1, 1) + assert_eq(middlewares.split("fn init {").count() - 1, 1) + assert_eq( + middlewares.split("@toolMiddleware.register_tool_middleware(").count() - 1, + 1, + ) + let before = generated_snapshot(combined, combined_files) + run_agents(combined_root, "component", @lib.ComponentRole::Combined) + assert_eq(generated_snapshot(combined, combined_files), before) + remove_fixture_tree(ordinary_root) + remove_fixture_tree(combined_root) +} + +///| +test "middleware generation never overwrites or removes a user-owned managed path" { + let overwrite_root = "_build/gol34-phase8-owned-overwrite" + let overwrite_component = create_component_fixture( + overwrite_root, + ( + #|#derive.tool("echo") + #|struct Echo {} + #| + #|pub fn Echo::echo(value : String) -> String { + #| value + #|} + #| + #|#derive.tool_middleware("policy", presented="Echo") + #|struct Policy {} + #| + #|pub async fn Policy::echo( + #| underlying : EchoUnderlying, + #| value : String, + #|) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + #| underlying.echo(value) + #|} + ), + ) + let user_source = "// user-owned despite the reserved filename\npub fn keep() -> Unit {}\n" + let overwrite_path = overwrite_component + "/golem_tool_middlewares.mbt" + @fs.write_string_to_file(overwrite_path, user_source) + assert_true( + agents_role_error( + overwrite_root, + "component", + @lib.ComponentRole::ToolMiddleware, + ).contains("Refusing to overwrite non-generated file"), + ) + assert_eq(@fs.read_file_to_string(overwrite_path), user_source) + let removal_root = "_build/gol34-phase8-owned-removal" + let removal_component = create_component_fixture( + removal_root, + ( + #|#derive.tool("echo") + #|struct Echo {} + #| + #|pub fn Echo::echo(value : String) -> String { + #| value + #|} + ), + ) + let removal_path = removal_component + "/golem_tool_middlewares.mbt" + @fs.write_string_to_file(removal_path, user_source) + assert_true( + agents_role_error( + removal_root, + "component", + @lib.ComponentRole::ToolMiddleware, + ).contains("Refusing to remove non-generated file"), + ) + assert_eq(@fs.read_file_to_string(removal_path), user_source) + remove_fixture_tree(overwrite_root) + remove_fixture_tree(removal_root) +} + +///| +test "middleware generation is independent of source-file creation order" { + let first_root = "_build/gol34-phase8-order-first" + let second_root = "_build/gol34-phase8-order-second" + let first = create_component_fixture(first_root, "") + let second = create_component_fixture(second_root, "") + let alpha = + #|#derive.tool("alpha") + #|struct Alpha {} + #| + #|pub fn Alpha::run(value : String) -> String { + #| value + #|} + #| + #|#derive.tool_middleware("alpha-policy", presented="Alpha") + #|struct AlphaPolicy {} + #| + #|pub async fn AlphaPolicy::run( + #| underlying : AlphaUnderlying, + #| value : String, + #|) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + #| underlying.run(value) + #|} + let beta = + #|#derive.tool("beta") + #|struct Beta {} + #| + #|pub fn Beta::run(value : String) -> String { + #| value + #|} + #| + #|#derive.tool_middleware("beta-policy", presented="Beta") + #|struct BetaPolicy {} + #| + #|pub async fn BetaPolicy::run( + #| underlying : BetaUnderlying, + #| value : String, + #|) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + #| underlying.run(value) + #|} + @fs.write_string_to_file(first + "/alpha.mbt", alpha) + @fs.write_string_to_file(first + "/beta.mbt", beta) + @fs.write_string_to_file(second + "/beta.mbt", beta) + @fs.write_string_to_file(second + "/alpha.mbt", alpha) + run_agents(first_root, "component", @lib.ComponentRole::ToolMiddleware) + run_agents(second_root, "component", @lib.ComponentRole::ToolMiddleware) + assert_eq( + generated_snapshot(first, ["moon.pkg", "golem_tool_middlewares.mbt"]), + generated_snapshot(second, ["moon.pkg", "golem_tool_middlewares.mbt"]), + ) + remove_fixture_tree(first_root) + remove_fixture_tree(second_root) +} + +///| +test "pure reexports rejects ambient user imports before changing generated state" { + let root = "_build/gol34-phase8-reexports-ambient" + let component = create_component_fixture(root, "") + let pkg = + #|import { + #| "golemcloud/golem_sdk/tool" @customTool, + #|} + #| + #|options( + #| "is-main": true, + #|) + let reexports = generated_file_banner + "\n\npub fn existing() -> Unit {}\n" + @fs.write_string_to_file(component + "/moon.pkg", pkg) + @fs.write_string_to_file(component + "/golem_reexports.mbt", reexports) + let error = reexports_role_error( + root + "/missing-sdk", + component, + @lib.ComponentRole::ToolMiddleware, + ) + assert_true(error.contains("must not import ambient package")) + assert_eq(@fs.read_file_to_string(component + "/moon.pkg"), pkg) + assert_eq( + @fs.read_file_to_string(component + "/golem_reexports.mbt"), + reexports, + ) + assert_false(@fs.path_exists(component + "/.golem-sdk-role")) + remove_fixture_tree(root) +} + +///| +test "agents ambient-import failure leaves the whole package unchanged" { + let root = "_build/gol34-phase11-agents-ambient" + let component = create_component_fixture( + root, + ( + #|#derive.tool("echo") + #|struct Echo {} + #| + #|pub fn Echo::echo(value : String) -> String { + #| value + #|} + #| + #|#derive.tool_middleware("policy", presented="Echo") + #|struct Policy {} + #| + #|pub async fn Policy::echo( + #| underlying : EchoUnderlying, + #| value : String, + #|) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + #| underlying.echo(value) + #|} + ), + ) + @fs.write_string_to_file( + component + "/moon.pkg", + ( + #|import { + #| "golemcloud/golem_sdk/tool" @customTool, + #|} + #| + #|options( + #| "is-main": true, + #|) + ), + ) + @fs.write_string_to_file( + component + "/golem_tool_middlewares.mbt", + generated_file_banner + "\n\npub fn previous_middleware() -> Unit {}\n", + ) + @fs.write_string_to_file( + component + "/golem_tools.mbt", + generated_file_banner + "\n\npub fn stale_tool() -> Unit {}\n", + ) + let before = package_snapshot(component) + let error = agents_role_error( + root, + "component", + @lib.ComponentRole::ToolMiddleware, + ) + assert_true(error.contains("must not import ambient package")) + assert_eq(package_snapshot(component), before) + assert_false(@fs.path_exists(component + "/.golem-sdk-role")) + remove_fixture_tree(root) +} + +///| +test "agents stale ownership failure leaves the whole package unchanged" { + let root = "_build/gol34-phase11-agents-stale" + let component = create_component_fixture( + root, + ( + #|#derive.tool("echo") + #|struct Echo {} + #| + #|pub fn Echo::echo(value : String) -> String { + #| value + #|} + #| + #|#derive.tool_middleware("policy", presented="Echo") + #|struct Policy {} + #| + #|pub async fn Policy::echo( + #| underlying : EchoUnderlying, + #| value : String, + #|) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + #| underlying.echo(value) + #|} + ), + ) + @fs.write_string_to_file( + component + "/golem_tool_middlewares.mbt", + generated_file_banner + "\n\npub fn previous_middleware() -> Unit {}\n", + ) + @fs.write_string_to_file( + component + "/golem_clients.mbt", + "// user-owned despite the reserved filename\npub fn keep() -> Unit {}\n", + ) + let before = package_snapshot(component) + let error = agents_role_error( + root, + "component", + @lib.ComponentRole::ToolMiddleware, + ) + assert_true(error.contains("Refusing to remove non-generated file")) + assert_eq(package_snapshot(component), before) + assert_false(@fs.path_exists(component + "/.golem-sdk-role")) + remove_fixture_tree(root) +} diff --git a/sdks/moonbit/golem_sdk_tools/lib/component_role.mbt b/sdks/moonbit/golem_sdk_tools/lib/component_role.mbt new file mode 100644 index 0000000000..6673205bee --- /dev/null +++ b/sdks/moonbit/golem_sdk_tools/lib/component_role.mbt @@ -0,0 +1,345 @@ +///| +pub(all) enum ComponentRole { + Ordinary + ToolMiddleware + Combined +} derive(Debug, Eq) + +///| +pub fn ComponentRole::name(self : Self) -> String { + match self { + Ordinary => "ordinary" + ToolMiddleware => "tool-middleware" + Combined => "combined" + } +} + +///| +pub fn ComponentRole::gen_package(self : Self) -> String { + match self { + Ordinary => "gen" + ToolMiddleware => "gen-tool-middleware" + Combined => "gen-agent-tool-middleware" + } +} + +///| +pub fn ComponentRole::allows_agent_registration(self : Self) -> Bool { + self is Ordinary || self is Combined +} + +///| +pub fn ComponentRole::allows_tool_registration(self : Self) -> Bool { + self is Ordinary || self is Combined +} + +///| +pub fn ComponentRole::allows_tool_middleware_registration(self : Self) -> Bool { + self is ToolMiddleware || self is Combined +} + +///| +pub suberror ComponentRoleError { + ComponentRoleError(String) +} derive(Debug) + +///| +fn component_role_fail(message : String) -> Unit raise ComponentRoleError { + raise ComponentRoleError(message) +} + +///| +pub fn raise_component_role_error( + message : String, +) -> Unit raise ComponentRoleError { + component_role_fail(message) +} + +///| +pub fn parse_component_role( + value : String, +) -> ComponentRole raise ComponentRoleError { + match value { + "ordinary" => Ordinary + "tool-middleware" => ToolMiddleware + "combined" => Combined + _ => { + component_role_fail( + "Invalid component role '" + + value + + "'; expected ordinary, tool-middleware, or combined", + ) + abort("") + } + } +} + +///| +pub(all) struct AgentsCommandOptions { + project_root : String + component_dir : String + role : ComponentRole +} derive(Debug, Eq) + +///| +pub(all) struct ReexportsCommandOptions { + sdk_path : String + target_dir : String + role : ComponentRole +} derive(Debug, Eq) + +///| +fn set_cli_option( + option : String, + current : String?, + value : String, +) -> String raise ComponentRoleError { + if current is Some(_) { + component_role_fail("Duplicate " + option + " option") + } + value +} + +///| +pub fn parse_agents_command_args( + args : Array[String], +) -> AgentsCommandOptions raise ComponentRoleError { + if args.is_empty() { + component_role_fail( + "Usage: golem_sdk_tools agents --component-dir --role ", + ) + } + let mut component_dir : String? = None + let mut role_name : String? = None + let mut i = 1 + while i < args.length() { + let option = args[i] + if option != "--component-dir" && option != "--role" { + component_role_fail("Unknown agents option '" + option + "'") + } + if i + 1 >= args.length() { + component_role_fail("Missing value for " + option) + } + let value = args[i + 1] + if option == "--component-dir" { + component_dir = Some(set_cli_option(option, component_dir, value)) + } else { + role_name = Some(set_cli_option(option, role_name, value)) + } + i = i + 2 + } + guard component_dir is Some(component_dir) else { + component_role_fail("Missing required --component-dir option") + abort("") + } + guard role_name is Some(role_name) else { + component_role_fail("Missing required --role option") + abort("") + } + { + project_root: args[0], + component_dir, + role: parse_component_role(role_name), + } +} + +///| +pub fn parse_reexports_command_args( + args : Array[String], +) -> ReexportsCommandOptions raise ComponentRoleError { + if args.length() < 2 { + component_role_fail( + "Usage: golem_sdk_tools reexports --role ", + ) + } + let mut role_name : String? = None + let mut i = 2 + while i < args.length() { + let option = args[i] + if option != "--role" { + component_role_fail("Unknown reexports option '" + option + "'") + } + if i + 1 >= args.length() { + component_role_fail("Missing value for --role") + } + role_name = Some(set_cli_option(option, role_name, args[i + 1])) + i = i + 2 + } + guard role_name is Some(role_name) else { + component_role_fail("Missing required --role option") + abort("") + } + { + sdk_path: args[0], + target_dir: args[1], + role: parse_component_role(role_name), + } +} + +///| +fn is_middleware_attribute(attr : @attribute.Attribute) -> Bool { + attr.raw == "#derive.tool_middleware" || + attr.raw.has_prefix("#derive.tool_middleware(") || + attr.raw == "#derive.universal_tool_middleware" || + attr.raw.has_prefix("#derive.universal_tool_middleware(") +} + +///| +fn attrs_have_middleware_annotation( + attrs : @list.List[@attribute.Attribute], +) -> Bool { + attrs.any(is_middleware_attribute) +} + +///| +fn type_desc_has_middleware_annotation(desc : @syntax.TypeDesc) -> Bool { + match desc { + Record(fields~, constr_decl~) => { + if fields.any(field => attrs_have_middleware_annotation(field.attrs)) { + return true + } + match constr_decl { + Some(constr_decl) => attrs_have_middleware_annotation(constr_decl.attrs) + None => false + } + } + Variant(constrs) | Error(EnumPayload(constrs)) => + constrs.any(constr => attrs_have_middleware_annotation(constr.attrs)) + _ => false + } +} + +///| +fn local_types_have_middleware_annotation( + local_types : @list.List[@syntax.LocalTypeDecl], +) -> Bool { + local_types.any(local_type => { + type_desc_has_middleware_annotation(local_type.components) + }) +} + +///| +fn decl_body_has_middleware_annotation(body : @syntax.DeclBody) -> Bool { + match body { + DeclBody(local_types~, ..) => + local_types_have_middleware_annotation(local_types) + DeclNone | DeclStubs(_) => false + } +} + +///| +fn impl_has_middleware_annotation(impl_ : @syntax.Impl) -> Bool { + match impl_ { + TopTypeDef(decl) => + attrs_have_middleware_annotation(decl.attrs) || + type_desc_has_middleware_annotation(decl.components) + TopFuncDef(fun_decl~, decl_body~, ..) => + attrs_have_middleware_annotation(fun_decl.attrs) || + decl_body_has_middleware_annotation(decl_body) + TopImpl(attrs~, body~, ..) => + attrs_have_middleware_annotation(attrs) || + decl_body_has_middleware_annotation(body) + TopImplRelation(attrs~, ..) => attrs_have_middleware_annotation(attrs) + TopLetDef(attrs~, ..) => attrs_have_middleware_annotation(attrs) + TopTest(attrs~, local_types~, ..) => + attrs_have_middleware_annotation(attrs) || + local_types_have_middleware_annotation(local_types) + TopTrait(decl) => + attrs_have_middleware_annotation(decl.attrs) || + decl.methods.any(trait_method => { + attrs_have_middleware_annotation(trait_method.attrs) + }) + TopUsing(attrs~, ..) => attrs_have_middleware_annotation(attrs) + TopView(attrs~, view_constrs~, ..) => + attrs_have_middleware_annotation(attrs) || + view_constrs.any(constr => attrs_have_middleware_annotation(constr.attrs)) + TopExpr(local_types~, ..) => + local_types_have_middleware_annotation(local_types) + } +} + +///| +pub fn has_middleware_annotations( + files : Array[(String, String)], +) -> Bool raise ComponentRoleError { + for pair in files { + let (filename, source) = pair + let (impls, reports) = @parser.parse_string(source) + if reports.length() > 0 { + let messages : Array[String] = [] + for report in reports { + messages.push(report.to_string()) + } + component_role_fail( + "Failed to parse " + filename + ": " + messages.join("; "), + ) + } + for impl_ in impls { + if impl_has_middleware_annotation(impl_) { + return true + } + } + } + false +} + +///| +pub fn validate_component_role( + role : ComponentRole, + agent_count : Int, + middleware_annotations : Bool, +) -> Unit raise ComponentRoleError { + if role is Ordinary && middleware_annotations { + component_role_fail( + "ordinary component role does not export tool middleware", + ) + } + if role is ToolMiddleware && agent_count > 0 { + component_role_fail("tool-middleware component role does not export agents") + } +} + +///| +pub fn component_target_dir( + project_root : String, + component_dir : String, +) -> String { + let root = if project_root.length() > 1 && project_root.has_suffix("/") { + project_root[:project_root.length() - 1].to_owned() + } else { + project_root + } + let target = if component_dir.length() > 1 && component_dir.has_suffix("/") { + component_dir[:component_dir.length() - 1].to_owned() + } else { + component_dir + } + if target == "" || target == "." { + root + } else if target.has_prefix("/") { + target + } else { + root + "/" + target + } +} + +///| +pub fn component_role_marker(role : ComponentRole) -> String { + "# Generated by golem_sdk_tools; do not edit.\n" + role.name() + "\n" +} + +///| +pub fn parse_component_role_marker( + contents : String, +) -> ComponentRole raise ComponentRoleError { + let lines = contents + .split("\n") + .map(fn(line) { line.trim().to_owned() }) + .filter(fn(line) { line != "" && !line.has_prefix("#") }) + .collect() + guard lines is [role] else { + component_role_fail("Invalid generated component-role marker") + abort("") + } + parse_component_role(role) +} diff --git a/sdks/moonbit/golem_sdk_tools/lib/component_role_test.mbt b/sdks/moonbit/golem_sdk_tools/lib/component_role_test.mbt new file mode 100644 index 0000000000..42684b4180 --- /dev/null +++ b/sdks/moonbit/golem_sdk_tools/lib/component_role_test.mbt @@ -0,0 +1,127 @@ +///| +fn role_error(f : () -> Unit raise @lib.ComponentRoleError) -> String { + try f() catch { + @lib.ComponentRoleError(message) => message + } noraise { + _ => "NO ERROR" + } +} + +///| +test "component roles map to exact generated packages" { + let ordinary = @lib.parse_component_role("ordinary") + let middleware = @lib.parse_component_role("tool-middleware") + let combined = @lib.parse_component_role("combined") + inspect(ordinary.gen_package(), content="gen") + inspect(middleware.gen_package(), content="gen-tool-middleware") + inspect(combined.gen_package(), content="gen-agent-tool-middleware") + inspect(ordinary.allows_agent_registration(), content="true") + inspect(middleware.allows_agent_registration(), content="false") + inspect(middleware.allows_tool_registration(), content="false") + inspect(combined.allows_tool_registration(), content="true") + inspect(ordinary.allows_tool_middleware_registration(), content="false") + inspect(middleware.allows_tool_middleware_registration(), content="true") + inspect(combined.allows_tool_middleware_registration(), content="true") +} + +///| +test "command parsers require valid explicit roles" { + inspect( + role_error(() => ignore(@lib.parse_component_role("pure"))), + content="Invalid component role 'pure'; expected ordinary, tool-middleware, or combined", + ) + inspect( + role_error(() => { + ignore( + @lib.parse_agents_command_args([ + "project", "--component-dir", "component", + ]), + ) + }), + content="Missing required --role option", + ) + inspect( + role_error(() => { + ignore(@lib.parse_reexports_command_args(["sdk", "component", "--role"])) + }), + content="Missing value for --role", + ) +} + +///| +test "command parsers produce one shared role model" { + let agents = @lib.parse_agents_command_args([ + "project", "--role", "combined", "--component-dir", "components/main", + ]) + inspect(agents.project_root, content="project") + inspect(agents.component_dir, content="components/main") + inspect(agents.role.name(), content="combined") + let reexports = @lib.parse_reexports_command_args([ + "sdk", "component", "--role", "combined", + ]) + inspect(reexports.sdk_path, content="sdk") + inspect(reexports.target_dir, content="component") + inspect(reexports.role.name(), content="combined") +} + +///| +test "middleware annotations are detected from parsed attributes" { + inspect( + @lib.has_middleware_annotations([ + ( + "middleware.mbt", + ( + #|#derive.tool_middleware("adapter", presented="Presented", expected="Expected", alias="one", alias="two") + #|struct Adapter {} + #| + ), + ), + ]), + content="true", + ) + inspect( + @lib.has_middleware_annotations([ + ( + "ordinary.mbt", + ( + #|// #derive.tool_middleware("commented-out", presented="Tool") + #|#derive.tool + #|struct Tool {} + #| + ), + ), + ]), + content="false", + ) +} + +///| +test "role and source mismatches are rejected" { + inspect( + role_error(() => { + @lib.validate_component_role(@lib.ComponentRole::Ordinary, 0, true) + }), + content="ordinary component role does not export tool middleware", + ) + inspect( + role_error(() => { + @lib.validate_component_role(@lib.ComponentRole::ToolMiddleware, 1, false) + }), + content="tool-middleware component role does not export agents", + ) + @lib.validate_component_role(@lib.ComponentRole::Combined, 1, true) +} + +///| +test "component target and role marker are deterministic" { + inspect( + @lib.component_target_dir("project", "components/main"), + content="project/components/main", + ) + inspect(@lib.component_target_dir("project/", "."), content="project") + let marker = @lib.component_role_marker(@lib.ComponentRole::ToolMiddleware) + inspect( + @lib.parse_component_role_marker(marker).name(), + content="tool-middleware", + ) +} diff --git a/sdks/moonbit/golem_sdk_tools/lib/pkg.generated.mbti b/sdks/moonbit/golem_sdk_tools/lib/pkg.generated.mbti index fb6a03d33a..aa3069c4b8 100644 --- a/sdks/moonbit/golem_sdk_tools/lib/pkg.generated.mbti +++ b/sdks/moonbit/golem_sdk_tools/lib/pkg.generated.mbti @@ -8,6 +8,10 @@ import { } // Values +pub fn component_role_marker(ComponentRole) -> String + +pub fn component_target_dir(String, String) -> String + pub fn config_has_overridable_fields(ConfigTypeInfo, Map[String, ConfigTypeInfo]) -> Bool pub fn decode_qualified(String) -> (String, String)? @@ -18,7 +22,11 @@ pub fn discover_packages(String) -> Array[PackageInfo] raise pub fn encode_qualified(String, String) -> ParamType -pub fn ensure_pkg_import(String, String, String) -> String +pub fn ensure_pkg_import(String, String, String) -> String raise ComponentRoleError + +pub fn ensure_role_gen_import(String, String) -> String raise ComponentRoleError + +pub fn ensure_role_tool_import(String, String) -> String raise ComponentRoleError pub fn find_config_param(Array[(String, ParamType)]) -> (String, String, Int)? @@ -40,10 +48,14 @@ pub fn generate_reexports(Array[FnSignature], String) -> @list.List[@syntax.Impl pub fn generate_tool_client_code(Array[ToolInfo]) -> @list.List[@syntax.Impl] raise ToolEmitError +pub fn generate_tool_middleware_registration(Array[ToolMiddlewareInfo], Array[ToolInfo], ComponentRole) -> @list.List[@syntax.Impl] raise ToolMiddlewareEmitError + pub fn generate_tool_registration(Array[ToolInfo]) -> @list.List[@syntax.Impl] raise ToolEmitError pub fn generate_value_type_impls(Array[ValueTypeInfo], type_id_prefix? : String) -> @list.List[@syntax.Impl] +pub fn has_middleware_annotations(Array[(String, String)]) -> Bool raise ComponentRoleError + pub fn is_config_type(ParamType) -> Bool pub fn is_multimodal_type(ParamType) -> Bool @@ -60,6 +72,12 @@ pub fn param_type_to_type_string(ParamType) -> String pub fn parse_agents(Array[(String, String)]) -> Array[AgentInfo] raise AgentParseError +pub fn parse_agents_command_args(Array[String]) -> AgentsCommandOptions raise ComponentRoleError + +pub fn parse_component_role(String) -> ComponentRole raise ComponentRoleError + +pub fn parse_component_role_marker(String) -> ComponentRole raise ComponentRoleError + pub fn parse_config_types(Array[(String, String)], package? : String) -> Array[ConfigTypeInfo] raise AgentParseError pub fn parse_duration_seconds(String) -> UInt64 raise AgentParseError @@ -74,10 +92,20 @@ pub fn parse_path_only(String) -> Array[PathSegmentInfo] raise HttpPathParseErro pub fn parse_pkg_exports(String) -> Array[String] +pub fn parse_reexports_command_args(Array[String]) -> ReexportsCommandOptions raise ComponentRoleError + +pub fn parse_tool_middlewares(Array[(String, String)]) -> Array[ToolMiddlewareInfo] raise ToolMiddlewareParseError + pub fn parse_tools(Array[(String, String)]) -> Array[ToolInfo] raise ToolParseError pub fn parse_value_types(Array[(String, String)]) -> Array[ValueTypeInfo] raise AgentParseError +pub fn raise_component_role_error(String) -> Unit raise ComponentRoleError + +pub fn reconcile_generated_pkg_imports(String, Array[(String, String)], forbid_ambient_tool? : Bool) -> String raise ComponentRoleError + +pub fn reconcile_pure_role_pkg_imports(String) -> String raise ComponentRoleError + pub fn rpc_function_name(String, String) -> String pub fn scan_package(PackageInfo) -> PackageScanResult raise @@ -92,6 +120,8 @@ pub fn unwrap_secret_type(ParamType) -> ParamType? pub fn update_pkg_link(String, Array[String]) -> String +pub fn validate_component_role(ComponentRole, Int, Bool) -> Unit raise ComponentRoleError + pub fn validate_config_types(Array[AgentInfo], Array[ConfigTypeInfo], agent_package? : String) -> Unit raise AgentParseError pub fn validate_http_routes(Array[AgentInfo]) -> Unit raise AgentParseError @@ -105,6 +135,10 @@ pub suberror AgentParseError { AgentParseError(String) } derive(@debug.Debug) +pub suberror ComponentRoleError { + ComponentRoleError(String) +} derive(@debug.Debug) + pub suberror HttpPathParseError { HttpPathParseError(String) } derive(@debug.Debug) @@ -113,6 +147,14 @@ pub suberror ToolEmitError { ToolEmitError(String) } derive(Eq, @debug.Debug) +pub suberror ToolMiddlewareEmitError { + ToolMiddlewareEmitError(String) +} derive(Eq, @debug.Debug) + +pub suberror ToolMiddlewareParseError { + ToolMiddlewareParseError(String) +} derive(@debug.Debug) + pub suberror ToolParseError { ToolParseError(String) } derive(@debug.Debug) @@ -147,6 +189,23 @@ pub(all) enum AgentSnapshotting { EveryNInvocation(UInt) } derive(Eq, @debug.Debug) +pub(all) struct AgentsCommandOptions { + project_root : String + component_dir : String + role : ComponentRole +} derive(Eq, @debug.Debug) + +pub(all) enum ComponentRole { + Ordinary + ToolMiddleware + Combined +} derive(Eq, @debug.Debug) +pub fn ComponentRole::allows_agent_registration(Self) -> Bool +pub fn ComponentRole::allows_tool_middleware_registration(Self) -> Bool +pub fn ComponentRole::allows_tool_registration(Self) -> Bool +pub fn ComponentRole::gen_package(Self) -> String +pub fn ComponentRole::name(Self) -> String + pub(all) struct ConfigTypeInfo { name : String package : String @@ -186,6 +245,13 @@ pub(all) struct MethodInfo { read_only : ReadOnlyInfo? } derive(@debug.Debug) +pub(all) struct MonomorphicToolMiddlewareInfo { + presented : ToolInfo + expected : ToolInfo + handlers : Array[ToolMiddlewareCommandInfo] + underlying_methods : Array[ToolMiddlewareCommandInfo] +} derive(Eq, @debug.Debug) + pub(all) struct MultimodalEnumInfo { name : String variants : Array[(String, ParamType)] @@ -237,6 +303,12 @@ pub(all) struct ReadOnlyInfo { cache_policy : ReadOnlyCachePolicy } derive(Eq, @debug.Debug) +pub(all) struct ReexportsCommandOptions { + sdk_path : String + target_dir : String + role : ComponentRole +} derive(Eq, @debug.Debug) + pub(all) enum SystemVariableKind { AgentType AgentVersion @@ -341,6 +413,35 @@ pub(all) struct ToolInfo { pub fn ToolInfo::client_pascal_case(Self) -> String pub fn ToolInfo::wire_name(Self) -> String +pub(all) struct ToolMiddlewareCommandInfo { + command_path : Array[String] + handler_name : String + params : Array[(String, ParamType)] + param_sources : Array[ToolMiddlewareParamSource] + success_type : ParamType + error_type : ParamType + has_stdout : Bool +} derive(Eq, @debug.Debug) + +pub(all) struct ToolMiddlewareInfo { + source_name : String + name : String + aliases : Array[String] + description : String + scope : ToolMiddlewareScopeInfo +} derive(Eq, @debug.Debug) + +pub(all) enum ToolMiddlewareParamSource { + CanonicalInput(String) + Stdin + Principal +} derive(Eq, @debug.Debug) + +pub(all) enum ToolMiddlewareScopeInfo { + Monomorphic(MonomorphicToolMiddlewareInfo) + Universal(UniversalToolMiddlewareInfo) +} derive(Eq, @debug.Debug) + pub(all) enum ToolParamType { Public(ParamType) LabelledPublic(ParamType) @@ -355,6 +456,10 @@ pub(all) struct ToolResultInfo { defaults : Array[String] } derive(Eq, @debug.Debug) +pub(all) struct UniversalToolMiddlewareInfo { + handler_name : String +} derive(Eq, @debug.Debug) + pub(all) struct ValueTypeInfo { name : String kind : ValueTypeKind diff --git a/sdks/moonbit/golem_sdk_tools/lib/pkg.mbt b/sdks/moonbit/golem_sdk_tools/lib/pkg.mbt index 2aa013f9b5..139715f15a 100644 --- a/sdks/moonbit/golem_sdk_tools/lib/pkg.mbt +++ b/sdks/moonbit/golem_sdk_tools/lib/pkg.mbt @@ -174,7 +174,7 @@ pub fn ensure_pkg_import( content : String, import_path : String, import_alias : String, -) -> String { +) -> String raise ComponentRoleError { let lines : Array[String] = content .split("\n") .map(fn(sv) { sv.to_string() }) @@ -204,12 +204,26 @@ pub fn ensure_pkg_import( if entry.effective_alias == import_alias { return content } - let suffix = lines[i].unsafe_substring( - start=entry.code_end, - end=lines[i].length(), + component_role_fail( + "moon.pkg package '" + + import_path + + "' is already imported as '" + + entry.effective_alias + + "'; generated source requires alias '" + + import_alias + + "'", ) - lines[i] = entry.indent + "\"\{import_path}\" \{import_alias}," + suffix - return lines.join("\n") + abort("") + } + if entry.effective_alias == import_alias { + component_role_fail( + "moon.pkg import alias " + + import_alias + + " is already used by unrelated package '" + + entry.path + + "'", + ) + abort("") } } } @@ -237,6 +251,310 @@ pub fn ensure_pkg_import( result.join("\n") } +///| +fn is_generated_role_package(path : String) -> Bool { + path == "golemcloud/golem_sdk/gen" || + path == "golemcloud/golem_sdk/gen-tool-middleware" || + path == "golemcloud/golem_sdk/gen-agent-tool-middleware" +} + +///| +fn rewrite_pkg_import_entry( + lines : Array[String], + index : Int, + entry : PkgImportEntry, + path : String, + import_alias : String, +) -> Unit { + let suffix = lines[index].unsafe_substring( + start=entry.code_end, + end=lines[index].length(), + ) + lines[index] = entry.indent + "\"\{path}\" \{import_alias}," + suffix +} + +///| +/// Selects exactly one role-specific generated package under the stable @gen +/// alias. A previous role import is replaced, while unrelated ownership of the +/// alias is rejected. +pub fn ensure_role_gen_import( + content : String, + import_path : String, +) -> String raise ComponentRoleError { + if not(is_generated_role_package(import_path)) { + component_role_fail( + "Unsupported generated role package '" + import_path + "'", + ) + } + let lines : Array[String] = content + .split("\n") + .map(fn(sv) { sv.to_string() }) + .collect() + guard find_regular_import_block(lines) is Some((import_start, import_end)) else { + return ensure_pkg_import(content, import_path, "@gen") + } + let mut gen_alias_index = -1 + let mut gen_alias_entry : PkgImportEntry? = None + let mut selected_index = -1 + let mut selected_entry : PkgImportEntry? = None + for i in (import_start + 1)..= 0 { + component_role_fail( + "Generated role package '" + + import_path + + "' is imported more than once", + ) + } + selected_index = i + selected_entry = Some(entry) + } + if entry.effective_alias == "@gen" { + if gen_alias_index >= 0 { + component_role_fail( + "moon.pkg import alias @gen is used more than once", + ) + } + if not(is_generated_role_package(entry.path)) { + component_role_fail( + "moon.pkg import alias @gen is already used by unrelated package '" + + entry.path + + "'", + ) + } + gen_alias_index = i + gen_alias_entry = Some(entry) + } + } + } + if selected_index >= 0 && selected_entry is Some(entry) { + rewrite_pkg_import_entry(lines, selected_index, entry, import_path, "@gen") + if gen_alias_index >= 0 && gen_alias_index != selected_index { + let result : Array[String] = [] + for i, line in lines { + if i != gen_alias_index { + result.push(line) + } + } + return result.join("\n") + } + return lines.join("\n") + } + if gen_alias_index >= 0 && gen_alias_entry is Some(entry) { + rewrite_pkg_import_entry(lines, gen_alias_index, entry, import_path, "@gen") + return lines.join("\n") + } + ensure_pkg_import(content, import_path, "@gen") +} + +///| +fn is_role_tool_package(path : String) -> Bool { + path == "golemcloud/golem_sdk/tool" || + path == "golemcloud/golem_sdk/tool-core" +} + +///| +/// Selects the host-neutral or ambient tool package under the stable @tool +/// alias without rewriting user-owned imports. +pub fn ensure_role_tool_import( + content : String, + import_path : String, +) -> String raise ComponentRoleError { + if !is_role_tool_package(import_path) { + component_role_fail("Unsupported role tool package '" + import_path + "'") + } + let lines : Array[String] = content + .split("\n") + .map(fn(sv) { sv.to_string() }) + .collect() + if find_regular_import_block(lines) is Some((import_start, import_end)) { + for i in (import_start + 1).. Bool { + line.trim().has_suffix(generated_import_marker) && + parse_pkg_import_entry(line) is Some(_) +} + +///| +fn remove_owned_generated_imports(content : String) -> String { + let lines : Array[String] = content + .split("\n") + .map(fn(sv) { sv.to_string() }) + .collect() + guard find_regular_import_block(lines) is Some((import_start, import_end)) else { + return content + } + let result : Array[String] = [] + for i, line in lines { + if i > import_start && i < import_end && is_generated_import_entry(line) { + continue + } + result.push(line) + } + result.join("\n") +} + +///| +fn validate_user_import_for_requirement( + content : String, + import_path : String, + import_alias : String, +) -> Bool raise ComponentRoleError { + let lines : Array[String] = content + .split("\n") + .map(fn(sv) { sv.to_string() }) + .collect() + guard find_regular_import_block(lines) is Some((import_start, import_end)) else { + return false + } + let mut matching_path_count = 0 + for i in (import_start + 1).. 1 { + component_role_fail( + "moon.pkg package '" + import_path + "' is imported more than once", + ) + abort("") + } + matching_path_count == 1 +} + +///| +pub fn reconcile_pure_role_pkg_imports( + content : String, +) -> String raise ComponentRoleError { + let lines : Array[String] = content + .split("\n") + .map(fn(sv) { sv.to_string() }) + .collect() + guard find_regular_import_block(lines) is Some((import_start, import_end)) else { + return content + } + let result : Array[String] = [] + let mut changed = false + for i, line in lines { + if i > import_start && + i < import_end && + parse_pkg_import_entry(line) is Some(entry) && + entry.path == "golemcloud/golem_sdk/tool" { + if is_generated_import_entry(line) { + changed = true + continue + } else { + component_role_fail( + "Pure tool-middleware moon.pkg must not import ambient package 'golemcloud/golem_sdk/tool'", + ) + return content + } + } + result.push(line) + } + if changed { + result.join("\n") + } else { + content + } +} + +///| +fn mark_generated_import(content : String, path : String) -> String { + let lines : Array[String] = content + .split("\n") + .map(fn(sv) { sv.to_string() }) + .collect() + guard find_regular_import_block(lines) is Some((import_start, import_end)) else { + return content + } + for i in (import_start + 1).. String raise ComponentRoleError { + let mut result = remove_owned_generated_imports(content) + if forbid_ambient_tool { + result = reconcile_pure_role_pkg_imports(result) + } + let added : Map[String, Unit] = {} + for item in required { + let (path, import_alias) = item + if added.contains(path) { + continue + } + added[path] = () + let reused = validate_user_import_for_requirement( + result, path, import_alias, + ) + if !reused { + result = ensure_pkg_import(result, path, import_alias) + result = mark_generated_import(result, path) + } + } + result +} + ///| /// Updates a `moon.pkg` file's content to include or replace the `link: { ... }` block. /// Preserves all other content (imports, is-main, pre-build, etc.). diff --git a/sdks/moonbit/golem_sdk_tools/lib/pkg_test.mbt b/sdks/moonbit/golem_sdk_tools/lib/pkg_test.mbt index 80014a302d..cc3dbe3b5a 100644 --- a/sdks/moonbit/golem_sdk_tools/lib/pkg_test.mbt +++ b/sdks/moonbit/golem_sdk_tools/lib/pkg_test.mbt @@ -150,15 +150,22 @@ test "ensure_pkg_import accepts a matching deprecated alias" { } ///| -test "ensure_pkg_import upgrades an existing import to the generated alias" { +test "ensure_pkg_import rejects an existing package under a different alias" { let content = #|import { #| "golemcloud/golem_sdk/tool" @sdk_tool, #|} - let result = @lib.ensure_pkg_import( - content, "golemcloud/golem_sdk/tool", "@tool", + let error = try + @lib.ensure_pkg_import(content, "golemcloud/golem_sdk/tool", "@tool") + catch { + @lib.ComponentRoleError(message) => message + } noraise { + _ => "NO ERROR" + } + inspect( + error, + content="moon.pkg package 'golemcloud/golem_sdk/tool' is already imported as '@sdk_tool'; generated source requires alias '@tool'", ) - assert_true(result.contains("\"golemcloud/golem_sdk/tool\" @tool,")) } ///| @@ -178,15 +185,19 @@ test "ensure_pkg_import matches an exact package path" { } ///| -test "ensure_pkg_import does not mistake an alias prefix for the exact alias" { +test "ensure_pkg_import rejects an alias prefix rather than rewriting it" { let content = #|import { #| "golemcloud/golem_sdk/tool" @toolCommon, #|} - let result = @lib.ensure_pkg_import( - content, "golemcloud/golem_sdk/tool", "@tool", - ) - assert_true(result.contains("\"golemcloud/golem_sdk/tool\" @tool,")) + let error = try + @lib.ensure_pkg_import(content, "golemcloud/golem_sdk/tool", "@tool") + catch { + @lib.ComponentRoleError(message) => message + } noraise { + _ => "NO ERROR" + } + assert_true(error.contains("is already imported as '@toolCommon'")) } ///| @@ -202,14 +213,16 @@ test "ensure_pkg_import preserves an exact aliased import with a trailing commen } ///| -test "ensure_pkg_import preserves tab indentation when upgrading an alias" { +test "ensure_pkg_import does not rewrite a tab-indented user alias" { let content = "import {\n\t\"golemcloud/golem_sdk/tool\" @sdk_tool // keep this explanation\n}" - let result = @lib.ensure_pkg_import( - content, "golemcloud/golem_sdk/tool", "@tool", - ) - assert_eq( - result, "import {\n\t\"golemcloud/golem_sdk/tool\" @tool, // keep this explanation\n}", - ) + let error = try + @lib.ensure_pkg_import(content, "golemcloud/golem_sdk/tool", "@tool") + catch { + @lib.ComponentRoleError(message) => message + } noraise { + _ => "NO ERROR" + } + assert_true(error.contains("is already imported as '@sdk_tool'")) } ///| @@ -392,6 +405,263 @@ test "ensure_pkg_import is idempotent across the generated tool imports" { assert_eq(twice, once) } +///| +test "ensure_role_gen_import replaces a previous role without duplicating @gen" { + let content = + #|import { + #| "golemcloud/golem_sdk/gen" @gen, + #| "some/pkg" @other, + #|} + let result = @lib.ensure_role_gen_import( + content, "golemcloud/golem_sdk/gen-tool-middleware", + ) + inspect( + result, + content=( + #|import { + #| "golemcloud/golem_sdk/gen-tool-middleware" @gen, + #| "some/pkg" @other, + #|} + ), + ) + assert_eq( + @lib.ensure_role_gen_import( + result, "golemcloud/golem_sdk/gen-tool-middleware", + ), + result, + ) +} + +///| +test "ensure_role_gen_import normalizes an existing selected package alias" { + let content = + #|import { + #| "golemcloud/golem_sdk/gen" @gen, + #| "golemcloud/golem_sdk/gen-agent-tool-middleware" @combined, + #|} + inspect( + @lib.ensure_role_gen_import( + content, "golemcloud/golem_sdk/gen-agent-tool-middleware", + ), + content=( + #|import { + #| "golemcloud/golem_sdk/gen-agent-tool-middleware" @gen, + #|} + ), + ) +} + +///| +test "ensure_role_gen_import rejects unrelated @gen alias ownership" { + let content = + #|import { + #| "some/generator" @gen, + #|} + let error = try + @lib.ensure_role_gen_import(content, "golemcloud/golem_sdk/gen") + catch { + @lib.ComponentRoleError(message) => message + } noraise { + _ => "NO ERROR" + } + inspect( + error, + content="moon.pkg import alias @gen is already used by unrelated package 'some/generator'", + ) +} + +///| +test "ensure_role_tool_import preserves exact imports and rejects role conflicts" { + let content = + #|import { + #| "golemcloud/golem_sdk/tool" @tool, + #| "some/pkg" @other, + #|} + assert_eq( + @lib.ensure_role_tool_import(content, "golemcloud/golem_sdk/tool"), + content, + ) + let error = try + @lib.ensure_role_tool_import(content, "golemcloud/golem_sdk/tool-core") + catch { + @lib.ComponentRoleError(message) => message + } noraise { + _ => "NO ERROR" + } + inspect( + error, + content="moon.pkg role tool package 'golemcloud/golem_sdk/tool' conflicts with required package 'golemcloud/golem_sdk/tool-core'", + ) +} + +///| +test "ensure_role_tool_import rejects selected-package and unrelated alias conflicts" { + let content = + #|import { + #| "golemcloud/golem_sdk/tool" @ambient, + #|} + let selected_error = try + @lib.ensure_role_tool_import(content, "golemcloud/golem_sdk/tool") + catch { + @lib.ComponentRoleError(message) => message + } noraise { + _ => "NO ERROR" + } + assert_true(selected_error.contains("is already imported as '@ambient'")) + let error = try + @lib.ensure_role_tool_import( + "import {\n \"some/tool\" @tool,\n}", "golemcloud/golem_sdk/tool-core", + ) + catch { + @lib.ComponentRoleError(message) => message + } noraise { + _ => "NO ERROR" + } + inspect( + error, + content="moon.pkg import alias @tool is already used by unrelated package 'some/tool'", + ) +} + +///| +test "generated package imports are deterministic and stale owned entries are removed" { + let original = + #|import { + #| "user/owned" @userOwned, + #| "golemcloud/golem_sdk/schema" @schema, + #|} + #| + #|options( + #| "is-main": true, + #|) + let monomorphic = [ + ("golemcloud/golem_sdk/tool-middleware", "@toolMiddleware"), + ("golemcloud/golem_sdk/tool-core", "@tool"), + ("golemcloud/golem_sdk/schema", "@schema"), + ] + let once = @lib.reconcile_generated_pkg_imports(original, monomorphic) + assert_true( + once.contains( + "\"golemcloud/golem_sdk/tool-middleware\" @toolMiddleware, // Generated by golem_sdk_tools", + ), + ) + assert_true( + once.contains( + "\"golemcloud/golem_sdk/tool-core\" @tool, // Generated by golem_sdk_tools", + ), + ) + assert_false( + once.contains( + "\"golemcloud/golem_sdk/schema\" @schema, // Generated by golem_sdk_tools", + ), + ) + assert_eq(@lib.reconcile_generated_pkg_imports(once, monomorphic), once) + let universal = [("golemcloud/golem_sdk/tool-middleware", "@toolMiddleware")] + let cleaned = @lib.reconcile_generated_pkg_imports(once, universal) + assert_true(cleaned.contains("\"user/owned\" @userOwned,")) + assert_true(cleaned.contains("\"golemcloud/golem_sdk/schema\" @schema,")) + assert_false(cleaned.contains("golemcloud/golem_sdk/tool-core")) + assert_eq(cleaned.split("// Generated by golem_sdk_tools").count() - 1, 1) +} + +///| +test "generated package imports switch owned tool roles without duplicate aliases" { + let pure = @lib.reconcile_generated_pkg_imports( + "options(\n \"is-main\": true,\n)", + [("golemcloud/golem_sdk/tool-core", "@tool")], + ) + let combined = @lib.reconcile_generated_pkg_imports(pure, [ + ("golemcloud/golem_sdk/tool", "@tool"), + ]) + assert_false(combined.contains("golemcloud/golem_sdk/tool-core")) + assert_eq(combined.split("@tool,").count() - 1, 1) + assert_true( + combined.contains( + "\"golemcloud/golem_sdk/tool\" @tool, // Generated by golem_sdk_tools", + ), + ) +} + +///| +test "generated import reconciliation preserves user ownership and rejects conflicts" { + let custom_alias = + #|import { + #| "golemcloud/golem_sdk/schema" @customSchema, + #|} + let path_error = try + @lib.reconcile_generated_pkg_imports(custom_alias, [ + ("golemcloud/golem_sdk/schema", "@schema"), + ]) + catch { + @lib.ComponentRoleError(message) => message + } noraise { + _ => "NO ERROR" + } + inspect( + path_error, + content="moon.pkg package 'golemcloud/golem_sdk/schema' is already imported as '@customSchema'; generated source requires alias '@schema'", + ) + let alias_error = try + @lib.reconcile_generated_pkg_imports( + "import {\n \"user/schema\" @schema,\n}", + [("golemcloud/golem_sdk/schema", "@schema")], + ) + catch { + @lib.ComponentRoleError(message) => message + } noraise { + _ => "NO ERROR" + } + inspect( + alias_error, + content="moon.pkg import alias @schema is already used by unrelated package 'user/schema'", + ) +} + +///| +test "pure generated imports reject ambient tool under every user alias" { + let error = try + @lib.reconcile_generated_pkg_imports( + "import {\n \"golemcloud/golem_sdk/tool\" @customTool,\n}", + [("golemcloud/golem_sdk/tool-core", "@tool")], + forbid_ambient_tool=true, + ) + catch { + @lib.ComponentRoleError(message) => message + } noraise { + _ => "NO ERROR" + } + inspect( + error, + content="Pure tool-middleware moon.pkg must not import ambient package 'golemcloud/golem_sdk/tool'", + ) +} + +///| +test "pure role reconciliation removes only owned ambient tool imports" { + let content = + #|import { + #| "user/owned" @userOwned, + #| "golemcloud/golem_sdk/tool" @tool, // Generated by golem_sdk_tools + #|} + let reconciled = @lib.reconcile_pure_role_pkg_imports(content) + assert_true(reconciled.contains("\"user/owned\" @userOwned,")) + assert_false(reconciled.contains("golemcloud/golem_sdk/tool")) +} + +///| +test "generated import markers outside regular entries do not confer ownership" { + let content = + #|import { + #| "user/owned" @userOwned, // Generated by golem_sdk_tools for documentation + #|} + #| + #|// Generated by golem_sdk_tools + #|options( + #| "is-main": true, + #|) + assert_eq(@lib.reconcile_generated_pkg_imports(content, []), content) +} + ///| test "update_pkg_link appends options when none exist" { let content = diff --git a/sdks/moonbit/golem_sdk_tools/lib/project.mbt b/sdks/moonbit/golem_sdk_tools/lib/project.mbt index 2b0fad8c4e..c392dd83b2 100644 --- a/sdks/moonbit/golem_sdk_tools/lib/project.mbt +++ b/sdks/moonbit/golem_sdk_tools/lib/project.mbt @@ -15,14 +15,14 @@ pub(all) struct PackageScanResult { ///| /// Directories to skip during recursive package discovery. let skip_dirs : Array[String] = [ - "_build", ".mooncakes", "golem-temp", ".git", ".githooks", + "_build", ".mooncakes", "golem-temp", ".git", ".githooks", "wit", ] ///| /// Generated files to exclude when scanning package source files. let generated_files : Array[String] = [ "golem_agents.mbt", "golem_reexports.mbt", "golem_derive.mbt", "golem_clients.mbt", - "golem_tools.mbt", "golem_tool_clients.mbt", + "golem_tools.mbt", "golem_tool_clients.mbt", "golem_tool_middlewares.mbt", ] ///| @@ -101,6 +101,7 @@ fn walk_dir( packages.push(PackageInfo::{ rel_path, dir }) } let entries = @fs.read_dir(dir) + entries.sort_by((left, right) => left.compare(right)) for entry in entries { if skip_dirs.contains(entry) { continue @@ -117,6 +118,7 @@ fn walk_dir( pub fn scan_package(pkg : PackageInfo) -> PackageScanResult raise { let files : Array[(String, String)] = [] let entries = @fs.read_dir(pkg.dir) + entries.sort_by((left, right) => left.compare(right)) for entry in entries { if entry.has_suffix(".mbt") && not(generated_files.contains(entry)) { let path = "\{pkg.dir}/\{entry}" diff --git a/sdks/moonbit/golem_sdk_tools/lib/project_wbtest.mbt b/sdks/moonbit/golem_sdk_tools/lib/project_wbtest.mbt index f66f836160..8851202dd5 100644 --- a/sdks/moonbit/golem_sdk_tools/lib/project_wbtest.mbt +++ b/sdks/moonbit/golem_sdk_tools/lib/project_wbtest.mbt @@ -27,3 +27,13 @@ test "parent_dir of single segment without slash" { ), ) } + +///| +test "generated middleware output is excluded from source scans" { + assert_true(generated_files.contains("golem_tool_middlewares.mbt")) +} + +///| +test "WIT dependency trees are excluded from package discovery" { + assert_true(skip_dirs.contains("wit")) +} diff --git a/sdks/moonbit/golem_sdk_tools/lib/tool_middleware.mbt b/sdks/moonbit/golem_sdk_tools/lib/tool_middleware.mbt new file mode 100644 index 0000000000..1724622e9d --- /dev/null +++ b/sdks/moonbit/golem_sdk_tools/lib/tool_middleware.mbt @@ -0,0 +1,1096 @@ +///| +pub suberror ToolMiddlewareParseError { + ToolMiddlewareParseError(String) +} derive(Debug) + +///| +pub(all) struct ToolMiddlewareCommandInfo { + command_path : Array[String] + handler_name : String + params : Array[(String, ParamType)] + param_sources : Array[ToolMiddlewareParamSource] + success_type : ParamType + error_type : ParamType + has_stdout : Bool +} derive(Debug, Eq) + +///| +pub(all) enum ToolMiddlewareParamSource { + CanonicalInput(String) + Stdin + Principal +} derive(Debug, Eq) + +///| +pub(all) struct MonomorphicToolMiddlewareInfo { + presented : ToolInfo + expected : ToolInfo + handlers : Array[ToolMiddlewareCommandInfo] + underlying_methods : Array[ToolMiddlewareCommandInfo] +} derive(Debug, Eq) + +///| +pub(all) struct UniversalToolMiddlewareInfo { + handler_name : String +} derive(Debug, Eq) + +///| +pub(all) enum ToolMiddlewareScopeInfo { + Monomorphic(MonomorphicToolMiddlewareInfo) + Universal(UniversalToolMiddlewareInfo) +} derive(Debug, Eq) + +///| +pub(all) struct ToolMiddlewareInfo { + source_name : String + name : String + aliases : Array[String] + description : String + scope : ToolMiddlewareScopeInfo +} derive(Debug, Eq) + +///| +priv struct MonomorphicMiddlewareDecl { + source_name : String + name : String + aliases : Array[String] + description : String + presented : String + expected : String +} + +///| +fn middleware_fail(message : String) -> Unit raise ToolMiddlewareParseError { + raise ToolMiddlewareParseError(message) +} + +///| +fn middleware_props( + attr : @attribute.Attribute, + name : String, +) -> Array[@attribute.Prop]? { + guard attr.raw.has_prefix("#derive." + name + "(") else { + return derive_props(attr, name) + } + let prefix = "#derive." + name + let repaired = rewrite_command_alias_label(attr.raw) + let reparsed = @attribute.Attribute::new( + loc=attr.loc, + ("derive", Some(name), repaired[prefix.length():].to_owned()), + ) + derive_props(reparsed, name) +} + +///| +fn middleware_annotation_kind(attr : @attribute.Attribute) -> String? { + if middleware_props(attr, "tool_middleware") is Some(_) { + Some("tool_middleware") + } else if middleware_props(attr, "universal_tool_middleware") is Some(_) { + Some("universal_tool_middleware") + } else { + None + } +} + +///| +fn require_middleware_identifier( + value : String, + kind : String, + owner : String, +) -> Unit raise ToolMiddlewareParseError { + if !is_tool_identifier(value) { + middleware_fail( + "Invalid " + + kind + + " identifier '" + + value + + "' on " + + owner + + "; expected lower-kebab-case", + ) + } +} + +///| +fn parse_middleware_metadata( + props : Array[@attribute.Prop], + annotation : String, + owner : String, + monomorphic : Bool, +) -> (String, Array[String], String?, String?) raise ToolMiddlewareParseError { + let mut name : String? = None + let aliases : Array[String] = [] + let mut presented : String? = None + let mut expected : String? = None + for prop in props { + match prop_string(prop) { + Some((None, value)) => + if name is None { + name = Some(value) + } else { + middleware_fail("Duplicate middleware name on " + owner) + } + Some((Some("tool_alias" | "alias"), value)) => aliases.push(value) + Some((Some("presented"), value)) if monomorphic => + if presented is None { + presented = Some(value) + } else { + middleware_fail("Duplicate presented tool on " + owner) + } + Some((Some("expected"), value)) if monomorphic => + if expected is None { + expected = Some(value) + } else { + middleware_fail("Duplicate expected tool on " + owner) + } + _ => + middleware_fail( + "Malformed or unknown #derive." + annotation + " property on " + owner, + ) + } + } + guard name is Some(name) else { + middleware_fail("#derive." + annotation + " requires a canonical name") + abort("") + } + require_middleware_identifier(name, "middleware", owner) + let seen : Map[String, Unit] = {} + for alias_name in aliases { + require_middleware_identifier(alias_name, "middleware alias", owner) + if alias_name == name || seen.contains(alias_name) { + middleware_fail( + "Duplicate middleware name or alias '" + alias_name + "' on " + owner, + ) + } + seen[alias_name] = () + } + (name, aliases, presented, expected) +} + +///| +fn function_owner(decl : @syntax.FunDecl) -> String? { + match decl.type_name { + Some({ name: Ident(name~), .. }) => Some(name) + Some({ name: Dot(..), .. }) => None + None => None + } +} + +///| +fn qualified_function_owner(decl : @syntax.FunDecl) -> String? { + match decl.type_name { + Some({ name: Dot(id~, ..), .. }) => Some(id) + _ => None + } +} + +///| +fn reject_middleware_annotations( + attrs : @list.List[@attribute.Attribute], + allow_tool : Bool, + allow_universal : Bool, +) -> Unit raise ToolMiddlewareParseError { + for attr in attrs { + match middleware_annotation_kind(attr) { + Some("tool_middleware") if !allow_tool => + middleware_fail("#derive.tool_middleware must annotate an empty struct") + Some("universal_tool_middleware") if !allow_universal => + middleware_fail( + "#derive.universal_tool_middleware must annotate an async free function", + ) + _ => () + } + } +} + +///| +fn reject_middleware_type_desc_annotations( + desc : @syntax.TypeDesc, +) -> Unit raise ToolMiddlewareParseError { + match desc { + Record(fields~, constr_decl~) => { + for field in fields { + reject_middleware_annotations(field.attrs, false, false) + } + match constr_decl { + Some(constr_decl) => + reject_middleware_annotations(constr_decl.attrs, false, false) + None => () + } + } + Variant(constrs) | Error(EnumPayload(constrs)) => + for constr in constrs { + reject_middleware_annotations(constr.attrs, false, false) + } + _ => () + } +} + +///| +fn reject_local_type_middleware_annotations( + local_types : @list.List[@syntax.LocalTypeDecl], +) -> Unit raise ToolMiddlewareParseError { + for local_type in local_types { + reject_middleware_type_desc_annotations(local_type.components) + } +} + +///| +fn reject_decl_body_middleware_annotations( + body : @syntax.DeclBody, +) -> Unit raise ToolMiddlewareParseError { + match body { + DeclBody(local_types~, ..) => + reject_local_type_middleware_annotations(local_types) + DeclNone | DeclStubs(_) => () + } +} + +///| +fn validate_middleware_annotation_placement( + impl_ : @syntax.Impl, +) -> Unit raise ToolMiddlewareParseError { + match impl_ { + TopTypeDef(decl) => { + reject_middleware_annotations(decl.attrs, true, false) + reject_middleware_type_desc_annotations(decl.components) + } + TopFuncDef(fun_decl~, decl_body~, ..) => { + reject_middleware_annotations(fun_decl.attrs, false, true) + reject_decl_body_middleware_annotations(decl_body) + } + TopImpl(attrs~, body~, ..) => { + reject_middleware_annotations(attrs, false, false) + reject_decl_body_middleware_annotations(body) + } + TopImplRelation(attrs~, ..) => + reject_middleware_annotations(attrs, false, false) + TopLetDef(attrs~, ..) => reject_middleware_annotations(attrs, false, false) + TopTest(attrs~, local_types~, ..) => { + reject_middleware_annotations(attrs, false, false) + reject_local_type_middleware_annotations(local_types) + } + TopTrait(decl) => { + reject_middleware_annotations(decl.attrs, false, false) + for trait_method in decl.methods { + reject_middleware_annotations(trait_method.attrs, false, false) + } + } + TopUsing(attrs~, ..) => reject_middleware_annotations(attrs, false, false) + TopView(attrs~, view_constrs~, ..) => { + reject_middleware_annotations(attrs, false, false) + for constr in view_constrs { + reject_middleware_annotations(constr.attrs, false, false) + } + } + TopExpr(local_types~, ..) => + reject_local_type_middleware_annotations(local_types) + } +} + +///| +fn parse_source_impls( + files : Array[(String, String)], +) -> Array[@syntax.Impl] raise ToolMiddlewareParseError { + let impls : Array[@syntax.Impl] = [] + for pair in files { + let (filename, source) = pair + let (parsed, reports) = @parser.parse_string(source) + if reports.length() > 0 { + let messages : Array[String] = [] + for report in reports { + messages.push(report.to_string()) + } + middleware_fail( + "Failed to parse " + filename + ": " + messages.join("; "), + ) + } + for impl_ in parsed { + impls.push(impl_) + } + } + impls +} + +///| +fn find_local_tool( + tools : Array[ToolInfo], + middleware_name : String, + reference : String, +) -> ToolInfo raise ToolMiddlewareParseError { + if reference.contains(".") || reference.has_prefix("@") { + middleware_fail( + "Tool middleware '" + + middleware_name + + "' references tool '" + + reference + + "' outside its package; GOL-34 supports same-package tool shapes only", + ) + } + let matches = tools.filter(tool => tool.source_name == reference) + guard matches is [tool] else { + middleware_fail( + "Tool middleware '" + + middleware_name + + "' references tool '" + + reference + + "' outside its package; GOL-34 supports same-package tool shapes only", + ) + abort("") + } + tool +} + +///| +fn resolve_surface_subtree( + tools : Array[ToolInfo], + middleware_name : String, + reference : String, +) -> ToolInfo raise ToolMiddlewareParseError { + if reference.contains(".") || + reference.contains("::") || + reference.has_prefix("@") { + middleware_fail( + "Tool middleware '" + + middleware_name + + "' references tool '" + + reference + + "' outside its package; GOL-34 supports same-package tool shapes only", + ) + } + let matches = tools.filter(tool => tool.source_name == reference) + guard matches is [tool] else { + middleware_fail("Subtree tool '" + reference + "' could not be resolved") + abort("") + } + tool +} + +///| +fn middleware_output_stream_type() -> ParamType { + Parameterized("@asyncCore.Stream", [Simple("Byte")]) +} + +///| +fn projected_middleware_param( + parameter : ToolParamType, + include_principal : Bool, +) -> ParamType? { + match parameter { + Public(type_) | LabelledPublic(type_) | QuestionOptionalPublic(type_) => + Some(type_) + Hidden(Principal) | LabelledHidden(Principal) => + if include_principal { + Some(Simple("@tool.Principal")) + } else { + None + } + Hidden(InputStream) | LabelledHidden(InputStream) => + Some(Simple("@toolMiddleware.MiddlewareStdin")) + Hidden(OutputStream) | LabelledHidden(OutputStream) => None + } +} + +///| +priv struct ProjectedMiddlewareParam { + source_name : String + type_ : ParamType + identities : Array[String] + source : ToolMiddlewareParamSource +} + +///| +fn middleware_param_identities( + command : ToolCommandInfo, + source_name : String, + parameter : ToolParamType, +) -> Array[String] { + match parameter { + Hidden(_) | LabelledHidden(_) => [source_name] + Public(_) | LabelledPublic(_) | QuestionOptionalPublic(_) => { + let info = command.args + .iter() + .find_first(arg => arg.source_param == source_name) + match info { + Some(info) => + [info.name.unwrap_or(moonbit_name_to_kebab_case(source_name))].concat( + info.aliases, + ) + None => [moonbit_name_to_kebab_case(source_name)] + } + } + } +} + +///| +fn append_projected_params( + existing : Array[ProjectedMiddlewareParam], + command : ToolCommandInfo, + include_principal : Bool, +) -> Array[ProjectedMiddlewareParam] { + let result = existing.copy() + let inherited_identities : Map[String, Unit] = {} + for parameter in result { + for identity in parameter.identities { + inherited_identities[identity] = () + } + } + for pair in command.params { + let identities = middleware_param_identities(command, pair.0, pair.1) + if identities.any(identity => inherited_identities.contains(identity)) { + continue + } + match projected_middleware_param(pair.1, include_principal) { + Some(type_) => { + let source = match pair.1 { + Public(_) | LabelledPublic(_) | QuestionOptionalPublic(_) => + ToolMiddlewareParamSource::CanonicalInput(identities[0]) + Hidden(InputStream) | LabelledHidden(InputStream) => + ToolMiddlewareParamSource::Stdin + Hidden(Principal) | LabelledHidden(Principal) => + ToolMiddlewareParamSource::Principal + Hidden(OutputStream) | LabelledHidden(OutputStream) => + abort("output streams are not middleware handler parameters") + } + result.push({ source_name: pair.0, type_, identities, source }) + for identity in identities { + inherited_identities[identity] = () + } + } + None => () + } + } + result +} + +///| +fn append_projected_root_globals( + existing : Array[ProjectedMiddlewareParam], + tool : ToolInfo, +) -> Array[ProjectedMiddlewareParam] raise ToolMiddlewareParseError { + guard tool.root_command is Some(root_index) else { return existing.copy() } + let command = tool.commands[root_index] + let projected = project_command(command, command.subtree is Some(_)) catch { + ToolEmitError(message) => { + middleware_fail(message) + abort("") + } + } + let result = existing.copy() + let inherited_identities : Map[String, Unit] = {} + for parameter in result { + for identity in parameter.identities { + inherited_identities[identity] = () + } + } + for argument in projected { + guard argument.placement is GlobalOption || argument.placement is GlobalFlag else { + continue + } + let identities = projected_arg_identity_names(argument) + if identities.any(identity => inherited_identities.contains(identity)) { + continue + } + guard argument.type_ is Some(type_) else { + middleware_fail( + "Global tool argument '" + argument.source + "' has no public type", + ) + continue + } + result.push({ + source_name: argument.source, + type_, + identities, + source: ToolMiddlewareParamSource::CanonicalInput(argument.canonical), + }) + for identity in identities { + inherited_identities[identity] = () + } + } + result +} + +///| +fn middleware_success_type(command : ToolCommandInfo) -> ParamType { + let value = command.success_type.unwrap_or(Simple("Unit")) + let has_stdout = command.params.any(pair => { + pair.1 == Hidden(OutputStream) || pair.1 == LabelledHidden(OutputStream) + }) + if has_stdout { + if value == Simple("Unit") { + middleware_output_stream_type() + } else { + Tuple([value, middleware_output_stream_type()]) + } + } else { + value + } +} + +///| +fn middleware_error_type(command : ToolCommandInfo) -> ParamType { + command.error_type.unwrap_or(Simple("@tool.NoToolError")) +} + +///| +fn add_middleware_surface( + surfaces : Array[ToolMiddlewareCommandInfo], + handlers : Map[String, Array[String]], + command_path : Array[String], + source_path : Array[String], + params : Array[ProjectedMiddlewareParam], + command : ToolCommandInfo, +) -> Unit raise ToolMiddlewareParseError { + let handler_name = source_path.join("__") + guard !handler_name.is_empty() else { + middleware_fail("Middleware command path produced an empty handler name") + return + } + match handlers.get(handler_name) { + Some(previous) if previous != command_path => + middleware_fail( + "Flattened middleware handler name '" + + handler_name + + "' collides for command paths '" + + previous.join("/") + + "' and '" + + command_path.join("/") + + "'", + ) + Some(_) => + middleware_fail( + "Duplicate middleware handler surface '" + handler_name + "'", + ) + None => handlers[handler_name] = command_path.copy() + } + let has_stdout = command.params.any(pair => { + pair.1 == Hidden(OutputStream) || pair.1 == LabelledHidden(OutputStream) + }) + surfaces.push({ + command_path, + handler_name, + params: params.map(parameter => (parameter.source_name, parameter.type_)), + param_sources: params.map(parameter => parameter.source), + success_type: middleware_success_type(command), + error_type: middleware_error_type(command), + has_stdout, + }) +} + +///| +fn collect_middleware_surfaces( + current : ToolInfo, + tools : Array[ToolInfo], + middleware_name : String, + command_path : Array[String], + source_path : Array[String], + inherited : Array[ProjectedMiddlewareParam], + visiting : Array[String], + surfaces : Array[ToolMiddlewareCommandInfo], + handlers : Map[String, Array[String]], + include_principal : Bool, +) -> Unit raise ToolMiddlewareParseError { + if visiting.contains(current.source_name) { + middleware_fail( + "Tool subtree cycle encountered while projecting middleware surface for '" + + current.source_name + + "'", + ) + } + let next_visiting = visiting.concat([current.source_name]) + let inherited_here = append_projected_root_globals(inherited, current) + for index, command in current.commands { + let is_root = current.root_command == Some(index) + let command_inherited = if is_root { inherited } else { inherited_here } + match command.subtree { + Some(reference) => { + let child = resolve_surface_subtree(tools, middleware_name, reference) + collect_middleware_surfaces( + child, + tools, + middleware_name, + command_path.concat([command.name]), + source_path.concat([command.source_name]), + append_projected_params(command_inherited, command, include_principal), + next_visiting, + surfaces, + handlers, + include_principal, + ) + } + None => { + let leaf_command_path = if is_root { + command_path.copy() + } else { + command_path.concat([command.name]) + } + let leaf_source_path = if is_root && !source_path.is_empty() { + source_path.copy() + } else { + source_path.concat([command.source_name]) + } + add_middleware_surface( + surfaces, + handlers, + leaf_command_path, + leaf_source_path, + append_projected_params(command_inherited, command, include_principal), + command, + ) + } + } + } +} + +///| +fn middleware_surfaces( + tool : ToolInfo, + tools : Array[ToolInfo], + middleware_name : String, + include_principal : Bool, +) -> Array[ToolMiddlewareCommandInfo] raise ToolMiddlewareParseError { + let surfaces : Array[ToolMiddlewareCommandInfo] = [] + collect_middleware_surfaces( + tool, + tools, + middleware_name, + [], + [], + [], + [], + surfaces, + {}, + include_principal, + ) + surfaces +} + +///| +fn parse_positional_handler_params( + decl : @syntax.FunDecl, + owner : String, +) -> Array[(String, ParamType)] raise ToolMiddlewareParseError { + let params : Array[(String, ParamType)] = [] + for parameter in decl.decl_params.unwrap_or(@list.List::from_array([])) { + match parameter { + Positional(binder~, ty=Some(type_)) => { + if binder.name == "self" { + middleware_fail( + "Tool middleware handler '" + owner + "' must be static", + ) + } + let parsed = syntax_type_to_param_type(type_) catch { + AgentParseError(message) => { + middleware_fail(message) + abort("") + } + } + params.push((binder.name, parsed)) + } + _ => + middleware_fail( + "Every parameter of tool middleware handler '" + + owner + + "' must be positional, named, and typed", + ) + } + } + params +} + +///| +fn handler_return_type( + decl : @syntax.FunDecl, + owner : String, +) -> ParamType raise ToolMiddlewareParseError { + guard decl.return_type is Some(return_type) else { + middleware_fail( + "Tool middleware handler '" + owner + "' requires a return type", + ) + abort("") + } + syntax_type_to_param_type(return_type) catch { + AgentParseError(message) => { + middleware_fail(message) + abort("") + } + } +} + +///| +fn expected_handler_return(surface : ToolMiddlewareCommandInfo) -> ParamType { + ResultType( + surface.success_type, + Parameterized("@toolMiddleware.ToolInvokeError", [surface.error_type]), + ) +} + +///| +fn validate_handler_signature( + decl : @syntax.FunDecl, + middleware : MonomorphicMiddlewareDecl, + surface : ToolMiddlewareCommandInfo, +) -> Unit raise ToolMiddlewareParseError { + let owner = middleware.source_name + "::" + surface.handler_name + if !(decl.vis is Pub(..)) { + middleware_fail("Tool middleware handler '" + owner + "' must be public") + } + if decl.is_async is None { + middleware_fail("Tool middleware handler '" + owner + "' must be async") + } + let actual = parse_positional_handler_params(decl, owner) + let expected : Array[(String, ParamType)] = [ + ("underlying", Simple(middleware.expected + "Underlying")), + ] + for pair in surface.params { + expected.push(pair) + } + if actual.length() != expected.length() { + middleware_fail( + "Tool middleware handler '" + + owner + + "' has \{actual.length()} parameters; expected \{expected.length()}", + ) + } + for index in 0.. Unit raise ToolMiddlewareParseError { + let expected : Map[String, ToolMiddlewareCommandInfo] = {} + for surface in surfaces { + expected[surface.handler_name] = surface + } + let found : Map[String, Unit] = {} + for impl_ in impls { + guard impl_ is TopFuncDef(fun_decl~, ..) else { continue } + if qualified_function_owner(fun_decl) == Some(middleware.source_name) { + middleware_fail( + "Tool middleware '" + + middleware.name + + "' defines handler '" + + fun_decl.name.name + + "' outside its package; GOL-34 supports same-package middleware handlers only", + ) + } + guard function_owner(fun_decl) == Some(middleware.source_name) else { + continue + } + let handler_name = fun_decl.name.name + guard expected.get(handler_name) is Some(surface) else { + if fun_decl.vis is Pub(..) { + middleware_fail( + "Tool middleware '" + + middleware.name + + "' has unexpected public handler '" + + middleware.source_name + + "::" + + handler_name + + "'", + ) + } + continue + } + if found.contains(handler_name) { + middleware_fail( + "Tool middleware '" + + middleware.name + + "' defines handler '" + + handler_name + + "' more than once", + ) + } + validate_handler_signature(fun_decl, middleware, surface) + found[handler_name] = () + } + for surface in surfaces { + if !found.contains(surface.handler_name) { + middleware_fail( + "Tool middleware '" + + middleware.name + + "' is missing async handler '" + + middleware.source_name + + "::" + + surface.handler_name + + "' for command path '" + + surface.command_path.join("/") + + "'", + ) + } + } +} + +///| +fn expected_universal_return_type() -> ParamType { + ResultType( + Simple("@toolMiddleware.RawInvocationResult"), + Parameterized("@toolMiddleware.ToolInvokeError", [ + Simple("@toolMiddleware.RawTypedSchemaValue"), + ]), + ) +} + +///| +fn validate_universal_handler( + decl : @syntax.FunDecl, + middleware_name : String, +) -> Unit raise ToolMiddlewareParseError { + let owner = "universal tool middleware '" + middleware_name + "'" + if decl.type_name is Some(_) { + middleware_fail( + "#derive.universal_tool_middleware must annotate an async free function", + ) + } + if !(decl.vis is Pub(..)) { + middleware_fail(owner + " handler must be public") + } + if decl.is_async is None { + middleware_fail(owner + " handler must be async") + } + let params = parse_positional_handler_params(decl, decl.name.name) + let expected : Array[(String, ParamType)] = [ + ("invocation", Simple("@toolMiddleware.RawToolInvocation")), + ("underlying", Simple("@toolMiddleware.UnderlyingTool")), + ] + if params != expected { + middleware_fail( + owner + + " handler must accept exactly '(invocation : @toolMiddleware.RawToolInvocation, underlying : @toolMiddleware.UnderlyingTool)'", + ) + } + if handler_return_type(decl, decl.name.name) != + expected_universal_return_type() { + middleware_fail( + owner + + " handler must return 'Result[@toolMiddleware.RawInvocationResult, @toolMiddleware.ToolInvokeError[@toolMiddleware.RawTypedSchemaValue]]'", + ) + } +} + +///| +fn validate_middleware_name_collisions( + middlewares : Array[ToolMiddlewareInfo], +) -> Unit raise ToolMiddlewareParseError { + let owners : Map[String, String] = {} + for middleware in middlewares { + for name in [middleware.name].concat(middleware.aliases) { + match owners.get(name) { + Some(existing) => + middleware_fail( + "Tool middleware name or alias '" + + name + + "' collides between '" + + existing + + "' and '" + + middleware.name + + "'", + ) + None => owners[name] = middleware.name + } + } + } +} + +///| +fn reject_qualified_tool_subtrees_for_middleware( + impls : Array[@syntax.Impl], +) -> Unit raise ToolMiddlewareParseError { + let has_monomorphic = impls.any(impl_ => { + match impl_ { + TopTypeDef(decl) => + decl.attrs.any(attr => { + middleware_props(attr, "tool_middleware") is Some(_) + }) + _ => false + } + }) + guard has_monomorphic else { return } + for impl_ in impls { + guard impl_ is TopFuncDef(fun_decl~, ..) else { continue } + for attr in fun_decl.attrs { + guard derive_props(attr, "command") is Some(props) else { continue } + for prop in props { + guard prop_string(prop) is Some((Some("subtree"), reference)) else { + continue + } + if reference.contains(".") || + reference.contains("::") || + reference.has_prefix("@") { + middleware_fail( + "Tool middleware references tool '" + + reference + + "' outside its package; GOL-34 supports same-package tool shapes only", + ) + } + } + } + } +} + +///| +pub fn parse_tool_middlewares( + files : Array[(String, String)], +) -> Array[ToolMiddlewareInfo] raise ToolMiddlewareParseError { + let impls = parse_source_impls(files) + for impl_ in impls { + validate_middleware_annotation_placement(impl_) + } + reject_qualified_tool_subtrees_for_middleware(impls) + let tools = parse_tools(files) catch { + ToolParseError(message) => { + middleware_fail(message) + abort("") + } + } + let monomorphic : Array[MonomorphicMiddlewareDecl] = [] + let result : Array[ToolMiddlewareInfo] = [] + for impl_ in impls { + match impl_ { + TopTypeDef(decl) => { + let middleware_attrs = decl.attrs + .filter(attr => middleware_annotation_kind(attr) is Some(_)) + .to_array() + if middleware_attrs.length() > 1 { + middleware_fail( + "Middleware declaration '" + + decl.tycon + + "' has more than one middleware annotation", + ) + } + for attr in middleware_attrs { + match middleware_annotation_kind(attr) { + Some("universal_tool_middleware") => + middleware_fail( + "#derive.universal_tool_middleware must annotate an async free function", + ) + Some("tool_middleware") => { + match decl.components { + Record(fields~, ..) if fields.is_empty() => () + _ => + middleware_fail( + "#derive.tool_middleware struct '" + + decl.tycon + + "' must be empty", + ) + } + let (name, aliases, presented, expected) = parse_middleware_metadata( + middleware_props(attr, "tool_middleware").unwrap(), + "tool_middleware", + "middleware " + decl.tycon, + true, + ) + guard presented is Some(presented) else { + middleware_fail( + "#derive.tool_middleware on '" + + decl.tycon + + "' requires presented=\"Tool\"", + ) + continue + } + monomorphic.push({ + source_name: decl.tycon, + name, + aliases, + description: tool_doc(decl.doc), + presented, + expected: expected.unwrap_or(presented), + }) + } + _ => () + } + } + } + TopFuncDef(fun_decl~, ..) => { + let middleware_attrs = fun_decl.attrs + .filter(attr => middleware_annotation_kind(attr) is Some(_)) + .to_array() + if middleware_attrs.length() > 1 { + middleware_fail( + "Middleware handler '" + + fun_decl.name.name + + "' has more than one middleware annotation", + ) + } + for attr in middleware_attrs { + match middleware_annotation_kind(attr) { + Some("tool_middleware") => + middleware_fail( + "#derive.tool_middleware must annotate an empty struct", + ) + Some("universal_tool_middleware") => { + if fun_decl.type_name is Some(_) { + middleware_fail( + "#derive.universal_tool_middleware must annotate an async free function", + ) + } + let (name, aliases, presented, expected) = parse_middleware_metadata( + middleware_props(attr, "universal_tool_middleware").unwrap(), + "universal_tool_middleware", + "function " + fun_decl.name.name, + false, + ) + ignore(presented) + ignore(expected) + validate_universal_handler(fun_decl, name) + result.push({ + source_name: fun_decl.name.name, + name, + aliases, + description: tool_doc(fun_decl.doc), + scope: Universal({ handler_name: fun_decl.name.name }), + }) + } + _ => () + } + } + } + _ => () + } + } + for middleware in monomorphic { + let presented = find_local_tool( + tools, + middleware.name, + middleware.presented, + ) + let expected = find_local_tool(tools, middleware.name, middleware.expected) + let handlers = middleware_surfaces(presented, tools, middleware.name, true) + let underlying_methods = middleware_surfaces( + expected, + tools, + middleware.name, + false, + ) + validate_monomorphic_handlers(impls, middleware, handlers) + result.push({ + source_name: middleware.source_name, + name: middleware.name, + aliases: middleware.aliases, + description: middleware.description, + scope: Monomorphic({ presented, expected, handlers, underlying_methods }), + }) + } + validate_middleware_name_collisions(result) + result +} diff --git a/sdks/moonbit/golem_sdk_tools/lib/tool_middleware_emit.mbt b/sdks/moonbit/golem_sdk_tools/lib/tool_middleware_emit.mbt new file mode 100644 index 0000000000..e6dff522c8 --- /dev/null +++ b/sdks/moonbit/golem_sdk_tools/lib/tool_middleware_emit.mbt @@ -0,0 +1,466 @@ +///| +pub suberror ToolMiddlewareEmitError { + ToolMiddlewareEmitError(String) +} derive(Debug, Eq) + +///| +fn tool_middleware_emit_fail( + message : String, +) -> Unit raise ToolMiddlewareEmitError { + raise ToolMiddlewareEmitError(message) +} + +///| +fn universal_invoker_name(middleware : ToolMiddlewareInfo) -> String { + "__golem_universal_tool_middleware_invoke_" + middleware.source_name +} + +///| +fn emit_universal_tool_middleware_invoker( + buf : StringBuilder, + middleware : ToolMiddlewareInfo, + universal : UniversalToolMiddlewareInfo, +) -> Unit { + buf.write_string( + "///|\nasync fn " + + universal_invoker_name(middleware) + + "(\n invocation : @toolMiddleware.RawToolInvocation,\n underlying : @toolMiddleware.UnderlyingTool,\n) -> Result[\n @toolMiddleware.RawInvocationResult,\n @toolMiddleware.ToolInvokeError[@toolMiddleware.RawTypedSchemaValue],\n] {\n " + + universal.handler_name + + "(invocation, underlying)\n}\n\n", + ) +} + +///| +fn emit_universal_tool_middleware_registration( + buf : StringBuilder, + middleware : ToolMiddlewareInfo, +) -> Unit { + buf.write_string( + " @toolMiddleware.register_tool_middleware(\n {\n name: \"" + + escape_string_lit(middleware.name) + + "\",\n aliases: " + + emit_strings(middleware.aliases) + + ",\n doc: " + + emit_doc(middleware.description, []) + + ",\n scope: @toolMiddleware.ToolMiddlewareScope::Universal,\n },\n " + + universal_invoker_name(middleware) + + ",\n )\n", + ) +} + +///| +fn resolve_middleware_subtree_tool( + tools : Array[ToolInfo], + target : String, +) -> ToolInfo raise ToolMiddlewareEmitError { + resolve_subtree_tool(tools, target) catch { + ToolEmitError(message) => { + tool_middleware_emit_fail(message) + abort("") + } + } +} + +///| +fn mark_middleware_descriptor_tool( + tools : Array[ToolInfo], + tool : ToolInfo, + selected : Map[String, Unit], +) -> Unit raise ToolMiddlewareEmitError { + if selected.contains(tool.source_name) { + return + } + selected[tool.source_name] = () + for command in tool.commands { + if command.subtree is Some(target) { + mark_middleware_descriptor_tool( + tools, + resolve_middleware_subtree_tool(tools, target), + selected, + ) + } + } +} + +///| +fn middleware_descriptor_tools( + middlewares : Array[ToolMiddlewareInfo], + tools : Array[ToolInfo], +) -> Array[ToolInfo] raise ToolMiddlewareEmitError { + let selected : Map[String, Unit] = {} + for middleware in middlewares { + match middleware.scope { + Monomorphic(monomorphic) => { + mark_middleware_descriptor_tool(tools, monomorphic.presented, selected) + mark_middleware_descriptor_tool(tools, monomorphic.expected, selected) + } + Universal(_) => () + } + } + tools.filter(tool => selected.contains(tool.source_name)) +} + +///| +fn middleware_value_type(surface : ToolMiddlewareCommandInfo) -> ParamType? { + if surface.has_stdout { + match surface.success_type { + Tuple([value, _]) => Some(value) + _ => None + } + } else if surface.success_type == Simple("Unit") { + None + } else { + Some(surface.success_type) + } +} + +///| +fn middleware_is_infallible(surface : ToolMiddlewareCommandInfo) -> Bool { + surface.error_type == Simple("@tool.NoToolError") +} + +///| +fn emit_middleware_protocol_helpers(buf : StringBuilder) -> Unit { + buf.write_string( + ( + #|///| + #|fn[T : @schema.IntoSchema + @schema.FromSchema, E] __golem_middleware_decode_canonical_field( + #| fields : Array[@tool.CanonicalInputValue], + #| name : String, + #| context : String, + #|) -> Result[T, @toolMiddleware.ToolInvokeError[E]] { + #| try @tool.decode_canonical_field(fields, name, context) catch { + #| @toolCommon.ToolError::InvalidToolName(name) => Err(@toolMiddleware.ToolInvokeError::InvalidToolName(name)) + #| @toolCommon.ToolError::InvalidCommandPath(path) => Err(@toolMiddleware.ToolInvokeError::InvalidCommandPath(path)) + #| @toolCommon.ToolError::InvalidInput(message) => Err(@toolMiddleware.ToolInvokeError::InvalidInput(message)) + #| @toolCommon.ToolError::ConstraintViolation(message) => Err(@toolMiddleware.ToolInvokeError::ConstraintViolation(message)) + #| @toolCommon.ToolError::InvalidResult(message) => Err(@toolMiddleware.ToolInvokeError::InvalidResult(message)) + #| @toolCommon.ToolError::CustomError(value) => { + #| @model.drop_wit_capabilities(value.value) + #| Err(@toolMiddleware.ToolInvokeError::InvalidResult("canonical field decoding returned a custom tool error")) + #| } + #| } noraise { + #| value => Ok(value) + #| } + #|} + #| + #| + ), + ) +} + +///| +fn emit_expected_underlying_method( + buf : StringBuilder, + expected : ToolInfo, + surface : ToolMiddlewareCommandInfo, +) -> Unit { + let wrapper = expected.source_name + "Underlying" + let params = surface.params + .map(pair => pair.0 + " : " + emit_type(pair.1)) + .join(", ") + buf.write_string( + "///|\npub async fn " + + wrapper + + "::" + + surface.handler_name + + "(self : " + + wrapper + + (if params.is_empty() { "" } else { ", " + params }) + + ") -> Result[" + + emit_type(surface.success_type) + + ", @toolMiddleware.ToolInvokeError[" + + emit_type(surface.error_type) + + "]] {\n let __golem_command_path = " + + emit_strings(surface.command_path) + + "\n let __golem_def = " + + descriptor_name(expected, "middleware") + + "()\n let __golem_index = match __golem_def.command_index_by_path(__golem_command_path) {\n Some(__golem_index) => __golem_index\n None => return Err(@toolMiddleware.ToolInvokeError::InvalidCommandPath(__golem_command_path))\n }\n let __golem_model = __golem_def.canonical_input_model(__golem_index) catch { __golem_error => return Err(@toolMiddleware.ToolInvokeError::InvalidInput(repr(__golem_error))) }\n let __golem_values : Array[(String, @model.SchemaValue)] = []\n", + ) + let mut stdin = "None" + for index, source in surface.param_sources { + match source { + CanonicalInput(canonical) => + buf.write_string( + " __golem_values.push((\"" + + escape_string_lit(canonical) + + "\", @schema.to_value_as(" + + surface.params[index].0 + + ")))\n", + ) + Stdin => stdin = "Some(" + surface.params[index].0 + ")" + Principal => abort("expected middleware surface contains principal") + } + } + let decode_custom_error = if middleware_is_infallible(surface) { + "fn(_) { Err(\"underlying returned a custom error for an infallible command\") }" + } else { + "fn(__golem_error) { " + + emit_type(surface.error_type) + + "::from_error_payload_value(__golem_error) }" + } + let decode_result = if surface.has_stdout { + if middleware_value_type(surface) is Some(_) { + "decode_result_with_stdout" + } else { + "decode_result_stdout_only" + } + } else if middleware_value_type(surface) is Some(_) { + "decode_result_value" + } else { + "decode_result_empty" + } + buf.write_string( + " let __golem_input = @tool.build_canonical_input(__golem_model, __golem_values) catch { __golem_error => return Err(@toolMiddleware.ToolInvokeError::InvalidInput(repr(__golem_error))) }\n let __golem_result = match self.underlying.invoke_with(\n __golem_command_path,\n __golem_input,\n " + + stdin + + ",\n " + + decode_custom_error + + ",\n ) {\n Ok(__golem_result) => __golem_result\n Err(__golem_error) => return Err(__golem_error)\n }\n @toolMiddleware." + + decode_result + + "(__golem_result)\n}\n\n", + ) +} + +///| +fn emit_expected_underlying( + buf : StringBuilder, + expected : ToolInfo, + surfaces : Array[ToolMiddlewareCommandInfo], +) -> Unit { + let wrapper = expected.source_name + "Underlying" + buf.write_string( + "///|\npub struct " + + wrapper + + " { priv underlying : @toolMiddleware.UnderlyingTool }\n\n", + ) + for surface in surfaces { + emit_expected_underlying_method(buf, expected, surface) + } +} + +///| +fn emit_presented_parameter_bindings( + buf : StringBuilder, + surface : ToolMiddlewareCommandInfo, + context : String, +) -> Unit { + let has_stdin = surface.param_sources.any(source => source is Stdin) + if has_stdin { + buf.write_string(" let __golem_stdin = __golem_invocation.stdin()\n") + } else { + buf.write_string( + " if __golem_invocation.stdin() is Some(_) {\n return Err(@toolMiddleware.ToolInvokeError::InvalidInput(\"tool invocation contained an unexpected stdin stream\"))\n }\n", + ) + } + for index, source in surface.param_sources { + let (name, type_) = surface.params[index] + match source { + CanonicalInput(canonical) => + buf.write_string( + " let " + + name + + " : " + + emit_type(type_) + + " = match __golem_middleware_decode_canonical_field(__golem_decoded, \"" + + escape_string_lit(canonical) + + "\", \"" + + escape_string_lit(context) + + "\") {\n Ok(__golem_value) => __golem_value\n Err(__golem_error) => return Err(__golem_error)\n }\n", + ) + Stdin => + buf.write_string( + " let " + + name + + " = match __golem_stdin {\n Some(__golem_stdin) => __golem_stdin\n None => return Err(@toolMiddleware.ToolInvokeError::InvalidInput(\"tool invocation did not contain declared stdin stream\"))\n }\n", + ) + Principal => + buf.write_string( + " let " + name + " = __golem_invocation.principal()\n", + ) + } + } +} + +///| +fn emit_presented_success( + surface : ToolMiddlewareCommandInfo, + value : String, +) -> String { + if surface.has_stdout { + match middleware_value_type(surface) { + Some(_) => + "let (__golem_value, __golem_stdout) = " + + value + + "\n return __golem_invocation.typed_result_value_with_stdout(__golem_value, __golem_stdout)" + None => "return __golem_invocation.typed_result_stdout(" + value + ")" + } + } else { + match middleware_value_type(surface) { + Some(_) => "return __golem_invocation.typed_result_value(" + value + ")" + None => + "ignore(" + + value + + ")\n return __golem_invocation.typed_result_empty()" + } + } +} + +///| +fn emit_presented_custom_error_encoder( + surface : ToolMiddlewareCommandInfo, +) -> String { + if middleware_is_infallible(surface) { + "fn(_) { Err(\"infallible middleware handler returned a custom tool error\") }" + } else { + "fn(__golem_error) { " + + emit_type(surface.error_type) + + "::to_error_payload_value(__golem_error) }" + } +} + +///| +fn monomorphic_invoker_name(middleware : ToolMiddlewareInfo) -> String { + "__golem_monomorphic_tool_middleware_invoke_" + middleware.source_name +} + +///| +fn emit_monomorphic_tool_middleware_invoker( + buf : StringBuilder, + middleware : ToolMiddlewareInfo, + monomorphic : MonomorphicToolMiddlewareInfo, +) -> Unit { + buf.write_string( + "///|\nasync fn " + + monomorphic_invoker_name(middleware) + + "(\n __golem_invocation : @toolMiddleware.RawToolInvocation,\n __golem_underlying : @toolMiddleware.UnderlyingTool,\n) -> Result[\n @toolMiddleware.RawInvocationResult,\n @toolMiddleware.ToolInvokeError[@toolMiddleware.RawTypedSchemaValue],\n] {\n let __golem_command_path = __golem_invocation.command_path()\n let __golem_def = " + + descriptor_name(monomorphic.presented, "middleware") + + "()\n let __golem_index = match __golem_def.command_index_by_path(__golem_command_path) {\n Some(__golem_index) => __golem_index\n None => return Err(@toolMiddleware.ToolInvokeError::InvalidCommandPath(__golem_command_path))\n }\n let __golem_decoded = match __golem_invocation.decode_input(__golem_def, __golem_index, \"tool middleware " + + escape_string_lit(middleware.name) + + " invocation\") {\n Ok(__golem_decoded) => __golem_decoded\n Err(__golem_error) => return Err(__golem_error)\n }\n", + ) + for surface in monomorphic.handlers { + let context = "tool middleware " + + middleware.name + + " command " + + surface.command_path.join("/") + buf.write_string( + " if __golem_def.command_index_by_path(" + + emit_strings(surface.command_path) + + ") == Some(__golem_index) {\n", + ) + emit_presented_parameter_bindings(buf, surface, context) + let args = surface.params.map(pair => pair.0) + let call_args = if args.is_empty() { + "__golem_expected" + } else { + "__golem_expected, " + args.join(", ") + } + buf.write_string( + " let __golem_expected = " + + monomorphic.expected.source_name + + "Underlying::{ underlying: __golem_underlying }\n match " + + middleware.source_name + + "::" + + surface.handler_name + + "(" + + call_args + + ") {\n Ok(__golem_result) => {\n " + + emit_presented_success(surface, "__golem_result") + + "\n }\n Err(__golem_error) => {\n return Err(__golem_invocation.encode_handler_error(\n __golem_error,\n " + + emit_presented_custom_error_encoder(surface) + + ",\n ))\n }\n }\n }\n", + ) + } + buf.write_string( + " Err(@toolMiddleware.ToolInvokeError::InvalidCommandPath(__golem_command_path))\n}\n\n", + ) +} + +///| +fn emit_monomorphic_tool_middleware_registration( + buf : StringBuilder, + middleware : ToolMiddlewareInfo, + monomorphic : MonomorphicToolMiddlewareInfo, +) -> Unit { + buf.write_string( + " @toolMiddleware.register_tool_middleware(\n {\n name: \"" + + escape_string_lit(middleware.name) + + "\",\n aliases: " + + emit_strings(middleware.aliases) + + ",\n doc: " + + emit_doc(middleware.description, []) + + ",\n scope: @toolMiddleware.ToolMiddlewareScope::Monomorphic({\n presented: " + + descriptor_name(monomorphic.presented, "middleware") + + "().to_tool(),\n expected: " + + descriptor_name(monomorphic.expected, "middleware") + + "().to_tool(),\n }),\n },\n " + + monomorphic_invoker_name(middleware) + + ",\n )\n", + ) +} + +///| +pub fn generate_tool_middleware_registration( + middlewares : Array[ToolMiddlewareInfo], + tools : Array[ToolInfo], + role : ComponentRole, +) -> @list.List[@syntax.Impl] raise ToolMiddlewareEmitError { + if !role.allows_tool_middleware_registration() { + tool_middleware_emit_fail( + "component role '" + role.name() + "' does not export tool middleware", + ) + } + let buf = StringBuilder::new() + let descriptor_tools = middleware_descriptor_tools(middlewares, tools) + emit_tool_descriptor_support( + buf, + descriptor_tools, + "middleware", + false, + role is ToolMiddleware, + ) catch { + ToolEmitError(message) => tool_middleware_emit_fail(message) + } + if middlewares.any(middleware => middleware.scope is Monomorphic(_)) { + emit_middleware_protocol_helpers(buf) + let emitted_wrappers : Map[String, Unit] = {} + for middleware in middlewares { + if middleware.scope is Monomorphic(monomorphic) && + !emitted_wrappers.contains(monomorphic.expected.source_name) { + emitted_wrappers[monomorphic.expected.source_name] = () + emit_expected_underlying( + buf, + monomorphic.expected, + monomorphic.underlying_methods, + ) + } + } + } + for middleware in middlewares { + match middleware.scope { + Universal(universal) => + emit_universal_tool_middleware_invoker(buf, middleware, universal) + Monomorphic(monomorphic) => + emit_monomorphic_tool_middleware_invoker(buf, middleware, monomorphic) + } + } + if middlewares.length() > 0 { + buf.write_string( + "///|\nfn __golem_register_tool_middlewares() -> Unit raise {\n", + ) + for middleware in middlewares { + match middleware.scope { + Universal(_) => + emit_universal_tool_middleware_registration(buf, middleware) + Monomorphic(monomorphic) => + emit_monomorphic_tool_middleware_registration( + buf, middleware, monomorphic, + ) + } + } + buf.write_string( + "}\n\n///|\nfn init {\n try __golem_register_tool_middlewares() catch { error => abort(\"failed to register generated tool middleware: \" + repr(error)) }\n}\n", + ) + } + parse_generated_impls(buf.to_string(), "tool middleware registration") +} diff --git a/sdks/moonbit/golem_sdk_tools/lib/tool_middleware_emit_test.mbt b/sdks/moonbit/golem_sdk_tools/lib/tool_middleware_emit_test.mbt new file mode 100644 index 0000000000..8afcda85fe --- /dev/null +++ b/sdks/moonbit/golem_sdk_tools/lib/tool_middleware_emit_test.mbt @@ -0,0 +1,192 @@ +///| +fn universal_middleware_source( + name : String, + aliases : String, + handler : String, +) -> String { + "/// Audits every tool.\n/// Without rebuilding carriers.\n#derive.universal_tool_middleware(\"" + + name + + "\"" + + aliases + + ")\npub async fn " + + handler + + "(\n invocation : @toolMiddleware.RawToolInvocation,\n underlying : @toolMiddleware.UnderlyingTool,\n) -> Result[\n @toolMiddleware.RawInvocationResult,\n @toolMiddleware.ToolInvokeError[@toolMiddleware.RawTypedSchemaValue],\n] {\n underlying.invoke_raw(invocation.command_path(), invocation.input(), invocation.stdin())\n}\n" +} + +///| +test "universal middleware emitter registers metadata and a raw async adapter" { + let source = universal_middleware_source( + "audit", ", alias=\"trace-tools\", alias=\"logged-tools\"", "audit_all", + ) + let middlewares = @lib.parse_tool_middlewares([("audit.mbt", source)]) + let generated = @formatter.impls_to_string( + @lib.generate_tool_middleware_registration( + middlewares, + [], + @lib.ComponentRole::ToolMiddleware, + ), + ) + assert_true( + generated.contains( + "async fn __golem_universal_tool_middleware_invoke_audit_all", + ), + ) + assert_true(generated.contains("audit_all(invocation, underlying)")) + assert_true(generated.contains("name: \"audit\"")) + assert_true( + generated.contains("aliases: [\"trace-tools\", \"logged-tools\"]"), + ) + assert_true(generated.contains("summary: \"Audits every tool.\"")) + assert_true( + generated.contains("description: \"Without rebuilding carriers.\""), + ) + assert_true( + generated.contains("@toolMiddleware.ToolMiddlewareScope::Universal"), + ) + assert_true(generated.contains("@toolMiddleware.register_tool_middleware")) + assert_true(!generated.contains("@model")) + assert_true(!generated.contains("@schema")) + assert_true(!generated.contains("@tool.")) +} + +///| +test "universal middleware emitter handles multiple declarations and empty input" { + let source = universal_middleware_source("zeta", "", "zeta") + + universal_middleware_source("alpha", "", "alpha") + let generated = @formatter.impls_to_string( + @lib.generate_tool_middleware_registration( + @lib.parse_tool_middlewares([("middlewares.mbt", source)]), + [], + @lib.ComponentRole::ToolMiddleware, + ), + ) + assert_true( + generated.contains("__golem_universal_tool_middleware_invoke_zeta"), + ) + assert_true( + generated.contains("__golem_universal_tool_middleware_invoke_alpha"), + ) + assert_eq( + @formatter.impls_to_string( + @lib.generate_tool_middleware_registration( + [], + [], + @lib.ComponentRole::ToolMiddleware, + ), + ), + "", + ) +} + +///| +test "monomorphic emitter generates namespaced descriptors wrappers dispatch and metadata" { + let source = + #|#derive.tool + #|struct Echo {} + #|pub fn Echo::echo(value : String) -> String { value } + #| + #|#derive.tool_middleware("echo-policy", presented="Echo") + #|struct EchoPolicy {} + #|pub async fn EchoPolicy::echo( + #| underlying : EchoUnderlying, + #| value : String, + #|) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + #| underlying.echo(value) + #|} + let middlewares = @lib.parse_tool_middlewares([("policy.mbt", source)]) + let generated = @formatter.impls_to_string( + @lib.generate_tool_middleware_registration( + middlewares, + @lib.parse_tools([("policy.mbt", source)]), + @lib.ComponentRole::ToolMiddleware, + ), + ) + assert_true(generated.contains("fn __golem_middleware_tool_def_Echo")) + assert_false(generated.contains("fn __golem_tool_def_Echo")) + assert_false(generated.contains("fn __golem_tool_invoke_Echo")) + assert_true(generated.contains("pub struct EchoUnderlying")) + assert_true( + generated.contains("priv underlying : @toolMiddleware.UnderlyingTool"), + ) + assert_true(generated.contains("pub async fn EchoUnderlying::echo")) + assert_true(generated.contains("invoke_with(")) + assert_false(generated.contains("ToolClient")) + assert_true( + generated.contains( + "async fn __golem_monomorphic_tool_middleware_invoke_EchoPolicy", + ), + ) + assert_true(generated.contains("EchoPolicy::echo")) + assert_true( + generated.contains( + "scope: @toolMiddleware.ToolMiddlewareScope::Monomorphic", + ), + ) + assert_true(generated.contains("presented: __golem_middleware_tool_def_Echo")) + assert_true(generated.contains("expected: __golem_middleware_tool_def_Echo")) +} + +///| +test "checked-in authoring fixture generates middleware source" { + let path = "../golem_sdk/tool-middleware-authoring-test/authoring.mbt" + let source = @fs.read_file_to_string(path) + let tools = @lib.parse_tools([(path, source)]) + let middlewares = @lib.parse_tool_middlewares([(path, source)]) + let generated = @formatter.impls_to_string( + @lib.generate_tool_middleware_registration( + middlewares, + tools, + @lib.ComponentRole::ToolMiddleware, + ), + ) + assert_true(generated.contains("pub struct PresentedUnderlying")) + assert_true(generated.contains("pub struct StorageUnderlying")) + assert_true(generated.contains("PresentedUnderlying::admin__run")) + assert_true(generated.contains("StorageUnderlying::fetch")) + assert_true(generated.contains("[\"admin\", \"run\"]")) + assert_true(generated.contains("RunError::from_error_payload_value")) + assert_true(generated.contains("RunError::to_error_payload_value")) + assert_true(generated.contains("decode_result_empty")) + assert_true(generated.contains("decode_result_value")) + assert_true(generated.contains("decode_result_stdout_only")) + assert_true(generated.contains("decode_result_with_stdout")) + assert_true(generated.contains("typed_result_empty")) + assert_true(generated.contains("typed_result_value(")) + assert_true(generated.contains("typed_result_stdout(")) + assert_true(generated.contains("typed_result_value_with_stdout")) + assert_true(generated.contains("__golem_invocation.principal()")) + assert_true(generated.contains("__golem_invocation.stdin()")) + assert_true(generated.contains("fn __golem_middleware_tool_def_Presented")) + assert_true(generated.contains("fn __golem_middleware_tool_def_Nested")) + assert_true(generated.contains("fn __golem_middleware_tool_def_Storage")) + assert_false(generated.contains("fn __golem_tool_def_Presented")) + assert_false(generated.contains("fn __golem_tool_invoke_Presented")) + assert_false(generated.contains("ToolClient")) + assert_true(generated.contains("pub impl @tool.ToolErrorSchema for RunError")) + let combined = @formatter.impls_to_string( + @lib.generate_tool_middleware_registration( + middlewares, + tools, + @lib.ComponentRole::Combined, + ), + ) + assert_false(combined.contains("pub impl @tool.ToolErrorSchema for RunError")) + let error = try { + ignore( + @lib.generate_tool_middleware_registration( + middlewares, + tools, + @lib.ComponentRole::Ordinary, + ), + ) + "NO ERROR" + } catch { + @lib.ToolMiddlewareEmitError(message) => message + } noraise { + value => value + } + inspect( + error, + content="component role 'ordinary' does not export tool middleware", + ) +} diff --git a/sdks/moonbit/golem_sdk_tools/lib/tool_middleware_test.mbt b/sdks/moonbit/golem_sdk_tools/lib/tool_middleware_test.mbt new file mode 100644 index 0000000000..bf80692d2c --- /dev/null +++ b/sdks/moonbit/golem_sdk_tools/lib/tool_middleware_test.mbt @@ -0,0 +1,561 @@ +///| +fn middleware_parse_error(source : String) -> String { + try @lib.parse_tool_middlewares([("middleware.mbt", source)]) catch { + @lib.ToolMiddlewareParseError(message) => message + } noraise { + _ => "NO ERROR" + } +} + +///| +fn monomorphic_scope( + middleware : @lib.ToolMiddlewareInfo, +) -> @lib.MonomorphicToolMiddlewareInfo { + match middleware.scope { + @lib.ToolMiddlewareScopeInfo::Monomorphic(scope) => scope + _ => abort("expected monomorphic middleware") + } +} + +///| +fn middleware_handler( + handlers : Array[@lib.ToolMiddlewareCommandInfo], + name : String, +) -> @lib.ToolMiddlewareCommandInfo { + for handler in handlers { + if handler.handler_name == name { + return handler + } + } + abort("missing middleware handler " + name) +} + +///| +test "monomorphic authoring projects direct parameters, streams, principal, and errors" { + let source = + #|#derive.tool("presented") + #|struct Presented {} + #|pub fn Presented::unit() -> Unit { () } + #|pub fn Presented::value(value : String) -> Int { value.length() } + #|pub fn Presented::stdout(output : @asyncCore.Sink[Byte]) -> Unit { ignore(output) } + #|pub fn Presented::value_stdout(value : String, output : @asyncCore.Sink[Byte]) -> Int { ignore(output); value.length() } + #|pub fn Presented::io(input : @asyncCore.Stream[Byte], output : @asyncCore.Sink[Byte], principal : @common.Principal) -> Result[String, RunError] { ... } + #| + #|#derive.golem_schema + #|enum RunError { + #| #derive.error(kind="runtime-error") + #| Broken(String) + #|} + #| + #|/// Enforces the complete presented surface. + #|#derive.tool_middleware("policy", presented="Presented", alias="safe", alias="audited") + #|struct Policy {} + #|pub async fn Policy::unit(underlying : PresentedUnderlying) -> Result[Unit, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { ... } + #|pub async fn Policy::value(underlying : PresentedUnderlying, value : String) -> Result[Int, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { ... } + #|pub async fn Policy::stdout(underlying : PresentedUnderlying) -> Result[@asyncCore.Stream[Byte], @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { ... } + #|pub async fn Policy::value_stdout(underlying : PresentedUnderlying, value : String) -> Result[(Int, @asyncCore.Stream[Byte]), @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { ... } + #|pub async fn Policy::io(underlying : PresentedUnderlying, input : @toolMiddleware.MiddlewareStdin, principal : @tool.Principal) -> Result[(String, @asyncCore.Stream[Byte]), @toolMiddleware.ToolInvokeError[RunError]] { ... } + let middlewares = @lib.parse_tool_middlewares([("middleware.mbt", source)]) + guard middlewares is [middleware] else { fail("expected one middleware") } + assert_eq(middleware.name, "policy") + inspect(middleware.aliases, content="[safe, audited]") + assert_eq(middleware.description, "Enforces the complete presented surface.") + let scope = monomorphic_scope(middleware) + assert_eq(scope.presented.source_name, "Presented") + assert_eq(scope.expected.source_name, "Presented") + assert_eq(scope.handlers.length(), 5) + assert_true( + middleware_handler(scope.handlers, "unit").success_type == + @lib.ParamType::Simple("Unit"), + ) + assert_true( + middleware_handler(scope.handlers, "stdout").success_type == + @lib.ParamType::Parameterized("@asyncCore.Stream", [ + @lib.ParamType::Simple("Byte"), + ]), + ) + debug_inspect( + middleware_handler(scope.handlers, "io").params, + content=( + #|[ + #| ("input", Simple("@toolMiddleware.MiddlewareStdin")), + #| ("principal", Simple("@tool.Principal")), + #|] + ), + ) + debug_inspect( + middleware_handler(scope.handlers, "io").param_sources, + content="[Stdin, Principal]", + ) + assert_true( + middleware_handler(scope.handlers, "io").error_type == + @lib.ParamType::Simple("RunError"), + ) + debug_inspect( + middleware_handler(scope.underlying_methods, "io").params, + content="[(\"input\", Simple(\"@toolMiddleware.MiddlewareStdin\"))]", + ) +} + +///| +test "adapter authoring separates presented handlers from expected underlying methods" { + let source = + #|#derive.tool("public-files") + #|struct PublicFiles {} + #|pub fn PublicFiles::read(path : String) -> String { path } + #|#derive.tool("storage") + #|struct Storage {} + #|pub fn Storage::fetch(key : String) -> String { key } + #|#derive.tool_middleware("adapter", presented="PublicFiles", expected="Storage") + #|struct Adapter {} + #|pub async fn Adapter::read(underlying : StorageUnderlying, path : String) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { ... } + let middlewares = @lib.parse_tool_middlewares([("adapter.mbt", source)]) + let scope = monomorphic_scope(middlewares[0]) + inspect(scope.handlers.map(handler => handler.handler_name), content="[read]") + inspect( + scope.underlying_methods.map(handler => handler.handler_name), + content="[fetch]", + ) +} + +///| +test "nested command paths flatten source segments and share inherited identities" { + let source = + #|#derive.tool("root") + #|struct Root {} + #|#derive.command(subtree="Child") + #|#derive.arg("verbose", scope="global", alias="v") + #|pub fn Root::admin(verbose : Bool) -> Unit { () } + #|#derive.tool("child") + #|struct Child {} + #|#derive.arg("verbosity", scope="global", name="verbosity", alias="verbose") + #|pub fn Child::child(verbosity : Bool) -> Unit { () } + #|pub fn Child::run(name : String) -> String { name } + #|#derive.tool_middleware("nested", presented="Root") + #|struct Nested {} + #|pub async fn Nested::admin(underlying : RootUnderlying, verbose : Bool) -> Result[Unit, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { ... } + #|pub async fn Nested::admin__run(underlying : RootUnderlying, verbose : Bool, name : String) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { ... } + let scope = monomorphic_scope( + @lib.parse_tool_middlewares([("nested.mbt", source)])[0], + ) + let root = middleware_handler(scope.handlers, "admin") + inspect(root.command_path, content="[admin]") + debug_inspect(root.params, content="[(\"verbose\", Simple(\"Bool\"))]") + let leaf = middleware_handler(scope.handlers, "admin__run") + inspect(leaf.command_path, content="[admin, run]") + debug_inspect( + leaf.params, + content=( + #|[("verbose", Simple("Bool")), ("name", Simple("String"))] + ), + ) + debug_inspect( + leaf.param_sources, + content=( + #|[CanonicalInput("verbose"), CanonicalInput("name")] + ), + ) +} + +///| +test "root globals flow to sibling and nested middleware surfaces" { + let source = + #|#derive.tool("root") + #|struct Root {} + #|#derive.arg("profile", scope="global") + #|pub fn Root::root(profile : String, local : String) -> Unit { () } + #|pub fn Root::run(name : String) -> String { name } + #|#derive.command(subtree="Child") + #|#derive.arg("verbose", scope="global", alias="v") + #|pub fn Root::admin(verbose : Bool) -> Unit { () } + #|#derive.tool("child") + #|struct Child {} + #|#derive.arg("verbosity", scope="global", alias="verbose") + #|#derive.arg("region", scope="global") + #|pub fn Child::child(verbosity : Bool, region : String) -> Unit { () } + #|pub fn Child::run(name : String) -> String { name } + #|#derive.tool_middleware("nested", presented="Root") + #|struct Nested {} + #|pub async fn Nested::root(underlying : RootUnderlying, profile : String, local : String) -> Result[Unit, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { ... } + #|pub async fn Nested::run(underlying : RootUnderlying, profile : String, name : String) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { ... } + #|pub async fn Nested::admin(underlying : RootUnderlying, profile : String, verbose : Bool, region : String) -> Result[Unit, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { ... } + #|pub async fn Nested::admin__run(underlying : RootUnderlying, profile : String, verbose : Bool, region : String, name : String) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { ... } + let scope = monomorphic_scope( + @lib.parse_tool_middlewares([("root-globals.mbt", source)])[0], + ) + let expected : Array[(String, Array[(String, @lib.ParamType)])] = [ + ( + "root", + [ + ("profile", @lib.ParamType::Simple("String")), + ("local", @lib.ParamType::Simple("String")), + ], + ), + ( + "run", + [ + ("profile", @lib.ParamType::Simple("String")), + ("name", @lib.ParamType::Simple("String")), + ], + ), + ( + "admin", + [ + ("profile", @lib.ParamType::Simple("String")), + ("verbose", @lib.ParamType::Simple("Bool")), + ("region", @lib.ParamType::Simple("String")), + ], + ), + ( + "admin__run", + [ + ("profile", @lib.ParamType::Simple("String")), + ("verbose", @lib.ParamType::Simple("Bool")), + ("region", @lib.ParamType::Simple("String")), + ("name", @lib.ParamType::Simple("String")), + ], + ), + ] + for pair in expected { + assert_true(middleware_handler(scope.handlers, pair.0).params == pair.1) + assert_true( + middleware_handler(scope.underlying_methods, pair.0).params == pair.1, + ) + } +} + +///| +test "universal authoring locks one grouped raw async signature" { + let source = + #|/// Audits an invocation without reinterpreting its carriers. + #|#derive.universal_tool_middleware("audit", alias="trace") + #|pub async fn audit(invocation : @toolMiddleware.RawToolInvocation, underlying : @toolMiddleware.UnderlyingTool) -> Result[@toolMiddleware.RawInvocationResult, @toolMiddleware.ToolInvokeError[@toolMiddleware.RawTypedSchemaValue]] { ... } + let middlewares = @lib.parse_tool_middlewares([("universal.mbt", source)]) + guard middlewares is [middleware] else { + fail("expected one universal middleware") + } + assert_eq(middleware.name, "audit") + inspect(middleware.aliases, content="[trace]") + assert_eq( + middleware.description, + "Audits an invocation without reinterpreting its carriers.", + ) + match middleware.scope { + @lib.ToolMiddlewareScopeInfo::Universal(info) => + assert_eq(info.handler_name, "audit") + _ => fail("expected universal middleware") + } +} + +///| +test "checked-in authoring sources parse to the locked middleware contract" { + let fixtures : Array[(String, String)] = [ + ("adapter.mbt", "file-adapter"), + ("combined.mbt", "echo-policy"), + ("retry.mbt", "retry-once"), + ("short_circuit.mbt", "deny-policy"), + ("transparent.mbt", "path-policy"), + ("universal.mbt", "audit"), + ] + for fixture in fixtures { + let path = "test-data/tool_middleware_authoring/" + fixture.0 + let middlewares = @lib.parse_tool_middlewares([ + (path, @fs.read_file_to_string(path)), + ]) catch { + @lib.ToolMiddlewareParseError(message) => { + fail("failed to parse " + path + ": " + message) + [] + } + _ => { + fail("failed to parse " + path + " with an unexpected error") + [] + } + } + guard middlewares is [middleware] else { + fail("expected one middleware in " + path) + } + assert_eq(middleware.name, fixture.1) + } + + let authoring_path = "../golem_sdk/tool-middleware-authoring-test/authoring.mbt" + let middlewares = @lib.parse_tool_middlewares([ + (authoring_path, @fs.read_file_to_string(authoring_path)), + ]) catch { + @lib.ToolMiddlewareParseError(message) => { + fail("failed to parse " + authoring_path + ": " + message) + [] + } + _ => { + fail("failed to parse " + authoring_path + " with an unexpected error") + [] + } + } + assert_eq(middlewares.length(), 3) + let policy = middlewares + .iter() + .find_first(middleware => middleware.name == "policy") + .unwrap() + let policy_scope = monomorphic_scope(policy) + inspect( + policy_scope.handlers.map(handler => handler.handler_name), + content="[unit, value, retry, stdout, abandon_stdout, value_stdout, io, admin__run]", + ) + inspect( + policy_scope.underlying_methods.map(handler => handler.handler_name), + content="[unit, value, retry, stdout, abandon_stdout, value_stdout, io, admin__run]", + ) + debug_inspect( + middleware_handler(policy_scope.handlers, "io").params, + content=( + #|[ + #| ("input", Simple("@toolMiddleware.MiddlewareStdin")), + #| ("principal", Simple("@tool.Principal")), + #|] + ), + ) + debug_inspect( + middleware_handler(policy_scope.underlying_methods, "io").params, + content="[(\"input\", Simple(\"@toolMiddleware.MiddlewareStdin\"))]", + ) + let adapter = middlewares + .iter() + .find_first(middleware => middleware.name == "adapter") + .unwrap() + let adapter_scope = monomorphic_scope(adapter) + assert_eq(adapter_scope.handlers.length(), 8) + inspect( + adapter_scope.underlying_methods.map(handler => handler.handler_name), + content="[fetch]", + ) + let audit = middlewares + .iter() + .find_first(middleware => middleware.name == "audit") + .unwrap() + assert_true(audit.scope is @lib.ToolMiddlewareScopeInfo::Universal(_)) +} + +///| +fn simple_middleware(handler : String) -> String { + ( + #|#derive.tool("runner") + #|struct Runner {} + #|pub fn Runner::run(value : String) -> String { value } + #|#derive.tool_middleware("policy", presented="Runner") + #|struct Policy {} + #| + ) + + handler +} + +///| +test "monomorphic declarations reject invalid metadata, placement, and coverage" { + let cases : Array[(String, String)] = [ + ( + "#derive.tool_middleware(\"bad\", presented=\"Runner\")\nstruct Bad { value : Int }\n#derive.tool\nstruct Runner {}\n", + "must be empty", + ), + ("#derive.tool_middleware(\"bad\")\nstruct Bad {}\n", "requires presented"), + ( + "#derive.tool_middleware(\"bad\", presented=\"Missing\")\nstruct Bad {}\n", + "same-package tool shapes only", + ), + ( + "#derive.tool_middleware(\"bad\", presented=\"@other.Tool\")\nstruct Bad {}\n", + "same-package tool shapes only", + ), + (simple_middleware(""), "is missing async handler"), + ( + simple_middleware( + "pub async fn Policy::run(underlying : RunnerUnderlying, value : String) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { ... }\npub fn Policy::extra() -> Unit { () }\n", + ), + "unexpected public handler", + ), + ( + simple_middleware( + "pub fn Policy::run(underlying : RunnerUnderlying, value : String) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { ... }\n", + ), + "must be async", + ), + ( + simple_middleware( + "async fn Policy::run(underlying : RunnerUnderlying, value : String) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { ... }\n", + ), + "must be public", + ), + ( + simple_middleware( + "pub async fn Policy::run(self : Self, underlying : RunnerUnderlying, value : String) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { ... }\n", + ), + "must be static", + ), + ( + simple_middleware( + "pub async fn Policy::run(underlying : WrongUnderlying, value : String) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { ... }\n", + ), + "parameter 1", + ), + ( + simple_middleware( + "pub async fn Policy::run(underlying : RunnerUnderlying, value : Int) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { ... }\n", + ), + "parameter 2", + ), + ( + simple_middleware( + "pub async fn Policy::run(underlying : RunnerUnderlying, value : String) -> Result[Int, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { ... }\n", + ), + "middleware result projection", + ), + ( + "#derive.tool_middleware(\"bad\", presented=\"Runner\")\n#derive.tool_middleware(\"other\", presented=\"Runner\")\nstruct Bad {}\n#derive.tool\nstruct Runner {}\n", + "more than one middleware annotation", + ), + ] + for case in cases { + let message = middleware_parse_error(case.0) + if !message.contains(case.1) { + fail("expected '\{message}' to contain '\{case.1}'") + } + } +} + +///| +test "monomorphic declarations reject qualified subtree and handler owners" { + let qualified_subtree = + #|#derive.tool("root") + #|struct Root {} + #|#derive.command(subtree="@other.Child") + #|pub fn Root::child() -> Unit { () } + #|#derive.tool_middleware("policy", presented="Root") + #|struct Policy {} + let qualified_subtree_error = middleware_parse_error(qualified_subtree) + if !qualified_subtree_error.contains("same-package tool shapes only") { + fail("unexpected qualified subtree error: " + qualified_subtree_error) + } + let qualified_subtree_with_namesake = qualified_subtree + + "\n" + + ( + #|#derive.tool("child") + #|struct Child {} + #|pub fn Child::run() -> Unit { () } + ) + let namesake_error = middleware_parse_error(qualified_subtree_with_namesake) + if !namesake_error.contains("same-package tool shapes only") { + fail("unexpected qualified subtree namesake error: " + namesake_error) + } + let qualified_handler = + #|#derive.tool("runner") + #|struct Runner {} + #|pub fn Runner::run(value : String) -> String { value } + #|#derive.tool_middleware("policy", presented="Runner") + #|struct Policy {} + #|pub async fn @other.Policy::run(underlying : RunnerUnderlying, value : String) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { ... } + let qualified_handler_error = middleware_parse_error(qualified_handler) + if !qualified_handler_error.contains("same-package middleware handlers only") { + fail("unexpected qualified handler error: " + qualified_handler_error) + } +} + +///| +test "flattened handler collisions and subtree cycles are rejected" { + let collision = + #|#derive.tool("root") + #|struct Root {} + #|pub fn Root::foo__bar() -> Unit { () } + #|#derive.command(name="foo", subtree="Child") + #|pub fn Root::foo() -> Unit { () } + #|#derive.tool("child") + #|struct Child {} + #|pub fn Child::bar() -> Unit { () } + #|#derive.tool_middleware("collision", presented="Root") + #|struct Collision {} + assert_true(middleware_parse_error(collision).contains("collides")) + let cycle = + #|#derive.tool("a") + #|struct A {} + #|#derive.command(subtree="B") + #|pub fn A::b() -> Unit { () } + #|#derive.tool("b") + #|struct B {} + #|#derive.command(subtree="A") + #|pub fn B::a() -> Unit { () } + #|#derive.tool_middleware("cycle", presented="A") + #|struct Cycle {} + assert_true(middleware_parse_error(cycle).contains("cycle")) +} + +///| +test "universal middleware rejects invalid placement and signatures" { + let valid_return = "Result[@toolMiddleware.RawInvocationResult, @toolMiddleware.ToolInvokeError[@toolMiddleware.RawTypedSchemaValue]]" + let valid_params = "invocation : @toolMiddleware.RawToolInvocation, underlying : @toolMiddleware.UnderlyingTool" + let cases : Array[(String, String)] = [ + ( + "#derive.universal_tool_middleware(\"audit\")\nstruct Audit {}\n", "async free function", + ), + ( + "#derive.universal_tool_middleware(\"audit\")\npub async fn Audit::run(\{valid_params}) -> \{valid_return} { ... }\n", + "async free function", + ), + ( + "#derive.universal_tool_middleware(\"audit\")\npub fn audit(\{valid_params}) -> \{valid_return} { ... }\n", + "must be async", + ), + ( + "#derive.universal_tool_middleware(\"audit\")\nasync fn audit(\{valid_params}) -> \{valid_return} { ... }\n", + "must be public", + ), + ( + "#derive.universal_tool_middleware(\"audit\")\npub async fn audit(underlying : @toolMiddleware.UnderlyingTool) -> \{valid_return} { ... }\n", + "accept exactly", + ), + ( + "#derive.universal_tool_middleware(\"audit\")\npub async fn audit(\{valid_params}) -> Result[Unit, Unit] { ... }\n", + "must return", + ), + ( + "#derive.universal_tool_middleware(\"audit\")\n#derive.universal_tool_middleware(\"other\")\npub async fn audit(\{valid_params}) -> \{valid_return} { ... }\n", + "more than one middleware annotation", + ), + ] + for case in cases { + let message = middleware_parse_error(case.0) + if !message.contains(case.1) { + fail("expected '\{message}' to contain '\{case.1}'") + } + } +} + +///| +test "universal middleware rejects a qualified function owner" { + let source = + #|#derive.universal_tool_middleware("audit") + #|pub async fn @other.Audit::run( + #| invocation : @toolMiddleware.RawToolInvocation, + #| underlying : @toolMiddleware.UnderlyingTool, + #|) -> Result[@toolMiddleware.RawInvocationResult, @toolMiddleware.ToolInvokeError[@toolMiddleware.RawTypedSchemaValue]] { ... } + let message = middleware_parse_error(source) + if !message.contains("async free function") { + fail("unexpected qualified universal handler result: " + message) + } +} + +///| +test "universal middleware rejects annotation on a value declaration" { + let source = + #|#derive.universal_tool_middleware("audit") + #|let audit = 1 + let message = middleware_parse_error(source) + if !message.contains("async free function") { + fail("unexpected universal value-declaration result: " + message) + } +} + +///| +test "canonical names and aliases form one collision domain" { + let signature = "(invocation : @toolMiddleware.RawToolInvocation, underlying : @toolMiddleware.UnderlyingTool) -> Result[@toolMiddleware.RawInvocationResult, @toolMiddleware.ToolInvokeError[@toolMiddleware.RawTypedSchemaValue]]" + let source = "#derive.universal_tool_middleware(\"first\", alias=\"shared\")\npub async fn first\{signature} { ... }\n" + + "#derive.universal_tool_middleware(\"shared\")\npub async fn second\{signature} { ... }\n" + assert_true(middleware_parse_error(source).contains("collides")) + let duplicate_alias = "#derive.universal_tool_middleware(\"first\", alias=\"same\", alias=\"same\")\npub async fn first\{signature} { ... }\n" + assert_true(middleware_parse_error(duplicate_alias).contains("Duplicate")) +} diff --git a/sdks/moonbit/golem_sdk_tools/lib/tools_emit.mbt b/sdks/moonbit/golem_sdk_tools/lib/tools_emit.mbt index 74d9cc2fa1..fa5b3aa0a3 100644 --- a/sdks/moonbit/golem_sdk_tools/lib/tools_emit.mbt +++ b/sdks/moonbit/golem_sdk_tools/lib/tools_emit.mbt @@ -1276,18 +1276,32 @@ fn emit_body( } ///| -fn descriptor_name(tool : ToolInfo) -> String { - "__golem_tool_def_" + tool.source_name +fn descriptor_symbol_prefix(namespace : String) -> String { + if namespace.is_empty() { + "__golem_tool_" + } else { + "__golem_" + namespace + "_tool_" + } +} + +///| +fn descriptor_name(tool : ToolInfo, namespace : String) -> String { + descriptor_symbol_prefix(namespace) + "def_" + tool.source_name } ///| -fn raw_descriptor_name(tool : ToolInfo) -> String { - "__golem_tool_def_raw_" + tool.source_name +fn raw_descriptor_name(tool : ToolInfo, namespace : String) -> String { + descriptor_symbol_prefix(namespace) + "def_raw_" + tool.source_name } ///| -fn prepared_descriptor_name(tool : ToolInfo) -> String { - "__golem_tool_def_prepare_" + tool.source_name +fn prepared_descriptor_name(tool : ToolInfo, namespace : String) -> String { + descriptor_symbol_prefix(namespace) + "def_prepare_" + tool.source_name +} + +///| +fn descriptor_helper_name(namespace : String, suffix : String) -> String { + descriptor_symbol_prefix(namespace) + suffix } ///| @@ -1561,79 +1575,86 @@ fn emit_globals(args : Array[ProjectedToolArg]) -> String { } ///| -fn emit_descriptor_plumbing(buf : StringBuilder) -> Unit { - buf.write_string( - ( - #|///| - #|fn[T] __golem_tool_concat_array(left : Array[T], right : Array[T]) -> Array[T] { - #| let result = left.copy() - #| for value in right { - #| result.push(value) - #| } - #| result - #|} - #| - #|///| - #|fn __golem_tool_concat_globals( - #| left : @tool.GlobalsDef, - #| right : @tool.GlobalsDef, - #|) -> @tool.GlobalsDef { - #| { - #| options: __golem_tool_concat_array(left.options, right.options), - #| flags: __golem_tool_concat_array(left.flags, right.flags), - #| } - #|} - #| - #|///| - #|fn __golem_tool_rebase_node( - #| node : @tool.CommandNodeDef, - #| offset : Int, - #|) -> @tool.CommandNodeDef { - #| { - #| name: node.name, - #| aliases: node.aliases, - #| doc: node.doc, - #| globals: node.globals, - #| subcommands: node.subcommands.map(index => index + offset), - #| body: node.body, - #| } - #|} - #| - #|///| - #|fn __golem_tool_extract_prepared(def : @tool.ToolDef) -> @tool.ToolDef { - #| { - #| version: def.version, - #| commands: def.commands[1:].map(node => { - #| __golem_tool_rebase_node(node, -1) - #| }), - #| } - #|} - #| - #|///| - #|fn __golem_tool_append_prepared( - #| def : @tool.ToolDef, - #| child : @tool.ToolDef, - #|) -> @tool.ToolDef { - #| let offset = def.commands.length() - #| let commands = def.commands.copy() - #| let root = commands[0] - #| commands[0] = { - #| name: root.name, - #| aliases: root.aliases, - #| doc: root.doc, - #| globals: root.globals, - #| subcommands: __golem_tool_concat_array(root.subcommands, [offset]), - #| body: root.body, - #| } - #| for node in child.commands { - #| commands.push(__golem_tool_rebase_node(node, offset)) - #| } - #| { version: def.version, commands } - #|} - #| - #| - ), - ) +fn emit_descriptor_plumbing(buf : StringBuilder, namespace : String) -> Unit { + let source = + #|///| + #|fn[T] __golem_tool_concat_array(left : Array[T], right : Array[T]) -> Array[T] { + #| let result = left.copy() + #| for value in right { + #| result.push(value) + #| } + #| result + #|} + #| + #|///| + #|fn __golem_tool_concat_globals( + #| left : @tool.GlobalsDef, + #| right : @tool.GlobalsDef, + #|) -> @tool.GlobalsDef { + #| { + #| options: __golem_tool_concat_array(left.options, right.options), + #| flags: __golem_tool_concat_array(left.flags, right.flags), + #| } + #|} + #| + #|///| + #|fn __golem_tool_rebase_node( + #| node : @tool.CommandNodeDef, + #| offset : Int, + #|) -> @tool.CommandNodeDef { + #| { + #| name: node.name, + #| aliases: node.aliases, + #| doc: node.doc, + #| globals: node.globals, + #| subcommands: node.subcommands.map(index => index + offset), + #| body: node.body, + #| } + #|} + #| + #|///| + #|fn __golem_tool_extract_prepared(def : @tool.ToolDef) -> @tool.ToolDef { + #| { + #| version: def.version, + #| commands: def.commands[1:].map(node => { + #| __golem_tool_rebase_node(node, -1) + #| }), + #| } + #|} + #| + #|///| + #|fn __golem_tool_append_prepared( + #| def : @tool.ToolDef, + #| child : @tool.ToolDef, + #|) -> @tool.ToolDef { + #| let offset = def.commands.length() + #| let commands = def.commands.copy() + #| let root = commands[0] + #| commands[0] = { + #| name: root.name, + #| aliases: root.aliases, + #| doc: root.doc, + #| globals: root.globals, + #| subcommands: __golem_tool_concat_array(root.subcommands, [offset]), + #| body: root.body, + #| } + #| for node in child.commands { + #| commands.push(__golem_tool_rebase_node(node, offset)) + #| } + #| { version: def.version, commands } + #|} + #| + #| + if namespace.is_empty() { + buf.write_string(source) + } else { + buf.write_string( + source.replace_all( + old="__golem_tool_", + new=descriptor_symbol_prefix(namespace), + ), + ) + } } ///| @@ -1641,6 +1662,8 @@ fn emit_descriptor( buf : StringBuilder, tool : ToolInfo, tools : Array[ToolInfo], + namespace : String, + include_invoker : Bool, ) -> Unit raise ToolEmitError { let plans : Array[Array[ProjectedToolArg]] = [] for command in tool.commands { @@ -1648,7 +1671,7 @@ fn emit_descriptor( } buf.write_string( "///|\nfn " + - raw_descriptor_name(tool) + + raw_descriptor_name(tool, namespace) + "() -> @tool.ToolDef {\n try {\n let def : @tool.ToolDef = { version: \"" + escape_string_lit(tool.version.unwrap_or("0.0.0")) + "\", commands: [\n", @@ -1713,18 +1736,22 @@ fn emit_descriptor( let has_subtrees = tool.commands.any(command => command.subtree is Some(_)) buf.write_string( " ] }\n def\n } catch { error => abort(\"invalid generated raw tool definition: \" + repr(error)) }\n}\n\n///|\nfn " + - prepared_descriptor_name(tool) + + prepared_descriptor_name(tool, namespace) + "(strict_ancestors : @tool.GlobalsDef, parent_globals : @tool.GlobalsDef, override_name : String?, override_doc : @toolCommon.Doc?, override_aliases : Array[String]?) -> @tool.ToolDef {\n try {\n let carrier : @tool.ToolDef = { version: \"" + escape_string_lit(tool.version.unwrap_or("0.0.0")) + - "\", commands: [{ name: \"__golem_ancestry\", aliases: [], doc: { summary: \"\", description: \"\", examples: [] }, globals: strict_ancestors, subcommands: [], body: None }] }\n let prepared = __golem_tool_extract_prepared(carrier.graft_subtree(" + - raw_descriptor_name(tool) + + "\", commands: [{ name: \"__golem_ancestry\", aliases: [], doc: { summary: \"\", description: \"\", examples: [] }, globals: strict_ancestors, subcommands: [], body: None }] }\n let prepared = " + + descriptor_helper_name(namespace, "extract_prepared") + + "(carrier.graft_subtree(" + + raw_descriptor_name(tool, namespace) + "(), \"" + escape_string_lit(tool.name) + "\", parent_globals, override_name, override_doc, override_aliases))\n", ) if has_subtrees { buf.write_string( - " let descendant_ancestors = __golem_tool_concat_globals(strict_ancestors, prepared.commands[0].globals)\n", + " let descendant_ancestors = " + + descriptor_helper_name(namespace, "concat_globals") + + "(strict_ancestors, prepared.commands[0].globals)\n", ) } buf.write_string(" let def = prepared\n") @@ -1748,7 +1775,7 @@ fn emit_descriptor( } buf.write_string( " let child = " + - prepared_descriptor_name(child) + + prepared_descriptor_name(child, namespace) + "(descendant_ancestors, " + emit_globals(plans[i]) + ", " + @@ -1757,18 +1784,22 @@ fn emit_descriptor( override_doc + ", " + override_aliases + - ")\n let def = __golem_tool_append_prepared(def, child)\n", + ")\n let def = " + + descriptor_helper_name(namespace, "append_prepared") + + "(def, child)\n", ) } } buf.write_string( " def\n } catch { error => abort(\"invalid generated prepared tool definition: \" + repr(error)) }\n}\n\n///|\nfn " + - descriptor_name(tool) + + descriptor_name(tool, namespace) + "() -> @tool.ToolDef {\n try {\n " + - prepared_descriptor_name(tool) + + prepared_descriptor_name(tool, namespace) + "({ options: [], flags: [] }, { options: [], flags: [] }, None, None, None).normalize_inherited_globals()\n } catch { error => abort(\"invalid generated tool definition: \" + repr(error)) }\n}\n\n", ) - emit_invoker(buf, tool, tools, plans, leaves) + if include_invoker { + emit_invoker(buf, tool, tools, plans, leaves, namespace) + } } ///| @@ -1896,6 +1927,7 @@ fn emit_invoker( tools : Array[ToolInfo], plans : Array[Array[ProjectedToolArg]], leaves : Array[Int], + namespace : String, ) -> Unit raise ToolEmitError { let name = "__golem_tool_invoke_" + tool.source_name let context = "tool " + tool.name + " invocation" @@ -1903,7 +1935,7 @@ fn emit_invoker( "///|\nfn " + name + "(__golem_command_path : Array[String], __golem_input : @types.TypedSchemaValue, __golem_stdin : @asyncCore.Stream[Byte]?, __golem_principal : @tool.Principal) -> Result[@toolCommon.InvocationResult, @toolCommon.ToolError] {\n let __golem_def = " + - descriptor_name(tool) + + descriptor_name(tool, namespace) + "()\n let __golem_index = match __golem_def.command_index_by_path(__golem_command_path) {\n Some(__golem_index) => __golem_index\n None => return Err(@toolCommon.ToolError::InvalidCommandPath(__golem_command_path))\n }\n let __golem_decoded = @tool.decode_canonical_input(__golem_def, __golem_index, __golem_input, \"" + escape_string_lit(context) + "\") catch { __golem_error => return Err(__golem_error) }\n", @@ -2100,19 +2132,8 @@ fn subtree_tool_sources( pub fn generate_tool_registration( tools : Array[ToolInfo], ) -> @list.List[@syntax.Impl] raise ToolEmitError { - validate_subtree_cycles(tools) - validate_inherited_surfaces(tools) - for tool in tools { - validate_sibling_commands(tools, tool) - } let buf = StringBuilder::new() - emit_tool_error_schemas(buf, tools) - if tools.length() > 0 { - emit_descriptor_plumbing(buf) - } - for tool in tools { - emit_descriptor(buf, tool, tools) - } + emit_tool_descriptor_support(buf, tools, "", true, true) if tools.length() > 0 { let subtree_sources = subtree_tool_sources(tools) buf.write_string("///|\nfn init {\n try {\n") @@ -2123,7 +2144,7 @@ pub fn generate_tool_registration( } else { " @tool.register_tool_def_invoker(" }) + - descriptor_name(tool) + + descriptor_name(tool, "") + "(), __golem_tool_invoke_" + tool.source_name + ")\n", @@ -2136,6 +2157,30 @@ pub fn generate_tool_registration( parse_generated_impls(buf.to_string(), "tool registration") } +///| +fn emit_tool_descriptor_support( + buf : StringBuilder, + tools : Array[ToolInfo], + namespace : String, + include_invokers : Bool, + include_error_schemas : Bool, +) -> Unit raise ToolEmitError { + validate_subtree_cycles(tools) + validate_inherited_surfaces(tools) + for tool in tools { + validate_sibling_commands(tools, tool) + } + if include_error_schemas { + emit_tool_error_schemas(buf, tools) + } + if tools.length() > 0 { + emit_descriptor_plumbing(buf, namespace) + } + for tool in tools { + emit_descriptor(buf, tool, tools, namespace, include_invokers) + } +} + ///| fn client_args( own : Array[ProjectedToolArg], @@ -2310,7 +2355,7 @@ fn emit_tool_client_method( ) buf.write_string( " let __golem_def = " + - descriptor_name(root) + + descriptor_name(root, "") + "()\n let __golem_index = match __golem_def.command_index_by_path(" + emit_strings(path) + ") {\n Some(__golem_index) => __golem_index\n None => return Err(@tool.tool_protocol_error(\"generated command path is missing from descriptor\"))\n }\n let __golem_model = __golem_def.canonical_input_model(__golem_index) catch { __golem_error => return Err(@tool.tool_protocol_error(repr(__golem_error))) }\n let __golem_values = " + diff --git a/sdks/moonbit/golem_sdk_tools/test-data/tool_middleware_authoring/README.md b/sdks/moonbit/golem_sdk_tools/test-data/tool_middleware_authoring/README.md new file mode 100644 index 0000000000..30f30a198a --- /dev/null +++ b/sdks/moonbit/golem_sdk_tools/test-data/tool_middleware_authoring/README.md @@ -0,0 +1,10 @@ +# Tool-middleware authoring contract fixtures + +These files freeze the GOL-34 annotation names, metadata/defaults, placement, role scenarios, exact +handler signatures, and behavioral intent. They are non-generated parser inputs. The corresponding +compile fixture is `golem_sdk/tool-middleware-authoring-test`; it exercises the locked public SDK +types and every monomorphic result projection. + +The fixtures intentionally cover transparent, adapter, short-circuit, retry, universal, and +combined component forms. Presented and expected monomorphic tool declarations are in the same +source package. Cross-package tool-shape references are outside the initial GOL-34 contract. diff --git a/sdks/moonbit/golem_sdk_tools/test-data/tool_middleware_authoring/adapter.mbt b/sdks/moonbit/golem_sdk_tools/test-data/tool_middleware_authoring/adapter.mbt new file mode 100644 index 0000000000..25e9fac7a8 --- /dev/null +++ b/sdks/moonbit/golem_sdk_tools/test-data/tool_middleware_authoring/adapter.mbt @@ -0,0 +1,26 @@ +/// Public file operations presented by the middleware. +#derive.tool("public-files") +struct PublicFiles {} + +pub fn PublicFiles::read(path : String) -> String { + path +} + +/// Storage operations expected from the next inner layer. +#derive.tool("storage") +struct Storage {} + +pub fn Storage::fetch(key : String) -> String { + key +} + +/// Adapts the public file surface to the storage surface. +#derive.tool_middleware("file-adapter", presented="PublicFiles", expected="Storage") +struct FileAdapter {} + +pub async fn FileAdapter::read( + underlying : StorageUnderlying, + path : String, +) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + underlying.fetch("files/" + path) +} diff --git a/sdks/moonbit/golem_sdk_tools/test-data/tool_middleware_authoring/combined.mbt b/sdks/moonbit/golem_sdk_tools/test-data/tool_middleware_authoring/combined.mbt new file mode 100644 index 0000000000..c85230edc5 --- /dev/null +++ b/sdks/moonbit/golem_sdk_tools/test-data/tool_middleware_authoring/combined.mbt @@ -0,0 +1,31 @@ +/// An agent exported by a combined component. +#derive.agent +struct CombinedAgent {} + +fn CombinedAgent::new() -> CombinedAgent { + {} +} + +pub fn CombinedAgent::status(self : Self) -> String { + ignore(self) + "ready" +} + +/// An ordinary tool exported by the same component. +#derive.tool("echo") +struct EchoTool {} + +pub fn EchoTool::echo(value : String) -> String { + value +} + +/// Middleware exported together with the agent and ordinary tool. +#derive.tool_middleware("echo-policy", presented="EchoTool") +struct EchoPolicy {} + +pub async fn EchoPolicy::echo( + underlying : EchoToolUnderlying, + value : String, +) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + underlying.echo(value) +} diff --git a/sdks/moonbit/golem_sdk_tools/test-data/tool_middleware_authoring/retry.mbt b/sdks/moonbit/golem_sdk_tools/test-data/tool_middleware_authoring/retry.mbt new file mode 100644 index 0000000000..4f53916c19 --- /dev/null +++ b/sdks/moonbit/golem_sdk_tools/test-data/tool_middleware_authoring/retry.mbt @@ -0,0 +1,21 @@ +/// An operation that can be retried by middleware. +#derive.tool("unstable") +struct UnstableTool {} + +pub fn UnstableTool::execute(value : String) -> String { + value +} + +/// Retries the next inner layer once after a failure. +#derive.tool_middleware("retry-once", presented="UnstableTool") +struct RetryOnce {} + +pub async fn RetryOnce::execute( + underlying : UnstableToolUnderlying, + value : String, +) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + match underlying.execute(value) { + Ok(result) => Ok(result) + Err(_) => underlying.execute(value) + } +} diff --git a/sdks/moonbit/golem_sdk_tools/test-data/tool_middleware_authoring/short_circuit.mbt b/sdks/moonbit/golem_sdk_tools/test-data/tool_middleware_authoring/short_circuit.mbt new file mode 100644 index 0000000000..be0a80f1da --- /dev/null +++ b/sdks/moonbit/golem_sdk_tools/test-data/tool_middleware_authoring/short_circuit.mbt @@ -0,0 +1,19 @@ +/// A protected operation. +#derive.tool("protected") +struct ProtectedTool {} + +pub fn ProtectedTool::execute(value : String) -> String { + value +} + +/// Rejects an invocation without calling the still-declared expected tool. +#derive.tool_middleware("deny-policy", presented="ProtectedTool") +struct DenyPolicy {} + +pub async fn DenyPolicy::execute( + underlying : ProtectedToolUnderlying, + value : String, +) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + ignore(underlying) + Err(@toolMiddleware.ToolInvokeError::ConstraintViolation("denied: " + value)) +} diff --git a/sdks/moonbit/golem_sdk_tools/test-data/tool_middleware_authoring/transparent.mbt b/sdks/moonbit/golem_sdk_tools/test-data/tool_middleware_authoring/transparent.mbt new file mode 100644 index 0000000000..de3b60b32c --- /dev/null +++ b/sdks/moonbit/golem_sdk_tools/test-data/tool_middleware_authoring/transparent.mbt @@ -0,0 +1,18 @@ +/// A file tool shape used by transparent middleware. +#derive.tool("file") +struct FileTool {} + +pub fn FileTool::read(path : String) -> String { + path +} + +/// Restricts paths while preserving the file tool shape. +#derive.tool_middleware("path-policy", presented="FileTool", alias="safe-files", alias="restricted-files") +struct PathPolicy {} + +pub async fn PathPolicy::read( + underlying : FileToolUnderlying, + path : String, +) -> Result[String, @toolMiddleware.ToolInvokeError[@tool.NoToolError]] { + underlying.read(path) +} diff --git a/sdks/moonbit/golem_sdk_tools/test-data/tool_middleware_authoring/universal.mbt b/sdks/moonbit/golem_sdk_tools/test-data/tool_middleware_authoring/universal.mbt new file mode 100644 index 0000000000..d7c3c90b95 --- /dev/null +++ b/sdks/moonbit/golem_sdk_tools/test-data/tool_middleware_authoring/universal.mbt @@ -0,0 +1,18 @@ +/// Audits any runtime-bound tool without rebuilding its metadata or schema carriers. +#derive.universal_tool_middleware("audit", alias="trace-tools") +pub async fn audit( + invocation : @toolMiddleware.RawToolInvocation, + underlying : @toolMiddleware.UnderlyingTool, +) -> Result[ + @toolMiddleware.RawInvocationResult, + @toolMiddleware.ToolInvokeError[@toolMiddleware.RawTypedSchemaValue], +] { + ignore(invocation.tool_name()) + ignore(invocation.tool_metadata()) + ignore(invocation.principal()) + underlying.invoke_raw( + invocation.command_path(), + invocation.input(), + invocation.stdin(), + ) +} diff --git a/sdks/moonbit/release.sh b/sdks/moonbit/release.sh index 349e47464a..7844036f08 100755 --- a/sdks/moonbit/release.sh +++ b/sdks/moonbit/release.sh @@ -1,4 +1,4 @@ #!/bin/sh # Thin wrapper — the actual logic is in scripts/release/main.mbt # Run: ./release.sh 0.1.0 or ./release.sh --dev -cd "$(dirname "$0")/scripts" && exec moon run release -- "$@" +cd "$(dirname "$0")/scripts" && exec env MOON_WORK=off moon run release -- "$@" diff --git a/sdks/moonbit/scripts/release/main.mbt b/sdks/moonbit/scripts/release/main.mbt index 92e3a20d24..feaa54aef8 100644 --- a/sdks/moonbit/scripts/release/main.mbt +++ b/sdks/moonbit/scripts/release/main.mbt @@ -2,42 +2,71 @@ let example_dir = "../golem_sdk_example1" ///| -let mod_json_path = "\{example_dir}/moon.mod.json" +let mod_path = "\{example_dir}/moon.mod" ///| let golem_yaml_path = "\{example_dir}/golem.yaml" ///| -let sdk_mooncakes_path = ".mooncakes/golemcloud/golem_sdk" +let sdk_mooncakes_path = "{{ appRootDir }}/.mooncakes/golemcloud/golem_sdk" ///| -let tools_mooncakes_path = ".mooncakes/golemcloud/golem_sdk_tools" +let tools_mooncakes_path = "{{ appRootDir }}/.mooncakes/golemcloud/golem_sdk_tools" ///| -let dev_tools_path = "../golem_sdk_tools" +let dev_tools_path = "{{ appRootDir }}/../golem_sdk_tools" ///| -let dev_sdk_path = "../golem_sdk" +let dev_sdk_path = "{{ appRootDir }}/../golem_sdk" + +///| +let dev_debug_build_path = "{{ appRootDir }}/../_build/wasm/debug/build/golemcloud/golem_sdk_example1/" + +///| +let release_debug_build_path = "{{ appRootDir }}/_build/wasm/debug/build/" + +///| +let dev_release_build_path = "{{ appRootDir }}/../_build/wasm/release/build/golemcloud/golem_sdk_example1/" + +///| +let release_release_build_path = "{{ appRootDir }}/_build/wasm/release/build/" ///| let dev_sdk_version = "0.5.1" +///| +priv suberror ReleaseTransformError { + ReleaseTransformError(String) +} derive(Debug) + +///| +fn release_fail(message : String) -> Unit raise ReleaseTransformError { + raise ReleaseTransformError(message) +} + ///| fn main { let args = @env.args() if args.length() < 2 { print_usage() + @sys.exit(1) return } if args[1] == "--dev" { revert_to_dev() catch { - e => println("Error: \{e}") + e => { + println("Error: \{e}") + @sys.exit(1) + } } } else { let sdk_version = args[1] let tools_version = if args.length() >= 3 { args[2] } else { sdk_version } prepare_release(sdk_version, tools_version) catch { - e => println("Error: \{e}") + e => { + println("Error: \{e}") + @sys.exit(1) + } } } } @@ -45,69 +74,55 @@ fn main { ///| fn print_usage() -> Unit { let usage = - #|Usage: moon run -C scripts release -- [tools-version] - #| moon run -C scripts release -- --dev + #|Usage: moon -C scripts run release -- [tools-version] + #| moon -C scripts run release -- --dev #| #|Examples: - #| moon run -C scripts release -- 0.1.0 (same version for SDK and tools) - #| moon run -C scripts release -- 0.1.0 0.2.0 (different versions) - #| moon run -C scripts release -- --dev (revert to development mode) + #| moon -C scripts run release -- 0.1.0 (same version for SDK and tools) + #| moon -C scripts run release -- 0.1.0 0.2.0 (different versions) + #| moon -C scripts run release -- --dev (revert to development mode) println(usage) } ///| fn prepare_release(sdk_version : String, tools_version : String) -> Unit raise { + validate_version("SDK", sdk_version) + validate_version("tools", tools_version) println( "==> Preparing template release with golem_sdk \{sdk_version}, golem_sdk_tools \{tools_version}...", ) - // 1. moon.mod.json — compute new content - let mod_json = @fs.read_file_to_string(mod_json_path) - let mut m = replace_sdk_dep( - mod_json, - "\"golemcloud/golem_sdk\": \"\{sdk_version}\"", - ) + // Compute every transformation before writing either file. + let mod_ = @fs.read_file_to_string(mod_path) + let mut m = replace_sdk_dep(mod_, sdk_version) m = remove_bin_deps(m) - m = insert_bin_deps(m, "\"golemcloud/golem_sdk_tools\": \"\{tools_version}\"") - // 2. golem.yaml — swap dev paths to mooncakes paths + m = insert_bin_deps(m, tools_version) let yaml = @fs.read_file_to_string(golem_yaml_path) - let mut y = yaml.replace_all( - old="-C \{dev_tools_path}", - new="-C \{tools_mooncakes_path}", - ) - y = y.replace_all(old=" \{dev_sdk_path} ", new=" \{sdk_mooncakes_path} ") - // Write all files only after all transforms succeed - @fs.write_string_to_file(mod_json_path, m) + let y = transform_yaml_paths(yaml, true) + @fs.write_string_to_file(mod_path, m) @fs.write_string_to_file(golem_yaml_path, y) println("") println("Done. Files modified:") println( - " \{mod_json_path} — golem_sdk dep: \{sdk_version}, golem_sdk_tools bin-dep: \{tools_version}", + " \{mod_path} — golem_sdk dep: \{sdk_version}, golem_sdk_tools bin-dep: \{tools_version}", ) println( - " \{golem_yaml_path} — build commands use mooncakes-installed tools", + " \{golem_yaml_path} — build commands use mooncakes-installed dependencies and standalone build paths", ) println("") println("Review the changes, then copy \{example_dir}/ as your template.") - println("To revert: moon run -C scripts release -- --dev") + println("To revert: moon -C scripts run release -- --dev") } ///| fn revert_to_dev() -> Unit raise { println("==> Reverting to development mode...") - let workspace_dep = "\"golemcloud/golem_sdk\": \"\{dev_sdk_version}\"" - // 1. moon.mod.json — compute new content - let mod_json = @fs.read_file_to_string(mod_json_path) - let mut m = replace_sdk_dep(mod_json, workspace_dep) + // Compute every transformation before writing either file. + let mod_ = @fs.read_file_to_string(mod_path) + let mut m = replace_sdk_dep(mod_, dev_sdk_version) m = remove_bin_deps(m) - // 2. golem.yaml — swap mooncakes paths back to dev paths let yaml = @fs.read_file_to_string(golem_yaml_path) - let mut y = yaml.replace_all( - old="-C \{tools_mooncakes_path}", - new="-C \{dev_tools_path}", - ) - y = y.replace_all(old=" \{sdk_mooncakes_path} ", new=" \{dev_sdk_path} ") - // Write all files only after all transforms succeed - @fs.write_string_to_file(mod_json_path, m) + let y = transform_yaml_paths(yaml, false) + @fs.write_string_to_file(mod_path, m) @fs.write_string_to_file(golem_yaml_path, y) println("Done. Now in development mode (local workspace dependency).") } @@ -116,133 +131,220 @@ fn revert_to_dev() -> Unit raise { ///| fn split_lines(s : String) -> Array[String] { - s.split("\n").collect().map(fn(v) { v.to_string() }) + s.split("\n").collect().map(fn(v) { v.to_owned() }) +} + +///| +fn validate_version( + label : String, + version : String, +) -> Unit raise ReleaseTransformError { + if version == "" || version.contains("\"") || version.contains("\n") { + release_fail("Invalid \{label} version: \{version}") + } +} + +///| +fn count_occurrences(s : String, marker : String) -> Int { + s.split(marker).collect().length() - 1 } ///| -/// Replaces the `"golemcloud/golem_sdk": ...` entry in a JSON deps block. -/// Handles both single-line (`"key": "version"`) and multi-line (`"key": { ... }`) entries. -/// Preserves trailing commas from the original entry. -fn replace_sdk_dep(s : String, replacement : String) -> String { - let marker = "\"golemcloud/golem_sdk\":" +/// Replaces the active MoonBit module's single SDK import while preserving its indentation. +fn replace_sdk_dep( + s : String, + version : String, +) -> String raise ReleaseTransformError { + let marker = "\"golemcloud/golem_sdk@" let lines = split_lines(s) let result : Array[String] = [] - let mut i = 0 - while i < lines.length() { - let line = lines[i] + let mut replaced = 0 + for line in lines { if line.contains(marker) { - let trimmed = line.trim_start().to_string() + replaced += 1 + let trimmed = line.trim_start().to_owned() + if !trimmed.has_prefix(marker) || + !(trimmed.has_suffix("\"") || trimmed.has_suffix("\",")) { + release_fail("Unsupported golem_sdk import syntax in \{mod_path}") + } let indent_len = line.length() - trimmed.length() let indent = String::make(indent_len, ' ') - // Determine if the original entry had a trailing comma - let mut has_comma = false - if line.contains("{") && not(line.contains("}")) { - // Multi-line object: skip to closing brace, check for comma there - i += 1 - while i < lines.length() { - let l = lines[i] - let lt = l.trim_start().to_string() - if lt.has_prefix("}") { - has_comma = lt.has_prefix("},") - break - } - i += 1 - } - } else { - // Single-line entry: check if line ends with comma - has_comma = line.trim_end().to_string().has_suffix(",") + let comma = if trimmed.has_suffix(",") { "," } else { "" } + let suffix = "\"" + comma + let existing_version = trimmed[marker.length():trimmed.length() - + suffix.length()].to_owned() + validate_version("existing SDK", existing_version) + if trimmed != marker + existing_version + suffix { + release_fail("Unsupported golem_sdk import syntax in \{mod_path}") } - let comma = if has_comma { "," } else { "" } - result.push("\{indent}\{replacement}\{comma}") + result.push("\{indent}\"golemcloud/golem_sdk@\{version}\"\{comma}") } else { result.push(line) } - i += 1 + } + if replaced != 1 { + release_fail( + "Expected exactly one golem_sdk import in \{mod_path}, found \{replaced}", + ) } result.join("\n") } ///| -/// Removes the `"bin-deps": { ... }` block from JSON. -/// Handles comma cleanup: removes a trailing comma from the previous line -/// if the removed block was the last property. -fn remove_bin_deps(s : String) -> String { +/// Removes the standalone template's generated tool binary dependency block. +fn remove_bin_deps(s : String) -> String raise ReleaseTransformError { let marker = "\"bin-deps\"" - if not(s.contains(marker)) { + if !s.contains(marker) { return s } let lines = split_lines(s) - let result : Array[String] = [] - let mut i = 0 - while i < lines.length() { - let line = lines[i] + let mut marker_idx = -1 + for i, line in lines { if line.contains(marker) { - // Skip the entire bin-deps block (including closing brace) - if line.contains("{") && not(line.contains("}")) { - i += 1 - while i < lines.length() { - if lines[i].trim_start().to_string().has_prefix("}") { - break - } - i += 1 - } - // i now points at the closing brace line; skip it too + if marker_idx >= 0 { + release_fail("Found multiple bin-deps entries in \{mod_path}") } - // Fix trailing comma on the previous kept line - if result.length() > 0 { - let prev = result[result.length() - 1] - let trimmed = prev.trim_end().to_string() - if trimmed.has_suffix(",") { - let indent_part = try! prev[:prev.length() - trimmed.length()] - let without_comma = try! trimmed[:trimmed.length() - 1] - result[result.length() - 1] = indent_part.to_string() + - without_comma.to_string() - } - } - } else { + marker_idx = i + } + } + if marker_idx <= 0 || marker_idx + 1 >= lines.length() { + release_fail("Unsupported bin-deps block in \{mod_path}") + } + let options_idx = marker_idx - 1 + let closing_idx = marker_idx + 1 + let entry = lines[marker_idx].trim().to_owned() + let entry_prefix = "\"bin-deps\": { \"golemcloud/golem_sdk_tools\": \"" + let entry_suffix = "\" }," + if lines[options_idx].trim().to_owned() != "options(" || + lines[closing_idx].trim().to_owned() != ")" || + !entry.has_prefix(entry_prefix) || + !entry.has_suffix(entry_suffix) { + release_fail("Unsupported bin-deps block in \{mod_path}") + } + let existing_version = entry[entry_prefix.length():entry.length() - + entry_suffix.length()].to_owned() + validate_version("existing tools", existing_version) + if entry != entry_prefix + existing_version + entry_suffix { + release_fail("Unsupported bin-deps block in \{mod_path}") + } + let start_idx = if options_idx > 0 && lines[options_idx - 1] == "" { + options_idx - 1 + } else { + options_idx + } + let result : Array[String] = [] + for i, line in lines { + if i < start_idx || i > closing_idx { result.push(line) } - i += 1 } result.join("\n") } ///| -/// Inserts a `"bin-deps": { ... }` block before the final closing brace in JSON. -/// Idempotent: returns unchanged if `"bin-deps"` already exists. -fn insert_bin_deps(s : String, entry : String) -> String { +/// Adds the binary dependency consumed by `moon run cmd` in a standalone template. +fn insert_bin_deps( + s : String, + tools_version : String, +) -> String raise ReleaseTransformError { if s.contains("\"bin-deps\"") { - return s + release_fail( + "Refusing to overwrite an unmanaged bin-deps block in \{mod_path}", + ) } - let lines = split_lines(s) - let result : Array[String] = [] - // Find the last non-empty line that is the top-level closing brace - let mut closing_idx = -1 - for i = lines.length() - 1; i >= 0; i = i - 1 { - if lines[i].trim().to_string() == "}" { - closing_idx = i - break - } + if s.contains("options(") { + release_fail( + "Refusing to merge bin-deps into an unmanaged options block in \{mod_path}", + ) } - if closing_idx < 0 { - return s + if !s.has_suffix("\n") { + release_fail("Expected \{mod_path} to end with a newline") } - for i, line in lines { - if i == closing_idx { - // Add comma to previous line if needed - if result.length() > 0 { - let prev = result[result.length() - 1] - let trimmed = prev.trim_end().to_string() - if not(trimmed.has_suffix(",")) && not(trimmed.has_suffix("{")) { - let indent_part = try! prev[:prev.length() - trimmed.length()] - result[result.length() - 1] = indent_part.to_string() + trimmed + "," - } - } - result.push(" \"bin-deps\": {") - result.push(" \{entry}") - result.push(" }") - } - result.push(line) + s + + "\noptions(\n \"bin-deps\": { \"golemcloud/golem_sdk_tools\": \"\{tools_version}\" },\n)\n" +} + +///| +fn switch_path( + s : String, + from : String, + to : String, + expected : Int, + label : String, +) -> String raise ReleaseTransformError { + let from_count = count_occurrences(s, from) + let to_count = count_occurrences(s, to) + if from_count == expected && to_count == 0 { + s.replace_all(old=from, new=to) + } else if from_count == 0 && to_count == expected { + s + } else { + release_fail( + "Unexpected \{label} paths in \{golem_yaml_path}: found \{from_count} source and \{to_count} target occurrences; expected \{expected} of exactly one form", + ) + abort("") } - result.join("\n") +} + +///| +fn transform_yaml_paths( + yaml : String, + release : Bool, +) -> String raise ReleaseTransformError { + let from_tools = if release { dev_tools_path } else { tools_mooncakes_path } + let to_tools = if release { tools_mooncakes_path } else { dev_tools_path } + let from_sdk_arg = if release { + dev_sdk_path + "\"" + } else { + sdk_mooncakes_path + "\"" + } + let to_sdk_arg = if release { + sdk_mooncakes_path + "\"" + } else { + dev_sdk_path + "\"" + } + let from_sdk_wit = if release { + dev_sdk_path + "/wit" + } else { + sdk_mooncakes_path + "/wit" + } + let to_sdk_wit = if release { + sdk_mooncakes_path + "/wit" + } else { + dev_sdk_path + "/wit" + } + let from_debug_build = if release { + dev_debug_build_path + } else { + release_debug_build_path + } + let to_debug_build = if release { + release_debug_build_path + } else { + dev_debug_build_path + } + let from_release_build = if release { + dev_release_build_path + } else { + release_release_build_path + } + let to_release_build = if release { + release_release_build_path + } else { + dev_release_build_path + } + let mut result = switch_path( + yaml, from_tools, to_tools, 12, "golem_sdk_tools", + ) + result = switch_path( + result, from_sdk_arg, to_sdk_arg, 4, "golem_sdk argument", + ) + result = switch_path(result, from_sdk_wit, to_sdk_wit, 4, "golem_sdk WIT") + result = switch_path( + result, from_debug_build, to_debug_build, 2, "debug MoonBit build", + ) + result = switch_path( + result, from_release_build, to_release_build, 2, "release MoonBit build", + ) + result } diff --git a/sdks/moonbit/scripts/release/main_wbtest.mbt b/sdks/moonbit/scripts/release/main_wbtest.mbt new file mode 100644 index 0000000000..d37ec35fcc --- /dev/null +++ b/sdks/moonbit/scripts/release/main_wbtest.mbt @@ -0,0 +1,38 @@ +///| +fn transform_error(f : () -> Unit raise ReleaseTransformError) -> String { + try f() catch { + ReleaseTransformError(message) => message + } noraise { + _ => "NO ERROR" + } +} + +///| +test "SDK dependency replacement rejects another import on the managed line" { + let module = + #|name = "example" + #| + #|import { + #| "golemcloud/golem_sdk@0.5.1", "example/other@1.0.0", + #|} + #| + inspect( + transform_error(() => ignore(replace_sdk_dep(module, "0.6.0"))), + content="Invalid existing SDK version: 0.5.1\", \"example/other@1.0.0", + ) +} + +///| +test "binary dependency removal rejects another entry in the managed object" { + let module = + #|name = "example" + #| + #|options( + #| "bin-deps": { "golemcloud/golem_sdk_tools": "0.5.1", "example/other": "1.0.0" }, + #|) + #| + inspect( + transform_error(() => ignore(remove_bin_deps(module))), + content="Invalid existing tools version: 0.5.1\", \"example/other\": \"1.0.0", + ) +} diff --git a/sdks/moonbit/scripts/release/moon.pkg b/sdks/moonbit/scripts/release/moon.pkg index 24ba1d2a40..f1bbb579bb 100644 --- a/sdks/moonbit/scripts/release/moon.pkg +++ b/sdks/moonbit/scripts/release/moon.pkg @@ -1,6 +1,7 @@ import { "moonbitlang/core/env", "moonbitlang/x/fs", + "moonbitlang/x/sys", } options( From b5db2c57b6640969f6db76d25a9d393609e2a4bc Mon Sep 17 00:00:00 2001 From: Daniel Vigovszky Date: Thu, 27 Aug 2026 16:06:08 +0200 Subject: [PATCH 2/3] Fix --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 8757a5bf70..ec052b2b01 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -635,7 +635,7 @@ jobs: run: find . -name moon.pkg -exec dirname {} \; | xargs moon check --target wasm working-directory: sdks/moonbit/golem_sdk - name: Test SDK - run: find . -name moon.pkg -exec dirname {} \; | xargs moon test --target wasm + run: ./scripts/run-sdk-tests.sh working-directory: sdks/moonbit/golem_sdk - name: Check tools run: moon check cmd lib From 4f7df0280b02ea54f50f1c5658a6ff66c49bab08 Mon Sep 17 00:00:00 2001 From: Daniel Vigovszky Date: Thu, 27 Aug 2026 16:48:17 +0200 Subject: [PATCH 3/3] Fix --- sdks/moonbit/golem_sdk/scripts/run-sdk-tests.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/sdks/moonbit/golem_sdk/scripts/run-sdk-tests.sh b/sdks/moonbit/golem_sdk/scripts/run-sdk-tests.sh index b91ced1ac6..0b49e7eab0 100755 --- a/sdks/moonbit/golem_sdk/scripts/run-sdk-tests.sh +++ b/sdks/moonbit/golem_sdk/scripts/run-sdk-tests.sh @@ -25,8 +25,16 @@ if [[ ${GOLEM_MOONRUN_DISPATCH:-} == 1 ]]; then exec "$GOLEM_REAL_MOONRUN" "$@" fi +test_paths=("$@") +if (( ${#test_paths[@]} == 0 )); then + cd "$script_dir/.." + while IFS= read -r -d '' manifest; do + test_paths+=("${manifest%/moon.pkg}") + done < <(find . -name moon.pkg -print0) +fi + real_moonrun=$(command -v moonrun) GOLEM_MOONRUN_DISPATCH=1 \ GOLEM_REAL_MOONRUN=$real_moonrun \ MOONRUN_OVERRIDE=$script_dir/run-sdk-tests.sh \ - moon test --target wasm "$@" + moon test --target wasm "${test_paths[@]}"