nmarshall commited on
Commit
a25d1fb
·
1 Parent(s): 0960409

gameplay: port exact-match filter removal

Browse files
crates/urt-gameplay/src/bin/urt-filter-policy.rs CHANGED
@@ -20,23 +20,70 @@ fn export_json(p: Option<FilterExport>) -> String {
20
  ),
21
  }
22
  }
23
- fn main() {
24
- let mut args = std::env::args().skip(1);
25
- let kind = args.next().unwrap();
26
- let w: Vec<u32> = args.map(|s| s.parse().unwrap()).collect();
27
- let n = w[0] as usize;
28
- let handle = w[1];
29
- assert_eq!(w.len(), 2 + 3 * n);
30
- let rows: Vec<_> = w[2..]
31
- .chunks_exact(3)
32
  .map(|r| FilterRecord {
33
  mask: r[0],
34
  comparison: r[1],
35
  metadata: r[2],
36
  })
37
- .collect();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
  match kind.as_str() {
39
- "export" => println!("{}", export_json(export_filters(&rows, handle).unwrap())),
 
 
 
40
  _ => panic!("unknown policy"),
41
  }
42
  }
 
20
  ),
21
  }
22
  }
23
+ fn rows(w: &[u32]) -> Vec<FilterRecord> {
24
+ w.chunks_exact(3)
 
 
 
 
 
 
 
25
  .map(|r| FilterRecord {
26
  mask: r[0],
27
  comparison: r[1],
28
  metadata: r[2],
29
  })
30
+ .collect()
31
+ }
32
+ fn rows_json(rows: &[FilterRecord]) -> String {
33
+ format!(
34
+ "[{}]",
35
+ rows.iter()
36
+ .map(|r| format!("[{},{},{}]", r.mask, r.comparison, r.metadata))
37
+ .collect::<Vec<_>>()
38
+ .join(",")
39
+ )
40
+ }
41
+ fn mutation_json(p: FilterMutation, rows: &[FilterRecord], exported: Vec<String>) -> String {
42
+ let notices = p
43
+ .notices
44
+ .iter()
45
+ .map(|n| match n {
46
+ FilterNotice::Removed => "{\"op\":\"removed\"}".into(),
47
+ FilterNotice::BadAddress(t) => {
48
+ format!("{{\"op\":\"bad-address\",\"text\":\"{}\"}}", hex(t))
49
+ }
50
+ FilterNotice::NotFound(t) => {
51
+ format!("{{\"op\":\"not-found\",\"text\":\"{}\"}}", hex(t))
52
+ }
53
+ })
54
+ .collect::<Vec<String>>()
55
+ .join(",");
56
+ format!(
57
+ "{{\"result\":{},\"diagnostics\":[{}],\"exports\":[{}],\"exported\":[{}],\"rows\":{}}}",
58
+ u8::from(p.result),
59
+ notices,
60
+ if p.export { "252500" } else { "" },
61
+ exported.join(","),
62
+ rows_json(rows)
63
+ )
64
+ }
65
+ fn main() {
66
+ let mut args = std::env::args().skip(1);
67
+ let kind = args.next().unwrap();
68
+ let w: Vec<u32> = args.map(|s| s.parse().unwrap()).collect();
69
+ let n = w[0] as usize;
70
+ if kind == "export" {
71
+ assert_eq!(w.len(), 2 + 3 * n);
72
+ println!(
73
+ "{}",
74
+ export_json(export_filters(&rows(&w[2..]), w[1]).unwrap())
75
+ );
76
+ return;
77
+ }
78
+ let l = w[4] as usize;
79
+ let text: Vec<u8> = w[5..5 + l].iter().map(|v| *v as u8).collect();
80
+ assert_eq!(w.len(), 5 + l + 3 * n);
81
+ let mut records = rows(&w[5 + l..]);
82
  match kind.as_str() {
83
+ "remove" => {
84
+ let p = remove_filter(&mut records, &text).unwrap();
85
+ println!("{}", mutation_json(p, &records, vec![]));
86
+ }
87
  _ => panic!("unknown policy"),
88
  }
89
  }
crates/urt-gameplay/src/filter_lifecycle.rs CHANGED
@@ -65,3 +65,78 @@ mod tests {
65
  assert!(export_filters(&vec![row; 4097], 7).is_err());
66
  }
67
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  assert!(export_filters(&vec![row; 4097], 7).is_err());
66
  }
67
  }
68
+
69
+ #[derive(Clone, Debug, PartialEq, Eq)]
70
+ pub enum FilterNotice {
71
+ BadAddress(Vec<u8>),
72
+ NotFound(Vec<u8>),
73
+ Removed,
74
+ }
75
+ #[derive(Clone, Debug, PartialEq, Eq)]
76
+ pub struct FilterMutation {
77
+ pub result: bool,
78
+ pub notices: Vec<FilterNotice>,
79
+ pub export: bool,
80
+ }
81
+ /// Original253296 removes only the first exact mask/comparison pair. The count,
82
+ /// mask and metadata survive; even an already-hole sentinel can match.
83
+ pub fn remove_filter(records: &mut [FilterRecord], text: &[u8]) -> Result<FilterMutation, Error> {
84
+ if records.len() > 4096 {
85
+ return Err(Error::InvalidCount);
86
+ }
87
+ let parsed = crate::native_policy::parse_filter(text)?;
88
+ let mut notices = vec![];
89
+ let mut found = false;
90
+ match parsed {
91
+ Err(remaining) => notices.push(FilterNotice::BadAddress(remaining)),
92
+ Ok((mask, comparison)) => {
93
+ if let Some(row) = records
94
+ .iter_mut()
95
+ .find(|r| r.mask == mask && r.comparison == comparison)
96
+ {
97
+ row.comparison = u32::MAX;
98
+ found = true;
99
+ notices.push(FilterNotice::Removed);
100
+ } else {
101
+ notices.push(FilterNotice::NotFound(
102
+ text.split(|b| *b == 0).next().unwrap_or_default().to_vec(),
103
+ ));
104
+ }
105
+ }
106
+ }
107
+ Ok(FilterMutation {
108
+ result: found,
109
+ notices,
110
+ export: found,
111
+ })
112
+ }
113
+ #[cfg(test)]
114
+ mod removal_tests {
115
+ use super::*;
116
+ #[test]
117
+ fn only_first_duplicate_changes_and_repeated_hole_can_match() {
118
+ let row = FilterRecord {
119
+ mask: u32::MAX,
120
+ comparison: 0x04030201,
121
+ metadata: 9,
122
+ };
123
+ let mut rows = [row, row];
124
+ assert!(remove_filter(&mut rows, b"1.2.3.4").unwrap().export);
125
+ assert_eq!(rows[1], row);
126
+ assert_eq!(rows[0].metadata, 9);
127
+ assert!(remove_filter(&mut rows, b"255.255.255.255").unwrap().result);
128
+ }
129
+ #[test]
130
+ fn unsupported_parser_input_is_atomic() {
131
+ let mut rows = [FilterRecord {
132
+ mask: 7,
133
+ comparison: 8,
134
+ metadata: 9,
135
+ }];
136
+ let before = rows;
137
+ assert!(remove_filter(&mut rows, &[b'1'; 128]).is_err());
138
+ assert_eq!(rows, before);
139
+ assert!(!remove_filter(&mut rows, b"bad").unwrap().export);
140
+ assert_eq!(rows, before);
141
+ }
142
+ }
crates/urt-gameplay/src/native_policy.rs CHANGED
@@ -3131,7 +3131,7 @@ pub struct FilterInsert {
3131
  }
3132
  /// Original252304 safe token subset: missing components remain wildcarded;
3133
  /// a sole * is wildcard, other digit/* tokens use numeric-prefix conversion.
3134
- fn parse_filter(text: &[u8]) -> Result<Result<(u32, u32), Vec<u8>>, Error> {
3135
  let text = cbytes(text);
3136
  if text.len() > 1024 {
3137
  return Err(Error::InvalidInput);
 
3131
  }
3132
  /// Original252304 safe token subset: missing components remain wildcarded;
3133
  /// a sole * is wildcard, other digit/* tokens use numeric-prefix conversion.
3134
+ pub(crate) fn parse_filter(text: &[u8]) -> Result<Result<(u32, u32), Vec<u8>>, Error> {
3135
  let text = cbytes(text);
3136
  if text.len() > 1024 {
3137
  return Err(Error::InvalidInput);
docs/FINDINGS.md CHANGED
@@ -1805,3 +1805,5 @@ RE-934: Actual252500 exports comparison bytes and signed metadata while ignoring
1805
  RE-935: Rust matches all18 original export cases, including mask loss, all-hole truncation, invalid handles and original INT_MIN formatter bytes. Empty tables produce no plan; other tables produce ordered print/open/write/close effects. A4096-row table is bounded by28 bytes per row, below the131072-byte source buffer; unit tests check that maximum and reject4097 rows. Native IO remains an adapter boundary. [Evidence](research/RUST_FILTER_EXPORT.md).
1806
 
1807
  RE-936: Thirty actual253296 cases execute parser252304/37159, scan exact mask/comparison pairs and remove only the first duplicate by storing comparison-1. Mask/metadata/count remain unchanged. Parse failure and no match return0; successful removal prints Removed and requests export. A preexisting comparison-1 record can match255.255.255.255 and report successful removal again. Export is captured in this stage. [Evidence](research/QVM_FILTER_REMOVE.md).
 
 
 
1805
  RE-935: Rust matches all18 original export cases, including mask loss, all-hole truncation, invalid handles and original INT_MIN formatter bytes. Empty tables produce no plan; other tables produce ordered print/open/write/close effects. A4096-row table is bounded by28 bytes per row, below the131072-byte source buffer; unit tests check that maximum and reject4097 rows. Native IO remains an adapter boundary. [Evidence](research/RUST_FILTER_EXPORT.md).
1806
 
1807
  RE-936: Thirty actual253296 cases execute parser252304/37159, scan exact mask/comparison pairs and remove only the first duplicate by storing comparison-1. Mask/metadata/count remain unchanged. Parse failure and no match return0; successful removal prints Removed and requests export. A preexisting comparison-1 record can match255.255.255.255 and report successful removal again. Export is captured in this stage. [Evidence](research/QVM_FILTER_REMOVE.md).
1808
+
1809
+ RE-937: Rust matches all30 original removal cases, retaining first-match ordering, unchanged mask/metadata/count, repeated sentinel matches, parser diagnostics and conditional export requests. Unsupported token domains fail atomically. Unit tests cover duplicate preservation and unsupported input without mutation; native export remains captured at this stage. [Evidence](research/RUST_FILTER_REMOVE.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -1851,3 +1851,5 @@ RE-924–933 completed bounded bot settings, announcement, connect-child composi
1851
  - [x] RE-935 Rust filter export policy and bounded storage ([evidence](research/RUST_FILTER_EXPORT.md)).
1852
 
1853
  - [x] RE-936 Original exact-match filter removal ([evidence](research/QVM_FILTER_REMOVE.md)).
 
 
 
1851
  - [x] RE-935 Rust filter export policy and bounded storage ([evidence](research/RUST_FILTER_EXPORT.md)).
1852
 
1853
  - [x] RE-936 Original exact-match filter removal ([evidence](research/QVM_FILTER_REMOVE.md)).
1854
+
1855
+ - [x] RE-937 Rust exact-match filter removal and diagnostics ([evidence](research/RUST_FILTER_REMOVE.md)).
docs/RESEARCH_LEDGER.md CHANGED
@@ -2409,3 +2409,7 @@ Rust matches all18 original export cases, including mask loss, all-hole truncati
2409
  ## 2026-10-28 — RE-936 Original exact-match filter removal
2410
 
2411
  Thirty actual253296 cases execute parser252304/37159, scan exact mask/comparison pairs and remove only the first duplicate by storing comparison-1. Mask/metadata/count remain unchanged. Parse failure and no match return0; successful removal prints Removed and requests export. A preexisting comparison-1 record can match255.255.255.255 and report successful removal again. Export is captured in this stage. Focused `cargo xtask test-group qvm-filter-remove` 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.
 
 
 
 
 
2409
  ## 2026-10-28 — RE-936 Original exact-match filter removal
2410
 
2411
  Thirty actual253296 cases execute parser252304/37159, scan exact mask/comparison pairs and remove only the first duplicate by storing comparison-1. Mask/metadata/count remain unchanged. Parse failure and no match return0; successful removal prints Removed and requests export. A preexisting comparison-1 record can match255.255.255.255 and report successful removal again. Export is captured in this stage. Focused `cargo xtask test-group qvm-filter-remove` 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.
2412
+
2413
+ ## 2026-10-28 — RE-937 Rust exact-match filter removal and diagnostics
2414
+
2415
+ Rust matches all30 original removal cases, retaining first-match ordering, unchanged mask/metadata/count, repeated sentinel matches, parser diagnostics and conditional export requests. Unsupported token domains fail atomically. Unit tests cover duplicate preservation and unsupported input without mutation; native export remains captured at this stage. Focused `cargo xtask test-group rust-filter-remove` 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
@@ -1888,3 +1888,5 @@ Purpose: turn the supplied installation into an evidence-backed specification of
1888
  - [x] RE-935 Rust filter export policy and bounded storage ([evidence](research/RUST_FILTER_EXPORT.md)).
1889
 
1890
  - [x] RE-936 Original exact-match filter removal ([evidence](research/QVM_FILTER_REMOVE.md)).
 
 
 
1888
  - [x] RE-935 Rust filter export policy and bounded storage ([evidence](research/RUST_FILTER_EXPORT.md)).
1889
 
1890
  - [x] RE-936 Original exact-match filter removal ([evidence](research/QVM_FILTER_REMOVE.md)).
1891
+
1892
+ - [x] RE-937 Rust exact-match filter removal and diagnostics ([evidence](research/RUST_FILTER_REMOVE.md)).
docs/research/README.md CHANGED
@@ -1423,3 +1423,5 @@ The extension collector adds five focused tests for native tail calls, command-r
1423
  - [RE-935: Rust filter export policy and bounded storage](RUST_FILTER_EXPORT.md).
1424
 
1425
  - [RE-936: Original exact-match filter removal](QVM_FILTER_REMOVE.md).
 
 
 
1423
  - [RE-935: Rust filter export policy and bounded storage](RUST_FILTER_EXPORT.md).
1424
 
1425
  - [RE-936: Original exact-match filter removal](QVM_FILTER_REMOVE.md).
1426
+
1427
+ - [RE-937: Rust exact-match filter removal and diagnostics](RUST_FILTER_REMOVE.md).
docs/research/RUST_FILTER_REMOVE.md ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ # Rust exact-match filter removal and diagnostics
2
+
3
+ RE-937. Focused validation: `cargo xtask test-group rust-filter-remove`. [Machine report](rust-filter-remove.json).
4
+
5
+ Rust matches all30 original removal cases, retaining first-match ordering, unchanged mask/metadata/count, repeated sentinel matches, parser diagnostics and conditional export requests. Unsupported token domains fail atomically. Unit tests cover duplicate preservation and unsupported input without mutation; native export remains captured at this stage.
docs/research/rust-filter-remove.json ADDED
@@ -0,0 +1,1267 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "limits": "Finite recovered policy parity; native filesystem/network effects are not executed.",
3
+ "probes": [
4
+ {
5
+ "rust": {
6
+ "diagnostics": [
7
+ {
8
+ "op": "not-found",
9
+ "text": "312e322e332e34"
10
+ }
11
+ ],
12
+ "exported": [],
13
+ "exports": [],
14
+ "result": 0,
15
+ "rows": []
16
+ },
17
+ "source": {
18
+ "diagnostics": [
19
+ {
20
+ "op": "not-found",
21
+ "text": "312e322e332e34"
22
+ }
23
+ ],
24
+ "exported": [],
25
+ "exports": [],
26
+ "result": 0,
27
+ "rows": []
28
+ }
29
+ },
30
+ {
31
+ "rust": {
32
+ "diagnostics": [
33
+ {
34
+ "op": "not-found",
35
+ "text": "312e2a"
36
+ }
37
+ ],
38
+ "exported": [],
39
+ "exports": [],
40
+ "result": 0,
41
+ "rows": []
42
+ },
43
+ "source": {
44
+ "diagnostics": [
45
+ {
46
+ "op": "not-found",
47
+ "text": "312e2a"
48
+ }
49
+ ],
50
+ "exported": [],
51
+ "exports": [],
52
+ "result": 0,
53
+ "rows": []
54
+ }
55
+ },
56
+ {
57
+ "rust": {
58
+ "diagnostics": [
59
+ {
60
+ "op": "not-found",
61
+ "text": "2a"
62
+ }
63
+ ],
64
+ "exported": [],
65
+ "exports": [],
66
+ "result": 0,
67
+ "rows": []
68
+ },
69
+ "source": {
70
+ "diagnostics": [
71
+ {
72
+ "op": "not-found",
73
+ "text": "2a"
74
+ }
75
+ ],
76
+ "exported": [],
77
+ "exports": [],
78
+ "result": 0,
79
+ "rows": []
80
+ }
81
+ },
82
+ {
83
+ "rust": {
84
+ "diagnostics": [
85
+ {
86
+ "op": "bad-address",
87
+ "text": "626164"
88
+ }
89
+ ],
90
+ "exported": [],
91
+ "exports": [],
92
+ "result": 0,
93
+ "rows": []
94
+ },
95
+ "source": {
96
+ "diagnostics": [
97
+ {
98
+ "op": "bad-address",
99
+ "text": "626164"
100
+ }
101
+ ],
102
+ "exported": [],
103
+ "exports": [],
104
+ "result": 0,
105
+ "rows": []
106
+ }
107
+ },
108
+ {
109
+ "rust": {
110
+ "diagnostics": [
111
+ {
112
+ "op": "not-found",
113
+ "text": "3235352e3235352e3235352e323535"
114
+ }
115
+ ],
116
+ "exported": [],
117
+ "exports": [],
118
+ "result": 0,
119
+ "rows": []
120
+ },
121
+ "source": {
122
+ "diagnostics": [
123
+ {
124
+ "op": "not-found",
125
+ "text": "3235352e3235352e3235352e323535"
126
+ }
127
+ ],
128
+ "exported": [],
129
+ "exports": [],
130
+ "result": 0,
131
+ "rows": []
132
+ }
133
+ },
134
+ {
135
+ "rust": {
136
+ "diagnostics": [
137
+ {
138
+ "op": "bad-address",
139
+ "text": ""
140
+ }
141
+ ],
142
+ "exported": [],
143
+ "exports": [],
144
+ "result": 0,
145
+ "rows": []
146
+ },
147
+ "source": {
148
+ "diagnostics": [
149
+ {
150
+ "op": "bad-address",
151
+ "text": ""
152
+ }
153
+ ],
154
+ "exported": [],
155
+ "exports": [],
156
+ "result": 0,
157
+ "rows": []
158
+ }
159
+ },
160
+ {
161
+ "rust": {
162
+ "diagnostics": [
163
+ {
164
+ "op": "removed"
165
+ }
166
+ ],
167
+ "exported": [],
168
+ "exports": [
169
+ 252500
170
+ ],
171
+ "result": 1,
172
+ "rows": [
173
+ [
174
+ 4294967295,
175
+ 4294967295,
176
+ 9
177
+ ]
178
+ ]
179
+ },
180
+ "source": {
181
+ "diagnostics": [
182
+ {
183
+ "op": "removed"
184
+ }
185
+ ],
186
+ "exported": [],
187
+ "exports": [
188
+ 252500
189
+ ],
190
+ "result": 1,
191
+ "rows": [
192
+ [
193
+ 4294967295,
194
+ 4294967295,
195
+ 9
196
+ ]
197
+ ]
198
+ }
199
+ },
200
+ {
201
+ "rust": {
202
+ "diagnostics": [
203
+ {
204
+ "op": "not-found",
205
+ "text": "312e2a"
206
+ }
207
+ ],
208
+ "exported": [],
209
+ "exports": [],
210
+ "result": 0,
211
+ "rows": [
212
+ [
213
+ 4294967295,
214
+ 67305985,
215
+ 9
216
+ ]
217
+ ]
218
+ },
219
+ "source": {
220
+ "diagnostics": [
221
+ {
222
+ "op": "not-found",
223
+ "text": "312e2a"
224
+ }
225
+ ],
226
+ "exported": [],
227
+ "exports": [],
228
+ "result": 0,
229
+ "rows": [
230
+ [
231
+ 4294967295,
232
+ 67305985,
233
+ 9
234
+ ]
235
+ ]
236
+ }
237
+ },
238
+ {
239
+ "rust": {
240
+ "diagnostics": [
241
+ {
242
+ "op": "not-found",
243
+ "text": "2a"
244
+ }
245
+ ],
246
+ "exported": [],
247
+ "exports": [],
248
+ "result": 0,
249
+ "rows": [
250
+ [
251
+ 4294967295,
252
+ 67305985,
253
+ 9
254
+ ]
255
+ ]
256
+ },
257
+ "source": {
258
+ "diagnostics": [
259
+ {
260
+ "op": "not-found",
261
+ "text": "2a"
262
+ }
263
+ ],
264
+ "exported": [],
265
+ "exports": [],
266
+ "result": 0,
267
+ "rows": [
268
+ [
269
+ 4294967295,
270
+ 67305985,
271
+ 9
272
+ ]
273
+ ]
274
+ }
275
+ },
276
+ {
277
+ "rust": {
278
+ "diagnostics": [
279
+ {
280
+ "op": "bad-address",
281
+ "text": "626164"
282
+ }
283
+ ],
284
+ "exported": [],
285
+ "exports": [],
286
+ "result": 0,
287
+ "rows": [
288
+ [
289
+ 4294967295,
290
+ 67305985,
291
+ 9
292
+ ]
293
+ ]
294
+ },
295
+ "source": {
296
+ "diagnostics": [
297
+ {
298
+ "op": "bad-address",
299
+ "text": "626164"
300
+ }
301
+ ],
302
+ "exported": [],
303
+ "exports": [],
304
+ "result": 0,
305
+ "rows": [
306
+ [
307
+ 4294967295,
308
+ 67305985,
309
+ 9
310
+ ]
311
+ ]
312
+ }
313
+ },
314
+ {
315
+ "rust": {
316
+ "diagnostics": [
317
+ {
318
+ "op": "not-found",
319
+ "text": "3235352e3235352e3235352e323535"
320
+ }
321
+ ],
322
+ "exported": [],
323
+ "exports": [],
324
+ "result": 0,
325
+ "rows": [
326
+ [
327
+ 4294967295,
328
+ 67305985,
329
+ 9
330
+ ]
331
+ ]
332
+ },
333
+ "source": {
334
+ "diagnostics": [
335
+ {
336
+ "op": "not-found",
337
+ "text": "3235352e3235352e3235352e323535"
338
+ }
339
+ ],
340
+ "exported": [],
341
+ "exports": [],
342
+ "result": 0,
343
+ "rows": [
344
+ [
345
+ 4294967295,
346
+ 67305985,
347
+ 9
348
+ ]
349
+ ]
350
+ }
351
+ },
352
+ {
353
+ "rust": {
354
+ "diagnostics": [
355
+ {
356
+ "op": "bad-address",
357
+ "text": ""
358
+ }
359
+ ],
360
+ "exported": [],
361
+ "exports": [],
362
+ "result": 0,
363
+ "rows": [
364
+ [
365
+ 4294967295,
366
+ 67305985,
367
+ 9
368
+ ]
369
+ ]
370
+ },
371
+ "source": {
372
+ "diagnostics": [
373
+ {
374
+ "op": "bad-address",
375
+ "text": ""
376
+ }
377
+ ],
378
+ "exported": [],
379
+ "exports": [],
380
+ "result": 0,
381
+ "rows": [
382
+ [
383
+ 4294967295,
384
+ 67305985,
385
+ 9
386
+ ]
387
+ ]
388
+ }
389
+ },
390
+ {
391
+ "rust": {
392
+ "diagnostics": [
393
+ {
394
+ "op": "removed"
395
+ }
396
+ ],
397
+ "exported": [],
398
+ "exports": [
399
+ 252500
400
+ ],
401
+ "result": 1,
402
+ "rows": [
403
+ [
404
+ 4294967295,
405
+ 4294967295,
406
+ 9
407
+ ],
408
+ [
409
+ 4294967295,
410
+ 67305985,
411
+ 10
412
+ ]
413
+ ]
414
+ },
415
+ "source": {
416
+ "diagnostics": [
417
+ {
418
+ "op": "removed"
419
+ }
420
+ ],
421
+ "exported": [],
422
+ "exports": [
423
+ 252500
424
+ ],
425
+ "result": 1,
426
+ "rows": [
427
+ [
428
+ 4294967295,
429
+ 4294967295,
430
+ 9
431
+ ],
432
+ [
433
+ 4294967295,
434
+ 67305985,
435
+ 10
436
+ ]
437
+ ]
438
+ }
439
+ },
440
+ {
441
+ "rust": {
442
+ "diagnostics": [
443
+ {
444
+ "op": "not-found",
445
+ "text": "312e2a"
446
+ }
447
+ ],
448
+ "exported": [],
449
+ "exports": [],
450
+ "result": 0,
451
+ "rows": [
452
+ [
453
+ 4294967295,
454
+ 67305985,
455
+ 9
456
+ ],
457
+ [
458
+ 4294967295,
459
+ 67305985,
460
+ 10
461
+ ]
462
+ ]
463
+ },
464
+ "source": {
465
+ "diagnostics": [
466
+ {
467
+ "op": "not-found",
468
+ "text": "312e2a"
469
+ }
470
+ ],
471
+ "exported": [],
472
+ "exports": [],
473
+ "result": 0,
474
+ "rows": [
475
+ [
476
+ 4294967295,
477
+ 67305985,
478
+ 9
479
+ ],
480
+ [
481
+ 4294967295,
482
+ 67305985,
483
+ 10
484
+ ]
485
+ ]
486
+ }
487
+ },
488
+ {
489
+ "rust": {
490
+ "diagnostics": [
491
+ {
492
+ "op": "not-found",
493
+ "text": "2a"
494
+ }
495
+ ],
496
+ "exported": [],
497
+ "exports": [],
498
+ "result": 0,
499
+ "rows": [
500
+ [
501
+ 4294967295,
502
+ 67305985,
503
+ 9
504
+ ],
505
+ [
506
+ 4294967295,
507
+ 67305985,
508
+ 10
509
+ ]
510
+ ]
511
+ },
512
+ "source": {
513
+ "diagnostics": [
514
+ {
515
+ "op": "not-found",
516
+ "text": "2a"
517
+ }
518
+ ],
519
+ "exported": [],
520
+ "exports": [],
521
+ "result": 0,
522
+ "rows": [
523
+ [
524
+ 4294967295,
525
+ 67305985,
526
+ 9
527
+ ],
528
+ [
529
+ 4294967295,
530
+ 67305985,
531
+ 10
532
+ ]
533
+ ]
534
+ }
535
+ },
536
+ {
537
+ "rust": {
538
+ "diagnostics": [
539
+ {
540
+ "op": "bad-address",
541
+ "text": "626164"
542
+ }
543
+ ],
544
+ "exported": [],
545
+ "exports": [],
546
+ "result": 0,
547
+ "rows": [
548
+ [
549
+ 4294967295,
550
+ 67305985,
551
+ 9
552
+ ],
553
+ [
554
+ 4294967295,
555
+ 67305985,
556
+ 10
557
+ ]
558
+ ]
559
+ },
560
+ "source": {
561
+ "diagnostics": [
562
+ {
563
+ "op": "bad-address",
564
+ "text": "626164"
565
+ }
566
+ ],
567
+ "exported": [],
568
+ "exports": [],
569
+ "result": 0,
570
+ "rows": [
571
+ [
572
+ 4294967295,
573
+ 67305985,
574
+ 9
575
+ ],
576
+ [
577
+ 4294967295,
578
+ 67305985,
579
+ 10
580
+ ]
581
+ ]
582
+ }
583
+ },
584
+ {
585
+ "rust": {
586
+ "diagnostics": [
587
+ {
588
+ "op": "not-found",
589
+ "text": "3235352e3235352e3235352e323535"
590
+ }
591
+ ],
592
+ "exported": [],
593
+ "exports": [],
594
+ "result": 0,
595
+ "rows": [
596
+ [
597
+ 4294967295,
598
+ 67305985,
599
+ 9
600
+ ],
601
+ [
602
+ 4294967295,
603
+ 67305985,
604
+ 10
605
+ ]
606
+ ]
607
+ },
608
+ "source": {
609
+ "diagnostics": [
610
+ {
611
+ "op": "not-found",
612
+ "text": "3235352e3235352e3235352e323535"
613
+ }
614
+ ],
615
+ "exported": [],
616
+ "exports": [],
617
+ "result": 0,
618
+ "rows": [
619
+ [
620
+ 4294967295,
621
+ 67305985,
622
+ 9
623
+ ],
624
+ [
625
+ 4294967295,
626
+ 67305985,
627
+ 10
628
+ ]
629
+ ]
630
+ }
631
+ },
632
+ {
633
+ "rust": {
634
+ "diagnostics": [
635
+ {
636
+ "op": "bad-address",
637
+ "text": ""
638
+ }
639
+ ],
640
+ "exported": [],
641
+ "exports": [],
642
+ "result": 0,
643
+ "rows": [
644
+ [
645
+ 4294967295,
646
+ 67305985,
647
+ 9
648
+ ],
649
+ [
650
+ 4294967295,
651
+ 67305985,
652
+ 10
653
+ ]
654
+ ]
655
+ },
656
+ "source": {
657
+ "diagnostics": [
658
+ {
659
+ "op": "bad-address",
660
+ "text": ""
661
+ }
662
+ ],
663
+ "exported": [],
664
+ "exports": [],
665
+ "result": 0,
666
+ "rows": [
667
+ [
668
+ 4294967295,
669
+ 67305985,
670
+ 9
671
+ ],
672
+ [
673
+ 4294967295,
674
+ 67305985,
675
+ 10
676
+ ]
677
+ ]
678
+ }
679
+ },
680
+ {
681
+ "rust": {
682
+ "diagnostics": [
683
+ {
684
+ "op": "removed"
685
+ }
686
+ ],
687
+ "exported": [],
688
+ "exports": [
689
+ 252500
690
+ ],
691
+ "result": 1,
692
+ "rows": [
693
+ [
694
+ 255,
695
+ 1,
696
+ 11
697
+ ],
698
+ [
699
+ 4294967295,
700
+ 4294967295,
701
+ 9
702
+ ]
703
+ ]
704
+ },
705
+ "source": {
706
+ "diagnostics": [
707
+ {
708
+ "op": "removed"
709
+ }
710
+ ],
711
+ "exported": [],
712
+ "exports": [
713
+ 252500
714
+ ],
715
+ "result": 1,
716
+ "rows": [
717
+ [
718
+ 255,
719
+ 1,
720
+ 11
721
+ ],
722
+ [
723
+ 4294967295,
724
+ 4294967295,
725
+ 9
726
+ ]
727
+ ]
728
+ }
729
+ },
730
+ {
731
+ "rust": {
732
+ "diagnostics": [
733
+ {
734
+ "op": "removed"
735
+ }
736
+ ],
737
+ "exported": [],
738
+ "exports": [
739
+ 252500
740
+ ],
741
+ "result": 1,
742
+ "rows": [
743
+ [
744
+ 255,
745
+ 4294967295,
746
+ 11
747
+ ],
748
+ [
749
+ 4294967295,
750
+ 67305985,
751
+ 9
752
+ ]
753
+ ]
754
+ },
755
+ "source": {
756
+ "diagnostics": [
757
+ {
758
+ "op": "removed"
759
+ }
760
+ ],
761
+ "exported": [],
762
+ "exports": [
763
+ 252500
764
+ ],
765
+ "result": 1,
766
+ "rows": [
767
+ [
768
+ 255,
769
+ 4294967295,
770
+ 11
771
+ ],
772
+ [
773
+ 4294967295,
774
+ 67305985,
775
+ 9
776
+ ]
777
+ ]
778
+ }
779
+ },
780
+ {
781
+ "rust": {
782
+ "diagnostics": [
783
+ {
784
+ "op": "not-found",
785
+ "text": "2a"
786
+ }
787
+ ],
788
+ "exported": [],
789
+ "exports": [],
790
+ "result": 0,
791
+ "rows": [
792
+ [
793
+ 255,
794
+ 1,
795
+ 11
796
+ ],
797
+ [
798
+ 4294967295,
799
+ 67305985,
800
+ 9
801
+ ]
802
+ ]
803
+ },
804
+ "source": {
805
+ "diagnostics": [
806
+ {
807
+ "op": "not-found",
808
+ "text": "2a"
809
+ }
810
+ ],
811
+ "exported": [],
812
+ "exports": [],
813
+ "result": 0,
814
+ "rows": [
815
+ [
816
+ 255,
817
+ 1,
818
+ 11
819
+ ],
820
+ [
821
+ 4294967295,
822
+ 67305985,
823
+ 9
824
+ ]
825
+ ]
826
+ }
827
+ },
828
+ {
829
+ "rust": {
830
+ "diagnostics": [
831
+ {
832
+ "op": "bad-address",
833
+ "text": "626164"
834
+ }
835
+ ],
836
+ "exported": [],
837
+ "exports": [],
838
+ "result": 0,
839
+ "rows": [
840
+ [
841
+ 255,
842
+ 1,
843
+ 11
844
+ ],
845
+ [
846
+ 4294967295,
847
+ 67305985,
848
+ 9
849
+ ]
850
+ ]
851
+ },
852
+ "source": {
853
+ "diagnostics": [
854
+ {
855
+ "op": "bad-address",
856
+ "text": "626164"
857
+ }
858
+ ],
859
+ "exported": [],
860
+ "exports": [],
861
+ "result": 0,
862
+ "rows": [
863
+ [
864
+ 255,
865
+ 1,
866
+ 11
867
+ ],
868
+ [
869
+ 4294967295,
870
+ 67305985,
871
+ 9
872
+ ]
873
+ ]
874
+ }
875
+ },
876
+ {
877
+ "rust": {
878
+ "diagnostics": [
879
+ {
880
+ "op": "not-found",
881
+ "text": "3235352e3235352e3235352e323535"
882
+ }
883
+ ],
884
+ "exported": [],
885
+ "exports": [],
886
+ "result": 0,
887
+ "rows": [
888
+ [
889
+ 255,
890
+ 1,
891
+ 11
892
+ ],
893
+ [
894
+ 4294967295,
895
+ 67305985,
896
+ 9
897
+ ]
898
+ ]
899
+ },
900
+ "source": {
901
+ "diagnostics": [
902
+ {
903
+ "op": "not-found",
904
+ "text": "3235352e3235352e3235352e323535"
905
+ }
906
+ ],
907
+ "exported": [],
908
+ "exports": [],
909
+ "result": 0,
910
+ "rows": [
911
+ [
912
+ 255,
913
+ 1,
914
+ 11
915
+ ],
916
+ [
917
+ 4294967295,
918
+ 67305985,
919
+ 9
920
+ ]
921
+ ]
922
+ }
923
+ },
924
+ {
925
+ "rust": {
926
+ "diagnostics": [
927
+ {
928
+ "op": "bad-address",
929
+ "text": ""
930
+ }
931
+ ],
932
+ "exported": [],
933
+ "exports": [],
934
+ "result": 0,
935
+ "rows": [
936
+ [
937
+ 255,
938
+ 1,
939
+ 11
940
+ ],
941
+ [
942
+ 4294967295,
943
+ 67305985,
944
+ 9
945
+ ]
946
+ ]
947
+ },
948
+ "source": {
949
+ "diagnostics": [
950
+ {
951
+ "op": "bad-address",
952
+ "text": ""
953
+ }
954
+ ],
955
+ "exported": [],
956
+ "exports": [],
957
+ "result": 0,
958
+ "rows": [
959
+ [
960
+ 255,
961
+ 1,
962
+ 11
963
+ ],
964
+ [
965
+ 4294967295,
966
+ 67305985,
967
+ 9
968
+ ]
969
+ ]
970
+ }
971
+ },
972
+ {
973
+ "rust": {
974
+ "diagnostics": [
975
+ {
976
+ "op": "not-found",
977
+ "text": "312e322e332e34"
978
+ }
979
+ ],
980
+ "exported": [],
981
+ "exports": [],
982
+ "result": 0,
983
+ "rows": [
984
+ [
985
+ 4294967295,
986
+ 4294967295,
987
+ 12
988
+ ],
989
+ [
990
+ 0,
991
+ 0,
992
+ 13
993
+ ]
994
+ ]
995
+ },
996
+ "source": {
997
+ "diagnostics": [
998
+ {
999
+ "op": "not-found",
1000
+ "text": "312e322e332e34"
1001
+ }
1002
+ ],
1003
+ "exported": [],
1004
+ "exports": [],
1005
+ "result": 0,
1006
+ "rows": [
1007
+ [
1008
+ 4294967295,
1009
+ 4294967295,
1010
+ 12
1011
+ ],
1012
+ [
1013
+ 0,
1014
+ 0,
1015
+ 13
1016
+ ]
1017
+ ]
1018
+ }
1019
+ },
1020
+ {
1021
+ "rust": {
1022
+ "diagnostics": [
1023
+ {
1024
+ "op": "not-found",
1025
+ "text": "312e2a"
1026
+ }
1027
+ ],
1028
+ "exported": [],
1029
+ "exports": [],
1030
+ "result": 0,
1031
+ "rows": [
1032
+ [
1033
+ 4294967295,
1034
+ 4294967295,
1035
+ 12
1036
+ ],
1037
+ [
1038
+ 0,
1039
+ 0,
1040
+ 13
1041
+ ]
1042
+ ]
1043
+ },
1044
+ "source": {
1045
+ "diagnostics": [
1046
+ {
1047
+ "op": "not-found",
1048
+ "text": "312e2a"
1049
+ }
1050
+ ],
1051
+ "exported": [],
1052
+ "exports": [],
1053
+ "result": 0,
1054
+ "rows": [
1055
+ [
1056
+ 4294967295,
1057
+ 4294967295,
1058
+ 12
1059
+ ],
1060
+ [
1061
+ 0,
1062
+ 0,
1063
+ 13
1064
+ ]
1065
+ ]
1066
+ }
1067
+ },
1068
+ {
1069
+ "rust": {
1070
+ "diagnostics": [
1071
+ {
1072
+ "op": "removed"
1073
+ }
1074
+ ],
1075
+ "exported": [],
1076
+ "exports": [
1077
+ 252500
1078
+ ],
1079
+ "result": 1,
1080
+ "rows": [
1081
+ [
1082
+ 4294967295,
1083
+ 4294967295,
1084
+ 12
1085
+ ],
1086
+ [
1087
+ 0,
1088
+ 4294967295,
1089
+ 13
1090
+ ]
1091
+ ]
1092
+ },
1093
+ "source": {
1094
+ "diagnostics": [
1095
+ {
1096
+ "op": "removed"
1097
+ }
1098
+ ],
1099
+ "exported": [],
1100
+ "exports": [
1101
+ 252500
1102
+ ],
1103
+ "result": 1,
1104
+ "rows": [
1105
+ [
1106
+ 4294967295,
1107
+ 4294967295,
1108
+ 12
1109
+ ],
1110
+ [
1111
+ 0,
1112
+ 4294967295,
1113
+ 13
1114
+ ]
1115
+ ]
1116
+ }
1117
+ },
1118
+ {
1119
+ "rust": {
1120
+ "diagnostics": [
1121
+ {
1122
+ "op": "bad-address",
1123
+ "text": "626164"
1124
+ }
1125
+ ],
1126
+ "exported": [],
1127
+ "exports": [],
1128
+ "result": 0,
1129
+ "rows": [
1130
+ [
1131
+ 4294967295,
1132
+ 4294967295,
1133
+ 12
1134
+ ],
1135
+ [
1136
+ 0,
1137
+ 0,
1138
+ 13
1139
+ ]
1140
+ ]
1141
+ },
1142
+ "source": {
1143
+ "diagnostics": [
1144
+ {
1145
+ "op": "bad-address",
1146
+ "text": "626164"
1147
+ }
1148
+ ],
1149
+ "exported": [],
1150
+ "exports": [],
1151
+ "result": 0,
1152
+ "rows": [
1153
+ [
1154
+ 4294967295,
1155
+ 4294967295,
1156
+ 12
1157
+ ],
1158
+ [
1159
+ 0,
1160
+ 0,
1161
+ 13
1162
+ ]
1163
+ ]
1164
+ }
1165
+ },
1166
+ {
1167
+ "rust": {
1168
+ "diagnostics": [
1169
+ {
1170
+ "op": "removed"
1171
+ }
1172
+ ],
1173
+ "exported": [],
1174
+ "exports": [
1175
+ 252500
1176
+ ],
1177
+ "result": 1,
1178
+ "rows": [
1179
+ [
1180
+ 4294967295,
1181
+ 4294967295,
1182
+ 12
1183
+ ],
1184
+ [
1185
+ 0,
1186
+ 0,
1187
+ 13
1188
+ ]
1189
+ ]
1190
+ },
1191
+ "source": {
1192
+ "diagnostics": [
1193
+ {
1194
+ "op": "removed"
1195
+ }
1196
+ ],
1197
+ "exported": [],
1198
+ "exports": [
1199
+ 252500
1200
+ ],
1201
+ "result": 1,
1202
+ "rows": [
1203
+ [
1204
+ 4294967295,
1205
+ 4294967295,
1206
+ 12
1207
+ ],
1208
+ [
1209
+ 0,
1210
+ 0,
1211
+ 13
1212
+ ]
1213
+ ]
1214
+ }
1215
+ },
1216
+ {
1217
+ "rust": {
1218
+ "diagnostics": [
1219
+ {
1220
+ "op": "bad-address",
1221
+ "text": ""
1222
+ }
1223
+ ],
1224
+ "exported": [],
1225
+ "exports": [],
1226
+ "result": 0,
1227
+ "rows": [
1228
+ [
1229
+ 4294967295,
1230
+ 4294967295,
1231
+ 12
1232
+ ],
1233
+ [
1234
+ 0,
1235
+ 0,
1236
+ 13
1237
+ ]
1238
+ ]
1239
+ },
1240
+ "source": {
1241
+ "diagnostics": [
1242
+ {
1243
+ "op": "bad-address",
1244
+ "text": ""
1245
+ }
1246
+ ],
1247
+ "exported": [],
1248
+ "exports": [],
1249
+ "result": 0,
1250
+ "rows": [
1251
+ [
1252
+ 4294967295,
1253
+ 4294967295,
1254
+ 12
1255
+ ],
1256
+ [
1257
+ 0,
1258
+ 0,
1259
+ 13
1260
+ ]
1261
+ ]
1262
+ }
1263
+ }
1264
+ ],
1265
+ "source_report": "docs/research/qvm-filter-remove.json",
1266
+ "source_report_sha256": "fedeb203df06443948adcb4be594d75cc402642496fb5be9436547abea67ddd8"
1267
+ }
docs/research/rust-health-impulse.json CHANGED
@@ -2985,7 +2985,7 @@
2985
  "exit_code": 2
2986
  }
2987
  ],
2988
- "rust_unit_tests": 187,
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": 189,
2989
  "source_report": "docs/research/qvm-health-impulse.json",
2990
  "source_report_sha256": "625fd8064004ea6dbdf398d51d0af844d9c635ff04c0a0790886dddb6ab81e71"
2991
  }
scripts/analyze_rust_filter_remove.py ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Compare the Rust filter policy with the original QVM report."""
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-policy'],check=True,capture_output=True)
9
+ binary=Path(os.environ.get('CARGO_TARGET_DIR','target'))/'debug'/'urt-filter-policy'
10
+ path=Path('docs/research/qvm-filter-remove.json');data=path.read_bytes();probes=[]
11
+ for p in json.loads(data)['probes']:
12
+ a=p['input'];words=encode(a)
13
+ probes.append(dict(source={k:p[k] for k in ['result', 'diagnostics', 'exports', 'exported', 'rows']},rust=result(binary,'remove',words)))
14
+ write_json(Path('docs/research/rust-filter-remove.json'),dict(source_report=str(path),source_report_sha256=hashlib.sha256(data).hexdigest(),probes=probes,limits='Finite recovered policy parity; native filesystem/network effects are not executed.'))
15
+
16
+ def encode(a):
17
+ text=bytes.fromhex(a['text']);return [len(a['rows']),a['metadata'],a['save'],a['handle'],len(text),*text,*[v for r in a['rows'] for v in r]]
18
+ if __name__=='__main__':main()
scripts/test_rust_filter_remove.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.json').read_text());self.assertGreaterEqual(len(r['probes']),18)
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.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
@@ -3128,3 +3128,17 @@ report scripts/analyze_qvm_filter_remove.py docs/research/qvm-filter-remove.json
3128
  edge docs/research/qvm-filter-remove.json scripts/test_qvm_filter_remove.py
3129
  group qvm-filter-remove scripts/analyze_qvm_filter_remove.py
3130
  edge scripts/analyze_qvm_filter_remove.py scripts/analyze_qvm_resumer_audit.py
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3128
  edge docs/research/qvm-filter-remove.json scripts/test_qvm_filter_remove.py
3129
  group qvm-filter-remove scripts/analyze_qvm_filter_remove.py
3130
  edge scripts/analyze_qvm_filter_remove.py scripts/analyze_qvm_resumer_audit.py
3131
+ report scripts/analyze_rust_filter_remove.py docs/research/rust-filter-remove.json
3132
+ edge docs/research/rust-filter-remove.json scripts/test_rust_filter_remove.py
3133
+ group rust-filter-remove scripts/analyze_rust_filter_remove.py
3134
+ edge scripts/analyze_rust_filter_remove.py scripts/analyze_qvm_resumer_audit.py
3135
+ edge Cargo.toml scripts/analyze_rust_filter_remove.py
3136
+ edge Cargo.lock scripts/analyze_rust_filter_remove.py
3137
+ edge crates/urt-gameplay/Cargo.toml scripts/analyze_rust_filter_remove.py
3138
+ edge crates/urt-gameplay/src/lib.rs scripts/analyze_rust_filter_remove.py
3139
+ edge crates/urt-gameplay/src/filter_lifecycle.rs scripts/analyze_rust_filter_remove.py
3140
+ edge crates/urt-gameplay/src/native_policy.rs scripts/analyze_rust_filter_remove.py
3141
+ edge crates/urt-gameplay/src/bin/urt-filter-policy.rs scripts/analyze_rust_filter_remove.py
3142
+ edge docs/research/qvm-filter-remove.json scripts/analyze_rust_filter_remove.py
3143
+ group rust-filter-remove scripts/analyze_rust_health_impulse.py
3144
+ group gameplay scripts/analyze_rust_filter_remove.py