diff --git a/lightning-background-processor/src/fwd_batch.rs b/lightning-background-processor/src/fwd_batch.rs index 0684cbd07d5..a73f0eebeb1 100644 --- a/lightning-background-processor/src/fwd_batch.rs +++ b/lightning-background-processor/src/fwd_batch.rs @@ -9,477 +9,499 @@ use core::time::Duration; +// On startup, we wait a bit before attempting the initial forward, which gives the user some time +// to re-connect peers. +const INIT_FWD_DELAY: Duration = Duration::from_secs(2); + pub(crate) struct BatchDelay { - next_batch_delay_millis: u16, + next_batch_delay: Duration, } impl BatchDelay { pub(crate) fn new() -> Self { - let next_batch_delay_millis = rand_batch_delay_millis(); - Self { next_batch_delay_millis } + let next_batch_delay = INIT_FWD_DELAY; + Self { next_batch_delay } } pub(crate) fn get(&self) -> Duration { - Duration::from_millis(self.next_batch_delay_millis as u64) + self.next_batch_delay } pub(crate) fn next(&mut self) -> Duration { - let next = rand_batch_delay_millis(); - self.next_batch_delay_millis = next; - Duration::from_millis(next as u64) + let next = rand_batch_delay(); + self.next_batch_delay = next; + next } } -fn rand_batch_delay_millis() -> u16 { +fn rand_batch_delay() -> Duration { + let delay_millis = rand_delay_millis(); + let delay_micros = rand_delay_micros(); + Duration::from_millis(delay_millis) + Duration::from_micros(delay_micros) +} + +fn rand_delay_millis() -> u64 { + // We draw milliseconds from the log-normal FWD_DELAYS_MILLIS below. const USIZE_LEN: usize = core::mem::size_of::(); let mut random_bytes = [0u8; USIZE_LEN]; possiblyrandom::getpossiblyrandom(&mut random_bytes); let index = usize::from_be_bytes(random_bytes) % FWD_DELAYS_MILLIS.len(); - FWD_DELAYS_MILLIS[index] + FWD_DELAYS_MILLIS[index] as u64 +} + +fn rand_delay_micros() -> u64 { + // We draw microseconds uniformly in [0; 1000). + let mut random_bytes = [0u8; 2]; + possiblyrandom::getpossiblyrandom(&mut random_bytes); + let micros = u16::from_be_bytes(random_bytes) % 1000; + micros as u64 } // An array of potential forwarding delays (log-normal distribution, 10000 samples, mean = 50, sd = 0.5), generated via the following R-script: // ``` -// set.seed(123) +// set.seed(10) // n <- 10000 // meanlog <- log(50) // sdlog <- 0.5 +// min = 0 +// max = 200 // log_normal_data <- round(rlnorm(n, meanlog = meanlog, sdlog = sdlog)) +// log_normal_data <- log_normal_data[log_normal_data >= min & log_normal_data <= max] // cat(log_normal_data, file = "log_normal_data.txt", sep = ", ") // ``` -static FWD_DELAYS_MILLIS: [u16; 10000] = [ - 50, 38, 45, 109, 52, 53, 118, 63, 27, 35, 40, 92, 60, 61, 53, 38, 122, 64, 19, 71, 39, 29, 45, - 30, 35, 37, 22, 76, 54, 28, 94, 62, 43, 78, 78, 75, 71, 66, 48, 43, 41, 35, 45, 27, 148, 91, - 29, 41, 40, 74, 48, 57, 49, 49, 99, 45, 107, 23, 67, 53, 56, 60, 39, 42, 30, 29, 58, 63, 51, - 79, 139, 39, 16, 83, 35, 35, 83, 43, 27, 55, 47, 50, 61, 42, 69, 45, 59, 87, 62, 42, 89, 82, - 66, 56, 37, 99, 37, 149, 108, 44, 30, 35, 57, 44, 42, 31, 49, 34, 22, 41, 79, 38, 68, 22, 49, - 65, 58, 53, 36, 33, 30, 53, 31, 39, 44, 126, 36, 56, 52, 31, 48, 103, 63, 51, 40, 18, 88, 24, - 72, 130, 24, 71, 44, 23, 23, 22, 38, 24, 71, 143, 26, 74, 73, 59, 30, 47, 43, 66, 42, 81, 41, - 85, 30, 27, 253, 41, 58, 69, 39, 65, 60, 45, 52, 49, 145, 35, 29, 51, 58, 62, 40, 29, 94, 42, - 32, 44, 45, 87, 52, 73, 39, 56, 43, 52, 32, 26, 136, 68, 27, 37, 28, 150, 96, 44, 66, 41, 39, - 34, 37, 114, 49, 53, 56, 93, 39, 30, 116, 40, 35, 27, 26, 38, 68, 87, 71, 42, 52, 35, 35, 78, - 30, 133, 48, 56, 35, 38, 26, 46, 62, 59, 34, 34, 39, 106, 28, 46, 129, 48, 25, 36, 64, 41, 38, - 42, 52, 111, 48, 86, 69, 47, 23, 39, 39, 51, 96, 157, 108, 47, 21, 41, 52, 76, 81, 70, 25, 76, - 40, 55, 52, 62, 51, 22, 72, 61, 44, 53, 53, 56, 114, 45, 54, 90, 85, 89, 37, 136, 52, 127, 25, - 51, 93, 35, 34, 31, 30, 40, 59, 18, 56, 93, 138, 96, 73, 21, 37, 42, 71, 47, 27, 116, 79, 56, - 92, 26, 70, 38, 70, 49, 69, 97, 50, 83, 28, 35, 107, 60, 18, 25, 45, 77, 48, 68, 81, 115, 51, - 49, 21, 53, 38, 31, 46, 83, 18, 40, 53, 32, 59, 61, 49, 15, 181, 45, 69, 57, 83, 75, 45, 60, - 31, 77, 40, 167, 22, 40, 76, 65, 37, 30, 54, 20, 51, 55, 55, 30, 63, 100, 63, 28, 40, 59, 36, - 17, 78, 33, 38, 106, 34, 76, 27, 42, 48, 28, 36, 49, 70, 22, 42, 73, 38, 56, 64, 57, 69, 47, - 41, 13, 48, 62, 65, 38, 122, 58, 53, 94, 35, 40, 166, 50, 113, 24, 45, 60, 58, 30, 50, 29, 71, - 86, 16, 93, 27, 63, 70, 45, 36, 54, 62, 78, 18, 22, 102, 84, 62, 71, 79, 13, 87, 39, 56, 43, - 77, 42, 65, 41, 29, 92, 72, 118, 52, 88, 134, 43, 26, 44, 45, 54, 118, 42, 60, 45, 51, 59, 97, - 53, 71, 74, 79, 38, 113, 41, 47, 101, 95, 29, 32, 25, 55, 54, 60, 66, 37, 30, 84, 73, 24, 48, - 32, 18, 54, 48, 48, 56, 78, 55, 37, 35, 47, 58, 30, 46, 81, 47, 35, 44, 87, 66, 93, 54, 61, 38, - 68, 39, 25, 53, 132, 75, 90, 60, 37, 45, 44, 40, 71, 27, 77, 77, 27, 69, 169, 38, 76, 34, 87, - 57, 114, 24, 49, 38, 45, 36, 33, 67, 29, 105, 28, 53, 65, 67, 43, 52, 81, 24, 34, 59, 40, 99, - 70, 52, 24, 51, 43, 48, 28, 64, 30, 45, 61, 34, 67, 26, 12, 63, 76, 43, 64, 28, 47, 19, 90, - 127, 86, 49, 49, 23, 74, 45, 36, 25, 43, 33, 41, 27, 116, 50, 86, 14, 40, 36, 27, 108, 25, 59, - 76, 55, 32, 80, 54, 29, 25, 142, 36, 20, 65, 58, 25, 19, 47, 88, 69, 39, 33, 57, 54, 69, 41, - 78, 33, 42, 72, 82, 19, 53, 68, 24, 64, 33, 83, 65, 73, 53, 77, 100, 134, 49, 16, 51, 55, 46, - 66, 83, 39, 43, 61, 38, 52, 19, 29, 26, 33, 35, 61, 82, 35, 30, 30, 41, 44, 64, 43, 18, 48, 91, - 91, 34, 23, 171, 46, 48, 62, 22, 35, 23, 35, 53, 25, 67, 58, 32, 56, 73, 85, 45, 48, 48, 103, - 88, 76, 43, 60, 61, 30, 21, 69, 23, 50, 57, 66, 55, 35, 82, 119, 78, 19, 101, 49, 65, 68, 48, - 48, 83, 71, 82, 165, 70, 55, 17, 192, 39, 164, 60, 108, 47, 65, 56, 46, 47, 83, 45, 18, 45, 65, - 68, 68, 21, 60, 81, 95, 45, 43, 105, 22, 40, 63, 22, 58, 128, 50, 44, 63, 43, 75, 79, 50, 28, - 26, 37, 74, 19, 19, 36, 61, 32, 78, 59, 46, 75, 61, 40, 56, 69, 60, 36, 77, 89, 57, 54, 48, - 147, 57, 46, 14, 23, 48, 55, 57, 75, 45, 92, 32, 27, 27, 72, 48, 74, 44, 37, 42, 20, 28, 24, - 85, 37, 74, 107, 45, 58, 21, 33, 51, 58, 34, 191, 40, 52, 69, 49, 36, 84, 112, 49, 66, 48, 83, - 28, 160, 37, 24, 42, 54, 113, 79, 54, 25, 32, 46, 179, 20, 88, 38, 115, 28, 54, 29, 79, 105, - 133, 75, 126, 93, 47, 63, 31, 46, 92, 66, 63, 30, 37, 34, 61, 30, 66, 29, 125, 63, 35, 56, 42, - 60, 56, 30, 34, 58, 113, 86, 37, 76, 49, 58, 57, 181, 28, 53, 21, 67, 87, 103, 19, 61, 111, 41, - 45, 49, 60, 70, 97, 48, 55, 173, 62, 55, 26, 50, 45, 50, 37, 35, 35, 45, 99, 84, 42, 22, 33, - 40, 53, 36, 136, 44, 27, 47, 30, 54, 56, 60, 22, 56, 58, 25, 81, 74, 158, 54, 51, 52, 52, 20, - 22, 48, 37, 51, 17, 24, 29, 82, 29, 34, 52, 43, 54, 158, 28, 43, 39, 107, 34, 48, 74, 29, 114, - 70, 29, 63, 45, 58, 48, 85, 25, 39, 44, 30, 30, 50, 47, 14, 84, 57, 167, 70, 40, 202, 206, 27, - 63, 45, 55, 56, 27, 58, 120, 46, 46, 101, 78, 22, 56, 114, 101, 62, 72, 27, 58, 31, 40, 80, 28, - 57, 62, 51, 124, 30, 68, 48, 44, 63, 30, 26, 39, 120, 51, 59, 45, 63, 31, 89, 67, 33, 51, 72, - 66, 105, 37, 87, 84, 46, 31, 29, 63, 48, 122, 65, 42, 30, 37, 59, 40, 65, 42, 47, 35, 130, 59, - 56, 21, 70, 30, 32, 79, 40, 21, 121, 15, 67, 83, 36, 62, 62, 84, 64, 44, 79, 75, 31, 25, 54, - 44, 31, 52, 26, 54, 37, 81, 168, 32, 85, 76, 48, 40, 110, 18, 36, 24, 100, 45, 38, 246, 49, 40, - 58, 23, 64, 48, 63, 31, 30, 35, 34, 96, 110, 46, 42, 42, 52, 52, 58, 34, 33, 91, 38, 58, 49, - 31, 67, 55, 101, 53, 42, 57, 28, 33, 65, 42, 48, 47, 36, 18, 60, 73, 26, 105, 61, 98, 31, 54, - 48, 73, 37, 50, 21, 34, 53, 35, 49, 40, 68, 90, 33, 43, 103, 17, 43, 140, 150, 54, 32, 54, 36, - 103, 33, 60, 68, 34, 77, 34, 69, 87, 31, 87, 39, 58, 55, 40, 57, 27, 47, 76, 17, 24, 28, 23, - 62, 30, 17, 36, 41, 77, 29, 89, 61, 60, 33, 133, 46, 20, 45, 19, 43, 40, 70, 83, 35, 75, 102, - 34, 36, 69, 55, 66, 101, 61, 85, 68, 62, 61, 95, 30, 29, 67, 47, 52, 72, 73, 44, 43, 52, 85, - 62, 102, 50, 88, 78, 68, 62, 43, 47, 56, 51, 80, 47, 48, 39, 47, 48, 16, 25, 48, 44, 27, 18, - 42, 69, 121, 49, 105, 52, 53, 59, 32, 49, 79, 34, 43, 28, 60, 62, 69, 27, 53, 31, 50, 98, 39, - 72, 34, 39, 62, 36, 21, 94, 60, 37, 18, 129, 272, 55, 76, 92, 35, 42, 21, 35, 68, 43, 45, 47, - 20, 76, 24, 45, 40, 45, 104, 37, 34, 23, 33, 28, 61, 32, 58, 46, 24, 34, 78, 79, 136, 50, 24, - 34, 61, 129, 53, 88, 73, 28, 46, 96, 77, 63, 63, 39, 26, 96, 25, 31, 68, 27, 38, 28, 68, 63, - 62, 62, 66, 69, 19, 46, 53, 72, 28, 39, 29, 85, 95, 74, 27, 63, 89, 54, 38, 29, 36, 71, 40, 56, - 96, 67, 99, 21, 43, 52, 67, 28, 75, 58, 57, 64, 47, 79, 69, 46, 84, 58, 70, 37, 110, 50, 76, - 48, 43, 74, 23, 64, 61, 13, 60, 17, 70, 40, 35, 50, 99, 36, 66, 59, 28, 21, 18, 66, 49, 126, - 67, 76, 97, 39, 65, 77, 99, 73, 62, 32, 72, 64, 69, 62, 45, 48, 71, 54, 33, 43, 26, 31, 47, 20, - 21, 87, 37, 20, 47, 97, 70, 62, 90, 34, 72, 37, 50, 151, 81, 73, 29, 34, 157, 29, 56, 78, 83, - 86, 46, 33, 43, 32, 68, 88, 145, 60, 32, 83, 79, 44, 23, 73, 88, 43, 65, 44, 70, 47, 42, 53, - 43, 37, 43, 50, 55, 108, 25, 45, 69, 121, 62, 50, 43, 62, 82, 46, 54, 56, 72, 87, 57, 48, 100, - 54, 110, 48, 68, 23, 47, 49, 34, 30, 80, 79, 26, 62, 29, 30, 65, 35, 82, 51, 65, 38, 28, 79, - 56, 44, 52, 97, 35, 34, 37, 23, 75, 55, 55, 49, 39, 33, 77, 25, 62, 34, 58, 35, 38, 121, 70, - 17, 53, 40, 28, 56, 53, 42, 134, 16, 76, 43, 69, 40, 37, 21, 45, 173, 82, 116, 79, 89, 79, 63, - 37, 38, 22, 50, 78, 84, 52, 38, 259, 72, 102, 42, 49, 63, 116, 43, 77, 18, 39, 26, 87, 46, 41, - 99, 87, 32, 62, 27, 39, 112, 103, 87, 38, 20, 28, 81, 43, 17, 46, 101, 69, 33, 23, 33, 51, 78, - 19, 83, 50, 66, 22, 36, 40, 84, 84, 62, 112, 39, 83, 49, 36, 79, 100, 78, 39, 40, 100, 60, 76, - 42, 94, 33, 68, 33, 15, 26, 54, 78, 21, 27, 121, 40, 64, 38, 43, 52, 50, 45, 40, 11, 127, 122, - 29, 46, 99, 82, 95, 29, 181, 28, 73, 54, 41, 41, 30, 113, 52, 57, 56, 41, 28, 57, 18, 25, 29, - 29, 53, 111, 23, 62, 78, 30, 49, 75, 44, 45, 58, 49, 38, 47, 128, 77, 32, 27, 42, 97, 58, 35, - 78, 47, 29, 63, 107, 62, 55, 36, 66, 29, 22, 49, 49, 163, 27, 54, 75, 85, 50, 34, 48, 132, 64, - 18, 102, 66, 49, 50, 46, 57, 39, 57, 31, 55, 87, 64, 84, 29, 51, 68, 29, 109, 30, 54, 54, 53, - 45, 63, 30, 26, 36, 49, 94, 111, 59, 61, 44, 51, 25, 58, 38, 59, 42, 36, 45, 42, 86, 56, 62, - 27, 106, 54, 33, 58, 77, 25, 116, 46, 88, 52, 42, 20, 29, 49, 76, 20, 99, 101, 28, 63, 30, 47, - 80, 77, 33, 41, 31, 59, 23, 13, 104, 156, 40, 73, 50, 104, 66, 55, 20, 86, 42, 25, 45, 47, 85, - 28, 38, 105, 99, 89, 115, 55, 37, 66, 85, 167, 19, 57, 69, 49, 23, 72, 34, 64, 79, 95, 23, 86, - 34, 26, 96, 89, 44, 73, 33, 46, 48, 43, 72, 108, 40, 49, 113, 42, 14, 65, 32, 30, 102, 170, 30, - 84, 48, 54, 92, 56, 33, 40, 70, 16, 86, 23, 51, 45, 95, 55, 53, 71, 33, 45, 90, 70, 26, 69, 25, - 37, 92, 16, 21, 96, 33, 93, 46, 62, 75, 36, 43, 41, 204, 53, 63, 42, 44, 100, 42, 51, 60, 40, - 133, 24, 137, 42, 99, 18, 81, 77, 26, 34, 55, 89, 34, 45, 110, 28, 80, 63, 29, 36, 74, 57, 102, - 37, 21, 84, 37, 53, 118, 44, 109, 29, 79, 57, 35, 26, 52, 57, 57, 65, 40, 39, 56, 38, 92, 55, - 37, 20, 36, 139, 38, 33, 69, 62, 73, 44, 88, 28, 49, 35, 70, 53, 87, 140, 54, 38, 33, 44, 48, - 135, 28, 29, 41, 67, 75, 32, 53, 49, 91, 86, 43, 51, 69, 22, 43, 67, 38, 49, 49, 35, 30, 45, - 42, 76, 107, 50, 61, 48, 68, 56, 56, 87, 31, 103, 60, 55, 38, 46, 60, 18, 37, 67, 43, 34, 36, - 56, 22, 77, 17, 39, 34, 27, 29, 57, 47, 43, 16, 26, 47, 32, 34, 85, 55, 30, 40, 43, 36, 31, 49, - 72, 56, 45, 61, 74, 47, 63, 28, 44, 41, 55, 60, 47, 34, 31, 57, 99, 34, 41, 59, 38, 53, 49, 34, - 76, 76, 83, 94, 39, 40, 57, 69, 42, 40, 37, 105, 14, 46, 51, 29, 61, 19, 81, 22, 17, 34, 54, - 36, 38, 59, 29, 48, 64, 113, 64, 118, 63, 50, 16, 27, 43, 71, 43, 66, 29, 44, 56, 42, 53, 36, - 60, 48, 49, 19, 36, 24, 22, 39, 46, 58, 86, 62, 83, 38, 43, 86, 50, 22, 33, 83, 37, 59, 50, 39, - 42, 61, 56, 93, 45, 32, 54, 71, 156, 40, 42, 78, 95, 36, 70, 38, 31, 68, 53, 61, 37, 123, 70, - 41, 71, 27, 47, 101, 45, 79, 45, 16, 32, 56, 103, 37, 57, 31, 30, 34, 99, 80, 67, 87, 40, 73, - 56, 30, 33, 51, 55, 43, 30, 18, 62, 43, 66, 23, 27, 47, 25, 19, 74, 78, 30, 44, 28, 59, 49, 32, - 34, 29, 62, 67, 60, 33, 20, 65, 46, 49, 84, 32, 89, 41, 35, 45, 61, 45, 32, 43, 14, 39, 63, 46, - 71, 64, 69, 69, 21, 50, 113, 39, 63, 54, 66, 44, 36, 52, 55, 46, 51, 61, 34, 88, 150, 105, 40, - 20, 51, 78, 74, 27, 29, 53, 68, 77, 75, 31, 26, 18, 64, 76, 59, 29, 109, 42, 122, 66, 91, 59, - 48, 30, 38, 49, 58, 49, 46, 55, 38, 38, 24, 76, 51, 48, 35, 44, 29, 30, 19, 82, 53, 29, 89, 68, - 72, 45, 40, 48, 61, 75, 111, 39, 30, 53, 227, 40, 89, 44, 39, 35, 45, 114, 58, 64, 76, 141, 74, - 24, 30, 23, 12, 95, 39, 61, 90, 39, 47, 60, 56, 34, 72, 66, 43, 27, 69, 102, 100, 77, 39, 38, - 37, 41, 71, 57, 20, 20, 49, 54, 16, 33, 51, 104, 18, 27, 29, 55, 59, 43, 22, 36, 38, 45, 113, - 36, 52, 35, 27, 69, 30, 196, 52, 52, 48, 126, 70, 44, 28, 30, 34, 92, 45, 34, 74, 98, 35, 40, - 59, 50, 61, 118, 49, 43, 64, 49, 68, 45, 62, 23, 50, 39, 28, 41, 60, 52, 71, 80, 76, 43, 26, - 43, 90, 47, 22, 64, 58, 41, 55, 99, 96, 40, 50, 24, 35, 136, 106, 45, 35, 25, 145, 53, 37, 86, - 29, 72, 103, 45, 103, 69, 36, 67, 35, 38, 74, 39, 49, 83, 27, 111, 139, 68, 62, 39, 64, 39, 58, - 35, 74, 71, 93, 135, 36, 81, 24, 40, 80, 35, 59, 32, 42, 49, 37, 19, 56, 63, 54, 39, 78, 86, - 15, 88, 21, 42, 29, 36, 97, 65, 64, 18, 55, 68, 77, 31, 80, 25, 119, 34, 73, 59, 29, 89, 51, - 75, 56, 77, 51, 87, 42, 65, 60, 76, 37, 55, 37, 79, 36, 119, 74, 50, 91, 48, 66, 65, 62, 37, - 27, 22, 40, 70, 44, 27, 147, 71, 132, 92, 37, 41, 24, 72, 113, 32, 27, 78, 23, 131, 67, 21, 60, - 53, 15, 49, 37, 32, 56, 77, 119, 13, 73, 31, 89, 59, 103, 24, 64, 58, 84, 45, 89, 40, 40, 51, - 29, 40, 87, 114, 87, 40, 59, 53, 27, 57, 33, 29, 72, 35, 47, 31, 51, 64, 64, 29, 94, 105, 60, - 54, 52, 57, 60, 54, 69, 42, 88, 49, 21, 48, 63, 92, 52, 19, 50, 27, 31, 30, 34, 88, 33, 40, 55, - 78, 36, 33, 39, 28, 79, 17, 38, 24, 19, 51, 108, 113, 38, 35, 38, 71, 14, 57, 41, 34, 18, 45, - 22, 50, 32, 51, 63, 39, 30, 37, 36, 24, 34, 45, 45, 59, 95, 59, 105, 36, 98, 67, 28, 61, 27, - 80, 38, 44, 36, 33, 117, 82, 70, 52, 72, 70, 111, 76, 45, 45, 40, 42, 44, 92, 16, 35, 47, 26, - 112, 44, 29, 32, 77, 127, 47, 53, 31, 97, 72, 16, 36, 44, 29, 44, 28, 60, 59, 75, 62, 111, 41, - 17, 51, 69, 41, 101, 86, 65, 52, 38, 46, 63, 81, 43, 35, 172, 65, 32, 80, 52, 76, 51, 49, 52, - 61, 37, 36, 46, 54, 43, 59, 29, 24, 129, 61, 41, 43, 74, 45, 55, 44, 39, 68, 54, 96, 28, 47, - 45, 29, 82, 47, 25, 37, 29, 84, 178, 36, 48, 58, 194, 16, 39, 27, 45, 44, 35, 125, 57, 165, 75, - 27, 34, 57, 37, 60, 72, 62, 47, 36, 26, 59, 79, 48, 73, 152, 131, 39, 66, 35, 71, 49, 57, 33, - 91, 48, 40, 48, 52, 113, 29, 171, 34, 55, 18, 36, 72, 64, 61, 40, 20, 29, 45, 68, 76, 43, 46, - 46, 51, 108, 35, 45, 52, 26, 32, 55, 62, 88, 40, 103, 32, 23, 19, 87, 58, 47, 43, 111, 91, 30, - 25, 86, 66, 39, 61, 18, 36, 62, 48, 26, 83, 89, 31, 46, 72, 77, 38, 32, 59, 19, 31, 74, 21, 27, - 44, 43, 21, 65, 30, 46, 45, 71, 48, 47, 114, 60, 68, 63, 67, 98, 49, 56, 134, 38, 95, 37, 118, - 36, 33, 84, 81, 66, 57, 56, 140, 24, 31, 26, 81, 44, 47, 122, 37, 137, 25, 97, 59, 41, 46, 98, - 117, 22, 277, 181, 38, 48, 36, 48, 72, 53, 55, 105, 17, 39, 54, 34, 85, 40, 40, 91, 76, 46, 42, - 24, 35, 183, 49, 79, 46, 68, 49, 99, 39, 21, 78, 44, 104, 53, 103, 60, 42, 72, 40, 116, 54, 18, - 39, 22, 17, 52, 69, 34, 26, 37, 23, 71, 67, 23, 37, 84, 46, 50, 62, 68, 91, 74, 25, 42, 58, 47, - 17, 34, 83, 54, 24, 56, 46, 70, 143, 23, 39, 47, 17, 49, 37, 153, 12, 105, 83, 72, 54, 35, 87, - 32, 71, 61, 86, 37, 37, 58, 58, 99, 64, 54, 76, 38, 86, 30, 59, 21, 57, 23, 45, 21, 36, 34, 66, - 37, 34, 92, 115, 86, 24, 95, 27, 48, 72, 45, 46, 53, 62, 61, 21, 46, 58, 67, 43, 35, 25, 35, - 47, 36, 67, 60, 22, 59, 66, 44, 49, 40, 43, 30, 62, 27, 37, 32, 32, 42, 39, 35, 44, 23, 53, 69, - 26, 25, 153, 56, 51, 45, 64, 51, 38, 40, 42, 43, 34, 86, 52, 34, 67, 60, 47, 61, 32, 45, 30, - 28, 42, 54, 32, 46, 20, 40, 90, 28, 28, 45, 65, 93, 188, 75, 70, 138, 43, 45, 57, 25, 20, 123, - 38, 40, 30, 54, 67, 45, 50, 80, 50, 38, 49, 33, 53, 32, 100, 14, 61, 39, 135, 44, 64, 61, 57, - 65, 136, 80, 55, 122, 67, 69, 93, 54, 72, 44, 53, 51, 36, 138, 38, 42, 97, 49, 90, 37, 50, 44, - 31, 43, 36, 77, 43, 48, 33, 56, 22, 11, 128, 73, 69, 16, 70, 65, 48, 76, 88, 47, 132, 82, 92, - 43, 47, 32, 61, 57, 52, 36, 45, 135, 31, 41, 25, 27, 43, 41, 37, 34, 45, 88, 42, 26, 29, 18, - 21, 34, 31, 28, 135, 120, 180, 74, 46, 30, 29, 39, 95, 70, 78, 46, 23, 59, 45, 43, 149, 77, 45, - 19, 43, 82, 60, 57, 84, 46, 42, 44, 72, 44, 73, 27, 26, 53, 73, 41, 37, 12, 60, 32, 61, 102, - 39, 71, 46, 60, 28, 62, 96, 123, 28, 65, 39, 65, 46, 44, 70, 73, 57, 63, 60, 57, 52, 79, 71, - 74, 87, 66, 46, 29, 39, 32, 43, 38, 45, 30, 37, 60, 56, 41, 83, 22, 64, 110, 41, 61, 38, 49, - 75, 32, 38, 65, 62, 75, 94, 73, 29, 54, 41, 50, 79, 57, 54, 47, 61, 28, 40, 112, 68, 31, 27, - 31, 67, 62, 38, 42, 82, 43, 49, 60, 46, 35, 41, 29, 63, 97, 56, 75, 36, 47, 47, 24, 52, 64, 70, - 97, 24, 68, 72, 45, 68, 25, 56, 10, 58, 111, 108, 13, 65, 42, 49, 17, 61, 38, 60, 45, 30, 59, - 67, 51, 66, 40, 95, 42, 37, 84, 87, 70, 56, 111, 30, 88, 118, 51, 67, 68, 91, 33, 78, 21, 141, - 38, 43, 57, 27, 44, 52, 42, 138, 20, 47, 90, 33, 47, 132, 20, 33, 27, 68, 32, 63, 36, 46, 77, - 54, 19, 38, 71, 127, 29, 45, 48, 35, 25, 125, 105, 25, 19, 44, 62, 47, 88, 44, 28, 107, 44, 43, - 44, 51, 16, 70, 72, 68, 41, 53, 24, 60, 33, 97, 31, 18, 55, 22, 31, 75, 128, 44, 81, 25, 119, - 50, 34, 61, 33, 51, 53, 90, 38, 41, 53, 78, 129, 110, 81, 19, 80, 73, 35, 38, 25, 50, 52, 21, - 23, 55, 30, 43, 83, 40, 53, 68, 28, 93, 79, 94, 40, 24, 65, 68, 178, 118, 40, 30, 68, 135, 28, - 34, 120, 125, 55, 22, 38, 90, 147, 50, 36, 58, 54, 32, 67, 100, 50, 68, 57, 63, 45, 91, 56, 39, - 69, 81, 48, 13, 113, 34, 42, 112, 19, 29, 34, 26, 87, 94, 64, 40, 40, 38, 38, 64, 79, 40, 59, - 15, 52, 32, 87, 90, 17, 79, 38, 46, 78, 71, 33, 59, 40, 93, 23, 75, 100, 14, 69, 42, 53, 44, - 71, 80, 67, 47, 40, 47, 45, 55, 33, 67, 30, 24, 57, 62, 83, 72, 56, 71, 31, 28, 27, 51, 70, 79, - 105, 59, 47, 36, 57, 48, 42, 36, 30, 31, 104, 57, 40, 23, 55, 39, 48, 45, 74, 48, 46, 164, 86, - 53, 35, 90, 31, 49, 77, 41, 42, 62, 54, 44, 45, 57, 63, 96, 41, 97, 24, 36, 25, 58, 62, 25, 51, - 32, 64, 23, 77, 49, 30, 48, 44, 42, 24, 37, 46, 24, 58, 99, 74, 34, 36, 40, 68, 49, 31, 23, 66, - 30, 64, 52, 72, 86, 25, 83, 71, 43, 50, 64, 70, 21, 104, 25, 18, 81, 23, 45, 26, 20, 40, 69, - 59, 36, 50, 48, 49, 40, 60, 29, 60, 42, 42, 71, 40, 31, 27, 70, 16, 41, 55, 25, 50, 70, 20, 32, - 121, 36, 31, 33, 40, 55, 35, 55, 71, 59, 73, 34, 47, 70, 51, 56, 51, 55, 49, 29, 55, 40, 103, - 38, 54, 19, 36, 33, 93, 46, 54, 58, 38, 58, 106, 68, 71, 33, 55, 58, 36, 53, 134, 31, 66, 29, - 60, 30, 67, 27, 51, 98, 45, 47, 101, 138, 173, 41, 30, 69, 62, 95, 54, 54, 107, 54, 70, 64, 49, - 38, 42, 19, 95, 23, 37, 42, 91, 51, 80, 43, 115, 64, 66, 78, 24, 50, 56, 34, 50, 35, 56, 20, - 58, 36, 80, 19, 51, 45, 80, 23, 38, 71, 68, 60, 58, 22, 77, 56, 20, 46, 81, 71, 36, 79, 41, 61, - 80, 61, 36, 75, 105, 31, 46, 83, 33, 21, 39, 85, 25, 44, 81, 51, 66, 113, 78, 67, 64, 28, 76, - 66, 61, 51, 26, 54, 94, 37, 20, 125, 38, 88, 68, 115, 49, 43, 119, 147, 59, 54, 72, 36, 64, 30, - 43, 74, 34, 77, 64, 102, 148, 37, 61, 109, 55, 36, 30, 101, 183, 30, 53, 23, 52, 43, 50, 213, - 25, 62, 125, 37, 33, 51, 96, 42, 30, 52, 18, 24, 86, 63, 17, 68, 16, 40, 58, 24, 94, 92, 36, - 88, 55, 69, 70, 26, 18, 151, 56, 60, 28, 88, 125, 107, 18, 30, 53, 71, 38, 33, 56, 31, 139, 20, - 64, 18, 39, 105, 88, 25, 24, 51, 31, 61, 31, 22, 40, 27, 86, 42, 49, 100, 127, 49, 59, 96, 46, - 30, 82, 23, 44, 41, 38, 13, 37, 94, 40, 37, 36, 32, 54, 67, 103, 23, 61, 46, 58, 30, 51, 28, - 70, 31, 52, 17, 59, 87, 73, 85, 25, 46, 48, 72, 46, 45, 116, 86, 21, 41, 30, 221, 39, 89, 52, - 53, 64, 47, 76, 66, 22, 38, 38, 39, 85, 105, 32, 66, 28, 38, 58, 45, 36, 27, 43, 51, 66, 32, - 67, 28, 38, 63, 35, 34, 49, 51, 80, 44, 21, 36, 36, 31, 59, 175, 74, 46, 64, 103, 43, 70, 66, - 47, 51, 69, 49, 42, 37, 58, 49, 42, 55, 34, 33, 99, 32, 59, 31, 45, 61, 30, 67, 56, 43, 57, 52, - 33, 25, 53, 30, 49, 22, 31, 57, 84, 54, 30, 41, 86, 65, 74, 82, 60, 87, 31, 58, 42, 55, 97, 64, - 36, 42, 31, 48, 39, 74, 39, 71, 72, 40, 102, 51, 36, 52, 30, 69, 32, 95, 18, 29, 42, 35, 98, - 49, 60, 71, 54, 81, 62, 71, 24, 28, 16, 44, 102, 31, 59, 62, 56, 43, 37, 36, 50, 96, 34, 47, - 53, 74, 45, 69, 24, 72, 52, 29, 16, 42, 70, 59, 42, 51, 54, 34, 51, 53, 35, 55, 58, 65, 71, 61, - 58, 48, 63, 27, 69, 38, 161, 37, 12, 99, 37, 67, 56, 87, 32, 28, 85, 31, 23, 74, 48, 156, 59, - 42, 37, 116, 27, 68, 66, 38, 108, 34, 50, 61, 160, 68, 119, 35, 21, 78, 22, 26, 68, 49, 76, - 102, 79, 61, 66, 54, 117, 51, 75, 31, 51, 18, 54, 24, 47, 44, 81, 36, 36, 19, 68, 86, 45, 105, - 41, 30, 56, 70, 24, 22, 51, 64, 15, 21, 58, 78, 41, 91, 37, 46, 98, 48, 51, 32, 52, 36, 20, 31, - 44, 54, 85, 51, 47, 87, 167, 48, 90, 64, 48, 19, 31, 38, 29, 28, 41, 80, 32, 53, 45, 74, 51, - 46, 37, 78, 88, 50, 257, 50, 216, 47, 23, 25, 32, 105, 117, 61, 58, 38, 36, 35, 32, 38, 37, 65, - 74, 111, 15, 64, 43, 44, 22, 49, 34, 60, 29, 280, 34, 43, 27, 42, 145, 41, 68, 31, 108, 63, 35, - 56, 41, 64, 33, 63, 110, 94, 58, 59, 62, 78, 61, 68, 69, 56, 72, 51, 83, 40, 55, 51, 29, 91, - 28, 96, 29, 31, 77, 48, 20, 106, 14, 35, 23, 38, 52, 42, 37, 46, 57, 33, 18, 31, 19, 69, 127, - 28, 32, 32, 74, 51, 64, 74, 57, 63, 28, 48, 37, 26, 28, 80, 26, 41, 82, 59, 69, 59, 46, 17, 37, - 25, 41, 140, 54, 35, 78, 64, 48, 45, 46, 48, 68, 53, 37, 76, 35, 96, 31, 73, 94, 92, 47, 71, - 17, 62, 47, 67, 53, 96, 46, 72, 47, 69, 27, 68, 41, 61, 32, 66, 223, 108, 82, 37, 59, 46, 19, - 44, 43, 48, 38, 69, 130, 89, 70, 51, 52, 89, 95, 37, 80, 28, 28, 111, 51, 51, 82, 45, 33, 54, - 21, 39, 46, 24, 55, 35, 87, 43, 29, 56, 49, 51, 56, 41, 42, 69, 113, 19, 47, 82, 28, 90, 41, - 71, 104, 78, 92, 17, 26, 67, 32, 38, 100, 53, 51, 44, 22, 20, 45, 60, 26, 20, 95, 64, 64, 79, - 66, 29, 93, 26, 39, 59, 58, 67, 78, 33, 26, 28, 67, 40, 61, 90, 36, 79, 36, 68, 51, 33, 80, 72, - 32, 51, 176, 34, 46, 101, 29, 164, 36, 39, 49, 86, 252, 64, 68, 25, 54, 15, 44, 104, 45, 49, - 51, 47, 53, 23, 39, 42, 66, 55, 34, 76, 92, 26, 55, 34, 37, 62, 76, 60, 38, 88, 84, 30, 58, 28, - 104, 57, 85, 61, 47, 73, 29, 24, 36, 57, 41, 40, 79, 39, 81, 34, 44, 33, 40, 28, 63, 90, 58, - 118, 22, 34, 65, 69, 59, 120, 116, 24, 41, 24, 30, 57, 60, 34, 58, 35, 57, 53, 43, 31, 40, 64, - 39, 42, 29, 40, 49, 35, 41, 29, 73, 151, 40, 63, 110, 41, 41, 69, 31, 46, 38, 31, 62, 47, 148, - 12, 69, 33, 43, 29, 67, 98, 64, 32, 112, 46, 55, 49, 45, 52, 30, 89, 69, 52, 80, 27, 86, 56, - 64, 40, 34, 38, 84, 86, 109, 48, 34, 104, 23, 46, 68, 28, 23, 64, 112, 35, 35, 31, 105, 35, 33, - 33, 37, 37, 68, 58, 63, 36, 72, 11, 88, 55, 41, 63, 27, 36, 53, 23, 49, 49, 43, 26, 90, 24, 24, - 37, 108, 53, 57, 45, 57, 69, 71, 99, 34, 46, 61, 76, 42, 69, 38, 42, 83, 20, 56, 79, 42, 68, - 35, 54, 50, 49, 26, 46, 33, 42, 83, 38, 49, 53, 45, 75, 49, 54, 32, 41, 36, 63, 89, 40, 17, 33, - 31, 90, 54, 109, 61, 23, 64, 34, 50, 48, 47, 42, 131, 106, 32, 55, 89, 87, 32, 101, 35, 53, 54, - 19, 47, 17, 19, 59, 59, 81, 60, 36, 34, 75, 103, 75, 56, 48, 113, 14, 82, 46, 28, 76, 31, 59, - 55, 54, 20, 54, 39, 35, 28, 28, 33, 93, 71, 57, 118, 112, 79, 28, 102, 45, 44, 56, 52, 39, 70, - 39, 38, 44, 34, 54, 48, 43, 63, 20, 57, 78, 78, 153, 36, 31, 59, 22, 92, 30, 62, 42, 15, 57, - 29, 79, 15, 47, 30, 88, 35, 80, 40, 53, 104, 36, 124, 82, 95, 16, 46, 24, 73, 92, 37, 39, 22, - 74, 104, 21, 20, 89, 98, 60, 56, 37, 59, 40, 139, 40, 10, 64, 27, 75, 23, 44, 61, 45, 19, 24, - 33, 113, 47, 95, 55, 39, 88, 28, 105, 79, 59, 67, 55, 40, 42, 37, 93, 67, 47, 28, 59, 30, 33, - 139, 25, 32, 37, 37, 28, 46, 30, 98, 53, 77, 25, 50, 66, 53, 50, 30, 37, 41, 33, 73, 121, 97, - 62, 47, 67, 34, 57, 54, 15, 129, 26, 13, 50, 53, 50, 54, 28, 67, 100, 33, 58, 44, 49, 81, 57, - 131, 42, 105, 40, 45, 42, 58, 63, 54, 67, 34, 44, 69, 84, 59, 71, 76, 68, 45, 46, 68, 40, 47, - 48, 23, 59, 66, 48, 123, 46, 67, 65, 74, 62, 45, 66, 57, 56, 72, 74, 50, 41, 97, 51, 41, 31, - 57, 61, 28, 25, 55, 33, 98, 29, 23, 48, 63, 54, 47, 60, 34, 56, 33, 33, 53, 61, 32, 23, 30, 18, - 53, 67, 123, 32, 39, 47, 56, 34, 80, 41, 82, 22, 46, 59, 39, 39, 36, 53, 94, 30, 48, 39, 101, - 131, 64, 52, 99, 40, 49, 85, 53, 39, 55, 40, 127, 41, 80, 50, 97, 80, 36, 58, 46, 64, 49, 63, - 47, 81, 58, 26, 49, 42, 87, 28, 18, 63, 80, 63, 98, 78, 31, 80, 37, 87, 82, 49, 85, 44, 83, 16, - 30, 54, 39, 13, 33, 112, 27, 54, 39, 50, 46, 47, 47, 17, 50, 53, 61, 99, 51, 57, 24, 53, 23, - 136, 42, 60, 62, 26, 63, 29, 63, 37, 36, 62, 60, 44, 35, 55, 49, 81, 36, 47, 156, 26, 59, 61, - 40, 35, 24, 25, 44, 94, 51, 108, 37, 67, 53, 60, 55, 74, 50, 81, 64, 50, 47, 26, 36, 44, 80, - 74, 33, 39, 119, 25, 55, 57, 39, 25, 41, 192, 47, 45, 55, 28, 73, 72, 42, 52, 39, 71, 22, 45, - 68, 116, 32, 29, 47, 49, 73, 47, 38, 129, 42, 78, 73, 40, 115, 28, 31, 90, 23, 69, 55, 72, 74, - 36, 36, 75, 78, 29, 27, 29, 50, 49, 160, 65, 46, 38, 38, 37, 29, 55, 10, 28, 82, 54, 66, 37, - 101, 43, 67, 50, 64, 40, 93, 39, 209, 46, 53, 37, 72, 55, 69, 71, 34, 76, 28, 54, 79, 23, 40, - 41, 18, 45, 101, 25, 29, 41, 49, 53, 55, 44, 163, 40, 26, 23, 45, 38, 85, 46, 52, 22, 44, 44, - 25, 32, 32, 76, 66, 71, 101, 43, 90, 44, 89, 27, 37, 79, 115, 49, 42, 68, 47, 50, 57, 86, 29, - 40, 68, 17, 96, 36, 30, 54, 153, 36, 24, 47, 90, 44, 67, 89, 21, 67, 39, 49, 154, 57, 75, 30, - 62, 47, 45, 66, 24, 100, 157, 40, 65, 140, 32, 51, 159, 31, 81, 63, 42, 60, 42, 73, 39, 21, 75, - 88, 53, 33, 39, 26, 25, 88, 18, 66, 41, 26, 45, 45, 91, 166, 124, 113, 112, 80, 40, 54, 23, 34, - 32, 29, 101, 64, 57, 50, 82, 78, 32, 18, 28, 39, 50, 106, 69, 70, 75, 47, 29, 32, 25, 26, 23, - 77, 27, 68, 162, 45, 46, 76, 50, 34, 25, 52, 40, 61, 58, 96, 68, 88, 52, 75, 44, 46, 52, 29, - 27, 43, 25, 52, 75, 32, 51, 23, 80, 42, 107, 51, 127, 59, 45, 83, 65, 38, 71, 69, 60, 42, 49, - 78, 88, 58, 33, 73, 54, 88, 22, 34, 65, 25, 198, 33, 63, 21, 151, 72, 39, 57, 35, 21, 29, 32, - 88, 63, 42, 44, 85, 30, 67, 31, 72, 94, 40, 63, 17, 59, 59, 62, 92, 31, 101, 31, 22, 151, 75, - 73, 69, 45, 83, 103, 23, 28, 35, 65, 15, 46, 24, 42, 22, 90, 44, 45, 105, 32, 23, 37, 36, 60, - 43, 25, 46, 67, 26, 82, 71, 106, 42, 62, 32, 44, 30, 86, 24, 68, 36, 30, 104, 53, 59, 55, 69, - 105, 52, 92, 15, 69, 62, 55, 53, 40, 37, 86, 46, 90, 41, 30, 103, 48, 92, 27, 60, 43, 133, 96, - 66, 39, 82, 72, 24, 91, 77, 46, 159, 81, 39, 80, 61, 46, 10, 40, 51, 72, 60, 56, 107, 49, 29, - 39, 46, 38, 20, 67, 74, 35, 62, 43, 43, 68, 62, 37, 35, 66, 30, 35, 100, 54, 40, 28, 72, 38, - 52, 91, 45, 84, 28, 21, 59, 91, 38, 44, 79, 40, 29, 33, 46, 23, 75, 67, 76, 108, 82, 103, 42, - 89, 25, 68, 115, 140, 58, 73, 29, 23, 50, 58, 47, 33, 27, 80, 83, 46, 116, 50, 81, 36, 68, 70, - 58, 86, 47, 18, 42, 73, 20, 21, 51, 53, 92, 48, 64, 57, 73, 79, 26, 36, 79, 17, 14, 54, 51, 42, - 76, 91, 82, 46, 49, 58, 17, 30, 74, 57, 26, 95, 64, 37, 50, 52, 43, 46, 46, 70, 82, 66, 120, - 68, 59, 76, 47, 72, 136, 45, 84, 51, 34, 88, 63, 43, 121, 20, 48, 45, 47, 53, 127, 18, 84, 34, - 80, 40, 77, 45, 37, 27, 30, 42, 49, 65, 48, 93, 27, 66, 79, 65, 47, 39, 25, 23, 71, 43, 23, 65, - 74, 17, 125, 93, 27, 33, 55, 60, 28, 36, 234, 80, 100, 34, 43, 25, 60, 49, 159, 43, 50, 31, 56, - 34, 30, 47, 32, 32, 65, 86, 77, 50, 52, 34, 58, 82, 31, 82, 36, 62, 25, 54, 96, 48, 23, 113, - 33, 31, 37, 30, 55, 59, 42, 75, 62, 26, 70, 26, 48, 44, 34, 88, 51, 65, 49, 32, 67, 34, 76, - 167, 59, 70, 62, 93, 27, 31, 52, 49, 28, 21, 39, 114, 154, 76, 22, 73, 38, 53, 70, 115, 53, 35, - 73, 75, 79, 89, 58, 31, 53, 21, 89, 64, 71, 54, 15, 37, 80, 44, 76, 31, 57, 38, 36, 46, 118, - 54, 56, 111, 43, 65, 35, 76, 25, 49, 88, 98, 48, 15, 114, 37, 72, 21, 40, 113, 59, 59, 78, 25, - 51, 63, 88, 33, 56, 70, 321, 111, 15, 50, 55, 75, 35, 82, 35, 47, 68, 37, 52, 110, 40, 28, 72, - 34, 44, 64, 63, 90, 36, 43, 36, 46, 135, 48, 49, 65, 27, 81, 49, 35, 60, 46, 46, 47, 108, 38, - 81, 54, 44, 36, 42, 44, 86, 34, 114, 46, 36, 35, 55, 120, 45, 48, 55, 52, 35, 82, 27, 31, 41, - 44, 85, 37, 46, 42, 111, 103, 29, 62, 26, 33, 37, 33, 56, 43, 58, 92, 90, 18, 44, 63, 90, 38, - 53, 113, 55, 128, 17, 138, 15, 88, 85, 41, 42, 60, 54, 56, 96, 56, 18, 62, 43, 76, 32, 44, 23, - 24, 21, 51, 13, 94, 36, 50, 91, 58, 62, 36, 26, 69, 45, 50, 33, 38, 16, 22, 23, 46, 29, 61, 51, - 39, 22, 36, 78, 63, 43, 16, 39, 12, 121, 51, 94, 46, 141, 32, 76, 50, 72, 26, 153, 58, 39, 28, - 23, 20, 21, 51, 88, 60, 19, 52, 106, 83, 126, 62, 10, 69, 56, 21, 47, 36, 40, 63, 37, 36, 24, - 54, 66, 67, 91, 15, 51, 26, 68, 52, 29, 41, 101, 38, 21, 86, 90, 37, 114, 46, 26, 43, 57, 66, - 61, 93, 56, 65, 83, 46, 34, 43, 26, 51, 64, 30, 32, 29, 49, 102, 36, 37, 49, 31, 83, 43, 88, - 69, 74, 24, 22, 51, 42, 42, 48, 111, 40, 37, 113, 56, 56, 26, 73, 90, 71, 28, 103, 43, 125, 63, - 62, 136, 91, 63, 34, 78, 73, 39, 45, 44, 22, 70, 24, 59, 23, 81, 75, 128, 28, 81, 45, 56, 41, - 62, 29, 32, 75, 12, 44, 40, 73, 62, 25, 105, 85, 103, 31, 130, 91, 89, 27, 48, 55, 25, 45, 74, - 59, 56, 103, 34, 74, 85, 26, 18, 81, 44, 166, 59, 49, 21, 33, 25, 208, 26, 68, 98, 43, 54, 29, - 50, 42, 34, 67, 33, 23, 75, 55, 22, 35, 77, 30, 74, 42, 25, 63, 14, 36, 48, 57, 57, 53, 100, - 118, 125, 26, 33, 27, 41, 58, 55, 45, 46, 41, 33, 35, 33, 39, 25, 93, 133, 26, 94, 53, 51, 51, - 63, 53, 33, 54, 77, 44, 27, 22, 68, 48, 37, 56, 35, 48, 58, 18, 31, 26, 27, 109, 90, 73, 42, - 90, 27, 18, 11, 56, 51, 34, 64, 51, 43, 95, 103, 84, 67, 30, 44, 49, 54, 87, 25, 25, 49, 24, - 87, 46, 13, 44, 56, 34, 27, 50, 92, 39, 87, 101, 27, 77, 47, 57, 120, 82, 39, 24, 60, 65, 92, - 102, 56, 54, 62, 86, 54, 41, 30, 50, 50, 50, 41, 37, 79, 47, 109, 34, 20, 46, 79, 46, 23, 37, - 49, 96, 88, 75, 63, 33, 75, 92, 72, 90, 58, 83, 101, 31, 107, 73, 71, 52, 31, 27, 58, 47, 85, - 50, 42, 106, 44, 36, 70, 106, 31, 44, 42, 51, 59, 72, 84, 35, 50, 74, 37, 63, 120, 26, 72, 48, - 30, 57, 49, 30, 50, 67, 45, 123, 109, 34, 100, 94, 36, 110, 115, 68, 78, 30, 127, 37, 42, 65, - 53, 116, 35, 38, 57, 66, 216, 26, 87, 78, 87, 27, 60, 39, 21, 32, 30, 113, 35, 78, 68, 34, 65, - 66, 28, 72, 50, 44, 32, 46, 29, 49, 47, 44, 87, 37, 47, 77, 97, 47, 52, 87, 59, 59, 44, 53, 50, - 67, 46, 43, 48, 40, 108, 29, 92, 50, 18, 38, 89, 26, 53, 27, 52, 83, 45, 81, 72, 92, 97, 82, - 61, 52, 54, 60, 32, 37, 39, 38, 43, 49, 34, 16, 137, 33, 83, 37, 64, 47, 68, 20, 56, 46, 100, - 42, 41, 20, 54, 68, 44, 37, 60, 27, 59, 83, 46, 41, 42, 64, 26, 33, 24, 44, 49, 52, 46, 20, 26, - 43, 57, 55, 30, 83, 51, 42, 57, 77, 68, 41, 28, 77, 30, 35, 89, 38, 44, 63, 97, 31, 73, 49, - 102, 81, 49, 34, 26, 30, 40, 27, 47, 38, 134, 87, 64, 38, 137, 43, 49, 19, 86, 49, 30, 50, 86, - 52, 58, 85, 32, 44, 71, 25, 91, 29, 57, 55, 37, 56, 45, 78, 26, 96, 44, 35, 29, 86, 23, 54, 37, - 34, 46, 51, 42, 34, 72, 70, 114, 30, 30, 33, 28, 135, 14, 25, 34, 44, 46, 83, 95, 30, 56, 21, - 78, 32, 62, 30, 50, 50, 29, 60, 257, 51, 41, 39, 42, 54, 32, 107, 68, 79, 100, 29, 31, 59, 39, - 65, 48, 71, 22, 71, 20, 50, 63, 34, 106, 56, 22, 109, 58, 44, 72, 27, 50, 58, 12, 41, 35, 60, - 87, 54, 33, 48, 30, 30, 14, 44, 67, 57, 30, 40, 88, 72, 65, 43, 49, 29, 51, 61, 51, 56, 15, 58, - 42, 27, 43, 55, 31, 51, 28, 29, 124, 74, 23, 44, 53, 43, 86, 155, 37, 76, 87, 61, 63, 92, 53, - 19, 63, 26, 37, 44, 17, 46, 78, 37, 24, 43, 38, 58, 37, 35, 60, 64, 89, 85, 36, 79, 26, 54, 19, - 61, 29, 48, 57, 24, 78, 87, 57, 27, 24, 24, 40, 47, 60, 74, 39, 87, 42, 24, 71, 66, 53, 64, - 102, 42, 83, 38, 100, 46, 45, 68, 68, 103, 63, 83, 70, 39, 94, 31, 83, 32, 82, 47, 51, 131, 34, - 84, 36, 51, 47, 132, 94, 52, 53, 52, 25, 22, 46, 45, 35, 32, 49, 122, 42, 88, 44, 58, 148, 58, - 36, 21, 39, 82, 40, 75, 44, 25, 19, 30, 50, 39, 34, 52, 29, 81, 37, 46, 32, 66, 60, 40, 19, 54, - 62, 64, 85, 33, 35, 26, 77, 40, 34, 49, 45, 36, 134, 35, 88, 67, 124, 53, 50, 37, 27, 43, 37, - 39, 60, 40, 9, 45, 55, 48, 55, 40, 80, 42, 40, 79, 91, 41, 47, 35, 53, 120, 77, 69, 63, 45, 22, - 73, 54, 39, 96, 76, 92, 73, 34, 44, 19, 45, 21, 53, 54, 37, 49, 22, 60, 129, 68, 119, 46, 44, - 89, 64, 75, 47, 49, 57, 51, 74, 42, 32, 105, 35, 58, 20, 36, 168, 52, 75, 66, 25, 77, 30, 71, - 27, 49, 65, 42, 47, 67, 72, 107, 205, 47, 97, 71, 52, 49, 30, 82, 84, 39, 27, 51, 87, 119, 38, - 47, 118, 41, 30, 60, 164, 34, 39, 47, 51, 41, 64, 36, 47, 70, 53, 71, 25, 33, 46, 23, 55, 79, - 47, 22, 44, 26, 44, 25, 18, 77, 57, 28, 25, 27, 38, 91, 60, 31, 82, 25, 116, 44, 102, 30, 49, - 39, 59, 31, 27, 31, 121, 56, 84, 34, 47, 48, 44, 47, 58, 34, 73, 123, 49, 65, 56, 49, 63, 49, - 32, 48, 92, 66, 61, 47, 66, 18, 48, 24, 41, 25, 94, 35, 39, 93, 75, 42, 18, 76, 41, 35, 38, 29, - 25, 30, 86, 30, 43, 65, 62, 19, 104, 55, 82, 31, 40, 44, 69, 27, 39, 68, 86, 32, 101, 47, 45, - 70, 77, 34, 77, 31, 76, 38, 34, 85, 63, 27, 77, 44, 66, 63, 31, 47, 49, 40, 18, 39, 64, 81, 89, - 71, 45, 42, 37, 80, 37, 55, 80, 60, 55, 41, 28, 44, 33, 54, 51, 42, 67, 103, 51, 66, 30, 48, - 51, 63, 61, 55, 61, 32, 55, 22, 79, 70, 49, 116, 38, 94, 71, 149, 94, 73, 67, 65, 77, 73, 91, - 47, 121, 49, 26, 95, 25, 51, 33, 96, 70, 36, 85, 56, 71, 79, 39, 57, 14, 42, 76, 83, 67, 57, - 73, 31, 36, 32, 60, 52, 61, 61, 89, 119, 26, 62, 37, 101, 71, 91, 27, 52, 112, 32, 30, 47, 36, - 76, 40, 45, 25, 60, 70, 26, 103, 31, 63, 55, 32, 38, 80, 48, 46, 80, 60, 44, 55, 26, 57, 150, - 45, 38, 99, 76, 102, 67, 61, 71, 33, 57, 62, 127, 77, 113, 51, 33, 33, 26, 20, 41, 39, 102, 22, - 54, 40, 69, 74, 33, 46, 45, 30, 53, 42, 36, 30, 51, 52, 36, 111, 28, 45, 35, 77, 87, 15, 37, - 19, 125, 54, 62, 50, 23, 23, 78, 60, 35, 24, 71, 32, 43, 74, 32, 26, 131, 38, 123, 40, 62, 65, - 28, 35, 127, 49, 85, 22, 80, 43, 46, 38, 48, 55, 21, 33, 63, 47, 53, 43, 92, 50, 48, 71, 158, - 66, 89, 33, 52, 39, 78, 54, 69, 191, 36, 66, 30, 35, 87, 48, 60, 35, 47, 31, 67, 32, 43, 40, - 54, 41, 26, 58, 73, 115, 24, 102, 30, 46, 27, 107, 54, 49, 62, 209, 36, 63, 52, 54, 87, 55, 48, - 59, 35, 128, 127, 34, 19, 133, 64, 25, 33, 30, 53, 44, 99, 127, 79, 49, 87, 34, 36, 51, 46, 34, - 60, 37, 88, 42, 42, 48, 99, 68, 60, 83, 29, 89, 50, 24, 37, 42, 107, 18, 42, 31, 57, 50, 85, - 82, 71, 123, 29, 39, 81, 37, 27, 60, 75, 39, 13, 29, 27, 36, 41, 82, 25, 37, 35, 102, 24, 23, - 84, 51, 37, 35, 14, 57, 47, 87, 39, 83, 57, 72, 20, 82, 74, 96, 49, 29, 47, 73, 78, 97, 48, - 110, 34, 13, 56, 49, 26, 54, 27, 33, 101, 11, 59, 40, 37, 53, 39, 38, 25, 111, 79, 27, 43, 70, - 38, 51, 53, 113, 34, 73, 37, 44, 49, 58, 53, 39, 50, 57, 62, 26, 45, 123, 38, 51, 82, 27, 26, - 90, 68, 29, 105, 83, 120, 27, 84, 53, 19, 33, 72, 73, 24, 50, 20, 78, 64, 120, 44, 64, 35, 31, - 82, 79, 59, 63, 59, 61, 55, 26, 18, 26, 93, 29, 67, 75, 55, 59, 69, 110, 50, 43, 37, 80, 53, - 86, 25, 40, 44, 64, 69, 45, 56, 28, 138, 44, 48, 42, 30, 77, 20, 43, 53, 24, 85, 39, 70, 20, - 43, 52, 25, 79, 57, 48, 55, 49, 70, 55, 108, 41, 77, 54, 147, 51, 53, 42, 18, 19, 47, 52, 35, - 68, 99, 118, 17, 75, 80, 71, 88, 46, 43, 83, 36, 78, 33, 37, 35, 78, 49, 65, 164, 30, 97, 68, - 50, 28, 207, 22, 34, 88, 23, 62, 23, 63, 148, 55, 64, 72, 34, 31, 38, 60, 29, 48, 75, 38, 49, - 55, 22, 46, 27, 44, 64, 68, 32, 27, 122, 19, 29, 43, 48, 37, 25, 48, 26, 39, 62, 84, 87, 79, - 44, 21, 23, 70, 16, 72, 51, 130, 50, 17, 76, 86, 41, 43, 61, 57, 50, 51, 135, 87, 139, 41, 41, - 43, 72, 122, 62, 43, 58, 42, 45, 31, 54, 41, 30, 50, 64, 46, 44, 44, 82, 72, 49, 32, 51, 27, - 87, 60, 105, 86, 63, 40, 47, 28, 45, 89, 54, 54, 40, 97, 65, 33, 58, 87, 44, 51, 42, 95, 53, - 186, 19, 49, 78, 44, 141, 50, 30, 40, 45, 53, 54, 105, 35, 40, 50, 28, 55, 58, 27, 27, 48, 36, - 72, 38, 48, 62, 34, 79, 58, 154, 43, 19, 90, 50, 112, 31, 187, 102, 45, 87, 48, 135, 37, 54, - 30, 48, 32, 119, 43, 37, 88, 21, 85, 35, 55, 26, 68, 81, 59, 36, 67, 45, 55, 40, 169, 21, 69, - 130, 33, 21, 27, 53, 102, 70, 54, 30, 34, 52, 52, 46, 20, 57, 44, 23, 21, 54, 32, 20, 48, 64, - 84, 30, 49, 88, 24, 89, 124, 35, 47, 7, 19, 96, 12, 53, 29, 44, 37, 45, 46, 62, 43, 87, 30, 49, - 17, 64, 54, 74, 25, 38, 27, 48, 33, 43, 87, 126, 19, 25, 90, 52, 30, 71, 28, 47, 60, 74, 70, - 66, 61, 81, 42, 29, 61, 60, 82, 30, 60, 40, 69, 88, 76, 30, 32, 37, 62, 35, 56, 87, 66, 93, 52, - 57, 31, 69, 21, 25, 60, 32, 60, 26, 51, 21, 63, 21, 57, 50, 80, 164, 20, 42, 36, 36, 26, 64, - 56, 65, 123, 21, 58, 44, 41, 35, 45, 80, 33, 43, 62, 63, 120, 43, 46, 21, 96, 72, 82, 30, 107, - 35, 106, 49, 67, 54, 33, 46, 38, 30, 47, 32, 50, 55, 72, 33, 70, 50, 42, 87, 57, 34, 27, 59, - 34, 123, 66, 13, 30, 27, 30, 22, 65, 60, 62, 88, 49, 103, 28, 35, 34, 41, 32, 69, 47, 87, 23, - 23, 36, 32, 23, 61, 70, 97, 65, 62, 96, 41, 53, 58, 164, 62, 34, 63, 28, 29, 92, 28, 23, 40, - 36, 58, 44, 188, 97, 18, 59, 41, 74, 30, 39, 52, 61, 22, 41, 18, 66, 36, 100, 90, 34, 60, 90, - 63, 29, 19, 57, 35, 99, 33, 69, 80, 74, 21, 24, 39, 84, 93, 127, 31, 36, 49, 93, 19, 27, 120, - 74, 17, 86, 61, 35, 50, 69, 60, 74, 108, 61, 24, 52, 15, 44, 34, 31, 37, 342, 30, 32, 41, 41, - 273, 49, 46, 40, 88, 45, 63, 53, 23, 33, 50, 91, 58, 53, 33, 79, 80, 43, 74, 44, 56, 76, 66, - 34, 60, 38, 45, 32, 49, 77, 43, 72, 47, 66, 23, 71, 36, 40, 57, 64, 39, 30, 35, 27, 88, 60, 50, - 30, 77, 55, 21, 41, 43, 43, 51, 61, 91, 47, 36, 28, 59, 40, 68, 32, 43, 27, 66, 45, 202, 40, - 33, 133, 131, 108, 59, 72, 79, 88, 36, 34, 86, 28, 61, 35, 139, 81, 65, 55, 33, 39, 53, 56, 59, - 14, 60, 67, 87, 109, 78, 83, 40, 38, 32, 113, 18, 57, 51, 62, 76, 25, 75, 61, 48, 40, 61, 34, - 61, 50, 22, 119, 142, 85, 41, 37, 86, 80, 87, 44, 89, 122, 54, 55, 51, 28, 28, 37, 63, 57, 92, - 32, 47, 39, 55, 68, 117, 115, 126, 68, 123, 29, 54, 103, 43, 63, 73, 45, 94, 66, 34, 90, 27, - 80, 33, 68, 62, 90, 62, 76, 35, 48, 85, 33, 30, 46, 47, 50, 159, 24, 32, 33, 103, 93, 31, 29, - 42, 18, 64, 48, 21, 44, 49, 76, 49, 35, 36, 98, 43, 58, 61, 62, 24, 71, 91, 140, 26, 28, 62, - 39, 93, 23, 60, 61, 78, 79, 53, 22, 59, 60, 20, 88, 53, 29, 57, 81, 67, 41, 163, 46, 59, 63, - 80, 76, 50, 47, 29, 62, 71, 41, 77, 52, 65, 35, 85, 26, 143, 46, 25, 30, 18, 45, 55, 36, 46, - 26, 83, 46, 58, 144, 81, 28, 88, 22, 210, 105, 23, 33, 109, 28, 166, 97, 76, 40, 115, 55, 86, - 38, 75, 31, 38, 46, 91, 55, 40, 30, 35, 59, 60, 43, 36, 18, 60, 42, 49, 47, 18, 48, 123, 126, - 24, 51, 18, 37, 119, 76, 42, 41, 48, 28, 53, 33, 25, 33, 84, 30, 31, 16, 66, 52, 41, 79, 51, - 67, 41, 36, 87, 76, 79, 62, 47, 32, 134, 54, 42, 121, 116, 36, 50, 43, 81, 43, 57, 51, 50, 31, - 54, 63, 51, 42, 66, 53, 76, 30, 132, 30, 39, 73, 61, 24, 36, 72, 146, 118, 133, 88, 64, 44, 70, - 37, 18, 92, 39, 72, 21, 9, 47, 24, 42, 59, 38, 51, 35, 29, 44, 83, 29, 77, 38, 26, 69, 72, 90, - 67, 49, 107, 40, 48, 42, 73, 41, 69, 24, 34, 58, 55, 35, 100, 75, 52, 58, 44, 92, 60, 18, 51, - 49, 30, 42, 118, 178, 86, 40, 82, 71, 120, 36, 78, 185, 17, 78, 97, 64, 67, 34, 35, 30, 21, 62, - 53, 49, 54, 41, 121, 60, 49, 29, 31, 34, 63, 79, 38, 33, 35, 29, 53, 92, 14, 48, 96, 34, 47, - 74, 60, 59, 16, 41, 46, 85, 59, 73, 77, 24, 66, 64, 26, 18, 56, 63, 35, 83, 25, 132, 68, 105, - 75, 59, 61, 95, 87, 57, 139, 30, 26, 171, 34, 111, 75, 40, 50, 41, 53, 39, 29, 71, 43, 46, 42, - 59, 31, 59, 39, 45, 39, 51, 62, 32, 38, 47, 22, 47, 114, 42, 49, 29, 42, 65, 74, 54, 44, 28, - 50, 58, 41, 80, 56, 31, 42, 36, 27, 28, 42, 34, 54, 19, 25, 99, 42, 57, 75, 48, 92, 75, 139, - 78, 131, 51, 28, 86, 43, 64, 120, 75, 24, 106, 72, 47, 36, 49, 26, 16, 34, 49, 27, 16, 67, 34, - 51, 15, 74, 32, 91, 52, 56, 58, 47, 69, 130, 58, 47, 45, 28, 55, 25, 29, 101, 23, 145, 71, 121, - 63, 46, 116, 51, 41, 37, 38, 63, 61, 52, 20, 29, 16, 27, 126, 107, 35, 93, 47, 46, 85, 47, 92, - 58, 31, 61, 49, 39, 45, 50, 68, 52, 56, 26, 46, 47, 42, 41, 50, 50, 63, 103, 45, 44, 144, 41, - 38, 65, 47, 64, 74, 202, 92, 80, 58, 41, 51, 30, 75, 69, 95, 30, 44, 31, 45, 56, 76, 58, 37, - 48, 31, 61, 67, 27, 73, 80, 69, 78, 31, 32, 97, 72, 43, 67, 124, 55, 41, 37, 28, 55, 65, 54, - 60, 46, 63, 33, 45, 49, 97, 18, 156, 35, 86, 44, 43, 47, 15, 211, 57, 70, 37, 35, 98, 74, 87, - 43, 26, 37, 115, 23, 121, 39, 23, 28, 60, 43, 14, 42, 110, 42, 109, 36, 72, 42, 79, 20, 55, 99, - 33, 114, 41, 38, 29, 66, 29, 25, 44, 21, 32, 133, 51, 77, 22, 17, 81, 53, 112, 84, 16, 91, 30, - 48, 57, 36, 34, 50, 57, 22, 121, 98, 42, 21, 83, 137, 29, 54, 24, 39, 68, 24, 29, 42, 38, 50, - 47, 19, 26, 54, 63, 103, 67, 49, 68, 29, 16, 44, 43, 33, 16, 25, 105, 29, 49, 42, 116, 54, 138, - 84, 23, 53, 63, 36, 41, 51, 19, 17, 35, 62, 88, 15, 45, 32, 37, 82, 137, 42, 51, 21, 198, 49, - 71, 63, 27, 54, 26, 53, 58, 31, 25, 52, 53, 53, 131, 37, 38, 30, 196, 35, 97, 27, 101, 59, 33, - 58, 88, 80, 56, 41, 22, 31, 29, 68, 40, 64, 73, 78, 125, 41, 43, 35, 97, 40, 49, 37, 44, 58, - 31, 80, 28, 77, 36, 32, 89, 50, 56, 101, 74, 48, 31, 57, 41, 76, 29, 35, 208, 98, 29, 39, 47, - 34, 78, 57, 111, 47, 78, 59, 25, 25, 52, 21, 31, 70, 70, 40, 51, 28, 47, 78, 94, 27, 42, 46, - 54, 27, 54, 65, 111, 28, 66, 43, 21, 134, 30, 35, 43, 58, 53, 23, 35, 69, 32, 56, 53, 80, 68, - 60, 83, 59, 33, 42, 36, 34, 91, 83, 60, 50, 50, 39, 64, 25, 28, 70, 33, 73, 52, 56, 45, 39, - 117, 41, 171, 57, 51, 67, 72, 23, 47, 55, 26, 29, 38, 65, 39, 32, 24, 21, 71, 74, 26, 30, 52, - 138, 121, 42, 35, 126, 105, 22, 28, 72, 46, 14, 53, 111, 51, 78, 33, 48, 80, 46, 48, 55, 30, - 33, 40, 31, 89, 32, 47, 98, 40, 35, 56, 51, 55, 31, 36, 68, 13, 92, 57, 23, 19, 31, 86, 60, 44, - 56, 94, 47, 45, 42, 45, 19, 46, 158, 47, 69, 42, 106, 71, 48, 42, 40, 33, 66, 56, 86, 38, 23, - 19, 15, 73, 50, 71, 78, 37, 113, 140, 54, 44, 68, 78, 97, 72, 47, 60, 41, 32, 24, 25, 41, 65, - 82, 53, 44, 20, 44, 32, 26, 29, 41, 42, 89, 151, 64, 47, 121, 67, 56, 92, 23, 61, 50, 79, 33, - 38, 85, 60, 34, 33, 34, 59, 73, 26, 68, 61, 56, 55, 36, 18, 36, 24, 52, 21, 56, 161, 90, 82, - 45, 36, 25, 68, 74, 76, 36, 42, 24, 49, 31, 25, 28, 47, 56, 77, 19, 108, 32, 59, 82, 32, 31, - 56, 27, 41, 31, 57, 71, 85, 43, 48, 48, 49, 45, 34, 55, 37, 49, 48, 26, 89, 55, 42, 65, 29, - 128, 64, 43, 88, 54, 37, 25, 49, 68, 59, 25, 62, 38, 50, 93, 59, 65, 33, 56, 24, 77, 34, 27, - 33, 69, 55, 18, 17, 41, 32, 51, 38, 40, 58, 69, 41, 63, 20, 35, 58, 41, 69, 28, 74, 74, 55, 48, - 78, 45, 58, 28, 35, 61, 37, 43, 86, 54, 64, 83, 44, 43, 84, 21, 60, 53, 110, 46, 55, 26, 42, - 29, 67, 52, 42, 57, 99, 36, 65, 51, 29, 22, 94, 108, 92, 31, 42, 132, 73, 70, 125, 28, 39, 38, - 41, 29, 52, 45, 31, 126, 52, 15, 43, 14, 44, 60, 38, 49, 59, 41, 100, 128, 75, 81, 161, 47, 55, - 23, 48, 38, 47, 53, 47, 43, 14, 92, 69, 20, 51, 102, 122, 171, 38, 80, 101, 34, 67, 58, 95, 57, - 44, 64, 29, 70, 42, 63, 56, 58, 35, 47, 40, 67, 137, 66, 27, 28, 51, 83, 102, 29, 53, 53, 47, - 27, 68, 19, 71, 23, 42, 46, 36, 38, 63, 96, 51, 37, 36, 72, 40, 23, 51, 79, 63, 118, 172, 68, - 46, 94, 73, 144, 59, 46, 76, 56, 61, 98, 26, 37, 35, 32, 51, 39, 70, 95, 36, 61, 59, 31, 57, - 34, 29, 20, 118, 47, 42, 102, 145, 35, 27, 48, 24, 37, 48, 38, 116, 56, 53, 115, 106, 43, 50, - 31, 35, 24, 69, 45, 66, 45, 24, 29, 73, 34, 25, 22, 37, 59, 42, 38, 48, 52, 80, 52, 47, 42, 30, - 47, 25, 104, 55, 19, 26, 71, 16, 70, 58, 35, 37, 26, 28, 41, 24, 43, 38, 54, 64, 57, 68, 54, - 36, 44, 99, 111, 63, 30, 59, 92, 29, 87, 23, 45, 98, 51, 70, 47, 34, 97, 60, 39, 27, 58, 41, - 72, 82, 126, 50, 54, 41, 35, 15, 27, 69, 114, 25, 73, 40, 74, 120, 31, 18, 43, 71, 80, 64, 47, - 232, 81, 41, 55, 75, 63, 49, 55, 64, 37, 44, 74, 40, 69, 29, 79, 94, 40, 23, 58, 57, 23, 67, - 18, 34, 114, 74, 53, 12, 52, 29, 51, 53, 63, 43, 46, 39, 53, 36, 68, 31, 26, 48, 40, 63, 23, - 57, 82, 32, 74, 76, 67, 29, 43, 59, 24, 33, 64, 86, 59, 39, 36, 131, 42, 71, 28, 30, 41, 60, - 77, 50, 63, 48, 59, 24, 51, 45, 46, 37, 119, 33, 43, 33, 44, 63, 16, 46, 43, 28, 46, 57, 57, - 39, 159, 42, 22, 38, 81, 34, 48, 41, 35, 97, 20, 49, 46, 102, 49, 84, 56, 33, 60, 29, 28, 92, - 56, 23, 37, 68, 57, 40, 31, 44, 79, 38, 81, 69, 44, 20, 33, 69, 124, 76, 31, 56, 41, 38, 29, - 34, 76, 128, 69, 28, 35, 144, 40, 34, 40, 165, 60, 43, 86, 25, 47, 71, 29, 39, 62, 25, 18, 43, - 138, 34, 25, 47, 93, 31, 68, 43, 19, 49, 59, 45, 53, 32, 35, 47, 97, 25, 34, 49, 27, 26, 43, - 39, 66, 41, 24, 171, 39, 165, 31, 65, 36, 85, 37, 50, 66, 42, 35, 45, 20, 45, 39, 51, 22, 68, - 48, 29, 95, 47, 21, 108, 37, 55, 112, 69, 52, 57, 39, 78, 56, 37, 38, 65, 31, 71, 76, 31, 91, - 42, 104, 62, 24, 72, 33, 40, 60, 84, 39, 53, 23, 17, 20, 33, 83, 31, 31, 43, 29, 67, 55, 71, - 31, 48, 50, 61, 53, 35, 72, 60, 47, 40, 74, 120, 104, 40, 47, 39, 55, 42, 115, 42, 40, 47, 46, - 70, 65, 23, 36, 40, 80, 49, 64, 48, 40, 70, 161, 50, 9, 31, 45, 23, 59, 37, 71, 80, 20, 66, 81, - 36, 31, 19, 81, 142, 47, 87, 92, 53, 51, 140, 40, 28, 93, 37, 24, 42, 33, 30, 156, 50, 66, 17, - 53, 20, 63, 72, 40, 38, 97, 29, 58, 64, 72, 47, 54, 31, 80, 37, 30, 42, 34, 86, 36, +static FWD_DELAYS_MILLIS: [u16; 9969] = [ + 50, 46, 25, 37, 58, 61, 27, 42, 22, 44, 87, 73, 44, 82, 72, 52, 31, 45, 79, 64, 37, 17, 36, 17, + 27, 41, 35, 32, 48, 44, 20, 48, 81, 55, 25, 24, 60, 21, 43, 36, 86, 34, 33, 76, 31, 49, 56, 43, + 36, 69, 41, 42, 99, 146, 64, 74, 32, 65, 36, 58, 27, 40, 33, 59, 85, 92, 72, 39, 66, 27, 60, + 24, 30, 45, 24, 90, 24, 40, 30, 107, 67, 45, 71, 72, 62, 54, 70, 152, 28, 48, 41, 45, 52, 89, + 67, 25, 22, 78, 54, 92, 34, 62, 30, 71, 36, 66, 70, 22, 84, 88, 26, 88, 40, 43, 79, 52, 84, 72, + 94, 80, 39, 55, 49, 28, 68, 32, 57, 29, 42, 27, 102, 69, 18, 36, 40, 31, 64, 72, 70, 81, 22, + 27, 19, 104, 60, 85, 65, 53, 98, 52, 41, 44, 89, 32, 32, 16, 68, 89, 27, 23, 69, 38, 65, 35, + 40, 36, 81, 24, 55, 24, 28, 41, 54, 85, 38, 95, 56, 43, 81, 66, 62, 69, 25, 45, 68, 141, 43, + 58, 71, 51, 53, 82, 36, 26, 24, 43, 21, 25, 29, 29, 92, 59, 100, 77, 29, 64, 85, 26, 45, 26, + 54, 94, 40, 20, 60, 25, 71, 41, 40, 30, 42, 43, 62, 43, 49, 72, 52, 113, 66, 97, 43, 27, 44, + 50, 60, 74, 33, 17, 28, 26, 112, 73, 77, 61, 64, 47, 52, 42, 42, 84, 86, 80, 24, 32, 36, 85, + 35, 28, 29, 30, 61, 63, 16, 50, 82, 75, 53, 15, 51, 42, 44, 42, 39, 56, 169, 106, 35, 40, 70, + 158, 59, 52, 28, 90, 51, 27, 52, 44, 57, 100, 55, 67, 33, 61, 61, 85, 89, 30, 44, 95, 106, 67, + 36, 74, 53, 59, 40, 73, 25, 28, 65, 97, 165, 48, 45, 136, 108, 27, 188, 73, 85, 81, 76, 46, 41, + 58, 45, 40, 51, 51, 64, 69, 18, 35, 47, 42, 49, 52, 57, 66, 93, 58, 40, 68, 35, 112, 37, 61, + 144, 30, 32, 94, 22, 88, 147, 62, 91, 84, 69, 137, 86, 72, 25, 26, 31, 21, 76, 34, 147, 40, 50, + 61, 42, 40, 57, 152, 59, 38, 24, 62, 38, 42, 72, 38, 24, 30, 36, 37, 129, 46, 36, 41, 59, 28, + 52, 51, 79, 145, 37, 93, 48, 90, 149, 61, 35, 19, 19, 31, 91, 37, 47, 50, 40, 104, 148, 11, 21, + 42, 60, 27, 63, 93, 37, 73, 68, 45, 35, 92, 107, 98, 47, 80, 50, 76, 43, 49, 83, 25, 30, 49, + 108, 34, 83, 57, 48, 32, 63, 100, 51, 26, 89, 23, 14, 35, 43, 40, 42, 49, 78, 42, 35, 120, 48, + 87, 50, 24, 193, 34, 85, 49, 38, 19, 83, 43, 27, 93, 45, 79, 17, 95, 40, 44, 97, 76, 24, 37, + 53, 20, 22, 56, 79, 42, 95, 51, 17, 38, 86, 44, 32, 32, 77, 36, 55, 46, 74, 117, 93, 51, 115, + 88, 25, 54, 77, 49, 81, 88, 61, 60, 44, 64, 26, 47, 36, 70, 43, 68, 116, 15, 25, 91, 95, 49, + 35, 24, 95, 90, 77, 16, 25, 25, 29, 31, 37, 84, 63, 28, 74, 21, 37, 26, 43, 35, 13, 76, 58, 49, + 79, 45, 82, 19, 30, 78, 72, 45, 55, 102, 40, 60, 71, 80, 105, 89, 56, 26, 48, 82, 30, 34, 120, + 28, 41, 23, 43, 37, 70, 36, 38, 80, 47, 41, 46, 57, 56, 140, 26, 67, 122, 56, 78, 32, 49, 25, + 59, 100, 27, 45, 23, 65, 41, 21, 173, 64, 36, 32, 21, 68, 32, 72, 49, 47, 53, 36, 49, 38, 166, + 48, 33, 43, 53, 29, 72, 59, 42, 95, 30, 39, 46, 43, 138, 78, 54, 45, 33, 69, 42, 21, 57, 32, + 38, 32, 76, 34, 81, 193, 47, 47, 26, 62, 81, 44, 52, 42, 59, 57, 42, 85, 35, 51, 63, 42, 56, + 95, 22, 34, 65, 92, 58, 56, 63, 19, 93, 61, 49, 22, 63, 35, 101, 21, 55, 35, 33, 36, 119, 16, + 22, 69, 79, 73, 45, 35, 64, 68, 22, 42, 64, 21, 45, 41, 28, 63, 55, 27, 73, 37, 23, 30, 86, 79, + 34, 39, 28, 40, 33, 37, 34, 32, 49, 43, 11, 18, 49, 42, 45, 23, 32, 32, 66, 46, 42, 38, 42, 72, + 91, 90, 70, 90, 55, 64, 19, 62, 90, 24, 42, 37, 59, 87, 41, 167, 89, 59, 63, 43, 101, 41, 48, + 59, 90, 44, 78, 39, 35, 28, 38, 53, 97, 103, 57, 75, 35, 57, 33, 56, 35, 71, 40, 42, 65, 53, + 73, 43, 65, 48, 34, 23, 86, 16, 55, 73, 17, 65, 49, 28, 68, 35, 41, 36, 78, 78, 61, 31, 73, 64, + 49, 67, 73, 39, 35, 50, 75, 87, 43, 32, 57, 49, 45, 30, 54, 54, 31, 51, 74, 28, 130, 38, 78, + 54, 30, 76, 28, 63, 56, 38, 51, 69, 21, 67, 32, 69, 37, 48, 70, 25, 109, 33, 33, 83, 53, 56, + 25, 107, 51, 93, 58, 74, 87, 50, 46, 71, 65, 40, 61, 35, 57, 43, 49, 39, 47, 24, 94, 56, 58, + 86, 43, 49, 34, 142, 77, 82, 28, 23, 45, 54, 35, 117, 48, 35, 41, 150, 66, 83, 75, 96, 66, 47, + 39, 55, 54, 71, 53, 35, 41, 57, 43, 83, 89, 45, 43, 22, 66, 70, 104, 22, 96, 46, 110, 140, 95, + 62, 89, 64, 87, 66, 42, 54, 72, 108, 82, 31, 37, 95, 38, 49, 97, 57, 76, 44, 78, 56, 66, 90, + 43, 64, 108, 105, 56, 41, 18, 36, 51, 41, 128, 24, 72, 27, 43, 51, 60, 75, 67, 96, 37, 55, 37, + 34, 22, 35, 39, 35, 66, 37, 62, 70, 40, 34, 62, 33, 56, 73, 122, 70, 50, 27, 36, 74, 65, 58, + 50, 45, 85, 58, 56, 76, 45, 58, 42, 85, 27, 85, 47, 73, 107, 47, 39, 31, 88, 45, 28, 40, 33, + 70, 65, 46, 41, 38, 35, 96, 33, 24, 120, 69, 84, 29, 22, 28, 48, 106, 61, 72, 107, 72, 54, 31, + 86, 48, 37, 45, 69, 43, 90, 50, 20, 35, 30, 40, 37, 57, 113, 23, 39, 137, 55, 45, 30, 45, 107, + 56, 90, 39, 30, 83, 22, 43, 57, 98, 23, 88, 53, 32, 36, 60, 144, 63, 11, 48, 16, 18, 23, 38, + 62, 42, 44, 58, 27, 13, 23, 69, 75, 36, 22, 44, 58, 30, 97, 53, 119, 72, 174, 65, 20, 72, 59, + 76, 49, 29, 30, 29, 48, 26, 43, 29, 129, 107, 57, 27, 33, 38, 72, 189, 37, 40, 23, 81, 15, 99, + 56, 36, 58, 55, 31, 28, 49, 42, 85, 47, 77, 88, 32, 35, 64, 25, 51, 67, 70, 38, 57, 38, 61, 46, + 69, 70, 41, 148, 25, 46, 46, 49, 165, 30, 48, 19, 38, 71, 128, 74, 48, 25, 56, 51, 20, 72, 42, + 80, 44, 46, 50, 62, 37, 44, 47, 65, 44, 48, 89, 15, 21, 57, 64, 49, 106, 14, 52, 59, 53, 39, + 62, 101, 18, 71, 69, 55, 101, 60, 114, 88, 27, 78, 37, 88, 28, 29, 67, 55, 19, 99, 28, 31, 94, + 99, 20, 38, 22, 94, 22, 85, 13, 21, 57, 50, 72, 13, 87, 92, 106, 28, 25, 39, 67, 40, 45, 80, + 37, 64, 44, 100, 66, 52, 32, 31, 26, 50, 46, 28, 73, 68, 25, 80, 89, 63, 78, 32, 57, 27, 46, + 65, 62, 89, 130, 53, 80, 100, 35, 50, 71, 69, 20, 45, 54, 74, 62, 48, 24, 45, 43, 95, 52, 50, + 75, 80, 19, 78, 41, 32, 68, 88, 22, 86, 48, 66, 60, 91, 72, 30, 78, 62, 58, 53, 51, 104, 21, + 48, 93, 62, 54, 33, 55, 30, 51, 72, 55, 44, 141, 31, 56, 50, 23, 92, 41, 51, 45, 44, 26, 33, + 59, 33, 62, 72, 100, 64, 38, 41, 69, 57, 44, 104, 19, 79, 46, 93, 65, 105, 41, 55, 50, 27, 80, + 63, 22, 34, 35, 115, 48, 34, 45, 27, 25, 13, 30, 67, 154, 42, 60, 38, 31, 59, 30, 66, 43, 44, + 82, 36, 71, 107, 56, 90, 14, 106, 81, 39, 57, 45, 117, 108, 44, 18, 37, 80, 28, 69, 54, 29, 55, + 43, 35, 35, 149, 41, 47, 39, 104, 111, 18, 83, 26, 21, 99, 46, 35, 58, 45, 51, 27, 64, 152, 82, + 48, 23, 59, 57, 71, 90, 23, 97, 75, 123, 22, 50, 74, 28, 66, 44, 51, 66, 28, 91, 58, 34, 26, + 127, 95, 49, 83, 97, 122, 80, 35, 53, 50, 102, 38, 18, 15, 33, 83, 25, 120, 54, 34, 88, 64, 43, + 52, 126, 50, 76, 126, 35, 74, 33, 18, 21, 105, 46, 61, 137, 36, 63, 58, 51, 43, 34, 51, 41, 40, + 47, 48, 67, 34, 21, 23, 100, 90, 26, 109, 81, 28, 49, 48, 177, 42, 32, 30, 22, 56, 40, 59, 106, + 41, 68, 39, 73, 31, 65, 51, 50, 29, 21, 133, 65, 45, 81, 54, 21, 88, 20, 38, 37, 91, 43, 29, + 35, 95, 107, 24, 83, 30, 28, 88, 48, 28, 88, 24, 97, 91, 46, 63, 31, 53, 46, 57, 40, 26, 86, + 118, 87, 27, 67, 18, 43, 44, 105, 32, 54, 82, 55, 109, 57, 107, 87, 26, 54, 24, 42, 85, 42, 81, + 32, 113, 62, 33, 77, 71, 63, 67, 124, 57, 43, 98, 90, 34, 33, 95, 74, 57, 31, 35, 83, 66, 35, + 61, 81, 85, 69, 74, 47, 134, 47, 86, 31, 116, 33, 46, 46, 19, 47, 61, 35, 58, 26, 59, 62, 37, + 86, 99, 65, 41, 106, 47, 66, 71, 18, 23, 81, 174, 43, 56, 54, 73, 33, 54, 92, 66, 75, 65, 48, + 58, 14, 68, 47, 147, 88, 50, 23, 21, 108, 74, 74, 33, 92, 38, 96, 81, 80, 42, 106, 63, 22, 31, + 46, 32, 186, 85, 43, 59, 84, 21, 30, 45, 31, 82, 57, 36, 24, 74, 14, 64, 50, 46, 22, 80, 43, + 152, 68, 39, 50, 20, 42, 96, 101, 38, 59, 63, 42, 39, 71, 59, 53, 26, 54, 37, 29, 75, 37, 46, + 34, 10, 43, 32, 34, 43, 47, 43, 41, 39, 40, 54, 49, 37, 43, 54, 39, 53, 43, 47, 59, 51, 69, + 102, 16, 85, 54, 31, 28, 64, 29, 41, 40, 88, 33, 76, 65, 48, 100, 33, 95, 41, 134, 31, 70, 45, + 58, 50, 47, 38, 44, 60, 43, 53, 59, 57, 58, 91, 19, 72, 75, 48, 27, 49, 60, 75, 69, 67, 41, 70, + 116, 112, 38, 43, 58, 40, 73, 77, 90, 48, 15, 41, 59, 46, 26, 50, 78, 110, 42, 21, 96, 134, 45, + 12, 36, 44, 99, 26, 51, 55, 46, 199, 67, 56, 80, 140, 17, 76, 69, 30, 42, 67, 49, 38, 20, 11, + 46, 40, 27, 44, 40, 35, 54, 20, 48, 83, 36, 34, 74, 44, 25, 57, 79, 83, 55, 99, 42, 45, 36, 35, + 26, 39, 111, 46, 75, 40, 54, 23, 104, 23, 26, 130, 22, 39, 27, 59, 29, 22, 67, 44, 61, 52, 50, + 65, 23, 133, 74, 68, 18, 47, 45, 29, 83, 53, 85, 57, 41, 68, 36, 76, 79, 21, 81, 46, 99, 55, + 107, 58, 99, 32, 37, 50, 37, 108, 27, 49, 33, 58, 32, 53, 55, 145, 29, 52, 102, 42, 73, 57, + 165, 44, 37, 132, 33, 44, 35, 24, 57, 73, 52, 30, 56, 52, 86, 107, 74, 54, 54, 66, 53, 23, 49, + 42, 45, 36, 81, 29, 47, 28, 36, 64, 79, 56, 26, 37, 42, 35, 54, 71, 34, 26, 90, 47, 44, 84, 35, + 45, 25, 35, 42, 54, 84, 15, 92, 43, 73, 38, 31, 49, 29, 25, 52, 32, 88, 68, 72, 129, 68, 23, + 33, 28, 34, 69, 55, 24, 31, 79, 32, 34, 37, 55, 58, 41, 107, 130, 71, 62, 91, 23, 59, 42, 45, + 59, 47, 77, 74, 41, 37, 77, 73, 46, 20, 50, 65, 30, 104, 37, 35, 51, 98, 65, 66, 47, 17, 32, + 23, 61, 35, 54, 65, 42, 74, 44, 32, 62, 68, 36, 58, 56, 42, 50, 60, 61, 72, 102, 27, 140, 46, + 47, 36, 57, 25, 30, 114, 54, 29, 18, 28, 32, 91, 32, 31, 68, 22, 15, 94, 54, 45, 52, 72, 102, + 49, 103, 57, 75, 58, 84, 48, 27, 49, 19, 110, 110, 36, 38, 22, 92, 62, 55, 15, 35, 27, 116, 44, + 27, 34, 70, 75, 27, 32, 23, 44, 53, 75, 69, 35, 43, 41, 53, 50, 92, 63, 102, 19, 61, 41, 50, + 38, 32, 87, 25, 16, 56, 33, 30, 74, 34, 168, 53, 45, 66, 32, 111, 37, 36, 76, 53, 20, 75, 58, + 41, 34, 68, 20, 98, 76, 44, 86, 74, 37, 105, 77, 36, 53, 50, 64, 66, 61, 76, 34, 151, 33, 58, + 60, 42, 65, 41, 55, 68, 40, 21, 35, 31, 31, 68, 68, 74, 28, 60, 29, 71, 90, 21, 66, 36, 38, 50, + 36, 34, 65, 33, 76, 48, 53, 52, 86, 27, 116, 24, 113, 33, 52, 18, 50, 20, 25, 29, 35, 56, 26, + 38, 68, 28, 80, 36, 109, 81, 43, 69, 24, 26, 48, 38, 73, 46, 18, 48, 38, 75, 55, 53, 25, 86, + 24, 76, 89, 65, 29, 55, 91, 43, 54, 39, 44, 9, 35, 110, 24, 38, 35, 49, 107, 97, 40, 32, 96, + 48, 45, 31, 69, 56, 54, 33, 49, 39, 110, 65, 57, 91, 46, 59, 33, 40, 36, 59, 16, 39, 62, 42, + 68, 109, 65, 31, 121, 65, 45, 65, 62, 31, 77, 52, 28, 49, 31, 30, 36, 45, 58, 18, 13, 12, 50, + 54, 24, 38, 65, 53, 117, 108, 44, 56, 49, 19, 38, 80, 33, 25, 45, 44, 38, 93, 59, 53, 27, 55, + 37, 26, 49, 33, 16, 28, 89, 91, 29, 83, 155, 56, 39, 32, 39, 52, 58, 33, 39, 46, 61, 24, 25, + 54, 28, 68, 75, 141, 53, 131, 54, 50, 82, 36, 102, 83, 79, 67, 111, 106, 21, 51, 31, 39, 15, + 16, 41, 71, 58, 95, 44, 52, 34, 24, 51, 93, 63, 28, 20, 16, 57, 26, 29, 99, 22, 29, 35, 32, + 102, 53, 102, 98, 48, 47, 42, 21, 72, 38, 55, 55, 58, 65, 87, 20, 57, 49, 59, 23, 39, 25, 57, + 15, 42, 34, 53, 24, 68, 43, 111, 184, 74, 34, 88, 57, 58, 67, 108, 63, 48, 87, 36, 103, 67, 43, + 55, 57, 90, 34, 41, 94, 64, 48, 22, 43, 28, 33, 56, 128, 23, 27, 53, 94, 42, 87, 53, 34, 44, + 36, 43, 71, 49, 67, 45, 56, 32, 59, 40, 27, 50, 45, 38, 28, 99, 49, 34, 53, 41, 41, 76, 84, + 119, 104, 73, 35, 49, 85, 41, 21, 48, 28, 128, 52, 39, 77, 52, 27, 31, 31, 25, 75, 47, 117, + 124, 42, 48, 99, 50, 81, 54, 99, 70, 86, 58, 33, 31, 56, 17, 60, 41, 88, 78, 181, 98, 40, 89, + 28, 24, 37, 38, 105, 74, 34, 28, 66, 67, 71, 47, 34, 40, 127, 107, 177, 57, 28, 48, 59, 35, 46, + 43, 34, 27, 105, 18, 105, 126, 46, 36, 57, 52, 40, 71, 30, 104, 25, 45, 29, 24, 78, 33, 49, 46, + 41, 70, 62, 50, 23, 52, 11, 45, 40, 26, 51, 62, 60, 42, 46, 13, 28, 78, 65, 57, 63, 61, 51, 64, + 25, 59, 56, 57, 43, 59, 69, 142, 43, 72, 53, 64, 71, 44, 31, 39, 28, 55, 82, 69, 40, 61, 48, + 45, 43, 52, 150, 80, 48, 25, 92, 142, 56, 114, 56, 46, 47, 68, 59, 16, 67, 59, 63, 46, 32, 45, + 82, 53, 50, 39, 149, 85, 63, 50, 117, 53, 109, 45, 66, 24, 56, 52, 66, 39, 50, 58, 114, 47, 44, + 41, 56, 50, 94, 36, 75, 44, 36, 19, 94, 25, 34, 59, 11, 37, 38, 61, 29, 65, 105, 45, 53, 71, + 39, 60, 38, 45, 41, 135, 82, 44, 46, 49, 80, 32, 69, 20, 133, 46, 93, 54, 59, 64, 53, 42, 72, + 77, 94, 43, 31, 59, 62, 29, 61, 84, 52, 148, 41, 102, 55, 49, 31, 59, 82, 69, 23, 69, 34, 92, + 24, 27, 23, 64, 44, 69, 64, 18, 42, 20, 46, 44, 79, 38, 62, 46, 32, 27, 60, 39, 86, 25, 105, + 59, 30, 19, 94, 93, 20, 58, 37, 45, 30, 59, 23, 55, 44, 47, 48, 28, 40, 40, 119, 22, 50, 75, + 74, 55, 71, 73, 26, 50, 69, 73, 56, 140, 58, 22, 30, 34, 45, 52, 186, 41, 40, 123, 79, 48, 76, + 61, 63, 74, 46, 55, 82, 24, 15, 45, 33, 91, 29, 46, 26, 47, 43, 55, 61, 33, 97, 63, 64, 20, 44, + 75, 79, 93, 39, 126, 45, 104, 36, 50, 55, 73, 45, 40, 43, 99, 29, 44, 98, 72, 48, 56, 51, 59, + 49, 30, 56, 37, 45, 68, 78, 29, 24, 62, 44, 32, 62, 158, 70, 67, 96, 45, 107, 36, 46, 62, 90, + 107, 36, 33, 41, 19, 21, 61, 73, 90, 21, 109, 23, 29, 25, 37, 54, 29, 71, 73, 56, 37, 35, 46, + 33, 82, 82, 53, 74, 13, 39, 70, 45, 32, 41, 25, 68, 79, 19, 44, 23, 46, 38, 38, 39, 41, 66, 68, + 33, 46, 58, 20, 40, 72, 41, 26, 106, 41, 59, 41, 34, 71, 47, 85, 25, 55, 66, 29, 57, 82, 27, + 34, 59, 30, 24, 60, 69, 30, 118, 43, 94, 62, 31, 63, 56, 69, 79, 82, 53, 24, 40, 99, 84, 56, + 14, 21, 36, 60, 37, 82, 45, 10, 33, 118, 40, 56, 117, 22, 47, 38, 21, 104, 41, 55, 35, 97, 66, + 37, 38, 65, 82, 51, 67, 32, 25, 59, 164, 49, 57, 94, 61, 20, 37, 62, 85, 87, 36, 183, 51, 28, + 66, 22, 69, 46, 94, 52, 52, 39, 42, 30, 25, 32, 47, 31, 24, 40, 187, 47, 42, 54, 119, 74, 63, + 51, 25, 138, 42, 46, 35, 40, 47, 14, 197, 73, 58, 31, 26, 34, 36, 30, 46, 45, 39, 64, 36, 75, + 46, 49, 55, 52, 65, 43, 80, 49, 86, 21, 54, 50, 37, 40, 47, 31, 31, 51, 24, 62, 79, 55, 49, 27, + 39, 29, 68, 68, 19, 41, 60, 18, 41, 23, 175, 73, 21, 83, 71, 60, 168, 75, 37, 40, 154, 72, 47, + 86, 28, 66, 51, 42, 88, 162, 27, 39, 37, 54, 62, 21, 89, 77, 42, 64, 42, 21, 81, 62, 62, 75, + 68, 33, 36, 121, 34, 67, 60, 30, 83, 49, 115, 86, 41, 46, 20, 100, 31, 110, 20, 18, 31, 30, 39, + 51, 35, 38, 53, 32, 65, 86, 68, 25, 49, 50, 45, 47, 30, 63, 39, 27, 47, 29, 48, 75, 71, 54, 50, + 53, 81, 50, 69, 64, 125, 45, 50, 35, 29, 68, 38, 130, 110, 78, 21, 58, 88, 26, 97, 35, 24, 161, + 85, 80, 32, 56, 32, 140, 118, 44, 52, 26, 66, 51, 51, 75, 38, 172, 51, 17, 65, 69, 47, 77, 27, + 69, 76, 78, 34, 57, 41, 58, 13, 59, 29, 54, 168, 48, 132, 33, 66, 141, 50, 38, 74, 30, 100, 55, + 34, 44, 56, 82, 59, 55, 39, 36, 56, 45, 33, 83, 63, 44, 78, 43, 26, 32, 35, 33, 96, 80, 83, 71, + 45, 71, 39, 40, 36, 38, 59, 83, 66, 37, 56, 45, 36, 131, 62, 65, 95, 106, 44, 33, 23, 33, 37, + 28, 29, 43, 36, 73, 46, 40, 27, 31, 20, 34, 56, 24, 67, 86, 76, 50, 40, 86, 48, 62, 139, 51, + 71, 28, 27, 81, 89, 15, 44, 33, 86, 38, 49, 119, 41, 30, 83, 41, 123, 36, 56, 90, 19, 25, 32, + 48, 37, 38, 45, 51, 56, 53, 33, 42, 63, 79, 104, 28, 56, 65, 25, 122, 77, 85, 28, 69, 117, 71, + 43, 49, 92, 43, 33, 65, 39, 57, 45, 40, 28, 56, 36, 38, 154, 23, 43, 47, 33, 61, 51, 25, 105, + 33, 99, 62, 42, 74, 27, 45, 45, 43, 61, 28, 35, 64, 66, 84, 30, 30, 94, 51, 21, 50, 110, 39, + 73, 15, 77, 119, 72, 76, 61, 68, 45, 51, 26, 34, 53, 39, 65, 38, 62, 29, 29, 66, 78, 44, 45, + 110, 85, 78, 181, 145, 43, 63, 53, 140, 24, 36, 35, 20, 76, 101, 92, 53, 101, 45, 53, 78, 53, + 31, 57, 28, 25, 53, 47, 34, 84, 38, 89, 157, 75, 61, 68, 92, 51, 69, 31, 106, 60, 42, 100, 37, + 73, 42, 33, 43, 63, 130, 29, 37, 18, 53, 75, 35, 41, 62, 49, 40, 37, 32, 40, 36, 98, 16, 28, + 40, 50, 61, 110, 72, 43, 65, 60, 13, 28, 67, 35, 36, 92, 164, 38, 70, 31, 28, 54, 124, 37, 28, + 52, 33, 28, 51, 24, 32, 69, 28, 60, 26, 37, 109, 36, 47, 44, 58, 75, 43, 50, 44, 49, 62, 48, + 40, 28, 37, 14, 66, 40, 44, 87, 29, 69, 111, 49, 81, 28, 54, 54, 30, 23, 41, 46, 33, 58, 12, + 30, 84, 34, 81, 37, 72, 41, 46, 36, 57, 72, 24, 37, 26, 46, 75, 31, 71, 52, 16, 28, 41, 19, 47, + 106, 107, 179, 25, 54, 26, 26, 22, 37, 105, 64, 40, 62, 62, 18, 34, 46, 106, 54, 42, 36, 38, + 24, 21, 119, 31, 21, 21, 74, 59, 28, 108, 46, 55, 34, 21, 54, 62, 82, 36, 45, 42, 77, 40, 46, + 72, 45, 51, 53, 25, 27, 27, 67, 86, 54, 96, 25, 42, 60, 18, 29, 20, 23, 40, 41, 37, 46, 44, 37, + 60, 30, 34, 106, 62, 42, 49, 43, 74, 52, 142, 68, 35, 52, 61, 135, 200, 70, 60, 50, 74, 51, 40, + 34, 63, 38, 84, 27, 41, 47, 92, 13, 92, 96, 46, 33, 33, 34, 129, 47, 39, 29, 125, 118, 59, 39, + 39, 98, 32, 32, 72, 35, 67, 76, 86, 94, 67, 39, 58, 66, 36, 27, 59, 19, 70, 49, 105, 162, 60, + 43, 54, 77, 84, 35, 77, 83, 21, 39, 58, 103, 72, 39, 107, 19, 44, 21, 62, 16, 136, 72, 107, 61, + 19, 37, 79, 59, 107, 19, 42, 20, 48, 65, 18, 47, 30, 17, 79, 47, 56, 91, 60, 40, 37, 74, 73, + 42, 31, 59, 64, 44, 46, 45, 24, 63, 29, 89, 78, 34, 62, 56, 39, 30, 115, 37, 21, 68, 35, 96, + 79, 48, 94, 53, 126, 81, 68, 63, 28, 70, 125, 60, 78, 31, 51, 16, 29, 61, 73, 28, 83, 56, 46, + 125, 121, 49, 73, 40, 31, 35, 44, 25, 81, 83, 29, 53, 44, 37, 54, 31, 108, 50, 53, 22, 37, 55, + 132, 94, 34, 71, 44, 84, 63, 84, 62, 20, 98, 28, 61, 45, 41, 32, 66, 59, 55, 41, 53, 42, 38, + 128, 69, 17, 49, 101, 48, 69, 12, 37, 48, 36, 55, 20, 57, 40, 64, 26, 22, 60, 94, 29, 32, 34, + 37, 34, 36, 33, 58, 73, 52, 42, 63, 48, 33, 22, 18, 37, 56, 28, 35, 44, 46, 64, 50, 84, 55, 86, + 85, 86, 89, 68, 58, 41, 45, 21, 48, 42, 33, 19, 83, 61, 43, 35, 36, 53, 67, 55, 44, 23, 39, 73, + 114, 41, 25, 83, 37, 45, 75, 41, 60, 52, 29, 47, 48, 26, 100, 62, 24, 44, 22, 48, 73, 39, 69, + 61, 39, 69, 85, 29, 25, 52, 14, 47, 60, 28, 61, 33, 41, 45, 42, 64, 47, 92, 21, 35, 37, 21, 70, + 58, 27, 37, 86, 44, 20, 35, 71, 38, 101, 49, 42, 25, 55, 63, 64, 74, 28, 36, 96, 45, 44, 43, + 114, 80, 44, 109, 28, 29, 29, 90, 62, 17, 46, 44, 88, 42, 31, 49, 21, 47, 66, 48, 45, 101, 67, + 44, 93, 42, 45, 76, 57, 20, 60, 78, 41, 43, 51, 95, 55, 38, 62, 39, 75, 110, 67, 130, 21, 67, + 45, 46, 37, 60, 50, 32, 44, 86, 20, 39, 53, 45, 117, 74, 59, 71, 14, 76, 98, 40, 29, 39, 52, + 33, 50, 17, 52, 57, 53, 44, 50, 52, 96, 48, 45, 53, 73, 45, 42, 69, 96, 75, 55, 140, 44, 103, + 29, 39, 31, 101, 41, 155, 13, 51, 31, 53, 92, 86, 37, 24, 85, 14, 87, 62, 86, 28, 34, 38, 55, + 50, 29, 41, 66, 20, 24, 58, 26, 16, 55, 61, 29, 57, 48, 90, 21, 67, 34, 38, 146, 84, 115, 54, + 45, 58, 43, 18, 87, 46, 52, 74, 111, 61, 51, 48, 79, 56, 60, 26, 59, 47, 27, 33, 60, 34, 25, + 37, 78, 40, 97, 50, 43, 47, 39, 25, 33, 23, 51, 174, 83, 85, 26, 46, 61, 55, 52, 49, 91, 23, + 89, 41, 38, 25, 34, 41, 72, 44, 92, 12, 40, 30, 80, 25, 61, 84, 61, 67, 88, 122, 74, 123, 68, + 57, 33, 34, 52, 69, 36, 67, 56, 23, 32, 38, 41, 29, 46, 61, 23, 44, 25, 54, 27, 64, 79, 114, + 33, 33, 40, 83, 26, 29, 52, 47, 41, 65, 116, 103, 25, 57, 55, 33, 36, 89, 52, 92, 46, 41, 74, + 32, 132, 51, 84, 71, 49, 41, 76, 50, 45, 30, 99, 36, 95, 92, 15, 23, 51, 89, 22, 49, 58, 53, + 83, 45, 100, 28, 50, 32, 44, 68, 34, 142, 126, 123, 10, 47, 43, 77, 46, 111, 74, 93, 28, 93, + 65, 123, 36, 40, 21, 65, 61, 75, 73, 24, 61, 65, 52, 102, 79, 64, 28, 37, 53, 15, 42, 37, 45, + 41, 36, 38, 82, 36, 41, 44, 15, 37, 48, 43, 85, 44, 58, 22, 67, 33, 78, 22, 40, 27, 63, 40, 31, + 90, 102, 56, 49, 44, 46, 57, 45, 39, 28, 35, 25, 60, 53, 72, 18, 74, 66, 56, 129, 29, 48, 45, + 52, 38, 159, 18, 30, 54, 47, 22, 50, 45, 32, 38, 63, 83, 18, 81, 30, 39, 68, 46, 90, 16, 48, + 35, 47, 83, 41, 54, 70, 32, 57, 88, 37, 29, 31, 78, 28, 35, 82, 67, 82, 31, 62, 33, 27, 27, + 117, 35, 118, 30, 52, 128, 56, 51, 54, 59, 50, 162, 30, 17, 9, 95, 50, 84, 52, 32, 29, 66, 36, + 64, 51, 120, 58, 67, 78, 12, 24, 44, 65, 57, 75, 97, 34, 23, 23, 56, 26, 16, 85, 32, 79, 82, + 27, 17, 66, 38, 52, 96, 112, 61, 25, 61, 52, 32, 30, 53, 146, 26, 82, 53, 64, 42, 36, 32, 43, + 94, 32, 178, 23, 106, 27, 34, 77, 64, 119, 37, 72, 50, 49, 70, 52, 82, 59, 53, 56, 42, 21, 51, + 61, 28, 123, 78, 92, 58, 26, 58, 39, 79, 59, 57, 48, 68, 34, 76, 26, 91, 51, 56, 88, 19, 24, + 52, 53, 47, 56, 87, 62, 47, 45, 80, 38, 47, 58, 32, 68, 65, 88, 52, 21, 71, 26, 58, 97, 104, + 120, 120, 47, 38, 66, 109, 97, 121, 48, 52, 36, 48, 78, 45, 40, 51, 74, 26, 40, 49, 123, 31, + 100, 27, 68, 32, 39, 15, 16, 26, 31, 66, 65, 37, 66, 33, 93, 54, 195, 27, 60, 52, 39, 22, 77, + 100, 42, 50, 61, 48, 133, 80, 95, 52, 83, 115, 108, 43, 35, 49, 31, 27, 30, 26, 95, 45, 33, 60, + 81, 43, 39, 101, 43, 44, 53, 41, 36, 32, 37, 23, 32, 160, 49, 109, 33, 36, 64, 41, 41, 74, 38, + 34, 59, 23, 48, 35, 49, 36, 72, 55, 61, 85, 120, 44, 38, 58, 23, 63, 35, 18, 89, 56, 84, 41, + 48, 51, 118, 30, 47, 64, 73, 23, 56, 26, 97, 47, 52, 23, 43, 37, 42, 51, 31, 46, 68, 23, 28, + 68, 75, 61, 88, 45, 85, 49, 56, 96, 149, 24, 143, 62, 41, 35, 39, 99, 44, 43, 81, 25, 70, 26, + 27, 47, 121, 22, 80, 29, 29, 113, 23, 49, 89, 42, 33, 26, 55, 55, 74, 50, 48, 76, 31, 22, 47, + 40, 61, 46, 103, 67, 87, 116, 48, 53, 57, 63, 109, 65, 46, 58, 89, 50, 26, 78, 41, 81, 41, 101, + 28, 113, 50, 33, 66, 20, 106, 93, 36, 117, 94, 109, 43, 102, 36, 68, 18, 137, 44, 53, 81, 20, + 21, 80, 81, 76, 48, 27, 15, 63, 38, 34, 45, 50, 22, 39, 73, 46, 32, 66, 49, 47, 71, 44, 43, 23, + 39, 90, 43, 40, 40, 63, 24, 62, 27, 23, 37, 80, 25, 49, 61, 29, 55, 47, 125, 60, 58, 99, 40, + 67, 85, 48, 20, 66, 59, 183, 38, 31, 44, 71, 49, 25, 51, 71, 45, 32, 27, 60, 73, 73, 38, 32, + 51, 48, 39, 36, 21, 47, 67, 49, 69, 44, 30, 108, 22, 97, 60, 110, 40, 20, 59, 71, 45, 40, 56, + 122, 72, 102, 32, 22, 39, 64, 50, 71, 42, 31, 68, 40, 172, 22, 32, 43, 72, 48, 55, 41, 35, 93, + 53, 33, 59, 47, 49, 82, 97, 70, 40, 51, 55, 27, 44, 78, 165, 64, 29, 35, 48, 25, 44, 96, 89, + 28, 116, 73, 20, 41, 37, 36, 96, 43, 47, 45, 63, 65, 34, 28, 38, 27, 54, 153, 60, 50, 83, 44, + 54, 81, 55, 41, 47, 30, 36, 57, 35, 55, 81, 104, 29, 58, 25, 35, 21, 66, 72, 42, 56, 27, 61, + 35, 70, 90, 57, 40, 53, 32, 114, 29, 42, 59, 60, 43, 54, 32, 32, 121, 104, 64, 33, 44, 58, 81, + 30, 43, 59, 17, 93, 131, 87, 53, 32, 28, 38, 96, 64, 48, 60, 16, 60, 70, 43, 73, 42, 43, 63, + 71, 64, 30, 97, 60, 45, 41, 51, 111, 47, 58, 54, 56, 60, 43, 61, 52, 55, 94, 88, 42, 26, 56, + 71, 42, 21, 51, 73, 156, 79, 65, 143, 36, 121, 48, 38, 42, 106, 52, 71, 130, 113, 43, 40, 38, + 51, 39, 23, 79, 90, 34, 55, 45, 29, 161, 50, 65, 43, 129, 54, 49, 38, 38, 49, 28, 89, 49, 31, + 62, 41, 42, 50, 27, 42, 75, 39, 56, 39, 30, 53, 19, 87, 69, 37, 43, 56, 45, 48, 59, 42, 40, 20, + 144, 43, 41, 127, 90, 37, 104, 47, 74, 36, 61, 21, 52, 59, 15, 27, 39, 40, 35, 31, 72, 98, 30, + 36, 14, 50, 25, 50, 43, 71, 82, 114, 24, 64, 107, 20, 91, 126, 43, 35, 28, 100, 54, 28, 41, 42, + 77, 57, 115, 48, 35, 66, 35, 19, 80, 90, 50, 58, 19, 53, 32, 170, 85, 47, 39, 13, 26, 47, 71, + 108, 59, 24, 71, 44, 55, 39, 55, 42, 43, 43, 48, 76, 33, 80, 64, 36, 21, 106, 39, 59, 98, 25, + 15, 60, 96, 36, 62, 46, 52, 51, 83, 88, 178, 40, 78, 21, 26, 42, 164, 70, 100, 55, 29, 104, 93, + 89, 20, 29, 54, 78, 60, 40, 96, 41, 66, 77, 20, 42, 77, 96, 89, 24, 72, 24, 65, 75, 88, 47, 47, + 51, 99, 42, 88, 58, 70, 59, 44, 63, 44, 62, 31, 61, 26, 39, 24, 64, 130, 48, 33, 21, 18, 53, + 56, 68, 73, 55, 133, 40, 48, 113, 83, 61, 43, 30, 45, 126, 53, 63, 108, 39, 67, 60, 60, 93, 46, + 13, 66, 104, 53, 113, 55, 167, 60, 89, 118, 74, 35, 63, 41, 64, 99, 36, 42, 31, 35, 31, 70, 28, + 29, 78, 77, 61, 34, 58, 26, 36, 54, 81, 42, 68, 49, 35, 72, 36, 158, 96, 52, 40, 79, 108, 21, + 44, 24, 19, 35, 21, 79, 51, 16, 54, 90, 19, 103, 76, 41, 83, 99, 34, 57, 40, 47, 114, 29, 57, + 26, 45, 48, 46, 39, 30, 116, 152, 58, 35, 27, 68, 38, 52, 82, 40, 58, 149, 39, 43, 39, 38, 80, + 48, 51, 27, 13, 56, 23, 62, 23, 64, 25, 64, 60, 70, 99, 23, 91, 34, 66, 56, 40, 55, 49, 29, 41, + 40, 98, 48, 56, 32, 65, 33, 54, 15, 48, 30, 28, 153, 26, 56, 26, 18, 47, 60, 45, 42, 147, 59, + 36, 36, 140, 110, 34, 29, 86, 68, 41, 41, 50, 54, 97, 53, 123, 25, 86, 68, 149, 61, 54, 39, 23, + 49, 72, 34, 75, 52, 24, 35, 100, 74, 36, 57, 114, 60, 35, 52, 41, 35, 70, 30, 50, 63, 79, 47, + 97, 45, 50, 45, 76, 40, 49, 41, 86, 48, 89, 171, 21, 171, 50, 41, 49, 47, 26, 37, 22, 87, 37, + 110, 25, 51, 40, 56, 34, 53, 64, 70, 80, 199, 76, 30, 36, 37, 40, 94, 38, 34, 26, 45, 39, 40, + 49, 37, 60, 49, 40, 50, 54, 84, 50, 53, 82, 54, 49, 89, 108, 42, 87, 37, 25, 47, 36, 61, 134, + 66, 110, 76, 37, 110, 105, 30, 32, 39, 98, 84, 138, 66, 63, 113, 34, 36, 141, 28, 50, 44, 48, + 42, 56, 72, 30, 47, 23, 37, 23, 26, 72, 46, 18, 58, 13, 54, 22, 170, 41, 66, 35, 78, 30, 80, + 37, 48, 103, 46, 38, 45, 76, 24, 41, 50, 52, 41, 44, 38, 49, 36, 53, 47, 66, 45, 35, 47, 71, + 21, 116, 24, 47, 92, 117, 100, 48, 79, 54, 32, 68, 57, 33, 44, 48, 80, 36, 45, 55, 34, 50, 30, + 36, 43, 36, 42, 37, 37, 44, 39, 29, 27, 71, 70, 32, 74, 38, 56, 51, 35, 61, 48, 50, 26, 39, 28, + 37, 42, 51, 50, 57, 51, 108, 79, 118, 54, 61, 36, 55, 20, 59, 15, 37, 30, 43, 69, 60, 98, 59, + 57, 46, 81, 65, 49, 82, 46, 67, 170, 36, 118, 111, 67, 34, 47, 29, 24, 32, 39, 84, 73, 54, 62, + 88, 92, 21, 76, 192, 27, 48, 44, 78, 49, 33, 82, 45, 61, 73, 42, 119, 46, 36, 55, 70, 64, 35, + 38, 74, 21, 67, 69, 20, 20, 29, 45, 48, 63, 43, 27, 52, 67, 47, 25, 121, 54, 63, 21, 37, 26, + 23, 49, 34, 32, 56, 48, 122, 100, 69, 63, 55, 52, 23, 84, 41, 88, 45, 44, 36, 32, 91, 93, 87, + 32, 81, 51, 94, 72, 27, 72, 68, 43, 106, 72, 50, 73, 90, 97, 74, 50, 58, 43, 80, 27, 46, 27, + 32, 92, 33, 25, 17, 16, 100, 54, 113, 33, 26, 31, 54, 19, 22, 40, 57, 48, 34, 45, 18, 22, 69, + 64, 56, 154, 93, 86, 56, 95, 27, 72, 59, 17, 33, 42, 26, 23, 35, 20, 39, 40, 83, 49, 69, 54, + 89, 29, 35, 37, 16, 125, 68, 65, 35, 38, 60, 54, 153, 71, 18, 68, 96, 56, 60, 44, 55, 84, 33, + 63, 47, 52, 63, 73, 35, 41, 35, 70, 39, 33, 36, 45, 169, 48, 83, 46, 58, 67, 43, 127, 59, 51, + 28, 73, 18, 62, 56, 48, 33, 72, 12, 22, 155, 59, 42, 46, 53, 78, 45, 80, 133, 21, 44, 74, 36, + 33, 22, 83, 99, 20, 33, 36, 33, 24, 40, 104, 24, 33, 50, 142, 62, 71, 25, 59, 18, 42, 110, 68, + 89, 69, 42, 49, 47, 86, 26, 101, 85, 36, 153, 32, 27, 50, 70, 88, 71, 18, 57, 65, 61, 31, 76, + 54, 37, 83, 100, 30, 48, 17, 31, 60, 43, 105, 35, 51, 59, 171, 38, 46, 36, 30, 69, 39, 54, 165, + 72, 54, 26, 66, 44, 70, 88, 53, 55, 141, 73, 57, 30, 46, 48, 62, 50, 45, 58, 46, 57, 26, 50, + 99, 32, 94, 77, 69, 121, 79, 32, 74, 34, 78, 73, 66, 88, 31, 35, 47, 45, 37, 56, 68, 25, 82, + 31, 65, 37, 86, 56, 20, 87, 69, 82, 102, 21, 69, 41, 22, 61, 116, 58, 23, 42, 117, 41, 60, 28, + 117, 120, 53, 65, 113, 83, 70, 56, 34, 44, 22, 61, 45, 65, 63, 119, 33, 55, 26, 26, 68, 55, 29, + 34, 54, 94, 60, 33, 94, 33, 71, 26, 31, 59, 34, 52, 37, 97, 33, 42, 30, 133, 49, 126, 75, 51, + 18, 72, 56, 48, 31, 74, 95, 24, 24, 40, 83, 43, 62, 52, 82, 29, 33, 41, 49, 68, 39, 50, 20, 33, + 56, 96, 61, 62, 35, 31, 75, 123, 57, 39, 160, 58, 44, 43, 57, 29, 52, 30, 39, 43, 63, 82, 46, + 99, 24, 54, 108, 84, 146, 66, 30, 25, 53, 62, 40, 64, 23, 50, 61, 25, 59, 54, 18, 33, 44, 35, + 71, 28, 31, 33, 44, 10, 100, 36, 45, 30, 57, 52, 18, 43, 111, 39, 62, 15, 25, 55, 43, 50, 61, + 38, 69, 68, 15, 105, 89, 61, 53, 34, 35, 87, 50, 61, 65, 55, 67, 70, 14, 53, 82, 22, 39, 30, + 59, 43, 38, 40, 83, 68, 30, 91, 45, 43, 140, 125, 37, 27, 29, 64, 70, 73, 15, 57, 34, 34, 60, + 85, 48, 37, 30, 72, 39, 56, 27, 60, 24, 54, 28, 27, 25, 25, 42, 40, 89, 49, 22, 107, 38, 48, + 43, 49, 15, 56, 62, 48, 73, 39, 41, 64, 108, 35, 44, 24, 94, 39, 17, 28, 118, 72, 48, 60, 33, + 48, 57, 35, 70, 79, 24, 85, 55, 30, 73, 34, 84, 66, 32, 70, 37, 61, 44, 68, 49, 42, 41, 48, 21, + 34, 65, 109, 86, 81, 73, 63, 20, 46, 53, 94, 40, 90, 126, 19, 45, 37, 49, 62, 82, 44, 52, 25, + 88, 35, 36, 39, 28, 111, 61, 28, 61, 48, 36, 33, 49, 65, 63, 31, 53, 40, 52, 46, 47, 43, 120, + 42, 65, 62, 43, 47, 57, 36, 43, 43, 73, 23, 49, 114, 98, 18, 40, 44, 31, 35, 80, 35, 38, 25, + 80, 38, 54, 52, 52, 56, 41, 79, 45, 39, 35, 57, 64, 28, 117, 46, 39, 45, 26, 32, 43, 42, 37, + 45, 80, 71, 44, 55, 52, 63, 76, 43, 82, 38, 31, 56, 60, 55, 44, 65, 59, 69, 40, 32, 80, 44, 74, + 34, 117, 31, 57, 149, 18, 50, 61, 32, 61, 66, 43, 35, 41, 31, 26, 32, 30, 42, 76, 42, 27, 61, + 38, 44, 30, 33, 120, 29, 40, 39, 41, 51, 37, 21, 55, 51, 57, 68, 23, 70, 53, 72, 50, 142, 113, + 32, 63, 82, 65, 61, 40, 38, 76, 35, 17, 44, 33, 33, 97, 55, 41, 24, 18, 62, 68, 35, 79, 40, 38, + 54, 21, 63, 50, 46, 81, 37, 93, 39, 41, 24, 39, 34, 28, 29, 46, 21, 43, 61, 32, 136, 53, 24, + 76, 35, 58, 75, 49, 40, 17, 48, 35, 57, 43, 44, 31, 60, 44, 53, 68, 87, 40, 40, 49, 74, 90, 79, + 37, 110, 24, 53, 41, 33, 70, 90, 47, 32, 33, 20, 64, 53, 57, 32, 43, 38, 45, 34, 49, 94, 29, + 35, 60, 16, 24, 49, 41, 62, 19, 55, 103, 13, 65, 36, 20, 98, 64, 69, 21, 90, 146, 44, 96, 20, + 160, 31, 46, 38, 47, 44, 65, 89, 40, 51, 67, 53, 102, 55, 25, 44, 75, 36, 100, 107, 30, 197, + 22, 61, 34, 23, 47, 62, 59, 32, 57, 38, 33, 42, 69, 33, 111, 58, 43, 67, 48, 30, 33, 110, 130, + 29, 39, 65, 39, 31, 60, 55, 44, 90, 59, 28, 35, 61, 102, 32, 53, 74, 63, 61, 34, 41, 68, 29, + 49, 21, 111, 53, 48, 42, 27, 56, 48, 36, 48, 34, 36, 41, 63, 37, 27, 57, 33, 54, 44, 61, 54, + 44, 63, 53, 76, 52, 48, 31, 87, 53, 58, 35, 35, 55, 61, 29, 70, 114, 42, 91, 38, 87, 29, 82, + 74, 89, 83, 96, 42, 100, 87, 27, 47, 34, 114, 39, 45, 52, 64, 41, 30, 16, 120, 37, 34, 41, 32, + 104, 51, 53, 105, 28, 76, 63, 87, 38, 25, 30, 53, 97, 38, 28, 37, 50, 22, 74, 55, 42, 48, 91, + 37, 35, 87, 178, 86, 57, 170, 35, 67, 68, 91, 24, 67, 63, 48, 91, 90, 81, 52, 89, 62, 36, 26, + 39, 63, 52, 30, 16, 74, 43, 31, 79, 34, 59, 58, 40, 45, 58, 29, 31, 58, 104, 57, 129, 55, 78, + 63, 75, 64, 51, 44, 43, 35, 19, 51, 63, 71, 25, 70, 18, 29, 26, 29, 73, 17, 60, 51, 35, 103, + 49, 31, 51, 89, 34, 53, 64, 81, 45, 34, 43, 76, 73, 49, 88, 48, 33, 56, 28, 47, 91, 47, 62, 53, + 59, 120, 27, 79, 55, 63, 37, 43, 41, 113, 64, 18, 18, 38, 56, 57, 65, 40, 81, 50, 45, 55, 60, + 49, 53, 13, 28, 50, 54, 97, 39, 39, 26, 41, 95, 119, 75, 90, 76, 77, 56, 47, 84, 43, 45, 64, + 37, 43, 23, 45, 37, 57, 55, 73, 29, 52, 34, 17, 25, 79, 48, 75, 52, 110, 40, 36, 27, 38, 56, + 126, 101, 64, 25, 25, 49, 42, 16, 53, 16, 51, 59, 42, 39, 51, 53, 34, 76, 67, 70, 51, 87, 22, + 38, 30, 61, 37, 36, 32, 39, 43, 46, 48, 36, 60, 53, 51, 37, 46, 37, 21, 93, 95, 74, 23, 36, 64, + 22, 78, 71, 52, 32, 43, 105, 25, 49, 37, 46, 59, 125, 51, 34, 105, 36, 22, 147, 200, 67, 43, + 46, 121, 95, 37, 27, 60, 23, 37, 61, 105, 18, 95, 187, 28, 42, 33, 68, 39, 71, 59, 59, 119, 38, + 88, 110, 33, 38, 59, 103, 59, 63, 57, 52, 54, 37, 98, 42, 86, 47, 56, 34, 44, 37, 36, 35, 61, + 53, 47, 28, 58, 27, 67, 32, 55, 72, 71, 25, 65, 93, 34, 63, 51, 78, 134, 26, 49, 80, 53, 64, + 57, 105, 54, 47, 64, 80, 46, 16, 78, 59, 42, 48, 27, 84, 65, 36, 51, 47, 35, 108, 37, 30, 33, + 64, 66, 39, 56, 95, 23, 53, 27, 34, 56, 69, 47, 82, 56, 47, 108, 84, 73, 51, 142, 39, 47, 38, + 58, 50, 41, 39, 30, 45, 38, 46, 97, 37, 94, 44, 57, 162, 66, 67, 81, 88, 61, 55, 30, 39, 125, + 119, 50, 33, 58, 50, 52, 40, 21, 52, 66, 79, 27, 81, 14, 59, 140, 48, 62, 27, 26, 25, 68, 33, + 32, 27, 37, 36, 81, 27, 52, 59, 21, 47, 40, 43, 60, 53, 138, 102, 82, 22, 58, 25, 71, 20, 29, + 39, 28, 96, 26, 50, 45, 66, 35, 44, 108, 15, 49, 78, 20, 35, 45, 27, 33, 42, 49, 35, 54, 99, + 27, 31, 31, 62, 34, 29, 22, 16, 55, 58, 38, 47, 39, 92, 101, 172, 100, 58, 68, 58, 36, 42, 28, + 38, 38, 58, 76, 59, 68, 16, 32, 48, 34, 47, 78, 129, 33, 54, 17, 32, 107, 75, 62, 105, 60, 68, + 71, 78, 61, 37, 105, 103, 69, 74, 45, 34, 68, 34, 21, 47, 36, 27, 47, 34, 106, 132, 45, 34, 45, + 38, 117, 90, 42, 112, 85, 76, 67, 55, 65, 63, 55, 36, 36, 38, 26, 20, 85, 42, 64, 19, 17, 25, + 66, 25, 77, 41, 52, 43, 53, 50, 67, 86, 44, 60, 50, 43, 71, 58, 29, 133, 79, 29, 96, 11, 46, + 57, 30, 20, 34, 55, 49, 45, 27, 14, 135, 46, 25, 22, 37, 47, 53, 43, 25, 75, 41, 55, 41, 115, + 70, 113, 92, 28, 127, 56, 25, 33, 21, 43, 31, 53, 53, 38, 31, 45, 69, 50, 44, 28, 109, 188, 86, + 39, 73, 25, 58, 74, 22, 19, 48, 16, 50, 46, 36, 48, 17, 195, 83, 70, 57, 31, 71, 68, 71, 28, + 38, 60, 37, 69, 51, 41, 63, 17, 41, 61, 21, 90, 54, 93, 30, 71, 70, 28, 141, 46, 27, 46, 118, + 152, 85, 73, 27, 25, 51, 82, 38, 38, 56, 68, 44, 61, 46, 77, 68, 39, 42, 34, 102, 34, 71, 51, + 70, 56, 36, 44, 41, 49, 59, 49, 30, 73, 31, 41, 79, 47, 47, 42, 38, 36, 44, 61, 58, 114, 53, + 69, 18, 54, 28, 42, 49, 39, 39, 42, 33, 37, 42, 60, 65, 60, 51, 65, 64, 73, 46, 120, 41, 26, + 39, 79, 53, 38, 40, 94, 19, 20, 66, 38, 59, 35, 69, 48, 113, 73, 27, 45, 60, 34, 34, 78, 36, + 48, 57, 18, 67, 31, 29, 24, 32, 94, 39, 23, 42, 90, 53, 52, 62, 98, 34, 54, 26, 44, 62, 80, 79, + 64, 60, 66, 58, 36, 42, 45, 68, 34, 131, 53, 57, 26, 73, 84, 76, 31, 30, 38, 55, 85, 21, 56, + 120, 57, 25, 29, 30, 53, 32, 117, 52, 24, 26, 63, 46, 62, 38, 72, 129, 65, 52, 60, 62, 44, 85, + 42, 29, 57, 39, 93, 99, 54, 80, 84, 67, 37, 50, 92, 49, 75, 53, 82, 42, 68, 38, 50, 80, 181, + 35, 102, 59, 125, 55, 73, 31, 87, 60, 20, 44, 61, 69, 41, 62, 65, 133, 48, 58, 36, 26, 36, 53, + 104, 33, 53, 32, 30, 38, 39, 148, 25, 37, 39, 65, 35, 46, 106, 78, 92, 29, 48, 40, 46, 28, 39, + 28, 48, 49, 67, 58, 30, 66, 41, 55, 69, 93, 76, 16, 77, 55, 27, 64, 28, 22, 56, 60, 79, 101, + 33, 45, 45, 89, 68, 30, 56, 71, 44, 74, 59, 29, 70, 75, 48, 71, 36, 91, 29, 32, 48, 63, 23, 54, + 91, 38, 116, 19, 44, 57, 29, 31, 110, 124, 35, 51, 27, 75, 40, 37, 75, 69, 31, 69, 58, 79, 41, + 23, 31, 46, 72, 17, 70, 60, 55, 68, 48, 98, 89, 26, 69, 33, 67, 56, 62, 20, 46, 59, 129, 45, + 46, 118, 20, 67, 63, 48, 57, 45, 102, 44, 128, 33, 34, 42, 31, 34, 58, 26, 49, 133, 78, 93, 61, + 65, 57, 61, 40, 83, 79, 117, 57, 21, 120, 105, 46, 29, 38, 46, 46, 54, 123, 56, 119, 28, 73, + 93, 27, 87, 25, 44, 65, 67, 36, 156, 56, 27, 35, 52, 21, 82, 163, 32, 88, 45, 55, 79, 71, 35, + 149, 74, 82, 47, 33, 49, 28, 56, 57, 41, 30, 27, 114, 64, 88, 79, 24, 30, 102, 35, 123, 165, + 17, 27, 43, 48, 50, 39, 11, 60, 65, 43, 60, 35, 22, 32, 80, 51, 38, 81, 61, 44, 84, 66, 26, 27, + 175, 94, 36, 68, 38, 80, 108, 24, 27, 36, 47, 20, 62, 49, 25, 22, 28, 67, 34, 44, 48, 52, 39, + 43, 44, 58, 34, 65, 65, 57, 41, 160, 66, 45, 32, 30, 20, 47, 42, 28, 52, 27, 28, 39, 99, 27, + 57, 26, 73, 27, 28, 49, 107, 78, 58, 149, 31, 26, 34, 35, 53, 70, 38, 69, 41, 184, 64, 36, 23, + 52, 53, 75, 49, 80, 27, 30, 52, 26, 64, 44, 37, 56, 86, 34, 69, 113, 69, 36, 56, 112, 63, 55, + 65, 30, 49, 38, 52, 114, 64, 38, 66, 70, 39, 65, 17, 53, 36, 36, 46, 46, 26, 72, 56, 27, 43, + 63, 56, 26, 48, 83, 33, 48, 31, 33, 32, 58, 84, 45, 36, 42, 105, 21, 59, 94, 48, 31, 23, 143, + 101, 68, 47, 58, 58, 114, 69, 42, 47, 35, 43, 41, 98, 91, 61, 28, 90, 63, 83, 39, 29, 39, 65, + 34, 67, 35, 47, 28, 28, 71, 39, 46, 57, 33, 17, 46, 55, 58, 48, 64, 93, 59, 41, 39, 43, 74, 96, + 64, 41, 100, 50, 57, 41, 41, 59, 96, 29, 32, 44, 58, 27, 48, 34, 54, 167, 64, 26, 57, 60, 51, + 21, 18, 53, 32, 44, 30, 88, 31, 62, 100, 54, 69, 49, 62, 38, 102, 51, 54, 42, 34, 46, 114, 46, + 122, 21, 23, 49, 64, 31, 31, 47, 90, 49, 27, 49, 53, 41, 69, 90, 30, 34, 96, 36, 53, 46, 106, + 36, 55, 43, 37, 82, 38, 109, 29, 51, 22, 35, 90, 58, 110, 64, 49, 45, 69, 36, 20, 37, 69, 52, + 100, 39, 65, 42, 72, 115, 44, 33, 45, 61, 61, 37, 32, 97, 46, 52, 41, 61, 48, 23, 50, 36, 51, + 58, 77, 28, 76, 62, 121, 74, 50, 70, 87, 37, 27, 33, 57, 73, 71, 37, 40, 31, 83, 27, 56, 104, + 31, 56, 111, 84, 35, 29, 151, 39, 81, 140, 37, 34, 26, 121, 42, 33, 63, 34, 116, 33, 37, 39, + 27, 50, 59, 69, 31, 31, 40, 21, 42, 76, 87, 38, 124, 71, 45, 42, 33, 61, 41, 68, 54, 136, 93, + 56, 45, 50, 61, 39, 66, 43, 41, 56, 63, 46, 63, 39, 66, 65, 66, 36, 59, 35, 25, 54, 51, 73, 48, + 36, 32, 87, 29, 49, 30, 56, 31, 49, 58, 45, 72, 86, 62, 84, 79, 39, 108, 20, 79, 50, 109, 35, + 29, 50, 55, 60, 57, 35, 46, 21, 67, 19, 92, 106, 66, 62, 69, 27, 42, 100, 131, 38, 46, 67, 22, + 75, 66, 30, 35, 57, 31, 57, 76, 51, 24, 47, 58, 38, 32, 33, 39, 59, 73, 75, 74, 52, 86, 129, + 36, 63, 61, 24, 50, 103, 37, 53, 28, 53, 54, 46, 26, 34, 29, 24, 14, 45, 108, 47, 103, 75, 85, + 33, 40, 45, 36, 36, 23, 82, 50, 55, 23, 67, 101, 108, 46, 82, 76, 20, 43, 121, 20, 147, 30, 30, + 76, 38, 61, 45, 24, 51, 66, 110, 34, 85, 127, 29, 33, 73, 35, 65, 99, 17, 98, 67, 33, 37, 58, + 138, 119, 22, 99, 22, 34, 39, 49, 45, 40, 46, 30, 80, 42, 73, 13, 86, 49, 53, 57, 33, 43, 89, + 140, 105, 93, 102, 30, 70, 47, 22, 141, 31, 76, 48, 44, 76, 27, 42, 37, 25, 41, 49, 49, 71, 34, + 38, 34, 79, 53, 47, 24, 62, 22, 111, 37, 75, 42, 58, 42, 79, 79, 51, 44, 22, 22, 24, 28, 47, + 71, 32, 28, 30, 16, 26, 16, 83, 107, 46, 60, 45, 41, 88, 74, 113, 16, 40, 71, 42, 137, 170, 81, + 34, 60, 80, 49, 63, 43, 40, 25, 41, 58, 38, 57, 28, 35, 34, 82, 73, 19, 43, 52, 83, 44, 35, 23, + 123, 49, 73, 48, 74, 64, 22, 64, 74, 81, 50, 36, 30, 28, 36, 22, 51, 113, 53, 72, 39, 42, 34, + 80, 24, 44, 46, 39, 43, 15, 23, 38, 46, 56, 100, 71, 56, 30, 77, 65, 33, 49, 61, 64, 77, 30, + 32, 54, 105, 56, 64, 75, 64, 20, 74, 37, 79, 72, 51, 39, 32, 28, 33, 41, 25, 64, 50, 37, 36, + 150, 24, 34, 77, 42, 19, 87, 99, 57, 15, 18, 133, 104, 37, 66, 57, 60, 54, 23, 36, 53, 67, 84, + 82, 74, 53, 63, 25, 31, 74, 51, 58, 67, 68, 92, 77, 80, 26, 31, 114, 55, 110, 39, 95, 38, 47, + 60, 78, 80, 113, 26, 121, 35, 43, 22, 73, 38, 55, 40, 70, 55, 46, 21, 67, 17, 58, 189, 64, 40, + 34, 84, 44, 59, 37, 76, 41, 40, 38, 81, 36, 52, 51, 16, 35, 135, 20, 30, 79, 51, 56, 51, 22, + 91, 52, 20, 50, 29, 198, 50, 69, 99, 70, 63, 33, 35, 68, 32, 139, 25, 24, 41, 58, 33, 48, 38, + 36, 43, 52, 63, 66, 62, 64, 23, 22, 107, 52, 17, 72, 44, 35, 36, 39, 25, 79, 35, 75, 77, 22, + 52, 72, 35, 71, 24, 24, 25, 34, 24, 65, 63, 39, 27, 55, 84, 31, 48, 75, 38, 116, 20, 13, 28, + 51, 37, 41, 85, 105, 41, 40, 25, 85, 32, 76, 62, 48, 24, 34, 49, 93, 92, 30, 65, 50, 35, 82, + 33, 87, 87, 32, 32, 52, 97, 46, 11, 29, 65, 78, 44, 37, 87, 122, 137, 29, 184, 28, 21, 41, 64, + 52, 29, 20, 25, 36, 61, 71, 57, 121, 103, 49, 61, 54, 78, 48, 29, 49, 50, 79, 79, 38, 84, 29, + 53, 68, 53, 26, 47, 37, 40, 78, 88, 55, 82, 59, 58, 27, 33, 45, 101, 53, 40, 64, 17, 51, 57, + 29, 55, 42, 37, 93, 66, 29, 29, 24, 40, 38, 39, 28, 66, 72, 27, 52, 72, 113, 67, 65, 44, 25, + 50, 70, 100, 79, 27, 45, 35, 19, 29, 23, 53, 25, 104, 33, 31, 37, 40, 52, 65, 106, 69, 68, 24, + 31, 107, 52, 41, 22, 47, 57, 44, 63, 85, 32, 33, 47, 48, 20, 44, 119, 69, 39, 33, 56, 52, 149, + 54, 116, 21, 54, 89, 39, 47, 51, 16, 140, 113, 67, 55, 65, 28, 49, 33, 45, 24, 46, 66, 10, 32, + 103, 36, 46, 37, 66, 50, 84, 63, 51, 61, 44, 18, 103, 13, 49, 43, 50, 47, 61, 105, 82, 92, 37, + 18, 40, 149, 44, 44, 67, 62, 48, 30, 100, 57, 53, 112, 39, 56, 33, 31, 75, 61, 35, 66, 25, 31, + 28, 49, 68, 100, 119, 38, 75, 39, 34, 58, 49, 55, 43, 82, 60, 71, 94, 53, 80, 110, 117, 87, + 103, 70, 99, 93, 55, 95, 50, 110, 50, 56, 162, 92, 47, 20, 71, 27, 17, 48, 25, 25, 64, 56, 37, + 28, 60, 41, 22, 52, 33, 107, 29, 63, 72, 50, 23, 52, 54, 126, 79, 45, 148, 29, 31, 44, 20, 60, + 36, 82, 14, 121, 56, 95, 35, 67, 61, 41, 37, 104, 17, 36, 28, 39, 97, 48, 107, 43, 54, 45, 70, + 74, 15, 33, 33, 33, 83, 30, 23, 131, 57, 41, 26, 43, 74, 35, 44, 28, 22, 92, 58, 51, 67, 84, + 113, 45, 99, 40, 37, 53, 37, 54, 76, 33, 84, 111, 22, 82, 97, 63, 33, 27, 33, 40, 92, 28, 54, + 20, 65, 61, 39, 71, 77, 31, 29, 34, 47, 86, 27, 40, 87, 52, 53, 39, 41, 109, 57, 35, 19, 47, + 136, 95, 78, 40, 28, 34, 33, 66, 67, 49, 27, 78, 32, 57, 67, 73, 50, 36, 100, 52, 64, 31, 22, + 50, 131, 48, 55, 48, 45, 19, 80, 35, 63, 60, 48, 59, 37, 58, 70, 33, 66, 38, 76, 56, 37, 58, + 77, 91, 28, 65, 34, 39, 34, 49, 54, 69, 34, 77, 111, 22, 28, 51, 41, 44, 76, 60, 74, 79, 44, + 38, 28, 86, 44, 40, 45, 65, 39, 56, 39, 48, 17, 46, 29, 82, 52, 65, 91, 95, 34, 35, 122, 11, + 49, 67, 56, 42, 23, 48, 45, 39, 53, 71, 52, 35, 52, 29, 33, 40, 67, 43, 78, 53, 84, 67, 70, 19, + 60, 36, 63, 90, 40, 45, 25, 83, 74, 60, 36, 45, 70, 65, 67, 116, 192, 81, 65, 26, 14, 108, 55, + 48, 60, 36, 24, 44, 62, 69, 67, 69, 42, 67, 33, 94, 43, 52, 44, 28, 89, 68, 49, 61, 46, 48, + 122, 29, 19, 72, 35, 65, 65, 50, 34, 55, 20, 44, 39, 72, 50, 67, 14, 29, 33, 101, 23, 38, 39, + 72, 33, 67, 164, 64, 86, 51, 25, 89, 62, 106, 101, 48, 124, 51, 70, 55, 58, 49, 46, 39, 31, 49, + 79, 33, 47, 45, 31, 92, 44, 49, 19, 63, 31, 34, 33, 59, 60, 24, 39, 88, 46, 35, 37, 36, 88, 60, + 57, 57, 70, 13, 54, 31, 83, 44, 95, 53, 49, 105, 40, 49, 87, 33, 50, 89, 17, 94, 58, 76, 32, + 52, 39, 38, 85, 119, 25, 91, 54, 42, 63, 96, 89, 39, 37, 24, 97, 52, 86, 35, 30, 86, 37, 45, + 47, 125, 41, 72, 31, 70, 87, 54, 54, 86, 33, 74, 41, 110, 64, 42, 109, 54, 104, 46, 24, 101, + 67, 61, 62, 82, 72, 117, 32, 59, 46, 60, 20, 46, 22, 27, 39, 61, 57, 65, 33, 94, 76, 109, 58, + 123, 33, 94, 74, 29, 41, 29, 28, 60, 30, 98, 45, 45, 32, 62, 43, 43, 42, 77, 31, 55, 53, 88, + 21, 68, 24, 75, 87, 66, 33, 77, 51, 19, 23, 28, 49, 54, 41, 83, 72, 29, 17, 57, 64, 72, 21, 36, + 43, 49, 64, 39, 37, 105, 74, 99, 25, 83, 27, 47, 29, 127, 41, 57, 78, 37, 58, 41, 75, 53, 29, + 58, 62, 76, 44, 49, 42, 20, 51, 102, 80, 41, 76, 44, 116, 95, 51, 51, 46, 115, 43, 75, 33, 49, + 62, 54, 50, 49, 55, 61, 27, 80, 37, 99, 68, 27, 64, 54, 84, 72, 69, 29, 50, 68, 67, 36, 43, 44, + 56, 41, 36, 39, 38, 130, 59, 39, 55, 51, 122, 63, 27, 73, 84, 24, 69, 72, 82, 56, 25, 68, 47, + 88, 80, 33, 51, 81, 50, 44, 49, 29, 26, 31, 39, 84, 30, 33, 76, 41, 35, 64, 72, 118, 38, 50, + 21, 52, 69, 94, 75, 61, 32, 50, 86, 21, 41, 52, 43, 25, 41, 64, 57, 46, 19, 65, 28, 45, 64, 46, + 35, 38, 36, 55, 43, 44, 14, 34, 55, 72, 43, 45, 27, 46, 27, 42, 90, 48, 41, 95, 71, 137, 28, + 30, 88, 127, 112, 89, 33, 61, 34, 63, 20, 52, 48, 45, 42, 95, 66, 36, 51, 37, 81, 24, 34, 99, + 38, 49, 43, 49, 65, 105, 36, 19, 35, 36, 61, 46, 91, 19, 38, 30, 138, 63, 68, 33, 46, 70, 89, + 65, 86, 32, 56, 39, 59, 32, 115, 70, 45, 59, 49, 49, 37, 33, 31, 80, 25, 62, 95, 87, 33, 39, + 41, 43, 49, 53, 66, 43, 135, 60, 34, 50, 40, 57, 74, 53, 76, 28, 32, 42, 88, 42, 44, 105, 75, + 44, 62, 101, 76, 48, 61, 45, 66, 48, 43, 40, 45, 54, 54, 55, 62, 54, 71, 170, 70, 56, 54, 57, + 28, 49, 49, 124, 25, 16, 42, 37, 54, 42, 51, 46, 141, 128, 70, 87, 56, 73, 43, 49, 45, 60, 59, + 18, 42, 40, 60, 76, 36, 44, 45, 42, 40, 101, 95, 45, 44, 47, 152, 60, 74, 60, 125, 69, 52, 53, + 68, 47, 51, 28, 62, 20, 46, 47, 42, 114, 58, 49, 76, 34, 72, 42, 57, 27, 61, 74, 21, 76, 49, + 43, 35, 69, 65, 25, 33, 177, 59, 33, 55, 42, 13, 51, 50, 19, 81, 64, 42, 57, 23, 74, 43, 74, + 48, 97, 43, 34, 95, 66, 63, 54, 39, 52, 95, 80, 62, 36, 93, 55, 47, 117, 64, 17, 16, 94, 57, + 47, 35, 73, 59, 51, 90, 53, 52, 25, 28, 34, 27, 54, 50, 23, 67, 66, 84, 52, 85, 25, 57, 44, 74, + 40, 52, 95, 107, 90, 42, 34, 17, 31, 103, 31, 30, 50, 60, 50, 19, 97, 24, 79, 32, 49, 38, 75, + 59, 86, 52, 40, 50, 49, 82, 55, 70, 39, 99, 79, 42, 52, 124, 81, 21, 21, 33, 27, 21, 98, 71, + 51, 120, ]; diff --git a/lightning-background-processor/src/lib.rs b/lightning-background-processor/src/lib.rs index ad1592b7722..8e629de74c8 100644 --- a/lightning-background-processor/src/lib.rs +++ b/lightning-background-processor/src/lib.rs @@ -387,20 +387,13 @@ macro_rules! define_run_body { // persistence. $peer_manager.as_ref().process_events(); - // Exit the loop if the background processor was requested to stop. - if $loop_exit_check { - log_trace!($logger, "Terminating background processor."); - break; - } - if $timer_elapsed(&mut last_forwards_processing_call, cur_batch_delay) { $channel_manager.get_cm().process_pending_htlc_forwards(); cur_batch_delay = $batch_delay.next(); last_forwards_processing_call = $get_timer(cur_batch_delay); } - // Checke whether to exit the loop again, as some time might have passed since we - // checked above. + // Exit the loop if the background processor was requested to stop. if $loop_exit_check { log_trace!($logger, "Terminating background processor."); break; @@ -590,14 +583,12 @@ pub(crate) mod futures_util { C: Future + Unpin, D: Future + Unpin, E: Future + Unpin, - F: Future + Unpin, > { pub a: A, pub b: B, pub c: C, pub d: D, pub e: E, - pub f: F, } pub(crate) enum SelectorOutput { @@ -606,7 +597,6 @@ pub(crate) mod futures_util { C, D, E(bool), - F(bool), } impl< @@ -615,8 +605,7 @@ pub(crate) mod futures_util { C: Future + Unpin, D: Future + Unpin, E: Future + Unpin, - F: Future + Unpin, - > Future for Selector + > Future for Selector { type Output = SelectorOutput; fn poll( @@ -652,12 +641,6 @@ pub(crate) mod futures_util { }, Poll::Pending => {}, } - match Pin::new(&mut self.f).poll(ctx) { - Poll::Ready(res) => { - return Poll::Ready(SelectorOutput::F(res)); - }, - Poll::Pending => {}, - } Poll::Pending } } @@ -997,30 +980,27 @@ where } else { OptionalSelector { optional_future: None } }; + + let needs_processing = channel_manager.get_cm().needs_pending_htlc_processing(); + let sleep_delay = match (needs_processing, mobile_interruptable_platform) { + (true, true) => batch_delay.get().min(Duration::from_millis(100)), + (true, false) => batch_delay.get().min(FASTEST_TIMER), + (false, true) => Duration::from_millis(100), + (false, false) => FASTEST_TIMER, + }; + let fut = Selector { a: channel_manager.get_cm().get_event_or_persistence_needed_future(), b: chain_monitor.get_update_future(), c: om_fut, d: lm_fut, - e: sleeper(if channel_manager.get_cm().needs_pending_htlc_processing() { - batch_delay.get() - } else { - Duration::MAX - }), - f: sleeper(if mobile_interruptable_platform { - Duration::from_millis(100) - } else { - FASTEST_TIMER - }), + e: sleeper(sleep_delay), }; match fut.await { SelectorOutput::A | SelectorOutput::B | SelectorOutput::C | SelectorOutput::D => {}, SelectorOutput::E(exit) => { should_break = exit; }, - SelectorOutput::F(exit) => { - should_break = exit; - }, } }, |t| sleeper(t), diff --git a/lightning/src/ln/channelmanager.rs b/lightning/src/ln/channelmanager.rs index 38f8728113f..09b0a8558b7 100644 --- a/lightning/src/ln/channelmanager.rs +++ b/lightning/src/ln/channelmanager.rs @@ -17261,7 +17261,6 @@ mod tests { let events = nodes[1].node.get_and_clear_pending_events(); let fail = HTLCHandlingFailureType::Receive { payment_hash }; expect_htlc_failure_conditions(events, &[fail]); - nodes[1].node.get_and_clear_pending_events(); check_added_monitors!(nodes[1], 1); let updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id()); assert!(updates.update_add_htlcs.is_empty());