$(dir.api)/post-js-header.js \
$(sqlite3-api.js) \
$(dir.api)/post-js-footer.js
-
$(post-js.js): $(post-jses) $(MAKEFILE)
@echo "Making $@..."
@for i in $(post-jses); do \
cat $$i; \
echo "/* END FILE: $$i */"; \
done > $@
-
+extern-post-js.js := $(dir.api)/extern-post-js.js
+sqlite3.js.flags.--post-js := --post-js=$(post-js.js) --extern-post-js=$(extern-post-js.js)
+post-jses.deps := $(post-js.js) $(extern-post-js.js)
########################################################################
# emcc flags for .c/.o/.wasm/.js.
# ^^^^ 64MB is not enough for WASMFS/OPFS test runs using batch-runner.js
emcc.jsflags += $(emcc.environment)
#emcc.jsflags += -sTOTAL_STACK=4194304
-emcc.jsflags += -sEXPORT_NAME=sqlite3InitModule
+
+sqlite3.js.init-func := sqlite3InitModule
+# ^^^^ $(sqlite3.js.init-func) symbol name is hard-coded in $(extern-post-js.js)
+
+emcc.jsflags += -sEXPORT_NAME=$(sqlite3.js.init-func)
emcc.jsflags += -sGLOBAL_BASE=4096 # HYPOTHETICALLY keep func table indexes from overlapping w/ heap addr.
-emcc.jsflags += --post-js=$(post-js.js)
#emcc.jsflags += -sSTRICT # fails due to missing __syscall_...()
#emcc.jsflags += -sALLOW_UNIMPLEMENTED_SYSCALLS
#emcc.jsflags += -sFILESYSTEM=0 # only for experimentation. sqlite3 needs the FS API
# code get confused and cannot load property (namely, the
# sqlite3.worker.js generated in conjunction with -sWASMFS).
sqlite3.js := sqlite3.js
+emcc.jsflags += $(sqlite3.js.flags.--post-js)
sqlite3.wasm := sqlite3.wasm
sqlite3-wasm.o := $(dir.api)/sqlite3-wasm.o
$(sqlite3-wasm.o): emcc.cflags += $(SQLITE_OPT)
$(foreach c,$(sqlite3-wasm.c) $(jaccwabyt_test.c),$(eval $(call WASM_C_COMPILE,$(c))))
$(sqlite3.js): $(MAKEFILE) $(sqlite3.wasm.obj) \
EXPORTED_FUNCTIONS.api \
- $(post-js.js)
+ $(post-jses.deps)
@echo "Building $@ ..."
- $(emcc.bin) -o $(sqlite3.js) $(emcc_opt) $(emcc.flags) $(emcc.jsflags) $(sqlite3.wasm.obj)
+ $(emcc.bin) -o $@ $(emcc_opt) $(emcc.flags) $(emcc.jsflags) $(sqlite3.wasm.obj)
chmod -x $(sqlite3.wasm)
$(maybe-wasm-strip) $(sqlite3.wasm)
@ls -la $@ $(sqlite3.wasm)
speedtest1-common.eflags += -sALLOW_TABLE_GROWTH
speedtest1-common.eflags += -sDYNAMIC_EXECUTION=0
speedtest1-common.eflags += --minify 0
-speedtest1-common.eflags += -sEXPORT_NAME=sqlite3Speedtest1InitModule
-speedtest1-common.eflags += --post-js=$(post-js.js)
+speedtest1-common.eflags += -sEXPORT_NAME=$(sqlite3.js.init-func)
+speedtest1-common.eflags += $(sqlite3.js.flags.--post-js)
speedtest1-common.eflags += -sWASM_BIGINT=$(emcc_enable_bigint)
speedtest1.exit-runtime0 := -sEXIT_RUNTIME=0
speedtest1.exit-runtime1 := -sEXIT_RUNTIME=1
# the latter (predictably) results in a slightly faster binary, but we're
# close enough to the target speed requirements that the 500ms makes a
# difference.
-$(speedtest1.js): $(MAKEFILE) $(speedtest1.cs) $(post-js.js) \
+$(speedtest1.js): $(MAKEFILE) $(speedtest1.cs) $(post-jses.deps) \
EXPORTED_FUNCTIONS.speedtest1
@echo "Building $@ ..."
$(emcc.bin) \
--- /dev/null
+/* emscripten-js-addenda.js must be appended to the resulting sqlite3.js
+ file. */
+(function(){
+ /**
+ In order to hide the sqlite3InitModule()'s resulting Emscripten
+ module from downstream clients (and simplify our documentation by
+ being able to elide those details), we rewrite
+ sqlite3InitModule() to return the sqlite3 object.
+
+ Unfortunately, we cannot modify the module-loader/exporter-based
+ impls which Emscripten installs at some point in the file above
+ this.
+ */
+ const originalInit = self.sqlite3InitModule;
+ if(!originalInit){
+ throw new Error("Expecting self.sqlite3InitModule to be defined by the Emscripten build.");
+ }
+ self.sqlite3InitModule.ready = originalInit.ready;
+ self.sqlite3InitModule = (...args)=>{
+ //console.warn("Using replaced sqlite3InitModule()",self.location);
+ return originalInit(...args).then((EmscriptenModule)=>{
+ if(self.window!==self &&
+ (EmscriptenModule['ENVIRONMENT_IS_PTHREAD']
+ || EmscriptenModule['_pthread_self']
+ || 'function'===typeof threadAlert
+ || self.location.pathname.endsWith('.worker.js')
+ )){
+ /** Workaround for wasmfs-generated worker, which calls this
+ routine from each individual thread and requires that its
+ argument be returned. All of the criteria above are fragile,
+ based solely on inspection of the offending code, not public
+ Emscripten details. */
+ return EmscriptenModule;
+ }
+ const f = EmscriptenModule.sqlite3.asyncPostInit;
+ delete EmscriptenModule.sqlite3.asyncPostInit;
+ return f();
+ });
+ };
+ //console.warn("Replaced sqlite3InitModule()");
+})();
Bug: if called while a prior call is still resolving, the 2nd
call will resolve prematurely, before the 1st call has finished
resolving.
+
+ In Emscripten-based builds, this function is called
+ automatically and deleted from this object.
*/
asyncPostInit: async function(){
let lip = sqlite3ApiBootstrap.initializersAsync;
}/*run()*/
}/*App*/;
- self.sqlite3TestModule.initSqlite3().then(function(theEmccModule){
- self._MODULE = theEmccModule /* this is only to facilitate testing from the console */;
- sqlite3 = theEmccModule.sqlite3;
- console.log("App",App);
- self.App = App;
- App.run(theEmccModule.sqlite3);
+ self.sqlite3TestModule.initSqlite3().then(function(sqlite3){
+ self.App = App /* only to facilitate dev console access */;
+ App.run(sqlite3);
});
})();
object, calls it sqlite3InitModule(), and removes
self.sqlite3ApiConfig after initialization is done. Returns the
promise from sqlite3InitModule(), and the next then() handler
- will get the Emscripten module object as its argument. That
- module has the sqlite3's main namespace object installed as its
- `sqlite3` property.
+ will get the sqlite3 API object as its argument.
*/
initSqlite3: function(){
self.sqlite3ApiConfig = this.sqlite3ApiConfig;
// like so...
print: log,
printErr: error
- }).then(function(EmscriptenModule){
- //console.log('EmscriptenModule.sqlite3 =',EmscriptenModule.sqlite3);
+ }).then(function(sqlite3){
+ //console.log('sqlite3 =',sqlite3);
log("Done initializing. Running demo...");
try {
- demo1(EmscriptenModule.sqlite3);
+ demo1(sqlite3);
}catch(e){
error("Exception:",e.message);
}
logHtml('error',...args);
};
- const runTests = function(Module){
- //log("Module",Module);
- const sqlite3 = Module.sqlite3,
- capi = sqlite3.capi,
+ const runTests = function(sqlite3){
+ const capi = sqlite3.capi,
oo = sqlite3.oo1,
wasm = capi.wasm;
log("Loaded module:",capi.sqlite3_libversion(), capi.sqlite3_sourceid());
}
};
- sqlite3InitModule(self.sqlite3TestModule).then(function(theModule){
- console.warn("Installing Emscripten module as global EM for dev console access.");
- self.EM = theModule;
- runTests(theModule);
+ sqlite3InitModule(self.sqlite3TestModule).then((sqlite3)=>{
+ runTests(sqlite3);
});
})();
});
};
- const runTests = function(Module){
- //stdout("Module",Module);
- self._MODULE = Module /* this is only to facilitate testing from the console */;
- const sqlite3 = Module.sqlite3,
- capi = sqlite3.capi,
+ const runTests = function(sqlite3){
+ const capi = sqlite3.capi,
oo = sqlite3.oo1,
wasm = capi.wasm;
stdout("Loaded sqlite3:",capi.sqlite3_libversion(), capi.sqlite3_sourceid());
].forEach((f)=>{
const n = performance.now();
stdout(banner1,"Running",f.name+"()...");
- f(db, sqlite3, Module);
+ f(db, sqlite3);
stdout(banner2,f.name+"() took ",(performance.now() - n),"ms");
});
}finally{
self.sqlite3TestModule.print = log;
self.sqlite3TestModule.printErr = logErr;
- sqlite3Speedtest1InitModule(self.sqlite3TestModule).then(function(M){
- runTests(M.sqlite3);
- });
+ sqlite3InitModule(self.sqlite3TestModule).then(runTests);
})();</script>
</body>
</html>
printErr: logErr,
setStatus: (text)=>mPost('load-status',text)
};
- self.sqlite3Speedtest1InitModule(EmscriptenModule).then(function(EModule){
- log("Module inited.");
- return EModule.sqlite3.asyncPostInit()
- .then((sqlite3)=>{
- const S = sqlite3;
- const vfsUnlink = S.capi.wasm.xWrap("sqlite3_wasm_vfs_unlink", "int", ["string"]);
- App.unlink = function(fname){
- vfsUnlink(fname);
- if(S.opfs) S.opfs.deleteEntry(fname);
- };
- App.pDir = wasmfsDir(S.wasm);
- App.wasm = S.capi.wasm;
- //if(App.pDir) log("Persistent storage:",pDir);
- //else log("Using transient storage.");
- mPost('ready',true);
- log("Registered VFSes:", ...S.capi.sqlite3_web_vfs_list());
- });
+ self.sqlite3InitModule(EmscriptenModule).then((sqlite3)=>{
+ const S = sqlite3;
+ const vfsUnlink = S.capi.wasm.xWrap("sqlite3_wasm_vfs_unlink", "int", ["string"]);
+ App.unlink = function(fname){
+ vfsUnlink(fname);
+ if(S.opfs) S.opfs.deleteEntry(fname);
+ };
+ App.pDir = wasmfsDir(S.wasm);
+ App.wasm = S.capi.wasm;
+ //if(App.pDir) log("Persistent storage:",pDir);
+ //else log("Using transient storage.");
+ mPost('ready',true);
+ log("Registered VFSes:", ...S.capi.sqlite3_web_vfs_list());
});
})();
self.sqlite3TestModule.print = log;
self.sqlite3TestModule.printErr = logErr;
- sqlite3Speedtest1InitModule(self.sqlite3TestModule)
- .then((EmscriptenModule)=>{
- return EmscriptenModule.sqlite3.installOpfsVfs()
- .catch((e)=>{console.warn(e.message)})
- .then(()=>runTests(EmscriptenModule.sqlite3));
- });
+ sqlite3InitModule(self.sqlite3TestModule).then(runTests);
})();</script>
</body>
</html>
*/
"use strict";
importScripts('sqlite3.js');
-sqlite3InitModule().then((EmscriptenModule)=>{
- EmscriptenModule.sqlite3.asyncPostInit().then((sqlite3)=>{
- sqlite3.capi.sqlite3_wasmfs_opfs_dir();
- sqlite3.initWorker1API();
- });
+sqlite3InitModule().then((sqlite3)=>{
+ sqlite3.capi.sqlite3_wasmfs_opfs_dir();
+ sqlite3.initWorker1API();
});
const log = (...args)=>console.log(logPrefix,...args);
const warn = (...args)=>console.warn(logPrefix,...args);
const error = (...args)=>console.error(logPrefix,...args);
+ const opfs = sqlite3.opfs;
log("tryOpfsVfs()");
+ if(!sqlite3.opfs){
+ const e = toss("OPFS is not available.");
+ error(e);
+ throw e;
+ }
const capi = sqlite3.capi;
const pVfs = capi.sqlite3_vfs_find("opfs") || toss("Missing 'opfs' VFS.");
const oVfs = capi.sqlite3_vfs.instanceForPointer(pVfs) || toss("Unexpected instanceForPointer() result.");;
const dbFile = "my-persistent.db";
if(urlArgs.has('delete')) sqlite3.opfs.deleteEntry(dbFile);
- const opfs = sqlite3.opfs;
const db = new opfs.OpfsDb(dbFile);
log("db file:",db.filename);
try{
importScripts('sqlite3.js');
self.sqlite3InitModule()
- .then((EmscriptenModule)=>EmscriptenModule.sqlite3.asyncPostInit())
.then((sqlite3)=>tryOpfsVfs(sqlite3))
.catch((e)=>{
console.error("Error initializing module:",e);
return v1>=(v2-factor) && v1<=(v2+factor);
};
- let sqlite3;
+ let sqlite3 /* loaded later */;
const testBasicSanity = function(db,sqlite3){
const capi = sqlite3.capi;
T.mustThrow(()=>db.exec("select * from foo.bar"));
};
- const testIntPtr = function(db,S,Module){
+ const testIntPtr = function(db,S){
const w = S.capi.wasm;
const stack = w.scopedAllocPush();
let ptrInt;
n,"entries totaling approximately",sz,"bytes.");
};
- const runTests = function(Module){
- //log("Module",Module);
- sqlite3 = Module.sqlite3;
+ const runTests = function(_sqlite3){
+ sqlite3 = _sqlite3;
const capi = sqlite3.capi,
oo = sqlite3.oo1,
wasm = capi.wasm;
].forEach((f)=>{
const t = T.counter, n = performance.now();
logHtml(banner1,"Running",f.name+"()...");
- f(db, sqlite3, Module);
+ f(db, sqlite3);
logHtml(banner2,f.name+"():",T.counter - t,'tests in',(performance.now() - n),"ms");
});
}finally{
log('capi.wasm.exports',capi.wasm.exports);
};
- self.sqlite3TestModule.initSqlite3().then(function(theModule){
- self._MODULE = theModule /* this is only to facilitate testing from the console */
- runTests(theModule);
+ self.sqlite3TestModule.initSqlite3().then((S)=>{
+ runTests(S);
});
})();
sqlite3-wasmfs.jsflags += -sIMPORTED_MEMORY
#sqlite3-wasmfs.jsflags += -sINITIAL_MEMORY=13107200
#sqlite3-wasmfs.jsflags += -sTOTAL_STACK=4194304
-sqlite3-wasmfs.jsflags += -sEXPORT_NAME=sqlite3InitModule
+sqlite3-wasmfs.jsflags += -sEXPORT_NAME=$(sqlite3.js.init-func)
sqlite3-wasmfs.jsflags += -sGLOBAL_BASE=4096 # HYPOTHETICALLY keep func table indexes from overlapping w/ heap addr.
-sqlite3-wasmfs.jsflags += --post-js=$(post-js.js)
+sqlite3-wasmfs.jsflags += $(sqlite3.js.flags.--post-js)
#sqlite3-wasmfs.jsflags += -sFILESYSTEM=0 # only for experimentation. sqlite3 needs the FS API
# Perhaps the wasmfs build doesn't?
#sqlite3-wasmfs.jsflags += -sABORTING_MALLOC
$(sqlite3-wasmfs.js): $(sqlite3-wasmfs.wasm.c) $(sqlite3-wasm.c) $(sqlite3-wasmfs.extra.c) \
EXPORTED_FUNCTIONS.api $(sqlite3-wasm.js) $(MAKEFILE) $(MAKEFILE.wasmfs) \
- $(post-js.js)
+ $(post-jses.deps)
@echo "Building $@ ..."
$(emcc.bin) -o $@ $(emcc_opt) $(emcc.flags) \
$(sqlite3-wasmfs.cflags) $(sqlite3-wasmfs.jsflags) $(sqlite3-wasmfs.wasm.c) $(sqlite3-wasmfs.extra.c)
-C Wasm:\sexpose\ssqlite3_exec()\sand\suse\sit\sto\ssimplify\sthe\sdb-reset\slogic\sin\sbatch-runner.js\sa\sbit.
-D 2022-09-28T18:10:50.148
+C Rework\sthe\sEmscripten-emitted\smodule\sloader/init\sfunction\ssuch\sthat\sit\spasses\son\sthe\ssqlite3\smodule,\sinstead\sof\sthe\sEmscripten\smodule,\sto\sthe\sfirst\sthen()\sof\ssqlite3InitModule()'s\sreturned\sPromise.\sThis\seliminates\sany\sneed\sto\smention\sthe\sEmscripten\smodule\sobject\sin\sclient-side\scode\sunless\sthey\swant\sto\sconfigure\sit\sin\sadvance\sfor\sloading-status\sreports.
+D 2022-09-29T13:17:50.536
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
F ext/userauth/userauth.c 7f00cded7dcaa5d47f54539b290a43d2e59f4b1eb5f447545fa865f002fc80cb
F ext/wasm/EXPORTED_FUNCTIONS.fiddle.in 27450c8b8c70875a260aca55435ec927068b34cef801a96205adb81bdcefc65c
F ext/wasm/EXPORTED_RUNTIME_METHODS.fiddle 0e88c8cfc3719e4b7e74980d9da664c709e68acf863e48386cda376edfd3bfb0
-F ext/wasm/GNUmakefile 86ee7562063275779b108957db5bc7fdb18df4f6c506abbe28132b4fb071988e
+F ext/wasm/GNUmakefile 7cf6c4346edd6656d5b9f258049ca56af7d7b8b10da3d21edcc3717015bc6511
F ext/wasm/README.md e1ee1e7c321c6a250bf78a84ca6f5882890a237a450ba5a0649c7a8399194c52
F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-api 77a5ee8bd209b5e75dd0e822bc3f6e7319dc9b36431463d4175c775170f92126
F ext/wasm/api/EXPORTED_RUNTIME_METHODS.sqlite3-api 1ec3c73e7d66e95529c3c64ac3de2470b0e9e7fbf7a5b41261c367cf4f1b7287
F ext/wasm/api/README.md f54102d74cfde01ebe242fa1411e126a9cda8f19b3ac378afd1103b21abfad05
+F ext/wasm/api/extern-post-js.js d29d5f615c887b356ff80a77a09a346339644c66d4fea79230d8378e2e2f4914
F ext/wasm/api/post-js-footer.js b64319261d920211b8700004d08b956a6c285f3b0bba81456260a713ed04900c
F ext/wasm/api/post-js-header.js 2e5c886398013ba2af88028ecbced1e4b22dc96a86467f1ecc5ba9e64ef90a8b
F ext/wasm/api/sqlite3-api-cleanup.js 4bd28e61216690b12d6f77bfce71b011995c29496397cfa77e08198eb8d19aeb
F ext/wasm/api/sqlite3-api-glue.js 3b164f0ef690a838da8613a2aaec4fc49d29ad5e8fe39c8cdc0f5281f08f9d0b
F ext/wasm/api/sqlite3-api-oo1.js 97a786b366fcac442e1557c3eedef3afa96877411bd6239094d4db5fd5b3c353
F ext/wasm/api/sqlite3-api-opfs.js af65e056b9f5bc6182499f7e7767e3d01abc3772a62c8abbcc04e4c7bb0affc6
-F ext/wasm/api/sqlite3-api-prologue.js ed850804d5cd7a976717e524d719b1f9743405226a879a5170f259dbee31d13c
+F ext/wasm/api/sqlite3-api-prologue.js 47245a1bb279f54c7c1d6b32f13222536ce0196ced9c2bda2d12a0b4ef8c136d
F ext/wasm/api/sqlite3-api-worker1.js d5d5b7fac4c4731c38c7e03f4f404b2a95c388a2a1d8bcf361caada572f107e0
F ext/wasm/api/sqlite3-wasi.h 25356084cfe0d40458a902afb465df8c21fc4152c1d0a59b563a3fba59a068f9
F ext/wasm/api/sqlite3-wasm.c b756b9c1fee9d0598f715e6df6bf089b750da24aa91bb7ef9277a037d81e7612
F ext/wasm/batch-runner.html c363032aba7a525920f61f8be112a29459f73f07e46f0ba3b7730081a617826e
-F ext/wasm/batch-runner.js 0d5517be51290098bf4a92754e25c552b7c1dc73bb3f2e2b18f16b1008df060f
-F ext/wasm/common/SqliteTestUtil.js c997c12188c97109f344701a58dd627b9c0f98f32cc6a88413f6171f2191531c
+F ext/wasm/batch-runner.js a94dd0005b34cb4e654a799fbe6357a66070510bbbe5d116cf1a8d4f9901bd80
+F ext/wasm/common/SqliteTestUtil.js 647bf014bd30bdd870a7e9001e251d12fc1c9ec9ce176a1004b838a4b33c5c05
F ext/wasm/common/emscripten.css 3d253a6fdb8983a2ac983855bfbdd4b6fa1ff267c28d69513dd6ef1f289ada3f
F ext/wasm/common/testing.css 3a5143699c2b73a85b962271e1a9b3241b30d90e30d895e4f55665e648572962
F ext/wasm/common/whwasmutil.js 20291bbf4955358d0b5ead58db4c575be269b4976e39c43a93331547e3b86363
F ext/wasm/demo-123-worker.html e419b66495d209b5211ec64903b4cfb3ca7df20d652b41fcd28bf018a773234f
F ext/wasm/demo-123.html aa281d33b7eefa755f3122b7b5a18f39a42dc5fb69c8879171bf14b4c37c4ec4
-F ext/wasm/demo-123.js d8490189cd2f7a47940d42174fe562d8b6a5cbab521eec4c602dead055b12414
+F ext/wasm/demo-123.js 35de7c544b9190759fcbf4ca125a674d3f6db03614b9a2175efaa1fbf363ef6f
F ext/wasm/demo-kvvfs1.html 7d4f28873de67f51ac18c584b7d920825139866a96049a49c424d6f5a0ea5e7f
-F ext/wasm/demo-kvvfs1.js e884ea35022d772c0d1dd884b40011413696438394f605c6cd4808cfb1642a4a
+F ext/wasm/demo-kvvfs1.js d1126c3b08099dc1279f353b298ee90f6d374ab6ca2b4cf412031fc992e51d35
F ext/wasm/fiddle.make fd56fa21bada6ecbf860686a9a789ebda7cc3d9b60835927000fcb00246ea50f
F ext/wasm/fiddle/emscripten.css 3d253a6fdb8983a2ac983855bfbdd4b6fa1ff267c28d69513dd6ef1f289ada3f
F ext/wasm/fiddle/fiddle-worker.js 425b75b1debe1108c10f1373fdd75994a18adbdc0a593e7ff0ecd91cc6498e89
F ext/wasm/jaccwabyt/jaccwabyt_test.c 39e4b865a33548f943e2eb9dd0dc8d619a80de05d5300668e9960fff30d0d36f
F ext/wasm/jaccwabyt/jaccwabyt_test.exports 5ff001ef975c426ffe88d7d8a6e96ec725e568d2c2307c416902059339c06f19
F ext/wasm/scratchpad-wasmfs-main.html 20cf6f1a8f368e70d01e8c17200e3eaa90f1c8e1029186d836d14b83845fbe06
-F ext/wasm/scratchpad-wasmfs-main.js e713a3da53da9194a1cc35d060f0ee5cb0abe907dcbc864d3d6f76fa6eafedf1
-F ext/wasm/speedtest1-wasmfs.html 852504ccf9d095c8f57d4f4f9cc2f912b3b432e300c6b5ed8d6234a37eeb86a6
+F ext/wasm/scratchpad-wasmfs-main.js 1aa32c1035cf1440a226a28fefcbb5762fbbcb020ccbe5895f8736d701695c63
+F ext/wasm/speedtest1-wasmfs.html bc28eb29b69a73864b8d7aae428448f8b7e1de81d8bfb9bba99541322054dbd0
F ext/wasm/speedtest1-worker.html 3780a29a6d0467dde34b61bf50a1b2e1a12a4e8498f4835b1293e79a3edcd675
-F ext/wasm/speedtest1-worker.js 65f50314cc56ebc03f7b5ea774e7d8386600e8a6f27cca02cb05e7e2eb7a0153
-F ext/wasm/speedtest1.html 4f4e26b634bb3288f2cad8cf4d458076b33d8bd0f3fd56e089a17bed32df6287
+F ext/wasm/speedtest1-worker.js a9e3d052dd1d8016d6e9a641e596e6d99aec04ef8995d7ee9a85a9964eed771a
+F ext/wasm/speedtest1.html e4cb5d722b494104fc1249e7c008ca018f820a784833c51004c958c71038c80f
F ext/wasm/split-speedtest1-script.sh a3e271938d4d14ee49105eb05567c6a69ba4c1f1293583ad5af0cd3a3779e205 x
F ext/wasm/sql/000-mandelbrot.sql 775337a4b80938ac8146aedf88808282f04d02d983d82675bd63d9c2d97a15f0
F ext/wasm/sql/001-sudoku.sql 35b7cb7239ba5d5f193bc05ec379bcf66891bce6f2a5b3879f2f78d0917299b5
F ext/wasm/sqlite3-opfs-async-proxy.js fe4b8268eea9acaec633ebd1dd3f85dae7c461c5c68985ab1075d9560b1db8e8
F ext/wasm/sqlite3-worker1-promiser.js cca2b853692e4715b4761c46678f96d80819d4756de557922a815149fb93397e
-F ext/wasm/sqlite3-worker1.js b941db258fd26ae2c7398b640c1ca8d5abac8ec77e54ba5b9526af2297409626
+F ext/wasm/sqlite3-worker1.js 5266ebc4d709fe23d2d076ae44e6085fbc32b82f26ef514b947312f36b1206a9
F ext/wasm/test-opfs-vfs.html eb69dda21eb414b8f5e3f7c1cc0f774103cc9c0f87b2d28a33419e778abfbab5
-F ext/wasm/test-opfs-vfs.js ba4c20085000b9f6195f62cf3abeeb0ae4703c3b34bc654afa806014a4f09e96
+F ext/wasm/test-opfs-vfs.js a59ff9210b17d46b0c6fbf6a0ba60143c033327865f2e556e14f06280cef62ac
F ext/wasm/testing-worker1-promiser.html 6eaec6e04a56cf24cf4fa8ef49d78ce8905dde1354235c9125dca6885f7ce893
F ext/wasm/testing-worker1-promiser.js ee1ac4950720c07541e791b7f35bdf420e8ab81a74049cc65394371b0c53c480
F ext/wasm/testing1.html 50575755e43232dbe4c2f97c9086b3118eb91ec2ee1fae931e6d7669fb17fcae
-F ext/wasm/testing1.js 20b37766d29815180e2e932bfc6132b649403ece1f1bf612a4712db131287970
+F ext/wasm/testing1.js 06b9a439ada636c5478c581c86b2b968f799e0468eae54dc5a4565dfd7afbb88
F ext/wasm/testing2.html a66951c38137ff1d687df79466351f3c734fa9c6d9cce71d3cf97c291b2167e3
F ext/wasm/testing2.js 34737da985c4cbd4812b2e7f200942662cae991c5a58ffa5d0350be089d0d410
-F ext/wasm/wasmfs.make fb4d0b4a6596ec2ed7815508a43b77bd7d14d3910ac387eb795643e33f5a3652
+F ext/wasm/wasmfs.make d53146b062386b01f7b0b0d498335b33c11548cf3d1706cff472d6cbd42a9c95
F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
F magic.txt 8273bf49ba3b0c8559cb2774495390c31fd61c60
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 3bd1bc240676e56da87fc49f3c67a1edc4fafcf2a2416298d19ae4f80b676a72
-R d0708515df8e5293032059e504723b7d
+P 2e2821f782511b9d2274a89a5a922582aba18c7e9dc7ce01080e713942a56d7d
+R 4702b024c44aa8b0e10da8a3cb6edeca
U stephan
-Z 774d17030f6b3ac9dea357109e6b49c9
+Z 43dbf13bcecc8e2f4da632a6ad6ef70c
# Remove this line to create a well-formed Fossil manifest.
-2e2821f782511b9d2274a89a5a922582aba18c7e9dc7ce01080e713942a56d7d
\ No newline at end of file
+0dbaa0e2b5abf5c23e2039ec90a3055ebb3c063aaf4e556c42546defe6fbb86d
\ No newline at end of file