atproto Thingiverse but good
10

Configure Feed

Select the types of activity you want to include in your feed.

PM-47: XRPC passthrough proxy to user's PDS

Orual (Jun 29, 2026, 7:06 PM EDT) 137b59a8 c212bf31

+3659 -32
+12
.sqlx/query-02498e156eeb04d7baeb54201c045676240587f84cc22dca030a8e3961c732fd.json
··· 1 + { 2 + "db_name": "SQLite", 3 + "query": "DELETE FROM pending_writes WHERE uri = ?", 4 + "describe": { 5 + "columns": [], 6 + "parameters": { 7 + "Right": 1 8 + }, 9 + "nullable": [] 10 + }, 11 + "hash": "02498e156eeb04d7baeb54201c045676240587f84cc22dca030a8e3961c732fd" 12 + }
+12
.sqlx/query-188eee0cbdddad562fb3d472ee3e4321be2a59731b9de100c7c782a503c3c6af.json
··· 1 + { 2 + "db_name": "SQLite", 3 + "query": "INSERT INTO pending_deletes (uri, deleted_at) VALUES (?, ?) ON CONFLICT(uri) DO UPDATE SET deleted_at = excluded.deleted_at", 4 + "describe": { 5 + "columns": [], 6 + "parameters": { 7 + "Right": 2 8 + }, 9 + "nullable": [] 10 + }, 11 + "hash": "188eee0cbdddad562fb3d472ee3e4321be2a59731b9de100c7c782a503c3c6af" 12 + }
+12
.sqlx/query-42713d3244e11c6bc4e4d56fd008a06ef33235dfa679efaf7ed3c94e9632b967.json
··· 1 + { 2 + "db_name": "SQLite", 3 + "query": "DELETE FROM pending_writes WHERE uri = ? AND cid = ?", 4 + "describe": { 5 + "columns": [], 6 + "parameters": { 7 + "Right": 2 8 + }, 9 + "nullable": [] 10 + }, 11 + "hash": "42713d3244e11c6bc4e4d56fd008a06ef33235dfa679efaf7ed3c94e9632b967" 12 + }
+12
.sqlx/query-4fe4341674a5b0311870b8ec107125f266f200c647e68e3e4cbac25643fe8f7d.json
··· 1 + { 2 + "db_name": "SQLite", 3 + "query": "DELETE FROM pending_deletes WHERE uri = ?", 4 + "describe": { 5 + "columns": [], 6 + "parameters": { 7 + "Right": 1 8 + }, 9 + "nullable": [] 10 + }, 11 + "hash": "4fe4341674a5b0311870b8ec107125f266f200c647e68e3e4cbac25643fe8f7d" 12 + }
+38
.sqlx/query-696d490bc4f5984d2b100b7f5478e61132239f583584df62f041b50a55108c91.json
··· 1 + { 2 + "db_name": "SQLite", 3 + "query": "SELECT cid, value FROM pending_writes WHERE uri = ?", 4 + "describe": { 5 + "columns": [ 6 + { 7 + "name": "cid", 8 + "ordinal": 0, 9 + "type_info": "Text", 10 + "origin": { 11 + "Table": { 12 + "table": "pending_writes", 13 + "name": "cid" 14 + } 15 + } 16 + }, 17 + { 18 + "name": "value", 19 + "ordinal": 1, 20 + "type_info": "Text", 21 + "origin": { 22 + "Table": { 23 + "table": "pending_writes", 24 + "name": "value" 25 + } 26 + } 27 + } 28 + ], 29 + "parameters": { 30 + "Right": 1 31 + }, 32 + "nullable": [ 33 + false, 34 + false 35 + ] 36 + }, 37 + "hash": "696d490bc4f5984d2b100b7f5478e61132239f583584df62f041b50a55108c91" 38 + }
+21
.sqlx/query-8285896bc29295b64c17c7022f50c8a9dbf4419c135ff135fe24aaa5ba28b8a9.json
··· 1 + { 2 + "db_name": "SQLite", 3 + "query": "SELECT 1 AS hit FROM pending_deletes WHERE uri = ?", 4 + "describe": { 5 + "columns": [ 6 + { 7 + "name": "hit", 8 + "ordinal": 0, 9 + "type_info": "Integer", 10 + "origin": "Expression" 11 + } 12 + ], 13 + "parameters": { 14 + "Right": 1 15 + }, 16 + "nullable": [ 17 + false 18 + ] 19 + }, 20 + "hash": "8285896bc29295b64c17c7022f50c8a9dbf4419c135ff135fe24aaa5ba28b8a9" 21 + }
+12
.sqlx/query-e5d4187863bf415384f2919ba807d1d6ba5bacbb454f9a62d3cbfb6090a62fd9.json
··· 1 + { 2 + "db_name": "SQLite", 3 + "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", 4 + "describe": { 5 + "columns": [], 6 + "parameters": { 7 + "Right": 4 8 + }, 9 + "nullable": [] 10 + }, 11 + "hash": "e5d4187863bf415384f2919ba807d1d6ba5bacbb454f9a62d3cbfb6090a62fd9" 12 + }
+10
AGENTS.md
··· 82 82 - 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. 83 83 - 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. 84 84 85 + ## Local projection: reads & writes 86 + 87 + 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)). 88 + 89 + - **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. 90 + - **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. 91 + - **Only `space.polymodel.*` is indexed.** Other records are proxied without local persistence. 92 + - **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. 93 + - **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. 94 + 85 95 ## Agent behavior 86 96 87 97 - Investigate code and docs before asking factual questions.
+30 -29
Cargo.lock
··· 4168 4168 4169 4169 [[package]] 4170 4170 name = "jacquard" 4171 - version = "0.12.0" 4171 + version = "0.12.1" 4172 4172 dependencies = [ 4173 4173 "bytes", 4174 4174 "getrandom 0.2.17", 4175 4175 "gloo-storage", 4176 4176 "http", 4177 - "jacquard-api 0.12.0", 4178 - "jacquard-common 0.12.0", 4179 - "jacquard-derive 0.12.0", 4180 - "jacquard-identity 0.12.0", 4177 + "jacquard-api 0.12.1", 4178 + "jacquard-common 0.12.1", 4179 + "jacquard-derive 0.12.1", 4180 + "jacquard-identity 0.12.1", 4181 4181 "jacquard-oauth", 4182 4182 "jose-jwk", 4183 4183 "miette", ··· 4210 4210 4211 4211 [[package]] 4212 4212 name = "jacquard-api" 4213 - version = "0.12.0" 4213 + version = "0.12.1" 4214 4214 dependencies = [ 4215 - "jacquard-common 0.12.0", 4216 - "jacquard-derive 0.12.0", 4217 - "jacquard-lexicon 0.12.0", 4215 + "jacquard-common 0.12.1", 4216 + "jacquard-derive 0.12.1", 4217 + "jacquard-lexicon 0.12.1", 4218 4218 "miette", 4219 4219 "serde", 4220 4220 "thiserror 2.0.18", ··· 4222 4222 4223 4223 [[package]] 4224 4224 name = "jacquard-axum" 4225 - version = "0.12.0" 4225 + version = "0.12.1" 4226 4226 dependencies = [ 4227 4227 "axum", 4228 4228 "axum-extra", ··· 4230 4230 "bytes", 4231 4231 "chrono", 4232 4232 "jacquard", 4233 - "jacquard-common 0.12.0", 4234 - "jacquard-derive 0.12.0", 4235 - "jacquard-identity 0.12.0", 4233 + "jacquard-common 0.12.1", 4234 + "jacquard-derive 0.12.1", 4235 + "jacquard-identity 0.12.1", 4236 4236 "miette", 4237 4237 "mini-moka-wasm", 4238 4238 "multibase", ··· 4302 4302 4303 4303 [[package]] 4304 4304 name = "jacquard-common" 4305 - version = "0.12.0" 4305 + version = "0.12.1" 4306 4306 dependencies = [ 4307 4307 "base64", 4308 4308 "bon", ··· 4365 4365 4366 4366 [[package]] 4367 4367 name = "jacquard-derive" 4368 - version = "0.12.0" 4368 + version = "0.12.1" 4369 4369 dependencies = [ 4370 4370 "heck 0.5.0", 4371 - "jacquard-lexicon 0.12.0", 4371 + "jacquard-lexicon 0.12.1", 4372 4372 "proc-macro2", 4373 4373 "quote", 4374 4374 "syn 2.0.118", ··· 4400 4400 4401 4401 [[package]] 4402 4402 name = "jacquard-identity" 4403 - version = "0.12.0" 4403 + version = "0.12.1" 4404 4404 dependencies = [ 4405 4405 "bon", 4406 4406 "bytes", 4407 4407 "http", 4408 - "jacquard-common 0.12.0", 4409 - "jacquard-lexicon 0.12.0", 4408 + "jacquard-common 0.12.1", 4409 + "jacquard-lexicon 0.12.1", 4410 4410 "miette", 4411 4411 "mini-moka-wasm", 4412 4412 "n0-future", ··· 4449 4449 4450 4450 [[package]] 4451 4451 name = "jacquard-lexicon" 4452 - version = "0.12.0" 4452 + version = "0.12.1" 4453 4453 dependencies = [ 4454 4454 "cid", 4455 4455 "dashmap", 4456 4456 "heck 0.5.0", 4457 4457 "inventory", 4458 - "jacquard-common 0.12.0", 4458 + "jacquard-common 0.12.1", 4459 4459 "miette", 4460 4460 "multihash", 4461 4461 "prettyplease", ··· 4475 4475 4476 4476 [[package]] 4477 4477 name = "jacquard-oauth" 4478 - version = "0.12.0" 4478 + version = "0.12.1" 4479 4479 dependencies = [ 4480 4480 "base64", 4481 4481 "bytes", ··· 4484 4484 "ed25519-dalek", 4485 4485 "elliptic-curve", 4486 4486 "http", 4487 - "jacquard-common 0.12.0", 4488 - "jacquard-identity 0.12.0", 4487 + "jacquard-common 0.12.1", 4488 + "jacquard-identity 0.12.1", 4489 4489 "jose-jwa", 4490 4490 "jose-jwk", 4491 4491 "k256", 4492 4492 "miette", 4493 + "mini-moka-wasm", 4493 4494 "p256", 4494 4495 "p384", 4495 4496 "rand 0.8.6", ··· 6202 6203 "hydrant", 6203 6204 "jacquard", 6204 6205 "jacquard-axum", 6205 - "jacquard-common 0.12.0", 6206 - "jacquard-derive 0.12.0", 6206 + "jacquard-common 0.12.1", 6207 + "jacquard-derive 0.12.1", 6207 6208 "js-sys", 6208 6209 "keyring", 6209 6210 "libsqlite3-sys", ··· 6234 6235 name = "polymodel-api" 6235 6236 version = "0.1.0" 6236 6237 dependencies = [ 6237 - "jacquard-common 0.12.0", 6238 - "jacquard-derive 0.12.0", 6239 - "jacquard-lexicon 0.12.0", 6238 + "jacquard-common 0.12.1", 6239 + "jacquard-derive 0.12.1", 6240 + "jacquard-lexicon 0.12.1", 6240 6241 "miette", 6241 6242 "serde", 6242 6243 "thiserror 2.0.18",
-1
Cargo.toml
··· 150 150 "env-filter", 151 151 ] } 152 152 153 - 154 153 [build-dependencies] 155 154 dotenvy = "0.15" 156 155 serde_json = "1.0"
+30
migrations/005_pending_ops.sql
··· 1 + -- Read-your-writes pending-ops tracking (PM-47). 2 + -- 3 + -- Eager local writes/deletes — both PM-28 mediated writes and the PM-47 4 + -- passthrough proxy — mark a record "pending" until the Hydrant firehose 5 + -- re-delivers the same event, at which point the PDS/AppView is authoritative 6 + -- again. `repo.getRecord` of a `space.polymodel.*` record consults these tables 7 + -- to reflect a not-yet-confirmed local op: 8 + -- * a pending write whose cid differs from the PDS returns the local value; 9 + -- * a pending delete returns RecordNotFound even if a lagging source still 10 + -- serves the record. 11 + -- 12 + -- These tables are collection-agnostic (keyed by record URI); they do not touch 13 + -- the per-collection projection tables. The matching row is cleared by the 14 + -- firehose record-event projection path once the Hydrant `#commit` redelivers 15 + -- the event. 16 + 17 + CREATE TABLE pending_writes ( 18 + -- Canonical record URI: at://{did}/{collection}/{rkey}. 19 + uri TEXT PRIMARY KEY, 20 + cid TEXT NOT NULL, 21 + -- The raw record JSON, so repo.getRecord can rebuild `value` without a 22 + -- collection-specific lookup. 23 + value TEXT NOT NULL, 24 + written_at INTEGER NOT NULL 25 + ); 26 + 27 + CREATE TABLE pending_deletes ( 28 + uri TEXT PRIMARY KEY, 29 + deleted_at INTEGER NOT NULL 30 + );
+1247
public/renderer_worker.js
··· 1 + function __wbg_get_imports() { 2 + const import0 = { 3 + __proto__: null, 4 + __wbg___wbindgen_boolean_get_2304fb8c853028c8: function(arg0) { 5 + const v = getObject(arg0); 6 + const ret = typeof(v) === 'boolean' ? v : undefined; 7 + return isLikeNone(ret) ? 0xFFFFFF : ret ? 1 : 0; 8 + }, 9 + __wbg___wbindgen_debug_string_edece8177ad01481: function(arg0, arg1) { 10 + const ret = debugString(getObject(arg1)); 11 + const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2); 12 + const len1 = WASM_VECTOR_LEN; 13 + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); 14 + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); 15 + }, 16 + __wbg___wbindgen_is_falsy_402d3af0d5f09bc6: function(arg0) { 17 + const ret = !getObject(arg0); 18 + return ret; 19 + }, 20 + __wbg___wbindgen_is_function_5cd60d5cf78b4eef: function(arg0) { 21 + const ret = typeof(getObject(arg0)) === 'function'; 22 + return ret; 23 + }, 24 + __wbg___wbindgen_is_object_b4593df85baada48: function(arg0) { 25 + const val = getObject(arg0); 26 + const ret = typeof(val) === 'object' && val !== null; 27 + return ret; 28 + }, 29 + __wbg___wbindgen_is_undefined_35bb9f4c7fd651d5: function(arg0) { 30 + const ret = getObject(arg0) === undefined; 31 + return ret; 32 + }, 33 + __wbg___wbindgen_number_get_f73a1244370fcc2c: function(arg0, arg1) { 34 + const obj = getObject(arg1); 35 + const ret = typeof(obj) === 'number' ? obj : undefined; 36 + getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true); 37 + getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true); 38 + }, 39 + __wbg___wbindgen_string_get_d109740c0d18f4d7: function(arg0, arg1) { 40 + const obj = getObject(arg1); 41 + const ret = typeof(obj) === 'string' ? obj : undefined; 42 + var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2); 43 + var len1 = WASM_VECTOR_LEN; 44 + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); 45 + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); 46 + }, 47 + __wbg___wbindgen_throw_9c31b086c2b26051: function(arg0, arg1) { 48 + throw new Error(getStringFromWasm0(arg0, arg1)); 49 + }, 50 + __wbg__wbg_cb_unref_3fa391f3fcdb55f8: function(arg0) { 51 + getObject(arg0)._wbg_cb_unref(); 52 + }, 53 + __wbg_activeTexture_37cff0753870753b: function(arg0, arg1) { 54 + getObject(arg0).activeTexture(arg1 >>> 0); 55 + }, 56 + __wbg_activeTexture_4d2afad7cfda1396: function(arg0, arg1) { 57 + getObject(arg0).activeTexture(arg1 >>> 0); 58 + }, 59 + __wbg_arrayBuffer_0ad0e21451bc9ea0: function(arg0) { 60 + const ret = getObject(arg0).arrayBuffer(); 61 + return addHeapObject(ret); 62 + }, 63 + __wbg_arrayBuffer_cb5d4748b5f3cad5: function() { return handleError(function (arg0) { 64 + const ret = getObject(arg0).arrayBuffer(); 65 + return addHeapObject(ret); 66 + }, arguments); }, 67 + __wbg_attachShader_0a37c762590e5e1c: function(arg0, arg1, arg2) { 68 + getObject(arg0).attachShader(getObject(arg1), getObject(arg2)); 69 + }, 70 + __wbg_attachShader_515800f4051247dc: function(arg0, arg1, arg2) { 71 + getObject(arg0).attachShader(getObject(arg1), getObject(arg2)); 72 + }, 73 + __wbg_bindBuffer_1a31fd3809dc22c8: function(arg0, arg1, arg2) { 74 + getObject(arg0).bindBuffer(arg1 >>> 0, getObject(arg2)); 75 + }, 76 + __wbg_bindBuffer_4bf3ab31e8e200ed: function(arg0, arg1, arg2) { 77 + getObject(arg0).bindBuffer(arg1 >>> 0, getObject(arg2)); 78 + }, 79 + __wbg_bindFramebuffer_751e5064f23ee1c4: function(arg0, arg1, arg2) { 80 + getObject(arg0).bindFramebuffer(arg1 >>> 0, getObject(arg2)); 81 + }, 82 + __wbg_bindFramebuffer_92449a44405b6557: function(arg0, arg1, arg2) { 83 + getObject(arg0).bindFramebuffer(arg1 >>> 0, getObject(arg2)); 84 + }, 85 + __wbg_bindTexture_7fd7f85d6f942f6f: function(arg0, arg1, arg2) { 86 + getObject(arg0).bindTexture(arg1 >>> 0, getObject(arg2)); 87 + }, 88 + __wbg_bindTexture_85abbde679bce760: function(arg0, arg1, arg2) { 89 + getObject(arg0).bindTexture(arg1 >>> 0, getObject(arg2)); 90 + }, 91 + __wbg_bindVertexArrayOES_fb7e8c5e8e106919: function(arg0, arg1) { 92 + getObject(arg0).bindVertexArrayOES(getObject(arg1)); 93 + }, 94 + __wbg_bindVertexArray_f8587a616356d307: function(arg0, arg1) { 95 + getObject(arg0).bindVertexArray(getObject(arg1)); 96 + }, 97 + __wbg_blendEquationSeparate_946c10181ab6c6cf: function(arg0, arg1, arg2) { 98 + getObject(arg0).blendEquationSeparate(arg1 >>> 0, arg2 >>> 0); 99 + }, 100 + __wbg_blendEquationSeparate_985f782fb54b29fe: function(arg0, arg1, arg2) { 101 + getObject(arg0).blendEquationSeparate(arg1 >>> 0, arg2 >>> 0); 102 + }, 103 + __wbg_blendFuncSeparate_6f525092629a20ae: function(arg0, arg1, arg2, arg3, arg4) { 104 + getObject(arg0).blendFuncSeparate(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, arg4 >>> 0); 105 + }, 106 + __wbg_blendFuncSeparate_ea29c928bc1c4984: function(arg0, arg1, arg2, arg3, arg4) { 107 + getObject(arg0).blendFuncSeparate(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, arg4 >>> 0); 108 + }, 109 + __wbg_bufferData_74a0b79b4c9d8f96: function(arg0, arg1, arg2, arg3) { 110 + getObject(arg0).bufferData(arg1 >>> 0, getObject(arg2), arg3 >>> 0); 111 + }, 112 + __wbg_bufferData_886f34df840b0814: function(arg0, arg1, arg2, arg3) { 113 + getObject(arg0).bufferData(arg1 >>> 0, getObject(arg2), arg3 >>> 0); 114 + }, 115 + __wbg_call_dfde26266607c996: function() { return handleError(function (arg0, arg1, arg2) { 116 + const ret = getObject(arg0).call(getObject(arg1), getObject(arg2)); 117 + return addHeapObject(ret); 118 + }, arguments); }, 119 + __wbg_cancelAnimationFrame_d69ea65c3ba644d7: function() { return handleError(function (arg0, arg1) { 120 + getObject(arg0).cancelAnimationFrame(arg1); 121 + }, arguments); }, 122 + __wbg_clearColor_9b1cc35ab608d422: function(arg0, arg1, arg2, arg3, arg4) { 123 + getObject(arg0).clearColor(arg1, arg2, arg3, arg4); 124 + }, 125 + __wbg_clearColor_eefa804fcd21ef56: function(arg0, arg1, arg2, arg3, arg4) { 126 + getObject(arg0).clearColor(arg1, arg2, arg3, arg4); 127 + }, 128 + __wbg_clearDepth_1eae37358a24b9db: function(arg0, arg1) { 129 + getObject(arg0).clearDepth(arg1); 130 + }, 131 + __wbg_clearDepth_f42ada4795e5a943: function(arg0, arg1) { 132 + getObject(arg0).clearDepth(arg1); 133 + }, 134 + __wbg_clear_252bb7b11d5bea06: function(arg0, arg1) { 135 + getObject(arg0).clear(arg1 >>> 0); 136 + }, 137 + __wbg_clear_7d0a8d124c2a4b66: function(arg0, arg1) { 138 + getObject(arg0).clear(arg1 >>> 0); 139 + }, 140 + __wbg_close_d293331974ac3c1c: function(arg0) { 141 + getObject(arg0).close(); 142 + }, 143 + __wbg_colorMask_0f86a23bfc7696a7: function(arg0, arg1, arg2, arg3, arg4) { 144 + getObject(arg0).colorMask(arg1 !== 0, arg2 !== 0, arg3 !== 0, arg4 !== 0); 145 + }, 146 + __wbg_colorMask_2d4b38c34bf55a02: function(arg0, arg1, arg2, arg3, arg4) { 147 + getObject(arg0).colorMask(arg1 !== 0, arg2 !== 0, arg3 !== 0, arg4 !== 0); 148 + }, 149 + __wbg_compileShader_a20e7b68d3edcd8a: function(arg0, arg1) { 150 + getObject(arg0).compileShader(getObject(arg1)); 151 + }, 152 + __wbg_compileShader_b77bd79d00a03b02: function(arg0, arg1) { 153 + getObject(arg0).compileShader(getObject(arg1)); 154 + }, 155 + __wbg_createBuffer_1c3448547584bc5a: function(arg0) { 156 + const ret = getObject(arg0).createBuffer(); 157 + return isLikeNone(ret) ? 0 : addHeapObject(ret); 158 + }, 159 + __wbg_createBuffer_77da03de0620a199: function(arg0) { 160 + const ret = getObject(arg0).createBuffer(); 161 + return isLikeNone(ret) ? 0 : addHeapObject(ret); 162 + }, 163 + __wbg_createProgram_a175fc4c32429a24: function(arg0) { 164 + const ret = getObject(arg0).createProgram(); 165 + return isLikeNone(ret) ? 0 : addHeapObject(ret); 166 + }, 167 + __wbg_createProgram_c9d6396ea0bc7522: function(arg0) { 168 + const ret = getObject(arg0).createProgram(); 169 + return isLikeNone(ret) ? 0 : addHeapObject(ret); 170 + }, 171 + __wbg_createShader_25e11081fd48d141: function(arg0, arg1) { 172 + const ret = getObject(arg0).createShader(arg1 >>> 0); 173 + return isLikeNone(ret) ? 0 : addHeapObject(ret); 174 + }, 175 + __wbg_createShader_9c5e52918428bd27: function(arg0, arg1) { 176 + const ret = getObject(arg0).createShader(arg1 >>> 0); 177 + return isLikeNone(ret) ? 0 : addHeapObject(ret); 178 + }, 179 + __wbg_createTexture_5e721dc1ddd865e3: function(arg0) { 180 + const ret = getObject(arg0).createTexture(); 181 + return isLikeNone(ret) ? 0 : addHeapObject(ret); 182 + }, 183 + __wbg_createTexture_f1cc0c64fa9e22cf: function(arg0) { 184 + const ret = getObject(arg0).createTexture(); 185 + return isLikeNone(ret) ? 0 : addHeapObject(ret); 186 + }, 187 + __wbg_createVertexArrayOES_03fccccc43c10f77: function(arg0) { 188 + const ret = getObject(arg0).createVertexArrayOES(); 189 + return isLikeNone(ret) ? 0 : addHeapObject(ret); 190 + }, 191 + __wbg_createVertexArray_050d27763dfd72fa: function(arg0) { 192 + const ret = getObject(arg0).createVertexArray(); 193 + return isLikeNone(ret) ? 0 : addHeapObject(ret); 194 + }, 195 + __wbg_cullFace_632c5f88d252b4d7: function(arg0, arg1) { 196 + getObject(arg0).cullFace(arg1 >>> 0); 197 + }, 198 + __wbg_cullFace_962911677f1c30c6: function(arg0, arg1) { 199 + getObject(arg0).cullFace(arg1 >>> 0); 200 + }, 201 + __wbg_data_5fc79a19e47d1531: function(arg0) { 202 + const ret = getObject(arg0).data; 203 + return addHeapObject(ret); 204 + }, 205 + __wbg_deleteBuffer_5c5c23d034945b7c: function(arg0, arg1) { 206 + getObject(arg0).deleteBuffer(getObject(arg1)); 207 + }, 208 + __wbg_deleteBuffer_dd1d6f71883058cb: function(arg0, arg1) { 209 + getObject(arg0).deleteBuffer(getObject(arg1)); 210 + }, 211 + __wbg_deleteFramebuffer_4d8be9eb882b0525: function(arg0, arg1) { 212 + getObject(arg0).deleteFramebuffer(getObject(arg1)); 213 + }, 214 + __wbg_deleteFramebuffer_712016837ba2592e: function(arg0, arg1) { 215 + getObject(arg0).deleteFramebuffer(getObject(arg1)); 216 + }, 217 + __wbg_deleteProgram_35e4ff7b82f1c4d5: function(arg0, arg1) { 218 + getObject(arg0).deleteProgram(getObject(arg1)); 219 + }, 220 + __wbg_deleteProgram_771559436a63e7c1: function(arg0, arg1) { 221 + getObject(arg0).deleteProgram(getObject(arg1)); 222 + }, 223 + __wbg_deleteShader_5f66fd162cd9b6b4: function(arg0, arg1) { 224 + getObject(arg0).deleteShader(getObject(arg1)); 225 + }, 226 + __wbg_deleteShader_718c5020e3d4f188: function(arg0, arg1) { 227 + getObject(arg0).deleteShader(getObject(arg1)); 228 + }, 229 + __wbg_deleteTexture_3472fc261bb7ff34: function(arg0, arg1) { 230 + getObject(arg0).deleteTexture(getObject(arg1)); 231 + }, 232 + __wbg_deleteTexture_6990124dfb5053bd: function(arg0, arg1) { 233 + getObject(arg0).deleteTexture(getObject(arg1)); 234 + }, 235 + __wbg_depthFunc_11c361d188403f52: function(arg0, arg1) { 236 + getObject(arg0).depthFunc(arg1 >>> 0); 237 + }, 238 + __wbg_depthFunc_cd5ad66da02ddb7c: function(arg0, arg1) { 239 + getObject(arg0).depthFunc(arg1 >>> 0); 240 + }, 241 + __wbg_depthMask_a00e4725581ef05d: function(arg0, arg1) { 242 + getObject(arg0).depthMask(arg1 !== 0); 243 + }, 244 + __wbg_depthMask_e15ec83686756c88: function(arg0, arg1) { 245 + getObject(arg0).depthMask(arg1 !== 0); 246 + }, 247 + __wbg_detachShader_0cf2576dd1e49a5f: function(arg0, arg1, arg2) { 248 + getObject(arg0).detachShader(getObject(arg1), getObject(arg2)); 249 + }, 250 + __wbg_detachShader_15a6f9ca34bfe46c: function(arg0, arg1, arg2) { 251 + getObject(arg0).detachShader(getObject(arg1), getObject(arg2)); 252 + }, 253 + __wbg_disableVertexAttribArray_18b9a9fe235412a1: function(arg0, arg1) { 254 + getObject(arg0).disableVertexAttribArray(arg1 >>> 0); 255 + }, 256 + __wbg_disableVertexAttribArray_40a8f7d4d882728e: function(arg0, arg1) { 257 + getObject(arg0).disableVertexAttribArray(arg1 >>> 0); 258 + }, 259 + __wbg_disable_79f65722e686303b: function(arg0, arg1) { 260 + getObject(arg0).disable(arg1 >>> 0); 261 + }, 262 + __wbg_disable_df908054ffee7971: function(arg0, arg1) { 263 + getObject(arg0).disable(arg1 >>> 0); 264 + }, 265 + __wbg_drawArrays_7f9a3dcec5315ce5: function(arg0, arg1, arg2, arg3) { 266 + getObject(arg0).drawArrays(arg1 >>> 0, arg2, arg3); 267 + }, 268 + __wbg_drawArrays_bceea06128f9d778: function(arg0, arg1, arg2, arg3) { 269 + getObject(arg0).drawArrays(arg1 >>> 0, arg2, arg3); 270 + }, 271 + __wbg_drawBuffersWEBGL_5fbba2b83de4c122: function(arg0, arg1) { 272 + getObject(arg0).drawBuffersWEBGL(getObject(arg1)); 273 + }, 274 + __wbg_drawBuffers_217bd25bf75ccebd: function(arg0, arg1) { 275 + getObject(arg0).drawBuffers(getObject(arg1)); 276 + }, 277 + __wbg_drawElements_69e901574ef317ef: function(arg0, arg1, arg2, arg3, arg4) { 278 + getObject(arg0).drawElements(arg1 >>> 0, arg2, arg3 >>> 0, arg4); 279 + }, 280 + __wbg_drawElements_9ae0feb8483a946c: function(arg0, arg1, arg2, arg3, arg4) { 281 + getObject(arg0).drawElements(arg1 >>> 0, arg2, arg3 >>> 0, arg4); 282 + }, 283 + __wbg_enableVertexAttribArray_9963bb377f60317c: function(arg0, arg1) { 284 + getObject(arg0).enableVertexAttribArray(arg1 >>> 0); 285 + }, 286 + __wbg_enableVertexAttribArray_9e6e81b8b603d999: function(arg0, arg1) { 287 + getObject(arg0).enableVertexAttribArray(arg1 >>> 0); 288 + }, 289 + __wbg_enable_5c8f846164bc8138: function(arg0, arg1) { 290 + getObject(arg0).enable(arg1 >>> 0); 291 + }, 292 + __wbg_enable_ee1b63abdc3fdeb5: function(arg0, arg1) { 293 + getObject(arg0).enable(arg1 >>> 0); 294 + }, 295 + __wbg_error_a6fa202b58aa1cd3: function(arg0, arg1) { 296 + let deferred0_0; 297 + let deferred0_1; 298 + try { 299 + deferred0_0 = arg0; 300 + deferred0_1 = arg1; 301 + console.error(getStringFromWasm0(arg0, arg1)); 302 + } finally { 303 + wasm.__wbindgen_export4(deferred0_0, deferred0_1, 1); 304 + } 305 + }, 306 + __wbg_framebufferRenderbuffer_49b9288b6a7b5629: function(arg0, arg1, arg2, arg3, arg4) { 307 + getObject(arg0).framebufferRenderbuffer(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, getObject(arg4)); 308 + }, 309 + __wbg_framebufferRenderbuffer_9417c925d5389962: function(arg0, arg1, arg2, arg3, arg4) { 310 + getObject(arg0).framebufferRenderbuffer(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, getObject(arg4)); 311 + }, 312 + __wbg_framebufferTexture2D_8882fef6f47df627: function(arg0, arg1, arg2, arg3, arg4, arg5) { 313 + getObject(arg0).framebufferTexture2D(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, getObject(arg4), arg5); 314 + }, 315 + __wbg_framebufferTexture2D_91e307404924ae24: function(arg0, arg1, arg2, arg3, arg4, arg5) { 316 + getObject(arg0).framebufferTexture2D(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, getObject(arg4), arg5); 317 + }, 318 + __wbg_framebufferTextureLayer_8256c57e84c45762: function(arg0, arg1, arg2, arg3, arg4, arg5) { 319 + getObject(arg0).framebufferTextureLayer(arg1 >>> 0, arg2 >>> 0, getObject(arg3), arg4, arg5); 320 + }, 321 + __wbg_generateMipmap_606b9590a2f77744: function(arg0, arg1) { 322 + getObject(arg0).generateMipmap(arg1 >>> 0); 323 + }, 324 + __wbg_generateMipmap_b60cd426be3aaf8c: function(arg0, arg1) { 325 + getObject(arg0).generateMipmap(arg1 >>> 0); 326 + }, 327 + __wbg_getActiveAttrib_69b71611f161f7df: function(arg0, arg1, arg2) { 328 + const ret = getObject(arg0).getActiveAttrib(getObject(arg1), arg2 >>> 0); 329 + return isLikeNone(ret) ? 0 : addHeapObject(ret); 330 + }, 331 + __wbg_getActiveAttrib_ba237aa22cccf114: function(arg0, arg1, arg2) { 332 + const ret = getObject(arg0).getActiveAttrib(getObject(arg1), arg2 >>> 0); 333 + return isLikeNone(ret) ? 0 : addHeapObject(ret); 334 + }, 335 + __wbg_getActiveUniform_42e28f659f4f0f29: function(arg0, arg1, arg2) { 336 + const ret = getObject(arg0).getActiveUniform(getObject(arg1), arg2 >>> 0); 337 + return isLikeNone(ret) ? 0 : addHeapObject(ret); 338 + }, 339 + __wbg_getActiveUniform_ece79c87f500baa5: function(arg0, arg1, arg2) { 340 + const ret = getObject(arg0).getActiveUniform(getObject(arg1), arg2 >>> 0); 341 + return isLikeNone(ret) ? 0 : addHeapObject(ret); 342 + }, 343 + __wbg_getAttribLocation_7386be18a8dae70f: function(arg0, arg1, arg2, arg3) { 344 + const ret = getObject(arg0).getAttribLocation(getObject(arg1), getStringFromWasm0(arg2, arg3)); 345 + return ret; 346 + }, 347 + __wbg_getAttribLocation_e19fd7c174e55500: function(arg0, arg1, arg2, arg3) { 348 + const ret = getObject(arg0).getAttribLocation(getObject(arg1), getStringFromWasm0(arg2, arg3)); 349 + return ret; 350 + }, 351 + __wbg_getContext_50a6668bd78d1120: function() { return handleError(function (arg0, arg1, arg2, arg3) { 352 + const ret = getObject(arg0).getContext(getStringFromWasm0(arg1, arg2), getObject(arg3)); 353 + return isLikeNone(ret) ? 0 : addHeapObject(ret); 354 + }, arguments); }, 355 + __wbg_getExtension_c76ccfc25e343ce6: function() { return handleError(function (arg0, arg1, arg2) { 356 + const ret = getObject(arg0).getExtension(getStringFromWasm0(arg1, arg2)); 357 + return isLikeNone(ret) ? 0 : addHeapObject(ret); 358 + }, arguments); }, 359 + __wbg_getParameter_5f25c05c9a0f445a: function() { return handleError(function (arg0, arg1) { 360 + const ret = getObject(arg0).getParameter(arg1 >>> 0); 361 + return addHeapObject(ret); 362 + }, arguments); }, 363 + __wbg_getParameter_827c3142b1ce3364: function() { return handleError(function (arg0, arg1) { 364 + const ret = getObject(arg0).getParameter(arg1 >>> 0); 365 + return addHeapObject(ret); 366 + }, arguments); }, 367 + __wbg_getProgramInfoLog_6d6e22f0179f1acf: function(arg0, arg1, arg2) { 368 + const ret = getObject(arg1).getProgramInfoLog(getObject(arg2)); 369 + var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2); 370 + var len1 = WASM_VECTOR_LEN; 371 + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); 372 + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); 373 + }, 374 + __wbg_getProgramInfoLog_e2fe4bdd00a597bc: function(arg0, arg1, arg2) { 375 + const ret = getObject(arg1).getProgramInfoLog(getObject(arg2)); 376 + var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2); 377 + var len1 = WASM_VECTOR_LEN; 378 + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); 379 + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); 380 + }, 381 + __wbg_getProgramParameter_6927dedbc507dfc7: function(arg0, arg1, arg2) { 382 + const ret = getObject(arg0).getProgramParameter(getObject(arg1), arg2 >>> 0); 383 + return addHeapObject(ret); 384 + }, 385 + __wbg_getProgramParameter_c7abe52a31622ce2: function(arg0, arg1, arg2) { 386 + const ret = getObject(arg0).getProgramParameter(getObject(arg1), arg2 >>> 0); 387 + return addHeapObject(ret); 388 + }, 389 + __wbg_getShaderInfoLog_246aba1bd0b04ad2: function(arg0, arg1, arg2) { 390 + const ret = getObject(arg1).getShaderInfoLog(getObject(arg2)); 391 + var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2); 392 + var len1 = WASM_VECTOR_LEN; 393 + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); 394 + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); 395 + }, 396 + __wbg_getShaderInfoLog_edfc45fd76ba8c81: function(arg0, arg1, arg2) { 397 + const ret = getObject(arg1).getShaderInfoLog(getObject(arg2)); 398 + var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2); 399 + var len1 = WASM_VECTOR_LEN; 400 + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); 401 + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); 402 + }, 403 + __wbg_getSupportedExtensions_76f42c1e788da832: function(arg0) { 404 + const ret = getObject(arg0).getSupportedExtensions(); 405 + return isLikeNone(ret) ? 0 : addHeapObject(ret); 406 + }, 407 + __wbg_getUniformLocation_1717b4ed42e2ccee: function(arg0, arg1, arg2, arg3) { 408 + const ret = getObject(arg0).getUniformLocation(getObject(arg1), getStringFromWasm0(arg2, arg3)); 409 + return isLikeNone(ret) ? 0 : addHeapObject(ret); 410 + }, 411 + __wbg_getUniformLocation_46373021b59d8832: function(arg0, arg1, arg2, arg3) { 412 + const ret = getObject(arg0).getUniformLocation(getObject(arg1), getStringFromWasm0(arg2, arg3)); 413 + return isLikeNone(ret) ? 0 : addHeapObject(ret); 414 + }, 415 + __wbg_get_dcf82ab8aad1a593: function() { return handleError(function (arg0, arg1) { 416 + const ret = Reflect.get(getObject(arg0), getObject(arg1)); 417 + return addHeapObject(ret); 418 + }, arguments); }, 419 + __wbg_get_unchecked_1dfe6d05ad91d9b7: function(arg0, arg1) { 420 + const ret = getObject(arg0)[arg1 >>> 0]; 421 + return addHeapObject(ret); 422 + }, 423 + __wbg_instanceof_Blob_ef93d187bbde5360: function(arg0) { 424 + let result; 425 + try { 426 + result = getObject(arg0) instanceof Blob; 427 + } catch (_) { 428 + result = false; 429 + } 430 + const ret = result; 431 + return ret; 432 + }, 433 + __wbg_instanceof_OffscreenCanvas_55f621c0555607ff: function(arg0) { 434 + let result; 435 + try { 436 + result = getObject(arg0) instanceof OffscreenCanvas; 437 + } catch (_) { 438 + result = false; 439 + } 440 + const ret = result; 441 + return ret; 442 + }, 443 + __wbg_instanceof_Promise_09012cfa9708520a: function(arg0) { 444 + let result; 445 + try { 446 + result = getObject(arg0) instanceof Promise; 447 + } catch (_) { 448 + result = false; 449 + } 450 + const ret = result; 451 + return ret; 452 + }, 453 + __wbg_instanceof_Response_ecfc823e8fb354e2: function(arg0) { 454 + let result; 455 + try { 456 + result = getObject(arg0) instanceof Response; 457 + } catch (_) { 458 + result = false; 459 + } 460 + const ret = result; 461 + return ret; 462 + }, 463 + __wbg_instanceof_Uint8Array_abd07d4bd221d50b: function(arg0) { 464 + let result; 465 + try { 466 + result = getObject(arg0) instanceof Uint8Array; 467 + } catch (_) { 468 + result = false; 469 + } 470 + const ret = result; 471 + return ret; 472 + }, 473 + __wbg_instanceof_WebGl2RenderingContext_419098f7bf88e87e: function(arg0) { 474 + let result; 475 + try { 476 + result = getObject(arg0) instanceof WebGL2RenderingContext; 477 + } catch (_) { 478 + result = false; 479 + } 480 + const ret = result; 481 + return ret; 482 + }, 483 + __wbg_length_2591a0f4f659a55c: function(arg0) { 484 + const ret = getObject(arg0).length; 485 + return ret; 486 + }, 487 + __wbg_length_56fcd3e2b7e0299d: function(arg0) { 488 + const ret = getObject(arg0).length; 489 + return ret; 490 + }, 491 + __wbg_linkProgram_7689cb555b14a359: function(arg0, arg1) { 492 + getObject(arg0).linkProgram(getObject(arg1)); 493 + }, 494 + __wbg_linkProgram_ec865896be2835c2: function(arg0, arg1) { 495 + getObject(arg0).linkProgram(getObject(arg1)); 496 + }, 497 + __wbg_log_0c201ade58bb55e1: function(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) { 498 + let deferred0_0; 499 + let deferred0_1; 500 + try { 501 + deferred0_0 = arg0; 502 + deferred0_1 = arg1; 503 + console.log(getStringFromWasm0(arg0, arg1), getStringFromWasm0(arg2, arg3), getStringFromWasm0(arg4, arg5), getStringFromWasm0(arg6, arg7)); 504 + } finally { 505 + wasm.__wbindgen_export4(deferred0_0, deferred0_1, 1); 506 + } 507 + }, 508 + __wbg_log_ce2c4456b290c5e7: function(arg0, arg1) { 509 + let deferred0_0; 510 + let deferred0_1; 511 + try { 512 + deferred0_0 = arg0; 513 + deferred0_1 = arg1; 514 + console.log(getStringFromWasm0(arg0, arg1)); 515 + } finally { 516 + wasm.__wbindgen_export4(deferred0_0, deferred0_1, 1); 517 + } 518 + }, 519 + __wbg_mark_b4d943f3bc2d2404: function(arg0, arg1) { 520 + performance.mark(getStringFromWasm0(arg0, arg1)); 521 + }, 522 + __wbg_measure_84362959e621a2c1: function() { return handleError(function (arg0, arg1, arg2, arg3) { 523 + let deferred0_0; 524 + let deferred0_1; 525 + let deferred1_0; 526 + let deferred1_1; 527 + try { 528 + deferred0_0 = arg0; 529 + deferred0_1 = arg1; 530 + deferred1_0 = arg2; 531 + deferred1_1 = arg3; 532 + performance.measure(getStringFromWasm0(arg0, arg1), getStringFromWasm0(arg2, arg3)); 533 + } finally { 534 + wasm.__wbindgen_export4(deferred0_0, deferred0_1, 1); 535 + wasm.__wbindgen_export4(deferred1_0, deferred1_1, 1); 536 + } 537 + }, arguments); }, 538 + __wbg_name_9e6af29fb7841d41: function(arg0, arg1) { 539 + const ret = getObject(arg1).name; 540 + const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2); 541 + const len1 = WASM_VECTOR_LEN; 542 + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); 543 + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); 544 + }, 545 + __wbg_new_02d162bc6cf02f60: function() { 546 + const ret = new Object(); 547 + return addHeapObject(ret); 548 + }, 549 + __wbg_new_227d7c05414eb861: function() { 550 + const ret = new Error(); 551 + return addHeapObject(ret); 552 + }, 553 + __wbg_new_310879b66b6e95e1: function() { 554 + const ret = new Array(); 555 + return addHeapObject(ret); 556 + }, 557 + __wbg_new_439823ec67f1ec48: function() { return handleError(function (arg0, arg1) { 558 + const ret = new OffscreenCanvas(arg0 >>> 0, arg1 >>> 0); 559 + return addHeapObject(ret); 560 + }, arguments); }, 561 + __wbg_new_7ddec6de44ff8f5d: function(arg0) { 562 + const ret = new Uint8Array(getObject(arg0)); 563 + return addHeapObject(ret); 564 + }, 565 + __wbg_new_from_slice_269e35316ed2d061: function(arg0, arg1) { 566 + const ret = new Uint8Array(getArrayU8FromWasm0(arg0, arg1)); 567 + return addHeapObject(ret); 568 + }, 569 + __wbg_new_with_str_and_init_ffe9977c986ea039: function() { return handleError(function (arg0, arg1, arg2) { 570 + const ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2)); 571 + return addHeapObject(ret); 572 + }, arguments); }, 573 + __wbg_of_d694dacacb7afa7f: function(arg0) { 574 + const ret = Array.of(getObject(arg0)); 575 + return addHeapObject(ret); 576 + }, 577 + __wbg_pixelStorei_06b86995306b01dc: function(arg0, arg1, arg2) { 578 + getObject(arg0).pixelStorei(arg1 >>> 0, arg2); 579 + }, 580 + __wbg_pixelStorei_171e6a6629fd9e3c: function(arg0, arg1, arg2) { 581 + getObject(arg0).pixelStorei(arg1 >>> 0, arg2); 582 + }, 583 + __wbg_postMessage_d6c0cb4a6e9bb3c2: function() { return handleError(function (arg0, arg1) { 584 + getObject(arg0).postMessage(getObject(arg1)); 585 + }, arguments); }, 586 + __wbg_prototypesetcall_5f9bdc8d75e07276: function(arg0, arg1, arg2) { 587 + Uint8Array.prototype.set.call(getArrayU8FromWasm0(arg0, arg1), getObject(arg2)); 588 + }, 589 + __wbg_push_b77c476b01548d0a: function(arg0, arg1) { 590 + const ret = getObject(arg0).push(getObject(arg1)); 591 + return ret; 592 + }, 593 + __wbg_queueMicrotask_78d584b53af520f5: function(arg0) { 594 + const ret = getObject(arg0).queueMicrotask; 595 + return addHeapObject(ret); 596 + }, 597 + __wbg_queueMicrotask_b39ea83c7f01971a: function(arg0) { 598 + queueMicrotask(getObject(arg0)); 599 + }, 600 + __wbg_requestAnimationFrame_c7b21cf87ac845c8: function() { return handleError(function (arg0, arg1) { 601 + const ret = getObject(arg0).requestAnimationFrame(getObject(arg1)); 602 + return ret; 603 + }, arguments); }, 604 + __wbg_resolve_d17db9352f5a220e: function(arg0) { 605 + const ret = Promise.resolve(getObject(arg0)); 606 + return addHeapObject(ret); 607 + }, 608 + __wbg_scissor_eefeb709a030fe62: function(arg0, arg1, arg2, arg3, arg4) { 609 + getObject(arg0).scissor(arg1, arg2, arg3, arg4); 610 + }, 611 + __wbg_scissor_ffbc9d8b3e5bb99b: function(arg0, arg1, arg2, arg3, arg4) { 612 + getObject(arg0).scissor(arg1, arg2, arg3, arg4); 613 + }, 614 + __wbg_setTimeout_a2b48e67340623fd: function() { return handleError(function (arg0, arg1, arg2) { 615 + const ret = getObject(arg0).setTimeout(getObject(arg1), arg2); 616 + return ret; 617 + }, arguments); }, 618 + __wbg_set_a0e911be3da02782: function() { return handleError(function (arg0, arg1, arg2) { 619 + const ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2)); 620 + return ret; 621 + }, arguments); }, 622 + __wbg_set_height_bb0dc35fd1d941f5: function(arg0, arg1) { 623 + getObject(arg0).height = arg1 >>> 0; 624 + }, 625 + __wbg_set_method_4d69a1a7e34c0aca: function(arg0, arg1, arg2) { 626 + getObject(arg0).method = getStringFromWasm0(arg1, arg2); 627 + }, 628 + __wbg_set_mode_dfc59bbbe25b1d14: function(arg0, arg1) { 629 + getObject(arg0).mode = __wbindgen_enum_RequestMode[arg1]; 630 + }, 631 + __wbg_set_onmessage_c767f40c3874bffb: function(arg0, arg1) { 632 + getObject(arg0).onmessage = getObject(arg1); 633 + }, 634 + __wbg_set_width_9d385df435c1f79d: function(arg0, arg1) { 635 + getObject(arg0).width = arg1 >>> 0; 636 + }, 637 + __wbg_shaderSource_a304cd4ebd95c11b: function(arg0, arg1, arg2, arg3) { 638 + getObject(arg0).shaderSource(getObject(arg1), getStringFromWasm0(arg2, arg3)); 639 + }, 640 + __wbg_shaderSource_eceb56c4b827824d: function(arg0, arg1, arg2, arg3) { 641 + getObject(arg0).shaderSource(getObject(arg1), getStringFromWasm0(arg2, arg3)); 642 + }, 643 + __wbg_size_afefa5f0e6ecbd5a: function(arg0) { 644 + const ret = getObject(arg0).size; 645 + return ret; 646 + }, 647 + __wbg_stack_3b0d974bbf31e44f: function(arg0, arg1) { 648 + const ret = getObject(arg1).stack; 649 + const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2); 650 + const len1 = WASM_VECTOR_LEN; 651 + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); 652 + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); 653 + }, 654 + __wbg_static_accessor_GLOBAL_THIS_02344c9b09eb08a9: function() { 655 + const ret = typeof globalThis === 'undefined' ? null : globalThis; 656 + return isLikeNone(ret) ? 0 : addHeapObject(ret); 657 + }, 658 + __wbg_static_accessor_GLOBAL_ac6d4ac874d5cd54: function() { 659 + const ret = typeof global === 'undefined' ? null : global; 660 + return isLikeNone(ret) ? 0 : addHeapObject(ret); 661 + }, 662 + __wbg_static_accessor_SELF_9b2406c23aeb2023: function() { 663 + const ret = typeof self === 'undefined' ? null : self; 664 + return isLikeNone(ret) ? 0 : addHeapObject(ret); 665 + }, 666 + __wbg_static_accessor_WINDOW_b34d2126934e16ba: function() { 667 + const ret = typeof window === 'undefined' ? null : window; 668 + return isLikeNone(ret) ? 0 : addHeapObject(ret); 669 + }, 670 + __wbg_texParameteri_2ef5b781bcfbdd64: function(arg0, arg1, arg2, arg3) { 671 + getObject(arg0).texParameteri(arg1 >>> 0, arg2 >>> 0, arg3); 672 + }, 673 + __wbg_texParameteri_c22838926a5dca2b: function(arg0, arg1, arg2, arg3) { 674 + getObject(arg0).texParameteri(arg1 >>> 0, arg2 >>> 0, arg3); 675 + }, 676 + __wbg_texStorage2D_afb762382f8a4678: function(arg0, arg1, arg2, arg3, arg4, arg5) { 677 + getObject(arg0).texStorage2D(arg1 >>> 0, arg2, arg3 >>> 0, arg4, arg5); 678 + }, 679 + __wbg_texSubImage2D_203ff6bcf48e4d08: function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) { 680 + getObject(arg0).texSubImage2D(arg1 >>> 0, arg2, arg3, arg4, arg5, arg6, arg7 >>> 0, arg8 >>> 0, arg9); 681 + }, arguments); }, 682 + __wbg_texSubImage2D_781892a0e05abd13: function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) { 683 + getObject(arg0).texSubImage2D(arg1 >>> 0, arg2, arg3, arg4, arg5, arg6, arg7 >>> 0, arg8 >>> 0, getObject(arg9)); 684 + }, arguments); }, 685 + __wbg_texSubImage2D_e1be0f65e9a35343: function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) { 686 + getObject(arg0).texSubImage2D(arg1 >>> 0, arg2, arg3, arg4, arg5, arg6, arg7 >>> 0, arg8 >>> 0, getObject(arg9)); 687 + }, arguments); }, 688 + __wbg_then_837494e384b37459: function(arg0, arg1) { 689 + const ret = getObject(arg0).then(getObject(arg1)); 690 + return addHeapObject(ret); 691 + }, 692 + __wbg_then_bd927500e8905df2: function(arg0, arg1, arg2) { 693 + const ret = getObject(arg0).then(getObject(arg1), getObject(arg2)); 694 + return addHeapObject(ret); 695 + }, 696 + __wbg_type_af9fba80b2f7d669: function(arg0) { 697 + const ret = getObject(arg0).type; 698 + return ret; 699 + }, 700 + __wbg_uniform1fv_0f4ef61a14727a2d: function(arg0, arg1, arg2, arg3) { 701 + getObject(arg0).uniform1fv(getObject(arg1), getArrayF32FromWasm0(arg2, arg3)); 702 + }, 703 + __wbg_uniform1fv_b8b9393d15363f86: function(arg0, arg1, arg2, arg3) { 704 + getObject(arg0).uniform1fv(getObject(arg1), getArrayF32FromWasm0(arg2, arg3)); 705 + }, 706 + __wbg_uniform1iv_b887601b7605ab55: function(arg0, arg1, arg2, arg3) { 707 + getObject(arg0).uniform1iv(getObject(arg1), getArrayI32FromWasm0(arg2, arg3)); 708 + }, 709 + __wbg_uniform1iv_fecc70859eaa9a2f: function(arg0, arg1, arg2, arg3) { 710 + getObject(arg0).uniform1iv(getObject(arg1), getArrayI32FromWasm0(arg2, arg3)); 711 + }, 712 + __wbg_uniform1uiv_248f9283e919acb7: function(arg0, arg1, arg2, arg3) { 713 + getObject(arg0).uniform1uiv(getObject(arg1), getArrayU32FromWasm0(arg2, arg3)); 714 + }, 715 + __wbg_uniform3fv_2fb5418c1304ba72: function(arg0, arg1, arg2, arg3) { 716 + getObject(arg0).uniform3fv(getObject(arg1), getArrayF32FromWasm0(arg2, arg3)); 717 + }, 718 + __wbg_uniform3fv_7c2935b7f05414ef: function(arg0, arg1, arg2, arg3) { 719 + getObject(arg0).uniform3fv(getObject(arg1), getArrayF32FromWasm0(arg2, arg3)); 720 + }, 721 + __wbg_uniform4fv_622c64d35acf9214: function(arg0, arg1, arg2, arg3) { 722 + getObject(arg0).uniform4fv(getObject(arg1), getArrayF32FromWasm0(arg2, arg3)); 723 + }, 724 + __wbg_uniform4fv_b0c5721b35cd3f06: function(arg0, arg1, arg2, arg3) { 725 + getObject(arg0).uniform4fv(getObject(arg1), getArrayF32FromWasm0(arg2, arg3)); 726 + }, 727 + __wbg_uniformMatrix3fv_6abd62dbed68830a: function(arg0, arg1, arg2, arg3, arg4) { 728 + getObject(arg0).uniformMatrix3fv(getObject(arg1), arg2 !== 0, getArrayF32FromWasm0(arg3, arg4)); 729 + }, 730 + __wbg_uniformMatrix3fv_e380a7aa532c175a: function(arg0, arg1, arg2, arg3, arg4) { 731 + getObject(arg0).uniformMatrix3fv(getObject(arg1), arg2 !== 0, getArrayF32FromWasm0(arg3, arg4)); 732 + }, 733 + __wbg_uniformMatrix4fv_b5f678dc15314524: function(arg0, arg1, arg2, arg3, arg4) { 734 + getObject(arg0).uniformMatrix4fv(getObject(arg1), arg2 !== 0, getArrayF32FromWasm0(arg3, arg4)); 735 + }, 736 + __wbg_uniformMatrix4fv_d2b5005a92d27115: function(arg0, arg1, arg2, arg3, arg4) { 737 + getObject(arg0).uniformMatrix4fv(getObject(arg1), arg2 !== 0, getArrayF32FromWasm0(arg3, arg4)); 738 + }, 739 + __wbg_useProgram_3cc1a6d58dac88b4: function(arg0, arg1) { 740 + getObject(arg0).useProgram(getObject(arg1)); 741 + }, 742 + __wbg_useProgram_e45f506b921ab3f8: function(arg0, arg1) { 743 + getObject(arg0).useProgram(getObject(arg1)); 744 + }, 745 + __wbg_vertexAttribDivisorANGLE_47b6b82921bbf062: function(arg0, arg1, arg2) { 746 + getObject(arg0).vertexAttribDivisorANGLE(arg1 >>> 0, arg2 >>> 0); 747 + }, 748 + __wbg_vertexAttribDivisor_74454522a4976fc2: function(arg0, arg1, arg2) { 749 + getObject(arg0).vertexAttribDivisor(arg1 >>> 0, arg2 >>> 0); 750 + }, 751 + __wbg_vertexAttribPointer_7f7185558bcaf24b: function(arg0, arg1, arg2, arg3, arg4, arg5, arg6) { 752 + getObject(arg0).vertexAttribPointer(arg1 >>> 0, arg2, arg3 >>> 0, arg4 !== 0, arg5, arg6); 753 + }, 754 + __wbg_vertexAttribPointer_85566c79cb366300: function(arg0, arg1, arg2, arg3, arg4, arg5, arg6) { 755 + getObject(arg0).vertexAttribPointer(arg1 >>> 0, arg2, arg3 >>> 0, arg4 !== 0, arg5, arg6); 756 + }, 757 + __wbg_viewport_3c149d0c6435f0ed: function(arg0, arg1, arg2, arg3, arg4) { 758 + getObject(arg0).viewport(arg1, arg2, arg3, arg4); 759 + }, 760 + __wbg_viewport_c25030cfbe3cddf4: function(arg0, arg1, arg2, arg3, arg4) { 761 + getObject(arg0).viewport(arg1, arg2, arg3, arg4); 762 + }, 763 + __wbindgen_cast_0000000000000001: function(arg0, arg1) { 764 + // 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`. 765 + const ret = makeMutClosure(arg0, arg1, __wasm_bindgen_func_elem_1888); 766 + return addHeapObject(ret); 767 + }, 768 + __wbindgen_cast_0000000000000002: function(arg0, arg1) { 769 + // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [NamedExternref("MessageEvent")], shim_idx: 15, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`. 770 + const ret = makeMutClosure(arg0, arg1, __wasm_bindgen_func_elem_376); 771 + return addHeapObject(ret); 772 + }, 773 + __wbindgen_cast_0000000000000003: function(arg0, arg1) { 774 + // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [], shim_idx: 17, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`. 775 + const ret = makeMutClosure(arg0, arg1, __wasm_bindgen_func_elem_381); 776 + return addHeapObject(ret); 777 + }, 778 + __wbindgen_cast_0000000000000004: function(arg0) { 779 + // Cast intrinsic for `F64 -> Externref`. 780 + const ret = arg0; 781 + return addHeapObject(ret); 782 + }, 783 + __wbindgen_cast_0000000000000005: function(arg0, arg1) { 784 + // Cast intrinsic for `Ref(Slice(F32)) -> NamedExternref("Float32Array")`. 785 + const ret = getArrayF32FromWasm0(arg0, arg1); 786 + return addHeapObject(ret); 787 + }, 788 + __wbindgen_cast_0000000000000006: function(arg0, arg1) { 789 + // Cast intrinsic for `Ref(Slice(I16)) -> NamedExternref("Int16Array")`. 790 + const ret = getArrayI16FromWasm0(arg0, arg1); 791 + return addHeapObject(ret); 792 + }, 793 + __wbindgen_cast_0000000000000007: function(arg0, arg1) { 794 + // Cast intrinsic for `Ref(Slice(I32)) -> NamedExternref("Int32Array")`. 795 + const ret = getArrayI32FromWasm0(arg0, arg1); 796 + return addHeapObject(ret); 797 + }, 798 + __wbindgen_cast_0000000000000008: function(arg0, arg1) { 799 + // Cast intrinsic for `Ref(Slice(U16)) -> NamedExternref("Uint16Array")`. 800 + const ret = getArrayU16FromWasm0(arg0, arg1); 801 + return addHeapObject(ret); 802 + }, 803 + __wbindgen_cast_0000000000000009: function(arg0, arg1) { 804 + // Cast intrinsic for `Ref(Slice(U32)) -> NamedExternref("Uint32Array")`. 805 + const ret = getArrayU32FromWasm0(arg0, arg1); 806 + return addHeapObject(ret); 807 + }, 808 + __wbindgen_cast_000000000000000a: function(arg0, arg1) { 809 + // Cast intrinsic for `Ref(Slice(U8)) -> NamedExternref("Uint8Array")`. 810 + const ret = getArrayU8FromWasm0(arg0, arg1); 811 + return addHeapObject(ret); 812 + }, 813 + __wbindgen_cast_000000000000000b: function(arg0, arg1) { 814 + // Cast intrinsic for `Ref(String) -> Externref`. 815 + const ret = getStringFromWasm0(arg0, arg1); 816 + return addHeapObject(ret); 817 + }, 818 + __wbindgen_object_clone_ref: function(arg0) { 819 + const ret = getObject(arg0); 820 + return addHeapObject(ret); 821 + }, 822 + __wbindgen_object_drop_ref: function(arg0) { 823 + takeObject(arg0); 824 + }, 825 + }; 826 + return { 827 + __proto__: null, 828 + "./renderer_worker_bg.js": import0, 829 + }; 830 + } 831 + 832 + function __wasm_bindgen_func_elem_381(arg0, arg1) { 833 + wasm.__wasm_bindgen_func_elem_381(arg0, arg1); 834 + } 835 + 836 + function __wasm_bindgen_func_elem_376(arg0, arg1, arg2) { 837 + wasm.__wasm_bindgen_func_elem_376(arg0, arg1, addHeapObject(arg2)); 838 + } 839 + 840 + function __wasm_bindgen_func_elem_1888(arg0, arg1, arg2) { 841 + try { 842 + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); 843 + wasm.__wasm_bindgen_func_elem_1888(retptr, arg0, arg1, addHeapObject(arg2)); 844 + var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); 845 + var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); 846 + if (r1) { 847 + throw takeObject(r0); 848 + } 849 + } finally { 850 + wasm.__wbindgen_add_to_stack_pointer(16); 851 + } 852 + } 853 + 854 + 855 + const __wbindgen_enum_RequestMode = ["same-origin", "no-cors", "cors", "navigate"]; 856 + 857 + function addHeapObject(obj) { 858 + if (heap_next === heap.length) heap.push(heap.length + 1); 859 + const idx = heap_next; 860 + heap_next = heap[idx]; 861 + 862 + heap[idx] = obj; 863 + return idx; 864 + } 865 + 866 + const CLOSURE_DTORS = (typeof FinalizationRegistry === 'undefined') 867 + ? { register: () => {}, unregister: () => {} } 868 + : new FinalizationRegistry(state => wasm.__wbindgen_export5(state.a, state.b)); 869 + 870 + function debugString(val) { 871 + // primitive types 872 + const type = typeof val; 873 + if (type == 'number' || type == 'boolean' || val == null) { 874 + return `${val}`; 875 + } 876 + if (type == 'string') { 877 + return `"${val}"`; 878 + } 879 + if (type == 'symbol') { 880 + const description = val.description; 881 + if (description == null) { 882 + return 'Symbol'; 883 + } else { 884 + return `Symbol(${description})`; 885 + } 886 + } 887 + if (type == 'function') { 888 + const name = val.name; 889 + if (typeof name == 'string' && name.length > 0) { 890 + return `Function(${name})`; 891 + } else { 892 + return 'Function'; 893 + } 894 + } 895 + // objects 896 + if (Array.isArray(val)) { 897 + const length = val.length; 898 + let debug = '['; 899 + if (length > 0) { 900 + debug += debugString(val[0]); 901 + } 902 + for(let i = 1; i < length; i++) { 903 + debug += ', ' + debugString(val[i]); 904 + } 905 + debug += ']'; 906 + return debug; 907 + } 908 + // Test for built-in 909 + const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); 910 + let className; 911 + if (builtInMatches && builtInMatches.length > 1) { 912 + className = builtInMatches[1]; 913 + } else { 914 + // Failed to match the standard '[object ClassName]' 915 + return toString.call(val); 916 + } 917 + if (className == 'Object') { 918 + // we're a user defined class or Object 919 + // JSON.stringify avoids problems with cycles, and is generally much 920 + // easier than looping through ownProperties of `val`. 921 + try { 922 + return 'Object(' + JSON.stringify(val) + ')'; 923 + } catch (_) { 924 + return 'Object'; 925 + } 926 + } 927 + // errors 928 + if (val instanceof Error) { 929 + return `${val.name}: ${val.message}\n${val.stack}`; 930 + } 931 + // TODO we could test for more things here, like `Set`s and `Map`s. 932 + return className; 933 + } 934 + 935 + function dropObject(idx) { 936 + if (idx < 1028) return; 937 + heap[idx] = heap_next; 938 + heap_next = idx; 939 + } 940 + 941 + function getArrayF32FromWasm0(ptr, len) { 942 + ptr = ptr >>> 0; 943 + return getFloat32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len); 944 + } 945 + 946 + function getArrayI16FromWasm0(ptr, len) { 947 + ptr = ptr >>> 0; 948 + return getInt16ArrayMemory0().subarray(ptr / 2, ptr / 2 + len); 949 + } 950 + 951 + function getArrayI32FromWasm0(ptr, len) { 952 + ptr = ptr >>> 0; 953 + return getInt32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len); 954 + } 955 + 956 + function getArrayU16FromWasm0(ptr, len) { 957 + ptr = ptr >>> 0; 958 + return getUint16ArrayMemory0().subarray(ptr / 2, ptr / 2 + len); 959 + } 960 + 961 + function getArrayU32FromWasm0(ptr, len) { 962 + ptr = ptr >>> 0; 963 + return getUint32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len); 964 + } 965 + 966 + function getArrayU8FromWasm0(ptr, len) { 967 + ptr = ptr >>> 0; 968 + return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len); 969 + } 970 + 971 + let cachedDataViewMemory0 = null; 972 + function getDataViewMemory0() { 973 + if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) { 974 + cachedDataViewMemory0 = new DataView(wasm.memory.buffer); 975 + } 976 + return cachedDataViewMemory0; 977 + } 978 + 979 + let cachedFloat32ArrayMemory0 = null; 980 + function getFloat32ArrayMemory0() { 981 + if (cachedFloat32ArrayMemory0 === null || cachedFloat32ArrayMemory0.byteLength === 0) { 982 + cachedFloat32ArrayMemory0 = new Float32Array(wasm.memory.buffer); 983 + } 984 + return cachedFloat32ArrayMemory0; 985 + } 986 + 987 + let cachedInt16ArrayMemory0 = null; 988 + function getInt16ArrayMemory0() { 989 + if (cachedInt16ArrayMemory0 === null || cachedInt16ArrayMemory0.byteLength === 0) { 990 + cachedInt16ArrayMemory0 = new Int16Array(wasm.memory.buffer); 991 + } 992 + return cachedInt16ArrayMemory0; 993 + } 994 + 995 + let cachedInt32ArrayMemory0 = null; 996 + function getInt32ArrayMemory0() { 997 + if (cachedInt32ArrayMemory0 === null || cachedInt32ArrayMemory0.byteLength === 0) { 998 + cachedInt32ArrayMemory0 = new Int32Array(wasm.memory.buffer); 999 + } 1000 + return cachedInt32ArrayMemory0; 1001 + } 1002 + 1003 + function getStringFromWasm0(ptr, len) { 1004 + return decodeText(ptr >>> 0, len); 1005 + } 1006 + 1007 + let cachedUint16ArrayMemory0 = null; 1008 + function getUint16ArrayMemory0() { 1009 + if (cachedUint16ArrayMemory0 === null || cachedUint16ArrayMemory0.byteLength === 0) { 1010 + cachedUint16ArrayMemory0 = new Uint16Array(wasm.memory.buffer); 1011 + } 1012 + return cachedUint16ArrayMemory0; 1013 + } 1014 + 1015 + let cachedUint32ArrayMemory0 = null; 1016 + function getUint32ArrayMemory0() { 1017 + if (cachedUint32ArrayMemory0 === null || cachedUint32ArrayMemory0.byteLength === 0) { 1018 + cachedUint32ArrayMemory0 = new Uint32Array(wasm.memory.buffer); 1019 + } 1020 + return cachedUint32ArrayMemory0; 1021 + } 1022 + 1023 + let cachedUint8ArrayMemory0 = null; 1024 + function getUint8ArrayMemory0() { 1025 + if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { 1026 + cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); 1027 + } 1028 + return cachedUint8ArrayMemory0; 1029 + } 1030 + 1031 + function getObject(idx) { return heap[idx]; } 1032 + 1033 + function handleError(f, args) { 1034 + try { 1035 + return f.apply(this, args); 1036 + } catch (e) { 1037 + wasm.__wbindgen_export3(addHeapObject(e)); 1038 + } 1039 + } 1040 + 1041 + let heap = new Array(1024).fill(undefined); 1042 + heap.push(undefined, null, true, false); 1043 + 1044 + let heap_next = heap.length; 1045 + 1046 + function isLikeNone(x) { 1047 + return x === undefined || x === null; 1048 + } 1049 + 1050 + function makeMutClosure(arg0, arg1, f) { 1051 + const state = { a: arg0, b: arg1, cnt: 1 }; 1052 + const real = (...args) => { 1053 + 1054 + // First up with a closure we increment the internal reference 1055 + // count. This ensures that the Rust closure environment won't 1056 + // be deallocated while we're invoking it. 1057 + state.cnt++; 1058 + const a = state.a; 1059 + state.a = 0; 1060 + try { 1061 + return f(a, state.b, ...args); 1062 + } finally { 1063 + state.a = a; 1064 + real._wbg_cb_unref(); 1065 + } 1066 + }; 1067 + real._wbg_cb_unref = () => { 1068 + if (--state.cnt === 0) { 1069 + wasm.__wbindgen_export5(state.a, state.b); 1070 + state.a = 0; 1071 + CLOSURE_DTORS.unregister(state); 1072 + } 1073 + }; 1074 + CLOSURE_DTORS.register(real, state, state); 1075 + return real; 1076 + } 1077 + 1078 + function passStringToWasm0(arg, malloc, realloc) { 1079 + if (realloc === undefined) { 1080 + const buf = cachedTextEncoder.encode(arg); 1081 + const ptr = malloc(buf.length, 1) >>> 0; 1082 + getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf); 1083 + WASM_VECTOR_LEN = buf.length; 1084 + return ptr; 1085 + } 1086 + 1087 + let len = arg.length; 1088 + let ptr = malloc(len, 1) >>> 0; 1089 + 1090 + const mem = getUint8ArrayMemory0(); 1091 + 1092 + let offset = 0; 1093 + 1094 + for (; offset < len; offset++) { 1095 + const code = arg.charCodeAt(offset); 1096 + if (code > 0x7F) break; 1097 + mem[ptr + offset] = code; 1098 + } 1099 + if (offset !== len) { 1100 + if (offset !== 0) { 1101 + arg = arg.slice(offset); 1102 + } 1103 + ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; 1104 + const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len); 1105 + const ret = cachedTextEncoder.encodeInto(arg, view); 1106 + 1107 + offset += ret.written; 1108 + ptr = realloc(ptr, len, offset, 1) >>> 0; 1109 + } 1110 + 1111 + WASM_VECTOR_LEN = offset; 1112 + return ptr; 1113 + } 1114 + 1115 + function takeObject(idx) { 1116 + const ret = getObject(idx); 1117 + dropObject(idx); 1118 + return ret; 1119 + } 1120 + 1121 + let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); 1122 + cachedTextDecoder.decode(); 1123 + const MAX_SAFARI_DECODE_BYTES = 2146435072; 1124 + let numBytesDecoded = 0; 1125 + function decodeText(ptr, len) { 1126 + numBytesDecoded += len; 1127 + if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) { 1128 + cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); 1129 + cachedTextDecoder.decode(); 1130 + numBytesDecoded = len; 1131 + } 1132 + return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); 1133 + } 1134 + 1135 + const cachedTextEncoder = new TextEncoder(); 1136 + 1137 + if (!('encodeInto' in cachedTextEncoder)) { 1138 + cachedTextEncoder.encodeInto = function (arg, view) { 1139 + const buf = cachedTextEncoder.encode(arg); 1140 + view.set(buf); 1141 + return { 1142 + read: arg.length, 1143 + written: buf.length 1144 + }; 1145 + }; 1146 + } 1147 + 1148 + let WASM_VECTOR_LEN = 0; 1149 + 1150 + let wasmModule, wasmInstance, wasm; 1151 + function __wbg_finalize_init(instance, module) { 1152 + wasmInstance = instance; 1153 + wasm = instance.exports; 1154 + wasmModule = module; 1155 + cachedDataViewMemory0 = null; 1156 + cachedFloat32ArrayMemory0 = null; 1157 + cachedInt16ArrayMemory0 = null; 1158 + cachedInt32ArrayMemory0 = null; 1159 + cachedUint16ArrayMemory0 = null; 1160 + cachedUint32ArrayMemory0 = null; 1161 + cachedUint8ArrayMemory0 = null; 1162 + wasm.__wbindgen_start(); 1163 + return wasm; 1164 + } 1165 + 1166 + async function __wbg_load(module, imports) { 1167 + if (typeof Response === 'function' && module instanceof Response) { 1168 + if (typeof WebAssembly.instantiateStreaming === 'function') { 1169 + try { 1170 + return await WebAssembly.instantiateStreaming(module, imports); 1171 + } catch (e) { 1172 + const validResponse = module.ok && expectedResponseType(module.type); 1173 + 1174 + if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') { 1175 + 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); 1176 + 1177 + } else { throw e; } 1178 + } 1179 + } 1180 + 1181 + const bytes = await module.arrayBuffer(); 1182 + return await WebAssembly.instantiate(bytes, imports); 1183 + } else { 1184 + const instance = await WebAssembly.instantiate(module, imports); 1185 + 1186 + if (instance instanceof WebAssembly.Instance) { 1187 + return { instance, module }; 1188 + } else { 1189 + return instance; 1190 + } 1191 + } 1192 + 1193 + function expectedResponseType(type) { 1194 + switch (type) { 1195 + case 'basic': case 'cors': case 'default': return true; 1196 + } 1197 + return false; 1198 + } 1199 + } 1200 + 1201 + function initSync(module) { 1202 + if (wasm !== undefined) return wasm; 1203 + 1204 + 1205 + if (module !== undefined) { 1206 + if (Object.getPrototypeOf(module) === Object.prototype) { 1207 + ({module} = module) 1208 + } else { 1209 + console.warn('using deprecated parameters for `initSync()`; pass a single object instead') 1210 + } 1211 + } 1212 + 1213 + const imports = __wbg_get_imports(); 1214 + if (!(module instanceof WebAssembly.Module)) { 1215 + module = new WebAssembly.Module(module); 1216 + } 1217 + const instance = new WebAssembly.Instance(module, imports); 1218 + return __wbg_finalize_init(instance, module); 1219 + } 1220 + 1221 + async function __wbg_init(module_or_path) { 1222 + if (wasm !== undefined) return wasm; 1223 + 1224 + 1225 + if (module_or_path !== undefined) { 1226 + if (Object.getPrototypeOf(module_or_path) === Object.prototype) { 1227 + ({module_or_path} = module_or_path) 1228 + } else { 1229 + console.warn('using deprecated parameters for the initialization function; pass a single object instead') 1230 + } 1231 + } 1232 + 1233 + if (module_or_path === undefined) { 1234 + module_or_path = new URL('renderer_worker_bg.wasm', import.meta.url); 1235 + } 1236 + const imports = __wbg_get_imports(); 1237 + 1238 + if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) { 1239 + module_or_path = fetch(module_or_path); 1240 + } 1241 + 1242 + const { instance, module } = await __wbg_load(await module_or_path, imports); 1243 + 1244 + return __wbg_finalize_init(instance, module); 1245 + } 1246 + 1247 + export { initSync, __wbg_init as default };
public/renderer_worker_bg.wasm

This is a binary file and will not be displayed.

+4
public/vendor/opencascade/README.txt
··· 1 + Local OpenCascade.js STEP conversion artifacts. 2 + Generated by tools/renderer-step/build-and-stage-opencascade.mjs. 3 + Single-threaded build: no pthread sidecar and no cross-origin isolation requirement. 4 + Generated/ignored; do not commit.
+16
public/vendor/opencascade/opencascade.js
··· 1 + 2 + var Module = (() => { 3 + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; 4 + 5 + return ( 6 + function(Module) { 7 + Module = Module || {}; 8 + 9 + var Module=typeof Module!="undefined"?Module:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var POINTER_SIZE=4;var tempRet0=0;var setTempRet0=value=>{tempRet0=value};var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){idx>>>=0;var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=heapOrArray[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heapOrArray[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heapOrArray[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heapOrArray[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){ptr>>>=0;return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){outIdx>>>=0;if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++>>>0]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++>>>0]=192|u>>6;heap[outIdx++>>>0]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++>>>0]=224|u>>12;heap[outIdx++>>>0]=128|u>>6&63;heap[outIdx++>>>0]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++>>>0]=240|u>>18;heap[outIdx++>>>0]=128|u>>12&63;heap[outIdx++>>>0]=128|u>>6&63;heap[outIdx++>>>0]=128|u&63}}heap[outIdx>>>0]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf-16le"):undefined;function UTF16ToString(ptr,maxBytesToRead){var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx>>>0])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(HEAPU8.subarray(ptr>>>0,endPtr>>>0))}else{var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str}}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite<str.length*2?maxBytesToWrite/2:str.length;for(var i=0;i<numCharsToWrite;++i){var codeUnit=str.charCodeAt(i);HEAP16[outPtr>>>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){outPtr>>>=0;if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i<str.length;++i){var codeUnit=str.charCodeAt(i);if(codeUnit>=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i<str.length;++i){var codeUnit=str.charCodeAt(i);if(codeUnit>=55296&&codeUnit<=57343)++i;len+=4}return len}function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer>>>0)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>>0]=0}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||104857600;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function keepRuntimeAlive(){return noExitRuntime}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){{if(Module["onAbort"]){Module["onAbort"](what)}}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}var wasmBinaryFile;wasmBinaryFile="opencascade.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["qa"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["xa"];addOnInit(Module["asm"]["ra"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func=="number"){if(callback.arg===undefined){getWasmTableEntry(func)()}else{getWasmTableEntry(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___cxa_allocate_exception(size){return _malloc(size+24)+24}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24;this.set_type=function(type){HEAPU32[this.ptr+4>>>2]=type};this.get_type=function(){return HEAPU32[this.ptr+4>>>2]};this.set_destructor=function(destructor){HEAPU32[this.ptr+8>>>2]=destructor};this.get_destructor=function(){return HEAPU32[this.ptr+8>>>2]};this.set_refcount=function(refcount){HEAP32[this.ptr>>>2]=refcount};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>>0]!=0};this.init=function(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor);this.set_refcount(0);this.set_caught(false);this.set_rethrown(false)};this.add_ref=function(){var value=HEAP32[this.ptr>>>2];HEAP32[this.ptr>>>2]=value+1};this.release_ref=function(){var prev=HEAP32[this.ptr>>>2];HEAP32[this.ptr>>>2]=prev-1;return prev===1};this.set_adjusted_ptr=function(adjustedPtr){HEAPU32[this.ptr+16>>>2]=adjustedPtr};this.get_adjusted_ptr=function(){return HEAPU32[this.ptr+16>>>2]};this.get_exception_ptr=function(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return HEAPU32[this.excPtr>>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw ptr}var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:path=>{if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:(l,r)=>{return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function zeroMemory(address,size){HEAPU8.fill(0,address,address+size)}function alignMemory(size,alignment){return Math.ceil(size/alignment)*alignment}function mmapAlloc(size){size=alignMemory(size,65536);var ptr=_emscripten_builtin_memalign(65536,size);if(!ptr)return 0;zeroMemory(ptr,size);return ptr}var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){newCapacity>>>=0;var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)>>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage:function(node,newSize){newSize>>>=0;if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(buffer.buffer===HEAP8.buffer){canOwn=false}if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray){node.contents.set(buffer.subarray(offset,offset+length),position)}else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===buffer){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<contents.length){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}ptr>>>=0;HEAP8.set(contents,ptr>>>0)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};function asyncLoad(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";readAsync(url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)}var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:(path,opts={})=>{path=PATH_FS.resolve(FS.cwd(),path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(p=>!!p),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH_FS.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count+1});current=lookup.node;if(count++>40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:node=>{var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:(parentid,name)=>{var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length},hashAddNode:node=>{var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:node=>{var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:(parent,name)=>{var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:(parent,name,mode,rdev)=>{var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:node=>{FS.hashRemoveNode(node)},isRoot:node=>{return node===node.parent},isMountpoint:node=>{return!!node.mounted},isFile:mode=>{return(mode&61440)===32768},isDir:mode=>{return(mode&61440)===16384},isLink:mode=>{return(mode&61440)===40960},isChrdev:mode=>{return(mode&61440)===8192},isBlkdev:mode=>{return(mode&61440)===24576},isFIFO:mode=>{return(mode&61440)===4096},isSocket:mode=>{return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:str=>{var flags=FS.flagModes[str];if(typeof flags=="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:flag=>{var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:(node,perms)=>{if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup:dir=>{var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:(dir,name)=>{try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:(dir,name,isdir)=>{var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:(node,flags)=>{if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:(fd_start=0,fd_end=FS.MAX_OPEN_FDS)=>{for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:fd=>FS.streams[fd],createStream:(stream,fd_start,fd_end)=>{if(!FS.FSStream){FS.FSStream=function(){this.shared={}};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}},flags:{get:function(){return this.shared.flags},set:function(val){this.shared.flags=val}},position:{get:function(){return this.shared.position},set:function(val){this.shared.position=val}}})}stream=Object.assign(new FS.FSStream,stream);var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:fd=>{FS.streams[fd]=null},chrdev_stream_ops:{open:stream=>{var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:()=>{throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice:(dev,ops)=>{FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts:mount=>{var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:(populate,callback)=>{if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:(type,opts,mountpoint)=>{var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:mountpoint=>{var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:(parent,name)=>{return parent.node_ops.lookup(parent,name)},mknod:(path,mode,dev)=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:(path,mode)=>{mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:(path,mode)=>{mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:(path,mode)=>{var dirs=path.split("/");var d="";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev:(path,mode,dev)=>{if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:(oldpath,newpath)=>{if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:(old_path,new_path)=>{var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir:path=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(54)}return node.node_ops.readdir(node)},unlink:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink:path=>{var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return PATH_FS.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:(path,dontFollow)=>{var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(44)}if(!node.node_ops.getattr){throw new FS.ErrnoError(63)}return node.node_ops.getattr(node)},lstat:path=>{return FS.stat(path,true)},chmod:(path,mode,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:(path,mode)=>{FS.chmod(path,mode,true)},fchmod:(fd,mode)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:(path,uid,gid,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:(path,uid,gid)=>{FS.chown(path,uid,gid,true)},fchown:(fd,uid,gid)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:(path,len)=>{if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:(fd,len)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.truncate(stream.node,len)},utime:(path,atime,mtime)=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:(path,flags,mode)=>{if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode=="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path=="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close:stream=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:stream=>{return stream.fd===null},llseek:(stream,offset,whence)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:(stream,buffer,offset,length,position)=>{offset>>>=0;if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:(stream,buffer,offset,length,position,canOwn)=>{offset>>>=0;if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},allocate:(stream,offset,length)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(offset<0||length<=0){throw new FS.ErrnoError(28)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(43)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(138)}stream.stream_ops.allocate(stream,offset,length)},mmap:(stream,length,position,prot,flags)=>{if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync:(stream,buffer,offset,length,mmapFlags)=>{offset>>>=0;if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:stream=>0,ioctl:(stream,cmd,arg)=>{if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:(path,opts={})=>{opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:(path,data,opts={})=>{opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir:path=>{var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories:()=>{FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:()=>{FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:()=>{FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:()=>{var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:(parent,name)=>{var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:()=>{if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},ensureErrnoError:()=>{if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error"};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:()=>{FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:(input,output,error)=>{FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:()=>{FS.init.initialized=false;for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:(path,dontResolveLastLink)=>{var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{return null}},analyzePath:(path,dontResolveLastLink)=>{try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath:(parent,path,canRead,canWrite)=>{parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:(parent,name,properties,canRead,canWrite)=>{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:(parent,name,data,canRead,canWrite,canOwn)=>{var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:(parent,name,input,output)=>{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:stream=>{stream.seekable=false},close:stream=>{if(output&&output.buffer&&output.buffer.length){output(10)}},read:(stream,buffer,offset,length,pos)=>{var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:(stream,buffer,offset,length,pos)=>{for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},forceLoadFile:obj=>{if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(typeof XMLHttpRequest!="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(read_){try{obj.contents=intArrayFromString(read_(obj.url),true);obj.usedBytes=obj.contents.length}catch(e){throw new FS.ErrnoError(29)}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}},createLazyFile:(parent,name,url,canRead,canWrite)=>{function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size}stream_ops.read=(stream,buffer,offset,length,position)=>{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr:ptr,allocated:true}};node.stream_ops=stream_ops;return node},createPreloadedFile:(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency("cp "+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}if(Browser.handledByPreloadPlugin(byteArray,fullname,finish,()=>{if(onerror)onerror();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,byteArray=>processData(byteArray),onerror)}else{processData(url)}},indexedDB:()=>{return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:()=>{return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:(paths,onload,onerror)=>{onload=onload||(()=>{});onerror=onerror||(()=>{});var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=()=>{out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=()=>{var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(path=>{var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=()=>{ok++;if(ok+fail==total)finish()};putRequest.onerror=()=>{fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:(paths,onload,onerror)=>{onload=onload||(()=>{});onerror=onerror||(()=>{});var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=()=>{var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(path=>{var getRequest=files.get(path);getRequest.onsuccess=()=>{if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=()=>{fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt:function(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(8);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-54}throw e}HEAP32[buf>>>2]=stat.dev;HEAP32[buf+4>>>2]=0;HEAP32[buf+8>>>2]=stat.ino;HEAP32[buf+12>>>2]=stat.mode;HEAP32[buf+16>>>2]=stat.nlink;HEAP32[buf+20>>>2]=stat.uid;HEAP32[buf+24>>>2]=stat.gid;HEAP32[buf+28>>>2]=stat.rdev;HEAP32[buf+32>>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>>2]=tempI64[0],HEAP32[buf+44>>>2]=tempI64[1];HEAP32[buf+48>>>2]=4096;HEAP32[buf+52>>>2]=stat.blocks;HEAP32[buf+56>>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>>2]=0;HEAP32[buf+64>>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>>2]=0;HEAP32[buf+72>>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>>2]=tempI64[0],HEAP32[buf+84>>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream}};function ___syscall_chmod(path,mode){try{path=SYSCALLS.getStr(path);FS.chmod(path,mode);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_faccessat(dirfd,path,amode,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(amode&~7){return-28}var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function setErrNo(value){HEAP32[___errno_location()>>>2]=value;return value}function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.createStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 5:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>>1]=2;return 0}case 6:case 7:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_fstat64(fd,buf){try{var stream=SYSCALLS.getStreamFromFD(fd);return SYSCALLS.doStat(FS.stat,stream.path,buf)}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();HEAP32[argp>>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{if(!stream.tty)return-59;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_lstat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.lstat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_mkdirat(dirfd,path,mode){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_newfstatat(dirfd,path,buf,flags){try{path=SYSCALLS.getStr(path);var nofollow=flags&256;var allowEmpty=flags&4096;flags=flags&~4352;path=SYSCALLS.calculateAt(dirfd,path,allowEmpty);return SYSCALLS.doStat(nofollow?FS.lstat:FS.stat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?SYSCALLS.get():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_rmdir(path){try{path=SYSCALLS.getStr(path);FS.rmdir(path);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_stat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_unlinkat(dirfd,path,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(flags===0){FS.unlink(path)}else if(flags===512){FS.rmdir(path)}else{abort("Invalid flags passed to unlinkat")}return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function __embind_register_bigint(primitiveType,name,size,minRange,maxRange){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c>>>0]){ret+=embind_charCodes[HEAPU8[c++>>>0]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}return name}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n")(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i<myTypes.length;++i){registerType(myTypes[i],myTypeConverters[i])}}var typeConverters=new Array(dependentTypes.length);var unregisteredTypes=[];var registered=0;dependentTypes.forEach((dt,i)=>{if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt]}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[]}awaitingDependencies[dt].push(()=>{typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters)}})}});if(0===unregisteredTypes.length){onComplete(typeConverters)}}function registerType(rawType,registeredInstance,options={}){if(!("argPackAdvance"in registeredInstance)){throw new TypeError("registerType registeredInstance requires argPackAdvance")}var name=registeredInstance.name;if(!rawType){throwBindingError('type "'+name+'" must have a positive integer typeid pointer')}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return}else{throwBindingError("Cannot register type '"+name+"' twice")}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(cb=>cb())}}function __embind_register_bool(rawType,name,size,trueValue,falseValue){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(wt){return!!wt},"toWireType":function(destructors,o){return o?trueValue:falseValue},"argPackAdvance":8,"readValueFromPointer":function(pointer){var heap;if(size===1){heap=HEAP8}else if(size===2){heap=HEAP16}else if(size===4){heap=HEAP32}else{throw new TypeError("Unknown boolean type size: "+name)}return this["fromWireType"](heap[pointer>>>shift])},destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}var finalizationRegistry=false;function detachFinalizer(handle){}function runDestructor($$){if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function releaseClassHandle($$){$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}var registeredPointers={};function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}var delayFunction=undefined;function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record}}))}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function attachFinalizer(handle){if("undefined"===typeof FinalizationRegistry){attachFinalizer=handle=>handle;return handle}finalizationRegistry=new FinalizationRegistry(info=>{releaseClassHandle(info.$$)});attachFinalizer=handle=>{var $$=handle.$$;var hasSmartPtr=!!$$.smartPtr;if(hasSmartPtr){var info={$$:$$};finalizationRegistry.register(handle,info,handle)}return handle};detachFinalizer=handle=>finalizationRegistry.unregister(handle);return attachFinalizer(handle)}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,Emval.toHandle(function(){clonedHandle["delete"]()}));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&&registeredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function dynCallLegacy(sig,ptr,args){var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}function dynCall(sig,ptr,args){if(sig.includes("j")){return dynCallLegacy(sig,ptr,args)}return getWasmTableEntry(ptr).apply(null,args)}function getDynCaller(sig,ptr){var argCache=[];return function(){argCache.length=0;Object.assign(argCache,arguments);return dynCall(sig,ptr,argCache)}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(){if(signature.includes("j")){return getDynCaller(signature,rawFunction)}return getWasmTableEntry(rawFunction)}var fp=makeDynCaller();if(typeof fp!="function"){throwBindingError("unknown function pointer with signature "+signature+": "+rawFunction)}return fp}var UnboundTypeError=undefined;function getTypeName(type){var ptr=___getTypeName(type);var rv=readLatin1String(ptr);_free(ptr);return rv}function throwUnboundTypeError(message,types){var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return}if(registeredTypes[type]){return}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return}unboundTypes.push(type);seen[type]=true}types.forEach(visit);throw new UnboundTypeError(message+": "+unboundTypes.map(getTypeName).join([", "]))}function __embind_register_class(rawType,rawPointerType,rawConstPointerType,baseClassRawType,getActualTypeSignature,getActualType,upcastSignature,upcast,downcastSignature,downcast,name,destructorSignature,rawDestructor){name=readLatin1String(name);getActualType=embind__requireFunction(getActualTypeSignature,getActualType);if(upcast){upcast=embind__requireFunction(upcastSignature,upcast)}if(downcast){downcast=embind__requireFunction(downcastSignature,downcast)}rawDestructor=embind__requireFunction(destructorSignature,rawDestructor);var legalFunctionName=makeLegalFunctionName(name);exposePublicSymbol(legalFunctionName,function(){throwUnboundTypeError("Cannot construct "+name+" due to unbound types",[baseClassRawType])});whenDependentTypesAreResolved([rawType,rawPointerType,rawConstPointerType],baseClassRawType?[baseClassRawType]:[],function(base){base=base[0];var baseClass;var basePrototype;if(baseClassRawType){baseClass=base.registeredClass;basePrototype=baseClass.instancePrototype}else{basePrototype=ClassHandle.prototype}var constructor=createNamedFunction(legalFunctionName,function(){if(Object.getPrototypeOf(this)!==instancePrototype){throw new BindingError("Use 'new' to construct "+name)}if(undefined===registeredClass.constructor_body){throw new BindingError(name+" has no accessible constructor")}var body=registeredClass.constructor_body[arguments.length];if(undefined===body){throw new BindingError("Tried to invoke ctor of "+name+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(registeredClass.constructor_body).toString()+") parameters instead!")}return body.apply(this,arguments)});var instancePrototype=Object.create(basePrototype,{constructor:{value:constructor}});constructor.prototype=instancePrototype;var registeredClass=new RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast);var referenceConverter=new RegisteredPointer(name,registeredClass,true,false,false);var pointerConverter=new RegisteredPointer(name+"*",registeredClass,false,false,false);var constPointerConverter=new RegisteredPointer(name+" const*",registeredClass,false,true,false);registeredPointers[rawType]={pointerType:pointerConverter,constPointerType:constPointerConverter};replacePublicSymbol(legalFunctionName,constructor);return[referenceConverter,pointerConverter,constPointerConverter]})}function new_(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError("new_ called with constructor type "+typeof constructor+" which is not a function")}var dummy=createNamedFunction(constructor.name||"unknownFunctionName",function(){});dummy.prototype=constructor.prototype;var obj=new dummy;var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj}function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i<argTypes.length;++i){if(argTypes[i]!==null&&argTypes[i].destructorFunction===undefined){needsDestructorStack=true;break}}var returns=argTypes[0].name!=="void";var argsList="";var argsListWired="";for(var i=0;i<argCount-2;++i){argsList+=(i!==0?", ":"")+"arg"+i;argsListWired+=(i!==0?", ":"")+"arg"+i+"Wired"}var invokerFnBody="return function "+makeLegalFunctionName(humanName)+"("+argsList+") {\n"+"if (arguments.length !== "+(argCount-2)+") {\n"+"throwBindingError('function "+humanName+" called with ' + arguments.length + ' arguments, expected "+(argCount-2)+" args!');\n"+"}\n";if(needsDestructorStack){invokerFnBody+="var destructors = [];\n"}var dtorStack=needsDestructorStack?"destructors":"null";var args1=["throwBindingError","invoker","fn","runDestructors","retType","classParam"];var args2=[throwBindingError,cppInvokerFunc,cppTargetFunc,runDestructors,argTypes[0],argTypes[1]];if(isClassMethodFunc){invokerFnBody+="var thisWired = classParam.toWireType("+dtorStack+", this);\n"}for(var i=0;i<argCount-2;++i){invokerFnBody+="var arg"+i+"Wired = argType"+i+".toWireType("+dtorStack+", arg"+i+"); // "+argTypes[i+2].name+"\n";args1.push("argType"+i);args2.push(argTypes[i+2])}if(isClassMethodFunc){argsListWired="thisWired"+(argsListWired.length>0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i<argTypes.length;++i){var paramName=i===1?"thisWired":"arg"+(i-2)+"Wired";if(argTypes[i].destructorFunction!==null){invokerFnBody+=paramName+"_dtor("+paramName+"); // "+argTypes[i].name+"\n";args1.push(paramName+"_dtor");args2.push(argTypes[i].destructorFunction)}}}if(returns){invokerFnBody+="var ret = retType.fromWireType(rv);\n"+"return ret;\n"}else{}invokerFnBody+="}\n";args1.push(invokerFnBody);var invokerFunction=new_(Function,args1).apply(null,args2);return invokerFunction}function heap32VectorToArray(count,firstElement){var array=[];for(var i=0;i<count;i++){array.push(HEAP32[(firstElement>>2)+i>>>0])}return array}function __embind_register_class_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,fn){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}var proto=classType.registeredClass.constructor;if(undefined===proto[methodName]){unboundTypesHandler.argCount=argCount-1;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-1]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));var func=craftInvokerFunction(humanName,invokerArgsArray,null,rawInvoker,fn);if(undefined===proto[methodName].overloadTable){func.argCount=argCount-1;proto[methodName]=func}else{proto[methodName].overloadTable[argCount-1]=func}return[]});return[]})}function __embind_register_class_constructor(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor){assert(argCount>0);var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName="constructor "+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError("Cannot register multiple constructors with identical number of parameters ("+(argCount-1)+") for class '"+classType.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!")}classType.registeredClass.constructor_body[argCount-1]=()=>{throwUnboundTypeError("Cannot construct "+classType.name+" due to unbound types",rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){argTypes.splice(1,0,null);classType.registeredClass.constructor_body[argCount-1]=craftInvokerFunction(humanName,argTypes,null,invoker,rawConstructor);return[]});return[]})}function __embind_register_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName)}function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction}else{proto[methodName].overloadTable[argCount-2]=memberFunction}return[]});return[]})}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i<emval_handle_array.length;++i){if(emval_handle_array[i]!==undefined){++count}}return count}function get_first_emval(){for(var i=5;i<emval_handle_array.length;++i){if(emval_handle_array[i]!==undefined){return emval_handle_array[i]}}return null}function init_emval(){Module["count_emval_handles"]=count_emval_handles;Module["get_first_emval"]=get_first_emval}var Emval={toValue:handle=>{if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handle_array[handle].value},toHandle:value=>{switch(value){case undefined:return 1;case null:return 2;case true:return 3;case false:return 4;default:{var handle=emval_free_list.length?emval_free_list.pop():emval_handle_array.length;emval_handle_array[handle]={refcount:1,value:value};return handle}}}};function __embind_register_emval(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(handle){var rv=Emval.toValue(handle);__emval_decref(handle);return rv},"toWireType":function(destructors,value){return Emval.toHandle(value)},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:null})}function enumReadValueFromPointer(name,shift,signed){switch(shift){case 0:return function(pointer){var heap=signed?HEAP8:HEAPU8;return this["fromWireType"](heap[pointer>>>0])};case 1:return function(pointer){var heap=signed?HEAP16:HEAPU16;return this["fromWireType"](heap[pointer>>>1])};case 2:return function(pointer){var heap=signed?HEAP32:HEAPU32;return this["fromWireType"](heap[pointer>>>2])};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_enum(rawType,name,size,isSigned){var shift=getShiftFromSize(size);name=readLatin1String(name);function ctor(){}ctor.values={};registerType(rawType,{name:name,constructor:ctor,"fromWireType":function(c){return this.constructor.values[c]},"toWireType":function(destructors,c){return c.value},"argPackAdvance":8,"readValueFromPointer":enumReadValueFromPointer(name,shift,isSigned),destructorFunction:null});exposePublicSymbol(name,ctor)}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __embind_register_enum_value(rawEnumType,name,enumValue){var enumType=requireRegisteredType(rawEnumType,"enum");name=readLatin1String(name);var Enum=enumType.constructor;var Value=Object.create(enumType.constructor.prototype,{value:{value:enumValue},constructor:{value:createNamedFunction(enumType.name+"_"+name,function(){})}});Enum.values[enumValue]=Value;Enum[name]=Value}function _embind_repr(v){if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer>>>0]}:function readU8FromPointer(pointer){return HEAPU8[pointer>>>0]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=value=>value;if(minRange===0){var bitshift=32-8*size;fromWireType=value=>value<<bitshift>>>bitshift}var isUnsignedType=name.includes("unsigned");var checkAssertions=(value,toTypeName)=>{};var toWireType;if(isUnsignedType){toWireType=function(destructors,value){checkAssertions(value,this.name);return value>>>0}}else{toWireType=function(destructors,value){checkAssertions(value,this.name);return value}}registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":toWireType,"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle>>>0];var data=heap[handle+1>>>0];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>>2];var str;if(stdStringIsUTF8){var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(i==length||HEAPU8[currentBytePtr>>>0]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i<length;++i){a[i]=String.fromCharCode(HEAPU8[value+4+i>>>0])}str=a.join("")}_free(value);return str},"toWireType":function(destructors,value){if(value instanceof ArrayBuffer){value=new Uint8Array(value)}var getLength;var valueIsOfTypeString=typeof value=="string";if(!(valueIsOfTypeString||value instanceof Uint8Array||value instanceof Uint8ClampedArray||value instanceof Int8Array)){throwBindingError("Cannot pass non-string to std::string")}if(stdStringIsUTF8&&valueIsOfTypeString){getLength=()=>lengthBytesUTF8(value)}else{getLength=()=>value.length}var length=getLength();var ptr=_malloc(4+length+1);ptr>>>=0;HEAPU32[ptr>>>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1)}else{if(valueIsOfTypeString){for(var i=0;i<length;++i){var charCode=value.charCodeAt(i);if(charCode>255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+4+i>>>0]=charCode}}else{for(var i=0;i<length;++i){HEAPU8[ptr+4+i>>>0]=value[i]}}}if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_std_wstring(rawType,charSize,name){name=readLatin1String(name);var decodeString,encodeString,getHeap,lengthBytesUTF,shift;if(charSize===2){decodeString=UTF16ToString;encodeString=stringToUTF16;lengthBytesUTF=lengthBytesUTF16;getHeap=()=>HEAPU16;shift=1}else if(charSize===4){decodeString=UTF32ToString;encodeString=stringToUTF32;lengthBytesUTF=lengthBytesUTF32;getHeap=()=>HEAPU32;shift=2}registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||HEAP[currentBytePtr>>>shift]==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value=="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);ptr>>>=0;HEAPU32[ptr>>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function __emscripten_date_now(){return Date.now()}var nowIsMonotonic=true;function __emscripten_get_now_is_monotonic(){return nowIsMonotonic}function __emval_as(handle,returnType,destructorsRef){handle=Emval.toValue(handle);returnType=requireRegisteredType(returnType,"emval::as");var destructors=[];var rd=Emval.toHandle(destructors);HEAP32[destructorsRef>>>2]=rd;return returnType["toWireType"](destructors,handle)}function emval_allocateDestructors(destructorsRef){var destructors=[];HEAP32[destructorsRef>>>2]=Emval.toHandle(destructors);return destructors}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}return symbol}var emval_methodCallers=[];function __emval_call_method(caller,handle,methodName,destructorsRef,args){caller=emval_methodCallers[caller];handle=Emval.toValue(handle);methodName=getStringOrSymbol(methodName);return caller(handle,methodName,emval_allocateDestructors(destructorsRef),args)}function emval_get_global(){if(typeof globalThis=="object"){return globalThis}return function(){return Function}()("return this")()}function __emval_get_global(name){if(name===0){return Emval.toHandle(emval_get_global())}else{name=getStringOrSymbol(name);return Emval.toHandle(emval_get_global()[name])}}function emval_addMethodCaller(caller){var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id}function emval_lookupTypes(argCount,argTypes){var a=new Array(argCount);for(var i=0;i<argCount;++i){a[i]=requireRegisteredType(HEAPU32[argTypes+i*POINTER_SIZE>>>2],"parameter "+i)}return a}var emval_registeredMethods=[];function __emval_get_method_caller(argCount,argTypes){var types=emval_lookupTypes(argCount,argTypes);var retType=types[0];var signatureName=retType.name+"_$"+types.slice(1).map(function(t){return t.name}).join("_")+"$";var returnId=emval_registeredMethods[signatureName];if(returnId!==undefined){return returnId}var params=["retType"];var args=[retType];var argsList="";for(var i=0;i<argCount-1;++i){argsList+=(i!==0?", ":"")+"arg"+i;params.push("argType"+i);args.push(types[1+i])}var functionName=makeLegalFunctionName("methodCaller_"+signatureName);var functionBody="return function "+functionName+"(handle, name, destructors, args) {\n";var offset=0;for(var i=0;i<argCount-1;++i){functionBody+=" var arg"+i+" = argType"+i+".readValueFromPointer(args"+(offset?"+"+offset:"")+");\n";offset+=types[i+1]["argPackAdvance"]}functionBody+=" var rv = handle[name]("+argsList+");\n";for(var i=0;i<argCount-1;++i){if(types[i+1]["deleteObject"]){functionBody+=" argType"+i+".deleteObject(arg"+i+");\n"}}if(!retType.isVoid){functionBody+=" return retType.toWireType(destructors, rv);\n"}functionBody+="};\n";params.push(functionBody);var invokerFunction=new_(Function,params).apply(null,args);returnId=emval_addMethodCaller(invokerFunction);emval_registeredMethods[signatureName]=returnId;return returnId}function __emval_get_property(handle,key){handle=Emval.toValue(handle);key=Emval.toValue(key);return Emval.toHandle(handle[key])}function __emval_incref(handle){if(handle>4){emval_handle_array[handle].refcount+=1}}function __emval_new_cstring(v){return Emval.toHandle(getStringOrSymbol(v))}function __emval_run_destructors(handle){var destructors=Emval.toValue(handle);runDestructors(destructors);__emval_decref(handle)}function __emval_set_property(handle,key,value){handle=Emval.toValue(handle);key=Emval.toValue(key);value=Emval.toValue(value);handle[key]=value}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return Emval.toHandle(v)}function __emval_typeof(handle){handle=Emval.toValue(handle);return Emval.toHandle(typeof handle)}function __localtime_js(time,tmPtr){var date=new Date(HEAP32[time>>>2]*1e3);HEAP32[tmPtr>>>2]=date.getSeconds();HEAP32[tmPtr+4>>>2]=date.getMinutes();HEAP32[tmPtr+8>>>2]=date.getHours();HEAP32[tmPtr+12>>>2]=date.getDate();HEAP32[tmPtr+16>>>2]=date.getMonth();HEAP32[tmPtr+20>>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>>2]=date.getDay();var start=new Date(date.getFullYear(),0,1);var yday=(date.getTime()-start.getTime())/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>>2]=yday;HEAP32[tmPtr+36>>>2]=-(date.getTimezoneOffset()*60);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>>2]=dst}function __munmap_js(addr,len,prot,flags,fd,offset){try{addr>>>=0;var stream=FS.getStream(fd);if(stream){if(prot&2){SYSCALLS.doMsync(addr,stream,len,flags,offset)}FS.munmap(stream)}}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function _tzset_impl(timezone,daylight,tzname){var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAP32[timezone>>>2]=stdTimezoneOffset*60;HEAP32[daylight>>>2]=Number(winterOffset!=summerOffset);function extractZone(date){var match=date.toTimeString().match(/\(([A-Za-z ]+)\)$/);return match?match[1]:"GMT"}var winterName=extractZone(winter);var summerName=extractZone(summer);var winterNamePtr=allocateUTF8(winterName);var summerNamePtr=allocateUTF8(summerName);if(summerOffset<winterOffset){HEAPU32[tzname>>>2]=winterNamePtr;HEAPU32[tzname+4>>>2]=summerNamePtr}else{HEAPU32[tzname>>>2]=summerNamePtr;HEAPU32[tzname+4>>>2]=winterNamePtr}}function __tzset_js(timezone,daylight,tzname){if(__tzset_js.called)return;__tzset_js.called=true;_tzset_impl(timezone,daylight,tzname)}function _abort(){abort("")}function getHeapMax(){return 4294901760}function _emscripten_get_heap_max(){return getHeapMax()}var _emscripten_get_now;_emscripten_get_now=()=>performance.now();function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest>>>0,src>>>0,src+num>>>0)}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}let alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAPU32[penviron_count>>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAPU32[penviron_buf_size>>>2]=bufSize;return 0}function _exit(status){exit(status)}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function doReadv(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>>2];var len=HEAPU32[iov+4>>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break}return ret}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doReadv(stream,iov,iovcnt);HEAP32[pnum>>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function convertI32PairToI53Checked(lo,hi){return hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var offset=convertI32PairToI53Checked(offset_low,offset_high);if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>>2]=tempI64[0],HEAP32[newOffset+4>>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function doWritev(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>>2];var len=HEAPU32[iov+4>>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function inetPton4(str){var b=str.split(".");for(var i=0;i<4;i++){var tmp=Number(b[i]);if(isNaN(tmp))return null;b[i]=tmp}return(b[0]|b[1]<<8|b[2]<<16|b[3]<<24)>>>0}function jstoi_q(str){return parseInt(str)}function inetPton6(str){var words;var w,offset,z;var valid6regx=/^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i;var parts=[];if(!valid6regx.test(str)){return null}if(str==="::"){return[0,0,0,0,0,0,0,0]}if(str.startsWith("::")){str=str.replace("::","Z:")}else{str=str.replace("::",":Z:")}if(str.indexOf(".")>0){str=str.replace(new RegExp("[.]","g"),":");words=str.split(":");words[words.length-4]=jstoi_q(words[words.length-4])+jstoi_q(words[words.length-3])*256;words[words.length-3]=jstoi_q(words[words.length-2])+jstoi_q(words[words.length-1])*256;words=words.slice(0,words.length-2)}else{words=str.split(":")}offset=0;z=0;for(w=0;w<words.length;w++){if(typeof words[w]=="string"){if(words[w]==="Z"){for(z=0;z<8-words.length+1;z++){parts[w+z]=0}offset=z-1}else{parts[w+offset]=_htons(parseInt(words[w],16))}}else{parts[w+offset]=words[w]}}return[parts[1]<<16|parts[0],parts[3]<<16|parts[2],parts[5]<<16|parts[4],parts[7]<<16|parts[6]]}var DNS={address_map:{id:1,addrs:{},names:{}},lookup_name:function(name){var res=inetPton4(name);if(res!==null){return name}res=inetPton6(name);if(res!==null){return name}var addr;if(DNS.address_map.addrs[name]){addr=DNS.address_map.addrs[name]}else{var id=DNS.address_map.id++;assert(id<65535,"exceeded max address mappings of 65535");addr="172.29."+(id&255)+"."+(id&65280);DNS.address_map.names[addr]=name;DNS.address_map.addrs[name]=addr}return addr},lookup_addr:function(addr){if(DNS.address_map.names[addr]){return DNS.address_map.names[addr]}return null}};function getHostByName(name){var ret=_malloc(20);var nameBuf=_malloc(name.length+1);stringToUTF8(name,nameBuf,name.length+1);HEAPU32[ret>>>2]=nameBuf;var aliasesBuf=_malloc(4);HEAPU32[aliasesBuf>>>2]=0;HEAPU32[ret+4>>>2]=aliasesBuf;var afinet=2;HEAP32[ret+8>>>2]=afinet;HEAP32[ret+12>>>2]=4;var addrListBuf=_malloc(12);HEAPU32[addrListBuf>>>2]=addrListBuf+8;HEAPU32[addrListBuf+4>>>2]=0;HEAP32[addrListBuf+8>>>2]=inetPton4(DNS.lookup_name(name));HEAPU32[ret+16>>>2]=addrListBuf;return ret}function _gethostbyname(name){return getHostByName(UTF8ToString(name))}function __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=function(index,divisor){ext["vertexAttribDivisorANGLE"](index,divisor)};ctx["drawArraysInstanced"]=function(mode,first,count,primcount){ext["drawArraysInstancedANGLE"](mode,first,count,primcount)};ctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=function(){return ext["createVertexArrayOES"]()};ctx["deleteVertexArray"]=function(vao){ext["deleteVertexArrayOES"](vao)};ctx["bindVertexArray"]=function(vao){ext["bindVertexArrayOES"](vao)};ctx["isVertexArray"]=function(vao){return ext["isVertexArrayOES"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=function(n,bufs){ext["drawBuffersWEBGL"](n,bufs)};return 1}}function __webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],stringCache:{},unpackAlignment:4,recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i<ret;i++){table[i]=null}return ret},getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){if(!canvas.getContextSafariWebGL2Fixed){canvas.getContextSafariWebGL2Fixed=canvas.getContext;function fixedGetContext(ver,attrs){var gl=canvas.getContextSafariWebGL2Fixed(ver,attrs);return ver=="webgl"==gl instanceof WebGLRenderingContext?gl:null}canvas.getContext=fixedGetContext}var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=GL.getNewId(GL.contexts);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault=="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents=="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;__webgl_enable_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);{GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query")}__webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}})}};function webglGetLeftBracePos(name){return name.slice(-1)=="]"&&name.lastIndexOf("[")}function webglPrepareUniformLocationsBeforeFirstUse(program){var uniformLocsById=program.uniformLocsById,uniformSizeAndIdsByName=program.uniformSizeAndIdsByName,i,j;if(!uniformLocsById){program.uniformLocsById=uniformLocsById={};program.uniformArrayNamesById={};for(i=0;i<GLctx.getProgramParameter(program,35718);++i){var u=GLctx.getActiveUniform(program,i);var nm=u.name;var sz=u.size;var lb=webglGetLeftBracePos(nm);var arrayName=lb>0?nm.slice(0,lb):nm;var id=program.uniformIdCounter;program.uniformIdCounter+=sz;uniformSizeAndIdsByName[arrayName]=[sz,id];for(j=0;j<sz;++j){uniformLocsById[id]=j;program.uniformArrayNamesById[id++]=arrayName}}}}function _glGetUniformLocation(program,name){name=UTF8ToString(name);if(program=GL.programs[program]){webglPrepareUniformLocationsBeforeFirstUse(program);var uniformLocsById=program.uniformLocsById;var arrayIndex=0;var uniformBaseName=name;var leftBrace=webglGetLeftBracePos(name);if(leftBrace>0){arrayIndex=jstoi_q(name.slice(leftBrace+1))>>>0;uniformBaseName=name.slice(0,leftBrace)}var sizeAndId=program.uniformSizeAndIdsByName[uniformBaseName];if(sizeAndId&&arrayIndex<sizeAndId[0]){arrayIndex+=sizeAndId[1];if(uniformLocsById[arrayIndex]=uniformLocsById[arrayIndex]||GLctx.getUniformLocation(program,name)){return arrayIndex}}}else{GL.recordError(1281)}return-1}function webglGetUniformLocation(location){var p=GLctx.currentProgram;if(p){var webglLoc=p.uniformLocsById[location];if(typeof webglLoc=="number"){p.uniformLocsById[location]=webglLoc=GLctx.getUniformLocation(p,p.uniformArrayNamesById[location]+(webglLoc>0?"["+webglLoc+"]":""))}return webglLoc}else{GL.recordError(1282)}}function _glUniform1f(location,v0){GLctx.uniform1f(webglGetUniformLocation(location),v0)}function _glUniform1i(location,v0){GLctx.uniform1i(webglGetUniformLocation(location),v0)}var miniTempWebGLFloatBuffers=[];function _glUniform2fv(location,count,value){if(count<=144){var view=miniTempWebGLFloatBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>>2];view[i+1]=HEAPF32[value+(4*i+4)>>>2]}}else{var view=HEAPF32.subarray(value>>>2,value+count*8>>>2)}GLctx.uniform2fv(webglGetUniformLocation(location),view)}var __miniTempWebGLIntBuffers=[];function _glUniform2iv(location,count,value){if(count<=144){var view=__miniTempWebGLIntBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAP32[value+4*i>>>2];view[i+1]=HEAP32[value+(4*i+4)>>>2]}}else{var view=HEAP32.subarray(value>>>2,value+count*8>>>2)}GLctx.uniform2iv(webglGetUniformLocation(location),view)}function _glUniform3fv(location,count,value){if(count<=96){var view=miniTempWebGLFloatBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>>2];view[i+1]=HEAPF32[value+(4*i+4)>>>2];view[i+2]=HEAPF32[value+(4*i+8)>>>2]}}else{var view=HEAPF32.subarray(value>>>2,value+count*12>>>2)}GLctx.uniform3fv(webglGetUniformLocation(location),view)}function _glUniform3iv(location,count,value){if(count<=96){var view=__miniTempWebGLIntBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAP32[value+4*i>>>2];view[i+1]=HEAP32[value+(4*i+4)>>>2];view[i+2]=HEAP32[value+(4*i+8)>>>2]}}else{var view=HEAP32.subarray(value>>>2,value+count*12>>>2)}GLctx.uniform3iv(webglGetUniformLocation(location),view)}function _glUniform4fv(location,count,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<4*count;i+=4){var dst=value+i;view[i]=heap[dst>>>0];view[i+1]=heap[dst+1>>>0];view[i+2]=heap[dst+2>>>0];view[i+3]=heap[dst+3>>>0]}}else{var view=HEAPF32.subarray(value>>>2,value+count*16>>>2)}GLctx.uniform4fv(webglGetUniformLocation(location),view)}function _glUniform4iv(location,count,value){if(count<=72){var view=__miniTempWebGLIntBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAP32[value+4*i>>>2];view[i+1]=HEAP32[value+(4*i+4)>>>2];view[i+2]=HEAP32[value+(4*i+8)>>>2];view[i+3]=HEAP32[value+(4*i+12)>>>2]}}else{var view=HEAP32.subarray(value>>>2,value+count*16>>>2)}GLctx.uniform4iv(webglGetUniformLocation(location),view)}function _setTempRet0(val){setTempRet0(val)}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>>2];var date={tm_sec:HEAP32[tm>>>2],tm_min:HEAP32[tm+4>>>2],tm_hour:HEAP32[tm+8>>>2],tm_mday:HEAP32[tm+12>>>2],tm_mon:HEAP32[tm+16>>>2],tm_year:HEAP32[tm+20>>>2],tm_wday:HEAP32[tm+24>>>2],tm_yday:HEAP32[tm+28>>>2],tm_isdst:HEAP32[tm+32>>>2],tm_gmtoff:HEAP32[tm+36>>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value=="number"?value.toString():value||"";while(str.length<digits){str=character[0]+str}return str}function leadingNulls(value,digits){return leadingSomething(value,digits,"0")}function compareByDay(date1,date2){function sgn(value){return value<0?-1:value>0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}else{return"PM"}},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},"%V":function(date){var val=Math.floor((date.tm_yday+7-(date.tm_wday+6)%7)/7);if((date.tm_wday+371-date.tm_yday-2)%7<=2){val++}if(!val){val=52;var dec31=(date.tm_wday+7-date.tm_yday-1)%7;if(dec31==4||dec31==5&&__isLeapYear(date.tm_year%400-1)){val++}}else if(val==53){var jan1=(date.tm_wday+371-date.tm_yday)%7;if(jan1!=4&&(jan1!=3||!__isLeapYear(date.tm_year)))val=1}return leadingNulls(val,2)},"%w":function(date){return date.tm_wday},"%W":function(date){var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},"%y":function(date){return(date.tm_year+1900).toString().substring(2)},"%Y":function(date){return date.tm_year+1900},"%z":function(date){var off=date.tm_gmtoff;var ahead=off>=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};pattern=pattern.replace(/%%/g,"\0\0");for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}pattern=pattern.replace(/\0\0/g,"%");var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,format,tm)}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_embind();init_RegisteredPointer();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();var GLctx;var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i+1)}var __miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<288;++i){__miniTempWebGLIntBuffers[i]=__miniTempWebGLIntBuffersStorage.subarray(0,i+1)}function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmLibraryArg={"g":___assert_fail,"a":___cxa_allocate_exception,"b":___cxa_throw,"U":___syscall_chmod,"V":___syscall_faccessat,"n":___syscall_fcntl64,"O":___syscall_fstat64,"W":___syscall_ioctl,"L":___syscall_lstat64,"I":___syscall_mkdirat,"M":___syscall_newfstatat,"s":___syscall_openat,"G":___syscall_rmdir,"N":___syscall_stat64,"E":___syscall_unlinkat,"A":__embind_register_bigint,"Y":__embind_register_bool,"e":__embind_register_class,"d":__embind_register_class_class_function,"f":__embind_register_class_constructor,"c":__embind_register_class_function,"X":__embind_register_emval,"ka":__embind_register_enum,"ja":__embind_register_enum_value,"v":__embind_register_float,"i":__embind_register_integer,"h":__embind_register_memory_view,"u":__embind_register_std_string,"o":__embind_register_std_wstring,"Z":__embind_register_void,"R":__emscripten_date_now,"Q":__emscripten_get_now_is_monotonic,"k":__emval_as,"na":__emval_call_method,"x":__emval_decref,"oa":__emval_get_global,"ma":__emval_get_method_caller,"q":__emval_get_property,"y":__emval_incref,"la":__emval_new_cstring,"pa":__emval_run_destructors,"p":__emval_set_property,"j":__emval_take_value,"w":__emval_typeof,"S":__localtime_js,"H":__munmap_js,"T":__tzset_js,"r":_abort,"F":_emscripten_get_heap_max,"P":_emscripten_memcpy_big,"D":_emscripten_resize_heap,"J":_environ_get,"K":_environ_sizes_get,"ha":_exit,"m":_fd_close,"t":_fd_read,"z":_fd_seek,"l":_fd_write,"ia":_gethostbyname,"ga":_glGetUniformLocation,"ea":_glUniform1f,"fa":_glUniform1i,"aa":_glUniform2fv,"da":_glUniform2iv,"$":_glUniform3fv,"ca":_glUniform3iv,"_":_glUniform4fv,"ba":_glUniform4iv,"B":_setTempRet0,"C":_strftime_l};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["ra"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["sa"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["ta"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["ua"]).apply(null,arguments)};var ___getTypeName=Module["___getTypeName"]=function(){return(___getTypeName=Module["___getTypeName"]=Module["asm"]["va"]).apply(null,arguments)};var ___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=function(){return(___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=Module["asm"]["wa"]).apply(null,arguments)};var _htons=Module["_htons"]=function(){return(_htons=Module["_htons"]=Module["asm"]["ya"]).apply(null,arguments)};var _emscripten_builtin_memalign=Module["_emscripten_builtin_memalign"]=function(){return(_emscripten_builtin_memalign=Module["_emscripten_builtin_memalign"]=Module["asm"]["za"]).apply(null,arguments)};var ___cxa_is_pointer_type=Module["___cxa_is_pointer_type"]=function(){return(___cxa_is_pointer_type=Module["___cxa_is_pointer_type"]=Module["asm"]["Aa"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["Ba"]).apply(null,arguments)};var dynCall_viijii=Module["dynCall_viijii"]=function(){return(dynCall_viijii=Module["dynCall_viijii"]=Module["asm"]["Ca"]).apply(null,arguments)};var dynCall_iiiiij=Module["dynCall_iiiiij"]=function(){return(dynCall_iiiiij=Module["dynCall_iiiiij"]=Module["asm"]["Da"]).apply(null,arguments)};var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=function(){return(dynCall_iiiiijj=Module["dynCall_iiiiijj"]=Module["asm"]["Ea"]).apply(null,arguments)};var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=function(){return(dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=Module["asm"]["Fa"]).apply(null,arguments)};var dynCall_viiiiji=Module["dynCall_viiiiji"]=function(){return(dynCall_viiiiji=Module["dynCall_viiiiji"]=Module["asm"]["Ga"]).apply(null,arguments)};Module["FS"]=FS;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){EXITSTATUS=status;procExit(status)}function procExit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run(); 10 + 11 + 12 + return Module.ready 13 + } 14 + ); 15 + })(); 16 + export default Module;
+32 -2
src/appview/mod.rs
··· 6 6 //! [`IntoRouter`] and share [`AppState`] (SQLite pool + identity resolver + bsky 7 7 //! client). 8 8 //! 9 - //! Not yet implemented: the SSR bridge (PM-46) and the PDS passthrough proxy 10 - //! (PM-47). 9 + //! In addition to the `space.polymodel.*` endpoints below, this module mounts a 10 + //! fixed, structural allowlist of non-polymodel XRPC methods as a single-origin 11 + //! passthrough proxy (PM-47): the direct `com.atproto.repo.*` record operations 12 + //! plus `com.atproto.identity.resolveHandle` and `app.bsky.actor.getProfile`, 13 + //! dispatched over their generated typed structs to the user's PDS / public 14 + //! AppView. Every other NSID has no route and 404s, and upstream XRPC errors are 15 + //! forwarded with their real status + body. 11 16 12 17 pub mod error; 13 18 pub mod state; ··· 16 21 mod actor; 17 22 mod graph; 18 23 mod library; 24 + mod proxy; 19 25 mod writes; 20 26 21 27 #[cfg(test)] ··· 42 48 }, 43 49 }; 44 50 51 + use polymodel_api::app_bsky::actor::get_profile::GetProfileRequest as AppBskyGetProfileRequest; 52 + use polymodel_api::com_atproto::identity::resolve_handle::ResolveHandleRequest; 53 + use polymodel_api::com_atproto::repo::{ 54 + create_record::CreateRecordRequest, delete_record::DeleteRecordRequest, 55 + describe_repo::DescribeRepoRequest, get_record::GetRecordRequest, 56 + list_records::ListRecordsRequest, put_record::PutRecordRequest, upload_blob::UploadBlobRequest, 57 + }; 58 + 45 59 use self::state::AppState; 46 60 47 61 /// Build the appview XRPC router with the given state applied. ··· 74 88 .merge(DeleteSaveRequest::into_router(writes::delete_save)) 75 89 .merge(CreateTagRequest::into_router(writes::create_tag)) 76 90 .merge(DeleteTagRequest::into_router(writes::delete_tag)) 91 + // PM-47 passthrough proxy: a structural allowlist of non-polymodel XRPC 92 + // methods forwarded to the user's PDS / public AppView over their 93 + // generated typed request structs. Any other NSID has no route → 404. 94 + .merge(GetRecordRequest::into_router(proxy::repo_get_record)) 95 + .merge(ListRecordsRequest::into_router(proxy::repo_list_records)) 96 + .merge(DescribeRepoRequest::into_router(proxy::repo_describe_repo)) 97 + .merge(CreateRecordRequest::into_router(proxy::repo_create_record)) 98 + .merge(PutRecordRequest::into_router(proxy::repo_put_record)) 99 + .merge(DeleteRecordRequest::into_router(proxy::repo_delete_record)) 100 + .merge(UploadBlobRequest::into_router(proxy::repo_upload_blob)) 101 + .merge(ResolveHandleRequest::into_router( 102 + proxy::identity_resolve_handle, 103 + )) 104 + .merge(AppBskyGetProfileRequest::into_router( 105 + proxy::actor_get_profile, 106 + )) 77 107 // getSession takes no parameters, so it bypasses ExtractXrpc (which 78 108 // decodes the query string; a unit-struct request from an empty query is 79 109 // rejected by serde_html_form). Identity comes from the session.
+423
src/appview/proxy.rs
··· 1 + //! XRPC passthrough proxy to the user's PDS (PM-47). 2 + //! 3 + //! A fixed, structural allowlist of non-`space.polymodel.*` XRPC methods is 4 + //! served from this origin so the browser stays single-origin (PM-9 §4.5). 5 + //! Each allowlisted method dispatches to its generated typed request struct and 6 + //! is forwarded to the user's PDS (authenticated methods, via the OAuth session 7 + //! agent's *signing* send path) or the public AppView (public methods). Upstream 8 + //! XRPC errors are forwarded with their real HTTP status + body; only genuine 9 + //! transport/internal failures become 500. 10 + //! 11 + //! Allowlist (the direct repo record operations only): 12 + //! - `com.atproto.repo.{createRecord, putRecord, deleteRecord, getRecord, 13 + //! listRecords, describeRepo, uploadBlob}` — authenticated, to the user's PDS. 14 + //! - `com.atproto.identity.resolveHandle` and `app.bsky.actor.getProfile` — 15 + //! public, to the AppView. 16 + //! 17 + //! Batch/admin repo methods (`applyWrites`, `importRepo`, `listMissingBlobs`) 18 + //! and every other NSID have no route and 404. 19 + //! 20 + //! Read-your-writes: `repo.getRecord` of a `space.polymodel.*` record reflects a 21 + //! not-yet-firehose-confirmed local write/delete via the `pending_writes` / 22 + //! `pending_deletes` tables populated by the shared eager-projection path (see 23 + //! `indexing::projection`). Proxied writes to `space.polymodel.*` are eagerly 24 + //! projected through that same path for read-your-own-writes. 25 + 26 + use axum::body::Body; 27 + use axum::extract::State; 28 + use axum::http::{HeaderMap, HeaderValue, StatusCode, header}; 29 + use axum::response::{IntoResponse, Response}; 30 + use jacquard::client::{Agent, AgentSession}; 31 + use jacquard::identity::PublicResolver; 32 + use jacquard::oauth::client::OAuthSession; 33 + use jacquard_axum::ExtractXrpc; 34 + use jacquard_axum::oauth::ExtractOAuthSession; 35 + use jacquard_common::error::{ClientError, ClientErrorKind, HttpError}; 36 + use jacquard_common::types::string::Did; 37 + use jacquard_common::xrpc::{Response as XrpcResponse, XrpcClient, XrpcResp}; 38 + use polymodel_api::com_atproto::identity::resolve_handle::ResolveHandleRequest; 39 + use polymodel_api::com_atproto::repo::{ 40 + create_record::CreateRecordRequest, 41 + delete_record::DeleteRecordRequest, 42 + describe_repo::DescribeRepoRequest, 43 + get_record::GetRecordRequest, 44 + list_records::ListRecordsRequest, 45 + put_record::PutRecordRequest, 46 + upload_blob::{UploadBlob, UploadBlobRequest}, 47 + }; 48 + use serde_json::Value; 49 + use sqlx::SqlitePool; 50 + 51 + use super::error::{AppError, AppResult, db, invalid_request, unauthorized}; 52 + use super::state::AppState; 53 + use crate::indexing::projection::{ProjectionEvent, project_eager_record}; 54 + use crate::oauth::SqliteAuthStore; 55 + 56 + type UserAgent = Agent<OAuthSession<PublicResolver, SqliteAuthStore>>; 57 + 58 + const POLYMODEL_PREFIX: &str = "space.polymodel."; 59 + 60 + // =========================================================================== 61 + // PDS reads (authenticated; forwarded to the user's PDS) 62 + // =========================================================================== 63 + 64 + pub(super) async fn repo_get_record( 65 + State(state): State<AppState>, 66 + ExtractOAuthSession(session): ExtractOAuthSession<PublicResolver, SqliteAuthStore>, 67 + ExtractXrpc(req): ExtractXrpc<GetRecordRequest>, 68 + ) -> AppResult<Response> { 69 + let agent = Agent::from(session); 70 + let collection = req.collection.as_ref().to_string(); 71 + let polymodel = collection.starts_with(POLYMODEL_PREFIX); 72 + // Pending-ops key: canonicalize the request repo to a DID (handles resolve) 73 + // so read-your-writes matches the DID-keyed pending rows for both DID- and 74 + // handle-authority reads. A resolved *other* repo can't match this account's 75 + // pending rows (the actor only writes its own repo), so there's no cross-repo 76 + // false positive. If the repo can't be canonicalized, skip the override and 77 + // forward the PDS result. 78 + let pending_uri = if polymodel { 79 + match super::actor::resolve_actor(&state, &req.repo).await { 80 + Ok(did) => { 81 + let rkey = req.rkey.as_ref().to_string(); 82 + Some(format!("at://{}/{}/{}", did.as_ref(), collection, rkey)) 83 + } 84 + Err(e) => { 85 + tracing::warn!(error = ?e, "pending-ops key: repo did not canonicalize; skipping override"); 86 + None 87 + } 88 + } 89 + } else { 90 + None 91 + }; 92 + let result = agent.send(req).await; 93 + if let Some(uri) = pending_uri { 94 + // Read-your-writes: a polymodel record may carry a pending local 95 + // write/delete the PDS/AppView hasn't reflected yet. Keyed on the 96 + // request — the PDS body is only consulted for cid comparison — so a 97 + // pending write still wins when a lagging source reports not-found. 98 + let pds_cid = match &result { 99 + Ok(resp) if resp.status().is_success() => { 100 + serde_json::from_slice::<Value>(resp.buffer()) 101 + .ok() 102 + .and_then(|v| v.get("cid").and_then(|c| c.as_str()).map(str::to_owned)) 103 + } 104 + _ => None, 105 + }; 106 + match try_get_record_override(&state.pool, &uri, pds_cid.as_deref()).await { 107 + Ok(Some(overridden)) => return Ok(overridden), 108 + Ok(None) => {} 109 + Err(e) => { 110 + tracing::warn!(error = ?e, "pending-ops override lookup failed; forwarding PDS result") 111 + } 112 + } 113 + } 114 + Ok(forward_xrpc(result)) 115 + } 116 + 117 + pub(super) async fn repo_list_records( 118 + ExtractOAuthSession(session): ExtractOAuthSession<PublicResolver, SqliteAuthStore>, 119 + ExtractXrpc(req): ExtractXrpc<ListRecordsRequest>, 120 + ) -> AppResult<Response> { 121 + let agent = Agent::from(session); 122 + Ok(forward_xrpc(agent.send(req).await)) 123 + } 124 + 125 + pub(super) async fn repo_describe_repo( 126 + ExtractOAuthSession(session): ExtractOAuthSession<PublicResolver, SqliteAuthStore>, 127 + ExtractXrpc(req): ExtractXrpc<DescribeRepoRequest>, 128 + ) -> AppResult<Response> { 129 + let agent = Agent::from(session); 130 + Ok(forward_xrpc(agent.send(req).await)) 131 + } 132 + 133 + // =========================================================================== 134 + // PDS writes (authenticated; forwarded to the user's PDS, eagerly projected) 135 + // =========================================================================== 136 + 137 + pub(super) async fn repo_create_record( 138 + State(state): State<AppState>, 139 + ExtractOAuthSession(session): ExtractOAuthSession<PublicResolver, SqliteAuthStore>, 140 + ExtractXrpc(req): ExtractXrpc<CreateRecordRequest>, 141 + ) -> AppResult<Response> { 142 + let agent = Agent::from(session); 143 + let did = actor_did(&agent).await?; 144 + let collection = req.collection.as_ref().to_string(); 145 + let record = serde_json::to_value(&req.record).ok(); 146 + let result = agent.send(req).await; 147 + if let Ok(resp) = &result 148 + && resp.status().is_success() 149 + && collection.starts_with(POLYMODEL_PREFIX) 150 + && let Some(record) = record.as_ref() 151 + { 152 + eager_project(&state, &did, &collection, "create", record, resp.buffer()).await; 153 + } 154 + Ok(forward_xrpc(result)) 155 + } 156 + 157 + pub(super) async fn repo_put_record( 158 + State(state): State<AppState>, 159 + ExtractOAuthSession(session): ExtractOAuthSession<PublicResolver, SqliteAuthStore>, 160 + ExtractXrpc(req): ExtractXrpc<PutRecordRequest>, 161 + ) -> AppResult<Response> { 162 + let agent = Agent::from(session); 163 + let did = actor_did(&agent).await?; 164 + let collection = req.collection.as_ref().to_string(); 165 + let record = serde_json::to_value(&req.record).ok(); 166 + let result = agent.send(req).await; 167 + if let Ok(resp) = &result 168 + && resp.status().is_success() 169 + && collection.starts_with(POLYMODEL_PREFIX) 170 + && let Some(record) = record.as_ref() 171 + { 172 + eager_project(&state, &did, &collection, "update", record, resp.buffer()).await; 173 + } 174 + Ok(forward_xrpc(result)) 175 + } 176 + 177 + pub(super) async fn repo_delete_record( 178 + State(state): State<AppState>, 179 + ExtractOAuthSession(session): ExtractOAuthSession<PublicResolver, SqliteAuthStore>, 180 + ExtractXrpc(req): ExtractXrpc<DeleteRecordRequest>, 181 + ) -> AppResult<Response> { 182 + let agent = Agent::from(session); 183 + let did = actor_did(&agent).await?; 184 + let collection = req.collection.as_ref().to_string(); 185 + let rkey = req.rkey.as_ref().to_string(); 186 + let result = agent.send(req).await; 187 + if let Ok(resp) = &result 188 + && resp.status().is_success() 189 + && collection.starts_with(POLYMODEL_PREFIX) 190 + { 191 + let event = ProjectionEvent { 192 + seq: 0, 193 + did: did.as_ref().to_string(), 194 + collection: collection.clone(), 195 + rkey, 196 + action: "delete".to_string(), 197 + record: None, 198 + cid: None, 199 + }; 200 + let _guard = state.write_lock.lock().await; 201 + if let Err(e) = project_eager_record(&state.pool, &event).await { 202 + tracing::error!(error = %e, %collection, "eager projection of proxied delete failed"); 203 + } 204 + } 205 + Ok(forward_xrpc(result)) 206 + } 207 + 208 + pub(super) async fn repo_upload_blob( 209 + ExtractOAuthSession(session): ExtractOAuthSession<PublicResolver, SqliteAuthStore>, 210 + headers: HeaderMap, 211 + ExtractXrpc(req): ExtractXrpc<UploadBlobRequest>, 212 + ) -> AppResult<Response> { 213 + let agent = Agent::from(session); 214 + let UploadBlob { body } = req; 215 + // The generated `UploadBlob` carries raw `*/*` bytes and no mime; thread the 216 + // real inbound Content-Type through the call options (the same mechanism the 217 + // `AgentSessionExt::upload_blob` wrapper uses) so the PDS receives it. Using 218 + // `send_with_opts` directly preserves the raw response for faithful 219 + // status/body forwarding, which the typed wrapper would swallow. 220 + let mime = content_type(&headers); 221 + let mut opts = agent.opts().await; 222 + opts.extra_headers.push(( 223 + header::CONTENT_TYPE, 224 + HeaderValue::from_str(&mime) 225 + .map_err(|e| invalid_request(format!("invalid content-type header: {e}")))?, 226 + )); 227 + Ok(forward_xrpc( 228 + agent.send_with_opts(UploadBlob { body }, opts).await, 229 + )) 230 + } 231 + 232 + // =========================================================================== 233 + // Public AppView reads (unauthenticated; forwarded to public.api.bsky.app) 234 + // =========================================================================== 235 + 236 + pub(super) async fn identity_resolve_handle( 237 + State(state): State<AppState>, 238 + ExtractXrpc(req): ExtractXrpc<ResolveHandleRequest>, 239 + ) -> AppResult<Response> { 240 + Ok(forward_xrpc(state.bsky.send(req).await)) 241 + } 242 + 243 + pub(super) async fn actor_get_profile( 244 + State(state): State<AppState>, 245 + ExtractXrpc(req): ExtractXrpc<polymodel_api::app_bsky::actor::get_profile::GetProfileRequest>, 246 + ) -> AppResult<Response> { 247 + Ok(forward_xrpc(state.bsky.send(req).await)) 248 + } 249 + 250 + // =========================================================================== 251 + // Faithful upstream forwarding + helpers 252 + // =========================================================================== 253 + 254 + /// Forward an upstream `agent.send` result as a raw Axum response, preserving 255 + /// the real HTTP status and body rather than collapsing it to a single code: 256 + /// - `Ok` (success **or** a 400/401 XRPC-error body) → that status + the buffer. 257 + /// - `Err(Http)` (other non-2xx, e.g. 409/404/429/5xx) → that status + body. 258 + /// - `Err(Auth)` → 401. 259 + /// - anything else (transport/decode/…) → 500 (genuine internal failure). 260 + /// 261 + /// The typed `XrpcError` enum carries no status; the HTTP status comes from the 262 + /// response/error itself, so atproto error codes (`RecordNotFound` on HTTP 400, 263 + /// `InvalidSwap` on HTTP 409, …) are forwarded verbatim. 264 + pub(super) fn forward_xrpc<Resp: XrpcResp>( 265 + result: Result<XrpcResponse<Resp>, ClientError>, 266 + ) -> Response { 267 + match result { 268 + Ok(resp) => raw_response(resp.status(), resp.buffer().to_vec()), 269 + Err(err) => match err.kind() { 270 + ClientErrorKind::Http { status } => { 271 + let body = err 272 + .source_err() 273 + .and_then(|s| s.downcast_ref::<HttpError>()) 274 + .and_then(|h| h.body.clone()) 275 + .map(|b| b.to_vec()) 276 + .unwrap_or_default(); 277 + raw_response(*status, body) 278 + } 279 + ClientErrorKind::Auth(_) => { 280 + AppError::Unauthorized("upstream authentication required".to_string()) 281 + .into_response() 282 + } 283 + other => { 284 + tracing::error!(error = ?other, "passthrough upstream transport/internal failure"); 285 + AppError::Internal("passthrough upstream failure".to_string()).into_response() 286 + } 287 + }, 288 + } 289 + } 290 + 291 + fn raw_response(status: StatusCode, body: Vec<u8>) -> Response { 292 + Response::builder() 293 + .status(status) 294 + .header(header::CONTENT_TYPE, "application/json") 295 + .body(Body::from(body)) 296 + .expect("static response parts are always valid") 297 + } 298 + 299 + async fn actor_did(agent: &UserAgent) -> AppResult<Did> { 300 + agent 301 + .session_info() 302 + .await 303 + .map(|(did, _)| did) 304 + .ok_or_else(|| unauthorized("OAuth session is required")) 305 + } 306 + 307 + /// Inbound Content-Type, trimmed of parameters, defaulting to binary. 308 + fn content_type(headers: &HeaderMap) -> String { 309 + headers 310 + .get(header::CONTENT_TYPE) 311 + .and_then(|v| v.to_str().ok()) 312 + .and_then(|v| v.split(';').next()) 313 + .map(str::trim) 314 + .filter(|v| !v.is_empty()) 315 + .unwrap_or("application/octet-stream") 316 + .to_string() 317 + } 318 + 319 + /// Eagerly project a successful proxied create/update into the local SQLite 320 + /// projection (rkey/cid read from the PDS output) for read-your-writes. 321 + async fn eager_project( 322 + state: &AppState, 323 + did: &Did, 324 + collection: &str, 325 + action: &str, 326 + record: &Value, 327 + output_buffer: &[u8], 328 + ) { 329 + let Some((rkey, cid)) = parse_record_ref(output_buffer) else { 330 + return; 331 + }; 332 + let event = ProjectionEvent { 333 + seq: 0, 334 + did: did.as_ref().to_string(), 335 + collection: collection.to_string(), 336 + rkey, 337 + action: action.to_string(), 338 + record: Some(record.clone()), 339 + cid: Some(cid), 340 + }; 341 + // Serialize against PM-28's decision-making writes (which read local state 342 + // then mutate): the proxied write itself makes no decision, but its local 343 + // projection must not interleave with a locked read-then-write section. The 344 + // lock guards only the local projection, never the upstream PDS call. 345 + let _guard = state.write_lock.lock().await; 346 + if let Err(e) = project_eager_record(&state.pool, &event).await { 347 + tracing::error!(error = %e, %collection, %action, "eager projection of proxied write failed"); 348 + } 349 + } 350 + 351 + /// Parse `(rkey, cid)` from a createRecord/putRecord output's raw JSON. 352 + fn parse_record_ref(output: &[u8]) -> Option<(String, String)> { 353 + let out: Value = serde_json::from_slice(output).ok()?; 354 + let uri = out.get("uri")?.as_str()?; 355 + let cid = out.get("cid")?.as_str()?.to_string(); 356 + let rkey = uri.rsplit('/').next()?.to_string(); 357 + Some((rkey, cid)) 358 + } 359 + 360 + /// Read-your-writes override for a single `space.polymodel.*` getRecord. 361 + /// 362 + /// Returns a replacement response when a not-yet-firehose-confirmed local op 363 + /// should win over the PDS/AppView. 364 + /// 365 + /// - A pending delete → `RecordNotFound` (HTTP 400). 366 + /// - A pending write the PDS has not caught up to → the local value/cid (200). 367 + /// "Not caught up" means `pds_cid` is `None` (the PDS reported not-found or 368 + /// errored) or differs from the pending cid. 369 + /// 370 + /// Returns `None` otherwise (no pending state, or a pending write whose cid 371 + /// already matches the PDS) so the caller forwards the PDS result. 372 + pub(super) async fn try_get_record_override( 373 + pool: &SqlitePool, 374 + uri: &str, 375 + pds_cid: Option<&str>, 376 + ) -> AppResult<Option<Response>> { 377 + let pending_delete = db(sqlx::query!( 378 + "SELECT 1 AS hit FROM pending_deletes WHERE uri = ?", 379 + uri 380 + ) 381 + .fetch_optional(pool) 382 + .await)?; 383 + if pending_delete.is_some() { 384 + return Ok(Some(record_not_found_response())); 385 + } 386 + 387 + let pending_write = db(sqlx::query_as!( 388 + PendingWrite, 389 + "SELECT cid, value FROM pending_writes WHERE uri = ?", 390 + uri 391 + ) 392 + .fetch_optional(pool) 393 + .await)?; 394 + if let Some(pw) = pending_write 395 + && pds_cid != Some(pw.cid.as_str()) 396 + { 397 + let value: Value = serde_json::from_str(&pw.value).unwrap_or(Value::Null); 398 + let body = serde_json::to_vec(&serde_json::json!({ 399 + "uri": uri, 400 + "cid": pw.cid, 401 + "value": value, 402 + })) 403 + .unwrap_or_default(); 404 + return Ok(Some(raw_response(StatusCode::OK, body))); 405 + } 406 + Ok(None) 407 + } 408 + 409 + #[derive(sqlx::FromRow)] 410 + struct PendingWrite { 411 + cid: String, 412 + value: String, 413 + } 414 + 415 + fn record_not_found_response() -> Response { 416 + // atproto repo.getRecord RecordNotFound is HTTP 400 with this body shape. 417 + let body = serde_json::to_vec(&serde_json::json!({ 418 + "error": "RecordNotFound", 419 + "message": "Record not found", 420 + })) 421 + .unwrap_or_default(); 422 + raw_response(StatusCode::BAD_REQUEST, body) 423 + }
+302
src/appview/tests.rs
··· 598 598 assert_eq!(page2.items[0].thing.name.as_str(), "t1"); 599 599 assert!(page2.cursor.is_none()); 600 600 } 601 + 602 + // --------------------------------------------------------------------------- 603 + // PM-47 passthrough proxy: faithful forwarding, read-your-writes override, 604 + // eager projection, structural allowlist, and session gating. 605 + // --------------------------------------------------------------------------- 606 + 607 + use jacquard_common::deps::bytes::Bytes; 608 + use jacquard_common::error::{AuthError, ClientError}; 609 + use jacquard_common::xrpc::Response as XrpcResponse; 610 + use polymodel_api::com_atproto::repo::get_record::GetRecordResponse; 611 + use serde_json::Value; 612 + 613 + use crate::indexing::projection::{ 614 + ProjectionEvent, ProjectionInput, project_eager_record, project_event, 615 + }; 616 + 617 + #[tokio::test] 618 + async fn forward_xrpc_passes_through_success_body() { 619 + let resp = super::proxy::forward_xrpc::<GetRecordResponse>(Ok(XrpcResponse::new( 620 + Bytes::from_static(b"{\"uri\":\"at://x\"}"), 621 + StatusCode::OK, 622 + ))); 623 + assert_eq!(resp.status(), StatusCode::OK); 624 + assert_eq!(body_text(resp).await, "{\"uri\":\"at://x\"}"); 625 + } 626 + 627 + #[tokio::test] 628 + async fn forward_xrpc_forwards_400_xrpc_error_verbatim() { 629 + // atproto getRecord RecordNotFound is HTTP 400 + an error body (route c: an 630 + // Ok response with a non-success status). The proxy must NOT turn it into 500. 631 + let resp = super::proxy::forward_xrpc::<GetRecordResponse>(Ok(XrpcResponse::new( 632 + Bytes::from_static(b"{\"error\":\"RecordNotFound\",\"message\":\"Record not found\"}"), 633 + StatusCode::BAD_REQUEST, 634 + ))); 635 + assert_eq!(resp.status(), StatusCode::BAD_REQUEST); 636 + assert!(body_text(resp).await.contains("RecordNotFound")); 637 + } 638 + 639 + #[tokio::test] 640 + async fn forward_xrpc_forwards_http_error_status_and_body() { 641 + // route b: Err(Http) for a non-2xx that isn't 400/401 (e.g. 409 InvalidSwap). 642 + let err = ClientError::http( 643 + StatusCode::CONFLICT, 644 + Some(Bytes::from_static(b"{\"error\":\"InvalidSwap\"}")), 645 + ); 646 + let resp = super::proxy::forward_xrpc::<GetRecordResponse>(Err(err)); 647 + assert_eq!(resp.status(), StatusCode::CONFLICT); 648 + assert!(body_text(resp).await.contains("InvalidSwap")); 649 + } 650 + 651 + #[tokio::test] 652 + async fn forward_xrpc_forwards_429_and_500_verbatim() { 653 + for status in [ 654 + StatusCode::TOO_MANY_REQUESTS, 655 + StatusCode::INTERNAL_SERVER_ERROR, 656 + ] { 657 + let err = ClientError::http(status, Some(Bytes::from_static(b"{}"))); 658 + let resp = super::proxy::forward_xrpc::<GetRecordResponse>(Err(err)); 659 + assert_eq!(resp.status(), status); 660 + } 661 + } 662 + 663 + #[tokio::test] 664 + async fn forward_xrpc_auth_error_is_401() { 665 + let resp = super::proxy::forward_xrpc::<GetRecordResponse>(Err(ClientError::auth( 666 + AuthError::NotAuthenticated, 667 + ))); 668 + assert_eq!(resp.status(), StatusCode::UNAUTHORIZED); 669 + } 670 + 671 + #[tokio::test] 672 + async fn forward_xrpc_transport_error_is_500() { 673 + // Genuine transport/internal failures are the only thing that becomes 500. 674 + let err = ClientError::transport(std::io::Error::other("boom")); 675 + let resp = super::proxy::forward_xrpc::<GetRecordResponse>(Err(err)); 676 + assert_eq!(resp.status(), StatusCode::INTERNAL_SERVER_ERROR); 677 + } 678 + 679 + #[tokio::test] 680 + async fn override_returns_local_for_pending_write_with_divergent_cid() { 681 + let pool = pool().await; 682 + let uri = format!("at://{DID_A}/space.polymodel.library.thing/t1"); 683 + sqlx::query("INSERT INTO pending_writes (uri, cid, value, written_at) VALUES (?, ?, ?, ?)") 684 + .bind(&uri) 685 + .bind("LOCALCID") 686 + .bind(json!({"name": "fresh"}).to_string()) 687 + .bind(1i64) 688 + .execute(&pool) 689 + .await 690 + .unwrap(); 691 + let resp = super::proxy::try_get_record_override(&pool, &uri, Some("PDSCID")) 692 + .await 693 + .unwrap() 694 + .expect("divergent pending write overrides the PDS result"); 695 + assert_eq!(resp.status(), StatusCode::OK); 696 + let body = body_text(resp).await; 697 + assert!(body.contains("LOCALCID"), "{body}"); 698 + assert!(body.contains("fresh"), "{body}"); 699 + assert!(!body.contains("stale"), "{body}"); 700 + } 701 + 702 + #[tokio::test] 703 + async fn override_returns_not_found_for_pending_delete() { 704 + let pool = pool().await; 705 + let uri = format!("at://{DID_A}/space.polymodel.library.thing/t1"); 706 + sqlx::query("INSERT INTO pending_deletes (uri, deleted_at) VALUES (?, ?)") 707 + .bind(&uri) 708 + .bind(1i64) 709 + .execute(&pool) 710 + .await 711 + .unwrap(); 712 + let resp = super::proxy::try_get_record_override(&pool, &uri, Some("PDSCID")) 713 + .await 714 + .unwrap() 715 + .expect("pending delete overrides the PDS result"); 716 + assert_eq!(resp.status(), StatusCode::BAD_REQUEST); 717 + assert!(body_text(resp).await.contains("RecordNotFound")); 718 + } 719 + 720 + #[tokio::test] 721 + async fn override_is_none_when_no_pending_state() { 722 + let pool = pool().await; 723 + let uri = format!("at://{DID_A}/space.polymodel.library.thing/t1"); 724 + assert!( 725 + super::proxy::try_get_record_override(&pool, &uri, Some("PDSCID")) 726 + .await 727 + .unwrap() 728 + .is_none() 729 + ); 730 + } 731 + 732 + #[tokio::test] 733 + async fn override_is_none_when_pending_write_cid_matches_pds() { 734 + let pool = pool().await; 735 + let uri = format!("at://{DID_A}/space.polymodel.library.thing/t1"); 736 + sqlx::query("INSERT INTO pending_writes (uri, cid, value, written_at) VALUES (?, ?, ?, ?)") 737 + .bind(&uri) 738 + .bind("SAMECID") 739 + .bind("{}") 740 + .bind(1i64) 741 + .execute(&pool) 742 + .await 743 + .unwrap(); 744 + // Cids match → the firehose has effectively confirmed → forward the PDS. 745 + assert!( 746 + super::proxy::try_get_record_override(&pool, &uri, Some("SAMECID")) 747 + .await 748 + .unwrap() 749 + .is_none() 750 + ); 751 + } 752 + 753 + #[tokio::test] 754 + async fn override_returns_local_when_pds_reports_not_found() { 755 + // A pending write must win even when a lagging PDS reports not-found 756 + // (pds_cid is None) rather than a divergent record — the core 757 + // read-your-writes case. 758 + let pool = pool().await; 759 + let uri = format!("at://{DID_A}/space.polymodel.library.thing/t1"); 760 + sqlx::query("INSERT INTO pending_writes (uri, cid, value, written_at) VALUES (?, ?, ?, ?)") 761 + .bind(&uri) 762 + .bind("LOCALCID") 763 + .bind(json!({"name": "fresh"}).to_string()) 764 + .bind(1i64) 765 + .execute(&pool) 766 + .await 767 + .unwrap(); 768 + let resp = super::proxy::try_get_record_override(&pool, &uri, None) 769 + .await 770 + .unwrap() 771 + .expect("pending write wins over a lagging not-found"); 772 + assert_eq!(resp.status(), StatusCode::OK); 773 + let body = body_text(resp).await; 774 + assert!(body.contains("LOCALCID"), "{body}"); 775 + assert!(body.contains("fresh"), "{body}"); 776 + } 777 + 778 + fn poly_event(action: &str, record: Option<Value>) -> ProjectionEvent { 779 + ProjectionEvent { 780 + seq: 1, 781 + did: DID_A.to_string(), 782 + collection: "space.polymodel.library.thing".to_string(), 783 + rkey: "t1".to_string(), 784 + action: action.to_string(), 785 + record, 786 + cid: Some("C1".to_string()), 787 + } 788 + } 789 + 790 + #[tokio::test] 791 + async fn eager_write_marks_pending_and_firehose_clears_it() { 792 + let pool = pool().await; 793 + let uri = format!("at://{DID_A}/space.polymodel.library.thing/t1"); 794 + let record = 795 + json!({"name": "x", "license": "CC-BY-4.0", "createdAt": "2024-01-01T00:00:00.000Z"}); 796 + project_eager_record(&pool, &poly_event("create", Some(record.clone()))) 797 + .await 798 + .unwrap(); 799 + let pending_cid: String = sqlx::query_scalar("SELECT cid FROM pending_writes WHERE uri = ?") 800 + .bind(&uri) 801 + .fetch_one(&pool) 802 + .await 803 + .unwrap(); 804 + assert_eq!(pending_cid, "C1"); 805 + 806 + // The Hydrant #commit re-delivering the same create clears the pending row. 807 + project_event( 808 + &pool, 809 + &ProjectionInput::Record(poly_event("create", Some(record))), 810 + ) 811 + .await 812 + .unwrap(); 813 + let remaining: i64 = sqlx::query_scalar("SELECT COUNT(*) FROM pending_writes WHERE uri = ?") 814 + .bind(&uri) 815 + .fetch_one(&pool) 816 + .await 817 + .unwrap(); 818 + assert_eq!(remaining, 0); 819 + } 820 + 821 + #[tokio::test] 822 + async fn eager_delete_marks_pending_and_firehose_clears_it() { 823 + let pool = pool().await; 824 + let uri = format!("at://{DID_A}/space.polymodel.library.thing/t1"); 825 + project_eager_record(&pool, &poly_event("delete", None)) 826 + .await 827 + .unwrap(); 828 + let n: i64 = sqlx::query_scalar("SELECT COUNT(*) FROM pending_deletes WHERE uri = ?") 829 + .bind(&uri) 830 + .fetch_one(&pool) 831 + .await 832 + .unwrap(); 833 + assert_eq!(n, 1); 834 + 835 + project_event(&pool, &ProjectionInput::Record(poly_event("delete", None))) 836 + .await 837 + .unwrap(); 838 + let n: i64 = sqlx::query_scalar("SELECT COUNT(*) FROM pending_deletes WHERE uri = ?") 839 + .bind(&uri) 840 + .fetch_one(&pool) 841 + .await 842 + .unwrap(); 843 + assert_eq!(n, 0); 844 + } 845 + 846 + #[tokio::test] 847 + async fn proxy_structural_allowlist_404s_non_allowlisted_methods() { 848 + let state = state().await; 849 + let app = super::router().with_state(state); 850 + for path in [ 851 + "/xrpc/com.atproto.repo.applyWrites", 852 + "/xrpc/com.atproto.repo.importRepo", 853 + "/xrpc/com.atproto.repo.listMissingBlobs", 854 + "/xrpc/app.bsky.feed.getTimeline", 855 + "/xrpc/com.atproto.server.getSession", 856 + ] { 857 + let resp = app 858 + .clone() 859 + .oneshot(Request::builder().uri(path).body(Body::empty()).unwrap()) 860 + .await 861 + .unwrap(); 862 + assert_eq!( 863 + resp.status(), 864 + StatusCode::NOT_FOUND, 865 + "{path} must not be proxied" 866 + ); 867 + } 868 + } 869 + 870 + #[tokio::test] 871 + async fn proxy_pds_routes_require_an_oauth_session() { 872 + let state = state().await; 873 + let app = super::router().with_state(state); 874 + // createRecord (procedure) with no session → 401. 875 + let resp = app 876 + .clone() 877 + .oneshot( 878 + Request::builder() 879 + .method("POST") 880 + .uri("/xrpc/com.atproto.repo.createRecord") 881 + .header("content-type", "application/json") 882 + .body(Body::from("{}")) 883 + .unwrap(), 884 + ) 885 + .await 886 + .unwrap(); 887 + assert_eq!(resp.status(), StatusCode::UNAUTHORIZED); 888 + // getRecord (query) with no session → 401. 889 + let resp = app 890 + .oneshot( 891 + Request::builder() 892 + .uri( 893 + "/xrpc/com.atproto.repo.getRecord?repo=did:plc:x\ 894 + &collection=space.polymodel.library.thing&rkey=t1", 895 + ) 896 + .body(Body::empty()) 897 + .unwrap(), 898 + ) 899 + .await 900 + .unwrap(); 901 + assert_eq!(resp.status(), StatusCode::UNAUTHORIZED); 902 + }
+95
src/indexing/projection.rs
··· 95 95 let seq = match input { 96 96 ProjectionInput::Record(event) => { 97 97 project_record(&mut tx, event).await?; 98 + clear_pending(&mut tx, event).await?; 98 99 event.seq 99 100 } 100 101 ProjectionInput::Identity(event) => { ··· 117 118 pub async fn project_eager_record(db: &SqlitePool, event: &ProjectionEvent) -> anyhow::Result<()> { 118 119 let mut tx = db.begin().await?; 119 120 project_record(&mut tx, event).await?; 121 + record_pending(&mut tx, event).await?; 120 122 tx.commit().await?; 123 + Ok(()) 124 + } 125 + 126 + /// Record pending read-your-writes state for an eagerly-projected op. 127 + /// 128 + /// Called only from the eager path (PM-28 mediated writes + the PM-47 proxy), 129 + /// in the same transaction as [`project_record`]. A create/update marks the 130 + /// record's local cid/value pending until the firehose re-delivers it; a delete 131 + /// marks it pending-deleted. Non-`space.polymodel.*` events are skipped (only 132 + /// polymodel is indexed, so only polymodel can carry pending state). 133 + async fn record_pending( 134 + tx: &mut Transaction<'_, Sqlite>, 135 + event: &ProjectionEvent, 136 + ) -> anyhow::Result<()> { 137 + if !event.collection.starts_with("space.polymodel.") { 138 + return Ok(()); 139 + } 140 + let uri = at_uri(&event.did, &event.collection, &event.rkey); 141 + match event.action.as_str() { 142 + "create" | "update" => { 143 + let (Some(cid), Some(record)) = (event.cid.clone(), event.record.as_ref()) else { 144 + return Ok(()); 145 + }; 146 + let value = record.to_string(); 147 + let now = now_nanos(); 148 + sqlx::query!( 149 + "INSERT INTO pending_writes (uri, cid, value, written_at) VALUES (?, ?, ?, ?) \ 150 + ON CONFLICT(uri) DO UPDATE SET cid = excluded.cid, value = excluded.value, \ 151 + written_at = excluded.written_at", 152 + uri, 153 + cid, 154 + value, 155 + now, 156 + ) 157 + .execute(&mut **tx) 158 + .await?; 159 + sqlx::query!("DELETE FROM pending_deletes WHERE uri = ?", uri) 160 + .execute(&mut **tx) 161 + .await?; 162 + } 163 + "delete" => { 164 + let now = now_nanos(); 165 + sqlx::query!( 166 + "INSERT INTO pending_deletes (uri, deleted_at) VALUES (?, ?) \ 167 + ON CONFLICT(uri) DO UPDATE SET deleted_at = excluded.deleted_at", 168 + uri, 169 + now, 170 + ) 171 + .execute(&mut **tx) 172 + .await?; 173 + sqlx::query!("DELETE FROM pending_writes WHERE uri = ?", uri) 174 + .execute(&mut **tx) 175 + .await?; 176 + } 177 + _ => {} 178 + } 179 + Ok(()) 180 + } 181 + 182 + /// Clear pending read-your-writes state once the Hydrant firehose has 183 + /// re-delivered the same event (the PDS/AppView is now authoritative again). 184 + /// 185 + /// Called from the firehose projection path ([`project_event`]) in the same 186 + /// transaction as [`project_record`], only for `space.polymodel.*`. 187 + async fn clear_pending( 188 + tx: &mut Transaction<'_, Sqlite>, 189 + event: &ProjectionEvent, 190 + ) -> anyhow::Result<()> { 191 + if !event.collection.starts_with("space.polymodel.") { 192 + return Ok(()); 193 + } 194 + let uri = at_uri(&event.did, &event.collection, &event.rkey); 195 + match event.action.as_str() { 196 + "create" | "update" => { 197 + // Clear only if the firehose event's cid matches the pending write, 198 + // so a re-ordered (older) commit can't clear a newer pending write. 199 + if let Some(cid) = &event.cid { 200 + sqlx::query!( 201 + "DELETE FROM pending_writes WHERE uri = ? AND cid = ?", 202 + uri, 203 + cid 204 + ) 205 + .execute(&mut **tx) 206 + .await?; 207 + } 208 + } 209 + "delete" => { 210 + sqlx::query!("DELETE FROM pending_deletes WHERE uri = ?", uri) 211 + .execute(&mut **tx) 212 + .await?; 213 + } 214 + _ => {} 215 + } 121 216 Ok(()) 122 217 } 123 218
+1294
tools/renderer-step/build/opencascade.d.ts
··· 1 + export declare class BRep_Builder extends TopoDS_Builder { 2 + constructor(); 3 + MakeFace_1(F: TopoDS_Face): void; 4 + MakeFace_2(F: TopoDS_Face, S: Handle_Geom_Surface, Tol: Standard_Real): void; 5 + MakeFace_3(F: TopoDS_Face, S: Handle_Geom_Surface, L: TopLoc_Location, Tol: Standard_Real): void; 6 + MakeFace_4(theFace: TopoDS_Face, theTriangulation: Handle_Poly_Triangulation): void; 7 + MakeFace_5(theFace: TopoDS_Face, theTriangulations: Poly_ListOfTriangulation, theActiveTriangulation: Handle_Poly_Triangulation): void; 8 + UpdateFace_1(F: TopoDS_Face, S: Handle_Geom_Surface, L: TopLoc_Location, Tol: Standard_Real): void; 9 + UpdateFace_2(theFace: TopoDS_Face, theTriangulation: Handle_Poly_Triangulation, theToReset: Standard_Boolean): void; 10 + UpdateFace_3(F: TopoDS_Face, Tol: Standard_Real): void; 11 + NaturalRestriction(F: TopoDS_Face, N: Standard_Boolean): void; 12 + MakeEdge_1(E: TopoDS_Edge): void; 13 + MakeEdge_2(E: TopoDS_Edge, C: Handle_Geom_Curve, Tol: Standard_Real): void; 14 + MakeEdge_3(E: TopoDS_Edge, C: Handle_Geom_Curve, L: TopLoc_Location, Tol: Standard_Real): void; 15 + MakeEdge_4(E: TopoDS_Edge, P: Handle_Poly_Polygon3D): void; 16 + MakeEdge_5(E: TopoDS_Edge, N: Handle_Poly_PolygonOnTriangulation, T: Handle_Poly_Triangulation): void; 17 + MakeEdge_6(E: TopoDS_Edge, N: Handle_Poly_PolygonOnTriangulation, T: Handle_Poly_Triangulation, L: TopLoc_Location): void; 18 + UpdateEdge_1(E: TopoDS_Edge, C: Handle_Geom_Curve, Tol: Standard_Real): void; 19 + UpdateEdge_2(E: TopoDS_Edge, C: Handle_Geom_Curve, L: TopLoc_Location, Tol: Standard_Real): void; 20 + UpdateEdge_3(E: TopoDS_Edge, C: Handle_Geom2d_Curve, F: TopoDS_Face, Tol: Standard_Real): void; 21 + UpdateEdge_4(E: TopoDS_Edge, C1: Handle_Geom2d_Curve, C2: Handle_Geom2d_Curve, F: TopoDS_Face, Tol: Standard_Real): void; 22 + UpdateEdge_5(E: TopoDS_Edge, C: Handle_Geom2d_Curve, S: Handle_Geom_Surface, L: TopLoc_Location, Tol: Standard_Real): void; 23 + UpdateEdge_6(E: TopoDS_Edge, C: Handle_Geom2d_Curve, S: Handle_Geom_Surface, L: TopLoc_Location, Tol: Standard_Real, Pf: gp_Pnt2d, Pl: gp_Pnt2d): void; 24 + UpdateEdge_7(E: TopoDS_Edge, C1: Handle_Geom2d_Curve, C2: Handle_Geom2d_Curve, S: Handle_Geom_Surface, L: TopLoc_Location, Tol: Standard_Real): void; 25 + UpdateEdge_8(E: TopoDS_Edge, C1: Handle_Geom2d_Curve, C2: Handle_Geom2d_Curve, S: Handle_Geom_Surface, L: TopLoc_Location, Tol: Standard_Real, Pf: gp_Pnt2d, Pl: gp_Pnt2d): void; 26 + UpdateEdge_9(E: TopoDS_Edge, P: Handle_Poly_Polygon3D): void; 27 + UpdateEdge_10(E: TopoDS_Edge, P: Handle_Poly_Polygon3D, L: TopLoc_Location): void; 28 + UpdateEdge_11(E: TopoDS_Edge, N: Handle_Poly_PolygonOnTriangulation, T: Handle_Poly_Triangulation): void; 29 + UpdateEdge_12(E: TopoDS_Edge, N: Handle_Poly_PolygonOnTriangulation, T: Handle_Poly_Triangulation, L: TopLoc_Location): void; 30 + UpdateEdge_13(E: TopoDS_Edge, N1: Handle_Poly_PolygonOnTriangulation, N2: Handle_Poly_PolygonOnTriangulation, T: Handle_Poly_Triangulation): void; 31 + UpdateEdge_14(E: TopoDS_Edge, N1: Handle_Poly_PolygonOnTriangulation, N2: Handle_Poly_PolygonOnTriangulation, T: Handle_Poly_Triangulation, L: TopLoc_Location): void; 32 + UpdateEdge_15(E: TopoDS_Edge, P: Handle_Poly_Polygon2D, S: TopoDS_Face): void; 33 + UpdateEdge_16(E: TopoDS_Edge, P: Handle_Poly_Polygon2D, S: Handle_Geom_Surface, T: TopLoc_Location): void; 34 + UpdateEdge_17(E: TopoDS_Edge, P1: Handle_Poly_Polygon2D, P2: Handle_Poly_Polygon2D, S: TopoDS_Face): void; 35 + UpdateEdge_18(E: TopoDS_Edge, P1: Handle_Poly_Polygon2D, P2: Handle_Poly_Polygon2D, S: Handle_Geom_Surface, L: TopLoc_Location): void; 36 + UpdateEdge_19(E: TopoDS_Edge, Tol: Standard_Real): void; 37 + Continuity_1(E: TopoDS_Edge, F1: TopoDS_Face, F2: TopoDS_Face, C: GeomAbs_Shape): void; 38 + Continuity_2(E: TopoDS_Edge, S1: Handle_Geom_Surface, S2: Handle_Geom_Surface, L1: TopLoc_Location, L2: TopLoc_Location, C: GeomAbs_Shape): void; 39 + SameParameter(E: TopoDS_Edge, S: Standard_Boolean): void; 40 + SameRange(E: TopoDS_Edge, S: Standard_Boolean): void; 41 + Degenerated(E: TopoDS_Edge, D: Standard_Boolean): void; 42 + Range_1(E: TopoDS_Edge, First: Standard_Real, Last: Standard_Real, Only3d: Standard_Boolean): void; 43 + Range_2(E: TopoDS_Edge, S: Handle_Geom_Surface, L: TopLoc_Location, First: Standard_Real, Last: Standard_Real): void; 44 + Range_3(E: TopoDS_Edge, F: TopoDS_Face, First: Standard_Real, Last: Standard_Real): void; 45 + Transfert_1(Ein: TopoDS_Edge, Eout: TopoDS_Edge): void; 46 + MakeVertex_1(V: TopoDS_Vertex): void; 47 + MakeVertex_2(V: TopoDS_Vertex, P: gp_Pnt, Tol: Standard_Real): void; 48 + UpdateVertex_1(V: TopoDS_Vertex, P: gp_Pnt, Tol: Standard_Real): void; 49 + UpdateVertex_2(V: TopoDS_Vertex, P: Standard_Real, E: TopoDS_Edge, Tol: Standard_Real): void; 50 + UpdateVertex_3(V: TopoDS_Vertex, P: Standard_Real, E: TopoDS_Edge, F: TopoDS_Face, Tol: Standard_Real): void; 51 + UpdateVertex_4(V: TopoDS_Vertex, P: Standard_Real, E: TopoDS_Edge, S: Handle_Geom_Surface, L: TopLoc_Location, Tol: Standard_Real): void; 52 + UpdateVertex_5(Ve: TopoDS_Vertex, U: Standard_Real, V: Standard_Real, F: TopoDS_Face, Tol: Standard_Real): void; 53 + UpdateVertex_6(V: TopoDS_Vertex, Tol: Standard_Real): void; 54 + Transfert_2(Ein: TopoDS_Edge, Eout: TopoDS_Edge, Vin: TopoDS_Vertex, Vout: TopoDS_Vertex): void; 55 + delete(): void; 56 + } 57 + 58 + export declare class BRepMesh_DiscretRoot extends Standard_Transient { 59 + SetShape(theShape: TopoDS_Shape): void; 60 + Shape(): TopoDS_Shape; 61 + IsDone(): Standard_Boolean; 62 + Perform(theRange: Message_ProgressRange): void; 63 + static get_type_name(): Standard_Character; 64 + static get_type_descriptor(): Handle_Standard_Type; 65 + DynamicType(): Handle_Standard_Type; 66 + delete(): void; 67 + } 68 + 69 + export declare class BRepMesh_IncrementalMesh extends BRepMesh_DiscretRoot { 70 + Perform_1(theRange: Message_ProgressRange): void; 71 + Perform_2(theContext: any, theRange: Message_ProgressRange): void; 72 + Parameters(): IMeshTools_Parameters; 73 + ChangeParameters(): IMeshTools_Parameters; 74 + IsModified(): Standard_Boolean; 75 + GetStatusFlags(): Graphic3d_ZLayerId; 76 + static Discret(theShape: TopoDS_Shape, theLinDeflection: Standard_Real, theAngDeflection: Standard_Real, theAlgo: BRepMesh_DiscretRoot): Graphic3d_ZLayerId; 77 + static IsParallelDefault(): Standard_Boolean; 78 + static SetParallelDefault(isInParallel: Standard_Boolean): void; 79 + static get_type_name(): Standard_Character; 80 + static get_type_descriptor(): Handle_Standard_Type; 81 + DynamicType(): Handle_Standard_Type; 82 + delete(): void; 83 + } 84 + 85 + export declare class BRepMesh_IncrementalMesh_1 extends BRepMesh_IncrementalMesh { 86 + constructor(); 87 + } 88 + 89 + export declare class BRepMesh_IncrementalMesh_2 extends BRepMesh_IncrementalMesh { 90 + constructor(theShape: TopoDS_Shape, theLinDeflection: Standard_Real, isRelative: Standard_Boolean, theAngDeflection: Standard_Real, isInParallel: Standard_Boolean); 91 + } 92 + 93 + export declare class BRepMesh_IncrementalMesh_3 extends BRepMesh_IncrementalMesh { 94 + constructor(theShape: TopoDS_Shape, theParameters: IMeshTools_Parameters, theRange: Message_ProgressRange); 95 + } 96 + 97 + export declare class BRepTools { 98 + constructor(); 99 + static UVBounds_1(F: TopoDS_Face, UMin: Standard_Real, UMax: Standard_Real, VMin: Standard_Real, VMax: Standard_Real): void; 100 + static UVBounds_2(F: TopoDS_Face, W: TopoDS_Wire, UMin: Standard_Real, UMax: Standard_Real, VMin: Standard_Real, VMax: Standard_Real): void; 101 + static UVBounds_3(F: TopoDS_Face, E: TopoDS_Edge, UMin: Standard_Real, UMax: Standard_Real, VMin: Standard_Real, VMax: Standard_Real): void; 102 + static AddUVBounds_1(F: TopoDS_Face, B: Bnd_Box2d): void; 103 + static AddUVBounds_2(F: TopoDS_Face, W: TopoDS_Wire, B: Bnd_Box2d): void; 104 + static AddUVBounds_3(F: TopoDS_Face, E: TopoDS_Edge, B: Bnd_Box2d): void; 105 + static Update_1(V: TopoDS_Vertex): void; 106 + static Update_2(E: TopoDS_Edge): void; 107 + static Update_3(W: TopoDS_Wire): void; 108 + static Update_4(F: TopoDS_Face): void; 109 + static Update_5(S: TopoDS_Shell): void; 110 + static Update_6(S: TopoDS_Solid): void; 111 + static Update_7(C: TopoDS_CompSolid): void; 112 + static Update_8(C: TopoDS_Compound): void; 113 + static Update_9(S: TopoDS_Shape): void; 114 + static UpdateFaceUVPoints(theF: TopoDS_Face): void; 115 + static Clean(theShape: TopoDS_Shape, theForce: Standard_Boolean): void; 116 + static CleanGeometry(theShape: TopoDS_Shape): void; 117 + static RemoveUnusedPCurves(S: TopoDS_Shape): void; 118 + static Triangulation(theShape: TopoDS_Shape, theLinDefl: Standard_Real, theToCheckFreeEdges: Standard_Boolean): Standard_Boolean; 119 + static LoadTriangulation(theShape: TopoDS_Shape, theTriangulationIdx: Graphic3d_ZLayerId, theToSetAsActive: Standard_Boolean, theFileSystem: any): Standard_Boolean; 120 + static UnloadTriangulation(theShape: TopoDS_Shape, theTriangulationIdx: Graphic3d_ZLayerId): Standard_Boolean; 121 + static ActivateTriangulation(theShape: TopoDS_Shape, theTriangulationIdx: Graphic3d_ZLayerId, theToActivateStrictly: Standard_Boolean): Standard_Boolean; 122 + static LoadAllTriangulations(theShape: TopoDS_Shape, theFileSystem: any): Standard_Boolean; 123 + static UnloadAllTriangulations(theShape: TopoDS_Shape): Standard_Boolean; 124 + static Compare_1(V1: TopoDS_Vertex, V2: TopoDS_Vertex): Standard_Boolean; 125 + static Compare_2(E1: TopoDS_Edge, E2: TopoDS_Edge): Standard_Boolean; 126 + static OuterWire(F: TopoDS_Face): TopoDS_Wire; 127 + static Map3DEdges(S: TopoDS_Shape, M: TopTools_IndexedMapOfShape): void; 128 + static IsReallyClosed(E: TopoDS_Edge, F: TopoDS_Face): Standard_Boolean; 129 + static DetectClosedness(theFace: TopoDS_Face, theUclosed: Standard_Boolean, theVclosed: Standard_Boolean): void; 130 + static Dump(Sh: TopoDS_Shape, S: Standard_OStream): void; 131 + static Write_1(theShape: TopoDS_Shape, theStream: Standard_OStream, theProgress: Message_ProgressRange): void; 132 + static Write_2(theShape: TopoDS_Shape, theStream: Standard_OStream, theWithTriangles: Standard_Boolean, theWithNormals: Standard_Boolean, theVersion: TopTools_FormatVersion, theProgress: Message_ProgressRange): void; 133 + static Read_1(Sh: TopoDS_Shape, S: Standard_IStream, B: BRep_Builder, theProgress: Message_ProgressRange): void; 134 + static Write_3(theShape: TopoDS_Shape, theFile: Standard_CString, theProgress: Message_ProgressRange): Standard_Boolean; 135 + static Write_4(theShape: TopoDS_Shape, theFile: Standard_CString, theWithTriangles: Standard_Boolean, theWithNormals: Standard_Boolean, theVersion: TopTools_FormatVersion, theProgress: Message_ProgressRange): Standard_Boolean; 136 + static Read_2(Sh: TopoDS_Shape, File: Standard_CString, B: BRep_Builder, theProgress: Message_ProgressRange): Standard_Boolean; 137 + static EvalAndUpdateTol(theE: TopoDS_Edge, theC3d: Handle_Geom_Curve, theC2d: Handle_Geom2d_Curve, theS: Handle_Geom_Surface, theF: Standard_Real, theL: Standard_Real): Standard_Real; 138 + static OriEdgeInFace(theEdge: TopoDS_Edge, theFace: TopoDS_Face): TopAbs_Orientation; 139 + static RemoveInternals(theS: TopoDS_Shape, theForce: Standard_Boolean): void; 140 + static CheckLocations(theS: TopoDS_Shape, theProblemShapes: TopTools_ListOfShape): void; 141 + delete(): void; 142 + } 143 + 144 + export declare class CDM_Document extends Standard_Transient { 145 + Update_1(aToDocument: Handle_CDM_Document, aReferenceIdentifier: Graphic3d_ZLayerId, aModifContext: Standard_Address): void; 146 + Update_2(ErrorString: TCollection_ExtendedString): Standard_Boolean; 147 + StorageFormat(): TCollection_ExtendedString; 148 + Extensions(Extensions: TColStd_SequenceOfExtendedString): void; 149 + GetAlternativeDocument(aFormat: TCollection_ExtendedString, anAlternativeDocument: Handle_CDM_Document): Standard_Boolean; 150 + CreateReference_1(anOtherDocument: Handle_CDM_Document): Graphic3d_ZLayerId; 151 + RemoveReference(aReferenceIdentifier: Graphic3d_ZLayerId): void; 152 + RemoveAllReferences(): void; 153 + Document(aReferenceIdentifier: Graphic3d_ZLayerId): Handle_CDM_Document; 154 + IsInSession(aReferenceIdentifier: Graphic3d_ZLayerId): Standard_Boolean; 155 + IsStored_1(aReferenceIdentifier: Graphic3d_ZLayerId): Standard_Boolean; 156 + Name(aReferenceIdentifier: Graphic3d_ZLayerId): TCollection_ExtendedString; 157 + UpdateFromDocuments(aModifContext: Standard_Address): void; 158 + ToReferencesNumber(): Graphic3d_ZLayerId; 159 + FromReferencesNumber(): Graphic3d_ZLayerId; 160 + ShallowReferences(aDocument: Handle_CDM_Document): Standard_Boolean; 161 + DeepReferences(aDocument: Handle_CDM_Document): Standard_Boolean; 162 + CopyReference(aFromDocument: Handle_CDM_Document, aReferenceIdentifier: Graphic3d_ZLayerId): Graphic3d_ZLayerId; 163 + IsReadOnly_1(): Standard_Boolean; 164 + IsReadOnly_2(aReferenceIdentifier: Graphic3d_ZLayerId): Standard_Boolean; 165 + SetIsReadOnly(): void; 166 + UnsetIsReadOnly(): void; 167 + Modify(): void; 168 + Modifications(): Graphic3d_ZLayerId; 169 + UnModify(): void; 170 + IsUpToDate(aReferenceIdentifier: Graphic3d_ZLayerId): Standard_Boolean; 171 + SetIsUpToDate(aReferenceIdentifier: Graphic3d_ZLayerId): void; 172 + SetComment(aComment: TCollection_ExtendedString): void; 173 + AddComment(aComment: TCollection_ExtendedString): void; 174 + SetComments(aComments: TColStd_SequenceOfExtendedString): void; 175 + Comments(aComments: TColStd_SequenceOfExtendedString): void; 176 + Comment(): Standard_ExtString; 177 + IsStored_2(): Standard_Boolean; 178 + StorageVersion(): Graphic3d_ZLayerId; 179 + SetMetaData(aMetaData: Handle_CDM_MetaData): void; 180 + UnsetIsStored(): void; 181 + MetaData(): Handle_CDM_MetaData; 182 + Folder(): TCollection_ExtendedString; 183 + SetRequestedFolder(aFolder: TCollection_ExtendedString): void; 184 + RequestedFolder(): TCollection_ExtendedString; 185 + HasRequestedFolder(): Standard_Boolean; 186 + SetRequestedName(aName: TCollection_ExtendedString): void; 187 + RequestedName(): TCollection_ExtendedString; 188 + SetRequestedPreviousVersion(aPreviousVersion: TCollection_ExtendedString): void; 189 + UnsetRequestedPreviousVersion(): void; 190 + HasRequestedPreviousVersion(): Standard_Boolean; 191 + RequestedPreviousVersion(): TCollection_ExtendedString; 192 + SetRequestedComment(aComment: TCollection_ExtendedString): void; 193 + RequestedComment(): TCollection_ExtendedString; 194 + LoadResources(): void; 195 + FindFileExtension(): Standard_Boolean; 196 + FileExtension(): TCollection_ExtendedString; 197 + FindDescription(): Standard_Boolean; 198 + Description(): TCollection_ExtendedString; 199 + IsModified(): Standard_Boolean; 200 + IsOpened_1(): Standard_Boolean; 201 + Open(anApplication: Handle_CDM_Application): void; 202 + CanClose(): CDM_CanCloseStatus; 203 + Close(): void; 204 + Application(): Handle_CDM_Application; 205 + CanCloseReference(aDocument: Handle_CDM_Document, aReferenceIdentifier: Graphic3d_ZLayerId): Standard_Boolean; 206 + CloseReference(aDocument: Handle_CDM_Document, aReferenceIdentifier: Graphic3d_ZLayerId): void; 207 + IsOpened_2(aReferenceIdentifier: Graphic3d_ZLayerId): Standard_Boolean; 208 + CreateReference_2(aMetaData: Handle_CDM_MetaData, aReferenceIdentifier: Graphic3d_ZLayerId, anApplication: Handle_CDM_Application, aToDocumentVersion: Graphic3d_ZLayerId, UseStorageConfiguration: Standard_Boolean): void; 209 + CreateReference_3(aMetaData: Handle_CDM_MetaData, anApplication: Handle_CDM_Application, aDocumentVersion: Graphic3d_ZLayerId, UseStorageConfiguration: Standard_Boolean): Graphic3d_ZLayerId; 210 + ReferenceCounter(): Graphic3d_ZLayerId; 211 + Update_3(): void; 212 + Reference(aReferenceIdentifier: Graphic3d_ZLayerId): Handle_CDM_Reference; 213 + SetModifications(Modifications: Graphic3d_ZLayerId): void; 214 + SetReferenceCounter(aReferenceCounter: Graphic3d_ZLayerId): void; 215 + DumpJson(theOStream: Standard_OStream, theDepth: Graphic3d_ZLayerId): void; 216 + static get_type_name(): Standard_Character; 217 + static get_type_descriptor(): Handle_Standard_Type; 218 + DynamicType(): Handle_Standard_Type; 219 + delete(): void; 220 + } 221 + 222 + export declare type IFSelect_ReturnStatus = { 223 + IFSelect_RetVoid: {}; 224 + IFSelect_RetDone: {}; 225 + IFSelect_RetError: {}; 226 + IFSelect_RetFail: {}; 227 + IFSelect_RetStop: {}; 228 + } 229 + 230 + export declare class Message_ProgressRange { 231 + UserBreak(): Standard_Boolean; 232 + More(): Standard_Boolean; 233 + IsActive(): Standard_Boolean; 234 + Close(): void; 235 + delete(): void; 236 + } 237 + 238 + export declare class Message_ProgressRange_1 extends Message_ProgressRange { 239 + constructor(); 240 + } 241 + 242 + export declare class Message_ProgressRange_2 extends Message_ProgressRange { 243 + constructor(theOther: Message_ProgressRange); 244 + } 245 + 246 + export declare class NCollection_BaseMap { 247 + NbBuckets(): Graphic3d_ZLayerId; 248 + Extent(): Graphic3d_ZLayerId; 249 + IsEmpty(): Standard_Boolean; 250 + Statistics(S: Standard_OStream): void; 251 + Allocator(): Handle_NCollection_BaseAllocator; 252 + delete(): void; 253 + } 254 + 255 + export declare class NCollection_BaseSequence { 256 + IsEmpty(): Standard_Boolean; 257 + Length(): Graphic3d_ZLayerId; 258 + Allocator(): Handle_NCollection_BaseAllocator; 259 + delete(): void; 260 + } 261 + 262 + export declare class RWGltf_CafWriter extends Standard_Transient { 263 + constructor(theFile: XCAFDoc_PartId, theIsBinary: Standard_Boolean) 264 + static get_type_name(): Standard_Character; 265 + static get_type_descriptor(): Handle_Standard_Type; 266 + DynamicType(): Handle_Standard_Type; 267 + CoordinateSystemConverter(): RWMesh_CoordinateSystemConverter; 268 + ChangeCoordinateSystemConverter(): RWMesh_CoordinateSystemConverter; 269 + SetCoordinateSystemConverter(theConverter: RWMesh_CoordinateSystemConverter): void; 270 + IsBinary(): Standard_Boolean; 271 + TransformationFormat(): RWGltf_WriterTrsfFormat; 272 + SetTransformationFormat(theFormat: RWGltf_WriterTrsfFormat): void; 273 + NodeNameFormat(): RWMesh_NameFormat; 274 + SetNodeNameFormat(theFormat: RWMesh_NameFormat): void; 275 + MeshNameFormat(): RWMesh_NameFormat; 276 + SetMeshNameFormat(theFormat: RWMesh_NameFormat): void; 277 + IsForcedUVExport(): Standard_Boolean; 278 + SetForcedUVExport(theToForce: Standard_Boolean): void; 279 + DefaultStyle(): XCAFPrs_Style; 280 + SetDefaultStyle(theStyle: XCAFPrs_Style): void; 281 + ToEmbedTexturesInGlb(): Standard_Boolean; 282 + SetToEmbedTexturesInGlb(theToEmbedTexturesInGlb: Standard_Boolean): void; 283 + ToMergeFaces(): Standard_Boolean; 284 + SetMergeFaces(theToMerge: Standard_Boolean): void; 285 + ToSplitIndices16(): Standard_Boolean; 286 + SetSplitIndices16(theToSplit: Standard_Boolean): void; 287 + Perform_1(theDocument: Handle_TDocStd_Document, theRootLabels: TDF_LabelSequence, theLabelFilter: TColStd_MapOfAsciiString, theFileInfo: TColStd_IndexedDataMapOfStringString, theProgress: Message_ProgressRange): Standard_Boolean; 288 + Perform_2(theDocument: Handle_TDocStd_Document, theFileInfo: TColStd_IndexedDataMapOfStringString, theProgress: Message_ProgressRange): Standard_Boolean; 289 + delete(): void; 290 + } 291 + 292 + export declare class STEPCAFControl_Reader { 293 + Init(WS: Handle_XSControl_WorkSession, scratch: Standard_Boolean): void; 294 + ReadFile(filename: Standard_CString): IFSelect_ReturnStatus; 295 + NbRootsForTransfer(): Graphic3d_ZLayerId; 296 + TransferOneRoot(num: Graphic3d_ZLayerId, doc: Handle_TDocStd_Document, theProgress: Message_ProgressRange): Standard_Boolean; 297 + Transfer_1(doc: Handle_TDocStd_Document, theProgress: Message_ProgressRange): Standard_Boolean; 298 + Perform_1(filename: XCAFDoc_PartId, doc: Handle_TDocStd_Document, theProgress: Message_ProgressRange): Standard_Boolean; 299 + Perform_2(filename: Standard_CString, doc: Handle_TDocStd_Document, theProgress: Message_ProgressRange): Standard_Boolean; 300 + ExternFiles(): any; 301 + ExternFile(name: Standard_CString, ef: Handle_STEPCAFControl_ExternFile): Standard_Boolean; 302 + ChangeReader(): STEPControl_Reader; 303 + Reader(): STEPControl_Reader; 304 + static FindInstance(NAUO: Handle_StepRepr_NextAssemblyUsageOccurrence, STool: Handle_XCAFDoc_ShapeTool, Tool: STEPConstruct_Tool, ShapeLabelMap: XCAFDoc_DataMapOfShapeLabel): TDF_Label; 305 + SetColorMode(colormode: Standard_Boolean): void; 306 + GetColorMode(): Standard_Boolean; 307 + SetNameMode(namemode: Standard_Boolean): void; 308 + GetNameMode(): Standard_Boolean; 309 + SetLayerMode(layermode: Standard_Boolean): void; 310 + GetLayerMode(): Standard_Boolean; 311 + SetPropsMode(propsmode: Standard_Boolean): void; 312 + GetPropsMode(): Standard_Boolean; 313 + SetSHUOMode(shuomode: Standard_Boolean): void; 314 + GetSHUOMode(): Standard_Boolean; 315 + SetGDTMode(gdtmode: Standard_Boolean): void; 316 + GetGDTMode(): Standard_Boolean; 317 + SetMatMode(matmode: Standard_Boolean): void; 318 + GetMatMode(): Standard_Boolean; 319 + SetViewMode(viewmode: Standard_Boolean): void; 320 + GetViewMode(): Standard_Boolean; 321 + GetShapeLabelMap(): XCAFDoc_DataMapOfShapeLabel; 322 + delete(): void; 323 + } 324 + 325 + export declare class STEPCAFControl_Reader_1 extends STEPCAFControl_Reader { 326 + constructor(); 327 + } 328 + 329 + export declare class STEPCAFControl_Reader_2 extends STEPCAFControl_Reader { 330 + constructor(WS: Handle_XSControl_WorkSession, scratch: Standard_Boolean); 331 + } 332 + 333 + export declare class STEPControl_Reader extends XSControl_Reader { 334 + StepModel(): Handle_StepData_StepModel; 335 + TransferRoot(num: Graphic3d_ZLayerId, theProgress: Message_ProgressRange): Standard_Boolean; 336 + NbRootsForTransfer(): Graphic3d_ZLayerId; 337 + FileUnits(theUnitLengthNames: TColStd_SequenceOfAsciiString, theUnitAngleNames: TColStd_SequenceOfAsciiString, theUnitSolidAngleNames: TColStd_SequenceOfAsciiString): void; 338 + SetSystemLengthUnit(theLengthUnit: Standard_Real): void; 339 + SystemLengthUnit(): Standard_Real; 340 + delete(): void; 341 + } 342 + 343 + export declare class STEPControl_Reader_1 extends STEPControl_Reader { 344 + constructor(); 345 + } 346 + 347 + export declare class STEPControl_Reader_2 extends STEPControl_Reader { 348 + constructor(WS: Handle_XSControl_WorkSession, scratch: Standard_Boolean); 349 + } 350 + 351 + export declare class Standard_Transient { 352 + Delete(): void; 353 + static get_type_name(): Standard_Character; 354 + static get_type_descriptor(): Handle_Standard_Type; 355 + DynamicType(): Handle_Standard_Type; 356 + IsInstance_1(theType: Handle_Standard_Type): Standard_Boolean; 357 + IsInstance_2(theTypeName: Standard_CString): Standard_Boolean; 358 + IsKind_1(theType: Handle_Standard_Type): Standard_Boolean; 359 + IsKind_2(theTypeName: Standard_CString): Standard_Boolean; 360 + This(): Standard_Transient; 361 + GetRefCount(): Graphic3d_ZLayerId; 362 + IncrementRefCounter(): void; 363 + DecrementRefCounter(): Graphic3d_ZLayerId; 364 + delete(): void; 365 + } 366 + 367 + export declare class Standard_Transient_1 extends Standard_Transient { 368 + constructor(); 369 + } 370 + 371 + export declare class Standard_Transient_2 extends Standard_Transient { 372 + constructor(a: Standard_Transient); 373 + } 374 + 375 + export declare class TColStd_IndexedDataMapOfStringString extends NCollection_BaseMap { 376 + begin(): any; 377 + end(): any; 378 + cbegin(): any; 379 + cend(): any; 380 + Exchange(theOther: TColStd_IndexedDataMapOfStringString): void; 381 + Assign(theOther: TColStd_IndexedDataMapOfStringString): TColStd_IndexedDataMapOfStringString; 382 + ReSize(N: Standard_Integer): void; 383 + Add(theKey1: TCollection_AsciiString, theItem: TCollection_AsciiString): Standard_Integer; 384 + Contains(theKey1: TCollection_AsciiString): Standard_Boolean; 385 + Substitute(theIndex: Standard_Integer, theKey1: TCollection_AsciiString, theItem: TCollection_AsciiString): void; 386 + Swap(theIndex1: Standard_Integer, theIndex2: Standard_Integer): void; 387 + RemoveLast(): void; 388 + RemoveFromIndex(theIndex: Standard_Integer): void; 389 + RemoveKey(theKey1: TCollection_AsciiString): void; 390 + FindKey(theIndex: Standard_Integer): TCollection_AsciiString; 391 + FindFromIndex(theIndex: Standard_Integer): TCollection_AsciiString; 392 + ChangeFromIndex(theIndex: Standard_Integer): TCollection_AsciiString; 393 + FindIndex(theKey1: TCollection_AsciiString): Standard_Integer; 394 + ChangeFromKey(theKey1: TCollection_AsciiString): TCollection_AsciiString; 395 + Seek(theKey1: TCollection_AsciiString): TCollection_AsciiString; 396 + ChangeSeek(theKey1: TCollection_AsciiString): TCollection_AsciiString; 397 + Clear_1(doReleaseMemory: Standard_Boolean): void; 398 + Clear_2(theAllocator: Handle_NCollection_BaseAllocator): void; 399 + Size(): Standard_Integer; 400 + delete(): void; 401 + } 402 + 403 + export declare class TColStd_IndexedDataMapOfStringString_1 extends TColStd_IndexedDataMapOfStringString { 404 + constructor(); 405 + } 406 + 407 + export declare class TColStd_IndexedDataMapOfStringString_2 extends TColStd_IndexedDataMapOfStringString { 408 + constructor(theNbBuckets: Standard_Integer, theAllocator: Handle_NCollection_BaseAllocator); 409 + } 410 + 411 + export declare class TColStd_IndexedDataMapOfStringString_3 extends TColStd_IndexedDataMapOfStringString { 412 + constructor(theOther: TColStd_IndexedDataMapOfStringString); 413 + } 414 + 415 + export declare class TCollection_AsciiString { 416 + AssignCat_1(other: Standard_Character): void; 417 + AssignCat_2(other: Graphic3d_ZLayerId): void; 418 + AssignCat_3(other: Standard_Real): void; 419 + AssignCat_4(other: Standard_CString): void; 420 + AssignCat_5(other: XCAFDoc_PartId): void; 421 + Capitalize(): void; 422 + Cat_1(other: Standard_Character): XCAFDoc_PartId; 423 + Cat_2(other: Graphic3d_ZLayerId): XCAFDoc_PartId; 424 + Cat_3(other: Standard_Real): XCAFDoc_PartId; 425 + Cat_4(other: Standard_CString): XCAFDoc_PartId; 426 + Cat_5(other: XCAFDoc_PartId): XCAFDoc_PartId; 427 + Center(Width: Graphic3d_ZLayerId, Filler: Standard_Character): void; 428 + ChangeAll(aChar: Standard_Character, NewChar: Standard_Character, CaseSensitive: Standard_Boolean): void; 429 + Clear(): void; 430 + Copy_1(fromwhere: Standard_CString): void; 431 + Copy_2(fromwhere: XCAFDoc_PartId): void; 432 + Swap(theOther: XCAFDoc_PartId): void; 433 + FirstLocationInSet(Set: XCAFDoc_PartId, FromIndex: Graphic3d_ZLayerId, ToIndex: Graphic3d_ZLayerId): Graphic3d_ZLayerId; 434 + FirstLocationNotInSet(Set: XCAFDoc_PartId, FromIndex: Graphic3d_ZLayerId, ToIndex: Graphic3d_ZLayerId): Graphic3d_ZLayerId; 435 + Insert_1(where: Graphic3d_ZLayerId, what: Standard_Character): void; 436 + Insert_2(where: Graphic3d_ZLayerId, what: Standard_CString): void; 437 + Insert_3(where: Graphic3d_ZLayerId, what: XCAFDoc_PartId): void; 438 + InsertAfter(Index: Graphic3d_ZLayerId, other: XCAFDoc_PartId): void; 439 + InsertBefore(Index: Graphic3d_ZLayerId, other: XCAFDoc_PartId): void; 440 + IsEmpty(): Standard_Boolean; 441 + IsEqual_1(other: Standard_CString): Standard_Boolean; 442 + IsEqual_2(other: XCAFDoc_PartId): Standard_Boolean; 443 + IsDifferent_1(other: Standard_CString): Standard_Boolean; 444 + IsDifferent_2(other: XCAFDoc_PartId): Standard_Boolean; 445 + IsLess_1(other: Standard_CString): Standard_Boolean; 446 + IsLess_2(other: XCAFDoc_PartId): Standard_Boolean; 447 + IsGreater_1(other: Standard_CString): Standard_Boolean; 448 + IsGreater_2(other: XCAFDoc_PartId): Standard_Boolean; 449 + StartsWith(theStartString: XCAFDoc_PartId): Standard_Boolean; 450 + EndsWith(theEndString: XCAFDoc_PartId): Standard_Boolean; 451 + IntegerValue(): Graphic3d_ZLayerId; 452 + IsIntegerValue(): Standard_Boolean; 453 + IsRealValue(theToCheckFull: Standard_Boolean): Standard_Boolean; 454 + IsAscii(): Standard_Boolean; 455 + LeftAdjust(): void; 456 + LeftJustify(Width: Graphic3d_ZLayerId, Filler: Standard_Character): void; 457 + Length(): Graphic3d_ZLayerId; 458 + Location_1(other: XCAFDoc_PartId, FromIndex: Graphic3d_ZLayerId, ToIndex: Graphic3d_ZLayerId): Graphic3d_ZLayerId; 459 + Location_2(N: Graphic3d_ZLayerId, C: Standard_Character, FromIndex: Graphic3d_ZLayerId, ToIndex: Graphic3d_ZLayerId): Graphic3d_ZLayerId; 460 + LowerCase(): void; 461 + Prepend(other: XCAFDoc_PartId): void; 462 + Print(astream: Standard_OStream): void; 463 + Read(astream: Standard_IStream): void; 464 + RealValue(): Standard_Real; 465 + RemoveAll_1(C: Standard_Character, CaseSensitive: Standard_Boolean): void; 466 + RemoveAll_2(what: Standard_Character): void; 467 + Remove(where: Graphic3d_ZLayerId, ahowmany: Graphic3d_ZLayerId): void; 468 + RightAdjust(): void; 469 + RightJustify(Width: Graphic3d_ZLayerId, Filler: Standard_Character): void; 470 + Search_1(what: Standard_CString): Graphic3d_ZLayerId; 471 + Search_2(what: XCAFDoc_PartId): Graphic3d_ZLayerId; 472 + SearchFromEnd_1(what: Standard_CString): Graphic3d_ZLayerId; 473 + SearchFromEnd_2(what: XCAFDoc_PartId): Graphic3d_ZLayerId; 474 + SetValue_1(where: Graphic3d_ZLayerId, what: Standard_Character): void; 475 + SetValue_2(where: Graphic3d_ZLayerId, what: Standard_CString): void; 476 + SetValue_3(where: Graphic3d_ZLayerId, what: XCAFDoc_PartId): void; 477 + Split_1(where: Graphic3d_ZLayerId): XCAFDoc_PartId; 478 + SubString_1(FromIndex: Graphic3d_ZLayerId, ToIndex: Graphic3d_ZLayerId): XCAFDoc_PartId; 479 + ToCString(): Standard_CString; 480 + Token_1(separators: Standard_CString, whichone: Graphic3d_ZLayerId): XCAFDoc_PartId; 481 + Trunc(ahowmany: Graphic3d_ZLayerId): void; 482 + UpperCase(): void; 483 + UsefullLength(): Graphic3d_ZLayerId; 484 + Value(where: Graphic3d_ZLayerId): Standard_Character; 485 + static HashCode(theAsciiString: XCAFDoc_PartId, theUpperBound: Graphic3d_ZLayerId): Graphic3d_ZLayerId; 486 + static IsEqual_3(string1: XCAFDoc_PartId, string2: XCAFDoc_PartId): Standard_Boolean; 487 + static IsEqual_4(string1: XCAFDoc_PartId, string2: Standard_CString): Standard_Boolean; 488 + static IsSameString(theString1: XCAFDoc_PartId, theString2: XCAFDoc_PartId, theIsCaseSensitive: Standard_Boolean): Standard_Boolean; 489 + delete(): void; 490 + } 491 + 492 + export declare class TCollection_AsciiString_1 extends TCollection_AsciiString { 493 + constructor(); 494 + } 495 + 496 + export declare class TCollection_AsciiString_2 extends TCollection_AsciiString { 497 + constructor(message: Standard_CString); 498 + } 499 + 500 + export declare class TCollection_AsciiString_3 extends TCollection_AsciiString { 501 + constructor(message: Standard_CString, aLen: Graphic3d_ZLayerId); 502 + } 503 + 504 + export declare class TCollection_AsciiString_4 extends TCollection_AsciiString { 505 + constructor(aChar: Standard_Character); 506 + } 507 + 508 + export declare class TCollection_AsciiString_5 extends TCollection_AsciiString { 509 + constructor(length: Graphic3d_ZLayerId, filler: Standard_Character); 510 + } 511 + 512 + export declare class TCollection_AsciiString_6 extends TCollection_AsciiString { 513 + constructor(value: Graphic3d_ZLayerId); 514 + } 515 + 516 + export declare class TCollection_AsciiString_7 extends TCollection_AsciiString { 517 + constructor(value: Standard_Real); 518 + } 519 + 520 + export declare class TCollection_AsciiString_8 extends TCollection_AsciiString { 521 + constructor(astring: XCAFDoc_PartId); 522 + } 523 + 524 + export declare class TCollection_AsciiString_9 extends TCollection_AsciiString { 525 + constructor(theOther: XCAFDoc_PartId); 526 + } 527 + 528 + export declare class TCollection_AsciiString_10 extends TCollection_AsciiString { 529 + constructor(astring: XCAFDoc_PartId, message: Standard_Character); 530 + } 531 + 532 + export declare class TCollection_AsciiString_11 extends TCollection_AsciiString { 533 + constructor(astring: XCAFDoc_PartId, message: Standard_CString); 534 + } 535 + 536 + export declare class TCollection_AsciiString_12 extends TCollection_AsciiString { 537 + constructor(astring: XCAFDoc_PartId, message: XCAFDoc_PartId); 538 + } 539 + 540 + export declare class TCollection_AsciiString_13 extends TCollection_AsciiString { 541 + constructor(astring: TCollection_ExtendedString, replaceNonAscii: Standard_Character); 542 + } 543 + 544 + export declare class TCollection_AsciiString_14 extends TCollection_AsciiString { 545 + constructor(theStringUtf: Standard_WideChar); 546 + } 547 + 548 + export declare class TCollection_ExtendedString { 549 + AssignCat_1(other: TCollection_ExtendedString): void; 550 + AssignCat_2(theChar: Standard_Utf16Char): void; 551 + Cat(other: TCollection_ExtendedString): TCollection_ExtendedString; 552 + ChangeAll(aChar: Standard_ExtCharacter, NewChar: Standard_ExtCharacter): void; 553 + Clear(): void; 554 + Copy(fromwhere: TCollection_ExtendedString): void; 555 + Swap(theOther: TCollection_ExtendedString): void; 556 + Insert_1(where: Graphic3d_ZLayerId, what: Standard_ExtCharacter): void; 557 + Insert_2(where: Graphic3d_ZLayerId, what: TCollection_ExtendedString): void; 558 + IsEmpty(): Standard_Boolean; 559 + IsEqual_1(other: Standard_ExtString): Standard_Boolean; 560 + IsEqual_2(other: TCollection_ExtendedString): Standard_Boolean; 561 + IsDifferent_1(other: Standard_ExtString): Standard_Boolean; 562 + IsDifferent_2(other: TCollection_ExtendedString): Standard_Boolean; 563 + IsLess_1(other: Standard_ExtString): Standard_Boolean; 564 + IsLess_2(other: TCollection_ExtendedString): Standard_Boolean; 565 + IsGreater_1(other: Standard_ExtString): Standard_Boolean; 566 + IsGreater_2(other: TCollection_ExtendedString): Standard_Boolean; 567 + StartsWith(theStartString: TCollection_ExtendedString): Standard_Boolean; 568 + EndsWith(theEndString: TCollection_ExtendedString): Standard_Boolean; 569 + IsAscii(): Standard_Boolean; 570 + Length(): Graphic3d_ZLayerId; 571 + Print(astream: Standard_OStream): void; 572 + RemoveAll(what: Standard_ExtCharacter): void; 573 + Remove(where: Graphic3d_ZLayerId, ahowmany: Graphic3d_ZLayerId): void; 574 + Search(what: TCollection_ExtendedString): Graphic3d_ZLayerId; 575 + SearchFromEnd(what: TCollection_ExtendedString): Graphic3d_ZLayerId; 576 + SetValue_1(where: Graphic3d_ZLayerId, what: Standard_ExtCharacter): void; 577 + SetValue_2(where: Graphic3d_ZLayerId, what: TCollection_ExtendedString): void; 578 + Split(where: Graphic3d_ZLayerId): TCollection_ExtendedString; 579 + Token(separators: Standard_ExtString, whichone: Graphic3d_ZLayerId): TCollection_ExtendedString; 580 + ToExtString(): Standard_ExtString; 581 + Trunc(ahowmany: Graphic3d_ZLayerId): void; 582 + Value(where: Graphic3d_ZLayerId): Standard_ExtCharacter; 583 + static HashCode(theString: TCollection_ExtendedString, theUpperBound: Graphic3d_ZLayerId): Graphic3d_ZLayerId; 584 + static IsEqual_3(theString1: TCollection_ExtendedString, theString2: TCollection_ExtendedString): Standard_Boolean; 585 + LengthOfCString(): Graphic3d_ZLayerId; 586 + delete(): void; 587 + } 588 + 589 + export declare class TCollection_ExtendedString_1 extends TCollection_ExtendedString { 590 + constructor(); 591 + } 592 + 593 + export declare class TCollection_ExtendedString_2 extends TCollection_ExtendedString { 594 + constructor(astring: Standard_CString, isMultiByte: Standard_Boolean); 595 + } 596 + 597 + export declare class TCollection_ExtendedString_3 extends TCollection_ExtendedString { 598 + constructor(astring: Standard_ExtString); 599 + } 600 + 601 + export declare class TCollection_ExtendedString_4 extends TCollection_ExtendedString { 602 + constructor(theStringUtf: Standard_WideChar); 603 + } 604 + 605 + export declare class TCollection_ExtendedString_5 extends TCollection_ExtendedString { 606 + constructor(aChar: Standard_Character); 607 + } 608 + 609 + export declare class TCollection_ExtendedString_6 extends TCollection_ExtendedString { 610 + constructor(aChar: Standard_ExtCharacter); 611 + } 612 + 613 + export declare class TCollection_ExtendedString_7 extends TCollection_ExtendedString { 614 + constructor(length: Graphic3d_ZLayerId, filler: Standard_ExtCharacter); 615 + } 616 + 617 + export declare class TCollection_ExtendedString_8 extends TCollection_ExtendedString { 618 + constructor(value: Graphic3d_ZLayerId); 619 + } 620 + 621 + export declare class TCollection_ExtendedString_9 extends TCollection_ExtendedString { 622 + constructor(value: Standard_Real); 623 + } 624 + 625 + export declare class TCollection_ExtendedString_10 extends TCollection_ExtendedString { 626 + constructor(astring: TCollection_ExtendedString); 627 + } 628 + 629 + export declare class TCollection_ExtendedString_11 extends TCollection_ExtendedString { 630 + constructor(theOther: TCollection_ExtendedString); 631 + } 632 + 633 + export declare class TCollection_ExtendedString_12 extends TCollection_ExtendedString { 634 + constructor(astring: XCAFDoc_PartId, isMultiByte: Standard_Boolean); 635 + } 636 + 637 + export declare class TDF_Attribute extends Standard_Transient { 638 + ID(): Standard_GUID; 639 + SetID_1(a0: Standard_GUID): void; 640 + SetID_2(): void; 641 + Label(): TDF_Label; 642 + Transaction(): Graphic3d_ZLayerId; 643 + UntilTransaction(): Graphic3d_ZLayerId; 644 + IsValid(): Standard_Boolean; 645 + IsNew(): Standard_Boolean; 646 + IsForgotten(): Standard_Boolean; 647 + IsAttribute(anID: Standard_GUID): Standard_Boolean; 648 + FindAttribute_1(anID: Standard_GUID, anAttribute: Handle_TDF_Attribute): Standard_Boolean; 649 + AddAttribute(other: Handle_TDF_Attribute): void; 650 + ForgetAttribute(aguid: Standard_GUID): Standard_Boolean; 651 + ForgetAllAttributes(clearChildren: Standard_Boolean): void; 652 + AfterAddition(): void; 653 + BeforeRemoval(): void; 654 + BeforeForget(): void; 655 + AfterResume(): void; 656 + AfterRetrieval(forceIt: Standard_Boolean): Standard_Boolean; 657 + BeforeUndo(anAttDelta: Handle_TDF_AttributeDelta, forceIt: Standard_Boolean): Standard_Boolean; 658 + AfterUndo(anAttDelta: Handle_TDF_AttributeDelta, forceIt: Standard_Boolean): Standard_Boolean; 659 + BeforeCommitTransaction(): void; 660 + Backup_1(): void; 661 + IsBackuped(): Standard_Boolean; 662 + BackupCopy(): Handle_TDF_Attribute; 663 + Restore(anAttribute: Handle_TDF_Attribute): void; 664 + DeltaOnAddition(): Handle_TDF_DeltaOnAddition; 665 + DeltaOnForget(): Handle_TDF_DeltaOnForget; 666 + DeltaOnResume(): Handle_TDF_DeltaOnResume; 667 + DeltaOnModification_1(anOldAttribute: Handle_TDF_Attribute): Handle_TDF_DeltaOnModification; 668 + DeltaOnModification_2(aDelta: Handle_TDF_DeltaOnModification): void; 669 + DeltaOnRemoval(): Handle_TDF_DeltaOnRemoval; 670 + NewEmpty(): Handle_TDF_Attribute; 671 + Paste(intoAttribute: Handle_TDF_Attribute, aRelocationTable: Handle_TDF_RelocationTable): void; 672 + References(aDataSet: Handle_TDF_DataSet): void; 673 + ExtendedDump(anOS: Standard_OStream, aFilter: TDF_IDFilter, aMap: TDF_AttributeIndexedMap): void; 674 + Forget(aTransaction: Graphic3d_ZLayerId): void; 675 + DumpJson(theOStream: Standard_OStream, theDepth: Graphic3d_ZLayerId): void; 676 + static get_type_name(): Standard_Character; 677 + static get_type_descriptor(): Handle_Standard_Type; 678 + DynamicType(): Handle_Standard_Type; 679 + delete(): void; 680 + } 681 + 682 + export declare class TDF_Label { 683 + constructor() 684 + Nullify(): void; 685 + Data(): Handle_TDF_Data; 686 + Tag(): Graphic3d_ZLayerId; 687 + Father(): TDF_Label; 688 + IsNull(): Standard_Boolean; 689 + Imported(aStatus: Standard_Boolean): void; 690 + IsImported(): Standard_Boolean; 691 + IsEqual(aLabel: TDF_Label): Standard_Boolean; 692 + IsDifferent(aLabel: TDF_Label): Standard_Boolean; 693 + IsRoot(): Standard_Boolean; 694 + IsAttribute(anID: Standard_GUID): Standard_Boolean; 695 + AddAttribute(anAttribute: Handle_TDF_Attribute, append: Standard_Boolean): void; 696 + ForgetAttribute_1(anAttribute: Handle_TDF_Attribute): void; 697 + ForgetAttribute_2(aguid: Standard_GUID): Standard_Boolean; 698 + ForgetAllAttributes(clearChildren: Standard_Boolean): void; 699 + ResumeAttribute(anAttribute: Handle_TDF_Attribute): void; 700 + FindAttribute_1(anID: Standard_GUID, anAttribute: Handle_TDF_Attribute): Standard_Boolean; 701 + FindAttribute_3(anID: Standard_GUID, aTransaction: Graphic3d_ZLayerId, anAttribute: Handle_TDF_Attribute): Standard_Boolean; 702 + MayBeModified(): Standard_Boolean; 703 + AttributesModified(): Standard_Boolean; 704 + HasAttribute(): Standard_Boolean; 705 + NbAttributes(): Graphic3d_ZLayerId; 706 + Depth(): Graphic3d_ZLayerId; 707 + IsDescendant(aLabel: TDF_Label): Standard_Boolean; 708 + Root(): TDF_Label; 709 + HasChild(): Standard_Boolean; 710 + NbChildren(): Graphic3d_ZLayerId; 711 + FindChild(aTag: Graphic3d_ZLayerId, create: Standard_Boolean): TDF_Label; 712 + NewChild(): TDF_Label; 713 + Transaction(): Graphic3d_ZLayerId; 714 + HasLowerNode(otherLabel: TDF_Label): Standard_Boolean; 715 + HasGreaterNode(otherLabel: TDF_Label): Standard_Boolean; 716 + ExtendedDump(anOS: Standard_OStream, aFilter: TDF_IDFilter, aMap: TDF_AttributeIndexedMap): void; 717 + EntryDump(anOS: Standard_OStream): void; 718 + delete(): void; 719 + } 720 + 721 + export declare class TDF_LabelSequence extends NCollection_BaseSequence { 722 + begin(): any; 723 + end(): any; 724 + cbegin(): any; 725 + cend(): any; 726 + Size(): Standard_Integer; 727 + Length(): Standard_Integer; 728 + Lower(): Standard_Integer; 729 + Upper(): Standard_Integer; 730 + IsEmpty(): Standard_Boolean; 731 + Reverse(): void; 732 + Exchange(I: Standard_Integer, J: Standard_Integer): void; 733 + static delNode(theNode: NCollection_SeqNode, theAl: Handle_NCollection_BaseAllocator): void; 734 + Clear(theAllocator: Handle_NCollection_BaseAllocator): void; 735 + Assign(theOther: TDF_LabelSequence): TDF_LabelSequence; 736 + Remove_2(theIndex: Standard_Integer): void; 737 + Remove_3(theFromIndex: Standard_Integer, theToIndex: Standard_Integer): void; 738 + Append_1(theItem: TDF_Label): void; 739 + Append_2(theSeq: TDF_LabelSequence): void; 740 + Prepend_1(theItem: TDF_Label): void; 741 + Prepend_2(theSeq: TDF_LabelSequence): void; 742 + InsertBefore_1(theIndex: Standard_Integer, theItem: TDF_Label): void; 743 + InsertBefore_2(theIndex: Standard_Integer, theSeq: TDF_LabelSequence): void; 744 + InsertAfter_2(theIndex: Standard_Integer, theSeq: TDF_LabelSequence): void; 745 + InsertAfter_3(theIndex: Standard_Integer, theItem: TDF_Label): void; 746 + Split(theIndex: Standard_Integer, theSeq: TDF_LabelSequence): void; 747 + First(): TDF_Label; 748 + ChangeFirst(): TDF_Label; 749 + Last(): TDF_Label; 750 + ChangeLast(): TDF_Label; 751 + Value(theIndex: Standard_Integer): TDF_Label; 752 + ChangeValue(theIndex: Standard_Integer): TDF_Label; 753 + SetValue(theIndex: Standard_Integer, theItem: TDF_Label): void; 754 + delete(): void; 755 + } 756 + 757 + export declare class TDF_LabelSequence_1 extends TDF_LabelSequence { 758 + constructor(); 759 + } 760 + 761 + export declare class TDF_LabelSequence_2 extends TDF_LabelSequence { 762 + constructor(theAllocator: Handle_NCollection_BaseAllocator); 763 + } 764 + 765 + export declare class TDF_LabelSequence_3 extends TDF_LabelSequence { 766 + constructor(theOther: TDF_LabelSequence); 767 + } 768 + 769 + export declare class TDataStd_GenericEmpty extends TDF_Attribute { 770 + Restore(a0: Handle_TDF_Attribute): void; 771 + Paste(a0: Handle_TDF_Attribute, a1: Handle_TDF_RelocationTable): void; 772 + DumpJson(theOStream: Standard_OStream, theDepth: Graphic3d_ZLayerId): void; 773 + static get_type_name(): Standard_Character; 774 + static get_type_descriptor(): Handle_Standard_Type; 775 + DynamicType(): Handle_Standard_Type; 776 + delete(): void; 777 + } 778 + 779 + export declare class Handle_TDocStd_Document { 780 + Nullify(): void; 781 + IsNull(): boolean; 782 + reset(thePtr: TDocStd_Document): void; 783 + get(): TDocStd_Document; 784 + delete(): void; 785 + } 786 + 787 + export declare class Handle_TDocStd_Document_1 extends Handle_TDocStd_Document { 788 + constructor(); 789 + } 790 + 791 + export declare class Handle_TDocStd_Document_2 extends Handle_TDocStd_Document { 792 + constructor(thePtr: TDocStd_Document); 793 + } 794 + 795 + export declare class Handle_TDocStd_Document_3 extends Handle_TDocStd_Document { 796 + constructor(theHandle: Handle_TDocStd_Document); 797 + } 798 + 799 + export declare class Handle_TDocStd_Document_4 extends Handle_TDocStd_Document { 800 + constructor(theHandle: Handle_TDocStd_Document); 801 + } 802 + 803 + export declare class TDocStd_Document extends CDM_Document { 804 + constructor(astorageformat: TCollection_ExtendedString) 805 + static Get(L: TDF_Label): Handle_TDocStd_Document; 806 + IsSaved(): Standard_Boolean; 807 + IsChanged(): Standard_Boolean; 808 + SetSaved(): void; 809 + SetSavedTime(theTime: Graphic3d_ZLayerId): void; 810 + GetSavedTime(): Graphic3d_ZLayerId; 811 + GetName(): TCollection_ExtendedString; 812 + GetPath(): TCollection_ExtendedString; 813 + SetData(data: Handle_TDF_Data): void; 814 + GetData(): Handle_TDF_Data; 815 + Main(): TDF_Label; 816 + IsEmpty(): Standard_Boolean; 817 + IsValid(): Standard_Boolean; 818 + SetModified(L: TDF_Label): void; 819 + PurgeModified(): void; 820 + GetModified(): TDF_LabelMap; 821 + NewCommand(): void; 822 + HasOpenCommand(): Standard_Boolean; 823 + OpenCommand(): void; 824 + CommitCommand(): Standard_Boolean; 825 + AbortCommand(): void; 826 + GetUndoLimit(): Graphic3d_ZLayerId; 827 + SetUndoLimit(L: Graphic3d_ZLayerId): void; 828 + ClearUndos(): void; 829 + ClearRedos(): void; 830 + GetAvailableUndos(): Graphic3d_ZLayerId; 831 + Undo(): Standard_Boolean; 832 + GetAvailableRedos(): Graphic3d_ZLayerId; 833 + Redo(): Standard_Boolean; 834 + GetUndos(): TDF_DeltaList; 835 + GetRedos(): TDF_DeltaList; 836 + RemoveFirstUndo(): void; 837 + InitDeltaCompaction(): Standard_Boolean; 838 + PerformDeltaCompaction(): Standard_Boolean; 839 + UpdateReferences(aDocEntry: XCAFDoc_PartId): void; 840 + Recompute(): void; 841 + Update(aToDocument: Handle_CDM_Document, aReferenceIdentifier: Graphic3d_ZLayerId, aModifContext: Standard_Address): void; 842 + StorageFormat(): TCollection_ExtendedString; 843 + SetEmptyLabelsSavingMode(isAllowed: Standard_Boolean): void; 844 + EmptyLabelsSavingMode(): Standard_Boolean; 845 + ChangeStorageFormat(newStorageFormat: TCollection_ExtendedString): void; 846 + SetNestedTransactionMode(isAllowed: Standard_Boolean): void; 847 + IsNestedTransactionMode(): Standard_Boolean; 848 + SetModificationMode(theTransactionOnly: Standard_Boolean): void; 849 + ModificationMode(): Standard_Boolean; 850 + BeforeClose(): void; 851 + StorageFormatVersion(): TDocStd_FormatVersion; 852 + ChangeStorageFormatVersion(theVersion: TDocStd_FormatVersion): void; 853 + static CurrentStorageFormatVersion(): TDocStd_FormatVersion; 854 + DumpJson(theOStream: Standard_OStream, theDepth: Graphic3d_ZLayerId): void; 855 + static get_type_name(): Standard_Character; 856 + static get_type_descriptor(): Handle_Standard_Type; 857 + DynamicType(): Handle_Standard_Type; 858 + delete(): void; 859 + } 860 + 861 + export declare class TopoDS_Shape { 862 + constructor() 863 + IsNull(): Standard_Boolean; 864 + Nullify(): void; 865 + Location_1(): TopLoc_Location; 866 + Location_2(theLoc: TopLoc_Location, theRaiseExc: Standard_Boolean): void; 867 + Located(theLoc: TopLoc_Location, theRaiseExc: Standard_Boolean): TopoDS_Shape; 868 + Orientation_1(): TopAbs_Orientation; 869 + Orientation_2(theOrient: TopAbs_Orientation): void; 870 + Oriented(theOrient: TopAbs_Orientation): TopoDS_Shape; 871 + TShape_1(): Handle_TopoDS_TShape; 872 + ShapeType(): TopAbs_ShapeEnum; 873 + Free_1(): Standard_Boolean; 874 + Free_2(theIsFree: Standard_Boolean): void; 875 + Locked_1(): Standard_Boolean; 876 + Locked_2(theIsLocked: Standard_Boolean): void; 877 + Modified_1(): Standard_Boolean; 878 + Modified_2(theIsModified: Standard_Boolean): void; 879 + Checked_1(): Standard_Boolean; 880 + Checked_2(theIsChecked: Standard_Boolean): void; 881 + Orientable_1(): Standard_Boolean; 882 + Orientable_2(theIsOrientable: Standard_Boolean): void; 883 + Closed_1(): Standard_Boolean; 884 + Closed_2(theIsClosed: Standard_Boolean): void; 885 + Infinite_1(): Standard_Boolean; 886 + Infinite_2(theIsInfinite: Standard_Boolean): void; 887 + Convex_1(): Standard_Boolean; 888 + Convex_2(theIsConvex: Standard_Boolean): void; 889 + Move(thePosition: TopLoc_Location, theRaiseExc: Standard_Boolean): void; 890 + Moved(thePosition: TopLoc_Location, theRaiseExc: Standard_Boolean): TopoDS_Shape; 891 + Reverse(): void; 892 + Reversed(): TopoDS_Shape; 893 + Complement(): void; 894 + Complemented(): TopoDS_Shape; 895 + Compose(theOrient: TopAbs_Orientation): void; 896 + Composed(theOrient: TopAbs_Orientation): TopoDS_Shape; 897 + NbChildren(): Graphic3d_ZLayerId; 898 + IsPartner(theOther: TopoDS_Shape): Standard_Boolean; 899 + IsSame(theOther: TopoDS_Shape): Standard_Boolean; 900 + IsEqual(theOther: TopoDS_Shape): Standard_Boolean; 901 + IsNotEqual(theOther: TopoDS_Shape): Standard_Boolean; 902 + HashCode(theUpperBound: Graphic3d_ZLayerId): Graphic3d_ZLayerId; 903 + EmptyCopy(): void; 904 + EmptyCopied(): TopoDS_Shape; 905 + TShape_2(theTShape: Handle_TopoDS_TShape): void; 906 + DumpJson(theOStream: Standard_OStream, theDepth: Graphic3d_ZLayerId): void; 907 + delete(): void; 908 + } 909 + 910 + export declare class XCAFDoc_DocumentTool extends TDataStd_GenericEmpty { 911 + constructor() 912 + static GetID(): Standard_GUID; 913 + static Set(L: TDF_Label, IsAcces: Standard_Boolean): Handle_XCAFDoc_DocumentTool; 914 + static IsXCAFDocument(Doc: Handle_TDocStd_Document): Standard_Boolean; 915 + static DocLabel(acces: TDF_Label): TDF_Label; 916 + static ShapesLabel(acces: TDF_Label): TDF_Label; 917 + static ColorsLabel(acces: TDF_Label): TDF_Label; 918 + static LayersLabel(acces: TDF_Label): TDF_Label; 919 + static DGTsLabel(acces: TDF_Label): TDF_Label; 920 + static MaterialsLabel(acces: TDF_Label): TDF_Label; 921 + static ViewsLabel(acces: TDF_Label): TDF_Label; 922 + static ClippingPlanesLabel(acces: TDF_Label): TDF_Label; 923 + static NotesLabel(acces: TDF_Label): TDF_Label; 924 + static VisMaterialLabel(theLabel: TDF_Label): TDF_Label; 925 + static ShapeTool(acces: TDF_Label): Handle_XCAFDoc_ShapeTool; 926 + static CheckShapeTool(theAcces: TDF_Label): Standard_Boolean; 927 + static ColorTool(acces: TDF_Label): Handle_XCAFDoc_ColorTool; 928 + static CheckColorTool(theAcces: TDF_Label): Standard_Boolean; 929 + static VisMaterialTool(theLabel: TDF_Label): Handle_XCAFDoc_VisMaterialTool; 930 + static CheckVisMaterialTool(theAcces: TDF_Label): Standard_Boolean; 931 + static LayerTool(acces: TDF_Label): Handle_XCAFDoc_LayerTool; 932 + static CheckLayerTool(theAcces: TDF_Label): Standard_Boolean; 933 + static DimTolTool(acces: TDF_Label): Handle_XCAFDoc_DimTolTool; 934 + static CheckDimTolTool(theAcces: TDF_Label): Standard_Boolean; 935 + static MaterialTool(acces: TDF_Label): Handle_XCAFDoc_MaterialTool; 936 + static CheckMaterialTool(theAcces: TDF_Label): Standard_Boolean; 937 + static ViewTool(acces: TDF_Label): Handle_XCAFDoc_ViewTool; 938 + static CheckViewTool(theAcces: TDF_Label): Standard_Boolean; 939 + static ClippingPlaneTool(acces: TDF_Label): Handle_XCAFDoc_ClippingPlaneTool; 940 + static CheckClippingPlaneTool(theAcces: TDF_Label): Standard_Boolean; 941 + static NotesTool(acces: TDF_Label): Handle_XCAFDoc_NotesTool; 942 + static CheckNotesTool(theAcces: TDF_Label): Standard_Boolean; 943 + static GetLengthUnit_1(theDoc: Handle_TDocStd_Document, theResut: Standard_Real, theBaseUnit: UnitsMethods_LengthUnit): Standard_Boolean; 944 + static GetLengthUnit_2(theDoc: Handle_TDocStd_Document, theResut: Standard_Real): Standard_Boolean; 945 + static SetLengthUnit_1(theDoc: Handle_TDocStd_Document, theUnitValue: Standard_Real): void; 946 + static SetLengthUnit_2(theDoc: Handle_TDocStd_Document, theUnitValue: Standard_Real, theBaseUnit: UnitsMethods_LengthUnit): void; 947 + Init(): void; 948 + ID(): Standard_GUID; 949 + AfterRetrieval(forceIt: Standard_Boolean): Standard_Boolean; 950 + static get_type_name(): Standard_Character; 951 + static get_type_descriptor(): Handle_Standard_Type; 952 + DynamicType(): Handle_Standard_Type; 953 + NewEmpty(): Handle_TDF_Attribute; 954 + delete(): void; 955 + } 956 + 957 + export declare class Handle_XCAFDoc_ShapeTool { 958 + Nullify(): void; 959 + IsNull(): boolean; 960 + reset(thePtr: XCAFDoc_ShapeTool): void; 961 + get(): XCAFDoc_ShapeTool; 962 + delete(): void; 963 + } 964 + 965 + export declare class Handle_XCAFDoc_ShapeTool_1 extends Handle_XCAFDoc_ShapeTool { 966 + constructor(); 967 + } 968 + 969 + export declare class Handle_XCAFDoc_ShapeTool_2 extends Handle_XCAFDoc_ShapeTool { 970 + constructor(thePtr: XCAFDoc_ShapeTool); 971 + } 972 + 973 + export declare class Handle_XCAFDoc_ShapeTool_3 extends Handle_XCAFDoc_ShapeTool { 974 + constructor(theHandle: Handle_XCAFDoc_ShapeTool); 975 + } 976 + 977 + export declare class Handle_XCAFDoc_ShapeTool_4 extends Handle_XCAFDoc_ShapeTool { 978 + constructor(theHandle: Handle_XCAFDoc_ShapeTool); 979 + } 980 + 981 + export declare class XCAFDoc_ShapeTool extends TDataStd_GenericEmpty { 982 + constructor() 983 + static GetID(): Standard_GUID; 984 + static Set(L: TDF_Label): Handle_XCAFDoc_ShapeTool; 985 + IsTopLevel(L: TDF_Label): Standard_Boolean; 986 + static IsFree(L: TDF_Label): Standard_Boolean; 987 + static IsShape(L: TDF_Label): Standard_Boolean; 988 + static IsSimpleShape(L: TDF_Label): Standard_Boolean; 989 + static IsReference(L: TDF_Label): Standard_Boolean; 990 + static IsAssembly(L: TDF_Label): Standard_Boolean; 991 + static IsComponent(L: TDF_Label): Standard_Boolean; 992 + static IsCompound(L: TDF_Label): Standard_Boolean; 993 + static IsSubShape_1(L: TDF_Label): Standard_Boolean; 994 + IsSubShape_2(shapeL: TDF_Label, sub: TopoDS_Shape): Standard_Boolean; 995 + SearchUsingMap(S: TopoDS_Shape, L: TDF_Label, findWithoutLoc: Standard_Boolean, findSubshape: Standard_Boolean): Standard_Boolean; 996 + Search(S: TopoDS_Shape, L: TDF_Label, findInstance: Standard_Boolean, findComponent: Standard_Boolean, findSubshape: Standard_Boolean): Standard_Boolean; 997 + FindShape_1(S: TopoDS_Shape, L: TDF_Label, findInstance: Standard_Boolean): Standard_Boolean; 998 + FindShape_2(S: TopoDS_Shape, findInstance: Standard_Boolean): TDF_Label; 999 + static GetShape_1(L: TDF_Label, S: TopoDS_Shape): Standard_Boolean; 1000 + static GetShape_2(L: TDF_Label): TopoDS_Shape; 1001 + NewShape(): TDF_Label; 1002 + SetShape(L: TDF_Label, S: TopoDS_Shape): void; 1003 + AddShape(S: TopoDS_Shape, makeAssembly: Standard_Boolean, makePrepare: Standard_Boolean): TDF_Label; 1004 + RemoveShape(L: TDF_Label, removeCompletely: Standard_Boolean): Standard_Boolean; 1005 + Init(): void; 1006 + static SetAutoNaming(V: Standard_Boolean): void; 1007 + static AutoNaming(): Standard_Boolean; 1008 + ComputeShapes(L: TDF_Label): void; 1009 + ComputeSimpleShapes(): void; 1010 + GetShapes(Labels: TDF_LabelSequence): void; 1011 + GetFreeShapes(FreeLabels: TDF_LabelSequence): void; 1012 + static GetUsers(L: TDF_Label, Labels: TDF_LabelSequence, getsubchilds: Standard_Boolean): Graphic3d_ZLayerId; 1013 + static GetLocation(L: TDF_Label): TopLoc_Location; 1014 + static GetReferredShape(L: TDF_Label, Label: TDF_Label): Standard_Boolean; 1015 + static NbComponents(L: TDF_Label, getsubchilds: Standard_Boolean): Graphic3d_ZLayerId; 1016 + static GetComponents(L: TDF_Label, Labels: TDF_LabelSequence, getsubchilds: Standard_Boolean): Standard_Boolean; 1017 + AddComponent_1(assembly: TDF_Label, comp: TDF_Label, Loc: TopLoc_Location): TDF_Label; 1018 + AddComponent_2(assembly: TDF_Label, comp: TopoDS_Shape, expand: Standard_Boolean): TDF_Label; 1019 + RemoveComponent(comp: TDF_Label): void; 1020 + UpdateAssemblies(): void; 1021 + FindSubShape(shapeL: TDF_Label, sub: TopoDS_Shape, L: TDF_Label): Standard_Boolean; 1022 + AddSubShape_1(shapeL: TDF_Label, sub: TopoDS_Shape): TDF_Label; 1023 + AddSubShape_2(shapeL: TDF_Label, sub: TopoDS_Shape, addedSubShapeL: TDF_Label): Standard_Boolean; 1024 + FindMainShapeUsingMap(sub: TopoDS_Shape): TDF_Label; 1025 + FindMainShape(sub: TopoDS_Shape): TDF_Label; 1026 + static GetSubShapes(L: TDF_Label, Labels: TDF_LabelSequence): Standard_Boolean; 1027 + BaseLabel(): TDF_Label; 1028 + static DumpShape(theDumpLog: Standard_OStream, L: TDF_Label, level: Graphic3d_ZLayerId, deep: Standard_Boolean): void; 1029 + ID(): Standard_GUID; 1030 + static IsExternRef(L: TDF_Label): Standard_Boolean; 1031 + SetExternRefs_1(SHAS: TColStd_SequenceOfHAsciiString): TDF_Label; 1032 + SetExternRefs_2(L: TDF_Label, SHAS: TColStd_SequenceOfHAsciiString): void; 1033 + static GetExternRefs(L: TDF_Label, SHAS: TColStd_SequenceOfHAsciiString): void; 1034 + SetSHUO(Labels: TDF_LabelSequence, MainSHUOAttr: Handle_XCAFDoc_GraphNode): Standard_Boolean; 1035 + static GetSHUO(SHUOLabel: TDF_Label, aSHUOAttr: Handle_XCAFDoc_GraphNode): Standard_Boolean; 1036 + static GetAllComponentSHUO(CompLabel: TDF_Label, SHUOAttrs: TDF_AttributeSequence): Standard_Boolean; 1037 + static GetSHUOUpperUsage(NextUsageL: TDF_Label, Labels: TDF_LabelSequence): Standard_Boolean; 1038 + static GetSHUONextUsage(UpperUsageL: TDF_Label, Labels: TDF_LabelSequence): Standard_Boolean; 1039 + RemoveSHUO(SHUOLabel: TDF_Label): Standard_Boolean; 1040 + FindComponent(theShape: TopoDS_Shape, Labels: TDF_LabelSequence): Standard_Boolean; 1041 + GetSHUOInstance(theSHUO: Handle_XCAFDoc_GraphNode): TopoDS_Shape; 1042 + SetInstanceSHUO(theShape: TopoDS_Shape): Handle_XCAFDoc_GraphNode; 1043 + GetAllSHUOInstances(theSHUO: Handle_XCAFDoc_GraphNode, theSHUOShapeSeq: TopTools_SequenceOfShape): Standard_Boolean; 1044 + static FindSHUO(Labels: TDF_LabelSequence, theSHUOAttr: Handle_XCAFDoc_GraphNode): Standard_Boolean; 1045 + Expand(Shape: TDF_Label): Standard_Boolean; 1046 + GetNamedProperties_1(theLabel: TDF_Label, theToCreate: Standard_Boolean): Handle_TDataStd_NamedData; 1047 + GetNamedProperties_2(theShape: TopoDS_Shape, theToCreate: Standard_Boolean): Handle_TDataStd_NamedData; 1048 + DumpJson(theOStream: Standard_OStream, theDepth: Graphic3d_ZLayerId): void; 1049 + static get_type_name(): Standard_Character; 1050 + static get_type_descriptor(): Handle_Standard_Type; 1051 + DynamicType(): Handle_Standard_Type; 1052 + NewEmpty(): Handle_TDF_Attribute; 1053 + delete(): void; 1054 + } 1055 + 1056 + type Standard_Boolean = boolean; 1057 + type Standard_Byte = number; 1058 + type Standard_Character = number; 1059 + type Standard_CString = string; 1060 + type Standard_Integer = number; 1061 + type Standard_Real = number; 1062 + type Standard_ShortReal = number; 1063 + type Standard_Size = number; 1064 + 1065 + declare namespace FS { 1066 + interface Lookup { 1067 + path: string; 1068 + node: FSNode; 1069 + } 1070 + 1071 + interface FSStream {} 1072 + interface FSNode {} 1073 + interface ErrnoError {} 1074 + 1075 + let ignorePermissions: boolean; 1076 + let trackingDelegate: any; 1077 + let tracking: any; 1078 + let genericErrors: any; 1079 + 1080 + // 1081 + // paths 1082 + // 1083 + function lookupPath(path: string, opts: any): Lookup; 1084 + function getPath(node: FSNode): string; 1085 + 1086 + // 1087 + // nodes 1088 + // 1089 + function isFile(mode: number): boolean; 1090 + function isDir(mode: number): boolean; 1091 + function isLink(mode: number): boolean; 1092 + function isChrdev(mode: number): boolean; 1093 + function isBlkdev(mode: number): boolean; 1094 + function isFIFO(mode: number): boolean; 1095 + function isSocket(mode: number): boolean; 1096 + 1097 + // 1098 + // devices 1099 + // 1100 + function major(dev: number): number; 1101 + function minor(dev: number): number; 1102 + function makedev(ma: number, mi: number): number; 1103 + function registerDevice(dev: number, ops: any): void; 1104 + 1105 + // 1106 + // core 1107 + // 1108 + function syncfs(populate: boolean, callback: (e: any) => any): void; 1109 + function syncfs(callback: (e: any) => any, populate?: boolean): void; 1110 + function mount(type: any, opts: any, mountpoint: string): any; 1111 + function unmount(mountpoint: string): void; 1112 + 1113 + function mkdir(path: string, mode?: number): any; 1114 + function mkdev(path: string, mode?: number, dev?: number): any; 1115 + function symlink(oldpath: string, newpath: string): any; 1116 + function rename(old_path: string, new_path: string): void; 1117 + function rmdir(path: string): void; 1118 + function readdir(path: string): any; 1119 + function unlink(path: string): void; 1120 + function readlink(path: string): string; 1121 + function stat(path: string, dontFollow?: boolean): any; 1122 + function lstat(path: string): any; 1123 + function chmod(path: string, mode: number, dontFollow?: boolean): void; 1124 + function lchmod(path: string, mode: number): void; 1125 + function fchmod(fd: number, mode: number): void; 1126 + function chown(path: string, uid: number, gid: number, dontFollow?: boolean): void; 1127 + function lchown(path: string, uid: number, gid: number): void; 1128 + function fchown(fd: number, uid: number, gid: number): void; 1129 + function truncate(path: string, len: number): void; 1130 + function ftruncate(fd: number, len: number): void; 1131 + function utime(path: string, atime: number, mtime: number): void; 1132 + function open(path: string, flags: string, mode?: number, fd_start?: number, fd_end?: number): FSStream; 1133 + function close(stream: FSStream): void; 1134 + function llseek(stream: FSStream, offset: number, whence: number): any; 1135 + function read(stream: FSStream, buffer: ArrayBufferView, offset: number, length: number, position?: number): number; 1136 + function write( 1137 + stream: FSStream, 1138 + buffer: ArrayBufferView, 1139 + offset: number, 1140 + length: number, 1141 + position?: number, 1142 + canOwn?: boolean, 1143 + ): number; 1144 + function allocate(stream: FSStream, offset: number, length: number): void; 1145 + function mmap( 1146 + stream: FSStream, 1147 + buffer: ArrayBufferView, 1148 + offset: number, 1149 + length: number, 1150 + position: number, 1151 + prot: number, 1152 + flags: number, 1153 + ): any; 1154 + function ioctl(stream: FSStream, cmd: any, arg: any): any; 1155 + function readFile(path: string, opts: { encoding: 'binary'; flags?: string }): Uint8Array; 1156 + function readFile(path: string, opts: { encoding: 'utf8'; flags?: string }): string; 1157 + function readFile(path: string, opts?: { flags?: string }): Uint8Array; 1158 + function writeFile(path: string, data: string | ArrayBufferView, opts?: { flags?: string }): void; 1159 + 1160 + // 1161 + // module-level FS code 1162 + // 1163 + function cwd(): string; 1164 + function chdir(path: string): void; 1165 + function init( 1166 + input: null | (() => number | null), 1167 + output: null | ((c: number) => any), 1168 + error: null | ((c: number) => any), 1169 + ): void; 1170 + 1171 + function createLazyFile( 1172 + parent: string | FSNode, 1173 + name: string, 1174 + url: string, 1175 + canRead: boolean, 1176 + canWrite: boolean, 1177 + ): FSNode; 1178 + function createPreloadedFile( 1179 + parent: string | FSNode, 1180 + name: string, 1181 + url: string, 1182 + canRead: boolean, 1183 + canWrite: boolean, 1184 + onload?: () => void, 1185 + onerror?: () => void, 1186 + dontCreateFile?: boolean, 1187 + canOwn?: boolean, 1188 + ): void; 1189 + function createDataFile( 1190 + parent: string | FSNode, 1191 + name: string, 1192 + data: ArrayBufferView | string, 1193 + canRead: boolean, 1194 + canWrite: boolean, 1195 + canOwn: boolean, 1196 + ): FSNode; 1197 + interface AnalysisResults { 1198 + isRoot: boolean, 1199 + exists: boolean, 1200 + error: Error, 1201 + name: string, 1202 + path: any, 1203 + object: any, 1204 + parentExists: boolean, 1205 + parentPath: any, 1206 + parentObject: any 1207 + } 1208 + function analyzePath(path: string): AnalysisResults; 1209 + } 1210 + 1211 + 1212 + export type OpenCascadeInstance = {FS: typeof FS} & { 1213 + BRep_Builder: typeof BRep_Builder; 1214 + BRepMesh_DiscretRoot: typeof BRepMesh_DiscretRoot; 1215 + BRepMesh_IncrementalMesh: typeof BRepMesh_IncrementalMesh; 1216 + BRepMesh_IncrementalMesh_1: typeof BRepMesh_IncrementalMesh_1; 1217 + BRepMesh_IncrementalMesh_2: typeof BRepMesh_IncrementalMesh_2; 1218 + BRepMesh_IncrementalMesh_3: typeof BRepMesh_IncrementalMesh_3; 1219 + BRepTools: typeof BRepTools; 1220 + CDM_Document: typeof CDM_Document; 1221 + IFSelect_ReturnStatus: IFSelect_ReturnStatus; 1222 + Message_ProgressRange: typeof Message_ProgressRange; 1223 + Message_ProgressRange_1: typeof Message_ProgressRange_1; 1224 + Message_ProgressRange_2: typeof Message_ProgressRange_2; 1225 + NCollection_BaseMap: typeof NCollection_BaseMap; 1226 + NCollection_BaseSequence: typeof NCollection_BaseSequence; 1227 + RWGltf_CafWriter: typeof RWGltf_CafWriter; 1228 + STEPCAFControl_Reader: typeof STEPCAFControl_Reader; 1229 + STEPCAFControl_Reader_1: typeof STEPCAFControl_Reader_1; 1230 + STEPCAFControl_Reader_2: typeof STEPCAFControl_Reader_2; 1231 + STEPControl_Reader: typeof STEPControl_Reader; 1232 + STEPControl_Reader_1: typeof STEPControl_Reader_1; 1233 + STEPControl_Reader_2: typeof STEPControl_Reader_2; 1234 + Standard_Transient: typeof Standard_Transient; 1235 + Standard_Transient_1: typeof Standard_Transient_1; 1236 + Standard_Transient_2: typeof Standard_Transient_2; 1237 + TColStd_IndexedDataMapOfStringString: typeof TColStd_IndexedDataMapOfStringString; 1238 + TColStd_IndexedDataMapOfStringString_1: typeof TColStd_IndexedDataMapOfStringString_1; 1239 + TColStd_IndexedDataMapOfStringString_2: typeof TColStd_IndexedDataMapOfStringString_2; 1240 + TColStd_IndexedDataMapOfStringString_3: typeof TColStd_IndexedDataMapOfStringString_3; 1241 + TCollection_AsciiString: typeof TCollection_AsciiString; 1242 + TCollection_AsciiString_1: typeof TCollection_AsciiString_1; 1243 + TCollection_AsciiString_2: typeof TCollection_AsciiString_2; 1244 + TCollection_AsciiString_3: typeof TCollection_AsciiString_3; 1245 + TCollection_AsciiString_4: typeof TCollection_AsciiString_4; 1246 + TCollection_AsciiString_5: typeof TCollection_AsciiString_5; 1247 + TCollection_AsciiString_6: typeof TCollection_AsciiString_6; 1248 + TCollection_AsciiString_7: typeof TCollection_AsciiString_7; 1249 + TCollection_AsciiString_8: typeof TCollection_AsciiString_8; 1250 + TCollection_AsciiString_9: typeof TCollection_AsciiString_9; 1251 + TCollection_AsciiString_10: typeof TCollection_AsciiString_10; 1252 + TCollection_AsciiString_11: typeof TCollection_AsciiString_11; 1253 + TCollection_AsciiString_12: typeof TCollection_AsciiString_12; 1254 + TCollection_AsciiString_13: typeof TCollection_AsciiString_13; 1255 + TCollection_AsciiString_14: typeof TCollection_AsciiString_14; 1256 + TCollection_ExtendedString: typeof TCollection_ExtendedString; 1257 + TCollection_ExtendedString_1: typeof TCollection_ExtendedString_1; 1258 + TCollection_ExtendedString_2: typeof TCollection_ExtendedString_2; 1259 + TCollection_ExtendedString_3: typeof TCollection_ExtendedString_3; 1260 + TCollection_ExtendedString_4: typeof TCollection_ExtendedString_4; 1261 + TCollection_ExtendedString_5: typeof TCollection_ExtendedString_5; 1262 + TCollection_ExtendedString_6: typeof TCollection_ExtendedString_6; 1263 + TCollection_ExtendedString_7: typeof TCollection_ExtendedString_7; 1264 + TCollection_ExtendedString_8: typeof TCollection_ExtendedString_8; 1265 + TCollection_ExtendedString_9: typeof TCollection_ExtendedString_9; 1266 + TCollection_ExtendedString_10: typeof TCollection_ExtendedString_10; 1267 + TCollection_ExtendedString_11: typeof TCollection_ExtendedString_11; 1268 + TCollection_ExtendedString_12: typeof TCollection_ExtendedString_12; 1269 + TDF_Attribute: typeof TDF_Attribute; 1270 + TDF_Label: typeof TDF_Label; 1271 + TDF_LabelSequence: typeof TDF_LabelSequence; 1272 + TDF_LabelSequence_1: typeof TDF_LabelSequence_1; 1273 + TDF_LabelSequence_2: typeof TDF_LabelSequence_2; 1274 + TDF_LabelSequence_3: typeof TDF_LabelSequence_3; 1275 + TDataStd_GenericEmpty: typeof TDataStd_GenericEmpty; 1276 + Handle_TDocStd_Document: typeof Handle_TDocStd_Document; 1277 + Handle_TDocStd_Document_1: typeof Handle_TDocStd_Document_1; 1278 + Handle_TDocStd_Document_2: typeof Handle_TDocStd_Document_2; 1279 + Handle_TDocStd_Document_3: typeof Handle_TDocStd_Document_3; 1280 + Handle_TDocStd_Document_4: typeof Handle_TDocStd_Document_4; 1281 + TDocStd_Document: typeof TDocStd_Document; 1282 + TopoDS_Shape: typeof TopoDS_Shape; 1283 + XCAFDoc_DocumentTool: typeof XCAFDoc_DocumentTool; 1284 + Handle_XCAFDoc_ShapeTool: typeof Handle_XCAFDoc_ShapeTool; 1285 + Handle_XCAFDoc_ShapeTool_1: typeof Handle_XCAFDoc_ShapeTool_1; 1286 + Handle_XCAFDoc_ShapeTool_2: typeof Handle_XCAFDoc_ShapeTool_2; 1287 + Handle_XCAFDoc_ShapeTool_3: typeof Handle_XCAFDoc_ShapeTool_3; 1288 + Handle_XCAFDoc_ShapeTool_4: typeof Handle_XCAFDoc_ShapeTool_4; 1289 + XCAFDoc_ShapeTool: typeof XCAFDoc_ShapeTool; 1290 + }; 1291 + 1292 + declare function init(): Promise<OpenCascadeInstance>; 1293 + 1294 + export default init;
+16
tools/renderer-step/build/opencascade.js
··· 1 + 2 + var Module = (() => { 3 + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; 4 + 5 + return ( 6 + function(Module) { 7 + Module = Module || {}; 8 + 9 + var Module=typeof Module!="undefined"?Module:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var POINTER_SIZE=4;var tempRet0=0;var setTempRet0=value=>{tempRet0=value};var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){idx>>>=0;var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=heapOrArray[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heapOrArray[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heapOrArray[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heapOrArray[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){ptr>>>=0;return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){outIdx>>>=0;if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++>>>0]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++>>>0]=192|u>>6;heap[outIdx++>>>0]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++>>>0]=224|u>>12;heap[outIdx++>>>0]=128|u>>6&63;heap[outIdx++>>>0]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++>>>0]=240|u>>18;heap[outIdx++>>>0]=128|u>>12&63;heap[outIdx++>>>0]=128|u>>6&63;heap[outIdx++>>>0]=128|u&63}}heap[outIdx>>>0]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf-16le"):undefined;function UTF16ToString(ptr,maxBytesToRead){var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx>>>0])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(HEAPU8.subarray(ptr>>>0,endPtr>>>0))}else{var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str}}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite<str.length*2?maxBytesToWrite/2:str.length;for(var i=0;i<numCharsToWrite;++i){var codeUnit=str.charCodeAt(i);HEAP16[outPtr>>>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){outPtr>>>=0;if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i<str.length;++i){var codeUnit=str.charCodeAt(i);if(codeUnit>=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i<str.length;++i){var codeUnit=str.charCodeAt(i);if(codeUnit>=55296&&codeUnit<=57343)++i;len+=4}return len}function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer>>>0)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>>0]=0}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||104857600;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function keepRuntimeAlive(){return noExitRuntime}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){{if(Module["onAbort"]){Module["onAbort"](what)}}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}var wasmBinaryFile;wasmBinaryFile="opencascade.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["qa"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["xa"];addOnInit(Module["asm"]["ra"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func=="number"){if(callback.arg===undefined){getWasmTableEntry(func)()}else{getWasmTableEntry(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___cxa_allocate_exception(size){return _malloc(size+24)+24}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24;this.set_type=function(type){HEAPU32[this.ptr+4>>>2]=type};this.get_type=function(){return HEAPU32[this.ptr+4>>>2]};this.set_destructor=function(destructor){HEAPU32[this.ptr+8>>>2]=destructor};this.get_destructor=function(){return HEAPU32[this.ptr+8>>>2]};this.set_refcount=function(refcount){HEAP32[this.ptr>>>2]=refcount};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>>0]!=0};this.init=function(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor);this.set_refcount(0);this.set_caught(false);this.set_rethrown(false)};this.add_ref=function(){var value=HEAP32[this.ptr>>>2];HEAP32[this.ptr>>>2]=value+1};this.release_ref=function(){var prev=HEAP32[this.ptr>>>2];HEAP32[this.ptr>>>2]=prev-1;return prev===1};this.set_adjusted_ptr=function(adjustedPtr){HEAPU32[this.ptr+16>>>2]=adjustedPtr};this.get_adjusted_ptr=function(){return HEAPU32[this.ptr+16>>>2]};this.get_exception_ptr=function(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return HEAPU32[this.excPtr>>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw ptr}var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:path=>{if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:(l,r)=>{return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function zeroMemory(address,size){HEAPU8.fill(0,address,address+size)}function alignMemory(size,alignment){return Math.ceil(size/alignment)*alignment}function mmapAlloc(size){size=alignMemory(size,65536);var ptr=_emscripten_builtin_memalign(65536,size);if(!ptr)return 0;zeroMemory(ptr,size);return ptr}var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){newCapacity>>>=0;var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)>>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage:function(node,newSize){newSize>>>=0;if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(buffer.buffer===HEAP8.buffer){canOwn=false}if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray){node.contents.set(buffer.subarray(offset,offset+length),position)}else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===buffer){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<contents.length){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}ptr>>>=0;HEAP8.set(contents,ptr>>>0)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};function asyncLoad(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";readAsync(url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)}var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:(path,opts={})=>{path=PATH_FS.resolve(FS.cwd(),path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(p=>!!p),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH_FS.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count+1});current=lookup.node;if(count++>40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:node=>{var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:(parentid,name)=>{var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length},hashAddNode:node=>{var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:node=>{var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:(parent,name)=>{var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:(parent,name,mode,rdev)=>{var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:node=>{FS.hashRemoveNode(node)},isRoot:node=>{return node===node.parent},isMountpoint:node=>{return!!node.mounted},isFile:mode=>{return(mode&61440)===32768},isDir:mode=>{return(mode&61440)===16384},isLink:mode=>{return(mode&61440)===40960},isChrdev:mode=>{return(mode&61440)===8192},isBlkdev:mode=>{return(mode&61440)===24576},isFIFO:mode=>{return(mode&61440)===4096},isSocket:mode=>{return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:str=>{var flags=FS.flagModes[str];if(typeof flags=="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:flag=>{var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:(node,perms)=>{if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup:dir=>{var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:(dir,name)=>{try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:(dir,name,isdir)=>{var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:(node,flags)=>{if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:(fd_start=0,fd_end=FS.MAX_OPEN_FDS)=>{for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:fd=>FS.streams[fd],createStream:(stream,fd_start,fd_end)=>{if(!FS.FSStream){FS.FSStream=function(){this.shared={}};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}},flags:{get:function(){return this.shared.flags},set:function(val){this.shared.flags=val}},position:{get:function(){return this.shared.position},set:function(val){this.shared.position=val}}})}stream=Object.assign(new FS.FSStream,stream);var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:fd=>{FS.streams[fd]=null},chrdev_stream_ops:{open:stream=>{var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:()=>{throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice:(dev,ops)=>{FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts:mount=>{var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:(populate,callback)=>{if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:(type,opts,mountpoint)=>{var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:mountpoint=>{var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:(parent,name)=>{return parent.node_ops.lookup(parent,name)},mknod:(path,mode,dev)=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:(path,mode)=>{mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:(path,mode)=>{mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:(path,mode)=>{var dirs=path.split("/");var d="";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev:(path,mode,dev)=>{if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:(oldpath,newpath)=>{if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:(old_path,new_path)=>{var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir:path=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(54)}return node.node_ops.readdir(node)},unlink:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink:path=>{var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return PATH_FS.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:(path,dontFollow)=>{var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(44)}if(!node.node_ops.getattr){throw new FS.ErrnoError(63)}return node.node_ops.getattr(node)},lstat:path=>{return FS.stat(path,true)},chmod:(path,mode,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:(path,mode)=>{FS.chmod(path,mode,true)},fchmod:(fd,mode)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:(path,uid,gid,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:(path,uid,gid)=>{FS.chown(path,uid,gid,true)},fchown:(fd,uid,gid)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:(path,len)=>{if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:(fd,len)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.truncate(stream.node,len)},utime:(path,atime,mtime)=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:(path,flags,mode)=>{if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode=="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path=="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close:stream=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:stream=>{return stream.fd===null},llseek:(stream,offset,whence)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:(stream,buffer,offset,length,position)=>{offset>>>=0;if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:(stream,buffer,offset,length,position,canOwn)=>{offset>>>=0;if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},allocate:(stream,offset,length)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(offset<0||length<=0){throw new FS.ErrnoError(28)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(43)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(138)}stream.stream_ops.allocate(stream,offset,length)},mmap:(stream,length,position,prot,flags)=>{if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync:(stream,buffer,offset,length,mmapFlags)=>{offset>>>=0;if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:stream=>0,ioctl:(stream,cmd,arg)=>{if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:(path,opts={})=>{opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:(path,data,opts={})=>{opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir:path=>{var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories:()=>{FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:()=>{FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:()=>{FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:()=>{var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:(parent,name)=>{var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:()=>{if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},ensureErrnoError:()=>{if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error"};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:()=>{FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:(input,output,error)=>{FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:()=>{FS.init.initialized=false;for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:(path,dontResolveLastLink)=>{var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{return null}},analyzePath:(path,dontResolveLastLink)=>{try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath:(parent,path,canRead,canWrite)=>{parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:(parent,name,properties,canRead,canWrite)=>{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:(parent,name,data,canRead,canWrite,canOwn)=>{var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:(parent,name,input,output)=>{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:stream=>{stream.seekable=false},close:stream=>{if(output&&output.buffer&&output.buffer.length){output(10)}},read:(stream,buffer,offset,length,pos)=>{var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:(stream,buffer,offset,length,pos)=>{for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},forceLoadFile:obj=>{if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(typeof XMLHttpRequest!="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(read_){try{obj.contents=intArrayFromString(read_(obj.url),true);obj.usedBytes=obj.contents.length}catch(e){throw new FS.ErrnoError(29)}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}},createLazyFile:(parent,name,url,canRead,canWrite)=>{function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size}stream_ops.read=(stream,buffer,offset,length,position)=>{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr:ptr,allocated:true}};node.stream_ops=stream_ops;return node},createPreloadedFile:(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency("cp "+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}if(Browser.handledByPreloadPlugin(byteArray,fullname,finish,()=>{if(onerror)onerror();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,byteArray=>processData(byteArray),onerror)}else{processData(url)}},indexedDB:()=>{return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:()=>{return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:(paths,onload,onerror)=>{onload=onload||(()=>{});onerror=onerror||(()=>{});var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=()=>{out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=()=>{var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(path=>{var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=()=>{ok++;if(ok+fail==total)finish()};putRequest.onerror=()=>{fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:(paths,onload,onerror)=>{onload=onload||(()=>{});onerror=onerror||(()=>{});var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=()=>{var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(path=>{var getRequest=files.get(path);getRequest.onsuccess=()=>{if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=()=>{fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt:function(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(8);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-54}throw e}HEAP32[buf>>>2]=stat.dev;HEAP32[buf+4>>>2]=0;HEAP32[buf+8>>>2]=stat.ino;HEAP32[buf+12>>>2]=stat.mode;HEAP32[buf+16>>>2]=stat.nlink;HEAP32[buf+20>>>2]=stat.uid;HEAP32[buf+24>>>2]=stat.gid;HEAP32[buf+28>>>2]=stat.rdev;HEAP32[buf+32>>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>>2]=tempI64[0],HEAP32[buf+44>>>2]=tempI64[1];HEAP32[buf+48>>>2]=4096;HEAP32[buf+52>>>2]=stat.blocks;HEAP32[buf+56>>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>>2]=0;HEAP32[buf+64>>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>>2]=0;HEAP32[buf+72>>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>>2]=tempI64[0],HEAP32[buf+84>>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream}};function ___syscall_chmod(path,mode){try{path=SYSCALLS.getStr(path);FS.chmod(path,mode);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_faccessat(dirfd,path,amode,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(amode&~7){return-28}var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function setErrNo(value){HEAP32[___errno_location()>>>2]=value;return value}function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.createStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 5:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>>1]=2;return 0}case 6:case 7:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_fstat64(fd,buf){try{var stream=SYSCALLS.getStreamFromFD(fd);return SYSCALLS.doStat(FS.stat,stream.path,buf)}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();HEAP32[argp>>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{if(!stream.tty)return-59;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_lstat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.lstat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_mkdirat(dirfd,path,mode){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_newfstatat(dirfd,path,buf,flags){try{path=SYSCALLS.getStr(path);var nofollow=flags&256;var allowEmpty=flags&4096;flags=flags&~4352;path=SYSCALLS.calculateAt(dirfd,path,allowEmpty);return SYSCALLS.doStat(nofollow?FS.lstat:FS.stat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?SYSCALLS.get():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_rmdir(path){try{path=SYSCALLS.getStr(path);FS.rmdir(path);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_stat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_unlinkat(dirfd,path,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(flags===0){FS.unlink(path)}else if(flags===512){FS.rmdir(path)}else{abort("Invalid flags passed to unlinkat")}return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function __embind_register_bigint(primitiveType,name,size,minRange,maxRange){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c>>>0]){ret+=embind_charCodes[HEAPU8[c++>>>0]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}return name}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n")(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i<myTypes.length;++i){registerType(myTypes[i],myTypeConverters[i])}}var typeConverters=new Array(dependentTypes.length);var unregisteredTypes=[];var registered=0;dependentTypes.forEach((dt,i)=>{if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt]}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[]}awaitingDependencies[dt].push(()=>{typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters)}})}});if(0===unregisteredTypes.length){onComplete(typeConverters)}}function registerType(rawType,registeredInstance,options={}){if(!("argPackAdvance"in registeredInstance)){throw new TypeError("registerType registeredInstance requires argPackAdvance")}var name=registeredInstance.name;if(!rawType){throwBindingError('type "'+name+'" must have a positive integer typeid pointer')}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return}else{throwBindingError("Cannot register type '"+name+"' twice")}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(cb=>cb())}}function __embind_register_bool(rawType,name,size,trueValue,falseValue){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(wt){return!!wt},"toWireType":function(destructors,o){return o?trueValue:falseValue},"argPackAdvance":8,"readValueFromPointer":function(pointer){var heap;if(size===1){heap=HEAP8}else if(size===2){heap=HEAP16}else if(size===4){heap=HEAP32}else{throw new TypeError("Unknown boolean type size: "+name)}return this["fromWireType"](heap[pointer>>>shift])},destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}var finalizationRegistry=false;function detachFinalizer(handle){}function runDestructor($$){if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function releaseClassHandle($$){$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}var registeredPointers={};function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}var delayFunction=undefined;function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record}}))}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function attachFinalizer(handle){if("undefined"===typeof FinalizationRegistry){attachFinalizer=handle=>handle;return handle}finalizationRegistry=new FinalizationRegistry(info=>{releaseClassHandle(info.$$)});attachFinalizer=handle=>{var $$=handle.$$;var hasSmartPtr=!!$$.smartPtr;if(hasSmartPtr){var info={$$:$$};finalizationRegistry.register(handle,info,handle)}return handle};detachFinalizer=handle=>finalizationRegistry.unregister(handle);return attachFinalizer(handle)}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,Emval.toHandle(function(){clonedHandle["delete"]()}));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&&registeredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function dynCallLegacy(sig,ptr,args){var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}function dynCall(sig,ptr,args){if(sig.includes("j")){return dynCallLegacy(sig,ptr,args)}return getWasmTableEntry(ptr).apply(null,args)}function getDynCaller(sig,ptr){var argCache=[];return function(){argCache.length=0;Object.assign(argCache,arguments);return dynCall(sig,ptr,argCache)}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(){if(signature.includes("j")){return getDynCaller(signature,rawFunction)}return getWasmTableEntry(rawFunction)}var fp=makeDynCaller();if(typeof fp!="function"){throwBindingError("unknown function pointer with signature "+signature+": "+rawFunction)}return fp}var UnboundTypeError=undefined;function getTypeName(type){var ptr=___getTypeName(type);var rv=readLatin1String(ptr);_free(ptr);return rv}function throwUnboundTypeError(message,types){var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return}if(registeredTypes[type]){return}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return}unboundTypes.push(type);seen[type]=true}types.forEach(visit);throw new UnboundTypeError(message+": "+unboundTypes.map(getTypeName).join([", "]))}function __embind_register_class(rawType,rawPointerType,rawConstPointerType,baseClassRawType,getActualTypeSignature,getActualType,upcastSignature,upcast,downcastSignature,downcast,name,destructorSignature,rawDestructor){name=readLatin1String(name);getActualType=embind__requireFunction(getActualTypeSignature,getActualType);if(upcast){upcast=embind__requireFunction(upcastSignature,upcast)}if(downcast){downcast=embind__requireFunction(downcastSignature,downcast)}rawDestructor=embind__requireFunction(destructorSignature,rawDestructor);var legalFunctionName=makeLegalFunctionName(name);exposePublicSymbol(legalFunctionName,function(){throwUnboundTypeError("Cannot construct "+name+" due to unbound types",[baseClassRawType])});whenDependentTypesAreResolved([rawType,rawPointerType,rawConstPointerType],baseClassRawType?[baseClassRawType]:[],function(base){base=base[0];var baseClass;var basePrototype;if(baseClassRawType){baseClass=base.registeredClass;basePrototype=baseClass.instancePrototype}else{basePrototype=ClassHandle.prototype}var constructor=createNamedFunction(legalFunctionName,function(){if(Object.getPrototypeOf(this)!==instancePrototype){throw new BindingError("Use 'new' to construct "+name)}if(undefined===registeredClass.constructor_body){throw new BindingError(name+" has no accessible constructor")}var body=registeredClass.constructor_body[arguments.length];if(undefined===body){throw new BindingError("Tried to invoke ctor of "+name+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(registeredClass.constructor_body).toString()+") parameters instead!")}return body.apply(this,arguments)});var instancePrototype=Object.create(basePrototype,{constructor:{value:constructor}});constructor.prototype=instancePrototype;var registeredClass=new RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast);var referenceConverter=new RegisteredPointer(name,registeredClass,true,false,false);var pointerConverter=new RegisteredPointer(name+"*",registeredClass,false,false,false);var constPointerConverter=new RegisteredPointer(name+" const*",registeredClass,false,true,false);registeredPointers[rawType]={pointerType:pointerConverter,constPointerType:constPointerConverter};replacePublicSymbol(legalFunctionName,constructor);return[referenceConverter,pointerConverter,constPointerConverter]})}function new_(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError("new_ called with constructor type "+typeof constructor+" which is not a function")}var dummy=createNamedFunction(constructor.name||"unknownFunctionName",function(){});dummy.prototype=constructor.prototype;var obj=new dummy;var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj}function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i<argTypes.length;++i){if(argTypes[i]!==null&&argTypes[i].destructorFunction===undefined){needsDestructorStack=true;break}}var returns=argTypes[0].name!=="void";var argsList="";var argsListWired="";for(var i=0;i<argCount-2;++i){argsList+=(i!==0?", ":"")+"arg"+i;argsListWired+=(i!==0?", ":"")+"arg"+i+"Wired"}var invokerFnBody="return function "+makeLegalFunctionName(humanName)+"("+argsList+") {\n"+"if (arguments.length !== "+(argCount-2)+") {\n"+"throwBindingError('function "+humanName+" called with ' + arguments.length + ' arguments, expected "+(argCount-2)+" args!');\n"+"}\n";if(needsDestructorStack){invokerFnBody+="var destructors = [];\n"}var dtorStack=needsDestructorStack?"destructors":"null";var args1=["throwBindingError","invoker","fn","runDestructors","retType","classParam"];var args2=[throwBindingError,cppInvokerFunc,cppTargetFunc,runDestructors,argTypes[0],argTypes[1]];if(isClassMethodFunc){invokerFnBody+="var thisWired = classParam.toWireType("+dtorStack+", this);\n"}for(var i=0;i<argCount-2;++i){invokerFnBody+="var arg"+i+"Wired = argType"+i+".toWireType("+dtorStack+", arg"+i+"); // "+argTypes[i+2].name+"\n";args1.push("argType"+i);args2.push(argTypes[i+2])}if(isClassMethodFunc){argsListWired="thisWired"+(argsListWired.length>0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i<argTypes.length;++i){var paramName=i===1?"thisWired":"arg"+(i-2)+"Wired";if(argTypes[i].destructorFunction!==null){invokerFnBody+=paramName+"_dtor("+paramName+"); // "+argTypes[i].name+"\n";args1.push(paramName+"_dtor");args2.push(argTypes[i].destructorFunction)}}}if(returns){invokerFnBody+="var ret = retType.fromWireType(rv);\n"+"return ret;\n"}else{}invokerFnBody+="}\n";args1.push(invokerFnBody);var invokerFunction=new_(Function,args1).apply(null,args2);return invokerFunction}function heap32VectorToArray(count,firstElement){var array=[];for(var i=0;i<count;i++){array.push(HEAP32[(firstElement>>2)+i>>>0])}return array}function __embind_register_class_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,fn){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}var proto=classType.registeredClass.constructor;if(undefined===proto[methodName]){unboundTypesHandler.argCount=argCount-1;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-1]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));var func=craftInvokerFunction(humanName,invokerArgsArray,null,rawInvoker,fn);if(undefined===proto[methodName].overloadTable){func.argCount=argCount-1;proto[methodName]=func}else{proto[methodName].overloadTable[argCount-1]=func}return[]});return[]})}function __embind_register_class_constructor(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor){assert(argCount>0);var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName="constructor "+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError("Cannot register multiple constructors with identical number of parameters ("+(argCount-1)+") for class '"+classType.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!")}classType.registeredClass.constructor_body[argCount-1]=()=>{throwUnboundTypeError("Cannot construct "+classType.name+" due to unbound types",rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){argTypes.splice(1,0,null);classType.registeredClass.constructor_body[argCount-1]=craftInvokerFunction(humanName,argTypes,null,invoker,rawConstructor);return[]});return[]})}function __embind_register_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName)}function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction}else{proto[methodName].overloadTable[argCount-2]=memberFunction}return[]});return[]})}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i<emval_handle_array.length;++i){if(emval_handle_array[i]!==undefined){++count}}return count}function get_first_emval(){for(var i=5;i<emval_handle_array.length;++i){if(emval_handle_array[i]!==undefined){return emval_handle_array[i]}}return null}function init_emval(){Module["count_emval_handles"]=count_emval_handles;Module["get_first_emval"]=get_first_emval}var Emval={toValue:handle=>{if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handle_array[handle].value},toHandle:value=>{switch(value){case undefined:return 1;case null:return 2;case true:return 3;case false:return 4;default:{var handle=emval_free_list.length?emval_free_list.pop():emval_handle_array.length;emval_handle_array[handle]={refcount:1,value:value};return handle}}}};function __embind_register_emval(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(handle){var rv=Emval.toValue(handle);__emval_decref(handle);return rv},"toWireType":function(destructors,value){return Emval.toHandle(value)},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:null})}function enumReadValueFromPointer(name,shift,signed){switch(shift){case 0:return function(pointer){var heap=signed?HEAP8:HEAPU8;return this["fromWireType"](heap[pointer>>>0])};case 1:return function(pointer){var heap=signed?HEAP16:HEAPU16;return this["fromWireType"](heap[pointer>>>1])};case 2:return function(pointer){var heap=signed?HEAP32:HEAPU32;return this["fromWireType"](heap[pointer>>>2])};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_enum(rawType,name,size,isSigned){var shift=getShiftFromSize(size);name=readLatin1String(name);function ctor(){}ctor.values={};registerType(rawType,{name:name,constructor:ctor,"fromWireType":function(c){return this.constructor.values[c]},"toWireType":function(destructors,c){return c.value},"argPackAdvance":8,"readValueFromPointer":enumReadValueFromPointer(name,shift,isSigned),destructorFunction:null});exposePublicSymbol(name,ctor)}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __embind_register_enum_value(rawEnumType,name,enumValue){var enumType=requireRegisteredType(rawEnumType,"enum");name=readLatin1String(name);var Enum=enumType.constructor;var Value=Object.create(enumType.constructor.prototype,{value:{value:enumValue},constructor:{value:createNamedFunction(enumType.name+"_"+name,function(){})}});Enum.values[enumValue]=Value;Enum[name]=Value}function _embind_repr(v){if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer>>>0]}:function readU8FromPointer(pointer){return HEAPU8[pointer>>>0]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=value=>value;if(minRange===0){var bitshift=32-8*size;fromWireType=value=>value<<bitshift>>>bitshift}var isUnsignedType=name.includes("unsigned");var checkAssertions=(value,toTypeName)=>{};var toWireType;if(isUnsignedType){toWireType=function(destructors,value){checkAssertions(value,this.name);return value>>>0}}else{toWireType=function(destructors,value){checkAssertions(value,this.name);return value}}registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":toWireType,"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle>>>0];var data=heap[handle+1>>>0];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>>2];var str;if(stdStringIsUTF8){var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(i==length||HEAPU8[currentBytePtr>>>0]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i<length;++i){a[i]=String.fromCharCode(HEAPU8[value+4+i>>>0])}str=a.join("")}_free(value);return str},"toWireType":function(destructors,value){if(value instanceof ArrayBuffer){value=new Uint8Array(value)}var getLength;var valueIsOfTypeString=typeof value=="string";if(!(valueIsOfTypeString||value instanceof Uint8Array||value instanceof Uint8ClampedArray||value instanceof Int8Array)){throwBindingError("Cannot pass non-string to std::string")}if(stdStringIsUTF8&&valueIsOfTypeString){getLength=()=>lengthBytesUTF8(value)}else{getLength=()=>value.length}var length=getLength();var ptr=_malloc(4+length+1);ptr>>>=0;HEAPU32[ptr>>>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1)}else{if(valueIsOfTypeString){for(var i=0;i<length;++i){var charCode=value.charCodeAt(i);if(charCode>255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+4+i>>>0]=charCode}}else{for(var i=0;i<length;++i){HEAPU8[ptr+4+i>>>0]=value[i]}}}if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_std_wstring(rawType,charSize,name){name=readLatin1String(name);var decodeString,encodeString,getHeap,lengthBytesUTF,shift;if(charSize===2){decodeString=UTF16ToString;encodeString=stringToUTF16;lengthBytesUTF=lengthBytesUTF16;getHeap=()=>HEAPU16;shift=1}else if(charSize===4){decodeString=UTF32ToString;encodeString=stringToUTF32;lengthBytesUTF=lengthBytesUTF32;getHeap=()=>HEAPU32;shift=2}registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||HEAP[currentBytePtr>>>shift]==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value=="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);ptr>>>=0;HEAPU32[ptr>>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function __emscripten_date_now(){return Date.now()}var nowIsMonotonic=true;function __emscripten_get_now_is_monotonic(){return nowIsMonotonic}function __emval_as(handle,returnType,destructorsRef){handle=Emval.toValue(handle);returnType=requireRegisteredType(returnType,"emval::as");var destructors=[];var rd=Emval.toHandle(destructors);HEAP32[destructorsRef>>>2]=rd;return returnType["toWireType"](destructors,handle)}function emval_allocateDestructors(destructorsRef){var destructors=[];HEAP32[destructorsRef>>>2]=Emval.toHandle(destructors);return destructors}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}return symbol}var emval_methodCallers=[];function __emval_call_method(caller,handle,methodName,destructorsRef,args){caller=emval_methodCallers[caller];handle=Emval.toValue(handle);methodName=getStringOrSymbol(methodName);return caller(handle,methodName,emval_allocateDestructors(destructorsRef),args)}function emval_get_global(){if(typeof globalThis=="object"){return globalThis}return function(){return Function}()("return this")()}function __emval_get_global(name){if(name===0){return Emval.toHandle(emval_get_global())}else{name=getStringOrSymbol(name);return Emval.toHandle(emval_get_global()[name])}}function emval_addMethodCaller(caller){var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id}function emval_lookupTypes(argCount,argTypes){var a=new Array(argCount);for(var i=0;i<argCount;++i){a[i]=requireRegisteredType(HEAPU32[argTypes+i*POINTER_SIZE>>>2],"parameter "+i)}return a}var emval_registeredMethods=[];function __emval_get_method_caller(argCount,argTypes){var types=emval_lookupTypes(argCount,argTypes);var retType=types[0];var signatureName=retType.name+"_$"+types.slice(1).map(function(t){return t.name}).join("_")+"$";var returnId=emval_registeredMethods[signatureName];if(returnId!==undefined){return returnId}var params=["retType"];var args=[retType];var argsList="";for(var i=0;i<argCount-1;++i){argsList+=(i!==0?", ":"")+"arg"+i;params.push("argType"+i);args.push(types[1+i])}var functionName=makeLegalFunctionName("methodCaller_"+signatureName);var functionBody="return function "+functionName+"(handle, name, destructors, args) {\n";var offset=0;for(var i=0;i<argCount-1;++i){functionBody+=" var arg"+i+" = argType"+i+".readValueFromPointer(args"+(offset?"+"+offset:"")+");\n";offset+=types[i+1]["argPackAdvance"]}functionBody+=" var rv = handle[name]("+argsList+");\n";for(var i=0;i<argCount-1;++i){if(types[i+1]["deleteObject"]){functionBody+=" argType"+i+".deleteObject(arg"+i+");\n"}}if(!retType.isVoid){functionBody+=" return retType.toWireType(destructors, rv);\n"}functionBody+="};\n";params.push(functionBody);var invokerFunction=new_(Function,params).apply(null,args);returnId=emval_addMethodCaller(invokerFunction);emval_registeredMethods[signatureName]=returnId;return returnId}function __emval_get_property(handle,key){handle=Emval.toValue(handle);key=Emval.toValue(key);return Emval.toHandle(handle[key])}function __emval_incref(handle){if(handle>4){emval_handle_array[handle].refcount+=1}}function __emval_new_cstring(v){return Emval.toHandle(getStringOrSymbol(v))}function __emval_run_destructors(handle){var destructors=Emval.toValue(handle);runDestructors(destructors);__emval_decref(handle)}function __emval_set_property(handle,key,value){handle=Emval.toValue(handle);key=Emval.toValue(key);value=Emval.toValue(value);handle[key]=value}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return Emval.toHandle(v)}function __emval_typeof(handle){handle=Emval.toValue(handle);return Emval.toHandle(typeof handle)}function __localtime_js(time,tmPtr){var date=new Date(HEAP32[time>>>2]*1e3);HEAP32[tmPtr>>>2]=date.getSeconds();HEAP32[tmPtr+4>>>2]=date.getMinutes();HEAP32[tmPtr+8>>>2]=date.getHours();HEAP32[tmPtr+12>>>2]=date.getDate();HEAP32[tmPtr+16>>>2]=date.getMonth();HEAP32[tmPtr+20>>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>>2]=date.getDay();var start=new Date(date.getFullYear(),0,1);var yday=(date.getTime()-start.getTime())/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>>2]=yday;HEAP32[tmPtr+36>>>2]=-(date.getTimezoneOffset()*60);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>>2]=dst}function __munmap_js(addr,len,prot,flags,fd,offset){try{addr>>>=0;var stream=FS.getStream(fd);if(stream){if(prot&2){SYSCALLS.doMsync(addr,stream,len,flags,offset)}FS.munmap(stream)}}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function _tzset_impl(timezone,daylight,tzname){var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAP32[timezone>>>2]=stdTimezoneOffset*60;HEAP32[daylight>>>2]=Number(winterOffset!=summerOffset);function extractZone(date){var match=date.toTimeString().match(/\(([A-Za-z ]+)\)$/);return match?match[1]:"GMT"}var winterName=extractZone(winter);var summerName=extractZone(summer);var winterNamePtr=allocateUTF8(winterName);var summerNamePtr=allocateUTF8(summerName);if(summerOffset<winterOffset){HEAPU32[tzname>>>2]=winterNamePtr;HEAPU32[tzname+4>>>2]=summerNamePtr}else{HEAPU32[tzname>>>2]=summerNamePtr;HEAPU32[tzname+4>>>2]=winterNamePtr}}function __tzset_js(timezone,daylight,tzname){if(__tzset_js.called)return;__tzset_js.called=true;_tzset_impl(timezone,daylight,tzname)}function _abort(){abort("")}function getHeapMax(){return 4294901760}function _emscripten_get_heap_max(){return getHeapMax()}var _emscripten_get_now;_emscripten_get_now=()=>performance.now();function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest>>>0,src>>>0,src+num>>>0)}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}let alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAPU32[penviron_count>>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAPU32[penviron_buf_size>>>2]=bufSize;return 0}function _exit(status){exit(status)}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function doReadv(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>>2];var len=HEAPU32[iov+4>>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break}return ret}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doReadv(stream,iov,iovcnt);HEAP32[pnum>>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function convertI32PairToI53Checked(lo,hi){return hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var offset=convertI32PairToI53Checked(offset_low,offset_high);if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>>2]=tempI64[0],HEAP32[newOffset+4>>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function doWritev(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>>2];var len=HEAPU32[iov+4>>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function inetPton4(str){var b=str.split(".");for(var i=0;i<4;i++){var tmp=Number(b[i]);if(isNaN(tmp))return null;b[i]=tmp}return(b[0]|b[1]<<8|b[2]<<16|b[3]<<24)>>>0}function jstoi_q(str){return parseInt(str)}function inetPton6(str){var words;var w,offset,z;var valid6regx=/^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i;var parts=[];if(!valid6regx.test(str)){return null}if(str==="::"){return[0,0,0,0,0,0,0,0]}if(str.startsWith("::")){str=str.replace("::","Z:")}else{str=str.replace("::",":Z:")}if(str.indexOf(".")>0){str=str.replace(new RegExp("[.]","g"),":");words=str.split(":");words[words.length-4]=jstoi_q(words[words.length-4])+jstoi_q(words[words.length-3])*256;words[words.length-3]=jstoi_q(words[words.length-2])+jstoi_q(words[words.length-1])*256;words=words.slice(0,words.length-2)}else{words=str.split(":")}offset=0;z=0;for(w=0;w<words.length;w++){if(typeof words[w]=="string"){if(words[w]==="Z"){for(z=0;z<8-words.length+1;z++){parts[w+z]=0}offset=z-1}else{parts[w+offset]=_htons(parseInt(words[w],16))}}else{parts[w+offset]=words[w]}}return[parts[1]<<16|parts[0],parts[3]<<16|parts[2],parts[5]<<16|parts[4],parts[7]<<16|parts[6]]}var DNS={address_map:{id:1,addrs:{},names:{}},lookup_name:function(name){var res=inetPton4(name);if(res!==null){return name}res=inetPton6(name);if(res!==null){return name}var addr;if(DNS.address_map.addrs[name]){addr=DNS.address_map.addrs[name]}else{var id=DNS.address_map.id++;assert(id<65535,"exceeded max address mappings of 65535");addr="172.29."+(id&255)+"."+(id&65280);DNS.address_map.names[addr]=name;DNS.address_map.addrs[name]=addr}return addr},lookup_addr:function(addr){if(DNS.address_map.names[addr]){return DNS.address_map.names[addr]}return null}};function getHostByName(name){var ret=_malloc(20);var nameBuf=_malloc(name.length+1);stringToUTF8(name,nameBuf,name.length+1);HEAPU32[ret>>>2]=nameBuf;var aliasesBuf=_malloc(4);HEAPU32[aliasesBuf>>>2]=0;HEAPU32[ret+4>>>2]=aliasesBuf;var afinet=2;HEAP32[ret+8>>>2]=afinet;HEAP32[ret+12>>>2]=4;var addrListBuf=_malloc(12);HEAPU32[addrListBuf>>>2]=addrListBuf+8;HEAPU32[addrListBuf+4>>>2]=0;HEAP32[addrListBuf+8>>>2]=inetPton4(DNS.lookup_name(name));HEAPU32[ret+16>>>2]=addrListBuf;return ret}function _gethostbyname(name){return getHostByName(UTF8ToString(name))}function __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=function(index,divisor){ext["vertexAttribDivisorANGLE"](index,divisor)};ctx["drawArraysInstanced"]=function(mode,first,count,primcount){ext["drawArraysInstancedANGLE"](mode,first,count,primcount)};ctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=function(){return ext["createVertexArrayOES"]()};ctx["deleteVertexArray"]=function(vao){ext["deleteVertexArrayOES"](vao)};ctx["bindVertexArray"]=function(vao){ext["bindVertexArrayOES"](vao)};ctx["isVertexArray"]=function(vao){return ext["isVertexArrayOES"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=function(n,bufs){ext["drawBuffersWEBGL"](n,bufs)};return 1}}function __webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],stringCache:{},unpackAlignment:4,recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i<ret;i++){table[i]=null}return ret},getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){if(!canvas.getContextSafariWebGL2Fixed){canvas.getContextSafariWebGL2Fixed=canvas.getContext;function fixedGetContext(ver,attrs){var gl=canvas.getContextSafariWebGL2Fixed(ver,attrs);return ver=="webgl"==gl instanceof WebGLRenderingContext?gl:null}canvas.getContext=fixedGetContext}var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=GL.getNewId(GL.contexts);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault=="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents=="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;__webgl_enable_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);{GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query")}__webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}})}};function webglGetLeftBracePos(name){return name.slice(-1)=="]"&&name.lastIndexOf("[")}function webglPrepareUniformLocationsBeforeFirstUse(program){var uniformLocsById=program.uniformLocsById,uniformSizeAndIdsByName=program.uniformSizeAndIdsByName,i,j;if(!uniformLocsById){program.uniformLocsById=uniformLocsById={};program.uniformArrayNamesById={};for(i=0;i<GLctx.getProgramParameter(program,35718);++i){var u=GLctx.getActiveUniform(program,i);var nm=u.name;var sz=u.size;var lb=webglGetLeftBracePos(nm);var arrayName=lb>0?nm.slice(0,lb):nm;var id=program.uniformIdCounter;program.uniformIdCounter+=sz;uniformSizeAndIdsByName[arrayName]=[sz,id];for(j=0;j<sz;++j){uniformLocsById[id]=j;program.uniformArrayNamesById[id++]=arrayName}}}}function _glGetUniformLocation(program,name){name=UTF8ToString(name);if(program=GL.programs[program]){webglPrepareUniformLocationsBeforeFirstUse(program);var uniformLocsById=program.uniformLocsById;var arrayIndex=0;var uniformBaseName=name;var leftBrace=webglGetLeftBracePos(name);if(leftBrace>0){arrayIndex=jstoi_q(name.slice(leftBrace+1))>>>0;uniformBaseName=name.slice(0,leftBrace)}var sizeAndId=program.uniformSizeAndIdsByName[uniformBaseName];if(sizeAndId&&arrayIndex<sizeAndId[0]){arrayIndex+=sizeAndId[1];if(uniformLocsById[arrayIndex]=uniformLocsById[arrayIndex]||GLctx.getUniformLocation(program,name)){return arrayIndex}}}else{GL.recordError(1281)}return-1}function webglGetUniformLocation(location){var p=GLctx.currentProgram;if(p){var webglLoc=p.uniformLocsById[location];if(typeof webglLoc=="number"){p.uniformLocsById[location]=webglLoc=GLctx.getUniformLocation(p,p.uniformArrayNamesById[location]+(webglLoc>0?"["+webglLoc+"]":""))}return webglLoc}else{GL.recordError(1282)}}function _glUniform1f(location,v0){GLctx.uniform1f(webglGetUniformLocation(location),v0)}function _glUniform1i(location,v0){GLctx.uniform1i(webglGetUniformLocation(location),v0)}var miniTempWebGLFloatBuffers=[];function _glUniform2fv(location,count,value){if(count<=144){var view=miniTempWebGLFloatBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>>2];view[i+1]=HEAPF32[value+(4*i+4)>>>2]}}else{var view=HEAPF32.subarray(value>>>2,value+count*8>>>2)}GLctx.uniform2fv(webglGetUniformLocation(location),view)}var __miniTempWebGLIntBuffers=[];function _glUniform2iv(location,count,value){if(count<=144){var view=__miniTempWebGLIntBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAP32[value+4*i>>>2];view[i+1]=HEAP32[value+(4*i+4)>>>2]}}else{var view=HEAP32.subarray(value>>>2,value+count*8>>>2)}GLctx.uniform2iv(webglGetUniformLocation(location),view)}function _glUniform3fv(location,count,value){if(count<=96){var view=miniTempWebGLFloatBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>>2];view[i+1]=HEAPF32[value+(4*i+4)>>>2];view[i+2]=HEAPF32[value+(4*i+8)>>>2]}}else{var view=HEAPF32.subarray(value>>>2,value+count*12>>>2)}GLctx.uniform3fv(webglGetUniformLocation(location),view)}function _glUniform3iv(location,count,value){if(count<=96){var view=__miniTempWebGLIntBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAP32[value+4*i>>>2];view[i+1]=HEAP32[value+(4*i+4)>>>2];view[i+2]=HEAP32[value+(4*i+8)>>>2]}}else{var view=HEAP32.subarray(value>>>2,value+count*12>>>2)}GLctx.uniform3iv(webglGetUniformLocation(location),view)}function _glUniform4fv(location,count,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<4*count;i+=4){var dst=value+i;view[i]=heap[dst>>>0];view[i+1]=heap[dst+1>>>0];view[i+2]=heap[dst+2>>>0];view[i+3]=heap[dst+3>>>0]}}else{var view=HEAPF32.subarray(value>>>2,value+count*16>>>2)}GLctx.uniform4fv(webglGetUniformLocation(location),view)}function _glUniform4iv(location,count,value){if(count<=72){var view=__miniTempWebGLIntBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAP32[value+4*i>>>2];view[i+1]=HEAP32[value+(4*i+4)>>>2];view[i+2]=HEAP32[value+(4*i+8)>>>2];view[i+3]=HEAP32[value+(4*i+12)>>>2]}}else{var view=HEAP32.subarray(value>>>2,value+count*16>>>2)}GLctx.uniform4iv(webglGetUniformLocation(location),view)}function _setTempRet0(val){setTempRet0(val)}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>>2];var date={tm_sec:HEAP32[tm>>>2],tm_min:HEAP32[tm+4>>>2],tm_hour:HEAP32[tm+8>>>2],tm_mday:HEAP32[tm+12>>>2],tm_mon:HEAP32[tm+16>>>2],tm_year:HEAP32[tm+20>>>2],tm_wday:HEAP32[tm+24>>>2],tm_yday:HEAP32[tm+28>>>2],tm_isdst:HEAP32[tm+32>>>2],tm_gmtoff:HEAP32[tm+36>>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value=="number"?value.toString():value||"";while(str.length<digits){str=character[0]+str}return str}function leadingNulls(value,digits){return leadingSomething(value,digits,"0")}function compareByDay(date1,date2){function sgn(value){return value<0?-1:value>0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}else{return"PM"}},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},"%V":function(date){var val=Math.floor((date.tm_yday+7-(date.tm_wday+6)%7)/7);if((date.tm_wday+371-date.tm_yday-2)%7<=2){val++}if(!val){val=52;var dec31=(date.tm_wday+7-date.tm_yday-1)%7;if(dec31==4||dec31==5&&__isLeapYear(date.tm_year%400-1)){val++}}else if(val==53){var jan1=(date.tm_wday+371-date.tm_yday)%7;if(jan1!=4&&(jan1!=3||!__isLeapYear(date.tm_year)))val=1}return leadingNulls(val,2)},"%w":function(date){return date.tm_wday},"%W":function(date){var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},"%y":function(date){return(date.tm_year+1900).toString().substring(2)},"%Y":function(date){return date.tm_year+1900},"%z":function(date){var off=date.tm_gmtoff;var ahead=off>=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};pattern=pattern.replace(/%%/g,"\0\0");for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}pattern=pattern.replace(/\0\0/g,"%");var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,format,tm)}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_embind();init_RegisteredPointer();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();var GLctx;var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i+1)}var __miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<288;++i){__miniTempWebGLIntBuffers[i]=__miniTempWebGLIntBuffersStorage.subarray(0,i+1)}function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmLibraryArg={"g":___assert_fail,"a":___cxa_allocate_exception,"b":___cxa_throw,"U":___syscall_chmod,"V":___syscall_faccessat,"n":___syscall_fcntl64,"O":___syscall_fstat64,"W":___syscall_ioctl,"L":___syscall_lstat64,"I":___syscall_mkdirat,"M":___syscall_newfstatat,"s":___syscall_openat,"G":___syscall_rmdir,"N":___syscall_stat64,"E":___syscall_unlinkat,"A":__embind_register_bigint,"Y":__embind_register_bool,"e":__embind_register_class,"d":__embind_register_class_class_function,"f":__embind_register_class_constructor,"c":__embind_register_class_function,"X":__embind_register_emval,"ka":__embind_register_enum,"ja":__embind_register_enum_value,"v":__embind_register_float,"i":__embind_register_integer,"h":__embind_register_memory_view,"u":__embind_register_std_string,"o":__embind_register_std_wstring,"Z":__embind_register_void,"R":__emscripten_date_now,"Q":__emscripten_get_now_is_monotonic,"k":__emval_as,"na":__emval_call_method,"x":__emval_decref,"oa":__emval_get_global,"ma":__emval_get_method_caller,"q":__emval_get_property,"y":__emval_incref,"la":__emval_new_cstring,"pa":__emval_run_destructors,"p":__emval_set_property,"j":__emval_take_value,"w":__emval_typeof,"S":__localtime_js,"H":__munmap_js,"T":__tzset_js,"r":_abort,"F":_emscripten_get_heap_max,"P":_emscripten_memcpy_big,"D":_emscripten_resize_heap,"J":_environ_get,"K":_environ_sizes_get,"ha":_exit,"m":_fd_close,"t":_fd_read,"z":_fd_seek,"l":_fd_write,"ia":_gethostbyname,"ga":_glGetUniformLocation,"ea":_glUniform1f,"fa":_glUniform1i,"aa":_glUniform2fv,"da":_glUniform2iv,"$":_glUniform3fv,"ca":_glUniform3iv,"_":_glUniform4fv,"ba":_glUniform4iv,"B":_setTempRet0,"C":_strftime_l};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["ra"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["sa"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["ta"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["ua"]).apply(null,arguments)};var ___getTypeName=Module["___getTypeName"]=function(){return(___getTypeName=Module["___getTypeName"]=Module["asm"]["va"]).apply(null,arguments)};var ___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=function(){return(___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=Module["asm"]["wa"]).apply(null,arguments)};var _htons=Module["_htons"]=function(){return(_htons=Module["_htons"]=Module["asm"]["ya"]).apply(null,arguments)};var _emscripten_builtin_memalign=Module["_emscripten_builtin_memalign"]=function(){return(_emscripten_builtin_memalign=Module["_emscripten_builtin_memalign"]=Module["asm"]["za"]).apply(null,arguments)};var ___cxa_is_pointer_type=Module["___cxa_is_pointer_type"]=function(){return(___cxa_is_pointer_type=Module["___cxa_is_pointer_type"]=Module["asm"]["Aa"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["Ba"]).apply(null,arguments)};var dynCall_viijii=Module["dynCall_viijii"]=function(){return(dynCall_viijii=Module["dynCall_viijii"]=Module["asm"]["Ca"]).apply(null,arguments)};var dynCall_iiiiij=Module["dynCall_iiiiij"]=function(){return(dynCall_iiiiij=Module["dynCall_iiiiij"]=Module["asm"]["Da"]).apply(null,arguments)};var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=function(){return(dynCall_iiiiijj=Module["dynCall_iiiiijj"]=Module["asm"]["Ea"]).apply(null,arguments)};var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=function(){return(dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=Module["asm"]["Fa"]).apply(null,arguments)};var dynCall_viiiiji=Module["dynCall_viiiiji"]=function(){return(dynCall_viiiiji=Module["dynCall_viiiiji"]=Module["asm"]["Ga"]).apply(null,arguments)};Module["FS"]=FS;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){EXITSTATUS=status;procExit(status)}function procExit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run(); 10 + 11 + 12 + return Module.ready 13 + } 14 + ); 15 + })(); 16 + export default Module;
+41
tools/renderer-step/build/opencascade.yml
··· 1 + mainBuild: 2 + name: opencascade.js 3 + bindings: 4 + - symbol: STEPCAFControl_Reader 5 + - symbol: STEPControl_Reader 6 + - symbol: IFSelect_ReturnStatus 7 + - symbol: TCollection_ExtendedString 8 + - symbol: TCollection_AsciiString 9 + - symbol: TDocStd_Document 10 + - symbol: Handle_TDocStd_Document 11 + - symbol: Message_ProgressRange 12 + - symbol: XCAFDoc_DocumentTool 13 + - symbol: XCAFDoc_ShapeTool 14 + - symbol: Handle_XCAFDoc_ShapeTool 15 + - symbol: TDF_LabelSequence 16 + - symbol: TDF_Label 17 + - symbol: TopoDS_Shape 18 + - symbol: BRepTools 19 + - symbol: BRepMesh_IncrementalMesh 20 + - symbol: BRepMesh_DiscretRoot 21 + - symbol: RWGltf_CafWriter 22 + - symbol: TColStd_IndexedDataMapOfStringString 23 + - symbol: CDM_Document 24 + - symbol: Standard_Transient 25 + - symbol: TDataStd_GenericEmpty 26 + - symbol: TDF_Attribute 27 + - symbol: NCollection_BaseSequence 28 + - symbol: NCollection_BaseMap 29 + - symbol: BRep_Builder 30 + emccFlags: 31 + - -O3 32 + - -sEXPORT_ES6=1 33 + - -sUSE_ES6_IMPORT_META=0 34 + - -sEXPORTED_RUNTIME_METHODS=['FS'] 35 + - -sINITIAL_MEMORY=100MB 36 + - -sMAXIMUM_MEMORY=4GB 37 + - -sALLOW_MEMORY_GROWTH=1 38 + - -sUSE_FREETYPE=1 39 + - -sLLD_REPORT_UNDEFINED 40 + - --no-entry 41 + - -sENVIRONMENT='web,worker'