From 137b59a8fa50832270342f95bb6bf71b85ad114b Mon Sep 17 00:00:00 2001 From: Orual Date: Tue, 23 Jun 2026 07:53:15 -0400 Subject: [PATCH] PM-47: XRPC passthrough proxy to user's PDS --- ...45676240587f84cc22dca030a8e3961c732fd.json | 12 + ...e4321be2a59731b9de100c7c782a503c3c6af.json | 12 + ...8a06ef33235dfa679efaf7ed3c94e9632b967.json | 12 + ...125f266f200c647e68e3e4cbac25643fe8f7d.json | 12 + ...8e61132239f583584df62f041b50a55108c91.json | 38 + ...0c8a9dbf4419c135ff135fe24aaa5ba28b8a9.json | 21 + ...7d1d6ba5bacbb454f9a62d3cbfb6090a62fd9.json | 12 + AGENTS.md | 10 + Cargo.lock | 59 +- Cargo.toml | 1 - migrations/005_pending_ops.sql | 30 + public/renderer_worker.js | 1247 ++++++++++++++++ public/renderer_worker_bg.wasm | Bin 0 -> 1392262 bytes public/vendor/opencascade/README.txt | 4 + public/vendor/opencascade/opencascade.js | 16 + src/appview/mod.rs | 34 +- src/appview/proxy.rs | 423 ++++++ src/appview/tests.rs | 302 ++++ src/indexing/projection.rs | 95 ++ tools/renderer-step/build/opencascade.d.ts | 1294 +++++++++++++++++ tools/renderer-step/build/opencascade.js | 16 + tools/renderer-step/build/opencascade.yml | 41 + 22 files changed, 3659 insertions(+), 32 deletions(-) create mode 100644 .sqlx/query-02498e156eeb04d7baeb54201c045676240587f84cc22dca030a8e3961c732fd.json create mode 100644 .sqlx/query-188eee0cbdddad562fb3d472ee3e4321be2a59731b9de100c7c782a503c3c6af.json create mode 100644 .sqlx/query-42713d3244e11c6bc4e4d56fd008a06ef33235dfa679efaf7ed3c94e9632b967.json create mode 100644 .sqlx/query-4fe4341674a5b0311870b8ec107125f266f200c647e68e3e4cbac25643fe8f7d.json create mode 100644 .sqlx/query-696d490bc4f5984d2b100b7f5478e61132239f583584df62f041b50a55108c91.json create mode 100644 .sqlx/query-8285896bc29295b64c17c7022f50c8a9dbf4419c135ff135fe24aaa5ba28b8a9.json create mode 100644 .sqlx/query-e5d4187863bf415384f2919ba807d1d6ba5bacbb454f9a62d3cbfb6090a62fd9.json create mode 100644 migrations/005_pending_ops.sql create mode 100644 public/renderer_worker.js create mode 100644 public/renderer_worker_bg.wasm create mode 100644 public/vendor/opencascade/README.txt create mode 100644 public/vendor/opencascade/opencascade.js create mode 100644 src/appview/proxy.rs create mode 100644 tools/renderer-step/build/opencascade.d.ts create mode 100644 tools/renderer-step/build/opencascade.js create mode 100644 tools/renderer-step/build/opencascade.yml diff --git a/.sqlx/query-02498e156eeb04d7baeb54201c045676240587f84cc22dca030a8e3961c732fd.json b/.sqlx/query-02498e156eeb04d7baeb54201c045676240587f84cc22dca030a8e3961c732fd.json new file mode 100644 index 0000000..9256344 --- /dev/null +++ b/.sqlx/query-02498e156eeb04d7baeb54201c045676240587f84cc22dca030a8e3961c732fd.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "DELETE FROM pending_writes WHERE uri = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 1 + }, + "nullable": [] + }, + "hash": "02498e156eeb04d7baeb54201c045676240587f84cc22dca030a8e3961c732fd" +} diff --git a/.sqlx/query-188eee0cbdddad562fb3d472ee3e4321be2a59731b9de100c7c782a503c3c6af.json b/.sqlx/query-188eee0cbdddad562fb3d472ee3e4321be2a59731b9de100c7c782a503c3c6af.json new file mode 100644 index 0000000..c413a6a --- /dev/null +++ b/.sqlx/query-188eee0cbdddad562fb3d472ee3e4321be2a59731b9de100c7c782a503c3c6af.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "INSERT INTO pending_deletes (uri, deleted_at) VALUES (?, ?) ON CONFLICT(uri) DO UPDATE SET deleted_at = excluded.deleted_at", + "describe": { + "columns": [], + "parameters": { + "Right": 2 + }, + "nullable": [] + }, + "hash": "188eee0cbdddad562fb3d472ee3e4321be2a59731b9de100c7c782a503c3c6af" +} diff --git a/.sqlx/query-42713d3244e11c6bc4e4d56fd008a06ef33235dfa679efaf7ed3c94e9632b967.json b/.sqlx/query-42713d3244e11c6bc4e4d56fd008a06ef33235dfa679efaf7ed3c94e9632b967.json new file mode 100644 index 0000000..604aaee --- /dev/null +++ b/.sqlx/query-42713d3244e11c6bc4e4d56fd008a06ef33235dfa679efaf7ed3c94e9632b967.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "DELETE FROM pending_writes WHERE uri = ? AND cid = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 2 + }, + "nullable": [] + }, + "hash": "42713d3244e11c6bc4e4d56fd008a06ef33235dfa679efaf7ed3c94e9632b967" +} diff --git a/.sqlx/query-4fe4341674a5b0311870b8ec107125f266f200c647e68e3e4cbac25643fe8f7d.json b/.sqlx/query-4fe4341674a5b0311870b8ec107125f266f200c647e68e3e4cbac25643fe8f7d.json new file mode 100644 index 0000000..6b446e6 --- /dev/null +++ b/.sqlx/query-4fe4341674a5b0311870b8ec107125f266f200c647e68e3e4cbac25643fe8f7d.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "DELETE FROM pending_deletes WHERE uri = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 1 + }, + "nullable": [] + }, + "hash": "4fe4341674a5b0311870b8ec107125f266f200c647e68e3e4cbac25643fe8f7d" +} diff --git a/.sqlx/query-696d490bc4f5984d2b100b7f5478e61132239f583584df62f041b50a55108c91.json b/.sqlx/query-696d490bc4f5984d2b100b7f5478e61132239f583584df62f041b50a55108c91.json new file mode 100644 index 0000000..197f674 --- /dev/null +++ b/.sqlx/query-696d490bc4f5984d2b100b7f5478e61132239f583584df62f041b50a55108c91.json @@ -0,0 +1,38 @@ +{ + "db_name": "SQLite", + "query": "SELECT cid, value FROM pending_writes WHERE uri = ?", + "describe": { + "columns": [ + { + "name": "cid", + "ordinal": 0, + "type_info": "Text", + "origin": { + "Table": { + "table": "pending_writes", + "name": "cid" + } + } + }, + { + "name": "value", + "ordinal": 1, + "type_info": "Text", + "origin": { + "Table": { + "table": "pending_writes", + "name": "value" + } + } + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false, + false + ] + }, + "hash": "696d490bc4f5984d2b100b7f5478e61132239f583584df62f041b50a55108c91" +} diff --git a/.sqlx/query-8285896bc29295b64c17c7022f50c8a9dbf4419c135ff135fe24aaa5ba28b8a9.json b/.sqlx/query-8285896bc29295b64c17c7022f50c8a9dbf4419c135ff135fe24aaa5ba28b8a9.json new file mode 100644 index 0000000..26ac1ef --- /dev/null +++ b/.sqlx/query-8285896bc29295b64c17c7022f50c8a9dbf4419c135ff135fe24aaa5ba28b8a9.json @@ -0,0 +1,21 @@ +{ + "db_name": "SQLite", + "query": "SELECT 1 AS hit FROM pending_deletes WHERE uri = ?", + "describe": { + "columns": [ + { + "name": "hit", + "ordinal": 0, + "type_info": "Integer", + "origin": "Expression" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false + ] + }, + "hash": "8285896bc29295b64c17c7022f50c8a9dbf4419c135ff135fe24aaa5ba28b8a9" +} diff --git a/.sqlx/query-e5d4187863bf415384f2919ba807d1d6ba5bacbb454f9a62d3cbfb6090a62fd9.json b/.sqlx/query-e5d4187863bf415384f2919ba807d1d6ba5bacbb454f9a62d3cbfb6090a62fd9.json new file mode 100644 index 0000000..d640310 --- /dev/null +++ b/.sqlx/query-e5d4187863bf415384f2919ba807d1d6ba5bacbb454f9a62d3cbfb6090a62fd9.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "INSERT INTO pending_writes (uri, cid, value, written_at) VALUES (?, ?, ?, ?) ON CONFLICT(uri) DO UPDATE SET cid = excluded.cid, value = excluded.value, written_at = excluded.written_at", + "describe": { + "columns": [], + "parameters": { + "Right": 4 + }, + "nullable": [] + }, + "hash": "e5d4187863bf415384f2919ba807d1d6ba5bacbb454f9a62d3cbfb6090a62fd9" +} diff --git a/AGENTS.md b/AGENTS.md index 29382af..137091d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -82,6 +82,16 @@ Before review or handoff, run at least `just fix` and the narrowest relevant tes - Jacquard deps are declared once in root `[workspace.dependencies]` and referenced via `workspace = true` in both the app and the generated crate, giving a single jacquard version across the workspace. - ATProto has no float type: dimension fields (e.g. `bbox` x/y/z) are decimal strings parsed to floats in app code. Images use the `#image` (blobref) / `#imageView` (CDN URL) split in `space.polymodel.library.defs`. Polymodel `*View` lexicon types are appview/UI contracts: shape them around fields the UI needs, including required hydrated identity/author/count/viewer fields, instead of treating views as lossy transport objects and adding app-local adapter workarounds. Preserve typed ATProto values (`Handle`, `AtUri`, `Datetime`, URI types, etc.) once constructed; do not `.as_str()`/stringify and re-parse them through convenience constructors just to move them between fixtures, helpers, or components. Borrow typed values only at display/serialization boundaries. Keep record-authored fields on records unless a view/feed UI intentionally needs them directly; external or aggregated hydrated metadata such as display tags belongs on view types. +## Local projection: reads & writes + +The server keeps the browser single-origin: `space.polymodel.*` reads are served from the local SQLite projection, and a fixed allowlist of other XRPC methods is proxied to the user's PDS / public AppView (PM-47; design history in [PM-9 §4.5, Confluence 131467](https://radiant-industries.atlassian.net/wiki/spaces/PM/pages/131467)). + +- **Writes to our own records are eagerly projected.** Every write the app performs to `space.polymodel.*` (PM-28 mediated writes *and* proxied `repo.createRecord`/`putRecord`/`deleteRecord`) is persisted to the local SQLite projection immediately after the user's PDS accepts it, for read-your-own-writes. Hydrant/firehose later re-delivers the same event; the shared projection rules keep that convergence idempotent. +- **Reads hit the PDS/AppView but reflect pending local ops.** `repo.getRecord` of a `space.polymodel.*` record consults the `pending_writes`/`pending_deletes` tables while a local op awaits firehose confirmation (the request repo is canonicalized to a DID, so this holds for handle-authority reads): a `pending_writes` row not yet reflected by the PDS — a divergent cid, or the PDS reporting not-found — returns the local value/cid; a `pending_deletes` row returns `RecordNotFound` (HTTP 400) even if a lagging source still serves the record. The matching row is cleared once the Hydrant `#commit` re-delivers the event. +- **Only `space.polymodel.*` is indexed.** Other records are proxied without local persistence. +- **Upstream errors are forwarded faithfully.** The passthrough surface forwards the real upstream HTTP status + error body verbatim (`RecordNotFound` stays HTTP 400, `InvalidSwap` stays 409, 429/5xx unchanged); only genuine transport/internal failures become 500. +- **The proxy allowlist is structural.** Non-`space.polymodel.*` methods are served only for the direct repo record operations (`createRecord`, `putRecord`, `deleteRecord`, `getRecord`, `listRecords`, `describeRepo`, `uploadBlob`) plus `identity.resolveHandle` and `actor.getProfile`, dispatched over their generated typed request structs through the OAuth session agent's signing send path. Batch/admin repo methods (`applyWrites`, `importRepo`, `listMissingBlobs`) and every other NSID have no route and 404. + ## Agent behavior - Investigate code and docs before asking factual questions. diff --git a/Cargo.lock b/Cargo.lock index 3bbb2b4..e1576dd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4168,16 +4168,16 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jacquard" -version = "0.12.0" +version = "0.12.1" dependencies = [ "bytes", "getrandom 0.2.17", "gloo-storage", "http", - "jacquard-api 0.12.0", - "jacquard-common 0.12.0", - "jacquard-derive 0.12.0", - "jacquard-identity 0.12.0", + "jacquard-api 0.12.1", + "jacquard-common 0.12.1", + "jacquard-derive 0.12.1", + "jacquard-identity 0.12.1", "jacquard-oauth", "jose-jwk", "miette", @@ -4210,11 +4210,11 @@ dependencies = [ [[package]] name = "jacquard-api" -version = "0.12.0" +version = "0.12.1" dependencies = [ - "jacquard-common 0.12.0", - "jacquard-derive 0.12.0", - "jacquard-lexicon 0.12.0", + "jacquard-common 0.12.1", + "jacquard-derive 0.12.1", + "jacquard-lexicon 0.12.1", "miette", "serde", "thiserror 2.0.18", @@ -4222,7 +4222,7 @@ dependencies = [ [[package]] name = "jacquard-axum" -version = "0.12.0" +version = "0.12.1" dependencies = [ "axum", "axum-extra", @@ -4230,9 +4230,9 @@ dependencies = [ "bytes", "chrono", "jacquard", - "jacquard-common 0.12.0", - "jacquard-derive 0.12.0", - "jacquard-identity 0.12.0", + "jacquard-common 0.12.1", + "jacquard-derive 0.12.1", + "jacquard-identity 0.12.1", "miette", "mini-moka-wasm", "multibase", @@ -4302,7 +4302,7 @@ dependencies = [ [[package]] name = "jacquard-common" -version = "0.12.0" +version = "0.12.1" dependencies = [ "base64", "bon", @@ -4365,10 +4365,10 @@ dependencies = [ [[package]] name = "jacquard-derive" -version = "0.12.0" +version = "0.12.1" dependencies = [ "heck 0.5.0", - "jacquard-lexicon 0.12.0", + "jacquard-lexicon 0.12.1", "proc-macro2", "quote", "syn 2.0.118", @@ -4400,13 +4400,13 @@ dependencies = [ [[package]] name = "jacquard-identity" -version = "0.12.0" +version = "0.12.1" dependencies = [ "bon", "bytes", "http", - "jacquard-common 0.12.0", - "jacquard-lexicon 0.12.0", + "jacquard-common 0.12.1", + "jacquard-lexicon 0.12.1", "miette", "mini-moka-wasm", "n0-future", @@ -4449,13 +4449,13 @@ dependencies = [ [[package]] name = "jacquard-lexicon" -version = "0.12.0" +version = "0.12.1" dependencies = [ "cid", "dashmap", "heck 0.5.0", "inventory", - "jacquard-common 0.12.0", + "jacquard-common 0.12.1", "miette", "multihash", "prettyplease", @@ -4475,7 +4475,7 @@ dependencies = [ [[package]] name = "jacquard-oauth" -version = "0.12.0" +version = "0.12.1" dependencies = [ "base64", "bytes", @@ -4484,12 +4484,13 @@ dependencies = [ "ed25519-dalek", "elliptic-curve", "http", - "jacquard-common 0.12.0", - "jacquard-identity 0.12.0", + "jacquard-common 0.12.1", + "jacquard-identity 0.12.1", "jose-jwa", "jose-jwk", "k256", "miette", + "mini-moka-wasm", "p256", "p384", "rand 0.8.6", @@ -6202,8 +6203,8 @@ dependencies = [ "hydrant", "jacquard", "jacquard-axum", - "jacquard-common 0.12.0", - "jacquard-derive 0.12.0", + "jacquard-common 0.12.1", + "jacquard-derive 0.12.1", "js-sys", "keyring", "libsqlite3-sys", @@ -6234,9 +6235,9 @@ dependencies = [ name = "polymodel-api" version = "0.1.0" dependencies = [ - "jacquard-common 0.12.0", - "jacquard-derive 0.12.0", - "jacquard-lexicon 0.12.0", + "jacquard-common 0.12.1", + "jacquard-derive 0.12.1", + "jacquard-lexicon 0.12.1", "miette", "serde", "thiserror 2.0.18", diff --git a/Cargo.toml b/Cargo.toml index d31d2cd..017d5a4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -150,7 +150,6 @@ tracing-subscriber = { version = "0.3", default-features = false, features = [ "env-filter", ] } - [build-dependencies] dotenvy = "0.15" serde_json = "1.0" diff --git a/migrations/005_pending_ops.sql b/migrations/005_pending_ops.sql new file mode 100644 index 0000000..f98980c --- /dev/null +++ b/migrations/005_pending_ops.sql @@ -0,0 +1,30 @@ +-- Read-your-writes pending-ops tracking (PM-47). +-- +-- Eager local writes/deletes — both PM-28 mediated writes and the PM-47 +-- passthrough proxy — mark a record "pending" until the Hydrant firehose +-- re-delivers the same event, at which point the PDS/AppView is authoritative +-- again. `repo.getRecord` of a `space.polymodel.*` record consults these tables +-- to reflect a not-yet-confirmed local op: +-- * a pending write whose cid differs from the PDS returns the local value; +-- * a pending delete returns RecordNotFound even if a lagging source still +-- serves the record. +-- +-- These tables are collection-agnostic (keyed by record URI); they do not touch +-- the per-collection projection tables. The matching row is cleared by the +-- firehose record-event projection path once the Hydrant `#commit` redelivers +-- the event. + +CREATE TABLE pending_writes ( + -- Canonical record URI: at://{did}/{collection}/{rkey}. + uri TEXT PRIMARY KEY, + cid TEXT NOT NULL, + -- The raw record JSON, so repo.getRecord can rebuild `value` without a + -- collection-specific lookup. + value TEXT NOT NULL, + written_at INTEGER NOT NULL +); + +CREATE TABLE pending_deletes ( + uri TEXT PRIMARY KEY, + deleted_at INTEGER NOT NULL +); diff --git a/public/renderer_worker.js b/public/renderer_worker.js new file mode 100644 index 0000000..34d8558 --- /dev/null +++ b/public/renderer_worker.js @@ -0,0 +1,1247 @@ +function __wbg_get_imports() { + const import0 = { + __proto__: null, + __wbg___wbindgen_boolean_get_2304fb8c853028c8: function(arg0) { + const v = getObject(arg0); + const ret = typeof(v) === 'boolean' ? v : undefined; + return isLikeNone(ret) ? 0xFFFFFF : ret ? 1 : 0; + }, + __wbg___wbindgen_debug_string_edece8177ad01481: function(arg0, arg1) { + const ret = debugString(getObject(arg1)); + const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2); + const len1 = WASM_VECTOR_LEN; + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); + }, + __wbg___wbindgen_is_falsy_402d3af0d5f09bc6: function(arg0) { + const ret = !getObject(arg0); + return ret; + }, + __wbg___wbindgen_is_function_5cd60d5cf78b4eef: function(arg0) { + const ret = typeof(getObject(arg0)) === 'function'; + return ret; + }, + __wbg___wbindgen_is_object_b4593df85baada48: function(arg0) { + const val = getObject(arg0); + const ret = typeof(val) === 'object' && val !== null; + return ret; + }, + __wbg___wbindgen_is_undefined_35bb9f4c7fd651d5: function(arg0) { + const ret = getObject(arg0) === undefined; + return ret; + }, + __wbg___wbindgen_number_get_f73a1244370fcc2c: function(arg0, arg1) { + const obj = getObject(arg1); + const ret = typeof(obj) === 'number' ? obj : undefined; + getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true); + }, + __wbg___wbindgen_string_get_d109740c0d18f4d7: function(arg0, arg1) { + const obj = getObject(arg1); + const ret = typeof(obj) === 'string' ? obj : undefined; + var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2); + var len1 = WASM_VECTOR_LEN; + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); + }, + __wbg___wbindgen_throw_9c31b086c2b26051: function(arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); + }, + __wbg__wbg_cb_unref_3fa391f3fcdb55f8: function(arg0) { + getObject(arg0)._wbg_cb_unref(); + }, + __wbg_activeTexture_37cff0753870753b: function(arg0, arg1) { + getObject(arg0).activeTexture(arg1 >>> 0); + }, + __wbg_activeTexture_4d2afad7cfda1396: function(arg0, arg1) { + getObject(arg0).activeTexture(arg1 >>> 0); + }, + __wbg_arrayBuffer_0ad0e21451bc9ea0: function(arg0) { + const ret = getObject(arg0).arrayBuffer(); + return addHeapObject(ret); + }, + __wbg_arrayBuffer_cb5d4748b5f3cad5: function() { return handleError(function (arg0) { + const ret = getObject(arg0).arrayBuffer(); + return addHeapObject(ret); + }, arguments); }, + __wbg_attachShader_0a37c762590e5e1c: function(arg0, arg1, arg2) { + getObject(arg0).attachShader(getObject(arg1), getObject(arg2)); + }, + __wbg_attachShader_515800f4051247dc: function(arg0, arg1, arg2) { + getObject(arg0).attachShader(getObject(arg1), getObject(arg2)); + }, + __wbg_bindBuffer_1a31fd3809dc22c8: function(arg0, arg1, arg2) { + getObject(arg0).bindBuffer(arg1 >>> 0, getObject(arg2)); + }, + __wbg_bindBuffer_4bf3ab31e8e200ed: function(arg0, arg1, arg2) { + getObject(arg0).bindBuffer(arg1 >>> 0, getObject(arg2)); + }, + __wbg_bindFramebuffer_751e5064f23ee1c4: function(arg0, arg1, arg2) { + getObject(arg0).bindFramebuffer(arg1 >>> 0, getObject(arg2)); + }, + __wbg_bindFramebuffer_92449a44405b6557: function(arg0, arg1, arg2) { + getObject(arg0).bindFramebuffer(arg1 >>> 0, getObject(arg2)); + }, + __wbg_bindTexture_7fd7f85d6f942f6f: function(arg0, arg1, arg2) { + getObject(arg0).bindTexture(arg1 >>> 0, getObject(arg2)); + }, + __wbg_bindTexture_85abbde679bce760: function(arg0, arg1, arg2) { + getObject(arg0).bindTexture(arg1 >>> 0, getObject(arg2)); + }, + __wbg_bindVertexArrayOES_fb7e8c5e8e106919: function(arg0, arg1) { + getObject(arg0).bindVertexArrayOES(getObject(arg1)); + }, + __wbg_bindVertexArray_f8587a616356d307: function(arg0, arg1) { + getObject(arg0).bindVertexArray(getObject(arg1)); + }, + __wbg_blendEquationSeparate_946c10181ab6c6cf: function(arg0, arg1, arg2) { + getObject(arg0).blendEquationSeparate(arg1 >>> 0, arg2 >>> 0); + }, + __wbg_blendEquationSeparate_985f782fb54b29fe: function(arg0, arg1, arg2) { + getObject(arg0).blendEquationSeparate(arg1 >>> 0, arg2 >>> 0); + }, + __wbg_blendFuncSeparate_6f525092629a20ae: function(arg0, arg1, arg2, arg3, arg4) { + getObject(arg0).blendFuncSeparate(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, arg4 >>> 0); + }, + __wbg_blendFuncSeparate_ea29c928bc1c4984: function(arg0, arg1, arg2, arg3, arg4) { + getObject(arg0).blendFuncSeparate(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, arg4 >>> 0); + }, + __wbg_bufferData_74a0b79b4c9d8f96: function(arg0, arg1, arg2, arg3) { + getObject(arg0).bufferData(arg1 >>> 0, getObject(arg2), arg3 >>> 0); + }, + __wbg_bufferData_886f34df840b0814: function(arg0, arg1, arg2, arg3) { + getObject(arg0).bufferData(arg1 >>> 0, getObject(arg2), arg3 >>> 0); + }, + __wbg_call_dfde26266607c996: function() { return handleError(function (arg0, arg1, arg2) { + const ret = getObject(arg0).call(getObject(arg1), getObject(arg2)); + return addHeapObject(ret); + }, arguments); }, + __wbg_cancelAnimationFrame_d69ea65c3ba644d7: function() { return handleError(function (arg0, arg1) { + getObject(arg0).cancelAnimationFrame(arg1); + }, arguments); }, + __wbg_clearColor_9b1cc35ab608d422: function(arg0, arg1, arg2, arg3, arg4) { + getObject(arg0).clearColor(arg1, arg2, arg3, arg4); + }, + __wbg_clearColor_eefa804fcd21ef56: function(arg0, arg1, arg2, arg3, arg4) { + getObject(arg0).clearColor(arg1, arg2, arg3, arg4); + }, + __wbg_clearDepth_1eae37358a24b9db: function(arg0, arg1) { + getObject(arg0).clearDepth(arg1); + }, + __wbg_clearDepth_f42ada4795e5a943: function(arg0, arg1) { + getObject(arg0).clearDepth(arg1); + }, + __wbg_clear_252bb7b11d5bea06: function(arg0, arg1) { + getObject(arg0).clear(arg1 >>> 0); + }, + __wbg_clear_7d0a8d124c2a4b66: function(arg0, arg1) { + getObject(arg0).clear(arg1 >>> 0); + }, + __wbg_close_d293331974ac3c1c: function(arg0) { + getObject(arg0).close(); + }, + __wbg_colorMask_0f86a23bfc7696a7: function(arg0, arg1, arg2, arg3, arg4) { + getObject(arg0).colorMask(arg1 !== 0, arg2 !== 0, arg3 !== 0, arg4 !== 0); + }, + __wbg_colorMask_2d4b38c34bf55a02: function(arg0, arg1, arg2, arg3, arg4) { + getObject(arg0).colorMask(arg1 !== 0, arg2 !== 0, arg3 !== 0, arg4 !== 0); + }, + __wbg_compileShader_a20e7b68d3edcd8a: function(arg0, arg1) { + getObject(arg0).compileShader(getObject(arg1)); + }, + __wbg_compileShader_b77bd79d00a03b02: function(arg0, arg1) { + getObject(arg0).compileShader(getObject(arg1)); + }, + __wbg_createBuffer_1c3448547584bc5a: function(arg0) { + const ret = getObject(arg0).createBuffer(); + return isLikeNone(ret) ? 0 : addHeapObject(ret); + }, + __wbg_createBuffer_77da03de0620a199: function(arg0) { + const ret = getObject(arg0).createBuffer(); + return isLikeNone(ret) ? 0 : addHeapObject(ret); + }, + __wbg_createProgram_a175fc4c32429a24: function(arg0) { + const ret = getObject(arg0).createProgram(); + return isLikeNone(ret) ? 0 : addHeapObject(ret); + }, + __wbg_createProgram_c9d6396ea0bc7522: function(arg0) { + const ret = getObject(arg0).createProgram(); + return isLikeNone(ret) ? 0 : addHeapObject(ret); + }, + __wbg_createShader_25e11081fd48d141: function(arg0, arg1) { + const ret = getObject(arg0).createShader(arg1 >>> 0); + return isLikeNone(ret) ? 0 : addHeapObject(ret); + }, + __wbg_createShader_9c5e52918428bd27: function(arg0, arg1) { + const ret = getObject(arg0).createShader(arg1 >>> 0); + return isLikeNone(ret) ? 0 : addHeapObject(ret); + }, + __wbg_createTexture_5e721dc1ddd865e3: function(arg0) { + const ret = getObject(arg0).createTexture(); + return isLikeNone(ret) ? 0 : addHeapObject(ret); + }, + __wbg_createTexture_f1cc0c64fa9e22cf: function(arg0) { + const ret = getObject(arg0).createTexture(); + return isLikeNone(ret) ? 0 : addHeapObject(ret); + }, + __wbg_createVertexArrayOES_03fccccc43c10f77: function(arg0) { + const ret = getObject(arg0).createVertexArrayOES(); + return isLikeNone(ret) ? 0 : addHeapObject(ret); + }, + __wbg_createVertexArray_050d27763dfd72fa: function(arg0) { + const ret = getObject(arg0).createVertexArray(); + return isLikeNone(ret) ? 0 : addHeapObject(ret); + }, + __wbg_cullFace_632c5f88d252b4d7: function(arg0, arg1) { + getObject(arg0).cullFace(arg1 >>> 0); + }, + __wbg_cullFace_962911677f1c30c6: function(arg0, arg1) { + getObject(arg0).cullFace(arg1 >>> 0); + }, + __wbg_data_5fc79a19e47d1531: function(arg0) { + const ret = getObject(arg0).data; + return addHeapObject(ret); + }, + __wbg_deleteBuffer_5c5c23d034945b7c: function(arg0, arg1) { + getObject(arg0).deleteBuffer(getObject(arg1)); + }, + __wbg_deleteBuffer_dd1d6f71883058cb: function(arg0, arg1) { + getObject(arg0).deleteBuffer(getObject(arg1)); + }, + __wbg_deleteFramebuffer_4d8be9eb882b0525: function(arg0, arg1) { + getObject(arg0).deleteFramebuffer(getObject(arg1)); + }, + __wbg_deleteFramebuffer_712016837ba2592e: function(arg0, arg1) { + getObject(arg0).deleteFramebuffer(getObject(arg1)); + }, + __wbg_deleteProgram_35e4ff7b82f1c4d5: function(arg0, arg1) { + getObject(arg0).deleteProgram(getObject(arg1)); + }, + __wbg_deleteProgram_771559436a63e7c1: function(arg0, arg1) { + getObject(arg0).deleteProgram(getObject(arg1)); + }, + __wbg_deleteShader_5f66fd162cd9b6b4: function(arg0, arg1) { + getObject(arg0).deleteShader(getObject(arg1)); + }, + __wbg_deleteShader_718c5020e3d4f188: function(arg0, arg1) { + getObject(arg0).deleteShader(getObject(arg1)); + }, + __wbg_deleteTexture_3472fc261bb7ff34: function(arg0, arg1) { + getObject(arg0).deleteTexture(getObject(arg1)); + }, + __wbg_deleteTexture_6990124dfb5053bd: function(arg0, arg1) { + getObject(arg0).deleteTexture(getObject(arg1)); + }, + __wbg_depthFunc_11c361d188403f52: function(arg0, arg1) { + getObject(arg0).depthFunc(arg1 >>> 0); + }, + __wbg_depthFunc_cd5ad66da02ddb7c: function(arg0, arg1) { + getObject(arg0).depthFunc(arg1 >>> 0); + }, + __wbg_depthMask_a00e4725581ef05d: function(arg0, arg1) { + getObject(arg0).depthMask(arg1 !== 0); + }, + __wbg_depthMask_e15ec83686756c88: function(arg0, arg1) { + getObject(arg0).depthMask(arg1 !== 0); + }, + __wbg_detachShader_0cf2576dd1e49a5f: function(arg0, arg1, arg2) { + getObject(arg0).detachShader(getObject(arg1), getObject(arg2)); + }, + __wbg_detachShader_15a6f9ca34bfe46c: function(arg0, arg1, arg2) { + getObject(arg0).detachShader(getObject(arg1), getObject(arg2)); + }, + __wbg_disableVertexAttribArray_18b9a9fe235412a1: function(arg0, arg1) { + getObject(arg0).disableVertexAttribArray(arg1 >>> 0); + }, + __wbg_disableVertexAttribArray_40a8f7d4d882728e: function(arg0, arg1) { + getObject(arg0).disableVertexAttribArray(arg1 >>> 0); + }, + __wbg_disable_79f65722e686303b: function(arg0, arg1) { + getObject(arg0).disable(arg1 >>> 0); + }, + __wbg_disable_df908054ffee7971: function(arg0, arg1) { + getObject(arg0).disable(arg1 >>> 0); + }, + __wbg_drawArrays_7f9a3dcec5315ce5: function(arg0, arg1, arg2, arg3) { + getObject(arg0).drawArrays(arg1 >>> 0, arg2, arg3); + }, + __wbg_drawArrays_bceea06128f9d778: function(arg0, arg1, arg2, arg3) { + getObject(arg0).drawArrays(arg1 >>> 0, arg2, arg3); + }, + __wbg_drawBuffersWEBGL_5fbba2b83de4c122: function(arg0, arg1) { + getObject(arg0).drawBuffersWEBGL(getObject(arg1)); + }, + __wbg_drawBuffers_217bd25bf75ccebd: function(arg0, arg1) { + getObject(arg0).drawBuffers(getObject(arg1)); + }, + __wbg_drawElements_69e901574ef317ef: function(arg0, arg1, arg2, arg3, arg4) { + getObject(arg0).drawElements(arg1 >>> 0, arg2, arg3 >>> 0, arg4); + }, + __wbg_drawElements_9ae0feb8483a946c: function(arg0, arg1, arg2, arg3, arg4) { + getObject(arg0).drawElements(arg1 >>> 0, arg2, arg3 >>> 0, arg4); + }, + __wbg_enableVertexAttribArray_9963bb377f60317c: function(arg0, arg1) { + getObject(arg0).enableVertexAttribArray(arg1 >>> 0); + }, + __wbg_enableVertexAttribArray_9e6e81b8b603d999: function(arg0, arg1) { + getObject(arg0).enableVertexAttribArray(arg1 >>> 0); + }, + __wbg_enable_5c8f846164bc8138: function(arg0, arg1) { + getObject(arg0).enable(arg1 >>> 0); + }, + __wbg_enable_ee1b63abdc3fdeb5: function(arg0, arg1) { + getObject(arg0).enable(arg1 >>> 0); + }, + __wbg_error_a6fa202b58aa1cd3: function(arg0, arg1) { + let deferred0_0; + let deferred0_1; + try { + deferred0_0 = arg0; + deferred0_1 = arg1; + console.error(getStringFromWasm0(arg0, arg1)); + } finally { + wasm.__wbindgen_export4(deferred0_0, deferred0_1, 1); + } + }, + __wbg_framebufferRenderbuffer_49b9288b6a7b5629: function(arg0, arg1, arg2, arg3, arg4) { + getObject(arg0).framebufferRenderbuffer(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, getObject(arg4)); + }, + __wbg_framebufferRenderbuffer_9417c925d5389962: function(arg0, arg1, arg2, arg3, arg4) { + getObject(arg0).framebufferRenderbuffer(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, getObject(arg4)); + }, + __wbg_framebufferTexture2D_8882fef6f47df627: function(arg0, arg1, arg2, arg3, arg4, arg5) { + getObject(arg0).framebufferTexture2D(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, getObject(arg4), arg5); + }, + __wbg_framebufferTexture2D_91e307404924ae24: function(arg0, arg1, arg2, arg3, arg4, arg5) { + getObject(arg0).framebufferTexture2D(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, getObject(arg4), arg5); + }, + __wbg_framebufferTextureLayer_8256c57e84c45762: function(arg0, arg1, arg2, arg3, arg4, arg5) { + getObject(arg0).framebufferTextureLayer(arg1 >>> 0, arg2 >>> 0, getObject(arg3), arg4, arg5); + }, + __wbg_generateMipmap_606b9590a2f77744: function(arg0, arg1) { + getObject(arg0).generateMipmap(arg1 >>> 0); + }, + __wbg_generateMipmap_b60cd426be3aaf8c: function(arg0, arg1) { + getObject(arg0).generateMipmap(arg1 >>> 0); + }, + __wbg_getActiveAttrib_69b71611f161f7df: function(arg0, arg1, arg2) { + const ret = getObject(arg0).getActiveAttrib(getObject(arg1), arg2 >>> 0); + return isLikeNone(ret) ? 0 : addHeapObject(ret); + }, + __wbg_getActiveAttrib_ba237aa22cccf114: function(arg0, arg1, arg2) { + const ret = getObject(arg0).getActiveAttrib(getObject(arg1), arg2 >>> 0); + return isLikeNone(ret) ? 0 : addHeapObject(ret); + }, + __wbg_getActiveUniform_42e28f659f4f0f29: function(arg0, arg1, arg2) { + const ret = getObject(arg0).getActiveUniform(getObject(arg1), arg2 >>> 0); + return isLikeNone(ret) ? 0 : addHeapObject(ret); + }, + __wbg_getActiveUniform_ece79c87f500baa5: function(arg0, arg1, arg2) { + const ret = getObject(arg0).getActiveUniform(getObject(arg1), arg2 >>> 0); + return isLikeNone(ret) ? 0 : addHeapObject(ret); + }, + __wbg_getAttribLocation_7386be18a8dae70f: function(arg0, arg1, arg2, arg3) { + const ret = getObject(arg0).getAttribLocation(getObject(arg1), getStringFromWasm0(arg2, arg3)); + return ret; + }, + __wbg_getAttribLocation_e19fd7c174e55500: function(arg0, arg1, arg2, arg3) { + const ret = getObject(arg0).getAttribLocation(getObject(arg1), getStringFromWasm0(arg2, arg3)); + return ret; + }, + __wbg_getContext_50a6668bd78d1120: function() { return handleError(function (arg0, arg1, arg2, arg3) { + const ret = getObject(arg0).getContext(getStringFromWasm0(arg1, arg2), getObject(arg3)); + return isLikeNone(ret) ? 0 : addHeapObject(ret); + }, arguments); }, + __wbg_getExtension_c76ccfc25e343ce6: function() { return handleError(function (arg0, arg1, arg2) { + const ret = getObject(arg0).getExtension(getStringFromWasm0(arg1, arg2)); + return isLikeNone(ret) ? 0 : addHeapObject(ret); + }, arguments); }, + __wbg_getParameter_5f25c05c9a0f445a: function() { return handleError(function (arg0, arg1) { + const ret = getObject(arg0).getParameter(arg1 >>> 0); + return addHeapObject(ret); + }, arguments); }, + __wbg_getParameter_827c3142b1ce3364: function() { return handleError(function (arg0, arg1) { + const ret = getObject(arg0).getParameter(arg1 >>> 0); + return addHeapObject(ret); + }, arguments); }, + __wbg_getProgramInfoLog_6d6e22f0179f1acf: function(arg0, arg1, arg2) { + const ret = getObject(arg1).getProgramInfoLog(getObject(arg2)); + var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2); + var len1 = WASM_VECTOR_LEN; + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); + }, + __wbg_getProgramInfoLog_e2fe4bdd00a597bc: function(arg0, arg1, arg2) { + const ret = getObject(arg1).getProgramInfoLog(getObject(arg2)); + var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2); + var len1 = WASM_VECTOR_LEN; + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); + }, + __wbg_getProgramParameter_6927dedbc507dfc7: function(arg0, arg1, arg2) { + const ret = getObject(arg0).getProgramParameter(getObject(arg1), arg2 >>> 0); + return addHeapObject(ret); + }, + __wbg_getProgramParameter_c7abe52a31622ce2: function(arg0, arg1, arg2) { + const ret = getObject(arg0).getProgramParameter(getObject(arg1), arg2 >>> 0); + return addHeapObject(ret); + }, + __wbg_getShaderInfoLog_246aba1bd0b04ad2: function(arg0, arg1, arg2) { + const ret = getObject(arg1).getShaderInfoLog(getObject(arg2)); + var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2); + var len1 = WASM_VECTOR_LEN; + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); + }, + __wbg_getShaderInfoLog_edfc45fd76ba8c81: function(arg0, arg1, arg2) { + const ret = getObject(arg1).getShaderInfoLog(getObject(arg2)); + var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2); + var len1 = WASM_VECTOR_LEN; + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); + }, + __wbg_getSupportedExtensions_76f42c1e788da832: function(arg0) { + const ret = getObject(arg0).getSupportedExtensions(); + return isLikeNone(ret) ? 0 : addHeapObject(ret); + }, + __wbg_getUniformLocation_1717b4ed42e2ccee: function(arg0, arg1, arg2, arg3) { + const ret = getObject(arg0).getUniformLocation(getObject(arg1), getStringFromWasm0(arg2, arg3)); + return isLikeNone(ret) ? 0 : addHeapObject(ret); + }, + __wbg_getUniformLocation_46373021b59d8832: function(arg0, arg1, arg2, arg3) { + const ret = getObject(arg0).getUniformLocation(getObject(arg1), getStringFromWasm0(arg2, arg3)); + return isLikeNone(ret) ? 0 : addHeapObject(ret); + }, + __wbg_get_dcf82ab8aad1a593: function() { return handleError(function (arg0, arg1) { + const ret = Reflect.get(getObject(arg0), getObject(arg1)); + return addHeapObject(ret); + }, arguments); }, + __wbg_get_unchecked_1dfe6d05ad91d9b7: function(arg0, arg1) { + const ret = getObject(arg0)[arg1 >>> 0]; + return addHeapObject(ret); + }, + __wbg_instanceof_Blob_ef93d187bbde5360: function(arg0) { + let result; + try { + result = getObject(arg0) instanceof Blob; + } catch (_) { + result = false; + } + const ret = result; + return ret; + }, + __wbg_instanceof_OffscreenCanvas_55f621c0555607ff: function(arg0) { + let result; + try { + result = getObject(arg0) instanceof OffscreenCanvas; + } catch (_) { + result = false; + } + const ret = result; + return ret; + }, + __wbg_instanceof_Promise_09012cfa9708520a: function(arg0) { + let result; + try { + result = getObject(arg0) instanceof Promise; + } catch (_) { + result = false; + } + const ret = result; + return ret; + }, + __wbg_instanceof_Response_ecfc823e8fb354e2: function(arg0) { + let result; + try { + result = getObject(arg0) instanceof Response; + } catch (_) { + result = false; + } + const ret = result; + return ret; + }, + __wbg_instanceof_Uint8Array_abd07d4bd221d50b: function(arg0) { + let result; + try { + result = getObject(arg0) instanceof Uint8Array; + } catch (_) { + result = false; + } + const ret = result; + return ret; + }, + __wbg_instanceof_WebGl2RenderingContext_419098f7bf88e87e: function(arg0) { + let result; + try { + result = getObject(arg0) instanceof WebGL2RenderingContext; + } catch (_) { + result = false; + } + const ret = result; + return ret; + }, + __wbg_length_2591a0f4f659a55c: function(arg0) { + const ret = getObject(arg0).length; + return ret; + }, + __wbg_length_56fcd3e2b7e0299d: function(arg0) { + const ret = getObject(arg0).length; + return ret; + }, + __wbg_linkProgram_7689cb555b14a359: function(arg0, arg1) { + getObject(arg0).linkProgram(getObject(arg1)); + }, + __wbg_linkProgram_ec865896be2835c2: function(arg0, arg1) { + getObject(arg0).linkProgram(getObject(arg1)); + }, + __wbg_log_0c201ade58bb55e1: function(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) { + let deferred0_0; + let deferred0_1; + try { + deferred0_0 = arg0; + deferred0_1 = arg1; + console.log(getStringFromWasm0(arg0, arg1), getStringFromWasm0(arg2, arg3), getStringFromWasm0(arg4, arg5), getStringFromWasm0(arg6, arg7)); + } finally { + wasm.__wbindgen_export4(deferred0_0, deferred0_1, 1); + } + }, + __wbg_log_ce2c4456b290c5e7: function(arg0, arg1) { + let deferred0_0; + let deferred0_1; + try { + deferred0_0 = arg0; + deferred0_1 = arg1; + console.log(getStringFromWasm0(arg0, arg1)); + } finally { + wasm.__wbindgen_export4(deferred0_0, deferred0_1, 1); + } + }, + __wbg_mark_b4d943f3bc2d2404: function(arg0, arg1) { + performance.mark(getStringFromWasm0(arg0, arg1)); + }, + __wbg_measure_84362959e621a2c1: function() { return handleError(function (arg0, arg1, arg2, arg3) { + let deferred0_0; + let deferred0_1; + let deferred1_0; + let deferred1_1; + try { + deferred0_0 = arg0; + deferred0_1 = arg1; + deferred1_0 = arg2; + deferred1_1 = arg3; + performance.measure(getStringFromWasm0(arg0, arg1), getStringFromWasm0(arg2, arg3)); + } finally { + wasm.__wbindgen_export4(deferred0_0, deferred0_1, 1); + wasm.__wbindgen_export4(deferred1_0, deferred1_1, 1); + } + }, arguments); }, + __wbg_name_9e6af29fb7841d41: function(arg0, arg1) { + const ret = getObject(arg1).name; + const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2); + const len1 = WASM_VECTOR_LEN; + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); + }, + __wbg_new_02d162bc6cf02f60: function() { + const ret = new Object(); + return addHeapObject(ret); + }, + __wbg_new_227d7c05414eb861: function() { + const ret = new Error(); + return addHeapObject(ret); + }, + __wbg_new_310879b66b6e95e1: function() { + const ret = new Array(); + return addHeapObject(ret); + }, + __wbg_new_439823ec67f1ec48: function() { return handleError(function (arg0, arg1) { + const ret = new OffscreenCanvas(arg0 >>> 0, arg1 >>> 0); + return addHeapObject(ret); + }, arguments); }, + __wbg_new_7ddec6de44ff8f5d: function(arg0) { + const ret = new Uint8Array(getObject(arg0)); + return addHeapObject(ret); + }, + __wbg_new_from_slice_269e35316ed2d061: function(arg0, arg1) { + const ret = new Uint8Array(getArrayU8FromWasm0(arg0, arg1)); + return addHeapObject(ret); + }, + __wbg_new_with_str_and_init_ffe9977c986ea039: function() { return handleError(function (arg0, arg1, arg2) { + const ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2)); + return addHeapObject(ret); + }, arguments); }, + __wbg_of_d694dacacb7afa7f: function(arg0) { + const ret = Array.of(getObject(arg0)); + return addHeapObject(ret); + }, + __wbg_pixelStorei_06b86995306b01dc: function(arg0, arg1, arg2) { + getObject(arg0).pixelStorei(arg1 >>> 0, arg2); + }, + __wbg_pixelStorei_171e6a6629fd9e3c: function(arg0, arg1, arg2) { + getObject(arg0).pixelStorei(arg1 >>> 0, arg2); + }, + __wbg_postMessage_d6c0cb4a6e9bb3c2: function() { return handleError(function (arg0, arg1) { + getObject(arg0).postMessage(getObject(arg1)); + }, arguments); }, + __wbg_prototypesetcall_5f9bdc8d75e07276: function(arg0, arg1, arg2) { + Uint8Array.prototype.set.call(getArrayU8FromWasm0(arg0, arg1), getObject(arg2)); + }, + __wbg_push_b77c476b01548d0a: function(arg0, arg1) { + const ret = getObject(arg0).push(getObject(arg1)); + return ret; + }, + __wbg_queueMicrotask_78d584b53af520f5: function(arg0) { + const ret = getObject(arg0).queueMicrotask; + return addHeapObject(ret); + }, + __wbg_queueMicrotask_b39ea83c7f01971a: function(arg0) { + queueMicrotask(getObject(arg0)); + }, + __wbg_requestAnimationFrame_c7b21cf87ac845c8: function() { return handleError(function (arg0, arg1) { + const ret = getObject(arg0).requestAnimationFrame(getObject(arg1)); + return ret; + }, arguments); }, + __wbg_resolve_d17db9352f5a220e: function(arg0) { + const ret = Promise.resolve(getObject(arg0)); + return addHeapObject(ret); + }, + __wbg_scissor_eefeb709a030fe62: function(arg0, arg1, arg2, arg3, arg4) { + getObject(arg0).scissor(arg1, arg2, arg3, arg4); + }, + __wbg_scissor_ffbc9d8b3e5bb99b: function(arg0, arg1, arg2, arg3, arg4) { + getObject(arg0).scissor(arg1, arg2, arg3, arg4); + }, + __wbg_setTimeout_a2b48e67340623fd: function() { return handleError(function (arg0, arg1, arg2) { + const ret = getObject(arg0).setTimeout(getObject(arg1), arg2); + return ret; + }, arguments); }, + __wbg_set_a0e911be3da02782: function() { return handleError(function (arg0, arg1, arg2) { + const ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2)); + return ret; + }, arguments); }, + __wbg_set_height_bb0dc35fd1d941f5: function(arg0, arg1) { + getObject(arg0).height = arg1 >>> 0; + }, + __wbg_set_method_4d69a1a7e34c0aca: function(arg0, arg1, arg2) { + getObject(arg0).method = getStringFromWasm0(arg1, arg2); + }, + __wbg_set_mode_dfc59bbbe25b1d14: function(arg0, arg1) { + getObject(arg0).mode = __wbindgen_enum_RequestMode[arg1]; + }, + __wbg_set_onmessage_c767f40c3874bffb: function(arg0, arg1) { + getObject(arg0).onmessage = getObject(arg1); + }, + __wbg_set_width_9d385df435c1f79d: function(arg0, arg1) { + getObject(arg0).width = arg1 >>> 0; + }, + __wbg_shaderSource_a304cd4ebd95c11b: function(arg0, arg1, arg2, arg3) { + getObject(arg0).shaderSource(getObject(arg1), getStringFromWasm0(arg2, arg3)); + }, + __wbg_shaderSource_eceb56c4b827824d: function(arg0, arg1, arg2, arg3) { + getObject(arg0).shaderSource(getObject(arg1), getStringFromWasm0(arg2, arg3)); + }, + __wbg_size_afefa5f0e6ecbd5a: function(arg0) { + const ret = getObject(arg0).size; + return ret; + }, + __wbg_stack_3b0d974bbf31e44f: function(arg0, arg1) { + const ret = getObject(arg1).stack; + const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2); + const len1 = WASM_VECTOR_LEN; + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); + }, + __wbg_static_accessor_GLOBAL_THIS_02344c9b09eb08a9: function() { + const ret = typeof globalThis === 'undefined' ? null : globalThis; + return isLikeNone(ret) ? 0 : addHeapObject(ret); + }, + __wbg_static_accessor_GLOBAL_ac6d4ac874d5cd54: function() { + const ret = typeof global === 'undefined' ? null : global; + return isLikeNone(ret) ? 0 : addHeapObject(ret); + }, + __wbg_static_accessor_SELF_9b2406c23aeb2023: function() { + const ret = typeof self === 'undefined' ? null : self; + return isLikeNone(ret) ? 0 : addHeapObject(ret); + }, + __wbg_static_accessor_WINDOW_b34d2126934e16ba: function() { + const ret = typeof window === 'undefined' ? null : window; + return isLikeNone(ret) ? 0 : addHeapObject(ret); + }, + __wbg_texParameteri_2ef5b781bcfbdd64: function(arg0, arg1, arg2, arg3) { + getObject(arg0).texParameteri(arg1 >>> 0, arg2 >>> 0, arg3); + }, + __wbg_texParameteri_c22838926a5dca2b: function(arg0, arg1, arg2, arg3) { + getObject(arg0).texParameteri(arg1 >>> 0, arg2 >>> 0, arg3); + }, + __wbg_texStorage2D_afb762382f8a4678: function(arg0, arg1, arg2, arg3, arg4, arg5) { + getObject(arg0).texStorage2D(arg1 >>> 0, arg2, arg3 >>> 0, arg4, arg5); + }, + __wbg_texSubImage2D_203ff6bcf48e4d08: function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) { + getObject(arg0).texSubImage2D(arg1 >>> 0, arg2, arg3, arg4, arg5, arg6, arg7 >>> 0, arg8 >>> 0, arg9); + }, arguments); }, + __wbg_texSubImage2D_781892a0e05abd13: function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) { + getObject(arg0).texSubImage2D(arg1 >>> 0, arg2, arg3, arg4, arg5, arg6, arg7 >>> 0, arg8 >>> 0, getObject(arg9)); + }, arguments); }, + __wbg_texSubImage2D_e1be0f65e9a35343: function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) { + getObject(arg0).texSubImage2D(arg1 >>> 0, arg2, arg3, arg4, arg5, arg6, arg7 >>> 0, arg8 >>> 0, getObject(arg9)); + }, arguments); }, + __wbg_then_837494e384b37459: function(arg0, arg1) { + const ret = getObject(arg0).then(getObject(arg1)); + return addHeapObject(ret); + }, + __wbg_then_bd927500e8905df2: function(arg0, arg1, arg2) { + const ret = getObject(arg0).then(getObject(arg1), getObject(arg2)); + return addHeapObject(ret); + }, + __wbg_type_af9fba80b2f7d669: function(arg0) { + const ret = getObject(arg0).type; + return ret; + }, + __wbg_uniform1fv_0f4ef61a14727a2d: function(arg0, arg1, arg2, arg3) { + getObject(arg0).uniform1fv(getObject(arg1), getArrayF32FromWasm0(arg2, arg3)); + }, + __wbg_uniform1fv_b8b9393d15363f86: function(arg0, arg1, arg2, arg3) { + getObject(arg0).uniform1fv(getObject(arg1), getArrayF32FromWasm0(arg2, arg3)); + }, + __wbg_uniform1iv_b887601b7605ab55: function(arg0, arg1, arg2, arg3) { + getObject(arg0).uniform1iv(getObject(arg1), getArrayI32FromWasm0(arg2, arg3)); + }, + __wbg_uniform1iv_fecc70859eaa9a2f: function(arg0, arg1, arg2, arg3) { + getObject(arg0).uniform1iv(getObject(arg1), getArrayI32FromWasm0(arg2, arg3)); + }, + __wbg_uniform1uiv_248f9283e919acb7: function(arg0, arg1, arg2, arg3) { + getObject(arg0).uniform1uiv(getObject(arg1), getArrayU32FromWasm0(arg2, arg3)); + }, + __wbg_uniform3fv_2fb5418c1304ba72: function(arg0, arg1, arg2, arg3) { + getObject(arg0).uniform3fv(getObject(arg1), getArrayF32FromWasm0(arg2, arg3)); + }, + __wbg_uniform3fv_7c2935b7f05414ef: function(arg0, arg1, arg2, arg3) { + getObject(arg0).uniform3fv(getObject(arg1), getArrayF32FromWasm0(arg2, arg3)); + }, + __wbg_uniform4fv_622c64d35acf9214: function(arg0, arg1, arg2, arg3) { + getObject(arg0).uniform4fv(getObject(arg1), getArrayF32FromWasm0(arg2, arg3)); + }, + __wbg_uniform4fv_b0c5721b35cd3f06: function(arg0, arg1, arg2, arg3) { + getObject(arg0).uniform4fv(getObject(arg1), getArrayF32FromWasm0(arg2, arg3)); + }, + __wbg_uniformMatrix3fv_6abd62dbed68830a: function(arg0, arg1, arg2, arg3, arg4) { + getObject(arg0).uniformMatrix3fv(getObject(arg1), arg2 !== 0, getArrayF32FromWasm0(arg3, arg4)); + }, + __wbg_uniformMatrix3fv_e380a7aa532c175a: function(arg0, arg1, arg2, arg3, arg4) { + getObject(arg0).uniformMatrix3fv(getObject(arg1), arg2 !== 0, getArrayF32FromWasm0(arg3, arg4)); + }, + __wbg_uniformMatrix4fv_b5f678dc15314524: function(arg0, arg1, arg2, arg3, arg4) { + getObject(arg0).uniformMatrix4fv(getObject(arg1), arg2 !== 0, getArrayF32FromWasm0(arg3, arg4)); + }, + __wbg_uniformMatrix4fv_d2b5005a92d27115: function(arg0, arg1, arg2, arg3, arg4) { + getObject(arg0).uniformMatrix4fv(getObject(arg1), arg2 !== 0, getArrayF32FromWasm0(arg3, arg4)); + }, + __wbg_useProgram_3cc1a6d58dac88b4: function(arg0, arg1) { + getObject(arg0).useProgram(getObject(arg1)); + }, + __wbg_useProgram_e45f506b921ab3f8: function(arg0, arg1) { + getObject(arg0).useProgram(getObject(arg1)); + }, + __wbg_vertexAttribDivisorANGLE_47b6b82921bbf062: function(arg0, arg1, arg2) { + getObject(arg0).vertexAttribDivisorANGLE(arg1 >>> 0, arg2 >>> 0); + }, + __wbg_vertexAttribDivisor_74454522a4976fc2: function(arg0, arg1, arg2) { + getObject(arg0).vertexAttribDivisor(arg1 >>> 0, arg2 >>> 0); + }, + __wbg_vertexAttribPointer_7f7185558bcaf24b: function(arg0, arg1, arg2, arg3, arg4, arg5, arg6) { + getObject(arg0).vertexAttribPointer(arg1 >>> 0, arg2, arg3 >>> 0, arg4 !== 0, arg5, arg6); + }, + __wbg_vertexAttribPointer_85566c79cb366300: function(arg0, arg1, arg2, arg3, arg4, arg5, arg6) { + getObject(arg0).vertexAttribPointer(arg1 >>> 0, arg2, arg3 >>> 0, arg4 !== 0, arg5, arg6); + }, + __wbg_viewport_3c149d0c6435f0ed: function(arg0, arg1, arg2, arg3, arg4) { + getObject(arg0).viewport(arg1, arg2, arg3, arg4); + }, + __wbg_viewport_c25030cfbe3cddf4: function(arg0, arg1, arg2, arg3, arg4) { + getObject(arg0).viewport(arg1, arg2, arg3, arg4); + }, + __wbindgen_cast_0000000000000001: function(arg0, arg1) { + // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [Externref], shim_idx: 125, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`. + const ret = makeMutClosure(arg0, arg1, __wasm_bindgen_func_elem_1888); + return addHeapObject(ret); + }, + __wbindgen_cast_0000000000000002: function(arg0, arg1) { + // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [NamedExternref("MessageEvent")], shim_idx: 15, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`. + const ret = makeMutClosure(arg0, arg1, __wasm_bindgen_func_elem_376); + return addHeapObject(ret); + }, + __wbindgen_cast_0000000000000003: function(arg0, arg1) { + // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [], shim_idx: 17, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`. + const ret = makeMutClosure(arg0, arg1, __wasm_bindgen_func_elem_381); + return addHeapObject(ret); + }, + __wbindgen_cast_0000000000000004: function(arg0) { + // Cast intrinsic for `F64 -> Externref`. + const ret = arg0; + return addHeapObject(ret); + }, + __wbindgen_cast_0000000000000005: function(arg0, arg1) { + // Cast intrinsic for `Ref(Slice(F32)) -> NamedExternref("Float32Array")`. + const ret = getArrayF32FromWasm0(arg0, arg1); + return addHeapObject(ret); + }, + __wbindgen_cast_0000000000000006: function(arg0, arg1) { + // Cast intrinsic for `Ref(Slice(I16)) -> NamedExternref("Int16Array")`. + const ret = getArrayI16FromWasm0(arg0, arg1); + return addHeapObject(ret); + }, + __wbindgen_cast_0000000000000007: function(arg0, arg1) { + // Cast intrinsic for `Ref(Slice(I32)) -> NamedExternref("Int32Array")`. + const ret = getArrayI32FromWasm0(arg0, arg1); + return addHeapObject(ret); + }, + __wbindgen_cast_0000000000000008: function(arg0, arg1) { + // Cast intrinsic for `Ref(Slice(U16)) -> NamedExternref("Uint16Array")`. + const ret = getArrayU16FromWasm0(arg0, arg1); + return addHeapObject(ret); + }, + __wbindgen_cast_0000000000000009: function(arg0, arg1) { + // Cast intrinsic for `Ref(Slice(U32)) -> NamedExternref("Uint32Array")`. + const ret = getArrayU32FromWasm0(arg0, arg1); + return addHeapObject(ret); + }, + __wbindgen_cast_000000000000000a: function(arg0, arg1) { + // Cast intrinsic for `Ref(Slice(U8)) -> NamedExternref("Uint8Array")`. + const ret = getArrayU8FromWasm0(arg0, arg1); + return addHeapObject(ret); + }, + __wbindgen_cast_000000000000000b: function(arg0, arg1) { + // Cast intrinsic for `Ref(String) -> Externref`. + const ret = getStringFromWasm0(arg0, arg1); + return addHeapObject(ret); + }, + __wbindgen_object_clone_ref: function(arg0) { + const ret = getObject(arg0); + return addHeapObject(ret); + }, + __wbindgen_object_drop_ref: function(arg0) { + takeObject(arg0); + }, + }; + return { + __proto__: null, + "./renderer_worker_bg.js": import0, + }; +} + +function __wasm_bindgen_func_elem_381(arg0, arg1) { + wasm.__wasm_bindgen_func_elem_381(arg0, arg1); +} + +function __wasm_bindgen_func_elem_376(arg0, arg1, arg2) { + wasm.__wasm_bindgen_func_elem_376(arg0, arg1, addHeapObject(arg2)); +} + +function __wasm_bindgen_func_elem_1888(arg0, arg1, arg2) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.__wasm_bindgen_func_elem_1888(retptr, arg0, arg1, addHeapObject(arg2)); + var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); + var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); + if (r1) { + throw takeObject(r0); + } + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } +} + + +const __wbindgen_enum_RequestMode = ["same-origin", "no-cors", "cors", "navigate"]; + +function addHeapObject(obj) { + if (heap_next === heap.length) heap.push(heap.length + 1); + const idx = heap_next; + heap_next = heap[idx]; + + heap[idx] = obj; + return idx; +} + +const CLOSURE_DTORS = (typeof FinalizationRegistry === 'undefined') + ? { register: () => {}, unregister: () => {} } + : new FinalizationRegistry(state => wasm.__wbindgen_export5(state.a, state.b)); + +function debugString(val) { + // primitive types + const type = typeof val; + if (type == 'number' || type == 'boolean' || val == null) { + return `${val}`; + } + if (type == 'string') { + return `"${val}"`; + } + if (type == 'symbol') { + const description = val.description; + if (description == null) { + return 'Symbol'; + } else { + return `Symbol(${description})`; + } + } + if (type == 'function') { + const name = val.name; + if (typeof name == 'string' && name.length > 0) { + return `Function(${name})`; + } else { + return 'Function'; + } + } + // objects + if (Array.isArray(val)) { + const length = val.length; + let debug = '['; + if (length > 0) { + debug += debugString(val[0]); + } + for(let i = 1; i < length; i++) { + debug += ', ' + debugString(val[i]); + } + debug += ']'; + return debug; + } + // Test for built-in + const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); + let className; + if (builtInMatches && builtInMatches.length > 1) { + className = builtInMatches[1]; + } else { + // Failed to match the standard '[object ClassName]' + return toString.call(val); + } + if (className == 'Object') { + // we're a user defined class or Object + // JSON.stringify avoids problems with cycles, and is generally much + // easier than looping through ownProperties of `val`. + try { + return 'Object(' + JSON.stringify(val) + ')'; + } catch (_) { + return 'Object'; + } + } + // errors + if (val instanceof Error) { + return `${val.name}: ${val.message}\n${val.stack}`; + } + // TODO we could test for more things here, like `Set`s and `Map`s. + return className; +} + +function dropObject(idx) { + if (idx < 1028) return; + heap[idx] = heap_next; + heap_next = idx; +} + +function getArrayF32FromWasm0(ptr, len) { + ptr = ptr >>> 0; + return getFloat32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len); +} + +function getArrayI16FromWasm0(ptr, len) { + ptr = ptr >>> 0; + return getInt16ArrayMemory0().subarray(ptr / 2, ptr / 2 + len); +} + +function getArrayI32FromWasm0(ptr, len) { + ptr = ptr >>> 0; + return getInt32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len); +} + +function getArrayU16FromWasm0(ptr, len) { + ptr = ptr >>> 0; + return getUint16ArrayMemory0().subarray(ptr / 2, ptr / 2 + len); +} + +function getArrayU32FromWasm0(ptr, len) { + ptr = ptr >>> 0; + return getUint32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len); +} + +function getArrayU8FromWasm0(ptr, len) { + ptr = ptr >>> 0; + return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len); +} + +let cachedDataViewMemory0 = null; +function getDataViewMemory0() { + if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) { + cachedDataViewMemory0 = new DataView(wasm.memory.buffer); + } + return cachedDataViewMemory0; +} + +let cachedFloat32ArrayMemory0 = null; +function getFloat32ArrayMemory0() { + if (cachedFloat32ArrayMemory0 === null || cachedFloat32ArrayMemory0.byteLength === 0) { + cachedFloat32ArrayMemory0 = new Float32Array(wasm.memory.buffer); + } + return cachedFloat32ArrayMemory0; +} + +let cachedInt16ArrayMemory0 = null; +function getInt16ArrayMemory0() { + if (cachedInt16ArrayMemory0 === null || cachedInt16ArrayMemory0.byteLength === 0) { + cachedInt16ArrayMemory0 = new Int16Array(wasm.memory.buffer); + } + return cachedInt16ArrayMemory0; +} + +let cachedInt32ArrayMemory0 = null; +function getInt32ArrayMemory0() { + if (cachedInt32ArrayMemory0 === null || cachedInt32ArrayMemory0.byteLength === 0) { + cachedInt32ArrayMemory0 = new Int32Array(wasm.memory.buffer); + } + return cachedInt32ArrayMemory0; +} + +function getStringFromWasm0(ptr, len) { + return decodeText(ptr >>> 0, len); +} + +let cachedUint16ArrayMemory0 = null; +function getUint16ArrayMemory0() { + if (cachedUint16ArrayMemory0 === null || cachedUint16ArrayMemory0.byteLength === 0) { + cachedUint16ArrayMemory0 = new Uint16Array(wasm.memory.buffer); + } + return cachedUint16ArrayMemory0; +} + +let cachedUint32ArrayMemory0 = null; +function getUint32ArrayMemory0() { + if (cachedUint32ArrayMemory0 === null || cachedUint32ArrayMemory0.byteLength === 0) { + cachedUint32ArrayMemory0 = new Uint32Array(wasm.memory.buffer); + } + return cachedUint32ArrayMemory0; +} + +let cachedUint8ArrayMemory0 = null; +function getUint8ArrayMemory0() { + if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { + cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); + } + return cachedUint8ArrayMemory0; +} + +function getObject(idx) { return heap[idx]; } + +function handleError(f, args) { + try { + return f.apply(this, args); + } catch (e) { + wasm.__wbindgen_export3(addHeapObject(e)); + } +} + +let heap = new Array(1024).fill(undefined); +heap.push(undefined, null, true, false); + +let heap_next = heap.length; + +function isLikeNone(x) { + return x === undefined || x === null; +} + +function makeMutClosure(arg0, arg1, f) { + const state = { a: arg0, b: arg1, cnt: 1 }; + const real = (...args) => { + + // First up with a closure we increment the internal reference + // count. This ensures that the Rust closure environment won't + // be deallocated while we're invoking it. + state.cnt++; + const a = state.a; + state.a = 0; + try { + return f(a, state.b, ...args); + } finally { + state.a = a; + real._wbg_cb_unref(); + } + }; + real._wbg_cb_unref = () => { + if (--state.cnt === 0) { + wasm.__wbindgen_export5(state.a, state.b); + state.a = 0; + CLOSURE_DTORS.unregister(state); + } + }; + CLOSURE_DTORS.register(real, state, state); + return real; +} + +function passStringToWasm0(arg, malloc, realloc) { + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length, 1) >>> 0; + getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len, 1) >>> 0; + + const mem = getUint8ArrayMemory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; + const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len); + const ret = cachedTextEncoder.encodeInto(arg, view); + + offset += ret.written; + ptr = realloc(ptr, len, offset, 1) >>> 0; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} + +function takeObject(idx) { + const ret = getObject(idx); + dropObject(idx); + return ret; +} + +let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); +cachedTextDecoder.decode(); +const MAX_SAFARI_DECODE_BYTES = 2146435072; +let numBytesDecoded = 0; +function decodeText(ptr, len) { + numBytesDecoded += len; + if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) { + cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); + cachedTextDecoder.decode(); + numBytesDecoded = len; + } + return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); +} + +const cachedTextEncoder = new TextEncoder(); + +if (!('encodeInto' in cachedTextEncoder)) { + cachedTextEncoder.encodeInto = function (arg, view) { + const buf = cachedTextEncoder.encode(arg); + view.set(buf); + return { + read: arg.length, + written: buf.length + }; + }; +} + +let WASM_VECTOR_LEN = 0; + +let wasmModule, wasmInstance, wasm; +function __wbg_finalize_init(instance, module) { + wasmInstance = instance; + wasm = instance.exports; + wasmModule = module; + cachedDataViewMemory0 = null; + cachedFloat32ArrayMemory0 = null; + cachedInt16ArrayMemory0 = null; + cachedInt32ArrayMemory0 = null; + cachedUint16ArrayMemory0 = null; + cachedUint32ArrayMemory0 = null; + cachedUint8ArrayMemory0 = null; + wasm.__wbindgen_start(); + return wasm; +} + +async function __wbg_load(module, imports) { + if (typeof Response === 'function' && module instanceof Response) { + if (typeof WebAssembly.instantiateStreaming === 'function') { + try { + return await WebAssembly.instantiateStreaming(module, imports); + } catch (e) { + const validResponse = module.ok && expectedResponseType(module.type); + + if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') { + console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); + + } else { throw e; } + } + } + + const bytes = await module.arrayBuffer(); + return await WebAssembly.instantiate(bytes, imports); + } else { + const instance = await WebAssembly.instantiate(module, imports); + + if (instance instanceof WebAssembly.Instance) { + return { instance, module }; + } else { + return instance; + } + } + + function expectedResponseType(type) { + switch (type) { + case 'basic': case 'cors': case 'default': return true; + } + return false; + } +} + +function initSync(module) { + if (wasm !== undefined) return wasm; + + + if (module !== undefined) { + if (Object.getPrototypeOf(module) === Object.prototype) { + ({module} = module) + } else { + console.warn('using deprecated parameters for `initSync()`; pass a single object instead') + } + } + + const imports = __wbg_get_imports(); + if (!(module instanceof WebAssembly.Module)) { + module = new WebAssembly.Module(module); + } + const instance = new WebAssembly.Instance(module, imports); + return __wbg_finalize_init(instance, module); +} + +async function __wbg_init(module_or_path) { + if (wasm !== undefined) return wasm; + + + if (module_or_path !== undefined) { + if (Object.getPrototypeOf(module_or_path) === Object.prototype) { + ({module_or_path} = module_or_path) + } else { + console.warn('using deprecated parameters for the initialization function; pass a single object instead') + } + } + + if (module_or_path === undefined) { + module_or_path = new URL('renderer_worker_bg.wasm', import.meta.url); + } + const imports = __wbg_get_imports(); + + if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) { + module_or_path = fetch(module_or_path); + } + + const { instance, module } = await __wbg_load(await module_or_path, imports); + + return __wbg_finalize_init(instance, module); +} + +export { initSync, __wbg_init as default }; diff --git a/public/renderer_worker_bg.wasm b/public/renderer_worker_bg.wasm new file mode 100644 index 0000000000000000000000000000000000000000..43277dbef5c760aff47de53b6a42462c40acb632 GIT binary patch literal 1392262 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
Xxiaec%B~ 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