From 9597e29ac273c77d7f953e3d8838b591f140af28 Mon Sep 17 00:00:00 2001 From: Zilin Chen Date: Wed, 24 Jun 2026 20:39:57 +0800 Subject: [PATCH 1/2] [spec] partly revert #2162: start --- .../wasm-3.0/2.4-validation.modules.spectec | 8 ++++---- .../2.4-validation.modules.spectec | 8 ++++---- spectec/doc/example/output/NanoWasm.html | 4 ++-- spectec/doc/example/output/NanoWasm.pdf | Bin 245087 -> 245096 bytes spectec/test-frontend/TEST.md | 6 +++--- spectec/test-latex/TEST.md | 8 ++++---- spectec/test-middlend/TEST.md | 18 +++++++++--------- spectec/test-prose/TEST.md | 14 +++++++------- 8 files changed, 33 insertions(+), 33 deletions(-) diff --git a/specification/wasm-3.0/2.4-validation.modules.spectec b/specification/wasm-3.0/2.4-validation.modules.spectec index 2f758642a7..51fcc8d0e3 100644 --- a/specification/wasm-3.0/2.4-validation.modules.spectec +++ b/specification/wasm-3.0/2.4-validation.modules.spectec @@ -138,10 +138,10 @@ relation Types_ok: context |- type* : deftype* hint(name "T-types") hin relation Globals_ok: context |- global* : globaltype* hint(name "T-globals") hint(macro "%globals") ;; HACK for notation -syntax nonfuncs = global* mem* table* elem* start? export* +syntax nonfuncs = global* mem* table* elem* export* def $funcidx_nonfuncs(nonfuncs) : funcidx* hint(show $funcidx(%)) hint(macro "freefuncidx") -def $funcidx_nonfuncs(global* mem* table* elem* start? export*) = - $funcidx_module(MODULE eps eps eps global* mem* table* eps eps elem* start? export*) +def $funcidx_nonfuncs(global* mem* table* elem* export*) = + $funcidx_module(MODULE eps eps eps global* mem* table* eps eps elem* eps export*) rule Module_ok: |- MODULE type* import* tag* global* mem* table* func* data* elem* start? export* : $clos_moduletype(C, xt_I* -> xt_E*) @@ -163,7 +163,7 @@ rule Module_ok: -- if C = C' ++ {TAGS jt_I* jt*, GLOBALS gt*, MEMS mt_I* mt*, TABLES tt_I* tt*, DATAS ok*, ELEMS rt*} ---- -- if C' = {TYPES dt'*, GLOBALS gt_I*, FUNCS dt_I* dt*, REFS x*} - -- if x* = $funcidx_nonfuncs(global* mem* table* elem* start? export*) + -- if x* = $funcidx_nonfuncs(global* mem* table* elem* export*) ---- -- if jt_I* = $tagsxt(xt_I*) -- if gt_I* = $globalsxt(xt_I*) diff --git a/specification/wasm-latest/2.4-validation.modules.spectec b/specification/wasm-latest/2.4-validation.modules.spectec index 2f758642a7..51fcc8d0e3 100644 --- a/specification/wasm-latest/2.4-validation.modules.spectec +++ b/specification/wasm-latest/2.4-validation.modules.spectec @@ -138,10 +138,10 @@ relation Types_ok: context |- type* : deftype* hint(name "T-types") hin relation Globals_ok: context |- global* : globaltype* hint(name "T-globals") hint(macro "%globals") ;; HACK for notation -syntax nonfuncs = global* mem* table* elem* start? export* +syntax nonfuncs = global* mem* table* elem* export* def $funcidx_nonfuncs(nonfuncs) : funcidx* hint(show $funcidx(%)) hint(macro "freefuncidx") -def $funcidx_nonfuncs(global* mem* table* elem* start? export*) = - $funcidx_module(MODULE eps eps eps global* mem* table* eps eps elem* start? export*) +def $funcidx_nonfuncs(global* mem* table* elem* export*) = + $funcidx_module(MODULE eps eps eps global* mem* table* eps eps elem* eps export*) rule Module_ok: |- MODULE type* import* tag* global* mem* table* func* data* elem* start? export* : $clos_moduletype(C, xt_I* -> xt_E*) @@ -163,7 +163,7 @@ rule Module_ok: -- if C = C' ++ {TAGS jt_I* jt*, GLOBALS gt*, MEMS mt_I* mt*, TABLES tt_I* tt*, DATAS ok*, ELEMS rt*} ---- -- if C' = {TYPES dt'*, GLOBALS gt_I*, FUNCS dt_I* dt*, REFS x*} - -- if x* = $funcidx_nonfuncs(global* mem* table* elem* start? export*) + -- if x* = $funcidx_nonfuncs(global* mem* table* elem* export*) ---- -- if jt_I* = $tagsxt(xt_I*) -- if gt_I* = $globalsxt(xt_I*) diff --git a/spectec/doc/example/output/NanoWasm.html b/spectec/doc/example/output/NanoWasm.html index 87bda0f629..85948ec48a 100644 --- a/spectec/doc/example/output/NanoWasm.html +++ b/spectec/doc/example/output/NanoWasm.html @@ -7,7 +7,7 @@ NanoWasm — NanoWasm documentation - + @@ -378,7 +378,7 @@

Binary FormatSphinx 8.2.3 + Powered by Sphinx 8.1.3 & Alabaster 1.0.0 | diff --git a/spectec/doc/example/output/NanoWasm.pdf b/spectec/doc/example/output/NanoWasm.pdf index c6a7ac653a2ddcb56e9e107a7ac119635d420ed8..a6098b37e9501bd6d2d0967e910ab13ccf668026 100644 GIT binary patch delta 15688 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 diff --git a/spectec/test-frontend/TEST.md b/spectec/test-frontend/TEST.md index b07cb41377..55e860ccc4 100644 --- a/spectec/test-frontend/TEST.md +++ b/spectec/test-frontend/TEST.md @@ -4770,12 +4770,12 @@ relation Types_ok: `%|-%:%`(context, type*, deftype*) ;; ../../../../specification/wasm-latest/2.4-validation.modules.spectec syntax nonfuncs = - | `%%%%%%`(`global*` : global*, `mem*` : mem*, `table*` : table*, `elem*` : elem*, `start?` : start?, `export*` : export*) + | `%%%%%`(`global*` : global*, `mem*` : mem*, `table*` : table*, `elem*` : elem*, `export*` : export*) ;; ../../../../specification/wasm-latest/2.4-validation.modules.spectec def $funcidx_nonfuncs(nonfuncs : nonfuncs) : funcidx* ;; ../../../../specification/wasm-latest/2.4-validation.modules.spectec - def $funcidx_nonfuncs{`global*` : global*, `mem*` : mem*, `table*` : table*, `elem*` : elem*, `start?` : start?, `export*` : export*}(`%%%%%%`_nonfuncs(global*{global <- `global*`}, mem*{mem <- `mem*`}, table*{table <- `table*`}, elem*{elem <- `elem*`}, start?{start <- `start?`}, export*{export <- `export*`})) = $funcidx_module(MODULE_module(`%`_list([],), `%`_list([],), `%`_list([],), `%`_list(global*{global <- `global*`},), `%`_list(mem*{mem <- `mem*`},), `%`_list(table*{table <- `table*`},), `%`_list([],), `%`_list([],), `%`_list(elem*{elem <- `elem*`},), start?{start <- `start?`}, `%`_list(export*{export <- `export*`},))) + def $funcidx_nonfuncs{`global*` : global*, `mem*` : mem*, `table*` : table*, `elem*` : elem*, `export*` : export*}(`%%%%%`_nonfuncs(global*{global <- `global*`}, mem*{mem <- `mem*`}, table*{table <- `table*`}, elem*{elem <- `elem*`}, export*{export <- `export*`})) = $funcidx_module(MODULE_module(`%`_list([],), `%`_list([],), `%`_list([],), `%`_list(global*{global <- `global*`},), `%`_list(mem*{mem <- `mem*`},), `%`_list(table*{table <- `table*`},), `%`_list([],), `%`_list([],), `%`_list(elem*{elem <- `elem*`},), ?(), `%`_list(export*{export <- `export*`},))) ;; ../../../../specification/wasm-latest/2.4-validation.modules.spectec relation Module_ok: `|-%:%`(module, moduletype) @@ -4796,7 +4796,7 @@ relation Module_ok: `|-%:%`(module, moduletype) -- if $disjoint_(syntax name, nm*{nm <- `nm*`}) -- if (C = C' +++ {TYPES [], TAGS jt_I*{jt_I <- `jt_I*`} ++ jt*{jt <- `jt*`}, GLOBALS gt*{gt <- `gt*`}, MEMS mt_I*{mt_I <- `mt_I*`} ++ mt*{mt <- `mt*`}, TABLES tt_I*{tt_I <- `tt_I*`} ++ tt*{tt <- `tt*`}, FUNCS [], DATAS ok*{ok <- `ok*`}, ELEMS rt*{rt <- `rt*`}, LOCALS [], LABELS [], RETURN ?(), REFS [], RECS []}) -- if (C' = {TYPES dt'*{dt' <- `dt'*`}, TAGS [], GLOBALS gt_I*{gt_I <- `gt_I*`}, MEMS [], TABLES [], FUNCS dt_I*{dt_I <- `dt_I*`} ++ dt*{dt <- `dt*`}, DATAS [], ELEMS [], LOCALS [], LABELS [], RETURN ?(), REFS x*{x <- `x*`}, RECS []}) - -- if (x*{x <- `x*`} = $funcidx_nonfuncs(`%%%%%%`_nonfuncs(global*{global <- `global*`}, mem*{mem <- `mem*`}, table*{table <- `table*`}, elem*{elem <- `elem*`}, start?{start <- `start?`}, export*{export <- `export*`}))) + -- if (x*{x <- `x*`} = $funcidx_nonfuncs(`%%%%%`_nonfuncs(global*{global <- `global*`}, mem*{mem <- `mem*`}, table*{table <- `table*`}, elem*{elem <- `elem*`}, export*{export <- `export*`}))) -- if (jt_I*{jt_I <- `jt_I*`} = $tagsxt(xt_I*{xt_I <- `xt_I*`})) -- if (gt_I*{gt_I <- `gt_I*`} = $globalsxt(xt_I*{xt_I <- `xt_I*`})) -- if (mt_I*{mt_I <- `mt_I*`} = $memsxt(xt_I*{xt_I <- `xt_I*`})) diff --git a/spectec/test-latex/TEST.md b/spectec/test-latex/TEST.md index be5440eb04..335cd42374 100644 --- a/spectec/test-latex/TEST.md +++ b/spectec/test-latex/TEST.md @@ -7904,16 +7904,16 @@ $\boxed{{\mathit{context}} \vdash {{\mathit{global}}^\ast} : {{\mathit{globaltyp $$ \begin{array}[t]{@{}lrrl@{}l@{}} -& {\mathit{nonfuncs}} & ::= & {{\mathit{global}}^\ast}~{{\mathit{mem}}^\ast}~{{\mathit{table}}^\ast}~{{\mathit{elem}}^\ast}~{{\mathit{start}}^?}~{{\mathit{export}}^\ast} \\ +& {\mathit{nonfuncs}} & ::= & {{\mathit{global}}^\ast}~{{\mathit{mem}}^\ast}~{{\mathit{table}}^\ast}~{{\mathit{elem}}^\ast}~{{\mathit{export}}^\ast} \\ \end{array} $$ $$ \begin{array}[t]{@{}lcl@{}l@{}} -{\mathrm{funcidx}}({{\mathit{global}}^\ast}~{{\mathit{mem}}^\ast}~{{\mathit{table}}^\ast}~{{\mathit{elem}}^\ast}~{{\mathit{start}}^?}~{{\mathit{export}}^\ast}) & = & & \\ +{\mathrm{funcidx}}({{\mathit{global}}^\ast}~{{\mathit{mem}}^\ast}~{{\mathit{table}}^\ast}~{{\mathit{elem}}^\ast}~{{\mathit{export}}^\ast}) & = & & \\ \multicolumn{4}{@{}l@{}}{\quad \begin{array}[t]{@{}l@{}} -{\mathrm{funcidx}}(\mathsf{module}~\epsilon~\epsilon~\epsilon~{{\mathit{global}}^\ast}~{{\mathit{mem}}^\ast}~{{\mathit{table}}^\ast}~\epsilon~\epsilon~{{\mathit{elem}}^\ast}~{{\mathit{start}}^?}~{{\mathit{export}}^\ast}) \\ +{\mathrm{funcidx}}(\mathsf{module}~\epsilon~\epsilon~\epsilon~{{\mathit{global}}^\ast}~{{\mathit{mem}}^\ast}~{{\mathit{table}}^\ast}~\epsilon~\epsilon~{{\mathit{elem}}^\ast}~\epsilon~{{\mathit{export}}^\ast}) \\ \end{array} } \\ \end{array} @@ -7951,7 +7951,7 @@ C = {C'} \oplus \{ \mathsf{tags}~{{\mathit{jt}}_{\mathsf{i}}^\ast}~{{\mathit{jt} \\ {C'} = \{ \mathsf{types}~{{\mathit{dt}'}^\ast},\;\allowbreak \mathsf{globals}~{{\mathit{gt}}_{\mathsf{i}}^\ast},\;\allowbreak \mathsf{funcs}~{{\mathit{dt}}_{\mathsf{i}}^\ast}~{{\mathit{dt}}^\ast},\;\allowbreak \mathsf{refs}~{x^\ast} \} \qquad -{x^\ast} = {\mathrm{funcidx}}({{\mathit{global}}^\ast}~{{\mathit{mem}}^\ast}~{{\mathit{table}}^\ast}~{{\mathit{elem}}^\ast}~{{\mathit{start}}^?}~{{\mathit{export}}^\ast}) +{x^\ast} = {\mathrm{funcidx}}({{\mathit{global}}^\ast}~{{\mathit{mem}}^\ast}~{{\mathit{table}}^\ast}~{{\mathit{elem}}^\ast}~{{\mathit{export}}^\ast}) \\ {{\mathit{jt}}_{\mathsf{i}}^\ast} = {\mathrm{tags}}({{\mathit{xt}}_{\mathsf{i}}^\ast}) \qquad diff --git a/spectec/test-middlend/TEST.md b/spectec/test-middlend/TEST.md index 44af5b8ccf..c1096068df 100644 --- a/spectec/test-middlend/TEST.md +++ b/spectec/test-middlend/TEST.md @@ -4293,12 +4293,12 @@ relation Types_ok: `%|-%:%`(context, type*, deftype*) ;; ../../../../specification/wasm-latest/2.4-validation.modules.spectec syntax nonfuncs = - | `%%%%%%`(`global*` : global*, `mem*` : mem*, `table*` : table*, `elem*` : elem*, `start?` : start?, `export*` : export*) + | `%%%%%`(`global*` : global*, `mem*` : mem*, `table*` : table*, `elem*` : elem*, `export*` : export*) ;; ../../../../specification/wasm-latest/2.4-validation.modules.spectec def $funcidx_nonfuncs(nonfuncs : nonfuncs) : funcidx* ;; ../../../../specification/wasm-latest/2.4-validation.modules.spectec - def $funcidx_nonfuncs{`global*` : global*, `mem*` : mem*, `table*` : table*, `elem*` : elem*, `start?` : start?, `export*` : export*}(`%%%%%%`_nonfuncs(global*{global <- `global*`}, mem*{mem <- `mem*`}, table*{table <- `table*`}, elem*{elem <- `elem*`}, start?{start <- `start?`}, export*{export <- `export*`})) = $funcidx_module(MODULE_module(`%`_list([],), `%`_list([],), `%`_list([],), `%`_list(global*{global <- `global*`},), `%`_list(mem*{mem <- `mem*`},), `%`_list(table*{table <- `table*`},), `%`_list([],), `%`_list([],), `%`_list(elem*{elem <- `elem*`},), start?{start <- `start?`}, `%`_list(export*{export <- `export*`},))) + def $funcidx_nonfuncs{`global*` : global*, `mem*` : mem*, `table*` : table*, `elem*` : elem*, `export*` : export*}(`%%%%%`_nonfuncs(global*{global <- `global*`}, mem*{mem <- `mem*`}, table*{table <- `table*`}, elem*{elem <- `elem*`}, export*{export <- `export*`})) = $funcidx_module(MODULE_module(`%`_list([],), `%`_list([],), `%`_list([],), `%`_list(global*{global <- `global*`},), `%`_list(mem*{mem <- `mem*`},), `%`_list(table*{table <- `table*`},), `%`_list([],), `%`_list([],), `%`_list(elem*{elem <- `elem*`},), ?(), `%`_list(export*{export <- `export*`},))) ;; ../../../../specification/wasm-latest/2.4-validation.modules.spectec relation Module_ok: `|-%:%`(module, moduletype) @@ -4319,7 +4319,7 @@ relation Module_ok: `|-%:%`(module, moduletype) -- if $disjoint_(syntax name, nm*{nm <- `nm*`}) -- if (C = C' +++ {TYPES [], TAGS jt_I*{jt_I <- `jt_I*`} ++ jt*{jt <- `jt*`}, GLOBALS gt*{gt <- `gt*`}, MEMS mt_I*{mt_I <- `mt_I*`} ++ mt*{mt <- `mt*`}, TABLES tt_I*{tt_I <- `tt_I*`} ++ tt*{tt <- `tt*`}, FUNCS [], DATAS ok*{ok <- `ok*`}, ELEMS rt*{rt <- `rt*`}, LOCALS [], LABELS [], RETURN ?(), REFS [], RECS []}) -- if (C' = {TYPES dt'*{dt' <- `dt'*`}, TAGS [], GLOBALS gt_I*{gt_I <- `gt_I*`}, MEMS [], TABLES [], FUNCS dt_I*{dt_I <- `dt_I*`} ++ dt*{dt <- `dt*`}, DATAS [], ELEMS [], LOCALS [], LABELS [], RETURN ?(), REFS x*{x <- `x*`}, RECS []}) - -- if (x*{x <- `x*`} = $funcidx_nonfuncs(`%%%%%%`_nonfuncs(global*{global <- `global*`}, mem*{mem <- `mem*`}, table*{table <- `table*`}, elem*{elem <- `elem*`}, start?{start <- `start?`}, export*{export <- `export*`}))) + -- if (x*{x <- `x*`} = $funcidx_nonfuncs(`%%%%%`_nonfuncs(global*{global <- `global*`}, mem*{mem <- `mem*`}, table*{table <- `table*`}, elem*{elem <- `elem*`}, export*{export <- `export*`}))) -- if (jt_I*{jt_I <- `jt_I*`} = $tagsxt(xt_I*{xt_I <- `xt_I*`})) -- if (gt_I*{gt_I <- `gt_I*`} = $globalsxt(xt_I*{xt_I <- `xt_I*`})) -- if (mt_I*{mt_I <- `mt_I*`} = $memsxt(xt_I*{xt_I <- `xt_I*`})) @@ -16167,12 +16167,12 @@ relation Types_ok: `%|-%:%`(context, type*, deftype*) ;; ../../../../specification/wasm-latest/2.4-validation.modules.spectec syntax nonfuncs = - | `%%%%%%`(`global*` : global*, `mem*` : mem*, `table*` : table*, `elem*` : elem*, `start?` : start?, `export*` : export*) + | `%%%%%`(`global*` : global*, `mem*` : mem*, `table*` : table*, `elem*` : elem*, `export*` : export*) ;; ../../../../specification/wasm-latest/2.4-validation.modules.spectec def $funcidx_nonfuncs(nonfuncs : nonfuncs) : funcidx* ;; ../../../../specification/wasm-latest/2.4-validation.modules.spectec - def $funcidx_nonfuncs{`global*` : global*, `mem*` : mem*, `table*` : table*, `elem*` : elem*, `start?` : start?, `export*` : export*}(`%%%%%%`_nonfuncs(global*{global <- `global*`}, mem*{mem <- `mem*`}, table*{table <- `table*`}, elem*{elem <- `elem*`}, start?{start <- `start?`}, export*{export <- `export*`})) = $funcidx_module(MODULE_module(`%`_list([],), `%`_list([],), `%`_list([],), `%`_list(global*{global <- `global*`},), `%`_list(mem*{mem <- `mem*`},), `%`_list(table*{table <- `table*`},), `%`_list([],), `%`_list([],), `%`_list(elem*{elem <- `elem*`},), start?{start <- `start?`}, `%`_list(export*{export <- `export*`},))) + def $funcidx_nonfuncs{`global*` : global*, `mem*` : mem*, `table*` : table*, `elem*` : elem*, `export*` : export*}(`%%%%%`_nonfuncs(global*{global <- `global*`}, mem*{mem <- `mem*`}, table*{table <- `table*`}, elem*{elem <- `elem*`}, export*{export <- `export*`})) = $funcidx_module(MODULE_module(`%`_list([],), `%`_list([],), `%`_list([],), `%`_list(global*{global <- `global*`},), `%`_list(mem*{mem <- `mem*`},), `%`_list(table*{table <- `table*`},), `%`_list([],), `%`_list([],), `%`_list(elem*{elem <- `elem*`},), ?(), `%`_list(export*{export <- `export*`},))) ;; ../../../../specification/wasm-latest/2.4-validation.modules.spectec relation Module_ok: `|-%:%`(module, moduletype) @@ -16193,7 +16193,7 @@ relation Module_ok: `|-%:%`(module, moduletype) -- if $disjoint_(syntax name, nm*{nm <- `nm*`}) -- if (C = C' +++ {TYPES [], TAGS jt_I*{jt_I <- `jt_I*`} ++ jt*{jt <- `jt*`}, GLOBALS gt*{gt <- `gt*`}, MEMS mt_I*{mt_I <- `mt_I*`} ++ mt*{mt <- `mt*`}, TABLES tt_I*{tt_I <- `tt_I*`} ++ tt*{tt <- `tt*`}, FUNCS [], DATAS ok*{ok <- `ok*`}, ELEMS rt*{rt <- `rt*`}, LOCALS [], LABELS [], RETURN ?(), REFS [], RECS []}) -- if (C' = {TYPES dt'*{dt' <- `dt'*`}, TAGS [], GLOBALS gt_I*{gt_I <- `gt_I*`}, MEMS [], TABLES [], FUNCS dt_I*{dt_I <- `dt_I*`} ++ dt*{dt <- `dt*`}, DATAS [], ELEMS [], LOCALS [], LABELS [], RETURN ?(), REFS x*{x <- `x*`}, RECS []}) - -- if (x*{x <- `x*`} = $funcidx_nonfuncs(`%%%%%%`_nonfuncs(global*{global <- `global*`}, mem*{mem <- `mem*`}, table*{table <- `table*`}, elem*{elem <- `elem*`}, start?{start <- `start?`}, export*{export <- `export*`}))) + -- if (x*{x <- `x*`} = $funcidx_nonfuncs(`%%%%%`_nonfuncs(global*{global <- `global*`}, mem*{mem <- `mem*`}, table*{table <- `table*`}, elem*{elem <- `elem*`}, export*{export <- `export*`}))) -- if (jt_I*{jt_I <- `jt_I*`} = $tagsxt(xt_I*{xt_I <- `xt_I*`})) -- if (gt_I*{gt_I <- `gt_I*`} = $globalsxt(xt_I*{xt_I <- `xt_I*`})) -- if (mt_I*{mt_I <- `mt_I*`} = $memsxt(xt_I*{xt_I <- `xt_I*`})) @@ -28161,12 +28161,12 @@ relation Types_ok: `%|-%:%`(context, type*, deftype*) ;; ../../../../specification/wasm-latest/2.4-validation.modules.spectec syntax nonfuncs = - | `%%%%%%`(`global*` : global*, `mem*` : mem*, `table*` : table*, `elem*` : elem*, `start?` : start?, `export*` : export*) + | `%%%%%`(`global*` : global*, `mem*` : mem*, `table*` : table*, `elem*` : elem*, `export*` : export*) ;; ../../../../specification/wasm-latest/2.4-validation.modules.spectec def $funcidx_nonfuncs(nonfuncs : nonfuncs) : funcidx* ;; ../../../../specification/wasm-latest/2.4-validation.modules.spectec - def $funcidx_nonfuncs{`global*` : global*, `mem*` : mem*, `table*` : table*, `elem*` : elem*, `start?` : start?, `export*` : export*}(`%%%%%%`_nonfuncs(global*{global <- `global*`}, mem*{mem <- `mem*`}, table*{table <- `table*`}, elem*{elem <- `elem*`}, start?{start <- `start?`}, export*{export <- `export*`})) = $funcidx_module(MODULE_module(`%`_list([],), `%`_list([],), `%`_list([],), `%`_list(global*{global <- `global*`},), `%`_list(mem*{mem <- `mem*`},), `%`_list(table*{table <- `table*`},), `%`_list([],), `%`_list([],), `%`_list(elem*{elem <- `elem*`},), start?{start <- `start?`}, `%`_list(export*{export <- `export*`},))) + def $funcidx_nonfuncs{`global*` : global*, `mem*` : mem*, `table*` : table*, `elem*` : elem*, `export*` : export*}(`%%%%%`_nonfuncs(global*{global <- `global*`}, mem*{mem <- `mem*`}, table*{table <- `table*`}, elem*{elem <- `elem*`}, export*{export <- `export*`})) = $funcidx_module(MODULE_module(`%`_list([],), `%`_list([],), `%`_list([],), `%`_list(global*{global <- `global*`},), `%`_list(mem*{mem <- `mem*`},), `%`_list(table*{table <- `table*`},), `%`_list([],), `%`_list([],), `%`_list(elem*{elem <- `elem*`},), ?(), `%`_list(export*{export <- `export*`},))) ;; ../../../../specification/wasm-latest/2.4-validation.modules.spectec relation Module_ok: `|-%:%`(module, moduletype) @@ -28196,7 +28196,7 @@ relation Module_ok: `|-%:%`(module, moduletype) -- if $disjoint_(syntax name, nm*{nm <- `nm*`}) -- if (C = C' +++ {TYPES [], TAGS jt_I*{jt_I <- `jt_I*`} ++ jt*{jt <- `jt*`}, GLOBALS gt*{gt <- `gt*`}, MEMS mt_I*{mt_I <- `mt_I*`} ++ mt*{mt <- `mt*`}, TABLES tt_I*{tt_I <- `tt_I*`} ++ tt*{tt <- `tt*`}, FUNCS [], DATAS ok*{ok <- `ok*`}, ELEMS rt*{rt <- `rt*`}, LOCALS [], LABELS [], RETURN ?(), REFS [], RECS []}) -- if (C' = {TYPES dt'*{dt' <- `dt'*`}, TAGS [], GLOBALS gt_I*{gt_I <- `gt_I*`}, MEMS [], TABLES [], FUNCS dt_I*{dt_I <- `dt_I*`} ++ dt*{dt <- `dt*`}, DATAS [], ELEMS [], LOCALS [], LABELS [], RETURN ?(), REFS x*{x <- `x*`}, RECS []}) - -- if (x*{x <- `x*`} = $funcidx_nonfuncs(`%%%%%%`_nonfuncs(global*{global <- `global*`}, mem*{mem <- `mem*`}, table*{table <- `table*`}, elem*{elem <- `elem*`}, start?{start <- `start?`}, export*{export <- `export*`}))) + -- if (x*{x <- `x*`} = $funcidx_nonfuncs(`%%%%%`_nonfuncs(global*{global <- `global*`}, mem*{mem <- `mem*`}, table*{table <- `table*`}, elem*{elem <- `elem*`}, export*{export <- `export*`}))) -- if (jt_I*{jt_I <- `jt_I*`} = $tagsxt(xt_I*{xt_I <- `xt_I*`})) -- if (gt_I*{gt_I <- `gt_I*`} = $globalsxt(xt_I*{xt_I <- `xt_I*`})) -- if (mt_I*{mt_I <- `mt_I*`} = $memsxt(xt_I*{xt_I <- `xt_I*`})) diff --git a/spectec/test-prose/TEST.md b/spectec/test-prose/TEST.md index 6d1894b49b..67a6205cbe 100644 --- a/spectec/test-prose/TEST.md +++ b/spectec/test-prose/TEST.md @@ -17389,7 +17389,7 @@ The module :math:`(\mathsf{module}~{{\mathit{type}}^\ast}~{{\mathit{import}}^\as * The context :math:`{C'}` is of the form :math:`\{ \mathsf{types}~{{\mathit{dt}'}^\ast},\;\allowbreak \mathsf{globals}~{{\mathit{gt}}_{\mathsf{i}}^\ast},\;\allowbreak \mathsf{funcs}~{{\mathit{dt}}_{\mathsf{i}}^\ast}~{{\mathit{dt}}^\ast},\;\allowbreak \mathsf{return}~\epsilon,\;\allowbreak \mathsf{refs}~{x^\ast} \}`. - * The function index sequence :math:`{x^\ast}` is of the form :math:`{\mathrm{funcidx}}({{\mathit{global}}^\ast}~{{\mathit{mem}}^\ast}~{{\mathit{table}}^\ast}~{{\mathit{elem}}^\ast}~{{\mathit{start}}^?}~{{\mathit{export}}^\ast})`. + * The function index sequence :math:`{x^\ast}` is of the form :math:`{\mathrm{funcidx}}({{\mathit{global}}^\ast}~{{\mathit{mem}}^\ast}~{{\mathit{table}}^\ast}~{{\mathit{elem}}^\ast}~{{\mathit{export}}^\ast})`. * The tag type sequence :math:`{{\mathit{jt}}_{\mathsf{i}}^\ast}` is of the form :math:`{\mathrm{tags}}({{\mathit{xt}}_{\mathsf{i}}^\ast})`. @@ -24589,11 +24589,11 @@ The instruction sequence :math:`(\mathsf{block}~{\mathit{blocktype}}~{{\mathit{i 1. Return :math:`{\mathit{zt}} \neq {\mathrm{unpack}}({\mathit{zt}})`. -:math:`{\mathrm{funcidx}}({{\mathit{global}}^\ast}~{{\mathit{mem}}^\ast}~{{\mathit{table}}^\ast}~{{\mathit{elem}}^\ast}~{{\mathit{start}}^?}~{{\mathit{export}}^\ast})` -....................................................................................................................................................................... +:math:`{\mathrm{funcidx}}({{\mathit{global}}^\ast}~{{\mathit{mem}}^\ast}~{{\mathit{table}}^\ast}~{{\mathit{elem}}^\ast}~{{\mathit{export}}^\ast})` +.................................................................................................................................................. -1. Return :math:`{\mathrm{funcidx}}(\mathsf{module}~{{\mathit{global}}^\ast}~{{\mathit{mem}}^\ast}~{{\mathit{table}}^\ast}~{{\mathit{elem}}^\ast}~{{\mathit{start}}^?}~{{\mathit{export}}^\ast})`. +1. Return :math:`{\mathrm{funcidx}}(\mathsf{module}~{{\mathit{global}}^\ast}~{{\mathit{mem}}^\ast}~{{\mathit{table}}^\ast}~{{\mathit{elem}}^\ast}~{{\mathit{export}}^\ast})`. :math:`{{\mathrm{relaxed}}(i)}{{}[ X_1, X_2 ]}` @@ -29557,7 +29557,7 @@ Module_ok - $disjoint_(`name, nm*) is true. - the context C is C' with .TAGS appended by jt_I* :: jt* and .GLOBALS appended by gt* and .MEMS appended by mt_I* :: mt* and .TABLES appended by tt_I* :: tt* and .DATAS appended by ok* and .ELEMS appended by rt*. - the context C' is { TYPES: dt'*; GLOBALS: gt_I*; FUNCS: dt_I* :: dt*; RETURN: ?(); REFS: x* }. - - the function index sequence x* is $funcidx_nonfuncs((global* mem* table* elem* start? export*)). + - the function index sequence x* is $funcidx_nonfuncs((global* mem* table* elem* export*)). - the tag type sequence jt_I* is $tagsxt(xt_I*). - the global type sequence gt_I* is $globalsxt(xt_I*). - the memory type sequence mt_I* is $memsxt(xt_I*). @@ -32992,8 +32992,8 @@ default_ valtype is_packtype zt 1. Return (zt =/= $unpack(zt)). -funcidx_nonfuncs (global* mem* table* elem* start? export*) -1. Return $funcidx_module((MODULE [] [] [] global* mem* table* [] [] elem* start? export*)). +funcidx_nonfuncs (global* mem* table* elem* export*) +1. Return $funcidx_module((MODULE [] [] [] global* mem* table* [] [] elem* ?() export*)). relaxed2 i `X X_1 X_2 1. If $ND(), then: From c7c850ecd441f92679e445b452badd06b5c5eeb1 Mon Sep 17 00:00:00 2001 From: Zilin Chen Date: Wed, 24 Jun 2026 23:54:30 +0800 Subject: [PATCH 2/2] remove NanoWasm changes --- spectec/doc/example/output/NanoWasm.html | 4 ++-- spectec/doc/example/output/NanoWasm.pdf | Bin 245096 -> 245087 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spectec/doc/example/output/NanoWasm.html b/spectec/doc/example/output/NanoWasm.html index 85948ec48a..87bda0f629 100644 --- a/spectec/doc/example/output/NanoWasm.html +++ b/spectec/doc/example/output/NanoWasm.html @@ -7,7 +7,7 @@ NanoWasm — NanoWasm documentation - + @@ -378,7 +378,7 @@

Binary FormatSphinx 8.1.3 + Powered by Sphinx 8.2.3 & Alabaster 1.0.0 | diff --git a/spectec/doc/example/output/NanoWasm.pdf b/spectec/doc/example/output/NanoWasm.pdf index a6098b37e9501bd6d2d0967e910ab13ccf668026..c6a7ac653a2ddcb56e9e107a7ac119635d420ed8 100644 GIT binary patch delta 15650 zcmZ8{V{j#0(`{_qwrx9^*tYFVcw*b;iET~niET}6Ti<)1pSM=+>Z<)`S9f)xcHs%X~2#ESpwgn=xb8`CB5q3-&LfemPw)i&QJYfSxk+#lwCUnND=W?eA=D*^b zTj38AR}04zjXwK0LHKY)s z$AYq@+~LpyuCjkQZHSdCPd)XDR+Ah*8b$e zfRhST^)whuu^&7o+)WXyEl{U!LAK~SrRKT>Gvvdk-;@$lG~m?@k%A9ocY~r+xIC8d z+<)W`rOh=mEkhjn@MER*$g6w2B<7w7lY)bkJ4iF3t~HXN8n!MJ(Ca7vrqVmBGyIDm z?c=%!RK1QgC;!$gW!-BXTD+fZ%s^z@U{zaSh}8bvc{W)H+^hKuR&PG8c3&2tPcLEu7xI#%*KzH^(v!x7tX_>QH<_?B!2 zps~|D5=2y?BLbBb&neF5d3!#1fqxwqIbvfXU8!~3lI$q%>|ExjHGiPSh zf^LAON#G;HM8M>KZt`>6WFe}3HqeFEFjZ+0I7FWgPT2~5G1y-P2l3X-AZHH;(S!lx z2wmcSuPmfyWG8 zSz`L+p=tv0YHQb3&V~Eu^`r)nKE3!F>i7Y-&yW6;w_p(Gm0;}rhzpBDKkP^D=tj#M zx1=N0_U^eqQHa_xg9japM4|j-0OwHiXCtFsUO1rNd+@(9ZQyu=tVJX!du9+S)!tsFNdUq<$ixdq1wlaz4R=@!OF5O z!d+*a+CGn6YH)q*Tg@a5NU?@BL89rJf???@|5hukksvN!bpeo-7%>OTGVP8LH*GNURo~2G!WUO(N?OvlW9dRy5+m$?X)eOOpZZjXR@ta1xO>^=+9ro&A5e1fXcl_NI2^qC<)YR&C z%{cCP9ij@}X9Kq{eol)uYGvAbkxPmX)gMS)`T=tMK-|O5)e__m*V@keiVI5BFCmhJ zPS=Prm9=y9s}SuMo(8D3Xn(B$bk{Q$0j)iUk}v!e@*Ch_Y6yWmM9$UC_*Dr6LX~8y z5=ZV2ff;K5p0?W)XOsYZlNDPXIVQrd*WG<9uA9~nX2@rXFm2o*6iAOb7{ z(DfOBJ_wFG-|$Gf5VY?FYCWEF%q*P`l$Fbc>mG(F+rr;v*tENNpJ;<7WLM2gsU38R{FBIHgbkP_fb@7*ba4blR)mC!R{FO_+LwWwiZ#i!o`D~YuVGzK4} zK2675SA6|sE-`dPZCOVL(Hy$IN5>a$8=8|fkXMy#OUrrpet~J~}}` zg#}1xpGQ?ViJ0S4f#pas&61KKQ0@Ku6TRk*LIGM^2vzkIYzq{xDgQ+ZngSq)Do-Wt zH)hKY1Pj|=b+TJFR?BxDsXY|TR0(RpFpryqKIalErd6CKt!rw{ae<$2*=CGwx&e2z zfcvn1P(G6iz`fjirpmEho*m`?XoMce_XS|8bk}itt93=hD0I7eX}AspWqJg+TxrO@jbM3YOBjG zt%S8$o*8*zx!LZG=Ar z{K2er37SDbo74CZuv)Lp%_{ezu6GdJi_NqOSkZpoG(z87oyfYp4&pRGD)TEU9(_H2 zj)xWwlHa&Q=lR%+o41O(9-z;@7OH!!4gV@mEA)G3d5X94;liSI566~?5IpzzzK21?GW^o6}WCR*?Vqo$erRA;W2uWY$k;HdE7@P6F|C{-#p6{$YvZcr@_DfvF$NR zt6VXrV(K0utk4pJmn^98cW~=r(o9!2P)$o`7SWpCbPIjOlw)EZGjAygQqr6hx2jR3 z=<_FheEgH=h_B>Y)l5=L#yxWJ@`$08Q=&Q0`_>tw`pvOZV3zU&{})t&>%aWoh_N&7 z0HCxfyd=or4Zo{XevwcCK)YkMZ$26VdHJn!1qpA@-&RHDQrHI=*z9;{mh63ad4!Ja zrFIM0k#_K(D{(v~Qn3P8=01{p2>%d$@(}s`G^b95a9gjv#?n>?Ey7eoOsm@qn2oI; z_*FC;#Rm`yd#4n{7htP}f>k1f^FG?Pn2D$EN%ETIBCA;4xE`(ps#z><&9`9F^;l^7 zDAv-gC<&FfMrA~de7+gm1^9jLF3a`LFKN64@P&P!n&5KUHThCULnp)?2D)rZncd)g zU0Z#ysT5Z-OmGGC^lROUnx{FxCYq5Kr%fe|q6?^29~Ro?88^j9U=C;>2hWdhULN*2 zG6cFau@i((nk6IvxeQj%$%=(FUb&FAO(bjL8dg1`UnBko&>LVH^)r>KUAS(*o;2a% z6cK_s>Kz2gj8@Jqe`k;uG3At*Nh0b__*{(F9?f&cgm-wY4aY$6Wz}i1FV<;l(QW=(Va}lD-t%B9>1{$x7v< z-T3@aCAJs=Y*-fy3?yEpSiguwdDX(#zhq3B4ubKB;r}vYH`7#|k154WOM-C&<+Hi- zl{y-ty1Wzr47_;3(u;u?ueG8vs)A}MTpMfsnpZA{Eyz|w^n%pzS%slH%R?1fS)?i4 zNWTwv-nYHmHOSsGZnOIk6vcy%-}}pd6r(QD@w^}fsN@Jqw^d3<C_~coIb2& z;MrzaD{g`*H_$+T*)A&$`eSf(kDnzgqaQhm4}Qz7*H>dW<*ZGfOy?!7 zYumO*O>!u6>ubLJwcvxR?N*PcTP$nB)c%zTIF4$OarV?JQ7Pt2QswIHUMs=cwkMa* z%Mo$(#e|ch=s@dyuYYObjtaWK1lMS(tRRFbc1^(H0oQ-No@iy1^rLd$c2tU&m-M~& z4;}_<4=4bhf_ItTp{N!HT@W(Py;MPtByEM0dv_{MmNY{7apyI1${P3${eAH6t3jaw z@Osp7kIRKd$Y{2`KvkOl7FidBm27M9U#K3!Hd<}ZTZXuKZNd643J^d zPbnQ)uTXQ?5Yb!4QpXjQz=PZPXI@H7P4gR@yiv8{YI*m-k4C-;NWrVWj(?N(Pe>fC zHam>C+&v7Wsr?mkUrDV!VR((|@;=)IpknA-SHvxwZK*0ZNwEJzEgf?n@8O}jJ32F& z(X2nedf)WQ2I&D_@p*-J91lxQ8w8pGbX?f+#yjfe*a-1B=7?;bBq|-3(_doM>8=GS zmq^t9^~=BQTo8LsW%sE7fllvK1Rh{D_TVJCW&j!vZI9davpv5LH~hS8_X8+KckkFq z3#aA7UFNU7_W6SLGlfO^k1S&;vB21P|8uHSl!{=wF)0L8aR5pBLhw=qe%epwRd2^p z>}HEzgw4O>=_H{Wj~W)J-is&{D_A*iTyW2a7#8L7=og}LXy{9O80o8i$(rf$>n3*9 z1Km6_yHHWv|EfVM6qv`yv4hE1V;XNly?_o554BCFP)rAZYE*7IZyBq*(SeIFOB%ehY3`x^3#(i4eza;sYzt5to`Qp&jf;c z)jY*Osz*LSUFqfk?hBDYNE^k%f4R+oj%7CAVUBaNvc^okdbM`?J5{>B;sTS2oT80? z5)Zo56Trb4Ng&*(1?bCE2|TW12(TMx*6PNc>twh@zp}Qjhz$V5LPFjjBK>$ZX}7y&&fqB~JA5j3Oc1yx}h zd!vYoAGX72jii;fhdr_b5IjS1n~fV(V$qq0NV1V+!H)#2xqHR1%EYa8*NvH!NVKNu z{<7u!K(#FQF8sh)@SC)TE#!ec5)jA+Ib=}ftC$4f=RC}5rF0sz%x~ncHNnN;etHiU z5QhXQVZ|VLd4O>CiD_YWz$dbpaL&gZa_`*i&ui{5QM?d1vfR|rDYVh)NmxLBc))vK zU)mM0d1wgpj-BL z44GXf{`FHn&D+jjk^{-ow~-tos3;ILy{oP){|RmKH$0~Ry=PJ}E>iSSVsWv?ev}7WplsQ@%P_F+s1Arc#U8hYhlzGVed+un>^%W;;;!BJ&tSZ5+sz zX6^%Q-OdCgUpFs#4D>FC+KM%Y1H}{t@w@(BeA`I_JmlfIvZEiSf7pdgZ>g5bsfLXO za!A%+5qP&4!eM@(#l=cQsQ4nIq9~{+(AAVZVsjErUBZj^gLCXD!~l|9$u7;A7(GGH zsn!@1=8=-DIxG}w!Bs3_Atp|8f5XZ9LDAWz1SUWZ(L_1tz$!q>6WGw$gg_c$q^!|! zqzvW3Tn9fVh8O~s=CF%6M2VrdB80*hApFH9KuWM_OJYyZYi1KC73BvWa5XV4it`E3 z)8)%hct9J#xL|bQwE<>Y@}P`pv3{iMIg$c2}sZ0&T>N4yhKw_t?2fWQ~QKL zZK`_qG>}ioA)@pA##@#A1UxSkLC)I4(z`*zy#VFk4j?Bvh7?2q3J@`4GAN zf<(E)V9v&fOW=go5O3;IL^~EnsoJlk{UXRT@<8fX^o{{^0RW~(QCH5g-g$tg2?SL2 zg`nRotYer2og>8ezEo@Uql7qus%i=t?Om0m!KntkAGv5N2?+&X8mv_2BhtV&92hc5 zM<9+08RY)qfT=4lj)$KzJu94kWFX8QzDfF$O#^ROEUGI+w;*-yQZUc{p|rGg86Vg3 z?8B^^nmB+e$;^BFxsfWAX>b$BqTQME`Aq#QSKD$*ZVE5?| zOZ%ku?JGg;D$p7@$?8)$| zoZI6mU{n43>8$V}CG|$47wL#m@uxEWTLEAs%oKe#p&}n4$%=?M(!v=165rnqdu+K% z;U~g#Ef__Bm*YE|iiEh7pS7aWJ;Hsnv6tJb#;~!~yTa=jwDj}kl~cr@l2-`ha-32* zian{82e>}9R`>tD^S7-^u-YvvIsfu&%biKrqRCNrR`<^~oUX@CIZIoif6Ch}Kf$)T zIp#i=@F>b`AT64T-Z^&V3(kkc$kewzvyA3v|9M;8ePzq0fV{W#^!N7eO2;#EEr}cp zy=Pp#f31G+$W)3i|K$djN<3QjF3_Ws{ajgl3s3=Ug&1uu?(c#(_}bPI-b~kW&L2?M z@61@b(Fn}TDRt+O2&vTnuOWBUD#cste#8%?Ev2(rqmCV*Z zZkrWC@m0mw_c2{u>@r#Y#8-JejJ&z4=$$K88&w%qzfkw~DmzjYvU^_yhPpM?v=YZC z0BH6)&0{n{Or55$>1>oSk}s<&9^0(HGKWXU`Bg&qmCf5Ao7u?^8rtwiY=1)eR!18! zhrjM^m2vQrVTjcC)8~^}OQs@Ap~u+gK&^l^3W00IJjKlwL%z;)w>$z18gqNbIVu+= z1I^ZQKF-7YEBojHCL%L!h$@%0nP-dmDR7n?bNiIj^g{p5b^M_q!15L{_9Bf zXv3DmCV789;JyomRTBR^kM7m3nP*{nLcG9lq!=6ZTTmhf4Vd2p#n2c#I#QM8x6-%#y^0FLD_ zuGtB`!^G2`r^`?W(=cqUIAWM+z=ZgHHJmeS zLu~Ak&A|3>w2*uuzJl8 zfV7k78yn(5o2|b(pmY@2

1dmSMh>I`2v%I+7wTH5$!4#C7^+jy=<3A)&}pLk)ixU65o$S*bEzm!d!Zd<{{2jcsM~|gaT9K zyo9(B9O(QM&cFwTP9WG})&B^Bz2GDz;*5P#Kws$uyq?y*b|mUc>8ftLo{QdnCY_u1*0K8~>$Qh0mzK<5sd_l4 zzFyNQmx6bsX!}WAs|D-#pY>y4#Rld1&-vN2A_MLMcv8f(J7nEt7S;3IN1ua|%%y87 z_{ffUetO~2`~rg+CtC9k_fRRBv0}b@{Y3}oB|}TJ$S)0r6JY-Qi+#MZi^M#_0b$Ab09*K%HbbL%^p1$p;tp!G zsc12I@+swqS7AfSC(3e9s^1TuF5SeO{{XV;tt7u>HTy7fytDlEr_Q|=*J&;NIB&3y zPZXI*$(WiKU@fa{zE~!-JSRph^VTJ$Tc1>)Yp4knWf6EXNgTIan$O$~CKtYCaixNl zoee16-5(ibVMlpJ72E1Ff^_Zi)&XD}{d#{eNkB1|7kBVZ5%JcP!5<)gTOFbjNCT?g zB}YlEN<(2KT0@~p8c?3PEb?K{l(=Ko{WMZR`Gas$V|sVn6d(iCnDDdQ+Ig>_k=eRD z#zx3~G8v--<3N&=s*)~9Y008uO}jP_6CqYzhI7PoO{c&t@1oZQJ7WsSvWlS&4N~8GAH~_@K1NV}_jH*hi6<}I zQCy?TSMT_KgLT5a^PUK>@r=E7*Jz zv$eCXP`YqqHY2a^g`Ne;q4RAf&Ri(uIO{Vn*00EJFwg@~EtA>)u{;dLgDk?Tbjv%5 zw%$UdkcuLxqDgBz-i_BkVnml(qHy*ro?_YVBS$r*^%xazci*S@@+k3OTtKoAo&RLK zoewUbO+Wdu&aT`djTz;gS^_v5Tf0u{_4(f>%r!B#@5`o~n97xRa}qWUHtY6i_V^W& zLb=A%{aItj)EFAR;6u?g0^M@3VggO$4^fguS)NIFku`oTHG+GuNuJv=-*A^A?n)mN4Lf1M8Z&Y=?X&BP&yQB#@{l18K0!nu@%q^(KI zlh++G4L=4jm~f|~?^3QQP}IRAa!B~6U$Pi(lW!C3l3R^noK@nX(M z02NaAo|*b!%wj^KLI8QBNg}pbPnug|mi13RbqjNgK7Ji=d2=Kqz*(C?T13~4bXiiO zt4RKJS9Inl(8|PXLTz8*U@9HqBLNC*`$-oZU2uS1q8e=(%a*HfInk60ehxPpfgB^m zJo&wzphTTe>h5ze$+(lXK*!EYBtPuKZyUGS8RLXp=I8iYUjV)K$KhuVIQ#}uv6rN# z-PHObNn;f5Oytl7hqZ#FKWVAtqM0~7KeI3=p`)fy=aZC!;ptE)O_XtHu zNVLaN412ZfctA3VlZ`uA4{N;9achF6_ZzGw97ZA4Jf4Ydxez$RN7j;EduhalX3Y)Ju3I6bD2pN~bF2DI~jHzZ^q>FbdFt+ja zs0>$>Fk5Tc|It*amMOU4cl*>eU^-XJU!?wSEKu>PiEjPrx<4OTP z>PnxL7+@RXuXSMkZKxjHwi}LE$Yi4NmL&Pt?)>Spzc5~R{)$@?H`CQcq3FY0*xF2Z z{Yy^}ap=wqREqJz1kCnzoL~)!CXk1w^|65jBUl1Pn7xTusQn>g`fAvI`>XuI;HvgJVnP=5rhofaWeTccpum=!`(L+g|| z6g3@YtD-%wdZjbFXwgSC9W6=uvoNR)t$PQs6DuU^Q&M=dzn;0@o^zf=K~`tVDKeu^ zqd6ct52Y-|95Q@4WU6GvTRsR!x|4opq_kAOf^vf1V!xo-q@10}l%!%zqYPTfr!i;__$ zprN-*8@M8FKpa&wY0wyt16^W)J}t}G&tJ|8k$UVqL*`#8Iw!S9;|c~|>%Q6cpwk%1 z$!!{fX5!}ch1zf9i^L~RE={{vI~pbs_>`E_2WhCzyF4Snr&Z4T_G+fHOTc{rH zV33I1F@Yhdh2n=7PY?z)dfp{)FL#A>b@sz_np&)M#*O^NRaPnCf!@F98{^&JkFe?2 zS(C6lFAG&1QwZd^GiTN2q9HWGhyJBa?vln_tlJ=_qgQNH@(sZ{n+j#d!u`7*u&f|1 z1%2Hupj!upW7qRZovewd+L~T)GSEQ4Y!GbWlQE06^QwQiZ#h6|jeZGb-(6`~`Cism zidX02vpjs_4g8{kG)v3SI=Jr&PHQNL(yRut5Ce{Nn9>_q&@3?p>Gtky=cgf6=}Hf> z=)i}<2+Mzp(5LDIi59#*>BfB$TAL83PnJlg7xon24^psJIH)Y|Zv|e+IB4cI%caEe zV*{QLK6HO~;$25g6>$@qU!x8`#gdcM-%{i|%j1;PCR;+^wR8}g8^jnr!NG72lr=WD zc9`W{2Gx2*Mhz1B{F|G}m4s38n4LIbSBXYM4hxx!&Kw#1PG`In6&~uWjJns;?D3z(fP-|_FCwDBX7O* z0;XcYQv3%xl8Y?E>mkQq1w(C88?o5Z_h<3zqrd^`ld-z>Hv$aPKa^O=siTxI<8_@l zdYI!v>up*JQ^qcP7b;I+Jb6T?`B|Eh`k0n|6Pq`=8ArE#S+{)p(ZVWcC)CrCLli)F zZC1hSG~RLlcGRKd2x~4ire!H&v6fF0nf6rf7!fzI71^F76VNRad`FBjCzPInzYJ@n!k#k;D3v$dP@3)_()$lWg0ydQKxZ6s4z3P9v|! z3e}nUiixD8^(%SA&}s#wf-1^oBnPoMfg;Mg7lLu8zU0BA&)h%%yr9Yc;?FT=e)CCE)1W43iC!m(V8ZOO}kx=d^R+4Si{$QqG*6 zZd)#qB}bz=a(w1X_Yr*gx%2V7|I?2gM=kG+hgy`ulcb4dNghaH!;3B9zKbz58rjYN zK!Ue20UJ8568*uodrO;ObI*hn9+UTtxlhoG>bw~b4s|mz|1TFljTg~ zqFS&*`Gv2}ys!l^3;tZgV*c!0xS6?8)B||VbnuW}A6r`XdQtq$D(a01xs2}iW?=>D ztp%=R@t98@EG!?k89JZa_Xn;2;4xthEpP1NDKS+h%6{v2aXNGU3a5XSJpk|n%s4xB z6jo9w2+Nu+{@pN^fBVcI&=FBh?y|KEJq_;m=rG2-tx)KJqbyp5^Awtoy&xp^Q~Dnl z;4z~A05XBR!~3?X11z{7_{{|4FIMG89=>}qCO(&0>}|ujO%lBD0ag+lTi{w=XT!)x z7Riv5SQVuKb9Z-c!vvwo82}&t@ZNF`Zs24HhKssA^jBH}4Rix}a+fJpp#nZ&{*Ki& zQD?BV3J1YiR9&V!#3P{BMWldLfg|l!9JTbmp;L0D4hGx)Ky;LBg$acgaFJQh7juPd63w`T@ zQ})p~K_cv)R%Yav^@$p+&@&8F2LTXnNmMg1-4l2Xj!5oyWuGJ=3k#D;33otz;^{En|1oLd_Y-lw@Y3Pm(HDorc6b-EO$8|%#ga78GkyVENa|Lu)u$GF{QNT?$SeLiX8)666_=AAC${Psf65oP__-kNC9k@lR z&RmR}_m{COkHcapW!i~R3Cjd?XlE|f4fdzsk@$ud=9nYf>y#?@0QL7J=*oU#mR#pA z;O+j^-#Mdqzj8;8zXyZgI;a!R(?w#ss=)b8=mh5_bMDdf%ZXTvK z!OJWNSt?2}mr#`1QMwoz%ZU$W0@4zcMR6>{+^~$h<|;)n%W9A%wgc#CZVXY3f)v=K6Infba*5vH`z3(xNKQo><;7Iyi^IoV1r;aBIRBgMR4=C>Ee- zD)vs25@Ds}8leMN*gUuw9>E)^#sz|?mt;Fcfwh2~q3<&CH8qH~z{*FVE>ejKYo(W% z^1+^??qnc^cI66O%w`J{b|ezs`^J&roTOMCH_uH#pY0^S1>v2cv&R0ixnEcA>SyGo zPw$_qY1VA<*@~O_kN*5{URnDYt87mn(a}WLiTvzLt9=n)3xFARKjpEx&9zHStxkZ*B zm`vz(YH>BX)H$Ik5rB@Cl3*gTs=L?`0-FgXOiNfe1M{SO-PD-_Ta`|=>F`3jZ(o`3 ztdc4a>giha*IXg6Y_48JDKUewrcUNa0uL}hxB8;4ELB&?)mG(u_^Fb3q5IVq&G4jb z-s&2Qq?jItu=29rd+_J_*7;E*GHKWx)5~*BQsHe|j4gMz8SK5TT;tRJW1+v#_|^&5 zQM&X6ms^K39&0mJtdG=N+u>u{nJXZ{21(a&p6;qxv%mH}@K5zniY@g9;qSh&CL};J z5>28>9-C3TEpC7F%ug05d89g74F_p1N$MP8cw-xL0!t5XWQXRHe$$_UbNNxu#y|f4 zvx;3HoQ58;=PmH+7ZZMLaxVwAJ0o{rAIAeGhW0p^%V!&Z79&I7&=v~f1}M_U373Gy z!3-RlSbI+p^!B363t8vy;=QdD!Oegbm;QC?=@+~c{0)GefU`Q?23x3lCg&?JW<5U0M9@vp4IklkMgPf-izUL2cOK~*qtFMIeY zf}d8z|9~C%N7qAvK&JM!VpaQIFS&0BA`xVV?w7!H;sj`2Yh!?CpQxY+u9Jp7P{{=q z$28L$7;+trz9vMR=_%AtuU8A>bOY+$04-sLD(`|S5Da~8eoI3{Bg9f0&|OKfZ`^o) zRut_iNm@JkPvt_=q$AR#LH~Ea+S8=LM|1$S6Xm}L zVNLQ=rWIW8-Aj_a%JE(OJ50YM+|+^iuDa_rWdt8yJ$R+C2D|@rO}(JPM>*?{_kV)F zWA3LHQ;Ppo1TaK18>IB&8frlwv98ro#qff1Do_tim%lVm+Rn_)h}TzD&)-_Vml&&U zT0;lQ9^$Pf%D-Cj451nKvw8!{c0U!AkB3}S7La4Ng4SqNf)FF0m|7%$uPX0$r`PRVcls#SwgJ(FqMIS^fI|%oN840E#^(Ci(W;n%JNDK002;sr-k0RbXEdN{zo7w@lG(IXRzM*#ef(;QL z?$?9RwKpu&-ekpNP|}hhhUIDc%G|_MjAS|DsSOOu81Tq6; z4gK`WJfa79w=rohOyohN`R`yJ10X*Dhn_-Of|DX;yKxoOoCIqc1Fz9V8KF8!iI@~# zzaUo=`BZKEhye7K=>8;d^j1RRQvLFTMfx{S9O+6#5Q#+5g1;`|2gX|RwCe`s)UyOKi+nOaOv>@%`y!F3 z82dTWoiHY3ji?mtwgM##%~mwcd=^=d(QP;jnq7)vu!R27OPmg6Y-TV=nwwG|*&3<3 zo|Mso3Tw?pfYOs1DPtB$to8|5k7TlDhYK}L^N(Y=@(&t}9DP@^@jtq)6gD{)%;kS2 z8?y9nn`3)CVja4c;IM5pszlYdSBSvp&-)cjc@^1%qN%N9S>zP+&nj$1(Z&x$8)L@f z`!9g3`FizrgsWn}H6Q<+CE76C_I8C#2FR-yHq2X7Kr3fcfTbYO)tWlvYK4MH_fnLY zo8@BC>My9G@?2UT=w{)F{x@b7*fHGXg1^B0CxDu)GW-78W>FPjU_X0EHWMIdTb0u6n`B1IPC z0KzICU}8XE89GWa!W?k{bYkBad+8Ue9<2$)Y`s@us44~gGCzf!quJqBY8=mKiGF>j zrfb#$%zEtA%Fgn;azSgSxL`8MdL)#ENO_%c*6XTdW&FBo)OEILfV;_+!{! z9f^qBsq0P~_Ceae-@h`*zbc>e-`(d0-lZb)0VRsn^edDO4_Rd6tuOM@2P=1_;^z5h zi*qlIoJNQVEz%EJlT!X&*)B%2SL4{G-2u%|cQOSX6-^S4i>rb9v{G_Gqe=D3UlBNW z@n*WKoLv5kcDAF}w{? z|K1C#y(TpxUD^aAaI5~T$7fGs`|PKm0un(@_cjRrzztZz2o=LmdxVj9>+%)g2mx0o zrkfen{-&h&NHo2`NIB(ljn``!-g@SrzB z<+NNZOccj6tR>Y`6$et*S}9}r5bHu%lgIb2wnqgRaoCV0uUIohw^Z12IQNF201)Xo ztc%|=Ksn`>{NvA|1Z{y6Dlol^&o;Slbw^?p%oelCz_%%tvZJ2s4^CHZfn&Z2G z=wr434s4S;tlHFCi5Y4eyLjstjDetn)`gD-U^QoYeF_r#dU0pAeWJl!D^q3V_te-X zuZQr`*ReN$L?E~CiiTQ>+&Jqgz&7qsp4PUzjHMnkZ&tIY0X`AfSz*YZ!b_o8i+%jKuqYGrbrzUGR6`+V8yyXlwtL*{O2 zK(Dz|*V*#jqHO>#{x)M-^CR8c(=C>gP%dGgzuR;DfmZztus`JP*2gdtAmK91{HMTL zLqJwooK?SI5gF<@2hc+XE| zyEmc>=`ZpVLkT5TC+^H?>7DT3gL@C&-03pFmVEi{*mAq%Tk9VN=JNLTp{A~!gwe$) zhQ74bX4{Sm%cG9$*~v{;fa*?~*RnlF58cU8@n_Gc%J)lwY;+3hv!?E`({a1a(dSXQ zQ9M$L<`PuxxD@?g!DP+c?TR$rHe!RUMcuR zuW$b>H8qa@CD?cyeYa;Tbay>|oZeq9->r{X0Vff6f)vOIIYcyuMUsT7x}%mm}5f z5fRMVgAJl0o5Q^aHxA!zp#x5-iR4*kO;O`@*1iK9-Ac^)fC8cdRBnIOGM0UmDJhak=K;~cB&oP9~xM{*Xi%ZW+1Mvj}N+kQI`Rg1tPQ}sbj^~S9n z;AU6=Jb`V#MH^@3Mzcme=9TS~v`1}ARS;9%%T9c=R0Cfs#l}#!&_E~1?>x{_T& z>dfO~(j8amV*inuo``>Vb|BGDTcP@k;pq}!?} zHD{}b04U4;A;qi@T{ML8{`~jvh{YToNYhAL zBA4e|tam4&ddZub>1|rw%E_l!WgCd|lKIdIdn zR`+$&&M5jl7VWcbSQzm9{I&k(t<)oniQmtHLg4dVkMVtyNpJ+a!6ppcoI-XWK6238 z%pyS3cmclK9S3qBO&54^&yBno`smFMW>ehSyYlwnDbx)too;fc@}s|}?OS0QBc!Ib z0`krglfP9|8w6#xW$*0SxQMdIajCM>#Df?Od2&k7=i))&I_;xWB$fR$2XzX)=z@$A z!`XK`stHXSIleRULQ^-E9p5aLIhz1>MWP@B^Uj8M%tTs-Djot+KWEW^VsEzWX>9Y> z;F@>WwJl|=PY?Ijj;sfO8|&4`V+L$IU{MP*wP8n#*tFuuvtl;!jNM#3g0#_GMhH&4 zM~mM-K)-+(Y=csm?L=BAI=Jh`;{7ueGvo|OScpCI{GlXwyP)WLGLA_2jJt_fSbe1Z zlP9l|x~4+G#jgXbt5vQG9Qgj7*P0O*s!v~EYN^P zvM3|^!Z|)CMF04-e>jdMexvz(ME>m`uDP`yssNW<{hQ`Hc!G#W<0(t;&Y?Al*MQ$p z4dhlB|7Fc#`9&B`Qcwxb!qMEVJ-i-V8XT0PeWnTA0hES=ght&$n?&Bm(}IMJg^i7t z#Ln5o-P+BAqk%Wthor$B}wgsFN3NYcMq=FOPcjLvcRf*+rCNQhPxm2Tm z(pkmnz7QAp3Z1>CyN1F=!G$K<2T8`|`Ha?>zNAQ2nI>aTv31hweZTXP?{>}G_wiYm zwQj_{X@=W8ytUCwr(iV&kCa4U-mlOV0)#LRvgm?SQ?3$?VsIe(_@QJ7yBr%3Gt66Y@H{w|v> z!fx&It8GCm$&FU>I|W0s;8AsBOU^b;7m(FGpx+aQGc2RzVgTT^ZT0)9CH(mRakoQ9tHWVuIdyruM!07%&6w z;DE{iswta^h35*-(6RivP>SS+&d@}2AE7wmDIV|C!MSbaOpz~8uPjzK?snm@NXg8* z0$LS1CDqYClh|*KzksD9-sBnV+Wu`>8=ObV@4|LSK?QXlwj|!s-;iiRgUKke&=P{w z-n`pN24_CJ_{7ApP!xCH}?_zyOwAo}k30l3vs(%7#Hr+&tDj+mOb|dkW z;m-qmQ4tGKPaozGbVcarPKvfu+L;%Rc7Iv`Td$cU8Nxl_q%bUSl$4T6QgHtVz*IDG delta 15688 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 sD1