From 9df4e9440e17c747fed34af8bc1a72f494505949 Mon Sep 17 00:00:00 2001 From: benthecarman Date: Tue, 19 Sep 2023 01:26:21 -0500 Subject: [PATCH] Fix monitor version parsing --- mutiny-core/src/ldkstorage.rs | 23 +- mutiny-core/src/test_utils.rs | 498 ++++++++++++++++++++++++++++++++++ mutiny-core/src/utils.rs | 8 + mutiny-wasm/src/indexed_db.rs | 73 +++-- 4 files changed, 560 insertions(+), 42 deletions(-) diff --git a/mutiny-core/src/ldkstorage.rs b/mutiny-core/src/ldkstorage.rs index be7c5eea8..cd1c8a3d9 100644 --- a/mutiny-core/src/ldkstorage.rs +++ b/mutiny-core/src/ldkstorage.rs @@ -637,8 +637,10 @@ impl Persist= u32::MAX as u64 { u32::MAX } else { @@ -663,8 +665,10 @@ impl Persist= u32::MAX as u64 { u32::MAX } else { @@ -825,21 +829,6 @@ mod test { assert!(result.is_empty()); } - const MANAGER_BYTES: [u8; 256] = [ - 1, 1, 246, 30, 238, 59, 99, 163, 128, 164, 119, 160, 99, 175, 50, 178, 187, 201, 124, 159, - 249, 240, 31, 44, 66, 37, 233, 115, 152, 129, 8, 0, 0, 0, 0, 3, 123, 222, 76, 244, 143, 88, - 178, 115, 155, 195, 17, 83, 168, 252, 26, 45, 231, 72, 39, 21, 96, 23, 203, 8, 101, 10, - 238, 136, 77, 5, 250, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, - 172, 120, 225, 100, 172, 120, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 1, - 2, 0, 0, 3, 2, 0, 0, 5, 33, 3, 49, 56, 184, 182, 87, 71, 249, 167, 155, 99, 242, 124, 162, - 190, 245, 15, 63, 119, 66, 102, 88, 52, 223, 137, 219, 56, 27, 137, 175, 103, 200, 26, 7, - 32, 23, 65, 121, 234, 117, 201, 12, 57, 255, 124, 147, 188, 210, 48, 53, 179, 20, 157, 122, - 21, 212, 195, 166, 222, 214, 124, 167, 7, 217, 175, 93, 50, 9, 0, 11, 32, 124, 241, 131, - 188, 131, 90, 195, 214, 250, 125, 197, 126, 163, 168, 131, 111, 78, 41, 166, 218, 20, 49, - 233, 172, 19, 243, 93, 239, 33, 64, 36, 240, - ]; - #[test] async fn test_upgrade_channel_manager() { let test_name = "test_channel_manager"; diff --git a/mutiny-core/src/test_utils.rs b/mutiny-core/src/test_utils.rs index 6943bcaf4..9f73f9ff2 100644 --- a/mutiny-core/src/test_utils.rs +++ b/mutiny-core/src/test_utils.rs @@ -54,3 +54,501 @@ use crate::auth::MutinyAuthClient; use crate::logging::MutinyLogger; use crate::vss::MutinyVssClient; use crate::{generate_seed, lnurlauth::AuthManager}; + +pub const MANAGER_BYTES: [u8; 256] = [ + 1, 1, 246, 30, 238, 59, 99, 163, 128, 164, 119, 160, 99, 175, 50, 178, 187, 201, 124, 159, 249, + 240, 31, 44, 66, 37, 233, 115, 152, 129, 8, 0, 0, 0, 0, 3, 123, 222, 76, 244, 143, 88, 178, + 115, 155, 195, 17, 83, 168, 252, 26, 45, 231, 72, 39, 21, 96, 23, 203, 8, 101, 10, 238, 136, + 77, 5, 250, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 172, 120, 225, 100, + 172, 120, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 1, 2, 0, 0, 3, 2, 0, 0, 5, + 33, 3, 49, 56, 184, 182, 87, 71, 249, 167, 155, 99, 242, 124, 162, 190, 245, 15, 63, 119, 66, + 102, 88, 52, 223, 137, 219, 56, 27, 137, 175, 103, 200, 26, 7, 32, 23, 65, 121, 234, 117, 201, + 12, 57, 255, 124, 147, 188, 210, 48, 53, 179, 20, 157, 122, 21, 212, 195, 166, 222, 214, 124, + 167, 7, 217, 175, 93, 50, 9, 0, 11, 32, 124, 241, 131, 188, 131, 90, 195, 214, 250, 125, 197, + 126, 163, 168, 131, 111, 78, 41, 166, 218, 20, 49, 233, 172, 19, 243, 93, 239, 33, 64, 36, 240, +]; + +// 2 channel monitors, one before and one after a payment + +pub const MONITOR_VERSION_HIGHER: [u8; 5849] = [ + 1, 1, 0, 0, 0, 0, 0, 0, 0, 10, 154, 109, 35, 244, 90, 14, 0, 34, 81, 32, 65, 93, 220, 7, 194, + 50, 109, 153, 149, 239, 116, 229, 216, 194, 52, 104, 10, 212, 3, 72, 161, 38, 119, 196, 117, + 219, 30, 227, 74, 131, 60, 43, 1, 0, 22, 0, 20, 65, 10, 38, 42, 95, 246, 244, 88, 7, 193, 27, + 85, 33, 248, 164, 100, 116, 167, 81, 131, 0, 0, 0, 0, 0, 0, 153, 138, 15, 64, 0, 0, 0, 0, 101, + 9, 69, 166, 8, 100, 42, 4, 222, 170, 7, 115, 149, 79, 64, 161, 84, 83, 192, 134, 3, 210, 234, + 68, 18, 21, 39, 158, 188, 30, 48, 110, 109, 138, 227, 110, 155, 105, 174, 70, 253, 241, 91, + 239, 159, 253, 83, 253, 26, 206, 232, 60, 39, 226, 223, 127, 106, 59, 88, 192, 252, 24, 23, + 239, 254, 29, 27, 49, 165, 198, 37, 11, 20, 13, 186, 166, 171, 167, 86, 123, 223, 254, 110, 48, + 67, 0, 0, 0, 34, 0, 32, 208, 244, 191, 20, 197, 149, 7, 106, 201, 46, 119, 19, 187, 96, 162, + 41, 247, 125, 88, 42, 229, 34, 6, 202, 244, 7, 46, 78, 14, 61, 91, 97, 33, 138, 148, 48, 45, + 203, 227, 187, 163, 153, 119, 212, 255, 252, 48, 0, 40, 0, 24, 146, 167, 36, 197, 51, 122, 210, + 89, 102, 3, 242, 88, 233, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 33, 3, 33, 88, 253, 177, 233, + 158, 226, 126, 248, 230, 147, 151, 18, 250, 180, 242, 239, 106, 199, 121, 76, 165, 236, 84, + 151, 218, 162, 193, 73, 216, 163, 235, 2, 33, 2, 102, 194, 245, 56, 190, 148, 142, 23, 14, 18, + 212, 128, 124, 41, 30, 99, 228, 244, 77, 167, 111, 159, 210, 77, 134, 43, 250, 151, 154, 217, + 163, 226, 4, 2, 0, 144, 0, 71, 82, 33, 2, 187, 2, 3, 79, 186, 192, 60, 67, 252, 172, 82, 26, + 102, 22, 113, 168, 132, 178, 196, 196, 123, 110, 147, 195, 27, 156, 18, 200, 244, 151, 205, + 254, 33, 3, 131, 221, 176, 32, 165, 131, 251, 198, 154, 238, 179, 38, 122, 19, 19, 211, 203, + 12, 0, 199, 161, 186, 226, 233, 31, 45, 196, 174, 114, 119, 95, 177, 82, 174, 0, 0, 0, 0, 0, 1, + 168, 42, 255, 255, 255, 255, 255, 252, 3, 135, 149, 248, 137, 131, 21, 104, 28, 9, 162, 86, 55, + 4, 108, 206, 224, 27, 220, 58, 30, 188, 197, 98, 195, 108, 44, 133, 114, 206, 49, 40, 182, 3, + 221, 239, 96, 0, 35, 99, 247, 127, 194, 170, 32, 50, 6, 130, 242, 232, 73, 142, 164, 249, 68, + 253, 102, 13, 223, 206, 3, 59, 246, 69, 142, 223, 0, 6, 61, 83, 55, 40, 9, 194, 48, 133, 121, + 91, 253, 51, 163, 8, 142, 250, 101, 232, 15, 239, 217, 168, 110, 45, 90, 138, 230, 5, 159, 56, + 125, 34, 0, 0, 255, 255, 255, 255, 255, 253, 48, 252, 253, 73, 72, 56, 121, 88, 202, 181, 51, + 186, 28, 206, 74, 120, 173, 68, 51, 31, 238, 48, 11, 84, 231, 180, 255, 150, 232, 148, 83, 26, + 0, 0, 255, 255, 255, 255, 255, 254, 139, 124, 72, 238, 170, 26, 98, 126, 151, 25, 85, 15, 71, + 147, 79, 45, 42, 151, 184, 210, 112, 39, 107, 62, 58, 97, 198, 210, 239, 164, 202, 50, 0, 0, + 255, 255, 255, 255, 255, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 5, 96, 10, 179, 100, 168, 83, 45, 155, 65, 255, 164, 116, 148, 201, 149, 185, 13, 76, + 254, 163, 131, 243, 222, 206, 17, 175, 172, 185, 120, 76, 110, 174, 0, 0, 0, 0, 0, 0, 0, 0, 49, + 11, 0, 30, 89, 85, 93, 242, 225, 196, 247, 145, 235, 201, 222, 76, 204, 163, 180, 193, 90, 79, + 60, 70, 161, 206, 157, 206, 204, 111, 40, 202, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, + 233, 0, 6, 120, 31, 232, 188, 222, 158, 69, 94, 212, 160, 13, 108, 187, 217, 29, 36, 140, 143, + 45, 142, 221, 104, 236, 91, 178, 211, 230, 248, 245, 208, 152, 72, 19, 236, 0, 0, 138, 148, 48, + 45, 203, 227, 187, 163, 153, 119, 212, 255, 252, 48, 0, 40, 0, 24, 146, 167, 36, 197, 51, 122, + 210, 89, 102, 3, 242, 88, 233, 191, 0, 0, 0, 0, 0, 0, 0, 0, 93, 30, 191, 211, 132, 13, 223, 28, + 30, 155, 213, 28, 146, 28, 240, 23, 133, 82, 103, 92, 34, 212, 33, 88, 197, 9, 104, 15, 105, + 87, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 25, 99, 36, 213, 104, 22, 164, 98, 20, 155, 99, 230, + 147, 53, 36, 1, 203, 131, 128, 171, 157, 191, 180, 109, 116, 39, 25, 150, 155, 79, 163, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 114, 112, 224, 0, 6, 119, 81, 98, 164, 145, 193, 45, 31, + 120, 243, 144, 168, 100, 49, 84, 4, 224, 73, 72, 92, 90, 213, 166, 100, 246, 66, 103, 26, 243, + 246, 153, 133, 173, 59, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 232, + 188, 222, 158, 69, 94, 212, 160, 13, 108, 187, 217, 29, 36, 140, 143, 45, 142, 221, 104, 236, + 91, 178, 211, 230, 248, 245, 208, 152, 72, 19, 236, 255, 255, 255, 255, 255, 252, 1, 253, 2, 5, + 0, 32, 240, 36, 143, 171, 249, 153, 75, 141, 246, 252, 141, 209, 37, 176, 178, 5, 117, 242, + 143, 140, 232, 13, 166, 18, 6, 216, 227, 16, 114, 252, 62, 192, 1, 8, 0, 0, 0, 0, 0, 0, 29, 74, + 2, 33, 2, 247, 34, 149, 238, 169, 171, 219, 3, 202, 193, 58, 240, 240, 137, 207, 86, 202, 232, + 140, 14, 53, 247, 218, 92, 84, 243, 232, 62, 175, 106, 234, 190, 4, 33, 3, 231, 119, 4, 90, + 125, 246, 84, 13, 54, 22, 216, 252, 145, 174, 245, 72, 143, 6, 214, 142, 169, 46, 90, 172, 133, + 104, 158, 65, 198, 4, 30, 160, 6, 33, 2, 211, 122, 58, 31, 71, 2, 45, 67, 29, 120, 151, 222, + 10, 201, 133, 51, 19, 121, 126, 166, 229, 158, 89, 93, 135, 55, 118, 28, 228, 32, 0, 159, 8, + 33, 2, 113, 136, 197, 1, 1, 148, 130, 150, 88, 246, 16, 246, 173, 185, 162, 156, 2, 114, 139, + 207, 179, 58, 164, 123, 1, 18, 141, 118, 222, 66, 231, 96, 10, 33, 3, 40, 122, 215, 156, 220, + 181, 67, 246, 235, 119, 185, 229, 133, 56, 178, 33, 14, 251, 214, 74, 32, 3, 135, 146, 115, + 139, 130, 127, 75, 209, 164, 99, 12, 4, 0, 0, 1, 12, 14, 253, 1, 32, 53, 0, 1, 1, 2, 8, 0, 0, + 0, 0, 0, 0, 3, 233, 4, 4, 0, 6, 120, 31, 6, 32, 232, 188, 222, 158, 69, 94, 212, 160, 13, 108, + 187, 217, 29, 36, 140, 143, 45, 142, 221, 104, 236, 91, 178, 211, 230, 248, 245, 208, 152, 72, + 19, 236, 0, 233, 0, 230, 0, 32, 105, 253, 117, 112, 209, 74, 81, 80, 27, 29, 166, 200, 135, 23, + 245, 174, 215, 1, 166, 81, 194, 158, 229, 182, 9, 237, 14, 186, 250, 96, 208, 218, 1, 32, 232, + 188, 222, 158, 69, 94, 212, 160, 13, 108, 187, 217, 29, 36, 140, 143, 45, 142, 221, 104, 236, + 91, 178, 211, 230, 248, 245, 208, 152, 72, 19, 236, 2, 8, 0, 0, 0, 0, 0, 0, 3, 233, 4, 150, 76, + 0, 33, 3, 102, 171, 200, 235, 77, 166, 30, 49, 168, 210, 196, 82, 13, 49, 202, 189, 245, 140, + 197, 37, 15, 133, 86, 87, 57, 127, 61, 214, 36, 147, 147, 138, 2, 9, 0, 7, 8, 160, 0, 8, 10, + 97, 162, 4, 8, 6, 119, 38, 0, 0, 1, 0, 0, 6, 2, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 1, 10, 4, 0, + 0, 0, 6, 72, 0, 33, 2, 70, 94, 213, 190, 83, 208, 79, 222, 102, 201, 65, 143, 241, 74, 95, 34, + 103, 114, 56, 16, 23, 108, 146, 18, 183, 34, 229, 66, 220, 26, 251, 27, 2, 5, 0, 3, 2, 66, 0, + 4, 8, 0, 163, 91, 0, 0, 1, 0, 1, 6, 2, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 3, 232, 10, 4, 0, 0, 0, + 240, 227, 0, 32, 57, 122, 179, 1, 7, 26, 130, 195, 196, 99, 62, 192, 228, 125, 160, 15, 88, + 109, 160, 95, 173, 118, 136, 134, 116, 254, 120, 47, 153, 245, 218, 163, 1, 8, 0, 0, 0, 0, 0, + 0, 29, 74, 2, 33, 3, 185, 187, 202, 237, 76, 100, 33, 67, 198, 106, 20, 53, 255, 236, 90, 244, + 165, 82, 94, 183, 161, 91, 17, 155, 79, 22, 125, 85, 241, 192, 221, 22, 4, 33, 2, 102, 100, 0, + 142, 24, 185, 50, 208, 0, 31, 53, 171, 84, 151, 45, 201, 84, 247, 94, 197, 103, 203, 69, 109, + 61, 31, 28, 105, 121, 32, 139, 49, 6, 33, 2, 177, 97, 28, 79, 202, 157, 135, 59, 69, 84, 121, + 188, 148, 189, 154, 124, 179, 159, 221, 108, 102, 101, 13, 21, 252, 172, 226, 253, 236, 122, + 87, 141, 8, 33, 3, 228, 66, 52, 168, 196, 34, 8, 67, 145, 248, 210, 70, 197, 31, 154, 136, 216, + 242, 131, 18, 20, 102, 217, 167, 229, 9, 70, 170, 244, 138, 147, 105, 10, 33, 2, 100, 202, 68, + 171, 169, 58, 210, 226, 81, 178, 210, 143, 154, 242, 64, 64, 157, 121, 44, 104, 255, 179, 20, + 201, 86, 92, 20, 252, 246, 4, 197, 2, 12, 4, 0, 0, 1, 12, 14, 0, 255, 255, 255, 255, 255, 251, + 255, 255, 255, 255, 255, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 128, 20, 236, 103, 32, 226, 239, 255, 29, 0, 198, 148, 224, 30, 143, 152, 92, 206, 6, 26, + 175, 144, 0, 153, 187, 27, 143, 131, 91, 3, 0, 0, 0, 6, 119, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 226, 223, 127, 106, 59, 88, 192, 252, 24, 23, 239, 254, 29, 27, 49, 165, 198, + 37, 11, 20, 13, 186, 166, 171, 167, 86, 123, 223, 254, 110, 48, 67, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 34, 0, 32, 208, 244, 191, 20, 197, 149, 7, 106, 201, 46, 119, 19, 187, 96, 162, 41, + 247, 125, 88, 42, 229, 34, 6, 202, 244, 7, 46, 78, 14, 61, 91, 97, 1, 1, 0, 34, 81, 32, 65, 93, + 220, 7, 194, 50, 109, 153, 149, 239, 116, 229, 216, 194, 52, 104, 10, 212, 3, 72, 161, 38, 119, + 196, 117, 219, 30, 227, 74, 131, 60, 43, 253, 1, 206, 0, 253, 1, 131, 253, 1, 128, 0, 8, 0, 0, + 255, 255, 255, 255, 255, 251, 2, 8, 0, 0, 0, 0, 0, 0, 29, 74, 4, 8, 0, 0, 0, 0, 0, 1, 138, 29, + 6, 4, 0, 0, 1, 12, 8, 176, 175, 0, 33, 2, 100, 202, 68, 171, 169, 58, 210, 226, 81, 178, 210, + 143, 154, 242, 64, 64, 157, 121, 44, 104, 255, 179, 20, 201, 86, 92, 20, 252, 246, 4, 197, 2, + 2, 33, 3, 185, 187, 202, 237, 76, 100, 33, 67, 198, 106, 20, 53, 255, 236, 90, 244, 165, 82, + 94, 183, 161, 91, 17, 155, 79, 22, 125, 85, 241, 192, 221, 22, 4, 33, 2, 102, 100, 0, 142, 24, + 185, 50, 208, 0, 31, 53, 171, 84, 151, 45, 201, 84, 247, 94, 197, 103, 203, 69, 109, 61, 31, + 28, 105, 121, 32, 139, 49, 6, 33, 2, 177, 97, 28, 79, 202, 157, 135, 59, 69, 84, 121, 188, 148, + 189, 154, 124, 179, 159, 221, 108, 102, 101, 13, 21, 252, 172, 226, 253, 236, 122, 87, 141, 8, + 33, 3, 228, 66, 52, 168, 196, 34, 8, 67, 145, 248, 210, 70, 197, 31, 154, 136, 216, 242, 131, + 18, 20, 102, 217, 167, 229, 9, 70, 170, 244, 138, 147, 105, 10, 162, 161, 0, 125, 2, 0, 0, 0, + 1, 226, 223, 127, 106, 59, 88, 192, 252, 24, 23, 239, 254, 29, 27, 49, 165, 198, 37, 11, 20, + 13, 186, 166, 171, 167, 86, 123, 223, 254, 110, 48, 67, 0, 0, 0, 0, 0, 35, 109, 154, 128, 2, + 74, 29, 0, 0, 0, 0, 0, 0, 34, 0, 32, 51, 4, 230, 6, 41, 209, 178, 200, 117, 186, 85, 189, 102, + 86, 23, 247, 244, 73, 239, 128, 237, 10, 200, 54, 30, 1, 62, 112, 193, 56, 254, 65, 29, 138, 1, + 0, 0, 0, 0, 0, 22, 0, 20, 51, 158, 131, 246, 71, 104, 102, 154, 80, 177, 165, 227, 253, 31, + 103, 124, 143, 230, 217, 25, 10, 90, 244, 32, 2, 32, 57, 122, 179, 1, 7, 26, 130, 195, 196, 99, + 62, 192, 228, 125, 160, 15, 88, 109, 160, 95, 173, 118, 136, 134, 116, 254, 120, 47, 153, 245, + 218, 163, 12, 0, 15, 2, 16, 0, 2, 64, 115, 40, 21, 5, 135, 46, 119, 177, 184, 231, 240, 114, + 236, 75, 182, 243, 27, 95, 82, 250, 32, 205, 70, 195, 27, 15, 218, 161, 38, 100, 141, 74, 49, + 24, 225, 47, 6, 186, 141, 96, 182, 237, 203, 63, 114, 2, 179, 26, 242, 244, 75, 43, 193, 33, + 45, 118, 237, 7, 2, 143, 249, 63, 220, 252, 4, 1, 1, 6, 0, 0, 253, 1, 210, 253, 1, 206, 0, 253, + 1, 131, 253, 1, 128, 0, 8, 0, 0, 255, 255, 255, 255, 255, 252, 2, 8, 0, 0, 0, 0, 0, 0, 29, 74, + 4, 8, 0, 0, 0, 0, 0, 1, 138, 28, 6, 4, 0, 0, 1, 12, 8, 176, 175, 0, 33, 3, 40, 122, 215, 156, + 220, 181, 67, 246, 235, 119, 185, 229, 133, 56, 178, 33, 14, 251, 214, 74, 32, 3, 135, 146, + 115, 139, 130, 127, 75, 209, 164, 99, 2, 33, 2, 247, 34, 149, 238, 169, 171, 219, 3, 202, 193, + 58, 240, 240, 137, 207, 86, 202, 232, 140, 14, 53, 247, 218, 92, 84, 243, 232, 62, 175, 106, + 234, 190, 4, 33, 3, 231, 119, 4, 90, 125, 246, 84, 13, 54, 22, 216, 252, 145, 174, 245, 72, + 143, 6, 214, 142, 169, 46, 90, 172, 133, 104, 158, 65, 198, 4, 30, 160, 6, 33, 2, 211, 122, 58, + 31, 71, 2, 45, 67, 29, 120, 151, 222, 10, 201, 133, 51, 19, 121, 126, 166, 229, 158, 89, 93, + 135, 55, 118, 28, 228, 32, 0, 159, 8, 33, 2, 113, 136, 197, 1, 1, 148, 130, 150, 88, 246, 16, + 246, 173, 185, 162, 156, 2, 114, 139, 207, 179, 58, 164, 123, 1, 18, 141, 118, 222, 66, 231, + 96, 10, 162, 161, 0, 125, 2, 0, 0, 0, 1, 226, 223, 127, 106, 59, 88, 192, 252, 24, 23, 239, + 254, 29, 27, 49, 165, 198, 37, 11, 20, 13, 186, 166, 171, 167, 86, 123, 223, 254, 110, 48, 67, + 0, 0, 0, 0, 0, 35, 109, 154, 128, 2, 74, 29, 0, 0, 0, 0, 0, 0, 34, 0, 32, 131, 194, 90, 26, 85, + 49, 65, 217, 161, 229, 61, 70, 238, 75, 71, 104, 199, 50, 9, 138, 229, 54, 86, 11, 111, 218, + 185, 204, 87, 142, 216, 222, 28, 138, 1, 0, 0, 0, 0, 0, 22, 0, 20, 51, 158, 131, 246, 71, 104, + 102, 154, 80, 177, 165, 227, 253, 31, 103, 124, 143, 230, 217, 25, 13, 90, 244, 32, 2, 32, 240, + 36, 143, 171, 249, 153, 75, 141, 246, 252, 141, 209, 37, 176, 178, 5, 117, 242, 143, 140, 232, + 13, 166, 18, 6, 216, 227, 16, 114, 252, 62, 192, 12, 0, 15, 2, 16, 0, 2, 64, 100, 121, 216, + 130, 76, 139, 132, 137, 143, 51, 254, 166, 124, 124, 92, 99, 76, 194, 115, 254, 105, 139, 126, + 84, 8, 150, 81, 40, 112, 192, 235, 222, 81, 51, 197, 211, 166, 29, 236, 68, 111, 13, 4, 189, + 89, 161, 221, 139, 119, 233, 155, 245, 105, 88, 213, 141, 173, 99, 88, 166, 202, 37, 119, 4, 4, + 1, 1, 6, 0, 0, 253, 1, 154, 0, 176, 175, 0, 33, 2, 187, 2, 3, 79, 186, 192, 60, 67, 252, 172, + 82, 26, 102, 22, 113, 168, 132, 178, 196, 196, 123, 110, 147, 195, 27, 156, 18, 200, 244, 151, + 205, 254, 2, 33, 3, 210, 234, 68, 18, 21, 39, 158, 188, 30, 48, 110, 109, 138, 227, 110, 155, + 105, 174, 70, 253, 241, 91, 239, 159, 253, 83, 253, 26, 206, 232, 60, 39, 4, 33, 2, 244, 19, + 142, 111, 20, 44, 233, 125, 191, 160, 222, 234, 95, 70, 122, 5, 96, 41, 155, 121, 3, 213, 132, + 63, 131, 69, 15, 228, 130, 253, 114, 21, 6, 33, 2, 63, 234, 246, 244, 91, 189, 96, 58, 68, 236, + 168, 170, 63, 146, 247, 33, 150, 16, 148, 180, 104, 75, 188, 198, 143, 249, 6, 27, 73, 164, 78, + 202, 8, 33, 3, 76, 42, 89, 187, 90, 189, 240, 115, 251, 1, 44, 247, 198, 84, 118, 102, 173, 11, + 202, 151, 61, 122, 222, 253, 36, 37, 19, 183, 217, 8, 229, 173, 2, 2, 0, 144, 4, 1, 0, 6, 183, + 182, 0, 176, 175, 0, 33, 3, 131, 221, 176, 32, 165, 131, 251, 198, 154, 238, 179, 38, 122, 19, + 19, 211, 203, 12, 0, 199, 161, 186, 226, 233, 31, 45, 196, 174, 114, 119, 95, 177, 2, 33, 2, + 45, 83, 223, 96, 212, 69, 226, 199, 245, 94, 185, 86, 181, 149, 106, 88, 201, 145, 45, 215, + 114, 176, 188, 203, 21, 191, 3, 104, 100, 163, 204, 122, 4, 33, 3, 183, 46, 17, 0, 22, 89, 15, + 4, 245, 60, 239, 75, 44, 83, 246, 243, 29, 25, 163, 57, 190, 142, 154, 163, 166, 210, 146, 62, + 254, 20, 139, 230, 6, 33, 3, 33, 88, 253, 177, 233, 158, 226, 126, 248, 230, 147, 151, 18, 250, + 180, 242, 239, 106, 199, 121, 76, 165, 236, 84, 151, 218, 162, 193, 73, 216, 163, 235, 8, 33, + 2, 102, 194, 245, 56, 190, 148, 142, 23, 14, 18, 212, 128, 124, 41, 30, 99, 228, 244, 77, 167, + 111, 159, 210, 77, 134, 43, 250, 151, 154, 217, 163, 226, 2, 2, 0, 6, 8, 34, 226, 223, 127, + 106, 59, 88, 192, 252, 24, 23, 239, 254, 29, 27, 49, 165, 198, 37, 11, 20, 13, 186, 166, 171, + 167, 86, 123, 223, 254, 110, 48, 67, 0, 0, 11, 2, 16, 0, 0, 0, 2, 139, 1, 1, 135, 211, 13, 56, + 138, 53, 76, 177, 22, 89, 33, 173, 232, 104, 58, 46, 9, 214, 248, 141, 2, 74, 73, 175, 151, + 192, 64, 152, 26, 208, 88, 28, 68, 148, 225, 145, 60, 246, 85, 136, 233, 107, 89, 21, 33, 187, + 115, 203, 12, 155, 5, 18, 98, 20, 216, 147, 53, 226, 212, 241, 106, 200, 172, 245, 84, 75, 149, + 55, 54, 37, 197, 178, 195, 160, 223, 29, 37, 12, 142, 168, 202, 82, 118, 153, 95, 154, 132, 46, + 239, 233, 98, 178, 156, 104, 110, 178, 4, 73, 61, 133, 51, 69, 166, 249, 177, 47, 251, 109, + 231, 4, 111, 77, 48, 253, 113, 109, 128, 180, 136, 29, 3, 245, 150, 23, 165, 156, 30, 74, 184, + 6, 55, 180, 180, 179, 100, 37, 185, 14, 208, 210, 191, 137, 29, 30, 7, 12, 226, 111, 250, 114, + 70, 237, 180, 55, 24, 175, 130, 153, 26, 57, 69, 59, 171, 225, 158, 186, 169, 209, 50, 235, + 250, 170, 88, 118, 12, 37, 103, 189, 106, 253, 106, 113, 255, 235, 229, 216, 39, 40, 62, 199, + 224, 43, 253, 1, 158, 253, 1, 154, 0, 176, 175, 0, 33, 2, 187, 2, 3, 79, 186, 192, 60, 67, 252, + 172, 82, 26, 102, 22, 113, 168, 132, 178, 196, 196, 123, 110, 147, 195, 27, 156, 18, 200, 244, + 151, 205, 254, 2, 33, 3, 210, 234, 68, 18, 21, 39, 158, 188, 30, 48, 110, 109, 138, 227, 110, + 155, 105, 174, 70, 253, 241, 91, 239, 159, 253, 83, 253, 26, 206, 232, 60, 39, 4, 33, 2, 244, + 19, 142, 111, 20, 44, 233, 125, 191, 160, 222, 234, 95, 70, 122, 5, 96, 41, 155, 121, 3, 213, + 132, 63, 131, 69, 15, 228, 130, 253, 114, 21, 6, 33, 2, 63, 234, 246, 244, 91, 189, 96, 58, 68, + 236, 168, 170, 63, 146, 247, 33, 150, 16, 148, 180, 104, 75, 188, 198, 143, 249, 6, 27, 73, + 164, 78, 202, 8, 33, 3, 76, 42, 89, 187, 90, 189, 240, 115, 251, 1, 44, 247, 198, 84, 118, 102, + 173, 11, 202, 151, 61, 122, 222, 253, 36, 37, 19, 183, 217, 8, 229, 173, 2, 2, 0, 144, 4, 1, 0, + 6, 183, 182, 0, 176, 175, 0, 33, 3, 131, 221, 176, 32, 165, 131, 251, 198, 154, 238, 179, 38, + 122, 19, 19, 211, 203, 12, 0, 199, 161, 186, 226, 233, 31, 45, 196, 174, 114, 119, 95, 177, 2, + 33, 2, 45, 83, 223, 96, 212, 69, 226, 199, 245, 94, 185, 86, 181, 149, 106, 88, 201, 145, 45, + 215, 114, 176, 188, 203, 21, 191, 3, 104, 100, 163, 204, 122, 4, 33, 3, 183, 46, 17, 0, 22, 89, + 15, 4, 245, 60, 239, 75, 44, 83, 246, 243, 29, 25, 163, 57, 190, 142, 154, 163, 166, 210, 146, + 62, 254, 20, 139, 230, 6, 33, 3, 33, 88, 253, 177, 233, 158, 226, 126, 248, 230, 147, 151, 18, + 250, 180, 242, 239, 106, 199, 121, 76, 165, 236, 84, 151, 218, 162, 193, 73, 216, 163, 235, 8, + 33, 2, 102, 194, 245, 56, 190, 148, 142, 23, 14, 18, 212, 128, 124, 41, 30, 99, 228, 244, 77, + 167, 111, 159, 210, 77, 134, 43, 250, 151, 154, 217, 163, 226, 2, 2, 0, 6, 8, 34, 226, 223, + 127, 106, 59, 88, 192, 252, 24, 23, 239, 254, 29, 27, 49, 165, 198, 37, 11, 20, 13, 186, 166, + 171, 167, 86, 123, 223, 254, 110, 48, 67, 0, 0, 11, 2, 16, 0, 0, 0, 0, 0, 0, 1, 168, 42, 0, 0, + 0, 0, 153, 138, 15, 64, 0, 0, 0, 0, 101, 9, 69, 166, 8, 100, 42, 4, 222, 170, 7, 115, 149, 79, + 64, 161, 84, 83, 192, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 3, 0, 5, 0, 7, 1, 0, 9, 33, 3, 102, 171, 200, 235, + 77, 166, 30, 49, 168, 210, 196, 82, 13, 49, 202, 189, 245, 140, 197, 37, 15, 133, 86, 87, 57, + 127, 61, 214, 36, 147, 147, 138, 13, 0, 15, 2, 0, 0, +]; +pub const MONITOR_VERSION_LOWER: [u8; 5714] = [ + 1, 1, 0, 0, 0, 0, 0, 0, 0, 5, 154, 109, 35, 244, 90, 14, 0, 34, 81, 32, 65, 93, 220, 7, 194, + 50, 109, 153, 149, 239, 116, 229, 216, 194, 52, 104, 10, 212, 3, 72, 161, 38, 119, 196, 117, + 219, 30, 227, 74, 131, 60, 43, 1, 0, 22, 0, 20, 65, 10, 38, 42, 95, 246, 244, 88, 7, 193, 27, + 85, 33, 248, 164, 100, 116, 167, 81, 131, 0, 0, 0, 0, 0, 0, 153, 138, 15, 64, 0, 0, 0, 0, 101, + 9, 69, 166, 8, 100, 42, 4, 222, 170, 7, 115, 149, 79, 64, 161, 84, 83, 192, 134, 3, 210, 234, + 68, 18, 21, 39, 158, 188, 30, 48, 110, 109, 138, 227, 110, 155, 105, 174, 70, 253, 241, 91, + 239, 159, 253, 83, 253, 26, 206, 232, 60, 39, 226, 223, 127, 106, 59, 88, 192, 252, 24, 23, + 239, 254, 29, 27, 49, 165, 198, 37, 11, 20, 13, 186, 166, 171, 167, 86, 123, 223, 254, 110, 48, + 67, 0, 0, 0, 34, 0, 32, 208, 244, 191, 20, 197, 149, 7, 106, 201, 46, 119, 19, 187, 96, 162, + 41, 247, 125, 88, 42, 229, 34, 6, 202, 244, 7, 46, 78, 14, 61, 91, 97, 33, 93, 30, 191, 211, + 132, 13, 223, 28, 30, 155, 213, 28, 146, 28, 240, 23, 133, 82, 103, 92, 34, 212, 33, 88, 197, + 9, 104, 15, 105, 87, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 33, 3, 33, 88, 253, 177, 233, + 158, 226, 126, 248, 230, 147, 151, 18, 250, 180, 242, 239, 106, 199, 121, 76, 165, 236, 84, + 151, 218, 162, 193, 73, 216, 163, 235, 2, 33, 2, 102, 194, 245, 56, 190, 148, 142, 23, 14, 18, + 212, 128, 124, 41, 30, 99, 228, 244, 77, 167, 111, 159, 210, 77, 134, 43, 250, 151, 154, 217, + 163, 226, 4, 2, 0, 144, 0, 71, 82, 33, 2, 187, 2, 3, 79, 186, 192, 60, 67, 252, 172, 82, 26, + 102, 22, 113, 168, 132, 178, 196, 196, 123, 110, 147, 195, 27, 156, 18, 200, 244, 151, 205, + 254, 33, 3, 131, 221, 176, 32, 165, 131, 251, 198, 154, 238, 179, 38, 122, 19, 19, 211, 203, + 12, 0, 199, 161, 186, 226, 233, 31, 45, 196, 174, 114, 119, 95, 177, 82, 174, 0, 0, 0, 0, 0, 1, + 168, 42, 255, 255, 255, 255, 255, 254, 2, 119, 114, 90, 44, 154, 8, 139, 43, 248, 20, 53, 160, + 39, 155, 42, 205, 51, 89, 215, 173, 239, 34, 207, 251, 99, 149, 117, 197, 34, 191, 28, 219, 2, + 247, 74, 82, 189, 189, 227, 98, 56, 93, 114, 253, 246, 1, 34, 4, 87, 75, 195, 80, 35, 197, 243, + 129, 135, 119, 209, 52, 48, 35, 12, 233, 218, 0, 6, 81, 230, 208, 171, 171, 61, 180, 114, 98, + 13, 153, 144, 117, 231, 52, 180, 150, 77, 227, 78, 247, 176, 113, 68, 195, 220, 221, 87, 178, + 84, 146, 24, 0, 0, 255, 255, 255, 255, 255, 255, 48, 252, 253, 73, 72, 56, 121, 88, 202, 181, + 51, 186, 28, 206, 74, 120, 173, 68, 51, 31, 238, 48, 11, 84, 231, 180, 255, 150, 232, 148, 83, + 26, 0, 0, 255, 255, 255, 255, 255, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 96, 10, 179, 100, 168, 83, 45, 155, 65, 255, 164, + 116, 148, 201, 149, 185, 13, 76, 254, 163, 131, 243, 222, 206, 17, 175, 172, 185, 120, 76, 110, + 174, 0, 0, 0, 0, 0, 0, 0, 0, 93, 30, 191, 211, 132, 13, 223, 28, 30, 155, 213, 28, 146, 28, + 240, 23, 133, 82, 103, 92, 34, 212, 33, 88, 197, 9, 104, 15, 105, 87, 104, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 45, 25, 99, 36, 213, 104, 22, 164, 98, 20, 155, 99, 230, 147, 53, 36, 1, 203, 131, 128, + 171, 157, 191, 180, 109, 116, 39, 25, 150, 155, 79, 163, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 114, 112, 224, 0, 6, 119, 81, 98, 164, 145, 193, 45, 31, 120, 243, 144, 168, 100, 49, 84, 4, + 224, 73, 72, 92, 90, 213, 166, 100, 246, 66, 103, 26, 243, 246, 153, 133, 173, 59, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 98, 164, 145, 193, 45, 31, 120, 243, 144, + 168, 100, 49, 84, 4, 224, 73, 72, 92, 90, 213, 166, 100, 246, 66, 103, 26, 243, 246, 153, 133, + 173, 59, 255, 255, 255, 255, 255, 254, 1, 253, 1, 97, 0, 32, 89, 217, 56, 33, 63, 107, 197, 44, + 64, 80, 134, 90, 183, 137, 23, 25, 45, 100, 192, 240, 112, 73, 8, 50, 77, 16, 167, 36, 10, 142, + 187, 118, 1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 2, 33, 2, 15, 137, 104, 72, 210, 98, 222, 187, 143, + 161, 238, 208, 85, 191, 192, 166, 99, 127, 139, 155, 243, 39, 242, 172, 117, 196, 153, 176, 86, + 203, 0, 47, 4, 33, 3, 145, 83, 28, 120, 41, 12, 163, 45, 249, 88, 105, 185, 130, 77, 228, 169, + 21, 241, 114, 192, 231, 75, 138, 21, 193, 194, 89, 100, 165, 86, 190, 94, 6, 33, 2, 97, 95, 89, + 103, 186, 249, 85, 156, 250, 70, 98, 33, 19, 131, 201, 65, 216, 117, 134, 107, 249, 69, 65, 20, + 86, 97, 151, 141, 126, 165, 18, 82, 8, 33, 2, 85, 204, 109, 230, 216, 30, 33, 108, 62, 43, 13, + 255, 136, 174, 50, 235, 129, 103, 240, 176, 16, 46, 218, 47, 162, 71, 33, 26, 190, 13, 53, 239, + 10, 33, 3, 158, 20, 175, 174, 221, 138, 182, 249, 11, 94, 240, 251, 232, 201, 73, 25, 247, 123, + 108, 198, 153, 89, 84, 209, 127, 114, 55, 144, 120, 149, 13, 222, 12, 4, 0, 0, 1, 12, 14, 126, + 59, 0, 1, 0, 2, 8, 0, 0, 0, 0, 0, 114, 112, 224, 4, 4, 0, 6, 119, 81, 6, 32, 98, 164, 145, 193, + 45, 31, 120, 243, 144, 168, 100, 49, 84, 4, 224, 73, 72, 92, 90, 213, 166, 100, 246, 66, 103, + 26, 243, 246, 153, 133, 173, 59, 8, 4, 0, 0, 0, 0, 65, 73, 28, 136, 174, 80, 53, 242, 220, 98, + 76, 43, 50, 6, 2, 5, 205, 185, 103, 13, 169, 25, 93, 148, 104, 201, 117, 18, 196, 1, 65, 178, + 246, 38, 196, 230, 182, 133, 110, 195, 98, 252, 95, 151, 252, 54, 201, 159, 219, 167, 215, 133, + 122, 181, 50, 26, 125, 229, 215, 232, 138, 118, 243, 204, 167, 0, 227, 0, 32, 17, 181, 23, 102, + 210, 241, 125, 227, 46, 171, 126, 131, 218, 214, 253, 66, 22, 116, 205, 142, 85, 228, 175, 72, + 131, 154, 83, 153, 47, 184, 157, 94, 1, 8, 0, 0, 0, 0, 0, 0, 29, 76, 2, 33, 2, 175, 165, 163, + 174, 79, 249, 13, 185, 133, 20, 147, 249, 194, 94, 7, 71, 200, 101, 121, 72, 2, 16, 192, 254, + 121, 87, 124, 156, 129, 38, 193, 125, 4, 33, 2, 28, 121, 32, 158, 56, 3, 101, 176, 228, 108, + 52, 175, 90, 109, 116, 106, 158, 4, 106, 84, 11, 85, 175, 203, 177, 244, 74, 236, 242, 188, + 240, 230, 6, 33, 2, 60, 227, 70, 247, 179, 167, 49, 36, 118, 149, 141, 81, 75, 108, 203, 16, + 246, 243, 177, 242, 116, 25, 218, 67, 219, 185, 182, 104, 73, 24, 120, 9, 8, 33, 2, 224, 26, + 168, 176, 116, 253, 116, 195, 181, 240, 156, 83, 203, 56, 217, 21, 4, 252, 206, 47, 228, 126, + 106, 217, 229, 94, 15, 205, 229, 100, 206, 29, 10, 33, 3, 177, 222, 79, 53, 98, 224, 242, 44, + 101, 16, 136, 157, 31, 227, 224, 74, 42, 163, 135, 176, 53, 119, 107, 139, 182, 243, 177, 220, + 154, 15, 135, 249, 12, 4, 0, 0, 1, 12, 14, 0, 255, 255, 255, 255, 255, 253, 255, 255, 255, 255, + 255, 253, 0, 0, 0, 0, 0, 0, 0, 1, 201, 23, 62, 65, 84, 63, 137, 186, 185, 147, 134, 140, 99, + 135, 108, 219, 50, 127, 85, 78, 39, 244, 54, 22, 164, 110, 100, 107, 224, 32, 19, 197, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 179, 23, 201, 41, 253, 56, 169, 186, 130, 87, 217, + 208, 223, 235, 162, 73, 126, 102, 80, 241, 62, 97, 181, 44, 135, 110, 72, 6, 1, 0, 0, 0, 6, + 119, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 226, 223, 127, 106, 59, 88, 192, 252, + 24, 23, 239, 254, 29, 27, 49, 165, 198, 37, 11, 20, 13, 186, 166, 171, 167, 86, 123, 223, 254, + 110, 48, 67, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 34, 0, 32, 208, 244, 191, 20, 197, 149, 7, + 106, 201, 46, 119, 19, 187, 96, 162, 41, 247, 125, 88, 42, 229, 34, 6, 202, 244, 7, 46, 78, 14, + 61, 91, 97, 1, 1, 0, 34, 81, 32, 65, 93, 220, 7, 194, 50, 109, 153, 149, 239, 116, 229, 216, + 194, 52, 104, 10, 212, 3, 72, 161, 38, 119, 196, 117, 219, 30, 227, 74, 131, 60, 43, 253, 1, + 206, 0, 253, 1, 131, 253, 1, 128, 0, 8, 0, 0, 255, 255, 255, 255, 255, 253, 2, 8, 0, 0, 0, 0, + 0, 0, 29, 76, 4, 8, 0, 0, 0, 0, 0, 1, 138, 28, 6, 4, 0, 0, 1, 12, 8, 176, 175, 0, 33, 3, 177, + 222, 79, 53, 98, 224, 242, 44, 101, 16, 136, 157, 31, 227, 224, 74, 42, 163, 135, 176, 53, 119, + 107, 139, 182, 243, 177, 220, 154, 15, 135, 249, 2, 33, 2, 175, 165, 163, 174, 79, 249, 13, + 185, 133, 20, 147, 249, 194, 94, 7, 71, 200, 101, 121, 72, 2, 16, 192, 254, 121, 87, 124, 156, + 129, 38, 193, 125, 4, 33, 2, 28, 121, 32, 158, 56, 3, 101, 176, 228, 108, 52, 175, 90, 109, + 116, 106, 158, 4, 106, 84, 11, 85, 175, 203, 177, 244, 74, 236, 242, 188, 240, 230, 6, 33, 2, + 60, 227, 70, 247, 179, 167, 49, 36, 118, 149, 141, 81, 75, 108, 203, 16, 246, 243, 177, 242, + 116, 25, 218, 67, 219, 185, 182, 104, 73, 24, 120, 9, 8, 33, 2, 224, 26, 168, 176, 116, 253, + 116, 195, 181, 240, 156, 83, 203, 56, 217, 21, 4, 252, 206, 47, 228, 126, 106, 217, 229, 94, + 15, 205, 229, 100, 206, 29, 10, 162, 161, 0, 125, 2, 0, 0, 0, 1, 226, 223, 127, 106, 59, 88, + 192, 252, 24, 23, 239, 254, 29, 27, 49, 165, 198, 37, 11, 20, 13, 186, 166, 171, 167, 86, 123, + 223, 254, 110, 48, 67, 0, 0, 0, 0, 0, 35, 109, 154, 128, 2, 76, 29, 0, 0, 0, 0, 0, 0, 34, 0, + 32, 51, 225, 205, 29, 34, 103, 27, 41, 45, 87, 228, 143, 80, 119, 195, 209, 26, 8, 150, 85, 30, + 243, 164, 98, 185, 70, 152, 237, 233, 132, 251, 74, 28, 138, 1, 0, 0, 0, 0, 0, 22, 0, 20, 51, + 158, 131, 246, 71, 104, 102, 154, 80, 177, 165, 227, 253, 31, 103, 124, 143, 230, 217, 25, 12, + 90, 244, 32, 2, 32, 17, 181, 23, 102, 210, 241, 125, 227, 46, 171, 126, 131, 218, 214, 253, 66, + 22, 116, 205, 142, 85, 228, 175, 72, 131, 154, 83, 153, 47, 184, 157, 94, 12, 0, 15, 2, 16, 0, + 2, 64, 29, 248, 93, 57, 251, 90, 191, 219, 227, 162, 168, 98, 11, 252, 50, 158, 160, 138, 223, + 167, 135, 212, 146, 192, 86, 10, 159, 50, 39, 201, 235, 229, 102, 39, 141, 18, 118, 169, 213, + 154, 39, 245, 23, 239, 34, 54, 227, 103, 112, 56, 5, 195, 3, 4, 205, 24, 119, 220, 201, 156, + 209, 86, 165, 73, 4, 1, 1, 6, 0, 0, 253, 2, 78, 253, 2, 74, 0, 253, 1, 191, 253, 1, 188, 0, 8, + 0, 0, 255, 255, 255, 255, 255, 254, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 0, 0, 0, 0, 0, 1, 137, + 238, 6, 4, 0, 0, 1, 12, 8, 176, 175, 0, 33, 3, 158, 20, 175, 174, 221, 138, 182, 249, 11, 94, + 240, 251, 232, 201, 73, 25, 247, 123, 108, 198, 153, 89, 84, 209, 127, 114, 55, 144, 120, 149, + 13, 222, 2, 33, 2, 15, 137, 104, 72, 210, 98, 222, 187, 143, 161, 238, 208, 85, 191, 192, 166, + 99, 127, 139, 155, 243, 39, 242, 172, 117, 196, 153, 176, 86, 203, 0, 47, 4, 33, 3, 145, 83, + 28, 120, 41, 12, 163, 45, 249, 88, 105, 185, 130, 77, 228, 169, 21, 241, 114, 192, 231, 75, + 138, 21, 193, 194, 89, 100, 165, 86, 190, 94, 6, 33, 2, 97, 95, 89, 103, 186, 249, 85, 156, + 250, 70, 98, 33, 19, 131, 201, 65, 216, 117, 134, 107, 249, 69, 65, 20, 86, 97, 151, 141, 126, + 165, 18, 82, 8, 33, 2, 85, 204, 109, 230, 216, 30, 33, 108, 62, 43, 13, 255, 136, 174, 50, 235, + 129, 103, 240, 176, 16, 46, 218, 47, 162, 71, 33, 26, 190, 13, 53, 239, 10, 162, 161, 0, 125, + 2, 0, 0, 0, 1, 226, 223, 127, 106, 59, 88, 192, 252, 24, 23, 239, 254, 29, 27, 49, 165, 198, + 37, 11, 20, 13, 186, 166, 171, 167, 86, 123, 223, 254, 110, 48, 67, 0, 0, 0, 0, 0, 35, 109, + 154, 128, 2, 76, 29, 0, 0, 0, 0, 0, 0, 34, 0, 32, 208, 147, 170, 59, 12, 215, 105, 107, 155, + 107, 67, 8, 167, 131, 245, 95, 195, 242, 190, 170, 75, 42, 164, 200, 33, 212, 126, 24, 240, + 170, 202, 83, 238, 137, 1, 0, 0, 0, 0, 0, 22, 0, 20, 51, 158, 131, 246, 71, 104, 102, 154, 80, + 177, 165, 227, 253, 31, 103, 124, 143, 230, 217, 25, 15, 90, 244, 32, 2, 32, 89, 217, 56, 33, + 63, 107, 197, 44, 64, 80, 134, 90, 183, 137, 23, 25, 45, 100, 192, 240, 112, 73, 8, 50, 77, 16, + 167, 36, 10, 142, 187, 118, 12, 60, 59, 0, 1, 0, 2, 8, 0, 0, 0, 0, 0, 114, 112, 224, 4, 4, 0, + 6, 119, 81, 6, 32, 98, 164, 145, 193, 45, 31, 120, 243, 144, 168, 100, 49, 84, 4, 224, 73, 72, + 92, 90, 213, 166, 100, 246, 66, 103, 26, 243, 246, 153, 133, 173, 59, 8, 4, 0, 0, 0, 0, 15, 2, + 16, 0, 2, 64, 80, 191, 58, 169, 212, 71, 51, 95, 72, 143, 113, 69, 77, 137, 229, 162, 1, 241, + 198, 96, 5, 234, 242, 250, 7, 189, 12, 196, 211, 195, 70, 104, 68, 157, 50, 134, 195, 251, 238, + 202, 143, 151, 190, 174, 193, 235, 242, 188, 118, 254, 233, 206, 113, 37, 31, 51, 245, 228, + 176, 206, 43, 228, 92, 83, 4, 1, 1, 6, 64, 73, 28, 136, 174, 80, 53, 242, 220, 98, 76, 43, 50, + 6, 2, 5, 205, 185, 103, 13, 169, 25, 93, 148, 104, 201, 117, 18, 196, 1, 65, 178, 246, 38, 196, + 230, 182, 133, 110, 195, 98, 252, 95, 151, 252, 54, 201, 159, 219, 167, 215, 133, 122, 181, 50, + 26, 125, 229, 215, 232, 138, 118, 243, 204, 167, 0, 253, 1, 154, 0, 176, 175, 0, 33, 2, 187, 2, + 3, 79, 186, 192, 60, 67, 252, 172, 82, 26, 102, 22, 113, 168, 132, 178, 196, 196, 123, 110, + 147, 195, 27, 156, 18, 200, 244, 151, 205, 254, 2, 33, 3, 210, 234, 68, 18, 21, 39, 158, 188, + 30, 48, 110, 109, 138, 227, 110, 155, 105, 174, 70, 253, 241, 91, 239, 159, 253, 83, 253, 26, + 206, 232, 60, 39, 4, 33, 2, 244, 19, 142, 111, 20, 44, 233, 125, 191, 160, 222, 234, 95, 70, + 122, 5, 96, 41, 155, 121, 3, 213, 132, 63, 131, 69, 15, 228, 130, 253, 114, 21, 6, 33, 2, 63, + 234, 246, 244, 91, 189, 96, 58, 68, 236, 168, 170, 63, 146, 247, 33, 150, 16, 148, 180, 104, + 75, 188, 198, 143, 249, 6, 27, 73, 164, 78, 202, 8, 33, 3, 76, 42, 89, 187, 90, 189, 240, 115, + 251, 1, 44, 247, 198, 84, 118, 102, 173, 11, 202, 151, 61, 122, 222, 253, 36, 37, 19, 183, 217, + 8, 229, 173, 2, 2, 0, 144, 4, 1, 0, 6, 183, 182, 0, 176, 175, 0, 33, 3, 131, 221, 176, 32, 165, + 131, 251, 198, 154, 238, 179, 38, 122, 19, 19, 211, 203, 12, 0, 199, 161, 186, 226, 233, 31, + 45, 196, 174, 114, 119, 95, 177, 2, 33, 2, 45, 83, 223, 96, 212, 69, 226, 199, 245, 94, 185, + 86, 181, 149, 106, 88, 201, 145, 45, 215, 114, 176, 188, 203, 21, 191, 3, 104, 100, 163, 204, + 122, 4, 33, 3, 183, 46, 17, 0, 22, 89, 15, 4, 245, 60, 239, 75, 44, 83, 246, 243, 29, 25, 163, + 57, 190, 142, 154, 163, 166, 210, 146, 62, 254, 20, 139, 230, 6, 33, 3, 33, 88, 253, 177, 233, + 158, 226, 126, 248, 230, 147, 151, 18, 250, 180, 242, 239, 106, 199, 121, 76, 165, 236, 84, + 151, 218, 162, 193, 73, 216, 163, 235, 8, 33, 2, 102, 194, 245, 56, 190, 148, 142, 23, 14, 18, + 212, 128, 124, 41, 30, 99, 228, 244, 77, 167, 111, 159, 210, 77, 134, 43, 250, 151, 154, 217, + 163, 226, 2, 2, 0, 6, 8, 34, 226, 223, 127, 106, 59, 88, 192, 252, 24, 23, 239, 254, 29, 27, + 49, 165, 198, 37, 11, 20, 13, 186, 166, 171, 167, 86, 123, 223, 254, 110, 48, 67, 0, 0, 11, 2, + 16, 0, 0, 0, 2, 139, 1, 1, 135, 211, 13, 56, 138, 53, 76, 177, 22, 89, 33, 173, 232, 104, 58, + 46, 9, 214, 248, 141, 2, 74, 73, 175, 151, 192, 64, 152, 26, 208, 88, 28, 68, 148, 225, 145, + 60, 246, 85, 136, 233, 107, 89, 21, 33, 187, 115, 203, 12, 155, 5, 18, 98, 20, 216, 147, 53, + 226, 212, 241, 106, 200, 172, 245, 84, 75, 149, 55, 54, 37, 197, 178, 195, 160, 223, 29, 37, + 12, 142, 168, 202, 82, 118, 153, 95, 154, 132, 46, 239, 233, 98, 178, 156, 104, 110, 178, 4, + 73, 61, 133, 51, 69, 166, 249, 177, 47, 251, 109, 231, 4, 111, 77, 48, 253, 113, 109, 128, 180, + 136, 29, 3, 245, 150, 23, 165, 156, 30, 74, 184, 6, 55, 180, 180, 179, 100, 37, 185, 14, 208, + 210, 191, 137, 29, 30, 7, 12, 226, 111, 250, 114, 70, 237, 180, 55, 24, 175, 130, 153, 26, 57, + 69, 59, 171, 225, 158, 186, 169, 209, 50, 235, 250, 170, 88, 118, 12, 37, 103, 189, 106, 253, + 106, 113, 255, 235, 229, 216, 39, 40, 62, 199, 224, 43, 253, 1, 158, 253, 1, 154, 0, 176, 175, + 0, 33, 2, 187, 2, 3, 79, 186, 192, 60, 67, 252, 172, 82, 26, 102, 22, 113, 168, 132, 178, 196, + 196, 123, 110, 147, 195, 27, 156, 18, 200, 244, 151, 205, 254, 2, 33, 3, 210, 234, 68, 18, 21, + 39, 158, 188, 30, 48, 110, 109, 138, 227, 110, 155, 105, 174, 70, 253, 241, 91, 239, 159, 253, + 83, 253, 26, 206, 232, 60, 39, 4, 33, 2, 244, 19, 142, 111, 20, 44, 233, 125, 191, 160, 222, + 234, 95, 70, 122, 5, 96, 41, 155, 121, 3, 213, 132, 63, 131, 69, 15, 228, 130, 253, 114, 21, 6, + 33, 2, 63, 234, 246, 244, 91, 189, 96, 58, 68, 236, 168, 170, 63, 146, 247, 33, 150, 16, 148, + 180, 104, 75, 188, 198, 143, 249, 6, 27, 73, 164, 78, 202, 8, 33, 3, 76, 42, 89, 187, 90, 189, + 240, 115, 251, 1, 44, 247, 198, 84, 118, 102, 173, 11, 202, 151, 61, 122, 222, 253, 36, 37, 19, + 183, 217, 8, 229, 173, 2, 2, 0, 144, 4, 1, 0, 6, 183, 182, 0, 176, 175, 0, 33, 3, 131, 221, + 176, 32, 165, 131, 251, 198, 154, 238, 179, 38, 122, 19, 19, 211, 203, 12, 0, 199, 161, 186, + 226, 233, 31, 45, 196, 174, 114, 119, 95, 177, 2, 33, 2, 45, 83, 223, 96, 212, 69, 226, 199, + 245, 94, 185, 86, 181, 149, 106, 88, 201, 145, 45, 215, 114, 176, 188, 203, 21, 191, 3, 104, + 100, 163, 204, 122, 4, 33, 3, 183, 46, 17, 0, 22, 89, 15, 4, 245, 60, 239, 75, 44, 83, 246, + 243, 29, 25, 163, 57, 190, 142, 154, 163, 166, 210, 146, 62, 254, 20, 139, 230, 6, 33, 3, 33, + 88, 253, 177, 233, 158, 226, 126, 248, 230, 147, 151, 18, 250, 180, 242, 239, 106, 199, 121, + 76, 165, 236, 84, 151, 218, 162, 193, 73, 216, 163, 235, 8, 33, 2, 102, 194, 245, 56, 190, 148, + 142, 23, 14, 18, 212, 128, 124, 41, 30, 99, 228, 244, 77, 167, 111, 159, 210, 77, 134, 43, 250, + 151, 154, 217, 163, 226, 2, 2, 0, 6, 8, 34, 226, 223, 127, 106, 59, 88, 192, 252, 24, 23, 239, + 254, 29, 27, 49, 165, 198, 37, 11, 20, 13, 186, 166, 171, 167, 86, 123, 223, 254, 110, 48, 67, + 0, 0, 11, 2, 16, 0, 0, 0, 0, 0, 0, 1, 168, 42, 0, 0, 0, 0, 153, 138, 15, 64, 0, 0, 0, 0, 101, + 9, 69, 166, 8, 100, 42, 4, 222, 170, 7, 115, 149, 79, 64, 161, 84, 83, 192, 134, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 3, 0, 5, 0, 7, 1, 0, 9, 33, 3, 102, 171, 200, 235, 77, 166, 30, 49, 168, 210, 196, 82, 13, + 49, 202, 189, 245, 140, 197, 37, 15, 133, 86, 87, 57, 127, 61, 214, 36, 147, 147, 138, 13, 0, + 15, 2, 0, 0, +]; diff --git a/mutiny-core/src/utils.rs b/mutiny-core/src/utils.rs index 16f277614..7bb802bf4 100644 --- a/mutiny-core/src/utils.rs +++ b/mutiny-core/src/utils.rs @@ -170,3 +170,11 @@ where wasm_bindgen_futures::spawn_local(future); } } + +/// Returns the version of a channel monitor from a serialized version +/// of a channel monitor. +pub fn get_monitor_version(bytes: Vec) -> u64 { + // first two bytes are the version + // next 8 bytes are the version number + u64::from_be_bytes(bytes[2..10].try_into().unwrap()) +} diff --git a/mutiny-wasm/src/indexed_db.rs b/mutiny-wasm/src/indexed_db.rs index 36d9e3cff..5a2f225c1 100644 --- a/mutiny-wasm/src/indexed_db.rs +++ b/mutiny-wasm/src/indexed_db.rs @@ -252,13 +252,12 @@ impl IndexedDbStorage { match current.get::>(&key)? { Some(bytes) => { // check first byte is 1, then take u64 from next 8 bytes - let current_version = u64::from_be_bytes(bytes[1..9].try_into().unwrap()); + let current_version = utils::get_monitor_version(bytes); let obj: Value = LocalStorage::get(&key).unwrap(); let value = decrypt_value(&key, obj, current.password())?; if let Ok(local_bytes) = serde_json::from_value::>(value.clone()) { - let local_version = - u64::from_be_bytes(local_bytes[1..9].try_into().unwrap()); + let local_version = utils::get_monitor_version(local_bytes); // if the current version is less than the version from local storage // then we want to use the local storage version @@ -367,13 +366,20 @@ impl IndexedDbStorage { // we can get versions from monitors, so we should compare match current.get::>(&kv.key)? { Some(bytes) => { - // check first byte is 1, then take u64 from next 8 bytes - let current_version = - u64::from_be_bytes(bytes[1..9].try_into().unwrap()); + let current_version = utils::get_monitor_version(bytes); + // if the current version is less than the version from vss, then we want to use the vss version if current_version < kv.version as u64 { let obj = vss.get_object(&kv.key).await?; return Ok(Some((kv.key, obj.value))); + } else { + log_debug!( + logger, + "Skipping vss key {} with version {}, current version is {current_version}", + kv.key, + kv.version + ); + return Ok(None); } } None => { @@ -392,6 +398,15 @@ impl IndexedDbStorage { { return Ok(Some((kv.key, obj.value))); } + } else { + log_debug!( + logger, + "Skipping vss key {} with version {}, current version is {}", + kv.key, + kv.version, + local.version + ); + return Ok(None); } } None => { @@ -716,6 +731,7 @@ mod tests { use bitcoin::hashes::hex::ToHex; use gloo_storage::{LocalStorage, Storage}; use mutiny_core::storage::MutinyStorage; + use mutiny_core::test_utils::{MANAGER_BYTES, MONITOR_VERSION_HIGHER, MONITOR_VERSION_LOWER}; use mutiny_core::{encrypt::encryption_key_from_pass, logging::MutinyLogger}; use rexie::TransactionMode; use serde_json::json; @@ -887,15 +903,11 @@ mod tests { IndexedDbStorage::clear().await.unwrap(); } - // first byte must be 0, then the u64 in big endian, then 2 dummy bytes after - const MONITOR_VERSION_MAX: [u8; 11] = [0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1]; - const MONITOR_VERSION_0: [u8; 11] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]; - async fn compare_local_storage_versions( test_name: &str, - local_storage: [u8; 11], - indexed_db: [u8; 11], - ) -> [u8; 11] { + local_storage: Vec, + indexed_db: Vec, + ) -> Vec { let key = format!("{MONITORS_PREFIX_KEY}test_{test_name}"); // set in local storage LocalStorage::set(&key, local_storage).unwrap(); @@ -920,7 +932,7 @@ mod tests { .await .unwrap(); - let bytes: [u8; 11] = storage.get(&key).unwrap().unwrap(); + let bytes: Vec = storage.get(&key).unwrap().unwrap(); // clear the storage to clean up IndexedDbStorage::clear().await.unwrap(); @@ -933,9 +945,13 @@ mod tests { let test_name = "test_local_storage_version_0_indexed_db_version_max"; log!("{test_name}"); - let bytes = - compare_local_storage_versions(test_name, MONITOR_VERSION_0, MONITOR_VERSION_MAX).await; - assert_eq!(bytes, MONITOR_VERSION_MAX); + let bytes = compare_local_storage_versions( + test_name, + MONITOR_VERSION_LOWER.to_vec(), + MONITOR_VERSION_HIGHER.to_vec(), + ) + .await; + assert_eq!(bytes, MONITOR_VERSION_HIGHER); } #[test] @@ -943,9 +959,13 @@ mod tests { let test_name = "test_local_storage_version_max_indexed_db_version_0"; log!("{test_name}"); - let bytes = - compare_local_storage_versions(test_name, MONITOR_VERSION_MAX, MONITOR_VERSION_0).await; - assert_eq!(bytes, MONITOR_VERSION_MAX); + let bytes = compare_local_storage_versions( + test_name, + MONITOR_VERSION_HIGHER.to_vec(), + MONITOR_VERSION_LOWER.to_vec(), + ) + .await; + assert_eq!(bytes, MONITOR_VERSION_HIGHER); } #[test] @@ -953,10 +973,13 @@ mod tests { let test_name = "test_local_storage_version_max_indexed_db_version_max"; log!("{test_name}"); - let bytes = - compare_local_storage_versions(test_name, MONITOR_VERSION_MAX, MONITOR_VERSION_MAX) - .await; - assert_eq!(bytes, MONITOR_VERSION_MAX); + let bytes = compare_local_storage_versions( + test_name, + MONITOR_VERSION_HIGHER.to_vec(), + MONITOR_VERSION_HIGHER.to_vec(), + ) + .await; + assert_eq!(bytes, MONITOR_VERSION_HIGHER); } #[test] @@ -969,7 +992,7 @@ mod tests { let data = VersionedValue { version: 69, // just use this as dummy data - value: Value::String(MONITOR_VERSION_MAX.to_hex()), + value: Value::String(MANAGER_BYTES.to_hex()), }; let storage = IndexedDbStorage::new(None, None, None, logger.clone()) .await