nmarshall commited on
Commit
d08c89c
·
1 Parent(s): 4ba0b42

gameplay: port remove-filter command effects

Browse files
crates/urt-gameplay/src/bin/urt-filter-commands.rs CHANGED
@@ -126,6 +126,29 @@ fn main() {
126
  add_filter_command(&mut rows, &mut count, input, &mut ring, &mut selector).unwrap();
127
  println!("{}", command_json(out, &rows, count, ring, selector));
128
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
129
  _ => panic!("unknown policy"),
130
  }
131
  }
 
126
  add_filter_command(&mut rows, &mut count, input, &mut ring, &mut selector).unwrap();
127
  println!("{}", command_json(out, &rows, count, ring, selector));
128
  }
129
+ "remove" => {
130
+ let mut p = 2;
131
+ let text = blob(&w, &mut p);
132
+ let n = w[1] as usize;
133
+ let mut rows = vec![];
134
+ for _ in 0..n {
135
+ rows.push(FilterRecord {
136
+ mask: w[p],
137
+ comparison: w[p + 1],
138
+ metadata: w[p + 2],
139
+ });
140
+ p += 3;
141
+ }
142
+ assert_eq!(p, w.len());
143
+ let issuer = if w[0] == u32::MAX {
144
+ None
145
+ } else {
146
+ Some(w[0] as i32)
147
+ };
148
+ let mut ring = u32::MAX;
149
+ let out = remove_filter_command(&mut rows, &text, issuer, &mut ring).unwrap();
150
+ println!("{}", command_json(out, &rows, n, ring, 0));
151
+ }
152
  _ => panic!("unknown policy"),
153
  }
154
  }
crates/urt-gameplay/src/filter_commands.rs CHANGED
@@ -266,3 +266,77 @@ mod add_tests {
266
  assert_eq!(selector, 0);
267
  }
268
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
266
  assert_eq!(selector, 0);
267
  }
268
  }
269
+
270
+ /// Original253245: empty text emits usage; nonempty text delegates to253296.
271
+ pub fn remove_filter_command(
272
+ records: &mut [FilterRecord],
273
+ text: &[u8],
274
+ issuer: Option<i32>,
275
+ ring: &mut u32,
276
+ ) -> Result<FilterCommand, Error> {
277
+ if records.len() > 4096 {
278
+ return Err(Error::InvalidCount);
279
+ }
280
+ if issuer.is_some_and(|v| !(0..64).contains(&v)) {
281
+ return Err(Error::InvalidIndex);
282
+ }
283
+ let text = cbytes(text);
284
+ if text.len() > 1024 {
285
+ return Err(Error::InvalidInput);
286
+ }
287
+ let mut staged = records.to_vec();
288
+ let mut counter = *ring;
289
+ let mut effects = vec![];
290
+ let mut children = vec![];
291
+ if text.is_empty() {
292
+ effects.push(usage(issuer, false, &mut counter)?);
293
+ } else {
294
+ effects.push(FilterCommandEffect::Remove(text.to_vec()));
295
+ children.push(crate::filter_lifecycle::remove_filter(&mut staged, text)?.into());
296
+ }
297
+ records.copy_from_slice(&staged);
298
+ *ring = counter;
299
+ Ok(FilterCommand { effects, children })
300
+ }
301
+ #[cfg(test)]
302
+ mod remove_tests {
303
+ use super::*;
304
+ #[test]
305
+ fn usage_skips_child_and_duplicate_removal_preserves_count_and_metadata() {
306
+ let row = FilterRecord {
307
+ mask: u32::MAX,
308
+ comparison: 0x04030201,
309
+ metadata: 7,
310
+ };
311
+ let mut rows = [row, row];
312
+ let mut ring = u32::MAX;
313
+ let p = remove_filter_command(&mut rows, b"", Some(2), &mut ring).unwrap();
314
+ assert_eq!(ring, 0);
315
+ assert!(p.children.is_empty());
316
+ assert_eq!(rows, [row, row]);
317
+ let p = remove_filter_command(&mut rows, b"1.2.3.4", None, &mut ring).unwrap();
318
+ assert!(p.children[0].export);
319
+ assert_eq!(rows[0].comparison, u32::MAX);
320
+ assert_eq!(rows[0].metadata, 7);
321
+ assert_eq!(rows[1], row);
322
+ assert_eq!(rows.len(), 2);
323
+ assert_eq!(ring, 0);
324
+ }
325
+ #[test]
326
+ fn ordinary_parse_failure_skips_export_and_unsupported_input_is_atomic() {
327
+ let row = FilterRecord {
328
+ mask: 7,
329
+ comparison: 8,
330
+ metadata: 9,
331
+ };
332
+ let mut rows = [row];
333
+ let mut ring = 7;
334
+ let p = remove_filter_command(&mut rows, b"bad", None, &mut ring).unwrap();
335
+ assert!(!p.children[0].result);
336
+ assert!(!p.children[0].export);
337
+ assert_eq!(rows, [row]);
338
+ assert!(remove_filter_command(&mut rows, &[b'1'; 128], None, &mut ring).is_err());
339
+ assert_eq!(rows, [row]);
340
+ assert_eq!(ring, 7);
341
+ }
342
+ }
docs/FINDINGS.md CHANGED
@@ -1845,3 +1845,5 @@ RE-954: Ninety-six actual253100 wrappers recover length-under3 client-number rou
1845
  RE-955: Rust matches96 original add-filter command cases, retaining short-input numeric routing, active-slot/userinfo gates, selector toggles, exact usage/kick text and formatter wrap. Missing IP insertion failures still queue clientkick; an extra unit test verifies full-table refusal also queues a kick. Unsupported domains reject atomically. Native userinfo, queued commands, network and export remain captured plans. [Evidence](research/RUST_FILTER_ADD_COMMAND.md).
1846
 
1847
  RE-956: Twenty-four actual253245 wrappers compose actual253296 removal and source client-usage formatting. Empty input emits exact console/client usage and skips mutation; client usage wraps the formatter ring. Nonempty input retains first-match duplicate/sentinel behavior, count, diagnostics and conditional export requests. Userinfo selector remains untouched. Native sends/console and export requests are captured. [Evidence](research/QVM_FILTER_REMOVE_COMMAND.md).
 
 
 
1845
  RE-955: Rust matches96 original add-filter command cases, retaining short-input numeric routing, active-slot/userinfo gates, selector toggles, exact usage/kick text and formatter wrap. Missing IP insertion failures still queue clientkick; an extra unit test verifies full-table refusal also queues a kick. Unsupported domains reject atomically. Native userinfo, queued commands, network and export remain captured plans. [Evidence](research/RUST_FILTER_ADD_COMMAND.md).
1846
 
1847
  RE-956: Twenty-four actual253245 wrappers compose actual253296 removal and source client-usage formatting. Empty input emits exact console/client usage and skips mutation; client usage wraps the formatter ring. Nonempty input retains first-match duplicate/sentinel behavior, count, diagnostics and conditional export requests. Userinfo selector remains untouched. Native sends/console and export requests are captured. [Evidence](research/QVM_FILTER_REMOVE_COMMAND.md).
1848
+
1849
+ RE-957: Rust matches24 original removal-wrapper cases, preserving exact client/console usage, formatter wrap, first-match duplicate/sentinel mutations, child diagnostics and conditional export. The API leaves caller table length and userinfo selector ownership untouched. Unit tests cover empty-input child suppression, duplicate metadata retention, ordinary parser failure and atomic unsupported-token rejection. Native effects remain captured plans. [Evidence](research/RUST_FILTER_REMOVE_COMMAND.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -1895,3 +1895,5 @@ RE-944–953 completed bounded time/expiry/loading/duration and export/reload co
1895
  - [x] RE-955 Rust add-filter wrapper and unconditional queued kick ([evidence](research/RUST_FILTER_ADD_COMMAND.md)).
1896
 
1897
  - [x] RE-956 Original remove-filter command and usage routing ([evidence](research/QVM_FILTER_REMOVE_COMMAND.md)).
 
 
 
1895
  - [x] RE-955 Rust add-filter wrapper and unconditional queued kick ([evidence](research/RUST_FILTER_ADD_COMMAND.md)).
1896
 
1897
  - [x] RE-956 Original remove-filter command and usage routing ([evidence](research/QVM_FILTER_REMOVE_COMMAND.md)).
1898
+
1899
+ - [x] RE-957 Rust remove-filter wrapper and source usage effects ([evidence](research/RUST_FILTER_REMOVE_COMMAND.md)).
docs/RESEARCH_LEDGER.md CHANGED
@@ -2493,3 +2493,7 @@ Rust matches96 original add-filter command cases, retaining short-input numeric
2493
  ## 2026-10-28 — RE-956 Original remove-filter command and usage routing
2494
 
2495
  Twenty-four actual253245 wrappers compose actual253296 removal and source client-usage formatting. Empty input emits exact console/client usage and skips mutation; client usage wraps the formatter ring. Nonempty input retains first-match duplicate/sentinel behavior, count, diagnostics and conditional export requests. Userinfo selector remains untouched. Native sends/console and export requests are captured. Focused `cargo xtask test-group qvm-filter-remove-command` passes with deterministic report regeneration, relevant regressions and storage/documentation/whitespace checks. Full suite deferred to the tenth-commit boundary. Original assets unchanged; native IO effects remain captured.
 
 
 
 
 
2493
  ## 2026-10-28 — RE-956 Original remove-filter command and usage routing
2494
 
2495
  Twenty-four actual253245 wrappers compose actual253296 removal and source client-usage formatting. Empty input emits exact console/client usage and skips mutation; client usage wraps the formatter ring. Nonempty input retains first-match duplicate/sentinel behavior, count, diagnostics and conditional export requests. Userinfo selector remains untouched. Native sends/console and export requests are captured. Focused `cargo xtask test-group qvm-filter-remove-command` passes with deterministic report regeneration, relevant regressions and storage/documentation/whitespace checks. Full suite deferred to the tenth-commit boundary. Original assets unchanged; native IO effects remain captured.
2496
+
2497
+ ## 2026-10-28 — RE-957 Rust remove-filter wrapper and source usage effects
2498
+
2499
+ Rust matches24 original removal-wrapper cases, preserving exact client/console usage, formatter wrap, first-match duplicate/sentinel mutations, child diagnostics and conditional export. The API leaves caller table length and userinfo selector ownership untouched. Unit tests cover empty-input child suppression, duplicate metadata retention, ordinary parser failure and atomic unsupported-token rejection. Native effects remain captured plans. Focused `cargo xtask test-group rust-filter-remove-command` passes with deterministic report regeneration, relevant regressions and storage/documentation/whitespace checks. Full suite deferred to the tenth-commit boundary. Original assets unchanged; native IO effects remain captured.
docs/REVERSE_ENGINEERING_TODO.md CHANGED
@@ -1932,3 +1932,5 @@ RE-944–953 recover bounded time, expiry, loading, duration and persistence rou
1932
  - [x] RE-955 Rust add-filter wrapper and unconditional queued kick ([evidence](research/RUST_FILTER_ADD_COMMAND.md)).
1933
 
1934
  - [x] RE-956 Original remove-filter command and usage routing ([evidence](research/QVM_FILTER_REMOVE_COMMAND.md)).
 
 
 
1932
  - [x] RE-955 Rust add-filter wrapper and unconditional queued kick ([evidence](research/RUST_FILTER_ADD_COMMAND.md)).
1933
 
1934
  - [x] RE-956 Original remove-filter command and usage routing ([evidence](research/QVM_FILTER_REMOVE_COMMAND.md)).
1935
+
1936
+ - [x] RE-957 Rust remove-filter wrapper and source usage effects ([evidence](research/RUST_FILTER_REMOVE_COMMAND.md)).
docs/research/README.md CHANGED
@@ -1467,3 +1467,5 @@ The extension collector adds five focused tests for native tail calls, command-r
1467
  - [RE-955: Rust add-filter wrapper and unconditional queued kick](RUST_FILTER_ADD_COMMAND.md).
1468
 
1469
  - [RE-956: Original remove-filter command and usage routing](QVM_FILTER_REMOVE_COMMAND.md).
 
 
 
1467
  - [RE-955: Rust add-filter wrapper and unconditional queued kick](RUST_FILTER_ADD_COMMAND.md).
1468
 
1469
  - [RE-956: Original remove-filter command and usage routing](QVM_FILTER_REMOVE_COMMAND.md).
1470
+
1471
+ - [RE-957: Rust remove-filter wrapper and source usage effects](RUST_FILTER_REMOVE_COMMAND.md).
docs/research/RUST_FILTER_REMOVE_COMMAND.md ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ # Rust remove-filter wrapper and source usage effects
2
+
3
+ RE-957. Focused validation: `cargo xtask test-group rust-filter-remove-command`. [Machine report](rust-filter-remove-command.json).
4
+
5
+ Rust matches24 original removal-wrapper cases, preserving exact client/console usage, formatter wrap, first-match duplicate/sentinel mutations, child diagnostics and conditional export. The API leaves caller table length and userinfo selector ownership untouched. Unit tests cover empty-input child suppression, duplicate metadata retention, ordinary parser failure and atomic unsupported-token rejection. Native effects remain captured plans.
docs/research/rust-filter-remove-command.json ADDED
@@ -0,0 +1,1663 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "limits": "Finite source/Rust contract parity; native time/file/network replies remain supplied or captured.",
3
+ "probes": [
4
+ {
5
+ "rust": {
6
+ "children": [],
7
+ "count": 2,
8
+ "events": [
9
+ {
10
+ "op": "console",
11
+ "text": "55736167653a2072656d6f76656970203c69702d6d61736b3e0a"
12
+ }
13
+ ],
14
+ "ring": 4294967295,
15
+ "rows": [
16
+ [
17
+ 4294967295,
18
+ 67305985,
19
+ 7
20
+ ],
21
+ [
22
+ 4294967295,
23
+ 67305985,
24
+ 8
25
+ ]
26
+ ],
27
+ "selector": 0
28
+ },
29
+ "source": {
30
+ "children": [],
31
+ "count": 2,
32
+ "events": [
33
+ {
34
+ "op": "console",
35
+ "text": "55736167653a2072656d6f76656970203c69702d6d61736b3e0a"
36
+ }
37
+ ],
38
+ "ring": 4294967295,
39
+ "rows": [
40
+ [
41
+ 4294967295,
42
+ 67305985,
43
+ 7
44
+ ],
45
+ [
46
+ 4294967295,
47
+ 67305985,
48
+ 8
49
+ ]
50
+ ],
51
+ "selector": 0
52
+ }
53
+ },
54
+ {
55
+ "rust": {
56
+ "children": [],
57
+ "count": 2,
58
+ "events": [
59
+ {
60
+ "op": "console",
61
+ "text": "55736167653a2072656d6f76656970203c69702d6d61736b3e0a"
62
+ }
63
+ ],
64
+ "ring": 4294967295,
65
+ "rows": [
66
+ [
67
+ 4294967295,
68
+ 4294967295,
69
+ 9
70
+ ],
71
+ [
72
+ 0,
73
+ 0,
74
+ 10
75
+ ]
76
+ ],
77
+ "selector": 0
78
+ },
79
+ "source": {
80
+ "children": [],
81
+ "count": 2,
82
+ "events": [
83
+ {
84
+ "op": "console",
85
+ "text": "55736167653a2072656d6f76656970203c69702d6d61736b3e0a"
86
+ }
87
+ ],
88
+ "ring": 4294967295,
89
+ "rows": [
90
+ [
91
+ 4294967295,
92
+ 4294967295,
93
+ 9
94
+ ],
95
+ [
96
+ 0,
97
+ 0,
98
+ 10
99
+ ]
100
+ ],
101
+ "selector": 0
102
+ }
103
+ },
104
+ {
105
+ "rust": {
106
+ "children": [],
107
+ "count": 2,
108
+ "events": [
109
+ {
110
+ "op": "send",
111
+ "recipient": 2,
112
+ "text": "6368617420225e355b72636f6e5d205e3755736167653a202f72656d6f76656970203c69702d6d61736b3e22"
113
+ }
114
+ ],
115
+ "ring": 0,
116
+ "rows": [
117
+ [
118
+ 4294967295,
119
+ 67305985,
120
+ 7
121
+ ],
122
+ [
123
+ 4294967295,
124
+ 67305985,
125
+ 8
126
+ ]
127
+ ],
128
+ "selector": 0
129
+ },
130
+ "source": {
131
+ "children": [],
132
+ "count": 2,
133
+ "events": [
134
+ {
135
+ "op": "send",
136
+ "recipient": 2,
137
+ "text": "6368617420225e355b72636f6e5d205e3755736167653a202f72656d6f76656970203c69702d6d61736b3e22"
138
+ }
139
+ ],
140
+ "ring": 0,
141
+ "rows": [
142
+ [
143
+ 4294967295,
144
+ 67305985,
145
+ 7
146
+ ],
147
+ [
148
+ 4294967295,
149
+ 67305985,
150
+ 8
151
+ ]
152
+ ],
153
+ "selector": 0
154
+ }
155
+ },
156
+ {
157
+ "rust": {
158
+ "children": [],
159
+ "count": 2,
160
+ "events": [
161
+ {
162
+ "op": "send",
163
+ "recipient": 2,
164
+ "text": "6368617420225e355b72636f6e5d205e3755736167653a202f72656d6f76656970203c69702d6d61736b3e22"
165
+ }
166
+ ],
167
+ "ring": 0,
168
+ "rows": [
169
+ [
170
+ 4294967295,
171
+ 4294967295,
172
+ 9
173
+ ],
174
+ [
175
+ 0,
176
+ 0,
177
+ 10
178
+ ]
179
+ ],
180
+ "selector": 0
181
+ },
182
+ "source": {
183
+ "children": [],
184
+ "count": 2,
185
+ "events": [
186
+ {
187
+ "op": "send",
188
+ "recipient": 2,
189
+ "text": "6368617420225e355b72636f6e5d205e3755736167653a202f72656d6f76656970203c69702d6d61736b3e22"
190
+ }
191
+ ],
192
+ "ring": 0,
193
+ "rows": [
194
+ [
195
+ 4294967295,
196
+ 4294967295,
197
+ 9
198
+ ],
199
+ [
200
+ 0,
201
+ 0,
202
+ 10
203
+ ]
204
+ ],
205
+ "selector": 0
206
+ }
207
+ },
208
+ {
209
+ "rust": {
210
+ "children": [
211
+ {
212
+ "diagnostics": [
213
+ {
214
+ "op": "removed"
215
+ }
216
+ ],
217
+ "exports": [
218
+ 252500
219
+ ],
220
+ "result": 1
221
+ }
222
+ ],
223
+ "count": 2,
224
+ "events": [
225
+ {
226
+ "op": "remove",
227
+ "text": "312e322e332e34"
228
+ }
229
+ ],
230
+ "ring": 4294967295,
231
+ "rows": [
232
+ [
233
+ 4294967295,
234
+ 4294967295,
235
+ 7
236
+ ],
237
+ [
238
+ 4294967295,
239
+ 67305985,
240
+ 8
241
+ ]
242
+ ],
243
+ "selector": 0
244
+ },
245
+ "source": {
246
+ "children": [
247
+ {
248
+ "diagnostics": [
249
+ {
250
+ "op": "removed"
251
+ }
252
+ ],
253
+ "exports": [
254
+ 252500
255
+ ],
256
+ "result": 1
257
+ }
258
+ ],
259
+ "count": 2,
260
+ "events": [
261
+ {
262
+ "op": "remove",
263
+ "text": "312e322e332e34"
264
+ }
265
+ ],
266
+ "ring": 4294967295,
267
+ "rows": [
268
+ [
269
+ 4294967295,
270
+ 4294967295,
271
+ 7
272
+ ],
273
+ [
274
+ 4294967295,
275
+ 67305985,
276
+ 8
277
+ ]
278
+ ],
279
+ "selector": 0
280
+ }
281
+ },
282
+ {
283
+ "rust": {
284
+ "children": [
285
+ {
286
+ "diagnostics": [
287
+ {
288
+ "op": "not-found",
289
+ "text": "312e322e332e34"
290
+ }
291
+ ],
292
+ "exports": [],
293
+ "result": 0
294
+ }
295
+ ],
296
+ "count": 2,
297
+ "events": [
298
+ {
299
+ "op": "remove",
300
+ "text": "312e322e332e34"
301
+ }
302
+ ],
303
+ "ring": 4294967295,
304
+ "rows": [
305
+ [
306
+ 4294967295,
307
+ 4294967295,
308
+ 9
309
+ ],
310
+ [
311
+ 0,
312
+ 0,
313
+ 10
314
+ ]
315
+ ],
316
+ "selector": 0
317
+ },
318
+ "source": {
319
+ "children": [
320
+ {
321
+ "diagnostics": [
322
+ {
323
+ "op": "not-found",
324
+ "text": "312e322e332e34"
325
+ }
326
+ ],
327
+ "exports": [],
328
+ "result": 0
329
+ }
330
+ ],
331
+ "count": 2,
332
+ "events": [
333
+ {
334
+ "op": "remove",
335
+ "text": "312e322e332e34"
336
+ }
337
+ ],
338
+ "ring": 4294967295,
339
+ "rows": [
340
+ [
341
+ 4294967295,
342
+ 4294967295,
343
+ 9
344
+ ],
345
+ [
346
+ 0,
347
+ 0,
348
+ 10
349
+ ]
350
+ ],
351
+ "selector": 0
352
+ }
353
+ },
354
+ {
355
+ "rust": {
356
+ "children": [
357
+ {
358
+ "diagnostics": [
359
+ {
360
+ "op": "removed"
361
+ }
362
+ ],
363
+ "exports": [
364
+ 252500
365
+ ],
366
+ "result": 1
367
+ }
368
+ ],
369
+ "count": 2,
370
+ "events": [
371
+ {
372
+ "op": "remove",
373
+ "text": "312e322e332e34"
374
+ }
375
+ ],
376
+ "ring": 4294967295,
377
+ "rows": [
378
+ [
379
+ 4294967295,
380
+ 4294967295,
381
+ 7
382
+ ],
383
+ [
384
+ 4294967295,
385
+ 67305985,
386
+ 8
387
+ ]
388
+ ],
389
+ "selector": 0
390
+ },
391
+ "source": {
392
+ "children": [
393
+ {
394
+ "diagnostics": [
395
+ {
396
+ "op": "removed"
397
+ }
398
+ ],
399
+ "exports": [
400
+ 252500
401
+ ],
402
+ "result": 1
403
+ }
404
+ ],
405
+ "count": 2,
406
+ "events": [
407
+ {
408
+ "op": "remove",
409
+ "text": "312e322e332e34"
410
+ }
411
+ ],
412
+ "ring": 4294967295,
413
+ "rows": [
414
+ [
415
+ 4294967295,
416
+ 4294967295,
417
+ 7
418
+ ],
419
+ [
420
+ 4294967295,
421
+ 67305985,
422
+ 8
423
+ ]
424
+ ],
425
+ "selector": 0
426
+ }
427
+ },
428
+ {
429
+ "rust": {
430
+ "children": [
431
+ {
432
+ "diagnostics": [
433
+ {
434
+ "op": "not-found",
435
+ "text": "312e322e332e34"
436
+ }
437
+ ],
438
+ "exports": [],
439
+ "result": 0
440
+ }
441
+ ],
442
+ "count": 2,
443
+ "events": [
444
+ {
445
+ "op": "remove",
446
+ "text": "312e322e332e34"
447
+ }
448
+ ],
449
+ "ring": 4294967295,
450
+ "rows": [
451
+ [
452
+ 4294967295,
453
+ 4294967295,
454
+ 9
455
+ ],
456
+ [
457
+ 0,
458
+ 0,
459
+ 10
460
+ ]
461
+ ],
462
+ "selector": 0
463
+ },
464
+ "source": {
465
+ "children": [
466
+ {
467
+ "diagnostics": [
468
+ {
469
+ "op": "not-found",
470
+ "text": "312e322e332e34"
471
+ }
472
+ ],
473
+ "exports": [],
474
+ "result": 0
475
+ }
476
+ ],
477
+ "count": 2,
478
+ "events": [
479
+ {
480
+ "op": "remove",
481
+ "text": "312e322e332e34"
482
+ }
483
+ ],
484
+ "ring": 4294967295,
485
+ "rows": [
486
+ [
487
+ 4294967295,
488
+ 4294967295,
489
+ 9
490
+ ],
491
+ [
492
+ 0,
493
+ 0,
494
+ 10
495
+ ]
496
+ ],
497
+ "selector": 0
498
+ }
499
+ },
500
+ {
501
+ "rust": {
502
+ "children": [
503
+ {
504
+ "diagnostics": [
505
+ {
506
+ "op": "not-found",
507
+ "text": "322e332e342e35"
508
+ }
509
+ ],
510
+ "exports": [],
511
+ "result": 0
512
+ }
513
+ ],
514
+ "count": 2,
515
+ "events": [
516
+ {
517
+ "op": "remove",
518
+ "text": "322e332e342e35"
519
+ }
520
+ ],
521
+ "ring": 4294967295,
522
+ "rows": [
523
+ [
524
+ 4294967295,
525
+ 67305985,
526
+ 7
527
+ ],
528
+ [
529
+ 4294967295,
530
+ 67305985,
531
+ 8
532
+ ]
533
+ ],
534
+ "selector": 0
535
+ },
536
+ "source": {
537
+ "children": [
538
+ {
539
+ "diagnostics": [
540
+ {
541
+ "op": "not-found",
542
+ "text": "322e332e342e35"
543
+ }
544
+ ],
545
+ "exports": [],
546
+ "result": 0
547
+ }
548
+ ],
549
+ "count": 2,
550
+ "events": [
551
+ {
552
+ "op": "remove",
553
+ "text": "322e332e342e35"
554
+ }
555
+ ],
556
+ "ring": 4294967295,
557
+ "rows": [
558
+ [
559
+ 4294967295,
560
+ 67305985,
561
+ 7
562
+ ],
563
+ [
564
+ 4294967295,
565
+ 67305985,
566
+ 8
567
+ ]
568
+ ],
569
+ "selector": 0
570
+ }
571
+ },
572
+ {
573
+ "rust": {
574
+ "children": [
575
+ {
576
+ "diagnostics": [
577
+ {
578
+ "op": "not-found",
579
+ "text": "322e332e342e35"
580
+ }
581
+ ],
582
+ "exports": [],
583
+ "result": 0
584
+ }
585
+ ],
586
+ "count": 2,
587
+ "events": [
588
+ {
589
+ "op": "remove",
590
+ "text": "322e332e342e35"
591
+ }
592
+ ],
593
+ "ring": 4294967295,
594
+ "rows": [
595
+ [
596
+ 4294967295,
597
+ 4294967295,
598
+ 9
599
+ ],
600
+ [
601
+ 0,
602
+ 0,
603
+ 10
604
+ ]
605
+ ],
606
+ "selector": 0
607
+ },
608
+ "source": {
609
+ "children": [
610
+ {
611
+ "diagnostics": [
612
+ {
613
+ "op": "not-found",
614
+ "text": "322e332e342e35"
615
+ }
616
+ ],
617
+ "exports": [],
618
+ "result": 0
619
+ }
620
+ ],
621
+ "count": 2,
622
+ "events": [
623
+ {
624
+ "op": "remove",
625
+ "text": "322e332e342e35"
626
+ }
627
+ ],
628
+ "ring": 4294967295,
629
+ "rows": [
630
+ [
631
+ 4294967295,
632
+ 4294967295,
633
+ 9
634
+ ],
635
+ [
636
+ 0,
637
+ 0,
638
+ 10
639
+ ]
640
+ ],
641
+ "selector": 0
642
+ }
643
+ },
644
+ {
645
+ "rust": {
646
+ "children": [
647
+ {
648
+ "diagnostics": [
649
+ {
650
+ "op": "not-found",
651
+ "text": "322e332e342e35"
652
+ }
653
+ ],
654
+ "exports": [],
655
+ "result": 0
656
+ }
657
+ ],
658
+ "count": 2,
659
+ "events": [
660
+ {
661
+ "op": "remove",
662
+ "text": "322e332e342e35"
663
+ }
664
+ ],
665
+ "ring": 4294967295,
666
+ "rows": [
667
+ [
668
+ 4294967295,
669
+ 67305985,
670
+ 7
671
+ ],
672
+ [
673
+ 4294967295,
674
+ 67305985,
675
+ 8
676
+ ]
677
+ ],
678
+ "selector": 0
679
+ },
680
+ "source": {
681
+ "children": [
682
+ {
683
+ "diagnostics": [
684
+ {
685
+ "op": "not-found",
686
+ "text": "322e332e342e35"
687
+ }
688
+ ],
689
+ "exports": [],
690
+ "result": 0
691
+ }
692
+ ],
693
+ "count": 2,
694
+ "events": [
695
+ {
696
+ "op": "remove",
697
+ "text": "322e332e342e35"
698
+ }
699
+ ],
700
+ "ring": 4294967295,
701
+ "rows": [
702
+ [
703
+ 4294967295,
704
+ 67305985,
705
+ 7
706
+ ],
707
+ [
708
+ 4294967295,
709
+ 67305985,
710
+ 8
711
+ ]
712
+ ],
713
+ "selector": 0
714
+ }
715
+ },
716
+ {
717
+ "rust": {
718
+ "children": [
719
+ {
720
+ "diagnostics": [
721
+ {
722
+ "op": "not-found",
723
+ "text": "322e332e342e35"
724
+ }
725
+ ],
726
+ "exports": [],
727
+ "result": 0
728
+ }
729
+ ],
730
+ "count": 2,
731
+ "events": [
732
+ {
733
+ "op": "remove",
734
+ "text": "322e332e342e35"
735
+ }
736
+ ],
737
+ "ring": 4294967295,
738
+ "rows": [
739
+ [
740
+ 4294967295,
741
+ 4294967295,
742
+ 9
743
+ ],
744
+ [
745
+ 0,
746
+ 0,
747
+ 10
748
+ ]
749
+ ],
750
+ "selector": 0
751
+ },
752
+ "source": {
753
+ "children": [
754
+ {
755
+ "diagnostics": [
756
+ {
757
+ "op": "not-found",
758
+ "text": "322e332e342e35"
759
+ }
760
+ ],
761
+ "exports": [],
762
+ "result": 0
763
+ }
764
+ ],
765
+ "count": 2,
766
+ "events": [
767
+ {
768
+ "op": "remove",
769
+ "text": "322e332e342e35"
770
+ }
771
+ ],
772
+ "ring": 4294967295,
773
+ "rows": [
774
+ [
775
+ 4294967295,
776
+ 4294967295,
777
+ 9
778
+ ],
779
+ [
780
+ 0,
781
+ 0,
782
+ 10
783
+ ]
784
+ ],
785
+ "selector": 0
786
+ }
787
+ },
788
+ {
789
+ "rust": {
790
+ "children": [
791
+ {
792
+ "diagnostics": [
793
+ {
794
+ "op": "bad-address",
795
+ "text": "626164"
796
+ }
797
+ ],
798
+ "exports": [],
799
+ "result": 0
800
+ }
801
+ ],
802
+ "count": 2,
803
+ "events": [
804
+ {
805
+ "op": "remove",
806
+ "text": "626164"
807
+ }
808
+ ],
809
+ "ring": 4294967295,
810
+ "rows": [
811
+ [
812
+ 4294967295,
813
+ 67305985,
814
+ 7
815
+ ],
816
+ [
817
+ 4294967295,
818
+ 67305985,
819
+ 8
820
+ ]
821
+ ],
822
+ "selector": 0
823
+ },
824
+ "source": {
825
+ "children": [
826
+ {
827
+ "diagnostics": [
828
+ {
829
+ "op": "bad-address",
830
+ "text": "626164"
831
+ }
832
+ ],
833
+ "exports": [],
834
+ "result": 0
835
+ }
836
+ ],
837
+ "count": 2,
838
+ "events": [
839
+ {
840
+ "op": "remove",
841
+ "text": "626164"
842
+ }
843
+ ],
844
+ "ring": 4294967295,
845
+ "rows": [
846
+ [
847
+ 4294967295,
848
+ 67305985,
849
+ 7
850
+ ],
851
+ [
852
+ 4294967295,
853
+ 67305985,
854
+ 8
855
+ ]
856
+ ],
857
+ "selector": 0
858
+ }
859
+ },
860
+ {
861
+ "rust": {
862
+ "children": [
863
+ {
864
+ "diagnostics": [
865
+ {
866
+ "op": "bad-address",
867
+ "text": "626164"
868
+ }
869
+ ],
870
+ "exports": [],
871
+ "result": 0
872
+ }
873
+ ],
874
+ "count": 2,
875
+ "events": [
876
+ {
877
+ "op": "remove",
878
+ "text": "626164"
879
+ }
880
+ ],
881
+ "ring": 4294967295,
882
+ "rows": [
883
+ [
884
+ 4294967295,
885
+ 4294967295,
886
+ 9
887
+ ],
888
+ [
889
+ 0,
890
+ 0,
891
+ 10
892
+ ]
893
+ ],
894
+ "selector": 0
895
+ },
896
+ "source": {
897
+ "children": [
898
+ {
899
+ "diagnostics": [
900
+ {
901
+ "op": "bad-address",
902
+ "text": "626164"
903
+ }
904
+ ],
905
+ "exports": [],
906
+ "result": 0
907
+ }
908
+ ],
909
+ "count": 2,
910
+ "events": [
911
+ {
912
+ "op": "remove",
913
+ "text": "626164"
914
+ }
915
+ ],
916
+ "ring": 4294967295,
917
+ "rows": [
918
+ [
919
+ 4294967295,
920
+ 4294967295,
921
+ 9
922
+ ],
923
+ [
924
+ 0,
925
+ 0,
926
+ 10
927
+ ]
928
+ ],
929
+ "selector": 0
930
+ }
931
+ },
932
+ {
933
+ "rust": {
934
+ "children": [
935
+ {
936
+ "diagnostics": [
937
+ {
938
+ "op": "bad-address",
939
+ "text": "626164"
940
+ }
941
+ ],
942
+ "exports": [],
943
+ "result": 0
944
+ }
945
+ ],
946
+ "count": 2,
947
+ "events": [
948
+ {
949
+ "op": "remove",
950
+ "text": "626164"
951
+ }
952
+ ],
953
+ "ring": 4294967295,
954
+ "rows": [
955
+ [
956
+ 4294967295,
957
+ 67305985,
958
+ 7
959
+ ],
960
+ [
961
+ 4294967295,
962
+ 67305985,
963
+ 8
964
+ ]
965
+ ],
966
+ "selector": 0
967
+ },
968
+ "source": {
969
+ "children": [
970
+ {
971
+ "diagnostics": [
972
+ {
973
+ "op": "bad-address",
974
+ "text": "626164"
975
+ }
976
+ ],
977
+ "exports": [],
978
+ "result": 0
979
+ }
980
+ ],
981
+ "count": 2,
982
+ "events": [
983
+ {
984
+ "op": "remove",
985
+ "text": "626164"
986
+ }
987
+ ],
988
+ "ring": 4294967295,
989
+ "rows": [
990
+ [
991
+ 4294967295,
992
+ 67305985,
993
+ 7
994
+ ],
995
+ [
996
+ 4294967295,
997
+ 67305985,
998
+ 8
999
+ ]
1000
+ ],
1001
+ "selector": 0
1002
+ }
1003
+ },
1004
+ {
1005
+ "rust": {
1006
+ "children": [
1007
+ {
1008
+ "diagnostics": [
1009
+ {
1010
+ "op": "bad-address",
1011
+ "text": "626164"
1012
+ }
1013
+ ],
1014
+ "exports": [],
1015
+ "result": 0
1016
+ }
1017
+ ],
1018
+ "count": 2,
1019
+ "events": [
1020
+ {
1021
+ "op": "remove",
1022
+ "text": "626164"
1023
+ }
1024
+ ],
1025
+ "ring": 4294967295,
1026
+ "rows": [
1027
+ [
1028
+ 4294967295,
1029
+ 4294967295,
1030
+ 9
1031
+ ],
1032
+ [
1033
+ 0,
1034
+ 0,
1035
+ 10
1036
+ ]
1037
+ ],
1038
+ "selector": 0
1039
+ },
1040
+ "source": {
1041
+ "children": [
1042
+ {
1043
+ "diagnostics": [
1044
+ {
1045
+ "op": "bad-address",
1046
+ "text": "626164"
1047
+ }
1048
+ ],
1049
+ "exports": [],
1050
+ "result": 0
1051
+ }
1052
+ ],
1053
+ "count": 2,
1054
+ "events": [
1055
+ {
1056
+ "op": "remove",
1057
+ "text": "626164"
1058
+ }
1059
+ ],
1060
+ "ring": 4294967295,
1061
+ "rows": [
1062
+ [
1063
+ 4294967295,
1064
+ 4294967295,
1065
+ 9
1066
+ ],
1067
+ [
1068
+ 0,
1069
+ 0,
1070
+ 10
1071
+ ]
1072
+ ],
1073
+ "selector": 0
1074
+ }
1075
+ },
1076
+ {
1077
+ "rust": {
1078
+ "children": [
1079
+ {
1080
+ "diagnostics": [
1081
+ {
1082
+ "op": "not-found",
1083
+ "text": "3235352e3235352e3235352e323535"
1084
+ }
1085
+ ],
1086
+ "exports": [],
1087
+ "result": 0
1088
+ }
1089
+ ],
1090
+ "count": 2,
1091
+ "events": [
1092
+ {
1093
+ "op": "remove",
1094
+ "text": "3235352e3235352e3235352e323535"
1095
+ }
1096
+ ],
1097
+ "ring": 4294967295,
1098
+ "rows": [
1099
+ [
1100
+ 4294967295,
1101
+ 67305985,
1102
+ 7
1103
+ ],
1104
+ [
1105
+ 4294967295,
1106
+ 67305985,
1107
+ 8
1108
+ ]
1109
+ ],
1110
+ "selector": 0
1111
+ },
1112
+ "source": {
1113
+ "children": [
1114
+ {
1115
+ "diagnostics": [
1116
+ {
1117
+ "op": "not-found",
1118
+ "text": "3235352e3235352e3235352e323535"
1119
+ }
1120
+ ],
1121
+ "exports": [],
1122
+ "result": 0
1123
+ }
1124
+ ],
1125
+ "count": 2,
1126
+ "events": [
1127
+ {
1128
+ "op": "remove",
1129
+ "text": "3235352e3235352e3235352e323535"
1130
+ }
1131
+ ],
1132
+ "ring": 4294967295,
1133
+ "rows": [
1134
+ [
1135
+ 4294967295,
1136
+ 67305985,
1137
+ 7
1138
+ ],
1139
+ [
1140
+ 4294967295,
1141
+ 67305985,
1142
+ 8
1143
+ ]
1144
+ ],
1145
+ "selector": 0
1146
+ }
1147
+ },
1148
+ {
1149
+ "rust": {
1150
+ "children": [
1151
+ {
1152
+ "diagnostics": [
1153
+ {
1154
+ "op": "removed"
1155
+ }
1156
+ ],
1157
+ "exports": [
1158
+ 252500
1159
+ ],
1160
+ "result": 1
1161
+ }
1162
+ ],
1163
+ "count": 2,
1164
+ "events": [
1165
+ {
1166
+ "op": "remove",
1167
+ "text": "3235352e3235352e3235352e323535"
1168
+ }
1169
+ ],
1170
+ "ring": 4294967295,
1171
+ "rows": [
1172
+ [
1173
+ 4294967295,
1174
+ 4294967295,
1175
+ 9
1176
+ ],
1177
+ [
1178
+ 0,
1179
+ 0,
1180
+ 10
1181
+ ]
1182
+ ],
1183
+ "selector": 0
1184
+ },
1185
+ "source": {
1186
+ "children": [
1187
+ {
1188
+ "diagnostics": [
1189
+ {
1190
+ "op": "removed"
1191
+ }
1192
+ ],
1193
+ "exports": [
1194
+ 252500
1195
+ ],
1196
+ "result": 1
1197
+ }
1198
+ ],
1199
+ "count": 2,
1200
+ "events": [
1201
+ {
1202
+ "op": "remove",
1203
+ "text": "3235352e3235352e3235352e323535"
1204
+ }
1205
+ ],
1206
+ "ring": 4294967295,
1207
+ "rows": [
1208
+ [
1209
+ 4294967295,
1210
+ 4294967295,
1211
+ 9
1212
+ ],
1213
+ [
1214
+ 0,
1215
+ 0,
1216
+ 10
1217
+ ]
1218
+ ],
1219
+ "selector": 0
1220
+ }
1221
+ },
1222
+ {
1223
+ "rust": {
1224
+ "children": [
1225
+ {
1226
+ "diagnostics": [
1227
+ {
1228
+ "op": "not-found",
1229
+ "text": "3235352e3235352e3235352e323535"
1230
+ }
1231
+ ],
1232
+ "exports": [],
1233
+ "result": 0
1234
+ }
1235
+ ],
1236
+ "count": 2,
1237
+ "events": [
1238
+ {
1239
+ "op": "remove",
1240
+ "text": "3235352e3235352e3235352e323535"
1241
+ }
1242
+ ],
1243
+ "ring": 4294967295,
1244
+ "rows": [
1245
+ [
1246
+ 4294967295,
1247
+ 67305985,
1248
+ 7
1249
+ ],
1250
+ [
1251
+ 4294967295,
1252
+ 67305985,
1253
+ 8
1254
+ ]
1255
+ ],
1256
+ "selector": 0
1257
+ },
1258
+ "source": {
1259
+ "children": [
1260
+ {
1261
+ "diagnostics": [
1262
+ {
1263
+ "op": "not-found",
1264
+ "text": "3235352e3235352e3235352e323535"
1265
+ }
1266
+ ],
1267
+ "exports": [],
1268
+ "result": 0
1269
+ }
1270
+ ],
1271
+ "count": 2,
1272
+ "events": [
1273
+ {
1274
+ "op": "remove",
1275
+ "text": "3235352e3235352e3235352e323535"
1276
+ }
1277
+ ],
1278
+ "ring": 4294967295,
1279
+ "rows": [
1280
+ [
1281
+ 4294967295,
1282
+ 67305985,
1283
+ 7
1284
+ ],
1285
+ [
1286
+ 4294967295,
1287
+ 67305985,
1288
+ 8
1289
+ ]
1290
+ ],
1291
+ "selector": 0
1292
+ }
1293
+ },
1294
+ {
1295
+ "rust": {
1296
+ "children": [
1297
+ {
1298
+ "diagnostics": [
1299
+ {
1300
+ "op": "removed"
1301
+ }
1302
+ ],
1303
+ "exports": [
1304
+ 252500
1305
+ ],
1306
+ "result": 1
1307
+ }
1308
+ ],
1309
+ "count": 2,
1310
+ "events": [
1311
+ {
1312
+ "op": "remove",
1313
+ "text": "3235352e3235352e3235352e323535"
1314
+ }
1315
+ ],
1316
+ "ring": 4294967295,
1317
+ "rows": [
1318
+ [
1319
+ 4294967295,
1320
+ 4294967295,
1321
+ 9
1322
+ ],
1323
+ [
1324
+ 0,
1325
+ 0,
1326
+ 10
1327
+ ]
1328
+ ],
1329
+ "selector": 0
1330
+ },
1331
+ "source": {
1332
+ "children": [
1333
+ {
1334
+ "diagnostics": [
1335
+ {
1336
+ "op": "removed"
1337
+ }
1338
+ ],
1339
+ "exports": [
1340
+ 252500
1341
+ ],
1342
+ "result": 1
1343
+ }
1344
+ ],
1345
+ "count": 2,
1346
+ "events": [
1347
+ {
1348
+ "op": "remove",
1349
+ "text": "3235352e3235352e3235352e323535"
1350
+ }
1351
+ ],
1352
+ "ring": 4294967295,
1353
+ "rows": [
1354
+ [
1355
+ 4294967295,
1356
+ 4294967295,
1357
+ 9
1358
+ ],
1359
+ [
1360
+ 0,
1361
+ 0,
1362
+ 10
1363
+ ]
1364
+ ],
1365
+ "selector": 0
1366
+ }
1367
+ },
1368
+ {
1369
+ "rust": {
1370
+ "children": [
1371
+ {
1372
+ "diagnostics": [
1373
+ {
1374
+ "op": "not-found",
1375
+ "text": "2a"
1376
+ }
1377
+ ],
1378
+ "exports": [],
1379
+ "result": 0
1380
+ }
1381
+ ],
1382
+ "count": 2,
1383
+ "events": [
1384
+ {
1385
+ "op": "remove",
1386
+ "text": "2a"
1387
+ }
1388
+ ],
1389
+ "ring": 4294967295,
1390
+ "rows": [
1391
+ [
1392
+ 4294967295,
1393
+ 67305985,
1394
+ 7
1395
+ ],
1396
+ [
1397
+ 4294967295,
1398
+ 67305985,
1399
+ 8
1400
+ ]
1401
+ ],
1402
+ "selector": 0
1403
+ },
1404
+ "source": {
1405
+ "children": [
1406
+ {
1407
+ "diagnostics": [
1408
+ {
1409
+ "op": "not-found",
1410
+ "text": "2a"
1411
+ }
1412
+ ],
1413
+ "exports": [],
1414
+ "result": 0
1415
+ }
1416
+ ],
1417
+ "count": 2,
1418
+ "events": [
1419
+ {
1420
+ "op": "remove",
1421
+ "text": "2a"
1422
+ }
1423
+ ],
1424
+ "ring": 4294967295,
1425
+ "rows": [
1426
+ [
1427
+ 4294967295,
1428
+ 67305985,
1429
+ 7
1430
+ ],
1431
+ [
1432
+ 4294967295,
1433
+ 67305985,
1434
+ 8
1435
+ ]
1436
+ ],
1437
+ "selector": 0
1438
+ }
1439
+ },
1440
+ {
1441
+ "rust": {
1442
+ "children": [
1443
+ {
1444
+ "diagnostics": [
1445
+ {
1446
+ "op": "removed"
1447
+ }
1448
+ ],
1449
+ "exports": [
1450
+ 252500
1451
+ ],
1452
+ "result": 1
1453
+ }
1454
+ ],
1455
+ "count": 2,
1456
+ "events": [
1457
+ {
1458
+ "op": "remove",
1459
+ "text": "2a"
1460
+ }
1461
+ ],
1462
+ "ring": 4294967295,
1463
+ "rows": [
1464
+ [
1465
+ 4294967295,
1466
+ 4294967295,
1467
+ 9
1468
+ ],
1469
+ [
1470
+ 0,
1471
+ 4294967295,
1472
+ 10
1473
+ ]
1474
+ ],
1475
+ "selector": 0
1476
+ },
1477
+ "source": {
1478
+ "children": [
1479
+ {
1480
+ "diagnostics": [
1481
+ {
1482
+ "op": "removed"
1483
+ }
1484
+ ],
1485
+ "exports": [
1486
+ 252500
1487
+ ],
1488
+ "result": 1
1489
+ }
1490
+ ],
1491
+ "count": 2,
1492
+ "events": [
1493
+ {
1494
+ "op": "remove",
1495
+ "text": "2a"
1496
+ }
1497
+ ],
1498
+ "ring": 4294967295,
1499
+ "rows": [
1500
+ [
1501
+ 4294967295,
1502
+ 4294967295,
1503
+ 9
1504
+ ],
1505
+ [
1506
+ 0,
1507
+ 4294967295,
1508
+ 10
1509
+ ]
1510
+ ],
1511
+ "selector": 0
1512
+ }
1513
+ },
1514
+ {
1515
+ "rust": {
1516
+ "children": [
1517
+ {
1518
+ "diagnostics": [
1519
+ {
1520
+ "op": "not-found",
1521
+ "text": "2a"
1522
+ }
1523
+ ],
1524
+ "exports": [],
1525
+ "result": 0
1526
+ }
1527
+ ],
1528
+ "count": 2,
1529
+ "events": [
1530
+ {
1531
+ "op": "remove",
1532
+ "text": "2a"
1533
+ }
1534
+ ],
1535
+ "ring": 4294967295,
1536
+ "rows": [
1537
+ [
1538
+ 4294967295,
1539
+ 67305985,
1540
+ 7
1541
+ ],
1542
+ [
1543
+ 4294967295,
1544
+ 67305985,
1545
+ 8
1546
+ ]
1547
+ ],
1548
+ "selector": 0
1549
+ },
1550
+ "source": {
1551
+ "children": [
1552
+ {
1553
+ "diagnostics": [
1554
+ {
1555
+ "op": "not-found",
1556
+ "text": "2a"
1557
+ }
1558
+ ],
1559
+ "exports": [],
1560
+ "result": 0
1561
+ }
1562
+ ],
1563
+ "count": 2,
1564
+ "events": [
1565
+ {
1566
+ "op": "remove",
1567
+ "text": "2a"
1568
+ }
1569
+ ],
1570
+ "ring": 4294967295,
1571
+ "rows": [
1572
+ [
1573
+ 4294967295,
1574
+ 67305985,
1575
+ 7
1576
+ ],
1577
+ [
1578
+ 4294967295,
1579
+ 67305985,
1580
+ 8
1581
+ ]
1582
+ ],
1583
+ "selector": 0
1584
+ }
1585
+ },
1586
+ {
1587
+ "rust": {
1588
+ "children": [
1589
+ {
1590
+ "diagnostics": [
1591
+ {
1592
+ "op": "removed"
1593
+ }
1594
+ ],
1595
+ "exports": [
1596
+ 252500
1597
+ ],
1598
+ "result": 1
1599
+ }
1600
+ ],
1601
+ "count": 2,
1602
+ "events": [
1603
+ {
1604
+ "op": "remove",
1605
+ "text": "2a"
1606
+ }
1607
+ ],
1608
+ "ring": 4294967295,
1609
+ "rows": [
1610
+ [
1611
+ 4294967295,
1612
+ 4294967295,
1613
+ 9
1614
+ ],
1615
+ [
1616
+ 0,
1617
+ 4294967295,
1618
+ 10
1619
+ ]
1620
+ ],
1621
+ "selector": 0
1622
+ },
1623
+ "source": {
1624
+ "children": [
1625
+ {
1626
+ "diagnostics": [
1627
+ {
1628
+ "op": "removed"
1629
+ }
1630
+ ],
1631
+ "exports": [
1632
+ 252500
1633
+ ],
1634
+ "result": 1
1635
+ }
1636
+ ],
1637
+ "count": 2,
1638
+ "events": [
1639
+ {
1640
+ "op": "remove",
1641
+ "text": "2a"
1642
+ }
1643
+ ],
1644
+ "ring": 4294967295,
1645
+ "rows": [
1646
+ [
1647
+ 4294967295,
1648
+ 4294967295,
1649
+ 9
1650
+ ],
1651
+ [
1652
+ 0,
1653
+ 4294967295,
1654
+ 10
1655
+ ]
1656
+ ],
1657
+ "selector": 0
1658
+ }
1659
+ }
1660
+ ],
1661
+ "source_report": "docs/research/qvm-filter-remove-command.json",
1662
+ "source_report_sha256": "6c96500920fc93f0b8d19133341317dd264808229ed21d32220684b2849d2496"
1663
+ }
docs/research/rust-health-impulse.json CHANGED
@@ -2985,7 +2985,7 @@
2985
  "exit_code": 2
2986
  }
2987
  ],
2988
- "rust_unit_tests": 211,
2989
  "source_report": "docs/research/qvm-health-impulse.json",
2990
  "source_report_sha256": "625fd8064004ea6dbdf398d51d0af844d9c635ff04c0a0790886dddb6ab81e71"
2991
  }
 
2985
  "exit_code": 2
2986
  }
2987
  ],
2988
+ "rust_unit_tests": 213,
2989
  "source_report": "docs/research/qvm-health-impulse.json",
2990
  "source_report_sha256": "625fd8064004ea6dbdf398d51d0af844d9c635ff04c0a0790886dddb6ab81e71"
2991
  }
scripts/analyze_rust_filter_remove_command.py ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Compare recovered Rust policy with original QVM fixtures."""
2
+ import hashlib,json,os,subprocess
3
+ from pathlib import Path
4
+ from analyze_qvm import write_json
5
+ from rust_lifecycle_support import result
6
+
7
+ def main():
8
+ subprocess.run(['cargo','build','--offline','--package','urt-gameplay','--bin','urt-filter-commands'],check=True,capture_output=True)
9
+ binary=Path(os.environ.get('CARGO_TARGET_DIR','target'))/'debug'/'urt-filter-commands'
10
+ path=Path('docs/research/qvm-filter-remove-command.json');data=path.read_bytes();probes=[]
11
+ for p in json.loads(data)['probes']:
12
+ probes.append(dict(source={k:p[k] for k in ['events', 'children', 'ring', 'selector', 'count', 'rows']},rust=result(binary,'remove',encode(p['input']))))
13
+ write_json(Path('docs/research/rust-filter-remove-command.json'),dict(source_report=str(path),source_report_sha256=hashlib.sha256(data).hexdigest(),probes=probes,limits='Finite source/Rust contract parity; native time/file/network replies remain supplied or captured.'))
14
+
15
+ def encode(a):
16
+ t=bytes.fromhex(a['text']);return [a['issuer'],len(a['rows']),len(t),*t,*[v for r in a['rows'] for v in r]]
17
+ if __name__=='__main__':main()
scripts/test_rust_filter_remove_command.py ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ import hashlib,json,unittest
2
+ from pathlib import Path
3
+ class PortTests(unittest.TestCase):
4
+ def test_original_parity(self):
5
+ r=json.loads(Path('docs/research/rust-filter-remove-command.json').read_text());self.assertGreaterEqual(len(r['probes']),12)
6
+ for p in r['probes']:self.assertEqual(p['source'],p['rust'])
7
+ def test_identity(self):
8
+ r=json.loads(Path('docs/research/rust-filter-remove-command.json').read_text());self.assertEqual(hashlib.sha256(Path(r['source_report']).read_bytes()).hexdigest(),r['source_report_sha256'])
9
+ if __name__=='__main__':unittest.main()
xtask/checks.tsv CHANGED
@@ -3332,3 +3332,21 @@ report scripts/analyze_qvm_filter_remove_command.py docs/research/qvm-filter-rem
3332
  edge docs/research/qvm-filter-remove-command.json scripts/test_qvm_filter_remove_command.py
3333
  group qvm-filter-remove-command scripts/analyze_qvm_filter_remove_command.py
3334
  edge scripts/analyze_qvm_filter_remove_command.py scripts/analyze_qvm_resumer_audit.py
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3332
  edge docs/research/qvm-filter-remove-command.json scripts/test_qvm_filter_remove_command.py
3333
  group qvm-filter-remove-command scripts/analyze_qvm_filter_remove_command.py
3334
  edge scripts/analyze_qvm_filter_remove_command.py scripts/analyze_qvm_resumer_audit.py
3335
+ report scripts/analyze_rust_filter_remove_command.py docs/research/rust-filter-remove-command.json
3336
+ edge docs/research/rust-filter-remove-command.json scripts/test_rust_filter_remove_command.py
3337
+ group rust-filter-remove-command scripts/analyze_rust_filter_remove_command.py
3338
+ edge scripts/analyze_rust_filter_remove_command.py scripts/analyze_qvm_resumer_audit.py
3339
+ edge Cargo.toml scripts/analyze_rust_filter_remove_command.py
3340
+ edge Cargo.lock scripts/analyze_rust_filter_remove_command.py
3341
+ edge crates/urt-gameplay/Cargo.toml scripts/analyze_rust_filter_remove_command.py
3342
+ edge crates/urt-gameplay/src/lib.rs scripts/analyze_rust_filter_remove_command.py
3343
+ edge crates/urt-gameplay/src/filter_loading.rs scripts/analyze_rust_filter_remove_command.py
3344
+ edge crates/urt-gameplay/src/filter_lifecycle.rs scripts/analyze_rust_filter_remove_command.py
3345
+ edge crates/urt-gameplay/src/native_policy.rs scripts/analyze_rust_filter_remove_command.py
3346
+ edge crates/urt-gameplay/src/bin/urt-filter-loading.rs scripts/analyze_rust_filter_remove_command.py
3347
+ edge crates/urt-gameplay/src/qvm_format.rs scripts/analyze_rust_filter_remove_command.py
3348
+ edge docs/research/qvm-filter-remove-command.json scripts/analyze_rust_filter_remove_command.py
3349
+ group rust-filter-remove-command scripts/analyze_rust_health_impulse.py
3350
+ group gameplay scripts/analyze_rust_filter_remove_command.py
3351
+ edge crates/urt-gameplay/src/filter_commands.rs scripts/analyze_rust_filter_remove_command.py
3352
+ edge crates/urt-gameplay/src/bin/urt-filter-commands.rs scripts/analyze_rust_filter_remove_command.py