summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--2016/.gitignore1
-rw-r--r--2016/aoc1/Cargo.lock4
-rw-r--r--2016/aoc1/Cargo.toml6
-rw-r--r--2016/aoc1/input.txt1
-rw-r--r--2016/aoc1/src/main.rs98
-rw-r--r--2016/aoc10/Cargo.lock98
-rw-r--r--2016/aoc10/Cargo.toml7
-rw-r--r--2016/aoc10/input.txt231
-rw-r--r--2016/aoc10/src/main.rs155
-rw-r--r--2016/aoc11/Cargo.lock4
-rw-r--r--2016/aoc11/Cargo.toml7
-rw-r--r--2016/aoc11/input.txt4
-rw-r--r--2016/aoc11/src/main.rs166
-rw-r--r--2016/aoc12/Cargo.lock98
-rw-r--r--2016/aoc12/Cargo.toml7
-rw-r--r--2016/aoc12/input.txt23
-rw-r--r--2016/aoc12/src/main.rs136
-rw-r--r--2016/aoc13/Cargo.lock98
-rw-r--r--2016/aoc13/Cargo.toml7
-rw-r--r--2016/aoc13/src/main.rs64
-rw-r--r--2016/aoc14/Cargo.lock14
-rw-r--r--2016/aoc14/Cargo.toml7
-rw-r--r--2016/aoc14/src/main.rs84
-rw-r--r--2016/aoc15/Cargo.lock98
-rw-r--r--2016/aoc15/Cargo.toml7
-rw-r--r--2016/aoc15/input.txt7
-rw-r--r--2016/aoc15/src/main.rs35
-rw-r--r--2016/aoc16/Cargo.lock4
-rw-r--r--2016/aoc16/Cargo.toml6
-rw-r--r--2016/aoc16/src/main.rs68
-rw-r--r--2016/aoc17/Cargo.lock14
-rw-r--r--2016/aoc17/Cargo.toml7
-rw-r--r--2016/aoc17/src/main.rs98
-rw-r--r--2016/aoc18/Cargo.lock4
-rw-r--r--2016/aoc18/Cargo.toml6
-rw-r--r--2016/aoc18/src/main.rs20
-rw-r--r--2016/aoc19/Cargo.lock4
-rw-r--r--2016/aoc19/Cargo.toml6
-rw-r--r--2016/aoc19/src/main.rs42
-rw-r--r--2016/aoc2/Cargo.lock4
-rw-r--r--2016/aoc2/Cargo.toml6
-rw-r--r--2016/aoc2/input.txt5
-rw-r--r--2016/aoc2/src/main.rs61
-rw-r--r--2016/aoc20/Cargo.lock4
-rw-r--r--2016/aoc20/Cargo.toml6
-rw-r--r--2016/aoc20/input.txt1104
-rw-r--r--2016/aoc20/src/main.rs114
-rw-r--r--2016/aoc21/Cargo.lock98
-rw-r--r--2016/aoc21/Cargo.toml7
-rw-r--r--2016/aoc21/input.txt100
-rw-r--r--2016/aoc21/src/main.rs233
-rw-r--r--2016/aoc22/Cargo.lock98
-rw-r--r--2016/aoc22/Cargo.toml7
-rw-r--r--2016/aoc22/input.txt1017
-rw-r--r--2016/aoc22/src/main.rs198
-rw-r--r--2016/aoc23/Cargo.lock98
-rw-r--r--2016/aoc23/Cargo.toml7
-rw-r--r--2016/aoc23/input.txt26
-rw-r--r--2016/aoc23/src/main.rs247
-rw-r--r--2016/aoc24/Cargo.lock4
-rw-r--r--2016/aoc24/Cargo.toml6
-rw-r--r--2016/aoc24/input.txt39
-rw-r--r--2016/aoc24/src/main.rs135
-rw-r--r--2016/aoc25/Cargo.lock98
-rw-r--r--2016/aoc25/Cargo.toml7
-rw-r--r--2016/aoc25/input.txt30
-rw-r--r--2016/aoc25/src/main.rs284
-rw-r--r--2016/aoc3/Cargo.lock4
-rw-r--r--2016/aoc3/Cargo.toml6
-rw-r--r--2016/aoc3/input.txt1734
-rw-r--r--2016/aoc3/src/main.rs64
-rw-r--r--2016/aoc4/Cargo.lock4
-rw-r--r--2016/aoc4/Cargo.toml6
-rw-r--r--2016/aoc4/input.txt1091
-rw-r--r--2016/aoc4/src/main.rs83
-rw-r--r--2016/aoc5/Cargo.lock12
-rw-r--r--2016/aoc5/Cargo.toml7
-rw-r--r--2016/aoc5/src/main.rs49
-rw-r--r--2016/aoc6/Cargo.lock4
-rw-r--r--2016/aoc6/Cargo.toml6
-rw-r--r--2016/aoc6/input.txt624
-rw-r--r--2016/aoc6/src/main.rs27
-rw-r--r--2016/aoc6/test_input.txt16
-rw-r--r--2016/aoc7/Cargo.lock4
-rw-r--r--2016/aoc7/Cargo.toml6
-rw-r--r--2016/aoc7/input.txt2000
-rw-r--r--2016/aoc7/src/main.rs95
-rw-r--r--2016/aoc7/test_input.txt4
-rw-r--r--2016/aoc8/Cargo.lock98
-rw-r--r--2016/aoc8/Cargo.toml7
-rw-r--r--2016/aoc8/input.txt194
-rw-r--r--2016/aoc8/src/main.rs117
-rw-r--r--2016/aoc9/Cargo.lock98
-rw-r--r--2016/aoc9/Cargo.toml7
-rw-r--r--2016/aoc9/input.txt1
-rw-r--r--2016/aoc9/src/main.rs143
-rw-r--r--2017/Cargo.toml10
-rw-r--r--2017/LICENSE21
-rw-r--r--2017/inputs/day_1.txt1
-rw-r--r--2017/inputs/day_10.txt1
-rw-r--r--2017/inputs/day_11.txt1
-rw-r--r--2017/inputs/day_12.txt2000
-rw-r--r--2017/inputs/day_13.txt43
-rw-r--r--2017/inputs/day_13_example.txt5
-rw-r--r--2017/inputs/day_14.txt2
-rw-r--r--2017/inputs/day_14_example.txt1
-rw-r--r--2017/inputs/day_15.txt2
-rw-r--r--2017/inputs/day_16.txt1
-rw-r--r--2017/inputs/day_17.txt1
-rw-r--r--2017/inputs/day_18.txt41
-rw-r--r--2017/inputs/day_19.txt201
-rw-r--r--2017/inputs/day_2.txt16
-rw-r--r--2017/inputs/day_20.txt1000
-rw-r--r--2017/inputs/day_21.txt108
-rw-r--r--2017/inputs/day_21_example.txt2
-rw-r--r--2017/inputs/day_22.txt25
-rw-r--r--2017/inputs/day_22_example.txt3
-rw-r--r--2017/inputs/day_23.txt32
-rw-r--r--2017/inputs/day_24.txt57
-rw-r--r--2017/inputs/day_25.txt62
-rw-r--r--2017/inputs/day_3.txt1
-rw-r--r--2017/inputs/day_4.txt512
-rw-r--r--2017/inputs/day_5.txt1070
-rw-r--r--2017/inputs/day_6.txt1
-rw-r--r--2017/inputs/day_7.txt1091
-rw-r--r--2017/inputs/day_8.txt1000
-rw-r--r--2017/inputs/day_9.txt1
-rw-r--r--2017/src/bin/day_1.rs24
-rw-r--r--2017/src/bin/day_10.rs63
-rw-r--r--2017/src/bin/day_11.rs57
-rw-r--r--2017/src/bin/day_12.rs52
-rw-r--r--2017/src/bin/day_13.rs46
-rw-r--r--2017/src/bin/day_14.rs52
-rw-r--r--2017/src/bin/day_15.rs40
-rw-r--r--2017/src/bin/day_16.rs87
-rw-r--r--2017/src/bin/day_17.rs47
-rw-r--r--2017/src/bin/day_18.rs207
-rw-r--r--2017/src/bin/day_19.rs78
-rw-r--r--2017/src/bin/day_2.rs26
-rw-r--r--2017/src/bin/day_20.rs89
-rw-r--r--2017/src/bin/day_21.rs200
-rw-r--r--2017/src/bin/day_22.rs73
-rw-r--r--2017/src/bin/day_23.rs168
-rw-r--r--2017/src/bin/day_24.rs60
-rw-r--r--2017/src/bin/day_25.rs125
-rw-r--r--2017/src/bin/day_3.rs62
-rw-r--r--2017/src/bin/day_4.rs37
-rw-r--r--2017/src/bin/day_5.rs25
-rw-r--r--2017/src/bin/day_6.rs61
-rw-r--r--2017/src/bin/day_7.rs62
-rw-r--r--2017/src/bin/day_8.rs99
-rw-r--r--2017/src/bin/day_9.rs42
-rw-r--r--2017/src/lib.rs225
-rw-r--r--2018/Cargo.toml11
-rw-r--r--2018/inputs/1.txt968
-rw-r--r--2018/inputs/10.txt369
-rw-r--r--2018/inputs/12.txt34
-rw-r--r--2018/inputs/13.txt150
-rw-r--r--2018/inputs/15.txt32
-rw-r--r--2018/inputs/16_1.txt3143
-rw-r--r--2018/inputs/16_2.txt1014
-rw-r--r--2018/inputs/17.txt1713
-rw-r--r--2018/inputs/18.txt50
-rw-r--r--2018/inputs/19.txt37
-rw-r--r--2018/inputs/2.txt250
-rw-r--r--2018/inputs/20.txt1
-rw-r--r--2018/inputs/21.txt32
-rw-r--r--2018/inputs/22.txt2
-rw-r--r--2018/inputs/23.txt1000
-rw-r--r--2018/inputs/24.txt23
-rw-r--r--2018/inputs/25.txt1248
-rw-r--r--2018/inputs/3.txt1385
-rw-r--r--2018/inputs/4.txt1088
-rw-r--r--2018/inputs/5.txt1
-rw-r--r--2018/inputs/6.txt50
-rw-r--r--2018/inputs/7.txt101
-rw-r--r--2018/inputs/8.txt1
-rw-r--r--2018/inputs/9.txt1
-rw-r--r--2018/license.org21
-rw-r--r--2018/readme.org38
-rw-r--r--2018/src/bin/day_1.rs32
-rw-r--r--2018/src/bin/day_10.rs82
-rw-r--r--2018/src/bin/day_11.rs66
-rw-r--r--2018/src/bin/day_12.rs102
-rw-r--r--2018/src/bin/day_13.rs249
-rw-r--r--2018/src/bin/day_14.rs111
-rw-r--r--2018/src/bin/day_15.rs272
-rw-r--r--2018/src/bin/day_16.rs205
-rw-r--r--2018/src/bin/day_17.rs175
-rw-r--r--2018/src/bin/day_18.rs123
-rw-r--r--2018/src/bin/day_19.rs139
-rw-r--r--2018/src/bin/day_2.rs53
-rw-r--r--2018/src/bin/day_20.rs137
-rw-r--r--2018/src/bin/day_21.rs137
-rw-r--r--2018/src/bin/day_22.rs165
-rw-r--r--2018/src/bin/day_23.rs114
-rw-r--r--2018/src/bin/day_24.rs217
-rw-r--r--2018/src/bin/day_25.rs47
-rw-r--r--2018/src/bin/day_3.rs76
-rw-r--r--2018/src/bin/day_4.rs116
-rw-r--r--2018/src/bin/day_5.rs53
-rw-r--r--2018/src/bin/day_6.rs103
-rw-r--r--2018/src/bin/day_7.rs135
-rw-r--r--2018/src/bin/day_8.rs66
-rw-r--r--2018/src/bin/day_9.rs91
-rw-r--r--2018/src/lib.rs31
206 files changed, 37579 insertions, 0 deletions
diff --git a/2016/.gitignore b/2016/.gitignore
new file mode 100644
index 0000000..9f97022
--- /dev/null
+++ b/2016/.gitignore
@@ -0,0 +1 @@
+target/ \ No newline at end of file
diff --git a/2016/aoc1/Cargo.lock b/2016/aoc1/Cargo.lock
new file mode 100644
index 0000000..b771521
--- /dev/null
+++ b/2016/aoc1/Cargo.lock
@@ -0,0 +1,4 @@
+[root]
+name = "aoc1"
+version = "0.1.0"
+
diff --git a/2016/aoc1/Cargo.toml b/2016/aoc1/Cargo.toml
new file mode 100644
index 0000000..096aad6
--- /dev/null
+++ b/2016/aoc1/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aoc1"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@entelect.co.za>"]
+
+[dependencies]
diff --git a/2016/aoc1/input.txt b/2016/aoc1/input.txt
new file mode 100644
index 0000000..456904d
--- /dev/null
+++ b/2016/aoc1/input.txt
@@ -0,0 +1 @@
+R4, R5, L5, L5, L3, R2, R1, R1, L5, R5, R2, L1, L3, L4, R3, L1, L1, R2, R3, R3, R1, L3, L5, R3, R1, L1, R1, R2, L1, L4, L5, R4, R2, L192, R5, L2, R53, R1, L5, R73, R5, L5, R186, L3, L2, R1, R3, L3, L3, R1, L4, L2, R3, L5, R4, R3, R1, L1, R5, R2, R1, R1, R1, R3, R2, L1, R5, R1, L5, R2, L2, L4, R3, L1, R4, L5, R4, R3, L5, L3, R4, R2, L5, L5, R2, R3, R5, R4, R2, R1, L1, L5, L2, L3, L4, L5, L4, L5, L1, R3, R4, R5, R3, L5, L4, L3, L1, L4, R2, R5, R5, R4, L2, L4, R3, R1, L2, R5, L5, R1, R1, L1, L5, L5, L2, L1, R5, R2, L4, L1, R4, R3, L3, R1, R5, L1, L4, R2, L3, R5, R3, R1, L3
diff --git a/2016/aoc1/src/main.rs b/2016/aoc1/src/main.rs
new file mode 100644
index 0000000..e9b4138
--- /dev/null
+++ b/2016/aoc1/src/main.rs
@@ -0,0 +1,98 @@
+use std::io::Read;
+use std::fs::File;
+
+#[derive(Clone, Copy, Debug)]
+enum Direction {
+ Up,
+ Left,
+ Down,
+ Right
+}
+
+impl Direction {
+ fn turn_right(self) -> Direction {
+ match self {
+ Direction::Up => Direction::Right,
+ Direction::Right => Direction::Down,
+ Direction::Down => Direction::Left,
+ Direction::Left => Direction::Up
+ }
+ }
+ fn turn_left(self) -> Direction {
+ //not an ambiturner
+ self.turn_right().turn_right().turn_right()
+ }
+
+ fn as_vector(self, dist: i32) -> (i32,i32) {
+ match self {
+ Direction::Up => (0, -dist),
+ Direction::Right => (dist, 0),
+ Direction::Down => (0, dist),
+ Direction::Left => (-dist, 0)
+ }
+ }
+}
+
+fn main() {
+ let content = read_file().expect("Failed to read file");
+ let (_, dist_x, dist_y) = first_repeated_dest(content);
+ println!("Total: ({}, {})", dist_x, dist_y);
+ println!("Net: {}", dist_x+dist_y);
+}
+
+fn net_distance(content: String) -> (Direction, i32, i32) {
+ content.trim().split(", ")
+ .map(|action|
+ (
+ action.chars().nth(0).unwrap(),
+ action.chars().skip(1).collect::<String>().parse::<i32>().unwrap()
+ ))
+ .fold((Direction::Up, 0,0), |(facing, acc_x, acc_y), (dir, dist)| {
+ let new_facing = match dir {
+ 'R' => facing.turn_right(),
+ 'L' => facing.turn_left(),
+ _ => panic!("bad input")
+ };
+
+ let (new_x, new_y) = new_facing.as_vector(dist);
+ (new_facing, acc_x+new_x, acc_y+new_y)
+ })
+}
+
+fn first_repeated_dest(content: String) -> (Direction, i32, i32) {
+ let mut stops: Vec<(i32, i32)> = Vec::new();
+ let actions = content.trim().split(", ")
+ .map(|action|
+ (
+ action.chars().nth(0).unwrap(),
+ action.chars().skip(1).collect::<String>().parse::<i32>().unwrap()
+ ));
+ let mut current_facing = Direction::Up;
+ let (mut acc_x, mut acc_y) = (0, 0);
+ for (dir, dist) in actions {
+ current_facing = match dir {
+ 'R' => current_facing.turn_right(),
+ 'L' => current_facing.turn_left(),
+ _ => panic!("bad input")
+ };
+
+ for _ in 0..dist {
+ let (new_x, new_y) = current_facing.as_vector(1);
+ acc_x += new_x;
+ acc_y += new_y;
+
+ if stops.iter().any(|&(x, y)| x==acc_x && y==acc_y) {
+ return (current_facing, acc_x, acc_y);
+ }
+ stops.push((acc_x, acc_y));
+ }
+ }
+ (current_facing, acc_x, acc_y)
+}
+
+fn read_file() -> Result<String, String> {
+ let mut file = try!(File::open("input.txt").map_err(|e| e.to_string()));
+ let mut content = String::new();
+ try!(file.read_to_string(&mut content).map_err(|e| e.to_string()));
+ Ok(content)
+}
diff --git a/2016/aoc10/Cargo.lock b/2016/aoc10/Cargo.lock
new file mode 100644
index 0000000..f8f7189
--- /dev/null
+++ b/2016/aoc10/Cargo.lock
@@ -0,0 +1,98 @@
+[root]
+name = "aoc10"
+version = "0.1.0"
+dependencies = [
+ "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "memchr"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex"
+version = "0.1.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "thread-id"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "thread_local"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "utf8-ranges"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66"
+"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70"
+"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"
+"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"
+"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"
+"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
+"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5"
+"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"
+"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
diff --git a/2016/aoc10/Cargo.toml b/2016/aoc10/Cargo.toml
new file mode 100644
index 0000000..d6abdaf
--- /dev/null
+++ b/2016/aoc10/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc10"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@gmail.com>"]
+
+[dependencies]
+regex = "0.1" \ No newline at end of file
diff --git a/2016/aoc10/input.txt b/2016/aoc10/input.txt
new file mode 100644
index 0000000..aeda3b5
--- /dev/null
+++ b/2016/aoc10/input.txt
@@ -0,0 +1,231 @@
+bot 59 gives low to bot 176 and high to bot 120
+bot 92 gives low to bot 42 and high to bot 187
+value 31 goes to bot 114
+bot 182 gives low to bot 49 and high to bot 176
+bot 17 gives low to bot 181 and high to bot 162
+bot 36 gives low to bot 118 and high to bot 121
+bot 118 gives low to bot 164 and high to bot 55
+bot 172 gives low to bot 79 and high to bot 123
+bot 51 gives low to bot 60 and high to bot 31
+bot 48 gives low to bot 107 and high to bot 58
+bot 142 gives low to output 6 and high to bot 35
+bot 133 gives low to output 4 and high to bot 47
+bot 134 gives low to bot 122 and high to bot 66
+bot 106 gives low to bot 155 and high to bot 99
+bot 77 gives low to bot 93 and high to bot 84
+bot 9 gives low to bot 173 and high to bot 197
+bot 64 gives low to bot 123 and high to bot 48
+bot 177 gives low to bot 21 and high to bot 132
+bot 94 gives low to bot 6 and high to bot 25
+bot 126 gives low to bot 193 and high to bot 56
+bot 74 gives low to bot 187 and high to bot 125
+bot 80 gives low to bot 41 and high to bot 191
+bot 62 gives low to bot 157 and high to bot 138
+bot 66 gives low to bot 1 and high to bot 209
+bot 90 gives low to bot 104 and high to bot 34
+bot 68 gives low to bot 23 and high to bot 87
+bot 121 gives low to bot 55 and high to bot 126
+bot 122 gives low to bot 137 and high to bot 1
+bot 209 gives low to bot 168 and high to bot 26
+bot 141 gives low to bot 170 and high to bot 6
+bot 149 gives low to bot 62 and high to bot 13
+bot 120 gives low to bot 179 and high to bot 71
+bot 160 gives low to bot 194 and high to bot 151
+bot 86 gives low to bot 96 and high to bot 106
+value 13 goes to bot 9
+bot 180 gives low to bot 189 and high to bot 27
+value 67 goes to bot 88
+bot 169 gives low to bot 99 and high to bot 159
+bot 56 gives low to bot 98 and high to bot 147
+bot 197 gives low to bot 174 and high to bot 81
+bot 57 gives low to bot 113 and high to bot 179
+bot 39 gives low to bot 115 and high to bot 3
+bot 79 gives low to bot 22 and high to bot 40
+bot 161 gives low to output 14 and high to bot 185
+bot 21 gives low to bot 114 and high to bot 119
+bot 136 gives low to bot 28 and high to bot 158
+bot 105 gives low to bot 89 and high to bot 19
+bot 168 gives low to bot 126 and high to bot 26
+bot 193 gives low to bot 64 and high to bot 98
+bot 186 gives low to bot 86 and high to bot 178
+value 11 goes to bot 165
+bot 33 gives low to bot 116 and high to bot 150
+bot 32 gives low to bot 154 and high to bot 206
+bot 166 gives low to bot 33 and high to bot 139
+value 7 goes to bot 63
+bot 203 gives low to bot 172 and high to bot 64
+bot 200 gives low to bot 94 and high to bot 25
+value 43 goes to bot 76
+bot 145 gives low to bot 103 and high to bot 128
+bot 119 gives low to bot 186 and high to bot 97
+bot 12 gives low to bot 31 and high to bot 4
+bot 23 gives low to bot 198 and high to bot 171
+bot 34 gives low to bot 10 and high to bot 20
+bot 198 gives low to bot 43 and high to bot 17
+bot 50 gives low to output 1 and high to bot 127
+bot 155 gives low to bot 191 and high to bot 32
+bot 206 gives low to bot 12 and high to bot 43
+bot 96 gives low to bot 80 and high to bot 155
+bot 93 gives low to bot 44 and high to bot 70
+bot 24 gives low to bot 85 and high to bot 83
+bot 30 gives low to bot 159 and high to bot 68
+bot 55 gives low to bot 203 and high to bot 193
+bot 199 gives low to bot 68 and high to bot 135
+bot 170 gives low to bot 97 and high to bot 5
+bot 65 gives low to bot 152 and high to bot 194
+bot 43 gives low to bot 4 and high to bot 181
+bot 113 gives low to output 9 and high to bot 161
+bot 81 gives low to bot 141 and high to bot 94
+value 29 goes to bot 7
+bot 46 gives low to bot 175 and high to bot 195
+value 47 goes to bot 21
+value 23 goes to bot 42
+bot 13 gives low to bot 138 and high to bot 61
+bot 135 gives low to bot 87 and high to bot 111
+bot 194 gives low to bot 190 and high to bot 82
+value 73 goes to bot 109
+bot 154 gives low to bot 51 and high to bot 12
+bot 1 gives low to bot 18 and high to bot 209
+bot 98 gives low to bot 48 and high to bot 45
+bot 147 gives low to bot 45 and high to bot 95
+bot 47 gives low to output 19 and high to bot 152
+bot 26 gives low to bot 56 and high to bot 147
+bot 179 gives low to bot 161 and high to bot 71
+bot 148 gives low to bot 204 and high to bot 137
+bot 5 gives low to bot 67 and high to bot 85
+bot 174 gives low to bot 132 and high to bot 141
+bot 8 gives low to bot 13 and high to bot 75
+bot 82 gives low to bot 146 and high to bot 22
+bot 123 gives low to bot 40 and high to bot 107
+bot 99 gives low to bot 32 and high to bot 201
+bot 41 gives low to bot 196 and high to bot 192
+bot 139 gives low to bot 150 and high to bot 153
+bot 11 gives low to output 16 and high to bot 113
+bot 72 gives low to bot 65 and high to bot 160
+bot 195 gives low to bot 133 and high to bot 183
+bot 54 gives low to output 12 and high to output 10
+bot 158 gives low to bot 102 and high to bot 110
+bot 112 gives low to bot 19 and high to bot 118
+bot 31 gives low to bot 208 and high to bot 143
+bot 167 gives low to bot 7 and high to bot 96
+bot 63 gives low to bot 92 and high to bot 74
+bot 116 gives low to bot 20 and high to bot 131
+bot 184 gives low to bot 39 and high to bot 3
+bot 162 gives low to bot 205 and high to bot 39
+bot 108 gives low to output 11 and high to bot 175
+value 53 goes to bot 207
+bot 111 gives low to bot 202 and high to bot 184
+bot 25 gives low to bot 24 and high to bot 83
+value 71 goes to bot 77
+bot 69 gives low to bot 142 and high to bot 0
+bot 146 gives low to output 13 and high to bot 53
+bot 7 gives low to bot 76 and high to bot 80
+bot 131 gives low to bot 73 and high to bot 204
+bot 102 gives low to bot 195 and high to bot 117
+bot 76 gives low to bot 165 and high to bot 41
+bot 153 gives low to bot 148 and high to bot 122
+bot 208 gives low to bot 90 and high to bot 163
+bot 70 gives low to bot 144 and high to bot 78
+bot 125 gives low to bot 8 and high to bot 156
+bot 83 gives low to bot 199 and high to bot 135
+bot 75 gives low to bot 61 and high to bot 104
+bot 67 gives low to bot 169 and high to bot 30
+bot 14 gives low to bot 81 and high to bot 200
+bot 159 gives low to bot 201 and high to bot 23
+value 3 goes to bot 93
+bot 110 gives low to bot 117 and high to bot 89
+bot 128 gives low to bot 129 and high to bot 182
+bot 87 gives low to bot 171 and high to bot 111
+bot 45 gives low to bot 58 and high to bot 95
+bot 4 gives low to bot 143 and high to bot 166
+bot 60 gives low to bot 156 and high to bot 208
+bot 27 gives low to bot 108 and high to bot 46
+bot 42 gives low to bot 207 and high to bot 149
+bot 117 gives low to bot 183 and high to bot 72
+bot 115 gives low to bot 153 and high to bot 134
+bot 140 gives low to bot 125 and high to bot 60
+bot 173 gives low to bot 177 and high to bot 174
+bot 138 gives low to bot 180 and high to bot 52
+bot 100 gives low to bot 38 and high to bot 59
+value 41 goes to bot 173
+value 59 goes to bot 177
+bot 165 gives low to bot 63 and high to bot 196
+bot 84 gives low to bot 70 and high to bot 78
+bot 2 gives low to bot 160 and high to bot 91
+value 61 goes to bot 29
+bot 114 gives low to bot 109 and high to bot 186
+bot 205 gives low to bot 139 and high to bot 115
+bot 175 gives low to output 17 and high to bot 133
+bot 176 gives low to bot 57 and high to bot 120
+bot 107 gives low to bot 124 and high to bot 15
+bot 52 gives low to bot 27 and high to bot 28
+bot 103 gives low to bot 50 and high to bot 129
+bot 150 gives low to bot 131 and high to bot 148
+bot 16 gives low to output 20 and high to bot 189
+bot 190 gives low to output 18 and high to bot 146
+bot 157 gives low to bot 16 and high to bot 180
+bot 10 gives low to bot 158 and high to bot 130
+bot 202 gives low to bot 162 and high to bot 184
+bot 88 gives low to bot 77 and high to bot 84
+bot 188 gives low to bot 128 and high to bot 38
+bot 58 gives low to bot 15 and high to bot 101
+bot 171 gives low to bot 17 and high to bot 202
+bot 97 gives low to bot 178 and high to bot 67
+bot 163 gives low to bot 34 and high to bot 116
+bot 124 gives low to bot 0 and high to bot 145
+bot 71 gives low to bot 185 and high to bot 54
+bot 78 gives low to bot 14 and high to bot 200
+bot 101 gives low to bot 188 and high to bot 100
+bot 189 gives low to output 7 and high to bot 108
+bot 95 gives low to bot 101 and high to bot 100
+bot 0 gives low to bot 35 and high to bot 103
+bot 207 gives low to bot 37 and high to bot 62
+bot 49 gives low to bot 11 and high to bot 57
+bot 85 gives low to bot 30 and high to bot 199
+bot 89 gives low to bot 72 and high to bot 2
+bot 3 gives low to bot 134 and high to bot 66
+bot 181 gives low to bot 166 and high to bot 205
+bot 91 gives low to bot 151 and high to bot 172
+value 17 goes to bot 167
+bot 20 gives low to bot 130 and high to bot 73
+bot 196 gives low to bot 74 and high to bot 140
+bot 18 gives low to bot 121 and high to bot 168
+bot 185 gives low to output 15 and high to bot 54
+bot 178 gives low to bot 106 and high to bot 169
+bot 129 gives low to bot 127 and high to bot 49
+bot 19 gives low to bot 2 and high to bot 164
+bot 15 gives low to bot 145 and high to bot 188
+bot 144 gives low to bot 197 and high to bot 14
+bot 201 gives low to bot 206 and high to bot 198
+bot 164 gives low to bot 91 and high to bot 203
+bot 73 gives low to bot 105 and high to bot 112
+bot 191 gives low to bot 192 and high to bot 154
+bot 109 gives low to bot 167 and high to bot 86
+bot 151 gives low to bot 82 and high to bot 79
+bot 53 gives low to output 2 and high to bot 142
+bot 37 gives low to bot 29 and high to bot 157
+value 2 goes to bot 44
+bot 204 gives low to bot 112 and high to bot 36
+bot 40 gives low to bot 69 and high to bot 124
+bot 22 gives low to bot 53 and high to bot 69
+bot 104 gives low to bot 136 and high to bot 10
+value 19 goes to bot 88
+bot 127 gives low to output 5 and high to bot 11
+bot 183 gives low to bot 47 and high to bot 65
+bot 192 gives low to bot 140 and high to bot 51
+bot 38 gives low to bot 182 and high to bot 59
+bot 61 gives low to bot 52 and high to bot 136
+bot 156 gives low to bot 75 and high to bot 90
+value 37 goes to bot 37
+bot 28 gives low to bot 46 and high to bot 102
+bot 187 gives low to bot 149 and high to bot 8
+bot 132 gives low to bot 119 and high to bot 170
+bot 44 gives low to bot 9 and high to bot 144
+bot 29 gives low to output 0 and high to bot 16
+bot 6 gives low to bot 5 and high to bot 24
+bot 137 gives low to bot 36 and high to bot 18
+bot 130 gives low to bot 110 and high to bot 105
+value 5 goes to bot 92
+bot 35 gives low to output 3 and high to bot 50
+bot 152 gives low to output 8 and high to bot 190
+bot 143 gives low to bot 163 and high to bot 33
diff --git a/2016/aoc10/src/main.rs b/2016/aoc10/src/main.rs
new file mode 100644
index 0000000..c2c18be
--- /dev/null
+++ b/2016/aoc10/src/main.rs
@@ -0,0 +1,155 @@
+extern crate regex;
+use regex::Regex;
+
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+use std::cmp;
+
+#[derive(Debug, Clone)]
+struct Bot {
+ low: Option<i32>,
+ high: Option<i32>,
+ low_dest: Option<Dest>,
+ high_dest: Option<Dest>
+}
+
+#[derive(Debug, Clone)]
+enum Dest {
+ Bot(usize),
+ Output(usize)
+}
+
+impl Bot {
+ fn new() -> Bot {
+ Bot {low: None, high: None, low_dest: None, high_dest: None}
+ }
+
+ fn add_input(&mut self, input: i32) {
+ if self.low.is_none() {
+ self.low = Some(input);
+ }
+ else {
+ let other = self.low.unwrap(); //already handled none case
+ self.low = Some(cmp::min(input,other));
+ self.high = Some(cmp::max(input,other));
+ }
+ }
+ fn ready(&self) -> bool {
+ self.low.is_some() && self.high.is_some() &&
+ self.low_dest.is_some() && self.high_dest.is_some()
+ }
+ fn clear(&mut self) {
+ self.low = None;
+ self.high = None;
+ }
+}
+
+
+fn main() {
+ let mut bots = build_bots_graph();
+ let outputs = find_outputs(&mut bots);
+ println!("Outputs {:?}", outputs);
+}
+
+fn find_outputs(bots: &mut Vec<Bot>) -> Vec<i32> {
+ let mut output = Vec::new();
+
+ let mut is_stable = false;
+ while !is_stable {
+ is_stable = true;
+
+ for i in 0..bots.len() {
+ if bots[i].ready() {
+ is_stable = false;
+
+ let low = bots[i].low.unwrap();
+ let high = bots[i].high.unwrap();
+ bots[i].clear();
+
+ match bots[i].low_dest {
+ Some(Dest::Bot(j)) => {
+ bots[j].add_input(low);
+ },
+ Some(Dest::Output(j)) => {
+ check_add_output(&mut output, j);
+ output[j] = low;
+ },
+ _ => {}
+ };
+ match bots[i].high_dest {
+ Some(Dest::Bot(j)) => {
+ bots[j].add_input(high);
+ },
+ Some(Dest::Output(j)) => {
+ check_add_output(&mut output, j);
+ output[j] = high;
+ },
+ _ => {}
+ };
+ }
+ }
+ }
+
+ output
+}
+
+fn build_bots_graph() -> Vec<Bot> {
+ let lines = read_file();
+ let mut bots = Vec::new();
+
+ let value_regex = Regex::new(r"^value (\d+) goes to bot (\d+)$").unwrap();
+ let give_regex = Regex::new(r"^bot (\d+) gives low to (output|bot) (\d+) and high to (output|bot) (\d+)$").unwrap();
+
+ for line in lines {
+ if value_regex.is_match(line.as_ref()) {
+ let cap = value_regex.captures(line.as_ref()).unwrap();
+ let value = cap.at(1).unwrap().parse().unwrap();
+ let bot_index = cap.at(2).unwrap().parse().unwrap();
+ check_add_bot(&mut bots, bot_index);
+ bots[bot_index].add_input(value);
+ }
+ else if give_regex.is_match(line.as_ref()) {
+ let cap = give_regex.captures(line.as_ref()).unwrap();
+ let give_bot_index = cap.at(1).unwrap().parse().unwrap();
+ let low_is_to_output = cap.at(2).unwrap() == "output";
+ let low_dest = cap.at(3).unwrap().parse().unwrap();
+ let high_is_to_output = cap.at(4).unwrap() == "output";
+ let high_dest = cap.at(5).unwrap().parse().unwrap();
+
+ check_add_bot(&mut bots, give_bot_index);
+ bots[give_bot_index].low_dest = if low_is_to_output {
+ Some(Dest::Output(low_dest))
+ } else {
+ Some(Dest::Bot(low_dest))
+ };
+ bots[give_bot_index].high_dest = if high_is_to_output {
+ Some(Dest::Output(high_dest))
+ } else {
+ Some(Dest::Bot(high_dest))
+ };
+ }
+ }
+
+ bots
+}
+
+fn check_add_bot(bots: &mut Vec<Bot>, index: usize) {
+ while index >= bots.len() {
+ bots.push(Bot::new());
+ }
+}
+
+fn check_add_output(outputs: &mut Vec<i32>, index: usize) {
+ while index >= outputs.len() {
+ outputs.push(0);
+ }
+}
+
+fn read_file() -> Vec<String> {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+ file.lines()
+ .map(|line| line.unwrap().trim().to_string())
+ .filter(|line| line.len() > 0)
+ .collect()
+}
diff --git a/2016/aoc11/Cargo.lock b/2016/aoc11/Cargo.lock
new file mode 100644
index 0000000..b423029
--- /dev/null
+++ b/2016/aoc11/Cargo.lock
@@ -0,0 +1,4 @@
+[root]
+name = "aoc11"
+version = "0.1.0"
+
diff --git a/2016/aoc11/Cargo.toml b/2016/aoc11/Cargo.toml
new file mode 100644
index 0000000..e0b3f68
--- /dev/null
+++ b/2016/aoc11/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc11"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@gmail.com>"]
+
+[dependencies]
+
diff --git a/2016/aoc11/input.txt b/2016/aoc11/input.txt
new file mode 100644
index 0000000..d453804
--- /dev/null
+++ b/2016/aoc11/input.txt
@@ -0,0 +1,4 @@
+The first floor contains a strontium generator, a strontium-compatible microchip, a plutonium generator, and a plutonium-compatible microchip.
+The second floor contains a thulium generator, a ruthenium generator, a ruthenium-compatible microchip, a curium generator, and a curium-compatible microchip.
+The third floor contains a thulium-compatible microchip.
+The fourth floor contains nothing relevant.
diff --git a/2016/aoc11/src/main.rs b/2016/aoc11/src/main.rs
new file mode 100644
index 0000000..39a6e2f
--- /dev/null
+++ b/2016/aoc11/src/main.rs
@@ -0,0 +1,166 @@
+
+use std::collections::HashMap;
+
+//const MICROS: usize = 2; //example
+const MICROS: usize = 7;
+
+#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
+struct State {
+ microchips: [[bool; MICROS]; 4],
+ generators: [[bool; MICROS]; 4],
+ elevator: usize
+}
+
+impl State {
+ fn is_final(&self) -> bool {
+ let floor = 3;
+
+ for i in 0..MICROS {
+ if !self.microchips[floor][i] || !self.generators[floor][i] {
+ return false;
+ }
+ }
+ true
+ }
+
+ fn is_safe(&self) -> bool {
+ for floor in 0..4 {
+ for i in 0..MICROS {
+ for j in 0..MICROS {
+ //need to be on same floor, if any other micro is there
+ if self.generators[floor][j] && !self.generators[floor][i] && self.microchips[floor][i] {
+ return false;
+ }
+ }
+ }
+ }
+ true
+ }
+
+ fn valid_moves(&self) -> Vec<State> {
+ let mut moves = Vec::new();
+
+ let mut new_floors = Vec::new();
+ if self.elevator > 0 {
+ new_floors.push(self.elevator-1);
+ }
+ if self.elevator < 3 {
+ new_floors.push(self.elevator+1);
+ }
+ for &new_floor in new_floors.iter() {
+
+ //items to take can be: one micro, one generator, two micros, two generator, one of each
+
+ //one micro
+ for i in 0..MICROS {
+ if self.microchips[self.elevator][i] {
+ moves.push(self.move_micro(i, self.elevator, new_floor));
+ }
+ }
+ //one generator
+ for i in 0..MICROS {
+ if self.generators[self.elevator][i] {
+ moves.push(self.move_generator(i, self.elevator, new_floor));
+ }
+ }
+ //two micros
+ for i in 0..MICROS {
+ for j in i+1..MICROS {
+ if self.microchips[self.elevator][i] && self.microchips[self.elevator][j] {
+ moves.push(self.move_micro(i, self.elevator, new_floor).move_micro(j, self.elevator, new_floor));
+ }
+ }
+ }
+ //two generators
+ for i in 0..MICROS {
+ for j in i+1..MICROS {
+ if self.generators[self.elevator][i] && self.generators[self.elevator][j] {
+ moves.push(self.move_generator(i, self.elevator, new_floor).move_generator(j, self.elevator, new_floor));
+ }
+ }
+ }
+ //one of each
+ for i in 0..MICROS {
+ for j in 0..MICROS {
+ if self.microchips[self.elevator][i] && self.generators[self.elevator][j] {
+ moves.push(self.move_micro(i, self.elevator, new_floor).move_generator(j, self.elevator, new_floor));
+ }
+ }
+ }
+ }
+
+ moves.iter().filter(|x| x.is_safe()).cloned().collect()
+ }
+
+ fn move_micro(&self, micro: usize, floor: usize, new_floor: usize) -> State {
+ let mut new_state = self.clone();
+ new_state.microchips[floor][micro] = false;
+ new_state.microchips[new_floor][micro] = true;
+ new_state.elevator = new_floor;
+ new_state
+ }
+ fn move_generator(&self, gen: usize, floor: usize, new_floor: usize) -> State {
+ let mut new_state = self.clone();
+ new_state.generators[floor][gen] = false;
+ new_state.generators[new_floor][gen] = true;
+ new_state.elevator = new_floor;
+ new_state
+ }
+}
+
+fn main() {
+ //Stronium, plutonium, thulium, ruthenium, curium, electrium, dilithium
+ let initial = State {
+ microchips:
+ [[true, true, false, false, false, true, true],
+ [false, false, false, true, true, false, false],
+ [false, false, true, false, false, false, false],
+ [false, false, false, false, false, false, false]],
+ generators:
+ [[true, true, false, false, false, true, true],
+ [false, false, true, true, true, false, false],
+ [false, false, false, false, false, false, false],
+ [false, false, false, false, false, false, false]],
+ elevator: 0
+ };
+
+ /*
+ //example
+ let initial = State {
+ microchips:
+ [[true, true],
+ [false, false],
+ [false, false],
+ [false, false]],
+ generators:
+ [[false, false],
+ [true, false],
+ [false, true],
+ [false, false]],
+ elevator: 0
+ };
+ */
+
+ let mut states: HashMap<State, u32> = HashMap::new();
+ states.insert(initial, 0);
+
+ let mut moves = 0;
+ loop {
+ if states.iter().any(|(state, _)| state.is_final()) {
+ break;
+ }
+
+ let new_states: Vec<State> = states.iter().filter(|&(_, &x)| x == moves).flat_map(|(state, _)| state.valid_moves()).collect();
+
+ moves += 1;
+
+ for state in new_states {
+ if !states.contains_key(&state) {
+ states.insert(state, moves);
+ }
+ }
+ }
+
+
+ println!("Moves required: {}", moves);
+}
diff --git a/2016/aoc12/Cargo.lock b/2016/aoc12/Cargo.lock
new file mode 100644
index 0000000..24237f4
--- /dev/null
+++ b/2016/aoc12/Cargo.lock
@@ -0,0 +1,98 @@
+[root]
+name = "aoc12"
+version = "0.1.0"
+dependencies = [
+ "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "memchr"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex"
+version = "0.1.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "thread-id"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "thread_local"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "utf8-ranges"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66"
+"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70"
+"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"
+"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"
+"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"
+"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
+"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5"
+"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"
+"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
diff --git a/2016/aoc12/Cargo.toml b/2016/aoc12/Cargo.toml
new file mode 100644
index 0000000..f224921
--- /dev/null
+++ b/2016/aoc12/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc12"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@entelect.co.za>"]
+
+[dependencies]
+regex = "0.1" \ No newline at end of file
diff --git a/2016/aoc12/input.txt b/2016/aoc12/input.txt
new file mode 100644
index 0000000..bb2a2ff
--- /dev/null
+++ b/2016/aoc12/input.txt
@@ -0,0 +1,23 @@
+cpy 1 a
+cpy 1 b
+cpy 26 d
+jnz c 2
+jnz 1 5
+cpy 7 c
+inc d
+dec c
+jnz c -2
+cpy a c
+inc a
+dec b
+jnz b -2
+cpy c b
+dec d
+jnz d -6
+cpy 17 c
+cpy 18 d
+inc a
+dec d
+jnz d -2
+dec c
+jnz c -5
diff --git a/2016/aoc12/src/main.rs b/2016/aoc12/src/main.rs
new file mode 100644
index 0000000..2356402
--- /dev/null
+++ b/2016/aoc12/src/main.rs
@@ -0,0 +1,136 @@
+extern crate regex;
+use regex::Regex;
+
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+
+enum Instruction {
+ CpyLit(i32, usize),
+ CpyReg(usize, usize),
+ Inc(usize),
+ Dec(usize),
+ Jnz(usize, i32),
+ Jmp(i32),
+ Noop
+}
+
+impl Instruction {
+ fn parse(line: &str) -> Instruction {
+ let cpy_lit: Regex = Regex::new(r"cpy ([-\d]+) (a|b|c|d)").unwrap();
+ let cpy_reg = Regex::new(r"cpy (a|b|c|d) (a|b|c|d)").unwrap();
+ let inc = Regex::new(r"inc (a|b|c|d)").unwrap();
+ let dec = Regex::new(r"dec (a|b|c|d)").unwrap();
+ let jnz_lit = Regex::new(r"jnz ([-\d]+) ([-\d]+)").unwrap();
+ let jnz_reg = Regex::new(r"jnz (a|b|c|d) ([-\d]+)").unwrap();
+
+ let cpy_lit_match = cpy_lit.captures(line);
+ let cpy_reg_match = cpy_reg.captures(line);
+ let inc_match = inc.captures(line);
+ let dec_match = dec.captures(line);
+ let jnz_lit_match = jnz_lit.captures(line);
+ let jnz_reg_match = jnz_reg.captures(line);
+
+ if cpy_lit_match.is_some() {
+ let cap = cpy_lit_match.unwrap();
+ let src: i32 = cap.at(1).unwrap().parse().unwrap();
+ let dest = to_register_index(cap.at(2).unwrap());
+ Instruction::CpyLit(src, dest)
+ }
+ else if cpy_reg_match.is_some() {
+ let cap = cpy_reg_match.unwrap();
+ let src = to_register_index(cap.at(1).unwrap());
+ let dest = to_register_index(cap.at(2).unwrap());
+ Instruction::CpyReg(src, dest)
+ }
+ else if inc_match.is_some() {
+ let cap = inc_match.unwrap();
+ let dest = to_register_index(cap.at(1).unwrap());
+ Instruction::Inc(dest)
+ }
+ else if dec_match.is_some() {
+ let cap = dec_match.unwrap();
+ let dest = to_register_index(cap.at(1).unwrap());
+ Instruction::Dec(dest)
+ }
+ else if jnz_lit_match.is_some() {
+ let cap = jnz_lit_match.unwrap();
+ let condition: i32 = cap.at(1).unwrap().parse().unwrap();
+ let offset: i32 = cap.at(2).unwrap().parse().unwrap();
+ if condition != 0 {
+ Instruction::Jmp(offset)
+ }
+ else {
+ Instruction::Noop
+ }
+ }
+ else if jnz_reg_match.is_some() {
+ let cap = jnz_reg_match.unwrap();
+ let condition = to_register_index(cap.at(1).unwrap());
+ let offset: i32 = cap.at(2).unwrap().parse().unwrap();
+ Instruction::Jnz(condition, offset)
+ }
+ else {
+ panic!("Invalid instruction line")
+ }
+ }
+}
+
+fn main() {
+ let program = read_file();
+
+ let mut registers: [i32; 4] = [0, 0, 1, 0];
+ let mut pc: usize = 0;
+
+ while pc < program.len() {
+ let mut pc_next: usize = pc+1;
+
+ match program[pc] {
+ Instruction::CpyLit(src, dest) => {
+ registers[dest] = src;
+ },
+ Instruction::CpyReg(src, dest) => {
+ registers[dest] = registers[src];
+ },
+ Instruction::Inc(dest) => {
+ registers[dest] += 1;
+ },
+ Instruction::Dec(dest) => {
+ registers[dest] -= 1;
+ },
+ Instruction::Jnz(condition, offset) => {
+ if registers[condition] != 0 {
+ pc_next = (pc as i32 + offset) as usize;
+ }
+ },
+ Instruction::Jmp(offset) => {
+ pc_next = (pc as i32 + offset) as usize
+ },
+ Instruction::Noop => {}
+ }
+
+ pc = pc_next;
+ }
+
+ println!("a: {}, b: {}, c: {}, d: {}", registers[0], registers[1], registers[2], registers[3]);
+
+}
+
+fn to_register_index(name: &str) -> usize {
+ match name {
+ "a" => 0,
+ "b" => 1,
+ "c" => 2,
+ "d" => 3,
+ _ => panic!("Invalid register provided")
+ }
+}
+
+fn read_file() -> Vec<Instruction> {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+ file.lines()
+ .map(|line| line.unwrap())
+ .filter(|line| line.len() > 0)
+ .map(|line| Instruction::parse(line.trim()))
+ .collect()
+}
diff --git a/2016/aoc13/Cargo.lock b/2016/aoc13/Cargo.lock
new file mode 100644
index 0000000..d60f2c7
--- /dev/null
+++ b/2016/aoc13/Cargo.lock
@@ -0,0 +1,98 @@
+[root]
+name = "aoc13"
+version = "0.1.0"
+dependencies = [
+ "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "memchr"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex"
+version = "0.1.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "thread-id"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "thread_local"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "utf8-ranges"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66"
+"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70"
+"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"
+"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"
+"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"
+"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
+"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5"
+"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"
+"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
diff --git a/2016/aoc13/Cargo.toml b/2016/aoc13/Cargo.toml
new file mode 100644
index 0000000..347a1a4
--- /dev/null
+++ b/2016/aoc13/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc13"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@entelect.co.za>"]
+
+[dependencies]
+regex = "0.1" \ No newline at end of file
diff --git a/2016/aoc13/src/main.rs b/2016/aoc13/src/main.rs
new file mode 100644
index 0000000..2c0e70e
--- /dev/null
+++ b/2016/aoc13/src/main.rs
@@ -0,0 +1,64 @@
+extern crate regex;
+use regex::Regex;
+
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+use std::collections::HashMap;
+
+fn main() {
+ //let target = (7, 4);
+ let target = (31,39);
+
+ let mut states: HashMap<(i32, i32), u32> = HashMap::new();
+ states.insert((1, 1), 0);
+ let mut moves = 0;
+ while moves < 50 {
+/* if states.iter().any(|(&state, _)| state == target) {
+ break;
+ }
+*/
+ let new_states: Vec<(i32, i32)> = states.iter().filter(|&(_, &x)| x == moves).flat_map(|(state, _)| available_steps(state)).collect();
+
+ moves += 1;
+
+ for state in new_states {
+ if !states.contains_key(&state) {
+ states.insert(state, moves);
+ }
+ }
+ }
+
+ println!("Moves required: {}", moves);
+ println!("Possible destinations: {}", states.iter().count());
+}
+
+
+fn available_steps(current: &(i32, i32)) -> Vec<(i32, i32)> {
+ let &(x0, y0) = current;
+ let mut results = Vec::new();
+ for &(x, y) in [(x0-1, y0), (x0+1, y0), (x0, y0-1), (x0, y0+1)].iter() {
+ if x >= 0 && y >= 0 && !is_wall(x, y) {
+ results.push((x, y));
+ }
+ }
+ results
+}
+
+fn print_map() {
+ for y in 0..10 {
+ for x in 0..10 {
+ print!("{}", if is_wall(x, y) {'#'} else {'.'});
+ }
+ println!("");
+ }
+}
+
+fn is_wall(x: i32, y: i32) -> bool {
+// let favourite_number = 10;
+ let favourite_number = 1352;
+ let funny_num = x*x + 3*x + 2*x*y + y + y*y + favourite_number;
+ let bin = format!("{:b}", funny_num);
+ let number_of_ones = bin.chars().filter(|&c| c == '1').count();
+ number_of_ones % 2 == 1
+}
diff --git a/2016/aoc14/Cargo.lock b/2016/aoc14/Cargo.lock
new file mode 100644
index 0000000..a889c91
--- /dev/null
+++ b/2016/aoc14/Cargo.lock
@@ -0,0 +1,14 @@
+[root]
+name = "aoc14"
+version = "0.1.0"
+dependencies = [
+ "md5 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "md5"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum md5 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7df230903ccdffd6b3b4ec21624498ea64c912ce50297846907f0b8e1bb249dd"
diff --git a/2016/aoc14/Cargo.toml b/2016/aoc14/Cargo.toml
new file mode 100644
index 0000000..eb3f92d
--- /dev/null
+++ b/2016/aoc14/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc14"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@entelect.co.za>"]
+
+[dependencies]
+md5 = "^0.2" \ No newline at end of file
diff --git a/2016/aoc14/src/main.rs b/2016/aoc14/src/main.rs
new file mode 100644
index 0000000..d9410ce
--- /dev/null
+++ b/2016/aoc14/src/main.rs
@@ -0,0 +1,84 @@
+extern crate md5;
+
+use std::collections::HashMap;
+
+fn main() {
+// let input = "abc";
+ let input = "yjdafjpo";
+ let mut index = 0;
+ let mut results_found = 0;
+
+ let mut hash_memo = HashMap::new();
+ while results_found < 64 {
+ let hash = stretched_hash(format!("{}{}", input, index), &mut hash_memo);
+
+ let threes = find_concurrent_symbols(&hash, 3, true);
+ if threes.len() > 0 {
+// println!("Found three at {} -> {}", index, hash);
+ for i in 1..1001 {
+ let hash = stretched_hash(format!("{}{}", input, index+i), &mut hash_memo);
+ let fives = find_concurrent_symbols(&hash, 5, false);
+ if fives.iter().any(|c| threes.contains(c)) {
+ results_found += 1;
+// println!("Five found at {} -> {}", index+i, hash);
+ println!("Found hash {} at index {}", results_found, index);
+ break;
+ }
+ }
+ }
+ index += 1;
+ }
+
+}
+
+fn find_concurrent_symbols(hash: &String, count: u8, exit_early: bool) -> Vec<char> {
+ let mut last_symbol = None;
+ let mut last_symbol_run = 0;
+ let mut matches = Vec::new();
+ for c in hash.chars() {
+ let symbol_matches = match last_symbol {
+ Some(s) => s == c,
+ None => false
+ };
+
+ if symbol_matches {
+ last_symbol_run += 1;
+ if last_symbol_run >= count && !matches.contains(&c) {
+ matches.push(c);
+ if exit_early {
+ break;
+ }
+ }
+ } else {
+ last_symbol = Some(c);
+ last_symbol_run = 1;
+ }
+ }
+
+ matches
+}
+
+fn hash_to_string(hash: &[u8; 16]) -> String {
+ let mut result = String::with_capacity(32);
+
+ for &byte in hash.iter() {
+ result.push_str(format!("{:02x}", byte).as_ref());
+ }
+ result
+}
+
+fn stretched_hash(input: String, memo: &mut HashMap<String, String>) -> String {
+ memo.entry(input.clone()).or_insert_with(|| {
+ let mut result = input;
+ for _ in 0..2017 {
+ result = string_hash(result);
+ }
+ result
+ }).clone()
+}
+
+fn string_hash(input: String) -> String {
+ let bytes_to_hash = input.into_bytes();
+ let hash = md5::compute(bytes_to_hash.as_slice());
+ hash_to_string(&hash)
+}
diff --git a/2016/aoc15/Cargo.lock b/2016/aoc15/Cargo.lock
new file mode 100644
index 0000000..38f1d9c
--- /dev/null
+++ b/2016/aoc15/Cargo.lock
@@ -0,0 +1,98 @@
+[root]
+name = "aoc15"
+version = "0.1.0"
+dependencies = [
+ "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "memchr"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex"
+version = "0.1.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "thread-id"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "thread_local"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "utf8-ranges"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66"
+"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70"
+"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"
+"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"
+"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"
+"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
+"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5"
+"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"
+"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
diff --git a/2016/aoc15/Cargo.toml b/2016/aoc15/Cargo.toml
new file mode 100644
index 0000000..eb75c1d
--- /dev/null
+++ b/2016/aoc15/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc15"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@entelect.co.za>"]
+
+[dependencies]
+regex = "0.1" \ No newline at end of file
diff --git a/2016/aoc15/input.txt b/2016/aoc15/input.txt
new file mode 100644
index 0000000..c4cf544
--- /dev/null
+++ b/2016/aoc15/input.txt
@@ -0,0 +1,7 @@
+Disc #1 has 17 positions; at time=0, it is at position 5.
+Disc #2 has 19 positions; at time=0, it is at position 8.
+Disc #3 has 7 positions; at time=0, it is at position 1.
+Disc #4 has 13 positions; at time=0, it is at position 7.
+Disc #5 has 5 positions; at time=0, it is at position 1.
+Disc #6 has 3 positions; at time=0, it is at position 0.
+Disc #7 has 11 positions; at time=0, it is at position 0.
diff --git a/2016/aoc15/src/main.rs b/2016/aoc15/src/main.rs
new file mode 100644
index 0000000..a7f0f64
--- /dev/null
+++ b/2016/aoc15/src/main.rs
@@ -0,0 +1,35 @@
+extern crate regex;
+
+use regex::Regex;
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+
+
+fn main() {
+ let gears = read_file();
+ let pass = (0..).find(|&i| can_pass(&gears, i)).expect("Reached end of infinite range without finding output");
+ println!("First pass at t={}", pass);
+}
+
+fn can_pass(gears: &Vec<(i32, i32, i32)>, time: i32) -> bool {
+ gears.iter().all(|&(time_offset, init_pos, gear_size)| (init_pos + time_offset + time) % gear_size == 0)
+}
+
+fn read_file() -> Vec<(i32, i32, i32)> {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+ let line_regex = Regex::new(r"Disc #(\d+) has (\d+) positions; at time=0, it is at position (\d+).").unwrap();
+ file.lines()
+ .filter_map(|line| {
+ line_regex.captures(line.unwrap().as_ref()).and_then(|cap| {
+ let time_offset = cap.at(1).and_then(|s| s.parse::<i32>().ok());
+ let init_pos = cap.at(3).and_then(|s| s.parse::<i32>().ok());
+ let gear_size = cap.at(2).and_then(|s| s.parse::<i32>().ok());
+ match (time_offset, init_pos, gear_size) {
+ (Some(a), Some(b), Some(c)) => Some((a,b,c)),
+ _ => None
+ }
+ })
+ })
+ .collect()
+}
diff --git a/2016/aoc16/Cargo.lock b/2016/aoc16/Cargo.lock
new file mode 100644
index 0000000..af71beb
--- /dev/null
+++ b/2016/aoc16/Cargo.lock
@@ -0,0 +1,4 @@
+[root]
+name = "aoc16"
+version = "0.1.0"
+
diff --git a/2016/aoc16/Cargo.toml b/2016/aoc16/Cargo.toml
new file mode 100644
index 0000000..3e56892
--- /dev/null
+++ b/2016/aoc16/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aoc16"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@gmail.com>"]
+
+[dependencies]
diff --git a/2016/aoc16/src/main.rs b/2016/aoc16/src/main.rs
new file mode 100644
index 0000000..c5ecd10
--- /dev/null
+++ b/2016/aoc16/src/main.rs
@@ -0,0 +1,68 @@
+fn main() {
+ let data = initial();
+ let expanded = expand_to_size(data, 35651584);
+ let check = checksum(expanded);
+ print(&check);
+}
+
+fn initial() -> Vec<bool> {
+ to_bit_vec("10001001100000001")
+}
+
+fn to_bit_vec(input: &str) -> Vec<bool> {
+ input.chars().map(|c| c == '1').collect()
+}
+
+fn expand(a: Vec<bool>) -> Vec<bool> {
+ let mut b = a.clone();
+ b.reverse();
+ b = b.iter().map(|x| !x).collect();
+
+ let mut out = a.clone();
+ out.push(false);
+ out.append(&mut b);
+ out
+}
+
+fn expand_to_size(init: Vec<bool>, size: usize) -> Vec<bool> {
+ let mut out = init.clone();
+ while out.len() < size {
+ out = expand(out);
+ }
+ out.truncate(size);
+ out
+}
+
+fn checksum(data: Vec<bool>) -> Vec<bool> {
+ let mut check: Vec<bool> = data.chunks(2).map(|x| x[0] == x[1]).collect();
+ if check.len() % 2 == 0 {
+ check = checksum(check);
+ }
+ check
+}
+
+fn print(data: &Vec<bool>) {
+ for &bit in data {
+ print!("{}", if bit {'1'} else {'0'});
+ }
+ println!("");
+}
+
+#[test]
+fn test_expand() {
+ assert_eq!(expand(to_bit_vec("1")), to_bit_vec("100"));
+ assert_eq!(expand(to_bit_vec("0")), to_bit_vec("001"));
+ assert_eq!(expand(to_bit_vec("11111")), to_bit_vec("11111000000"));
+ assert_eq!(expand(to_bit_vec("111100001010")), to_bit_vec("1111000010100101011110000"));
+}
+
+#[test]
+fn test_expand_to_size() {
+ assert_eq!(expand_to_size(to_bit_vec("10000"), 20), to_bit_vec("10000011110010000111"));
+}
+
+#[test]
+fn test_checksum() {
+ assert_eq!(checksum(to_bit_vec("10000011110010000111")), to_bit_vec("01100"));
+}
+
diff --git a/2016/aoc17/Cargo.lock b/2016/aoc17/Cargo.lock
new file mode 100644
index 0000000..488e59b
--- /dev/null
+++ b/2016/aoc17/Cargo.lock
@@ -0,0 +1,14 @@
+[root]
+name = "aoc17"
+version = "0.1.0"
+dependencies = [
+ "md5 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "md5"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum md5 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7df230903ccdffd6b3b4ec21624498ea64c912ce50297846907f0b8e1bb249dd"
diff --git a/2016/aoc17/Cargo.toml b/2016/aoc17/Cargo.toml
new file mode 100644
index 0000000..88c211c
--- /dev/null
+++ b/2016/aoc17/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc17"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@gmail.com>"]
+
+[dependencies]
+md5 = "^0.2" \ No newline at end of file
diff --git a/2016/aoc17/src/main.rs b/2016/aoc17/src/main.rs
new file mode 100644
index 0000000..77fdf2e
--- /dev/null
+++ b/2016/aoc17/src/main.rs
@@ -0,0 +1,98 @@
+extern crate md5;
+
+#[derive(Clone)]
+struct State {
+ input: String,
+ path: String,
+ x: i8,
+ y: i8
+}
+
+impl State {
+ fn open_directions(&self) -> Vec<(char, i8, i8)> {
+ let hash_input = format!("{}{}", self.input, self.path);
+ let hash = md5::compute(hash_input.into_bytes().as_slice());
+
+ let mut results = Vec::new();
+ if hash[0]/16 > 10 && self.y > 0 {
+ results.push(('U', 0, -1));
+ }
+ if hash[0]%16 > 10 && self.y < 3 {
+ results.push(('D', 0, 1));
+ }
+ if hash[1]/16 > 10 && self.x > 0 {
+ results.push(('L', -1, 0));
+ }
+ if hash[1]%16 > 10 && self.x < 3 {
+ results.push(('R', 1, 0));
+ }
+
+ results
+ }
+
+ fn next_states(&self) -> Vec<State> {
+ self.open_directions().iter()
+ .map(|&(dir, dx, dy)| State {
+ input: self.input.clone(),
+ path: {
+ let mut p = self.path.clone();
+ p.push(dir);
+ p
+ },
+ x: self.x + dx,
+ y: self.y + dy
+ }).collect()
+ }
+
+ fn is_final(&self) -> bool {
+ self.x == 3 && self.y == 3
+ }
+}
+
+fn main() {
+ let initial = State {
+ input: "lpvhkcbi".to_string(),
+ path: String::new(),
+ x: 0,
+ y: 0
+ };
+
+ let final_state = find_final_state(initial.clone());
+ let longest_path = find_longest_path(initial);
+
+ println!("Final State Path: {}", final_state.path);
+ println!("Longest Path: {}", longest_path);
+}
+
+fn find_final_state(initial: State) -> State {
+ let mut states = vec!(initial);
+
+ loop {
+ match states.iter().find(|s| s.is_final()) {
+ Some(final_state) => {return final_state.clone();},
+ None => {}
+ };
+
+ states = states.iter().flat_map(|s| s.next_states()).collect();
+ }
+}
+
+fn find_longest_path(initial: State) -> u32 {
+ let mut states = vec!(initial);
+ let mut current_longest = 0;
+
+ while states.len() > 0 {
+
+ match states.iter().find(|s| s.is_final()) {
+ Some(final_state) => {current_longest = final_state.path.len() as u32;},
+ None => {}
+ };
+
+ states = states.iter()
+ .filter(|s| !s.is_final())
+ .flat_map(|s| s.next_states())
+ .collect();
+ }
+
+ current_longest
+}
diff --git a/2016/aoc18/Cargo.lock b/2016/aoc18/Cargo.lock
new file mode 100644
index 0000000..d26659d
--- /dev/null
+++ b/2016/aoc18/Cargo.lock
@@ -0,0 +1,4 @@
+[root]
+name = "aoc18"
+version = "0.1.0"
+
diff --git a/2016/aoc18/Cargo.toml b/2016/aoc18/Cargo.toml
new file mode 100644
index 0000000..5eadfea
--- /dev/null
+++ b/2016/aoc18/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aoc18"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@gmail.com>"]
+
+[dependencies]
diff --git a/2016/aoc18/src/main.rs b/2016/aoc18/src/main.rs
new file mode 100644
index 0000000..52ad7a9
--- /dev/null
+++ b/2016/aoc18/src/main.rs
@@ -0,0 +1,20 @@
+fn main() {
+ let init: Vec<char> = ".^^..^...^..^^.^^^.^^^.^^^^^^.^.^^^^.^^.^^^^^^.^...^......^...^^^..^^^.....^^^^^^^^^....^^...^^^^..^".chars().collect();
+
+ let mut map = Vec::new();
+ map.push(init);
+
+ for _ in 1..400000 {
+ let last = map.last().unwrap().clone();
+ let mut next = Vec::new();
+ for i in 0..last.len() {
+ let left = if i == 0 { '.' } else { last[i-1] };
+ let right = if i == last.len()-1 { '.' } else { last[i+1] };
+ next.push(if left == right { '.' } else { '^' });
+ }
+ map.push(next);
+ }
+
+ let safe_count = map.iter().map(|row| row.iter().filter(|&&c| c=='.').count() as u32).sum::<u32>();
+ println!("Safe tiles: {}", safe_count);
+}
diff --git a/2016/aoc19/Cargo.lock b/2016/aoc19/Cargo.lock
new file mode 100644
index 0000000..7dc8a26
--- /dev/null
+++ b/2016/aoc19/Cargo.lock
@@ -0,0 +1,4 @@
+[root]
+name = "aoc19"
+version = "0.1.0"
+
diff --git a/2016/aoc19/Cargo.toml b/2016/aoc19/Cargo.toml
new file mode 100644
index 0000000..17889e3
--- /dev/null
+++ b/2016/aoc19/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aoc19"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@gmail.com>"]
+
+[dependencies]
diff --git a/2016/aoc19/src/main.rs b/2016/aoc19/src/main.rs
new file mode 100644
index 0000000..1930d8d
--- /dev/null
+++ b/2016/aoc19/src/main.rs
@@ -0,0 +1,42 @@
+fn main() {
+ part1();
+ part2();
+}
+
+fn part1() {
+ let mut elves = (0..3017957).map(|i| i+1).collect::<Vec<_>>();
+
+ let mut eliminate_mod = 1;
+
+ while elves.len() > 1 {
+ let next_mod = if elves.len() % 2 == eliminate_mod { 0 } else { 1 };
+ elves = elves.iter()
+ .enumerate()
+ .filter(|&(i, _)| i % 2 != eliminate_mod)
+ .map(|(_, &e)| e)
+ .collect();
+ eliminate_mod = next_mod;
+ }
+
+ let elf = elves[0];
+ println!("Elf {} gets all the presents in part 1", elf);
+}
+
+fn part2() {
+ let mut elves = (0..3017957).map(|i| i+1).collect::<Vec<_>>();
+
+ let mut i = 0;
+ while elves.len() > 1 {
+ i = i % elves.len();
+ let to_eliminate = (i + elves.len() / 2) % elves.len();
+// println!("Elf {} is taking presents from elf {}", elves[i], elves[to_eliminate]);
+ elves.remove(to_eliminate);
+ if to_eliminate > i {
+ i += 1;
+ }
+ }
+
+ let elf = elves[0];
+ println!("Elf {} gets all the presents in part 2", elf);
+
+}
diff --git a/2016/aoc2/Cargo.lock b/2016/aoc2/Cargo.lock
new file mode 100644
index 0000000..b0dbf6e
--- /dev/null
+++ b/2016/aoc2/Cargo.lock
@@ -0,0 +1,4 @@
+[root]
+name = "aoc2"
+version = "0.1.0"
+
diff --git a/2016/aoc2/Cargo.toml b/2016/aoc2/Cargo.toml
new file mode 100644
index 0000000..e4dcc6f
--- /dev/null
+++ b/2016/aoc2/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aoc2"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@entelect.co.za>"]
+
+[dependencies]
diff --git a/2016/aoc2/input.txt b/2016/aoc2/input.txt
new file mode 100644
index 0000000..ba5a73d
--- /dev/null
+++ b/2016/aoc2/input.txt
@@ -0,0 +1,5 @@
+RUDULRLLUULRURDDRRUDURULLLDRLRLUDDLUDUDDUDRRDUDULDUUULLRULLRLDDLDLDDRLRRRRUDLLDDUULDRLLUDDRRUURLULRRRDLLURRUUDURUDDURLUDDDLUDDUUDUURUDLRDRDRLRDRLDRUDRUUDLRDDRRURDDLRDDRRURDUDDLULLUDRURURRRLRRUDUULULULRRLDLUDUURRLLRUDLLDRDDLRRRULRUDLULDDLLLULDLRUDLLLLRDDLRDRLDRLLRDRRDLRDULULRLLLDRUDRRRUULRUULDRURLUDRURRDLLDLRDLDDDDRRLUDLRRLUUUURDRDDLRRURURRDUULLRLURLURUDDDRDURDUUDRLRLRRLDDLDLDLDDDUDDULURLDDLLRLRRDULUDDLULRLUDDLDLRULUUUDRLDRUDURLUDDRLLRUULDLRRRRDLLLLURULLRDRRUDLUULRRDLLRLRLUDLDDULLDLLRDLDLL
+LLUUUUUUDUDRLRDRDLDURRRLLRRLRURLLUURRLLUDUDLULUURUUURDLUDLDDLULLRDLRUULDLRDUDURLLDDUDUDULLUDDUULLLUULRRRLULRURRDLRUDUDDURRRDRUURDURLLULLRULLDRUULLURLDRDUUDDDDDDRRLDRLRRRLULDDUURRLLLLDRURLURDRDRDURUDUURRDUDUDRLLUUDDRLUDDDRDLDLRLDRURRDLLRULDRLLURURRLUULLRLRRURDDRDRUUURUURUUUDLLRRLUDRLDLRLURLDLUDDUDDDLDUDRRLDLRURULRLLRDUULURRRULDLLLRLDDDUURRRRDULLRURRLULULDLRRUDUDDLRUURDLDUDDUDRRDLRRRDUDUUUDLLDDDDLURLURRRUUULLLULRRLLLLLLULDUUDLRUDRRDLRDUUDUDLLRLDLLRUURDUUURUUUDDLLUUDLULDURLULULUUUDRUDULLURRULRULLRDLDDU
+RLUUURULLDLRLDUDRDURRDUURLLUDDDUULRRRLRLURDDRUULUDULDUUDDDDUDDDDRUDDLDUUDRUDLRRRLLRDDLLLRLLRUULRUULDDRURRLURRLRLULDDRRRDDURDDRDRDULRUDRUUDULRLLULDLRLLDRULRDDRRDDUDLRLLUDRDRRRLUDULRDLRDDURRUUDDRRUDURRUUUDDRRDUDURLUUDUDUURDDDLURLULLUULULURUDUUDRUDULLUUULURDLDUULLDDLLDULRLRLRDUUURUUDLRLDURUDRLDULLUDLDLLRDUURRDUDURLUUUDLLRRULRLULRLDLLURDURRULRLLRRDUDLLRDRRRRDLUUDRUUUDDLRLUDDDDDDRURRRUUURRDLLRURLDDLLDLRRLLLDRRULRRUDLDRDDRRLULURLLUURURURRRRUUUUURUDURLRLLLULULDLLDLRDRRULUDUDRDRRDRDRRDUDLLLRUDRUDDDULRULRRRDRLRUUUURUDURDUUULLULRUDDULDUUDLDURRD
+ULRULDDLDLULLLRRRLRUDDDDDLLDDUDLRRDULUUDRDLRRURDRRLUULRURUDRRULDLLLUDRUUDULULUDDRUDDDRDURRRDRDUUURLRDULUDRDRLDRUDDLLLDRRULUDLUDLDLLRRUDUULULDLDLLUURDLDDLLUUDURLURLLLDRDLDRRLRULUURRDRULRUUURULRRUDDDDLLDLDDLLRRLRRRRDUUDUDLDRDRRURDLRURULDLRDLLLLRUDRLLRDLRLRDURDRUDURRRLRDRDLLRLUDDDDRLRLLDUURRURLUURUULUDLUURDRRUDDLUDUDDDURRDRUDRLRULDULUUUUUUDDUDRUDUUURUDRRDLUDLUUDUULUDURDLDDDLLURRURUUDUDDRRDRLLULULDRLRURRDDDRDUUURDDDRULUDRDDLDURRLDDDLRRRLDDRDURULDLUDLLLURLURRLRRULDLLDDUDRRULDRRRRLURRUULRRRUDLURDLLDLLDULUUDRRLDLLLDRLRUDLUULDLDRUDUDURDRUDRDDDLRLULLUR
+LRLUUURRLRRRRRUURRLLULRLULLDLUDLUDRDDRLDLRLULLURDURLURDLLRLDUUDDURRRRLDLLRULLRLDLLUUDRLDDLLDRULDRLLRURDLRURRUDLULLRURDLURRURUDULLDRLLUUULUDRURRUUDUDULUUULRLDDULDRDLUDDUDDDLRURULLDLLLRLLUURDLRUDLLLLDLLRLRUUUDDRUUUUDLDLRDDURLDURUULLLUUDLLLLDULRRRLLDLDRRDRLUDRUDURLLUDLRLLUDUDRDDDRDLRDLRULUULDRLUDLRLDUURLRRLUDDDUUDDDUDRLDLDUDLURUULLDDDURUUULRLUDLDURUUDRDRURUDDUURDUUUDLLDLDLDURUURLLLLRURUURURULRULLRUDLRRUUUUUDRRLLRDDUURDRDRDDDUDRLURDRRRUDLLLDURDLUUDLLUDDULUUDLDUUULLDRDLRURUURRDURRDLURRRRLLUUULRDULDDLDUURRDLDLLULRRLLUDLDUDLUUL
diff --git a/2016/aoc2/src/main.rs b/2016/aoc2/src/main.rs
new file mode 100644
index 0000000..f4c3bfd
--- /dev/null
+++ b/2016/aoc2/src/main.rs
@@ -0,0 +1,61 @@
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+
+fn main() {
+ let lines = read_file();
+ let mut current = 5;
+ for line in lines {
+ current = line.chars().fold(current, |current, dir| move_char_hex(current, dir));
+ println!("{:X}", current);
+ }
+}
+
+fn read_file() -> Vec<String> {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+ file.lines()
+ .map(|line| line.unwrap().trim().to_string())
+ .filter(|line| line.len() > 0)
+ .collect()
+}
+
+
+//assume current in 1-9 range, and char is in UDLR
+fn move_char(current: i32, dir: char) -> i32 {
+ match dir {
+ 'U' => if current <= 3 { current } else { current - 3},
+ 'D' => if current >= 7 { current } else { current + 3},
+ 'L' => if current%3 == 1 { current } else { current - 1},
+ 'R' => if current%3 == 0 { current } else { current + 1},
+ _ => panic!("Bad direction character")
+ }
+}
+
+// 1
+// 2 3 4
+// 5 6 7 8 9
+// A B C
+// D
+fn move_char_hex(current: i32, dir: char) -> i32 {
+ match dir {
+ 'U' => match current {
+ 1|2|4|5|9 => current,
+ 3|13 => current - 2,
+ _ => current - 4
+ },
+ 'D' => match current {
+ 5|10|13|12|9 => current,
+ 1|11 => current + 1,
+ _ => current + 4
+ },
+ 'L' => match current {
+ 1|2|5|10|13 => current,
+ _ => current - 1
+ },
+ 'R' => match current {
+ 1|4|9|12|13 => current,
+ _ => current + 1
+ },
+ _ => panic!("Bad direction character")
+ }
+}
diff --git a/2016/aoc20/Cargo.lock b/2016/aoc20/Cargo.lock
new file mode 100644
index 0000000..26be916
--- /dev/null
+++ b/2016/aoc20/Cargo.lock
@@ -0,0 +1,4 @@
+[root]
+name = "aoc20"
+version = "0.1.0"
+
diff --git a/2016/aoc20/Cargo.toml b/2016/aoc20/Cargo.toml
new file mode 100644
index 0000000..4c1e873
--- /dev/null
+++ b/2016/aoc20/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aoc20"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@gmail.com>"]
+
+[dependencies]
diff --git a/2016/aoc20/input.txt b/2016/aoc20/input.txt
new file mode 100644
index 0000000..c3e912f
--- /dev/null
+++ b/2016/aoc20/input.txt
@@ -0,0 +1,1104 @@
+272152717-281364173
+480675455-489214207
+3562619188-3566180938
+474796666-476679929
+1859288016-1859426304
+3500809029-3520779986
+1711620671-1724624325
+376497036-379822744
+2334350029-2336872286
+2880314906-2881510051
+257912946-260566708
+2964360275-2973540924
+889696219-900080622
+2727172832-2737372242
+33674001-51133436
+2718782366-2736816045
+41293631-52546854
+1064827080-1071610531
+1373807967-1374769067
+3261078460-3268114587
+1583129312-1602482863
+1605269651-1617971405
+365345542-377782493
+2858099254-2862714857
+1147380159-1156709753
+1087934555-1093750979
+998603437-1001868893
+234297440-245049936
+427084952-449321291
+3115490453-3126172818
+0-166475
+2859739533-2864404117
+2879116214-2888999956
+4166942312-4169074982
+2693533587-2694200673
+84162473-84534337
+2164071501-2168305216
+3745751095-3750043362
+2647427848-2647977897
+2028900925-2034847596
+876886411-878398110
+2589041333-2589873869
+876959837-878627172
+431139724-458304869
+1877994382-1887344924
+473575203-475773145
+252091135-257535969
+177110001-177143710
+2722497928-2723521816
+2208127-2536514
+1748077674-1751224226
+2362936907-2381045647
+2020385448-2029519771
+3108825744-3123438032
+872292652-885764819
+305053947-314709696
+2717924562-2718755692
+48149217-51160833
+2149726170-2150134226
+1729844094-1745733187
+1375741284-1378782323
+3744515388-3761146958
+78523085-78634151
+1634372345-1650424418
+3199349237-3209140394
+2011853949-2039316392
+769580925-794759455
+3841896290-3862358298
+3360393034-3379747723
+1120644472-1134516526
+815948131-837832345
+1590411139-1596337230
+2894381219-2935549329
+3688775236-3725245783
+963257634-966114246
+3566641344-3578334024
+1402589368-1434296916
+2742164387-2746045182
+3336884060-3357139723
+1529922302-1532912060
+812048355-820600359
+3535903629-3546917858
+3793132304-3794479774
+2441870431-2446591046
+790688046-795287265
+1094905232-1100177740
+2745878705-2749992348
+119256353-127273572
+3046258846-3057351205
+1754142948-1755600336
+1439035504-1441512409
+2099760008-2108426979
+2336936249-2337901885
+886155227-897744302
+278389264-304413122
+2261948686-2274345666
+3650645303-3661861270
+574462284-588550773
+1759196520-1782105094
+965026392-968307163
+2946755906-2963417308
+1766330775-1797112785
+1200115116-1225710522
+2080628180-2093783866
+2259186780-2265576012
+3422484974-3431403368
+2617357126-2619542029
+3535424340-3544236729
+1159703397-1178419333
+3695852451-3731387995
+2624409231-2626475102
+2462304649-2486546066
+1991659530-1991878310
+3675781139-3676295005
+3077370804-3098240471
+2410139047-2412323245
+1441379095-1464833739
+4254940654-4257828865
+3134602505-3135787446
+1531285367-1533939508
+1982248547-1989219645
+3717359312-3718050739
+1149793223-1159703395
+1718841131-1723739366
+1338353885-1363179561
+432322947-450369838
+3592044590-3598404106
+2783263665-2802135338
+2743201911-2758731127
+2940668500-2946140977
+3588363275-3594330069
+3675945049-3679197388
+154488705-187446525
+1653195306-1670854086
+2771303647-2772439896
+84146114-84264353
+1593778990-1622000763
+1580746474-1580917737
+801556682-801983712
+2268279290-2282899033
+3429390560-3432646573
+1355690206-1364432183
+3364827834-3370027309
+1343867080-1356033542
+2769747098-2802096717
+2451978746-2499145061
+3181481071-3202130015
+149287453-193454621
+2907925124-2933668261
+3525815495-3531996642
+892781900-902374081
+801983714-808209514
+1205516416-1207518863
+3475944050-3479276890
+1680662691-1693249318
+441188152-451875207
+3866263742-3869203885
+872306827-886155226
+3641638239-3656867109
+1292372277-1314188693
+1062559245-1064950825
+2334198700-2335529918
+1122962410-1136372412
+623323144-625918342
+2425193847-2429793856
+373315052-379611660
+2418007458-2424289401
+2149571480-2150070836
+1991878311-1994706041
+3043381174-3046887777
+497434379-500148281
+1825422529-1838184381
+137450473-139095016
+248808686-249748629
+1989969134-1990676913
+960553017-960915199
+2336374612-2337150925
+3369599561-3390928276
+113852260-145672651
+2986681144-2989530365
+3856382204-3873203604
+1657674792-1663548211
+2650185850-2651060935
+1647983099-1662799191
+1082357088-1112329267
+3793767754-3794336046
+3705877748-3728561957
+2769813898-2772369413
+3794164058-3801441915
+623200755-625407322
+1241966895-1253020214
+450369839-463131291
+2717038617-2723107862
+961267447-962353699
+193454623-196340979
+4253667440-4261704870
+3269563154-3275293388
+1505893371-1506880655
+3873203606-3889412741
+443548825-444733658
+3045753812-3049382630
+732764611-733035245
+961034623-961300670
+1373470559-1373526698
+2860192109-2867276065
+3312623058-3313008029
+3942424007-3951811891
+1197857710-1214225356
+458105388-462489469
+4259123154-4263336824
+960863927-961733781
+44819071-52470556
+957158383-958041099
+2543986743-2554322396
+339721933-346413740
+1010736956-1030771663
+4288781458-4289261456
+3687051286-3722932714
+2420813443-2424860115
+1989395087-1989698527
+3473694511-3476125935
+2408526816-2412196386
+1989398215-1991201331
+1526350090-1542206580
+2394556084-2399639414
+3510330656-3522250181
+137874061-144376880
+4167095310-4177987517
+2785359721-2785427263
+15024863-23531388
+1625174667-1658679299
+974122151-995631685
+1540947566-1554930456
+2424921025-2429636819
+1993822183-1994839237
+1094823818-1097108689
+69796587-71291314
+37126017-49427721
+3793022166-3794100162
+908189684-911496714
+2911211968-2917349047
+1227212686-1234159311
+3776286544-3783635666
+3531996644-3536250992
+3396302214-3406687062
+1476456536-1478818018
+2443497737-2447228620
+962292354-965288690
+1833703443-1843811212
+998277195-1000562480
+883225973-896212798
+2202815121-2215802598
+3557733372-3563107357
+2648035823-2649474134
+2723831559-2734044916
+1714279973-1738575730
+110217-574651
+1398965758-1409470798
+2330603686-2335139291
+1506286657-1511280423
+3365567975-3371386015
+466326205-480223737
+1989219647-1989438488
+3008188882-3010347685
+1070925288-1071665482
+2111554226-2123836945
+2137226110-2138852181
+1081261041-1091870264
+1081552237-1090538414
+2000657198-2037677988
+2718009384-2720142472
+925940762-939052067
+4179143261-4191765704
+3426378774-3430410036
+3676393933-3680167774
+3271833171-3277125583
+274414401-283893852
+3124560226-3128380638
+1208163309-1215074110
+2465798305-2494706753
+3050317115-3058897888
+1302678331-1315210828
+1751224227-1758206846
+931444766-948598982
+151669773-180559543
+255864690-255985990
+1556987318-1563743144
+16294070-23923782
+1415762720-1421421169
+3853344243-3864268114
+1280237454-1286328218
+2944350248-2976813361
+2187770126-2203436268
+3505239916-3517301515
+3232015564-3235367871
+2146211145-2166090499
+910952647-911877073
+1579658725-1581392690
+1237242317-1258610777
+2589766513-2598433041
+3449310840-3449858133
+745819525-755688297
+3776094116-3783478049
+2108426981-2124149170
+3449389881-3462604413
+2301503968-2324628965
+1005263513-1027181473
+1952664131-1969650551
+1285113553-1288652959
+3896408883-3908694324
+1920600328-1921999554
+1025403493-1031247416
+3905769594-3930128244
+1031247417-1047578444
+3885007170-3895219247
+3598377658-3599404192
+1697890477-1697912613
+954538505-957768997
+2816494072-2842728200
+492165035-498202012
+3137181704-3152588209
+1755735260-1759196518
+1371495492-1371550991
+2501923864-2514064340
+305959083-311818120
+4250019192-4275532230
+114168261-116414851
+2447228622-2451978745
+766211517-801556681
+3376445798-3394303381
+3501155911-3526104374
+2548986102-2564634962
+3263667615-3270390046
+1807095399-1824137700
+856041972-859823687
+3887315148-3892355947
+1030764665-1045428052
+638833662-640333593
+2121184882-2129744090
+2881011537-2885878144
+3588560066-3597713320
+3124980377-3134500989
+489214209-512240639
+3760702359-3764383643
+1090166392-1096894006
+917419134-922706929
+1296067761-1309424658
+689572986-696039127
+2660085630-2660431880
+680230992-716886780
+1592087783-1598197492
+1530767294-1575862739
+2082087967-2085220519
+2424541691-2426736024
+113504564-116385542
+1916132714-1932780572
+503684477-512284558
+2615977363-2622859043
+4035141786-4047227590
+1663548212-1680662689
+3047614614-3051657189
+2634680042-2641014306
+2583260376-2591896929
+2645275066-2647436256
+64047546-86026817
+1071039399-1072162085
+2594771897-2599508024
+83962861-84534191
+902374083-941216585
+2586806577-2599448524
+1274245593-1274516893
+4031038177-4040911753
+983068813-998624841
+534906133-573925401
+3329216543-3336884059
+4125892395-4138236492
+3807924665-3812644495
+1774911-2450996
+446418646-455236779
+2877486448-2884177700
+1373832888-1373901196
+370639181-384962937
+12016954-19316517
+3134500991-3134627688
+1373501126-1373590483
+1777703220-1777741597
+3743473590-3769013947
+2353521003-2362936906
+2468617254-2477279185
+78550601-78698869
+1273031112-1274488766
+968052409-969178069
+3907082563-3913084150
+3322437732-3338709909
+970661335-978617986
+2985507999-2990149897
+1499815926-1518480568
+2047086312-2056763544
+3154050192-3178489168
+1544927329-1559460655
+614918489-621719308
+3733606954-3743473589
+1499734003-1505336823
+1765493480-1780907733
+1112329269-1144192156
+1908189573-1916132712
+2978158245-2980295974
+854842773-855564041
+3851762797-3856667050
+2987912828-2988480807
+3845355673-3864117699
+2372563028-2379155071
+4164107384-4175248779
+206495443-209268583
+2893360924-2906330615
+1374122783-1374244946
+1315210829-1323332739
+2819221138-2820241142
+2987725800-2988399994
+3420480297-3426061444
+1745733189-1750260936
+2771579434-2772910814
+1721651362-1731098010
+1200223043-1222602885
+3431337889-3434193062
+2412323247-2441870430
+3756861847-3771488683
+853629069-857835277
+3744664061-3763198907
+1371491558-1371529465
+1932780573-1939156498
+3661861272-3662675926
+2648267077-2650619730
+3366486664-3371903512
+1268371412-1276470615
+2691106038-2691272785
+3227264064-3240740070
+1906133184-1910990608
+3853470102-3865286420
+2646285040-2646358000
+2196926231-2206264598
+4257710901-4257836607
+242078367-255972629
+4198987003-4201086361
+1240990629-1248211769
+2749992349-2760767131
+2787866331-2806708160
+809302575-853629067
+3032053776-3036049062
+2943717702-2946230991
+4288724821-4289568650
+3215397670-3224618461
+1858955725-1859353621
+2083864513-2101037055
+694973182-718973623
+4168983031-4174451494
+2807055496-2816494071
+1055347167-1064190974
+3424907263-3427071583
+859417782-872292650
+1467661058-1474811610
+2393002352-2403005964
+4197417217-4208856131
+3370246481-3375696999
+1373468974-1373569404
+2905152772-2910933373
+1980855826-1983920990
+732863279-733152241
+4285742284-4286129026
+1614476697-1614835826
+2635427600-2644232203
+1470741851-1479153638
+2944130276-2951908714
+4291064131-4293894991
+1990921080-1991701381
+4227850767-4244632336
+1807565528-1814396331
+2361860677-2376637038
+2943119919-2945768965
+2172859679-2221926662
+249198701-250135569
+2652844144-2657371637
+1885639221-1900413603
+1509729634-1512261818
+3004310417-3011080364
+1694482383-1697891607
+4177987519-4212820708
+4161048921-4161074968
+476220543-480675454
+2588894890-2592105515
+2757311298-2758434349
+4050934926-4082396822
+2034604741-2043305856
+2331464398-2333528059
+1066956928-1067355622
+2646313639-2648035821
+2066636902-2067863299
+2332503976-2334659414
+3180110462-3204410296
+577236362-586064251
+256418607-258764997
+2233705634-2248146735
+3716569187-3719939659
+1386717710-1439035502
+1859175593-1859580659
+3708021302-3722129580
+3976120818-4005662251
+304413124-306709976
+1395309937-1427985546
+4226665082-4232713677
+4212820709-4214429692
+1693249319-1711620669
+2499145063-2503398930
+3721989699-3733606952
+1717757397-1721218576
+1127769041-1132781724
+3644972707-3646872069
+2077152015-2084609524
+1990599678-1991511335
+2335139292-2353521001
+4088569210-4091483373
+1642017342-1657864055
+2588719725-2589121881
+2903005844-2913683635
+194715771-196440167
+3963719430-3974518407
+4288320832-4289172749
+3151726457-3165427383
+23507982-23800784
+2895160172-2940456225
+1001177233-1005263511
+43609109-48863103
+1144192157-1157514424
+734439882-765944362
+695965351-719454865
+856803507-869754401
+1890217805-1904089509
+3300131715-3305283163
+1529237006-1529595328
+2753090359-2757523819
+828668586-831203389
+3427619213-3428732628
+2967859507-2976560941
+2329569453-2332265395
+2239885549-2252296728
+1293808207-1320485733
+2604175022-2624108715
+2697882453-2723829703
+2463205201-2470677980
+3888353469-3890883045
+400102191-427084950
+4150245199-4164107383
+1395492363-1406000929
+3675122217-3676808853
+116414852-148746047
+787563761-789069064
+3197100188-3202418404
+1373782716-1373895006
+2617111647-2617819575
+2550216289-2557881293
+1851804917-1852370216
+2617793199-2618721355
+1939113565-1942772474
+1066259539-1066964651
+2536515-2749485
+3851513911-3872830251
+3315330215-3350319238
+1372313956-1373952939
+270099979-278389263
+2861061889-2874958905
+2982764434-2982918860
+1225710523-1232594859
+3080849793-3087237669
+2168507276-2172859677
+2554045929-2558669015
+2715737041-2742164385
+2564405335-2570912208
+3111405671-3131810967
+1881537985-1906133183
+2327518639-2329278606
+1695964017-1700687554
+2325334299-2328665915
+2329084251-2329569451
+2526389631-2574332443
+2716903062-2718451591
+177141073-177775415
+177103338-177124151
+1072162087-1081552236
+3178535948-3199349236
+2293206667-2314675667
+1889288474-1903754822
+4251848410-4278329656
+697896245-706915923
+1811201479-1827334058
+102113146-112076690
+2390223078-2399260655
+829332527-848880205
+3861878449-3866482364
+1213011864-1220748067
+3580711167-3587101215
+1286680169-1311818230
+3608853495-3610981230
+1511277091-1513257838
+3450147668-3459285977
+2780989504-2803855679
+3882846313-3888163900
+941216586-953952178
+2983401144-2988059936
+2624108716-2624926759
+3402309579-3420480295
+3312749262-3314042171
+3399699391-3418732708
+4105670961-4129433645
+4257493527-4284962279
+23923784-47709067
+953952180-957049748
+2876724088-2878697891
+2416003985-2423463911
+740946393-742024905
+1380318986-1386717709
+2026496387-2041982393
+3072950856-3095969673
+196440168-234297438
+3324520138-3350841770
+1184551931-1197857708
+3723507322-3732029196
+1781641387-1785877866
+2407131596-2409544298
+5689429-5741644
+1739110416-1741141505
+2548794765-2558310137
+808209515-836691306
+2657455751-2663837619
+790539346-793059170
+568516293-569131984
+3321930331-3346790026
+472011317-479941460
+857857646-863011064
+4168502125-4170164107
+588550774-597747807
+1637815642-1662350209
+2460793334-2466026338
+958041100-970661333
+2139217624-2146211143
+2539598-2830629
+1266192646-1268371411
+1323332741-1335959162
+1439736912-1446610546
+4061001198-4065392221
+2524105557-2526389630
+2222452808-2225462596
+1388815777-1397555491
+3612936376-3650645302
+3045926276-3065706826
+3574212945-3575594696
+2827277916-2836024368
+1991475869-1991926125
+3505806023-3528702608
+2414724634-2430851599
+3021588078-3028285988
+2574332445-2592271496
+2057264136-2059202053
+3244432520-3248685694
+1712738962-1729844093
+56528833-64047545
+2971719660-2977620581
+3605787690-3611524810
+3851574035-3854062441
+1235784822-1266192644
+3006793176-3021032700
+3900016789-3922138525
+1234159313-1235784821
+455883118-466326203
+1053312381-1063953379
+2820222101-2821175967
+2502044549-2506260381
+568736374-569251939
+1578664897-1579658724
+344106424-350103368
+1590175536-1595299212
+2273779785-2277363906
+3984562197-4010152611
+45721618-54860968
+3394303383-3402309578
+1511624839-1512608254
+3884829071-3890292172
+2038966626-2047086310
+4103290900-4119641469
+3357139725-3360393033
+2780813493-2807055494
+2225462598-2252329658
+2592271497-2604175020
+1049541136-1055392314
+1533973152-1578664895
+3209140396-3244432519
+3135787447-3178535946
+1873694527-1911946735
+3716488307-3717917511
+1863079077-1868159650
+1852620713-1869463034
+2340761-6722844
+4010806326-4011637774
+2335714002-2344955062
+2503398931-2516105578
+4096488349-4097750835
+495702052-499886980
+2633949022-2643879390
+2230563996-2248676097
+1992368509-1995459736
+725466259-734439880
+3284564906-3289305182
+3006621951-3015555807
+2221926663-2224742001
+1807424325-1816026389
+1876686839-1880758503
+2691158517-2691387740
+3757816372-3758051212
+2956964132-2972741344
+2636000153-2638744402
+678819639-679798433
+250063049-250516719
+3855876124-3866454360
+3312438883-3313193146
+82686086-84339480
+1092916631-1107918456
+1843811214-1852620712
+3809172487-3830073502
+2616993454-2620553751
+2682855477-2715737040
+3863648987-3866503080
+1271724277-1275741880
+2384026814-2393286163
+2957501262-2965749150
+4213745292-4214551645
+2556715457-2565699508
+2263615-2555032
+2510926180-2524105555
+2198333368-2201790504
+983311745-991202543
+326387197-344106423
+3087807140-3088895982
+86026819-109305037
+2504533668-2507452669
+1371550992-1377668791
+1656901715-1676675657
+130445224-140364961
+875328099-885585914
+2299489843-2306253705
+3450835271-3481339653
+4014358521-4031038176
+2340311395-2351064022
+2883149064-2887845481
+2259592077-2278614136
+3810542228-3827200634
+3056035363-3068664010
+722584522-723699159
+1735688023-1740818227
+3537763412-3542953759
+2366293314-2375211143
+1411814377-1424672790
+3100999210-3102484531
+4284962281-4294967295
+1446610547-1465468961
+2874958907-2877486447
+1765556195-1793446949
+4218980804-4226442852
+494048500-497170493
+360027343-374159699
+2651399811-2665409613
+1047578446-1052368079
+2362920294-2374232484
+2570748019-2571266639
+3256410480-3277105765
+3771488685-3794388011
+722551086-722999678
+741060508-762846249
+1479919768-1481248209
+614971153-617471673
+2982621961-2982812184
+2087732105-2106406062
+2302394373-2326071906
+886110869-893987869
+864175670-867272025
+2119076394-2126808897
+1051546928-1062419089
+678814708-679604844
+2168305217-2172141567
+2943803911-2945854166
+321232218-329790306
+391378250-412099930
+539629846-568721146
+3794388012-3806424827
+2894304683-2915255653
+856495621-857857645
+2743551156-2751996369
+1024955451-1026100964
+177078688-177123406
+4018256524-4039886263
+3945209398-3956309725
+2364930647-2378530823
+1006976522-1021887240
+3757741995-3757947507
+1421470109-1432888460
+3160832331-3169658872
+177045468-177087638
+1090463009-1104430857
+1274373481-1274578120
+2626475104-2640453818
+3284290551-3288427229
+1981618690-1984277097
+1186456381-1195032668
+5052363-7502553
+1509795877-1512150519
+3579924616-3582548171
+4121363479-4137513284
+1488580398-1503472581
+2423275742-2439608584
+2138662322-2138915998
+1382223606-1410305514
+3832391075-3853706505
+1614422103-1614651523
+3369142704-3373032779
+719454867-725466258
+2084732810-2095200322
+1442897307-1457439380
+2112887248-2129529980
+4023595164-4025287662
+611715160-617013605
+778751841-791194910
+3293566719-3305859750
+1772772441-1797304174
+1589764874-1592539287
+1373791581-1374176540
+1590792815-1594025491
+1981551967-1982435626
+1520347646-1542585100
+3099494317-3115490452
+3098240473-3103804691
+3264851832-3269554326
+766110784-766211515
+2019539430-2044044979
+3266317108-3273234008
+1274283817-1274437178
+2650371073-2672921107
+2672921108-2679629874
+2673449969-2682855475
+765944363-766205817
+3853706506-3859959741
+1508362252-1513253382
+876916046-879636492
+3809955806-3810745183
+1274121584-1274542630
+3157351170-3166046719
+1053524276-1064827079
+3791652757-3800601148
+2842728202-2853639142
+3571512615-3579166854
+679353613-679923926
+3809191752-3810740480
+2817388396-2819591739
+2852317315-2861061888
+4256942395-4260208971
+3501898903-3512880687
+3882475326-3886137014
+1966578885-1968167855
+410700018-415718837
+3806424829-3821851233
+1518480570-1533973151
+3147464447-3158958125
+197786374-207567591
+3535028299-3539195436
+4184714120-4186894005
+448892515-456388417
+671686622-678352726
+1360272787-1363580702
+2164873145-2165892440
+3361616306-3375689123
+3091164847-3093370647
+3297273994-3311056250
+398273343-404652855
+1782105095-1803766701
+1484145894-1503189992
+2160023298-2160172849
+2919583395-2932229908
+2812705686-2830443941
+2855216236-2865262494
+148746049-149287452
+589888575-595456264
+314410823-316970816
+2060986022-2063938184
+1803766703-1825422528
+2128237894-2139217623
+4248957737-4257018408
+3561933398-3574109426
+1614389854-1614749576
+468854062-476024564
+436179755-463764255
+589811734-589875676
+673967863-678814706
+979844884-993353080
+1945908845-1980551520
+1990017551-1992668548
+1252508632-1256783095
+2946230992-2982621959
+3954810178-3972017471
+3396778325-3399315311
+3331661742-3344656790
+3072306192-3077370803
+4093061872-4094625093
+2876543933-2878230248
+2854310965-2859128779
+4193316980-4200095285
+730205666-732782756
+3676211467-3676732582
+666890880-674578243
+1371568734-1380318984
+4184744194-4187112660
+1481248211-1499734002
+3379867668-3385527932
+1622428665-1625174665
+3671900758-3678171048
+3705951043-3716692751
+1465468963-1479919767
+1580610051-1583129310
+350103370-365345541
+3900102077-3919890024
+2940456227-2945966226
+3248685696-3284290550
+544295457-564157394
+4016705659-4021147057
+791731732-797225629
+1165689597-1184551930
+3289305184-3312438882
+4097750837-4102130426
+4055841302-4077041304
+3441155355-3450835270
+3314042173-3333554945
+597747809-623200754
+356234097-366220597
+2381045649-2408455595
+4047227592-4049208360
+4092327831-4093008849
+3986217544-4010716485
+3587101217-3589409982
+3939796675-3976120816
+1335959163-1365648715
+3809562980-3810806981
+1374160507-1375189297
+1229723962-1229853859
+2978027850-2978555872
+1081232290-1096685438
+3431403369-3441155353
+3058481098-3072306190
+3615995822-3647806423
+626772256-671686621
+1922970278-1932303880
+687812741-696977728
+3664395391-3676520369
+2073554869-2099760007
+512240640-534906131
+47709068-56528831
+255985991-270099977
+3481339655-3501155910
+2238475796-2249793376
+3866035083-3867269474
+4093117795-4094756619
+4285929403-4287400825
+702714634-707275982
+3036049064-3058481097
+1027080396-1032733050
+113815262-115324511
+2256577067-2275122653
+1990217023-1991256560
+109305038-113504562
+978617987-1000518126
+4057509129-4071389442
+3739975721-3747173973
+320182613-320260227
+1770166-1994691
+291087466-296873313
+4086243810-4096488348
+1276470617-1302918078
+4009439486-4012738003
+4229206868-4234285011
+50143427-53071093
+404422891-410359316
+4161013486-4161053283
+911138009-929609461
+689609396-696731723
+2252329659-2256577065
+613133080-613942155
+4795688-12016953
+641672798-650081964
+389776265-420161914
+3625922134-3642274972
+1846384495-1862435820
+2275122654-2286941521
+4005662252-4011759888
+1579087992-1581111352
+574652-1770165
+1442180635-1450176908
+2760767133-2771395260
+1928232572-1932533591
+102995855-104909244
+4049179426-4050691624
+2830630-3651339
+3552827772-3568200782
+2149613227-2163021264
+1355394428-1371491556
+1697279405-1703102679
+2056763545-2073554867
+3935325191-3944187216
+3553082925-3579924615
+471239627-477134321
+3651340-4795687
+336457769-347991249
+93183635-111293337
+2192128388-2196145589
+2584811687-2598361179
+2772743660-2798530311
+966574237-968633571
+4234775226-4245296919
+3662498499-3663349534
+1373549652-1374239894
+58302860-63670232
+1942772476-1980855825
+3367790115-3376760130
+153092723-163571711
+729975675-730335988
+2192513622-2204700032
+809609217-841628900
+1180032684-1187000735
+1179227554-1195640753
+4232727143-4234293540
+1127122996-1154171178
+314709697-321232216
+324796849-347951368
+1095126621-1109642108
+384962939-400102190
+363929652-366175319
+3821851234-3832391073
+338713138-348077886
+817486506-837487497
+1051940232-1067333023
+19243172-19587047
+257512323-261464746
+1753791137-1753975241
+202493249-230688701
+1579363284-1580767164
+2763246325-2780813492
+2242297310-2249800231
+1995459738-2019539429
+573925402-574462282
+3673851405-3681451655
+3423327301-3428356692
+3681451657-3695852450
+3717161710-3718982299
+2043127586-2043244031
+2888999958-2894304682
+2061236903-2067109739
+2643879391-2646512593
+1139540259-1146292375
+3544236730-3552827770
+2287385837-2325334298
+3598404107-3612936374
+3623885184-3631095478
+1752497514-1756572770
+2817718245-2824409717
+679569338-680230991
+4102130427-4150245197
+1869463036-1881600179
+286732642-289325518
+2995454654-3032053775
+1274816430-1274830828
+4008677258-4014358519
+248491486-248842325
+1622000764-1625125474
+1165689487-1187305806
+3937241402-3968405869
+4050691625-4086243808
+3663349535-3676933438
+2982918861-2995454652
+1372603515-1379417540
+2408455596-2411739453
+201820937-227275418
+1753934804-1754073983
+2280075243-2287385835
+2905919817-2917493149
+2757562598-2759204124
+1444583282-1458937548
+1699259773-1707790200
+1579284365-1579540410
+624710045-626772254
+2971742099-2980188298
+3895219248-3896408881
+1637216769-1663878490
+1606776283-1612157133
+1527331165-1569579671
+1468822607-1477434547
+3930477156-3939796674
+4214551647-4234775225
+1469208064-1469259449
+4245296921-4257493526
+3930128245-3930477154
diff --git a/2016/aoc20/src/main.rs b/2016/aoc20/src/main.rs
new file mode 100644
index 0000000..ee14583
--- /dev/null
+++ b/2016/aoc20/src/main.rs
@@ -0,0 +1,114 @@
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+use std::u32;
+
+#[derive(Debug)]
+struct IpRange {
+ start: u32,
+ end: u32
+}
+
+impl IpRange {
+ fn new(start: u32, end: u32) -> IpRange {
+ IpRange {
+ start: start,
+ end: end
+ }
+ }
+
+ fn contains(&self, other: u32) -> bool {
+ self.start <= other && other <= self.end
+ }
+
+ fn try_combine(&self, other: &IpRange) -> Option<IpRange> {
+ if self.contains(other.start) && self.contains(other.end) {
+ Some(IpRange::new(self.start, self.end))
+ }
+ else if other.contains(self.start) && other.contains(self.end) {
+ Some(IpRange::new(other.start, other.end))
+ }
+ else if self.contains(other.start) && other.contains(self.end) {
+ Some(IpRange::new(self.start, other.end))
+ }
+ else if other.contains(self.start) && self.contains(other.end) {
+ Some(IpRange::new(other.start, self.end))
+ }
+ else {
+ None
+ }
+ }
+}
+
+fn main() {
+ let mut ranges = read_file();
+ optimize_ranges(&mut ranges);
+
+ let mut allowed = Vec::new();
+
+ // current will be in the u32 range while it's in the loop, but
+ // needs to be a u64 to pass u32::MAX. Otherwise it will just
+ // overflow and run forever.
+ let mut current: u64 = 0;
+ while current <= u32::MAX as u64 {
+ match ranges.iter().find(|range| range.contains(current as u32)) {
+ Some(blacklisting_range) => {
+ current = blacklisting_range.end as u64 + 1;
+ },
+ None => {
+ allowed.push(current as u32);
+ current += 1;
+ }
+ }
+ }
+
+ let min_not_in_range = allowed[0];
+ let allowed_count = allowed.len();
+
+ println!("Min not in any range: {}", min_not_in_range);
+ println!("Allowed count: {}", allowed_count);
+}
+
+fn read_file() -> Vec<IpRange> {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+ file.lines()
+ .filter_map(|line| {
+ let line = line.unwrap();
+ let mut split = line.split('-');
+ let start = split.next();
+ let end = split.next();
+ match (start, end) {
+ (Some(start), Some(end)) => Some(IpRange {
+ start: start.parse().unwrap(),
+ end: end.parse().unwrap()
+ }),
+ _ => None
+ }
+ })
+ .collect()
+}
+
+fn optimize_ranges(ranges: &mut Vec<IpRange>) {
+ let mut before_count = ranges.len();
+ let mut after_count = 0;
+ while before_count != after_count {
+ before_count = ranges.len();
+ ranges.sort_by_key(|r| r.start);
+
+ let mut i = 0;
+ while i < ranges.len()-1 {
+ match ranges[i].try_combine(&ranges[i+1]) {
+ Some(combined) => {
+ ranges[i] = combined;
+ ranges.remove(i+1);
+ },
+ None => {}
+ }
+ i += 1;
+ }
+
+ after_count = ranges.len();
+
+ println!("Number of ranges {} => {}", before_count, after_count);
+ }
+}
diff --git a/2016/aoc21/Cargo.lock b/2016/aoc21/Cargo.lock
new file mode 100644
index 0000000..9a1075b
--- /dev/null
+++ b/2016/aoc21/Cargo.lock
@@ -0,0 +1,98 @@
+[root]
+name = "aoc21"
+version = "0.1.0"
+dependencies = [
+ "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "memchr"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex"
+version = "0.1.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "thread-id"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "thread_local"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "utf8-ranges"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66"
+"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70"
+"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"
+"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"
+"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"
+"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
+"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5"
+"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"
+"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
diff --git a/2016/aoc21/Cargo.toml b/2016/aoc21/Cargo.toml
new file mode 100644
index 0000000..bc0d468
--- /dev/null
+++ b/2016/aoc21/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc21"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@gmail.com>"]
+
+[dependencies]
+regex = "0.1" \ No newline at end of file
diff --git a/2016/aoc21/input.txt b/2016/aoc21/input.txt
new file mode 100644
index 0000000..ebd7d52
--- /dev/null
+++ b/2016/aoc21/input.txt
@@ -0,0 +1,100 @@
+rotate based on position of letter d
+move position 1 to position 6
+swap position 3 with position 6
+rotate based on position of letter c
+swap position 0 with position 1
+rotate right 5 steps
+rotate left 3 steps
+rotate based on position of letter b
+swap position 0 with position 2
+rotate based on position of letter g
+rotate left 0 steps
+reverse positions 0 through 3
+rotate based on position of letter a
+rotate based on position of letter h
+rotate based on position of letter a
+rotate based on position of letter g
+rotate left 5 steps
+move position 3 to position 7
+rotate right 5 steps
+rotate based on position of letter f
+rotate right 7 steps
+rotate based on position of letter a
+rotate right 6 steps
+rotate based on position of letter a
+swap letter c with letter f
+reverse positions 2 through 6
+rotate left 1 step
+reverse positions 3 through 5
+rotate based on position of letter f
+swap position 6 with position 5
+swap letter h with letter e
+move position 1 to position 3
+swap letter c with letter h
+reverse positions 4 through 7
+swap letter f with letter h
+rotate based on position of letter f
+rotate based on position of letter g
+reverse positions 3 through 4
+rotate left 7 steps
+swap letter h with letter a
+rotate based on position of letter e
+rotate based on position of letter f
+rotate based on position of letter g
+move position 5 to position 0
+rotate based on position of letter c
+reverse positions 3 through 6
+rotate right 4 steps
+move position 1 to position 2
+reverse positions 3 through 6
+swap letter g with letter a
+rotate based on position of letter d
+rotate based on position of letter a
+swap position 0 with position 7
+rotate left 7 steps
+rotate right 2 steps
+rotate right 6 steps
+rotate based on position of letter b
+rotate right 2 steps
+swap position 7 with position 4
+rotate left 4 steps
+rotate left 3 steps
+swap position 2 with position 7
+move position 5 to position 4
+rotate right 3 steps
+rotate based on position of letter g
+move position 1 to position 2
+swap position 7 with position 0
+move position 4 to position 6
+move position 3 to position 0
+rotate based on position of letter f
+swap letter g with letter d
+swap position 1 with position 5
+reverse positions 0 through 2
+swap position 7 with position 3
+rotate based on position of letter g
+swap letter c with letter a
+rotate based on position of letter g
+reverse positions 3 through 5
+move position 6 to position 3
+swap letter b with letter e
+reverse positions 5 through 6
+move position 6 to position 7
+swap letter a with letter e
+swap position 6 with position 2
+move position 4 to position 5
+rotate left 5 steps
+swap letter a with letter d
+swap letter e with letter g
+swap position 3 with position 7
+reverse positions 0 through 5
+swap position 5 with position 7
+swap position 1 with position 7
+swap position 1 with position 7
+rotate right 7 steps
+swap letter f with letter a
+reverse positions 0 through 7
+rotate based on position of letter d
+reverse positions 2 through 4
+swap position 7 with position 1
+swap letter a with letter h
diff --git a/2016/aoc21/src/main.rs b/2016/aoc21/src/main.rs
new file mode 100644
index 0000000..1366f1e
--- /dev/null
+++ b/2016/aoc21/src/main.rs
@@ -0,0 +1,233 @@
+extern crate regex;
+
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+use std::collections::VecDeque;
+
+use regex::Regex;
+
+fn main() {
+ let password = "abcdefgh".to_string();
+ let program = read_file();
+ let scrambled = scramble_password(password, &program);
+ println!("Scrambled password is {}", scrambled);
+ let unscrambled = unscramble_password(scrambled, &program);
+ println!("Which unscrambles to {}", unscrambled);
+
+ let other_scrambled = "fbgdceah".to_string();
+ let other_unscrambled = unscramble_password(other_scrambled, &program);
+
+ println!("Decrypted easter bunny password is {}", other_unscrambled);
+}
+
+fn read_file() -> Vec<String> {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+ file.lines()
+ .map(|line| line.unwrap().trim().to_string())
+ .filter(|line| line.len() > 0)
+ .collect()
+}
+
+fn scramble_password(password: String, program: &Vec<String>) -> String {
+ let mut pass = password.chars().collect::<VecDeque<_>>();
+
+ let instructions = scramble_instruction_set();
+
+ for line in program {
+ for &(ref reg, ref func) in &instructions {
+ let captures = reg.captures(line.as_ref());
+ if captures.is_some() {
+ func(&mut pass, captures.unwrap());
+ }
+ }
+ }
+
+ pass.iter().cloned().collect()
+}
+
+fn unscramble_password(password: String, program: &Vec<String>) -> String {
+ let mut pass = password.chars().collect::<VecDeque<_>>();
+
+ let instructions = unscramble_instruction_set();
+
+ let mut backwards_program = program.clone();
+ backwards_program.reverse();
+ for line in backwards_program {
+ for &(ref reg, ref func) in &instructions {
+ let captures = reg.captures(line.as_ref());
+ if captures.is_some() {
+ func(&mut pass, captures.unwrap());
+ }
+ }
+ }
+
+ pass.iter().cloned().collect()
+}
+
+fn scramble_instruction_set() -> Vec<(Regex, fn(&mut VecDeque<char>, regex::Captures))> {
+ let mut instructions : Vec<(Regex, fn(&mut VecDeque<char>, regex::Captures))> = Vec::new();
+ instructions.push((Regex::new(r"swap position (\d+) with position (\d+)").unwrap(), swap_pos));
+ instructions.push((Regex::new(r"swap letter ([a-z]) with letter ([a-z])").unwrap(), swap_let));
+ instructions.push((Regex::new(r"rotate left (\d+) step").unwrap(), rotate_left));
+ instructions.push((Regex::new(r"rotate right (\d+) step").unwrap(), rotate_right));
+ instructions.push((Regex::new(r"rotate based on position of letter ([a-z])").unwrap(), rotate_pos));
+ instructions.push((Regex::new(r"reverse positions (\d+) through (\d+)").unwrap(), reverse_sub));
+ instructions.push((Regex::new(r"move position (\d+) to position (\d+)").unwrap(), move_pos));
+
+ instructions
+}
+
+fn unscramble_instruction_set() -> Vec<(Regex, fn(&mut VecDeque<char>, regex::Captures))> {
+ let mut instructions : Vec<(Regex, fn(&mut VecDeque<char>, regex::Captures))> = Vec::new();
+ instructions.push((Regex::new(r"swap position (\d+) with position (\d+)").unwrap(), swap_pos));
+ instructions.push((Regex::new(r"swap letter ([a-z]) with letter ([a-z])").unwrap(), swap_let));
+ instructions.push((Regex::new(r"rotate left (\d+) step").unwrap(), rotate_right));
+ instructions.push((Regex::new(r"rotate right (\d+) step").unwrap(), rotate_left));
+ instructions.push((Regex::new(r"rotate based on position of letter ([a-z])").unwrap(), undo_rotate_pos));
+ instructions.push((Regex::new(r"reverse positions (\d+) through (\d+)").unwrap(), reverse_sub));
+ instructions.push((Regex::new(r"move position (\d+) to position (\d+)").unwrap(), undo_move_pos));
+
+ instructions
+}
+
+fn swap_pos(pass: &mut VecDeque<char>, cap: regex::Captures) {
+ let src = cap.at(1).unwrap().parse::<usize>().unwrap();
+ let dest = cap.at(2).unwrap().parse::<usize>().unwrap();
+ pass.swap(src, dest);
+}
+
+fn swap_let(pass: &mut VecDeque<char>, cap: regex::Captures) {
+ let src = cap.at(1).unwrap().chars().next().unwrap();
+ let dest = cap.at(2).unwrap().chars().next().unwrap();
+ let src_position = pass.iter().position(|&c| c == src);
+ let dest_position = pass.iter().position(|&c| c == dest);
+ match (src_position, dest_position) {
+ (Some(src_pos), Some(dest_pos)) => {
+ pass.swap(src_pos, dest_pos);
+ },
+ _ => {}
+ };
+}
+
+fn rotate_left(pass: &mut VecDeque<char>, cap: regex::Captures) {
+ let steps = cap.at(1).unwrap().parse::<usize>().unwrap();
+ for _ in 0..steps {
+ let c = pass.pop_front().unwrap();
+ pass.push_back(c);
+ }
+}
+
+fn rotate_right(pass: &mut VecDeque<char>, cap: regex::Captures) {
+ let steps = cap.at(1).unwrap().parse::<usize>().unwrap();
+ for _ in 0..steps {
+ let c = pass.pop_back().unwrap();
+ pass.push_front(c);
+ }
+}
+
+fn rotate_pos(pass: &mut VecDeque<char>, cap: regex::Captures) {
+ let letter = cap.at(1).unwrap().chars().next().unwrap();
+ let pos = pass.iter().position(|&c| c == letter).unwrap();
+ let steps = 1 + pos + if pos >=4 { 1 } else { 0 };
+ for _ in 0..steps {
+ let c = pass.pop_back().unwrap();
+ pass.push_front(c);
+ }
+}
+
+fn move_pos(pass: &mut VecDeque<char>, cap: regex::Captures) {
+ let src = cap.at(1).unwrap().parse::<usize>().unwrap();
+ let dest = cap.at(2).unwrap().parse::<usize>().unwrap();
+ let c = pass.remove(src).unwrap();
+ pass.insert(dest, c);
+}
+
+fn reverse_sub(pass: &mut VecDeque<char>, cap: regex::Captures) {
+ let mut start = cap.at(1).unwrap().parse::<usize>().unwrap();
+ let mut end = cap.at(2).unwrap().parse::<usize>().unwrap();
+ while start < end {
+ pass.swap(start, end);
+ start += 1;
+ end -= 1;
+ }
+}
+
+fn undo_rotate_pos(pass: &mut VecDeque<char>, cap: regex::Captures) {
+ let letter = cap.at(1).unwrap().chars().next().unwrap();
+ let dest_pos = pass.iter().position(|&c| c == letter).unwrap();
+ let mut pos = dest_pos;
+
+ loop {
+ let c = pass.pop_front().unwrap();
+ pass.push_back(c);
+ pos -= 1;
+ let steps = 1 + pos + if pos >=4 { 1 } else { 0 };
+ if (pos + steps) % pass.len() == dest_pos {
+ break;
+ }
+ }
+}
+
+fn undo_move_pos(pass: &mut VecDeque<char>, cap: regex::Captures) {
+ let src = cap.at(1).unwrap().parse::<usize>().unwrap();
+ let dest = cap.at(2).unwrap().parse::<usize>().unwrap();
+ let c = pass.remove(dest).unwrap();
+ pass.insert(src, c);
+}
+
+#[test]
+fn swap_pos_example() {
+ let instructions = vec!("swap position 4 with position 0".to_string());
+ let password = "abcde".to_string();
+ assert_eq!("ebcda".to_string(), scramble_password(password, instructions));
+}
+
+#[test]
+fn swap_let_example() {
+ let instructions = vec!("swap letter d with letter b".to_string());
+ let password = "ebcda".to_string();
+ assert_eq!("edcba".to_string(), scramble_password(password, instructions));
+}
+
+#[test]
+fn reverse_example() {
+ let instructions = vec!("reverse positions 0 through 4".to_string());
+ let password = "edcba".to_string();
+ assert_eq!("abcde".to_string(), scramble_password(password, instructions));
+}
+
+#[test]
+fn rotate_left_example() {
+ let instructions = vec!("rotate left 1 step".to_string());
+ let password = "abcde".to_string();
+ assert_eq!("bcdea".to_string(), scramble_password(password, instructions));
+}
+
+#[test]
+fn move_example() {
+ let instructions = vec!("move position 3 to position 0".to_string());
+ let password = "bdeac".to_string();
+ assert_eq!("abdec".to_string(), scramble_password(password, instructions));
+}
+
+#[test]
+fn rotate_pos_example_1() {
+ let instructions = vec!("rotate based on position of letter b".to_string());
+ let password = "abdec".to_string();
+ assert_eq!("ecabd".to_string(), scramble_password(password, instructions));
+}
+
+#[test]
+fn rotate_pos_example_2() {
+ let instructions = vec!("rotate based on position of letter d".to_string());
+ let password = "ecabd".to_string();
+ assert_eq!("decab".to_string(), scramble_password(password, instructions));
+}
+
+#[test]
+fn rotate_right_example() {
+ let instructions = vec!("rotate right 2 steps".to_string());
+ let password = "decab".to_string();
+ assert_eq!("abdec".to_string(), scramble_password(password, instructions));
+}
diff --git a/2016/aoc22/Cargo.lock b/2016/aoc22/Cargo.lock
new file mode 100644
index 0000000..81a7213
--- /dev/null
+++ b/2016/aoc22/Cargo.lock
@@ -0,0 +1,98 @@
+[root]
+name = "aoc22"
+version = "0.1.0"
+dependencies = [
+ "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "memchr"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex"
+version = "0.1.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "thread-id"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "thread_local"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "utf8-ranges"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66"
+"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70"
+"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"
+"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"
+"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"
+"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
+"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5"
+"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"
+"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
diff --git a/2016/aoc22/Cargo.toml b/2016/aoc22/Cargo.toml
new file mode 100644
index 0000000..074ccd5
--- /dev/null
+++ b/2016/aoc22/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc22"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@gmail.com>"]
+
+[dependencies]
+regex = "0.1" \ No newline at end of file
diff --git a/2016/aoc22/input.txt b/2016/aoc22/input.txt
new file mode 100644
index 0000000..08e9843
--- /dev/null
+++ b/2016/aoc22/input.txt
@@ -0,0 +1,1017 @@
+root@ebhq-gridcenter# df -h
+Filesystem Size Used Avail Use%
+/dev/grid/node-x0-y0 89T 65T 24T 73%
+/dev/grid/node-x0-y1 92T 64T 28T 69%
+/dev/grid/node-x0-y2 85T 70T 15T 82%
+/dev/grid/node-x0-y3 90T 64T 26T 71%
+/dev/grid/node-x0-y4 86T 72T 14T 83%
+/dev/grid/node-x0-y5 90T 68T 22T 75%
+/dev/grid/node-x0-y6 94T 64T 30T 68%
+/dev/grid/node-x0-y7 87T 72T 15T 82%
+/dev/grid/node-x0-y8 90T 65T 25T 72%
+/dev/grid/node-x0-y9 90T 65T 25T 72%
+/dev/grid/node-x0-y10 89T 66T 23T 74%
+/dev/grid/node-x0-y11 94T 70T 24T 74%
+/dev/grid/node-x0-y12 90T 65T 25T 72%
+/dev/grid/node-x0-y13 91T 72T 19T 79%
+/dev/grid/node-x0-y14 85T 70T 15T 82%
+/dev/grid/node-x0-y15 89T 70T 19T 78%
+/dev/grid/node-x0-y16 90T 66T 24T 73%
+/dev/grid/node-x0-y17 86T 64T 22T 74%
+/dev/grid/node-x0-y18 88T 65T 23T 73%
+/dev/grid/node-x0-y19 85T 68T 17T 80%
+/dev/grid/node-x0-y20 93T 70T 23T 75%
+/dev/grid/node-x0-y21 89T 64T 25T 71%
+/dev/grid/node-x0-y22 87T 67T 20T 77%
+/dev/grid/node-x0-y23 90T 73T 17T 81%
+/dev/grid/node-x0-y24 92T 68T 24T 73%
+/dev/grid/node-x0-y25 88T 69T 19T 78%
+/dev/grid/node-x0-y26 88T 69T 19T 78%
+/dev/grid/node-x0-y27 86T 72T 14T 83%
+/dev/grid/node-x0-y28 92T 71T 21T 77%
+/dev/grid/node-x1-y0 89T 73T 16T 82%
+/dev/grid/node-x1-y1 89T 68T 21T 76%
+/dev/grid/node-x1-y2 94T 70T 24T 74%
+/dev/grid/node-x1-y3 90T 68T 22T 75%
+/dev/grid/node-x1-y4 89T 67T 22T 75%
+/dev/grid/node-x1-y5 90T 70T 20T 77%
+/dev/grid/node-x1-y6 92T 71T 21T 77%
+/dev/grid/node-x1-y7 92T 71T 21T 77%
+/dev/grid/node-x1-y8 86T 73T 13T 84%
+/dev/grid/node-x1-y9 87T 69T 18T 79%
+/dev/grid/node-x1-y10 87T 66T 21T 75%
+/dev/grid/node-x1-y11 85T 72T 13T 84%
+/dev/grid/node-x1-y12 90T 69T 21T 76%
+/dev/grid/node-x1-y13 89T 67T 22T 75%
+/dev/grid/node-x1-y14 90T 65T 25T 72%
+/dev/grid/node-x1-y15 94T 65T 29T 69%
+/dev/grid/node-x1-y16 85T 70T 15T 82%
+/dev/grid/node-x1-y17 93T 64T 29T 68%
+/dev/grid/node-x1-y18 87T 68T 19T 78%
+/dev/grid/node-x1-y19 85T 66T 19T 77%
+/dev/grid/node-x1-y20 90T 72T 18T 80%
+/dev/grid/node-x1-y21 89T 73T 16T 82%
+/dev/grid/node-x1-y22 90T 65T 25T 72%
+/dev/grid/node-x1-y23 91T 72T 19T 79%
+/dev/grid/node-x1-y24 87T 70T 17T 80%
+/dev/grid/node-x1-y25 91T 64T 27T 70%
+/dev/grid/node-x1-y26 90T 64T 26T 71%
+/dev/grid/node-x1-y27 93T 69T 24T 74%
+/dev/grid/node-x1-y28 89T 65T 24T 73%
+/dev/grid/node-x2-y0 89T 72T 17T 80%
+/dev/grid/node-x2-y1 92T 69T 23T 75%
+/dev/grid/node-x2-y2 91T 65T 26T 71%
+/dev/grid/node-x2-y3 86T 73T 13T 84%
+/dev/grid/node-x2-y4 90T 69T 21T 76%
+/dev/grid/node-x2-y5 86T 68T 18T 79%
+/dev/grid/node-x2-y6 91T 70T 21T 76%
+/dev/grid/node-x2-y7 86T 64T 22T 74%
+/dev/grid/node-x2-y8 88T 65T 23T 73%
+/dev/grid/node-x2-y9 94T 73T 21T 77%
+/dev/grid/node-x2-y10 89T 71T 18T 79%
+/dev/grid/node-x2-y11 88T 64T 24T 72%
+/dev/grid/node-x2-y12 92T 71T 21T 77%
+/dev/grid/node-x2-y13 86T 69T 17T 80%
+/dev/grid/node-x2-y14 87T 69T 18T 79%
+/dev/grid/node-x2-y15 93T 71T 22T 76%
+/dev/grid/node-x2-y16 91T 65T 26T 71%
+/dev/grid/node-x2-y17 93T 65T 28T 69%
+/dev/grid/node-x2-y18 86T 69T 17T 80%
+/dev/grid/node-x2-y19 87T 69T 18T 79%
+/dev/grid/node-x2-y20 86T 72T 14T 83%
+/dev/grid/node-x2-y21 86T 73T 13T 84%
+/dev/grid/node-x2-y22 505T 499T 6T 98%
+/dev/grid/node-x2-y23 89T 65T 24T 73%
+/dev/grid/node-x2-y24 92T 64T 28T 69%
+/dev/grid/node-x2-y25 94T 64T 30T 68%
+/dev/grid/node-x2-y26 87T 73T 14T 83%
+/dev/grid/node-x2-y27 87T 69T 18T 79%
+/dev/grid/node-x2-y28 94T 71T 23T 75%
+/dev/grid/node-x3-y0 88T 66T 22T 75%
+/dev/grid/node-x3-y1 91T 69T 22T 75%
+/dev/grid/node-x3-y2 91T 69T 22T 75%
+/dev/grid/node-x3-y3 86T 67T 19T 77%
+/dev/grid/node-x3-y4 90T 64T 26T 71%
+/dev/grid/node-x3-y5 89T 72T 17T 80%
+/dev/grid/node-x3-y6 87T 66T 21T 75%
+/dev/grid/node-x3-y7 90T 68T 22T 75%
+/dev/grid/node-x3-y8 91T 66T 25T 72%
+/dev/grid/node-x3-y9 89T 64T 25T 71%
+/dev/grid/node-x3-y10 92T 67T 25T 72%
+/dev/grid/node-x3-y11 86T 64T 22T 74%
+/dev/grid/node-x3-y12 94T 65T 29T 69%
+/dev/grid/node-x3-y13 91T 70T 21T 76%
+/dev/grid/node-x3-y14 89T 72T 17T 80%
+/dev/grid/node-x3-y15 89T 64T 25T 71%
+/dev/grid/node-x3-y16 85T 73T 12T 85%
+/dev/grid/node-x3-y17 89T 65T 24T 73%
+/dev/grid/node-x3-y18 88T 71T 17T 80%
+/dev/grid/node-x3-y19 89T 69T 20T 77%
+/dev/grid/node-x3-y20 91T 68T 23T 74%
+/dev/grid/node-x3-y21 90T 72T 18T 80%
+/dev/grid/node-x3-y22 505T 498T 7T 98%
+/dev/grid/node-x3-y23 85T 65T 20T 76%
+/dev/grid/node-x3-y24 94T 72T 22T 76%
+/dev/grid/node-x3-y25 90T 68T 22T 75%
+/dev/grid/node-x3-y26 90T 65T 25T 72%
+/dev/grid/node-x3-y27 87T 66T 21T 75%
+/dev/grid/node-x3-y28 90T 66T 24T 73%
+/dev/grid/node-x4-y0 86T 67T 19T 77%
+/dev/grid/node-x4-y1 92T 67T 25T 72%
+/dev/grid/node-x4-y2 91T 71T 20T 78%
+/dev/grid/node-x4-y3 94T 69T 25T 73%
+/dev/grid/node-x4-y4 90T 64T 26T 71%
+/dev/grid/node-x4-y5 93T 70T 23T 75%
+/dev/grid/node-x4-y6 93T 67T 26T 72%
+/dev/grid/node-x4-y7 91T 71T 20T 78%
+/dev/grid/node-x4-y8 90T 70T 20T 77%
+/dev/grid/node-x4-y9 89T 66T 23T 74%
+/dev/grid/node-x4-y10 94T 64T 30T 68%
+/dev/grid/node-x4-y11 94T 70T 24T 74%
+/dev/grid/node-x4-y12 89T 69T 20T 77%
+/dev/grid/node-x4-y13 90T 72T 18T 80%
+/dev/grid/node-x4-y14 88T 69T 19T 78%
+/dev/grid/node-x4-y15 85T 64T 21T 75%
+/dev/grid/node-x4-y16 86T 71T 15T 82%
+/dev/grid/node-x4-y17 90T 65T 25T 72%
+/dev/grid/node-x4-y18 88T 65T 23T 73%
+/dev/grid/node-x4-y19 91T 71T 20T 78%
+/dev/grid/node-x4-y20 94T 71T 23T 75%
+/dev/grid/node-x4-y21 91T 65T 26T 71%
+/dev/grid/node-x4-y22 510T 491T 19T 96%
+/dev/grid/node-x4-y23 86T 72T 14T 83%
+/dev/grid/node-x4-y24 91T 69T 22T 75%
+/dev/grid/node-x4-y25 93T 64T 29T 68%
+/dev/grid/node-x4-y26 92T 65T 27T 70%
+/dev/grid/node-x4-y27 91T 67T 24T 73%
+/dev/grid/node-x4-y28 93T 66T 27T 70%
+/dev/grid/node-x5-y0 85T 70T 15T 82%
+/dev/grid/node-x5-y1 90T 71T 19T 78%
+/dev/grid/node-x5-y2 94T 68T 26T 72%
+/dev/grid/node-x5-y3 88T 73T 15T 82%
+/dev/grid/node-x5-y4 85T 71T 14T 83%
+/dev/grid/node-x5-y5 92T 67T 25T 72%
+/dev/grid/node-x5-y6 92T 68T 24T 73%
+/dev/grid/node-x5-y7 86T 69T 17T 80%
+/dev/grid/node-x5-y8 90T 64T 26T 71%
+/dev/grid/node-x5-y9 88T 71T 17T 80%
+/dev/grid/node-x5-y10 91T 65T 26T 71%
+/dev/grid/node-x5-y11 92T 65T 27T 70%
+/dev/grid/node-x5-y12 87T 66T 21T 75%
+/dev/grid/node-x5-y13 87T 71T 16T 81%
+/dev/grid/node-x5-y14 90T 67T 23T 74%
+/dev/grid/node-x5-y15 92T 70T 22T 76%
+/dev/grid/node-x5-y16 94T 66T 28T 70%
+/dev/grid/node-x5-y17 88T 68T 20T 77%
+/dev/grid/node-x5-y18 86T 69T 17T 80%
+/dev/grid/node-x5-y19 94T 66T 28T 70%
+/dev/grid/node-x5-y20 90T 69T 21T 76%
+/dev/grid/node-x5-y21 88T 71T 17T 80%
+/dev/grid/node-x5-y22 509T 496T 13T 97%
+/dev/grid/node-x5-y23 87T 67T 20T 77%
+/dev/grid/node-x5-y24 91T 64T 27T 70%
+/dev/grid/node-x5-y25 93T 69T 24T 74%
+/dev/grid/node-x5-y26 93T 73T 20T 78%
+/dev/grid/node-x5-y27 88T 70T 18T 79%
+/dev/grid/node-x5-y28 87T 73T 14T 83%
+/dev/grid/node-x6-y0 87T 65T 22T 74%
+/dev/grid/node-x6-y1 85T 64T 21T 75%
+/dev/grid/node-x6-y2 91T 72T 19T 79%
+/dev/grid/node-x6-y3 90T 64T 26T 71%
+/dev/grid/node-x6-y4 93T 66T 27T 70%
+/dev/grid/node-x6-y5 93T 67T 26T 72%
+/dev/grid/node-x6-y6 89T 64T 25T 71%
+/dev/grid/node-x6-y7 89T 64T 25T 71%
+/dev/grid/node-x6-y8 86T 72T 14T 83%
+/dev/grid/node-x6-y9 87T 68T 19T 78%
+/dev/grid/node-x6-y10 94T 73T 21T 77%
+/dev/grid/node-x6-y11 88T 65T 23T 73%
+/dev/grid/node-x6-y12 88T 70T 18T 79%
+/dev/grid/node-x6-y13 93T 66T 27T 70%
+/dev/grid/node-x6-y14 87T 68T 19T 78%
+/dev/grid/node-x6-y15 87T 68T 19T 78%
+/dev/grid/node-x6-y16 87T 73T 14T 83%
+/dev/grid/node-x6-y17 87T 70T 17T 80%
+/dev/grid/node-x6-y18 87T 69T 18T 79%
+/dev/grid/node-x6-y19 85T 67T 18T 78%
+/dev/grid/node-x6-y20 91T 71T 20T 78%
+/dev/grid/node-x6-y21 86T 72T 14T 83%
+/dev/grid/node-x6-y22 503T 497T 6T 98%
+/dev/grid/node-x6-y23 93T 72T 21T 77%
+/dev/grid/node-x6-y24 91T 72T 19T 79%
+/dev/grid/node-x6-y25 85T 67T 18T 78%
+/dev/grid/node-x6-y26 86T 65T 21T 75%
+/dev/grid/node-x6-y27 92T 67T 25T 72%
+/dev/grid/node-x6-y28 87T 72T 15T 82%
+/dev/grid/node-x7-y0 88T 67T 21T 76%
+/dev/grid/node-x7-y1 85T 64T 21T 75%
+/dev/grid/node-x7-y2 90T 67T 23T 74%
+/dev/grid/node-x7-y3 87T 65T 22T 74%
+/dev/grid/node-x7-y4 92T 70T 22T 76%
+/dev/grid/node-x7-y5 89T 67T 22T 75%
+/dev/grid/node-x7-y6 90T 65T 25T 72%
+/dev/grid/node-x7-y7 88T 66T 22T 75%
+/dev/grid/node-x7-y8 88T 65T 23T 73%
+/dev/grid/node-x7-y9 93T 72T 21T 77%
+/dev/grid/node-x7-y10 91T 70T 21T 76%
+/dev/grid/node-x7-y11 90T 70T 20T 77%
+/dev/grid/node-x7-y12 89T 68T 21T 76%
+/dev/grid/node-x7-y13 91T 65T 26T 71%
+/dev/grid/node-x7-y14 90T 65T 25T 72%
+/dev/grid/node-x7-y15 85T 65T 20T 76%
+/dev/grid/node-x7-y16 91T 65T 26T 71%
+/dev/grid/node-x7-y17 89T 72T 17T 80%
+/dev/grid/node-x7-y18 88T 65T 23T 73%
+/dev/grid/node-x7-y19 94T 72T 22T 76%
+/dev/grid/node-x7-y20 85T 73T 12T 85%
+/dev/grid/node-x7-y21 85T 68T 17T 80%
+/dev/grid/node-x7-y22 507T 497T 10T 98%
+/dev/grid/node-x7-y23 91T 69T 22T 75%
+/dev/grid/node-x7-y24 93T 68T 25T 73%
+/dev/grid/node-x7-y25 90T 72T 18T 80%
+/dev/grid/node-x7-y26 91T 70T 21T 76%
+/dev/grid/node-x7-y27 93T 65T 28T 69%
+/dev/grid/node-x7-y28 91T 64T 27T 70%
+/dev/grid/node-x8-y0 86T 71T 15T 82%
+/dev/grid/node-x8-y1 88T 69T 19T 78%
+/dev/grid/node-x8-y2 90T 64T 26T 71%
+/dev/grid/node-x8-y3 92T 67T 25T 72%
+/dev/grid/node-x8-y4 86T 71T 15T 82%
+/dev/grid/node-x8-y5 88T 68T 20T 77%
+/dev/grid/node-x8-y6 90T 71T 19T 78%
+/dev/grid/node-x8-y7 86T 70T 16T 81%
+/dev/grid/node-x8-y8 87T 72T 15T 82%
+/dev/grid/node-x8-y9 93T 67T 26T 72%
+/dev/grid/node-x8-y10 93T 65T 28T 69%
+/dev/grid/node-x8-y11 94T 66T 28T 70%
+/dev/grid/node-x8-y12 92T 70T 22T 76%
+/dev/grid/node-x8-y13 91T 68T 23T 74%
+/dev/grid/node-x8-y14 93T 72T 21T 77%
+/dev/grid/node-x8-y15 90T 71T 19T 78%
+/dev/grid/node-x8-y16 87T 73T 14T 83%
+/dev/grid/node-x8-y17 86T 73T 13T 84%
+/dev/grid/node-x8-y18 89T 68T 21T 76%
+/dev/grid/node-x8-y19 88T 67T 21T 76%
+/dev/grid/node-x8-y20 87T 64T 23T 73%
+/dev/grid/node-x8-y21 90T 71T 19T 78%
+/dev/grid/node-x8-y22 505T 497T 8T 98%
+/dev/grid/node-x8-y23 92T 72T 20T 78%
+/dev/grid/node-x8-y24 86T 70T 16T 81%
+/dev/grid/node-x8-y25 92T 69T 23T 75%
+/dev/grid/node-x8-y26 93T 71T 22T 76%
+/dev/grid/node-x8-y27 91T 70T 21T 76%
+/dev/grid/node-x8-y28 92T 0T 92T 0%
+/dev/grid/node-x9-y0 87T 69T 18T 79%
+/dev/grid/node-x9-y1 90T 69T 21T 76%
+/dev/grid/node-x9-y2 91T 69T 22T 75%
+/dev/grid/node-x9-y3 92T 71T 21T 77%
+/dev/grid/node-x9-y4 91T 66T 25T 72%
+/dev/grid/node-x9-y5 92T 65T 27T 70%
+/dev/grid/node-x9-y6 87T 71T 16T 81%
+/dev/grid/node-x9-y7 88T 68T 20T 77%
+/dev/grid/node-x9-y8 85T 67T 18T 78%
+/dev/grid/node-x9-y9 86T 65T 21T 75%
+/dev/grid/node-x9-y10 88T 64T 24T 72%
+/dev/grid/node-x9-y11 90T 70T 20T 77%
+/dev/grid/node-x9-y12 88T 64T 24T 72%
+/dev/grid/node-x9-y13 85T 69T 16T 81%
+/dev/grid/node-x9-y14 85T 71T 14T 83%
+/dev/grid/node-x9-y15 92T 70T 22T 76%
+/dev/grid/node-x9-y16 92T 65T 27T 70%
+/dev/grid/node-x9-y17 89T 66T 23T 74%
+/dev/grid/node-x9-y18 85T 69T 16T 81%
+/dev/grid/node-x9-y19 94T 69T 25T 73%
+/dev/grid/node-x9-y20 92T 66T 26T 71%
+/dev/grid/node-x9-y21 88T 70T 18T 79%
+/dev/grid/node-x9-y22 507T 498T 9T 98%
+/dev/grid/node-x9-y23 86T 68T 18T 79%
+/dev/grid/node-x9-y24 90T 69T 21T 76%
+/dev/grid/node-x9-y25 87T 65T 22T 74%
+/dev/grid/node-x9-y26 86T 71T 15T 82%
+/dev/grid/node-x9-y27 85T 65T 20T 76%
+/dev/grid/node-x9-y28 87T 70T 17T 80%
+/dev/grid/node-x10-y0 91T 64T 27T 70%
+/dev/grid/node-x10-y1 92T 65T 27T 70%
+/dev/grid/node-x10-y2 89T 66T 23T 74%
+/dev/grid/node-x10-y3 94T 64T 30T 68%
+/dev/grid/node-x10-y4 92T 69T 23T 75%
+/dev/grid/node-x10-y5 91T 64T 27T 70%
+/dev/grid/node-x10-y6 86T 72T 14T 83%
+/dev/grid/node-x10-y7 87T 66T 21T 75%
+/dev/grid/node-x10-y8 90T 73T 17T 81%
+/dev/grid/node-x10-y9 91T 73T 18T 80%
+/dev/grid/node-x10-y10 94T 71T 23T 75%
+/dev/grid/node-x10-y11 94T 71T 23T 75%
+/dev/grid/node-x10-y12 92T 67T 25T 72%
+/dev/grid/node-x10-y13 92T 66T 26T 71%
+/dev/grid/node-x10-y14 86T 66T 20T 76%
+/dev/grid/node-x10-y15 93T 73T 20T 78%
+/dev/grid/node-x10-y16 92T 66T 26T 71%
+/dev/grid/node-x10-y17 92T 71T 21T 77%
+/dev/grid/node-x10-y18 86T 65T 21T 75%
+/dev/grid/node-x10-y19 92T 68T 24T 73%
+/dev/grid/node-x10-y20 87T 66T 21T 75%
+/dev/grid/node-x10-y21 90T 65T 25T 72%
+/dev/grid/node-x10-y22 501T 494T 7T 98%
+/dev/grid/node-x10-y23 87T 66T 21T 75%
+/dev/grid/node-x10-y24 85T 69T 16T 81%
+/dev/grid/node-x10-y25 90T 72T 18T 80%
+/dev/grid/node-x10-y26 94T 69T 25T 73%
+/dev/grid/node-x10-y27 86T 69T 17T 80%
+/dev/grid/node-x10-y28 90T 68T 22T 75%
+/dev/grid/node-x11-y0 90T 65T 25T 72%
+/dev/grid/node-x11-y1 90T 70T 20T 77%
+/dev/grid/node-x11-y2 94T 69T 25T 73%
+/dev/grid/node-x11-y3 92T 72T 20T 78%
+/dev/grid/node-x11-y4 93T 67T 26T 72%
+/dev/grid/node-x11-y5 89T 70T 19T 78%
+/dev/grid/node-x11-y6 87T 66T 21T 75%
+/dev/grid/node-x11-y7 92T 70T 22T 76%
+/dev/grid/node-x11-y8 93T 71T 22T 76%
+/dev/grid/node-x11-y9 93T 68T 25T 73%
+/dev/grid/node-x11-y10 85T 65T 20T 76%
+/dev/grid/node-x11-y11 90T 72T 18T 80%
+/dev/grid/node-x11-y12 89T 65T 24T 73%
+/dev/grid/node-x11-y13 86T 69T 17T 80%
+/dev/grid/node-x11-y14 93T 73T 20T 78%
+/dev/grid/node-x11-y15 93T 68T 25T 73%
+/dev/grid/node-x11-y16 92T 72T 20T 78%
+/dev/grid/node-x11-y17 85T 71T 14T 83%
+/dev/grid/node-x11-y18 90T 68T 22T 75%
+/dev/grid/node-x11-y19 90T 69T 21T 76%
+/dev/grid/node-x11-y20 85T 73T 12T 85%
+/dev/grid/node-x11-y21 93T 68T 25T 73%
+/dev/grid/node-x11-y22 504T 491T 13T 97%
+/dev/grid/node-x11-y23 87T 69T 18T 79%
+/dev/grid/node-x11-y24 88T 65T 23T 73%
+/dev/grid/node-x11-y25 94T 67T 27T 71%
+/dev/grid/node-x11-y26 92T 73T 19T 79%
+/dev/grid/node-x11-y27 87T 64T 23T 73%
+/dev/grid/node-x11-y28 89T 70T 19T 78%
+/dev/grid/node-x12-y0 88T 73T 15T 82%
+/dev/grid/node-x12-y1 90T 68T 22T 75%
+/dev/grid/node-x12-y2 85T 65T 20T 76%
+/dev/grid/node-x12-y3 94T 71T 23T 75%
+/dev/grid/node-x12-y4 86T 68T 18T 79%
+/dev/grid/node-x12-y5 89T 67T 22T 75%
+/dev/grid/node-x12-y6 89T 71T 18T 79%
+/dev/grid/node-x12-y7 85T 68T 17T 80%
+/dev/grid/node-x12-y8 94T 68T 26T 72%
+/dev/grid/node-x12-y9 91T 71T 20T 78%
+/dev/grid/node-x12-y10 91T 65T 26T 71%
+/dev/grid/node-x12-y11 91T 71T 20T 78%
+/dev/grid/node-x12-y12 85T 65T 20T 76%
+/dev/grid/node-x12-y13 89T 71T 18T 79%
+/dev/grid/node-x12-y14 85T 70T 15T 82%
+/dev/grid/node-x12-y15 92T 73T 19T 79%
+/dev/grid/node-x12-y16 94T 66T 28T 70%
+/dev/grid/node-x12-y17 90T 72T 18T 80%
+/dev/grid/node-x12-y18 90T 64T 26T 71%
+/dev/grid/node-x12-y19 87T 72T 15T 82%
+/dev/grid/node-x12-y20 89T 70T 19T 78%
+/dev/grid/node-x12-y21 90T 66T 24T 73%
+/dev/grid/node-x12-y22 506T 497T 9T 98%
+/dev/grid/node-x12-y23 90T 67T 23T 74%
+/dev/grid/node-x12-y24 85T 67T 18T 78%
+/dev/grid/node-x12-y25 85T 72T 13T 84%
+/dev/grid/node-x12-y26 94T 71T 23T 75%
+/dev/grid/node-x12-y27 92T 64T 28T 69%
+/dev/grid/node-x12-y28 90T 65T 25T 72%
+/dev/grid/node-x13-y0 85T 72T 13T 84%
+/dev/grid/node-x13-y1 93T 67T 26T 72%
+/dev/grid/node-x13-y2 94T 64T 30T 68%
+/dev/grid/node-x13-y3 85T 71T 14T 83%
+/dev/grid/node-x13-y4 93T 71T 22T 76%
+/dev/grid/node-x13-y5 85T 67T 18T 78%
+/dev/grid/node-x13-y6 91T 68T 23T 74%
+/dev/grid/node-x13-y7 92T 66T 26T 71%
+/dev/grid/node-x13-y8 88T 66T 22T 75%
+/dev/grid/node-x13-y9 91T 72T 19T 79%
+/dev/grid/node-x13-y10 89T 72T 17T 80%
+/dev/grid/node-x13-y11 90T 68T 22T 75%
+/dev/grid/node-x13-y12 89T 65T 24T 73%
+/dev/grid/node-x13-y13 90T 69T 21T 76%
+/dev/grid/node-x13-y14 86T 64T 22T 74%
+/dev/grid/node-x13-y15 91T 65T 26T 71%
+/dev/grid/node-x13-y16 86T 72T 14T 83%
+/dev/grid/node-x13-y17 85T 71T 14T 83%
+/dev/grid/node-x13-y18 85T 68T 17T 80%
+/dev/grid/node-x13-y19 91T 69T 22T 75%
+/dev/grid/node-x13-y20 87T 70T 17T 80%
+/dev/grid/node-x13-y21 94T 65T 29T 69%
+/dev/grid/node-x13-y22 503T 492T 11T 97%
+/dev/grid/node-x13-y23 91T 70T 21T 76%
+/dev/grid/node-x13-y24 91T 66T 25T 72%
+/dev/grid/node-x13-y25 88T 64T 24T 72%
+/dev/grid/node-x13-y26 87T 70T 17T 80%
+/dev/grid/node-x13-y27 91T 66T 25T 72%
+/dev/grid/node-x13-y28 86T 68T 18T 79%
+/dev/grid/node-x14-y0 85T 67T 18T 78%
+/dev/grid/node-x14-y1 87T 70T 17T 80%
+/dev/grid/node-x14-y2 92T 67T 25T 72%
+/dev/grid/node-x14-y3 87T 64T 23T 73%
+/dev/grid/node-x14-y4 92T 73T 19T 79%
+/dev/grid/node-x14-y5 86T 66T 20T 76%
+/dev/grid/node-x14-y6 89T 69T 20T 77%
+/dev/grid/node-x14-y7 89T 67T 22T 75%
+/dev/grid/node-x14-y8 89T 70T 19T 78%
+/dev/grid/node-x14-y9 91T 70T 21T 76%
+/dev/grid/node-x14-y10 87T 70T 17T 80%
+/dev/grid/node-x14-y11 86T 66T 20T 76%
+/dev/grid/node-x14-y12 92T 67T 25T 72%
+/dev/grid/node-x14-y13 87T 68T 19T 78%
+/dev/grid/node-x14-y14 94T 65T 29T 69%
+/dev/grid/node-x14-y15 93T 68T 25T 73%
+/dev/grid/node-x14-y16 87T 66T 21T 75%
+/dev/grid/node-x14-y17 90T 70T 20T 77%
+/dev/grid/node-x14-y18 90T 66T 24T 73%
+/dev/grid/node-x14-y19 89T 71T 18T 79%
+/dev/grid/node-x14-y20 85T 72T 13T 84%
+/dev/grid/node-x14-y21 90T 66T 24T 73%
+/dev/grid/node-x14-y22 504T 491T 13T 97%
+/dev/grid/node-x14-y23 90T 71T 19T 78%
+/dev/grid/node-x14-y24 94T 68T 26T 72%
+/dev/grid/node-x14-y25 91T 73T 18T 80%
+/dev/grid/node-x14-y26 88T 68T 20T 77%
+/dev/grid/node-x14-y27 86T 66T 20T 76%
+/dev/grid/node-x14-y28 92T 70T 22T 76%
+/dev/grid/node-x15-y0 91T 73T 18T 80%
+/dev/grid/node-x15-y1 85T 65T 20T 76%
+/dev/grid/node-x15-y2 88T 67T 21T 76%
+/dev/grid/node-x15-y3 91T 66T 25T 72%
+/dev/grid/node-x15-y4 92T 65T 27T 70%
+/dev/grid/node-x15-y5 94T 66T 28T 70%
+/dev/grid/node-x15-y6 90T 67T 23T 74%
+/dev/grid/node-x15-y7 91T 72T 19T 79%
+/dev/grid/node-x15-y8 88T 65T 23T 73%
+/dev/grid/node-x15-y9 90T 66T 24T 73%
+/dev/grid/node-x15-y10 86T 69T 17T 80%
+/dev/grid/node-x15-y11 89T 67T 22T 75%
+/dev/grid/node-x15-y12 86T 67T 19T 77%
+/dev/grid/node-x15-y13 85T 65T 20T 76%
+/dev/grid/node-x15-y14 92T 68T 24T 73%
+/dev/grid/node-x15-y15 85T 73T 12T 85%
+/dev/grid/node-x15-y16 86T 65T 21T 75%
+/dev/grid/node-x15-y17 92T 69T 23T 75%
+/dev/grid/node-x15-y18 87T 72T 15T 82%
+/dev/grid/node-x15-y19 92T 64T 28T 69%
+/dev/grid/node-x15-y20 92T 71T 21T 77%
+/dev/grid/node-x15-y21 86T 71T 15T 82%
+/dev/grid/node-x15-y22 501T 494T 7T 98%
+/dev/grid/node-x15-y23 93T 65T 28T 69%
+/dev/grid/node-x15-y24 85T 71T 14T 83%
+/dev/grid/node-x15-y25 90T 66T 24T 73%
+/dev/grid/node-x15-y26 87T 67T 20T 77%
+/dev/grid/node-x15-y27 90T 70T 20T 77%
+/dev/grid/node-x15-y28 89T 71T 18T 79%
+/dev/grid/node-x16-y0 91T 72T 19T 79%
+/dev/grid/node-x16-y1 91T 65T 26T 71%
+/dev/grid/node-x16-y2 90T 64T 26T 71%
+/dev/grid/node-x16-y3 87T 67T 20T 77%
+/dev/grid/node-x16-y4 86T 66T 20T 76%
+/dev/grid/node-x16-y5 88T 73T 15T 82%
+/dev/grid/node-x16-y6 85T 68T 17T 80%
+/dev/grid/node-x16-y7 86T 66T 20T 76%
+/dev/grid/node-x16-y8 91T 69T 22T 75%
+/dev/grid/node-x16-y9 87T 66T 21T 75%
+/dev/grid/node-x16-y10 86T 72T 14T 83%
+/dev/grid/node-x16-y11 90T 66T 24T 73%
+/dev/grid/node-x16-y12 85T 72T 13T 84%
+/dev/grid/node-x16-y13 88T 71T 17T 80%
+/dev/grid/node-x16-y14 90T 70T 20T 77%
+/dev/grid/node-x16-y15 91T 71T 20T 78%
+/dev/grid/node-x16-y16 86T 70T 16T 81%
+/dev/grid/node-x16-y17 86T 73T 13T 84%
+/dev/grid/node-x16-y18 88T 66T 22T 75%
+/dev/grid/node-x16-y19 92T 67T 25T 72%
+/dev/grid/node-x16-y20 92T 73T 19T 79%
+/dev/grid/node-x16-y21 94T 71T 23T 75%
+/dev/grid/node-x16-y22 507T 498T 9T 98%
+/dev/grid/node-x16-y23 92T 72T 20T 78%
+/dev/grid/node-x16-y24 85T 72T 13T 84%
+/dev/grid/node-x16-y25 88T 66T 22T 75%
+/dev/grid/node-x16-y26 92T 67T 25T 72%
+/dev/grid/node-x16-y27 94T 64T 30T 68%
+/dev/grid/node-x16-y28 86T 66T 20T 76%
+/dev/grid/node-x17-y0 88T 65T 23T 73%
+/dev/grid/node-x17-y1 85T 66T 19T 77%
+/dev/grid/node-x17-y2 88T 70T 18T 79%
+/dev/grid/node-x17-y3 89T 68T 21T 76%
+/dev/grid/node-x17-y4 89T 68T 21T 76%
+/dev/grid/node-x17-y5 94T 69T 25T 73%
+/dev/grid/node-x17-y6 85T 66T 19T 77%
+/dev/grid/node-x17-y7 93T 67T 26T 72%
+/dev/grid/node-x17-y8 87T 67T 20T 77%
+/dev/grid/node-x17-y9 94T 67T 27T 71%
+/dev/grid/node-x17-y10 92T 64T 28T 69%
+/dev/grid/node-x17-y11 94T 68T 26T 72%
+/dev/grid/node-x17-y12 85T 66T 19T 77%
+/dev/grid/node-x17-y13 87T 68T 19T 78%
+/dev/grid/node-x17-y14 89T 65T 24T 73%
+/dev/grid/node-x17-y15 94T 69T 25T 73%
+/dev/grid/node-x17-y16 90T 69T 21T 76%
+/dev/grid/node-x17-y17 85T 66T 19T 77%
+/dev/grid/node-x17-y18 91T 68T 23T 74%
+/dev/grid/node-x17-y19 89T 73T 16T 82%
+/dev/grid/node-x17-y20 94T 66T 28T 70%
+/dev/grid/node-x17-y21 91T 68T 23T 74%
+/dev/grid/node-x17-y22 509T 499T 10T 98%
+/dev/grid/node-x17-y23 89T 69T 20T 77%
+/dev/grid/node-x17-y24 91T 64T 27T 70%
+/dev/grid/node-x17-y25 89T 66T 23T 74%
+/dev/grid/node-x17-y26 91T 72T 19T 79%
+/dev/grid/node-x17-y27 93T 69T 24T 74%
+/dev/grid/node-x17-y28 87T 73T 14T 83%
+/dev/grid/node-x18-y0 85T 69T 16T 81%
+/dev/grid/node-x18-y1 90T 65T 25T 72%
+/dev/grid/node-x18-y2 85T 69T 16T 81%
+/dev/grid/node-x18-y3 89T 66T 23T 74%
+/dev/grid/node-x18-y4 88T 69T 19T 78%
+/dev/grid/node-x18-y5 90T 70T 20T 77%
+/dev/grid/node-x18-y6 90T 69T 21T 76%
+/dev/grid/node-x18-y7 92T 67T 25T 72%
+/dev/grid/node-x18-y8 85T 64T 21T 75%
+/dev/grid/node-x18-y9 86T 68T 18T 79%
+/dev/grid/node-x18-y10 89T 66T 23T 74%
+/dev/grid/node-x18-y11 87T 70T 17T 80%
+/dev/grid/node-x18-y12 93T 68T 25T 73%
+/dev/grid/node-x18-y13 89T 67T 22T 75%
+/dev/grid/node-x18-y14 91T 66T 25T 72%
+/dev/grid/node-x18-y15 91T 65T 26T 71%
+/dev/grid/node-x18-y16 90T 66T 24T 73%
+/dev/grid/node-x18-y17 85T 69T 16T 81%
+/dev/grid/node-x18-y18 93T 70T 23T 75%
+/dev/grid/node-x18-y19 93T 64T 29T 68%
+/dev/grid/node-x18-y20 87T 70T 17T 80%
+/dev/grid/node-x18-y21 87T 73T 14T 83%
+/dev/grid/node-x18-y22 503T 498T 5T 99%
+/dev/grid/node-x18-y23 92T 68T 24T 73%
+/dev/grid/node-x18-y24 88T 68T 20T 77%
+/dev/grid/node-x18-y25 94T 64T 30T 68%
+/dev/grid/node-x18-y26 93T 66T 27T 70%
+/dev/grid/node-x18-y27 90T 67T 23T 74%
+/dev/grid/node-x18-y28 89T 67T 22T 75%
+/dev/grid/node-x19-y0 91T 67T 24T 73%
+/dev/grid/node-x19-y1 87T 64T 23T 73%
+/dev/grid/node-x19-y2 94T 64T 30T 68%
+/dev/grid/node-x19-y3 90T 71T 19T 78%
+/dev/grid/node-x19-y4 88T 66T 22T 75%
+/dev/grid/node-x19-y5 93T 69T 24T 74%
+/dev/grid/node-x19-y6 89T 73T 16T 82%
+/dev/grid/node-x19-y7 91T 68T 23T 74%
+/dev/grid/node-x19-y8 89T 67T 22T 75%
+/dev/grid/node-x19-y9 90T 72T 18T 80%
+/dev/grid/node-x19-y10 93T 73T 20T 78%
+/dev/grid/node-x19-y11 88T 70T 18T 79%
+/dev/grid/node-x19-y12 89T 67T 22T 75%
+/dev/grid/node-x19-y13 91T 65T 26T 71%
+/dev/grid/node-x19-y14 92T 67T 25T 72%
+/dev/grid/node-x19-y15 88T 69T 19T 78%
+/dev/grid/node-x19-y16 93T 72T 21T 77%
+/dev/grid/node-x19-y17 88T 64T 24T 72%
+/dev/grid/node-x19-y18 88T 67T 21T 76%
+/dev/grid/node-x19-y19 85T 65T 20T 76%
+/dev/grid/node-x19-y20 90T 68T 22T 75%
+/dev/grid/node-x19-y21 88T 65T 23T 73%
+/dev/grid/node-x19-y22 508T 498T 10T 98%
+/dev/grid/node-x19-y23 93T 65T 28T 69%
+/dev/grid/node-x19-y24 85T 67T 18T 78%
+/dev/grid/node-x19-y25 92T 65T 27T 70%
+/dev/grid/node-x19-y26 92T 67T 25T 72%
+/dev/grid/node-x19-y27 91T 65T 26T 71%
+/dev/grid/node-x19-y28 91T 73T 18T 80%
+/dev/grid/node-x20-y0 86T 64T 22T 74%
+/dev/grid/node-x20-y1 89T 68T 21T 76%
+/dev/grid/node-x20-y2 92T 71T 21T 77%
+/dev/grid/node-x20-y3 86T 68T 18T 79%
+/dev/grid/node-x20-y4 86T 66T 20T 76%
+/dev/grid/node-x20-y5 94T 66T 28T 70%
+/dev/grid/node-x20-y6 91T 73T 18T 80%
+/dev/grid/node-x20-y7 87T 68T 19T 78%
+/dev/grid/node-x20-y8 94T 66T 28T 70%
+/dev/grid/node-x20-y9 89T 64T 25T 71%
+/dev/grid/node-x20-y10 92T 68T 24T 73%
+/dev/grid/node-x20-y11 94T 66T 28T 70%
+/dev/grid/node-x20-y12 88T 73T 15T 82%
+/dev/grid/node-x20-y13 91T 67T 24T 73%
+/dev/grid/node-x20-y14 93T 66T 27T 70%
+/dev/grid/node-x20-y15 88T 72T 16T 81%
+/dev/grid/node-x20-y16 93T 68T 25T 73%
+/dev/grid/node-x20-y17 91T 68T 23T 74%
+/dev/grid/node-x20-y18 87T 73T 14T 83%
+/dev/grid/node-x20-y19 94T 70T 24T 74%
+/dev/grid/node-x20-y20 88T 67T 21T 76%
+/dev/grid/node-x20-y21 88T 68T 20T 77%
+/dev/grid/node-x20-y22 503T 499T 4T 99%
+/dev/grid/node-x20-y23 88T 67T 21T 76%
+/dev/grid/node-x20-y24 92T 68T 24T 73%
+/dev/grid/node-x20-y25 85T 69T 16T 81%
+/dev/grid/node-x20-y26 87T 70T 17T 80%
+/dev/grid/node-x20-y27 86T 70T 16T 81%
+/dev/grid/node-x20-y28 93T 65T 28T 69%
+/dev/grid/node-x21-y0 90T 67T 23T 74%
+/dev/grid/node-x21-y1 85T 66T 19T 77%
+/dev/grid/node-x21-y2 93T 73T 20T 78%
+/dev/grid/node-x21-y3 88T 71T 17T 80%
+/dev/grid/node-x21-y4 94T 71T 23T 75%
+/dev/grid/node-x21-y5 92T 69T 23T 75%
+/dev/grid/node-x21-y6 94T 66T 28T 70%
+/dev/grid/node-x21-y7 94T 65T 29T 69%
+/dev/grid/node-x21-y8 85T 71T 14T 83%
+/dev/grid/node-x21-y9 87T 69T 18T 79%
+/dev/grid/node-x21-y10 86T 68T 18T 79%
+/dev/grid/node-x21-y11 92T 68T 24T 73%
+/dev/grid/node-x21-y12 89T 68T 21T 76%
+/dev/grid/node-x21-y13 88T 73T 15T 82%
+/dev/grid/node-x21-y14 86T 67T 19T 77%
+/dev/grid/node-x21-y15 87T 72T 15T 82%
+/dev/grid/node-x21-y16 87T 70T 17T 80%
+/dev/grid/node-x21-y17 87T 71T 16T 81%
+/dev/grid/node-x21-y18 88T 72T 16T 81%
+/dev/grid/node-x21-y19 93T 65T 28T 69%
+/dev/grid/node-x21-y20 92T 70T 22T 76%
+/dev/grid/node-x21-y21 91T 70T 21T 76%
+/dev/grid/node-x21-y22 510T 493T 17T 96%
+/dev/grid/node-x21-y23 89T 69T 20T 77%
+/dev/grid/node-x21-y24 94T 72T 22T 76%
+/dev/grid/node-x21-y25 91T 70T 21T 76%
+/dev/grid/node-x21-y26 89T 65T 24T 73%
+/dev/grid/node-x21-y27 85T 72T 13T 84%
+/dev/grid/node-x21-y28 93T 72T 21T 77%
+/dev/grid/node-x22-y0 89T 67T 22T 75%
+/dev/grid/node-x22-y1 85T 65T 20T 76%
+/dev/grid/node-x22-y2 93T 64T 29T 68%
+/dev/grid/node-x22-y3 93T 71T 22T 76%
+/dev/grid/node-x22-y4 85T 65T 20T 76%
+/dev/grid/node-x22-y5 85T 67T 18T 78%
+/dev/grid/node-x22-y6 90T 64T 26T 71%
+/dev/grid/node-x22-y7 87T 69T 18T 79%
+/dev/grid/node-x22-y8 94T 72T 22T 76%
+/dev/grid/node-x22-y9 87T 71T 16T 81%
+/dev/grid/node-x22-y10 87T 65T 22T 74%
+/dev/grid/node-x22-y11 93T 72T 21T 77%
+/dev/grid/node-x22-y12 86T 72T 14T 83%
+/dev/grid/node-x22-y13 89T 66T 23T 74%
+/dev/grid/node-x22-y14 90T 67T 23T 74%
+/dev/grid/node-x22-y15 92T 70T 22T 76%
+/dev/grid/node-x22-y16 92T 66T 26T 71%
+/dev/grid/node-x22-y17 91T 66T 25T 72%
+/dev/grid/node-x22-y18 91T 68T 23T 74%
+/dev/grid/node-x22-y19 88T 71T 17T 80%
+/dev/grid/node-x22-y20 90T 69T 21T 76%
+/dev/grid/node-x22-y21 90T 68T 22T 75%
+/dev/grid/node-x22-y22 502T 490T 12T 97%
+/dev/grid/node-x22-y23 91T 67T 24T 73%
+/dev/grid/node-x22-y24 93T 71T 22T 76%
+/dev/grid/node-x22-y25 92T 65T 27T 70%
+/dev/grid/node-x22-y26 93T 69T 24T 74%
+/dev/grid/node-x22-y27 85T 72T 13T 84%
+/dev/grid/node-x22-y28 93T 64T 29T 68%
+/dev/grid/node-x23-y0 92T 73T 19T 79%
+/dev/grid/node-x23-y1 90T 64T 26T 71%
+/dev/grid/node-x23-y2 93T 65T 28T 69%
+/dev/grid/node-x23-y3 88T 72T 16T 81%
+/dev/grid/node-x23-y4 92T 70T 22T 76%
+/dev/grid/node-x23-y5 90T 66T 24T 73%
+/dev/grid/node-x23-y6 86T 66T 20T 76%
+/dev/grid/node-x23-y7 89T 71T 18T 79%
+/dev/grid/node-x23-y8 89T 64T 25T 71%
+/dev/grid/node-x23-y9 90T 64T 26T 71%
+/dev/grid/node-x23-y10 94T 70T 24T 74%
+/dev/grid/node-x23-y11 85T 64T 21T 75%
+/dev/grid/node-x23-y12 86T 66T 20T 76%
+/dev/grid/node-x23-y13 86T 64T 22T 74%
+/dev/grid/node-x23-y14 92T 68T 24T 73%
+/dev/grid/node-x23-y15 94T 70T 24T 74%
+/dev/grid/node-x23-y16 91T 69T 22T 75%
+/dev/grid/node-x23-y17 93T 70T 23T 75%
+/dev/grid/node-x23-y18 87T 65T 22T 74%
+/dev/grid/node-x23-y19 86T 64T 22T 74%
+/dev/grid/node-x23-y20 94T 66T 28T 70%
+/dev/grid/node-x23-y21 92T 64T 28T 69%
+/dev/grid/node-x23-y22 507T 491T 16T 96%
+/dev/grid/node-x23-y23 88T 73T 15T 82%
+/dev/grid/node-x23-y24 87T 69T 18T 79%
+/dev/grid/node-x23-y25 91T 71T 20T 78%
+/dev/grid/node-x23-y26 90T 71T 19T 78%
+/dev/grid/node-x23-y27 87T 70T 17T 80%
+/dev/grid/node-x23-y28 91T 70T 21T 76%
+/dev/grid/node-x24-y0 86T 67T 19T 77%
+/dev/grid/node-x24-y1 94T 67T 27T 71%
+/dev/grid/node-x24-y2 89T 71T 18T 79%
+/dev/grid/node-x24-y3 86T 67T 19T 77%
+/dev/grid/node-x24-y4 87T 73T 14T 83%
+/dev/grid/node-x24-y5 86T 64T 22T 74%
+/dev/grid/node-x24-y6 92T 68T 24T 73%
+/dev/grid/node-x24-y7 85T 68T 17T 80%
+/dev/grid/node-x24-y8 86T 65T 21T 75%
+/dev/grid/node-x24-y9 87T 73T 14T 83%
+/dev/grid/node-x24-y10 91T 68T 23T 74%
+/dev/grid/node-x24-y11 94T 67T 27T 71%
+/dev/grid/node-x24-y12 94T 67T 27T 71%
+/dev/grid/node-x24-y13 88T 71T 17T 80%
+/dev/grid/node-x24-y14 91T 70T 21T 76%
+/dev/grid/node-x24-y15 89T 72T 17T 80%
+/dev/grid/node-x24-y16 92T 69T 23T 75%
+/dev/grid/node-x24-y17 87T 70T 17T 80%
+/dev/grid/node-x24-y18 94T 69T 25T 73%
+/dev/grid/node-x24-y19 91T 66T 25T 72%
+/dev/grid/node-x24-y20 90T 64T 26T 71%
+/dev/grid/node-x24-y21 86T 65T 21T 75%
+/dev/grid/node-x24-y22 508T 494T 14T 97%
+/dev/grid/node-x24-y23 89T 72T 17T 80%
+/dev/grid/node-x24-y24 94T 66T 28T 70%
+/dev/grid/node-x24-y25 88T 64T 24T 72%
+/dev/grid/node-x24-y26 86T 64T 22T 74%
+/dev/grid/node-x24-y27 92T 65T 27T 70%
+/dev/grid/node-x24-y28 89T 72T 17T 80%
+/dev/grid/node-x25-y0 93T 70T 23T 75%
+/dev/grid/node-x25-y1 91T 73T 18T 80%
+/dev/grid/node-x25-y2 89T 65T 24T 73%
+/dev/grid/node-x25-y3 86T 69T 17T 80%
+/dev/grid/node-x25-y4 90T 70T 20T 77%
+/dev/grid/node-x25-y5 89T 65T 24T 73%
+/dev/grid/node-x25-y6 92T 71T 21T 77%
+/dev/grid/node-x25-y7 91T 65T 26T 71%
+/dev/grid/node-x25-y8 91T 67T 24T 73%
+/dev/grid/node-x25-y9 94T 73T 21T 77%
+/dev/grid/node-x25-y10 94T 73T 21T 77%
+/dev/grid/node-x25-y11 91T 70T 21T 76%
+/dev/grid/node-x25-y12 91T 71T 20T 78%
+/dev/grid/node-x25-y13 86T 67T 19T 77%
+/dev/grid/node-x25-y14 88T 67T 21T 76%
+/dev/grid/node-x25-y15 90T 67T 23T 74%
+/dev/grid/node-x25-y16 92T 64T 28T 69%
+/dev/grid/node-x25-y17 94T 68T 26T 72%
+/dev/grid/node-x25-y18 87T 73T 14T 83%
+/dev/grid/node-x25-y19 86T 73T 13T 84%
+/dev/grid/node-x25-y20 92T 72T 20T 78%
+/dev/grid/node-x25-y21 93T 73T 20T 78%
+/dev/grid/node-x25-y22 504T 491T 13T 97%
+/dev/grid/node-x25-y23 91T 72T 19T 79%
+/dev/grid/node-x25-y24 85T 70T 15T 82%
+/dev/grid/node-x25-y25 85T 73T 12T 85%
+/dev/grid/node-x25-y26 85T 67T 18T 78%
+/dev/grid/node-x25-y27 89T 69T 20T 77%
+/dev/grid/node-x25-y28 86T 66T 20T 76%
+/dev/grid/node-x26-y0 91T 72T 19T 79%
+/dev/grid/node-x26-y1 86T 68T 18T 79%
+/dev/grid/node-x26-y2 88T 70T 18T 79%
+/dev/grid/node-x26-y3 88T 66T 22T 75%
+/dev/grid/node-x26-y4 85T 71T 14T 83%
+/dev/grid/node-x26-y5 90T 66T 24T 73%
+/dev/grid/node-x26-y6 90T 66T 24T 73%
+/dev/grid/node-x26-y7 89T 73T 16T 82%
+/dev/grid/node-x26-y8 85T 65T 20T 76%
+/dev/grid/node-x26-y9 90T 72T 18T 80%
+/dev/grid/node-x26-y10 86T 64T 22T 74%
+/dev/grid/node-x26-y11 90T 64T 26T 71%
+/dev/grid/node-x26-y12 92T 73T 19T 79%
+/dev/grid/node-x26-y13 85T 72T 13T 84%
+/dev/grid/node-x26-y14 91T 73T 18T 80%
+/dev/grid/node-x26-y15 92T 69T 23T 75%
+/dev/grid/node-x26-y16 90T 72T 18T 80%
+/dev/grid/node-x26-y17 90T 68T 22T 75%
+/dev/grid/node-x26-y18 90T 73T 17T 81%
+/dev/grid/node-x26-y19 94T 64T 30T 68%
+/dev/grid/node-x26-y20 86T 73T 13T 84%
+/dev/grid/node-x26-y21 86T 66T 20T 76%
+/dev/grid/node-x26-y22 510T 491T 19T 96%
+/dev/grid/node-x26-y23 87T 66T 21T 75%
+/dev/grid/node-x26-y24 91T 64T 27T 70%
+/dev/grid/node-x26-y25 94T 66T 28T 70%
+/dev/grid/node-x26-y26 85T 68T 17T 80%
+/dev/grid/node-x26-y27 85T 71T 14T 83%
+/dev/grid/node-x26-y28 94T 64T 30T 68%
+/dev/grid/node-x27-y0 88T 73T 15T 82%
+/dev/grid/node-x27-y1 94T 67T 27T 71%
+/dev/grid/node-x27-y2 90T 73T 17T 81%
+/dev/grid/node-x27-y3 93T 71T 22T 76%
+/dev/grid/node-x27-y4 89T 70T 19T 78%
+/dev/grid/node-x27-y5 90T 66T 24T 73%
+/dev/grid/node-x27-y6 87T 73T 14T 83%
+/dev/grid/node-x27-y7 87T 66T 21T 75%
+/dev/grid/node-x27-y8 86T 69T 17T 80%
+/dev/grid/node-x27-y9 88T 73T 15T 82%
+/dev/grid/node-x27-y10 92T 64T 28T 69%
+/dev/grid/node-x27-y11 87T 69T 18T 79%
+/dev/grid/node-x27-y12 91T 64T 27T 70%
+/dev/grid/node-x27-y13 94T 68T 26T 72%
+/dev/grid/node-x27-y14 89T 68T 21T 76%
+/dev/grid/node-x27-y15 87T 67T 20T 77%
+/dev/grid/node-x27-y16 90T 72T 18T 80%
+/dev/grid/node-x27-y17 94T 65T 29T 69%
+/dev/grid/node-x27-y18 90T 72T 18T 80%
+/dev/grid/node-x27-y19 88T 73T 15T 82%
+/dev/grid/node-x27-y20 88T 71T 17T 80%
+/dev/grid/node-x27-y21 88T 64T 24T 72%
+/dev/grid/node-x27-y22 504T 490T 14T 97%
+/dev/grid/node-x27-y23 93T 66T 27T 70%
+/dev/grid/node-x27-y24 85T 67T 18T 78%
+/dev/grid/node-x27-y25 94T 64T 30T 68%
+/dev/grid/node-x27-y26 85T 72T 13T 84%
+/dev/grid/node-x27-y27 85T 73T 12T 85%
+/dev/grid/node-x27-y28 89T 70T 19T 78%
+/dev/grid/node-x28-y0 93T 66T 27T 70%
+/dev/grid/node-x28-y1 86T 71T 15T 82%
+/dev/grid/node-x28-y2 94T 73T 21T 77%
+/dev/grid/node-x28-y3 91T 72T 19T 79%
+/dev/grid/node-x28-y4 87T 69T 18T 79%
+/dev/grid/node-x28-y5 85T 70T 15T 82%
+/dev/grid/node-x28-y6 85T 72T 13T 84%
+/dev/grid/node-x28-y7 89T 72T 17T 80%
+/dev/grid/node-x28-y8 90T 73T 17T 81%
+/dev/grid/node-x28-y9 94T 64T 30T 68%
+/dev/grid/node-x28-y10 85T 73T 12T 85%
+/dev/grid/node-x28-y11 89T 70T 19T 78%
+/dev/grid/node-x28-y12 94T 67T 27T 71%
+/dev/grid/node-x28-y13 87T 68T 19T 78%
+/dev/grid/node-x28-y14 94T 72T 22T 76%
+/dev/grid/node-x28-y15 92T 66T 26T 71%
+/dev/grid/node-x28-y16 91T 64T 27T 70%
+/dev/grid/node-x28-y17 86T 69T 17T 80%
+/dev/grid/node-x28-y18 88T 69T 19T 78%
+/dev/grid/node-x28-y19 90T 70T 20T 77%
+/dev/grid/node-x28-y20 89T 69T 20T 77%
+/dev/grid/node-x28-y21 90T 67T 23T 74%
+/dev/grid/node-x28-y22 506T 491T 15T 97%
+/dev/grid/node-x28-y23 89T 70T 19T 78%
+/dev/grid/node-x28-y24 90T 73T 17T 81%
+/dev/grid/node-x28-y25 86T 65T 21T 75%
+/dev/grid/node-x28-y26 93T 73T 20T 78%
+/dev/grid/node-x28-y27 88T 69T 19T 78%
+/dev/grid/node-x28-y28 92T 68T 24T 73%
+/dev/grid/node-x29-y0 88T 70T 18T 79%
+/dev/grid/node-x29-y1 89T 68T 21T 76%
+/dev/grid/node-x29-y2 85T 73T 12T 85%
+/dev/grid/node-x29-y3 89T 73T 16T 82%
+/dev/grid/node-x29-y4 86T 68T 18T 79%
+/dev/grid/node-x29-y5 91T 70T 21T 76%
+/dev/grid/node-x29-y6 86T 70T 16T 81%
+/dev/grid/node-x29-y7 86T 64T 22T 74%
+/dev/grid/node-x29-y8 90T 73T 17T 81%
+/dev/grid/node-x29-y9 92T 65T 27T 70%
+/dev/grid/node-x29-y10 89T 72T 17T 80%
+/dev/grid/node-x29-y11 85T 66T 19T 77%
+/dev/grid/node-x29-y12 89T 73T 16T 82%
+/dev/grid/node-x29-y13 90T 72T 18T 80%
+/dev/grid/node-x29-y14 86T 69T 17T 80%
+/dev/grid/node-x29-y15 85T 64T 21T 75%
+/dev/grid/node-x29-y16 88T 69T 19T 78%
+/dev/grid/node-x29-y17 92T 64T 28T 69%
+/dev/grid/node-x29-y18 86T 65T 21T 75%
+/dev/grid/node-x29-y19 92T 70T 22T 76%
+/dev/grid/node-x29-y20 94T 64T 30T 68%
+/dev/grid/node-x29-y21 87T 64T 23T 73%
+/dev/grid/node-x29-y22 509T 497T 12T 97%
+/dev/grid/node-x29-y23 91T 67T 24T 73%
+/dev/grid/node-x29-y24 90T 67T 23T 74%
+/dev/grid/node-x29-y25 86T 65T 21T 75%
+/dev/grid/node-x29-y26 94T 68T 26T 72%
+/dev/grid/node-x29-y27 89T 69T 20T 77%
+/dev/grid/node-x29-y28 87T 71T 16T 81%
+/dev/grid/node-x30-y0 92T 64T 28T 69%
+/dev/grid/node-x30-y1 93T 67T 26T 72%
+/dev/grid/node-x30-y2 93T 66T 27T 70%
+/dev/grid/node-x30-y3 93T 67T 26T 72%
+/dev/grid/node-x30-y4 86T 70T 16T 81%
+/dev/grid/node-x30-y5 91T 67T 24T 73%
+/dev/grid/node-x30-y6 89T 66T 23T 74%
+/dev/grid/node-x30-y7 89T 72T 17T 80%
+/dev/grid/node-x30-y8 93T 69T 24T 74%
+/dev/grid/node-x30-y9 94T 68T 26T 72%
+/dev/grid/node-x30-y10 89T 69T 20T 77%
+/dev/grid/node-x30-y11 94T 64T 30T 68%
+/dev/grid/node-x30-y12 93T 65T 28T 69%
+/dev/grid/node-x30-y13 85T 72T 13T 84%
+/dev/grid/node-x30-y14 88T 68T 20T 77%
+/dev/grid/node-x30-y15 94T 64T 30T 68%
+/dev/grid/node-x30-y16 92T 73T 19T 79%
+/dev/grid/node-x30-y17 92T 73T 19T 79%
+/dev/grid/node-x30-y18 87T 68T 19T 78%
+/dev/grid/node-x30-y19 93T 64T 29T 68%
+/dev/grid/node-x30-y20 94T 67T 27T 71%
+/dev/grid/node-x30-y21 89T 67T 22T 75%
+/dev/grid/node-x30-y22 507T 491T 16T 96%
+/dev/grid/node-x30-y23 91T 64T 27T 70%
+/dev/grid/node-x30-y24 87T 65T 22T 74%
+/dev/grid/node-x30-y25 85T 65T 20T 76%
+/dev/grid/node-x30-y26 91T 68T 23T 74%
+/dev/grid/node-x30-y27 90T 67T 23T 74%
+/dev/grid/node-x30-y28 94T 66T 28T 70%
+/dev/grid/node-x31-y0 92T 67T 25T 72%
+/dev/grid/node-x31-y1 93T 68T 25T 73%
+/dev/grid/node-x31-y2 92T 66T 26T 71%
+/dev/grid/node-x31-y3 89T 64T 25T 71%
+/dev/grid/node-x31-y4 90T 71T 19T 78%
+/dev/grid/node-x31-y5 89T 68T 21T 76%
+/dev/grid/node-x31-y6 85T 72T 13T 84%
+/dev/grid/node-x31-y7 88T 65T 23T 73%
+/dev/grid/node-x31-y8 86T 66T 20T 76%
+/dev/grid/node-x31-y9 90T 72T 18T 80%
+/dev/grid/node-x31-y10 86T 67T 19T 77%
+/dev/grid/node-x31-y11 89T 72T 17T 80%
+/dev/grid/node-x31-y12 90T 73T 17T 81%
+/dev/grid/node-x31-y13 91T 70T 21T 76%
+/dev/grid/node-x31-y14 94T 67T 27T 71%
+/dev/grid/node-x31-y15 94T 73T 21T 77%
+/dev/grid/node-x31-y16 86T 71T 15T 82%
+/dev/grid/node-x31-y17 86T 73T 13T 84%
+/dev/grid/node-x31-y18 89T 65T 24T 73%
+/dev/grid/node-x31-y19 86T 72T 14T 83%
+/dev/grid/node-x31-y20 88T 64T 24T 72%
+/dev/grid/node-x31-y21 90T 64T 26T 71%
+/dev/grid/node-x31-y22 505T 496T 9T 98%
+/dev/grid/node-x31-y23 90T 73T 17T 81%
+/dev/grid/node-x31-y24 91T 73T 18T 80%
+/dev/grid/node-x31-y25 94T 69T 25T 73%
+/dev/grid/node-x31-y26 92T 64T 28T 69%
+/dev/grid/node-x31-y27 91T 66T 25T 72%
+/dev/grid/node-x31-y28 85T 65T 20T 76%
+/dev/grid/node-x32-y0 85T 69T 16T 81%
+/dev/grid/node-x32-y1 93T 67T 26T 72%
+/dev/grid/node-x32-y2 93T 73T 20T 78%
+/dev/grid/node-x32-y3 94T 71T 23T 75%
+/dev/grid/node-x32-y4 90T 70T 20T 77%
+/dev/grid/node-x32-y5 92T 68T 24T 73%
+/dev/grid/node-x32-y6 94T 64T 30T 68%
+/dev/grid/node-x32-y7 86T 72T 14T 83%
+/dev/grid/node-x32-y8 85T 73T 12T 85%
+/dev/grid/node-x32-y9 89T 69T 20T 77%
+/dev/grid/node-x32-y10 89T 73T 16T 82%
+/dev/grid/node-x32-y11 87T 65T 22T 74%
+/dev/grid/node-x32-y12 94T 67T 27T 71%
+/dev/grid/node-x32-y13 93T 67T 26T 72%
+/dev/grid/node-x32-y14 93T 66T 27T 70%
+/dev/grid/node-x32-y15 86T 72T 14T 83%
+/dev/grid/node-x32-y16 89T 69T 20T 77%
+/dev/grid/node-x32-y17 93T 67T 26T 72%
+/dev/grid/node-x32-y18 87T 64T 23T 73%
+/dev/grid/node-x32-y19 85T 69T 16T 81%
+/dev/grid/node-x32-y20 85T 69T 16T 81%
+/dev/grid/node-x32-y21 91T 65T 26T 71%
+/dev/grid/node-x32-y22 503T 491T 12T 97%
+/dev/grid/node-x32-y23 94T 71T 23T 75%
+/dev/grid/node-x32-y24 87T 64T 23T 73%
+/dev/grid/node-x32-y25 91T 73T 18T 80%
+/dev/grid/node-x32-y26 93T 67T 26T 72%
+/dev/grid/node-x32-y27 86T 71T 15T 82%
+/dev/grid/node-x32-y28 91T 64T 27T 70%
+/dev/grid/node-x33-y0 86T 73T 13T 84%
+/dev/grid/node-x33-y1 88T 71T 17T 80%
+/dev/grid/node-x33-y2 90T 66T 24T 73%
+/dev/grid/node-x33-y3 85T 64T 21T 75%
+/dev/grid/node-x33-y4 87T 66T 21T 75%
+/dev/grid/node-x33-y5 91T 68T 23T 74%
+/dev/grid/node-x33-y6 93T 68T 25T 73%
+/dev/grid/node-x33-y7 92T 70T 22T 76%
+/dev/grid/node-x33-y8 91T 64T 27T 70%
+/dev/grid/node-x33-y9 85T 72T 13T 84%
+/dev/grid/node-x33-y10 89T 65T 24T 73%
+/dev/grid/node-x33-y11 91T 66T 25T 72%
+/dev/grid/node-x33-y12 87T 68T 19T 78%
+/dev/grid/node-x33-y13 89T 70T 19T 78%
+/dev/grid/node-x33-y14 86T 68T 18T 79%
+/dev/grid/node-x33-y15 85T 69T 16T 81%
+/dev/grid/node-x33-y16 94T 66T 28T 70%
+/dev/grid/node-x33-y17 92T 68T 24T 73%
+/dev/grid/node-x33-y18 88T 72T 16T 81%
+/dev/grid/node-x33-y19 90T 73T 17T 81%
+/dev/grid/node-x33-y20 89T 64T 25T 71%
+/dev/grid/node-x33-y21 92T 71T 21T 77%
+/dev/grid/node-x33-y22 502T 497T 5T 99%
+/dev/grid/node-x33-y23 94T 67T 27T 71%
+/dev/grid/node-x33-y24 93T 64T 29T 68%
+/dev/grid/node-x33-y25 90T 66T 24T 73%
+/dev/grid/node-x33-y26 87T 72T 15T 82%
+/dev/grid/node-x33-y27 85T 73T 12T 85%
+/dev/grid/node-x33-y28 86T 72T 14T 83%
+/dev/grid/node-x34-y0 89T 66T 23T 74%
+/dev/grid/node-x34-y1 94T 64T 30T 68%
+/dev/grid/node-x34-y2 92T 69T 23T 75%
+/dev/grid/node-x34-y3 93T 70T 23T 75%
+/dev/grid/node-x34-y4 88T 64T 24T 72%
+/dev/grid/node-x34-y5 94T 67T 27T 71%
+/dev/grid/node-x34-y6 89T 68T 21T 76%
+/dev/grid/node-x34-y7 94T 71T 23T 75%
+/dev/grid/node-x34-y8 88T 69T 19T 78%
+/dev/grid/node-x34-y9 89T 72T 17T 80%
+/dev/grid/node-x34-y10 90T 69T 21T 76%
+/dev/grid/node-x34-y11 91T 65T 26T 71%
+/dev/grid/node-x34-y12 88T 69T 19T 78%
+/dev/grid/node-x34-y13 90T 69T 21T 76%
+/dev/grid/node-x34-y14 92T 66T 26T 71%
+/dev/grid/node-x34-y15 94T 70T 24T 74%
+/dev/grid/node-x34-y16 87T 69T 18T 79%
+/dev/grid/node-x34-y17 86T 67T 19T 77%
+/dev/grid/node-x34-y18 94T 66T 28T 70%
+/dev/grid/node-x34-y19 94T 69T 25T 73%
+/dev/grid/node-x34-y20 91T 67T 24T 73%
+/dev/grid/node-x34-y21 87T 72T 15T 82%
+/dev/grid/node-x34-y22 501T 495T 6T 98%
+/dev/grid/node-x34-y23 93T 71T 22T 76%
+/dev/grid/node-x34-y24 92T 73T 19T 79%
+/dev/grid/node-x34-y25 90T 73T 17T 81%
+/dev/grid/node-x34-y26 89T 69T 20T 77%
+/dev/grid/node-x34-y27 89T 72T 17T 80%
+/dev/grid/node-x34-y28 87T 66T 21T 75%
diff --git a/2016/aoc22/src/main.rs b/2016/aoc22/src/main.rs
new file mode 100644
index 0000000..bd374d5
--- /dev/null
+++ b/2016/aoc22/src/main.rs
@@ -0,0 +1,198 @@
+extern crate regex;
+
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+use std::collections::HashMap;
+use std::collections::HashSet;
+
+use regex::Regex;
+
+use std::str::FromStr;
+
+#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
+struct Node {
+ x: i8,
+ y: i8,
+ size: i16,
+ used: i16,
+ avail: i16,
+ blocker: bool
+}
+
+impl FromStr for Node {
+ type Err = String;
+
+ fn from_str(s: &str) -> Result<Self, Self::Err> {
+ let reg = Regex::new(r"/dev/grid/node-x(\d+)-y(\d+) +(\d+)T +(\d+)T +(\d+)T +(\d+)%").unwrap();
+ let cap = match reg.captures(s) {
+ Some(cap) => cap,
+ None => return Err("Does not match regex".to_string())
+ };
+ Ok(Node {
+ x: cap.at(1).unwrap().parse().unwrap(),
+ y: cap.at(2).unwrap().parse().unwrap(),
+ size: cap.at(3).unwrap().parse().unwrap(),
+ used: cap.at(4).unwrap().parse().unwrap(),
+ avail: cap.at(5).unwrap().parse().unwrap(),
+ blocker: false
+ })
+ }
+}
+
+impl Node {
+ fn is_viable_pair(&self, other: &Node) -> bool {
+ (self.x != other.x || self.y != other.y) && self.used > 0 && self.used <= other.avail
+ }
+
+ fn recalculate_avail(&mut self) {
+ self.avail = self.size - self.used;
+ debug_assert!(self.avail >= 0);
+ debug_assert!(self.used >= 0);
+ }
+}
+
+#[derive(Clone, Hash, PartialEq, Eq)]
+struct Grid {
+ nodes: Vec<Vec<Node>>,
+ goal_x: i8,
+ goal_y: i8
+}
+
+impl Grid {
+ fn new(nodes: Vec<Node>) -> Grid {
+ let mut grid_nodes = Vec::new();
+ let mut next_col = Vec::new();
+
+ let mut current_x = 0;
+
+ for node in nodes {
+ if current_x != node.x {
+ grid_nodes.push(next_col);
+ next_col = Vec::new();
+ current_x += 1;
+ }
+
+ next_col.push(node);
+ }
+ grid_nodes.push(next_col);
+ grid_nodes = Grid::normalize(grid_nodes);
+
+ Grid {
+ nodes: grid_nodes,
+ goal_x: current_x,
+ goal_y: 0
+ }
+ }
+
+ fn normalize(mut nodes: Vec<Vec<Node>>) -> Vec<Vec<Node>> {
+ for x in 0..nodes.len() {
+ for y in 0..nodes[x].len() {
+ nodes[x][y].size = ((nodes[x][y].size + 50)/100) * 100;
+ nodes[x][y].used = ((nodes[x][y].used + 50)/100) * 100;
+ nodes[x][y].avail = ((nodes[x][y].avail + 50)/100) * 100;
+ }
+ }
+ nodes
+ }
+
+ fn is_final(&self) -> bool {
+ self.goal_x == 0 && self.goal_y == 0
+ }
+
+ fn make_move(&self, x: i8, y: i8, dx: i8, dy: i8) -> Option<Grid> {
+ if x+dx < 0 || x+dx >= self.nodes.len() as i8 || y+dy < 0 || y+dy >= self.nodes[x as usize].len() as i8 {
+ return None;
+ }
+ if !self.nodes[x as usize][y as usize].is_viable_pair(&self.nodes[(x+dx) as usize][(y+dy) as usize]) {
+ return None;
+ }
+
+ let mut new_grid = self.clone();
+ new_grid.nodes[(x+dx) as usize][(y+dy) as usize].used += new_grid.nodes[x as usize][y as usize].used;
+ new_grid.nodes[(x+dx) as usize][(y+dy) as usize].recalculate_avail();
+ new_grid.nodes[x as usize][y as usize].used = 0;
+ new_grid.nodes[x as usize][y as usize].recalculate_avail();
+
+ if new_grid.goal_x == x && new_grid.goal_y == y {
+ new_grid.goal_x = x+dx;
+ new_grid.goal_y = y+dy;
+ }
+
+ Some(new_grid)
+ }
+
+ fn available_moves(&self) -> Vec<Grid> {
+ let mut moves = Vec::with_capacity(4);
+
+ for x in 0..self.nodes.len() as i8 {
+ for y in 0..self.nodes[x as usize].len() as i8 {
+ match self.make_move(x, y, -1, 0) {
+ Some(grid) => { moves.push(grid); },
+ None => {}
+ };
+ match self.make_move(x, y, 0, -1) {
+ Some(grid) => { moves.push(grid); },
+ None => {}
+ };
+ match self.make_move(x, y, 1, 0) {
+ Some(grid) => { moves.push(grid); },
+ None => {}
+ };
+ match self.make_move(x, y, 0, 1) {
+ Some(grid) => { moves.push(grid); },
+ None => {}
+ };
+ }
+ }
+
+ moves
+ }
+}
+
+
+fn main() {
+ let nodes = read_input();
+
+ let initial = Grid::new(nodes);
+ println!("Initial grid has {} possible moves", initial.available_moves().len());
+
+ let mut explored: HashSet<Grid> = HashSet::new();
+ let mut frontier: HashMap<Grid, u32> = HashMap::new();
+ frontier.insert(initial, 0);
+ let mut found_final = false;
+
+ while !found_final {
+ let (best_frontier, moves) = find_best_frontiers(&frontier);
+
+ let new_states = best_frontier.available_moves();
+ found_final = new_states.iter().any(|ref s| s.is_final());
+
+ for state in new_states {
+ if !(explored.contains(&state) || frontier.contains_key(&state)) {
+ frontier.insert(state, moves+1);
+ }
+ }
+
+ frontier.remove(&best_frontier);
+ explored.insert(best_frontier);
+ }
+
+ let (final_frontier, moves) = frontier.iter().find(|&(s, _)| s.is_final()).unwrap();
+ println!("It took {} moves to get the data", moves);
+}
+
+fn read_input() -> Vec<Node> {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+
+ file.lines()
+ .skip(2)
+ .filter_map(|line| Node::from_str(line.unwrap().as_ref()).ok())
+ .collect()
+}
+
+fn find_best_frontiers(frontier: &HashMap<Grid, u32>) -> (Grid, u32) {
+ frontier.iter().min_by_key(|&(ref grid, &moves)| {
+ grid.goal_x as u32 + grid.goal_y as u32 + moves
+ }).map(|(&ref grid, &moves)| (grid.clone(), moves.clone())).unwrap()
+}
diff --git a/2016/aoc23/Cargo.lock b/2016/aoc23/Cargo.lock
new file mode 100644
index 0000000..c6ab041
--- /dev/null
+++ b/2016/aoc23/Cargo.lock
@@ -0,0 +1,98 @@
+[root]
+name = "aoc23"
+version = "0.1.0"
+dependencies = [
+ "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "memchr"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex"
+version = "0.1.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "thread-id"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "thread_local"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "utf8-ranges"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66"
+"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70"
+"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"
+"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"
+"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"
+"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
+"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5"
+"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"
+"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
diff --git a/2016/aoc23/Cargo.toml b/2016/aoc23/Cargo.toml
new file mode 100644
index 0000000..39fd06e
--- /dev/null
+++ b/2016/aoc23/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc23"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@entelect.co.za>"]
+
+[dependencies]
+regex = "0.1" \ No newline at end of file
diff --git a/2016/aoc23/input.txt b/2016/aoc23/input.txt
new file mode 100644
index 0000000..3ff0460
--- /dev/null
+++ b/2016/aoc23/input.txt
@@ -0,0 +1,26 @@
+cpy a b
+dec b
+cpy a d
+cpy 0 a
+cpy b c
+inc a
+dec c
+jnz c -2
+dec d
+jnz d -5
+dec b
+cpy b c
+cpy c d
+dec d
+inc c
+jnz d -2
+tgl c
+cpy -16 c
+jnz 1 c
+cpy 90 c
+jnz 90 d
+inc a
+inc d
+jnz d -2
+inc c
+jnz c -5
diff --git a/2016/aoc23/src/main.rs b/2016/aoc23/src/main.rs
new file mode 100644
index 0000000..a12fa18
--- /dev/null
+++ b/2016/aoc23/src/main.rs
@@ -0,0 +1,247 @@
+extern crate regex;
+use regex::Regex;
+
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+
+enum Instruction {
+ Inc(usize),
+ Dec(usize),
+
+ TglLit(i32),
+ TglReg(usize),
+
+ CpyLitReg(i32, usize),
+ CpyRegReg(usize, usize),
+ CpyLitLit(i32, i32),
+ CpyRegLit(usize, i32),
+
+ JnzLitLit(i32, i32),
+ JnzRegLit(usize, i32),
+ JnzLitReg(i32, usize),
+ JnzRegReg(usize, usize),
+
+ Noop
+}
+
+impl Instruction {
+ fn parse(line: &str) -> Instruction {
+ match Regex::new(r"inc (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let reg = to_register_index(cap.at(1).unwrap());
+ return Instruction::Inc(reg);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"dec (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let reg = to_register_index(cap.at(1).unwrap());
+ return Instruction::Dec(reg);
+ },
+ _ => {}
+ }
+
+
+ match Regex::new(r"tgl (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let reg = to_register_index(cap.at(1).unwrap());
+ return Instruction::TglReg(reg);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"tgl ([-\d]+)").unwrap().captures(line) {
+ Some(cap) => {
+ let lit = cap.at(1).unwrap().parse().unwrap();
+ return Instruction::TglLit(lit);
+ },
+ _ => {}
+ }
+
+
+ match Regex::new(r"cpy ([-\d]+) (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = cap.at(1).unwrap().parse().unwrap();
+ let dest = to_register_index(cap.at(2).unwrap());
+ return Instruction::CpyLitReg(src, dest);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"cpy (a|b|c|d) (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = to_register_index(cap.at(1).unwrap());
+ let dest = to_register_index(cap.at(2).unwrap());
+ return Instruction::CpyRegReg(src, dest);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"cpy ([-\d]+) ([-\d]+)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = cap.at(1).unwrap().parse().unwrap();
+ let dest = cap.at(2).unwrap().parse().unwrap();
+ return Instruction::CpyLitLit(src, dest);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"cpy (a|b|c|d) ([-\d]+)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = to_register_index(cap.at(1).unwrap());
+ let dest = cap.at(2).unwrap().parse().unwrap();
+ return Instruction::CpyRegReg(src, dest);
+ },
+ _ => {}
+ }
+
+
+ match Regex::new(r"jnz ([-\d]+) (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = cap.at(1).unwrap().parse().unwrap();
+ let dest = to_register_index(cap.at(2).unwrap());
+ return Instruction::JnzLitReg(src, dest);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"jnz (a|b|c|d) (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = to_register_index(cap.at(1).unwrap());
+ let dest = to_register_index(cap.at(2).unwrap());
+ return Instruction::JnzRegReg(src, dest);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"jnz ([-\d]+) ([-\d]+)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = cap.at(1).unwrap().parse().unwrap();
+ let dest = cap.at(2).unwrap().parse().unwrap();
+ return Instruction::JnzLitLit(src, dest);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"jnz (a|b|c|d) ([-\d]+)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = to_register_index(cap.at(1).unwrap());
+ let dest = cap.at(2).unwrap().parse().unwrap();
+ return Instruction::JnzRegLit(src, dest);
+ },
+ _ => {}
+ }
+
+ panic!("Invalid instruction line");
+ }
+
+ fn toggle(&self) -> Self {
+ match *self {
+ Instruction::Inc(a) => Instruction::Dec(a),
+ Instruction::Dec(a) => Instruction::Inc(a),
+
+ Instruction::TglLit(_) => Instruction::Noop,
+ Instruction::TglReg(a) => Instruction::Inc(a),
+
+ Instruction::CpyLitReg(a, b) => Instruction::JnzLitReg(a, b),
+ Instruction::CpyRegReg(a, b) => Instruction::JnzRegReg(a, b),
+ Instruction::CpyLitLit(a, b) => Instruction::JnzLitLit(a, b),
+ Instruction::CpyRegLit(a, b) => Instruction::JnzRegLit(a, b),
+
+ Instruction::JnzLitLit(a, b) => Instruction::CpyLitLit(a, b),
+ Instruction::JnzRegLit(a, b) => Instruction::CpyRegLit(a, b),
+ Instruction::JnzLitReg(a, b) => Instruction::CpyLitReg(a, b),
+ Instruction::JnzRegReg(a, b) => Instruction::CpyRegReg(a, b),
+ Instruction::Noop => Instruction::Noop
+ }
+ }
+}
+
+fn main() {
+ let mut program = read_file();
+
+ let mut registers: [i32; 4] = [12, 0, 0, 0];
+ let mut pc: usize = 0;
+
+ while pc < program.len() {
+ let mut pc_next: usize = pc+1;
+
+ match program[pc] {
+ Instruction::Inc(dest) => {
+ registers[dest] += 1;
+ },
+ Instruction::Dec(dest) => {
+ registers[dest] -= 1;
+ },
+
+ Instruction::TglReg(offset) => {
+ let line_to_toggle = (pc as i32 + registers[offset]) as usize;
+ if line_to_toggle > 0 && line_to_toggle < program.len() {
+ program[line_to_toggle] = program[line_to_toggle].toggle();
+ }
+ },
+ Instruction::TglLit(offset) => {
+ let line_to_toggle = (pc as i32 + offset) as usize;
+ if line_to_toggle > 0 && line_to_toggle < program.len() {
+ program[line_to_toggle] = program[line_to_toggle].toggle();
+ }
+ },
+
+ Instruction::CpyLitReg(src, dest) => {
+ registers[dest] = src;
+ },
+ Instruction::CpyRegReg(src, dest) => {
+ registers[dest] = registers[src];
+ },
+ Instruction::CpyLitLit(_, _) | Instruction::CpyRegLit(_, _) => {},
+
+ Instruction::JnzRegLit(condition, offset) => {
+ if registers[condition] != 0 {
+ pc_next = (pc as i32 + offset) as usize;
+ }
+ },
+ Instruction::JnzLitLit(condition, offset) => {
+ if condition != 0 {
+ pc_next = (pc as i32 + offset) as usize;
+ }
+ },
+ Instruction::JnzRegReg(condition, offset) => {
+ if registers[condition] != 0 {
+ pc_next = (pc as i32 + registers[offset]) as usize;
+ }
+ },
+ Instruction::JnzLitReg(condition, offset) => {
+ if condition != 0 {
+ pc_next = (pc as i32 + registers[offset]) as usize;
+ }
+ },
+ Instruction::Noop => {}
+ }
+
+ pc = pc_next;
+ }
+
+ println!("a: {}, b: {}, c: {}, d: {}", registers[0], registers[1], registers[2], registers[3]);
+
+}
+
+fn to_register_index(name: &str) -> usize {
+ match name {
+ "a" => 0,
+ "b" => 1,
+ "c" => 2,
+ "d" => 3,
+ _ => panic!("Invalid register provided")
+ }
+}
+
+fn read_file() -> Vec<Instruction> {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+ file.lines()
+ .map(|line| line.unwrap())
+ .filter(|line| line.len() > 0)
+ .map(|line| Instruction::parse(line.trim()))
+ .collect()
+}
diff --git a/2016/aoc24/Cargo.lock b/2016/aoc24/Cargo.lock
new file mode 100644
index 0000000..d8b394a
--- /dev/null
+++ b/2016/aoc24/Cargo.lock
@@ -0,0 +1,4 @@
+[root]
+name = "aoc24"
+version = "0.1.0"
+
diff --git a/2016/aoc24/Cargo.toml b/2016/aoc24/Cargo.toml
new file mode 100644
index 0000000..26becbd
--- /dev/null
+++ b/2016/aoc24/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aoc24"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@gmail.com>"]
+
+[dependencies]
diff --git a/2016/aoc24/input.txt b/2016/aoc24/input.txt
new file mode 100644
index 0000000..cc45a4f
--- /dev/null
+++ b/2016/aoc24/input.txt
@@ -0,0 +1,39 @@
+#######################################################################################################################################################################################
+#...........#.....#...........#.#.......#.....#.#...............#.....#.....#.......#.......#.......#.....................#.........#.....#...#3......#...#.#.............#.......#...#
+#####.#.#.###.###.#####.#.#####.#.###.###.###.#.#.#.#.#.#.###.#.###.###.###.#.#######.#.#.#.###.###.#.#.#.#####.#.#.#####.###.#.#######.#############.#.#.#.#.#.#.###.#.#.#.#.###.#.#.#
+#...#.#.#.#.....#.#...#...#.....#.....#.#...#.........#.....................#.....#...#...#.......#.....#.#.........#.#.#.#.#.......................#...#...#.#.#.#.....#.#.........#.#
+#.#.#.#.#.#####.#.#.#.#.#.#.#.#.###.#.#.###.#.#.#.#.#.#########.#.###.###.#.#.###.###.#.#.#.#.###.#.#.#.#.#.#.#####.#.#.###.###.#######.#.#.#.###.#.###.#.#.#####.#####.#.#.###.#.#.#.#
+#.#.#...#.....#.#.....#...#.#...#.#...#.......#...........#...#...#...#.#.....#.#...#...........#.#.......#...#...#.#.........#...#.......#.#...#.....#...#.......#.#.#.............#.#
+#.#######.#.#.###.#.#.#####.#.#.#.#.###.#####.#.#.###.#.#.#.#.#.#.#.#.#.#.###.#.#.#.###.#######.#######.#.#.###.#.#.#.#.#.#.###.#.#.#.#.#.###.#.#####.#.#.#.#.#.#.#.#.#.###.#.#####.#.#
+#.#...#.....#.......#.......#.#.......#...#.#.....#.#.#.#.#.#.......#...#.....#.#.#.#.#.........#...#...#...#.......#...#...#.....#.....#...#.........#...#.#...#...#...#.........#.#.#
+#.#.#.#.###.###.#.#.#.###.###.#.#.###.#.#.#.#####.#.###.#.#####.#####.###.#.#.#.#.###.#.#.#.###.###.#.#.#.#.#.#####.#.###.#.#.###.#.#.#.#.###.###.#######.#.###.###.#.#######.#.#.#.#.#
+#.#...#...#...............#...#...#...#.#.........#.#...#...#.#...#.#.....#...#.#...#.#.#...#.#.#.#.#.....#...#...#.......#.#...#.........#.#.....#.#...#.....#.#...#.#2#.....#.......#
+#.#.#####.#########.#.###.#.#####.#.#.#.#######.#.###.#.#.#.#.###.#.#.###.#.###.#.#.#.#.#.###.###.#.#.#######.#.###.#.#.#.#.#.#.#.#####.###.#.###.#.#####.#.#.###.#.#.#.###.#.###.###.#
+#...#...........#.....#.......#...#0..........#...#.....#.#...#.#...#.#.#...#.#.......#.........#...#.#...#.#.#.......#...#.#.........#.#.....................#.#.#.#.....#.#.....#...#
+#.###.#.#.#.#.#.###.#.#.#.#.#.###.#.#.###.#.#.#.###.###.#.#####.#.#.#.#.###.#.#.###.#.#.###.###.#.#####.#.#.#.###.#.#######.#######.#.#.#.###.#.#.#.#.#.#######.#.#.#####.#.###.###.#.#
+#...#...#...#.#...........#...#.#.....#...#...#.....#.#.............#...#.........#...#.....#...#.......#...#.#.............#.........#...#.#.....#.#.........#.............#...#.....#
+#.#.#.###.#.###.#.#.#.###.#.###.#######.#.#.###.#.#.#.#.###.#.###.#.#.#.#.#####.#.#.#.#####.#.#####.#.#.#.#.###.###.#.###.###.###.#.#.#.###.#.#.###.#.#.###.#########.#####.#.#.#.#####
+#.#...#.#.......#...#.....#.....#...#...#.....#...#...#.........#.....#.#.........#.....#.....#.........#...#.#.....#.#...#...#.#.#...#.#...#.........#.#...#.........#.#.......#.....#
+#.#####.#.###.#.#.#.###.#.#.#.#.#.#.###.#.#.#.###.###.#.###.#.###.#.#.#.###.#.#####.###.#.#.#.#.#.#####.#.#.#.#.#.#.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.###.#.#.#.#.#.#.#.#.###.#.#.#
+#.....#...#...........#...#...........#.#.....#...#.....#...#.#.#.#...#.....#...#...#...............#...#.........#...#.....#...#.#...#.#...#.....#.....#.....#...#.#...#...#.#.......#
+###.###.#.#.#####.###.#####.#.###.#.#.#####.#.###.#.###.#.###.#.#.#.#.###.#.###.#.#.#.#.###.#.###.#.#.#.#.#.#.###.#.#.#.###.###.#.#.###.#########.#.#####.###########.#.###.###.#####.#
+#...#1#...#...#.......#...#...#.#...#...#...........#.#.......#.......#.#.........#.#...#...#...............#...#.....#.#...#.#.....#.........#...#.....#.#...#...#.....#.#.#.#...#...#
+#.###.###.#.#.#.#####.#.#.#.#.#.#.#####.#####.#.#####.#.#.#.#.###.#.#.#.###.#.###.#.###.#.#.#####.#.#.#####.#.#.###.#.###.#.#.#.#.#.#.#####.#.#.#.#.###.#.#.###.#.#.#.#.#.#.#.###.#.#.#
+#.....#.#.#.#.........#.#.#.....#.....#...#.....#...#.............#...#...#.....#...#.......#.......#.#.....#...#...#.#...#.....#.#...#.....#.#.#.#.#.#.#.......#...........#.#5#.....#
+#.###.#.#.###.###.###.#.#####.#.#.###.###.#.###.#############.#######.#.###.#.###.#.#####.#.#.#.#####.#.#.#####.#.#.#.#.#.#######.#.#.###########.#.#.#.#.#.#.#.#.#.###.#.#.#.#.#.###.#
+#.....#...#...................#.......#...#...#.#.....#.............#.....#...#.....#.......#.#.#.........#.........#.......#.......#...#.........#.#...#...#.....#.#.....#...#...#.#.#
+#.###.###.###########.###.#####.#####.###.#.#.#.#.#.#.###.#.###.#.#######.#.#.#.#.#.#.###.#.#.#####.#.#.#.#######.#.###.#.#.###.#.#.#.###.#####.#####.#.#.#.#.###.#.###.###########.#.#
+#.#.#.#...#...#.....#.....#.#.......#.....#.....#...........#.#...#.........#.#.#.#.....#.#.#...........#...#...#...#.......#...#.........#.....#.....#.....#.......#...#...#.#...#...#
+#.#.#.#.#.#########.#.#.###.#.#.###.###.#.#.#.###.#####.#.#.#.#.#.#.#######.#.#.#######.#.###.#.###.###.#.###.#.#.#.#######.#######.#.#.#.#####.#.###.#.#####.#.###.#.#.###.#.#######.#
+#.#...#...#.#...................#.#...#.#...#.......#.#...#.#...#.#.#.....#.#...#...#...#.#.............#.....#...........#.........#...#.#.#.....#.......#.......#.....#...#.#...#...#
+###.#.#.#.#.#.#.###.#.###.#####.#.#####.#.#.###.#.#.#.#####.#.###.#####.#.#.#.#.#.#.#.###.#.#.#####.###.#.###.#####.#.#.#.#####.###.#.#.#.#.#.#######.###.#.#.#########.###.#.#######.#
+#.....#...................#...#.#...#...#...........#.#.......#.#.....#.#.....#...........#.....#.........#.#...........#...#.....#...#.....#.............#.#.#.........#.#.#.#.......#
+#.#.#.#.#.###.#.#.#.#.#########.###.#.#.#.#########.#.#.#.#.#.#.###########.#.#.###.###.###.#.#.#.#.#.###.#.###.#.###.#.###.###.#.###.#.#.#####.#.#.#######.#.#.###.###.#.#.#.###.#####
+#...#.#.#....7#.#...#.#.........#.....#...#.#.......#.....#...........#.#...#.......#.#...#.#...#...........#...#.#...#.....#...#.#.#...........#...#.#...#...#4....#...#...#...#.....#
+###.#.#.###.#####.#.#.#.#.#.#.#.#.#.#.###.#.###.#.###.#######.#.#.###.#.#####.#.#####.###.#.###.#.#.#.#.#####.###.#.###.#.#.#.#.###.#.#.###.#.#.###.#.###.#########.#.###.#.#.#.#.#.#.#
+#.....#.#.#.......#.#.#.......#.#.#.............#...#.........#.......#.#.#...........#.....#.....#...#...#.#.....#...#.....#.#.#...#...#...#.....#...#...#.#...#...#.#.#.....#...#.#.#
+#.###.#.#.#########.#.#.#.#######.#.#.#.#.###.###.#####.#.#.#.#.#.###.#.#.#.#.#####.#.#.###.#.#.#.#.###.###.###.#.#.#######.#.#.###.#####.#.#.###.#.#.#####.###.#.#.###.#.#########.###
+#.......#...#...#...#...#.#...#...#.#.#...#.#...........#.........#...#.#.#.#.....#...#.....#.#.....#...#...#...#.#.#.#...#...#.#...#.....#...........#.#.........#.....#.#.#...#.....#
+#####.###.#####.#.#####.#######.#.#.#.###.#.#######.###.#####.###.#.#.#.#.#.#####.#####.###.###.###.#.#.###.#.#.#.###.#.#.###.#.#.#####.#.###.#.#.#.###.#.#.#.#.#.###.###.#.#.###.#.#.#
+#.....#.#.#.......#...#.#.#.....#.........#...#.....#6......#...#.#...........#.......#.............#...#...#...#...#.#...#...#...#.....#.........#.#...#.....#.#.#.......#...#.#.#...#
+#######################################################################################################################################################################################
diff --git a/2016/aoc24/src/main.rs b/2016/aoc24/src/main.rs
new file mode 100644
index 0000000..c4d620e
--- /dev/null
+++ b/2016/aoc24/src/main.rs
@@ -0,0 +1,135 @@
+use std::io::BufReader;
+use std::io::BufRead;
+use std::fs::File;
+use std::collections::HashMap;
+
+struct Map {
+ walls: Vec<Vec<bool>>,
+ destinations: Vec<(usize, usize)>,
+ start: (usize, usize)
+}
+
+impl Map {
+ fn new(input: &[String]) -> Map {
+ let mut walls = Vec::with_capacity(input.len());
+ let mut start = (0, 0);
+ let mut destinations = Vec::new();
+
+ let mut y = 0;
+
+ for line in input {
+ let mut x = 0;
+ let mut wall_row = Vec::with_capacity(line.len());
+ for c in line.chars() {
+ wall_row.push(c == '#');
+ if c == '0' {
+ start = (y, x);
+ }
+ else if c.is_numeric() {
+ destinations.push((y, x));
+ }
+
+ x += 1;
+ }
+
+ walls.push(wall_row);
+ y += 1;
+ }
+
+ Map {
+ walls: walls,
+ destinations: destinations,
+ start: start
+ }
+ }
+
+ fn is_valid_position(&self, y: i32, x: i32) -> bool {
+ y > 0 &&
+ x > 0 &&
+ (y as usize) < self.walls.len() &&
+ (x as usize) < self.walls[y as usize].len() &&
+ !self.walls[y as usize][x as usize]
+ }
+}
+
+#[derive(Clone, Hash, PartialEq, Eq)]
+struct State {
+ robot_location: (usize, usize),
+ destinations_hit: Vec<bool>
+}
+
+impl State {
+ fn new(map: &Map) -> State {
+ State {
+ robot_location: map.start,
+ destinations_hit: map.destinations.iter().map(|_| false).collect()
+ }
+ }
+
+ fn next_state(&self, movement: (i32, i32), map: &Map) -> Option<State> {
+ let (y, x) = self.robot_location;
+ let (dy, dx) = movement;
+ let y2 = y as i32 + dy;
+ let x2 = x as i32 + dx;
+
+ if !map.is_valid_position(y2, x2) {
+ return None;
+ }
+
+ let y2 = y2 as usize;
+ let x2 = x2 as usize;
+
+ Some(State {
+ robot_location: (y2, x2),
+ destinations_hit: self.destinations_hit.iter()
+ .zip(map.destinations.iter())
+ .map(|(&hit, &(dest_y, dest_x))| hit || (dest_y == y2 && dest_x == x2))
+ .collect()
+ })
+ }
+
+ fn next_states(&self, map: &Map) -> Vec<State> {
+ [(-1, 0), (1, 0), (0, -1), (0, 1)].iter()
+ .filter_map(|&movement| self.next_state(movement, &map))
+ .collect()
+ }
+
+ fn is_complete(&self, map: &Map) -> bool {
+ self.destinations_hit.iter().all(|&x| x) && self.robot_location == map.start
+ }
+}
+
+fn main() {
+ let map = Map::new(&read_file());
+ let initial = State::new(&map);
+
+ let mut states = HashMap::new();
+ states.insert(initial, 0);
+
+ let mut moves = 0;
+
+ while !states.iter().any(|(&ref s, _)| s.is_complete(&map)) {
+ let new_states = states.iter()
+ .filter(|&(_, &m)| m == moves)
+ .flat_map(|(&ref s, _)| s.next_states(&map))
+ .collect::<Vec<_>>();
+
+ moves += 1;
+
+ for state in new_states {
+ if !states.contains_key(&state) {
+ states.insert(state, moves);
+ }
+ }
+ }
+
+ println!("Final state found in {} moves", moves);
+}
+
+fn read_file() -> Vec<String> {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+ file.lines()
+ .map(|line| line.unwrap())
+ .filter(|line| line.len() > 0)
+ .collect()
+}
diff --git a/2016/aoc25/Cargo.lock b/2016/aoc25/Cargo.lock
new file mode 100644
index 0000000..c4553c9
--- /dev/null
+++ b/2016/aoc25/Cargo.lock
@@ -0,0 +1,98 @@
+[root]
+name = "aoc25"
+version = "0.1.0"
+dependencies = [
+ "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "memchr"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex"
+version = "0.1.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "thread-id"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "thread_local"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "utf8-ranges"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66"
+"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70"
+"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"
+"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"
+"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"
+"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
+"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5"
+"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"
+"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
diff --git a/2016/aoc25/Cargo.toml b/2016/aoc25/Cargo.toml
new file mode 100644
index 0000000..aa84af4
--- /dev/null
+++ b/2016/aoc25/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc25"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@gmail.com>"]
+
+[dependencies]
+regex = "0.1" \ No newline at end of file
diff --git a/2016/aoc25/input.txt b/2016/aoc25/input.txt
new file mode 100644
index 0000000..a9734a4
--- /dev/null
+++ b/2016/aoc25/input.txt
@@ -0,0 +1,30 @@
+cpy a d
+cpy 7 c
+cpy 362 b
+inc d
+dec b
+jnz b -2
+dec c
+jnz c -5
+cpy d a
+jnz 0 0
+cpy a b
+cpy 0 a
+cpy 2 c
+jnz b 2
+jnz 1 6
+dec b
+dec c
+jnz c -4
+inc a
+jnz 1 -7
+cpy 2 b
+jnz c 2
+jnz 1 4
+dec b
+dec c
+jnz 1 -4
+jnz 0 0
+out b
+jnz a -19
+jnz 1 -21
diff --git a/2016/aoc25/src/main.rs b/2016/aoc25/src/main.rs
new file mode 100644
index 0000000..7db2ce5
--- /dev/null
+++ b/2016/aoc25/src/main.rs
@@ -0,0 +1,284 @@
+extern crate regex;
+use regex::Regex;
+
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+
+enum Instruction {
+ Inc(usize),
+ Dec(usize),
+
+ TglLit(i32),
+ TglReg(usize),
+
+ OutLit(i32),
+ OutReg(usize),
+
+ CpyLitReg(i32, usize),
+ CpyRegReg(usize, usize),
+ CpyLitLit(i32, i32),
+ CpyRegLit(usize, i32),
+
+ JnzLitLit(i32, i32),
+ JnzRegLit(usize, i32),
+ JnzLitReg(i32, usize),
+ JnzRegReg(usize, usize),
+
+ Noop
+}
+
+impl Instruction {
+ fn parse(line: &str) -> Instruction {
+ match Regex::new(r"inc (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let reg = to_register_index(cap.at(1).unwrap());
+ return Instruction::Inc(reg);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"dec (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let reg = to_register_index(cap.at(1).unwrap());
+ return Instruction::Dec(reg);
+ },
+ _ => {}
+ }
+
+
+ match Regex::new(r"tgl (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let reg = to_register_index(cap.at(1).unwrap());
+ return Instruction::TglReg(reg);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"tgl ([-\d]+)").unwrap().captures(line) {
+ Some(cap) => {
+ let lit = cap.at(1).unwrap().parse().unwrap();
+ return Instruction::TglLit(lit);
+ },
+ _ => {}
+ }
+
+
+ match Regex::new(r"out (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let reg = to_register_index(cap.at(1).unwrap());
+ return Instruction::OutReg(reg);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"out ([-\d]+)").unwrap().captures(line) {
+ Some(cap) => {
+ let lit = cap.at(1).unwrap().parse().unwrap();
+ return Instruction::OutLit(lit);
+ },
+ _ => {}
+ }
+
+
+ match Regex::new(r"cpy ([-\d]+) (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = cap.at(1).unwrap().parse().unwrap();
+ let dest = to_register_index(cap.at(2).unwrap());
+ return Instruction::CpyLitReg(src, dest);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"cpy (a|b|c|d) (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = to_register_index(cap.at(1).unwrap());
+ let dest = to_register_index(cap.at(2).unwrap());
+ return Instruction::CpyRegReg(src, dest);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"cpy ([-\d]+) ([-\d]+)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = cap.at(1).unwrap().parse().unwrap();
+ let dest = cap.at(2).unwrap().parse().unwrap();
+ return Instruction::CpyLitLit(src, dest);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"cpy (a|b|c|d) ([-\d]+)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = to_register_index(cap.at(1).unwrap());
+ let dest = cap.at(2).unwrap().parse().unwrap();
+ return Instruction::CpyRegReg(src, dest);
+ },
+ _ => {}
+ }
+
+
+ match Regex::new(r"jnz ([-\d]+) (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = cap.at(1).unwrap().parse().unwrap();
+ let dest = to_register_index(cap.at(2).unwrap());
+ return Instruction::JnzLitReg(src, dest);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"jnz (a|b|c|d) (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = to_register_index(cap.at(1).unwrap());
+ let dest = to_register_index(cap.at(2).unwrap());
+ return Instruction::JnzRegReg(src, dest);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"jnz ([-\d]+) ([-\d]+)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = cap.at(1).unwrap().parse().unwrap();
+ let dest = cap.at(2).unwrap().parse().unwrap();
+ return Instruction::JnzLitLit(src, dest);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"jnz (a|b|c|d) ([-\d]+)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = to_register_index(cap.at(1).unwrap());
+ let dest = cap.at(2).unwrap().parse().unwrap();
+ return Instruction::JnzRegLit(src, dest);
+ },
+ _ => {}
+ }
+
+ panic!("Invalid instruction line");
+ }
+
+ fn toggle(&self) -> Self {
+ match *self {
+ Instruction::Inc(a) => Instruction::Dec(a),
+ Instruction::Dec(a) => Instruction::Inc(a),
+
+ Instruction::TglLit(_) => Instruction::Noop,
+ Instruction::TglReg(a) => Instruction::Inc(a),
+
+ Instruction::OutLit(_) => Instruction::Noop,
+ Instruction::OutReg(a) => Instruction::Inc(a),
+
+ Instruction::CpyLitReg(a, b) => Instruction::JnzLitReg(a, b),
+ Instruction::CpyRegReg(a, b) => Instruction::JnzRegReg(a, b),
+ Instruction::CpyLitLit(a, b) => Instruction::JnzLitLit(a, b),
+ Instruction::CpyRegLit(a, b) => Instruction::JnzRegLit(a, b),
+
+ Instruction::JnzLitLit(a, b) => Instruction::CpyLitLit(a, b),
+ Instruction::JnzRegLit(a, b) => Instruction::CpyRegLit(a, b),
+ Instruction::JnzLitReg(a, b) => Instruction::CpyLitReg(a, b),
+ Instruction::JnzRegReg(a, b) => Instruction::CpyRegReg(a, b),
+ Instruction::Noop => Instruction::Noop
+ }
+ }
+}
+
+fn main() {
+ let expected_output = vec!(0, 1, 0, 1, 0, 1, 0, 1, 0, 1);
+ let min_input = (0..).find(|&i| run_program(i) == expected_output).unwrap();
+ println!("{}", min_input);
+}
+
+
+fn run_program(input: i32) -> Vec<i32> {
+ let mut transmission = Vec::new();
+ let mut program = read_file();
+
+ let mut registers: [i32; 4] = [input, 0, 0, 0];
+ let mut pc: usize = 0;
+
+ while pc < program.len() && transmission.len() < 10 {
+ let mut pc_next: usize = pc+1;
+
+ match program[pc] {
+ Instruction::Inc(dest) => {
+ registers[dest] += 1;
+ },
+ Instruction::Dec(dest) => {
+ registers[dest] -= 1;
+ },
+
+ Instruction::TglReg(offset) => {
+ let line_to_toggle = (pc as i32 + registers[offset]) as usize;
+ if line_to_toggle > 0 && line_to_toggle < program.len() {
+ program[line_to_toggle] = program[line_to_toggle].toggle();
+ }
+ },
+ Instruction::TglLit(offset) => {
+ let line_to_toggle = (pc as i32 + offset) as usize;
+ if line_to_toggle > 0 && line_to_toggle < program.len() {
+ program[line_to_toggle] = program[line_to_toggle].toggle();
+ }
+ },
+
+ Instruction::OutReg(output) => {
+ transmission.push(registers[output]);
+ },
+ Instruction::OutLit(output) => {
+ transmission.push(output);
+ },
+
+ Instruction::CpyLitReg(src, dest) => {
+ registers[dest] = src;
+ },
+ Instruction::CpyRegReg(src, dest) => {
+ registers[dest] = registers[src];
+ },
+ Instruction::CpyLitLit(_, _) | Instruction::CpyRegLit(_, _) => {},
+
+ Instruction::JnzRegLit(condition, offset) => {
+ if registers[condition] != 0 {
+ pc_next = (pc as i32 + offset) as usize;
+ }
+ },
+ Instruction::JnzLitLit(condition, offset) => {
+ if condition != 0 {
+ pc_next = (pc as i32 + offset) as usize;
+ }
+ },
+ Instruction::JnzRegReg(condition, offset) => {
+ if registers[condition] != 0 {
+ pc_next = (pc as i32 + registers[offset]) as usize;
+ }
+ },
+ Instruction::JnzLitReg(condition, offset) => {
+ if condition != 0 {
+ pc_next = (pc as i32 + registers[offset]) as usize;
+ }
+ },
+ Instruction::Noop => {}
+ }
+
+ pc = pc_next;
+ }
+
+ transmission
+}
+
+fn to_register_index(name: &str) -> usize {
+ match name {
+ "a" => 0,
+ "b" => 1,
+ "c" => 2,
+ "d" => 3,
+ _ => panic!("Invalid register provided")
+ }
+}
+
+fn read_file() -> Vec<Instruction> {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+ file.lines()
+ .map(|line| line.unwrap())
+ .filter(|line| line.len() > 0)
+ .map(|line| Instruction::parse(line.trim()))
+ .collect()
+}
diff --git a/2016/aoc3/Cargo.lock b/2016/aoc3/Cargo.lock
new file mode 100644
index 0000000..f581b3c
--- /dev/null
+++ b/2016/aoc3/Cargo.lock
@@ -0,0 +1,4 @@
+[root]
+name = "aoc3"
+version = "0.1.0"
+
diff --git a/2016/aoc3/Cargo.toml b/2016/aoc3/Cargo.toml
new file mode 100644
index 0000000..c8a1b62
--- /dev/null
+++ b/2016/aoc3/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aoc3"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@gmail.com>"]
+
+[dependencies]
diff --git a/2016/aoc3/input.txt b/2016/aoc3/input.txt
new file mode 100644
index 0000000..1458df8
--- /dev/null
+++ b/2016/aoc3/input.txt
@@ -0,0 +1,1734 @@
+ 330 143 338
+ 769 547 83
+ 930 625 317
+ 669 866 147
+ 15 881 210
+ 662 15 70
+ 273 277 707
+ 50 592 770
+ 280 313 407
+ 642 487 372
+ 94 619 295
+ 734 243 141
+ 220 141 515
+ 198 824 745
+ 210 787 964
+ 213 627 601
+ 918 4 447
+ 805 630 802
+ 711 237 987
+ 938 552 388
+ 643 405 779
+ 803 747 525
+ 917 832 631
+ 899 292 843
+ 81 206 445
+ 141 874 465
+ 177 974 54
+ 520 725 814
+ 271 958 554
+ 779 579 264
+ 358 18 257
+ 978 77 270
+ 984 88 131
+ 475 702 940
+ 183 756 160
+ 383 941 820
+ 806 142 646
+ 793 275 804
+ 53 272 368
+ 942 821 785
+ 863 830 902
+ 219 52 199
+ 473 479 351
+ 860 522 361
+ 890 240 216
+ 94 756 407
+ 310 189 468
+ 234 909 178
+ 889 667 756
+ 429 485 730
+ 825 405 30
+ 943 806 253
+ 98 455 365
+ 998 454 290
+ 971 576 223
+ 64 429 273
+ 945 779 63
+ 352 960 59
+ 672 948 577
+ 782 43 567
+ 460 315 719
+ 825 604 183
+ 453 442 788
+ 694 632 334
+ 569 619 317
+ 337 49 17
+ 878 468 660
+ 393 598 717
+ 550 827 159
+ 540 362 346
+ 66 713 380
+ 491 477 44
+ 411 114 320
+ 554 96 250
+ 306 67 196
+ 769 553 333
+ 762 436 382
+ 278 322 153
+ 894 603 334
+ 539 441 844
+ 486 162 927
+ 197 9 218
+ 94 221 804
+ 250 220 913
+ 557 626 486
+ 562 705 630
+ 968 922 285
+ 518 36 468
+ 18 608 83
+ 512 611 530
+ 534 37 65
+ 621 136 90
+ 239 113 139
+ 371 640 956
+ 629 54 959
+ 531 620 338
+ 682 499 810
+ 798 170 968
+ 187 640 645
+ 660 535 332
+ 663 530 314
+ 64 26 65
+ 55 285 488
+ 620 288 52
+ 642 474 450
+ 455 9 962
+ 51 760 489
+ 426 760 833
+ 304 783 772
+ 498 765 695
+ 635 53 126
+ 44 430 774
+ 979 943 838
+ 962 892 64
+ 494 709 614
+ 7 695 120
+ 503 114 606
+ 362 340 689
+ 509 367 389
+ 673 410 664
+ 773 262 558
+ 897 958 245
+ 140 773 483
+ 965 468 584
+ 546 209 668
+ 856 381 184
+ 274 237 762
+ 888 677 906
+ 871 516 405
+ 102 529 912
+ 285 724 885
+ 352 501 53
+ 774 139 245
+ 380 309 594
+ 813 185 765
+ 530 645 965
+ 958 618 120
+ 851 202 957
+ 737 476 131
+ 595 546 108
+ 716 113 66
+ 327 215 318
+ 397 343 390
+ 351 143 103
+ 138 91 31
+ 108 224 919
+ 230 276 896
+ 426 975 177
+ 327 975 918
+ 238 365 764
+ 328 799 775
+ 590 906 967
+ 578 460 338
+ 507 619 647
+ 711 617 867
+ 933 478 734
+ 820 760 721
+ 199 711 824
+ 983 214 228
+ 382 150 648
+ 415 782 242
+ 615 754 445
+ 693 689 590
+ 382 784 482
+ 997 181 322
+ 682 241 172
+ 587 302 252
+ 184 135 254
+ 574 104 549
+ 88 738 796
+ 486 715 861
+ 62 491 815
+ 463 434 569
+ 519 622 310
+ 199 443 782
+ 572 657 85
+ 763 517 844
+ 750 175 835
+ 228 269 710
+ 611 316 551
+ 883 546 296
+ 169 693 18
+ 992 743 316
+ 263 529 529
+ 705 570 4
+ 918 706 527
+ 609 285 971
+ 260 533 112
+ 711 486 904
+ 820 40 472
+ 997 301 129
+ 257 288 343
+ 635 439 375
+ 560 381 417
+ 773 105 145
+ 58 963 267
+ 976 742 424
+ 994 441 384
+ 389 770 514
+ 782 463 335
+ 919 727 276
+ 780 794 372
+ 326 180 590
+ 918 946 257
+ 889 842 181
+ 507 61 464
+ 762 835 443
+ 827 607 982
+ 174 875 544
+ 934 885 589
+ 32 343 757
+ 987 826 257
+ 981 782 844
+ 446 291 397
+ 443 800 421
+ 165 668 539
+ 410 373 487
+ 422 803 881
+ 546 998 953
+ 291 607 160
+ 919 894 62
+ 842 718 117
+ 110 816 582
+ 470 836 596
+ 575 687 35
+ 37 835 374
+ 90 954 354
+ 101 141 407
+ 174 398 499
+ 173 737 964
+ 4 365 950
+ 946 616 634
+ 906 904 619
+ 40 789 16
+ 788 769 76
+ 737 867 88
+ 565 812 31
+ 508 380 201
+ 34 935 339
+ 500 862 326
+ 431 181 475
+ 403 346 585
+ 88 530 708
+ 731 137 781
+ 715 563 272
+ 817 659 932
+ 396 368 360
+ 162 683 376
+ 278 620 39
+ 525 910 371
+ 688 524 149
+ 488 998 279
+ 286 392 523
+ 325 144 406
+ 79 532 419
+ 540 460 465
+ 222 832 416
+ 517 507 46
+ 87 744 183
+ 382 819 701
+ 306 763 647
+ 744 74 913
+ 62 813 849
+ 691 874 775
+ 291 422 314
+ 432 630 809
+ 611 510 566
+ 583 745 289
+ 397 19 727
+ 188 766 442
+ 96 108 329
+ 963 719 598
+ 963 764 469
+ 444 636 731
+ 792 636 422
+ 993 1 416
+ 518 300 532
+ 298 312 736
+ 316 111 463
+ 825 569 35
+ 858 591 584
+ 809 84 607
+ 681 610 740
+ 383 279 210
+ 851 733 615
+ 287 959 160
+ 856 851 171
+ 606 115 211
+ 310 541 845
+ 506 119 319
+ 665 471 562
+ 382 885 798
+ 440 29 595
+ 113 903 475
+ 257 773 846
+ 306 741 776
+ 97 804 76
+ 489 332 423
+ 466 632 613
+ 86 739 481
+ 199 846 712
+ 62 282 809
+ 155 681 142
+ 705 525 270
+ 159 800 117
+ 612 664 316
+ 505 616 837
+ 578 839 770
+ 942 535 122
+ 542 781 512
+ 552 22 475
+ 760 791 97
+ 432 626 837
+ 26 616 336
+ 412 316 702
+ 108 232 242
+ 158 311 449
+ 60 141 325
+ 58 1 714
+ 532 977 123
+ 531 978 598
+ 679 899 57
+ 645 523 54
+ 167 892 14
+ 164 574 492
+ 105 37 491
+ 132 555 485
+ 600 879 508
+ 608 843 222
+ 270 255 398
+ 232 960 281
+ 241 995 436
+ 113 674 411
+ 381 567 5
+ 697 450 966
+ 726 857 969
+ 722 686 965
+ 543 20 453
+ 955 689 554
+ 858 161 923
+ 140 979 953
+ 786 836 237
+ 200 322 875
+ 311 623 398
+ 510 814 945
+ 67 387 825
+ 621 620 740
+ 630 842 163
+ 545 75 373
+ 506 531 501
+ 301 571 357
+ 746 491 253
+ 37 29 748
+ 769 507 754
+ 69 886 861
+ 423 629 856
+ 380 723 83
+ 875 647 657
+ 144 696 580
+ 896 49 629
+ 275 598 374
+ 118 636 279
+ 277 80 529
+ 623 130 493
+ 368 712 621
+ 833 730 512
+ 59 767 829
+ 105 933 731
+ 54 240 108
+ 803 235 992
+ 837 726 881
+ 426 855 450
+ 636 730 731
+ 840 561 977
+ 996 229 670
+ 508 234 186
+ 529 108 917
+ 373 337 795
+ 681 35 565
+ 790 251 152
+ 301 235 599
+ 875 416 653
+ 277 338 990
+ 800 207 595
+ 954 650 896
+ 931 667 706
+ 84 851 822
+ 254 778 816
+ 316 141 732
+ 233 759 239
+ 546 473 315
+ 69 15 96
+ 513 470 320
+ 460 188 729
+ 429 950 288
+ 709 807 790
+ 456 161 570
+ 269 718 339
+ 213 628 602
+ 155 367 686
+ 176 418 568
+ 66 251 723
+ 959 696 536
+ 794 279 885
+ 315 527 993
+ 603 853 868
+ 727 747 994
+ 411 287 193
+ 528 763 559
+ 803 149 739
+ 542 883 696
+ 275 676 183
+ 411 317 161
+ 349 875 35
+ 39 729 221
+ 256 831 216
+ 247 238 176
+ 399 59 306
+ 409 445 550
+ 9 387 253
+ 613 204 474
+ 81 868 944
+ 589 912 735
+ 319 264 83
+ 984 704 614
+ 778 614 532
+ 699 762 556
+ 680 250 507
+ 504 581 647
+ 160 351 295
+ 513 739 413
+ 651 915 651
+ 878 218 499
+ 872 990 503
+ 38 886 12
+ 218 201 415
+ 240 250 504
+ 265 448 382
+ 402 876 126
+ 488 950 649
+ 189 210 597
+ 24 850 758
+ 30 451 347
+ 5 437 723
+ 634 310 546
+ 801 179 411
+ 679 338 852
+ 385 32 933
+ 406 531 554
+ 88 516 871
+ 860 486 834
+ 467 535 849
+ 419 820 785
+ 206 649 526
+ 244 499 714
+ 80 774 678
+ 336 149 612
+ 310 175 656
+ 150 221 791
+ 159 806 701
+ 336 465 530
+ 376 819 272
+ 533 472 421
+ 82 124 909
+ 523 561 539
+ 844 811 576
+ 439 612 587
+ 782 457 686
+ 152 51 837
+ 413 573 855
+ 403 608 26
+ 893 819 910
+ 361 499 657
+ 677 937 617
+ 428 6 343
+ 310 38 431
+ 474 35 420
+ 574 256 221
+ 700 907 515
+ 149 685 478
+ 206 325 720
+ 114 51 67
+ 320 338 686
+ 293 59 527
+ 147 756 986
+ 250 697 573
+ 968 194 545
+ 542 480 72
+ 454 574 619
+ 473 55 592
+ 475 339 889
+ 884 313 993
+ 125 127 742
+ 591 514 585
+ 543 583 282
+ 264 580 390
+ 839 487 781
+ 902 664 868
+ 334 459 819
+ 107 20 211
+ 368 479 775
+ 683 691 273
+ 681 336 630
+ 22 978 536
+ 926 828 708
+ 210 319 723
+ 787 689 866
+ 854 633 856
+ 960 494 866
+ 122 687 596
+ 918 705 539
+ 84 564 791
+ 876 138 949
+ 836 1 500
+ 718 308 466
+ 228 311 271
+ 421 998 433
+ 622 772 174
+ 875 720 432
+ 680 687 509
+ 215 95 623
+ 674 732 166
+ 198 174 645
+ 721 839 390
+ 617 896 448
+ 73 331 155
+ 789 134 431
+ 853 376 400
+ 82 862 411
+ 779 362 70
+ 750 777 349
+ 674 604 224
+ 812 731 446
+ 280 546 336
+ 922 781 619
+ 196 892 876
+ 941 361 479
+ 344 988 873
+ 499 92 795
+ 287 913 546
+ 625 167 604
+ 617 1 399
+ 154 166 720
+ 328 323 111
+ 713 619 530
+ 606 756 580
+ 194 247 935
+ 149 65 64
+ 55 287 902
+ 870 866 127
+ 478 679 587
+ 900 459 565
+ 563 787 743
+ 962 798 769
+ 669 39 525
+ 745 691 317
+ 484 123 93
+ 500 598 348
+ 159 535 681
+ 618 176 877
+ 723 373 464
+ 304 184 131
+ 542 209 654
+ 716 47 647
+ 976 537 771
+ 914 606 568
+ 241 250 481
+ 616 640 660
+ 744 187 843
+ 303 617 927
+ 369 525 773
+ 754 697 360
+ 595 560 605
+ 562 589 610
+ 799 497 655
+ 823 553 532
+ 937 502 449
+ 976 941 158
+ 194 720 347
+ 474 694 822
+ 528 184 272
+ 922 698 568
+ 415 889 638
+ 169 822 65
+ 547 281 663
+ 582 167 110
+ 365 56 914
+ 431 162 923
+ 473 812 578
+ 572 890 386
+ 164 119 308
+ 604 946 496
+ 327 142 72
+ 641 916 472
+ 743 663 228
+ 107 446 345
+ 823 486 152
+ 997 47 968
+ 565 155 631
+ 438 205 416
+ 271 163 875
+ 123 393 111
+ 169 412 854
+ 615 683 659
+ 592 362 9
+ 99 895 668
+ 834 205 172
+ 359 355 550
+ 499 149 389
+ 755 298 916
+ 475 706 807
+ 829 425 118
+ 43 527 479
+ 159 473 874
+ 151 326 992
+ 970 660 509
+ 837 930 35
+ 164 345 506
+ 209 879 487
+ 97 157 503
+ 289 755 793
+ 624 897 293
+ 382 134 451
+ 257 917 339
+ 110 168 85
+ 470 583 139
+ 486 613 120
+ 584 747 795
+ 959 699 339
+ 866 384 672
+ 157 639 464
+ 939 485 409
+ 947 441 131
+ 179 953 581
+ 735 587 605
+ 834 582 36
+ 304 422 707
+ 195 348 347
+ 163 521 486
+ 948 471 675
+ 915 453 406
+ 40 345 635
+ 81 124 115
+ 127 105 127
+ 50 32 10
+ 221 399 397
+ 487 676 412
+ 574 607 450
+ 268 625 323
+ 843 858 145
+ 706 286 218
+ 822 168 254
+ 950 708 944
+ 572 640 775
+ 958 563 909
+ 996 154 918
+ 378 626 564
+ 335 823 339
+ 499 810 270
+ 294 22 98
+ 987 959 591
+ 101 899 442
+ 931 409 576
+ 542 102 655
+ 404 980 398
+ 759 990 381
+ 692 990 750
+ 752 93 149
+ 278 973 883
+ 621 459 232
+ 398 261 626
+ 221 212 744
+ 790 241 352
+ 802 218 317
+ 443 294 244
+ 393 131 941
+ 466 378 885
+ 516 419 240
+ 799 748 407
+ 468 502 386
+ 829 329 766
+ 432 376 408
+ 681 88 198
+ 553 351 489
+ 234 717 59
+ 332 525 675
+ 437 691 723
+ 441 834 433
+ 616 144 274
+ 966 911 650
+ 254 274 782
+ 346 714 856
+ 330 696 171
+ 394 407 298
+ 897 553 867
+ 755 503 956
+ 253 840 382
+ 923 195 262
+ 918 735 483
+ 55 703 227
+ 768 759 225
+ 825 238 14
+ 7 479 978
+ 211 603 957
+ 216 866 94
+ 112 698 60
+ 847 631 307
+ 940 164 253
+ 406 133 14
+ 380 816 425
+ 147 873 429
+ 698 987 98
+ 534 823 691
+ 197 690 754
+ 979 39 468
+ 928 73 531
+ 119 66 920
+ 982 810 569
+ 476 534 397
+ 931 366 182
+ 783 104 732
+ 131 32 619
+ 784 136 530
+ 16 933 484
+ 995 987 739
+ 985 88 977
+ 43 919 914
+ 540 399 915
+ 566 859 257
+ 639 419 73
+ 727 118 865
+ 477 370 834
+ 293 434 155
+ 422 557 603
+ 203 243 754
+ 373 15 748
+ 466 574 807
+ 282 576 70
+ 275 365 608
+ 987 644 648
+ 711 629 717
+ 420 410 696
+ 252 417 874
+ 642 26 202
+ 223 23 531
+ 545 580 675
+ 565 600 521
+ 130 745 142
+ 264 377 397
+ 300 618 253
+ 683 331 279
+ 440 826 275
+ 835 785 266
+ 592 264 590
+ 257 255 173
+ 532 23 620
+ 571 749 434
+ 988 552 492
+ 566 766 234
+ 617 818 776
+ 45 113 882
+ 579 793 114
+ 971 243 608
+ 979 241 241
+ 130 83 634
+ 91 361 5
+ 311 107 501
+ 377 388 496
+ 727 849 317
+ 323 702 256
+ 804 254 189
+ 70 11 246
+ 752 425 785
+ 799 413 882
+ 917 133 695
+ 959 49 902
+ 420 121 412
+ 177 170 158
+ 828 734 135
+ 880 875 75
+ 824 556 960
+ 857 689 960
+ 74 951 2
+ 246 687 756
+ 311 93 487
+ 209 626 886
+ 17 545 566
+ 963 252 283
+ 947 493 805
+ 185 493 462
+ 728 365 885
+ 808 214 528
+ 582 780 100
+ 30 254 654
+ 596 706 553
+ 713 968 803
+ 123 270 839
+ 792 778 475
+ 442 95 682
+ 931 212 678
+ 781 140 439
+ 651 645 978
+ 137 829 286
+ 593 503 895
+ 642 215 144
+ 687 122 934
+ 84 240 919
+ 656 515 774
+ 51 799 273
+ 636 324 924
+ 213 161 309
+ 509 157 458
+ 582 1 727
+ 716 269 819
+ 978 343 303
+ 828 264 708
+ 108 620 190
+ 12 12 634
+ 103 615 579
+ 364 286 660
+ 809 714 656
+ 729 504 10
+ 994 366 341
+ 433 796 77
+ 663 462 353
+ 776 687 758
+ 751 495 651
+ 33 751 753
+ 349 919 228
+ 204 799 584
+ 335 156 563
+ 725 191 535
+ 731 676 524
+ 455 571 10
+ 899 379 689
+ 773 641 812
+ 324 761 421
+ 354 557 897
+ 571 740 161
+ 407 271 856
+ 886 393 428
+ 286 870 218
+ 950 819 347
+ 331 847 858
+ 498 471 689
+ 357 378 775
+ 890 503 514
+ 201 863 428
+ 721 737 796
+ 636 178 974
+ 14 387 936
+ 622 424 144
+ 82 201 727
+ 127 164 779
+ 173 319 326
+ 195 748 641
+ 469 512 510
+ 626 949 405
+ 552 542 251
+ 192 204 382
+ 655 558 631
+ 970 519 3
+ 918 701 399
+ 56 543 403
+ 524 848 641
+ 620 431 539
+ 604 473 824
+ 369 105 464
+ 575 957 429
+ 859 978 199
+ 712 381 199
+ 941 305 738
+ 892 663 937
+ 653 963 365
+ 70 331 508
+ 620 923 682
+ 739 122 350
+ 288 418 768
+ 733 326 520
+ 694 472 793
+ 725 415 739
+ 895 398 201
+ 500 157 168
+ 727 814 354
+ 807 726 340
+ 431 329 212
+ 635 374 403
+ 677 78 347
+ 386 559 505
+ 385 361 161
+ 262 494 621
+ 481 237 767
+ 318 966 640
+ 723 732 546
+ 911 652 823
+ 958 502 677
+ 718 258 834
+ 98 666 506
+ 929 41 933
+ 869 637 605
+ 585 156 335
+ 490 316 149
+ 436 339 323
+ 596 948 224
+ 275 433 241
+ 545 890 155
+ 601 413 676
+ 893 401 673
+ 694 171 403
+ 211 110 482
+ 267 61 541
+ 206 124 256
+ 189 353 308
+ 351 880 70
+ 237 677 380
+ 759 754 388
+ 465 99 862
+ 852 787 925
+ 758 890 804
+ 252 817 784
+ 773 129 860
+ 954 102 872
+ 743 396 730
+ 500 304 173
+ 492 399 527
+ 413 465 813
+ 670 837 933
+ 897 424 430
+ 782 404 14
+ 151 24 418
+ 897 260 306
+ 811 287 386
+ 440 93 449
+ 229 185 582
+ 136 63 678
+ 211 250 940
+ 184 400 209
+ 122 383 238
+ 143 386 111
+ 320 194 415
+ 925 790 501
+ 924 596 614
+ 606 733 277
+ 886 116 194
+ 278 627 189
+ 225 536 981
+ 487 538 584
+ 539 2 793
+ 219 456 57
+ 341 424 941
+ 199 482 921
+ 231 241 588
+ 711 740 334
+ 596 554 323
+ 917 164 629
+ 19 138 756
+ 939 70 225
+ 536 432 401
+ 137 614 14
+ 593 818 402
+ 871 280 515
+ 268 259 326
+ 900 97 376
+ 68 699 461
+ 546 810 400
+ 540 697 676
+ 591 125 751
+ 159 719 919
+ 605 763 898
+ 171 845 459
+ 115 289 376
+ 265 636 317
+ 646 225 84
+ 663 755 89
+ 192 828 12
+ 316 523 822
+ 310 933 784
+ 44 721 873
+ 893 873 461
+ 898 15 548
+ 96 861 726
+ 9 837 398
+ 238 404 29
+ 227 845 428
+ 770 764 472
+ 960 747 784
+ 990 281 811
+ 59 597 111
+ 930 799 729
+ 930 882 758
+ 459 961 116
+ 484 83 914
+ 83 969 994
+ 828 423 132
+ 346 541 246
+ 783 484 303
+ 983 7 921
+ 216 208 905
+ 802 216 54
+ 6 121 306
+ 609 36 749
+ 608 84 626
+ 97 705 89
+ 200 688 878
+ 242 314 802
+ 294 66 338
+ 768 417 272
+ 785 351 266
+ 58 505 668
+ 791 291 679
+ 783 694 43
+ 794 468 355
+ 777 796 171
+ 378 784 426
+ 224 510 840
+ 557 606 708
+ 513 127 189
+ 231 976 517
+ 772 37 433
+ 684 973 324
+ 70 661 83
+ 914 136 702
+ 917 630 710
+ 826 894 84
+ 373 416 248
+ 551 924 226
+ 357 646 374
+ 890 491 246
+ 938 293 519
+ 66 42 704
+ 537 60 374
+ 508 56 405
+ 437 751 653
+ 681 718 160
+ 683 293 800
+ 569 288 878
+ 692 206 611
+ 173 157 399
+ 201 492 645
+ 98 132 329
+ 234 612 711
+ 296 54 975
+ 651 219 923
+ 527 177 138
+ 585 598 302
+ 552 653 474
+ 54 288 358
+ 828 631 279
+ 854 642 746
+ 80 52 645
+ 386 346 181
+ 488 7 569
+ 168 351 533
+ 906 186 681
+ 833 404 191
+ 863 297 526
+ 451 555 808
+ 336 544 155
+ 253 211 838
+ 759 819 238
+ 921 343 761
+ 264 632 690
+ 165 424 159
+ 121 481 361
+ 181 409 439
+ 94 972 995
+ 696 904 722
+ 613 238 422
+ 190 281 334
+ 385 127 129
+ 300 364 234
+ 479 768 937
+ 883 654 35
+ 979 679 959
+ 244 51 788
+ 275 613 804
+ 143 575 210
+ 160 168 608
+ 330 471 651
+ 407 594 410
+ 723 576 943
+ 268 912 361
+ 692 442 760
+ 443 288 20
+ 382 610 556
+ 62 694 568
+ 322 257 214
+ 253 458 861
+ 260 213 829
+ 37 137 420
+ 668 220 104
+ 673 150 435
+ 551 466 897
+ 390 729 999
+ 423 963 763
+ 837 36 295
+ 854 726 495
+ 16 728 389
+ 735 246 510
+ 218 136 617
+ 604 197 140
+ 113 355 499
+ 631 902 488
+ 689 898 212
+ 780 826 901
+ 556 205 657
+ 855 661 288
+ 141 34 480
+ 27 23 194
+ 115 53 393
+ 333 287 700
+ 68 300 671
+ 394 589 28
+ 572 248 771
+ 454 118 797
+ 526 141 300
+ 785 377 504
+ 886 723 105
+ 541 712 470
+ 156 128 932
+ 479 85 989
+ 381 207 162
+ 813 839 544
+ 143 783 541
+ 916 361 24
+ 878 133 886
+ 986 750 335
+ 122 643 864
+ 395 460 591
+ 387 896 627
+ 117 455 109
+ 2 14 569
+ 873 364 215
+ 875 350 554
+ 70 878 940
+ 234 846 82
+ 256 279 901
+ 693 990 473
+ 951 866 824
+ 923 408 891
+ 36 5 531
+ 954 654 266
+ 921 652 434
+ 561 701 427
+ 232 764 365
+ 330 331 73
+ 46 813 6
+ 380 698 297
+ 396 221 289
+ 135 867 633
+ 814 649 286
+ 797 918 827
+ 705 58 338
+ 6 305 310
+ 701 352 28
+ 903 97 825
+ 693 126 794
+ 438 144 592
+ 367 932 400
+ 320 820 264
+ 687 210 652
+ 682 84 566
+ 671 604 816
+ 529 646 267
+ 795 654 114
+ 955 426 118
+ 249 759 102
+ 343 581 267
+ 341 619 107
+ 479 57 341
+ 683 32 870
+ 630 609 210
+ 361 643 803
+ 506 856 406
+ 580 562 359
+ 312 433 154
+ 750 379 920
+ 448 520 312
+ 733 259 899
+ 33 786 319
+ 579 669 90
+ 595 769 242
+ 160 985 236
+ 654 903 946
+ 635 99 802
+ 75 158 437
+ 467 382 289
+ 406 542 548
+ 684 417 794
+ 729 105 122
+ 44 485 689
+ 737 15 713
+ 970 391 17
+ 373 384 729
+ 336 1 118
+ 814 807 759
+ 965 808 828
+ 179 181 834
+ 242 94 838
+ 188 183 82
+ 691 402 618
+ 984 43 561
+ 330 447 872
+ 553 581 30
+ 884 393 836
+ 431 298 837
+ 278 389 690
+ 976 587 803
+ 722 220 538
+ 548 208 107
+ 629 414 729
+ 543 584 672
+ 512 431 954
+ 475 367 959
+ 226 306 9
+ 824 774 668
+ 188 22 870
+ 722 764 300
+ 647 803 256
+ 410 972 21
+ 436 536 278
+ 995 577 453
+ 670 439 224
+ 434 488 572
+ 82 317 498
+ 559 823 662
+ 499 614 196
+ 944 14 432
+ 618 866 652
+ 467 872 289
+ 471 722 189
+ 923 756 17
+ 790 409 195
+ 511 500 545
+ 667 283 758
+ 271 373 283
+ 573 686 490
+ 659 706 560
+ 770 247 633
+ 424 169 895
+ 47 349 411
+ 380 235 805
+ 384 546 148
+ 747 870 831
+ 754 421 910
+ 937 15 433
+ 188 760 806
+ 872 748 418
+ 718 556 510
+ 165 590 486
+ 798 40 177
+ 349 923 530
+ 795 690 746
+ 550 671 360
+ 824 442 775
+ 331 686 152
+ 570 270 926
+ 860 64 383
+ 408 464 170
+ 758 440 349
+ 773 434 699
+ 780 563 352
+ 18 644 621
+ 432 663 188
+ 420 887 956
+ 237 586 788
+ 319 526 586
+ 544 647 115
+ 628 235 511
+ 666 408 33
+ 670 459 697
+ 48 189 692
+ 837 708 428
+ 462 652 632
+ 426 106 457
+ 730 744 195
+ 700 816 769
+ 383 480 923
+ 601 612 910
+ 559 953 779
+ 533 937 240
+ 464 123 344
+ 579 82 76
+ 179 188 373
+ 1 641 56
+ 688 698 50
+ 688 160 4
+ 790 364 767
+ 202 70 137
+ 914 420 674
+ 961 657 851
+ 578 708 875
+ 503 94 776
+ 221 143 356
+ 34 126 403
+ 234 31 78
+ 721 949 330
+ 675 191 460
+ 80 957 651
+ 690 580 824
+ 461 73 802
+ 725 606 51
+ 183 857 521
+ 708 800 482
+ 644 111 37
+ 769 778 869
+ 883 693 909
+ 549 714 43
+ 273 246 599
+ 637 309 675
+ 451 195 552
+ 681 408 126
+ 422 465 52
+ 743 235 144
+ 248 586 312
+ 42 398 313
+ 222 335 21
+ 528 312 738
+ 856 312 132
+ 915 79 610
+ 550 605 186
+ 566 815 698
+ 127 250 717
+ 532 129 775
+ 604 132 549
+ 134 44 247
+ 521 815 470
+ 370 853 515
+ 795 187 851
+ 963 295 50
+ 757 228 169
+ 706 303 120
+ 416 133 309
+ 956 63 11
+ 751 162 301
+ 387 632 29
+ 257 383 994
+ 215 247 994
+ 529 606 963
+ 770 305 756
+ 721 791 971
+ 558 531 675
+ 253 477 918
+ 470 52 615
+ 256 335 24
+ 301 523 651
+ 316 702 637
+ 321 721 32
+ 591 730 179
+ 341 364 146
+ 673 120 501
+ 31 183 207
+ 641 116 463
+ 221 54 775
+ 262 458 669
+ 139 486 904
+ 736 260 139
+ 406 359 663
+ 434 563 753
+ 981 6 215
+ 423 320 358
+ 719 319 415
+ 315 375 320
+ 7 637 423
+ 314 365 175
+ 199 687 754
+ 174 546 1
+ 29 526 754
+ 153 402 251
+ 787 565 919
+ 820 239 876
+ 994 614 47
+ 958 816 288
+ 244 750 275
+ 248 890 694
+ 628 194 414
+ 774 958 466
+ 181 34 442
+ 569 371 939
+ 500 347 740
+ 745 123 467
+ 614 662 119
+ 201 690 352
+ 596 974 215
+ 508 921 240
+ 405 947 317
+ 402 372 733
+ 298 41 357
+ 135 339 759
+ 544 683 690
+ 584 1 893
+ 215 680 501
+ 191 453 649
+ 952 84 727
+ 815 494 293
+ 163 168 46
+ 136 119 441
+ 185 112 474
+ 877 830 354
+ 497 242 226
+ 484 714 178
+ 854 570 402
+ 873 120 432
+ 30 613 50
+ 365 529 624
+ 969 332 586
+ 636 617 153
+ 588 669 314
+ 12 52 628
+ 584 704 642
+ 95 199 69
+ 979 486 705
+ 953 391 698
+ 698 471 333
+ 302 466 64
+ 678 19 376
+ 353 860 905
+ 236 113 797
+ 400 879 962
+ 341 805 493
+ 661 506 196
+ 736 357 644
+ 943 352 365
+ 484 756 282
+ 491 943 262
+ 765 494 729
+ 321 208 986
+ 621 346 290
+ 258 706 386
+ 179 452 276
+ 433 583 153
+ 708 2 212
+ 193 151 320
+ 647 149 299
+ 335 951 831
+ 661 787 792
+ 818 742 477
+ 799 964 157
+ 726 780 172
+ 740 225 24
+ 428 39 263
+ 388 901 506
+ 97 940 413
+ 41 454 826
+ 324 453 443
+ 346 76 938
+ 463 595 751
+ 854 948 454
+ 451 902 507
+ 722 961 130
+ 695 529 425
+ 59 591 467
+ 559 623 222
+ 991 194 196
+ 749 793 245
+ 474 327 247
+ 346 2 277
+ 643 328 135
+ 785 264 751
+ 35 537 887
+ 811 584 685
+ 475 903 748
+ 471 115 698
+ 7 945 449
+ 464 880 227
+ 287 868 878
+ 564 11 850
+ 221 623 475
+ 314 325 553
+ 209 865 621
+ 39 655 236
+ 95 296 235
+ 124 920 21
+ 439 473 902
+ 334 375 792
+ 315 116 768
+ 267 736 95
+ 703 606 595
+ 505 886 514
+ 114 168 52
+ 301 584 495
+ 200 709 527
+ 164 422 554
+ 246 546 460
+ 377 141 223
+ 286 323 354
+ 810 240 90
+ 920 450 425
+ 277 8 570
+ 28 649 50
+ 295 650 534
+ 690 187 665
+ 674 184 483
+ 68 139 376
+ 570 430 500
+ 590 422 543
+ 304 68 43
+ 422 666 163
+ 501 375 696
+ 81 621 813
+ 19 981 945
+ 410 83 941
+ 427 945 25
+ 283 408 825
+ 281 648 635
+ 294 678 615
+ 113 936 500
+ 554 772 314
+ 502 642 624
+ 262 318 699
+ 88 526 817
+ 242 468 161
+ 820 179 253
+ 580 62 531
+ 343 183 422
+ 430 161 485
+ 26 127 435
+ 442 32 517
+ 491 243 544
+ 552 680 310
+ 131 489 457
+ 697 162 526
+ 897 838 305
+ 695 748 335
+ 753 936 24
+ 46 681 637
+ 745 808 617
+ 318 251 171
+ 49 39 855
+ 359 284 725
+ 221 837 145
+ 581 821 444
+ 573 267 318
+ 706 969 583
+ 722 912 586
+ 680 86 869
+ 833 546 97
+ 865 507 481
+ 938 104 386
+ 941 217 265
+ 360 53 607
+ 634 197 476
+ 787 659 444
+ 368 163 783
+ 493 738 345
+ 182 539 52
+ 764 827 612
+ 699 493 663
+ 914 384 17
+ 495 546 260
+ 739 461 275
+ 386 91 394
+ 804 506 198
+ 780 421 269
+ 109 669 193
+ 457 298 349
+ 560 800 331
+ 282 153 637
+ 160 254 807
+ 434 204 476
+ 717 759 737
+ 629 785 65
+ 347 614 790
+ 270 663 647
+ 188 271 528
+ 277 929 591
+ 853 744 589
+ 704 881 761
+ 573 714 627
+ 541 689 287
+ 540 301 187
+ 670 397 368
+ 867 8 698
+ 869 146 802
+ 10 137 104
+ 164 575 450
+ 507 233 466
+ 548 425 46
+ 435 824 78
+ 334 951 34
+ 646 551 99
+ 60 829 569
+ 501 866 382
+ 440 327 222
+ 744 132 333
+ 800 983 126
+ 887 866 451
+ 28 599 39
+ 833 129 307
+ 804 519 319
+ 510 746 821
+ 639 209 561
+ 197 649 333
+ 638 644 361
+ 754 474 366
+ 193 219 106
+ 843 536 331
+ 483 634 611
+ 367 195 592
+ 753 71 115
+ 934 42 83
+ 337 75 85
+ 475 304 169
+ 672 143 211
+ 360 406 74
+ 370 119 111
+ 351 955 696
+ 543 849 785
+ 375 576 836
+ 288 316 239
+ 512 273 786
+ 721 407 82
+ 998 634 292
+ 449 399 284
+ 540 316 693
+ 430 68 984
+ 146 376 482
+ 785 134 643
+ 157 509 441
+ 808 615 552
+ 920 564 452
+ 407 341 441
+ 990 778 211
+ 822 325 925
+ 368 206 876
+ 491 153 126
+ 11 373 546
+ 854 752 143
+ 843 773 660
+ 777 472 964
+ 359 708 889
+ 575 941 882
+ 945 22 152
+ 968 237 115
+ 30 238 110
+ 101 504 412
+ 119 646 719
+ 28 190 336
+ 890 301 712
+ 11 657 782
+ 885 465 361
+ 424 669 645
+ 528 654 194
+ 894 252 667
+ 516 299 998
+ 370 837 976
+ 305 651 194
+ 701 447 175
+ 470 234 929
+ 752 606 965
+ 568 370 322
+ 226 592 281
+ 553 801 330
+ 576 228 623
+ 639 477 637
+ 252 664 998
+ 781 215 994
+ 446 698 25
+ 562 500 980
+ 702 444 299
+ 971 550 387
+ 754 562 439
+ 347 896 716
+ 242 861 596
+ 588 829 323
+ 464 211 949
+ 481 192 47
+ 598 98 963
+ 932 960 32
+ 933 482 893
+ 15 989 888
+ 866 735 629
+ 636 513 470
+ 280 528 944
+ 531 66 867
+ 284 735 865
+ 778 743 3
+ 458 131 262
+ 772 273 255
+ 942 278 50
+ 269 151 917
+ 502 4 883
+ 538 155 68
+ 929 850 21
+ 126 759 729
+ 869 689 711
+ 180 359 855
+ 299 68 975
+ 210 371 205
+ 477 183 827
+ 922 50 841
+ 665 154 312
+ 379 848 486
+ 450 835 743
+ 69 161 515
+ 680 535 83
+ 692 779 352
+ 818 554 389
+ 781 89 538
+ 746 218 209
+ 292 201 652
+ 417 375 393
+ 916 962 644
+ 518 923 561
+ 915 469 386
+ 142 460 454
+ 947 392 89
+ 144 840 866
+ 205 465 967
+ 209 657 650
+ 891 322 207
+ 800 522 907
+ 516 498 994
+ 185 806 804
+ 179 393 137
+ 316 765 892
+ 850 756 123
+ 494 783 627
+ 832 53 659
+ 93 949 602
+ 666 954 516
+ 592 11 210
+ 223 4 389
+ 221 280 388
+ 100 279 50
+ 380 589 345
+ 385 238 382
+ 205 506 359
+ 98 280 652
+ 396 371 290
+ 314 477 454
+ 368 692 564
+ 48 263 586
+ 356 902 922
diff --git a/2016/aoc3/src/main.rs b/2016/aoc3/src/main.rs
new file mode 100644
index 0000000..678933f
--- /dev/null
+++ b/2016/aoc3/src/main.rs
@@ -0,0 +1,64 @@
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+
+
+struct Triangle {
+ l1: i32,
+ l2: i32,
+ l3: i32
+}
+
+impl Triangle {
+ fn is_valid(&self) -> bool {
+ (self.l1 + self.l2) > self.l3 &&
+ (self.l2 + self.l3) > self.l1 &&
+ (self.l3 + self.l1) > self.l2
+
+ }
+}
+
+fn main() {
+ let len = read_file().iter().filter(|tri| tri.is_valid()).count();
+ println!("{} valid triangles", len);
+}
+
+fn read_file() -> Vec<Triangle> {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+ let mut lines = file.lines()
+ .map(|line| line.unwrap().trim().to_string())
+ .filter(|line| line.len() > 0)
+ .peekable();
+
+ let mut results = Vec::new();
+ while lines.peek().is_some() {
+ let (t11, t21, t31) = parse_line(lines.next().unwrap());
+ let (t12, t22, t32) = parse_line(lines.next().unwrap());
+ let (t13, t23, t33) = parse_line(lines.next().unwrap());
+
+ results.push(Triangle {
+ l1: t11,
+ l2: t12,
+ l3: t13
+ });
+ results.push(Triangle {
+ l1: t21,
+ l2: t22,
+ l3: t23
+ });
+ results.push(Triangle {
+ l1: t31,
+ l2: t32,
+ l3: t33
+ });
+ }
+ results
+}
+
+fn parse_line(line: String) -> (i32, i32, i32) {
+ let mut separated = line.split_whitespace();
+ (separated.next().unwrap().trim().parse().unwrap(),
+ separated.next().unwrap().trim().parse().unwrap(),
+ separated.next().unwrap().trim().parse().unwrap())
+}
+
diff --git a/2016/aoc4/Cargo.lock b/2016/aoc4/Cargo.lock
new file mode 100644
index 0000000..df3af88
--- /dev/null
+++ b/2016/aoc4/Cargo.lock
@@ -0,0 +1,4 @@
+[root]
+name = "aoc4"
+version = "0.1.0"
+
diff --git a/2016/aoc4/Cargo.toml b/2016/aoc4/Cargo.toml
new file mode 100644
index 0000000..7d02c6d
--- /dev/null
+++ b/2016/aoc4/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aoc4"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@gmail.com>"]
+
+[dependencies]
diff --git a/2016/aoc4/input.txt b/2016/aoc4/input.txt
new file mode 100644
index 0000000..c23ffc2
--- /dev/null
+++ b/2016/aoc4/input.txt
@@ -0,0 +1,1091 @@
+gbc-frperg-pubpbyngr-znantrzrag-377[rgbnp]
+nij-mywlyn-wlsiayhcw-jfumncw-alumm-mbcjjcha-422[mcjwa]
+pualyuhapvuhs-ibuuf-zhslz-227[uhalp]
+xlrypetn-prr-lylwjdtd-665[dzoya]
+zilqwikbqdm-rmttgjmiv-mvoqvmmzqvo-278[mqvio]
+rgllk-bxmefuo-sdmee-geqd-fqefuzs-274[efdgl]
+ugfkmewj-yjsvw-wyy-lwuzfgdgyq-814[wygfj]
+lnkfaypeha-xwogap-bejwjyejc-524[uqzms]
+laffe-sorozgxe-mxgjk-jek-xkykgxin-254[kxegf]
+ytu-xjhwjy-hfsid-htfynsl-qtlnxynhx-411[hyntx]
+vetllbybxw-xzz-mktbgbgz-709[kblty]
+ixeumktoi-kmm-giwaoyozout-176[oimkt]
+frqvxphu-judgh-udpsdjlqj-udeelw-uhvhdufk-647[ntbsq]
+ixccb-hjj-uhvhdufk-725[hcjub]
+sehheiylu-isqludwuh-xkdj-qsgkyiyjyed-634[ydehi]
+yhwooebeaz-acc-ajcejaanejc-316[acejo]
+qyujihctyx-vumeyn-zchuhwcha-318[hcuya]
+xtwtelcj-rclop-clmmte-nzyeltyxpye-171[eltcy]
+pinovwgz-mvwwdo-yzkgjthzio-941[owzgi]
+htwwtxnaj-xhfajsljw-mzsy-hzxytrjw-xjwanhj-229[jwhxa]
+amlqskcp-epybc-cee-pcyaosgqgrgml-652[cegpa]
+fab-eqodqf-omzpk-emxqe-560[eqfmo]
+bnmrtldq-fqzcd-idkkxadzm-qdrdzqbg-365[dqzbk]
+ovbunmneqbhf-wryylorna-qrirybczrag-559[rbnya]
+ynukcajey-xwogap-iwjwcaiajp-966[jydme]
+dkqjcbctfqwu-uecxgpigt-jwpv-fgrctvogpv-128[cgptv]
+ugfkmewj-yjsvw-tmffq-vwhdgqewfl-606[zfmlc]
+htqtwkzq-idj-ijxnls-723[rwmzt]
+kgjgrypw-epybc-aylbw-amyrgle-amlryglkclr-184[lygra]
+jxdkbqfz-yrkkv-bkdfkbbofkd-705[csxut]
+ujqgywfau-uzgugdslw-sfsdqkak-684[duboh]
+rwcnawjcrxwju-mhn-nwprwnnarwp-823[wnrac]
+eqttqukxg-rncuvke-itcuu-ujkrrkpi-102[ukrtc]
+jvuzbtly-nyhkl-ibuuf-dvyrzovw-201[uvybl]
+tvsnigxmpi-fewoix-wxsveki-750[ixesv]
+rtqlgevkng-ejqeqncvg-ncdqtcvqta-336[prlxq]
+wfummczcyx-luvvcn-nywbhifias-864[cfimn]
+irdgrxzex-vxx-nfibjyfg-763[xfgir]
+buzahisl-ipvohghykvbz-qlssfilhu-klclsvwtlua-591[moyzp]
+dpotvnfs-hsbef-sbnqbhjoh-fhh-nbobhfnfou-831[vbmns]
+owshgfarwv-lgh-kwujwl-usfvq-ghwjslagfk-164[wgfhl]
+yuxufmdk-sdmpq-bxmefuo-sdmee-dqeqmdot-222[dmequ]
+clotzlnetgp-clmmte-opawzjxpye-873[elptc]
+mfklstdw-usfvq-kwjnauwk-268[kwfsu]
+vhglnfxk-zktwx-unggr-xgzbgxxkbgz-839[gxkzb]
+yrwxefpi-tpewxmg-kveww-ywiv-xiwxmrk-932[pxhgu]
+shmml-cynfgvp-tenff-qrfvta-143[fmntv]
+zhdsrqlchg-sodvwlf-judvv-uhdftxlvlwlrq-855[ldvhf]
+kfg-jvtivk-sleep-uvjzxe-711[evjkf]
+molgbzqfib-yxphbq-obpbxoze-757[bopqx]
+qfmcusbwq-qobrm-qcohwbu-fsoqeiwgwhwcb-168[qwbco]
+sbejpbdujwf-gmpxfs-tupsbhf-623[bfpsj]
+jsehsyafy-hdsklau-yjskk-ksdwk-242[ksyad]
+rwcnawjcrxwju-ljwmh-bcxajpn-823[jwcan]
+excdklvo-oqq-oxqsxoobsxq-874[oqxsb]
+buzahisl-jhukf-jvhapun-klwsvftlua-565[uahlf]
+gpbepvxcv-snt-steadnbtci-453[tbcen]
+wyvqljapsl-ihzrla-zlycpjlz-149[lzajp]
+amlqskcp-epybc-cee-kylyeckclr-938[cekly]
+jchipqat-qphzti-advxhixrh-895[hiapq]
+tinnm-qvcqczohs-qighcasf-gsfjwqs-818[jfuek]
+qyujihctyx-mwupyhayl-bohn-wihnuchgyhn-890[hynuc]
+wlqqp-nvrgfezqvu-irsszk-ivjvrity-607[viqrs]
+molgbzqfib-avb-cfkxkzfkd-315[bfkza]
+luxciuwncpy-wuhxs-womnigyl-mylpcwy-266[ylhtr]
+ugdgjxmd-bwddqtwsf-ugflsafewfl-762[qdtes]
+fmsledevhsyw-nippcfier-eguymwmxmsr-438[vmsip]
+xekdwvwnzkqo-xwogap-ajcejaanejc-706[aejwc]
+wfummczcyx-yaa-fiacmncwm-136[bxsio]
+rdadguja-tvv-ldgzhwde-375[dagve]
+wsvsdkbi-qbkno-oqq-domrxyvyqi-718[qobdi]
+oaxadrgx-qss-oazfmuzyqzf-300[mfedb]
+hqfxxnknji-uqfxynh-lwfxx-xfqjx-125[zkwtx]
+gpbepvxcv-qphzti-rdcipxcbtci-947[cpibt]
+etyyx-bzmcx-bnzshmf-qdrdzqbg-443[btyez]
+htqtwkzq-gzssd-qfgtwfytwd-541[ogntm]
+uiovmbqk-kpwkwtibm-mvoqvmmzqvo-798[awevt]
+zotts-vumeyn-xypyfijgyhn-448[qasni]
+zovldbkfz-pzxsbkdbo-erkq-xznrfpfqflk-367[eunpo]
+htwwtxnaj-gntmfefwitzx-hfsid-htfynsl-zxjw-yjxynsl-255[tfnwx]
+vhglnfxk-zktwx-vahvhetmx-labiibgz-839[hvxab]
+htqtwkzq-idj-wjhjnansl-983[rmtzn]
+irgyyolokj-vrgyzoi-mxgyy-aykx-zkyzotm-358[yogkz]
+ktfitzbgz-lvtoxgzxk-angm-wxitkmfxgm-943[vxmua]
+uwtojhynqj-hmthtqfyj-jslnsjjwnsl-879[jhnst]
+mrxivrexmsrep-gerhc-gsexmrk-hiwmkr-100[yzpuo]
+hdgdovmt-bmvyz-ezggtwzvi-adivixdib-707[divgz]
+lqwhuqdwlrqdo-iorzhu-ghvljq-959[qhldo]
+vhkkhlbox-wrx-inkvatlbgz-397[kbhlv]
+tyepcyletzylw-awldetn-rcldd-dezclrp-795[ldect]
+sedikcuh-whqtu-uww-tufqhjcudj-946[uhwcd]
+lsyrkjkbnyec-zvkcdsm-qbkcc-myxdksxwoxd-848[kcdsx]
+fnjyxwrinm-lqxlxujcn-mnyjacvnwc-355[ncjxl]
+gpbepvxcv-tvv-rdcipxcbtci-141[cvpbi]
+xgsvgmotm-hgyqkz-ykxboiky-124[gkymo]
+udskkaxawv-usfvq-esjcwlafy-814[uidxk]
+fydelmwp-nlyoj-opalcexpye-899[elpyo]
+aczupnetwp-qwzhpc-afcnsldtyr-717[cpant]
+bknsykmdsfo-nio-yzobkdsyxc-926[kosyb]
+xjmmjndqz-xcjxjgvoz-mzvxlpdndodji-343[fqvmn]
+amjmpdsj-qaytclecp-fslr-bcqgel-782[claej]
+fnjyxwrinm-ouxfna-anjlzdrbrcrxw-719[nrxaf]
+qcbgiasf-ufors-pogysh-zcuwghwqg-168[gscfh]
+kmjezxodgz-wpiit-mzxzdqdib-109[aypcu]
+ckgvutofkj-xghhoz-uvkxgzouty-696[ajsic]
+lsyrkjkbnyec-mkxni-cdybkqo-510[kybcn]
+tipfxvezt-gcrjkzt-xirjj-jvimztvj-919[pofxi]
+pbybeshy-cynfgvp-tenff-svanapvat-403[afnpv]
+cjpibabsepvt-cvooz-usbjojoh-155[objcp]
+jvyyvzpcl-lnn-ayhpupun-929[npylu]
+wsvsdkbi-qbkno-zvkcdsm-qbkcc-oxqsxoobsxq-276[sbkoq]
+ugdgjxmd-usfvq-ugslafy-ugflsafewfl-918[xbmpo]
+nwlddtqtpo-ojp-xlcvpetyr-639[ptdlo]
+nzcczdtgp-prr-opdtry-587[wsiym]
+ynssr-yehpxk-wxlbzg-111[plhnx]
+xjmmjndqz-xcjxjgvoz-xjiovdihzio-967[jxioz]
+enqvbnpgvir-pubpbyngr-znexrgvat-585[qtsjn]
+gvcskirmg-qekrixmg-ikk-xvemrmrk-126[kmrgi]
+gpbepvxcv-uadltg-ejgrwphxcv-921[gpvce]
+kmjezxodgz-nxvqzibzm-cpio-adivixdib-941[izdxb]
+hcd-gsqfsh-xszzmpsob-sbuwbssfwbu-428[sbfhu]
+nwlddtqtpo-upwwjmply-dpcgtnpd-119[pdtwl]
+mbggf-msvdly-zlycpjlz-929[aonev]
+lhkhszqx-fqzcd-qzaahs-btrsnldq-rdquhbd-443[qdhsz]
+luxciuwncpy-xsy-uwkocmcncih-500[cuinw]
+qvbmzvibqwvit-kpwkwtibm-zmkmqdqvo-564[mqvbi]
+tvsnigxmpi-jpsaiv-irkmriivmrk-568[yileu]
+vxupkizork-kmm-lotgtiotm-748[xymrs]
+gpewwmjmih-gerhc-hiwmkr-152[lostk]
+ibghopzs-gqojsbusf-vibh-rsgwub-818[bsghi]
+guahyncw-luvvcn-wihnuchgyhn-552[hncug]
+iruzfrtkzmv-treup-tfrkzex-ivjvrity-373[rtivz]
+dsxxw-cee-ylyjwqgq-704[eqwxy]
+lhkhszqx-fqzcd-eknvdq-lzmzfdldms-911[dzlqf]
+oxmeeuruqp-omzpk-oamfuzs-emxqe-248[emoup]
+dyz-combod-mkxni-mykdsxq-vklybkdybi-848[dkybm]
+bpvctixr-qphzti-ldgzhwde-999[abmop]
+kwvacumz-ozilm-jiasmb-mvoqvmmzqvo-824[tnqvi]
+njmjubsz-hsbef-kfmmzcfbo-nbobhfnfou-389[luxhg]
+hwbba-fag-tgceswkukvkqp-622[kabgw]
+nchhg-jiasmb-lmxizbumvb-382[bmhia]
+ymszqfuo-dmnnuf-emxqe-170[syxpj]
+ymszqfuo-qss-abqdmfuaze-144[qsafm]
+tcfkqcevkxg-hwbba-hnqygt-vtckpkpi-440[kctbg]
+zloolpfsb-gbiivybxk-rpbo-qbpqfkd-705[bopfi]
+slqryzjc-pyzzgr-rpyglgle-288[uanmz]
+iutyaskx-mxgjk-inuiurgzk-rumoyzoiy-696[klmzy]
+dpssptjwf-cvooz-efqmpznfou-311[fopsz]
+dsxxw-cee-dglylagle-756[eldgx]
+nwlddtqtpo-upwwjmply-xlcvpetyr-223[pltwd]
+jvuzbtly-nyhkl-lnn-lunpullypun-201[tqlba]
+uiovmbqk-kivlg-bmkpvwtwog-720[kpvsu]
+nchhg-xtiabqk-oziaa-zmamizkp-850[aizhk]
+molgbzqfib-zixppfcfba-gbiivybxk-pqloxdb-237[igmjz]
+jyfvnlupj-jhukf-jvhapun-yljlpcpun-539[dmnws]
+hqtyeqsjylu-sqdto-tufqhjcudj-712[cnysz]
+gsvvswmzi-gerhc-gsrxemrqirx-100[dlypm]
+ktwbhtvmbox-xzz-vhgmtbgfxgm-709[bgmtx]
+hjgbwuladw-uzgugdslw-vwhsjlewfl-580[wlgud]
+njmjubsz-hsbef-kfmmzcfbo-efqmpznfou-181[subnv]
+bnknqetk-bzmcx-zbpthrhshnm-417[bhnkm]
+gspsvjyp-fyrrc-jmrergmrk-126[rgjmp]
+bjfutsneji-gntmfefwitzx-kqtbjw-fhvznxnynts-307[ntfjb]
+sedikcuh-whqtu-rqiauj-tuiywd-270[gipnv]
+hjgbwuladw-bwddqtwsf-jwsuimakalagf-294[wadbf]
+encuukhkgf-uecxgpigt-jwpv-rwtejcukpi-986[ucegk]
+nzydfxpc-rclop-nlyoj-nzletyr-zapcletzyd-847[lyzcn]
+eqpuwogt-itcfg-lgnnadgcp-tgceswkukvkqp-518[gckpt]
+nzwzcqfw-mldvpe-afcnsldtyr-171[cdfln]
+ide-htrgti-snt-advxhixrh-401[hitdr]
+fmsledevhsyw-gerhc-gsexmrk-erepcwmw-776[emrsw]
+jvyyvzpcl-yhiipa-aljouvsvnf-201[vyaij]
+chnylhuncihuf-zfiqyl-mniluay-656[hilnu]
+udskkaxawv-xdgowj-klgjsyw-346[eruiv]
+pbeebfvir-sybjre-qrcnegzrag-585[erbga]
+aoubshwq-qobrm-obozmgwg-948[obgmq]
+jvsvymbs-ibuuf-huhsfzpz-747[subfh]
+qvbmzvibqwvit-jiasmb-ikycqaqbqwv-928[qbiva]
+zuv-ykixkz-kmm-jkyomt-748[kmyzi]
+slqryzjc-zsllw-amlryglkclr-808[lrcsy]
+enzcntvat-enoovg-ybtvfgvpf-273[vntef]
+iqmbazulqp-dmnnuf-oazfmuzyqzf-664[zfmqu]
+yaxsnlcrun-ouxfna-uxprbcrlb-537[nruxa]
+ovbunmneqbhf-cynfgvp-tenff-ratvarrevat-351[uakpm]
+qzchnzbshud-idkkxadzm-rghoohmf-885[hdzkm]
+fodvvlilhg-sodvwlf-judvv-fxvwrphu-vhuylfh-101[vfhld]
+qvbmzvibqwvit-kpwkwtibm-apqxxqvo-798[qvbiw]
+aoubshwq-pwcvonofrcig-rms-aofyshwbu-688[oswab]
+hwbba-gii-fgrnqaogpv-882[gabif]
+pkl-oaynap-acc-pnwejejc-186[acpej]
+ltpedcxots-qphzti-ejgrwphxcv-323[ptceh]
+mybbycsfo-nio-nofovyzwoxd-250[stdkc]
+bgmxkgtmbhgte-ietlmbv-zktll-inkvatlbgz-397[ptrnf]
+dpotvnfs-hsbef-dipdpmbuf-qvsdibtjoh-545[dbfps]
+fmsledevhsyw-veqtekmrk-tpewxmg-kveww-hitevxqirx-568[evwkm]
+ykjoqian-cnwza-ywjzu-ykwpejc-wymqeoepekj-628[hmfzu]
+wihmogyl-aluxy-vumeyn-jolwbumcha-240[lmuya]
+yuxufmdk-sdmpq-eomhqzsqd-tgzf-emxqe-664[mqdef]
+wifilzof-vumeyn-guhuaygyhn-864[uyfgh]
+hplazytkpo-nlyoj-cpdplcns-457[plcno]
+vhglnfxk-zktwx-utldxm-hixktmbhgl-917[tursp]
+jxdkbqfz-zxkav-zlxqfkd-pxibp-133[xkzbd]
+mfklstdw-xdgowj-jwuwanafy-554[wadfj]
+eqttqukxg-tcddkv-vtckpkpi-596[ampxv]
+tpspahyf-nyhkl-jovjvshal-mpuhujpun-591[fkeyj]
+vqr-ugetgv-ecpfa-eqcvkpi-ujkrrkpi-414[ekprv]
+mvkccspson-bkllsd-nozvyiwoxd-952[oscdk]
+ugjjgkanw-ugfkmewj-yjsvw-bwddqtwsf-kwjnauwk-528[nkliy]
+wkqxodsm-lexxi-myxdksxwoxd-848[xdkmo]
+tfiifjzmv-tyftfcrkv-jyzggzex-841[unmyd]
+wdjcvuvmyjpn-rzvkjiduzy-mvwwdo-adivixdib-421[dvijw]
+xzwrmkbqtm-jcvvg-amzdqkma-226[uonyt]
+tvsnigxmpi-mrxivrexmsrep-veffmx-xvemrmrk-308[mrxev]
+iehepwnu-cnwza-nwxxep-owhao-420[wenah]
+fubrjhqlf-edvnhw-wudlqlqj-725[lqdfh]
+wfummczcyx-wuhxs-mniluay-370[cbijt]
+jchipqat-eaphixr-vgphh-sthxvc-895[hpaci]
+pelbtravp-ohaal-hfre-grfgvat-169[arefg]
+jshzzpmplk-jhukf-aljouvsvnf-279[jfhkl]
+hwbba-ejqeqncvg-ocpcigogpv-128[cgbeo]
+fnjyxwrinm-ajkkrc-cajrwrwp-745[rjwac]
+mhi-lxvkxm-utldxm-tgterlbl-267[lmtxb]
+jxdkbqfz-bdd-pqloxdb-237[dbqxf]
+qfkkj-nzydfxpc-rclop-clmmte-xlylrpxpye-197[vzyuc]
+bxaxipgn-vgpst-qxdwpopgsdjh-ytaanqtpc-hwxeexcv-687[csdop]
+rdggdhxkt-eaphixr-vgphh-itrwcdadvn-245[dhgra]
+qlm-pbzobq-zxkav-zlxqfkd-obzbfsfkd-471[bzfkq]
+ajyqqgdgcb-qaytclecp-fslr-sqcp-rcqrgle-106[cqglr]
+zgmfyxypbmsq-aylbw-amyrgle-qfgnngle-704[jmbna]
+pkl-oaynap-acc-zalhkuiajp-654[apckl]
+bqxnfdmhb-okzrshb-fqzrr-btrsnldq-rdquhbd-599[nszgr]
+mybbycsfo-mkxni-mykdsxq-cobfsmoc-302[mbcos]
+ujoon-eaphixr-vgphh-ldgzhwde-141[hdego]
+iuxxuyobk-hatte-lotgtiotm-852[toiux]
+muqfedyput-rkddo-huqsgkyiyjyed-608[dyuek]
+mrxivrexmsrep-ikk-irkmriivmrk-230[rikme]
+htqtwkzq-wfggny-ywfnsnsl-749[nwfgq]
+sno-rdbqds-idkkxadzm-trdq-sdrshmf-599[dsrkm]
+apuut-wpiit-gvwjmvojmt-369[tijmp]
+molgbzqfib-yxphbq-tlohpelm-133[blhmo]
+ugdgjxmd-wyy-hmjuzskafy-866[ydgjm]
+slqryzjc-hcjjwzcyl-dglylagle-860[lcjyg]
+ktwbhtvmbox-wrx-etuhktmhkr-241[psbxd]
+oaddaeuhq-otaoaxmfq-ruzmzouzs-950[aouzd]
+ugfkmewj-yjsvw-tmffq-klgjsyw-528[sqogh]
+vrurcjah-pajmn-ajvyjprwp-ljwmh-anlnrerwp-433[jkstx]
+fab-eqodqf-vqxxknqmz-ymdwqfuzs-586[qfdmx]
+tpspahyf-nyhkl-kfl-klwhyatlua-123[lahky]
+zntargvp-enoovg-znexrgvat-195[gnvae]
+dkqjcbctfqwu-uecxgpigt-jwpv-ugtxkegu-934[gucte]
+owshgfarwv-xdgowj-jwkwsjuz-320[wjgos]
+gifavtkzcv-treup-jyzggzex-659[gzetv]
+bjfutsneji-gfxpjy-tujwfyntsx-203[jftns]
+pxtihgbsxw-ietlmbv-zktll-ybgtgvbgz-371[bgtli]
+crwwv-zxkav-pefmmfkd-367[fkmvw]
+sbqiiyvyut-fbqijys-whqii-tulubefcudj-998[xytos]
+gvcskirmg-gsvvswmzi-fewoix-pskmwxmgw-230[gmswi]
+eqttqukxg-ejqeqncvg-octmgvkpi-232[qegtc]
+lqwhuqdwlrqdo-fdqgb-zrunvkrs-439[qdrlu]
+tinnm-gqojsbusf-vibh-gozsg-480[gsbin]
+lujbbrornm-ljwmh-orwjwlrwp-849[rwjlb]
+jef-iushuj-rkddo-efuhqjyedi-868[dejuf]
+szfyrqriuflj-treup-jrcvj-971[slkjz]
+ltpedcxots-rpcsn-itrwcdadvn-921[cdtnp]
+ohmnuvfy-xsy-jolwbumcha-968[hmouy]
+gntmfefwitzx-wfintfhynaj-uqfxynh-lwfxx-wjhjnansl-905[fnwxh]
+xcitgcpixdcpa-tvv-hwxeexcv-271[cxvei]
+jyfvnlupj-qlssfilhu-ayhpupun-227[zbydk]
+wdjcvuvmyjpn-zbb-vxlpdndodji-291[djvbn]
+wfummczcyx-dyffsvyuh-xymcah-630[ycfmh]
+cebwrpgvyr-wryylorna-phfgbzre-freivpr-897[opgba]
+cjpibabsepvt-tdbwfohfs-ivou-fohjoffsjoh-363[fobhj]
+zekvierkzferc-jtrmvexvi-ylek-wzeretzex-425[erzkv]
+sgmtkzoi-pkrrehkgt-ygrky-228[kgrty]
+iruzfrtkzmv-jtrmvexvi-ylek-jkfirxv-971[nvfye]
+dfcxsqhwzs-pogysh-obozmgwg-870[goshw]
+yuxufmdk-sdmpq-vqxxknqmz-bgdotmeuzs-326[tidcv]
+iuxxuyobk-igtje-ygrky-878[mflrz]
+laffe-igtje-vaxingyotm-800[aefgi]
+tpspahyf-nyhkl-wshzapj-nyhzz-zhslz-643[hzpsy]
+diozmivodjivg-xviyt-ozxcijgjbt-473[cmtlp]
+pyknyegle-njyqrga-epyqq-pcyaosgqgrgml-314[gyqep]
+bwx-amkzmb-zijjqb-tijwzibwzg-824[egorq]
+drxevkzt-vxx-uvjzxe-581[xvezd]
+ktfitzbgz-cxeeruxtg-wxitkmfxgm-761[txgef]
+htsxzrjw-lwfij-wfggny-ywfnsnsl-801[cjidb]
+oxmeeuruqp-nmewqf-pqeusz-742[eqump]
+hqfxxnknji-kzeed-ojqqdgjfs-jslnsjjwnsl-671[jnsqd]
+pbybeshy-rtt-phfgbzre-freivpr-221[rbepf]
+pdjqhwlf-edvnhw-xvhu-whvwlqj-231[hwvdj]
+gcfcnuls-aluxy-vumeyn-lywycpcha-188[cylua]
+plolwdub-judgh-edvnhw-pdqdjhphqw-699[dhpwj]
+udpsdjlqj-hjj-pdqdjhphqw-751[jdhpq]
+amjmpdsj-pyzzgr-qyjcq-886[jmpqy]
+lahxpnwrl-ljwmh-bqryyrwp-667[tifxe]
+drxevkzt-avccpsvre-uvgcfpdvek-191[vcedk]
+xzwrmkbqtm-rmttgjmiv-apqxxqvo-928[lmkgz]
+eqnqthwn-tcddkv-fgrctvogpv-648[tvcdg]
+bjfutsneji-ojqqdgjfs-ijajqturjsy-515[jqsfi]
+sebehvkb-hqrryj-ixyffydw-166[siyrz]
+zlkprjbo-doxab-mixpqfz-doxpp-jxohbqfkd-783[yjhzq]
+eza-dpncpe-nsznzwlep-opdtry-821[sdeti]
+tbxmlkfwba-yxphbq-xkxivpfp-523[slfmk]
+ucynmlgxcb-hcjjwzcyl-umpiqfmn-548[cmjln]
+lxwbdvna-pajmn-bljenwpna-qdwc-dbna-cnbcrwp-199[nabwc]
+eadalsjq-yjsvw-wyy-jwsuimakalagf-892[ajswy]
+fruurvlyh-mhoobehdq-zrunvkrs-907[rhuov]
+sbqiiyvyut-vbemuh-sedjqydcudj-686[ltadr]
+fkqbokxqflkxi-avb-lmboxqflkp-991[kbflq]
+lhkhszqx-fqzcd-atmmx-kzanqzsnqx-677[qzxah]
+cebwrpgvyr-hafgnoyr-cynfgvp-tenff-qrcnegzrag-793[rxmql]
+ajmrxjlcren-cxy-bnlanc-ouxfna-lxwcjrwvnwc-927[cnxaj]
+hqtyeqsjylu-isqludwuh-xkdj-tulubefcudj-244[udjlq]
+vdzonmhydc-azrjds-cdudknoldms-157[lzowh]
+uwtojhynqj-kqtbjw-zxjw-yjxynsl-333[grmkp]
+myxcewob-qbkno-oqq-ecob-docdsxq-614[oqbcd]
+rkpqxyib-gbiivybxk-abpfdk-419[bikpx]
+zlilocri-zelzlixqb-qbzeklildv-497[ucyzj]
+pinovwgz-xviyt-vivgtndn-499[vingt]
+gcfcnuls-aluxy-luvvcn-xymcah-318[cluan]
+sebehvkb-fbqijys-whqii-husuylydw-400[bhisy]
+rdchjbtg-vgpst-eaphixr-vgphh-rjhidbtg-htgkxrt-323[hgtrp]
+pualyuhapvuhs-jshzzpmplk-wshzapj-nyhzz-zlycpjlz-175[zphla]
+atyzghrk-sgmtkzoi-hgyqkz-yzuxgmk-228[gkzyh]
+ohmnuvfy-mwupyhayl-bohn-yhachyylcha-630[hyacl]
+oxjmxdfkd-avb-pqloxdb-211[dxboa]
+iqmbazulqp-bdavqofuxq-omzpk-ruzmzouzs-482[zqumo]
+zsxyfgqj-gzssd-wjxjfwhm-619[jsfgw]
+qvbmzvibqwvit-jcvvg-abwziom-512[tcrkb]
+xgjougizobk-lruckx-aykx-zkyzotm-826[koxzg]
+bkzrrhehdc-rbzudmfdq-gtms-zmzkxrhr-755[rzdhm]
+myxcewob-qbkno-cmkfoxqob-rexd-zebmrkcsxq-302[syrvm]
+zekvierkzferc-treup-tfrkzex-uvgrikdvek-867[ekrvz]
+cvabijtm-lgm-bziqvqvo-330[vbimq]
+vhglnfxk-zktwx-ktuubm-vhgmtbgfxgm-553[gkmtx]
+xst-wigvix-fyrrc-vieguymwmxmsr-490[yentm]
+ktfitzbgz-fbebmtkr-zktwx-xzz-lmhktzx-111[ztkbx]
+vdzonmhydc-eknvdq-sqzhmhmf-963[xacdu]
+dmpuamofuhq-otaoaxmfq-efadmsq-742[amfoq]
+htqtwkzq-gfxpjy-wjxjfwhm-827[fnred]
+sbnqbhjoh-xfbqpojafe-cbtlfu-dpoubjonfou-311[kezry]
+qyujihctyx-vumeyn-lywycpcha-604[ychua]
+ide-htrgti-tvv-uxcpcrxcv-973[ctvir]
+bxaxipgn-vgpst-snt-gtprfjxhxixdc-791[xgpti]
+nbhofujd-dipdpmbuf-dvtupnfs-tfswjdf-363[dfpub]
+apuut-nxvqzibzm-cpio-mznzvmxc-291[zmcin]
+uzfqdzmfuazmx-otaoaxmfq-pqhqxabyqzf-768[pzmry]
+tpspahyf-nyhkl-ibuuf-klwhyatlua-253[xkrsz]
+iqmbazulqp-vqxxknqmz-efadmsq-950[jrnox]
+bpvctixr-rpcsn-igpxcxcv-375[cpxir]
+ytu-xjhwjy-uqfxynh-lwfxx-yjhmstqtld-489[xyhjt]
+qvbmzvibqwvit-ntwemz-kwvbiqvumvb-720[vbimq]
+mhi-lxvkxm-ietlmbv-zktll-vnlmhfxk-lxkobvx-553[eusnm]
+tpspahyf-nyhkl-jhukf-wbyjohzpun-487[hpyfj]
+avw-zljyla-qlssfilhu-zlycpjlz-929[lzajs]
+sawlkjevaz-xwogap-skngodkl-290[akglo]
+xgjougizobk-laffe-lruckx-gtgreyoy-774[goefk]
+aoubshwq-qobrm-qcohwbu-qighcasf-gsfjwqs-948[qsbho]
+wifilzof-vumeyn-lyuwkocmcncih-968[avixc]
+uiovmbqk-xtiabqk-oziaa-mvoqvmmzqvo-382[moqva]
+sawlkjevaz-oywrajcan-dqjp-lqnydwoejc-342[ajwcd]
+kfg-jvtivk-jtrmvexvi-ylek-rercpjzj-529[jvekr]
+houngfgxjuay-igtje-giwaoyozout-228[gouai]
+gcfcnuls-aluxy-mwupyhayl-bohn-ijyluncihm-916[tacdb]
+cjpibabsepvt-cvooz-ufdiopmphz-155[pobci]
+iuxxuyobk-igtje-sgtgmksktz-878[uwcvx]
+thnulapj-ibuuf-ylzlhyjo-305[sfdnr]
+xzwrmkbqtm-rmttgjmiv-zmamizkp-434[ifpry]
+yhwooebeaz-zua-yqopkian-oanreya-680[aoeyn]
+tfcfiwlc-wcfnvi-wzeretzex-243[cefwi]
+guahyncw-xsy-uwkocmcncih-864[qsmtb]
+ovbunmneqbhf-rtt-qrfvta-689[zymsd]
+rgllk-eomhqzsqd-tgzf-ymdwqfuzs-638[qzdfg]
+ryexqpqhteki-sqdto-seqjydw-skijecuh-iuhlysu-946[eqshi]
+avw-zljyla-qlssfilhu-mpuhujpun-383[luahj]
+pynffvsvrq-onfxrg-znantrzrag-143[nrfag]
+ikhcxvmbex-xzz-phkdlahi-839[cstrx]
+mvhkvbdib-wvnfzo-zibdizzmdib-187[bizdv]
+ipvohghykvbz-wshzapj-nyhzz-huhsfzpz-747[hzpsv]
+htqtwkzq-hmthtqfyj-ijuqtdrjsy-151[tqhjy]
+xzz-ftgtzxfxgm-865[tupfq]
+jyfvnlupj-jhukf-klwhyatlua-747[jydsc]
+mbiyqoxsm-mkxni-kxkvicsc-510[ikmxc]
+bgmxkgtmbhgte-ietlmbv-zktll-labiibgz-163[bglti]
+vdzonmhydc-bqxnfdmhb-rbzudmfdq-gtms-lzmzfdldms-469[arkps]
+forwcoqhwjs-gqojsbusf-vibh-rsgwub-688[dgqsb]
+qcffcgwjs-pogysh-qcbhowbasbh-688[bchsf]
+apuut-xviyt-yzqzgjkhzio-317[zituy]
+ide-htrgti-qjccn-jhtg-ithixcv-479[itchg]
+kgjgrypw-epybc-hcjjwzcyl-cleglccpgle-262[qphrv]
+atyzghrk-lruckx-jkvruesktz-384[krtuz]
+hqtyeqsjylu-rqiauj-vydqdsydw-998[gqeba]
+uwtojhynqj-gfxpjy-qfgtwfytwd-177[fjtwy]
+nglmtuex-xzz-ftgtzxfxgm-839[xgtzf]
+ncjzrpytn-clmmte-epnsyzwzrj-951[yqksh]
+gntmfefwitzx-gzssd-htsyfnsrjsy-333[cngmk]
+qcbgiasf-ufors-qvcqczohs-hfowbwbu-168[bcfoq]
+wlqqp-gcrjkzt-xirjj-dribvkzex-529[ycrxs]
+drxevkzt-irdgrxzex-jtrmvexvi-ylek-glityrjzex-321[erxit]
+ovbunmneqbhf-qlr-znexrgvat-559[nbeqr]
+bwx-amkzmb-jiasmb-camz-bmabqvo-512[bmazc]
+vcibutulxiom-vohhs-womnigyl-mylpcwy-838[fczlm]
+fmsledevhsyw-ikk-hitpscqirx-230[owjnv]
+ykhknbqh-ywjzu-ykwpejc-odellejc-940[xguqm]
+nsyjwsfyntsfq-gzssd-uzwhmfxnsl-203[sfnwy]
+mtzslklcozfd-clmmte-nzyeltyxpye-301[tmlui]
+dsxxw-cee-kypicrgle-106[ecxdg]
+ujqgywfau-aflwjfslagfsd-tskcwl-ghwjslagfk-476[fagls]
+nchhg-jcvvg-mvoqvmmzqvo-642[vmcgh]
+cjpibabsepvt-tdbwfohfs-ivou-efqmpznfou-831[mvwiq]
+votubcmf-njmjubsz-hsbef-dboez-dpbujoh-fohjoffsjoh-129[izchs]
+njmjubsz-hsbef-fhh-nbobhfnfou-337[unims]
+iwcjapey-lhwopey-cnwoo-hkceopeyo-576[oecpw]
+ydjuhdqjyedqb-fbqijys-whqii-efuhqjyedi-322[qdijy]
+bknsykmdsfo-lkcuod-mecdywob-cobfsmo-250[obcdk]
+sbqiiyvyut-zubboruqd-cqdqwucudj-530[uqbdc]
+etaqigpke-dcumgv-vgejpqnqia-960[egqai]
+ykjoqian-cnwza-nwxxep-paydjkhkcu-134[pcdmt]
+iehepwnu-cnwza-lhwopey-cnwoo-nawymqeoepekj-108[ewnop]
+vagreangvbany-rtt-phfgbzre-freivpr-221[raegv]
+surmhfwloh-sodvwlf-judvv-xvhu-whvwlqj-595[vhwlu]
+qekrixmg-ikk-gywxsqiv-wivzmgi-256[jsykh]
+sno-rdbqds-bgnbnkzsd-otqbgzrhmf-495[rypqa]
+guahyncw-vohhs-nywbhifias-214[hains]
+sno-rdbqds-atmmx-bnmszhmldms-365[posvl]
+zovldbkfz-zxkav-zlxqfkd-zlkqxfkjbkq-575[zrqmk]
+ykhknbqh-zua-owhao-888[hakob]
+xmrrq-vqw-ugflsafewfl-372[isvjx]
+wdjcvuvmyjpn-wpiit-vxlpdndodji-395[cvdlm]
+wyvqljapsl-ihzrla-zopwwpun-123[lpwaz]
+kdijqrbu-tou-husuylydw-816[uvcwx]
+fhezusjybu-fbqijys-whqii-husuylydw-764[uyhis]
+jyfvnlupj-kfl-mpuhujpun-773[ujpfl]
+hafgnoyr-pubpbyngr-nanylfvf-715[nkyzs]
+jfifqxov-doxab-oxyyfq-absbilmjbkq-341[qmgrk]
+nij-mywlyn-wuhxs-wiuncha-uwkocmcncih-188[cnwhi]
+amjmpdsj-afmamjyrc-ylyjwqgq-470[jmayq]
+rdggdhxkt-eaphixr-vgphh-jhtg-ithixcv-921[yvuxl]
+ucynmlgxcb-qaytclecp-fslr-dglylagle-184[tudeg]
+dpmpsgvm-tdbwfohfs-ivou-sfdfjwjoh-363[qhgxy]
+bqvvu-ykhknbqh-fahhuxawj-wymqeoepekj-498[hekqa]
+qczcftiz-xszzmpsob-sbuwbssfwbu-818[sbzcf]
+aietsrmdih-hci-wlmttmrk-360[imthr]
+xst-wigvix-ikk-qevoixmrk-256[ikxve]
+nzydfxpc-rclop-nzwzcqfw-mfyyj-opalcexpye-405[cpyfz]
+frqvxphu-judgh-udeelw-uhdftxlvlwlrq-933[ludhe]
+jsehsyafy-jsttal-hmjuzskafy-892[sajyf]
+zbytomdsvo-mrymyvkdo-vyqscdsmc-276[mydos]
+tcorcikpi-ecpfa-eqcvkpi-fgxgnqrogpv-934[jziot]
+ytu-xjhwjy-hfsid-wjxjfwhm-905[jhwfx]
+hjgbwuladw-tmffq-suimakalagf-554[afglm]
+pyknyegle-zsllw-nspafyqgle-730[leygn]
+gifavtkzcv-avccpsvre-uvjzxe-607[zhayg]
+bpvctixr-snt-tcvxcttgxcv-973[vrteq]
+wyvqljapsl-jovjvshal-zlycpjlz-175[nrwfe]
+kwzzwaqdm-lgm-aitma-122[amwzd]
+iqmbazulqp-dmnnuf-qzsuzqqduzs-690[qhzsm]
+udskkaxawv-xdgowj-xafsfuafy-138[nailf]
+ipvohghykvbz-wshzapj-nyhzz-yljlpcpun-929[lwyvn]
+forwcoqhwjs-foppwh-hsqvbczcum-636[chowf]
+pualyuhapvuhs-msvdly-svnpzapjz-903[pasuv]
+xgjougizobk-vrgyzoi-mxgyy-xkykgxin-436[tjykb]
+sedikcuh-whqtu-rkddo-cqdqwucudj-348[brlqi]
+elrkdcdugrxv-fdqgb-uhfhlylqj-465[dlfgh]
+mhi-lxvkxm-lvtoxgzxk-angm-ltexl-917[xlmgk]
+bqvvu-fahhuxawj-yqopkian-oanreya-212[cpdwf]
+buzahisl-jhukf-thyrlapun-903[hualb]
+rgllk-oaxadrgx-nmewqf-pqbxakyqzf-690[aqxfg]
+iuruxlar-irgyyolokj-jek-ynovvotm-488[ohpdn]
+xmtjbzidx-nxvqzibzm-cpio-yzkgjthzio-811[zixbj]
+xmrrq-ugfkmewj-yjsvw-usfvq-ugslafy-ghwjslagfk-866[fgsju]
+yhtwhnpun-wshzapj-nyhzz-vwlyhapvuz-851[hznpw]
+zgmfyxypbmsq-zyqicr-kypicrgle-340[ycgim]
+uwtojhynqj-hfsid-htfynsl-wjfhvznxnynts-489[nhfjs]
+fab-eqodqf-dmnnuf-bgdotmeuzs-196[dfbem]
+wifilzof-wuhxs-wiuncha-lyuwkocmcncih-578[ciwhu]
+gspsvjyp-veffmx-pefsvexsvc-516[svefp]
+yknnkoera-xwogap-bejwjyejc-732[ejakn]
+nsyjwsfyntsfq-gfxpjy-knsfshnsl-333[sfnyj]
+fodvvlilhg-gbh-ghvljq-595[vgprj]
+nuatmlmdpage-bxmefuo-sdmee-emxqe-482[emadu]
+jvyyvzpcl-msvdly-vwlyhapvuz-903[vylpz]
+fruurvlyh-iorzhu-vdohv-517[hruvo]
+houngfgxjuay-hgyqkz-ykxboiky-618[ygkho]
+gsrwyqiv-kvehi-gerhc-gsexmrk-xiglrspskc-750[grsei]
+pualyuhapvuhs-qlssfilhu-zhslz-799[hlsua]
+nwlddtqtpo-nlyoj-nzletyr-opdtry-119[tdlno]
+fydelmwp-prr-nfdezxpc-dpcgtnp-535[pdcef]
+qmpmxevc-kvehi-jpsaiv-hizipstqirx-672[ipveh]
+nzwzcqfw-nlyoj-nzletyr-opawzjxpye-587[znwye]
+bpvctixr-rwdrdapit-hpath-973[prtad]
+gzefmnxq-omzpk-oazfmuzyqzf-430[zfmoq]
+wpuvcdng-hnqygt-vgejpqnqia-102[tmdxr]
+aoubshwq-foppwh-igsf-hsghwbu-610[tsrzk]
+wihmogyl-aluxy-mwupyhayl-bohn-mbcjjcha-422[vuypz]
+cqwdujys-uww-sedjqydcudj-478[djuwc]
+votubcmf-tdbwfohfs-ivou-sfbdrvjtjujpo-883[fobjt]
+gpbepvxcv-ytaanqtpc-apqdgpidgn-427[pagcd]
+bnknqetk-eknvdq-qdrdzqbg-885[qdknb]
+uwtojhynqj-wfruflnsl-hfsid-wjxjfwhm-541[fjwhl]
+zhdsrqlchg-fodvvlilhg-gbh-frqwdlqphqw-361[hlqdg]
+cvabijtm-jcvvg-lmxizbumvb-174[vbmci]
+fruurvlyh-fdqgb-ghsorbphqw-205[hrbfg]
+pualyuhapvuhs-msvdly-thyrlapun-279[uahlp]
+iehepwnu-cnwza-ydkykhwpa-ajcejaanejc-212[oqwrn]
+bqvvu-xwogap-yqopkian-oanreya-680[ckqtm]
+ktwbhtvmbox-vahvhetmx-mxvaghehzr-917[hvmtx]
+uzfqdzmfuazmx-omzpk-oamfuzs-fqotzaxask-274[mnilo]
+gntmfefwitzx-idj-rfsfljrjsy-931[fjirs]
+tcrjjzwzvu-tfiifjzmv-tyftfcrkv-vexzevvizex-399[vzfte]
+oaddaeuhq-vqxxknqmz-qzsuzqqduzs-404[qzdua]
+sorozgxe-mxgjk-yigbktmkx-natz-zxgototm-514[hejid]
+eadalsjq-yjsvw-ujqgywfau-tskcwl-kwjnauwk-554[wajks]
+lxuxaodu-rwcnawjcrxwju-ljwmh-fxatbqxy-693[xwaju]
+plolwdub-judgh-fdqgb-frdwlqj-vdohv-153[dlbfg]
+kdijqrbu-jef-iushuj-sqdto-seqjydw-kiuh-juijydw-218[iqtvx]
+tfejldvi-xiruv-tfcfiwlc-srjbvk-jyzggzex-243[fijvc]
+jchipqat-ltpedcxots-uadltg-tcvxcttgxcv-609[ezynj]
+ryexqpqhteki-sxesebqju-udwyduuhydw-816[eudqy]
+iuxxuyobk-xgjougizobk-hatte-sgtgmksktz-436[pwdlc]
+gcfcnuls-aluxy-wuhxs-wiuncha-guleyncha-136[ucahl]
+ugfkmewj-yjsvw-usfvq-ugslafy-mkwj-lwklafy-476[ohqre]
+laffe-vxupkizork-vrgyzoi-mxgyy-uvkxgzouty-488[awgqz]
+eqttqukxg-hnqygt-rwtejcukpi-570[tqegk]
+yuxufmdk-sdmpq-ngzzk-ruzmzouzs-534[zumdk]
+ktwbhtvmbox-ietlmbv-zktll-kxtvjnblbmbhg-553[btlkm]
+qxdwpopgsdjh-eaphixr-vgphh-prfjxhxixdc-999[hpxdg]
+bnmrtldq-fqzcd-oqnidbshkd-qzaahs-cdoknxldms-703[lxvwe]
+gokzyxsjon-nio-gybucryz-172[oygnz]
+cqwdujys-uww-cqhaujydw-660[wucdj]
+mbggf-pualyuhapvuhs-msvdly-aljouvsvnf-123[ngwhl]
+crwwv-oxaflxzqfsb-zelzlixqb-ixyloxqlov-913[lxoqz]
+qlm-pbzobq-ciltbo-abmxoqjbkq-861[bqolm]
+oqnidbshkd-dff-rghoohmf-313[dfhob]
+lzfmdshb-eknvdq-cdudknoldms-937[dklmn]
+wsvsdkbi-qbkno-nio-ecob-docdsxq-614[jsetb]
+zlilocri-zxkav-zlxqfkd-qoxfkfkd-835[kflxz]
+wlqqp-upv-vexzevvizex-165[vepqx]
+vcibutulxiom-vumeyn-womnigyl-mylpcwy-838[myilu]
+pelbtravp-cynfgvp-tenff-svanapvat-663[kzmfp]
+xgvnndadzy-wpiit-jkzmvodjin-421[dinjv]
+foadouwbu-pogysh-fsqswjwbu-480[osuwb]
+yrwxefpi-hci-wxsveki-308[iewxc]
+tmrszakd-azrjds-otqbgzrhmf-105[rzadm]
+sbnqbhjoh-dboez-dpbujoh-usbjojoh-155[bohjd]
+eqnqthwn-gii-fgrctvogpv-908[ginqt]
+uiovmbqk-jcvvg-amzdqkma-356[mvakq]
+sbejpbdujwf-gmpxfs-pqfsbujpot-857[pbfjs]
+ide-htrgti-ytaanqtpc-stepgibtci-531[mnyed]
+aietsrmdih-glsgspexi-gywxsqiv-wivzmgi-230[igsem]
+htqtwkzq-xhfajsljw-mzsy-zxjw-yjxynsl-931[cmkfr]
+ckgvutofkj-xgjougizobk-yigbktmkx-natz-lotgtiotm-436[tgkoi]
+nwlddtqtpo-upwwjmply-fdpc-epdetyr-509[pdtwe]
+irdgrxzex-sleep-jyzggzex-373[tvnma]
+crwwv-zxkav-qoxfkfkd-939[lyjmh]
+ejpanjwpekjwh-nwzekwypera-oywrajcan-dqjp-nawymqeoepekj-368[zmuyt]
+lzfmdshb-rbzudmfdq-gtms-knfhrshbr-495[bdfhm]
+nchhg-rmttgjmiv-uizsmbqvo-252[mghit]
+amjmpdsj-aylbw-rpyglgle-626[lagjm]
+dfcxsqhwzs-pogysh-qighcasf-gsfjwqs-220[sfghq]
+xjgjmapg-nxvqzibzm-cpio-nojmvbz-707[jmzbg]
+zntargvp-enoovg-qrirybczrag-663[scjtg]
+bkzrrhehdc-qzaahs-qdzbpthrhshnm-391[zjbto]
+hafgnoyr-wryylorna-erprvivat-429[rayno]
+apwmeclga-afmamjyrc-rpyglgle-262[aglmc]
+jsvagsulanw-jsttal-hmjuzskafy-606[asjlt]
+bnknqetk-lhkhszqx-fqzcd-cxd-zmzkxrhr-651[kzhqx]
+ykhknbqh-nwxxep-nayaerejc-966[enahk]
+vrurcjah-pajmn-kdwwh-cajrwrwp-667[rwajc]
+vhehkyne-utldxm-vhgmtbgfxgm-891[ghmet]
+zotts-dyffsvyuh-xymcah-812[yfhst]
+vhglnfxk-zktwx-vtgwr-vnlmhfxk-lxkobvx-319[gvnom]
+ajvyjprwp-mhn-nwprwnnarwp-563[npwra]
+guahyncw-chnylhuncihuf-jfumncw-alumm-guleyncha-110[zjirh]
+hwdtljsnh-jll-xfqjx-801[jlhxd]
+xjgjmapg-mvwwdo-xjiovdihzio-525[ijodg]
+pybgmyargtc-zgmfyxypbmsq-zsllw-asqrmkcp-qcptgac-262[cgmpy]
+aflwjfslagfsd-hdsklau-yjskk-esfsywewfl-528[sflak]
+lugjuacha-dyffsvyuh-xypyfijgyhn-708[yfhua]
+lxaaxbren-mhn-cnlqwxuxph-823[nzsvm]
+sehheiylu-tou-cqdqwucudj-738[xciqn]
+slqryzjc-djmucp-qrmpyec-808[sznhq]
+ykjoqian-cnwza-bhksan-opknwca-264[ankco]
+pualyuhapvuhs-lnn-bzly-alzapun-721[auzfj]
+tfiifjzmv-wcfnvi-jkfirxv-997[fivjc]
+lsyrkjkbnyec-mkxni-mykdsxq-vyqscdsmc-562[ksycm]
+fnjyxwrinm-lujbbrornm-ajkkrc-nwprwnnarwp-927[zmyco]
+pyknyegle-amlqskcp-epybc-hcjjwzcyl-qcptgacq-860[cpyel]
+rzvkjiduzy-ezggtwzvi-kpmxcvndib-811[zivdg]
+wyvqljapsl-yhiipa-bzly-alzapun-773[alpyi]
+joufsobujpobm-dipdpmbuf-bdrvjtjujpo-415[gvkud]
+zloolpfsb-zxkav-zlxqfkd-lmboxqflkp-393[lfkox]
+zilqwikbqdm-jcvvg-kwvbiqvumvb-174[vbiqk]
+kzeed-wfggny-xmnuunsl-853[negud]
+ftzgxmbv-xzz-phkdlahi-657[grbhi]
+bnqqnrhud-bzmcx-sqzhmhmf-131[hmqbn]
+zntargvp-pnaql-pbngvat-nanylfvf-169[napvf]
+jxdkbqfz-pzxsbkdbo-erkq-absbilmjbkq-315[uzmcf]
+jshzzpmplk-buzahisl-kfl-klzpnu-695[lzkph]
+pualyuhapvuhs-msvdly-jbzavtly-zlycpjl-825[lyapu]
+lujbbrornm-ouxfna-xynajcrxwb-667[bnrxa]
+dmpuamofuhq-nmewqf-pqhqxabyqzf-482[lndmj]
+cvabijtm-moo-zmikycqaqbqwv-148[mqabc]
+wyvqljapsl-msvdly-zlycpjlz-435[lyjps]
+fmsledevhsyw-ikk-gywxsqiv-wivzmgi-204[isvwe]
+ide-htrgti-snt-sthxvc-297[tyvnc]
+guahyncw-luvvcn-qilembij-292[tcrsd]
+udskkaxawv-wyy-kwjnauwk-710[kwauy]
+aczupnetwp-clmmte-dezclrp-379[ynpmz]
+ikhcxvmbex-ietlmbv-zktll-vnlmhfxk-lxkobvx-449[lxkvb]
+rzvkjiduzy-xcjxjgvoz-rjmfncjk-707[tmnki]
+enzcntvat-cynfgvp-tenff-ynobengbel-923[neftb]
+vkrhzxgbv-bgmxkgtmbhgte-lvtoxgzxk-angm-kxtvjnblbmbhg-111[iwvbg]
+esyfwlau-tskcwl-jwsuimakalagf-398[ywmzb]
+lhkhszqx-fqzcd-bzmcx-nodqzshnmr-287[zhqcd]
+nzwzcqfw-ojp-dstaatyr-977[dsznk]
+qfkkj-xlrypetn-nlyoj-xlcvpetyr-691[lczde]
+wifilzof-luvvcn-nywbhifias-552[sxghy]
+nchhg-kivlg-zmamizkp-928[ghikm]
+tipfxvezt-tcrjjzwzvu-upv-kirzezex-295[zetvi]
+gsvvswmzi-tpewxmg-kveww-gsrxemrqirx-698[wegmr]
+pynffvsvrq-sybjre-ernpdhvfvgvba-663[epsqt]
+sedikcuh-whqtu-vbemuh-udwyduuhydw-894[udhwe]
+tmrszakd-bzmcx-rsnqzfd-183[zdmrs]
+zilqwikbqdm-jcvvg-wxmzibqwva-798[iqvwb]
+lejkrscv-jtrmvexvi-ylek-nfibjyfg-815[ejvfi]
+zsxyfgqj-jll-qtlnxynhx-151[lxjnq]
+gbc-frperg-onfxrg-qrirybczrag-923[rgbcf]
+xjgjmapg-kgvnodx-bmvnn-nvgzn-343[ngvjm]
+dmybmsuzs-ngzzk-mocgueufuaz-534[uzmgs]
+dmpuamofuhq-omzpk-oamfuzs-pqbxakyqzf-482[mafop]
+fbebmtkr-zktwx-unggr-ehzblmbvl-787[begkl]
+zntargvp-enoovg-ybtvfgvpf-481[vgfno]
+fubrjhqlf-gbh-vhuylfhv-933[hfblu]
+fruurvlyh-fdqgb-frdwlqj-whfkqrorjb-569[tmdlw]
+ixccb-udeelw-ghvljq-335[nibrq]
+tcorcikpi-dwppa-fgukip-570[qnzgc]
+ibghopzs-pibbm-rsdzcmasbh-428[bshim]
+apuut-wpiit-nzmqdxzn-889[inptu]
+qzoggwtwsr-pibbm-igsf-hsghwbu-246[gbswh]
+atyzghrk-yigbktmkx-natz-uvkxgzouty-488[pxeoy]
+mbiyqoxsm-mkxni-bokmaescsdsyx-796[erynw]
+qxdwpopgsdjh-uadltg-itrwcdadvn-401[mzukc]
+tinnm-rms-kcfygvcd-688[cmndf]
+crwwv-mixpqfz-doxpp-xkxivpfp-107[tpawu]
+qxdwpopgsdjh-qphzti-itrwcdadvn-999[lenub]
+jqwpihizlwca-lgm-abwziom-538[iwalm]
+votubcmf-dboez-dpbujoh-gjobodjoh-909[szlxy]
+nwzekwypera-oywrajcan-dqjp-iwjwcaiajp-446[awjpc]
+lxuxaodu-vrurcjah-pajmn-ljwmh-cnlqwxuxph-329[uxahj]
+gvaaz-ezf-efwfmpqnfou-779[scdpt]
+jsvagsulanw-hdsklau-yjskk-vwhdgqewfl-190[saklw]
+yrwxefpi-fewoix-irkmriivmrk-828[irefk]
+jrncbavmrq-rtt-fgbentr-819[rtbna]
+tpspahyf-nyhkl-msvdly-klwsvftlua-409[lsyaf]
+veqtekmrk-tpewxmg-kveww-qerekiqirx-100[szdiy]
+ykhknbqh-ydkykhwpa-hkceopeyo-108[khyeo]
+gifavtkzcv-treup-tfrkzex-dribvkzex-503[ekrtv]
+hafgnoyr-pubpbyngr-bcrengvbaf-351[bgnra]
+ide-htrgti-gpqqxi-gtprfjxhxixdc-999[ixgtd]
+yhtwhnpun-ipvohghykvbz-wshzapj-nyhzz-zavyhnl-617[hznyp]
+enqvbnpgvir-pynffvsvrq-rtt-erprvivat-559[vrnpt]
+jxdkbqfz-yrkkv-pxibp-159[kbpxd]
+etyyx-rbzudmfdq-gtms-rdquhbdr-833[drbmq]
+owshgfarwv-udskkaxawv-hdsklau-yjskk-ogjckzgh-398[kasgh]
+xst-wigvix-gerhc-irkmriivmrk-828[ilntc]
+ugfkmewj-yjsvw-wyy-klgjsyw-684[wyjgk]
+zloolpfsb-mixpqfz-doxpp-pbosfzbp-211[topig]
+fruurvlyh-vfdyhqjhu-kxqw-orjlvwlfv-569[vfhlr]
+xst-wigvix-fyrrc-vigimzmrk-516[irgmv]
+rnqnyfwd-lwfij-wfggny-wjxjfwhm-281[wfjng]
+rdchjbtg-vgpst-ytaanqtpc-sthxvc-557[tcagh]
+fubrjhqlf-fdqgb-frdwlqj-dftxlvlwlrq-465[flqdr]
+qlm-pbzobq-pzxsbkdbo-erkq-xznrfpfqflk-679[bqfkp]
+ltpedcxots-rpcsn-bpcpvtbtci-921[dtejs]
+froruixo-edvnhw-ghsorbphqw-231[horwb]
+bjfutsneji-hmthtqfyj-fsfqdxnx-333[fjthn]
+yhtwhnpun-lnn-zavyhnl-669[wpsgy]
+dmpuamofuhq-ngzzk-xmnadmfadk-742[madfk]
+ejpanjwpekjwh-ywjzu-oanreyao-498[yzjwm]
+eza-dpncpe-qwzhpc-afcnsldtyr-353[ivxnu]
+qekrixmg-nippcfier-gywxsqiv-wivzmgi-464[yxkwm]
+avw-zljyla-ibuuf-ylzlhyjo-383[lyaju]
+lqwhuqdwlrqdo-mhoobehdq-rshudwlrqv-621[qdhlo]
+qvbmzvibqwvit-jcvvg-apqxxqvo-200[vqbix]
+ugjjgkanw-esyfwlau-jsttal-ugflsafewfl-164[fgcep]
+shoewudys-isqludwuh-xkdj-ijehqwu-504[stjyd]
+luxciuwncpy-vohhs-yhachyylcha-214[hcyal]
+gifavtkzcv-sleep-ivjvrity-685[vieta]
+rzvkjiduzy-xviyt-yzqzgjkhzio-161[ziyjk]
+iehepwnu-cnwza-ykjoqian-cnwza-ywjzu-ykwpejc-iwjwcaiajp-316[wajci]
+sorozgxe-mxgjk-jek-vaxingyotm-956[goxej]
+dmpuamofuhq-dmnnuf-dqmocgueufuaz-560[umdfa]
+hjgbwuladw-kusnwfywj-zmfl-ugflsafewfl-450[aezbn]
+esyfwlau-usfvq-ugslafy-ghwjslagfk-294[fsagl]
+shmml-sybjre-erfrnepu-195[ngkjp]
+jlidywncfy-ohmnuvfy-wuhxs-wiuncha-ijyluncihm-240[xtjsm]
+ixeumktoi-lruckx-aykx-zkyzotm-436[kximo]
+nzydfxpc-rclop-upwwjmply-xlylrpxpye-535[plyxc]
+fodvvlilhg-sodvwlf-judvv-pdunhwlqj-725[krngz]
+xjmmjndqz-ezggtwzvi-adivixdib-733[idzgj]
+pbybeshy-pnaql-pbngvat-znantrzrag-533[anbpg]
+fnjyxwrinm-ljwmh-lxjcrwp-bqryyrwp-329[rwjyl]
+lhkhszqx-fqzcd-okzrshb-fqzrr-cdoknxldms-391[zdhkq]
+pynffvsvrq-ohaal-znantrzrag-637[anrfv]
+hafgnoyr-sybjre-genvavat-767[ngacu]
+lhkhszqx-fqzcd-bgnbnkzsd-lzmzfdldms-443[ynael]
+lugjuacha-wbiwifuny-mufym-786[uafim]
+vkrhzxgbv-xzz-ftgtzxfxgm-995[xzgft]
+uzfqdzmfuazmx-rxaiqd-emxqe-170[mqxza]
+ajvyjprwp-snuuhknjw-anlnrerwp-771[njprw]
+zuv-ykixkz-igtje-iugzotm-zxgototm-930[lifhb]
+mfklstdw-wyy-ksdwk-294[kwdsy]
+kyelcrga-slqryzjc-hcjjwzcyl-qrmpyec-990[kypqm]
+vkppo-sxesebqju-tulubefcudj-400[uebjp]
+ynukcajey-xqjju-lqnydwoejc-394[jycen]
+qzlozfhmf-qzchnzbshud-qzaahs-qdzbpthrhshnm-287[hzqsa]
+kmjezxodgz-mvwwdo-ncdkkdib-109[dkmow]
+oazegyqd-sdmpq-ngzzk-bgdotmeuzs-482[zdgem]
+qfkkj-mldvpe-cpdplcns-561[pcdkl]
+hvbizodx-ezggtwzvi-xjiovdihzio-577[voqzy]
+iuxxuyobk-inuiurgzk-xkikobotm-722[ikuox]
+jyddc-gsvvswmzi-jpsaiv-jmrergmrk-958[cpedy]
+vhkkhlbox-unggr-hixktmbhgl-449[hgkbl]
+clotzlnetgp-nsznzwlep-dpcgtnpd-145[tehzy]
+plolwdub-judgh-hjj-dqdobvlv-543[zkryh]
+ajmrxjlcren-ouxfna-ydalqjbrwp-355[ajrln]
+uqtqbizg-ozilm-lgm-amzdqkma-304[mqzag]
+lnkfaypeha-zua-lqnydwoejc-914[aelny]
+ibghopzs-pwcvonofrcig-qobrm-aobousasbh-844[obsac]
+ocipgvke-eqpuwogt-itcfg-tcddkv-gpikpggtkpi-804[salbg]
+ajmrxjlcren-lqxlxujcn-uxprbcrlb-823[lrxcj]
+rgndvtcxr-ytaanqtpc-sthxvc-843[tcanr]
+hqcfqwydw-sxesebqju-qdqboiyi-894[qbdei]
+tbxmlkfwba-gbiivybxk-qbzeklildv-757[biklv]
+vetllbybxw-utldxm-vhgmtbgfxgm-735[bglmt]
+mfklstdw-hdsklau-yjskk-vwhsjlewfl-528[xyuts]
+pxtihgbsxw-vtgwr-nlxk-mxlmbgz-657[xgblm]
+bnmrtldq-fqzcd-dff-lzqjdshmf-677[szdpt]
+xekdwvwnzkqo-sawlkjevaz-fahhuxawj-nayaerejc-654[zdeyh]
+gzefmnxq-bxmefuo-sdmee-xmnadmfadk-170[medfx]
+gpsxdprixkt-eaphixr-vgphh-rjhidbtg-htgkxrt-115[hgprt]
+eza-dpncpe-hplazytkpo-awldetn-rcldd-xlcvpetyr-535[tnpmg]
+bnmrtldq-fqzcd-eknvdq-sdbgmnknfx-781[dnqbf]
+nzcczdtgp-dnlgpyrpc-sfye-opgpwzaxpye-899[pcgyz]
+nwzekwypera-ydkykhwpa-odellejc-992[pwqrh]
+oknkvcta-itcfg-gii-wugt-vguvkpi-154[giktv]
+tcrjjzwzvu-upv-kvtyefcfxp-373[vcfjp]
+xst-wigvix-ikk-stivexmsrw-230[isxkt]
+fkqbokxqflkxi-zelzlixqb-qoxfkfkd-705[mntlq]
+qlm-pbzobq-yxphbq-zrpqljbo-pbosfzb-237[bpqoz]
+drxevkzt-avccpsvre-wzeretzex-269[ervzc]
+ksodcbwnsr-pogysh-oqeiwgwhwcb-480[mxdsl]
+tyepcyletzylw-qwzhpc-xlylrpxpye-613[tvcgy]
+rnqnyfwd-lwfij-hmthtqfyj-qtlnxynhx-437[ukdrt]
+oxjmxdfkd-jfifqxov-doxab-yxphbq-ixyloxqlov-393[xodfq]
+tcorcikpi-ejqeqncvg-fgrnqaogpv-804[cgqei]
+hqtyeqsjylu-zubboruqd-qsgkyiyjyed-712[yqubd]
+hvbizodx-ezggtwzvi-gjbdnodxn-967[dgzbi]
+zntargvp-enoovg-fgbentr-923[gneor]
+mvydjvxodqz-wvnfzo-hvmfzodib-447[zfpes]
+emixwvqhml-zijjqb-lmdmtwxumvb-148[mbijl]
+frqvxphu-judgh-gbh-whfkqrorjb-179[jwmgn]
+kyelcrga-njyqrga-epyqq-dglylagle-782[glyae]
+npmhcargjc-pyzzgr-bctcjmnkclr-522[crgjm]
+pxtihgbsxw-xzz-tvjnblbmbhg-943[bxght]
+oknkvcta-itcfg-hnqygt-qrgtcvkqpu-206[tcgkq]
+amlqskcp-epybc-zyqicr-sqcp-rcqrgle-522[bnemi]
+enqvbnpgvir-pnaql-fuvccvat-299[vnacp]
+xlrypetn-mldvpe-cpnptgtyr-509[nugrq]
+mbggf-qlssfilhu-klclsvwtlua-383[lsfgu]
+wlsiayhcw-wuhxs-wiuncha-mniluay-656[wahiu]
+gvaaz-cbtlfu-efqmpznfou-415[byzhx]
+rzvkjiduzy-nxvqzibzm-cpio-hvivbzhzio-343[zivbh]
+bqxnfdmhb-dff-otqbgzrhmf-781[fbdhm]
+wihmogyl-aluxy-wuhxs-wiuncha-lyuwkocmcncih-838[chuwi]
+enzcntvat-onfxrg-hfre-grfgvat-689[nkvyi]
+xgjougizobk-igtje-iugzotm-ygrky-540[giojk]
+mbggf-kfl-aljouvsvnf-773[fglva]
+qzoggwtwsr-xszzmpsob-sbuwbssfwbu-662[sbwzg]
+wsvsdkbi-qbkno-mkxni-mykdsxq-nofovyzwoxd-744[kodns]
+tpspahyf-nyhkl-lnn-klzpnu-721[nlphk]
+pejji-nio-bomosfsxq-380[oijsb]
+amlqskcp-epybc-cee-nspafyqgle-132[dsayt]
+luxciuwncpy-xsy-lyuwkocmcncih-240[cuyil]
+irdgrxzex-gcrjkzt-xirjj-vexzevvizex-165[xerzi]
+lxaaxbren-snuuhknjw-ujkxajcxah-381[axjnu]
+ktfitzbgz-ynssr-xzz-wxiehrfxgm-839[sjagq]
+hafgnoyr-enzcntvat-pnaql-pbngvat-genvavat-975[antvg]
+dfcxsqhwzs-qobrm-fsqswjwbu-896[sqwbf]
+zsxyfgqj-xhfajsljw-mzsy-xytwflj-619[jfsxy]
+yhwooebeaz-ywjzu-ykwpejc-hkceopeyo-706[eoywc]
+mvydjvxodqz-wpiit-kpmxcvndib-863[yrjnz]
+otzkxtgzoutgr-igtje-iugzotm-iutzgotsktz-332[tgzoi]
+pdjqhwlf-sodvwlf-judvv-vdohv-855[vdfhj]
+gpewwmjmih-fyrrc-gywxsqiv-wivzmgi-724[iwgmr]
+oqnidbshkd-idkkxadzm-rsnqzfd-391[lpscd]
+rgndvtcxr-hrpktcvtg-wjci-uxcpcrxcv-765[crtvx]
+esyfwlau-tmffq-xafsfuafy-970[fasuy]
+gvaaz-dipdpmbuf-efqbsunfou-545[zmynh]
+zsxyfgqj-wfggny-uzwhmfxnsl-463[cvqjn]
+oazegyqd-sdmpq-ngzzk-emxqe-430[flhis]
+jvuzbtly-nyhkl-zjhclunly-obua-zlycpjlz-643[ueimk]
+surmhfwloh-vfdyhqjhu-kxqw-ghsorbphqw-205[hqwfo]
+pualyuhapvuhs-zjhclunly-obua-thuhnltlua-825[ficqs]
+wbhsfbohwcboz-rms-oqeiwgwhwcb-194[wbhoc]
+gpsxdprixkt-ytaanqtpc-bpcpvtbtci-635[qkzhc]
+rnqnyfwd-lwfij-xhfajsljw-mzsy-qfgtwfytwd-931[fwjyd]
+ubhatstkwhnl-ktuubm-vnlmhfxk-lxkobvx-787[gtsqv]
+lqwhuqdwlrqdo-udeelw-dftxlvlwlrq-413[ldqwe]
+kloqemlib-lygbzq-pqloxdb-991[lbqod]
+veqtekmrk-tpewxmg-kveww-hiwmkr-282[ekwmr]
+rflsjynh-ytu-xjhwjy-jll-knsfshnsl-333[jlshn]
+bknsykmdsfo-pvygob-domrxyvyqi-432[yobdk]
+mybbycsfo-bkllsd-kxkvicsc-822[yzxcq]
+zixppfcfba-yxphbq-absbilmjbkq-991[gbhts]
+udskkaxawv-uzgugdslw-klgjsyw-684[gksuw]
+clxalrtyr-mfyyj-qtylyntyr-665[ylrta]
+uiovmbqk-jiasmb-lmaqov-694[mabio]
+xmtjbzidx-mvwwdo-zibdizzmdib-161[dizbm]
+wyvqljapsl-jovjvshal-bzly-alzapun-643[lajvp]
+zlilocri-zxkav-mrozexpfkd-445[rifng]
+pinovwgz-zbb-hvmfzodib-811[bziov]
+rtqlgevkng-dwppa-vgejpqnqia-284[gpqae]
+vrurcjah-pajmn-ljwmh-jlzdrbrcrxw-667[lmdrk]
+jlidywncfy-dyffsvyuh-ijyluncihm-838[yficd]
+cebwrpgvyr-sybjre-qrirybczrag-741[tsrqd]
+pbafhzre-tenqr-onfxrg-grpuabybtl-949[rbaef]
+lahxpnwrl-ljwmh-lxjcrwp-nwprwnnarwp-433[seonp]
+iuxxuyobk-igtje-iugzotm-iutzgotsktz-644[tiugo]
+qfkkj-prr-fdpc-epdetyr-951[prdef]
+nchhg-akidmvomz-pcvb-nqvivkqvo-954[osgtz]
+htwwtxnaj-gzssd-ijufwyrjsy-385[jswty]
+myxcewob-qbkno-mrymyvkdo-bokmaescsdsyx-328[sezot]
+rzvkjiduzy-mvwwdo-ncdkkdib-499[mfyze]
+emixwvqhml-lgm-uizsmbqvo-798[milqv]
+xmtjbzidx-wvnfzo-vivgtndn-941[nvdit]
+bknsykmdsfo-zvkcdsm-qbkcc-cobfsmoc-198[cksbm]
+gsrwyqiv-kvehi-fyrrc-jmrergmrk-906[regik]
+bqvvu-oywrajcan-dqjp-nawymqeoepekj-524[aejqn]
+upq-tfdsfu-sbccju-bobmztjt-883[btucf]
+surmhfwloh-fruurvlyh-mhoobehdq-orjlvwlfv-933[zymnj]
+wkqxodsm-tovvilokx-gybucryz-588[okvxy]
+nchhg-ntwemz-twoqabqka-902[ahnqt]
+iqmbazulqp-rgllk-rxaiqd-fqotzaxask-950[dtanc]
+ejpanjwpekjwh-nwxxep-bejwjyejc-732[jewpn]
+ajmrxjlcren-fnjyxwrinm-lqxlxujcn-vjwjpnvnwc-329[yhgwz]
+qcbgiasf-ufors-qvcqczohs-aofyshwbu-532[scfoq]
+jsehsyafy-vqw-ugflsafewfl-970[mfzcn]
+fab-eqodqf-qss-geqd-fqefuzs-560[qfesd]
+jef-iushuj-uww-sedjqydcudj-322[qyadz]
+kfg-jvtivk-jtrmvexvi-ylek-ivtvzmzex-347[wmlfu]
+pxtihgbsxw-ietlmbv-zktll-wxiehrfxgm-371[xiltb]
+wfintfhynaj-hmthtqfyj-jslnsjjwnsl-463[jnfhs]
+forwcoqhwjs-foppwh-kcfygvcd-480[cfowh]
+kzgwomvqk-rmttgjmiv-camz-bmabqvo-616[mvabg]
+pybgmyargtc-aylbw-amyrgle-nspafyqgle-392[yaglb]
+jyfvnlupj-ihzrla-lunpullypun-149[lytps]
+dpmpsgvm-cbtlfu-xpsltipq-467[plmst]
+oxaflxzqfsb-avb-zrpqljbo-pbosfzb-965[bfoza]
+amlqskcp-epybc-afmamjyrc-bctcjmnkclr-392[cmabj]
+encuukhkgf-tcddkv-yqtmujqr-362[kucdq]
+lqwhuqdwlrqdo-edvnhw-hqjlqhhulqj-595[sywmh]
+njmjubsz-hsbef-qspkfdujmf-cbtlfu-vtfs-uftujoh-857[fujsb]
+dsxxw-djmucp-umpiqfmn-340[mdpux]
+aflwjfslagfsd-hdsklau-yjskk-dstgjslgjq-736[sjlad]
+ynukcajey-ywjzu-iwjwcaiajp-758[sthmn]
+froruixo-lqwhuqdwlrqdo-fdqgb-uhdftxlvlwlrq-621[gtcry]
+chnylhuncihuf-jfumncw-alumm-mylpcwym-526[tyodr]
+ujoon-qphzti-uxcpcrxcv-817[copux]
+bkwzkqsxq-cmkfoxqob-rexd-ckvoc-666[kcoqx]
+pelbtravp-enqvbnpgvir-qlr-qrfvta-403[wqynx]
+yhtwhnpun-ibuuf-thuhnltlua-643[trfed]
+willimcpy-yaa-wihnuchgyhn-344[hiyac]
+thnulapj-jovjvshal-mpuhujpun-799[juhpa]
+nzcczdtgp-mldvpe-lnbftdtetzy-821[qvnmi]
+qzlozfhmf-idkkxadzm-btrsnldq-rdquhbd-209[dqzbf]
+ajvyjprwp-ouxfna-vjwjpnvnwc-407[jnpvw]
+hcd-gsqfsh-dzoghwq-ufogg-zcuwghwqg-688[nwgox]
+jrncbavmrq-qlr-genvavat-169[arvnq]
+crwwv-yrkkv-jxkxdbjbkq-653[ylpzs]
+pejji-tovvilokx-vyqscdsmc-146[vcijo]
+ikhcxvmbex-lvtoxgzxk-angm-inkvatlbgz-189[xgkva]
+jyddc-wgezirkiv-lyrx-xiglrspskc-620[ircdg]
+ajyqqgdgcb-aylbw-amyrgle-rpyglgle-210[glyab]
+mhi-lxvkxm-yehpxk-kxvxbobgz-319[lcest]
+rkpqxyib-gbiivybxk-lmboxqflkp-211[vustn]
+jchipqat-rdadguja-hrpktcvtg-wjci-tcvxcttgxcv-999[ctagj]
+ovbunmneqbhf-fpniratre-uhag-grpuabybtl-949[banru]
+nchhg-xtiabqk-oziaa-abwziom-174[aibho]
+dwbcjkun-ljwmh-ydalqjbrwp-303[jwbdl]
+lxuxaodu-krxqjijamxdb-bljenwpna-qdwc-bnaerlnb-563[ycjlt]
+yhkpvhjapcl-wshzapj-nyhzz-shivyhavyf-461[hyapv]
+udglrdfwlyh-mhoobehdq-wudlqlqj-959[dlhqo]
+myxcewob-qbkno-lsyrkjkbnyec-lexxi-cdybkqo-588[nfdem]
+fnjyxwrinm-ljwmh-lxwcjrwvnwc-459[wjncl]
+udpsdjlqj-udeelw-ghvljq-491[djleq]
+zloolpfsb-yrkkv-mrozexpfkd-783[koflp]
+drxevkzt-jtrmvexvi-ylek-ivrthlzjzkzfe-997[evzkr]
+ykjoqian-cnwza-ywjzu-ykwpejc-opknwca-264[wacjk]
+xekdwvwnzkqo-zua-zalwnpiajp-992[awzkn]
+fydelmwp-aczupnetwp-prr-cplnbftdtetzy-847[ptecd]
+lxwbdvna-pajmn-ouxfna-anjlzdrbrcrxw-563[anrxb]
+xfbqpojafe-gmpxfs-tbmft-545[rgdzm]
+kzeed-ojqqdgjfs-ijuqtdrjsy-411[jdqes]
+ktiaaqnqml-ntwemz-uizsmbqvo-642[azvew]
+udpsdjlqj-gbh-whfkqrorjb-725[rnqmt]
+lahxpnwrl-ouxfna-ydalqjbrwp-745[alnpr]
+dsxxw-bwc-mncpyrgmlq-548[cmwxb]
+joufsobujpobm-gvaaz-qmbtujd-hsbtt-fohjoffsjoh-727[ojbfh]
+laffe-jek-ynovvotm-670[efova]
+nzcczdtgp-ojp-xlcvpetyr-353[nvmak]
+kgjgrypw-epybc-djmucp-qyjcq-496[sqhmg]
+ykjoqian-cnwza-ywjzu-klanwpekjo-680[ajknw]
+nbhofujd-dipdpmbuf-efqbsunfou-415[fubdn]
+oaddaeuhq-ngzzk-fqotzaxask-144[hbxcm]
+lujbbrornm-vjpwncrl-snuuhknjw-ldbcxvna-bnaerln-459[nblrj]
+xgvnndadzy-wvnfzo-yzkvmohzio-135[znovd]
+jchipqat-tvv-jhtg-ithixcv-271[ymstr]
+xtwtelcj-rclop-nlyoj-dstaatyr-431[ntags]
+iutyaskx-mxgjk-jek-xkykgxin-618[kxgij]
+pxtihgbsxw-ktwbhtvmbox-cxeeruxtg-tgterlbl-943[txbeg]
+xfbqpojafe-dboez-dpbujoh-mbcpsbupsz-441[bpode]
+qfkkj-mfyyj-opalcexpye-613[yefjk]
+ejpanjwpekjwh-lhwopey-cnwoo-nawymqeoepekj-836[ewjop]
+qjopwxha-xqjju-odellejc-732[jeloq]
+bnknqetk-atmmx-lzmzfdldms-261[mdkln]
+xgsvgmotm-pkrrehkgt-sgtgmksktz-332[gktms]
+ryexqpqhteki-vbemuh-huqsgkyiyjyed-244[tjsqx]
+xjinphzm-bmvyz-ytz-yzkvmohzio-239[oznyv]
+eqttqukxg-rncuvke-itcuu-cpcnauku-180[jztvf]
+xgjougizobk-xghhoz-ygrky-696[gohkx]
+mtzslklcozfd-nsznzwlep-opgpwzaxpye-769[zplen]
+kgjgrypw-epybc-pyzzgr-jmegqrgaq-626[gprye]
+jlidywncfy-wbiwifuny-mniluay-396[iynwf]
+myvybpev-mkxni-mykdsxq-psxkxmsxq-536[rxnml]
+ibghopzs-qobrm-rsdzcmasbh-246[bshmo]
+jyfvnlupj-wshzapj-nyhzz-klwsvftlua-201[jlzaf]
+dzczkrip-xiruv-avccpsvre-cfxzjkztj-113[czrvi]
+dmbttjgjfe-dboez-dpbujoh-nbslfujoh-493[bjdoe]
+kfg-jvtivk-gifavtkzcv-srjbvk-jvimztvj-347[aymns]
+ktwbhtvmbox-vetllbybxw-ietlmbv-zktll-wxlbzg-241[bltvw]
+tmrszakd-cxd-qdrdzqbg-417[dqrza]
+nzydfxpc-rclop-nsznzwlep-nfdezxpc-dpcgtnp-899[ynbfk]
+fruurvlyh-mhoobehdq-rshudwlrqv-491[hrudl]
+odkasqzuo-pkq-emxqe-144[qekoa]
+hwbba-dcumgv-vtckpkpi-180[bckpv]
+lsyrkjkbnyec-cmkfoxqob-rexd-wkbuodsxq-718[yfzcq]
+xgvnndadzy-kgvnodx-bmvnn-xjiovdihzio-395[ndvio]
+willimcpy-vumeyn-omyl-nymncha-890[nmyux]
+mbggf-zjhclunly-obua-yljlpcpun-487[lubcg]
+ryexqpqhteki-sqdto-tuiywd-608[xhjzp]
+egdytrixat-gpqqxi-prfjxhxixdc-193[xidgp]
+nbhofujd-dszphfojd-cbtlfu-sftfbsdi-909[fdbsh]
+rflsjynh-gfxpjy-htsyfnsrjsy-489[istpm]
+vkrhzxgbv-vetllbybxw-ietlmbv-zktll-phkdlahi-189[lbvhk]
+lujbbrornm-ouxfna-uxprbcrlb-459[ozvca]
+pbafhzre-tenqr-fpniratre-uhag-erprvivat-117[raept]
+xgvnndadzy-xjmmjndqz-ytz-nvgzn-577[nzdgj]
+houngfgxjuay-pkrrehkgt-jkyomt-618[dltyf]
+bjfutsneji-hmthtqfyj-jslnsjjwnsl-411[jsntf]
+sgmtkzoi-lruckx-rghuxgzuxe-774[guxkr]
+nuatmlmdpage-nmewqf-abqdmfuaze-326[zbewa]
+dsxxw-zsllw-qyjcq-912[lqswx]
+cvabijtm-kivlg-kwibqvo-aitma-226[mvuhw]
+yuxufmdk-sdmpq-qss-bgdotmeuzs-768[sdmuq]
+qspkfdujmf-fhh-usbjojoh-597[elvgu]
+htqtwkzq-gfxpjy-hzxytrjw-xjwanhj-359[jpytc]
+gbc-frperg-pnaql-pbngvat-grpuabybtl-169[bgpar]
+yhkpvhjapcl-qlssfilhu-klclsvwtlua-123[lhsac]
+nglmtuex-vtgwr-vhtmbgz-ftkdxmbgz-813[emnca]
+atyzghrk-lruckx-ygrky-592[kryga]
+dkqjcbctfqwu-tcddkv-tgegkxkpi-362[kcdtg]
+sawlkjevaz-bhksan-lqnydwoejc-914[aejkl]
+kdijqrbu-uww-ijehqwu-712[uwijq]
+rwcnawjcrxwju-snuuhknjw-mnbrpw-121[wnjru]
+vrurcjah-pajmn-mhn-bcxajpn-225[ajnch]
+clotzlnetgp-mldvpe-cpdplcns-353[lpcde]
+wihmogyl-aluxy-dyffsvyuh-womnigyl-mylpcwy-682[khzto]
+qcbgiasf-ufors-dzoghwq-ufogg-kcfygvcd-428[mselb]
+kwtwznct-ktiaaqnqml-akidmvomz-pcvb-bmkpvwtwog-824[kmtwa]
+crwwv-oxyyfq-pqloxdb-289[oqwxy]
+iutyaskx-mxgjk-ckgvutofkj-lruckx-jkvgxzsktz-852[kxgjt]
+irgyyolokj-yigbktmkx-natz-giwaoyozout-930[oygik]
+yhtwhnpun-buzahisl-jhukf-jvhapun-mpuhujpun-565[uhnpj]
+fbebmtkr-zktwx-ktuubm-ybgtgvbgz-761[ifsyt]
+lejkrscv-avccpsvre-dribvkzex-165[vcerk]
+avw-zljyla-yhiipa-jvuahputlua-617[aluhi]
+xjmmjndqz-wpiit-xjiovdihzio-889[ijdmo]
+pbybeshy-fpniratre-uhag-jbexfubc-819[snuje]
+ktwbhtvmbox-vtgwr-phkdlahi-683[htbkv]
+avw-zljyla-wshzapj-nyhzz-ylzlhyjo-409[zlyah]
+tcrjjzwzvu-treup-tfrkzex-drerxvdvek-633[retvz]
+zlkprjbo-doxab-ciltbo-qoxfkfkd-627[nmwxj]
+vkrhzxgbv-lvtoxgzxk-angm-labiibgz-995[gbvxz]
+gpbepvxcv-hrpktcvtg-wjci-sthxvc-609[cvptg]
+hwbba-gii-fgrctvogpv-804[gbiva]
+nwlddtqtpo-nsznzwlep-dstaatyr-275[tdnal]
+ovbunmneqbhf-fpniratre-uhag-hfre-grfgvat-637[fraeg]
+pkl-oaynap-fahhuxawj-nayaerejc-888[mnchz]
+etaqigpke-hnqygt-qrgtcvkqpu-752[antmz]
+lugjuacha-wuhxs-ijyluncihm-214[hfsun]
+zloolpfsb-zxkav-abpfdk-341[abfkl]
+bknsykmdsfo-mkxni-mykdsxq-bokmaescsdsyx-822[skmdx]
+xjgjmapg-zbb-hvivbzhzio-499[bzghi]
+amjmpdsj-ajyqqgdgcb-qaytclecp-fslr-qrmpyec-652[smgnt]
+qczcftiz-dzoghwq-ufogg-rsgwub-714[gzcfo]
+gokzyxsjon-wsvsdkbi-qbkno-nio-myxdksxwoxd-900[oksxd]
+ktfitzbgz-vtgwr-vhtmbgz-lxkobvxl-969[tbgvz]
+hqtyeqsjylu-uww-efuhqjyedi-270[dytgj]
+ovbunmneqbhf-pnaql-pbngvat-freivprf-845[nbfpv]
+kzgwomvqk-akidmvomz-pcvb-aitma-902[makvi]
+sedikcuh-whqtu-zubboruqd-bqrehqjeho-790[hqube]
+kwvacumz-ozilm-jcvvg-lmaqov-382[vmacl]
+rgndvtcxr-qjccn-prfjxhxixdc-661[cxrdj]
+tbxmlkfwba-oxyyfq-tlohpelm-523[uhvaf]
+iuxxuyobk-inuiurgzk-vaxingyotm-514[iuxgk]
+odkasqzuo-omzpk-oamfuzs-ymzmsqyqzf-170[zmoqs]
+ktwbhtvmbox-unggr-lxkobvxl-527[bxgkl]
+ynssr-vtgwr-mxvaghehzr-423[rghsv]
+sgmtkzoi-kmm-lotgtiotm-670[mtogi]
+ugdgjxmd-vqw-kwjnauwk-944[wdgjk]
+rdggdhxkt-jchipqat-snt-gthtpgrw-713[tghdp]
+zvyvgnel-tenqr-wryylorna-npdhvfvgvba-663[vnrya]
+jsvagsulanw-usfvq-ugslafy-esjcwlafy-762[fygle]
+zsxyfgqj-wfggny-hzxytrjw-xjwanhj-931[jgwxy]
+wkqxodsm-tovvilokx-dbksxsxq-822[cpsgv]
+mbiyqoxsm-tovvilokx-yzobkdsyxc-458[oxybi]
+lzfmdshb-bzmcx-bnzshmf-vnqjrgno-261[ujfyc]
+oknkvcta-itcfg-dcumgv-hkpcpekpi-258[ckpgi]
+iuxxuyobk-inuiurgzk-sgtgmksktz-202[ztjvk]
+hjgbwuladw-hdsklau-yjskk-ljsafafy-372[mvkts]
+rdadguja-eaphixr-vgphh-tcvxcttgxcv-739[acght]
+nsyjwsfyntsfq-idj-xmnuunsl-983[nsfju]
+gifavtkzcv-wcfnvi-rthlzjzkzfe-971[zfvci]
+qvbmzvibqwvit-jiasmb-zmamizkp-278[imbvz]
+houngfgxjuay-ckgvutofkj-yigbktmkx-natz-ykxboiky-930[kgyot]
+guahyncw-wuhxs-lyuwkocmcncih-500[chuwn]
+gpbepvxcv-ytaanqtpc-bpgztixcv-479[pctva]
+ksodcbwnsr-pogysh-gsfjwqsg-584[sgowb]
+dmybmsuzs-pkq-mzmxkeue-612[meksu]
+xmtjbzidx-xviyt-vxlpdndodji-577[dxijt]
+dpmpsgvm-kfmmzcfbo-bobmztjt-701[mbfop]
+oxjmxdfkd-pzxsbkdbo-erkq-xznrfpfqflk-627[jhlvw]
+npmhcargjc-aylbw-amyrgle-pcacgtgle-652[acgle]
+votubcmf-fhh-tfswjdft-701[fthbc]
+gzefmnxq-dmnnuf-geqd-fqefuzs-482[fenqd]
+dmpuamofuhq-oazegyqd-sdmpq-eomhqzsqd-tgzf-emxqe-378[mctsn]
+gzefmnxq-dmnnuf-etubbuzs-508[nubef]
+bwx-amkzmb-ntwemz-ivitgaqa-902[noeig]
+rdchjbtg-vgpst-qphzti-pcpanhxh-635[hptcg]
+qzchnzbshud-atmmx-sqzhmhmf-131[hmzqs]
+tipfxvezt-treup-tfrkzex-cfxzjkztj-633[tzefx]
+mvhkvbdib-wpiit-vivgtndn-603[ivbdn]
+hqfxxnknji-ojqqdgjfs-htsyfnsrjsy-957[bdtai]
+clxalrtyr-clmmte-dezclrp-275[lcrem]
+fubrjhqlf-udpsdjlqj-udeelw-ghyhorsphqw-387[hdjlq]
+qzoggwtwsr-dzoghwq-ufogg-hsqvbczcum-792[goqwz]
+nvrgfezqvu-sleep-ivtvzmzex-113[evzfg]
+fruurvlyh-iorzhu-orjlvwlfv-881[jcdtf]
+myxcewob-qbkno-mkxni-mykdsxq-nozvyiwoxd-900[oxkmn]
+wyvqljapsl-jhukf-jvhapun-aljouvsvnf-955[jvalu]
+tpspahyf-nyhkl-jhukf-zhslz-643[pytob]
+kgjgrypw-epybc-rmn-qcapcr-qaytclecp-fslr-nspafyqgle-938[mxunk]
+yknnkoera-zua-klanwpekjo-446[dphwe]
+kzgwomvqk-xtiabqk-oziaa-bziqvqvo-278[qaiko]
+iruzfrtkzmv-wcfnvi-rercpjzj-555[rzcfi]
+diozmivodjivg-apuut-nxvqzibzm-cpio-yzkvmohzio-447[iozvm]
+fydelmwp-ojp-nzyeltyxpye-405[nyzmg]
+ktiaaqnqml-ziuxioqvo-kivlg-kwibqvo-zmikycqaqbqwv-564[qikva]
+xst-wigvix-ikk-vieguymwmxmsr-724[imxgk]
+jfifqxov-doxab-ciltbo-jxohbqfkd-965[obfxd]
+rdggdhxkt-hrpktcvtg-wjci-rdcipxcbtci-531[ctdgi]
+awzwhofm-ufors-qobrm-qcohwbu-oqeiwgwhwcb-896[mkvzu]
+vagreangvbany-fpniratre-uhag-qrcnegzrag-689[xfuaz]
+vjpwncrl-lqxlxujcn-jlzdrbrcrxw-693[lrcjx]
+ibghopzs-dzoghwq-ufogg-rsdzcmasbh-948[ghosz]
+ynssr-vhglnfxk-zktwx-ietlmbv-zktll-phkdlahi-917[lkhti]
+tfcfiwlc-treup-tfrkzex-dribvkzex-685[efrtc]
+frqvxphu-judgh-fkrfrodwh-hqjlqhhulqj-803[wjnmk]
+vhkkhlbox-xzz-kxtvjnblbmbhg-631[bhkxl]
+ltpedcxots-snt-stepgibtci-297[tscei]
+nzwzcqfw-nlyoj-xlylrpxpye-275[lynpw]
+ejpanjwpekjwh-nwilwcejc-zua-hkceopeyo-498[ypoze]
+sno-rdbqds-azrjds-rghoohmf-859[dorsh]
+qzoggwtwsr-suu-qcbhowbasbh-480[bswgh]
+gvcskirmg-ikk-gywxsqiv-wivzmgi-698[rmvil]
+ktwbhtvmbox-ftzgxmbv-vtgwr-ftkdxmbgz-163[tbgmv]
+oxmeeuruqp-omzpk-oamfuzs-efadmsq-716[meoua]
+xjinphzm-bmvyz-hvbizodx-xviyt-xjvodib-ozxcijgjbt-343[ixbjv]
+jyfvnlupj-ibuuf-svnpzapjz-851[gmsnf]
diff --git a/2016/aoc4/src/main.rs b/2016/aoc4/src/main.rs
new file mode 100644
index 0000000..ea1edd8
--- /dev/null
+++ b/2016/aoc4/src/main.rs
@@ -0,0 +1,83 @@
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+use std::collections::BTreeMap;
+
+#[derive(Debug)]
+struct Room {
+ encrypted_name: String,
+ sector_id: u32,
+ checksum: String
+}
+
+impl Room {
+ fn new(line: String) -> Room {
+ let name_length = line.find(char::is_numeric).unwrap();
+ let (name, sector_and_check) = line.split_at(name_length);
+ let (sector, check) = sector_and_check.split_at(sector_and_check.len()-7);
+
+ Room {
+ encrypted_name: name.trim_matches('-').to_string(),
+ sector_id: sector.parse().unwrap(),
+ checksum: check.trim_matches(|c| c=='[' || c==']').to_string()
+ }
+ }
+
+ fn is_valid(&self) -> bool {
+ let mut char_counts: BTreeMap<char, i32> = BTreeMap::new();
+ let chars = self.encrypted_name.chars()
+ .filter(|&c| c != '-');
+ for c in chars {
+ *char_counts.entry(c).or_insert(0) += 1;
+ }
+
+ let mut vec_char_counts = char_counts.iter().collect::<Vec<_>>();
+ vec_char_counts.sort_by_key(|&(_, &value)| -value);
+ let expected_checksum = vec_char_counts
+ .iter()
+ .take(5)
+ .map(|&(&key, _)| key)
+ .collect::<String>();
+
+ expected_checksum == self.checksum
+ }
+
+ fn decrypt_name(&self) -> String {
+ self.encrypted_name.chars().map(|c| {
+ if c == '-' {
+ ' '
+ } else {
+ let current_digit = c as u8 - 'a' as u8;
+ let new_digit = ((current_digit as u32 + self.sector_id) % 26) as u8;
+ (new_digit + 'a' as u8) as char
+ }
+ }).collect()
+ }
+}
+
+fn main() {
+ let rooms = read_file();
+ let valid_rooms = rooms.iter()
+ .filter(|r| r.is_valid())
+ .collect::<Vec<_>>();
+ let sector_sum: u32 = valid_rooms.iter()
+ .map(|r| r.sector_id)
+ .sum();
+
+ println!("Sector sum {}", sector_sum);
+
+ let north_poles = rooms.iter()
+ .filter(|r| r.decrypt_name().contains("north"))
+ .inspect(|r| println!("{} {}", r.decrypt_name(), r.sector_id))
+ .collect::<Vec<_>>();
+ println!("{:?}", north_poles);
+}
+
+fn read_file() -> Vec<Room> {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+ file.lines()
+ .map(|line| line.unwrap().trim().to_string())
+ .filter(|line| line.len() > 0)
+ .map(Room::new)
+ .collect()
+}
diff --git a/2016/aoc5/Cargo.lock b/2016/aoc5/Cargo.lock
new file mode 100644
index 0000000..6d0e69c
--- /dev/null
+++ b/2016/aoc5/Cargo.lock
@@ -0,0 +1,12 @@
+[root]
+name = "aoc5"
+version = "0.1.0"
+dependencies = [
+ "md5 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "md5"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
diff --git a/2016/aoc5/Cargo.toml b/2016/aoc5/Cargo.toml
new file mode 100644
index 0000000..cc09c3c
--- /dev/null
+++ b/2016/aoc5/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc5"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@entelect.co.za>"]
+
+[dependencies]
+md5 = "^0.2" \ No newline at end of file
diff --git a/2016/aoc5/src/main.rs b/2016/aoc5/src/main.rs
new file mode 100644
index 0000000..31bef5e
--- /dev/null
+++ b/2016/aoc5/src/main.rs
@@ -0,0 +1,49 @@
+extern crate md5;
+
+fn main() {
+ let room = "reyedfim";
+
+ let mut i = 0;
+ let mut found_bytes = 0;
+
+ let mut code: [Option<u8>; 8] = [None;8];
+
+ println!("Cracking the passwordz");
+ print_code(&code);
+
+ while found_bytes < 8 {
+ let room_string = format!("{}{}", room, i);
+ let room_bytes = room_string.into_bytes();
+ let hash = md5::compute(room_bytes.as_slice());
+ if match_hash(hash) {
+ let position = hash[2];
+ let value = hash[3] / 16;
+ if code[position as usize].is_none() {
+ code[position as usize] = Some(value);
+ print_code(&code);
+ found_bytes += 1;
+ }
+ }
+
+ i+=1;
+ }
+
+ println!("Password found!");
+}
+
+fn match_hash(hash: [u8; 16]) -> bool {
+ hash[0] == 0 &&
+ hash[1] == 0 &&
+ hash[2] < 8
+}
+
+fn print_code(code: &[Option<u8>; 8]) {
+ println!("");
+ for &byte in code.iter() {
+ match byte {
+ None => {print!("-");},
+ Some(x) => {print!("{:x}", x);}
+ }
+ }
+ println!("");
+}
diff --git a/2016/aoc6/Cargo.lock b/2016/aoc6/Cargo.lock
new file mode 100644
index 0000000..f61aebf
--- /dev/null
+++ b/2016/aoc6/Cargo.lock
@@ -0,0 +1,4 @@
+[root]
+name = "aoc6"
+version = "0.1.0"
+
diff --git a/2016/aoc6/Cargo.toml b/2016/aoc6/Cargo.toml
new file mode 100644
index 0000000..22fc24a
--- /dev/null
+++ b/2016/aoc6/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aoc6"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@entelect.co.za>"]
+
+[dependencies]
diff --git a/2016/aoc6/input.txt b/2016/aoc6/input.txt
new file mode 100644
index 0000000..6caf81a
--- /dev/null
+++ b/2016/aoc6/input.txt
@@ -0,0 +1,624 @@
+iyeajeby
+qengiuoe
+wxzardgo
+jciguemn
+zcampkps
+kiqjpjqb
+knwhoxlw
+iaxxpjhe
+kgrgaixi
+lciydajs
+svugtdwe
+nwailbqu
+cbkwwxvt
+lqjyrawh
+jylmtlzk
+firecpyg
+xegtcvvx
+jllqqzeq
+hggmnxlc
+pdmfuqlx
+hnbksbkl
+pmjmiqti
+gpmuvcsh
+tspnxvnm
+hghwizhe
+sgokeybb
+jtphckcv
+usypmmzq
+irlfaboj
+prgiqvil
+nfqegpjd
+aivwwkix
+xeljyzjv
+mrdpqlzc
+metcvpvd
+ifizfkgl
+uznvqiqw
+uzylkeui
+obmqhlan
+vaoivkeq
+wvlbwfaf
+ntbgtbpz
+lbuieiea
+rljyfeop
+rynkdwiq
+hyqpjwzl
+supxlsql
+bntmjboc
+qntfhain
+xxtjctjz
+qppakrbj
+ptnnwmlg
+pucuqrpi
+ensluhxm
+wtnabsej
+hvnozkvx
+dhxgysdk
+qdizyrkg
+vtuyxjky
+lxwcyfxr
+xoyphxmb
+ltylucct
+oaawvjfa
+qbjmdcap
+raqhkkbe
+uqtxpvhj
+pddzoucq
+axfbgpvj
+eohksqcm
+jtmmkovb
+paronxgv
+gtxnqybz
+qfsobvxz
+ywrnogwz
+ytdvpmzv
+daeappko
+zgjdatzf
+psrfofvi
+uobknckb
+rvndwdgs
+oedojfqv
+shxmutcm
+nigdxgrz
+ngwvdair
+wexxkvwn
+oqmrjlcr
+vcbmxvyb
+ekdfdzch
+klphcryl
+bbtobqqo
+wupuvqio
+hwiufjpk
+rckjewzp
+vhgzdtil
+qrvqytfe
+opolrgwi
+nektqhbg
+ynubobwy
+cqnysvzf
+muqrlihy
+ncbeeuur
+hxsvpoug
+kacsofnk
+vztkoicu
+smxiuykn
+sgnmdqmw
+sfsxxnds
+iwquujxr
+fwssfvfw
+qyoswzsm
+kvfvizgu
+fmewmudq
+mvtekgjn
+kkffshrt
+jzbkyxzf
+beszoylz
+lnhmbwae
+tijfkcrt
+culovluh
+jrgtbxma
+yqtlarnm
+rdlxlplt
+vzgphnpi
+igpbfrrd
+yqdgvyke
+juhzerjo
+kfwlvhag
+ysznuuey
+turxgyik
+iqgcxxpa
+tjrmtkjk
+ywfcwvqp
+ozmguljj
+maxegnqi
+vavydxwd
+dhlckjra
+omvdoafe
+rvzejiol
+rsnpjser
+nejognkt
+agkavzki
+uzskztny
+knvzbkff
+iiuhrzsp
+amxryjhv
+yqxdgdaj
+tpvellfc
+dqutbibf
+fbbrpcbg
+shxlcvmc
+ociooedg
+nedlhmfo
+ohdxifnx
+mqhbpyed
+tauomzjy
+bkooiesi
+xtukgdec
+mygazipf
+wkvecylo
+tlejwzcj
+rcpygkbi
+uihidqdr
+lxwthely
+ywyoahob
+zwjrveex
+eqahofbx
+mvipdaql
+zccdioga
+gttnacns
+urajevul
+uhsdjkhm
+cjbpznua
+tyfvodhw
+feadmwyl
+cjmccfcy
+uawxsuyy
+xzzidfrj
+slhgapvb
+tbdwntwx
+bvspfozq
+pkkwgooy
+frnhifax
+sxfkbojn
+ffnzlqda
+pbtbewtm
+mivpqcyc
+gztezasy
+jlfdrmou
+xjmazeef
+lgcaevtl
+piidoxbi
+iczlosyt
+egszahwu
+cmbybzvi
+orczduhd
+hzorfhdv
+yptggtmu
+yfsmednv
+ajawzgpp
+niicgavl
+mmdpsogr
+wkufsuct
+yboinvnc
+lmwbrqmb
+rrsfhics
+xguvmcmi
+yldifule
+laycxgaf
+jtnizmxf
+qrbpqznc
+cpplgbsm
+xzkwttnj
+axjxusuh
+nthcjcqn
+zjkdjlcz
+uulqjmfq
+djqlzrcb
+ftxhzuoq
+bfrzrdtn
+fvovpzts
+tloyyqoa
+spupkgwb
+ishhbwok
+spyfzbsj
+bvvnfnxx
+iuectyxc
+xbbjridq
+drzfvsrw
+gokuvwjf
+hhkmgqxf
+epijynaj
+bfxdnibq
+pjoovmhf
+izbgldjr
+rvxrhjxa
+blhhorwy
+xwmobyph
+pfoimsbl
+gprwonid
+hfwmazfu
+dudhehvt
+nbekhgbg
+qbwklpvg
+yemjyobm
+vmocaztb
+xkwklord
+tjooucsf
+qowresxh
+cxeapuvv
+zmlzqivx
+fryanflf
+kxcrserx
+jtoqtooo
+axrtkjyo
+fwwzdsbx
+pyphszfp
+ekdcnrgx
+zyrhxcvc
+blcqplmo
+wnsiistm
+slavtfip
+sixawglm
+sxpjnpsa
+sfwmudzt
+kcpetkcw
+iqfufsws
+wdfbgvol
+muvtnxzg
+otgycshn
+gddbabma
+swksjxjx
+hnfcsnir
+tmcnycfi
+lpvuwehn
+htyogany
+rggezmhh
+guzhwmss
+zoqiscdy
+dqbtvyrb
+wfnymsai
+klfpdgvn
+ihqjdope
+dudllmty
+gpbkmwtd
+tjmtvjpk
+sjnkfrsk
+bgruelqs
+repdjhre
+flxjlvah
+lkpnbajp
+rmkqdjpx
+enimddcn
+nzowveei
+cohzzkee
+sxfvyqwi
+vlztaixp
+xgkrlsyh
+eaurshic
+kifvzhsv
+dxfsexup
+fyqqbzgm
+bnxsgjxg
+ndbbkscp
+xyjhzqel
+eyanetmo
+quakpmsr
+kqfeprrb
+hhsvwyse
+jjvjivng
+zkeiinwn
+adibxest
+zjzrkmxr
+kceozeud
+iknfusda
+gqmuepbo
+ccwltods
+smaurfwy
+yojrrudk
+akygvwyf
+dermnpvn
+bvfvjskb
+pcohqoyu
+odyqfyhy
+nqgepwqo
+zijtbqgd
+czfgqsmr
+fkgeoorf
+udvncboo
+dwxgrgck
+vqhthccp
+gvkfkpwr
+pquhsiha
+hlpqfrpz
+aeirprab
+bouoglph
+zwyimnhu
+zpculwdn
+mokpnpeq
+hfgfjamc
+osgncdnf
+ejfjqwql
+tovcchzu
+wwmburym
+mdonvwnw
+wxjysrlt
+cjrqrnqv
+okzeilge
+egunoujn
+dlbaqemd
+qrdyabya
+vaaxguwe
+hjqwytxz
+xtvmgdaq
+noijjgft
+xgysigmw
+urbsmwdk
+bjnerghw
+aspvghjp
+hgciumho
+ivjihqed
+wtvkobuw
+zhtyhllg
+jlxjwjui
+xkmxhoek
+rydzmqip
+ydonbzvk
+byeoptyo
+gpnnqxrb
+hyzplaie
+tbedyaph
+zgqhqnmg
+tdepvaex
+wytwmgkr
+qsmuyzys
+fijlauqj
+wyqylgam
+lbwxnluj
+nmecxavu
+ofktnhfb
+lhjgzkjr
+ucctfetk
+mggvgkmu
+yzmnbbhe
+kcnqhuam
+rxiwfblx
+vfufzjou
+cpynrovg
+qdwshnpi
+pcrxywto
+ozhzwpwa
+zroxmvfr
+fpipfjvu
+leyiafxs
+oacgxszs
+voebeyvn
+ixkqabkl
+lqabfhtd
+oewbtlgc
+vdlaniii
+tabtkolp
+xufkdmem
+niofeqxn
+innfbedm
+zahlnzhd
+whmqyffv
+fhjascxd
+wnsktsdi
+ucdgnvkf
+fmpxuyml
+pnvuhmup
+wohfuyto
+wthjmlzx
+tkcdmttv
+ubyrests
+mkrplnes
+mglepvyl
+shqafjly
+gbpaitlu
+cesjmugk
+qnqmvnks
+kbvvlltq
+luvgtdmv
+rrrhawdz
+dthrxkth
+bglwrdgk
+apqxickb
+vnzwzjba
+reiafjdt
+qfcunhks
+dwmhshtd
+rwtwnxxu
+gjgdhwtr
+dhrwidzp
+manohccv
+jvccmlat
+txhfklix
+nczocnew
+gxlpkgqr
+vsrtxogh
+ixhtcwaz
+qfapctcq
+glvtpiug
+jnuecngg
+bktbndyg
+ceboexzj
+lsjakjjw
+oemmiqvu
+zqscwlay
+hqedlpzb
+hsrztfxj
+fjpwidgw
+abrsenrv
+qseoiuyj
+jtjtqxgr
+esczykzc
+mazmziim
+szzwzfuq
+zbcfhaiz
+uqsnjwus
+vwzqohsu
+yylbjhnl
+chqdcblk
+vporypnv
+vfhdofdx
+eztmaogh
+wlzjsgbw
+dqutunrc
+gwtpdvpm
+ywxghnkc
+alacomlw
+jfuygdcy
+zkoeauig
+abufqquo
+ncilvdgq
+guinnabe
+pdwybure
+jocsrmfp
+acwncthl
+cdnaffnn
+zyqbszzz
+azhxybig
+hibjuhsw
+tvckjxuf
+vklsqbos
+efzukhlt
+kjaqqofz
+esxcyrxt
+yocrwucn
+iodafafm
+oiakmvtb
+dmbgtcpj
+qnzrryot
+ufcbptbz
+veprgqre
+umsltfes
+bvvqhcmz
+rucsowjt
+kkbgkrxe
+fksibbfh
+tyckeiqo
+gfqurpyl
+raljmvsf
+chednohc
+gowzqrfm
+ypktqcvb
+fgiusizq
+jvdsmnhu
+esfuxpra
+uraiwlfz
+vpkulaao
+erkvbjrj
+mrhjjist
+xmpayrdq
+biqwpkrm
+lrlhkljw
+rbaglxsu
+kryywepc
+mrydxkuv
+obksnkir
+jogxscwa
+pxkzdamo
+wcywigdv
+acqicmyz
+xiqhgpik
+izubxapc
+yrzfptzd
+qmyltgkw
+dwedcarp
+oouewlrv
+izelyufn
+ehdstcah
+nylqvqtd
+ywxjkxnx
+sstceepq
+bjihzptq
+nvawrewu
+plftxhsh
+eyuzdika
+gjdyaoek
+euqeablj
+zhgjzdki
+lyygbhly
+joscwikc
+cbqczxbu
+xnhptyqu
+txvltmyh
+kwtaueat
+btpbbibj
+ueytsouw
+kfmmcyqk
+fwflotzv
+ouwyewua
+hslsjpur
+jdgrtwme
+lgelctfc
+nlxyvkgh
+xpeslfje
+adcifgwz
+gquvwdeb
+rkmzqard
+lvzehstp
+cijqaygt
+dwfzsddm
+vmwqrrsy
+aotsaqoj
+irjumknp
+altzbfjo
+hubsrgdb
+nudnkfof
+bvhvcltf
+xupumtmg
+kjfxunyd
+pjwhyeuz
+zmnxkepw
+mpzvjjni
+cskxvphp
+dykbldmb
+ymmsshaj
+gdsvrycq
+ehdvpiqy
+engermzp
+tmexxgkw
+acjslpiv
+qprqqyqf
+fbictbjs
+llaeirez
+uxoofxnc
+ukgpjtlz
+tpxwxzpu
+cuzgcjgd
+jnzxfqww
+wemyhsbv
+aslnwaqg
+aibaikgt
+hglojgqv
+larqrtka
+ozlrwpna
+pzxsdrjh
+vsnuuusj
+jswkkvun
+darbbbhk
+woeihkoh
+xdsunolx
+ymvbtrxg
+mtodxqik
+fxkcdfwq
+koivubnr
+gitldbqs
+bsjymzpd
+whaluyys
+rvaftjox
+qhinxcid
+snpkwuko
+mdgvstoq
+zzytixxc
+qsgrlmdn
+ddjqxeaw
+uilqxznh
+chazpmyk
+iivrixot
+casfxwwa
+mvjdazsr
+dnmivmal
+eayyeyfh
diff --git a/2016/aoc6/src/main.rs b/2016/aoc6/src/main.rs
new file mode 100644
index 0000000..45ae3b1
--- /dev/null
+++ b/2016/aoc6/src/main.rs
@@ -0,0 +1,27 @@
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+use std::collections::HashMap;
+
+fn main() {
+ let lines = read_file();
+ let answer_width = lines[0].len();
+ for i in 0..answer_width {
+ let line = lines.iter().map(|line| line.chars().nth(i).unwrap()).collect::<Vec<_>>();
+
+ let mut char_counts = HashMap::new();
+ for character in line {
+ *char_counts.entry(character).or_insert(0) += 1;
+ }
+ let (character, _) = char_counts.iter().min_by_key(|&(_, &count)| count).unwrap();
+ println!("{}", character);
+ }
+}
+
+fn read_file() -> Vec<String> {
+ let file = BufReader::new(File::open("test_input.txt").unwrap());
+ file.lines()
+ .map(|line| line.unwrap().trim().to_string())
+ .filter(|line| line.len() > 0)
+ .collect()
+}
diff --git a/2016/aoc6/test_input.txt b/2016/aoc6/test_input.txt
new file mode 100644
index 0000000..32ba518
--- /dev/null
+++ b/2016/aoc6/test_input.txt
@@ -0,0 +1,16 @@
+eedadn
+drvtee
+eandsr
+raavrd
+atevrs
+tsrnev
+sdttsa
+rasrtv
+nssdts
+ntnada
+svetve
+tesnvt
+vntsnd
+vrdear
+dvrsen
+enarar
diff --git a/2016/aoc7/Cargo.lock b/2016/aoc7/Cargo.lock
new file mode 100644
index 0000000..58e04ee
--- /dev/null
+++ b/2016/aoc7/Cargo.lock
@@ -0,0 +1,4 @@
+[root]
+name = "aoc7"
+version = "0.1.0"
+
diff --git a/2016/aoc7/Cargo.toml b/2016/aoc7/Cargo.toml
new file mode 100644
index 0000000..1b18be9
--- /dev/null
+++ b/2016/aoc7/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aoc7"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@gmail.com>"]
+
+[dependencies]
diff --git a/2016/aoc7/input.txt b/2016/aoc7/input.txt
new file mode 100644
index 0000000..d50f36c
--- /dev/null
+++ b/2016/aoc7/input.txt
@@ -0,0 +1,2000 @@
+wysextplwqpvipxdv[srzvtwbfzqtspxnethm]syqbzgtboxxzpwr[kljvjjkjyojzrstfgrw]obdhcczonzvbfby[svotajtpttohxsh]cooktbyumlpxostt
+emzopymywhhxulxuctj[dwwvkzhoigmbmnf]nxgbgfwqvrypqxppyq[qozsihnhpztcrpbdc]rnhnakmrdcowatw[rhvchmzmyfxlolwe]uysecbspabtauvmixa
+bqooxxweoytjghrqn[hkwwukixothfyglw]kpasnmikmbzcbfi[vlnyszifsaaicagxtqf]ucdyxasusefuuxlx
+rxpusykufgqujfe[rypwoorxdemxffui]cvvcufcqmxoxcphp[witynplrfvquduiot]vcysdcsowcxhphp[gctucefriclxaonpwe]jdprpdvpeumrhokrcjt
+iungssgfnnjlgdferc[xfffplonmzjmxkinhl]dehxdielvncdawomqk[teizynepguvtgofr]fjazkxesmlwryphifh[ppjfvfefqhmuqtdp]luopramrehtriilwlou
+mqxqhcpalwycdxw[fkwhjscfmgywhtvdb]khadwvhkxygtxqx
+ihekzgbwpjxgbau[eqpvqxncntbtsqn]mbtbcujdkbrhxdu
+izikobnovmjzngo[ombcpcvshnedtndu]lnnmdkuapgnxpgyxcmg[bgnxdzmiolfvvaizu]tcvnrfufuvhgmlxcm
+yhrowrreplrrsbupeor[nchtznfzbzwnogh]rynudxihckzattbz[dshxeaqusdlhydtm]rvqzuffgqtysfzxp
+unfjgussbjxzlhopoqg[ppdnqkiuooukdmbqlo]flfiieiitmettblfln
+hgtbgxarmgbxqrhghxb[hflfvoetxfisqsj]syhkugztqkywetyhad[fmptjuaqittvvyooda]cjkxbnylglnlfleelzu
+npxhwtitqnddkwg[gmzggwnvygsroeaadtc]gudnfyefqbbgyspdxjw[ilthbdqubqnveowv]xitfldhfjyjsomygjg[knmrlvoiqyytigytlum]dlfpsnyzmhkmeevfwsf
+wjzwftiuixvwyzmgoe[jbfghrqhyywwhlu]wcijbojvlgjjdtowzpv[lgfvxfdusgxddsppbxb]pagicuiuerzeydww[wlpjklgzyilrifonz]gdicckmxibtwwoesaxf
+eilrieezaciolhnhrc[hcisnfomqiiaculxfv]bfyxxhgrakqogthzft
+xijomgpzpilomlpy[sfgwaovcybyhoogrxsv]ufncwrahejwlhyvz
+nojlhdpfkjbhahgqo[lqrkjabuijutlcbq]caszlkvkofxjyqzsttc[isqicyomykudneq]izuzehgtmwnnvfrlrja
+qwfvuzrogqzvnhyqdv[qhnjhafmrtghosbmskc]msmwswtgzlpmtmzne[kovzhefjqtqadhj]myqisirynftmtzvxvvz
+frfongnaecavmrhj[uuptwvcqozxnglsd]kwpovfwuhmqjkog[phtrgysxaltvbohmv]abhuahonmbhsmfglltm
+wdqcwcbtpexduecepe[zwrcpctlwglgfpappb]zdadimzdcpxhxwde[yquulvwgyyzwcfsvkdt]thgziwclyxxfyjpbpc[ypkjfrfkxlkavboh]hxylcecamgezuoljh
+yqxkafpkuuxfafe[zehlwtvpprtiqbl]qswqigaeaneovxm[bqoieihtxarwyrqegb]yzdopgmqklqaizxjm[jhrsftklywefyevvha]xuvydwcntczjvuduj
+judhawjtmpsxfocai[qghshlgvbitxevt]xehceioknrewezihnb[jvrzemakemtgmqiqmvj]wewpjflvqmottqx
+uhokpvanmvdobqitn[eosarcmqnukoczgz]rmoowtgbbyimkptlxdu[rqhewmnpypqpyosgehz]nqdwglwscsizxey
+sbnojmynueuyyutr[oonxqrbbjxwvwafad]krqlneuehyrghmkrq[khsckkfwowubtglegu]xweufrmlufamzbcedk
+nmgjmbwyrvcbthw[ogtvotifzugvvrsfe]jucqbvfqclkuxzumoed
+uaokpcytcrfpitfursj[lweyfahryjfprulw]dsdutsxdtugaced
+ahshwqihivxlgsj[ldnmuwbrmoxtypqluyz]intafryfavcnotgxu[xjggdyvoarfajgp]zhfgnytzjhuyheqdy[yeynlfshsyrhjxrzguu]onvyhjfwooikmmqzwgc
+djkgxfnfojgjpxec[ngwqajfbywoxlbm]oqdqigzeqadgqjt[tvojayieruftbjokeeq]gxwtruomnhorqqrpzt[bxppvnbiwhkhdka]rhpffqekyrcgwqmoi
+aasbwiocfkaahrjwerr[dvlemehlhfzxnzymqn]okxibfrlswfvmreuf
+rwcjoknjvyufkrp[hsqrwhdlwrtlthp]ijezyezjdrhzgltliq
+azawpddzkqbosmltyxt[zoaaqnowmmwkmfkq]lgusvzwnimvgagupkt[scbjhqdftzssbvnvff]coiaslgcrwvyioxx[jouvwdiwvbsembzf]popmlnhjkoaeahcny
+snucfdhspcbcsgjnmcc[qbicureolmbzhsy]cuabqhzbcbkezsumkq[cnggwqizurflommitua]ajtxxkqwqynnwroi
+bsxzwpiauwlqelesq[uqfdggoirtlucvedpl]asacxftfqfswiapmj[nqohanbbzodfgkxihtt]lhshhkgjvjkumja
+beewgulkwnmwxenstrz[vybrrqhcdpkhfnshccv]xdfvqzdslwosulzatc[kuknmynmjntvtyduwlh]trfvychdobyghnrxrfy
+oxrwmqpvxntdkohmxb[wugyubwxumwnxlk]jidpzvtbomuymyf
+pqzbwlnmvtytsfre[pmtmcnxkylmqaeb]alfdaofnqpohulpmfoj
+qopdwichdepaubxxeu[ifjozmlqttahyugyt]mfmlwxifscsnuom[kiyjlqqxunsxfmht]icofrxpdpsktwiifyb[hetijegmockkyjhhc]aarioqngqmdpkti
+klumchkwczxuuekdb[nlalmjunselydybqxdj]alagfcxocldfyzdnzd[abfnqrgrxbscagj]cohrecgrcaxljkz
+djydzyiyydcneoubp[gorqzujuwkjsqhelfrp]pvtvbhztirfzmwcopfv[wfjumxbfvvgvzltlcf]ergdkkakrtfzcxmqcc[vwnkrxhayzbvbauvn]yjoqveipzibbmjq
+qbdruhoywfjhaljfkoy[tznfejprrnzrrewdx]jziputgqfcqtbhvhlnw[ikahxtlheeunzrdq]tmoanjmpioumvpcu[tnmcvxkewovprxgzd]trnmnhdvtsisiujqjk
+llojixxpxtvcwxaxp[rurmhymwuztchngs]weaefxdkjmofeydvfy[hmbracjdcwxfeva]jkiybiomykfexjlyg[pgrlrqgoxqqtoio]rdynpcndtqarmkagbw
+kislmybuoblnpsc[dvsrnwlsvxxmzuu]jakczftcvijbavhjgb[osdyplcgliragfnpezx]kihkywmwgbkjtgxn[tdsgdadcvcaxfrbur]lzyjmrjqztybfdmm
+orfngwdzlrucbkbqd[ibvlkwlnnzwkhnoad]brstantuaxwkibofh
+vuumejklanuomqqdbva[mwjzrpargsphzkkhaaz]lkkewmbrvuczyyu[ebpoqgoifelelzzhd]biflvclnnimuojihdmn[llrnjdgzagktjrys]edtbmzmcbthpixhwwyz
+ftaciyszakisxhzjhbo[khfshezpopvjaki]pdnnsqmgpgatvubllrr[ovjrouomglbpgvtya]ifwcvhascqptbvbums[cfpimraygtnuimiup]zeykmilehidtlstjux
+nzgbxxiimmzsvhe[ixypsgextxvdckbjelq]jpklrvkhgzprfrsv
+mpdlsziccgzmvorvm[vhxbfkwfwbxqbvxp]zbsxgodzhgmrhrprpu[pvawdsvqybgdncgxido]zuhyfbmmhzegohu
+rdkteyoeleyhxdlfa[nrrzftpiqatsnnnsd]qwelhxwbpuwjmrjxmgq
+vpdhtcgjpkrqmrt[gozqldncggxpvou]zedtarenbxskusqk[mwpmzpwraryuqqmdhrd]eoculislafmbqzy[okpddsvrtyrkbjtihhb]dvuadhnaxkfewhnksl
+ivjfulhqfbdqiprzbbe[ezhkhqxcviwxbwmlnbb]ttekmmdrphuteslzwcj[iocuduwexawydww]qmrfnnedqtqezclpuq
+tksplumjkpsjjorux[dpffmbayilzuszc]rsiowigabmredkfv[aurieaasmsrxufpo]lbwvhcrjfgomkff
+uwuobjzxkgeugrivc[biktdwykzondbwiko]nnrtnqzhdhdwzkau
+cjjawanjvbxvmvdmtu[kubvvkuoynaawzowphv]ssijoohfemyhrde
+qlykdpnioshrexuw[tjwoswemjxylnqupgv]ymovhecbliuuzhjwu[ghxibaaourtzzogrynv]hmlndovkousrtbomlnz[nzkdpmqrqovnvskh]vdvntntzrqrhvcaxdov
+tdhrefyrccgkdquxz[jqeprpsvvkmmldlwyq]lwhnimtgegsziejeh[gyefzqbmfnhzgtq]fmbcvbjtsriuicde[sbkkbqwzlluccpa]nwxmuolcbhtwcllmz
+cakfzlwlaxgrzjpgck[toihlzbehdzesbt]azrsizelgzczqxwejb[ypecquckfavmixeyjgr]njiyddhuwlwogbnpt
+jadaohixgxzjcopk[wopcnehanaabtklxnez]jgvumwvmixxxwaolxb[lrhmslkbmylyvlkx]tatmsbtlbcutcydlrf
+gelrpwfiyiszejt[skpclwjhzgwvfbbd]ibwzelwwhvudmvoe[gpdveubkzkkxvtjn]khmkjslnkdlmefcx[fcwhuyiyvnjgfcva]qjcfuqxwmkyvvzuj
+pbejigkioxtdjjzbl[uihultqxejdyegacm]fitsnuitopdzrxskz[shbzwyodcotpvoixoz]qrhuyetkmnnljfqt
+yohbaryhrhuobkf[fmfsylvacrgvpnlqdb]iucbpagpbziaqae[lfcjrlbgxiytord]mhjlzecyrqcpbxsaq
+vguohtnahunrvrfv[lwbganvrrgnasnkqjz]yuoncrmethwiglfiy
+pljibizefgbrfauieem[yadmbpkftrtwjrize]fuzpxdpomsdxfocc[lvoahklovaxtucrpwhj]newpgoizivpqkpo[uloztzclhwixtcjhyon]qyzzqoyirejavchy
+plinqqpqghkeuipqppp[rndecheohrsftgvku]ogsyvyxuetmdomwdmx[lumcfskwppjacuddm]uptsydogwyqaupdft
+ewvtreckmjqvkvwgtz[leisttvtmrxnzjv]bfzzponjsjmepqjfs[knbonuuuhvtvteiov]vaejlijsnrpqppo[hvwwdxernqcxtxe]ssznbkhfmchmjjiahkk
+rrofpphpfkeeqlxcev[ierkxtuduxxxbilmg]vmipzdomogxwiazla
+uqmllifxqxwcskoj[lwrjkmxgwxwvkqrsajx]wpbkbsohlaeskzbv[boyvlwxpqpppcknocv]pgsvgtugmxmoexrvpkk
+zupunwchccxqggie[sdcdhzciymhppyaaaib]izbizcvzvbcnofmqt[lvvxmcmydxruvudsar]gnspfiadqokusllygyw[wbcpnuppeugrqobtnu]mcvfhylypayxquurcv
+ngscsmmvttxjxoaniu[wsfnnfnkwmjxjql]ijtqswaevexzcmgime
+hkmykmrremccqxvfdps[izfaeewfadfhuwwd]yffzgiqtmayebphb
+znzxjrdnxhfydrhr[kwafvmygvlylite]hmskvvpqyoblrygj
+gkxzweijinwxyajq[jzljdfxlossksqa]octzjmrvxkumtpn[jypbqguwpybykguwn]ngriygtjydfznsf[cpwtojpifkhwtfknjsg]zahxvqxjtoutvvsphh
+kmvndjahzayidho[fitbtgfncjvmbyrbvnf]fodwrbklqhxpsrqwh[ccwvgmocbtbqvwzu]uuidhylekzxzvmce[qbhkjfhnczasecv]ctsfirxwjfvrmayoeb
+oktwbkikybfwojcweal[pnhqkawxmfxggabhgpa]kdjghdalrpgsdhqj[bxjcqdytenfjirvb]odnhihekqyskaoedyor[pqsixozypkjdnnntbng]negjtmkqfykrjgewt
+hriyrcurqmacydyay[gfblxaovvngyesfa]tmftedgxujvmjze[knivpbneiuxdsowcxdt]zzncnfcouzoppog
+edabqgdgbyjqkzjvzhr[rdejmmymhnvfrqvf]zknrxaqjohlncvwc[lcpuoqnkvwgjycfm]ohuebodqzydltckrsb
+rxcyawcfxcjtdshxg[zvggbsrobekoxidyx]zdpvqowndwgdubbhst
+qngajrgvzuafovkr[kracjvrryquumqerjev]mqddkdpqmfgexahczm[psmbzonkrrtlqdpgqci]obiynfssuwhprevmzm
+dihkldbnjicztjfrvga[qtlevmacqkefjomc]opjaojctoraohocxaca[ojldoulpocpcpexnyx]qnouppkcuggjmod[oeiywfzmbjrhtxz]mvhoarchbrpndgwhxga
+qyncschbsnqwgvfu[cscsfdcfbfqiwgwqi]pqzbontuospgycwzqn
+lwvovybfksidtajq[vrtqmrxzouplnjogzk]gailtfjtszlxzwhbs[bgqzyhgudphwgufmg]levofhjnxjqhkcy[wbffnapyutukiavenm]olkwwlrbbobqudwvnur
+yeqiptxuczuxzeatp[upzutosphyfhuho]jehejxjvfpqeifogn[odhltqvdcwwmshl]coezfdamogigspon[syppfhysfwfkisltwr]ihkaelrbcelykby
+nmciqyaovpdwzldwt[zoaowvxkrpfuwnyepcb]yhqlmmrxxvguuajawb[rmilfmqzokaeabc]yhmswnsiyrepbudi
+pifzooabiqmuicfqi[tvaqijdwxsbamxzg]zncutzbfmraagej
+jpgkrbovswsjnbcj[bjybzimnzszdkqj]mvwmgdithrxecpselt[kghbhnctqnhhxxhdro]drttsuyvtuuygdtfaf[zohajxyfyjnqrigq]gadarjzfafqxsjxk
+wivyofwdmipecdxuqu[trccnlbsvfbagstm]xajuejldffxzxfygsg
+qsuxdmtfgpmlgkh[gisuuzaglpmbmydtt]qzyfvzryxepjmnr[mgsjrbmtxxzkadomelm]fqzjahepxspwkwpwd
+pncauthrouncvjkrik[cyiovjnoesdgpeyjpvd]ajhonypsbifeghxi[wmudcxwbewumjbegnh]qetzbstgmzfruzxqln
+qmkcddrhexvtylukq[nwrryzbnjnhvvgm]edxlyprwzzhgfmhz
+iuonniejtavofqdqsln[ynjrsfsqrdsgydhpdvh]xvqtjledtcgkjkealws
+fhbxdtddlvkjrmjyae[nwwjmjvxtabdwdezfdy]iwnsmstiulolahbxka[lqrxlwifzndbeid]jilfjomwrbjeniwybv
+iptzrdexpfzabqcqkm[kvaxgarrbrobtmu]fqaedifschjkoepn[widcirixuswhcvcqywp]kpkxphryiwwnkmb
+zbeoanntetxhvigve[fhwvhghpujcldib]ncrcyvevibooqesy[ougjirkquasabeqad]ydufeicmimcwgtbg
+jaocnzcwgxknexaf[cqykwbyvxtcwnurw]udxjnumyhelfogapi
+sduqgjoijyfrcnfencj[uxuiwklsiuqwjjrzcfn]epnvqcjspwopyffl[mwghrhtfclodjan]ghamugnhrrzjwmnc
+woygyvtrlmjzaeteuj[vvvfohavzuuzyzgu]xjjcxhosambmkixiie[lqholbwbktlvdljmapw]diufpkdnjmjnmyc[ehjexwagbmezmpj]czhwzecixzxfykaiafj
+nkijgkhyilzqvtgj[llydwhyhnhpcracxxd]zgtsspcwpyujndbxvp
+nawnrsgxqpctinyek[ieguugfkwujnymij]rfmqypeekkdsttdw[rfuanabgfjgctueaaqo]vranbomhrynvjyywmh[zjncmschlfmkvhd]gfeoftxsawcgrzvrlx
+jgazasxbickiiiz[duuskjowanfmieegl]cwgdwtrzpbfemqitbhb
+lahkgoaoeofjlocsei[bwxyguvgmenwnpwlp]jigdlgdjptkimoyipa[zlcyjbqohvmlxgxp]bmovqedgchicusqzq
+jhkxinkbwhpddvjzgod[fypyyhptvewejlbwdmx]teagznqhjydanxxi[wkppnjsyzhwshtpo]piaqxcwqolwklwzsfkg
+sjedigezzdkqlxlcnr[xanehtpradlngiob]uonmjrieoycpthh[wnsqwfubwxkqhlflzv]smrebfwpnhskzlknva[pylbyttmhyggonlk]dwqkzjmatybpmgeb
+ktfcuvnwueamlwvgwmq[czcgevditrtvddgfh]djmmelqewdnzrlqliz[fkpieaipgyxnkmjp]rdpkfzvqpfpvczv
+tixjemagwmynkihelk[bnwfmkugsnivgdmvskc]nlasqrjqrlorszi[kbatouwdhejxchpdhd]etmbkytyrpnrpgqvel[xahfkfjmsqjycaq]mispsimhcckrhqvek
+abudxncgozbrbnx[fllpjgocynbuyawgs]hiphrvpugpfnnppn[jhmlgjsufflkdgw]ldmdclrkorzjtbjqcrn
+aljahmvdrraiavzv[tevjntkppnjqwovvuuh]ozmgagxzixxyzuy[zgefziawisowuyqra]nrqmsbwgqbfrxqvzu[zvzglmnjmjpmditiodb]odzbozesvocemfyis
+zgdukwtswaosbrossf[ugdnezayjnbjuhpeh]knkvomcsgfptssifni[votpmaaohcyofgdz]skbvfugaaxutcmrmsc
+ywiphurgqcvybiakgok[cscyksufsduegggw]rtvvvokrvwmwsvmk[oqvdxhoqfsfdwwm]sbzajtnbxzkyiwrj
+nxrvrsbjsrysysvftoo[qowwnvlezexjyynm]nknzluizyzjpbzpevb[adkqviapkjbmknchtb]xsgtthuifmsqidyh
+ejrplkjjbnjjouesaph[bdtybzkfyictcjuagr]ivtcttyunertnzgmpqv[roikukeznmtkqomqbk]lsxzsjrnsrdlxevj
+qgcebktqtyjjwsav[naozjsnqufkkgkp]evimphuulhzflub[weanrdvlsmmypnh]rojhwlyxtszxsjiuai
+zludmyuqlfpefvxcm[hejpyhwaqdndtwslan]ldtxkxxtegoqpntsnwg[olhtlkpvkdgkkxkisp]hursraavetjgloks
+rosuljoqspxeovaqr[ocjdnpuzmwioylt]txylrlsndrifxiuxuyg[jnubpcjyfzhiwul]pdtcjcrkpmzlayzcty[gasynfnouxnvrplkym]naxwpqsxlsbvyuavty
+oxbyqbqmpckkdpfjtr[ggnmfcjtyfspqrqkg]tzapjijawrabozckadp[varichgjrivmseddxv]admqmnzxzqcbapdquwd
+jvhvqxvhqfxnjzmv[hwfwxvwhxorzqizc]rpjpwggqxqkaznkuqn
+yrsucbqcfaukancrr[nabtowgijsnzryuvbiv]sfpffzxrftnrkjx[qfyfsbkyhetcedf]xdykjbymrqgheanxx[oxchcwrkbqvvfeyi]bztjlknshikocxztjm
+iniqqqqprdeznwhr[arooglolfjgprfrbhbm]sczcmpftuhbaagwgedq[yutgzaqyxntjxoglmb]vswbhlspwfulowkif
+bjcjrdzwhmssgoinrcj[jobrpyapaxkasve]hzacshssrxkdtrlqhr[yygotqrmvhiqjrja]ljwfwudymzkpczysknf
+lrnqnaxtavkhwfebb[vwyqnqkveujnlzv]coizhrfmviizxgz[zklqinvtnwtajyjx]nxvpznyebozrosfgh
+ccjjszgrbozbpopagns[abiuzirqfzactus]eemrbqrkhhppvan
+xeaifcibybamzzzic[ymvsqllvremyfify]ftgmrkhzswdpbmukcdv[fbyevcnnwtnodgxy]slfjznnldyuvair
+ajmeryqwfhniqenmi[bdzlgljpkkgsvpjcy]hqzxecqxmneterlqizz[pzrbbprbhujzpcxhjmh]lvrckyomhvidbiapikk[cyyapugbrwlubpmn]toodggarcneobyz
+lehpdvqjccdfpzpo[ssunfejvfxwzlzqy]dvhwfrwiipveqpb
+ijmthhifxtkoubt[jcgoxkntpnxkmdp]rzsfekfmamzddgm[szvzrwthulqzcorhnk]lmgsxsjjcagkaysalnj
+qmfgzmmoylbruqxoh[uoyinkzbglorxud]frtffuhkchkrwbxfx[urlwigeirzobvhir]pqrqujuwxueommaj
+tzjhaiqumjufkzcvphi[lhfohqxxuoqybomckm]qjhpjkjljzekboyc[gvzfehzyrfaarfklybg]fhurcpaukztwesz[lhvnhfgpmunjukye]mdzcvgeehmchcqe
+cbyyjbdwzgdhveyw[ockkdpwglixvbom]ozezplbkvaulagw[vmzfmqxplwaqjrf]upytqbnzjrclzfvti[hztxfkqwcuypqyhsfa]sfwcfhrnccesyncbg
+zaclpaavkxbpjxse[dmuzswkobdcfmrejhaj]eqdwvpiphijpwrvg
+yvectfptgdasqxi[rmpaospaiqhwpjwdru]ollajqbxmfnqmqrdce[jqixwgznolbepskpm]pmyfsrnbdcqdrhplko[pzblovbmbnbwjzsxrk]hgwpjhgshxoozdu
+gpnplfnpnmdlhehgazx[gkgcsjdcfnxytzp]wamlpixcrqvbtseb[ijaxccauotewzkgu]usgmgqmezufmgqjslbu
+jgtqghpjnbjkmajymfw[isxpkhlvtuyqpscvm]czbrsyeqmjnksov
+fjsepwfaxbbsdxlcz[efiljmecvcsybpj]fsvcvvewoepnvqz
+nxzdtgomsakdhwefrn[cobjsrlxnkxvmhk]wkfnuypvsigzcnswufj[ttmtjfkbnhmmdebtr]ffumzvnvgitjccgz[offnegtizuxhpqmic]lbhljegbjmldqbzryis
+gnnsvlcqoatssjuijb[eaodophfeufuvdodj]jplhbuvzqfgvrqbuy[ezxxqanlgnxdkohew]vsukbzhjshwmmqdkzdh
+shfhzsmqdeibrwgyr[slyyksjeywcnuaocadr]kdwnsokrwkajgnwi[zsfujtkhknplyieg]kijuvumdqvjyjpbhl[qyrlzloooajylfrsfk]gwqdkfpitiitrednt
+zhmwbilhpywvxrza[tgnybotdqixzolvn]ptxzyjbayyevmcqua[hcmgjpycosutmqbtkf]tboiprpyhwgjceu
+ejuvrirctrlirihunm[nfjigabdmqnkfoauuyg]rfwcumqndfgotyx
+cxkwlruaswigkrtxxch[fjsovwltjonhegm]zkfawxnzxlkaqawq[rgfftbipxlmelfnpf]qhhslyyiluvowxz[bgxutaxmhxyxxdob]hzthuaqpiyeomlgqqcn
+qyzwezoszvwrwiilglw[opryawlpulfkpkmuave]taxeqyunnihulfp[vzxzosekvamoofva]bbtonpohbgdwfmt[xwzkmwrwruatcdqrj]enrapbeqoxrufgp
+lowqonzaekybouni[uehkpbaxwfixuwlj]ionorsihznoszwzyq[cnatlobscugfpvpbw]lnsmgieepzvmhvbz[lsjebmtctttclkxqok]jwevnfmcrtmgjyniiuf
+ltxumfyzdinfqrlf[jyiwmlpqkbnbgmu]bnicegkghtwivvyozea[qhgoiugrookfmdsln]fpokyqsoknuahpmutnm[smzqellevlxgdbbet]vsadiuyglyyuccgkrz
+fvhanaukvcjdkhsydnz[pbjsoundyybhvaqglj]esjjvkdvjmgmlox
+hcckhzdfmmvnsmuzjg[uuajvdzksgilxpjmnv]opbmjvfljnqzxkql[pgdelzddxqrfdoqnit]hqrrfnwrokufpybg
+ovtjlczqesucgox[kiqphngcbakoelqncyi]jhrwrpwdjxbhnqp[kqvqdyokyuxulxidc]qumskxudarjyagegy
+mxrxpfkynragapzrmdv[rdhsbrxgeywqbqh]rpoerdiwdisciarhl
+ejbdfeqrdsrijztlibc[beglofnxveiorftulay]jslqibpnunabgqmi
+uplsbqledimexhzwnkk[sfreaeitecravsu]exfxqlrumxaeasi
+gicahlhkuxbhppe[cypyeqpzkrggfqrielv]pkuwwtbezndgtqhbz[ojnnxanlkamvmpqfj]eozgnkxtbtyecuhs
+jtzwiyeueztuiwysyv[awibgssyyssrnuxrvuw]mmyvqfgaaraahzzen[rhscfvdrvagricw]qsqbnurcszgekmp
+dxkeveuauhblqnq[oksqvawybtejxmdw]jrbwmyxdggncxitwcms[fvhnmupxnynxmprs]odbifiqqxskxaqn[xwdwagplcltcepjmtf]zsfevibkmzwtzoq
+kflcnlkdujmtiug[rwydvjaazfgmfcn]qolbbuxzxhoizfqcwn[tprjkbylcrlvmbggae]pjwhgcmgxzhxbxdceme
+donbjfkqtygixfpaa[lhfcyuzcmsgixjbr]njvgmbwgzimrtpdmvf[eonodblqfpgtmex]rkakjzfmuyeajvhs[lmgtvenasnqbyby]jdbxoeqnwoednoncq
+laiyueskjnlltkwm[lzrgjwrjchpmnais]pqltpskalrwtmtagvm[luctnpiuqvulmtmw]awlqbuutunlbpusn[hdetxhrtzhkyfktmfn]qpmezabxzrtquidbjc
+hritvdzjxipitctgoex[jtbjcyaysbefjme]ebbcyqglydfhqjfa[uwuwqhwanfydpxqk]enevryjyzduawrfc
+axxprqpxpifqnwte[qwkkhbywyixngun]ufwcbmerbqiblbdmn[mguzyerbfhpqnybh]gscgmmckgfxvvwgxxm[gfjzckcxdowpwmhmg]hjblyfatzhxjyvlccb
+qzzkrqfnnzvgfmrpjr[sktcrqxcctcduir]vmhsrsedrxpnrugm
+mpxgzowtjabzwfcbeg[olgfqepvinejmstbrj]fnqxcfzuxojvkscyk[pxbyuusrrbjwrygkxm]wiojjquwvhineivnkys
+vqcisychxuswbqlzdkj[jetvpggxtqqguuh]tyllnzfyfphoudijzj[xlnznxybxscqjktjn]oysyrlqascsqbclsb[rzhxpwwrjwakoldm]mrwzibdjlhsdsbew
+rttdskfweqmkjolrgsd[gmdwcimmgetwiprem]wkyklvpjyhpzvmsh[zftyxsrvhnioomw]mrvoyvyyrlguwedz[xyrajtcatyabfqigup]srjmohoxwdybksfv
+xzeexlrzdznmhbph[vobtfjuyowqppxw]mjxwhgwveozusndvi[jthhtubbkbmdiepfh]gtedeqwesiwzlrfny[tppxuofhnwwkbkysg]aygwlnvczaarhfgkw
+zxirxtzlqkptwqd[vwdzostlmrbjclfj]aluxqfcdbjwbeerhr[nsjcafnammlxjafrzaa]kipaqywrtrpkbcdtnyi
+vovbpdgnfhmeuadh[bcgvleartfaspvvjjz]ajyzrbirtimuifvs[lykguucpvkxuupcbims]qplsipqneiycefb
+alqzdecagmvodcigcd[atmngaijkfehfbc]cprsiaclouvtbpaab[lfrxlrzuuooqdtfirbj]olcjwtrkndcvykp[lelvgglysdxycvk]uyakjndqzxtzmxs
+syngsortxjqcdwcz[qkiseyvolwhibxdg]ucuxqdozkfgaxqwovk[eqeessuwvcayhpc]wkhzcbkxgakgxnmho
+bhtxesznfkwqbodb[ptpuhbdsvbcjpmnsl]oohvgktjsjwxqgyxov
+udnbbnkojrdevgujkg[cramyjeuckywtuw]qtldussgogyblkm[yuwacyafnikvgbibmwn]xvsgxmywenrmhdctxg
+uzqtkzkmmeuttwyklv[rgnrxkbavqabukxvnp]whhgpmwocfmplba
+kvbjvjxyqiqitikvm[vkzunkivwcpvxng]totvodotoqiqokouz[luzygityrnpuiih]eadddxqveeuujmvnek[nyxhwlkatungkgm]bdhobvhktlnfpjelr
+inmnseeoqimzjwzhltk[ntwlsdvvybtdoqciu]jaurhomtnyudxxmslj[wqygsctddywlbxg]apsdlaftsghmhtj
+pxieimaprtbntgvm[xuvwwsinhwjjapu]taeomoijctvzyeijfr[gitzztxejfefzvepf]udobxonjlqagrkpaehc[fkqjhfjicleroxp]hxpzoklhbgtngtagcz
+lqmoxvnknpqzcgs[zktsmqcgzqjponj]wfhhzvqiqkxfwrrw[actbxtcdlogatfkprc]tvzphmtxfrptzlopv
+czdnqiwqhighizbmivy[tptpsvsahslbsovazkk]ycppvkqvuggebgxibe[qutumfpnpzjkgqyfkok]ixywxvmvliftixfie[qipgniycxomhgmwje]vnhxbcnofkcnzep
+igvdicnzsefxlgk[dzppkxdievabwyh]fvyywjzcyfcqahv
+bjzwblslduiolbezybz[flvsgshhznvzmrxo]lottitaizuksqfihn[kgsgzawzjlqjsep]ihadewtrfpsudggga[oecgswhnbhslysd]flpdpxndzacxeskzmn
+syxfjuakhrnntipfpb[xmntswflflstndkv]lityfpfignnxsyirja
+unggjaqgvzrckyqx[llllagrmuioghea]qafuiwqpxcljhvf[tevtmuvcyqqrzvrduc]kqnaadyfxfyyzjuco
+cpjvjnocqphsagdizq[rzfbvtnodwqrqprvqh]rnlzshtjhrevjgdu[lbozqegfwoaikxbnt]cqmzymvkummuzjfx[vtknqltevighwfdnjv]djhfeemiljlvkgqkpp
+adbbbgxmiqomckxesb[dmwxvrammletdiim]eiozjsockohijbiinia[zyjjubdniurametk]ajivyylxbhvkktrzdg[byxiykqfbvpfdzdv]zborzsvqimrhyoyhevj
+frshflyhzegyezg[xxaoqtzxuqbamukfxed]klyullmlailfvcz[boefzsdpblwpbna]dbnxivwobykcfwogv
+xxycwortiwhndrvlr[mspdwmhyqdwtctlyek]qnzfcwwvvlfsael
+fnekkofpuwhttni[mlwvhzrwfdtfnvof]gtlyjqokjymvtkiqdl[gdjobagxsuhudnoi]jgcgyusdyyocqwwtatk[rjujihcuqgdpcbdnkco]iewvagokrzdhhhskv
+dfadfbjefyinccgzt[gzoojtdlvqysetfihg]nlsriqansooflahzhoa[vlzwtzgipbaxudxg]htykxxpfmhigbdqsu[pzipnakgdfpajkbqowq]zrwedqiuobogirulfwm
+wevlduhhsouwlqxdcfc[bxcvjwespxdkulgun]hfuhwpzgdgqsujeex
+zweayhrezaoqibgvc[sosownrvumzvynfpvr]lzubqqqepwraqqdxxy[bniazltbdanpnjjjuox]tulybfbbzeiyidrv[zbebbcdzpcvegcms]jdfofmnlgwrnvann
+gkmbgzvludgmjgnrkck[ijywdgxetrginhtaa]yiokddkvhxebbuyrwoy[erhxxldeegvsebr]ujqickibpbjpizhbjw[mtzvltxionpxygo]mbcgbublhkajfdfvf
+ddjzsqkoizakmeifr[sigtlzmyyrflvjowj]dyqyfvpkhdulwuj
+jivforicorwbkmccpgj[oviyldmrjjzbojbs]wpztdiwcdrwttmfdw[jgylosmbgxlrogsa]htkvwsfczzoascpunqr[uemtqxhcvvphnvktio]xkghvnicljrlndjtsv
+zkzjccnvukaraob[asytykcstvxtkvermx]lqgjlittfqpyxcq[dwyrqfxmwryvxjzr]edufjnmxhzxokjgphk[ucthvgtgfpzxikmnjv]yqumujliwpjujnymcen
+bhbndmsnnbhspzjby[llodpdecwrlspsbhbhm]zqulqmxwcerescalp
+ozkoqhvatxmivox[qffeloluwcgsimvcrnu]pweywrdkmtqjiflvcm
+rznstgdzevfsthcc[jpgjzgeibmumtatu]asgwjccfkwzaigwp[soegoylmysqcequdsw]pennknxcwwasonjz
+afniplpdesiwqvdioov[xfkwuijxjgtqbhqow]idmgzrcmwzmrfbsubkz[mjwyiznfpjztbfervj]cythmqghdkjcfrt[ekhpwckuwduoexycc]htaeivvotvlstvsrpj
+gecbcvpiswzjjeiriav[ivbfdesbkamvngogjb]xphdszgbcburesbfi
+uldzgctwccgqdbxrmpo[guiftcqomdqlqua]dmxluytucnlndazic[mhmdapmemlrwmvdzwkn]oqyvwmhlabcwxpzioz
+mganrfqbsckpjsnvlh[vlwmfxhxlnnpsghrhmr]eqyrkxjcwpkahqpxeqr
+wpbzefalgkbnrke[qruzjqtrkbzsvfgwz]vahtniazgsicquatrg[zzslttuxbwolldy]cuejnzjsuwgkobp[yspyowiamjpzcaqwb]vhakhmjrncjoroe
+ycxznczxbzrprsiw[oggkqxyiyvsrmxck]asjjivqayantzzfysr
+ewbllymppqrdnaeni[qkytupytcgsftpprv]jfepwibznfbypfnf[lrparpwtkrzlxwep]vdsywhvslycyohef[lxhwibvmyypfrkdsley]kookbjfsapqphmywuu
+cfpbgrwdsnrgddzzh[vbqzujunswprxyxnk]efqzsevzxurynhnm[cyctdnsmqdssnmzyrg]vvswrmqzxnrbkhunu[homwjhndwctdbecwh]cdvggafdchgeuqy
+lihwrhvzkhbrgct[hmwzxlaycaimxchybqf]ruvcpltuinwybvv[xjbzxcihznlkorih]zxnxeqobqveujyrdnur[ijhueqaqprdlrdcjsh]blwxhcuajnskuntgo
+iroxkwgrjpzdodvmohd[wexdltrhssaqwqnh]ynvmdpomrekdsfrjccp
+gfusgnroizvfwwcsc[jgvlrznerrnjretc]dcbnruamgkyrowpglv[tbusonvwwycqtfk]oqngfriboradzof[yosalcuxlovxpjnoss]teunwgykswgulguic
+bsjpzlhhqvnghwnp[gakhkxegeohljlwz]hfhculyhgdwcflbdt
+ataqyejfhrpvpagptx[ufqdptheyevtxqjuqsm]tekvtwjvapcyamluzbn[xxktujajfnprffsvfkc]espinhantulzwpqug[pamkrynxvlrwccp]bgzabgrubbhhwwanvf
+qkyfobviahzasbi[dqhxzkbapqmrubogqg]aenfdyclijdpkeqzc[fbetcpbytjywomh]mqzvwjmgiexjfehor[ntwcsnflvlaxmfqh]uvubufoducqwacwio
+zvygygjncwkyceve[knrtgwmfgpjlqdzusvb]denyidxiinzvmhkeads[nuqpppqdsbypxncb]pzqujhpprhbxvnuzis[zxyppxjfqtzdplvbegi]imswdcvwdghzhmyyoci
+mpiwlfpsupluuwzyqte[mtyfeccxfpcorktwam]jtmnexxnxsdutfve[ktzdkimtvwbcjrr]crdupwumoriklqckirt
+clubjinwpyiguop[xummstkqfygcnsu]rektotfjzzguums[hcxlqatyhaqponifaa]vdzuiclpdtepfqmbdiw
+sswrlfxpvbjntaovr[cajokjrogvtnguj]jsyxzvoomnfbtcc[lgpureoznbgrfwv]rbrwjeeiqshuvkwub[gzvyjbprnocmpkyk]gzibarcxnwnvuymlxpn
+wpdzryxwfahiwguwvtz[epyjrrvvjpkuogtflte]shadblrllcaigwocsw
+osmgewmpcqugjqyddn[omtivijufzacwctoaf]rvlwqcfmfuazwlas[wbpvzrbsnzqnhygpexe]vxvfjrrcjutfivtxb
+unyfptkouxbhwwur[atheuhcficbccfur]djycwrtnlttopnjcm[pyocjfcogkyoogo]uoogeqkztdvsgdj
+gdmorpdnzddjtbzo[hxulwsrafnvyxokoe]flzcmbhukjwjfnxsq[bzqqvrmxihbugam]kwwzidcxteeodrcekl[vtjszsdbmsxqouutvkt]whnkvoierxzhehwcjh
+laswazcejcxyzcocca[utnlyecffzypkiocowm]nievutnusvrsixk
+xlcgrfodctfmyxvsms[bgnofwciyllnekkiqf]knqjmtgrurhsjrwahoz
+enrcvyphrazilaqswz[gdxchlzickidnqfeo]wmadrvyuoczftbdbbij[jxlyycfmgmbujmas]gsreebayzepseakylr
+zeenyzzskgvaysxe[drhsgkqipilrdmcl]xyhouejaqgfdhoshp
+sclmsgjqcijlilhtyn[tyxuebqjqjqdnzg]rfeqmnwynyzfwsfq[jnrjwlqvcnvziqjqnz]zjyeqebxncecsykm[jizuywrcdskgjpv]nkogvpblfiwwnynxf
+rkklgzusmfikiyxsk[zfcqvybbvwxwxlosyhk]pbcybycsiegagdr[jfrnxtonuvihkiueuhz]xlfvapkzcpysqoi
+nllzirippgseojljl[oahmzicssbyckdhyb]qqaeuleefpxlwfl[orimgxtsfwsplrbuppt]eyzeliykpnmmklg
+sypyjddvabqnknl[zfoknkriiqmevubru]rcxkbkzngjzzcchl
+uveautnfudowpkocevc[xqckexnnmsrzxwrgnwo]fbrkssqktfmvbebfs[jmkkvbmhembpojk]vrixaskbnwyzibmtux[evdzaxyibnensgkua]djjjewnszeukvelm
+xcidhycxopgdfgzxp[wcybbxckgqmwttrrvq]zjynrtlsoibooaiqg[zzsjshnyyytzmrcskh]lnvmmzokrgnyqfvsi[kjpgxjqiyimfzec]bpdjsrxzsbwigarmwi
+zytphsjaeavezjmtjf[ocfrxoepijrllfc]gsnkhdomwvsrvmctk
+hjrxkkrrutrkmsiax[zwsclcwdqaukxxwmbgk]jjvxzyshctodfeeonp[eklzpyupurxmcvgndo]neaovsspupkhdclbo
+agrgepnpjdjmmzxtoz[yptupgqukzyiwko]zegusqzhdpylmvhgh[ftclkimlyjeiqxymyc]qplgypcugeybdlznf
+clmaojwiieaxtkf[hybxxzkuvyvljxs]nqyvgwkyfgwgpvjix[ffrpmlqwqbfqfpyn]wewixukrkkavdgpr[zabgeqjcvdsvydus]crgezocdrhjcufljyf
+xwekgqqxadszfqxp[xgftweqykbpaqymyaev]aawdhgjkmwqayhfuja
+tynmzjhrddacgjexrr[kgxebvnmaazmffon]qercmbticxiauyauxmp
+ueswrzmngurxaqja[yzlfxoaxangzjbyqm]zrwxnhpmqiespczu
+caxoesrhrghfcyunxkf[lmalmkbhrhijrvmafw]sdbhqytqtaviurkzi[ozohqgqrkgcbhet]wgwgtjtcfcqzvymnp[zxuhhoxlpsgrfcrejmn]hkopyalfpjzbptgetj
+osmyszkhkpaedzdy[xfincacxeotivra]lksiavomozgiywoxrdu
+fzbuakjjvpyjimycrt[vvbkutdqqtyjgqz]rxzeygtijyrfiqm[qxcgvagpoqyoxhziej]tfoadqfiddsurhergel[sxqvskkcvlkpavpls]ivztxqjuntogjxx
+hphqkgxgqhazalmlqoe[ovhvftdmpwudzdicfkc]tdfnmaosfddlzbhv[obkkfppmoqirgmih]xrsrqaohawnwlxpvq[btfonxzgatdqmohserb]bukakcwcagvcuuwvhtw
+cknwenzzehwdrlje[sctyfugmaxgbetxzf]fcsbyyqvoowzutlge
+gpjdtjgclynikoh[vicphcxycqsiiiglrsw]bcjlerxdimzupbpnw[waevcaeooffjikclq]nhajkvqepdnzgiijfrm[lvmtxqhswljuvux]rnmiklyolpctfrfgxs
+weolymxfeyqemlpxulo[ifjuypsxwrwczhpsw]hziolxpchkfouvegj[svfsshaljdhmwcmu]zqbrupsvenlvvfiuhf
+mxvfnwvzsyldqyi[bvfuwmmrksbxbzcmzrz]wktcxsiresexdodbtl[hijoaneecbrhpmaa]xajfvvnvwcocpcbrhbc
+pboivziugjszfopvkwa[kdcvzroeislbcymt]plydaqvkrjbbtlutgvv
+dtzdswmudibubrthcxc[vgmrnyfsqtutxfq]xwbupswdznzazrecwr[ijppmhwabxmhfgcqu]rwvltmqsymbydmqfnzp
+agaxfzobcsjhyutfk[ftmcykjveqrlmvizdt]agbgsgsmhehzvoy
+fbgqlgcyjmcjajxgq[xrxyfyshmvxgquv]ubfzmnkgipmqeucbk[ebcveyedtkxwqcni]dvujsyfjdfowgxfh[oubuurnpwusoxrx]bzxtjgpylljsuruwlq
+nbctombtbcumuwmay[pryqddzmpxgkjlz]bwwebcrzdpkqlex
+pvwqgvrjhkhjycm[luquegjefcvhweovots]vddsjvlawwxvkcepqx[xkomwqdwvymcgtgxky]tmjyqmzqxuhzxjekwpw[jdszwjkhkxkkpjjwkvh]jnlsvhnyijndbcavtlh
+ccitzedsdvzmktzl[qjtmlhlgdmhomythbe]skkosmhqaqyxvrpwyvi[toqfnarddgzlwhipiqf]vlallikphqpggunc
+aapudqmdqsoadhf[bptieajhwtguxpprkdn]fiopmsokjtonmei[rdcwfyvsmtkqwtpzwcg]pmgiakezkvhfiqxw[bmglrvzatxatgooc]jdkxirlaztzghpcgiot
+csxohvjhmjbjmsw[zgvrfjdvjkjrrsc]wbnhtwfofrquxtzynmy[smcwkfovyaozfhhf]yfribcdfykfzsig
+mzvhznqsykmcdgkphhu[cmmcxolosuhnkmuwhf]gkzgbqwzbzzurzehdm
+yecvknvwvjguxlytj[pncdvmrcqcjmsyix]nvosjrornnfgznaby[tzuoscqaarhjnslab]whvfxspoocikxfkyj
+guaouikkjfrtolsug[tzdjiielpgytyhis]gwwwtmdeetytmerjk[sorwxqfcsuhbvecom]wmfmxfovbdjhajcaxyx
+ouvjolrkjyetsqlo[vnadgdxvtdkqlgi]pivwtbhwibflcoh
+puboxtiwmmabyqgn[zhxzdcswdaavgdaly]ksukgpnictzfxxsuqsk[feoibpurptzvrqy]tytogwcrtiofplr
+pyeiwajmvimttmi[pkvpbhnufrwpwdwy]dwdpuymdrskpgfwp
+uwctwjpjojxatnyjwm[utlxyebxsfrddigrjh]rwepcpjgrqeafmr
+mcibrhjsqyketegjx[wjiejdvcjjaijnmoy]lsjoughndzzedmblz[ovdcmldcmntnxwk]gtjntfaikfbfhuercc
+xkcadobnrwjczwpo[izovquqhogzhtajgcfu]feiizljlnxughttxhy
+zovyoejioovblepnri[wpjrezfxmhepyyhi]lissctcyvfbtuklymtd[vtakkwrsocdxmyqjkl]idfjftptuoiheqi
+fjylzurwqfvphvctbn[wtraagycimmpycsbtw]zdolnnawyfkozoduzht[wqccswxyzozewtayycz]zngifgtxacyrwiacyd
+mkdselqpwqchnwxgydj[orjtmojhzkuxfbpmxa]udrbphkhzchgiyq[ckkhkoltyjlfzrro]kdyudnkzdsjpvonrw
+bpjaenogjpzaxxkejpa[jqgajznyesxfcdhph]euziwygknckkkkunxux
+btjnlodtnbaubkvb[topsbnzgxbfanulah]uksjmxxfwfzxqfcij
+zkfnmdwdaviehibtjy[adnmoctsyzhtangoxtk]rjydanokxyuxajmnx[rbamopbudxevhpoezc]mzurnxtacbelmitu[oidbxqghkpqjzyqrrox]ezgwbeyokfmjwblqq
+nwefqukauecrgki[ofkmtkzupjriwlml]diautbiayphukxvmhlo[iggbxeudmmbkayonzyc]hkijrjxiffmncybco
+ytgimnonvbqexhbabc[jbkbctatpdataxjqtee]bxzwvqoqyazdgoy
+bjztbbhxzzuannkyvet[mngxjhitobvkzvls]abhmarswjsswftn[ihxeotxkwnknkbmkvjs]iovgdoevhkarwuraoef[wvsvcnptmpcktslrn]ldjniscnknkjaheayp
+avmlgtbubxrilqdbvd[eqaifmlaniocwybqh]juzknvgrahckcrhagh
+dyvzlyoefrbtxizlod[ussgexxviaibhrkb]tcgkgkyckgkyewp
+jvrsopjyjarbkenouax[gwyjvegfpwvjsdl]crgcqjzhywhasbuzdji[wqqiwpzcllmnopvbf]hpirheoriudpernd
+cpykkvqvowwhoiys[yjoethxfromctdkog]cvlcjvgbugyqvqxjbc[ipyvfwhqyocrksd]dsvipsvdgzruhsli
+gsyxcrknbxxyhvnss[zymlfgpcupgtzycu]sjucevsghhzpuqe[qldvqrwjankaiexmj]cacvncnvtlbnxfybngh
+ndbxeywazfrnghgdjog[vncdnjelecbwcnuecit]obhfqkcyucffwbhk[wiboksymurccujv]kxhiktclvdsgbxt
+ieqiuumamwhkexjene[tubauuniiqmzdntax]kxiqlujdvpjqqrtkiy[ubnpvsfjutgvfhpe]fnwawoyfoqqdgyr
+lromgmscqlmoqtqrr[wbndhgvivyrvevwpbd]fjvqzyqdkqfpica[isfiiygygruduhleff]lbfsdwsbvndxjord[zmgvcnxjevefjnqx]izvrxpsfekwsaxhzg
+vfqitwljrqvsyilpb[ugzycuwrexfoavmalm]dshatbrosrihtwpf
+hduooarqszvabcwukj[ajuwsrthbgchctbyuyj]tpzioxoqtyfuwtdccn[jisrxrmnmzhnhotwra]swseywswdlsbzzqqlv
+aarocdgubnvehgg[xvfugpdczaccgttycv]nhzocbyrdhlppydelyq[uloucbldnjeulomssv]ayxgxkrslthaspz
+dhyljzgyamlcdmmz[zdkwfrroodcyfnfie]zkwhzngaidridcagekh[emzeeodcnuvzddnbm]vtwokrqakoovvcdisvm[nzdlsyrpcsicoedyx]rrnfnhgpaeqtlxv
+nxybztwairyftfvig[syeyundkruexgbwyvz]pspeqstftxbbaevhql
+sbbhfvvgyscleyxzki[hgjoiilqwuiiogtt]sblfjsptehcxdilpgw
+fmynycbkkkiwjllu[iolpwypqrdrnkitax]fwfzssjntanttkkboq[afgwfwvsudpprmpne]fbzhbkoxpxavaskchfq
+jcyrspmtzwxqtomkqab[xqivjfrwadfvtfmp]fxkhdbiczckphwhil[ztemqpsvuwhwhfdfip]zxqetcaulofvxrsak
+ozgxtokkrotpphxsnt[txgvekxlxkhufcwi]hspcyxwyijgjaqsyfw[bcjgsvsfzmvjklh]bxjmkqkynrusvvq
+wofaptbytcugaluqc[qdgdqupqigweysdhq]saaeqyqazqqaunofl[iorcsdtwdhfmajh]owdrcjffsvszwflax
+icrmudvzysqefbfgpae[uypfoutavxnzfpcfafy]moghronhxpgorkpypoi[ayrgvytktzzwtfuvfxm]ktoiazynmsksawusbsv[vypyasahxszocsfrcx]wyodebbscuterfrji
+otrgqclsvnjpznt[dwzibvrmtngomacr]xtqtbpxdtejwbstddr
+csiarmhcmunsjogtwp[nborrnynefhrgwy]lvsacfkgakkbjyny
+ijejwezkizvuswn[zfkgmewadvwroqibng]kqhmbrdzuvhcwkwxfwe[mgopomvjdemllzygc]ivzzvgcwpmgjewb
+jznavprnlcygwvvj[eobpbcbuqceogtei]jilcppgbqnzzjrjjjx[xurpitsmdxtiihb]pkwkdkckicticboagma
+hrarppjudvbccxdepdg[ksabupqjypyrwctd]jzmkavpyparwxrivfq
+kjtgdhvqyzisomc[koywiyiymrrjpbqno]vbbusjzesxjpwkrh[zfalkzmohlxcdykl]hdctcfabyzteadzofca[vlbsevgalpsvreryxda]oocgdkoeoxgepsikokz
+nckfsyxjdgmgcdyqoaz[cegnbhaksrdfaokttjc]rmfzhgwbszywwzbzpe[nofsbyxiguiaxju]vjjitkzyrugozdspwjy[gwkdakutwllydivtnns]gswugowdiouemkrf
+evjgxyciglvcnkjdep[ixmlhpvkldxvcerjb]eqpkpmyqvctcepuljz[aylvsdrrbajlptvfeo]nqmtctitzqxeluw[pkylojlgnaunmolry]patyaqnazqoykcls
+yklraufwcbbewrzdnl[dfsdynavgwiwbkmmpo]atqaaprzieowbqafr[udtaocwgbvqqztkykeh]eyzakgtvzrmejksf
+gplhegstsxbqvxtnp[sheoxtsrbdxposgmtx]fazbemqbzmssyce
+ulhekckzsguaeuectg[msnwinlfedcaqdyb]przurxwotscdzgtcjv[sbqdcqeculwutvfecqm]mjosilvbpgaawll
+bjohxvdcujujaoxe[buibijjxplrerpiphn]eorjpmrcugznwsi
+yflomjbhtnsgkkx[hhpskaiqhzlmbnpv]lgsdbeankbosyptonh[vxodyzameaaajwc]nwpmycktztqrgmxgbg
+eajkclofrzpwbscfuwv[vgcyrfqnycmarafkjc]yfrtobkpkwlmgyckhmt
+czamuejkegyxhetxmou[edrrdhmhhtxvpoxvx]wbzihlibvexqyvclzml[dnzwkagaeyicaojzg]wkireqqnngbfxsygz
+kwbjoaorrluxekext[ffjrmxvgeqyaoartr]pwxypyiquumrhbz
+pyxpvbqfwlpnawrygi[dtqrrjolckhpczlk]mtknbyltlictunxq
+cgwtgnafiflwgoims[qdbdbgkqhmtkzmmyuke]cuhipgoscmxtoihh[ieqobhwtcxsehgils]pmtyremzeqhcuinxs
+lmcuchgkedjkgbvxjdw[jxqmqodwyieikurcwf]mkfmofgbnxsmluu[rymmyeyhyncfnzobk]jnwjbmejttstvhumye
+qsuhfviyinfcwufzu[pqmeenwhbstgguzs]ypqszcvmaxfqwqcvqro[xiofditiroisnpbx]vhftrwgnrxoxciva[esrtbbadduxicftf]vcslxziacmscxaxvnbs
+bbfcqaoedfdwphomkh[jnslunmdmvkiyup]gfnnjqweocbybtjdtn
+srjpaxfvehavomsjq[nqqcwddbzqvxdacdep]hhpbhajjqaazpqyo[fclqwfkctufgmkqm]pzkwekfirzlcgduifqu
+kfmoszcssmucztdn[tllxhkubjuqjmgfeqw]djyeyajqakxkoxpk
+peeaqxjifuloiujd[tgplullzdgeqjononx]lsmrbynngeveozz
+chytpljkoqzhxfu[izwdbatnmmzzttst]pkfsahxrlgxedvsev[rcxdfirqmtavigilk]lvrudkskrxxyulbjbe
+iatlnhdapqsyskgstls[nqzlofurrzibukxddw]yxdwqadthjynwvatmp[bdkndmhtngzerzwqgmx]iclavwyossjrhtoqf
+vvanifuojsytdel[dmqjrwfgjqrcyazxa]mivahklphnoapabp[tlwiiuvxlonsucr]fccfhxkvvqeqvclcnr[rankwbxciojgzdhuuu]eycbcqhnkawkwmkxb
+kyqnkbwfvcarqcrcfua[toxpqnxiuyvfjlekjk]hfponcmqqsfdzqtlgm
+ksrmipfvtrgwofiqxx[dxncthyfpoivapdpf]tzlnjrfggtbgdxec[tmlpzqicqjfhxwjcigo]uzmkhvbltpwdbpxzfpi[yfkkmkzokekiidxpugj]jbmagsjlfozkajt
+xhrfhwrsgduyobjodd[pazkwxnflbwbpwxych]yvasgopohztnfcsbc[dohwmwtdklyjkbaqe]cttccmlckzlioizfufc
+lygkfdlnlrukwjskxqp[tcskymqclunvdqywv]rhxfxbjftjxdepuwax[eoqchqlngjnnshc]gvjhyrvjgueweik
+cehpocjxzxkpnxglhzc[ltjmejyuouzkisdnlah]ytzdlqcewgwzxdz[hcupzenhdmtvigdodq]oivalfgkscgnaxih[opciwwcvzkrsehcznh]iveqylobdjvqqrbb
+ofluwuxajcsnkanvg[vwpsezopzkpvhlobfos]gmnrtcprhthefopis[yvcgpesbspnlbvdcdj]unooggcrpjinkxmqsg[stfmzxmnwkyujhwqilj]editpyjnpwaefawwq
+cdneyarppztbtwsaqy[euyswrwxaaolxkzgcx]cqqabzealhvuwzo[hvnmwoqlzyjguvyy]goqjeapcwghvfszwsc
+hohlnwotueozwhyfgg[bdiawrubvrnulfemv]yohmiujjdfjexybb[uyyzvnainybidqfmll]pyybgwdxcdqdgjp[qpowhiuynwospqdgui]lqdoiaufqbqljkvhgjj
+tirxyuvikznzsavp[omifkdfvljmhlrk]ouzmaxynnznyhfrud
+iyoipjyrywuhpipcx[zkrusibgupcteuls]rkwpwfppboaxzgkbwuh
+yebynyhsovfufkhwoel[rqgwgiuuztoboxqo]tbcahalhrqzpqxhud
+mxvixuvpntcsxjzvpy[jnjtyjwuivtsxlko]zugkjugtwymssxd
+ddxewdmzqrmjcdx[tehlbyapxxetbkp]lkfkrutmzvjsvynmt[aryjfitktobzfnhcxu]rrbqdbzhgjwwnfpkxbx[ggbsnbwuwlduhlfp]bdniebubtcxsubscaad
+osbvoidqyhsnydypy[virseojzmlplzxfwcdk]qyyespqaegmtzgckltr[kjowbsggjlyrbtcxj]poychjfbatvhkrs
+rlvvjqnaiasedvpjbr[fufrhampzwdniipjc]oqjmidcyiekvayqfl
+hvtczuskhiykvchxno[benlaiuubpaghzlwbf]tarjrksfzvilwquxj[wehwbwsxfuaptyty]gvvlkkyayfstbcut[hxnojqaxevtbvmaz]jnhvumhqfgkaqhumxt
+thxtkuentusmryim[hzgibspwboqacdlwc]clsunqcnrlgldjbsvz[scnclutgijjilirutnn]izdwhvipobyzirg[hliollkyedcuomrwyyq]dpibjmbezvzyspmkgwj
+apezafwfsqifmip[kuxynugvrndkdifwhd]pixpqmsbuqspsdpqnzw[qfiqdwcdzbtidgm]otzbkrciacwchdnqa[kiblvlkmtkqjzyyv]hnucmptrhrodosk
+nuiovzzixafjgvl[slswktlejrrsmxujjrk]cjassomselslooj
+vnlustrakmrdrkjwju[nnlzyowyjshralbkgo]jpwjwpehndfweegrnq
+hdiueeojljpcqrdkdfk[aseznfnjilqktdx]fubppvpqwksxeiwpm
+kjlbdmnhtzcagcpc[wybonbamfkugypt]gnjrawnjietdzhaf
+ufmoyzcmcxoqqpsg[hkdzmupftmazbrhul]mypsxfpshzcirslsq[rumehwhrobhrjstjd]tcdatsxbxwzxseileyd[iwyafcoefsrbynl]vedzteatonqliwgyj
+wtmyhvmsfoxphqrusjw[ozpswsyjxemnczhga]xeplvzvjzdgqspqjv
+wxyocgbulqhbzyekcln[dijevkhdfkfwmppnert]uuxxnhhkbmcegbtugap
+ijgtsfvyzgrzjonlq[bxxhmrfelsyxkyxrex]pimhbbzahddhwrhudyo
+ydjcoqvktwdjucx[riqvhezqqrwpizvn]pptmsnmubbjzwozxy[rbzbtfnnkeyuvjqhjhu]hnqyyqccouflfzmk
+dordtdxwtwahcjcb[gumvtsackxhwojebt]gdzjirhxegmrgishf[ueivwcnfptgagdj]kzqyptwgfykrxqsc
+yovgolzpfuxumuusnu[yzmsckgxuxbcfhpovdi]ydcgpjfgjgstljbkc[jnxpktvohnxeoett]wijsttknnkaxhyx
+xaajqzktqfslihurb[ssufsbsajcwrysbaweg]odddpcsenmcxilrkp
+lhkzyewhnntocluc[witlpxxovbpaeue]zokmfkrsuzblnubzq[qbubewghnsjcnbku]xicstwzulnzadvwgv
+pzuhirxrvaghkajqsg[edyrpkukyvidoqbabcu]vfqcnorzlzxypla
+xythdypgcqkccfv[zrbuwbhkohddkmbj]dbkreagpyprchmoktz[mehstplzokdjkasge]bypysrypwfqaupkwmad[ywkktyjruqqoexms]xdvcvnaeuiwdtcjcwg
+ebmymncvgrkqlusommh[wtkwqtpboedpdwaxoxv]iezxkyrvialjrev
+njvacohjeagiztos[afpmzgmxbvpzrkpikb]cxbsozlksnpvdxh
+wnpqmnhzhaclqkn[neseqjerkxmpddehzpv]buwoodytrhkaffpb[zpqzycmuzkevvyl]iqdqjuqnmddqdmktojn[ocbknhhzdyzcpzi]srfnmfblqrqzwtusu
+paxcryjinpwgadnzgdn[pedljgwehinbuvueies]wykembvekyliivgd[mjonnndjrswlfvlo]vuanwryeqmmovavhf[pouuyesundysqaxzciv]itixbjpcioinvfkh
+vmlgtgupmvpnwkh[cpuwomxbeionmrkx]zwjdjcytxjxbzltbp
+gxbttoltnwfholw[srbxnbzsdlwegml]ufeghhwivplxych[kesniuppshrvbic]ongllrrsyzxurhxc[ucssycrhethdlhyzd]jvhniomjxluggwtcv
+kpwrbbrusxmusejnwz[wbgriazubzccotlcdbh]dxnvqwslhdxbbufe[pobrzwumffnjxfghv]qplrnuqjguonrpmpv[xxwugdzbckpvhhr]vbrmirtrwprtqli
+mlonozngubrbmumjxb[vzvxodkubovdionkb]uidfhtqhxxsetsnvy[spdgbqevotzyzhtyy]mjvctpqrtpxrbqeckq
+wftjnmpwffdunhwr[nzepzikompkwgje]rahnwuphbxpmwmtwboe[wcwxzwqppyaeihnxrvi]wozbvaemreqcvsoafr
+lmfgslqcwpzvgxgmgty[ihjhsbvhdnsbkroszc]scwicucudbqrvtygt[iomkilvjwsofqnjqtd]amzyfxiaogrsdikrgye
+fcjsdhrxjiuugivwyk[kazerfwbmgeiituwksg]nalxpcedxoajytfpg[lldrwcgzwhmukpmsvot]yzsnbooxncfhjdqi
+ljjwrowxmpvvwvsit[lhezgrfdcwohtllany]huqtnutwnuamaahpwa[ezoifbtagkrzzjybsf]fehkkskjziztlravf
+qggqdwibskgshrkyc[bcqhsghufawaskgezjl]tikipezkvitcxtefpg[rwvlyjcgevwbikop]ygxubvtkciptbhi
+gmlqugapdwdohic[fbxygwjlnwqygmnxma]sgnfeprkyxrzspd
+gtokbujgojpkdtrvt[hxtbjjffjwxnpco]vaxogwcclwrodfdxlfp[hihtvdymxjotbfuyfr]muubeuzwzbdsydkkss
+rpqdqfjuutdfbaarkgb[nihwtvhhcmxwbgr]evovoyejllhtmpv[qvkudqduftuvccmeby]caeupguvwobwkccojl
+gxqxcqpcbqmscefvj[jodkjejtlvhhyrw]ciduukfamepbpemyol[uchoefnuqlolilidyp]rsjsqlxmjccoipqueq[qlxonqxtccxuwcnrizs]plzdntlmgcnrwawrxdm
+jvbbytsctqrwjrdr[xtqorzwdmhunrtevfb]qqxbyumulbmrsbhtx
+yoenmlwliczccpkolc[xsolpcnqbbkrani]tzczkjomtarfeqiq
+ogxowfxoqczptla[ayzmunzjrhsyyit]ckixtyzdkicgemx[hhubqmeqeenjuwuclx]zjhusfgvemklroia
+wtnnwdcuqnxduod[nugtcdeviqkajsqxgvh]ujsnisiydziqndzgtn
+eylerocwshewgerk[szefiobgoejulsas]jxmoefzlxhchgmspo
+nnwqedoiuhqmmbqewzx[ocxrbmgeqxsjeorfrde]agqexvigcnntkdck[vopzcxqdokfydsh]aajrpilxdhftxbprqn
+gieaqwfwcaktnyrak[ckstsfspnaxvkkecu]nywzcpsrpeypytm
+nlsmbjepecyztmhys[yseyspewhduijglnxs]nmttyybnzhxcbuvcm
+gzimfexrobypudb[fmrtikpcalnxzjco]qbxokzuhvtgzerkwgig[otsumbzbiecnrsfvgox]pnbeigikjxbnesh[ifovbpoycogawpmbtuj]qjoaetsrenrirpvb
+ybjllzyznkniidrl[txlisrbknkopgbgutv]rspeuydexyushei
+nnigaodunsopocfqf[fdkbcjzyxamtnwn]obloxevzqyrmswtc[jkuniykbwsytpivsh]ceuzwuogyqxferdic
+gyuypjyncazpjtbni[aietrzglhhgxscvnwvu]ccqmabbzdawwoctwywe[fassebimijhpenb]bwqtcbfdilruikksetv
+ldxvntffkplnjgt[lhwtwwfoyuoumxngqbp]eyoreivfgqwyfet[ylipomgffukvmjynvu]npvyofzmqlyboidqya
+tpnxkxbhphxzetonae[sugfadsgjpdwxup]jainzhhwfvgcljydo
+uzllwzqtwsmvdpoivdm[geidfnypnnnszjjgc]vtwpieaxgzxbslxld
+lzeizipamzynfflhuhz[qzwbfnjeulpgjjn]aapdqkjbpljvnvt[qhauhykubojxcoyuglc]tkflnjrdtjgwilk[aorfkrzlpuhgozwyhj]kmbwxqqwfjxawbj
+ivqhauvcbmbzijrl[lbsmgujvpbayaoy]kteathfvlzvbfzdgw[xkpwoqzbkbdgrsjzn]hnihhzpetldtahy[ocottuvddcefplijb]vfolexdinkkgmcdwfyc
+vqblvnbutgxixnfcwc[kphevjpgctxpkavh]riyfeqvpyvgckaselrb[ryoltaxliqsnlqdagr]shrflexwtlaivfow
+lreoiyjedxzdyhdnlde[levshlupfrkvdfdeav]ehfmfwbetbsduiudzr[uoxbgzrwlqkbkcwo]wjlwlixknhzeuyw
+abnhwwybagtjfrh[jaoeeifkdmlksncnjp]rulgazssxsmrrwe[hisspgixyvssxiumqtj]ohkxzqzkfnkvvgvrhgf
+drtqdxxqsrkujjyyb[jxitdcumljupwcmxx]kmzgykavruhbplvjjp[tjxjcibazngasivc]iuhgnmtzaozykgtedes[pproeupegraihkv]vuptfrfnrwopiczzkos
+kbkxcesohyjlgyynpwe[bkintqjcoqshvve]torkeaaagbkbxosriuc
+qklkbdielutwmtwkgz[dtruujvmzvmannceu]xmrwrcevkgapcagtuof[ebouhjnkpgmqairnh]trgbvkjhgjvqmceu
+xcoycanpxtathanw[xdfzqcekyrgixxcc]zpbmkgrykuvlldgzh[zltkqabodeywxhtyfkc]jzetstuqnplogpkjyx
+pirttznzezsktas[ogefjszaezeqipdhy]tfzgyjkulhtyuhnvf
+kxyvrtcpdqieyro[wnvmnmiobotxsispv]qyvdfrfhxkjuqwdtw[qolhrtzasgthtplihxg]gfjpittpnbsymvnotyj[znwgxnufnotguzwgwxd]rdmgzgfprxmavttnoz
+mubjhrjxqggcrus[ammffdekmguajiq]wvtsxaabnjzbekpx[thnwbdcskocytas]yimpbasvxqiylaqn[mrrzwqztanrkdqwvw]uvtlhtffzkcautuvm
+xbnvzradisweizc[ogurjxmpvzglqbgjlpc]hhujtmvfmcqqcukjvjp[wgkwvyjkwkufvventj]ehdkswmxyekfimbk[ovbdceenqmnrjeqvf]oqvujeqvjlplnzgi
+ggbrbreeteveahudoxy[wuvddvvvugkdows]ftzrwbghewsdfqaigt
+shelsgoglooyenhx[lylymuuhrtnflwww]muaexmsuihzdiyly
+slmxqaktxwfpfgrqv[ekjhbymdpfpiqvm]zybjhwobkrylohor[xflqcdxcgvqpzzdd]txshvtkbijbkbnsh
+bpocmihqoplucwnvyb[scxgrmfmuycybgura]yupkvewviiggoszst[suowhbqfktiboyik]hqqmqjvjczoxgeoqof
+elmexemdeoaajpjhu[kilercdwmwidrkpx]pvyefsmytxvaxuzsq[xyyhrtmwtglmcqik]spnsavadaexrodemqbq[wzzqmadwqbqbuvdxpmv]tuvloljoyhrqccyd
+rzngofliosgytzkunp[cyjzxhswcqeeqhmkjn]ymhsqcfuowylqtjrb[pwocjlxtfqsmelq]ezhrwjlzjtsdqorfsn[iekekpprqmwpdyl]aduyoxkvlkxejyjnqdz
+yhwdblscdqhpdbthaac[xadcyjrkldvjlntkxl]tcohssfmczzbomezqdr[wspvzvkctwmmhfujxm]fgxpvtsninxayplzlas[poflalkhzwwqwotgldo]mihbeaapilajefhlxs
+xgwckmpjphdwvzujv[svfqqafftzlgoifup]pezixwriwatkcez
+mfgtxxoygegwmitbzkt[qxivglwljmpsfzn]mfvhkhhddithgxaokf
+npkhgeapbthebsqk[bwoqhnxqzhkkwcm]alwpwqgoitrupvsz[yqvcrithxqfdgzux]adoiatxqsplvllzivzb[fcfyicpoiqaagrb]lummgoxyspqibxaq
+vikqemveklzlaqdxvev[tsqfmvvhysvdmlspknc]ejryfsjgnpmxcvks[ecwobztvirmokwcf]siwzbkgxlniwnmhzyhd
+ltlhegkfxhbndmfcpo[pmcjzvzmerxvsdo]dijdhpewjuwnatewmg[ylninmvyjhiqvicagy]cqrtolyldnbzfufnju
+mxsbpkqgsuhpvsrwzdl[dlrlhbdjvmrjwwthq]rqowmkoukgclzrfh[djjugwzxaaqtqavlo]gdzvdzibnckhkqb[xvfheuckvskmouv]uwrmeqlloqbtbfc
+emfplgnlzranlwxnk[ubuhxoejgoxfciarjtr]uzcfagjxdfnewbxxcb
+tlkmvlcqcbaqozlwn[lbupwjeefgtoovnrkkh]sdzgkexzxzcpdjgaid[qisspueisheejzkfxdi]inhxlauecmmkpenqqf
+fdtrgsgechhugwnidpi[dtwwiqlxgtadmnrtej]hdgoyjhlzdrcjzvl
+mtglmkersierfaishps[gilijizfqdzqihkbsd]ieqqthavsiqbkxvrmll[oxznuqiocyxjzymxm]epuxtetrnfrzrlqd[gooprerdkioisowygrb]zzowrurkwngpvvh
+tznoyelqlffpalatbs[cmtlsjviihyavtxz]lphzihbzjykeuhuzpg[xqfwolpahmfquhuh]rpqawvkxodxmvfhswz
+ybityzvtpsfbovx[yrggwxpkqjtzdvkr]gphdlfythiokoitpcjx[wmfvcehazqfxesy]utjcvxaybxcikaqgrx
+olqndwuwjvfqhxt[qfgqmmyeowawqckfh]ngkiagyxtqpdwbrwlm
+ukuozdurxxrvljkoi[eysjyckwyiyuopa]fconkkukvvmgnvyn[nwkqsifcwlzjurruho]ryslsdfmhgesmdf
+tlchnjfxtkubrlta[rsqsxplnikmqxsyhyoq]xcytyjjduledlzhuh[qudvljyfmodytzaw]hspqkfbkjtsvcwpl[ptfjakjrpvqcqcuhmf]inxwobxnnzfirnvgmmr
+gaviilzxljsozua[vmqvdrqoqnztbdmzstt]ufxaggbphqyxgnpcgzm[zglcpiqjhahiqcb]tsiqxcvrwvqistphkj[ebajnjrqotekcerg]kciocwshxzksmunx
+cgpgikxsukwvmwi[janhpuvmccsdahfk]rrmkjehchkefwnz[plbujeqhgjvljzkwg]ttwfjicxkkofysgob
+girkwjuugyxtovkjr[htizrvsispydidi]wqdtgvsfnuisigmalai
+ajbikjzwulcmizeoasw[pkkgiucjnrubiwqoll]gscdqocmpsuvfznqhah[rztusgyvsxaeqfmesh]rarydwrmadghrjtx
+hxpxckfcwipinrxk[morfsambyhipqzwl]wzgttlcuikfpvywm[cyebxypkgvxhope]dqazfmcgyppybetn
+nrisbenoupwrstlxy[uewucgmzkoyulfbt]bbvorytlrgqknqz[zwseofceynlohaooxzm]hfzyxxxfpjmubbjysld[tetgwcwvhctlndovx]jxflzwtuhkltaqmnuh
+nmyrirhwawjtgcgma[ilkcycomeqvcsuwmmq]iridicawanwkaeumbvz
+sunhpdrgrjztzvkxnl[mtztitboyfmtysqeqzl]unugkiwrweincocilom
+jhoqhwlkzccmtrlrs[tazackiqztlndogrmgz]zsfezvlpuzwmfwee[vcfxoionmgpezbalm]ujdbonopokhkgynmhp[pcdhdmwegmihhkh]dgjjkcyuetspltxpl
+siocivjbvwhltkyk[imgupkeeknlltlk]qxfcqnjbjtenubcjasr
+hswgnfwswhyngohhyvo[vamsrkcpvakzvbsvls]ehqrevmxiccgfsq[pffckymkoredwdpcmx]vjdjsrqxttbfjqf
+qemtumhnmgkgfzfzqho[wfluvctfqhrwznyzfsa]zriirahfdpleznfto[dugecvltxsfumxvjaah]lvudvknmsbudzxoadg
+mvrjzvsrconakgifqj[ehgbxxxhfqcigyhuyya]eqofdufzntqtsjukffc[hbzrfurkracnfeig]zmahsqiqbinnlhnvrz[qdajsuhymeavrqpdoy]nspfggpgnwnalzuk
+sejkhhjswpiqukaddwc[vwdsuuxtfaxqbrcne]njkrzolxoqpmmua
+fumcwsiexfoqklovype[bzxfxytncrmwtfrojv]bfvsmplxarmselz[nrnsymdrakyaqzwivoe]fpvboftrzvkemjgqt[akiqkjrmnvhucjcxk]ynityzhxqopnjpslhg
+msoqujlsilpcgchprz[gqdevmuryxipqcgfdwz]wxjkmuhjootmigfietn[flfcoqhksuopnwk]cewizdzpgetongprkb[pqizytyliwhnetg]uknrvmoahsbicmeg
+evyofxtcsyfbjtbml[wjqpsedellhzgmvk]emdpcwxuuaccubksbqb[krehpfhgyibfxepo]imvfvflnagwulpcp[cldtyjrcehkgtfyxnws]gaicllkdzufdmja
+plinmvdjkaswskiw[zejltttlwtcetjb]uqkwaifdtedvcmiqcs[smlzeqfmbhssmvvmvh]lgypwtxchfxksqgmeb[fqygohnnxmmvazctrl]rwbjopgpdkeejeb
+hgxczafqluesrmrtuc[jkowxyxlufhgbmk]zbiycjiafsngeoz[mltnmcbnsrmdjini]wtokbcbelvzibjncpat[dmjqentqrspifbnind]drpbucndawosqjk
+hqaysnyyigyfvzsm[vrqjwqmhiywsbblfrq]wseacbmleqwlaci[eisrrgcmewmlsqkremg]hfqkdkghomzddiaeq
+qrcyyzpfuupvipsuor[ujvnwghyvsujblbiwy]uofftaesrxvghupknr[divaemcywwpnkeejjo]dmgdiifbkggxpzmfy
+qjttccgwnqwdehsoz[dfbrkdapobhqvzom]hqtnzkmtiunvomn
+irxyxnmdlzgxmpg[ityfjgihvzrylygz]qollizryghyxjglce
+bnibapdblbaoehfbvin[kmummoqopswsmvtgiz]isaumuoiybqckfvkhx
+waimkuqinxbmazab[foxenwzsxkkupwo]yjelgjycvabztzb
+exxvbdzpyswekjnfmef[tjmrddaazxyynamc]nambmdtnmfhtkiyqqct[patbobzwiwlidazpoc]nzbneeilwcjqnxqwh
+obtckokgcgcwbtyww[gxpfdpaggfbadjvdo]trethfifqwrfexv[uiucztyublzgcky]msapdqrbpbwxkoeuidi
+yfhewfkbdwvgwvmhqbd[fqginmtqmkcubfvci]aidxbpzcktshamejexi
+jjjryxfwjklxrkhhcxu[gwwrmyzrpjmjtmfl]fvjaxkdviibxaodo[csagiwfbhogtnpixzc]miorozrdmimmefh
+tzpxkatetacnqzombnn[bwzhrlkgwcolxczvcbg]rplchqjvjthsortjqb[oyqjdlyeyqhqtrfbfh]munhcovgrhuwhvkjzja
+slrtmwlceytivwzb[xapqxilotekdngaekz]rzohiqiljdhennylmk[whtwrgrfpxkgqrs]rtlehyggcuplhrfwsvs
+vjregfcqrdxbfntljq[xpfnzsjsmphfbppf]kwfjfcrvygtqwtdgh
+mnrnbytuhhsxrzgz[nzdxekogduhxbpipobg]ydgjseiypncodnm[oylueeldnmgcwmqhq]svqllgtwmhshzqaxf
+xhcxtoxuqumfxatsl[qlkqdcziwtbclcph]ysfpbfueqmlluib[jjvxhqopyhgxgvb]flovcgpyjyubpbdmp
+nvpcfbzmykatqdpgpv[eywcemzcjnlhwhfbjv]gcnnnrxczlzbtufuie
+rhikymyqgbqbwgw[eeitheuwdamcndqibp]aiikebogsqexfbob[tcsuzyilztxrrqa]wutfkolihzuhbvptoqn
+kokyhjebbwniohsgrbr[ggsocxmupmielega]esekvzvbajssesin[ipwqyvkwospydzpmk]byhqabwpjuihcpgipx
+pizgcsuyqldtehjc[utwlsnwndcjqnndpppe]qxzxhkayzcicvstxiws[tjqhoiifvxdzdkigtb]zjquhrplvjxruwjpyl
+oadivwkprasfyitu[yygivqpjckczybxrq]bezhtnyscekflpszt[eqvoapqpfnmwddehqbe]mnkqjstlvogsipe[vmcrcaytblgxyarcrx]nwvjubzclcaxtdmgl
+gimpphsdpyklrcsbk[qphbkjzijutqysed]fpokchopspibqiyyb[owxliqxhpvjjqjzvs]ttjeutzqspjqklxsx[nvxybvsgtxxwagkvg]pximctvjdqxbodwbid
+xmgqacsovxksrfnypy[jjybvmwissplkcttnp]ksakyoqvswnbrezeze
+xoxquvrpgiiopvepjd[xakbfdhgtdrxixz]uuidqssmeiardumqppv[ewdkbrnwbodzzyb]kuyvmhqxititvvmf
+ujuuypsguepvtqiurq[psgjujogkcbqrtrr]ckjvvhzookepzzwyuye
+lwnhrcbjrjqarzdx[jezkqlffqqbioajjbnl]zssjjsdouwbegdbnxx
+jghqoqlqghfqdfh[jswcksaiwouxhnssqin]kqcasjkrnihqmenbqbh[mgpmbwkzuduzsmnjb]dxsvhizedmabyjo[rbupdqkkgeihkywitk]pcgvmkrlpkbqfhune
+eopvqwwlvntomltpv[bwkbunwyjojuxoteyua]arbceqrmsflnytkl
+rcgjbumerakfnebou[qimexcxydncncunkhv]frixowswdjgqndoos[zkjdmnsofgvagtnlyph]efpdksfvricswsrn[vxscblhqnzquxmxw]dxnstwznvmwyawith
+zjddycxtbubaliviw[cwmjgucnnrbsybtpxu]zhmadkawbwtdlnjwb[qovxqaebehomoacpxyw]qctfbtyvbabebup[bwqjuutjmbgfdznqfa]jzitebxzsshsmoge
+hogrxyrrvjayayny[kdweaxnjncgvxhpud]orhfjkslldcjiokooob
+jdduztuhjzvbooejd[mcudzrhxonujxksbibe]ybhfelrayyxuuhuwmyx[lgshxdlzxbzcwhuru]zdkvnjkyhausdby
+xsuzxmrqkqtxmchz[dmgddhaltnlpfzkf]dexcfjfqdnajuzccluj
+ezpxycrcxzxycllpyc[stdgybwrxfzewkqqvzx]sxivpekfrrrqlfhg[nolxlfvwwqvkhou]psuyhkfiyohkogwfmt[zxwiqmslanvyrquhqa]fereljocexswrvs
+aeogravcbprgitmqedh[yjqbxvjwrcrbyneghi]lugbamrjgzqaixjxpa[zpvvfxavievwanxkedz]zksdwfkwtrmtaoy
+mvchajtfbplmslzxhk[pmkjinpckdvwjliz]lwigecrikkyoijkeow
+fnwfspmlakldfdhc[ujbeoudcbtqjmjy]tgitkdutjdhlrkwbts[upqsuxqtzrmwgmbjqyx]ayaivsgiqcuzizeau[fiqnymhyqjapvri]eioouxtbfwduighy
+dcuvsezsqwjnsvlqzah[jjzbyxctqhdxfuqer]wztjqxgjynojjur[zkiosthyfrroydaykyc]ocihuyyzvwdoixygzk[psaghlhtqoptvsldbdi]zxqwrhusqligxnoa
+tjzqnocojjzktgk[omlfecncaondrqrvwyw]dxwuwvsdiehvzqmafo[ihbhwnmxkbkypmum]enkexramnrjguwuxq
+ftdnelzrwzvxobrhjtb[kwnjqdhwztogpvvt]frxznutubezaczhwucd
+wtvnfoqoqvuioaotdqv[qwzmcsqjvpkrudkdu]vdcgzytjsihjytaunui[vxnbnlwvtribvbzv]lclrytcczbraubnr[fptsjqwofyngtnurf]izhrnmwjxwvsdcfai
+nqmhpgsurlnnjikyotm[nxxdysiylpgivpuc]uofofpqgcbojfofja[gmborbfjvlfokmkjlx]yptrgkpiarzgsgl
+polwihnjvtlojae[iyjbafwjoxqcjbwn]ecidvqragdcuotbw[ununcsfdoxstecbass]knnitckftuczdpblih[wylrqjxehihxfvzjn]lpjuibfkwrcmcijkho
+gsvfujdbedschya[owwscbzhfkkymsfy]bbxedxnzigfiogb[sebiwzxbshqohku]wqmnnhmldplmhwnngu
+cvgevjryjbmodqfw[jskismdjblbsjgmhilp]xhjlblnepxqayxpw[pmifrcxnxmadetumwm]lvjmmbceghwqdmk
+jgssirdflqhglgopgx[epcwzeqqkidejdrw]mjnozbbmubmqooiqr[wacqyepsgljjipi]vowguayfwcghbghhoyp
+tfkqxobejvvmglhqrgw[ddleaoforgpypavf]flnaiggwuxdbldb[rqqrjlzosctaouurtsr]bduvfxlomgfdwhxj
+iwhaxbggngkgdfi[xklwprhyorwyfcyo]lbrfcbprxedylzpfjk
+ixorpegqzuxidsasn[pwuwcywpavudpbkmdrk]stfjklbehmjdobcr[ziugachuezezjsw]dzwuijfiexsbbxjcga
+lcstmefgsfxelap[iaroxcldkoxjprhpni]erzoueqtwtyftuvz
+gsnvneyjuacyhipd[aglvnvpawajzbbgk]ptnrpilavksgzjyyo
+frxawoaynynrnxzk[agbtdjypjtpqskh]ljshzsnnynqotgog[ckariglbjzvbcedrap]sqdkygpetxuwfnk
+nuxleplcklptuce[fxsyqwfblquzwqjw]ndnvzriqecbqphdoc[pmvfypuinsxgglg]vcgzvoddzudwrapmyh[laengialdtihgzitt]ktbypjipfpnczyqw
+snghsdifwlabsbpzw[xgnrqjnhwdqkbhowzaz]cygljjwohwpzvxuaw
+hhxorrjxjnhcavt[lkeigkktbiaquqqh]ernbnsmtunqyccft[jiespyeonlsjliwt]vbhzvdhvvgsdgijg[lkxvfabwpujiaeaidj]dkilxjpizbzeqxkzt
+ukgapmfifvftpexnr[jydugqlbqyhvbsmoxd]kwvttiyqdmyaxidts[lqfofueuycoihkxig]vqbdiqazwnqetguq[fxhgbqqsilfcaflj]oissblxkisbkmolspwp
+hanudfleaqpnnykwfu[kllfsqanmahiwkqz]mkyztkpwilxirukacz[vnwdxbzbjrcvmmbx]lsjlgrnzdilnkxp[hhepketmdumjgjjsu]zrgaagprkrmgggpk
+qcaodhkekjwrjeu[bvbkikapkhneodeaqox]xxshbrfdxgvyabbuj[nnyshhdaogsermyisk]ieutdajlitenkmoh
+ryfcblckaejcahgy[kymhoizkyffsxybzdta]olmhiudvbcfbkjb
+jryuwyprwczmcczi[vtijzvfbpssohcdgv]qizkalsooznmasljh[sdvwxkvydoikgjtomxh]ixzqpazdakfwczn[tyjorxvairghzrqi]aunhzwxnkjqryibre
+mlcynvuzmmcgoqkft[fkeqzbjanvjoieooecy]muvosxtjytdkhuh[gsdxscdehocmajsnhn]kvqitwpizpjwzmeb[kpnyyoozocsxurfl]obfvxcgoavxoiyy
+tunaljqogcgofeh[ivxhcnvflsbnmktk]akwwtuwpdpbnesmrklw
+hicudrdjoglrnongron[mxaxjxojmjgutxg]tbetamqqcheyjbpa[itozzzbcpnyerpth]brqcvektqfaxazdfivl
+pdyuonakwvugssuduom[swhnhhzcbkrrpovuomy]ecfconssgftuhtwswfd[mjdgnwmncbjoxlinm]oklhmwptexymbgyfdaa
+hcxljuahgmiolty[kulhszpqyvsurma]xwknankkjfsieauadw[anajqqpwdkodeaagy]iupvtabiqsykmohiisl
+qruhviuomiixcoarv[idffbgdhamsshlinl]ygsinapdnmzvgit[xinvdhbqhbvqrjx]zdamlvlunjkkhof
+zyeynxvzdmmiybab[vhgjepcwqjbolwnft]aopzcryhnpswgmds[yynbcrcgegnrpsk]munxtddzxyvzwwcosq[igdwjifdopnhwzv]oyebiutkmraayzr
+onkgxvprjaynfipxeum[jjwmjcepwxbleahq]ofvhiwoyxmfnjbn
+jdwjapulavrgiviora[vnwjfwpsfcdkhamtg]jqcgsuleganytwsm[qajmdsarjnocjpq]lxpalpkeehxjdslu
+mzyzoemluwoovah[bydwxptnmzqxdqfgdgk]hekhqzpgilidwvpey[ouhnrujqyhnlilh]qjarvqynycolakyiu[wzeffbptmwixrmr]bowqsnjgurjpkuc
+jawvxlepzelbjymcke[atwksupwtnjjnkwe]xqqcmguandaqptp[yqsfhnssllituzzwa]xbgaqeuqtnclehgr
+xumjolgnaowjdoq[obqxrncwytcvrsa]tivvsxdntkrivblx[nfiworqsxjvwyki]nxnpoipcjqeeukx
+svkoyidvkhkvock[htgrjltotuunrwka]uqyezwkltzsjtaysa[tqaaskeswcllblpnozj]yizblbkqgvblvqghvk
+lfqasqaubbgirmw[xxpjcwlwjsklklgyrk]fwckfwwekdgcesswh[xkcxlxtanadezjpva]naodeooepetabkh
+mtbhzeufmgeskqsp[deibjhufkntahso]oxebgcgzvpudozi
+epuzizxnxpmgjkabqfb[fmteazugbgjgozgsmhl]conlsruhnwdekaxf[zimnpzazgotaghhaq]gmkwnkivobskmeafcck
+epbvuluuhaazalp[dtsthsijbzgbvwzwgpo]blfatalfityajcpmyc[bbypikyeizyfntdt]tcnzahhiwutntyt
+vailqzvutssuxjy[llxrpxlpcojwmab]kqpqrpogogkpefajeuj[afzpfhjmpnestctyqz]mdggrbuuglbmweujgxl[qhheeepqrcbdfhlxoo]lxvrdwpugjperwt
+roreocnumcerxnrhr[ricaoyebqjpgzazssc]xzuqnzfgbrcvfnmpcgs
+uludakjsmsamkpmy[ropmbbvjvupftps]swngrcigiqzdkie[hjhbsazzxdxrseczxyi]pjymgjgdksaalxbav
+ftvggoxgdteaxbrq[tifvvmwnraoiprgs]xopjvpddfjnbmcuxpu
+buzursiffpqcwnlsl[plvkitdlxiyiotdk]anlvhgektgbpslsiai[gdgwwvjcdnywwguf]bydbjfxclhxyfgruke
+indbphvhghzxsuy[izgrijghgwhcooc]gkaqbcpwwiyfwmv[xxlzhbqmxquoawq]gbazvlthqbviupchz
+qofufmkbljfygwxym[egvtczslvioufuzsyk]uscakosnjpjbcrggach[gnyghyvmgirmwolh]rotkdpwevcsipnxjokp
+jwaktcuuojllglwmr[dfntqdtznawzmzgwbj]gjykvnqmtzelkaus[eghpxrcnnhijhev]osfvouazhsijprtbtnm
+rqrtzzgqsnzzfntl[mrleyuyknyxyjhoibf]mwxfdxpeiyuhjcbdyi
+xgqwglrrdtupbjlmy[ayygnszmebgddghqg]hslqxsvijohmvklknkz
+sfqhncgimlzgjqs[vsudwekhrjuwjgig]fwkpceyrznigiwq
+bellebgmjpcruwv[njhctgeptjieourukf]sgybshminsxktqlfxr
+mpwnzwvblaseycnljze[qhrfygccokretvo]ydomrtoamoecceekrr[lgslvkhwnmsovxvhqhs]cbyuvbrusqqpvkmlhm[wrvxwjyyzsvxvxwpdq]amynjoncmemftlnqa
+iniemtnmqwdmxvpicqn[drdrbflsylzhzltq]orjcjdsbzijkfwhdhz[mrfovzdsugacpyvlaj]azjikxjuaszxpapss
+ynnxsnsrjdaqbbaa[lyifxbzcyzenzpzzulj]xejnjfbuykeojbeatvf[uhpeylmwgllqxtj]hirppxrtcuybulsuek[tzbdcyvsbmqtrzbakxj]kzpsdszfyuvgbtlksus
+ujrrrtdxpyhlpcyxs[molsrkbbxoexpbqhnhx]aesumqacmujuchpxv[jlwaktyumxuiyvt]mmwjujsvuvxsxxmsfr
+uehksybnnztmczl[suqgywouppzavyoi]zbndcbjuexdgscb[cliuxzpullifofbhgy]kupndcjvxqiavpk[hqgafivwddbbepkvjj]lrqalseezuhjjbkese
+djidmbcuqbjpfolm[cbbrttiwmetodejw]ghgnojuvsogrchwfp[qpikwfkqkfphshxbmxm]gsinzrkbzacyutlxso
+nvvjtnsnglopvcmna[opnjujeqmpgipfm]rudoacagklnjajjye[fqrtapichjqkhhf]zpkowfxfuoecvzq[juwjiqcolafbxzsw]fogkbzmrovqvbxbxeb
+ixciqkqggdxskbso[wkjptmoonusnkzyadmx]tvbhebhhaqhopjbjqht
+gepgaafxcogfkyecgs[jdqmpkhjkqefzkwxglq]zfpkqukaelflilmzwph[fndatrnmtrwgbwpj]bndevgsiouveums[fqxvkjthzmyryobt]ywgqodizmhsymako
+gjlyyrwgrugaulnj[zwsmlmyahggpvugef]ppqrrbxasqowhwz[ngwudjmonpelxhubwnj]ucfcaicagnbvlboiwky
+lfckmicaonarlbnu[qnigowwaziwjlmf]ihypnqqozcilwpm
+xmtcgkcyfjppjwaa[jlzhrxmfyfjfmadttpo]vucnncbadihuewzn
+sviknjiphswrawyskzz[vlsdhjduekvalqgwy]qlvefwhnwmxrzgxq[dwnapnjsuiowoqjts]pnepuekbrlbsswijr
+fknvwkusyvzledp[qzplkidoxmvxrxcfs]jxdhirqylkerndfd[vlqmngoqxsbmljcle]rtwemwvqkpfwfri
+cujhxofpcjpskrgn[jxxgrxhgnutgsusruvy]dewdqleqewbqftd[nfjzhgvvqummwzhyd]yrccepfnpbehqei
+dmfygizbsbrtgnzam[xdnnacheufcqahvx]rxtljkenkwxgkhrwos[xnxicyqemngzgjp]slcfzksterjpmiz[okdqdoipoqwcoyfyamu]cmoedniphnfddoywbne
+oafdrqypmxjzxbxutj[yzlsdipaswmgyay]xwllqynhfregxpwc[tjgxnibylfayarir]phswgvlkkfjjetrhdl[pkcutagssxligtwbd]xrvonaibaytcqnhgc
+ivalpefzoxwoqycavx[wnrysytaesivblx]dblopqsupplgoom[vxtobrfntcvixltcb]kzktacrarmtwuhkcoin[eviwodeyddmsfkvhzue]drtrnlgrndrxgcp
+aygkprnkwdzydlmww[firwrjxyrnqlvycccg]lcqurfdlcrvbzctz[cxzfxjybrqysasrppqr]domoafryutthljppcg
+uowwwiqusrqkpamdm[cppbcnmcxpecyoey]ndmdrcadjoukusxjfl
+mueapqgbxuyuttzaw[eojhbogjbfdbhyqjp]sxsjeclolvcjexxvxij[zugkiortijshaocu]mfayspauxoxdwkbj
+swusnwjcduzzhsjhykq[jhweoafdbntsmxcg]fwqrvlhlltfeygpcnyi[wzibgavydimypgdao]ocomuevbncyimhlbppq
+vzatvkicsxcmgcx[lembxneuonlldqupk]svfxiuungebjjgfre[ijwzrpepzkmvdwrjck]bhjiggmcfirhzyjljkd
+nlauzkixeqoldqwd[dwvmcwkqnwjlzqscj]hnnwnarbtuijzys[umpmhpnsrbypmpulhf]nijrnkqfvbyjfvgseaw
+gefcvkqyyecmnorr[unfzknqltdwwrejeix]quyfoemcjnbrarjuowo[znhhaogjluucobyvq]nozfnuqwkqrcbtwujxt
+keerveohuokinft[vtganysszjzosaco]ufsxvtiyupbeddibmt[wrlgimiwaspamrdp]wdjcaxuqikgauum[jpwldupwbuuufjnx]tumqrmftbkrmohls
+rtgtdqksqxgvgxadbjy[uclopjtrzpccvdpjq]hiqaonacbzvgvigg[dirbsktzndttpzmtznz]laimumxqrcnhoitaokp
+iqthbpkfocdhsvzje[jbxkmkvmrbnqjwlp]kycbbizaasoayspojv[iojspytksdfugqsqhvf]dlkjrsotrfugfft[zuzflpijcwgbioujw]tgyhlfclaxcsjnavdkh
+lmekqqiuknygtdo[ramnjnqzfihksfpoqsv]jhhvgphkjifxgap[dmpwxrhmhkwfsfgtn]mfzdjfhxmkrascd
+fywgfyehgheiqhbayw[ntuqlvjvldeyzokdepc]jrqpaluvezoujks[ijkurhccihukzuis]cljvkxweuvldevt
+udnphzgdlussuatatj[phfqqkmuhvlehlo]cyvspnwlrcmatbwoua
+lozehtimrottjudo[krocuifdrqwhsmm]uhauuuzfssimtfl[lyshrfrnvlueierymi]xogtepsflxfwcpau[nurlztguypvwjvoldsn]yxwnuqtvewgmlbfj
+qkioxzfrxxwbcddg[iecvjowpxnrevqrhl]qxpciafqndxasahsvoo[adfpiuoapzqsasajd]lduzndmefgsvzzdpmcg
+klfxwvnampkmmqjmfc[pcaeswcdleyweirmxpv]jnwkgamdjeoakjcnuep[hjwzdndjlvqfzkarwk]ewwgtcnyjuczgmyif[eaaehzgwbkdfbcgbz]eeioocxrjsulyuj
+eptlgbashiewmonaaal[ohtsrundioavfrouii]aydjhcanascnanbfzvd
+ikhfkzncdqyitenbg[ldqqsrhumdmiraztslw]aydpjfypxqllkevec[aponlfgxnzgcaddwt]yxlzqyhbilnsgjen[dwdrsgergyrzumtlpvd]srlqivkdhbdbevnq
+xpjwxwgiyzqfwajto[msisxrvzebbtxiv]zkuujbuznilsymuuxq
+vkmqsygowhcqzdxlslt[fnaztaplxaputnm]ykkslsosxwczlrwbpmc[orlhcrbdjuujhaj]odtfvozkxuwqdpsm
+qqxdpjpmujaveczctbz[gulkmdfhbgvyxuyd]jtxafmzqwqxauaxjt[jgfnrwhgdtkwdfgt]unidfciwdvpazpgfa
+lfcczmpjpqgqonvcvb[iflurylkaiuflxp]dbepqquyeagxsmrhbwr[vjjohmujkozstni]suvejhnfwknjusxgxwr[wkjnfmxxzwulujmw]qyawlzkyazbwftlw
+uwmrxdaxrlsvujdjrm[dmdnqcmdmnmnhhwicwk]uowycyvqvjwrjgtpfqu
+zbxlifyzwnwujvs[pyyyjxylpmpwgbh]iutvnonqqqtbxisfopf[qevehnvgqgkyfuqr]mqrcuibiihlwdrzd
+rxlnsbgsuofdjgifrnu[eougczwqhpbyqjpo]rokdsivylwcqepdyhfp
+yhzwpokjwnqbwtsxuh[ekjrlmzyakgkzlemnxp]gbktdprzdyhcifmigxt
+ewjfrgfxriqmbvczdtw[wlbdrngfgnwdvkt]vxgbaaggmwndxlms[vupgwxfgfpxtnen]kfeekrdualqqnril
+awkkejmtiopfrqfasgn[alciuobkmtbxngulv]qlowmadlrlapsquuhw[hhtlyfkusvlwunbbjod]seacetmksrrodjqdffk[aunntgaemlyoabfgpf]yrlrzbdjfejbmskdtrz
+uegpnmuaxvvpcsuzi[pxcbpsgaecuqyhvov]oiyjoyraxkymelqg
+ffpelsnrffyfzzfdb[ymtulkndbgguyivf]uauzvyseztbkdvxow
+omolchhfvuuzzbodx[zhvhxrqwbdhfwlnn]wyyrsjfjsfyafjfpoe
+puihcjkezjyjjfl[cornhtqjyqlebvqyl]dbemzlxolqxpzoi[qeihkchqoewcabbwog]rlfloutfwlcjywygd[glqjydslofkcstjxd]oxcycaaadlnxfkl
+hbxhlyelfyszkzyc[cdxcsyocdiifefpytl]wxefesokgwwvcrp
+vdqcqggyjstyefs[yiskvcmdlbyuwzdom]cwmntthjhfyzlus[dpoubuwkbwrkpfvlgf]zryvvtowakcyclcg
+kcpbllbamycbuynia[duyxsbzyzibjwejygq]mszplxmgtkqorlklg[kkbpzdcqtwkteqfpm]nvgoipyzmaxtizqkxk[dkjpvseaxvosmsh]ourguqaabxzzovsn
+ovojqexhiiwdqunfvpy[ijzonrwpmtbftrqgs]zkmuxgcckijagmj[oygvczrrilsowmxrcwq]jpwamodaidqrzmal[yglvklzzljuqykuxte]cifhyowckekufubnmu
+hqsemgdtjpiikngtrd[bqryvzqcejlkziqbeg]gycysifcawyjyeu
+tgdpvbxtvxlyqvouu[xqefdugumgqctwvihz]yxymyatxjpknmpb
+mghmbjssqzjlzlg[kilmyfmenoqjnmwg]hzuujufmwyperhvdl
+ieqarqlveeycgazb[azjmtbkbixtazbcv]xroiknhtlbefpgh[xnhgnpluemfqqkxg]okbkpxswfoikufwzazc
+phtjaokeiocojxb[snjwozbjnpwckhr]cjwsbiopkgqjjaz[rxkobmvupvjvobifvx]edubeedqalxklpb[nyfuqcxwtynmofmfg]zwdaaonmcoczxvfr
+fddrwtloipcoigpruvm[nmnolrurottdlkhfwzy]dzztqofiytbyhhzwsy[ovdmmhigvmzuuji]jirdnbaefkkdpgi[orlijsvzupzadsvi]mnmwussnnikjigkkr
+gspafobrohvirgeaxdq[igehxnlnjtwfcuc]aeibhshuiyekgcymyty[xhoayxpksnfvdzjwh]ktkoteqwnsouvwcftyu[eqfnhshsnakdnxwonzz]wwfzvzaupuirropirue
+bpyvotpfgrefzidpn[pyvnycicdpcutcayrv]twcjgpggepbtnute[fdumsgxervdixwv]ydccutccndbxxfjrxh
+okzxxrtdrfviychsj[ymguzlptohblvsj]ofquaojgbjuxhkrm[ingfugdcfpjtyoj]xwplthdujgksrosmv
+jbwwuuqkuwrrzxmuwh[hxqptnyqwndsntckqex]mgmaotcyybmuihu
+rojskmdnydeouqz[cdmuavkcabowcozhe]znwaohorcanpbyhjii[gkpcxjhxnhligil]qbzwurxyzdakgsnwvh[ettfivzqkrrenpxmsj]dfbcrgpjbivcpcpcoqr
+iztjhisgpskdgwxwfdq[avnaibsrkfmlavnyuce]innbnunmtkplvdhq[lxexsvmjqjzpswjyrju]adcnelughetzceb[cmafkyaouzplrel]iqhabfxgwxdrqojp
+mcxijhkidamijcggv[buvpvujncpcwxvvt]xortwrcnebozerevim[ylisqiexudovelmczm]sophxrbvffupehspu
+tdbjhtyvoiflmgdt[lbwyayxikccooiw]rbhpfinzxpaayibe[twvandevzmehmiiot]npuymvedotdclzovsq
+jtfyyycvwwukxvfbpq[acoshjowooeituuy]xicaiqqcrtpkwtu[lnnokqhsagantfsyl]kchtjwkppjyxtwjh
+vfzsxxvmxhdpjrlm[wpzhdncopnapfijmlcr]lqhsravxxgptgjs[wwyuluteptkhznh]tthklcbbtbvhauug[nfplnscrhldnwtdyzqe]ockiyqmpnksijbf
+dlnpcnognelscok[ibbeqsbqltfskgcgqb]htrpytqxmucqlnane[vtltdgsfjrwohtc]sbykausqnffmqkv
+kxnaikbdqxcponrlivi[pxltpufeegjrawwanax]apuwyiawecyuqhgjc[vtenugjmwgebqzdt]jpstgvxeivppyaqwdbh
+bjnvrqvazthxmzqe[vhhndcvzvvtdjpu]xvyoyqrjtbnonsstb
+rglwwateiuipzihomf[rvlceqfsjsdeajp]umwquiuviykogvs[nyxtxtkhyplexemcvjk]kgqhfvraxxybvapgs
+jfhopiiqntjmgdsj[lrijxadhlagitvp]uiwltkpdmqcvklmj[celhtexfpelokeyl]jucghcilfpxmuhsxlj[lnzbuosgycapkcujcsq]uipyywsuzrkxcxma
+zbczjtvnmirbqohanm[bssrqrthbgrtjlfdeyh]sajloorydqhdlpfx[twqasimfthlutzbvc]xdyjyaewqxknvdz[exppwmacezbuavlhe]cldjcsqujgldchzigys
+xvhlvnfixnvekmxfzr[mnmpxowwvahbtuiltn]facqroxwyyelgbeupk[liawlvgwyfizmas]yxgndlsxircarikrb
+yjisbltbmhloiojwzy[uiqmflerfnevkzvnfmy]kecwgynuudxejjvth[joscliommzmbkqcqa]pwypdesmkawikue
+hsiwncahwnipmmjwspf[icngtprynzjdnsgmh]htclvcobutyrczggpic[saypixczichbjeve]jmpwkwrnvhjcpglrul
+aagdbakqyfriiolq[cjlhszgovtyhykgikl]excahvgfswdnpezh[typkmvlnkgjkmherbx]zuhrtvvwvcvhuzalde
+qdunnnxbbpkljlj[opuhjxcwbtvnyzd]gqsaxqcmgmnagnim[sbbkqokcljlriqvwlj]vvgscumyxkrpmyrwz
+drtuyztubzingcdvpy[ichljckfcgomhcfah]wpkgosokfjvzabii[gufmzunfeecjsbgg]pbtuedlavgbxdqq[vbbhreveuzdzbjygt]kglhdfghynsujkvnug
+iccedgowicdllievwww[jrxauxixbmexkgfvvz]fysjaucelduzrxp[kubsdwfsoejcskemvl]wszejdloyalatpjq
+oujirnbrjgnlqaksps[lphfkzalpspyhuxf]kuscphbgysuwhwyhot
+vwpxodocwmfhzkhyf[srbxugrfpcalangfdj]bopxssvinpngkthdqyw[vkkyaqsjhizvounptrb]iiwhyeuatcqnojoidrn[xiuphhwusooiewosd]gggtfejwtpburzqyr
+ysoiymdfphxmwlmlbm[nudcbwwqdfabqxc]adsnqcsxmpxwrhdwp[kullnmgtapmantsqr]ykmzsizznrmofzmy[cxnrxafdhfprlarkd]pffnyurmoaxrpvd
+pouuuowcgcsgvuznt[wvbnsxurcwwxhkpdg]oncpjgpynhzxyvi
+vlyfxbogdlwgzbuy[bkgdkemihxctcppam]ckevcpesenqjadifwz[smxfhxaidkueomhxyc]qwokiceophbpdyjovvy[tmzeqvagzhvviakrh]hionrvofdutctqdb
+upsxlrmcnqiikdzhlcy[hehttqfmtzwgrmxfo]irippmddtqadjgytw[zkxutgforgpenbx]coziqjvbhjetosrtek
+oewwtzgqsoedpidbn[rjmmegjghjfposhp]tgddsmuqxnvfpopcg[iwwvjgzvbmkhcmlhm]teygdquxhyhkrtiyjse[sknqnxtiutqtavvf]bcqiwxuliuhpeto
+pdejprrltzgdddqhod[jgwgzdgvdopqgknwbqt]jaxeauvefzuvvgxlid[fpahofmhzzirjuw]enbiyknxsjhuxzx[bicvtjwkkhelcgebywj]ldvpqmpgzvihjkejl
+oazlgrzhvtekbje[rcnbajbbtikrfapsnuh]gtddpwaqibjnpmfhp[zxarpxagmnzespusnm]svtfacsjwezouqnyfa[ujbucyylrrvuijybde]bgumlrbysgompdeo
+eyescsulrvrxyngf[wpzojptmtmqywwvdz]oicscctycvplkhsb
+ecwhdlfufxxytti[tjpmriwkymqufurtux]kvcdcihmfxydmxb
+tmlzauuiszcwimcvli[vnvyjnebqbpoaotvcre]eupqvhojcmoweveps[cmjkegzrkspdwmdyuo]rjcxvzssaopikbi
+wmgjjrccewrspnkcdg[kqagiunuhskruqpsmql]histajgekuklfzmu[caldsteatfkgwqogjb]hwweftyntccwfmw
+lvwovmvymkxwcvuvuov[sxedhxpfwkndxgtwn]jnpctsvjkqsybbfy[coophwmyxhbhjjzvf]applfppvbrejnvz[ipytgyblyicrnet]ogktxhleyrrhjwqqt
+xuiednrxcdyejmgcsg[mlmhqtzingaekkj]xmvjiydsuffmteb
+zyweldtmlathqbd[zsskrkndiopdfqocigx]mpflfwtncuwjcnnvhf
+chmlgfccuyimavif[kpgcuavqzwvekmahgxu]zrrkiipozbierayt[ooxqyjdkmmuaonht]qhifgfwmnavhlgnz[cnbosuyqrbqiuye]ksvsrroennhnxup
+agxsrnpuwtpthaijwgi[fhyxwctpsxqkkypdfie]craulpcmyeifxluxu[yypagmcumxjcraxnvpz]zdgmbgteapcjwwzaive[rowspqgmcvqudjxm]qydbkwdeuraznvzzno
+rhlhblmxdccpvudu[jhbawwnkolhlfssiw]rahopqrzbhdivhkrl[sdyjjbmlxlpcfabw]olocfasvuwqfxbbynn
+xzbhnrzyvfvbrodi[kikpaqjccdhwfmjps]tqeliktvbjjnbpxwtq[jqjvumyqcjodqippp]ufaxyqyvdhjxccwbsfe[pxiqyqpvccnocmbinr]fqjralzkdemnowygd
+lvbihonzfclpqyijtk[tzokuoeriylwwjahfud]vqbyrpbchllhsmeodxl[ktbdicmiebbpuxnyi]guxcypoxyjhshqgshs
+nnmyoxtukxhrsgt[ecovrntpmkcaekonw]ncfzdxdlawbwtxqpkik[fkkkkxidubuatpihcnc]wqxmtvyakouvijt[tjvyhgempiufanh]bcibhdmbmbmmbyyi
+jjyiltmpfvlkclthbz[icijdepekvlffegr]xnmbqmdiaskvieeudt[clfecicrgtuxodur]kqcqrnvwfdhpibndt[xsieatgypudmiedmfo]eqaouqptjuohpzbxml
+waqqyhmfacfjbfasug[mbghdrtwrqihjje]jczikhpsasvutpmb[obwkagptmpwgjbhev]ozwfarybcfhihoku
+tocybmyipesjprx[jdsdjyflopvltwsccxe]esswfgrsjawbduxuu
+qwdwzgezyklxtmnd[uikylllxmtfhnwh]dmozabuomdvhcoz
+tffooggeeufibvgyy[walfmmmfaegxaua]woxfjealuwsjajkk
+aipayrjoievpqkqcb[pcnirwsnebqijke]ocpwinpdigoxudcksgx[vvuxytomiqmmacndtk]lkwmarnwqvzulsxofid
+jwrefdombiesxvvap[fwhhajyhfaqzgym]gersxvbwsbqezoxcg[iaetgujgempehiaxx]llbgjukufbvdfxvjs
+hexdafengwxaarjkqhe[brxnqkfcyltwlxc]tfqwhqspdfcgajfzlak[shtfaywffbchkkk]txpanajvkwazozn[jzfxmgozivlbctstlz]paxycypplmjazycksx
+rwttdrhdouzvmhalwc[ozryzmmhwztywhuif]favxmwzmgawjdmcho
+sndufqsbyhdkyathrxm[spluzodshkuiqhrm]gwctupgaumdalep[urynlbtsukjumpcrgar]mvgkstgtaxmtiufho
+miypgghnpfhpcndife[uogotzsxnulstsucja]wrdogybnlkagqdtv[uerlwvvqvxrvtsaycg]bxpngxvmakjdvvdqfed
+hgcyvldphesdmdma[inomdckqkhupvxmc]avlnivtukipmdmts
+vgjaofvwaodncajhg[wmqzkrqiwbxdfsgdc]uzsywyzfptypsbto[lwfowjvhczggllfrw]nwchgcixmkxheceuq[eanuozoreimfpjooin]btyiwwfizhdbpfazpjx
+ldsqkerydfisskoimys[ltqspskmalvyujfyrqt]dtyknopltmnvdtc
+ekrdpdzvkoxfkjfpx[dpskecmtgjtwkhi]nidanbsojuexjgife[pgpitenqczwzafdad]mfcmnjodtkvhbknfto[uutgojscjiffmofegr]rwirhlyejxezndbs
+mhsngxyweukngbybc[uiapxfrpfptauhiw]ruywrhlzekcudjgkw
+urxtzdmrfedalnuuha[ioeyevidklsxpqkaahw]jhcrcdzwljhnudk[dfvcwbualikbxihqg]rhhwlhcfpbkexewpgn[gkgaygbsxboxypxbq]trsaulacafchpndootk
+jmlhqgixgtfbcxyt[vhwpsfjufpbampqyqa]wwzszedhhdmztex
+exilqpohtavxypsco[wtjdsrkpmulcraoaooz]ozlzxumlxhyyvcg[btpzjjbgjlydtfq]suniwwnwobellpbwd
+glgwpqmljnfxjwsgae[hdnpgizkkafrkqfalpg]pskoghwqhabbrazqtgu[howksatecaqyemgxpye]bvrcfhawviubspmkeon[qciouynjddffdlp]kruofqzvhiaqbtm
+ekyqqslkiuaxpucbsj[nsltoiyaeyfkygmtaul]eryfelvxmeekndddu[waprjreciavpzzsj]cppczdrntzrrqpk
+draegnpszalplun[jwpjzjfpanpyqcxnu]lddilnitonnehft
+afwslsdmylslwvekv[ngnsirjimcteduhmbia]utirtwchbjinjtkp[xtdywavaenpcexfi]fsxuipobvivhpowgioh
+zpjzyqnadncjcbgulq[wtwvealiuqmxtmgbsu]wyjqglyafposcrwxue[xqmgfmbrcdcjfmazd]hjcjhoqisrvxdtiefm
+nlchdiedtvmvrwq[aeqiwviurvdlsaxzdy]vrjrsalrqznvzhwxpjv[ghsoysknlxlzbqjv]cwklpwafgddnupknr
+zxqjiqwrswpnotkjm[vdlwfpqexfvgzxjbsdl]avnrytuqubaojek
+oklkhatqbeccsctaq[jfvcdwlampkhgkjw]hwnefdbhaixemttbk[xbnquvzqozdzbntm]rpyliiqlbmravsu
+dazldpxyqjgbihafnl[udnqydjynzfllmxayne]oasevmgbxuvgxtmurus[alpxiujmrobllilgb]rrgekfumvabcjzmh
+zoojpgbyojsophrflji[bobvppelwuyynrwinzj]kfsldwgeqtbvtsfy[icdvpxikjxhdaipte]kxyxztmtqiksvidn
+ensxpontjxipkckasr[bdikuxubzmiuhsb]rffefjgowtxzjltz
+suqgbqjkbymetile[jmgtojqeprpffkogv]pnffnorgbyrwddlm[pozvbivhruebmmjwogs]fuleotnbbnpuqre
+yjwcijeeaqhjdmu[emqntgsefvphvpc]hddshsiudkvrzghal[aieudiuufjmtihwli]bbytteummcluoygddky[fbkfhkdwubnigzvl]phfapgcqrshmwis
+fbqpgkdmhvtjmkepui[harjpumdzotcylumk]fglgadntxizpjsy
+iforzbbzeepoddbalyb[cutsqxklmoljnexuaxo]ajmokylzrakmmlxcub[rximbemhrndnogfzf]pokqtdgeipqlswvrim
+umtkjkgoyutnxym[nizqgpcfftiydbqutr]rzgvklegcqnetqkg
+zdykayyaybkihcyc[qgmrngcbixqqdbvx]hcicjeavoycywax[bkjnxvfknauougpe]xjfsxnxlgixldzb[thjemtygmoazibfsar]qzdtbduakjdqteckq
+dwwceyrsaqrhiadehmw[bushvhvxdeznysxjr]hnrekmeoxifqrsq[ynfaykimagehxbcxhka]ucdpjqxgcyyhvhobmdj[ywcjwcveqtzgqkzx]poruhxqfxuyhgqog
+mcxpgupgbiznbdjjfzn[nxackwalqammtynl]qnrwciginnlyfxiyiv[hvovgilkgigolcolf]fyqfptzmgmzbgkh
+kwzvwimdnfngglsqk[tvhytletnpwmogdq]zjndivdpftqyecxhnyi[iiqioqsyphxjxdy]diyppzzxximnlgyhzh[ylyboefbsjwjkkxbar]fuvxtvpoyomnkwjwsg
+vlcyiigmifwxnvcdw[enlnmvlfghlbwib]lwsaxkcpgluzkmx[kglnyaprvaagswvfg]vvdeqkfdrjeqhfp[fcqxurkfmmorcenve]copdpqayaaolcox
+rxjfsazvypysbra[pwnsoibariykvjgubu]nyuqsygdavnxfakwlm
+kkgyhdbiwyexyhxgd[aigctwltgdrvyxbs]xypkkzuhuzpxygupvcz[lwjjxozwzniiywpv]koyfescfdlnyzhcgxin
+cmgqspcojjombguppb[atincfnafdmbhtgzk]bidgxkkmgvgbeilvk
+fphcdhkhetqucchmtm[ieoeogxnvdaxsayhc]xeigwycormzmwgf[cllkxjnlkjdinvouy]ammsmdyoyvlpldkgy
+pjewtnwxajalxzrw[sreuxtjgiwxqmsfkj]nghqriebzmyhgcgoks
+trtaefztlkjjzbxpip[fgpnmiewbmzvqfxoikc]wpemgpznkrerwlgr[ptjdchwakbcdmrjwxnf]unaxvqinaglgfeoi[ekfifzrybpfkjiehpsi]bxkuqrbzgfctzult
+oyuobptvcbpmiiw[fhefjfnvmrpohae]uykwxrtssawavbuk[cyabwfmaxwqgmudcmpx]vahdtwpzvebiypwjvq[twtyrryywtwsckmff]vkmzcehpgydnorxo
+dbgblaadftjartioq[avryclynyjmceujmy]nsqtusikmlamzfht[qmvmgeprwbsokvbzmmc]ddeuxmektypsukme[gqzmpenqiqlihjqoceh]fmsjcayltvsxycmzv
+ixacedvqlzvneoqus[zmgeugtrxuidpdtzzn]besixpupznfgvqelwxq
+ausrpqkpblrplbq[pzqlirofwbtvjvoua]yljvwgnjvjehsyjd
+dmreexcoqmzxelfjeib[zaghgfbihozktuebhb]vdwkqxzetddhhbhhyd[smjdjtmnswvdeuyt]noyncdtfrtokngqld
+akpixaofgmscjdmr[oiothmxmcgwvxmx]yjiwdlhqlrqerce
+deyrfnzcctnmwjagql[qgcmtvfvpvvdminuwa]tynjoikfebqrxgvyehu[qhyenmsqmxshkvcmohh]llpblusdcqfywcdq[ikngnvowhnvaiwno]ixndafincaxkyqwimq
+rjcoodvjnnbhxnlo[spesoflcmfcoifzosgs]qauqixapgyfzvtjbpee[zzxomezynqnoeue]xpiblpyghkxfueapcm[qotnfesblvvyrnsu]keguppozqkwfxlf
+jgrowursqweqfwxbg[rfyvmzbkacqjzooslnr]znoeuzryfguydetugz[ssotfccqiuilzfuexd]zqatqqmmdnuiicv[mkijjomihqrtuiuobl]erhrjzotwvvpqek
+unyrjnckltxyfxyj[vdlbfpobsnokudzqab]dhhsatcnsuifpwsqe
+iscfknfmwdnipkvxcma[shkdzhzbrpdpacel]nrbkhvxfyoslwfhkldm
+poxfvymkfzuhovx[wyjhfwnozjdghzuenkx]tpldycstgwuagjrz
+taqbysrkuxvxncweld[vquzvmysufavywl]irixymrfapfwvnorzx[wznvlqeltnvzjhd]wgpdkhhoypflubfznpa
+veeytotjubsezxvh[mlbakwdftkyfbpid]qehdyxzxctrdvvmpil[cfnhvbvjkuqwyzgie]wxbvbxibaqoefhzkimu[vcdhqkaxllbdmbuxowp]ifrawmsqulaizxxqytk
+pbwglxgdiijskqrksnc[xryasmfvaqakaovslr]wslyywaninmrddik[uhieoolqnqxdmmltpyp]sgjoghttawugzcwzstd[zwhohshbhultyyoti]anvjcthgqapmftxhe
+wmqxexytqfmdfgzkw[gbjexhyoufthdghiibi]ejhfohkfsaixzvtx
+msrjuadzrxxolmxfxq[slurgkvzzfgqpnwdhxg]mhvtwtqplrxzvrmwtw
+vzrfylnagvwqrbukxkt[wofldsbvtgzqsfxbl]scrfvyjrwyqmrsbot[bngltozaybaghfij]msdphikahbxebdar
+cqpwfhfmgioybwsq[judebliwtcirgrtjcs]zrprctntnwcrszilkws[qwoaitshrtavmpse]zubuyfygpgdycnytnt[ctkvsrkjluwdqeeyku]ksncsilzwvkwtmn
+lwtwlwmtqtjqiym[nxfgdevoxcdimcnb]koarjfajilpityyhmbc[emidtlwzhvfmrpqbhik]gsefmkukbjyhgdclj
+fesirdkrgznhplitqo[erpgpujpndzzaho]wqzethjbporhxokift[rwelvzaswcwwstny]xgqpqjlcukivddrlv
+zozyeoozrjrbdccroq[pffesupjavtnanbmhae]gatiaxphiwsrnnwloj[viampjpkjyrhypjmto]vsqwksazgcaggsv
+fycnqvxfihmjnkjogf[jjxnxjolrlkbcqp]pdqtmmxyrfzpbbdm[fdaejpjrasjphazkc]hntqbpjeliiqmtne
+yeounyqfhbnbmjc[mzbietsligfkult]bywnnvpavyhinsm[xuwaqmeiaffetkpkvoq]ufmjhazqnhdmqyecja[ztqflfgjsoqybaf]pjnbnrsnmfrgqamxb
+ycyxnmxnttqiqnsnmi[wkrtuoeddszbizysqv]yzbksxesoscmlzquqfp[unqyazgxjzdgvhjylfd]kunijisskcelgtxzp[ciyxcpyyefoyhqm]eoqszchkgdhttjn
+evecetgcdniectsnadi[skxzpvvuabkudplm]zqykqoduyjvgssjin[uyojccqmnfbztpdnwvs]uzysyjyjvowlsvpqa
+cqkietrmjexdkqb[rhubbesuoeclwmtakqe]ivdnvnndssfznwmhbrk[zmjmfprnnowiedabycu]rmgmbgvihdcuzarhbum
+zdhjklxbktkqeglhts[iqagcckadjftptawh]ezdtjbiebkjvivekdzt[gwehifbjyqnazsgzziv]fhdnwvcwnamqdaeb[rgxvlygqlocpfgqfpd]kkssrbltmsamrpiedjw
+jlttcsywphepmcike[kufzshdcbvfvkwsahfu]ioqzvlzvjqnavymv
+cfyvaasepjmgtofy[hhoqwyrkhuweoetwtir]fvpxylsiwyinialjsg[hqahlwsskotrjlid]azfumcjerwanpukap[iqjcxdwtvmvjkoukcvq]koeodiiywozmrtktxur
+llaevsbyxpkahrii[dxfpfzvxwpzedtvhtlx]corhjnbybhlahvogj[aeukoetmokgjlswve]iwamrxgeszbcnzsxy
+abxkqpiyavrfgxjbmx[uqzsbujxbmrjyxf]dsiktkwxjovhabuir[baqaipezkcvfjyqc]svvyuknankhxlttwng[kwsoccnvjnctnxa]zgnsnelphgyhfolihu
+oquaqiwlkhwwfxnox[rifozvbwcclekccqk]mmmgicxioqwhlvjpsu[tndpmsoarmdojex]spywovxndxncbpshb[rgceaghxxvddklc]osijkijuctxjhtbv
+ewucowyzjaqacfu[hruhcyudsttblexjwy]mjxsgzalkyasstkuzi[drnyfhqgaemafei]uuimofkacnittaoorr
+nyzetoiyaqbsxum[jowknmpjwqdutjlfwo]oalwqxqoyovfjriwb[lvwabzjorjiiemeaacg]znsbvpusrratzywwwyk
+lsjzqfxbbuihsdx[akccvjqdtzmxywakf]fkxrqzurzmqusrx[wmkamfvugczykevpq]avcvjbiwezkocfvo
+ohoszcqvqivamuaisf[lyyacjpyelrsgafmyl]icwpankirjvekeg
+kruylpszzrkzbfxbmk[thxwtofeyjsijenmom]gjblnnkhejpqdomos[xjfzkxpgfltzzfdby]fnbkcvyhwtwmvpykj
+dtqrdvxfjedeydhdsz[depsrsktdbsiwudc]unbdedwnchjgetnwf[bhojevqkvcgacid]jmyzzhyslvuhnaizc
+dwlyvffagjfzbevant[baalozybgljljwj]jomnxqrlanqrkcjds
+kjdsccouzjkqxgicub[ghhfptkxbsgatseoxgz]jiqgnfilkycyuvlwbid
+sxbgpazgvlipytzq[fixpxpdcuetwlqprcs]qcvdieujpvhwveur
+gerfcffcrfrwvsjw[ypgmjuvhhzvvavtyulf]cjhqxizulglhcvy[mpjpctaxpnlrfhalp]wmhafecpyzjuagisv[aumyqoujcjkxusu]skhuivrgveucfrfzb
+rqkibcopsltsjwq[gmnenbrlgqtvqflnt]xuczjcgsxmtbmeaysdk[rkjjglznqblxednxx]npiikosjigixuvlnzes[vqdtacxnqagckmz]bnrzgyqhejnbmtqa
+ekzqugvzksupljx[hsjwrqxwwgcdhqhhzo]cqnomxxbemqmhqnnw[udcfrvgkcibabyssusn]zfuxkqiwlbbhssd[pfvscossyfdhjyed]zlwsqyhygkdgfah
+uhfxysjbqxaerhsanh[zyuotxgmbwkahzyevkq]dricwyfpfffhxncjn
+cmccqegbarzixhqucrl[ztgvmqmqpjtfgfuqjjj]ubawaltzbmhdhqioav[sszfycahkeptflx]otogjwoazgidspib
+fgfdvktoaiucefhets[qwjumhonvmtimauqsy]zkzorsvmedrlycqel[caaejbjnvlaqlqonk]ndndrqbsaaweqoyi[ovnpneqkmsbqsav]cepurdlgjkedaaeo
+nfhaistnlhzethu[gyozecvbgbkutaiuiiy]vbmcwkesewbbcdvw[zxgnhhbnldllaacb]kbtgbqxtmqtatjc
+nuxiknpvosedexey[gfixiukjvovooybkr]nkprytbsajposdjcv[ahjzndfqmisqonz]kzybggzczcwhlnrerfd
+puxghpwmypdrhykyd[xioiypketoaohdxa]lybkoxvoraessmzzztd
+qwlzyfwnqvxylbttyy[idtjcszoblpujfkf]nbwtcwowujbgzsz[mqckgqkhmbzpwtuekcf]xyquvnuptbiwlqdn[gwgdvbsouphvvovkg]buqxksahwsgvruovojo
+nvjqtzkgoenxnismrq[mxybkgtvioipfjecdma]wtgqwbkpqfepskvvay[qqxflmtbhprambdu]iqtqqujmqrlzpdwbljh[cmdesejkyvjzwhevg]qkclggetgpamrach
+ntxnwuudhhghcgd[rlyqxrlsbpsdrdlls]qfzxlyrfjeshhmsyz
+rxgpjhpklloihtpptpy[pcbbsflfkrknahkeq]uljnjuavjkhklwwcm
+byxqwjjdyqqsdnt[nkxqnfrxqqjtwsnpj]xstdzfnmxpkyszg[yswyxmgmqsrvaxdkx]sjfpeyrrswxgeflbncz[likexnumjhlodzimm]crnvrjyaumqgmjmy
+skwhvjyhmosrbbziiaw[dbztswjofjvkcbjtapg]yrzwevkwnjjefwzl[ifwifdeiaqpvuyiidrz]kqnqtbvgpxkejxvf[ubyvhimnnmhkbbnbu]zsqpbztopdvjzbpj
+jttcdvuuyawsjnode[ahfzcsoxjswcdysclk]ubdipqyzzhafcdusjuf[wtsiychncfnaztdn]teqnxwryvsfwqbbw
+gsoacpemvpypmizazb[rzluiccnkviutvg]bxmhsnyomypyueyhqbo[mzxxtfjifzluckdypta]qlirsetsxpkgewemam
+cdqotetervrpkaiz[tohfcmgrtozdfduhk]mlgpfaviqgvzicff[snphhquukvzrgqynfqi]eredworrsugqqqowk[fvcdlekaqtuqhhchh]hhrerrbpzzarqnxiwwk
+eitniklfnvnilfttm[qduauheufxnjowyar]oxizltxvldookdlomn[igmwlbhxgszcvhshy]knibbdqqnftzglqjodl
+ibypwndwhrbzbowoa[wyrgxqcbqoqayqkf]rlnhzutwptjhfwrsme[cfpmzztsrhtdcgy]tdvricsznenkyphwzt
+orvqewlxihoswvwlx[ifiaqweqqmaeasrkvxt]icmqkogypgrbjoij[qnkooyxicmbjhormbu]wkpucublpyqfkpjewzd
+lzshelyjacfkrkykwe[jehbtylsskmnxigkrh]wgnozoomyzpbyrytrme[uwcvshtsdstibykyrnm]nykxibwjjcaacgg
+fgdrabfqaogxyvpqfgs[bandjgjgkuuuxfuh]wwxxsusuuiezkvojziu[jsprwhpeictwield]tbpmjxfilclfrqx[zdmxvurgzzrompujt]ausuaokslerjqiveplk
+jyhxxfrgrdjjsorsgu[uxzaififwgjnklvj]uehxdiantcneqrxeqi[nigrgktauzcpyazs]fjyinlukaspltshmhlh[mfvrnccglqfrdbk]qrmbqjtcccjrsrdmgs
+nltgngsggdruwrahzhq[gvjujsgoyasfqql]btwmnkkccdcvuyniu[tsqzwyypufxxjhd]dvqickfwnoqtrhokrud[qjhdfcdcsfvdgkotq]hndylujuuecvakzmrp
+xyvhcwkqkedbjzarfht[njkseezhzjrbujcdjs]obghjeljjsjksswil[mhfukqardbaypasf]wjcerxswmwvghjortxs[ghqmhxisgehdsyb]ysvgpyswsdfkomanrtp
+wdwmhahsrdjogceb[jdwdpxaeemsjficjz]qqysutatflhmanx
+cpctsiwpwyifqkk[eebyeqlgxyvaskcoda]sjayfoyavfkaydph[aztkadhyekpqtys]jwzqgyewxxkbisw[gvlxjstngthhsjeybv]ponztgpuhfsndjb
+fawvrgcdqdidogtfu[yidikecuyabulhiia]fxfmgcpdbdzdsfkm
+yjateqpywpcjcbo[xddnertejcjeedjulw]humaqnneeeynnpp
+jutrwhvpaknrwoxp[ajhencapzncoyszy]qyhbpivdpqjeebsirf[lbsqceuykthorgpk]olrdkqyikfzrdzi[bmqrmgcmvqcgaxosaho]dkejbjzuzvyypxz
+rhsdxnktvyiully[nciwcjzdccerinfkgi]czljhsizretcfuea[gudarsiefwzfdvfqsip]tedaanrqtnfjdvgm
+grkgawgbvajxlbmbgwm[dpfpvpbrcwxethiu]rpfkykrvmatjwkd
+daemahshxyowxgjuio[dwhknewdrwoxbgk]vggqgdzpypjshps[arwnnbysrmyfijttrh]mwuwdtpqmiqgfkntqm
+ljpbbzgdgfqmvis[zqmfyouebpfvuscncay]omiockdgdxibtmyfwsk
+pirgefjkoicryrcgu[qxkwrjfuhqmjzzmbc]jrofqkmdftjbupytg[mywqavlapyesbfea]trqscgjokafiarh
+qsycbrrefosycpzj[guklennkilcmomyngzq]numvvwtbyvtfarlt[frfzzodqottlwzj]qumundqekohrpin[rsxaymghybsvzymhac]wkmbavpbqtoewxruut
+erpqoualxstxkzkwgf[spsetkclioxmkpobkij]mocioemqrazrpexy
+ryeoamcyfewnjlbdfsu[mmelohdonphatmxblhd]wgkjtelxmbwunvaxfne[xgohvvrmkweaabsd]dkukcrasqoceqjyehjs
+zkmkqzphahjdzwot[objfpvwrjdcdxinuvi]goabmmhuvavbjgebdow[jbqupsngpnuoubvn]xofdcclnjyfofxnzyvk[mkmshdjabucvgpkteh]kqxuwhyogoxhgwqyyvf
+yqlzjzpztzgtpomj[qcmfrvyamtxxtcv]hupfwqhpdvdwfvu[edoxxlncqxfxpsls]iyflxxkaztzxodxfd[xavxxfdkzquifiwuu]bkjzjuxybfdjcqw
+gspnkpswktczjhi[pkpwicpaszrfnsa]reqjlqsucfsixykwmg[matrmmvriujnldbcuaf]lckpqdyikkaprdje
+pbkxtroofyztckqg[arrmawhzlhytfodqb]pirguzqkvbgxznqnn
+mmybfuxiqgljxdih[dzgfakmxryeoylimdqp]vizjwwrhnihcakb[njplrxabbturflf]qclfldtmazmigmd
+exhynsvqvhtzexfjt[rdzxptfigworypkcz]disdlwcxksxjghkkbqe[ktpysvjomszwxdmqdv]cmwenbksdvfihvxvz[vrxbmhxkfjwgktuy]xpyefktsqohxwkaowk
+iiuuszfrkqjprgoumy[svdcdtozwwtofuizxg]gkenicdslqaemvwlov
+mldgparlhmdhgvz[bexmggptmuvhkjj]hfnccpxdkireolxpe
+tzyrycryhzonuxekwt[cvskbxzwbuotnsu]pvybsdovxceqjfmo[oxjqmhruryormwvgkc]kiygcylmgxdjubtefiw
+egklopkulrxyltcpbnu[nmbkrgnsjyfjugcx]bufmkakubfrwnwai[pprytunilpvguaen]bceequilwywvtvmshg[aszamqynotadciwdwzk]uivoeunohsbulzpxko
+ubhofoouxcmdsqqkjbv[fdvdmyjaukqeuaassk]tjajanohfobuhgih[dfscfkxpzwoqobajau]aspwsctdasjdjnqbmt
+urlkduvyyyatpkb[zrolecowduswyfn]bgkveercmmeecop
+aitmhwttzyrqwwk[lxntglszzkyjrqogob]exmxyvhwwcopudfekgu[fzxdevariaovvyuof]almvqtftjsdqkevnw
+ftftrmapzrqqyql[fmxcumhriyippgxmy]igyxwlfgcjfwwwgpy
+ftkqjwepfbngstefaji[ekaiaqtwacopwxfcf]deswaixrljslcqc[nqwlvvuuziefvrd]pgfvwqsqxeqamxsjjw[zispeamntwboenxygcp]cwdhurmclfnjjjwjygh
+fixhqdsaxorgfndumt[ccglwvkrpbwideuhvx]fgsxflvifyrzlznwvp[lmebhuhqemgwxpuvb]psfuyywbujlpwcekwz
+otmnqzcbakdxosl[skiwodrlvhfjsuqfsma]wtyrxmotiqdinxmrbe[lhgprkzlguroolg]kjgvxaekydqxdepu[mvffwznlsunzhxknier]irzzbykjkzjdoybqg
+aauhucqygvsgwdaqfa[leenmhlorfgbyorrd]soryphiyiqsoydfkwzw
+aggwrqdafwtwwqjr[eafpfpxygvnfblxikwm]mlgoiwxfigmduubsr
+rglpanreckskdaojotf[yuywsgztcjzyrfqawj]wzwtndwugnelcmxpyme[uwcqyuebxpprisdls]kjisjtwisxawsufrd
+uqeuvhdoyujlazejbix[wtdxrqucvkbkavrvor]fclqcjvpxqgnkkhi
+mgpszcffmfxeacayj[eorkhzrwqvxkrnessk]wykadaapxxqmohwriin[iwfmoieivcljpem]bxhutydaznvlbuu
+vkvvkjckohpxkolpff[pepxkcsneexhhlsjs]mffyiopxkqdnwlg[qmkttuxyhvemywmu]puqepezxejnldtlf
+fkyblzyluhloblrlj[uuznhpsjgbnzghjczsq]ekddnoeylbefgmpwjp[gbfxttshaolcvhfsl]iygnwnznafbluanu[mnylijsqhwlhhbq]ultecropzmivwizl
+rwpypdkhndrotod[rganbztsadndbxr]dorwmwqoeppdpoyz[sefhqmaxuxqwjpgaofp]kerdiohsaddctmnj
+hlzqtzrmmgkudvsaxn[wnujyposfazclkutfq]yugpiuxxydkbjtqd[bxeuhvpdnzqzvrtynq]nqcwrvbzjijfjkmq[gviaheipjpncyxq]thgypvingfouyrdexu
+abnhtjtbkrvmukjsbi[yivolobglxbtivbmlxe]gpoearvtfhhjjxedpq
+uiubiwrlfkwrsnewvwz[xymjmptyaoiartx]lkyzzzynibifaahjewx[ijvyqumtxyumrnpyfz]hddwfrbrgifyegaji[tguxrbbrdvhmssvbopf]ykkkdwtdtlajkmbgnww
+omqzieitwyasnbuae[citxwhjdkqyzmfotup]enzrramzittuhgjcv[fierpodjceckpxwoiav]edtoxignggotlwka[sbjkaiypsozrukh]hdwihijpdemzcdvlsz
+rummzhhnmypaltcxrja[nbcaecgbuslkyfar]hhfbjgrmbmjexlllok[swzivorldyknmqbnmtp]yjimyhqwgrgdphl
+mvpjigwjeejzhnr[zmxoaofpatkxkbecaq]szixqtsjizfgvfioq
+umnruavumjfrbywaswu[aeypnvqccjmqfflsyyn]anbehjastasljxkg[kwsjaebdtuslcbae]corzitvsrhthwmjsny[gzojgomcsqjubqrwor]tcektreziofkfzlyp
+atrjsjmfiyyhjjpcq[aygsawvwkgmvjly]nvxcabdkjbowvfiuqim[nxwlnfgnkfmmrdqwva]bjqsncyahbgqgcck[kudkiazyfbbvwvae]egtutxkpkpibqcxd
+yyxasjrusephnhgz[tbgueaajlxklmqfzfxx]rbirjquhusiueda[wwyfqgowviapcam]iwwwfcjtyuokivtkaet[ojcechttmtwizhjzb]ilybbjncssrsdpyvun
+ouzhmpmtsxtbpgxd[xkpvjnalwhbhiwl]dohtpyllehgsmfqwio[pswfztwnlizwbhbopug]znhnnlkxrlsswkgrb
+wdfqtfgtawjujjnipv[ffiedysbmudjwegxa]uixjrzxqsqknbro[uijbgaxqvjeiaddellx]golimewbjgojubbk[cmkrjtwjwjndagjoidq]kuaetseghitsonmjxez
+hinvjpjfkrcfikcsnk[neznqyunxrviafftsv]xxzaxudvxzpzayzu[igikyqxlllewgxp]bbrmixylwkvzstannjk
+jnfqvpcsjlhmsgttoo[keugkkuywiztndixql]fwcomunksourfiufwgf[vwalfwhhknnkmlelb]lxwrjniskrxyxxfgbj
+hmxhwwoaovcmrsjng[caxzefbacuvtevwsn]lgybmbmfeizwrbfrzuc[usgudhgiwtuirjfkpz]dmohwrrvvujowdchnh
+suctmalsyteahln[iwbpvohjintrccllib]zdppjeyrkkjlwgfp
+hmnzkxvelkvxzminaj[llmbrsvokhyfowaimt]otgsfjkhormfnubhirp[cbycbwoqvdgyvbnmkz]gnnjznpxfxwfvaoc
+jniltxvpjudmaao[ukqflhglxrfpfjg]djvtunwwabljjdirgrj[zkfyhzxkarvjfrbzbhx]zrrzbzubefvchvrpftc
+lyqyzdgisrvolizgkvq[fcdlhezvozbrglr]lcuqsfwchyucocowuz[acdcsqmgffussoy]jlnuxatzdobackkwgwp
+gwcvsoqytskjaqo[rfzimztlooyjbodjcud]ewbpnbzdilxvjmwy[ugoqefqofiwkgnv]pugnbbxqbmpephsby
+bbzqqwyepafkukwqjbb[sprroemdjetnbhdu]donxkujxpajsakirfap[ybomycmhvmvslykfxuo]auqvkrofncqftmjshtz
+qbxmiueonhzkluju[yocqzkbdskeisgvm]kaasgmyupwosdzbumq[lkqmadnwplwlawznb]zxldpcgbouydtatpo[dqdshurolnithdof]sscgvlgvpgthgkhtszr
+uzcvcnjawdeonomhoh[lnckzlsxtxekacx]ogcbcsdksosgbdlrexd
+kiiixiatixklryllfyd[bdtcggfxvupbohvclg]rxwnmgvwphunygx[jisbxeqdcnocecrtabk]cpbsvzurbvmtwucvhk[hlrjqjldshzvbrn]wlmkcxbepdkwafeovn
+xavkcpvzdiowrpduy[lujfjaxzrmxxcnxfrlb]szegppqkdzrwkokbi
+ojlbyagshifmlrv[qexvdlykxlebrlrjkg]lvdobhyszjfkocbmt[uorpnorysdsqycpdoje]tknlzfganuxeulzv[amollnzxactinrv]unmkoyxobuuzfwduxa
+pjhpwsfoiufywtd[pzudakbhkrvzepfl]cnmjmtmacyjulpcu[yvevxufpkzfrksn]qqdusuumfgtaemuscj
+ffnxshbygoxcatgz[byegatenneixbjbrri]xrxazipjarxrrjj[ilvdkjlixdbdieycbvz]lvngjqnhjjhlvki
+maocxpwqvhfgoaoy[jthtqiiuukttxhh]qpvgjokizpojnsvgg
+vstmpuwjzkvzxakgreh[vwxiygqjyyvmgvjdhz]yanevbmxttonaonlgeq[rskehprefzmdfujh]kddqkrshtgymbyf[tdciwdrqgnrwygvlqwy]mwyxsmscrhxowaezs
+lpetegprilvnporglm[efutqcurzhuymzl]vpuzirgjkjkqmpglqoc[ynrhizbevmuobpyduap]joqowueodytoothjk
+uovjoxozjbjgjoedh[hdufcoupnwyqzqsdz]bfkcibjpdceeawfsxnb[pmfdhpjltsthickltq]wnvrznraeqgmhfh[zqsykjfanpwhdbm]oltzbvppyqrhmom
+cuptpflteqvnaexzwj[sokwgqieratedygx]tlgoqkfvmifmdguz[kfiwutninqxzwie]dulfdtlbltfjevgp[oftsoxfpwolpbvflmvk]xfbcennewbsxcgin
+xoajbdvgnaxyewthsyy[gbvxbmhptnkenvoef]iyxfsrwruprnhml[pwrbjucvopfozdjlg]ntsdilgkqjkwifjcmqq[gqtizyvtmqydqdemxx]llggegbgpbiebcsg
+osoqemdejeowlmtbr[gvnuwetgdhuzlfoyp]ynbzmlvpoydjaix
+xmtosmglxiswygqd[djjpcftewakmxhe]cxrcujdbpfpmpqaqp
+kmffzaniobvxkqobrz[xemvsxzxpikkgnz]coopvxaqcwwvcpzzbwc[frbwadxyrqsjmeb]solyurryfbhunkug
+syuvjlrlrotbcxtmqlh[plnbhkottpkhbgrmmc]tpkceggxjkkshgovp
+xypvptyubhdywjddc[dkdpirtrddhczvbi]gppnmtijmtndwsd[jctdyzyrapkwpsudre]ofnnmlflpjenwqme[wjlbkjvlxuwubdkskq]zmhodofehapyshkw
+zyfesoxeyyvugukolxq[sduqoqepedvxiaojef]ujbihfjhwwrxjbmjzwo[fjbbqkruyeexkrk]fyjhwioedesstjkw[nyhqlxexvrlglwcqbi]zgxdbhdcqgccgodx
+kbgeflyhriyaitjdw[gkmsfhbeeftzvlkkxd]leroadltgqyqepa[apzlemfdxyxhyqy]bifkxoyxysldsif[bypdkygwlqgxlhmay]odffxnaayhgxkyjsyg
+etnylemzuybethsak[rbqwbwcpspvwcnrtiaa]cxdlfpvaizzsiqy[cofixscwpmoaptvu]tuvmcbkoqlfljpc
+nafgslpawkgystrbu[lholsrbjchktftlct]cwxorzjqzuibydw[wolwkkqcflunakpsf]ftfjgybmpgmpzjpxok[omccjdarvniomtniw]vmtkovkvuahhcgj
+arfxtgjhwjbqqpn[ozbglzichfmhnsrmc]sxwomutyoliqdfrziy
+yrfbyqpslcykicx[uoxnsxbpkzuarrmhesg]ohscdwcojgysjov[epkotielizvhfbauf]kdichwakhcwuitdohe
+lxdfxhtcxpaqfgud[kietvvqhjbhmbdjh]rnnxrywwubyivxj
+wwqhnufhgdpwnidwe[trkijfvlemsenfvm]hwhzclbeilbbpmbdgvy[kcqrejunfyofjviz]ymhbanffstqwvlkczn
+bemjirozvmspfrojywv[gnkvjdexdgqeqvom]akfgpxfgjwsymkegz[yrbmhgnacpufxmilwbe]taxwtqhrfqehzvndlix[ndjuozknfyplqafyu]bwogrlytfyopgayph
+tzrwkqaembipwoyysy[zmjpcdqtbucakwta]eelwgobyifozmawhaeu
+pxpftlpvkjcwicy[ordfpujlgwgxccjcvc]ghrlgcktvifkicv[kteuygrgxnqbaagldhw]elebyndnyuknsxwsz
+eoayeeinavevnkocsh[wlhcijujotnsmyfwrg]nsghlrcpvhazacbriwy
+myqilamxvrkimzrypsq[dritxccifmrgnynl]ahpnxwgmmlcrmtujqv
+prjupstfryhiyxjr[nznibizpdpgsxozff]omzpiwgyqqytncz[ixhfkzmhfpctiaflrsg]fkxetrnjkjhwmbcs[mgfwcdxioxwsbpbxg]pnmcyowtigkikfbqem
+obihtythngvjelm[flrqufrqlvaamtlt]gbuppvlrpotvhgoivu
+wdovdejwygfyguc[acoacyczfmzugdiwfy]hbboqkjmpktiqigkaxi[eirojscvpewshvdslgs]oloathxikscihfpy[vbwlxhdnmpcvhrdwm]zxwsxrhoksbgnyva
+vuaiucuvucxmowfvdc[pkwwdrystnkynnfonv]bkguisxgqtsizbdpon
+nhegyhsxwcesxgagl[jsdkwvzzfvxuxsmkans]cwhuierxyqjmueehii
+nmtqqwclrkwlikw[drthkxkyfxqugph]bbneldbvtittaydbgag[vviulwoviezlxte]oqzoapkqstfdxbxm[bmhsjxwoxtflbqeo]hnsldpfruxcdnvz
+xrkijlvluezxevaye[erofwbtsylzfvyrersj]bkvnbppereymraau
+jamtmykfjuhzndgnzrj[ezhkpcujzmcdkkjjfbm]yojgtkoobnwvgendjt[jkeeulmfzdbfwnohfaf]cudgyvipscncfbvmlh[kxikmcqmpounqkwjhg]emsdqszhrpxpwcwb
+yywwadanokysrfh[btwstuwbsdiotcudf]qrsrtonegzitpgnzsvd
+hrhfutggyymxzgyj[agqctqvhyfytwsdmzf]ozyonngtqdoaagdl[uuykvsdfqdknray]shhtieifkqfewhopney[ydgftitgfmfdqwh]dfxovuekyvtaddh
+dbsuuitjdsiymhek[jgxxnjjzwgwirdlgwg]xwlvqyufgiwbwyfhqn[yywjhwiwijsuhlarpxv]zmpooqvlrrnwdfhsheg[piwaxxvwgzbbruij]izqwldwwjvrxmzuj
+nuxzejoidicdupcgdum[nelehvehbccqmwnla]bhazpsnmekeqkvr
+evnsveqnndjyarol[tgeuojqlculphzfva]rilaooxfpwyreyh
+hhwvcwpwgzktzotcrx[khmiivstojdaciyzb]xwaeqbqyqwqltdx[rgwirleearklteybyx]ckiyopbgfygyvui
+zpfozblbuwkdkkfsuft[lccwcopfworwnry]srwrcwdkalvsnsu[jmgukelsagifrhkxqma]wtrtztsztpnryaqw
+iszcbgumuoarzlkblr[xphrddxkyclfvnapk]rzryxqdnmxplfiu[plghrphjxgqlxtp]cxpvhwxkzkeczxcenm
+aezqpvhdbflknptrc[zykqxuzbatudehe]lugjrgmxtqlxrvt
+jsejnywikaohtarsxmp[whmztgiaadmiarwlbj]yjrgwesrymvzhlades
+cxmorkzlibiuyjgs[nyierakbbzkhvyizl]hmtqhrxddgdwmoayyse[ldupkxzsfkmnsfdnzsl]sfpntvoniewgfnyfw
+rtlhvogqfabwioi[mloxkofbaemaxcfzdo]ofeukqafbxivgvygl
+rjnyhsocogdwhswqonr[jrwafksjhfamqvfjk]seiscoezqmbopqryc
+txdcwwtcedbymvxy[dbhxqovjeifzsuvm]alhqphxcmfmodeb[zdzxpgxeezjaeichq]ggadublqxpfyoyc
+rvoblfajodmlbftahtv[dgglfidheitvcqob]uzvojeukksuthhlpyoc[ovnskmuaaxulloi]wqhxsjbtaqbgjpbw[ohmzmzpqzevicbzmtk]yjrbmkldmwmmcndia
+rnsgsacbysmwnhlqjps[hmjfyywxcpxwsicxit]rnikgavmgagtsoqjnfp[qvcofkevjqjqhiqhzek]vlhfbggnwqwohspyig[ibsdkevufgsnowonkj]ufazmdkexffmxxfwf
+qkcfiavyhcmknbqcjtq[lknppgsvbdvpftnzcgo]qswbyhtruabsyhvz[ilrimrzzjctbbwhc]knpudsvkdphxsuevep
+wmeryhgvkftqiyctbt[terkorqjaagtbsp]hilrpcfcjsyguukcehn[scmgvajuiuybvzt]enjhgqtdjabbkgh
+kvczijzgmasricwj[xhgvyfhnaxeugzje]xwcxqjegagsjbvnuskc[iiokktbsnmwxknkqch]vtuobocpydqweamu[jgmazxfjiryndgtcqjx]pykbsnsoxbfgacvgpz
+guthejosohmrswzgk[uqthzxkpgxlcmqyop]fxedavqwkrmzbfr[itsvdugwjezrjtgqmua]yotsdzczslbvzatsom
+lyltslrourlevnxw[dtiihjdbejwusjmfap]hdmttxgttdqytvdfpp[qhdrjcwprncegzdfl]iinunfljrfhgifws[fvjgcqtqgxqtgca]bzlvdtdsxgrtzuvh
+ndwwncgabwoynmn[zbxvlpndrsbczbklwrb]bkcrlonwivcipxe[eoliublkzenpeyxfk]voydcapbmbsiuvqfywt[mmiirgxvnbpnkyjh]pgkocrralcozybthp
+lvrcxgzomstmslr[vczvuydqcmhfmlt]gmogxiffrfsazqbh[yvnoqlavmbnattcrgd]tsbkxinrrbbxypwnafo[pgtfpwnnlxibpjchgd]hznabthirzxjipjd
+jtczttrstcpmsko[mabkmpwpcytkqdmhjc]jntwxslpyrkrehj[cqbvlkhugmarodmoqeo]weaiacdfakrkuizqw[uiwkgtbzmmffxrhtn]lhygapgcdaszgoyy
+ahnbwmiwwwivkykv[pcsiuyrowqrqfxcvw]mgksjiinoudrumr[ocwtmprzvamougd]lvqqlgaftlflllvqo[akvkgazplkkvqshgbk]zvyvtmxkttxnxxdy
+tsbifacnljabpczi[cmmjarpfeeyoeplv]zsjcjdfidfjvcgdd
+vaviqqmsbqellpw[xjjzxupmjbkyuzq]putpqaavecqypslf[nkyslewbmmsxvdy]maszkbnmujztqfbzq[hjwtywxdrybhcvplncc]bvgsnjtjidiuvggo
+jhejwzckrrrzcjgs[vjkxxdonhncwkykwi]kyuvbdlmkffyzept[jloktbqtmtczmjbdord]uzggzgltjzngpsboyxy
+rkrntmebnqrkoboby[gujdrcqoqatyewm]qhrzxubcwkrkqibjwl[hvnezryivakciaoukrd]teefauinxaijxil
+zkuajphbyhsxocacplf[tqkosililhbxgsgp]xttqprajeocotwoixkw[hdmduoyjxcizwpa]cihkdwlaxhjzpjw
+xzcmplyeabfrcpfr[qhfkyjzmivvhbqeblph]bkwydbvhtutbtytnrx[oslchcvrlcxmsnbqoq]zkggbeglckihzjuq[lxywqhpuarhpasbul]vqmgizoanebmehzfwyt
+bjrvsfwownhpxsowafm[dtmxsbtquavgypbizrj]boqoiajglkefiwaj[ycjpupieshgdmbwp]riufwociykhnwdsci
+urcrpmkeszzuctovhqu[vsutbxseevalnah]rwrptzraxwhuskb[inpentirbmcxdvof]nvtxiwtlkeknxfl[rddddhtpudrgpjafk]cojkmbekefbmuwev
+djavlwoikblvsufxrb[suujlpxslswxgfmrjj]drrpikhibuvwdlhvt[iopyjysnsjpyyxngdfq]sijwvhrwtourowgv
+kitztjpylzlaposkaun[szjrduixywmdpxbl]kaltysqcxzjrengtkwv[jhsqhlzxzayxdbebu]apyxjlaydhhokxacq
+kvzdgclklqsndxdo[kudsmgggtnwtxdnrev]quljmegosayhdwum[kklkxlmmmtjcretlyx]dtsexdvvjndpxtggjlw[mpcaczddrmktrpgngw]usxsptmzgzqhjaycg
+oxvlhxlmhhyqgwlao[wiqlkdwjluvqwgqp]sbjmqvssbwefsvq[ocwwdefylfgvgsygfbr]fbtqyawdbswjpux[loeconwsbvgbccoz]cdotdnnkzyaupynuk
+ykozujsmdopwobif[xaupavllckswbcyszd]jqdeagvmvsxpumvmu
+naxhmkdggymqhjcycw[xkhrapbevbaiwzdn]etnivyebbwvqarn[dnskxishknmcidwv]uctdvqkipycyzhgcp
+uktvpthtrtlgmwofun[rmevlwmmvzucsuxqx]zokkayofazorjdec[ickalywptsyxrttbynx]olddxeqctucllsvrvhn[pxfftvrdqdglkvll]xymmmimcqskfozlkyos
+rlqkqjeaqkqkdsfb[igleoesoxntrdwsyoz]ujmbnjtysangjwpsod[nniriilejnvzrrnn]mbqjytlwauzscjj
+egnnnubdxhgpiypsha[byoisscizhhpsjy]hmtbmbgshscaxadry
+qjafhagbtdpvszwlpz[ipehjbasniypubhfb]hreoxsqzigscxhnaf[rntqxzmxfxdldnpxqb]jriknndggvtkifa[kavxsbypdwmsildd]uisivvrtykssbvmsm
+rwxhzignxkrqeuy[memzudqlzcfrgudefyh]pyoldsepksbcbthfdcw
+jhgyboztenuwlqu[zjsmipieimgaypipjm]jbjlglomhxosmwypq[lvpsqwjvzepgvzbfs]ergqdyrvicbsgxg[ugcuougnecjcrpav]pzgpppoonvamxhkbg
+mdmifuoicysmavfkvtr[rdcuzujskhncvsy]ypspsiiizkvopyb
+tlwbtllklxrkyivnnuw[zqphdjfrntryqssd]uuefrmazhsiqdbodatx[zdptibmcvohmnwrv]jofpqdvwggfsdkz
+rkgfksxcpqkspdsx[zubzkcjhpvtdvow]bkbmwwrfqtmaosodlhx[shxfozufozglsgfj]tbtwcavcbvhjourcvu
+ayayqmsdvbzfnut[nzwcajbcbcduifari]eazisrtfqhzophb[zkgweftquububoothq]lrpktclkzizrutnybq[guuneltajlsxbbx]rrakswukxamcewdy
+dtuezfpubkdvxojau[ipzyfbjcwxazbqeslhs]nelubzldtozljzyj[uqkgjszhpokhonrpg]pgaebrtqevqblaxqa
+bbduqlqjpilanyikfb[iwngaxahwxongrgf]krgrarolzgmzdtj[mbsttcbkbedkcmbl]whecpxbvhuemjloxkcq[lrtaeothcehqsmbes]chuesxuwklohzrvgjkh
+sextateheibnehs[ccvuuyctlffatnmhie]xdrwtaeangizfxkt
+nayfogrvrhhvdfqf[upaiyvrvkcygazw]wtsawgmklbrjjhc
+qumnikpzpmsjvfiwapn[fdqlumgxklzlxcm]dczsgahneieodmhgvgt[babaxdoljtacfza]teoddbtcemfketpp[vazvzbcnqacbwcx]fulxjfohtywgtagn
+crcyymrdfaawflxfmfg[ovbkvuhdrxdbhmyphao]myqpzivnpjyjkogknqz
+xfkrzuoeclfphdae[wfuevmepzjjuzlbc]icytgjlzxvnjgugxyv[ppqszfvkmppjvktn]cifddqrtlcodiincw
+gobxpjjturfsgzell[rfhdgfzwpfoztzgcn]eworfqsmysqolgq
+laagoxczwfikjawci[sljddbmwqdnwxlkhdi]hwmoerlalfpjshedio
+wyomncmyxejknhswjv[awtbfqiarnoabkab]nitvsmoxyfdhpcdiee[sipoxhfskauxfskix]nktheznrekmrrxl[gwpmodgajfihlnad]pereyxjrernitwktv
+xxkbizhzxvqxbecadt[omafffruievwfqocujp]zpuotjhjwsdbsxteza[otcdtybhkqhjhvjjz]zjrkvtevohcfvlvq[yjdkpxspyojxstjkv]fbccdkbjrebcrxyrg
+zrctbusxagvjendfdf[szvxchrhjussntb]mzhzysbvlwwflpx[heijmktbzrbgqsklhcu]ygpkfilealopaixduvm[rakktnzhooijvydazhb]msnpudxdeaujqysbje
+xoemgrrmqqtfwtnwnyt[jextspoeediexugdgc]foyqnwnwstrguzk
+siuojescxsrrhvgpeoh[dnizqgnuprmevtqws]jtrkiydptijrwewcqz[zkvjwozfadmizvhfdk]kamauddrolxbdrn[yzfffqfeadlyfje]qanqnshkelszldi
+wdiojuevpybfvdp[zxyrygvkvufixzdwds]tgjzjufuuwenexe[outgdpnnysadoyeon]hvelposyxhlvfmdi[gazrxuhxrfxofsrxq]wpkujtixgvfrdgg
+pufjsqcfddyeghd[iylozggwqlqevyb]cbkdjgvbrpmrwrsgn[nuinkqeqchwluhwye]baetibebzmndgrulqdo
+rwwiamjdgdfsttq[xnsuyncklmryvumrii]qtcphhihqqqqtntvoev
+bwhfulscfcqggdswt[ostyvvcpdoyzvuhodeg]ekpjrxajoziohdvkfco[tbbppuyifwtcgvci]lwjfhfqfmclrhdhplbs[pplppkgrmykhtfnq]sfvskkgimpacxfam
+jripvodavtgdgkv[isotocixmxjmcldpx]oaptjpebswetmacnf[zdlipacteuduvqdhcfg]chciftufaejhxkmpozz[cmnwvdkbsczhekzwi]ovnjvgsuxmszncr
+ylpnqmqhlnmuxei[cyqofexibcjwunyl]ettxreudzmlhgtha
+dhmperfgtcbqlipcjbr[gkmgkletrzhoyhfcwb]psllsosgwjmtrvfanv[fimdtpgcoolukvvpu]ccqgkaqltrreqchxpbf
+huvrdvtjmncbokh[mxnsccgwblyahbdao]mpscnoohrsqideuhf
+pfvpbqmyapypiubxmt[kjfhekecjzzqftpj]sybxxlmvzhloooom
+iicuihjkntpnytg[xpzlplwvgwmzazj]dfiftbbvxbztjpx[patfyqrujpvwbsl]mxgsntaernztshbi[nfwhtuuwhgsljivcrws]iwzqwnbjapcfujz
+fdiifotbpdpfvedsfn[ptkzrnhuybmhzkh]rmxekkyxbqxmxccc[icwqbjmjtakfsqbd]euycnuevdyommhq[dqfyackkxmvbehucn]aabiiukaxiowhbtbwpj
+ofaeegcqivqrmtz[nyotqurllbitpijzdz]pdlsomnmdsbfhdzdh
+yxihvlkrcvzxhlmzm[asvxysmyxovvxdvv]rrwmvextlthjopu[nuaoossiaxivwwxwpa]xgaovndeadfyofish[dpdhiwlsvntqxypdpy]ddmbndbjtnpazhj
+kfqeicvkuvmsljtsez[vplnucnqgngsbfv]ycjwthuykmlfejqepad[ngklfmgvredrinryy]snsxjeqdinbbapwuno
+yznxssrnyacwtxlfbab[mpjvrwoguxgvcbtbmdv]uflsilwcemofepjghvh[cpprubjartjbnrdo]pocdfdephebcdavrxpo
+xkiccyvosgzxwtuck[oqqbviclakixdgc]kteovpyjbcejxui[mzuzcghrxtkssnrsqy]hcdpzjidycnlowgvaxo[iawhkiyhbswqsibqp]ltyzmuplqyoivgmzfa
+qllumnywkyqjpfv[lgkmvmbdwnkhlhqfse]lroouhapmomchyeghsp
+egmftdtwkpmhdpda[jlxrjvldyikwjlcwx]inqnhjexcxubtzbx[nxiniqbbzoedxkyc]siepprpdulpnkrussom[srrupzubqhkmccxcnas]qylljcyzwypwzumem
+ikjwnxkhkzqmppk[tzaysscnyqriqxcg]miabsouchfluijdwa[cmxeoduyguwjxqcj]ilprgkdcvvopotdzzon
+cauxikrtpgqgwydmagf[nrnvqarumgmthrf]xyyopmoyoampemafwe[jwjgmglxphjkvfg]oxltiecspkarhualt
+pjzcgmqitucfyph[cxxlbsznvwpxvzghv]woqulnjvvfjvjzy[wgxczusgzxnpkakki]fvtepvwjkaozguggqk
+fgwvbbyiyljwmkgcmic[gnohlyijeqfjldrpqey]qbdzxnxuiprcwjsn[ogtlzpxxzbtgfbjx]wxgaduaiyihyumprhe
+mgemsvccgqreluv[qrlpjfkdoinuyou]ovkiqoqefrjmrzgb[fzmqpuzoufcybpucq]aaftwlldjkholezzpk
+vxfsphugegtougthxk[lkvniyzlltosedmpgr]tomgbtfosxegecoqtn[mvptnxvxddkaqnjvnue]kclnhnpveadosfktw
+ltlrncoqeeupwtoxv[yoosiulyjjmwacymwfk]vdgfdfcjubkcbhiixv
+ediaeekjpbzidrfpu[rowhynyrchamhzrp]wetzubsftjwuksnd[yqbtzngplxcqkyxf]blzuvnektffqbkf[egmvyplsbysvfjjkr]ikrllifuchlkthknpqb
+ohspsyvzulzfsgghvbu[tvtbzqptcpguecpgb]zyadwosbwchbgrkypj[cphkhvagaasozym]tvgkhkooyejddnhv
+uxtuhgkkulhrvowswt[etzltbttiofnkeyh]gsgnleidfbomktjtbrq
+owccdxohulgarvvxx[pbbuwbbkrgqlhxa]lqbqozlyegslpxvr[arduobjtbducuoiwykm]tfziqcucaqjcfrc
+foxbwdzngattycaunku[lnkqgrufdcqreruqp]otrfaarzydubngucw[hhaqnaieublicggcep]jjvurleoxyatgtlexjd
+bxercunxdkmyxoo[zuvlzxstpwfmbnv]laszhsamraptopjmfx[syvqwydkiawwwpb]dyrhipcnwwbhmcotha
+mrcbhykyikojmqmxr[gijdvcjehxyzlpxms]bkzqdkykgcvrlbdcpck
+dqdrhkhanojahvaof[msammceatlnnwypjnk]yxkhkmiroydwvls[bgxvfxasrtzmiqpueoy]esjxrbelpjsvdcdx
+tuxcluskqsebpcm[xplkqkfmkdsjlgnome]qkweswhvzqmpkujows
+nbpwnioczrkicxddphr[zmtlntcztddnmcl]gjultcfncpmekcsosbn[pzwvjmfvfkanhxbhcy]kafsqjaraeicizjy
+drcviwihoplftyb[xykuycwejtdqehmuf]kfmgemdaoetwhczw
+iuqdiepdheskvvgvix[ayfqccpnsyzawotpt]xjmljfmrhvqedfsrdg[rvdqhetiopoykpopol]lnqyxioswrssucownvu
+umqpsyqwafisrktta[eqncbzzavysoixd]wdtnkvsvsfcvfks[opjoivoqobrzeepln]ziqmbmxwsppwzfro[mkhssttidvdgsvstov]akkdvcsjflhxllpblu
+qjlmfjwtglolrdxvqk[yufnmwyfhjrqzrxrddv]pzcaaeoitighunvg[eamjujwzolooemhj]mxbnbjvuikcycvnfuh
+zykdcejnrxpiimmbf[ofuzkgknvcexqzxpu]ketlytmhcmzvwtssaq[pgruobcnyaqmyjvospf]jkkvdoervshvgeqwj[fiexihxudpdrzdwp]pzmgprenvskgbgupy
+edesihewpfcjzkjhhk[ydoqcgosoyuebpoib]oaxftiagsynwawlukdo[pobikbzlxzzatth]tzvwglytrgbmlsdikum
+rvdcduthikkjrfx[oxwihjkewocfvjpq]wtpoobflhevxjuwnqr[ltfcdcjnkkfetnor]obpzfslqfunurzhpr
+ihikssgoutovoropq[nitrordhoxvqfbjfc]lxnjmoufkqnxizdcthn
+nsnkrlllkoyukbkwikp[anhzfrtqwndvwcndm]xyvidixcvjwqwxbsctb[awnmlqopvrjxyvjlbn]ldmgegtwfkvwjurzk
+dvjmhdavqxdhnbglm[qopsknwswyqoqccp]jycpmzubidfbwsskm
+dstxfmmohcyoivxmci[prdroxyvxqzdrdsu]qzczowwyxtufoewluu[ywzeufezgbazekly]tiifyttcldlhravctc
+anocufhbdffrnyhxt[sopxugpfxbbjlsgtdc]nvnnbdsjqfevwbgbaif[ljuuwzmlrnpjvxgbp]hoeejpqdkbrafcmv
+mvoaumknaokkjrduxj[anhqilrxkkqawmtdwhd]zuugnxwinmpwchymrx[ftylpriufvgtanapyy]xnizqpmgcbbotfpru[ilovypboxtuyozqag]aldfcdeyubuntmvyv
+xlvezhyhuvbnhgezw[yvaxeeokyjwjgzr]hqtybqtojttsyhycsy
+bjcbsmjssbubqixiqmu[uzycqzxxixenmtvz]ykvtnssyurdixcswneu
+gwcwwzlhdufsjwaxal[howbmljowljdsvbm]jggvldehjwoafvshlw[bfevufuakhrccqcc]dfufvaxzavehxgwb
+xuigvxgnmagtmdke[nxkzzxieoqxbaei]nqnpncmtrsiytxhy[bqpabinchcjqcjy]ysktjdirrevjyqyc[rwtodjwpnppdvig]cxedadgimutpobykf
+daqanavryjmzxflo[vcpyomgckepdftz]tizgysgskfuntqedhp[bkasgyhpytrbqvgf]dtjwyykxvutfihl[dgidcqrglxeuqmjvryo]baclxsovuumhgjffx
+lpyeghloevhgthedzjl[schxctqynpinoswgvwv]jpuvctsvrdpdhwsh[xdjqrqfwodmrxta]cmeizobaqtszfini[ttbvcouiaworjdp]uwfkbkxwhrkeugsccp
+ctvifkpejmwnuapjpjh[glykzeqimofbvirvv]kbzjjjxmiasijhyak[ucyzsvtasjfewtbm]zbhktdmufikfwsiqyfz[kolsqantshbocapum]jvjtmsmzjvdyawlrrv
+zbxgniymzkidlugns[xsyjfooxpsbhtjvjp]lydpcozhcmkdiactgsu
+rzsziayhprsxlwr[szdcnmcdpqkwlmhqlp]uctizqyfzorwogahopa
+njpfvxluupsvtbenq[cgenluehtxacymtm]onnngstsltmtobh[jkjpmbsumgmtkbyg]uvsefrirmvsuiff
+qukyshliwhitgmyeb[eikuuslkfgergykosp]fthsbtteuspbrqpssb
+xpgwgflgtkmtzhw[prdmpsbkrcbmjfitdyn]kqiyknqfoudyfvdmlhz[zswwgwvjkyvrjlg]zzmkyxkalhbbgcouvog
+dgxbmggkttasrcjotn[hsfrmfxeeuvovzuij]lnbdybfhkdsrymhu
+ryjamwprtdolosp[nkucayakarxezyxpgkp]qnezibzbjadqvqzz[kehgcplpjdlitdsg]nagotxuswnxikkicoi[fbpbayqjockutfqu]gnylxqhcacwdrdhlp
+quayrjbyxiviwukq[mwkxplqhlociiriaaao]lswnrperjoqewphn[nmwqzenrjmgikodk]sagkvoqqoayykkzri[uyenuakxyohedlz]ffzfpyguqryzodjwqxj
+fkymdwjnylzqnxhl[lsrorhrzdxpfkmai]vfytomporosnlpzc[pwpodimqjyfmczra]nibuxkjazxghetmxe
+vlrxyrxugxmmxnr[gioetjknstpngomi]jgzsfyvgbteacpupi[aeyhvaqkilxenfy]ezhnkbgkqgbymgzolq[dkzztikgwfghpltsd]nrslpkmvahlvwfhavn
+xpjvbcihegkoyjg[ddyxkmnhpnucgbeu]xnvxewhefxmfesoqkfo
+qgavdsmekecmyuuxln[toczsvzymwfzzrxprb]igonrcvkpxvekefo[abktdknxsdmpionl]uhhlekwqmalhfauva
+uveiuvjjvxlrlyxpc[ucbsqehsihiilfmxz]nvhvrtaxdpiqpbuyj[rhtfedxbiqutzvaucj]dxtgbmuwqxxqpfbohfb
+qerjjnnafocowost[axrfofdityutyzgv]acicnljrpsxzlcg[dhslugmdfaxclhrdecs]ekxnsbqhlxcfuron
+jknvvunefcyqagtj[zhgsvdlsfrlcfyoqt]srtokcehvdjwwkcwczm
+wwwyfmlxivfqcmnwtw[kaeymickhvsdlqkfuqc]dyzktnegiqbohljysa[qmnzkoqxsgtpattmt]oxxczwgodhiecoyp[swszkqetvvgdctkhyxo]qrjhaothcmyajmpy
+oldhdgmnxrbjncj[kkrntxgkrpbrsyi]qjronlhwmcpdnpp[ksqudrshtdnenqxt]wzbkmgdhgylcfpberv[nyddphsypgzienevnmx]memczjhmgzeyjchv
+jxojiumgecewqlc[nmiruhzcybahusxwt]pqlrbrwjitwylvzx[rjwehkmounctpcecz]jbhagxjlhngeibhh
+lbpildbxlosyqfun[razlyptphvjizuyonoy]atrqbzjakphxrguvmbt[ybdqfljkspdlgisypun]xttstfdytowwtxytsn
+txrzvdxevhqzpkb[xbsfvyjkimceqeog]ilzhcjiezytvmdd[kuhqkwaweasjoae]fuyyczwcpbdblxtxjgt[ujdwvuypmibgdbdtkij]vhrvswtmxfqkwmtjjld
+zipaigqfaywgroxzyh[nfaubfwofvgmjrlxw]srjdkzejhrpctlhbevh
+mtshlkbkfdacuvtjkbk[qemjvtgzaxmgvojtfl]emvduvrdlxnwgqrquk
+nekajppmdnadytnn[ynkibteahksyzvpenmp]jqxybiytpkgzgws[whyeilzvjokewweunf]ndkfvbdnbdoszwfugue
+fwfviekoibnqhpis[esurgsppgqchztm]vaxsbcgtqipiemvreaw[ytkxlxyzfifrxgmbggv]tygxkuusmptxqyl[lpuxifizetrlbsefado]rbykxursrelvgiilrai
+xyniecftatconlmstl[rpmxaolsbezfwzof]zvcmwpmmcszbaimwhfj[hggnwfkyexqkdancmc]cakzrmvvnmyiyzbwx[eizlhdetlkmzlrob]elvcwtpqtdpqxwdgjd
+yfxqriltoucrnfnj[zlvarepakboasju]bhpvqvllpphryccbjz[gilhjdjlsinanvhhe]rkypfwnsrmshanawlb
+cffxddoarujtkpwt[vgtsjcyuqgpoklcem]enplegjrghgfkvaqhtc
+kybnjsgrfnckxytl[obtlaqusuhkyeswu]vhaghsusagftgzxz[ganwwupndegfgxbckde]ncgnimjtllrpmajya[dmzimljmhjkbyozpmk]ygyhjeeexzqadcdyhf
+icjonhtmvgnwowp[xdtgaeotcyiyzozqwd]wudhamantwimysgpu[wjeyfkqluqgmbspxi]piyixwwkfdbogwcmtac
+qextqvcvlshqhbunkg[ouypttbdsycmscqe]qpxtjvipjkrbasofu[lzonfnanpflaekzhl]xwwxnjgtmzxnhmq
+zbtonkedeacrlltqnl[qlssupkhjptzbbru]nroemsymerldlshy[anmlmugxtrgypsvkgs]wfagpjfzgqcdhslmlnf
+dpjpmruktkfkpurvcks[mcdigtlyilcdvykpng]wrbydnqwmaatgjpjnew
+nhcyufcfcqqsxef[msqbqdsheiodqzpkcv]qlownycyhpteerrdfid[geiuncokzuwybrefno]mgugljgzgtdvyhpflbk[kwgpiyryqpdmphcwk]rghcxpkbbmimkui
+yyutoljmokemaksyh[ofyxkifbjqhrdklh]ltfjtukyeekhbjd
+uolodqcxatkpbywxs[qdpmghhjdsvuolwk]qfvcnuajofrynqndg[cpojwkswcxdorxvknrg]hluvdzuqsjsvhnqd[coemqesbuoorqrcht]oymvojeakuzzydb
+qrghrzhmccfpfymd[ejpldprfcjwhfthnli]wayofelvbtvjfesq[crskpxtazgepeguyywt]hedblyskngtnxnchdz
+gvebyckhjgfmqrxmmd[eklljmmtwggtlqdq]hmxazjnitvfcjmlactd[qhlsytdoiaksvney]jsdeegafywarxlsnkl[ycoyqpbbwsanlnoes]mnfxjeakujicrhn
+ttowopleauigqfzpuws[rwaipjqlxeajbszmt]ewurrgikabumnsg[hqhoudrdngplyncdoq]jvazavwibnayzbkmei[yfeaerzswqrhjiiqbb]khsqzfojtdimvcgsxuv
+zysbeejbuanxhomwne[wzcjovlgygbogvj]wqqbmqmudmkidhnm
+hzetqrjsokpzsfe[sfvglwbyaoczjozubjo]fisxeqpvyscesgy
+txsslfbzdakhenov[pdzbirgfxvyufuz]mwbclrbkpszfpgbrhu[ozmwusngkhbkluzvgo]wuwvzagakqcmcrcq
+vxmeolvgvkzdbldvid[ebhmwbfcvzykllewj]ngsvjbjjbyyoybnai[vvhfsezmrbmdkoxbdmj]pxxmcprffpzqadbu
+kagnhnyzbognzsmifby[rujzhkfynwygbcpuoq]wfgodhqkdextspa
+meyjysyguijkyen[vjyhsmvoyoppjknvivn]yuyroikrroyknlkgfn
+yrbljqrlekktwvq[ubrwbmlwxxtxnwa]ekompfyzprhialu[rdglmpamldxxxsgpmwk]atazfgcgkzbjydvf[sjdezkpgsienutudx]zuxyrrwpglvstutp
+yqhreymyqostwga[wngmbpfomuxgcyqdl]jdkppprtdctuyaonlqz[dfpqdidzlofdishhmot]gnifxcpfecsxdincqib
+xdfslzwasuifmmi[lbvuxnulhamtgfyhwz]sarfovphjgpdckkrbgy
+bzkfxruybgbjsmeflp[ubqugccjulkryeh]yaldnucjnxhktrgf[jamlgglyzdlaidp]dsvhuxerhecwhjslfk[yibicfmmkiugttqi]byyytkpsforwainomd
+asxywcdszmdtdndivdg[qkyfhaxaietrign]sjpliketcpjxkwxaoo[vmjxfuqxqgscfpd]mnpdsyqpnhlksmrcpa
+gpgcqhpkdzpmjoxbjvk[stpachxjlsdooglph]jaaoaxtyaogvmuhl[yochbczehvuvauxj]zatcmyzbmktdoohzgx[cbwozqlvqfssqaagyf]dkeooopvydlsoakyc
+blfmanmskfsbhnj[qurkejaextecwkh]iekzoszfdtcjcvqf[cllmensfekeoduop]kpldtlzhhnyaweelg[duturhserahslsvavl]tlscacpaddzunyhknql
+fgtfcerscppphulhdpc[cjasnicuepcfcpwwq]ubfqrgkjexhpcpdh[fcuypvlkciryarmpsb]lkazlfdxilmfoccr
+jaytjcjzwzzrwrosfig[bjwjolqvmwjwehvkyqm]qdrcohrlcqldwsj
+darwjaqwucpzrgob[utcloaeoixtgcssljwg]daazkyzlexvrwrvcoho[hesdrjjliusilwgn]kflojebucroplzdkid[mxvmzdobkvksvvzg]mllhibzchrvzahrj
+umabodjruykdkzuebe[pdyqfuwbwbnhvbgh]mvwcfyrzvyzbwbhen
+uuvjgoiafuuacqj[ccihiuugtipqyyve]xmtwktbgcgwvwchsseg
+oldckvjhhtvodiljhx[nqcvjxjohtdbukds]qsspbsmfdcamiwwr
+dzilyknpfbgtdnvntf[fzelzighvnvvqypxz]ntthcasrqrblqsk
+hphpardvfoqnqncq[ppvkmutvbzybiwmmcuz]kgfwazxcanccijxdxr[kvvrehncwizamjfbv]ptzvpznypbvmrshiq
+iteoprxpltaartmz[mnybqocmkusetlywx]mxfikdltxvgvklaxzqt
+qxldpbwuuyarzvlokm[peamzjnqawztknvnssx]pjacikdaebekzndkqbs
+kswrzqhftfhqqgetg[bplpppimgpytieviwci]gfeqifrktgdqxzw[ylzjvdvhoocfxoijb]jhullyfbzrzbtiujxo
+jbyalllemspbiba[fihpzyuwtiisvalzl]egftfecpkrowpxz[fwyjugfywhzgpbgxam]iuwakremprjkdfqep[cwjewifgwauyxaqa]gfnznfakypqatvp
+gtdsifvoatfwztxsgmn[lrdwcnvmfiuzxuyad]alnsyodvmgpdxqk
+ffyhycigkhlyiopmdx[yuuvtuoepntnqhkof]atumrmkzfhinoqq
+wrkcbbifeyemfppiaga[msgxssztbxvmdii]ydxtnokgvpouvcuk
+xivexjhdjysgmklbjp[scteqtgrnyuxsonvbx]kzbopsageoqsymtcfo
+jtsjoerkjzurnysfnwe[jqglomdcjmtvcwvhir]rozwrmwjuehpapebmgz
+qnscyvubszfeloscaez[povhdeeifvqfpyd]hdpspdtgtqpklhwqjec[xtqeoudrdzirwfxrowf]dllykbtfgrdwdlchn[fsjzptvngbbulfkpkh]nvyonktuxkjzpsciihm
+jzrrmwegexitufpbx[orlvlpnnuklsapk]kpwkwfggbcxwdxvp
+hfvhjwieruryoqk[qrtlruplpqjtwpuhhoa]ddbsdfqczwrmnrpm[hjjqrsppkjnvxmjq]juvwgpsglqllqhrc
+wogxentwvncxpjbntf[lunrnlkbjpkqcxprp]yanygvijbyhhpohijj
+kjwqxolclqanoyfes[oeasucvzznhjxkzlqb]bbxecjmmedvyfzapfif
+hfdiajyktrmlfzfbv[vdnyppvsruscsgvji]opwnmoadgirnedufn
+mrkqlpkzkhbfncol[huvazflnaswuhnv]pznbrubmgazkzfvkltx
+lfqfiunlwragtrknwpx[quvtbwmfgutkzaeng]kcdzgwyybqugyfgf[mjngrfgzmtbehzxzsbg]zjvpmzakgijjfyz[ghpyxsxuycqgdipdua]bjqtbqlzwyinovhnmmu
+ayagxnelxjvkqkwhax[zlimrxwrtlqtkvdny]nosfkooohodpzjp[hsrgztcucnuagedqoz]aujduldshdugxgbszom
+wkeqhrtgnhyektefk[afuwzaqdvmzzzgnuvw]aaisrnfyhuifpglpgp
+kpqqecovarltptjfdf[fwpprvpqfsntlobpdm]dtnujgpbbrqwqdyzs
+alnyvjvicoigistbmh[ueworbfuagjnech]dpzdovbhhbguxpginqy
+eiumooyxoukvaqoiv[qrygigmnybosyay]byhcqoggajjtotnuw[wpgsucwktfgcuhhi]hwoelhsxarzriqxtwao[nvemgikmzntrcfr]uguazrjfisipwrhcbn
+ghierhnuwvmisxxa[cmfxbenynymgvcrr]oknavjpheqtlsvwabd[izrzgzwvdgymivghdpv]fbqrtbvhcjgvbkwjs[ivdprbnygkhgzgaym]ziwhfgnbawgtpmkswvu
+pqcsccgpceupnvtr[bzfagcvmbelgxyns]uxkvxgveigehxsugzj[oojovkdwhojqcbilwvh]xeamwxhelypwwefsabq
+iltmsmcvjnhczdxoti[umsmolikbpmqnsyah]tdtojhhqszysiqkfqr
+eubknijqrihrbulq[hfmdunzrzrgseunf]qgdasqmtmgoacfid[duazrfhejbzxepx]apwgpewymhnhxsrx[judrexlgitldqqlnrpb]ynfdtcugmjvpdajapon
+lqwdkmmktuhdbawow[lsrovmkjyktyduf]utmrjitsbijombwo[abvvufjkwoxsthzbao]wteqdxfhbqrakiqenh
+phudxliosbjdplwzx[wmreutzkdlbxfksjt]onwnwzbffksdsrrvxuy[fuklieqfenqwinbmf]ckltdwaxzrpebmksn
+mldqsgldkmerpwqlg[thmshstolghijyjy]xzhkcpjyjuydgxjm
+wpsseyevqcibokcb[hnqscfwtkqckqmao]jsnvfanwiodlasx
+pomqeoawmwhijaq[ejtmvzlmidqwcft]hkeetgkruqgmnpoi
+twkcrdetwuxaxucnjv[xffwyrqfcqouyxmkrro]ezewjlxapphabveea[jfyjgbpkflijwvreer]nesuewscsclvwiwkn[xxjkzrpeonyctow]yclvbgnwgcarcxos
+ugndgtdqyxtplkdz[worxgglrocgtypfvmb]lcziijmkjfdpghkjqfp[qomfivwilarizmq]dnglkuyyinegywu[batxtrembnirlwr]ovrphoeyxqnhcvmts
+zgtxjxnktlvldrxpul[rviiugbdqcysxijrc]kyktcnhhtompktirdjz[bkusovlvbbigibd]airrtdvywvomcfrhi[xgapjazusatwmnl]usdiffjsbadtdonojs
+mimjtxkzfsnijawjrey[appuokfywghecatbzwo]aovbqviminrwaszvo
+kcmrpjoggjmfzwezv[onaeglpwhoxczbw]totswqmklmzrwmxdf[befvnijunppmomoduhr]wydkdiejzzdppny
+fgpjujczabbtkxwvfd[cicmceziihzlkcwdwhr]sicifccwrljuhteondz[qwtxzkpzaspfynin]scyjunafukgggpc
+buyslulsiiwxkge[ypiuwaxgxsqpbqqx]dwsyrzemulupybvx
+telsdbhziecdqvmyprn[hqpxpfnttkmchynab]wvopujdicijhmttrn[orfuzixnlfdimtsc]jzvuxsquolwwtzr[dmiytgapehniwib]zylakfeifdzatmqpb
+klvmlkigwhcckkyx[qxriuexxfsmfcpgvlzb]ygklxunjumjcmoph[ychtcmyhbyipspnnsr]pjqqgfbcsqmmrxbtj
+ugulusabrxqyxbvv[atgfhjdhplritht]glsimouvohndboxh
+fatrlhuimyqjjobdq[xvvmkavirljwcgmkvx]kbesaoxeeabtywsxcwr[pmvliimbudlzabbz]vseagltcmulcdib
+vowrlwyrxwivzacnop[fegbzczrceczdasjr]orroaksljdcydlk[clwvvrdfhommqcn]yqigbtlwvklqxxiors[uliodgyotgxdymyi]lqverjsyuxifpjoru
+wevsnwwlgslgxsof[eyjhzwdmvusnuerbqmh]mjzmgpkhaatmwptbo
+hljbwkfykqbnpqhkfuv[uirnlrjpryuhtqztz]ackmzmullgwefgug
+lmumdzgnhyjajoazd[yksltxstrsvugowym]xcmwqzbluyzdlbpkfkj[sbnktloqdabygsmyp]pyavvgzsxokeecxh[xcoublhmghnexnts]sdbkqumfdezjvqp
+stnccrfzofqwbcafssa[toskkshmnjeywtuq]kbkyxwghqfgrtxs[myvqujeowntxqiekgxh]dplyqviwehtzoxrrix[covstbqzxjrditsf]qxyocadbpdqqqpadl
+evgjdjnbnzmbzjpbfm[cxhsxvxtdtdowbd]wceyuozkwdjdsrsarl
+rbnbqreygxxaufhws[alsptejilzoslxfj]xirgkoxgpdsolbhqiqb
+kpzbxjsrsdgzstpc[jnpsoqmjqnfzkfsgq]tunpisxseqxjtyfwij
+kegehkcwqdyujtyv[qfprszwdyjylowrl]yqhpsvfmcofhrfn
+usfdjspdmrsmwotku[phpquxkrbrefnesvoig]vbrbyhzjjueflzur
+ahcrumgrsucgvcvs[zgiwqzqxdocenumve]wwmkejymlaysmpr
+egorqvqrhdxdcwglb[pewidggmjfdwchmpuxq]vfpginbbwnzhzutt
+rbwgxniblxrzdux[ctmqwdtjnnoizpfxkb]cjalwfgvfvehdshc
+grpqqrkmvatjnpe[fpuzplowwtztimw]zsebojrxdfyouujqu[jieuliemrlsrrhaaral]vapfxmifbvtdzjpqfn
+kxqzgqwklgxylpccai[scugesodkfdyduxfgpq]qeoajrdmbkawsrcde[yhplavixoxekedvoq]oefgpvukotfhzxvdpt[vfffrlkuirbixakjbg]shhslgefljkjhdu
+xltaldprsvinvsgfg[korqzbyuimhrmxg]pamxettjpfchnwvxfb[secngupffbmiekzfewg]jzqfwquugmanazihei[ldhzfrgdbneaxjjndgg]toefzbwrdaiqssxrbqh
+qgiiylhrxzzvniaegfw[vfxiqmehxnnjheiszxb]txrwpqbqkdbnsvt[voiphlhjwxrkcyrarwt]lhlhcobxijaoosyx[dyqmagxqryuyfbat]oovkonlsaeiqnil
+cwxhidoqdhxragzpib[hjmpsaxbqpiwqhy]csdontizglsbbeh
+cvqlicsscacfmuugq[eejkmtnhdfogzpbhygc]hsqpgofmanfemhido
+tsbgyswofaablrj[kxsfwmoymlmvxujvqc]oiatufqeigamjtqj[lbnetvjnhlmvyjs]aeeetvtqgykzstpt
+zikurkodzkxzvjucknr[eeldigjdnjetqzwtl]itaxybvtwbhjdci[hbkvepoewuzexeg]ohfbodukqdlanpa[rlxoscpwxfbemxvye]ydahcjuodtvinta
+dkdquuhvndpmvudwjx[hofzlmhpteoarpre]sdvnkykpcblbaardmf[hdtnalxmijwrorx]ixsdqmnoqrieeqn[tvyurwrpjzolmoqn]odvpdodyhdjvcaqi
+leufyoljrgauyshjmdn[omwkxoqtffghqvn]iqpnagprpvmlsvo[glbhtzdectgrymdzxf]dwgpfoqsivjdvpiidzo[glnavlopicrpfkc]nnstfkiqjxccqrvmg
+jdpqymeesiieeeb[iwrygkpzdjttxuz]qqrbobabyedbigesuh[tmfkwpopdgcfuydhukb]mzldoxgjdeckpdvu[obojbnmmlhdwsman]nssaclvkjwmoozuissi
+upgpcxmqbimkrcvcmp[ivnacnyueiepraljdh]vfagabifynlpbjdc[dobimimkhmytben]pgasxhypmszdnvjwnwh[nvcvwfgrqenthqcqlw]cdvvgepmrqskpffhw
+fifgarfuqaoifkymgx[mvgawkhnxvgaqdmzat]fuemwmfadtlaxwyslr
+bcbtmtmkhecpaemtmec[apsgtrjqwqreuntmdyq]qecxvrivzvlkwwnzcfv
+vslhwcbtvnnkfge[zbotbapnldktkexac]ieekqwkifqtpzwsb[wjjwgvhvnqaqmrmath]aeauqxrfhwdlbsqx[ijqqcgxjzepgnbru]uycbebwrapkiobz
+fgfxlcgdrvbwkhf[gcdnlfdqppnocayj]kgluimmxtrnrkxxy[ebmozaizcvfxamjfgfl]zxjsthsrjazocerdybe[uiodgjwmepojoaswdqb]gsywzobidosuauosihp
+jocqkcfjxtprwzxcol[jomzitpuxjjstqj]jyaupzbknhzvwkwejgg[frkljzosjvpzzffe]najjqpukuhkyseux[obvojkkfdiawyysye]awwxmmkvzedenpagx
+wnjitpqtpbywfdfzqb[zsmozjfwpksophbzrp]ryxeuskjtgqxlkqinbl[jbenmfsdrvwdjfxhibx]vdwygykkkqqzoueisnu[xgnqjjcnbpugkeuaon]wvyttauvhjmdqcbmfqz
+cjikxgbzdupqnoq[khvayknbckfnohcbc]gjsqdwbzsjnwjblbe
+sknizlycschmfbcbo[glptboptcwtmwmyj]hmgkwtwaifrmzxhee[dxxxiulybtkhkstynq]mjntafrkgppmgisnz
+vbijkdmufqxhuinw[nqkbpwcxoozkrllibiu]maiisvopemncukdedg[flspngjuzwaveawgk]lqinchaieoizrwr[tuyuxyvxkesiktilna]rhyincnkvnnqejsoxp
+eehvafmuwihwbizcao[vnktgdjhjeatxeshjh]taoisnoyefbphntft[pfzlfnftyvfkkmau]gxmhcurnvyqxgffll
+ytdqzmfcxjezgvr[yttnwhebnitzkmpvg]gnxpxseopkiwdwq
+tiygnypqepfcbcqasq[qoiylamohtllezrd]hieijornlrltkvvf
+gcolxjnzzqtozkqlo[gwiytfqkewszkddc]mervsuxdbxtqkclwli[zamcpapgayrobsrnros]skfbjychckenvdnk[msqqgpdtgzpbdsflgo]hswedrxeichgpbkt
+aoyzbbkhsyzouhf[yuheesbhrurspvkoeoa]icwrvttxwvrjodooy[lclcdnulwihttoo]aheoekyzcrdbtnkdn
+epqxzqeqfqquuvaxut[rvniqevejzxwbgdj]mdozdllbtyxiessvou[ftmdtfmxjktmdjrp]rbdfhuqvdzpiyaw
+fvfozofyprhtptnvfvv[cvjusvxzqhknsrfuw]wwjlogceospgxpoq
+lboiooritgdlzti[dcvmycwryuiwrxuf]rgsvwmbouwqweusdsrb[ncalmljnmldxtgjyn]digztuhetumfrmzwg[jxhgzioinwtdfvsczf]ormtzakkenigohbn
+jjgkkenzhjxreujjury[oqbhgbvyvybhznj]lzzpsybrpvmfxftasjv[fajchcbbxzyjzdmzju]jbyovxsryhenhqd
+kimqpwhmrecjichuf[biclfkhxsptyasun]cykzrmdsfvyszfldtxb[foamaxeacbbfukrav]kpdkasbbrjuqndsjf
+ixiemjwdwfauydlzrf[ehczcannzlhrpuu]zgmsdfleegepchlbml[pxixfrfqusymnyad]wynixqpqilkigha[ujtjksmgswjsqlt]uabmyxgfqtqxbtggvoh
+vvxrjenkffmjasf[zxizrnxsywrjpbsy]danlwskfpxmwozazt
+hdbwqsphlabkzxxhrgo[erldraphnhaevid]ynkxoezwjpygvftw
+eynyhfzlfnvsrguftv[olhsgnhicqlhqcopiai]azubeqximmxxruopbcv
+ixkfvfumxiagjybsn[frwibevmaiibyzd]qzqfzepjziatdpyqmr[onsezbgebekxybzzqzw]yqotbtwhsuxraexdfes[sqyxxukeslhogqaftl]kpqsxbeawasfnbwm
+fbotlkdfsscgahhtbvr[qzlujuyglqbktek]fitzbfribrvygprgssx[ytfthkzieycghddhs]twelmrjujaidadamq
+nuxgihsikrkmrydy[awvlrjbdobngseyw]owlsggrmwypppcnkmws[ipqmpwdvbohtnbs]nutezdkbigrjnveau
+ftxpxuuvsdipzjvmy[zfrkyfvducmhwzfdxj]ycyrhdiyszpbldrqyqp[pdhfnaicafoldftflv]rskyllsuaaxidlokgxz
+gqnlikldqbizpsceti[skfmnlrtbwyqrwpi]ubwivkayvgbhnixj[kmlxwcfmudgamallj]tfwinixbevrrgzozw[iufudfqiwsyjcyqrs]ujixfobkouvxhmvcql
+iddngjedxnwlbcxhkw[yqwiebcdacegykn]saybhmmqxdoxrrzced[bqjiuuqpbxczshymt]qagtwkbyyslughgsxrd[wjjqtpphygirijzcnun]lvwqqctdkjvaatovttj
+qzarsgfojoaqkzb[jiuvvyihogymomqddqs]ekacrjmxsudjuvjd[dkfjwxmpbviqeuiotlu]tpmzbyfqhelgtpic[xcankncgcyaixxcuaj]jsieyimscyfvaeduf
+epqisdvjvcpyxcwxuu[hhdspwfhkosxunncv]iibgrkioklsoktfp[kjvjytinytggjurws]oekjstnakyoohller
+yidewjsqwykhvakby[ewhvuvpzmeexvwtd]mygypbsbaabkccvslri[dgaksoqgxghazflkn]kpdssbszxhpltdxht
+ijhcdyyvjscrvhh[fpobanqwzccnyev]vtvztxptbegfabvm
+fcicsnaoileyhlta[ivnthhpicibzhtyfaf]agaffazyjidivabel[zprfefitivfahmsx]jxfvpjrbftgokdclnw[vfmlrayxecyduau]dkuaarmbkuqqjuva
+wjhhegqxpegrypjlpvr[orhbboezmjncmclamy]pckznmicczddarise
+ccxnbhlsqrtqcbrczci[zwbnllwffvdsmmd]wdcyuartrmykqbvmlc
+shpzokvkrrpypaohp[cdbxbviwegleqizw]dcilynllhnasdzaku[brkdsnedgdlzlhxzlzg]ygvficcbzjonmzh
+vzdkvwtqbqsgxenb[dfrsswrrxxxlpxpgp]lheiqkpbahpgjtvax[lbfhfdztehvveioipoj]xkpbfwdxvkcndrbfgya[qvewltgemzljlokhjxi]bufpvhmvhrndnkmjsjr
+mynfnfbjlwljwoqbenl[wnuganfnmpqrgcdxvn]kpcfvfegyibrhoeouiv[tmquruuijoivdluhc]lnspgmbphvhxlcw[slrraibkhqkaupb]vxwczoqsrepmgzz
+eaeovlebqlahuiztd[dngzrklmortvzksk]atunvakfxeqeymw[huaccbfdtygotzubrj]poeblqeqsdqpcbqd
+gzbgdqlebuwepvx[qpajreszsyyluwi]hymkhgxqpabniqzells[zediljwkqfpvblioz]zguladbcmloyugl
+cvkyjumasouhugvvz[dtidgtxbbufhwyvob]pdmhzqubmdreglyy
+tcxjcacxysuimczi[uhflafmjntxmsaf]uexrhinqroupcbksrsj[nocrykejeuzzigkyqxx]crwdvpjofxynwft[fmxkcqrsrpdfxscabs]crbnlnzoihruuilu
+notkmxwmhfptgfpvntf[ucdfxyikwxtsumebhj]kjhhkgtruhuqzsl[nyiklbrbfvreipanby]flesvbofrdsclfvm[zghcpgxoauylwmlzfl]vwotzewzjzpyccl
+pjrbmasdillqwdkjfni[lalstrvjalnttmwr]xbezkjpklkrnlpzjjn[wbpwhbukoixcfsqnu]xknhkqjktuybkfnz
+ykvyxzavfcirelraq[itraxkxjwslzkxkigcm]ndbwcybrgayecrpjao
+jqwujyllrskoetkbz[akunxyvvaxrysiygb]ynqqotupdoqbfwncn[yyszfaxjmgqmwxrvdx]zeacfwrreohtnzvobhj
+fsfgewroujqwaek[mryrrkeqgtpibzn]vlmavzfvsadxbdiph[tdlovgncglhaoqafic]ziupjyryletstrull
+fosmjgkqrqvjjigrtf[ejrefcyognxkuvlwl]bzhpufedodqwsztzng[rgxidklqahcldewgfrl]eodokojqopkrrhfpmmf[yqwaeuztmjkelpwlj]zijgacsyrbtwkxh
+cehnutkhbzhfouyk[pdiacmcgcdpmsvgvkmp]uaslakppkycqbzn[ldbaomdftjcnpasl]fgdrrrzumavxzlojm[iyknsyaoypsbqicx]ggtbqnjftvmqkmiu
+nmezigjskmagkzcsyhb[rfrggycsxoxxnxrhyb]zjlrnpgxzgljzfw[ztdnrdocidkgbqmmqa]hnuqryossbzlfaivij[dkaufcpwgzsxztpqsk]tzkdznvnizjtbrnqosj
+zcdfhyoyrbwonet[otdhxcbmwxzgoyoo]kbkvqasgmhmuynqth
+wajbfmurouvueehl[dvyueqwzbqcpdvbjfr]vkujmhhlqbdaqcsvomz[wlekuxdiumhnwms]yzgtuwxfirpmllcek[tzipbxbzpxcvzxzmtr]tynktoelqfhedvavge
+hueffzriwkhilam[zheswsymmryugjawlxy]rptwswnecdpsdjujnt[rjyipvpqzbnvtugvi]xkicvyasotmrxvqj
+rqbhugeaozfjbqm[blpvbvcvrytbekhjfo]twsrzdeuojhqpaa
+fymuqqbklufqakg[wfsqzzrvdqcubxbdr]yzvdgnwitopzvtha[vhrdzzbmubhgovut]tfkcybfbdsxbxaxnmm[ruvfmuciecbfoxbummm]ysaeetmynjhyegk
+koqhuxoxhzmsycbr[vbpklymhqueodieomz]jmstuovitaskfbay[mpccjuzuqwkhvnzlbl]jvdqgfkbyzaaeaxjfcl
+sbryyigqipvwczxty[ypjxmlzyfjkfqxyxibv]ktqvnmbdtykqyiu
+vivvjcfrqdbkyopqjdd[wkpuxloudonlcsutb]wpcbavtlbxcojarsj[wxihbnghmpfppwqlykz]dpyadzmpvgwtjoiz[jgagjiqugqvjnehajcv]tvrrkzjwwxaswbaz
+tkpkdqijrxmpddkkau[yljmixrzauogowt]yngihfgazktusprrt[ggqtnksekzzypkpud]rxvvuhfakfcxjieaa[spuvyobjexcgobltmk]radfcjxnsgsntezrerl
+hywcvnclwvvcmkdk[teiryduhljxirhrjbt]brkfilaybgtdkdh[zjqmovlmzogwvfmmi]czmtshoirukgjgeug
+sdbxirgqauygushqq[itvwniqwuzmpzqbuug]dnrxseaisdgklwodsgq[euqpdyvpyncxocy]ggchswamymfpxaiap
+nzteyxnakzfebtcszx[uctynyhtavkzfcudvke]uasdfpeleelxacxq[kyqsinbcwbvlrmr]zelddmnaqlkhmbsw
+ttzhosgzkuxfwsy[carsvskefzrusoihqw]qiuobbcgndqqukuvbmp
+wihzjoazedelgsojb[ftgarhsuahimrocy]umttbzcrvgzroprh
+itojzylgycblvbao[xgmeltpmzvzvyfnso]kuohqnawebyjdrerwty[oslthgekjbgpsnkyk]jifnogopgpnkfdrwi
+nvyowfknauliiht[tskhxdgvaggvgsbk]blgylrovweecglu
+hvzpbfqqlwjennnj[vnmqrqlfiqeqdmg]hfofuvqicttlcxka[ievkgdwazpamrdzz]aoofvzixtqamcvhbh
+yuxckarjmwgyvqjl[nvlegkojdyybpty]hvkrieawbpkcjit[tewpyncidhvdtomjq]dtgggmzwogtyoxrepi
+jobfkxxyhcfvetxwuc[nreuagzglpniuwkvui]seztmibtqvrdepqyt[skrxasyhbotymilzgzr]jnhqwvcpirmpnltnyn
+hoqhdburqwecnzksmd[gnegphjoyuvflxlujbs]zhuvrcztcfgorbwuc[pjxxfqyqmnhyopaeh]ewbvxrexhvdawazw[kbngpgqwtgkzuwupwj]kmatbuqigzqrzmbq
+ltjrhusfbjbciixg[swlhqxnykjxumuifqdd]romkzpszqgaflgbjpsp[lbaqcvazaucueltnp]wovkfmiuwjdqxovf[vuundonjprqrxakp]wxeulnkckdufqjy
+xkdmgtutsfumpzteeh[yvkilakqbawvedm]dwwaexrzzsyjpzsn[pxitznlnnvnjyrs]kcnhpbkzicorrgncowu[ogyvmiykolbwdtv]vjaksxdrtpuuyykihe
+eyzjheolvkemumxpo[ipwxnrhyldvgewl]zbrzwobnthndxxvthe[gkfleabqwkpjxbtdlt]wywjazwwxwmuqkpwj[omgsyntzcnhjvsu]asknyjsgbofzyfte
+kxxpalmmgdqwahfxs[zwafxcjjypzibafhrag]qfnbakvxozjqgbnnizp[bqhtnoqzctknrmmh]zvmyctoitshakgx[dzatbhonulhknbio]eufzjykwmqoignzm
+beenkdmzqibirws[majntndkzawkbfpi]biygjiawnioazizbt[yonbljzgueyiuirtv]umjmhspfocrpobmrfu[dwegjekvrmgoaqc]dorpbifeqhmtglavx
+sstlfeielfmztngzpbl[alzfrbyqiqangbkwi]qcomrirvulgipuk[mdvsghpkpisxplgit]aykwuhadobubmrdtvvj[pqdycsmawculwsz]oemcgayshwppgbwanxk
+qwhfnqzudzysqxwebj[nhsrdvugubbtuuseux]etcjsefcsjblcjgshh
+cgagbjtoxvwwqonb[crbqhpfajsdwtudybm]dquyiuqtarcupaeujhk
+qjsqqlgdczcqarhftri[rchwsuodsdofjpd]mrpwnlqgetejijnwnr[lwusdojqkioapaxwc]ioumfyxtwspuyztz[dgncyjfldlapoasebgz]raelsaeajwuhnabrgw
+tihnitxxkxjvudnrj[neqbqspcfnldrna]qkkcggwjgejtbmggemx[ffhkzdeopnhrdfpbrfn]rucxwfyfiavskfahg
+zralvoiqdvpvjkkf[ttvdslqoxnlvnyyskq]joucwcxixdqsagu[tulodbmorpbjnzz]qkknyrgruwgrgupgb
+fgfaohmvjameqyl[riumppkgphbaziwbfcn]gspevtjsfjazlolblh[sueqarjummrmwdgzsr]szmltztnwpqshlr
+lgcudszwvsooaxhuz[wpnexmkikdsfquxleu]icefstmmxwsrzqoiki
+elrybwwbktbemldjqeu[moigtqyrbfwcdtjkm]cfquoomooaqrsuomty
+rihnsvwngkabincos[hrafbjoluwrkoaqb]genyvelnsrwqpljgdf[ytnarqybnwaeawssx]bdhppadoofmwwbcbl[acnqxbqukongbge]tptnvsrcborwgumweyb
+sesxnxaikeytqds[groytsrabjvakklwp]jzexhtzpseseauk[sdndnglavrmhzyjdh]mpsxlaxqnazayppc
+ozkfwwrdoftbpnqwa[mvzpilxwrdeszungggo]fbjxevczxrypzzegxmv[zvzaovlhirczrlwnvk]yulsjotokxaurjibuk[hygvqlsqfygujup]ijtuoskhnrvxmmnety
+ssoavardlqlejqfndz[emljlpogavcsyvavr]izdkqsihedwjaxva
+wixidnoyhmsiuzwbm[jgqpnkzbobknrufgif]yaarbsalkqgscyv
+hgcggfqnkhbjlhhipc[cgcrrzyspqlllhee]czfvtkjhfgnrwwua
+ggnsczivqxwhungxmb[foslhzlzqyhcwepvhga]qgqnwrpvfjilhnttbv[uhuhvuqwbxsjxqbmqfs]pvwkiufdudmyabq[ffqrrfjgkmegfls]pvuflwvnbnllckrmdas
+llelndaczjibswzoaen[dzvunuujhpmgqdyond]slkfwoyxpgohhelexsl[hvtucjohyvbuihbonup]mwatlwbwxntozpiymy
+epjldiafxyinaljee[zfgytlqlzoaauszrn]gvyukiahumemeqnsy
+vldhkwyfpfssriaiwe[yuluhcsjdkyumyhnd]wggzcfalpkmnsudzr[qisyeltbpzmkvqr]kmbnsrdjgspckgmwfj
+qkxpyonwbsteomlyhxz[wdkzqjywdsbiccr]ojkvswlubvbbskvnbdw[ejvtytntukhcuuad]hspfdjitkfetytyb[hlgziyjqrulvyaoco]rfhwusvjmkzkpmjvrm
+lnmjprwzvaboyyobux[lncninvpqfpuaswssjs]vodhkkndlvixtbsdfph[gdufsyhihlynxuluvx]oyczgnpmusuvligf[jqtdbytmuyavcyfaia]mcdloputyodiezffqpd
+awulgpuvbkountidkgx[rzatlqccygoyamniyaw]zmkfnkaiuzjgdsxd[dornnqierejrlxbitfn]qyhlxykziurpdxpz[fjaesxiowwxjvoxzq]oujzxyreqtbosriwkl
+hcycycsytqzpijy[pptcwgiggnlhewdwfa]aqrsokplrsmbzzovz
+szlezpesytqglub[hlmouktdjtcglvvb]wgcrjqyvabgnnirxs[cafdqrjgmugvsjarx]uomjcavfgggsyknjge[syhraisenfpvlekk]voyezwktjlqoirx
+ltjosfxwsqmgdrnpyav[revxajvfbpuqqscgxb]pnjpsoikmxwrpbk[frqghuqvbomoddukohb]egfbhndnpnlxjhyv
+ydyzmmgkrvbycjgeheq[xmrcsrshrtogjfez]vberqebkqhindvsj
+usczwnycqbxdrcfr[papmzhuxspnfexyr]pwsybmexcdgfztkc[jmiatnbqkxmarkaeer]whejsdpzzxkdxgwm
+vfiswfowhnwcuusmd[dhhjzfujepawktlh]quzyrwoerrtncnnxup[ekhrriqhoudhiwiju]exzcmnyrtbnxlchf
+fmobpaevmkephhfuu[pjbpnzxkqpvoafxj]ickqqwfifesukyx[uzfultsftvuzbipz]jgvjewotmlkzqhvvc[fhfgcekzgmgxosyuac]gwbmgqtvkhyqidnehhy
+zbwadipvxkyqwsaassl[wcojcviexybrfhdfc]euliyskdckqzozfnlpn[fsvqspcvigzxlzya]vzabwryzpqlmvns
+wavahkemgrtwnvbocse[hnzvxqcxzisfehcy]mqvssniqlwekgowu[cusnrkcbwuichekh]cfvncmjjykeaufknu
+wvtptjerlrfvtbywes[ciopqzpfjdoclfyxxqy]sleyhkequxorssls[weyxuuiigtkjsmnugij]onxiowvkwaaycpv
+csanwgypabdqhiinan[gujzhrxowlgejtk]mkczaemurigewvqw[lsqtuuxcsuphogl]acfqrkiewfykgnx
+ennvxqkaqdppzmj[litdmoukvydtepvji]hfuqcwyuufmxcxy[bilbdvnquchtcjquymu]yjndoqqpyzrjudd
+vhkrlicuffddtktngy[opctcwvtlypwglpaoi]iscxtzlmlkjdgty[xadnwdasnszzmwwid]uijlqxpfgkkcmwga[ykqorpoxpbjkepibk]dmuojdumobwfmkvqg
+wgcihfnjvadtczgqbj[psdtqjwifivgbhp]ocykhmjfvbppiltqpvv[ermpbuyieexqujuiji]vjioxemsjslsdxso[bmsocpaehaeadsaqzbm]hqlzlnedzwgbxbcacf
+reesvrozyerxeid[ymtiurpepvrvnkf]thobixnwiqrdkih[uipdwllkuudcydjinew]lzpxeltetaixzfjxvf[ewlhchkdiewigxy]wfeiqnngnifjzbpikb
+rxgukabwlgxzaxjxch[ljrblzdmvcwcxdoomq]ksidvuwcwvwlvrpe[yrnyjokakcbwdxh]nertnqwigrzbtdmj[gxbsdsdmishqjeswt]dsgnhlagonywspbr
+jjdfvvurvfljscocvr[ueywpzuumfihiocoe]lmcrxdlkqsouhpimc
+qgelmqtmcfsdugg[jpbrzcblivebxazpamj]jpkxrusyqkjnndao[nqcxhhmkpfgrcwhsoyr]wvigixehqklwvrscmz[xutrclaofzczcvfnxll]xsyxrvfnovmohxfbt
+aqhrsqbyxtxhsvmnz[pfpclhprjghikyngp]krgiznxuehpzeiy
+trqnrkulbvipvmj[mgsdnaqnayymjyp]otecdnzhhcufrly
+illmnsgqusbqybiso[fxddafnnoholnqjotb]uplvjosscbyhwmw[jsedsarqbralzbjmyq]sdwkyeychcdpqvfup
+zehmutjhkodiqpi[usuretqrbmggvlvr]dewkdjmtingkzuyq[pmmbbozcvplhejh]jzasjfqvsusgnkfegad
+ljpcpqtpcpcdttjo[qbmnhadshlheoavsbxi]wnwuahdcagpellgs
+ayqxaqtrqzbxyhu[wkplzaetynfxqzhtkco]jpgbztbvmojlflc[ojmgjvfxdvlyzih]levvkelkzftbzwzkow[fmszxqchzjhxtwfm]vihmoqcosarkzsad
+nigshquyfjlleujdtw[qmiqiabzqiqafambcv]ywbltgpjxcwlkyahg
+vmgyovkavazsxwed[anpflkjsqieufhscn]uizulvgasvsstuhfn[ygxgsfldybdnsleqy]tztuatotreocsrfevpy[yxqmsidajmknyrae]whoydkufyieuqhmqv
+jyhhfbftixtntuozgfl[ffrzhxpaezbspndbo]sbwvaoziercfpmeo[tzeluvflupgartnyjes]gqfmzvmpieczbjdsr[zeenwxfhhxbdgjkr]ojqxbcxciclzwthvqyv
+olhruodhjmaicslbgw[upvujuuazyolckot]gcwfjukdneuxqreeg[tnnnlficumlgwkdsxus]pxrxdntakudobpo
+vdowqzktnmpimsvok[gggjvxecgicglrkuvfb]xtsuhbzqpovnoqhnbs
+hxvziijhffbzjnjvgoc[sealjvjgnjnkzac]neuhdwcgtjcvpku
+qryaqhtnjvickffebwj[hcgzffksmwbqqdm]zrwihiolnfuqzqpkxn
+egbqexgeqnqsaxdi[xghkrttlbmkxgfj]rpulxldvweijplm[dldqxbqxenksncnwhxo]steqcncxfskqcfwfnbm
+dhusxmzjdacdrqor[tzblogyadgggzbi]vssexeogwduosdoeo[xexqnjrctzlbkfri]dqppelyoecnnacs
+tkrkjtgdhxdcyapamp[gvyyiztulksqxosp]voudpakpaphmrlebpj[vghkfcrqexfgoguvbxv]yronkwfpvrwilnuegkb
+yiuhvglusvqtzvngzuc[mfvcrgjuywuthtprxe]vjrrmtbyppmesvorp[ucqdvtwolrvpjyhiolf]eazedskopeknjcqx
+segabhonjryukdicj[zvjqilxyvwjnjgjvrnf]gxibvkxslgkpfdhsn[tlbwwiypungvwcvwngx]hhgglxqosunhdvgr[mrjgltlfxwsznpnmdox]bqsgftffsibfruyz
+hrtiuksavtjzekgf[vaagjkvweeznlshs]ntotbakgpxpcmqanhab[pqvkabybndisouur]cnjoxldhauoppnqqk
+yizxcouxlbjqbijqmj[kkqvlcusdkmkbmuia]pidiunjwlkapojzzmf
+dfzinzasgtnjdbdh[wyguangjweruyqm]jfpqpyqydvbdtgqpqt[eryvzkaxiahxekwbp]sywpjhgufixvhljk
+jkmabkiiltlvopaxec[utofhywhxjucodwke]dwxatuzwebnyulyt[iajptbioysozunsws]nmfnmtguoqipjmigsyn
+yxletutyrgisbrm[ljtuifjmgxupgerhuhb]wpqnfedngiollocqbfh
+zszqqoahkvdvpezddea[defewzqptytvhnpzcdu]cxuavzeyqysdynnr[gvmfnqnjwrjrjzphei]pelrqmmykeiamnh[jrjqavultdjecnghoc]ekxawogufyfdmltveqf
+morsvbgrpgqiqeplgg[giswwkjoxkgkbonav]lyhrrcwskwjjflawgs[ogjazoccoomohhalb]gjnkzumbxtojtud
+gtgotbovcctgtwwc[owthnyvlmcwnctlkilj]eytxalpmzywmwqc
+ikznlwbayqdbhusm[iqstwodfolztyldh]amvvpwqwlswcnut
+kumjpojktwxazwtg[idtisckrbetbaye]mgqtwjxlbdpadrnxg[eourfrbwgoeoqrlvhv]gegegzbxfyzpbij
+mxcepmkacvzxddcpnsf[jviddcgbglreegewbj]qmqdhescnuuswkhpvxn
+ltsouowwsvovkbie[huwwuaptbopxsixrb]skscogxrektbbmuwqu[niaczcnnxkymnnuu]sfczdkldegoynqw[mrjssleiutncang]jkfgyuzcaisvrjekiwe
+mfqowsxqmywlvauv[fziifhafjuiwdizvm]gmaxzryznwavsaxsv
+okmehkbnqsegqinj[dxddmmglnqftiunfuea]todmrlalqdfqfkbq[vrktligspzyclnfz]jwdvkpuvhpwffrnyxw
+mybozskxkccdsuuptc[mrlkqwbdhhktuxpzjxi]xrujoxxkxwqcthydsw
+jupphmpmynzxsfkr[xhvcemrobysjizesgs]ijjlrwbpchbbiblvr
+vpabzrcqfzsejjgln[segfzwfyprsfqskhop]gksthicdjyagobs
+tuhzaznrumhuwud[szqusyzaykegklbcdoo]prwjxzrwyrgcouehrg
+dfvbjgrshvnvfumqxh[tgnhpzveumwngrnoc]qpntyvcxxoofgsk[jibdpycgwklugip]mgkzhcifwyzxsbuwj
+mbdpghflpcondfk[ftzfdsbexmnznqqmfaa]xznzgqjdfkmjzvwni
+ojjaanxihagtezp[pxqpdgygyklexhrpc]lapqmhronwsmwbbf[rzuhtemugsniacn]apixdvsnjpsplmjwvn[iwdpiqgoztjamenyyw]zjyidlwjbvevovgf
+pijmbdkeyhcjzuwclu[onazufaoibbwzepmbr]jhjaqudvrdoqcvobs[lrwjikvojmgdtkwb]gfxgoeihxughdfbetm[yjhxesdcdudwszwv]hgfdxuejwfuedpdu
+hvdutkvozvxwpvx[beubpipzuwaclrev]lqeylkxqdqmcdqd[oivjrkpjzrjywzrxely]dcupjtbrltnguho
+esrepqjymnodspvjib[kwdoleplnoxmntjuip]lvrhqceegktadibgh[yfbqpomfldnbpxsaoan]cheitjzmqwdbilm
+oakpwuuoizfcsfo[csxawuixxvzzooah]dafrurtufjpuetnui
+jmmekugaastsvdn[qoasgnykbkodsgt]lmfvbqomdghvicry
+hqznrdvlwnamiushnou[iufqiqjtaiejfqwns]xsgjmqqsvbctpwqcgz[mvpdchozogazbfywqd]iqimztlwajwbxhr
+gkeetoqftvsdjhhghre[nspwxohslbgkpyyhdh]glknqkzyfmvjczau[zrzurqfppidpckhmxu]rtawnnjhyjnbvnt[deisyafkjnxtcjas]cshchafpoiqptus
+jpkjyjiucudsgjz[mppiltmurhwxvmv]sdhrapccelecuctxq[cnwlmuvyistotoykn]hjzxzneifkwmvumg
+uvzuxzcnipyfyuesvna[ckplomuathpfkndodxk]vrqhbliixmzbefuh
+ionmypunjczxhry[bvgmqzohimrjmijzkwz]qfzsokgukugmeso[uarvxrewouktpgnghtq]rsnccdtstsegeoudngq[hkvkymbbgdyncilyf]zteoiyacrtwykwzbxy
+jnyydhrsrkeujfvj[qmxzqkbwizhvcztzdqr]yllidgevuektldszzjy
+nuylrchiwpfvhdumyet[hfgfzmeldvotgtxqh]frzcopyhigfewcnb
+sdcvojpgatiidjvfy[zhvymqejqxllelyux]ektbysjcypxfjrsor[kgfvqbereoskymyfp]izmdymjhwwtelesjr
+xnelfgdpnrfhdombqq[oiidietkplqnygwsgo]jiltmfqqavrjrvyui
+zyuubhwaovcbnaxrmtv[yefoksxqkrkbmbm]ainfhyuonvdvcyegy[nntnxqkqdqattwt]tcrtyqjhokntxcb
+hxkbhdfwcraxhdcff[umxxccphsddzavdqn]zsmmtgneghqsrwfauw
+kbdughqnourxomuiab[xcjayouykostteh]enwbjtpxpyzaeuhuwb
+cpmzhwxdntahvhl[diddnwirsnqchwr]etsizyoarkawzrpfidi
+xrruvcmbmigmutacwc[owhorlqlgqujvhos]iddgaukpxlielcko[gawcwcvuviuohmda]bfdceclnseehdeyxv
+vlxaputciirctva[qgmwpinixdixaiut]kkoousbfcxganzcffg[cikwetvrztjgefpzsks]jrsyfxydznmupwapco[ooydsykpjwakdep]krlytknowykzzqaafou
+dnnvcszortmitfv[sbnurvnwxwmvbdpawa]ewayhapxdfxplpqudro
+fsiehjchtnyenvmjfw[obnlguwjqsgylwveak]hupypbuggmbkeqxt[ljxbmifxgorvriaj]tkttmzairwztsmn
+pnhgjwzyqnjrkkw[ofyifgmztnzelptkwho]cgnlnrfdgfgjvztpz[wemrlhyskboycpdbzr]azikmfaudvrdhvfvt[chxmcbgineaycjiwy]kjbfttnqgqhkefoolo
+khdlanelfapgxqpspe[alrgipfwfdyguqtk]coxffjtxpbqmxig
+sxobbewirkvducqxd[ubfbqjccnbtkwpbxqpg]hgsswdjiudnvmvijt
+jzbqaqfubdsfinobsdu[rojkizavtvueepedxw]lcsyjeoyieqjcim[nszibgczunpslecxo]louacmgeotayemh[zvpjwwpeyjjdhjc]jidkptxmhccryujojap
+rrofkfoljuossrced[ymvijcmdvrzhcyh]zegkwrmeneexpcnrh
+eniwjwjnmgyzescoz[semlscmtbagknxpbvte]ysqfgrshborwtgnwtr[bossxfqcyadppdflbr]pyiuttfsuegwjwcxzr[yaymomeitxwdfvsr]elhifdegwfstqyniqta
+xauanaojjnhdgcpuwwj[ccitjseyrwjqvaljv]ebbwxnquaqlhgqjsgwc[jybietxintbtpzncpw]wfkwxwffzxwqucjhyvs
+ipmxdranyxbmwlo[ueimjvadwbdjithwn]ifmvlcsneopyffsums[ejornegszbqxtosc]iucimozjnkqkeysden[vvtdfnvjnzqbxujml]klrpisgrmdbrqbupc
+evolkocwyejqtcazj[dzleqjleocyexjivik]zmvqrxiqhsjtoezm[sskndhlmxrucdyqvop]murrraduofedtltbtg[kuzqpodvwnewwqdil]otvalnjnbexltsbitwi
+ppqnetrairzkzlt[hyydyimhgzayzgnxqn]lwubwuvowsyovjjfgp[xbzmifaqcmpyuev]wtgcnccsysrfvbtb
+jpecpgdrvunkjfrp[eevsiosfybfgdgalp]veprfliqlxmoctjx[bcfelthvqqxthqwpuoz]beufleuquitnnsti[aslupsydyktxgqsolq]gctlsoauflrjprdn
+yekfawwakhkqvpqf[cvenkdpepuyimstwmnz]fphlenyhtsxxeyst[yohciybbsiokzajcwlz]vtqcjngqpamsvrchix
+ougrpfmoohiymnx[gorlgyciageugmcbony]ozmvirifntorlvzz[klsgbagukrnbyzsez]rdzhlkpoucggkcdqm
+gfhrcutoyproiww[nzgfaaccfrgdbcg]fcrtnobfhhyzmadxjv[vlbueztcxkkbufljse]gqpnxtlrrhclwuaj[sstrllihglystknh]alxmlywxfjwnynbwfk
+opeacxklhjwcefmwrwg[mzqwxyfltfqyepcgnym]cpziqpjettzcnktrqi[mbnwwhyxebbececc]tdkduejetkrqwoxrsoq[ncenzwgjnekbobv]yxhgzizqxwaihedda
+svatyxdgfofrrkiksjf[mxmrficzxfyykqekorr]qojleucutcqxqryi
+prrhfrigzcmemou[zkhokevqzcspzoyt]tytqcpuucppiwio[mogedxwsflwocpkdh]kkqnructlslbaked[sslztcwiwkudgtji]djssvabrpmygljeh
+btundrdlcsgtilltpue[jiunnaqqzfgxauqjes]wtdxsfqroorcghqk[qvyzuidvkzmomfi]cgckuokezrtxrgdlo
+tjcpdjzfllhwugiy[vxypwowarlatqjlwq]wnpwefpgpfcqqwwrsq
+zfduowqkrccccgggmbl[iwwfgrhmjxgljwqf]cminvjjyetivkvhvkdy[ismlcjjywxxvaehvhhm]eojlvocbfkftjkapzs
+hzkrcmpwhfnbwlisg[wxwoegwncugpcfwywxe]voktthitecybcfpnz
+dcsrtgkbstmkwlzy[pcnwmgmcmpsiyizqx]pzjcivraubvgbkdahk[yydvhvyumdzfmjuso]bfljbkwodikjenu[toxagxhnvgkwcivpcuc]sanysdrigussqum
+lpcxkqrspacyzrqhbhr[vdcbkamwyjnxpgjpm]afxbzzxzrtaacbypq[ftbpiplrdrreqesthw]tidlvfojrlctjkfel[iibzklhicpqjvzrnza]bmekkyjigxxtegqbait
+duchvjohwoouxgmmxds[qscgkenygikbdrsqc]iovrgoggtgiebylbu[iqqrytrhujzcywwq]ybgfnnhqwfpfios[dryqypecmskrqux]klqhpvydovzggsqo
+gwgojmuthbgcalzvdxh[njicnwbqdckxtyxkj]rwyptcssdkdqthiydea
+yokzqvwcycvjgouoyw[starlvyjnijeacjseo]iehvlergdbswibmzci[ppmriizuqubzfehcz]jartjkmqzngigjvl[izpxafhxdmckrcuufu]pvkldotwdzdluoubpnm
+rogyxrgfqivkovtna[xtahrogngfeygkasq]kpcpvtirxettedux[cdlnciogkcsaras]bupwazalrmfnjufn
+eaeubxmpmymzrfleut[eharpivgddyokps]wimaximeayrixnts[paysmyvjuzpjjqr]fcqykmkzbcbyrpy
+exvlqvnfmpkxfjwbhol[utjaefsandulqaw]xjrjchxifscadbld[ifrckhdhmptybkhrj]ykcqgygngiwzzyfnxg[plfhikkzndknbpdeeu]siwtfnlbcxuqkrhwj
+ljihefaqagbmffbcr[ccmafzhpsvluglwsgh]jioaeefkgujinzlgn
+rgysyaquiuyvtojxnaj[gcygzkwqdebiqsr]icaeuutjodsizqzfvj[qapmsqsaoniuinsz]ppgtfxsblzgtqtaiiey[xlkzyyvcgyhlmvnzrpr]htorgwwkbhasrsbvemq
+coiurrjhxxkcplh[nkusmllwtsuddqasyc]vyxzujqohjyctyv
+briulribegnliapcimw[rgawfayyoopbosvc]owgryasogyewgxchxgr
+smseegsurmfktgmefhw[paopyayrwykwdvcjjhp]byayaatpurrllyzd
+mvgbtjdigbhhywarz[pfrhqtizabthnqrvvw]azdztfkkfizbxsy[jozzjtzkscklmdt]ucnptpblgcgmkeojpl[nqsybfqdphdncqgigis]yecpixjgagdgkbz
+zyuzikehgrfaztne[oaxgeczbaafnottqg]kuuggppqtgrncptm[tcfnyqvqcijfcfdljh]pwntuaixpqfvyoatk[mowgvynrpbvmqlpucq]vgopzmyigjbqlismti
+ostutlkruoevsjr[qnvqsxlasjyrdyyz]klwvhuhmvgrlcdy[tycmevukacjlveu]mvxcfqojmrijbubfm[rbodtpwkkidfrnhayj]jsbgdcwbfdfflvupn
+eaiframmiukbcixxi[bmqaglfamrqoswuhme]lxvkwmzgauwmabu[kxusdngtifhpmplxl]sfccogjqnblrahch
+hcjmrcnzrhznwvtjby[lxmehjbnudevzmhx]ukfmdplzriyztnioty[lqjesrsxjozxcgfaknm]qifmjftfaswtrjblzf
+xmhpeigrzvrgknc[drornrcakzujdrsbrvj]czapwkwkwwnkwks
+sfdyqdpsfcxebamsf[vehdpjffaqhytqhhbi]urolmsuobvbecvcnv[toagfgryhwfgfwxmvs]btjwiwdrxnpzxlxdsdi
+gnjmrczrqiryaodop[etlqbnstgjysesf]ggmbohbzrtfbapbjg
+wwkqbdcmlkfwxwdu[firsfuftyxwxpcicu]cntzxuydyjkgkkfvdl
+cvcsgxflnidiwtvy[hhzzbmygwugzsfnus]evzlovhsgqumejki[btikqitubnwzkhfyhh]xwxvlgyojlmkwljv
+bzuxzgeuobcctajvva[lpqpidtuzmrrnnlgkqu]lhyxsevugkrdimm[umbmngadfcujqpqr]nizwephuepdykbgj[hfheiymxxfgyxyl]zlurubnhkwxdrwllatg
+gkwahvrljkerohucrty[lgxqhorgrscmkjqcziq]otxkbzuzncbznvr
+hpoehzfotnjpnhl[yrkyqbolznetbgxmy]fblwkhzfebmzavscyyl[lxvxgdkjvtoxjpu]oetusxkoxlpceierbt[faylwjcdxicxbqr]ledknznfnaiaovejww
+xifdyajgrrrhakdqhg[qtzmwfjraqbrwstiibr]juciognmzyafmai[lgbmgoxqtjngqpqkwt]zzkhrunuborvoajlvul
+ekecthrkwdbjhsy[klxbdnucasemwhlpjj]jbvenwrnvynlfyjybm[zgfxxurrduhtlmsbelf]lxuxlahnrqvjssffj[wzcpjiesgsbwbtnlrs]sofzsskbviyfvlo
+jscqvqqdwvkvrqcb[vzfqbgopfnjcekjs]dmspregwlklxptp[lsxjobfksvzwshdre]yqfwrvjrykinzeon
+rbtqjtepvufhwpjugj[vkdhjmfkeocnauedxp]vpoqmfpnmjdpcxw
+ihhaztfuasflyghkndl[vseslcbeufhmrpyfqb]mtcgpfjhjeowjpqc[cabeopcrmhjhudob]fgeutfapismkdwqxmal[wldzeajldxlxpwfrb]rvyuojjnauuitoofgcm
+ixrzwptyltfshve[xwlsfazypzeuauxpozt]nwfgkbpuxeauadrgbbm
+vppgbcdybisarvokztx[yuykfmzxbgfwzdohup]vlkdreyqjihmdksxih[iysfrpczrirzbeirih]czkbhrqlrovfkmlu
+iaatwbohmiosyiqfq[imajfecefyujhwg]aanaybxebrfpdfxxpgw
+qgomsuglksqobwhaq[fzcrputgufyvnesoqwe]ipziztlrfmlaizts[pulgtrdydqegbymu]pxcyeozdofdghkmst
+tlxidzqdeqchemiqdsm[hacfdsanbiffzhilct]jtclxgjapfmwhlkn[ieafoftblueqcped]lauckblqborgtjnj
+upkkaykvxwvkgwgztzp[jmotfixnvoqrpwsci]wszntutpsjljzmwqpgp[dbnlosuwazvekoplb]bmobthbbmitprffl[qkjfwmsronqjmylzcre]yaulmyfoixmkgjs
+zxxsmidmqxjigkbos[iwsufumylphrhyx]uqmpbcxmvhzuppxqopf[ykipifsdwkpzgmt]zzcwzmwugdzckey
+ciakjtvtrkgrxvp[yhxuyhyxwytquzxujw]lrxibndatfiqyltehl[nnadhofokmcutiyc]vosxtisllkweiaapagg[vwniutthbrvmqrvik]aixaxvddxrdnmmt
+mbjsskcvljlehsxc[cknzgxghehlmats]eqknrogpyfcmtfhso
+lcbrfrsccsbhyhurc[mheohludmokwwjx]bezowkrdzwhssgbvydq[kiwqvuebvywyegmdyy]ioskcrvqcagocnnh[zgttakbraxpcsqsc]hmmqufyflbmjlcciqvn
+ezmqplezxylckxcqjxn[pdzarngoyfbjgyxqxgt]yokricbfoocmehi[cffrwwrwhmilnyf]uaybztxphgccfuu
+xnjslvbmmapiwwpq[qmuxemavopeoiwnebts]xmrajpgpgeojtabumm[tbjjrgipnfzjafi]hcuirvleolclticur
+eltfnqblogwvtjgni[bjfxnnmgalahvpdtvku]eingohwswwabsbtb[nxsqsvleqobfpxlaxj]gfsbsvcbbnwtuktuw[wrgcswhmdtssvxobcu]wgsniklaxmadgnjd
+kxpuygixzfwrwzpzsbw[uqxqvvupyvvajkcysh]scshpiffohigsgm
+ovchugxbmthhhijq[fznmygfcqewzomfgbc]qczlousnoccgyrgs
+imtfinjttxvhtcll[xiqmbmrcqdxlvuf]pybqlwqezwrkvikns[usjydesemedszquseso]fhcgyicfbdrmgcnk
+aqnavkllyitzewgs[cbbqmbtgufuvcun]iugpkakfufksfitigk[lyqiierbjucxbvaux]szbwsttayzipkcdb
+yetucqvgffnvnxqx[pvgczfwkehnfqxawz]vfxegwcevafevvzx[ukcwxvnvfnqvxhfa]bdciuylrvfkmxyi
+yvachrqguvjhkrbe[rtlpuvvfdvmtqswiln]jcyqjdmtzndhrif
+rphybwiwiszwkkxm[waiaqtuthjgfgag]ttlnqhzfagaregyo
+unsmoewlzxuguuwu[dyqsnohyqcommmmov]jipyewobyjdzkgkgo[yphyanakgkgvybsx]pjtzynsvtltzzajc[iweuafprefmbuekk]rwelzzbkbqjwjrw
+kluxazqhqmcrvldfv[dbxzgwsfmxettwmgj]rgvfmxibxzbajitnud[vtlbsgrkhnfpmvvkp]pdycyraaqooszqa[eyliotjigekmtov]eiopplzmedvdvmwt
+mlozzkwmfcrdlvns[wsdduzxzfvlvldpjvgg]ywqncwocnslofij[sakivxaniergaouc]nzmhdlkxeiehdpuok[zfwtadjlizjcauurkq]vlvtdicnyhseqbeo
+ssfmkfdeguuaqdbyqub[nbobgowoboytefejnz]fplpuipnficejfsuid
+lljnuuistrsmsjazzy[vccsskujvdwxypuk]jhqjqhfatmuedugl[hufmsmgjutabctabusw]zcoiiovxkxtualjx[zdxdbmbibryrqaubxy]tyayojdxepcpmwi
+zursgksbdkuzemouhl[sekbvoxwlmumyrdh]yxafewnovnxivyp[ajjditfeeocipuvdl]ygsuxuhtqervumd
+suxzfxizhyzbovsz[dtamgkleqiesxemqkgl]vjuviztkxzchergyx[tvazaqnrstjbdts]wccoiceucunjiuus
+gongygcedfxwncy[lxtpoagiqvgiryasha]elmaiygycycdtsclhpf
+pkyqsmcicydbmdagw[ayulcaspxpbtnegeoou]welxvngiualigfefv[veqtcxgkgzveegxckee]djmbhovzjfexqaedywl[okzphpgdqtpicit]mistlyyaoyphetsxqxi
+uwrxhstckbebnlw[yhflbfhsqhshieo]dvmzzqknrjcnwixhgk[upxuqrlwzvvsgpa]bmnfpjynunfbwunupiv[mbcmrpoxtbzcbijmmu]icdxewwtwcibjotjf
+pscqchwjixrhpzprdla[nzfglspgwpsaiph]xtypkrtleiujsfmcso
+llcxlfghzjvyhgill[vtqyiyrwujkovfctkk]arbtetvtixtnyavydg[ozxyyroceqktxhpv]maekylkkwdbgwgug
+bzagcsgcadoffot[demvhzpdjthrniiuvj]nwwrkguuemsdtvspi[sququtlqggtpszucm]pqaqqxpssdgniycn[lkdwrbxkrkiqdxjc]bqngsdxlxxvxdvqww
+wijjgkptnkbnzpqr[zylewxhygsxcrlyi]nanyoaosbxahyvdsett[kojrflwbltrombqxo]lfdpaptujhwfgrrnf[slsmmogpspgpuwnce]sihedfdnqnejevnw
+nutyeltkszkulqpt[cpgdmqleitivdtr]veieyzmfjafragrcht[nzudyhtmpopacznkq]dmywgwmnrieiohcuf[ctbktcgxznhoqoxczzf]bqzffvqraxpjdcvt
+akgmlcznqnhncjknbp[bwdbsrdxqqmaavngjc]cwyygvcrkagmmrciout[nkpzkdmflljxczogs]mqkafcpxslquyrudeui[clvbdgnkrjdpptqwq]cyygmkgtftxvsbbbfgc
+fxlpnkdskynkosqpp[efnouhxslwitteqrtx]xjxojaxrbampbcknga[ugewjlmzbspxhtejamk]nrtflumsbbtkejw
+vzrzmtwbxwfhyjvcmft[wrdvmieyzckycagwma]izyptswwlzgivtgyfd[jaujtzdzregakjk]cjdnelesxnhmgkqsgs[tjcsmxghgtmstejjhb]tzqsgoiospxadncn
+okgjhnzaxrtektb[sleqpxoqckdrsiwi]jzthxxszazdahvhq[mgxzdqnfscpqdoykr]doyvhvnmbshvkcib[jtrsntjktunoxxn]rmejgievrkrxaziux
+fodknkictemsxiicght[tdltamcatgnknki]hzdspvkbgipuvnb
+xhhmaiussrmwaxcpoq[agyegtzmrcgdrqiiv]akuxocgoidnfmkffroz[lkkfnmgryejzyvjh]ozdzcbsfmllaiyclho[vseayejwmotjhccg]qfqchpalcnaweyo
+imdrphyleudnvhc[lzqochrdcjotjojk]cwsqzuwoflalwatlsd[ctefovkyinrjchrwdav]cmnbuqveexpaxmhi
+vckjhzrdtpyynzbdsad[ehjwlyfbffzszrx]aizjcopfbdgrrtei
+vfkpxnrqufijmniu[wnwtwpmgtjonykmcsp]mhehavmuivmxhdelxa[spyybveheykroybw]bfzudojcjhzckbac
+egipucceijeltfoz[jpyjfgsqdywwjillf]kltttxmvrepsures[asbzcnwdqvfkfkiqqs]usnadxpcdxpjnifm
+svsbijigntdtxph[fabzbljmijzwvjlac]kieomhcpodzimrmqoc[xusohhfobyruazi]wxkjzzpskukqjirtjc[iwqdjijjucrslihqpo]faezwwmpfpxenvp
+sbjgcnwomllqwavkviw[pxekvxjtjbgjuouft]puzjbrwmyzsxclgmqsb[vtpnaljnxkgwlryjo]lhqzwvnpkzsdndp
+fyfyvifiocceoozl[dmjxamblfosaizav]smoyhjbuffpgqdl
+tlbdacsdiavtwucvf[npepgjenhdkgfavbn]hvbffufjyehpsoa[xghicdcxptmipfxlz]lvducqyymcqkket
+nuystaihvpelybkvch[rlqyflvholahkcxw]gicdfjzhwwocfejthx[jpeuakotyanntiw]sfsavxuyyulvuluyur[asngaxekprpfzsvxx]rliayxmjvsrnizh
+axquvvjwulrntbzzf[fddxxjwbdaecbsderd]vjtqwpjlhbdhxjoh
+cgeyfvgczhhwbdz[kgsqgnalsysssiyhqp]wqzhbjvykeuyjxgfzgg[mqkzclianfnifjdql]vbeyhsxsfmoeanpnipa[sxmzlhgrezqxsxzzcku]gwmgkijugjwtutmgj
+nnjlbnnasmuhskqu[shbjjccjlumeuigoim]ndwzzmbtazttjpawtzl[cnkpifihvkmsallifij]ccpzfojfxszmytbd[jtcogseximfojmjm]bgdltwjrqciyqfifkh
+pkdqnzhjzcttkackdba[mucwutymaybynvttts]nndhioamrjejmibag[fndcrctykpehoglop]rgxjwrpzlqapjsv
+nccuyvrhzyszqnw[ogdgzsefffyfoenfh]jnqnhnyoyrcnrowjmpv[wmlihztaoyedgkg]vneeegnosrxphish[uwrmezbsmqbxjpx]jgfoinwzlhyixzjzv
+kriqecrnaeujvuzw[lruowheuwnintaqqxcl]kcopdidcqinihhmk
+vxkblgxcmztnphdzf[ysjhxgovujrpagndi]ezgjwgowcdkfcstfhr[hpxrabjwpymyaolp]itcthqpgksvedadl[stfrippovsfrwglisp]eodicmiszqhwnuymlgn
+jznqrbdgjcokdqdlser[xemhfhnwbftgxgjukrf]mhcovplrxcsixrh[xyswalpqqvgsvmqvx]kjeuyxksnmydfkakhq[zcaydzhceioawvrlsm]wzezpqlhvwcgzjzigtn
+vedqtirgwrgutas[eegbxmhgykfrwrwy]pzslegjrbmdmeub
+lespviexybwomljka[dxvrexedlclnaurw]wzevexsobirvepgpmt[rseoofjlimvxwro]cyojbkugwdzjlxsqd
+fsdyxosfmlqfwoqpy[mwypxaxulrbjsfi]ghywyebrmgjsrshgc[lggfwxlpovrwthxtlln]zmtqqhkwabuhvtnabwh
+smsgvpvsfaxhocsyz[hgbjpapisxsillo]qsgxbvoijxlwhxpt
+fyfpxellnptlqfxvdn[hpopfkwhgcbjoze]sopowsrtqgbpysjfz
+qenbpbnrikfrnwpq[nmkndzwogcgtzhm]zhuslfffixielmjaqpb[dtmldnpqizrcbxixto]wpspaoprebgbksq
+vhjgpbgdoeoljigkqde[aqojnqwgpiredyffb]vmlvnnohhbwzouwi[rldlmezoquqcodxghov]bhwnyaxsnyyihhgv[gjjezirrmfvkpvfayb]uaxxuikjcwppslge
+fnwyhfrnoxxjpubwe[rflutoqwauqbztk]tmbmyhpncgpkzcqvv[dgksjzbgbuzlozns]psdmkqjzxdwvllstru
+vnrsujzctbuqnbu[glgsyfmfeuoloohqp]ybhziayoqxsbopf[vtwnbpqxhgsfguztg]xhgvtoqwouusyahedc[zcchxnllferklyt]avgtwloloznygrb
+rojtxmpwxsledhm[xibuxgovbxiejlegyc]xihwoxmzghhwlsthiou[ywkngtjxrhhozglwo]zfncywcurhmsfxxqjbt
+vxoojfqikhnbnrh[trdtiatykaontxlv]xenfwokorxaeweoz[itbylohijtfjgdtmkvc]butficisomglwjzaa
+wkofaduihyxhiyrvjs[deskgjgenvxxxupntfl]ralmugesymrxreommk
+ozsnpcdvkykxguzltcp[caargzwxildtwswp]capkmhbfpfmdegigg[sigilgehfnfxlza]trtpmbccrrkpggioz
+pfuhqwjjgyzbbea[yexwnbudioaikfsqlca]vaobiurftgeglgrzl[thjpurqfzaezqxfajme]seuekovcvvtdmlixf[mknpvkntvdftjhhhfgh]dlgqajapwlgdjnwybp
+jbtzwsypehgrmzeg[gwskjuqbwedzxfcehr]xpkfcuejevonsinxs[upnrxgjqhohlyeyp]dsyhrudzqsibolxnvw
+skjjsxxumbobzsckqk[sqlnqpubrayffzs]hseibigmtjtcgbav[khvlknemnqiekxy]fkzvtfscvoatsfqrd
+dozlslrkuemgbykifp[bzvnluuiqdffwtf]tignkmwpnqrnmefaqm
+ppxwcouehvqfwoenqo[rzmtyyvedmojatvvq]efcstfsjslpqdzvhb[tvmkwnuxestqxfockv]oqskydohbmayshfcihw[pfyulawxqbaiehqvmwi]wluhmctgrkjxqtlmp
+uvqfjimhzqboivo[buuulgcbqgfsbup]wqnbktwxwslvceegi
+muiuadioyfirjks[xviqxaavhdxjkkccmrx]weauetgyttscsfwv[rzgaefcngzklpjqzgeh]jtnbnuuvbnbjhdqn[idjpczmrbomwipkv]vbgcjfvyvnxhdsmycx
+hmdflkjbenjynzdmeqj[ybyntwgyyptizunn]ctijqxbybwarmfzpit
+khhocslzxicmlxk[xssahaneujvceofaiyh]swrjwipkknbnrrrig
+dvjvkhnqyifqzse[myleyunwsupcnfagq]tmtuvqikqxzdskqcgxp[lblzunblboznidegkla]eaqhztxpgjuijohkdru
+mqcasrzjqmhwbhbuyc[wkfahpqjhtwuiybqae]yzfcavhtmzofqww[goqblpzkmfxynuzm]bysjxjeocperndv[uwpxvnpxqhfnaalchm]lyfynynkovtmfsi
+wnczxavmjnfgogv[oyjxcsvrrgtpkponga]gzhjlzgxxjkoklgm[hsrwppehbugkcap]zayfyoqorpxefqenxc[apojyrhryhfnmksa]uwnuxprqfxnkzkhnbji
+iylrycmvbhpowmdvwy[oepptahrmhsoiskeoq]vtqctnyinxvrvlpl
+iauhsxbjgxiebvfhbw[mnjywcztqiajiqxx]iikcygxzeprjwkoniqj[tqycczkvsvlsjetec]mwrnosvszjhmuoiyzxw[klgtgkaxohfaogm]fsxjsgwondgzpdrbbcl
+bfqtwsviccqwndca[juqvrcznrlghmsiz]yttbexwewvvoehurkrv[mkugsxdrbaktcqf]yrqebvyxlcqjwcewg
+ytoteijopgxfmiokatn[oppmfhkktlewhlq]erycfxfafsiicbtx
+xlwbkbenrohodfnmuv[zarnezgnivnmged]vyumskttvpderhzbimc[hvbbjegwdeeqtam]fopblbizbmbhzfsdnzm
+rgmnnwzikyanthhp[nvnhsgdymtjeqzurz]mbqxtvwhpggnbcq[apeorjqexywhszrno]qaxdcaysefnpyviduz
+vjaljdyyoihduumfo[bpufjkyqjvxoprdwrr]ccjbldnkbzezeznmkpu
+yhbnzbxqrvzrguxcbss[unzjeicvhgqtwek]obuccrvnajbvkcmkzh[futhsovnghajatalva]humwbgtpqzjgordah[kvxmlpebzsitmnjfnz]olxhcyqkvfkqdxdc
+gsojkejbnpgptcgeubr[lgjcwaotpdouravq]neezbmtkclvcvkqncw
+qqdvpngddzjwase[rtgandojrzcpohlpknx]qdnxpiawdlklkscmpa[qtpzakubrncjzbpr]efpxwdvobcigtpu
+boxlzukkqchmqrrpgk[ggylyipkjdmbjfp]dkckhhgapbgpmygpa[yfetxkcehafknkmk]acqmjcsvxzptstswuj[atrjixpyeqordilgj]eccoowxhivjiljegqm
+exjgzzncnnehrto[qnhzvdfprbarmtdpp]rcdxdswituqgnsix
+tokldrsfwqqhetyw[muqzhystnflncxm]pjpmtwcamluvvvdsu[mpfvycofrzebemw]mcyzcqfngdrjaioxzda
+pqhnhcbjoqjvgqh[vqkgnojpmbawemi]lampvrpcpvxludprfuj
+vbdpihaehliobsbciw[cpaudttavwxkfpg]aidtxeypckfsagubro[fpaiuhpggzpxsctw]danwtjnlhrbfipgfbq
+beoecqatqkztrbevt[bdqoxnitxmdqunizj]lgquhovsnjuxqaml[vyfylkbhnsdjoezm]ediekdjfsnsodqep
+cnaisicaronpqbihlv[ajfhzrpysjdkxqpql]dfznlmsbuozjlqvf
+jbgsemiqgxmtwmdulu[ulbyoughrbpthdlvmvm]dyrxsdesjjwwfmvmkf[gogkkkefuecieipe]nimswajpymtzyleew
+haavjxuwhbfxlhfx[rssbpwlffrpnsse]chremerememjcbfuv
+losdtsrwrdvwzbjf[daaxdqsorbsgznm]miovihloamfmovzruxk[horqrumrdnjorfw]shihudanlgqfzjf[kqkwshgnrpwudohanr]yohqqtcywhqawfhi
+trrbdodxpewxgcyryk[limhtndawxliixkkq]ivxmixrjddqlmounj[cfhqatncyqijnvjv]djqfccmuvdnsylo
+yfdgkwopvrudzsww[gnyyumqxrftncsfuaaw]zfiekmyvpseaugfwss[etzbbabtbkdtgbwf]djmbswwpvfsowmqdlw[lpbkaarutdlovoptrke]ukztythdiepqgemm
+huwfnhilneqaecp[hdcrdcipgcaxtbfouo]poacbxvuqwkcilkb[dnpryjlynwgzbrnbc]hxillsnqqraloociaqc[uoyktvkfxkdkdopnbk]qvjeuapououufksmwse
+lfbrqypxgthlyxqzywe[pcxfduxttmzaxtr]gidsxacxodigyok[qyaamzuhjqqnpdsii]apgfypwqjpygzmdtpj
+prkahitlcoynnubnri[rqthrhhudrvryoea]urkuwyabxskqbsyfgm[dyagznreglcdincwie]okvqdhlixssurnd
+qrwefbcelgjgpzoe[aedkjvzurwcrhdimb]eaxqgpvkewmjynmek[nmfyhryoglbtdgq]dfnecedmtcrkfyq[omndbxvzczgnojpl]trcocwxxczcxrvjjce
+pphzgbbfbqmhbysodv[znbyvvkjlacgjrwlnkr]iyjpdjsjryyqsoblbyf
+lziqyyfhruzfpwy[upekwttdqzjxspfzcmw]ptdaapvzenixlab[wvsdrswafuftmysocc]ykzygszayfmgenk[mylrsdifhepnnsst]tqrbrvifghuesad
+jwfyweiiqvjfkvp[gsmzrlbjdpgqtbjakw]oofharmppecdotcw[dencjxxfrzxbuku]ygflsusvcrcdznc[fmcercvqncnxcbbwcrn]lkxshvdqjairdnnpz
+mfspfyoqeyalvzx[zwdzwlsmnktynntn]eeogyyanaydeykwd
+gvwvweokjzagobku[ixdetnocslayahccde]juncfldivihwfpee[mcpxioooaydtjmojwm]satqvbxfkxhfdrgoin
+yncjgygznetzrrh[uzkbwhtbtkrcxcveik]gehtfqltpixmsuami[nqhxycgquaihujx]ndtusluyzjwufzdh[ppvannvzrnncxpcfbyy]kgitvwtucjasvtk
+feushnbxghbeqsu[utnmthhouoazgbym]jmplltesvrbrllei
+ijwbtaksbikedfm[gjckpcivddahwkp]kubvhiqvktkkijchj[qocdkdejflyyzwukfrh]qlnixtictiubnfhvv[ygbwjbjxtvfevjug]dclcjonutlwyqaxx
+vqtafpvexofwcfssx[zmlfsfqivipeumubau]moqspxvivckaesffn
+hphwnfopanasosexay[ddmqqktxkrurcry]slvhqigvbwonriydzb[ynanjunpszocqrjqm]fkdtvygiiddygcrg[jgumgpiumyhktlhoeom]dkvwoureblktplcjmi
+skxhzizzzfrfausiz[nakguftuobnmkoz]buzexokukfscgmmfru[jhpsafmtolwlhvkhs]hznyqntiienjmspy
+ccxuwxzdxtfwbpie[shhongtetcwukjbre]nufocpasneteinfkk
+apfhilvripbjswmig[tzmvefmwonqiqdyt]szdbbwkkgaqmjkhpuu
+gmqjznmtepctxpcfnx[eezqztmqxceenmds]avqugeuarwprizij[uumhklvgcrkfozd]goypuraafiwdcvq[zueuogjqbnsqmjfmxbn]ahgjvoxojaumver
+payebfjnonvscnr[nzubpmedfuvkiwqkycu]cvsjgdyfvzippxu[gmiawxppknjjmvm]spdngdktoclylmo
+ruhhexcfvomrhibmoux[cjkryzqtfkckieyzuu]vkwptpezjrouirxq[sggqhkgstdzqikfnxk]zxfgbatfizeivfkjbl
+qqizwnfaajabeuskjdu[szujizggsbdhvihk]wxjmzdiqugjylejfu[dfygnnvhbvghhyuzo]yeaepigfgdcxbav[schlmqwlcifeqjhixs]ifaxsbjyirgfmwkaott
+erxreojjauvvlbsxomv[xaneipervgreexmp]itfaxjxrwueyrynk
+lgzbkiqfbgvdnyt[milmskrelgdjggvtmsv]clolytrsgczyppvrhkf
+ryvrtxkdydhujxapwjw[ohgtjdaeifxzuhoqc]yflsxucxibqkcpft
+srtfcyyruyxzxum[ygeoeyfnlufgsjxjm]ifwimooynxbrsxmyk
+rqbnowuwuernuxpim[zzumupyxvnbnngmc]uwurpinkjmkckxx
+ikzheexqxrfttoy[uwegndkenfvosfpm]acomhjgdgbuelap
+srookpxqmghokjoegi[lhpppxjenrjqiri]mjlixhnrirctrsupv
+onuiajxptpjwixyvp[otlnjwravarqmepwyd]hmnvzsflzeyrlxgpwwh
+jmpskqdlbuorcpwpqj[sxwomhbdyomudfaisda]nvzxtvytsrqqxbsug
+lohoirsglnfzmslubqc[pxhygduybnlqemp]eulzazwozzqytmn[joeiaeuczyygjtg]tnowqyhlrtmumjyrkp[lidmrorxkpcajufzib]ixxyjcoocfdgzjbhhl
+tmixfdhagahaqeers[ruioctblczdbnusokt]orpjrznwojfxnheoqbj[gbgyexwumyintxi]tznnvbemvedlpriyu[ibseuzmfqmroeeawur]tkggtpbcgdthcpo
+psnbkiuzotsmeklinng[qhigmmuxrpjmhuhxt]urvnxarbhbsouap[chfgrdkbxmgqzdccv]lbopbgjsbykugbzfp
+qcneczsyljovqwlnjz[mntyylfgsuvpjdp]osrpdqguiouevrdq
+xvfraxzgsypwfmswwwu[oyrmndtdginkvlzdid]xgtwrddwmukzxypxl[mcjxgiimlmsnizirzt]gliezwdntsgoxznesl[vwypsvpvcaeyzivjo]zigujupypwjqljxaie
+xayweakpavlylgjl[hxjyhvqwnyixcesj]yuhyulfybuhvqiinlso[eyopyetglenvqzqhnqr]mqcovyockdqdqvfer
+sovuasutixukkuuxn[jlvxhosfgqjcxnlmxql]bekpnvhdbyhmmvdhplp[xohnfpbaeqpbfnfi]eobpufxrrjaajjd[snnfnhoikinfhioa]syhkocukumqrwcgw
+vhgyxqcvafubikvakos[jfivvuhbnehuqbeyu]dwezavodqhdmujzc[naepoqzmbtiraxhskf]bwuozbexnzmpukgu[zyzfttszjkatnovj]sgkrklrsnjzduvvjans
+yplxqjomjxguqxjjix[mvtzncrxfvzjofx]wlhvxxzsdcfptbse
+ddqjeqgctjkvwge[cbgnejudebflhpm]ryzxhqqixwsoztz[hxszfpgrjuxxipt]zuvvwbmdvqbqihy[gjfkxykdstapfhu]bzprrjdyjlljxnxb
+xbnilldcerusgpejs[pvldiyrckxtgoesbti]ljqvtntbhxrryxcka[gdqkfyumjhgbzzwlvfi]uekphsrzawxriyei
+egwrxuedgpcppavzt[mbblqsizmrxdwdrio]dzozhiodhtlvmrjcygh[gdzijmqhitlbhfw]ewvkussgmsnietkiv
+oraksmkemjiapbdvqxc[vvgximcdecwxmpbjsr]breycrlgdwgnbjy[oqqtlhrvdyqesttwieg]dksvmqwavamfdma[fndgywlwmsmaivduv]mfweojoshjwolwla
+pqpeytynxunxdfyxrmr[krtrvrufaemrmit]kcgnivmpvqoagjmharc[pvkuwynulvvuqkif]mvbbgwnmngtralbe
+nsacyqfpikkoqqxp[jdcdddcdcylpjiled]jstcntnjxszhichrkw[vzfusiwojvrjzhevjm]lywsheganczawtqb
+rtcpdankaboogxhbqj[vfamnogaxasxdiiizk]whpyanngpggqutan
+qlxjojmpesvehkggt[flysjbaoiorosmpzcl]wgpxurstlnopucd[ewkgadgmllrewtwse]icnqidtfsqjurnkw
+oifarludgzqkwtdm[jvoeypeqpfivakqyj]dtcboyxnhejlitz
+npkttburtggvbsfuiwo[wvklzpiffhreyxkz]uhuynxjezspazaudse
+etaapuxqbavybsp[mndpkefjvjupccx]pdcnnncxtrzfvlnmq[ioehzamymeougocos]hcuxkuwhwvjvysbwdo
+fjrsuygcrtpzjsw[rhfrgfnkhajlqtqdp]hftckgnarcgoyfkmimd[hkldanmovhazpcpwhl]qomxfqqhkcuqhibrl[tpbrlhcndgbxuuzdng]knqmgdkpbljyufzazki
+zydstadkygzvjmxdhu[qtgaglwyzqncfbds]dqwbpmopxmdtkkcj[dcakbjdwzlglkpndtb]nijwetvoulkydqukzn
+hbxhybosbnopyxpnnz[juewibpcgkchnerk]pvdtzqclnvdbmwjk[wmtpskdcqiiythces]kbhxnzcnjxhnkuxwft[yetvomdrmxarjwsumqv]pgumogczlkgoiyn
+zaeaejxwpzbqtjiutt[eqjjobopoyuoxymtvb]glxzffwpiwoqcciyul
+rqrvuzjvcgaancl[pmxugkapydtxezz]lihcobqbdqenjmxyn[aemdyhmkusmchckzqnp]tgiijsdtqtqomptveju[mvaiexukertbkyinjc]pjuulfqsxhbpdiy
+jjygzflwfyeiecuztx[yrziwmbdidxrjsouxen]bqkyguqcejsvrkn[hzipqxzodrnsozfmta]xvtakmgzpstbsivyt[ieiucrjmzeupsprslje]iquppghgxqhosvjzc
+dwprarljcykiecn[wvdjaraappnffzsih]difkjyzhcyzgzjl
+shsrycjlblbrcpv[drktygzuxbooshwhute]fanflcwacerdevozor[feybgvfyookhlsoivd]ixzfmefkgvcdnxqvy
+rgogoobzbggsbeynx[nlnbqvcwdyzkbaa]prjegdbkocptzducz[tjanhuiieffrdspjf]bhhziiqbzdlkdmj
+yslioeknctqgcwk[szhjocwzxxkbdoykvjj]aowmmepratdcjkgwjhe
+yrfhkqrnxzzyvrocav[rqyqhvtneezcivu]hunxsvslxgfzevsvvw[pyyclulboseqorxoihs]akjsixprdzbyqlbupi
+tcapvmyxklqgewra[pwxrpoxdptxemahbrot]ncwuxwfzukwcatres[ftlzvkapguezyhnsgl]ermejyvoisweiqvi[wynjqudtjghztati]vhpdjconbhhejafgfu
+qkqbjylknnexhcziot[lwjbulvorpdzrhddlm]mvvmstxnwigtstskoo
+wncbdjbvzjvrrunb[riirhteyuokxshfmxed]sdcpacarelkhxkt
+xxcromhxgxqeokih[xxcnkwhvsylkpfbsj]xipnqesaslmeqsnu[rmzahgumualwizqnf]mutxgygzbvgkimvab[jypnhvoztklxkxyzsr]qhuxxsuvigbloux
+yenrilcccypxerlso[dttyspegodnpefcpg]mdhfzxgyoxozmgi
+jndnuwbhvaciqduyfg[xoeqacufaixieedbtnz]mpkkivmhxwxujcn
+majifpotxhylyshir[mhcapgzvvwadphfid]rjaoxsvqlqyvqgtxte
+imhzefgngckhvgqcjr[zysfanhwbnqzysui]zgogpzkcgjeigcwpv[jtxumxvjpotihpmb]zuuueogbabahhwa
+ijrqngygldyukndxhqw[xlcwaqfuzjigxddxjn]mcuyklxezeidilnl[atvcyujrcexfnknulm]txxgigzthrbbqna
+dvhqjqbgudpghndlvu[drhjjaxeomuoxxnagyp]dbeymfmzzevjydlzk[gklvfdcdfmnfvfslpfn]kssctqoyxognwiem[aojhwzwnegpnydzywor]eyrhiouwbqfpeoto
+xznkczuhsgldtilz[fhdcsnfixqbysff]ppbqiltpbrlhjliz
+zkfgueqzataygeavus[nymgcgakmtuwnkidr]ypuhovawsbnmlmpo
+lnjbdjnhhqeifmi[diompfqeocwmuqi]kdawxfqtkschlgnh[fsmxaerroipesmywqa]vqpxljxwpzudocn[sffzifosvfuytvdzb]fjqfwikuqzhzuthxzq
+ecyyeabjhjrfbdqy[xpqhxzehjkjhotrdlk]ztrkutdijjkmgzkuci[hwdxdsprkacxjrjjtxw]fbhbrjzwubhgjdwvpjy[vppgvmthaqkgzrzva]xuhyvaytyufxrkgeb
+tbeqtxhfqbbdrvwn[juqpksgrfsbsqdx]znceqzwqsfrhavmetys[khetxkkpwfmkmlvc]hazxybkgkzrmbtqshz[yavtnkwhxppnqwzwj]hgabdrxubvyvgniz
+rwvvgwyfgincgkurooy[wxcmmmkqpmtghmmltt]kgtqowxiyjbepqnkiyu[iofgybnjrqtngltajvq]mxsbhbkhddqnfowxw[ptqpbwojwfhhqyv]ymflkhgfnlagbxddzr
+lybbfxollocxnfxfeba[tvjolzzkenoxfxqrocd]vkgswdtqpilvbixss
+yurvqideiuqwekwop[gxsoytqhoasfouiasm]fyhiugkvhkbcfcshkzb
+rurapcltqwutrslalpe[wsqprvdmmtohamza]xmkzqeajamyurualky
+buprncslromlgznqper[xjefyfgkufdkspph]wjncmqpgmnjzmjbqc[miovfouyxitayfs]gtrmwhvmgcliwegeg[owvnsvmazybubxfrp]cdjevcehzrminnc
+uxhqucibxiemlbtg[dyshtfhtlbjreji]ilgubuujgmytfxeqzrh[zahfdfyzbhexldxg]yohfxkodjqfdzqe
+kqcxiuftivavvdv[rbijqqjbhpdcrtpcy]dijrgcyuoqfzronrfps[knxiljzdtvauitad]hohafhoofjhhhppkr
+vbanudfbhmhpqsdpdgw[ksrnxrccuenustesws]bgiuwlkckvdplqygpi[ivyzkermofckkcotkj]mhjspcpkcwsbisbve[mlmgilflysuxqmzwp]afixxyabstclpunrya
+mnniaptautqeenvmog[wfqrhlcbcwqhwzj]ccouhkyhrvdcbilshrw
+zankwrrkgkejsfiwcox[gcxocohqugmgpfoea]cfpphqzxdllapiaxu[ckfcklaedfbhgino]pwdqreudlymfoif[nkaiutnpwnsfrbzqyuc]mscstkuwovgypqtta
+dhhvqxovlmkpzsg[loljkdtjkdhgawrpi]ggnnhvbpshpwoloac
+wjepglephkicsoti[lvcfarizbzsudio]httbqobbfjoomntye[rrlwtyngtpvffaanlpw]moqdodrnstpwmhjrw[ujoowvjwddvlqqbbzbt]alyeqayozgbhtpsni
+okuneqgdkcjggazki[ebqvcuzvuqlvptuoqf]wvcvzlzipmoamnvjt[dncwvnvagpitnxtjo]oadxpnnqonbrrarqn[ruogikvmdiporivvzm]vicubwgqcblvvop
+iqwlvhjhfrfeayiclzb[mkafugqikswvpqehb]ezlojhjvdoyzwmggb[mncadipbeamkzbndk]kpewfgsurwlikle
+ewpiriwkjrgicwzfxck[iazlrpnsiynlmfi]srfoarhvphakmcyke
+faalgogxxzuylnk[zsgporpeqifzknzz]mjkbrrvswlbgdwhmlgd[mxfiiekevaaosozya]klhonreqfikygbmf[hhgfoolpnquxfxoazy]vcxscuxdbvevulug
+curbpzpilaczuowrsi[wmyxdecknwrspllfhpl]quuvzoiqziuotvfl
+kugdhavlhuperwafe[ecuvibachziwzefzn]oyhrdjgmqqauqhhg
+kcbawjisdirrwzv[fugffzgwmricsypdz]bouoevvlaykmgve[glivzpgoripmcnqv]bsmuvtuxrrzjaxko
+oyaxoumybizeabdg[quusffkxbmxajbni]lxxqjhqcajdkqszr[cpgzcteolyloguchf]zxowxsyvudncstwk
+xmlnrjsanwjmizgawvk[wlyncljroxswzsmd]waxcvfcwftjxbqxpmvr[spiqjeqpfxanegjxf]sxzszkcgibvfkgtozy[nmhjzcaophbfpil]nrwfxurekvqndbzw
+xunbkhekkwyvgcerevv[bgjzbkihvzlnnpptr]huqryhbrkspzxusu[dmrytcqghtbbhhzu]lasujmpjaobcnfj[ebofoyovhhzsprycn]belltiuhimwgwqek
+ocgmydyjloxpbsyj[wuhymkumnwwcdprxc]ncmkmnedztlutaw
+lyuydomeinqxrex[gukhcsjakylfwqodm]hdghwpfhnwjtmafqt[lqwtforyrybxbbh]fgyfkgvzyooifxa[kgxkzeuijywgdhuryra]dohlilkbkqzjsbx
+zgckhhqwhgctoun[ajftizwahkaxzich]wacumictegcbysyn[zzxxwgjdzicxreegal]pwquqtaijwqpkistf[vbombdxhjxwlboqdbqh]hfyfujedxzoceqewhgt
+rcpaadoewdfxoksbiuf[cmcgotvayrjllxgtm]pmkfrygwrzuobudsah[gonfdimjagiyayni]ctrukcwixqczltol
+jrehwmakkkobozzwrn[beoievlwkmkusjzangv]djpjbtpjpdcjsmopzpw
+zsgrycgmryfdzqyfj[yipsuqvzrujoaqga]khjrvsadupzwwoasmp[bdpwsunstwzgzawlu]wxaqnorkgypawanoso[iknpjxzhmqermgl]zcsakkbrkkaimtnya
+uyuzptbpmmukyrpd[vmbrbmpgvxdxryzcpbb]ltybhrruutchwbuuicv
+ddaeptwdykjibuffjh[ufzsfgmcffyxyyywdu]vrdexhgwtdlczpc
+csivzntivihwomh[nprwknojctjnkov]uzridiquzokufgzgjs
+gcpleovxfcyyeme[crpzfylaxfpuecz]zoomnthfoptieor[ycybuegqfkhlupplwb]qjmvwbggqxwgeuneph
+vwqdvgzzotnnsydivip[ohjqzjuzxyncdbenf]suwfgrjkasvyhzbtfo[qfalzqxllbjohnzvgj]mtkkcwoapdjaysfyono[yqdgnieatutxldqyosk]debyxvqoatdeibyy
+lhljheobdtmdowhx[lrxkzhxzdjmemintrq]jecllyatwkrhfxru
+howoydpdchixptjqapd[nuwrazvltwkshpvlg]havqlubvtfkhsmxwxew
+uwapzmqskzwiiqx[xtyqrsajsrljaajwedl]dgcalrxxdsfhqfdie[svghimwbcbmxqtqhjn]akqfoppjhaadsdbela
+slbymelmqscfinxle[ahjtgvzldgftnkehsr]vaqtlbhritaotaxvhpg[chcyoduevjsyehz]jncoccdngssgteldzq
+mmkzxzkatapuuwwv[odomzyzveadmmicfb]eiptpqypfvfroxu[bxfgwaezkjrbpim]hvfvtenhpyqiohxj
+jetnikaiyuylckwz[vonvdfgbgfxrvjzluaj]zpmcyjvkwghaiuxic[irxghevzlcccxfcrf]xicbllnxpzlcmqbgm
+chvpdcrevaqnstnw[sofvzfabefeacnniokj]qdasdxrscvlmwcchq[kcpxsnydjsoviwwy]bkdprrvzdinwsfxkien
+cwoamgnaytsfeccbqb[vyysuocjjhfoixrtmpr]junwfwadfbyukyvnw[lcwtmcbwdkrqngvqi]vevlawxbwoqcibmtk
+seboazoqdqpckthgk[psehbzatcusxwqa]tiwgrqjikjzwabuufp
+ouwlbqhczqgbljktjy[bubtiannyvmvkekhwbg]xvrlrmkjwkhzjjlia
+vatnmtxixznyvdvt[ftzepafpamiqpjulci]izhqwdhnqpyppuqiv[mjqocpfxdfcgpgmk]yirocnwnrzchhvrbfb
+eehvjfqvnwplppeg[mntocrytmuzmuvc]zsfcohpjfqdrtfbbbh[bqhzekffwgpwsbxd]zlhxmhjluxrjmpwkyc[imisxjdmeqavdvztbd]tjlwasbwbrddpqpgwq
+ygjdaucrxaqjcjj[zaunyucvccyhgomr]ifczoiwclbaryopmfa[ihkdhvovnvujtbasuip]mabqxvuzswimbitoy
+shzlhbrvjjzpyxfqgus[ykurcdmtryyccnysxi]sypivgjjgkngrxs[rkavyufibjkqetgld]foqdqcpatgctaehxi[jpnwjyafgkdytef]apehakogeatmfyalzr
+kithfcpkwdhgqjohr[vvpujusooxkdrmbcoo]tuzaiinsycjujjuw[fqdhhizbifrkpjxgyb]rddsmqvmitgdywh
+gngbozbqsfrigmuq[euutspovzyvfbgp]gobfhihxxwpndpaggx
+dctfsuzvpvttqpgppw[dnilcstcsxxkvwdsu]zqzgahpihqrhohqdtst[eoaatnenejvvuloknf]xwneniznbkjolnouj[gslnbvbmlwerbwvdti]jovdchklafrsncadr
+mdgpetsnkaddebh[gypkuqwwtjrzrhi]eyfbmxbyafuenmjdfvs
+nmkfscflwwiyxhzgzw[cixmvcvloqdyuikk]jprtrqwqtbrnksnxh[tngpiloomzgdmpryl]gwvmzbcftuthxvyqutu
+zkpdrykxtfvqneh[pxvjsvutuauoeducg]iduhzedqopyfgxjwpl[tmzqjdffcpzytkg]zvwkvgwmfhbqklyvai[scusvxtyjacnqtkany]xqsylxxrbgvudrdxd
+dbgodepvweaspcsam[vnqcsulaljbjrygsgv]gmfdwebiufbqkaofraq[unbumchixaeviclyqbn]ekpfqosiklnpdjrjq[nlcbhutxymbumqmwh]svtcirskdgbhfjr
+wpvcqnrvyjvfkfpclz[wogcckufvzviggf]oulptksetgaaholu[dwwcwhkktrhgkahbs]sobrvezzrrzvlihicw
+xlcqxbbegaulczmzw[xcllvvmlrdiamavgvh]fgipexbodvwutyt[pwhoyusimtkyswrc]mxtrsgpuxsjcqmb
+euzbhyalpjhxfawzyj[kqcqpulvktfqwccr]etzsqjqzeosiarij[kinbhoflquwkkobs]jvcmusgezydgutda
+lpxgexsvlfylfjva[wnzhqafvnbcbcoy]wevgfhsjrkdgvnbta[mvmabgghwicirugb]ctcyjxzknsnpxixkc
+hkkbtbsnyzrlsuyhwov[iurtqidtzfwtfhiltt]wokyylscmppxsdqtnns[swtohjqkqnmzxon]mthgkxltaceszxm
+jernxnsovguhkpljxce[twgyaawrcpjpnxp]rvjtstsecwlieaeblp[tihicijqmcrggggrjo]igcnuyrhtaooygb[ntscsypsxaeatyj]aslpawlvpctyjzwxhw
+xoooyfocrwvsumzzywf[rdovvrfjqhtuiro]eudcowqfnmcvpkdpv[hdyyadaesuxiykkiztt]ykgxpvfilimofxfj[ittajdlxgptkzqt]djtaivnjndcktuvd
+usxiyxinxwkgmdmjlq[quaspjeawvvlagjmla]sucqobcfnryoftyttwk[knzzgsqjkwlybeebxrg]juprtecqapdfbkk
+jsbpwwkgsmydnreqkd[abmspggfxrehkgk]nzhjbpwxrvuwrsnilmj[qqtarhezcecijunbk]fzskmnquqoivtsaxym
+mgekjguhkwyfdcse[ydcdycgmcbzvpkesg]yuzqagwvmncdcia
+wrqntmycrllbddv[fzewvpbxklyccfkqsed]czcxxkwfeberluvi[iupovtrukptjstnkex]sukvpgublggqzbecwz[rabiytcgypowllw]dfitoowyhfxjteip
+wlqzetmtxlrkydh[dbgzuittqekewyc]vsrigjcntogidwtft[hscoyacwvjejmwxxv]vpljhuinywgbjnynxhj
+ydpusekwzovghcojdp[dqycroxflpnyqpnai]znbszhqqfkdbrwzrxr
+uzfunassiuljodnjr[tzrbcvrfieeocdcn]bmsircirorbtgydp[wcxinsnngyykaaavhk]xxqbherleuhjskfyu[wfklhczmivpuooytgz]fzxxivrumhumdcdt
+mshsdecfbmkjmbrx[fdhjzahrcoydrvqg]stkkbwrlhhnjzts
+nmbyxmysrbuejutpzn[ruyrvzgagqgybiqsn]atkbnawkdkildlbg[trjlpfbjomgxvvmzowo]gbmfxqgecnzrwowcm
+rtiylcxgfuqngjkyny[mgidqfnevlylaukbwts]vcejabirnbonrowlea[cancfhwbwdlklwo]ifsehqpalixvinbsr
+ifyzslyhrydfxbsb[nigcfrqizdtzetpncxt]svvmxecfemwefpgduln
+rtzslwquokcygmdws[wvblnifrxmomsmdwtx]scpjyfputxvatko[mffinnpsxezowdl]bsmsjqeowsoobewko
+zllghkuucklrmwy[ylrocgxqrlkdkotl]gmmdzctugnusdsrwwhq[cllevhgqwlszrhlbv]prpeirpbwoapvocm[urvubddgwfmmkoyu]ygmtwdiwvuepkcw
+hnqlptboqzzpksz[axumkjmbmyxfokki]oyassusfzvnzhlobbme[vbnbcjaiiuqptfyct]oagongosnahrlok
+vgsfvfwepwufvvqbo[pmdxwkxldxhlqlqrgp]nmkpknxluiphfrfxm
+qypkqkfcicanneyvvr[hrsgqfwjegdzfmyt]hmsppdjbdxxtagyhfkg[ranuabbxvhlszpmlmv]ajsbmdayixczrhy
+oykuwlbsupkaaaioxnb[cemxnilkmxflpnwp]vuvzxrfcfhqvmzlzl[hnvnqhipzparrqm]rjzhvguxrwhwyzc
+mdjjwbprbzhftjae[clpvjvsxatcbzsyybw]thsopmeuzvhcfppbha[hwbfzhbptymaaoywwiv]ybsfudfmveobwaqkul[argjxabjvcalkomgp]nogtearwoznoinj
+ngsqrfixojvtgzmfx[dlttfdsvjeppwweu]ydwjjxycbpopceaj[anlhiebedcpahqihhd]gtsexwhwnpmpqvdxa[qflvviiybebmusv]epuouytlbtacnsnz
+ouccxvpsqnmxezei[vmifqcpthebiklhid]tszxpvkgldobdjl
+pauvqtezlhvjejl[sczynxdhjpivcogula]llemqpnanorgnkmjl[xxtooqiwqkcbvmp]anafyzhbzdtpcxcad
+gngdmikcpsuduzdrd[fchropeunoqkngns]rfdquwdpxtlfxscvhzj
+otnuxdwoeqotcogo[jxyhojuczdysbfvp]upffjmvriabbalmlqmx
+xfjrywdooyrkvifzub[ygubulhifdmoytb]hjuvaxnchbmrptw[txcsgcehrbszmnzl]xlvcnwmeztfiyhlwtrj[twopxgslxaqihinrefq]tnbdtvwxxbichal
+bepzmphvahjuibuvg[zuoplvyeupxvzoprs]qgkpflfygaoxuriy[lgugebpiqnkxxqhz]kqhkfkyiqigodfq[hvaktogguzjumlga]gglqsklyzznufpg
+cnzflcqxgiepnsmpxt[hqbdhovnvyecljhzx]vawynjdylprjdky
+pxhlvphiiyocalr[dfhohrjqchpblygac]oqdjtliamyneclgc[pzanjswflkxxwvnzm]qbbuqtxwodofarbbl[kiqrgquowfurmiqlqy]kppecttggvnsuzaarwo
+dkzdgkqnfjkadwk[bjzvvzwnbuhkinvc]xhiswkplvojtzwwvyph[qroekqfwzfqeqcfns]kyijvgidcjeeenhgea
+mqoqfigmgtagmxjt[qojoaaqyptscsfmd]zkpsvrsxzwvllxqpi
+cdlfgkthideaizn[klvwdqakbyaunqfxt]egotktupevsisej[olkmccwoqyqzsnuv]szxkfqjshuwyqewmgm
+caanbkvopjahzmqch[wylutkdesribnllzbac]fjpryexeaxbopdjhhu
+avulisxpjwlldll[tueldewuwemaihrw]vjzctwcvzpyiihnlrzo[cjdkrvxhmsglzllbpl]gcsruqwlokbdtgucp[nxubgtwzjtwhtdvbjuq]dpghqlnwugoywuiqefv
+rcfjxvabpkgxhlvzf[ftlsstmreroxhmuw]gcacbophluxzofii[vkkogukgydicpvdqbzv]dvalzsrgykitiqy
+sufacmzxrfdwlivdngo[kthzrniwspkdawxz]rudbmasvirscdpkpr[pcielclbxsbfedr]pneagajkflznxdrkejk
+qtvidydakxhrbrli[arccjldfmvtskqtot]uxldrdgmtilrhob[mfqcpjzuqeibckk]tjubrbrdjdakrdud
+cbwxzgidmrnjqukyl[uhenxvxtomizedkxwt]pcpeskttqdttvibym[egwkoivkdehfrlzz]pjueedjamrhpsnuulj[ccamvzizqyunxwbojum]qguxpdkjsvkuxiskx
+ecwvkjdmndzmmivxnsa[unghjtnrlreamcw]fhxvfvlthzqifvftbo
+tfzpfvojlegclkt[kdwzmhrpxckfknvmdqu]gnpywcujxlgishx[mhxacejyvmcleasixmm]ggmuguvhesyqaijlv[fcyzsosernhgawagft]rmdvdnkuaworthwsoi
+adztzinzrvazerolcl[vypxttybduwxgrd]mggcsuuzlwiilaav
+qnamzrfomzqqhozg[zaoqvddnqodpztm]pqhditszsmuiakyelb[sfknkiilewablfnt]mdzzoowquvhayznyl
+ovvwrhkbkeqeatbcke[wtzdbpzbnlkuhwqwfz]tupytpbukmuqytc[fpyravdsbihddaubymf]pjiotvegpewlpke
+lubqiczycurwvqozz[khnsmjxfeogtewtodhj]xhqksdbozycjszipd[zeptjnsjluccoiuxm]bhvktxgvqjkufxhprr
+zflhauqmcaiwnqn[jhyeagjfxbgnzkdr]hdwykmzypixrdykd[zkqqugefunjmuhf]ykufgfmmeaapnag
+eqhnlafwpxhjtrif[ixkfnqexzmbmqencp]npxnxbzhuvwqnxn
+kokxqtbaemcjzlrioa[ujvykzotvzlrnfg]couurswwzchjzbxq[ympswhhwlvpohjg]wxcufycbxuvmrqekgq[wyljlkzgavafrvjuesw]dmgjejauotkmwgw
+mgxyddqzqmprxrdizf[clocszvenjingorxku]zsuqrmnlgyucrgboe[vpenwatmulopddv]expnuzinwtlihej
+xqhirwwuirdapgmyk[snyixpqruifdiqekwiv]zogryeticrubznbumf[yisxpgzptlkrmeevgqj]qrebxwojumgwfnf
+djlypifibwpydcxrd[swxgzdsqfgksqwxjxfk]kbpzzqheozbjjcdpor
+uueutycrzzvuhvniu[nqhaoxpjrlvrtbahncz]tmxvdfxvmctcfzoqiux[gevrghyecnzmkrujmeg]rcyqojjmpxkpeulzl
+quyrwpchownternlfj[qijougzkibnhwzvjk]lmrfvudpzxhshukhpn[jvvvelpjnyxpwvo]ztuckjcxyxjvqop
+ueyerkamylcyhgszgme[kpqbsxegdljldwjdxgp]afoamkxjljqzpmyef
+ryrrppctsvwsxjslb[sbmyepjknxewewrqfsa]gevwiiwpwstdkruplv[ilkxpskdrntqvofj]srpukrzanrqhkprnu[jlujnhxksrytsdazgyt]fcxyuaotwykaosgnvp
+yhjojsuhfhujvfk[nhdemperlpgxpud]pdvcrmhvfeudrea
+merahlzkjieamdkyky[yeygykydcucbambmtz]tbujyhneuvzacymtgrd
+sgvvjpfdcsriacwuyy[rqhuwizydqorikmqqlo]ozsalwkmuodygrh
+jfzfzodtrqrrwvlr[ukxwobjdyhtqrqr]qzmrpkkjzqibwekne
+xbmixvpzovpzydwprwt[qnquthrvjmqtpzb]utnmpbzmurlbpfuaqu
+fkfzgaotoffusnte[ajzqatzkpajlsge]hamnzapphynrppmzwm[teysbhjrdgatijve]aigpcjplbknziprba
+jfprgbpaubcukcmp[kddnrlcjywdjcud]nwzsudlamqhzrwlkh[fuavvscfxpynlxexr]szgousvpbqawlkpcd
+idlhdjsytmzcwcu[lgwbpjcyvpnecsqfhr]sjkxaancdmlpobiwjr[gzxmhvvugpuywst]oodlrjlodknfxde
+bplasvzaijndpfkr[wkvndyztlfkelwckt]kjkbnawptptvful[fmlqcligysmrzes]ujvljnzkznjvkgmsvqq[ezpnsnwrujkrbcmggsj]eghksoebyyfnptgqjul
+bjwqelavjebvqjroszz[jlfwuhjucugbvczdbil]xxuinqhddmsrpukke
+tgbvekwixowohur[hctpawxelfhbtmwc]axirbbtolsqjclqo[xcxiycbryxmpimq]kutifmilczlxebzxwjn
+dvxlbiymdfdrnnfp[nxrzuioymgfxqwxo]qhydikbrlhqldbq[heutjkmrstetknylg]grzklzcisupegmbg[mlvaswdotnzowpqw]inmxskvrovknbngkp
+rpoicdzdnkcxqtqule[gcxezbuirojvwliv]bmnlgvtpiyfhkukpj[gtqavwzdzdmqufnce]nwnlyciquxxcwpte
+ubleorakkrqlakyr[kqwacjjutlifarh]dgijscrhnsrsxqhogb
+niodmrcgcjrihildfw[pmtshihgrssakbouvf]otoaadrggvnzmetmyds
+jczcvqxamrdcpnjl[pitcvywsuryykynqxax]zmojzqezwxdnwrcuif
+nbmlxeosjvvtihmwt[acformsggoqxslahuma]nmezephkdzghfvhiqq[epizeyqkmseenueefiu]alkiffsdvovxmejkunk[hiwyudbbuondtsqjm]wjioowmqljplehwe
+hlcllqbyvenlzcfgz[tkddqsjxydctcrcuhq]lnqsaupwdmxeptzog
+rrkevyquvdogauq[lxscinoclyrawtkvr]mbiscfistpoutkc
+lwkkwxlifgwimrupndu[kglwcbuugjkujltz]rrgozebmyxigvxefa[hxbstqxfjnzvkco]rqpxaurnjtzymxkvtiv[fgbvzthgqifdqehisw]kwvdvfijmbimizl
+yejkpafozbchconq[chghchxxcybtarwkel]ensiprnejdyegqiiu
+gsclugkgowknjfkewxn[pgzgezavhgcfjpi]wttjlezzjwqyyzgzc
+ndgluxoxlnekaomi[hrrjyflrxyetpub]kwpcbjgszdjimqfgat[ofdwoxrgxjrbxhgep]rdaebrkfchddavjeqap
+vzlsrismjdiyfqzcieb[fylncgldcdlrqnbpw]hyrajwsfckxlkhcboe[rxqyolmmgairjktnk]xhrusylermeiiolade[ifiekphfwfzsnrb]szyunhntoeymkuhyvru
+ekgeyjojapzhzaxfzhw[nmmzpmouaheahibz]skhvrmqbvgkbismmmw[lpohwytpsrtegazzkwg]cvyqhgsyodcdoyandpp[rntevuwuoyqnhkmrr]szsrcjzpstfyvlf
+ioykyddusobfdscqkmy[pmuczfvmkjokvnoxrz]osyjyicdpcwzxvwfn[gimnsriontvxypcxnja]rgedrrsbgienkkwy
+oktebiadpwprzrv[wgprjpksbgdyqidklkf]xhhjmhfbhpszdqu[rxjenkcvcswchak]fxqrycgufsqtbxx[pyxvqyqnctpzpggzrq]mmncxhloifiifjpnitw
+xbqdzlpfxcznmczfqq[tpfsrcmbflynynshgt]whfhtgfqobzaolpx
+hfbetzccpyqauunfsq[ihzoakqpjosfmeff]xvgsqfzcgxtranek[zbtxsvwatcplcseik]vaidkyuhjnsgptupyxq[vprljemlqmphnaau]vfgliasxcpdyayvfddk
+jetotpxiincpkjxqmz[sfwjrlxbmpafwtjuy]rasahmylsaswogm
+ipseqmdzbeeqjsnvo[qxgatjiqzhwulhgkjm]syofcufklnbeobppx[lbmkistwoiolecjh]qpznlrllrkhxrnyvf[zbhzvyjqzywdpvh]thlrfwmziexkhxgp
+uqyiqoznpgsjaaftzq[bfmkexvilwsavbrnwo]pwdssrfyvkefanxnlfr
+yijgsezauqoevphn[qboayuokxuaztxd]peepgblucrlstsln[rnifdfjhxdmtfse]qvymgyfdvcpezxdgmen[qyorafkexhajsha]knaylffgeufjxogyel
+qlydmvzjoavamnvot[napvavoknajlvmdd]wbjkbdpjhuhxybgywu[umxthkfbtbevasmekcr]adnybcirbnsyplp
+qshfqvkxfhgsysl[tzlddkjozqzcpcnx]xjkhcdozufunylwdzs[smgwthhegrzgufktc]myfufzjuvrafwalrnn[jhsmzagnqmhzscu]dbqonhtmhhdshdyatcn
+tcdybubnklvamrjlxqo[naocexrxejgekonegma]hlejmizxmhxahxboitw[jteivhxwxftlyhl]kvhbakqlmukgslgvgx[aueqotadcogcmhqeeec]igrfisukejhgfmdvx
+jowozfzspexprygzplp[acahqiqszrcdhsylwwa]ppdmkmcrzpzbflgeld[etwowmhcqhkjkkipk]gnilcosjuukihcwyne
+ynmgkfpaiocmkybwkz[ztxveuhtztuioruvqbr]grhetxxldtoepqtm[yrucewbvzbphefuf]idcnnpztztemlywblpm[ltaesuehnzfrsflac]bbarkjzutumhskhf
+mckdhqphoehsqgjzpzi[eiretkkiklgmfvohgvs]fsaipzocdnrwworpfj
+hmdbweapvrpdkhqhr[xwpfkaaejitfikqgy]atylpiafldvqsunu[dwvoqhxryfpiegidm]dyvhcjqkgspgnpw[nkabxwemccqznbpdq]ripivpqpjrebswqspd
+xdjfwlhvdtcxqvfzrlh[kcjkplfasydesgzkkh]ilfrxwwjtpmshhcy[gsobusiljqgosoih]dgtehabeomwepoaaahd[gikvtnebxclexmsc]nkcvdazorstiymosjv
+fjjpjjjikuarjinig[ytnbvaleddhkesaoaut]eorhszwghtnmzbjipie[fuwkcamkegyilppagl]pipdvxwvkvvvanblh[ipiaupaojxfjukjgk]purmzuzammwgfyle
+qclqkkcoimixsiou[psabxyezhvejtdodz]ejzppqfiokslbdzoyo
+hrrdaecpdytoxkwdynw[vhgsgzqlqemkdkewg]yeqaoolmodchmigyxt[whflgmjarkpzbitpkl]jqjtyhnxkklkzoa
+jxdsjmkuplrowpkta[uzwnxgrrcieqvoz]vtwwzqgvdeornoqxmuw
+igfbnfbrrkfiyngqux[aajdqilzidsasrthcnc]xmkzmvqsexhkttcd
+bmcwxzeodkxlxclq[zvmqvljaabeakiei]xzujkuxdmumimotsaps[xuhocncyjxiyavon]hslcfclmfhfxxwwrln[dfmghezypyqxtwo]wxaxiadxkpvuwdl
+xifaalrmhugjejbl[ioovxgzfgpaqlyt]uayfrtjeutfeprmb[fknrvsrbeucxlyzauy]geowvgcfjnbglmrxp[ocnpvwnagqhgbcvoupp]inzfrbwlliwgcsqgzb
+wccriqkjssvswvpgx[apoeqvsvtniwgbt]wfrmnudgajwhkcy
+mbyargqesqkprhbtaqq[tpxvefsyzwxvshmict]dxpxmxcluamxmfq
+jfxpcnpdgytwhkfb[kdrqmtogtlmxqmv]auuyjbertdteoho[tdendgogvoevpnevzdx]eicpvtgotdkcgwbd[ygcvethlzayahhialf]kytibwtgzhuvvsjw
+wfdfxjuqfxjbnjpt[mmaupydmuixzfwebpjt]kssauqawybxkfmcu[juevujxyjrwzewzua]eladywlrkxglizgc
+qtkmarqccnxwoqr[vzmovjwxsbhtnmjhqjh]zycttmgyujdefxxfs[tsmxkcuqircrdwtsz]uhqtftqwcxreyvlvff[kwsyvatwweenxdvqum]sjmbfsnprqixqzx
+rantzkbrnpwuuvqbqn[qaudnwijvntnxlj]tfdbqbdepavxiewo
+xwjmsobvbyejpyjkrz[ozkgsxhxiyuejjr]etkvofiicvcusmmlg[rmkhfcaxfbdltnpwk]swklpvfmxmlfhls[iexmcqatbamzyvxft]djvoysjwetzhocdd
+iixngfiuncqysuzf[ehzeqdsqwwjrubb]udkdvfkdtxbddruub[hktknkxemrlnbxwz]qfejqmapclbzhhe
+pmviizplesuakfc[woqzewypfpcaiotx]xatiburufdzajqrv[ydsakwhemrgnxgqyli]isubtdzpkcgsoas
+xxsqvodorzrnrbzsvyu[apejbcvdjuyujpxewu]kfrcogbvnrkuykpgx
+nkvsmhvlyyweggw[yhcjceblmlzpgig]smpwtbqsnklgxxbssz[aiivebyzjnbelkphux]wnaojsgmpoiaykznpj
+xcllttmboowsgodsf[dfskztizatqovmat]gpzyyqjotpdkdemcjon
+drhgljhvyonmqzkr[ohxhjhvlrpodxwy]mrrhedvtgdxjhjv[golpxgauowhwdoov]rdmuwnfurqwssgth[atspndhxuuhzadog]qgdswxcwwahqnpx
+uvdajunzymasgjc[onqeemcifirbxli]mrmpwnqojidvwexxrjg[vbpwisdwqtiteawvdw]rpjzhfsfhrzukstel
+owbdsotbsjvrwvdb[fclwyuadozjjeyvkz]uzfygewxtlgjhmfpyfy[qlnlpqspocvcpqsa]fannkpftifaoeszzu[pvwpbdancbljmucxql]tlzusxlphovfyfflj
+mmtmuzzulxmgxsmf[djwlpuwrkdpcbvv]jomhrdgighcolvayu[vdxrekbfbxgdluj]mwkcqhjhlrehesmwft[pigmugayjtdhtpweyo]lemzwycbgzzhvin
+eferdgkfaasmkyi[nopnmqjuuhhkaclf]twwodgunizovyvydh
+baddrprmgewtmypxsp[yahwshbkzattrry]tjjmawkirxcxcpkbdr[kcptwlmozcgjszalueb]msxrkbrbcfnflgnqe[amwmeanfnbrpznz]jkkxzruebylcrqkvyvk
+kjagsescwfjkqrykx[sefltugsdwkybwj]jmebeveaticpwddxbk[ktfnvedmpvqufsi]zxjysrfpzfhngjci[yifiorzwyumqotxoch]afedqtkmzpfwnacb
+lelwtilhzhzslvzo[ehvnqsjxemjrcvbqyf]ovygwyyazlsulyzhjja
+gluywzrxutecuauqi[vyllygndlfkbmgaoefq]cyucodjkxwauafwfxw
+dflaghirjcyhylbcenw[dndkrtbxackpdcphny]pnhqmjxdzkjycmdo[fryelfouoaesejoq]tdhcacxuqwfspqevq
+yjnumjjyewzjnakmnhv[ulycnyiyvszhifgscjr]xheytyiiyilswfhqywd[jxrndqsxmwcrpwrfu]jquhfnyxudasmomnpx
+rspuvdkdzbrbajkj[dcfpcvzpbodrxtl]xbskonezgtixwjfsuq[gubkcjizpgfwqktcc]ddjzlszkolvwqsrnnc
+moobncjrmmfonnmp[lpbevkcuzvqguwzbzb]pacppeefawsktrydyqd[wayxdzsvisprqutg]dfysmjhwsvnavpixfl[aphusnjjnvygqikzbz]qmvbpeopziujlsmgx
+wfujisugotfsymh[juvkyhewsnpzualwau]ljyuwiidwytmvinw[qicxeddblcxrsdrp]khdooklzguadokmdbd
+wdzzexnylrbsniulyv[nbehnwkwkrrkbwirh]ymyaqhrhmbuolmtbz
+hsxsderrtdvolsms[yqxhutbtoodvausgm]eufwcczbwgvzxsti[gqewnssdahkfambauv]hrnsadgqtzcegnplnce[fwzpwvfptgbgaahdn]hlvjzdqpvjezifpbh
+gtnyrilnfgmslzfju[qwahfyniqetvzpb]txlwtncptwapogp
+xblzbbrwjoudimv[grtjaoaytdyffbl]jojuhhvrrgbymoptzi[rgpexwvtgbswbzp]ysyfhclvndltbnnzg
+ggtkfikxhhzevnhpkoj[egndynfnwwogwdttwg]gmdytpspodusstki[zokrsgoycmxdzrni]jjtmaoztqkdpsnty[ishkqeyrmckkbcug]jkkfuvenjvphkmbtk
+aprzrupkmqzdgncwuq[ototomaxhriosvx]zftevshbmxrjingy[vkrildlncmbvbfi]wsqygjuriitkbszg[ncmxdegpxcdvtgau]iauwjlqoidqpkzkeazx
+klbfjwxkpqniguvq[wymwprcxjujljrexcg]mtjifypvknsiogypja[tfbqvlowzqxqefia]azvpxtyghflrgdo
+xfiwnyfpxzaizzzhp[jsfakgounppfocql]gcgjvygypcgzvnu[qmwugdkvhxjknumcr]ftgvxsqochhihwnsb[acnafcpwduptldm]zcstejwdgasnvehwyot
+repltebkzsojvhxy[chzhbjyllumckfluof]lhdibxgatvxzzhzflz
+ilqmrorgodzrbfesczh[udnwlveyxsalbxf]pptfzbjvkxksoarpy[wffmfpwwxmuxfmrvmg]zatihmtjlhvjbzdwr
+gjqtwvpdnhhqqqvop[hafmfvvzhqrnugo]xgrpicypdmzyjodfv[vtykgzaxumptsclyf]medyaqnemgrawbizrdz[ykkktuzmryicpimqgdk]wyxwdmdtrxcpdqhsrli
+hjnariohxtbsthvcwj[jqplvjyvfwbbphien]yyogxtzdtzodxceve
+tqajsqqmgynvntqf[wkovdsdotmgxjmmgmoz]kyffakcqgknonqj[hvuefibelljpsvaa]santzrmyhmmfgsac[xevdggsuztwdjllvmod]osdymicaxgknwafiyhf
+xgangxswvkcjsek[jrvhyhmomvqblucr]mhakwjcqomofhbdt
+vuuruhdlaefeyjtemtn[rkewcsrolbjkvgnjur]ajuzfefffkgdtzfmfwu[ysqkcwziamybbcghjb]vnyxgeftjtrxeokaqk
+ytfkhfnkxsuuddh[uorumsswhfhyjhnoqe]mlmhytefajriiwzln[ivgrtejpggcetxry]gtwlsddrscrxepv
+zhsugwnutzaxunnfbj[oenidjfrxbnbnevjwo]wnscklrurlxquzhuwf[fswcwqtoexgrdguawj]knactvqybzyjdjdkdkd[hwncacnowaliolgzmlh]xcqfyvhkoaxjyrxggg
+vfcdutbbpmmhmpty[glvdyxliujvbdqr]jyavmvfrqjztetyn[rqngwyfxdxofvqwo]xqcpmtqhrkoctux
+zfeyzggpwatzvvr[mwnxvrajqdtijeqm]kyprmauvxauaeuntay[ivwbqplblehbbhi]xfasnjwliydlrcyk[jmalyrxoozbrang]lksylhfvgbezkcf
+trqdnrlvoqyqyvjt[ekkkwqklawagqqprz]zaojypuwvzdghwkye
+bmnmbsogxhtpved[zffxeokudzgkusvk]qcuxjdhqclszjnxdhd[rsjdhjczxtrghlxwh]vpekhuzoamazdzgufb[bgtmhavdkyhtwlwcqmk]qucpatddwrtjztpxvi
+hwqfyynrncmhcsmrlp[vlaqdzxwrpawflemknd]kmvyzqfvlouluxelul
+gnzpgjfxtsaiknapn[rganasfzfnrvxir]ooatokkxjxhzxlpmb
+mpedacmqtzqmwqyfz[dcofwyebgsvctomzomk]vpqmhpoitpubjorx[thmfofpuparhszqe]clvrtngjajielkxre[mfcjhfugpyymytri]moqcfkrpazshwvh
+fxskejrgulaixah[cwshxkapatrgudllubb]vgykjzaukwxoyeucosg
+mgfyakavdeymyzxwa[dsvhoxfiuxixxva]jsxfqsnjgroxbmpiilm[kxkakjvwgwflxnnu]denqicbsmzvgtcxm
+zfqnynrdbdtqblxnww[nzbnvcjtsxrdmasqtn]yoganlahispbjdyxqx[tuqafqcjrxnybeksh]imhkfmqdjiyfoqp[oennqnvdpveoija]vljstbhqatpwvkbg
+lpzjqfcipceweps[indnzphetquilkxnds]oxyivnjttcuectlyfy
+tfhhmfeomcdyuql[ioclczzniueodbtpbrp]wuiujzhxjbgdlqbm[iciypydykxiyqies]ptvkrvkragnibssly
+ybllxqqxzjlhskqi[ytsvahdhxgwnwql]pzfzcnbxiypkpytv
+cchwtoevekjgyqqs[kizgrwqwbhebxlscmj]tjbuacerkadppftxdpn
+nofeoaawaeoepwekxty[mgapdpmakihrfzlfvpf]huhzkicazfkvjhgdvsp[eqtuybajdgdthtz]opgdgjzkrfejgawxn[umbakkosxdtfwcfh]dhukvukdwsevvcmt
+nhzmrmtfyhjpvbsi[jghcdhdrxermnhnrg]sasarolrztffxrvh[tafrflhiydopcqrx]hbrwebrzutugjnj[ejqrvlcpqxtiuqho]xjgvbnuvoxjdcpx
+dkizkqalwbetbepak[detgokxgkgyhrqzzbqq]rmwrqwolneotsyvq[fpffqdefoxfczyfb]dxwsppdngvyskdpfnbc
+ygwbidlvlgwncfy[ouryypomwfwmnka]axlhgqfgvrfsmbs[zavmkhmkjzvpzlxpkag]bfewyvdthrjzmmjs
+jwyxcjasntveqmblff[mudhpflnaxhhrphuwy]yyvtbzbohccozqj
+ckfocickdlijiur[fejgtsphnigervnza]owlznrkbwqhkskgebbx[alnbdcgnktmjlnhig]dpfomgwzkqrpmicih[vovjambzftywljbxrgj]ihljubxxgrxrqpn
+pygdmdnnbvnjlkacjfz[xwefajgruywjhysd]soepimqfbbhekifv[frdrobvsbwwkcytfv]aszgyodinewnrfdhh[wztqipflzlrwmpxefga]bxviyixobyldmkln
+qujnmepaefnkxgrrg[yxdnlyihixwasibuy]qtmnryswxwzkuqw[ozuwcixlzlbiacytv]oylpudpmjaqgwfqvsb[wljtqzfawkmrnkgkvla]kgdvfppcbpyazklfdk
+ijkbhnjcxgsslwtkuca[pxpiyixylcuudtwbt]ooerzoxehuqynhzmhwn[ynmgxzstfawvqihdhoa]bdrhyquybjddpuroto[fhnnpsgnxlnoiiqcml]oaibnvvqupilprgcyiw
+dfqizqapoxvqvqixvm[mgrrcrzvjkncxlmq]xqcxnymsyxbtfebdgy[hfdfaxiuiexfdhy]flyhvoppwzigjxlytu
+qlakotkuqswwtqx[xnpcrmswyqolvyp]limmsdyvzescvvt[rrpvvituflyuhyhz]amdxfzneiggintiyzuv[cykruetmmqucsbwjrh]ymobjslroztxtla
+aiufklgicgwxdlaefc[ofaqlmhnwrwhjlleyt]dixgrgkhhbyopqkzmt[zhqupdyazgumcagdids]mxijcialempjslotrgr[lmwxkdqqijndgoiv]upioecwmfnndajajbxw
+oiwkroaymbjtugfvip[hyqrpfdrfjppatm]azycyfsttguvudeq[czujqevgflhvskaguy]llsuolaevinsabqpy[sivsqswxfxlanvod]sswhiwoaxhqsjnynidh
+qipfjqqbxflvnxgv[cnxuwbvnxndkoxcxjl]atoznchumwauytpqmgk
+doncjsebymuefbxj[itsfdedfjxzxgvj]wpxzcoaybnzzzxz[hfxwmqbaiyiajiorh]einnvliwbxhjzxx[rkeenlrteubkvgrpmms]qbrpoghwjttgawgstt
+tyiexegppbtbxzovpb[yljnqybbavpwbwmvg]unbjhlrkpjrqbxrtpof[bvbfvhvgtawgpydlnn]phdnwsbwbljkqchww[galszmgwroduckhyyqa]wgfbqlipsvntmnspge
+gmnkhnuwwojgyybh[ivxthnkhjaevliiberd]crpicsxuksahuebnk[vogumtrrqupdjhtvmi]pcezvomttzmdgtelfq
+kwvkuklbkgbxoyqo[cckuhlseweoukudp]kuvdtzbjeoormufjn
+ewqcguiyodbjoxu[qgqtmjabzxbzjua]twmhfdmuudjrqjpge[xexjbzjvrungbvvmry]yuazblohcojrddhfzg
+irustuljdmhlqrettvb[dgsukspodhlhcqabx]auntsiybdcfgxjmsiqy[oqscrcekuibymdwfcy]dmxibunjfmqjoeajyi
+ppvngsfdficcpbmbze[gcazeiyfowcmezww]wmphalytgunmpjqatau[qnhrljcdkikordx]yqrsgeczwcwjbqfhfw
+iniqgrqelaihnllono[cydssebiyefnljxfdh]ljpqnievldmltrpp
+jzjmjfifakcsixsg[zmgaofcvdvtziindqe]mzodtodhvkiluhuzf[gqjguyslrtqvcesa]gwzpfqfyfxnncsemb
+gdnmdicwnjwgpjqdw[odoslhoqgocoumxf]vodkzgngmshtzwjpgbn[rrhzqlqeixvxjbaldp]xsvbscotkujitex
+nnewsdtgggcgiawo[kmuweskiapswdskgosj]avjieesxujtqfwpuis[tvulfkzyslzakco]sjhbzevzvglgfreyc[wzxjjpsqmctkyoutau]isajcfzslakogyuevtj
+brresmfifuolfyc[hkeljqzezcsvzrcue]zswubkhczxziqxlty
+xzohgybxqdxdwxfbx[dqcorjuppxguxgps]gltuxzxhdjujuro
+hmyrpjbmwmyzijkbljp[ipbngzbreqoqcisbi]ctdmsssqkgrjxozcx[egmuzsmsaiodyyt]ugjpwtglzvshohbj
+snumfuurpriffdvj[ojmagqzaktihjmwriyv]rgnyhbobphsfqgh[azucllkylyxgrlom]vhtysupgjwbwndwrgfq
+pxjdxiuhqmvwufld[ktpvbdokrtdpxrekaf]mamfsijuemlsyio
+olcpnpmilbzxxvqsz[ervozeicgvqskuenz]gcxvfthottngwww
+hphpdxpbsbmzshrwmwt[sapciwpwuradyvko]dnrhabfjqorseajgr[abhgtcdijsqfndmney]mmsvtcxmoobkkaeevz
+rtvrohugqesutzky[sjsvmjhonskkqwhis]pqjtzpfnvwsigtme[ckthdaxpibfximcq]peoffhphnstzruuhze
+cazrddymetaqdtlwn[tqrvhfevxilaptinubr]opnhppmmbfscporp
+ctclntnozqwmiqz[qniikhszzxbcatctip]wpoexzkaxyealqhcg
+suxvexjrakvhziolw[pxjlsfocisjmwzl]smoqdqjoczuyiac[ojpwtuddbldiaruiamd]upfrpxzwnthfytv[xvfejrchuditjal]bxzvjvhoigqunomnikp
+vjuryymolbathzinp[xrcvcqvbklvqtjnpzh]wugebbnbnzzvdmpg[kzdlfbpqgvbiyqwitga]wztqfradlqinyzfzf[abgygmhhsksnvso]kntwamrohagtdrsm
+ernvshbquyjfymdthx[jjshkcpnxftyopjayzm]yidkdkommeyieirf[zxxkwqqlsgxpcdwlgq]zpjrhkyjkdkxoufwlx
+pnevxgcsnqcdezwf[mnftbwqkrfmwcgp]rkmeslzoffovqheq[vxdcnglifignqqx]xiofsoyrslgyfrxl
+bjehvbcqagyczepreos[swecagoxtwhtmzsjxt]ihbrujlisjdftzpfll
+bdczzogwjpcdwyq[jptlwjoskogbhfcdu]sbfatvcosbvikmvm[njvcfwokqbtynugffu]qwhsgaqfunpacmimzhp[mulicnvulazcycscjye]oycycatwylztksmrfh
+idpyubomejrcwurt[idytppqynyqvdajevmk]mykbzkihnmfcnfg[ghfxtsrfkqppejwgen]rsalcongusjamgcltti
+gutkiuskjqzvbau[vqhivilwddgfrckjc]gpkuhglnqnlzndpl[tywjgkqskbdlsvf]bkwvgkdcxvdlvplmza[yeqeuyzuoqbypnwg]wsqmblkggadabss
+zgirdbsohsmusxbiqm[xnuiyfzmegcwzuvery]mzjixtxtbdruckher[ylfmvkslkcukfdp]vdwcmqmrsnedjnvsomy[cmmaoebsohfrnqu]bzgstdhoneuzfdxl
+wimnreygvgbpvafqrn[froxfavuvgvwirr]avnmgyvkwfnwfgudiks
+edgbqmwalgtiurhmmg[vjzrrmbtvyyhwliye]mpykphdsaunzjkpam[qdcecrxescwvlxmpi]gkfipuqdcpcqodcptya[pmdbisdhifodialab]wjucsoipfxzkkzwm
+xmurhwryxntmdwwv[bveccegjmwnppgio]rbnnbsqzutgyoign
+koftdywagyijtsi[amffypsbtekqlbvlli]avskrcxhiysqqgjja[ixrtkpjnrhljddqzt]ekluhurkjnhlzaudnrj
+vqbrbgtnvazwyixug[yrmuvykapxyyqxus]ehhkvomrgnlsofbd[mgwdwrvjwhhuynogqv]nyjsgnomdxwabameuss
+upixiwerfsjxjvecmo[lhlmklygfmbxljvptf]qnlxnzoekmyoggtsmtm[wqvqbaemhanfxldq]msobqxpmwqyauii[khuvobspvluvghjhcjm]ysvqvfsfyanmyrbuxnw
+xeawztjrtohpimzkw[umvqxdfhsyyxsimzj]kyhlrkyxcnyupqmp
+hqzlqinkcowqqzp[vhdaljgjjfqhlrjj]gmsyhpvpblkaxiox[vhbjqxseofvbvzbshv]ecirxnvxadesrbvn
+puqpygmwhwskicogo[lbkrenbngbzoljzuoo]tndvmvztkssolnom
+dbswyuxfrnypetkm[lyuajkvfqzwpuon]oorgrpkhwwgtpzxc[guszbthjnajqffsofme]vcqjstfdtrxcuscz
+clhtmgyxqbrzeipksw[mwuhcxpahefneke]bssxlwoelrrgsqcicz[yyrkfjczqdsglltdjz]xscwwnkcwstkpxto
+ajsijhedwsivzvngsr[eqorzqparxhrbesw]lyvxgqgqguifrpuj
+sqtxgdsfkbhljmt[ndqljydrgqwwqjayc]lttwcrsejwxgxkuawgm[nefpbdmgtizfijyt]dcxacpeeyuzkemb[otnbznolvwiervj]hdcjffxyhtqdjmaipj
+kvohguactjmqrluci[tefqrqmjpzpsazfoe]ptxqfezuvtxphvy
+wmawphvozqxqtmq[qqtumumswsrpsnjug]wejsdbswswrjitmq
+pdzwixvmkxpsxygxmp[zfxeglxxoxtkkmshin]hxjmzexyabkviollfnk[nfitohyddbdfqekaty]poexvcemyssklhllw
+wyyiqymjavixnwcnxu[xnhhsqavbnggdqn]gymwgjatpsojwfj
+iqdkuwpqylmwhfvm[bjgqryooacvjmxtrq]dqhwmcafwgedohws[ucnjhrhnvekrgjefzxq]opvzmoismjdmsezvle
+ommglribbfvicgmugx[msedauwycskyoios]qrhxlnihnwmktihzp
+laphdvdlixghsmjpsq[blbjmefxvnjnxmmc]hnzsqzhaenlzcvoq[ppyribixnyeucvjlv]fdogfvnymyznuuxa[pelyyutyolblxzp]fqgcltvxupdobson
+apnimgsoqfmqlgmjsvm[rdpnruzylevyuir]wwfenkdjpmqnvyf
+ltskflhfhupifhf[gwtcqaatnfjdgywo]kvguorbhzxfqrhxnij
+kqaeviepbnrokflimj[zqzevrvhforlozy]orzvxhevxtzorkch
+uhsjyhwppwarmrfed[nsfzcvrwjhfuwjta]nlthyhmaeghygqdaxdj[esqbskelpkfswkvwmr]stzggiejdzkhohumob[snlnvsgiktqewvpxhm]ahojfbcfgxqmmml
+idlikoogcxqffrufcqi[vcuenzmwggmbsknfj]peoviabqngzwiqtvri
+rigldzvrvmsmyakcjb[wwsutfoucqlgorxnu]bcuixkbifegcmltqibo[szoqsqlnduhgvhlza]pcvurfgchanmngh[glpfevaugptbhqqrd]vpndxitsihovocvong
+jwfhrlvcglbtbdlix[vmhtfcvzlshpfcii]gosuawoykketkzdhw
+bexfthnhhppzzutg[ewpudndaewfnwaht]wlnqstzsulregcwgmzw[atroqzyofendnnp]idtypgwyeatycgpde
+ldhjuqeykeelckq[qrrabgedfafkzize]tfjpjpzsafansvygor[jpuzbjptblhydidkek]bbkncsznubtpoiahot
+mqqxpkguxlmvyyk[vnxxtwxblmjdxjkhecj]shwgynlewfeegfwo[dgybavttexfiaod]ruobjihpitxxfwx[frpidegurggjllhq]kcfnatekrezeqoqnpqn
+pfelcxohsnhpzjnrp[bmnzwycytvwquengc]weaysvdqdkhrprcpmw
+llmwiwxeyezezpt[densmtrbqpiuwryg]pbgadfldspoahjimq[ugideashgoighvpiwid]pdvxaqoufmuvtrgs
+ynviititdvccfewheh[phaubuotpzjwqfcrm]spytehersqqwhac
+ktjvhepsakhdtvgoq[bnejcglklonqxmygyn]kbywvhkayojcufnwr[ipiujgjwknxzefdphq]zcmnmxqhuhjwqiue[dueiqqteiuvgyggtc]rbsyqjqegupwxbazttv
+pgnoazapsklgvmejjr[hjzazneywdxkaki]gfwcgiyhuaovsye
+qorimqvzoheryivfi[usbcrrdgseveupnqadf]bvedishdaepjjnrgftc
+thxrgxhchpeczth[eneefpesxkgwuxpnyb]efgidnpfdesgcmkqllx[jglvknahzvxyegxxedi]cupoduyjkdpyajhirg
+ltabaysmmffenou[fiqduygbghbczdsjcs]drfpocohdrhunajvmu
+rklvlmyqqxbttuhuzos[bihsvfaluvhdwqwcz]gbrlkbxpivsdykcjx[qoudfwhqcnbrmru]npquvyoxliacxpr[txyzvzsszqedximgecr]srcqshisakuwljrulf
+oiiruuqsdsjguri[qfzwehlhoinyhjv]jwayjxoutcbbsxquluz[kbgrvqmxzsukught]bgspboampsgsivvuwe[swvxxnjbmcpffrayd]txmyfolzjpxdvqzdtq
+resryrrtzhhnpbdrw[hnirhiummudhyylnky]gmwqolwapineiokcl[iqptxfvtgabqyxex]npeatmzdsfknpajsub
+aqjfwyrtqtrhnxdmfq[xacmscejzrlppqhlziu]bxvptkrvkahygexqsub[vrzjqbhlpywxzenkod]lqvsohrjrymprniyn
+obdgtytdzpcbnelm[scsrytqyknxdmzugidh]fpbpxshhnyxedvvna[fgebgketwucucajqip]cdmbxelnfsomsguvxdu
+yuluzhzwsfvngixjn[gjmdiyftbqimhxiv]gxjmpelluljxmuhz
+icsqqjcnwckhskoc[rhanawaofgbzenhxtfl]vsvuwijhjnaurwlb
+zbqzykdfeunfcwslv[fnqtxugkwojhjjqg]vetgfnapdhvbdaiya
+uxpnaesrcrudsmuxvk[zmffkqaufmoxgoelq]jldwuldydprcfgod
+lcaqgsbmhyfmfszya[brvxpxjvmtrdkdmfm]cphjfsilvnsdqmpxob
+cwxycngzriigcet[xltlzayrmdowajvins]rbfmarruugyqhvegod[nbyobbfqprdigngp]nkrwqcyinzutnklqb[ajhqjuhqzahxzjbk]nfyrxcupuphkbxjqlai
+xqwbcunarmghbsosq[jrmjtqqlogscgojnldm]bnzhiagvdwgwhuawz[toxpipinabgmkbwhtd]uxpgoorspsohkmd[dtadhrgzvfownrufn]xslrmvbosoeoeaewnfr
+lllhkodepygrzesxp[zeohwydmclhucevd]hbnsvtijajahmkclbei[byxhckkvqixiwtg]ekezugmyyavcwxtilwt
+jtjbuoavqyjhlaw[vbjakzkppzloxxfx]vibdluddkdsdexqnwl[ofqpidngtagumrk]kfoqunkkvyoassxlgg[ngbosgdywnmslnszsa]hxpciqkkafpdgfki
+nenfymvefbgzvag[wiqscyftlldcvsnp]pchooarrvfpzhwvcjpl[wtitvzxuvfufwviff]opjkauasyyfyspzoufc[pelszbarccpqtxvawi]cmkfptidaetuqkwz
+hitjejomylbutupmkeu[qdzbydybpabfnlkwkv]bdlbevsgqmwnbolnhfi[qeujppfhpzjbtafrgl]zvirtzxdzoojcwfohx[ftgmwthtcanqrxzks]bsafidxuxypaueoxg
+gclocruwassudla[imoknvpznyxchnrvl]qgninncvnnwjovnm[jwqccerrryoiwsqf]chcucyiszjrnobxal
+wqlihvvkfdyrhbqu[vizkatngyvpxuwhsfr]mrxbfaovpijyrmtjxw[mrkexdpmoaarqfj]kmnbalnjnbjcsdulczi[rkidvuivyaequway]jmyicruofboygakaozg
+dvyalwumbdjeaocae[zonftyvegiqiquqac]osgmsdmqoclweiqi[xhgqrjylvorhpfkh]mmpkmrsideufseuyaj[ogtngcelyserepmqi]kjezmzobtremfefqz
+ewovyikmmawzzrf[hcnunsbuuzhvduvyo]pdkiewvktjzzpqwvpdw
+pwfklqtvnpsajdvtyoz[gntgytituioaybkpjqv]wteojggsgedrjqdi[xzvkngdojribistpis]xftjryqatcesygfzoa[zddmnkhceqxmznq]bssablulgiiovynaqrh
+ztqjirnmogqbcfifh[vyeztcrzfxnegdyeed]redtifioqpfzykudrih
+osawcjcmfchcpgyi[ffwhlengegnjvwqehkm]rvtkttwkeoefydz[cokaihziodpeurmbp]spjznidsrkpqhsoag[mautcyrrmxsnrlw]dastqkwpjbubonqagfx
+jctsgqoqjqtodkhvvuu[ylovawrcpwpnzkfp]xtjdibtsmpbidvvdh[mmaecjrzneokajhkzc]wbwaapxadknspjujtp
+izxxelepmvtrpcb[xwoxroumisiqgpqr]lvhyjhchdicledub
+lqvelunldllnngme[lomutagiggypbbw]hdubyftczrctokdhvbl[ymxlvpbfiojaausmi]uqvhoaigwswemktiu[iipvkifnptbwuax]nidlqwimfttkbnmms
+sewpymbrjgtmkqd[tldvdouashkzpbu]qjujogijyyqwbvzqe[xmhewesgbeyrqkbfj]heapyhfvnqovmlkz[sdffbynjptvodwocru]lwqkbkjseujzmqprv
+oegfarvdcswdpnss[xgbroqaseklyoxl]wticmsitljjhgos
+bfhlklvvprpfgxt[wczpqxciyyulsgf]fhlzqdaxyerlulakhbi[xgklnelwoygvyged]ynhbzkafydsmevse[dfcrqsfpouuvsycxi]otcdmymmlomedultqa
+pvyddrxqxuxvzfqfl[nipfbquzzbmecwuu]pxzmehysojqnpna
+vthwugdifklqusu[fmffwynjxyagyycbup]eaompujnjzaowbxmg
+djekvgwpzkgwzwardaq[sjycmrggjjtzpzoq]zgagtgosiowypvz
+bicemnivninwfubpi[enghcgyjwfuwqvfcrh]crycaojgzeqgyxdq[zxgbztjljhdhzpoy]ygxqydxramuikbawdoz
+wdigyfqqrkjeseda[yjezqvkmaqfkcxgu]dwpaveednjywzth
+vjeaiuwrhweqviyv[twssdwyckfswwqg]bujjzsuffbcddcqd
+ouivgjbmmsmiezanss[mltubwnsjkijprjae]dxjbngvqbuzmtnxj[actzjkmbxwewlhmpz]aeweucknsntthwwvkmk
+hqxgwpeaugpibuu[ftohsergcnnghmultwv]oobxyesnifpglsyumqx[wthgkfckhzdlzeh]tbvnqcewxwzutlf[dbsokgifbtstadxjlyv]hcagowbeupbbxvnnudp
+fpgthpsgglztrnrjvs[rznddjrlsjtdrnufotn]nfoxdbhyvovsaratt
+idauaxxyrjljwtqk[jtrvbiyczhqigjxfam]bsmzdrpeytyegsvitk
+poxzegvwjgitaomcy[eatpylidmcjifnbyt]pxsatbkkqdylippyjd[nuwjwmoghmaptwgm]tarinkguhfewrxedty
+whrppysnyuopewxlch[tqeujwwbfviqker]qvintkkgeyiysbl[zmhfxkhgptetdsq]jazfxamrhsjvlcwr[ybdhlaudcktfgpjajk]vnedwkbznnxoegxe
+wmgrbjddretekijeqaq[wxoqrjnhathlpva]nqrxdfrjrvsaxzgn[voeyknzetkswzmonnh]qexvtsdihbxdwzeympo[mplyvliqtgoezpr]bsjrjqbvgcrxwnpdqs
+txicytmsosvlzftbikp[hwjajoqvcmhmitvqnh]gndimhsqdssjugsp
+scuaijeujwpdvdlzf[byroacgumqpoawl]lofgfiiquoftdrrxnhb[vowfcxvalicqrtpvkga]vdehstpbvncodihewhv[tqrtdbglbqthqfjyu]loycwsbaxhkfanhnp
+qgexpbjlhcciuhouo[apvfnzznkuufvlo]njoupqjamycblyd[tbviqvflseyhhsmxz]lvpemusmcuajelt
+jvrllpusmfmsnwy[yqlfrmtxpvwcllrfev]hpuqtteqblrjbnkx[puadngfdbecfuhuvrqb]myxzjgttaacbhzlpipf[gcjfzcrweoksbywfdc]mnchtfuqvmltrxakz
+ywmkwcztiqykpmju[zmkryfneelvtwfnm]zhuiojbicjnfdmsdhi
+jhgrwzznkirrskfzfbl[ftjkmxrdyljxzov]wcszeohqiseprjde[ngrtygnnwfandfuvr]lqcatjwzlsbuqnzyhw[hdhijvlmfotjdaaivaf]glgrbynrgpcxjihg
+ujtcxpupjndfftyfay[wzspgaqtsinvgbd]oskncvkxhimahafzkp[tbtuibverwndjkyrbtb]vubbwzxvzotdhtvvx
+dgjxjkogwuxxgavcit[shbqapwgyduxmjdzs]sqmxfuntsqibnshlszq
+byysjubuacsviouubxd[idvdypsyblnsmvvv]llcmcxizvdvtmksphjf
+bfphxfyrcoddphmhwh[xvbfcujmhltkfiqaejg]wxxbzpwusjrylub[vcxoevvppeirkcl]bmsyjsnoixvozodjpm
+amhqkszrkzcvumwjbr[wgobbxkqavcfedi]blkqusznjzozcwyatzt
+chzanckbvfhvxoikx[jeyndyycqesiujnj]midrrqwphhqptlbgy[dcelctfpcmitlbrdu]wmrripumgjowiedxpcu
+rbpkmcggsbshhytszrb[rjftwgbycnmyxxockku]nrtwwneopxuypblr[hovauqqiboxesfrqqfx]ytyygtytusfdjwco
+ytuvowkwojtdqfjtmj[ssrmnlgjawuaqqrdpv]ugahrlchntdmkwkygr[ojlgerllesmyzdbnvc]zaztsxmsddgciyz[jdimgvtyvojseeavk]qvyupywbpmhgoppfwru
+eirfjumdodlaevcsigl[befivodoxdnhfmqwkxc]qjaeppumixfpezjf
+lqkzkupjsinhxws[oibgvhxxpewuebro]qbweuxvitezbungy[lapasshrjxcjgdooj]hmxejqpigbcprqregtu[pqqqhbjetacltithm]zhectfbzhtyyvkyazu
+ihfadsstuwooioj[dfqkggnfiplpdcsnmx]ylmhqzhlwtxaxhx[yyqzppjaxhmgnlll]orngviyezsyopwfxmhu[pucykxnzcwdwnjzruf]axfmqcflmrxdldubnca
+rsaoluhtqbbhahhk[ursokfyrzqvmjsq]xlniovtwozkeahaydy[nyualslnfurebmbnv]ehgueldltahorrpbbyr
+lviuzeeixehupjezj[gzwzktpbujzeyypbqyi]ecapnyxygcmgfhgmfav[qclblpzrkfredwm]wcdfuzpoxtmzkif[okgiecyymbnmziyyke]zflgxeqtxzeezvc
+wzpeboftsvuwnxel[hmqswpadnffutphylpg]hbapzwwtxulrfaenb[hgsimoxqivllbthuavr]jpxhxohhxhlhlfemuz
+xbojluzthxlygkyzkwr[hjnkqiofmyuospv]gaglxxtcdnnbfvjubea
+uxtugntiubziynpzbju[onxffxfoxibzzzd]wineojjetzitpemflx[jlncrpyrujpoxluwyc]fxvfnhyqsiwndzoh[lkwwatmiesspwcqulnc]cbimtxmazbbzlvjf
+bezefpkmcyawtdlbnmy[yxmpaexxuojocuutf]gybqtynhfakfryzyoot[rzddrwizmjilbaevypd]wjfzotxmdlvmjcklea
+psehcauaffyyegx[pwkfxlhukfaavgq]pprwkzrtyyghtmsciep[rbobphjpqsmeuvgrjt]vlobomuxuflrqfwjo[nijmtbnuuzplcprb]snfbebpcogbvkwf
+cwflkfoevdvovrmn[xfkkrwrohqcdsdyuomb]ohirkxwgudwyepwtvm[ootlpxttypewmdjq]snhujgngvmxwpmagis[fmbwhgzljomkrdcph]pvfendnvzctahabni
+eoczaktxgrdpwordn[rbhnrlgckthgxxuzu]htgvsgazuzqpkjoejg
+wwadqndhcahxivixrpr[byzxpjmhnwsplkf]zgwftzdjcyjhuefzynn[pvifqpqbtfpvxmhma]atwcwmmvncdisnmw
+cjbhnctazhwdvcvza[ydnxbdfkufaflga]tyxejwcbirwrznjbf[wmrholfqzuzmywhlx]yuglypghwrwzmduczd
+sucrzntdgccanozz[dbyodxkqvfamarbda]iwcomrnnifahrolyhj[lldsewtcmdwovjto]kxnjfljadgqmjmmr[jpceairekkatfdo]loulprskwdwpwupvlow
+rmkxvrnxpnlpgxk[ymfqtqhsulsvevgy]mwlnvrwgovdeimq
+cjytdtwgtpfaoqpo[ekwzzukvazymdgcjbax]qmhoxsmtmokxfyggfsl[ghoubcwbxpcflxaoiqr]mhzvuhnaesfygwphehq
+fjfuuxzzuifgatypkx[pqxsrnqgcfmmojf]drmywevzjvfsdwoe
+aaltjjojczwavnn[wsduayllqabakudvkzo]lnkpzrwwahybafhnmlt
+trzcoixqxcnlfmu[kxdaqkezsbtcrsel]aimhkjueidtzheak
+knsjvqpezxmhuhawprd[zfschikoyuarwrpvh]jnwcjfkahqerhof[eiezpktdgiogoghnyq]xumsccawinipdfbk
+qdxlgihyxpurnyesn[uoqazfufeeorudagpbq]doynfpdydwxymmbnh
+hhxsolxzfchrnjue[qibcadmwrkmkbeye]xydgasalivcqoag[oyblkffxdgogkbjkk]denthwhcbyimeeyyb
+oomceudfrpdpinwaw[umnoeimbzecoaprmqr]vnswrzldpdlfoaaaxv[ysmxmvvxuzozxtkar]eatvxgtbqcoquhhzzn
+mrgnhaqqyhhvdfoo[brbrzbaajkxnrbkpsx]qknvrvpfabkczng
+xtvcrctmszksrojch[bqfzfdhhsfkolghur]dwqpjaqisitqmhpnkxb[omfmirdtvkdoehc]dgogacudqnrtshre[nudirbvfeacxjhb]igdfrdrqycnowffn
+vrgmsmohxhgyybr[shaciuypkvkjaqoho]dlwfavdhohiruaef[iowdifdsyckgfaixzbi]rbkuyahekeohyxnyxmo
+giaemyheoijyiqs[dditjewdytotrevtph]nrcosaxnrsfnglxyrbh
+aqpquczuuqsqfmiynf[rytylbwxvhzymqtqal]olufblbfhnqfhbdpjc[njyewyvnezayxeqkooz]yawvjaofjaqcpsaqnlj
+ynntsleqhquylfosn[esbohqcciuuyintjnn]krtinqbvgjtfvdttys[cahezzmqcfayrtijrl]jlquffpwepfjhij[gsryvmkutwbfvekc]xwuhwthwkpiprtpn
+wcifpmwramdtgbyx[mnetsyvjbkzlemkkrj]ghtuuasxyhlhdiqi[oidnivyrbzficmrkxa]sshjteaabilnbbv
+jpzlvsyhfjewjsp[zaukqnrnkxuyblu]itarroefggdtpkwknhm
+nxdmkipobgdhcekuk[edajmdcmxhcxntroa]vgrzzrytukuxdetf
+elfvvedwjbltwcnsbat[wlyogdvixiwmkxvshnm]cwhhqukydgvfwzkw[hendekbuynbsgeza]unurlefaaduvvpbi[uriiixudeogykwckty]tilfmprasfargwjoeaz
+ehllosfwjnemfpzkjbh[paefpdhywomalbjjwco]jynaehuopnolwbg[cusfqbvxlvqtqbuxgyg]dnvunkjnzqnxcginfx
+jfdeexfzxrfxleh[xqkthmkzmmfbesrfa]ddwxrlspxpefvpkhiz
+fpexyleujiphzrejgu[rjjuimrbnfxihopoasz]xiovbrwkxkchdagu[rssesjbgdfwwomrpdxi]xurzdbytoxjkwyzl
+wtudecnnxchnjhuz[ntnjpmwnwqpqqkcevi]xibzynwnkahwfizkxni
+hxvhhsyrupdpvjymv[jgionvwaxuiemcdtvn]riesyfkfymxxite
+ndpfqkkiqgvdiciv[qwegblwhxefkszrc]ddticzcfwxoylaheuam[kyqomblpykgrsofpbz]woykqlgorinilldl
+lupajnaqxzgawmnb[zfmybtxebhkalxwfwyt]sknfwfxgdqpbnqebbt
+qkttfgfwmqxgpbcgqvg[zkftxwwbappqdllajhi]ducnsepawowmjggv[osygsyvnhlhkrzahzoa]iygudcaycsrtbkohbrd
+akdvrmxjbjaahjcfhz[nueiutbritxbampij]vjirxewhgmmwlora[uauyvvwvrfhbxituz]omfdcitqhjhentxgfu[fucgdtoxvryasxib]wyvdxqpofoszluslht
+eorazrawyakawjfxdtw[bpyrfrsjhfualcoyfjc]gfgrienuzeifrfvw
+mcfhxjmwxlcreeloqkj[xlhrkjackiehnqj]iubxmjyssnwjolapvs[tnxnpotyzdxhqamjfu]qakefkzqtcahednybux[tosvyefshtbgasbf]uimrnuvlevqylbpkq
+emyfqgrtebopsxa[qwacgpmlcpoitzmdq]weqwomfyfqhxmkjalw
+dgnbvzkwdnxzuduvdee[palmkulrnlnjdyeavyi]cjgsjpbxpairrderw[nnoxigqxpkjzjhfxgxx]xdyxrtslnpmmtpotla[undscmvmhuxzohsdg]ghxcwnjphcmvttna
+uppsitifhxdcjbn[yiqjsnlktwkbfyho]dpftntebjwcyuih[rrqikyarnxteelpkc]qbjeplbraadbjxoicjn
+mqjlmaekarsttdmnl[cwdajzaopmbrikcv]vfhztmfwqcwsbdnyebk[puetgqkczejvdjbfqc]hdkqfycmizzpuoxumm
+maldhmhtlcsjqyzrb[zjbfpjpvdszrqkpzf]xspijlrjyzjputpz[mcjmewdtmgfqutbah]hebhshxtiedpjpjngu
+hiqikcyyvddlcggnq[ehsopbptguatpmyb]wfayjslqiqivsbrhedh
+zriahyyoezygvjmepy[dujudufydhkqlbc]ndalzjrjswnjujfm
+silotorivixpdydnd[wtsojgrfgugwoyo]pfihyfhusblbdodtej[hfclibenimixyexhble]gaglopphfrhqxikvw
+ddejnfspvmvffpfyozn[odqqmwgalivbswfio]rbbkjhvnszgvfjtgog[fgvufpphptnjcmraha]adsajvzndnajmilk[ukslffqfzyvxyxy]njzcfhdqyrzzctmnxn
+ehdmevcrfoeejfedbnz[cidowzljgyawbjmtzun]mxyjuechgccpwlxj[ynbdkyqvibsfwekcjr]qjilshucvucbebxmeyu
+wfyklfdesrxsopcnj[otmmdkdasnvomdhef]lpbexhubcjmfwlt[maeuvtcgzoxemnreol]qbwqszxalocdbfbtge[wbvswinrpyzjbfrsr]tinsrsxtrfkizkeu
+grorjgszsijwlhxfrjv[hmjhqmbipfjguwkzebl]kgphtaonflqlgbyk[qxnjzdupbhhsevc]tyflwvcpxchibnttwsn[ukpfpknbyacpxmoxzmp]dxzkerytewihuptx
+csyjgthhgyhnjuxxg[sjqffhahrjyoqxncjcj]owwprabojlpraeyk
+ibcaffhxenjnmvrnog[shqpfncawueqmpyj]hawlfakyplonsim
+ftaeqqsyebdeveutf[tnifrefjkddtblslzwd]cbdooorsorxwxugrp
+ioigxerknwyrzoztkv[ffkgwjfeowgtoxnyt]zhkhaqrcdjsvxctdj[ebntbwbxzbbqrdasjz]solgzrowmzozovz
+jfmlobddfxzipyzyaj[qghvghaxzmuhrpifyf]idrqkcfvatwsyom[wncyawwmennmgio]luzaexvwjhxbryah
+pjcydgylusqdexbb[nsoyssffvolztzns]mntwrdacovyfxcqfn
+tagdiyuylrtvuyu[exjzdpmovyftjpxgj]vnswkkhaoldjfkwd
+atowdglgkmbnrvyt[uzgadzquqpggiapdznk]snpqanyoeufutazn
+nltynylwgqezegky[rawbwledrpbduldc]isupsldtvjtahlwjgz[upmovvichcymgwuoqrc]gyjptxtuaqcfixjuanz[cxzbiosnqkeaxlkrxh]yglfdtzazlkxgmrlel
+ezensxwulgqdgytdfo[ozlmpzteuyjqrxocn]crruxzecnvrcpjurn
+ycflwfbhueatnpimmkm[tbcsifgtkkwtxosxau]vsnyspuvhhfozxgjbbp[adcyzxtdknieifc]hjkfmbmxkrnksewsqjn
+gffllhgsmlpxkktcq[wjqwhqrwepermblfolw]wzgcjyrpisbwyhnz[yjvzaqjsmdgazjuep]gregropoulmnagcvx[gfjkkejnxmpfbtecy]ufbqwnifaugffsai
+xfrmlrlrhxsownybek[ryhsyltyflhjbmltndc]agtvigglsugquzbc
+rshzvotgovlabfxr[sbuytwdobnvpwcax]bynmysulnnjmhkf
+cevbpuyyvlutjcuutl[pfwloktlqbxfcogrc]dflejqcyvpasjowhsj[nscuwnjsrzehqamogtw]scemydqevrcuvhwxpe
+nsbvubuyjrzsalkdwz[fooatkopdyvkxjgfho]jwojdgxqtlzxgna[vmkwusptfjbgmhq]xkzpfgkklnxunma
+jovdewpqyfouyzpegwg[eigxaawljopqauy]cjvieeexlyiovsugif[wtkkpylnxtqrepkjei]jrdmibhhcftoeauh
+flpwanunpldmcnated[unzsihvveyitclcf]gqxlznjbnpmiojuunu[kxihijtbrbyhkzosvk]xoxdqctctmroxoppilv[equfcbnltdiwdmahu]sxfloedvbznwctnuqt
+wtktlikeigdndpyw[dspimpajtzfzmfya]rmmuigyferofztnuir
+thnfrvngjhjrwdatdc[vwmnddbpbakuapirel]qojpomziuupsfysyfng[gkgjyjoovotmjwwgvrq]xxfsycfupudisdbtk[hnieklknhbwcfka]qbanhtkdijnnfegs
+mazcgrfwolhhbtman[jokgcthhpopluovccrg]eybriinzdwjyfjes
+kwxxubruqgrsifrpuxe[pqjcuxzpykriher]rcjvrturrhxqhjndj[umqwgmhgidzakfnk]nzbbrgxxsmkxahvqzs[rnqcmdjyrldnzrr]nhztvrovbpifyxbcvti
+kgojbczgybkjpoz[nyemqsvkokdfxiata]lrstpiuovispfmuoi[jifgmwihkzirfnblzqu]dixnvdkqejtatylghtd
+owhhzrmvmuosrtiwaf[xvdujvnkkrunymvh]dihbvchdelxcqsmlxe
+atcmrejivvyxxbsexp[cjlvkmfgfjslzeno]liavdjycjpirlux
+snvgwihgkhrsgdzysbh[bbyzthwnbpquvtrmlc]cdwvzdogbisfoopk
+lccrydahkgmzirmjzfv[rkkdtcqmlfkxmke]xkercumbulkzrlgxng[deksxliclevazssc]yhidzcmnbvgacmdv[ucxflzawmxnmpxa]hrfaesdlnukcblbqlm
+jdajqnzqyhcomekhejp[tyrtsgspmlmrbkm]nyfcgbagjplztrigokr[ntzzerjwsgafymxw]ftckmtirxfdfcqpi[pulepgarnqxbvlqmvog]qashqfzwglljzexbnsv
+kjvalulqegxybfhx[djfulullrbsebeknl]bcxpgathyauumxcrsmk
+fihxcyovovcmukir[gucbridfutpdnto]abzjiaponkgoposvhw[vpqwcnzmovnwdwwo]zrkqlpnszeioesnhk
+nyvobmkhkbenucug[dwpifbppiwftzokarg]vxxalauqmooacfmdox[intaxgcpfajzdwmcsk]brknzsnhuukxjuv[fkheyxevpuphuflvzkk]levqirhqhynkthsef
+uwdcywcarjujlnh[qvtowczbkenlghcmara]kfhcbnrkorcoyhkww[mzzwrpwwkrnnfavjxk]hcjjzxeynegdpfwdw
+xtgkbqtzbeptcxndjxl[jzmbcxsmcrtjtqi]wnhqmctldgxjbrtio[brnnosnckhalqzqsyyv]uhungebnygpsmpzmj
+xrqpqqsqazzlqcdglgf[ziiwwokpqiinmqe]stagyposntgyxnh[ubxzaskwfzlfrmw]fimsoerydnghxlg
+bdqtpixvllcdhgfqby[xurgfxznrblksso]wgfyjdmpjqirhiqvgg[pbgnckfbdinlepkb]mqbqboepuqheaop
+xxlhstlmqypoyhb[czlhqkifhucxqanafx]jkaaxiwxrnneudczrtn
+jhcmhtveqenmeczz[rcpnnuwvwiyfjxo]bvtashqfjcnbrqy[ebgihcdcimvgdwochq]pmallgnuofajusz
+ltzknsdqzdmbpxipt[golssizcvkrcmquotrj]nqjkcgdagjqzvri[xzehrntfgcnmgrh]devpsfftuonmevocw
+wgklxpmeoznyxtukh[nevjkmpvlbaulxjieh]wopqaknwlwjquxt[mxzczmngcaxharjipt]tuvwngrmylububv[ryewaqhshtogggdvc]xpkbqydbwshscjcw
+uglrhqngbxqtqmdlyym[ihdwlwfqiwnigvyarcw]miyynkctggbwzfkq[rqycaudamvwoxju]mmnzentjyyddntnpgxf[qjryduwnivawjepknli]toodveiqtzjxjvq
+tkgmnxgifkqzuut[csyogdborjrnygg]rpcbucosajyyyelju[bbujqtlveymlqesvg]wvyfimibeynzhsotymx[tqxldisulrhuckef]kgqjgtaluastnwev
+qifwiunabpnzezlmhh[ffwsncvlqpulttkx]wlwdpgntblnoubom[fksogvukjlzupwetlef]cfszpnemoifasqw[ttmonrrbhknspuqx]htucxamhxsoigvt
+putioshxpafnkcwdejm[dellcuoevwyyhvwurpv]zezpevhlmpzbevln[rigyoryyhoxwlbg]zkdzexpizgsumkuiuy[hycpaavxiqnlngrc]gknnfredhsmpofldn
+eknxasjdtsksamfc[dhtgifeezlgfhlyvfdz]xfttcwzqucrtngdpcmf
+uyiazdptoxzxbzo[bmuglholukatdbf]ascjhcllcatoapyvn[isqfrvbbkzsxixjuqrq]ncwzqqgudgwrtxvzfe[spqvftdlddlfglgg]zrqbukmufumytpc
+czefxpifdsqjjkoxgj[klwshjzagbrgtpiht]xofokkhzlnjplefofcj[xodekgjbgraikdley]dgsrqzqxjxjqftn
+ertbujoaanuvqskr[hsgeexqdgsqfkiunhpa]orgvxylmsdlzeyjzf[mdkgzwdnvtyoogulx]nbapgjckrfxeniiqotx
+wgywdqnvxooqjsefac[qgpmwggewotnmloq]bqdvbzpvqwadroh[bvbsnhmdurzcubvsno]ndwqyjenerqdupuob
+patbwuitsfeqvswby[htsntyfmofqldcbwgv]zolnndvkaimzdmevb[feyvwvkelmujnppg]tjajsdtevgjukkgrwr
+hoznvyznwitnxlvu[kigfxgwcrdmfwgsqnf]lhiqoaqezmswakdcd[gxmjrmvoxkdfmgcpqnn]ditkwvolcazfuxzfroy[qqlbrrwfedrgtrgm]iysjaakrbnqicefqxsr
+ufrkrtywkhfhfah[vufpfwhtxzbdqnraz]kklboeggazttzui
+tplrraxhaaaoczdpg[vzbnososnioajien]dvdckrkfdetoofpi[bywkgphzoglisygthku]gxtnstjmffnepin[evccrlnwjthfxhhqzc]lisguwkfwswblzc
+lyluhnglmfippljtwww[wnkwnwwsasqbrnlo]nilnannzjbpgbjs
+iknqwrvlcztavivxmh[vtfyhjzauqbyjchjt]zxmasnczpxlusknrmtf[yvfnxlrwgfxkdlj]otlivjvbvilezalha
+xbrzzccetyjzrlt[buwwhcatpcchdvhel]wosdwuuzpekifdhhvpy[twwoaezcowxvioqsrrd]uuygkhojhlcofza
+wqeintsbeqzjpuvx[wqlcamjmpbtqqzjcy]czhyqcurqkfnnkoltja[lozjcddygpevnxebmqd]avwqdpfxcrcvmalaczo
+aecvebozlythtcfzt[uisdkrrjeboxpuclbg]sjxcgygpeuirukx[zeoyaxgdyzfkprewiyc]rdlnzpbwgztivpdon[sfcqbpfgffkchksmfjp]yfgrlxiixyurxupuoij
+vnglyokdpxlgphpw[bjnaqkjojazyryswr]bekdduuwrqabarzwzh
+fcggyliuipcvnimphib[adkvjaembjcqbcc]envpiocijefswhv
+pgraswoweceiftu[khhpmbjghxgmhsud]axqjkekmecwunefk[pvelpeorryjcstk]lruensapttjtyxnr
+jomdrazkwryxuyc[qolcqhwdidalguboza]fcofbrgowezhbyqckrw[wurpvelnhdewfoita]swxwyfynaymvrhleuj[icdlergnbqmowlxjl]vxcwgvrvpdejoybt
+axbedlkxkmbvwacv[uabrmhoepcgtsdmjjzy]iqqpitszpejeeophjmv
+gmltcuvpeuofwteput[eyxdpnceufobjelir]hvajyjjzgkyrtgvrfs
+sfyyzksaymsvykmr[xjewfmfhhbrmwzf]cbzjmltnzvcodwtytbz[ewgckbdvfnkkyxyj]dfcrjyoakdyggbsxm
+wxjalqmicwmwkzakcy[mothnmmvgypeacecvz]hbjasxlsbbgxpfdptk
+qtsgwqpihqjgmjadkjz[skpdhegagxxbmayy]eaojrccgpxovqpi[ixyljrfgswullqnbzdz]etvomvkwpzpxxcj
+mbnifyngahvfhtfhql[azcbyxkvcnoatuo]scgddcntikvavaseu
+uciiofzqjkhndnzx[hoyxdxfahorycpfcofk]epeazzccheaegyobu[sculkaizijfqcrpjl]nrvfdtpvgoqioomvmv[axmvmzytxnbfcsjf]fccriiwmdaveeyamwp
+sxizvuhprsyyxgfqgqx[zwszjxransryibshzw]ikquiagnkoqexlsqypb[zpuqrhaqvkuvhiqk]pvuqiqxpjtsyqgcyr
+svjudmyxlshxbbvawl[inswkufalzfwoumcv]hrobewddabqsiuej[ulhptknpxcwqxjxanjd]osfyeygptwfjmvrma[pnuynwtwuulsizw]srhurplerqabvouelhn
+islwmbcjeljkceppiw[whvcrbqzgtcfbcuv]tcyzkgyzdaekgnzzmz[ddefwmnklcddlhow]npzbtwmzmhjtzljnr
+lgdjrkugqewlqxvn[wtvrzflzauwcxkyp]qbswluceqlesdfwy[kbtmzcvoubbiqfc]honrvxwcqsgphvkt[djuuancygxacmka]knseftjiunzuxdi
+miapzpluxnmdfvi[edlbwflzitzghywio]vizzhfxgilwpwhr[ochurvodstmhiypp]rycvogpcnysngytixb[mqnrhpbvojfefcicx]zxqxoinunlkjvetkvrv
+spsecopdywuheqbnm[npwovcwlwooxqhyp]hkuizzsdvysvhvmlc
+oqchahhsrywoeteaeg[ucowjiwrzkfhyebbco]efxdrribepcvduwjgf[nvyogembujkkmcm]kmfrlcaeawrvofxrim[izjebqewubrbvguzk]ngmugyprdvrbqskn
+vwlikshqcpgxqvqshv[izqveivxdxgytqgdk]abnvmprwbvwmrwlkkp[iffpegqsxjwfyvixtwk]iseiapjkgnkcepr[gtfhysdedzxwrhcgt]ktaeihyqegeozdfuz
+aieqqwhwfwxpldni[huyxdcvpglqqkeyeia]teztoyeycqohfli[uqvfjzbsvttphqxsy]afsxoqbqvtxtgriuzjm[psumrbbtxdxlwpk]qwpuwevhjellemzp
+surpbndlvplunisu[alnojwsmgbtaomke]zjyikoebzazpwql[lkgsnxodocsrniokroa]mrcipdncevvazafvkb
+dkszjaqhbkyxwvwj[wykmzcvppharrax]pvrqzqhabqtuhrj[qfxnormttaxsldn]kxjwkrjwvbiutgnfnw[mbspfflblosguqzt]nifozavfsfkngds
+uwafdvptgkfikprb[xhmrwxqxnbkfpdz]efhnfwvovbvglrrt
+kozevksryerpsrgmub[dbtinyialvlkgilue]pyqdyodlttsnrsmfvca
+mgfmdcxibcgzhrfmm[mzvyabccrdzlaiij]arnetejwseofkwqvxi[fylixbrjhxdfhiewbnb]wvndnswxdnbcktp[tetomqdkfmcndddruy]biuxgrvctlbbrqmxjp
+snjnfgbtgpkouxlpd[vapbqurlxyrduxqy]meyhgdsbvkdadsfozf
+fgknedldithvaoxqpl[mihhhdrtpjmoridqamt]vfupazymsipoana[ngqkziyavxkyukp]qqysmfkyaxbuytr
+fugbgojgdeavlmrut[zpukymkjkapibmhg]mmdesmcwbhlfugkdiz
+lhhhlyioiiknkray[omilmxkodlmvzhkgbaf]cyftkgjpvjvdnortlj[ifljdtkgscmnmxsq]nxtettqnuaotfsh
+whayrxopbtvnpobokn[jfbobalkbfjxcsn]jjucgwedwbcfrdginaf[atdoatealbqhiks]alzapbxuvmivqfgpg[qhzdwsbvcbtlpchem]pxxskedydgisthkatn
+xzreuonsdqobzpxr[zamxighfvnaxqum]olbigclentyvugtuvg[ysrgcksohtkvcqmksqr]gnaqqezdmnfbbnir
+gmmabzkwsehkwjnevvd[uuzdntitdazeykwek]aebpajrwpyknqgx[kczhcuveeawmdiwljzl]ugwigmilwkczrcqnfo[piezzmfwnfdhnlbranp]qhremthdwdegacvptfe
+tcqhlxasqmbwzuiuirp[kfqoequocdsfwqt]ikhdkpkmeezfzfyyilf[lrorfowgsqkflwauhu]zshoiccvfwohudsmdcr[zohspdmqcdvgagdknr]zabaqgsmrwkrtcuyct
+fzanofpykognmio[ladtxyissyfrssobo]xqpwrgdmglgqhwawqok
+hynipihszohrqwaezga[iqtpgjpngbwhpailzg]wfgimkpjrjnkroueh
+lpmrkesaqdojkqrp[dcgsayoowgpiwam]arphrffqpcdntlxsza[ogneaqyckrvdcvqxbm]xlogrojsovrzfzjtjbd[qjoiyyatxkwsrvldp]gffgmieinxlfzpiej
+jaeayfunulncspts[stghconfjhkqkrxncwi]kcnaqhyukuirsaeebp[vynwfnoxxxbqztj]gddvegwjuryfnkgkpqq[jnhmbdpvsxreqhoek]pgpikslhvbnmbxbkbc
+lajiqiaxcxgpvsbu[bfetstragmoosbw]hzurjpxhecnadwosn[dquibbrojgurqiqd]aceccsnyrnfmcsd[quqxmzleqvspvsemjpn]noxrndgdrkffsdvh
+bytcvwxuavajevmde[nhmjatzolmbdfgogup]qpildujniqlnfbmuf[gxpgorlbxpqfsoreuey]hcfyjmkoywueuivrio
+amvudustnspjqsbpjp[wdudhbvvlgzbbbwlafg]kwpyjvuerzyzmzft
+vwpklmfpzssyoifbb[bwtpxodxedpdsvgu]azathmhdnqkhbmrdlxn
+iwzncixpjxypnmykke[wlhvfjbumhmtachoab]wtftbolwhpwnropnzv[zhfcmkbwizknymev]twrumqadwvsaciwbwoi[evodjtvrucrzgtwio]fmmbddkwwpaziycik
+dkodbaotlfdaphwzbcc[ldzeemqiovyqjgs]qxibabdusgaistkru[usglloxgycyynmp]aaocvclsocababbzxeg[liaacgfxytuqudp]jvvqsypuoduyhvraak
+bwzsacxgqkbjycgfw[dbnligvrmqscasutn]rbgybqqsgjvlonkut
diff --git a/2016/aoc7/src/main.rs b/2016/aoc7/src/main.rs
new file mode 100644
index 0000000..254f23d
--- /dev/null
+++ b/2016/aoc7/src/main.rs
@@ -0,0 +1,95 @@
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+
+fn main() {
+ let lines = read_file();
+ let mut ssl_count = 0;
+ for line in lines {
+ let mut in_squares = false;
+ let mut char_buffer = [' '; 3];
+
+ let mut abas = Vec::new();
+ let mut babs = Vec::new();
+
+ let mut chars = line.chars();
+ char_buffer[0] = chars.next().unwrap();
+ char_buffer[1] = chars.next().unwrap();
+ char_buffer[2] = chars.next().unwrap();
+ if is_aba(char_buffer) {
+ if in_squares {
+ babs.push(char_buffer);
+ } else {
+ abas.push(char_buffer);
+ }
+ }
+
+ for c in chars {
+ match c {
+ '[' => {in_squares = true;},
+ ']' => {in_squares = false;},
+ _ => {}
+ }
+ char_buffer[0] = char_buffer[1];
+ char_buffer[1] = char_buffer[2];
+ char_buffer[2] = c;
+
+ if is_aba(char_buffer) {
+ if in_squares {
+ babs.push(char_buffer);
+ } else {
+ abas.push(char_buffer);
+ }
+ }
+ }
+
+ //println!("ABA {:?}", abas);
+ //println!("BAB {:?}", babs);
+
+ let mut is_ssl = false;
+ for aba in &abas {
+ for bab in &babs {
+ is_ssl = is_ssl || correspond(aba.clone(), bab.clone());
+ }
+ }
+
+ //println!("Is SSL? {}", is_ssl);
+
+ if is_ssl {
+ ssl_count += 1;
+ }
+ }
+ println!("SSL_count: {}", ssl_count);
+}
+
+fn read_file() -> Vec<String> {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+ file.lines()
+ .map(|line| line.unwrap().trim().to_string())
+ .filter(|line| line.len() > 0)
+ .collect()
+}
+
+fn is_abba(char_buffer: [char; 4]) -> bool {
+ char_buffer[0] != char_buffer[1] &&
+ char_buffer[0] == char_buffer[3] &&
+ char_buffer[1] == char_buffer[2] &&
+ char_buffer[0] != ']' &&
+ char_buffer[1] != ']' &&
+ char_buffer[0] != '[' &&
+ char_buffer[1] != '['
+}
+
+fn is_aba(char_buffer: [char; 3]) -> bool {
+ char_buffer[0] != char_buffer[1] &&
+ char_buffer[0] == char_buffer[2] &&
+ char_buffer[0] != ']' &&
+ char_buffer[1] != ']' &&
+ char_buffer[0] != '[' &&
+ char_buffer[1] != '['
+}
+
+fn correspond(aba: [char; 3], bab: [char; 3]) -> bool {
+ //assumes both follow the aba pattern, so [0] == [2]
+ aba[0] == bab[1] && aba[1] == bab[0]
+}
diff --git a/2016/aoc7/test_input.txt b/2016/aoc7/test_input.txt
new file mode 100644
index 0000000..a675097
--- /dev/null
+++ b/2016/aoc7/test_input.txt
@@ -0,0 +1,4 @@
+aba[bab]xyz
+xyx[xyx]xyx
+aaa[kek]eke
+zazbz[bzb]cdb
diff --git a/2016/aoc8/Cargo.lock b/2016/aoc8/Cargo.lock
new file mode 100644
index 0000000..dd33856
--- /dev/null
+++ b/2016/aoc8/Cargo.lock
@@ -0,0 +1,98 @@
+[root]
+name = "aoc8"
+version = "0.1.0"
+dependencies = [
+ "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "memchr"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex"
+version = "0.1.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "thread-id"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "thread_local"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "utf8-ranges"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66"
+"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70"
+"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"
+"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"
+"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"
+"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
+"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5"
+"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"
+"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
diff --git a/2016/aoc8/Cargo.toml b/2016/aoc8/Cargo.toml
new file mode 100644
index 0000000..c49deb6
--- /dev/null
+++ b/2016/aoc8/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc8"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@entelect.co.za>"]
+
+[dependencies]
+regex = "0.1" \ No newline at end of file
diff --git a/2016/aoc8/input.txt b/2016/aoc8/input.txt
new file mode 100644
index 0000000..d827762
--- /dev/null
+++ b/2016/aoc8/input.txt
@@ -0,0 +1,194 @@
+rect 1x1
+rotate row y=0 by 7
+rect 1x1
+rotate row y=0 by 5
+rect 1x1
+rotate row y=0 by 5
+rect 1x1
+rotate row y=0 by 2
+rect 1x1
+rotate row y=0 by 3
+rect 1x1
+rotate row y=0 by 5
+rect 1x1
+rotate row y=0 by 3
+rect 1x1
+rotate row y=0 by 2
+rect 1x1
+rotate row y=0 by 3
+rect 2x1
+rotate row y=0 by 7
+rect 6x1
+rotate row y=0 by 3
+rect 2x1
+rotate row y=0 by 2
+rect 1x2
+rotate row y=1 by 10
+rotate row y=0 by 3
+rotate column x=0 by 1
+rect 2x1
+rotate column x=20 by 1
+rotate column x=15 by 1
+rotate column x=5 by 1
+rotate row y=1 by 5
+rotate row y=0 by 2
+rect 1x2
+rotate row y=0 by 5
+rotate column x=0 by 1
+rect 4x1
+rotate row y=2 by 15
+rotate row y=0 by 5
+rotate column x=0 by 1
+rect 4x1
+rotate row y=2 by 5
+rotate row y=0 by 5
+rotate column x=0 by 1
+rect 4x1
+rotate row y=2 by 10
+rotate row y=0 by 10
+rotate column x=8 by 1
+rotate column x=5 by 1
+rotate column x=0 by 1
+rect 9x1
+rotate column x=27 by 1
+rotate row y=0 by 5
+rotate column x=0 by 1
+rect 4x1
+rotate column x=42 by 1
+rotate column x=40 by 1
+rotate column x=22 by 1
+rotate column x=17 by 1
+rotate column x=12 by 1
+rotate column x=7 by 1
+rotate column x=2 by 1
+rotate row y=3 by 10
+rotate row y=2 by 5
+rotate row y=1 by 3
+rotate row y=0 by 10
+rect 1x4
+rotate column x=37 by 2
+rotate row y=3 by 18
+rotate row y=2 by 30
+rotate row y=1 by 7
+rotate row y=0 by 2
+rotate column x=13 by 3
+rotate column x=12 by 1
+rotate column x=10 by 1
+rotate column x=7 by 1
+rotate column x=6 by 3
+rotate column x=5 by 1
+rotate column x=3 by 3
+rotate column x=2 by 1
+rotate column x=0 by 1
+rect 14x1
+rotate column x=38 by 3
+rotate row y=3 by 12
+rotate row y=2 by 10
+rotate row y=0 by 10
+rotate column x=7 by 1
+rotate column x=5 by 1
+rotate column x=2 by 1
+rotate column x=0 by 1
+rect 9x1
+rotate row y=4 by 20
+rotate row y=3 by 25
+rotate row y=2 by 10
+rotate row y=0 by 15
+rotate column x=12 by 1
+rotate column x=10 by 1
+rotate column x=8 by 3
+rotate column x=7 by 1
+rotate column x=5 by 1
+rotate column x=3 by 3
+rotate column x=2 by 1
+rotate column x=0 by 1
+rect 14x1
+rotate column x=34 by 1
+rotate row y=1 by 45
+rotate column x=47 by 1
+rotate column x=42 by 1
+rotate column x=19 by 1
+rotate column x=9 by 2
+rotate row y=4 by 7
+rotate row y=3 by 20
+rotate row y=0 by 7
+rotate column x=5 by 1
+rotate column x=3 by 1
+rotate column x=2 by 1
+rotate column x=0 by 1
+rect 6x1
+rotate row y=4 by 8
+rotate row y=3 by 5
+rotate row y=1 by 5
+rotate column x=5 by 1
+rotate column x=4 by 1
+rotate column x=3 by 2
+rotate column x=2 by 1
+rotate column x=1 by 3
+rotate column x=0 by 1
+rect 6x1
+rotate column x=36 by 3
+rotate column x=25 by 3
+rotate column x=18 by 3
+rotate column x=11 by 3
+rotate column x=3 by 4
+rotate row y=4 by 5
+rotate row y=3 by 5
+rotate row y=2 by 8
+rotate row y=1 by 8
+rotate row y=0 by 3
+rotate column x=3 by 4
+rotate column x=0 by 4
+rect 4x4
+rotate row y=4 by 10
+rotate row y=3 by 20
+rotate row y=1 by 10
+rotate row y=0 by 10
+rotate column x=8 by 1
+rotate column x=7 by 1
+rotate column x=6 by 1
+rotate column x=5 by 1
+rotate column x=3 by 1
+rotate column x=2 by 1
+rotate column x=1 by 1
+rotate column x=0 by 1
+rect 9x1
+rotate row y=0 by 40
+rotate column x=44 by 1
+rotate column x=35 by 5
+rotate column x=18 by 5
+rotate column x=15 by 3
+rotate column x=10 by 5
+rotate row y=5 by 15
+rotate row y=4 by 10
+rotate row y=3 by 40
+rotate row y=2 by 20
+rotate row y=1 by 45
+rotate row y=0 by 35
+rotate column x=48 by 1
+rotate column x=47 by 5
+rotate column x=46 by 5
+rotate column x=45 by 1
+rotate column x=43 by 1
+rotate column x=40 by 1
+rotate column x=38 by 2
+rotate column x=37 by 3
+rotate column x=36 by 2
+rotate column x=32 by 2
+rotate column x=31 by 2
+rotate column x=28 by 1
+rotate column x=23 by 3
+rotate column x=22 by 3
+rotate column x=21 by 5
+rotate column x=20 by 1
+rotate column x=18 by 1
+rotate column x=17 by 3
+rotate column x=13 by 1
+rotate column x=10 by 1
+rotate column x=8 by 1
+rotate column x=7 by 5
+rotate column x=6 by 5
+rotate column x=5 by 1
+rotate column x=3 by 5
+rotate column x=2 by 5
+rotate column x=1 by 5
diff --git a/2016/aoc8/src/main.rs b/2016/aoc8/src/main.rs
new file mode 100644
index 0000000..cb783ae
--- /dev/null
+++ b/2016/aoc8/src/main.rs
@@ -0,0 +1,117 @@
+extern crate regex;
+use regex::Regex;
+
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+
+
+struct Screen {
+ data: [[bool; 6]; 50]
+}
+
+impl Screen {
+ fn new() -> Screen {
+ Screen {
+ data: [[false; 6]; 50]
+ }
+ }
+
+ fn rect(&mut self, a: usize, b: usize) {
+ for x in 0..a {
+ for y in 0..b {
+ self.data[x][y] = true;
+ }
+ }
+ }
+
+ fn rotate_row(&mut self, y: usize, b: usize) {
+ let mut row_copy = [false; 50];
+ for x in 0..50 {
+ row_copy[x] = self.data[x][y];
+ }
+ for x in 0..50 {
+ self.data[x][y] = row_copy[(x+50-b)%50];
+ }
+ }
+
+ fn rotate_col(&mut self, x: usize, b: usize) {
+ let mut col_copy = [false; 6];
+ for y in 0..6 {
+ col_copy[y] = self.data[x][y];
+ }
+ for y in 0..6 {
+ self.data[x][y] = col_copy[(y+6-b)%6];
+ }
+ }
+
+ fn print(&self) {
+ for y in 0..6 {
+ for x in 0..50 {
+ print!("{}", if self.data[x][y] {'#'} else {'.'});
+ }
+ println!("");
+ }
+ }
+
+ fn count_on(&self) -> u32 {
+ let mut count = 0;
+ for y in 0..6 {
+ for x in 0..50 {
+ if self.data[x][y] {
+ count += 1;
+ }
+ }
+ }
+ count
+ }
+}
+
+
+fn main() {
+ let lines = read_file();
+ let mut screen = Screen::new();
+ for line in lines {
+ if line.starts_with("rect") {
+ //rect 3x4
+ let re = Regex::new(r"rect (\d+)x(\d+)").unwrap();
+ let cap = re.captures(line.as_ref()).unwrap();
+ println!("{} parsed as RECT. A={}, B={}",
+ line,
+ cap.at(1).unwrap_or(""), cap.at(2).unwrap_or(""));
+ screen.rect(cap.at(1).unwrap().parse().unwrap(), cap.at(2).unwrap().parse().unwrap());
+
+ }
+ else if line.starts_with("rotate row") {
+ //rotate row y=0 by 4
+ let re = Regex::new(r"rotate row y=(\d+) by (\d+)").unwrap();
+ let cap = re.captures(line.as_ref()).unwrap();
+ println!("{} parsed as ROTATE ROW. A={}, B={}",
+ line,
+ cap.at(1).unwrap_or(""), cap.at(2).unwrap_or(""));
+ screen.rotate_row(cap.at(1).unwrap().parse().unwrap(), cap.at(2).unwrap().parse().unwrap());
+ }
+ else if line.starts_with("rotate column") {
+ //rotate column x=1 by 1
+ let re = Regex::new(r"rotate column x=(\d+) by (\d+)").unwrap();
+ let cap = re.captures(line.as_ref()).unwrap();
+ println!("{} parsed as ROTATE COLUMN. A={}, B={}",
+ line,
+ cap.at(1).unwrap_or(""), cap.at(2).unwrap_or(""));
+ screen.rotate_col(cap.at(1).unwrap().parse().unwrap(), cap.at(2).unwrap().parse().unwrap());
+
+ }
+
+ screen.print();
+ }
+
+ println!("On: {}", screen.count_on());
+}
+
+fn read_file() -> Vec<String> {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+ file.lines()
+ .map(|line| line.unwrap().trim().to_string())
+ .filter(|line| line.len() > 0)
+ .collect()
+}
diff --git a/2016/aoc9/Cargo.lock b/2016/aoc9/Cargo.lock
new file mode 100644
index 0000000..00bd2f7
--- /dev/null
+++ b/2016/aoc9/Cargo.lock
@@ -0,0 +1,98 @@
+[root]
+name = "aoc9"
+version = "0.1.0"
+dependencies = [
+ "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "memchr"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex"
+version = "0.1.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "thread-id"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "thread_local"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "utf8-ranges"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66"
+"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70"
+"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"
+"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"
+"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"
+"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
+"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5"
+"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"
+"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
diff --git a/2016/aoc9/Cargo.toml b/2016/aoc9/Cargo.toml
new file mode 100644
index 0000000..de293f1
--- /dev/null
+++ b/2016/aoc9/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc9"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@entelect.co.za>"]
+
+[dependencies]
+regex = "0.1" \ No newline at end of file
diff --git a/2016/aoc9/input.txt b/2016/aoc9/input.txt
new file mode 100644
index 0000000..6692559
--- /dev/null
+++ b/2016/aoc9/input.txt
@@ -0,0 +1 @@
+(6x6)AFPLBX(2x3)ZE(53x13)(4x7)ZGQO(2x4)NJ(1x8)M(24x11)(18x7)HMLOASMJNGZHMCEVEX(11x2)(6x6)TRDPQX(157x12)(60x12)(2x3)SB(7x1)FBSAUFK(4x1)NMZK(10x2)RLIIHFEKRY(10x6)GMDUIQDOZJ(71x8)(1x11)N(19x5)EHNAZSRTFYXOZNFTOOQ(6x4)XKARLK(13x1)IRATYZQMJXHAH(4x8)VFUJ(8x6)AOOEHHBF(27x6)(11x9)(5x15)KTTHB(5x6)AELEZ(17x10)AOGNMNTGDJDYEMMEH(7x8)BOIOHRF(6x2)ZKXONV(172x8)(6x5)(1x8)V(17x6)WEVFHKUDETBOZVKIO(2x14)ZI(75x9)(5x5)EXKDZ(4x4)BOGK(10x5)SXYSSOACJR(3x15)FHO(24x10)YBZPMZIPUCEIYNGYAUPVFOKB(43x3)(13x2)MERJWKSXBIEKP(2x4)CR(4x5)DFDQ(2x15)ZM(89x5)(43x6)(16x8)RIGCVPPOSBRJSJCB(2x9)XI(1x11)M(2x8)QT(8x6)(3x8)XVC(20x15)SBWQFWQWPQHXZXDWSXIR(4393x15)(25x5)TEAACSAHWYWPYJZEPDIHUMIPB(1026x1)(1x7)K(768x7)(388x3)(113x9)(70x11)(12x10)HDEPKSMDLHAX(2x5)RU(29x13)BIOENKVYNENIFNCSWNZIJGCZXBUVF(3x1)JRO(30x2)(11x9)NCTAXULXPBY(1x5)K(2x7)WQ(76x10)(13x7)UDCLRUKNLOAEL(17x10)(11x8)TLRICJOXJPO(26x13)HBPYKHNJRGJHSXUFGJAAHODUDG(177x13)(58x14)(17x15)MWIVHZEKJKLDWPYEN(7x5)MLNEAXO(1x2)F(10x2)GMUPKWMFFU(51x13)(2x12)TG(29x1)CJZOBLWTYDISRYKVWHJKRDDNHSABE(3x5)VDV(36x7)(7x2)JOQSKQM(10x4)SSQKRCQCYQ(3x3)HRU(7x6)(2x7)CG(271x13)(14x12)TPDOYGCYWKAOQU(223x5)(15x1)WKAGRMIPECLUUPH(68x2)(10x15)VRFPOQRGAW(5x6)MEVXZ(11x13)INACCUVBTIP(1x12)M(10x5)ECIALUKBGQ(29x5)LDVPFVNKSBWVZCJUOLIJZHYNOXLHZ(42x9)(11x14)HKDQCRYGEWD(3x5)DDV(10x8)KRRTDJEMKB(39x8)(13x8)IWLYAVYPLTFBF(14x8)PMPTEZESXEQSYM(13x12)SYBXETSKQLUYU(12x5)(7x3)(2x4)FH(69x10)(63x7)(6x4)RVKPXJ(46x1)(19x14)YCVJOBRSCSVKJJWUBJI(4x6)VUOI(5x15)WIFPK(237x15)(230x7)(51x15)(45x5)(9x11)BUZLRCBIY(2x5)ZZ(8x6)DNEOUHUT(5x2)QFOTV(164x11)(30x14)YOCHTVEXSZYELWOMGCXOISALUWCWTJ(8x15)QIINZKAI(1x1)F(88x5)(8x1)SIZRWUDB(49x7)AWSFCZFEGKBUKONNMQQSIGHMKQFAMUEBLTQFGEZLMUTNWXOCH(1x12)T(8x7)ZOTXRWXA(7x15)HGGWNTM(1484x6)(691x6)(53x6)(2x14)IB(39x3)ASFVSLNNXYBFSSOPECXZOEVPRIGJCTMLWCFSVTZ(72x4)(66x1)(38x7)(17x7)DXTENHWTOXYZMQFLF(2x2)OG(3x6)ATG(16x1)IBSUFIGHTLDMGRZE(9x5)DKNZYEYGJ(288x11)(165x9)(16x4)MDBGELYWXPUTRCEZ(14x14)PHSIPUMMXOMBWF(57x9)(13x13)WIVFVHXPHBTWO(4x6)XSWT(9x5)CPSCDHORP(1x2)M(3x8)JJE(12x4)ZADOSQULBZRT(34x10)EUJRPXWESNMXYDAUHFPLCLOYZCUKOSDPTZ(108x12)(10x13)CJVGTNJFUE(37x10)LDQKJRVQQKTVRBMNRIFDMZBJOQZKJSBZPWWLQ(24x5)FXOCHIJNODJUEGYPZYTIADPF(11x4)FUNCENOZTTS(237x7)(106x6)(9x6)SBSWNIMDC(58x11)(6x8)VJZVTK(5x2)QRAXJ(3x2)KAC(9x11)EWJHYTQXW(9x2)TSWWFYDYC(21x2)EXPZWOLLWOALTQGUZXTUS(117x2)(6x8)TLGPET(3x7)GBW(39x6)(32x10)VGSULYHYHHFVDEIQYAXVUGNDVDCDGANM(46x13)(14x6)VYXTECTXLBJFWZ(12x6)IFRBYZIXFTOC(2x14)HF(14x7)(8x10)AFPWFLXJ(726x6)(160x5)(45x13)(1x4)K(8x2)(2x14)WF(19x11)EDIZTWWQBGFLFXEWHFA(17x10)WIGPDKRTBSOJTFXKY(15x2)ADLZSCNVATBMRBV(34x12)IVGRGESBMMRDBWKCIDCLYWVXANHCWQQEQL(15x12)WGFAYDKOFYOZWHU(464x6)(42x14)(35x12)(5x12)TVUTT(2x13)RK(2x10)RC(3x1)LXD(20x1)(14x6)OJOAQUIEOIUVXE(152x6)(16x1)IIDXUSCZEOEHDVIP(98x6)(18x4)AFGQQZEGERPRXYXDTI(15x13)UPZDHXFYQRGBNBZ(45x10)GEJVEKLGJBCATXONOSOJWLLZESRRGSLNTRDKDKJKNAOYC(20x4)SHUJGLTDVLVMUBGUYCCQ(202x2)(29x4)(23x9)ZNKNMTBUBYEMBVCDGNHMZRB(123x6)(8x8)QCPLTVYD(2x5)YQ(13x3)XFKTLSHCQAPID(30x1)DRTIAMQDRSIQQIZKAXMVZDLCRHYVWS(41x11)SLVGMXLAUIETLVILQABUODBTBFZZHOSFRUJKLQPSE(21x8)(4x9)EXQY(6x13)QAFDCI(4x10)XYII(15x5)VZTRXIMIYNGDQKZ(75x4)(6x11)RFOKPH(2x15)ZH(10x15)ZDWQPCMXCQ(32x7)DJRJDFDSGKZBQZMNIKCOLHWSLYCQXEKH(1x14)H(27x2)(21x3)GCUQEXKSVPNXNOTUOZBWR(1828x7)(1107x13)(550x1)(177x11)(30x15)(1x13)T(3x1)MTN(9x14)EDQQAMGTE(39x4)(14x2)NPINNXFQEZICDQ(13x3)QYHEGLYNFPMMQ(88x13)(22x13)GLVPCEBDDABCPDHXXXZDTT(1x3)A(1x3)J(40x14)LPRDKSIGCUXWPZIPZKUGMNGLLGQHFDNXLHRNVPEM(14x7)TPYKUDKFRLVPPF(135x10)(10x7)GWRRITBPFN(5x5)ECPKJ(50x6)(4x10)DORU(1x12)S(9x3)YQFICKCXH(7x3)ZJFMLPD(2x9)HK(3x7)HWQ(39x6)NPYOZFXSQJMVHMGSMHMKBOQLXAUVSZZRUGFOIUL(122x13)(7x5)WQPCNYP(35x14)(21x4)UIBUUSAWFXCJOAAOQYWKD(3x3)VKI(17x11)YCWPDYLDDKIDATXKY(38x4)(4x2)FPPY(16x8)ETEICDHDZBPINNTA(2x4)RR(66x3)(59x15)(9x10)WLRKNQFPX(4x3)OCJF(8x1)QSOOLMPP(4x6)DKRV(8x5)PBRRNJTD(377x10)(88x7)(81x11)(17x8)RPFNVFZNWFZCEDXYR(3x3)DMM(6x1)ZOBJHV(1x10)S(26x3)MLOILGCEQPKNQPYBABPWRMGTCU(13x2)KNRNZAANDYZVG(2x15)UR(1x5)Y(242x12)(144x11)(8x6)HUOOXYEN(35x2)HGPTAFHSMKKPDMGARWVNYVCJWMZETRIJNXM(4x4)TJDP(28x5)UKOZMKRXJLSBZJRRVABSWSIEIDMC(40x14)HCTILCVYQXWNUZHZAZGCXKXRZDHFNTKISPMUOLAD(8x6)(3x9)NXB(44x15)(3x13)GZF(9x7)XCHQMMOXC(2x8)EO(8x12)GTHAWKXZ(3x4)TFJ(12x7)JOAKSXHVNNNX(157x14)(150x8)(11x13)(5x15)GVWWA(125x1)(14x12)OALPJNHTLRQGRJ(24x15)EEWRKUJFKQFVCFVVGRNXRNMO(23x12)SWMZOIWGOVLKIRKBHSIAYFY(16x6)VQBYRVNJQKQZUXYC(15x8)SRQFUMLAWWDVVCY(166x3)(8x4)ROOZHNPS(1x5)G(140x3)(5x11)NNJCA(122x8)(12x10)ACNODOEIPNFS(36x7)(2x3)HI(9x12)WVTUTLVXH(1x14)L(1x11)R(28x13)TFKQTKVMFXBNHUCUGXXBKSPBSYOI(2x8)RL(13x5)(8x5)BMGHNIWS(80x2)(4x5)CLIN(64x13)(12x7)PUIYXOSOYXRH(23x9)(1x14)J(1x10)L(3x12)BRJ(11x3)(5x12)LIYCT(446x9)(1x14)A(128x1)(86x9)(15x1)XKXMQLFUXTGSIUI(36x8)UUZAZBICEWZOHBKMLKFMOPRGDNIIXYZIRYBO(16x10)(3x1)DCZ(2x10)RG(15x1)TVCSLSBSQOEZORE(9x12)(4x5)FOWX(67x7)(27x3)(20x11)QHEAAUEGZRHVTYXMHWGD(27x14)(1x6)C(14x15)EHUGFRTEFCLPYB(223x13)(192x1)(27x13)(8x1)ECDZKCJY(8x12)HNTSWDYP(14x1)SMPGAHCDMTHRPF(43x6)(2x9)QY(3x1)NGD(7x11)QBFWGLX(3x4)JCI(1x10)L(31x2)(3x10)NIH(16x2)SFTKKDPDSTPUVOQA(46x3)(1x11)N(19x13)RGTNKUTACWUHOBKHPAF(2x9)JH(1x5)D(18x5)ELEQYVKHCZWCPDKGET(4430x14)(6x6)SGLJXG(1303x14)(8x3)PBGTOJDF(472x9)(1x14)U(299x2)(71x12)(2x14)UZ(13x11)(7x13)OYMYFOR(22x12)MLXGMMRGPSASXFVDRWWYGU(9x5)(3x14)NFY(96x1)(22x8)XALEFGLORBLTMHIWSARRDS(24x12)(17x14)QARJVLVCJVIJEJOLE(8x13)(3x8)HPO(16x14)UMCNXKMHFCKLLSTQ(96x11)(3x8)IYF(82x5)(3x1)OBQ(30x14)UJYENTNVNGKUFYSGTPROKDUVXVAAAP(18x14)OFJNLBOUNGILMQMTBO(7x2)UJJJZAX(3x2)JTL(2x10)YM(112x1)(83x7)(50x6)(4x11)TSPK(2x2)AU(6x15)XSSYWL(3x12)DCS(6x13)OIDFMJ(1x14)N(13x12)EEZZPERSDPKOT(17x7)SBEJBRDQAVFLLCNUW(3x11)ZGN(25x3)(18x15)CSVBGEAPPCXHRXBYIK(1x4)M(664x4)(337x14)(99x5)(12x11)QQXQUTFBUNIV(7x7)ALTZFYQ(15x4)VBFROTJMHRPGBJW(40x12)(23x8)UTBYEFQMPFIEXVVLZXVDWWJ(6x2)BMJTZF(4x3)NRUY(6x12)TKXPAM(62x6)(3x15)RQS(1x5)K(41x8)(12x9)NJRYDQRLHCNB(17x7)AEPPXIYSGQCVSPVMF(135x14)(72x7)(2x9)FB(4x10)OGAV(26x6)QXHCWFQUDQKXVJJGIZDZLTBIKY(3x10)CXD(9x5)IDBZUGYPE(14x2)KYYCJLAYHWQQVD(30x13)(7x11)YXUUJZQ(11x3)YRHZXTLPZJF(311x14)(49x6)(42x12)BLCUHNHXNFKMUKOHBMVPXMURVUESFYMANQKXIQEVOG(79x1)(73x8)(5x3)JGNSI(20x11)DVUPOLXLRCUFVJYHXWJV(15x2)OPIKHDJPHQPXYYX(9x10)FWYSCUOMU(164x1)(91x13)(6x13)UPDAGP(14x5)LIKFHUVDMDQAAK(31x13)FEJFKXKSSAJYNJAKXKRQPUZMHNTBTGI(7x7)OLHMUKA(4x7)EGNE(59x12)(4x7)JSRJ(4x7)JCES(15x6)QTFXSXGYBARIWUP(8x6)LQDBINXU(1x12)H(127x1)(12x5)RHGPFMZRPSFB(4x11)URMZ(93x2)(87x7)(75x9)(11x14)NXGIGQVUUMV(1x6)N(38x3)IUHTFEASJJFMMTHJFEQAAYMSIUUGNMTUUQSOCN(2x7)CN(1x8)B(894x11)(876x12)(587x11)(2x10)BQ(178x12)(96x3)(14x14)BLIWCROJXSLVTK(8x15)KIYKJSRQ(54x15)KTAQJDJHFWAVGGYOZUWYLIBCBQIXHICNALPOGMROGJLDFEAYDTVTNR(2x6)NS(11x1)JKXMXJTBIDP(29x4)(7x13)EBVJEZD(10x3)XRDYMAZSBY(10x10)OIRMTHQLNG(132x2)(31x11)YAGJSHBUQNJREUVAPLXJGSPVFNQVGBD(54x12)(1x12)Y(5x6)UPPMP(9x7)HAVOGCOLF(10x6)TUKIFLCHLV(2x1)YJ(2x11)JJ(19x9)(1x5)M(8x4)UEZWDQZC(45x4)(39x9)(6x9)UWXBMZ(2x12)JJ(3x2)KDB(7x7)FLZMQSC(196x9)(26x7)YUUQIHKCXYRRGSMXGLWMSSAIAP(1x2)W(3x5)XGY(115x5)(8x13)YUGCSANY(10x12)ZVBPLBCJQK(9x7)RGODHRSNC(54x13)KFVTGSWIAKERKDISXRYZDZJEPXSKGAVZKGIKWRSSOTYSYRPEBHOWRC(4x5)PSBS(21x10)(5x7)PKBSK(6x1)CISVQM(241x6)(39x5)(32x14)XIRRYTZBERAKPMGIMOLYNEODGWELVAJP(113x15)(5x10)USAHI(2x13)ZP(88x4)(12x9)WBDEFGCZAMPM(8x11)DZMSAIVZ(3x15)XCK(23x5)LUKNXCCEPEPKSODMGEZJDYY(11x12)CJTACNNPKPZ(61x12)(3x7)YRN(30x7)GCJRMCZOJFMKFZJAJTZOMYXNWIFVSE(11x3)(5x13)BZFIF(2x2)GO(2x15)EM(18x10)YIGMSZEGBPPIMGKUHO(4x14)FUKK(1851x10)(164x11)(117x3)(109x10)(56x15)(3x13)MSN(11x15)VPUOKCEWGFX(7x7)UKXWCWX(2x11)QB(3x13)QFE(12x13)(7x1)WTMANLW(21x5)SDTRPSRMRYUZKIZIMCYLO(33x11)(16x4)(4x8)ASQN(1x10)M(6x1)(1x5)F(1006x3)(21x13)(15x4)WHEZYMBJXTBYCZG(462x9)(227x1)(33x11)(2x10)VR(11x8)PLIFVKRPUWO(3x1)WFI(53x4)(5x11)GUHAR(9x6)OTBCHHMTJ(4x7)JJQH(5x8)TTUUW(4x6)GRAX(1x10)I(27x14)(12x9)TPXYVLAYHHUB(4x3)WNYV(81x3)(20x3)YXDCPPYIDNNAQJMWXFFM(5x8)FZLRN(5x7)BKMSG(12x4)ZVRYPOOSYOMA(11x3)UGUWOKXVITR(220x15)(8x7)IRFZJLCM(34x4)(8x7)KIQHQWLZ(8x1)RTGQVPLE(3x8)RVU(60x14)(3x12)UJP(8x14)NYDICRGG(23x8)CHISDWBISOZYDWRNEBRWDSJ(3x6)EJG(14x12)PIWNBDAEREATVW(73x9)(14x3)IEPNRGKUCCEERW(4x7)FCWC(3x14)EXU(29x1)CDLSEHSCOEUZKWARMGBPXCHYMVQFP(188x3)(7x6)YNYVYUC(43x10)(15x11)YHQHLIEPOVAHHJQ(15x1)(2x12)EC(2x5)KR(113x1)(8x8)ZJHMLYAU(74x12)(5x3)CQZMJ(4x2)QGWN(3x9)LAE(7x1)OCFJMDJ(29x8)FIWUGBREHYRACQYOVVQJBDFHDGMEQ(13x4)GRPUVTXRVSHVM(1x5)F(307x3)(225x10)(47x6)(17x13)VURYAUGWWOIHHQJDD(8x3)WPVVCPUT(5x5)BFBOB(59x1)(8x3)UWPCOMZH(3x13)NRQ(4x13)WUJV(12x5)FUSBMTPOWDTX(3x12)RXT(45x8)(16x6)MTVMZPSDFMLDYLLD(16x14)JUHUHFNBYHGFWLVG(50x2)(2x9)GR(4x6)URSQ(27x10)LAGGDJBKBLVLPJVVDEZCXEJLFBJ(67x14)(7x15)OMHMPKM(2x7)BH(9x14)LDAFCOKEL(25x12)(5x1)QMTQH(1x15)I(2x15)RV(5x1)KKFYZ(639x15)(295x4)(8x10)SLSXUAJJ(160x7)(5x14)ICLSB(86x3)(6x7)CUYULZ(24x14)RZUPMSJMKASMGYUKSAZQKMBC(23x7)NINZWUFKIZZNKOZUAQOROBG(9x15)YJKHZIZFP(2x7)HC(30x5)(8x2)OBZCEUCF(10x10)LNGPRAITSF(8x11)(2x14)NG(106x14)(24x9)ACQDRKVEOEDULYMLYBGOMSIJ(19x2)UBUHEYIJEGFMCZSTDDO(35x4)HFNTQACPTELDNRWVUVKNKPBVIJMZWAZEOKS(5x3)RSIAK(330x8)(179x6)(34x8)(13x1)CCRZOVJLZOBBO(3x14)WPC(1x6)L(15x13)VAVFETWJRRFZFPE(11x13)VKJLGKAOCUC(92x12)(20x10)MRTDKUJPLGPXMTVLRSUF(2x6)QZ(11x15)MHFLVOFUNDC(25x11)SONLCWNGCZFGMSXYJXSFPVGVY(3x2)QRI(136x15)(45x13)(6x4)QQSQCM(1x9)U(7x4)VIDEIXN(10x3)WFRKVWNLJM(50x7)(13x4)OYFDFFFLITCIR(16x6)CIRLRKXBHVHNUPFZ(3x15)GRD(11x3)FMDUOABWGPB(5x15)EWSOH(3x4)JYH(338x8)(331x5)(324x1)(194x3)(2x4)ZF(48x12)(3x9)JVP(4x2)BWLT(24x15)KPNIHTTPTNNAHSSSDLAKDDNT(6x3)SZJQKG(64x15)(19x14)RSMBLFUAZBGBCJPQDES(5x11)KLUTW(1x9)J(5x13)UYNTL(5x8)NVICZ(43x11)(20x6)HURCGFJBVQOKDECLQELO(3x4)XID(4x9)WOCX(38x5)(2x8)KV(25x2)(18x13)SEYOWGYPRRKBHNVVGI(72x14)(18x10)RXBCYLJENTUPCKCIDO(22x8)(5x5)ZPUYC(7x9)LXRWCDN(2x3)XD(7x4)DEKJLWL(1794x8)(1786x4)(297x10)(289x14)(162x10)(78x9)(1x9)T(28x11)WCIFRVQWPNOEEBPKGYPFCOTNMRAP(12x7)IYTEKBFTEZIX(4x6)ALRX(5x2)QSCXQ(72x4)(25x8)OHCTVXZIEWNMEZBVFKTLIMGQW(4x13)XEBD(6x13)UZZITD(12x13)QPGHTTJTMMFJ(103x9)(24x4)FOJJCXKNPHEGIRYIFBLDVUES(66x14)(15x14)AJEUHOVVHZVHGAV(5x9)CVIBX(15x8)WIHEKYSJZCLABUK(8x5)UYQLGBEY(3x14)QAR(690x4)(14x3)KRIBLTDDRJSFGY(4x9)MMCG(338x15)(15x4)(4x3)VIER(1x7)J(76x14)(8x6)VNTBZCVR(47x6)(24x3)HDWQXSRQWIFPKUSRADRBXAPD(11x8)GSSDBTQZINR(5x3)TWHSS(74x2)(5x3)DMUEM(4x2)FLBE(48x14)(10x8)YLSBTQPTJJ(2x10)ZP(8x7)JFXOKRXJ(5x11)WDHLN(82x2)(7x12)IEXUOMG(8x11)PVPIWSQY(36x7)NXNEYNWWPODZRJBIQFLDLZVSEDRPRWZUUXQS(7x11)WWTZGJK(59x11)(52x11)(17x14)QMXUKMPFATJEJQASH(22x6)WEXAZYBXEIIIWKEYRNINYH(246x5)(7x14)XMWZOQI(225x13)(9x6)(4x4)RMSV(35x9)(12x15)FSEJCGTVXEUT(1x7)L(5x5)IALLO(83x2)(5x5)HEUVE(26x8)BGAOGWCKQJVESARPQNTDIKKOKN(34x12)DGCKPWQBLZNXDLLYIWKRAOVPCXIIEWLSMN(75x6)(6x6)RHDULO(16x11)CRXVYYDZXJFFSPOR(5x14)OXTUY(24x4)UHCHXFDOONZXAZTTBFSINOEG(55x14)(12x12)ZKOOCWQTVQUS(19x10)WNHJGQATSCBTMLIVOYB(5x1)ZHQEA(710x7)(2x14)FD(170x9)(162x11)(11x10)MJTMRWMKRNT(28x10)(21x14)MJZQATVTRTWDEQNSZOXKK(59x15)(1x10)K(16x6)AVTYFAJYHSKETUYI(1x15)M(4x15)CDYM(7x15)TGWTHWL(29x11)HWMXLXCZVSSUPDBTIXDEGPNJJZNGX(2x6)KM(487x11)(3x14)UIF(84x4)(5x14)MDENR(66x12)(12x11)WQEVOLYPOSEK(30x5)LKBXTFFEOHNEJHOHKMMUKSDISVVQZE(5x10)PFZCP(197x12)(24x15)JLPYUIJVFQRWOACTFMQPLYHI(55x3)(14x1)KUTCZEZNWSISPL(8x7)YNZXWQMY(6x1)EZVHCC(6x3)AEVYOO(2x6)DE(68x6)(13x3)KRBXMIIHZERUV(3x2)TLR(35x4)LWCSHQCLMZAPMNSXKWCGVGDTKWUQAIWWLWU(17x11)FWYFWEMLVLQQGCJLJ(176x8)(4x2)ICOL(63x7)(37x14)SQVVGHBVLPVSLAYFZBLEGOKEHFSXSVEJOSRXO(2x2)IF(6x10)APYCKZ(73x15)(20x3)EARRAATGOHPONSTXOUVI(20x4)GBRNRAGYDCTGEODHJDUB(1x2)Z(1x15)R(3x4)QBQ(1x2)M(7x6)KJQAHCJ(24x6)UHLVTEERAYIUBGMUKOJFHRUJ(36x7)(30x2)(1x14)H(17x1)BSZIJHGVILXXURQDI(18x12)PSFBREKMLZRFFFRLZG(236x1)(52x7)(2x12)WK(16x10)CRNLMDQWZECYSFOT(3x10)ISI(6x13)FPJKZE(7x9)XOCUXIU(125x5)(105x5)LPOXYLAWSIIRQDNUWVHOLUDYOZSCFNCORKVFMSYIMMNCMNSOUGJHSBYKITYGFWUYHBJCQELUIMYXAFRFIAOSXSOIMGYEPJFPWQXSZYCDD(8x8)ILXIPPGD(7x13)TYZVRQS(14x12)(3x3)WXE(1x9)Q(40x10)(34x7)(2x2)AZ(10x15)UPJJICKDLA(5x6)CHXZV(153x7)(13x8)LCBGVTVMPVNMJ(30x8)(6x8)KXMWXG(6x1)DJRTOU(2x15)FW(79x10)(13x9)RIFNFQDLAWBSQ(3x2)ERQ(19x1)TTHLBYCOPMTXIIDSBXX(9x14)SBPSPMMCK(7x8)MKNEMLA(6x11)YPDDWG(220x9)(65x3)(2x6)LT(13x3)XFOPJCJBLRXYH(8x5)BKPDBCLE(6x2)UNKPOA(9x15)THYQVMZUG(50x15)(9x11)AAXOWDYIN(12x14)IWTCMNVXNJAX(10x4)JPSIYYKGVJ(86x8)(29x10)ORMIZOTUMSVKNEJDCQDQHESLAQKOF(8x14)SHFMBHHV(1x9)L(14x2)QQHGYTMVZAZRDK(5x7)COVRS(51x2)(11x2)ZDTVQIWFFND(5x8)RQTFS(1x9)B(5x9)SINCP(3x3)ACU
diff --git a/2016/aoc9/src/main.rs b/2016/aoc9/src/main.rs
new file mode 100644
index 0000000..622819c
--- /dev/null
+++ b/2016/aoc9/src/main.rs
@@ -0,0 +1,143 @@
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+
+#[derive(Debug, Clone, Copy)]
+struct Marker {
+ take: usize,
+ repeat: usize
+}
+#[derive(Debug, Clone, Copy)]
+enum Token {
+ Marker(usize, Marker),
+ Literal(usize)
+}
+
+impl Token {
+ fn size(self) -> usize {
+ match self {
+ Token::Marker(x, _) => x,
+ Token::Literal(x) => x
+ }
+ }
+
+ fn is_marker(self) -> bool {
+ match self {
+ Token::Marker(_, _) => true,
+ Token::Literal(_) => false
+ }
+ }
+
+ fn unwrap_marker(self) -> Marker {
+ match self {
+ Token::Marker(_, marker) => marker,
+ Token::Literal(_) => panic!("Bad unwrap marker")
+ }
+ }
+}
+
+fn main() {
+ let mut tokens = parse(read_file());
+ tokens.reverse();
+ let mut length: u64 = 0;
+
+ while tokens.len() > 0 {
+ let next = tokens.pop().unwrap();
+
+ if next.is_marker() {
+ let marker = next.unwrap_marker();
+ let mut used_take = 0;
+
+ let mut tokens_to_repeat = Vec::new();
+ while used_take < marker.take {
+ let next_token = tokens.pop().unwrap();
+ if used_take + next_token.size() <= marker.take {
+ tokens_to_repeat.push(next_token);
+ }
+ else {
+ assert!(!next_token.is_marker());
+ //assume splits only happen on literals
+ tokens_to_repeat.push(Token::Literal(marker.take - used_take));
+ tokens.push(Token::Literal(next_token.size() - marker.take + used_take));
+ }
+ used_take += next_token.size();
+ }
+
+ tokens_to_repeat.reverse();
+ for _ in 0..marker.repeat {
+ for &token in &tokens_to_repeat {
+ tokens.push(token);
+ }
+ }
+ } else {
+ length += next.size() as u64;
+ }
+ }
+ println!("Length: {}", length);
+}
+
+fn parse(text: String) -> Vec<Token> {
+ let mut tokens = Vec::new();
+ let mut chars = text.chars();
+ let mut current_char = chars.next();
+ while current_char.is_some() {
+ let c = current_char.unwrap();
+ if c == '(' {
+ let mut char_count = 1;
+ let mut take_str = String::new();
+ let mut repeat_str = String::new();
+ loop {
+ let n = chars.next().unwrap();
+ char_count += 1;
+ if n == 'x' { break; }
+ take_str.push(n);
+ }
+ loop {
+ let n = chars.next().unwrap();
+ char_count += 1;
+ if n == ')' { break; }
+ repeat_str.push(n);
+ }
+
+ let take: usize = take_str.parse().expect(format!("Tried to parse take {}", take_str).as_ref());
+ let repeat: usize = repeat_str.parse().expect(format!("Tried to parse repeat {}", repeat_str).as_ref());
+ tokens.push(Token::Marker(char_count , Marker{take: take, repeat:repeat}));
+ } else {
+ assert!(c != '(' && c != ')');
+ tokens.push(Token::Literal(1));
+ }
+
+ current_char = chars.next();
+ }
+ collapse_literals(&mut tokens);
+
+ tokens
+}
+
+fn collapse_literals(tokens: &mut Vec<Token>) {
+ let mut i = 0;
+ while i < tokens.len()-1 {
+ match (tokens[i], tokens[i+1]) {
+ (Token::Literal(l1), Token::Literal(l2)) => {
+ tokens[i] = Token::Literal(l1+l2);
+ tokens.remove(i+1);
+ },
+ _ => {
+ i += 1;
+ }
+ }
+ }
+}
+
+fn read_file() -> String {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+ file.lines()
+ .map(|line| line.unwrap().trim().to_string())
+ .filter(|line| line.len() > 0)
+ .next()
+ .unwrap()
+ .trim()
+ .to_string()
+
+// "(25x3)(3x3)ABC(2x3)XY(5x2)PQRSTX(18x9)(3x2)TWO(5x7)SEVEN".to_string()
+}
diff --git a/2017/Cargo.toml b/2017/Cargo.toml
new file mode 100644
index 0000000..d84b5bd
--- /dev/null
+++ b/2017/Cargo.toml
@@ -0,0 +1,10 @@
+[package]
+name = "advent_of_code_2017"
+version = "0.1.0"
+authors = ["Justin Worthe <justin@worthe-it.co.za>"]
+
+[dependencies]
+regex = "0.2.3"
+lazy_static = "1.0.0"
+structopt = "0.1.6"
+structopt-derive = "0.1.6" \ No newline at end of file
diff --git a/2017/LICENSE b/2017/LICENSE
new file mode 100644
index 0000000..026d0f3
--- /dev/null
+++ b/2017/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2017 Justin Worthe
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/2017/inputs/day_1.txt b/2017/inputs/day_1.txt
new file mode 100644
index 0000000..7a4debd
--- /dev/null
+++ b/2017/inputs/day_1.txt
@@ -0,0 +1 @@
+21752342814933766938172121674976879111362417653261522357855816893656462449168377359285244818489723869987861247912289729579296691684761143544956991583942215236568961875851755854977946147178746464675227699149925227227137557479769948569788884399379821111382536722699575759474473273939756348992714667963596189765734743169489599125771443348193383566159843593541134749392569865481578359825844394454173219857919349341442148282229689541561169341622222354651397342928678496478671339383923769856425795211323673389723181967933933832711545885653952861879231537976292517866354812943192728263269524735698423336673735158993853556148833861327959262254756647827739145283577793481526768156921138428318939361859721778556264519643435871835744859243167227889562738712953651128317624673985213525897522378259178625416722152155728615936587369515254936828668564857283226439881266871945998796488472249182538883354186573925183152663862683995449671663285775397453876262722567452435914777363522817594741946638986571793655889466419895996924122915777224499481496837343194149123735355268151941712871245863553836953349887831949788869852929147849489265325843934669999391846286319268686789372513976522282587526866148166337215961493536262851512218794139272361292811529888161198799297966893366553115353639298256788819385272471187213579185523521341651117947676785341146235441411441813242514813227821843819424619974979886871646621918865274574538951761567855845681272364646138584716333599843835167373525248547542442942583122624534494442516259616973235858469131159773167334953658673271599748942956981954699444528689628848694446818825465485122869742839711471129862632128635779658365756362863627135983617613332849756371986376967117549251566281992964573929655589313871976556784849231916513831538254812347116253949818633527185174221565279775766742262687713114114344843534958833372634182176866315441583887177759222598853735114191874277711434653854816841589229914164681364497429324463193669337827467661773833517841763711156376147664749175267212562321567728575765844893232718971471289841171642868948852136818661741238178676857381583155547755219837116125995361896562498721571413742
diff --git a/2017/inputs/day_10.txt b/2017/inputs/day_10.txt
new file mode 100644
index 0000000..6544f8c
--- /dev/null
+++ b/2017/inputs/day_10.txt
@@ -0,0 +1 @@
+187,254,0,81,169,219,1,190,19,102,255,56,46,32,2,216
diff --git a/2017/inputs/day_11.txt b/2017/inputs/day_11.txt
new file mode 100644
index 0000000..c31c097
--- /dev/null
+++ b/2017/inputs/day_11.txt
@@ -0,0 +1 @@
+s,s,sw,se,s,nw,nw,ne,n,ne,n,n,n,n,n,n,n,ne,n,ne,ne,se,ne,n,ne,n,n,ne,se,sw,se,s,se,se,se,se,s,se,se,s,se,se,nw,se,se,se,s,s,nw,s,s,se,nw,s,n,s,nw,s,s,s,s,s,s,s,s,s,s,s,sw,s,s,s,s,s,sw,sw,s,sw,s,nw,sw,sw,s,sw,ne,sw,sw,s,se,sw,sw,sw,sw,sw,sw,sw,nw,sw,sw,sw,se,sw,nw,nw,sw,sw,sw,s,sw,nw,se,nw,se,nw,sw,nw,nw,se,n,sw,s,s,s,nw,sw,sw,nw,se,nw,sw,sw,sw,nw,sw,sw,nw,nw,nw,nw,ne,n,nw,nw,ne,nw,nw,nw,nw,nw,se,nw,nw,n,nw,nw,nw,sw,n,nw,nw,nw,nw,n,s,nw,ne,nw,s,nw,nw,nw,n,nw,nw,nw,nw,nw,nw,s,sw,n,n,nw,nw,n,n,nw,nw,n,nw,n,n,nw,n,s,n,nw,ne,n,nw,n,nw,n,n,n,n,se,s,n,s,n,s,n,n,n,nw,n,s,n,n,n,n,n,ne,n,n,n,n,s,n,n,n,n,sw,n,n,n,nw,n,n,n,n,nw,se,n,ne,n,n,ne,n,ne,ne,n,n,n,n,ne,n,n,nw,n,n,n,n,ne,se,se,ne,ne,ne,n,ne,n,ne,ne,nw,ne,ne,n,n,n,ne,ne,ne,n,ne,nw,n,s,ne,ne,ne,ne,ne,n,s,ne,ne,ne,n,ne,ne,ne,sw,ne,ne,ne,s,n,ne,ne,n,ne,ne,ne,ne,ne,se,ne,ne,se,ne,ne,ne,ne,se,ne,se,ne,nw,nw,sw,s,n,ne,ne,ne,ne,ne,sw,ne,ne,ne,sw,ne,ne,ne,ne,sw,se,ne,ne,ne,ne,se,s,se,s,nw,ne,ne,n,se,ne,ne,ne,sw,ne,s,s,nw,se,nw,ne,s,ne,se,ne,n,ne,n,s,n,ne,ne,s,ne,se,se,ne,sw,nw,s,n,nw,n,se,ne,se,se,sw,ne,ne,sw,se,se,se,se,sw,ne,se,s,ne,ne,n,se,ne,sw,ne,ne,se,se,nw,se,ne,ne,nw,sw,se,s,s,se,se,se,s,se,nw,se,ne,se,se,se,se,se,se,se,sw,nw,se,se,se,se,se,se,sw,se,sw,ne,se,se,se,se,se,se,se,se,s,se,se,se,se,se,se,ne,se,se,s,sw,s,se,se,se,se,se,se,se,s,se,sw,se,se,n,s,se,s,ne,se,se,se,s,se,s,se,se,ne,se,se,sw,s,se,se,se,se,nw,se,n,ne,s,s,nw,se,se,s,se,n,se,se,s,se,se,s,se,se,ne,se,se,se,s,s,sw,s,s,se,s,se,s,se,s,se,se,se,s,se,s,nw,s,s,se,se,se,se,sw,sw,s,se,s,se,se,s,n,se,se,se,se,s,se,se,s,se,se,se,sw,s,s,s,se,se,s,s,se,s,s,se,s,s,n,s,nw,s,n,s,sw,s,nw,s,s,se,se,sw,s,s,s,sw,se,s,n,s,se,n,s,se,se,se,s,s,s,se,ne,s,se,n,se,s,se,se,s,ne,sw,se,s,s,se,s,s,s,s,s,s,s,s,se,s,nw,s,s,s,s,s,s,s,s,s,s,s,ne,ne,s,s,s,s,s,s,s,s,s,ne,ne,s,s,s,s,s,s,s,s,nw,s,s,se,sw,s,sw,s,s,nw,s,s,s,s,s,s,s,s,s,n,ne,se,s,s,s,s,n,se,s,sw,s,sw,sw,sw,s,s,sw,s,s,s,nw,sw,s,s,s,s,s,ne,sw,s,s,sw,s,s,s,s,s,s,sw,s,s,se,s,s,sw,n,sw,s,s,sw,s,s,s,s,s,sw,s,ne,s,s,s,s,sw,ne,s,ne,n,sw,s,s,s,sw,s,sw,nw,s,s,ne,sw,sw,nw,s,s,sw,sw,s,ne,s,s,sw,se,s,s,sw,s,s,sw,s,sw,sw,s,s,s,s,sw,sw,sw,s,n,ne,s,ne,s,sw,s,se,s,sw,sw,s,sw,sw,sw,sw,s,s,s,s,se,s,sw,sw,sw,sw,n,s,sw,s,s,sw,sw,s,s,n,sw,s,sw,sw,ne,sw,sw,s,sw,sw,sw,sw,sw,s,s,sw,se,sw,sw,sw,sw,s,s,sw,s,sw,sw,nw,sw,sw,se,sw,s,s,nw,nw,s,s,sw,sw,s,n,s,sw,sw,se,s,sw,sw,ne,sw,sw,sw,sw,sw,ne,sw,s,sw,sw,n,sw,sw,sw,sw,s,sw,sw,sw,sw,sw,n,nw,s,sw,s,s,n,ne,sw,sw,sw,sw,n,sw,se,sw,sw,s,se,sw,sw,sw,sw,sw,sw,s,ne,ne,ne,sw,sw,sw,ne,s,sw,sw,sw,sw,nw,s,sw,sw,s,s,sw,sw,n,nw,nw,sw,sw,sw,se,nw,nw,sw,s,sw,sw,sw,sw,sw,sw,sw,sw,sw,n,sw,sw,sw,nw,nw,se,sw,sw,sw,sw,sw,ne,sw,nw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,nw,s,sw,sw,se,sw,s,sw,sw,nw,nw,nw,sw,sw,nw,sw,se,ne,sw,sw,sw,sw,ne,sw,sw,nw,sw,se,nw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,n,nw,sw,sw,sw,s,sw,sw,nw,n,s,sw,n,nw,nw,sw,sw,nw,sw,sw,se,sw,sw,nw,sw,sw,s,sw,nw,sw,nw,sw,nw,nw,nw,sw,nw,sw,sw,sw,sw,sw,sw,sw,sw,sw,s,sw,nw,nw,ne,n,nw,sw,sw,nw,sw,sw,nw,nw,nw,sw,sw,sw,ne,s,sw,nw,nw,sw,nw,sw,s,nw,n,nw,sw,sw,nw,nw,sw,nw,nw,n,sw,nw,sw,nw,sw,n,sw,nw,sw,sw,sw,sw,n,sw,n,nw,nw,s,sw,se,sw,sw,nw,n,sw,sw,sw,n,sw,nw,sw,ne,nw,sw,sw,s,n,nw,sw,nw,nw,nw,sw,sw,sw,nw,nw,ne,sw,s,sw,nw,n,sw,sw,sw,nw,ne,ne,sw,nw,nw,sw,s,s,sw,sw,nw,ne,sw,nw,sw,nw,nw,sw,sw,sw,sw,nw,nw,s,se,nw,sw,nw,ne,s,nw,nw,ne,sw,nw,nw,n,nw,nw,sw,sw,sw,nw,nw,nw,sw,nw,nw,n,sw,sw,nw,s,n,sw,nw,nw,sw,nw,n,nw,nw,nw,nw,nw,nw,sw,sw,n,n,sw,sw,nw,nw,nw,nw,ne,nw,nw,nw,sw,nw,nw,nw,nw,ne,nw,nw,nw,nw,n,nw,nw,nw,s,nw,nw,sw,nw,s,nw,ne,ne,nw,nw,sw,nw,nw,nw,nw,sw,nw,se,sw,nw,sw,nw,nw,ne,nw,n,nw,nw,sw,nw,nw,nw,sw,nw,ne,s,nw,nw,sw,s,nw,sw,sw,nw,nw,nw,sw,s,nw,nw,nw,nw,se,nw,s,nw,nw,nw,se,ne,ne,nw,nw,nw,nw,nw,sw,nw,ne,ne,nw,nw,nw,nw,nw,nw,nw,nw,nw,sw,nw,nw,nw,ne,nw,nw,s,nw,nw,ne,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,sw,nw,nw,nw,nw,nw,nw,nw,ne,nw,n,nw,nw,ne,n,nw,sw,nw,n,nw,n,sw,nw,ne,s,se,n,ne,se,nw,ne,nw,ne,nw,ne,nw,nw,nw,n,nw,nw,nw,nw,nw,nw,nw,ne,nw,s,se,nw,n,n,nw,ne,nw,nw,nw,nw,ne,nw,nw,s,nw,nw,nw,nw,nw,n,nw,nw,nw,nw,nw,n,nw,nw,s,nw,nw,nw,nw,nw,sw,nw,nw,nw,nw,nw,n,nw,nw,nw,nw,nw,sw,n,nw,nw,nw,nw,nw,nw,nw,s,nw,se,n,n,n,nw,se,nw,nw,s,s,nw,nw,n,nw,nw,s,nw,nw,nw,se,nw,nw,nw,se,nw,nw,nw,nw,se,nw,nw,nw,nw,nw,n,nw,n,ne,nw,nw,nw,se,ne,nw,nw,nw,n,nw,nw,ne,n,n,nw,nw,sw,nw,nw,nw,nw,se,nw,n,s,nw,nw,n,n,nw,se,n,nw,nw,nw,n,nw,nw,nw,n,nw,se,n,se,sw,s,n,s,nw,nw,nw,nw,n,n,s,nw,nw,se,nw,nw,se,nw,n,n,nw,n,se,nw,n,n,nw,n,nw,n,nw,nw,n,nw,n,s,nw,nw,nw,nw,ne,ne,se,sw,nw,n,n,nw,s,n,nw,nw,n,n,nw,n,nw,nw,nw,nw,nw,n,nw,n,n,sw,n,se,nw,n,n,nw,n,nw,nw,n,s,sw,nw,ne,nw,n,sw,nw,nw,n,nw,sw,s,nw,n,n,nw,se,n,nw,n,ne,n,nw,nw,n,nw,nw,n,nw,n,nw,nw,nw,n,se,sw,nw,nw,nw,sw,nw,nw,nw,nw,se,n,n,ne,n,nw,nw,n,nw,nw,n,sw,n,se,nw,nw,n,n,n,nw,n,nw,n,nw,n,ne,n,n,nw,n,n,n,nw,se,sw,n,sw,n,nw,nw,n,n,n,se,nw,sw,ne,n,se,nw,nw,n,n,n,n,n,n,nw,n,n,nw,sw,nw,n,sw,n,n,se,sw,n,n,n,nw,sw,nw,n,n,n,n,nw,n,n,nw,n,s,n,n,sw,n,nw,ne,s,nw,ne,n,n,n,ne,s,n,n,n,n,n,n,se,nw,nw,n,n,nw,n,n,s,se,n,nw,n,n,n,n,n,n,nw,n,n,n,nw,nw,nw,n,n,n,nw,nw,sw,n,se,n,s,n,n,n,n,n,n,ne,n,se,n,n,n,se,n,nw,n,nw,n,n,n,n,n,n,n,nw,n,n,n,n,n,n,ne,n,n,nw,n,n,sw,n,nw,n,n,sw,n,n,n,nw,se,n,n,n,nw,n,s,n,n,n,n,n,n,n,s,n,n,n,n,nw,n,n,sw,sw,nw,n,nw,nw,sw,n,n,n,n,n,n,n,n,n,n,n,s,n,n,n,n,nw,n,n,n,n,n,n,n,s,n,nw,n,sw,nw,ne,n,nw,n,sw,n,n,n,n,n,ne,n,nw,n,n,n,n,n,n,n,ne,n,n,n,n,ne,n,n,n,n,ne,n,n,n,n,ne,n,n,s,n,n,se,n,n,n,n,n,n,n,nw,n,ne,nw,sw,ne,nw,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,ne,n,n,se,n,ne,n,ne,n,n,n,n,ne,n,ne,se,s,ne,nw,se,n,n,n,n,se,n,n,ne,s,n,nw,n,nw,nw,n,n,n,n,n,n,n,n,n,s,n,n,n,s,n,nw,n,n,n,n,n,n,n,n,n,n,n,n,ne,ne,n,sw,n,se,n,n,n,n,n,n,n,se,n,ne,n,ne,n,n,n,n,n,sw,n,n,s,nw,n,n,n,ne,ne,n,n,n,ne,n,n,se,n,n,n,n,ne,n,n,n,s,n,se,ne,n,n,n,n,n,n,n,n,s,ne,s,nw,n,ne,s,ne,n,n,n,n,ne,n,n,n,n,n,n,n,n,n,ne,n,se,ne,n,ne,ne,ne,ne,se,n,n,ne,n,n,n,n,nw,ne,sw,ne,n,n,ne,se,n,n,n,n,se,n,n,n,ne,n,se,ne,ne,n,s,nw,n,ne,n,n,nw,n,n,ne,n,ne,n,sw,n,se,n,ne,nw,ne,ne,n,n,n,ne,n,ne,nw,n,s,n,n,n,n,ne,n,n,ne,n,nw,n,n,n,ne,n,s,n,n,n,n,n,ne,ne,n,sw,n,ne,n,n,sw,ne,n,ne,ne,n,n,ne,ne,ne,n,ne,ne,ne,n,ne,sw,n,n,ne,ne,ne,se,n,ne,ne,ne,n,nw,n,ne,n,n,n,ne,n,n,n,n,n,ne,ne,n,ne,s,nw,ne,n,ne,ne,ne,n,n,n,n,nw,n,n,ne,ne,ne,n,ne,n,ne,ne,n,ne,ne,nw,ne,nw,n,n,ne,se,ne,se,ne,n,nw,n,n,s,n,se,ne,ne,n,ne,n,ne,s,n,n,sw,ne,ne,se,n,ne,n,n,n,n,sw,ne,ne,nw,n,n,ne,ne,ne,n,ne,n,sw,ne,ne,ne,ne,n,ne,se,ne,sw,n,n,n,ne,ne,sw,ne,ne,ne,n,ne,ne,n,ne,se,ne,s,nw,n,sw,n,ne,n,n,n,n,ne,n,sw,ne,ne,nw,n,ne,se,ne,ne,ne,ne,n,ne,ne,n,ne,n,ne,ne,ne,n,s,s,ne,ne,ne,s,ne,ne,ne,sw,n,n,ne,n,s,ne,n,n,nw,n,se,sw,ne,ne,ne,s,n,n,ne,ne,n,ne,ne,nw,ne,ne,ne,s,se,ne,ne,ne,n,ne,nw,n,ne,ne,sw,n,n,ne,ne,ne,n,ne,ne,se,ne,ne,n,ne,ne,ne,sw,s,n,n,n,se,n,s,ne,ne,ne,sw,ne,ne,se,ne,ne,ne,ne,ne,n,s,se,ne,ne,ne,n,ne,sw,se,s,ne,n,ne,ne,n,n,n,ne,n,ne,ne,se,ne,ne,n,ne,ne,ne,ne,ne,s,ne,ne,ne,nw,ne,ne,ne,ne,ne,n,ne,s,ne,ne,ne,n,ne,sw,n,n,n,ne,ne,n,ne,s,n,n,n,ne,ne,n,ne,ne,ne,sw,se,sw,ne,ne,s,ne,nw,ne,nw,se,nw,n,ne,se,n,ne,ne,ne,ne,ne,s,ne,ne,ne,ne,ne,n,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,se,ne,ne,ne,sw,ne,ne,ne,ne,n,ne,s,ne,s,ne,ne,n,ne,se,ne,ne,nw,n,ne,ne,ne,s,ne,sw,ne,n,ne,ne,n,ne,ne,ne,ne,ne,ne,n,ne,ne,ne,ne,ne,se,n,ne,ne,ne,ne,sw,ne,n,ne,se,ne,ne,ne,se,se,ne,sw,n,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,sw,ne,ne,ne,sw,n,n,ne,ne,n,ne,ne,ne,sw,ne,n,ne,ne,ne,se,ne,ne,nw,nw,sw,ne,ne,ne,ne,sw,ne,se,ne,n,ne,ne,ne,nw,ne,ne,ne,ne,ne,ne,sw,ne,ne,nw,ne,ne,ne,ne,ne,ne,ne,ne,sw,ne,ne,s,sw,ne,ne,s,sw,sw,ne,ne,ne,nw,ne,n,se,ne,ne,ne,ne,n,ne,nw,ne,ne,n,se,ne,ne,ne,ne,sw,ne,ne,s,ne,s,ne,ne,ne,ne,ne,ne,ne,nw,ne,ne,ne,se,ne,ne,ne,ne,se,ne,ne,sw,ne,s,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,sw,n,ne,ne,nw,se,ne,ne,ne,ne,se,ne,sw,ne,ne,n,se,ne,ne,se,ne,sw,nw,ne,ne,ne,ne,ne,ne,s,ne,se,sw,ne,s,ne,se,se,se,ne,ne,s,ne,ne,s,ne,se,ne,nw,s,ne,se,ne,ne,ne,sw,ne,se,ne,ne,ne,sw,ne,ne,ne,ne,nw,ne,ne,nw,ne,ne,s,ne,ne,se,ne,ne,nw,ne,ne,se,se,se,ne,se,ne,se,se,ne,ne,s,ne,ne,ne,ne,ne,ne,ne,ne,ne,n,ne,ne,ne,ne,ne,ne,ne,s,se,ne,sw,ne,ne,se,ne,ne,ne,ne,s,ne,se,ne,ne,se,n,n,ne,se,s,ne,s,ne,se,nw,ne,se,ne,ne,se,ne,se,se,ne,ne,se,ne,ne,ne,n,se,ne,ne,ne,ne,s,se,se,n,ne,se,se,ne,ne,se,ne,se,se,ne,ne,sw,ne,ne,ne,ne,ne,ne,nw,se,ne,se,ne,se,ne,s,ne,ne,sw,ne,ne,ne,ne,ne,s,se,ne,ne,s,se,ne,ne,ne,nw,ne,ne,ne,se,ne,ne,ne,ne,se,ne,ne,ne,se,ne,ne,se,n,s,ne,ne,ne,se,s,n,se,se,ne,sw,ne,ne,n,ne,se,n,se,n,s,n,s,ne,se,ne,ne,ne,ne,n,ne,se,sw,se,ne,se,nw,ne,ne,ne,se,se,ne,ne,ne,ne,ne,ne,ne,ne,nw,ne,n,s,ne,ne,ne,ne,ne,se,se,se,se,sw,s,n,ne,s,ne,ne,sw,se,se,ne,ne,ne,ne,ne,ne,se,se,s,ne,se,ne,nw,n,ne,se,se,ne,se,ne,ne,se,se,se,ne,ne,sw,se,nw,se,nw,se,se,se,se,ne,n,n,ne,se,se,ne,ne,se,ne,ne,se,ne,sw,ne,se,ne,n,se,nw,sw,ne,ne,se,ne,se,ne,ne,se,ne,se,ne,ne,ne,se,ne,se,se,n,nw,ne,ne,ne,ne,sw,n,ne,ne,ne,nw,ne,se,se,ne,ne,s,nw,n,ne,ne,ne,ne,ne,ne,ne,se,ne,sw,se,ne,s,n,ne,ne,se,ne,se,se,ne,se,ne,se,se,ne,se,se,se,ne,ne,ne,ne,se,ne,ne,nw,ne,ne,se,ne,s,se,ne,se,ne,ne,ne,ne,n,se,ne,se,se,ne,ne,ne,nw,ne,se,se,nw,ne,se,se,ne,sw,ne,ne,ne,n,ne,ne,ne,n,se,ne,se,ne,n,n,se,ne,se,se,se,ne,se,se,sw,se,ne,se,ne,sw,sw,ne,ne,ne,s,n,ne,ne,nw,ne,n,se,se,se,se,ne,nw,ne,ne,ne,se,ne,se,n,n,se,n,se,se,se,se,se,ne,sw,ne,se,ne,se,se,se,ne,sw,se,s,se,se,ne,se,se,se,n,ne,se,se,ne,ne,ne,ne,se,se,ne,se,se,ne,se,ne,ne,se,se,nw,se,se,ne,se,sw,se,ne,n,ne,se,se,se,nw,se,se,se,ne,se,ne,se,se,ne,se,se,ne,ne,se,se,sw,ne,se,se,sw,se,se,s,ne,ne,se,ne,s,ne,se,se,ne,se,nw,n,se,se,s,se,ne,se,ne,ne,sw,ne,ne,n,se,s,n,ne,se,se,ne,nw,ne,ne,se,se,ne,sw,ne,ne,ne,se,sw,ne,se,se,ne,n,ne,se,nw,se,se,se,ne,se,ne,ne,ne,s,ne,nw,ne,ne,ne,se,se,se,nw,se,ne,se,se,se,ne,se,ne,se,se,se,ne,se,se,se,n,se,ne,ne,se,se,se,se,sw,ne,se,se,se,ne,se,nw,n,ne,ne,ne,sw,n,se,n,se,se,n,ne,se,se,ne,se,ne,se,nw,se,se,se,s,sw,ne,se,sw,se,se,se,ne,ne,se,ne,se,se,se,se,ne,se,se,ne,se,se,ne,se,ne,se,se,se,ne,se,ne,ne,se,s,ne,ne,nw,se,ne,n,ne,se,se,ne,se,n,ne,ne,se,ne,se,se,se,ne,se,se,ne,ne,nw,ne,s,se,se,se,se,se,sw,nw,n,se,se,s,se,se,se,nw,se,n,nw,se,ne,ne,se,nw,se,se,se,se,se,se,ne,se,se,se,se,ne,se,se,ne,se,se,se,se,ne,se,se,se,se,ne,ne,nw,se,se,se,se,se,se,s,se,se,se,n,se,ne,ne,ne,se,se,se,se,ne,se,se,ne,se,se,se,se,se,se,se,sw,se,ne,ne,s,se,se,ne,se,se,se,ne,ne,se,se,se,se,se,se,se,s,sw,se,ne,se,se,se,se,se,se,se,n,se,sw,se,se,se,ne,se,se,se,se,se,s,ne,nw,se,se,se,se,se,sw,se,ne,sw,se,ne,se,se,ne,se,ne,n,ne,se,se,ne,se,ne,nw,nw,se,se,se,se,se,se,se,se,se,se,sw,se,se,se,se,se,nw,se,n,se,se,ne,se,se,nw,se,se,se,se,se,ne,nw,nw,se,se,se,se,ne,se,se,se,ne,ne,se,se,se,se,se,se,se,se,se,se,se,sw,s,se,se,ne,nw,se,se,se,se,se,se,sw,sw,se,ne,sw,nw,se,se,se,se,se,n,se,se,ne,se,se,se,nw,se,ne,se,se,se,s,se,se,n,se,se,ne,se,s,se,ne,se,se,se,nw,se,se,n,se,s,n,se,se,se,nw,se,s,sw,se,ne,se,se,se,nw,se,sw,se,se,sw,s,se,n,ne,sw,se,n,nw,se,ne,se,se,se,se,se,ne,se,se,se,se,se,se,se,se,n,se,se,se,ne,se,se,se,sw,se,nw,se,se,ne,se,se,se,se,n,ne,se,se,se,n,se,se,se,se,se,se,se,s,s,se,se,se,s,ne,se,se,se,se,se,se,se,se,se,se,se,se,se,n,n,se,se,se,se,se,se,se,se,se,s,sw,se,se,se,n,nw,se,se,se,se,ne,ne,se,n,se,se,sw,ne,sw,se,se,ne,se,se,se,se,se,se,se,se,se,n,se,nw,se,se,se,sw,s,se,se,se,se,se,se,se,se,ne,s,se,se,se,nw,s,se,n,se,se,se,s,sw,se,se,se,se,nw,ne,se,se,se,ne,s,se,sw,se,se,se,se,se,se,s,se,s,se,sw,se,ne,s,se,se,nw,se,se,nw,n,se,se,se,nw,nw,se,se,se,se,se,nw,s,se,se,ne,se,se,se,se,se,se,se,sw,se,se,se,se,se,se,nw,se,se,s,se,se,se,se,s,s,se,se,se,s,se,se,se,s,s,n,se,se,se,se,n,n,se,sw,nw,se,s,se,nw,se,s,nw,nw,se,s,se,se,se,se,se,se,sw,nw,se,se,s,se,se,se,se,se,se,n,n,ne,se,s,s,se,se,se,se,se,se,s,se,se,s,se,se,n,se,se,s,se,s,se,s,se,sw,se,se,sw,se,ne,se,sw,se,se,se,s,nw,se,ne,n,se,se,nw,se,ne,se,se,se,s,se,se,nw,se,s,se,se,se,nw,se,se,sw,s,se,s,se,se,nw,s,se,se,s,se,se,s,se,se,se,se,se,sw,s,se,se,s,sw,nw,ne,nw,se,nw,se,s,se,se,se,se,se,s,se,se,se,se,sw,s,sw,se,se,se,s,sw,sw,s,n,se,s,se,nw,se,se,se,ne,se,se,se,se,s,se,se,s,nw,s,se,s,nw,se,se,se,se,se,n,s,se,ne,n,se,se,nw,se,s,se,n,se,nw,s,s,s,se,nw,s,s,se,s,se,se,nw,s,se,s,se,se,se,se,n,se,se,s,se,se,se,se,s,s,se,s,se,se,s,se,s,n,se,n,se,se,s,se,s,se,se,s,s,se,se,s,se,se,se,se,s,s,s,se,s,nw,s,se,se,se,ne,nw,se,se,se,se,se,se,n,se,se,se,se,se,se,nw,se,se,se,s,s,nw,se,ne,se,s,se,ne,se,se,nw,se,se,se,sw,n,se,sw,se,se,nw,ne,s,se,sw,se,s,s,s,se,s,se,n,sw,sw,se,se,se,ne,se,s,se,sw,n,se,se,se,s,s,se,s,se,n,s,ne,se,se,s,se,se,s,sw,s,se,se,ne,s,n,se,se,se,s,s,s,se,se,s,s,ne,se,s,se,nw,se,s,se,se,s,s,s,se,n,se,se,ne,se,se,s,sw,se,s,ne,se,se,se,s,s,se,se,se,se,se,se,se,s,ne,se,s,se,s,s,nw,nw,s,s,nw,s,se,se,ne,se,se,se,n,s,s,s,s,se,se,s,s,s,nw,sw,se,s,s,n,se,s,s,s,s,n,s,se,s,s,se,sw,nw,nw,se,se,se,s,sw,se,se,se,s,se,se,s,s,s,se,ne,s,se,s,s,se,s,ne,se,se,se,se,se,se,ne,se,ne,s,se,se,se,se,se,s,s,s,n,se,nw,nw,s,se,sw,se,se,s,se,se,nw,s,s,s,ne,nw,se,se,se,n,ne,se,s,se,ne,se,ne,sw,ne,se,s,sw,se,se,se,s,s,ne,s,se,se,sw,s,s,s,s,se,se,s,s,se,s,se,s,s,nw,s,s,s,s,nw,nw,se,s,s,sw,s,se,nw,s,se,s,se,s,se,n,sw,n,ne,s,s,s,se,se,nw,s,n,se,s,s,s,se,s,s,s,sw,se,se,se,se,se,se,sw,s,nw,se,n,s,se,sw,nw,se,se,se,se,s,ne,se,ne,s,s,se,se,se,s,s,s,s,n,se,sw,n,s,nw,s,se,s,se,se,se,s,se,n,s,se,nw,se,s,s,se,se,se,s,s,n,s,se,s,s,s,se,se,se,s,s,s,s,se,se,s,se,s,s,s,s,s,s,s,s,nw,nw,se,n,sw,s,s,ne,s,nw,s,se,s,s,sw,s,se,nw,se,s,s,s,s,s,s,s,se,se,s,se,ne,s,se,se,se,s,s,s,se,ne,s,ne,s,s,se,s,s,ne,s,s,se,s,s,s,s,s,se,n,sw,n,s,se,se,s,s,nw,s,sw,se,n,s,se,s,s,sw,s,s,s,s,s,nw,s,nw,se,se,s,s,nw,se,s,s,sw,sw,s,se,se,s,s,s,se,s,se,s,s,s,se,s,ne,s,s,se,s,s,se,se,s,s,s,n,s,s,s,s,se,s,s,se,s,s,se,s,s,s,nw,se,s,s,se,se,se,nw,s,se,ne,s,se,s,n,nw,se,sw,se,se,s,se,s,se,s,sw,s,se,se,se,nw,s,s,s,s,sw,s,s,s,n,s,sw,s,s,se,se,se,s,se,s,s,s,se,s,se,se,nw,s,s,se,ne,s,se,s,se,se,se,s,s,s,s,se,s,s,s,s,se,s,s,s,s,se,se,se,sw,s,se,s,s,nw,s,s,se,s,se,s,se,s,sw,s,ne,s,s,ne,s,sw,s,s,ne,n,s,se,se,s,s,s,s,se,se,s,s,se,se,s,nw,s,s,n,s,ne,se,n,s,s,s,s,s,sw,s,n,n,s,s,sw,s,sw,n,se,s,s,s,s,nw,se,s,s,s,s,s,s,se,s,s,sw,s,s,s,se,se,ne,s,s,s,ne,se,se,s,s,se,n,n,se,n,sw,s,sw,se,nw,n,s,n,s,nw,sw,s,se,se,s,s,s,s,s,s,se,s,s,se,s,s,s,s,s,sw,se,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,nw,se,s,se,s,s,s,s,s,s,s,s,se,nw,se,s,s,s,se,nw,s,s,ne,s,s,se,se,sw,s,ne,n,s,s,se,n,ne,se,s,s,s,s,nw,s,ne,s,s,n,s,s,s,s,s,se,s,s,s,s,se,s,s,s,s,n,s,se,s,n,s,s,sw,s,s,s,s,s,se,s,ne,s,sw,n,s,n,se,nw,nw,s,sw,ne,n,sw,n,sw,s,n,s,se,s,se,s,s,s,s,nw,se,s,s,s,se,sw,s,se,s,s,s,s,s,s,s,s,s,s,se,ne,nw,s,s,s,s,s,se,s,ne,sw,se,se,sw,sw,s,se,ne,s,nw,ne,n,s,s,s,s,s,ne,s,s,s,s,se,s,se,s,s,s,sw,s,s,se,s,s,s,s,n,se,s,ne,s,s,s,s,se,sw,se,s,s,s,s,s,se,s,n,n,s,s,sw,s,s,s,s,ne,s,sw,s,s,s,s,s,sw,s,s,n,s,n,s,s,s,n,se,s,s,s,s,s,s,s,s,s,s,s,s,ne,sw,s,s,ne,nw,se,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,sw,s,s,s,nw,s,s,se,se,s,n,s,se,s,s,s,se,s,nw,s,s,s,s,se,s,s,s,ne,s,s,s,se,s,s,s,s,s,s,s,n,s,s,s,s,s,ne,s,s,s,s,sw,s,s,s,s,s,s,s,s,s,s,ne,se,sw,s,sw,s,s,s,se,s,s,s,s,se,s,s,ne,s,s,s,s,se,ne,se,n,n,n,n,n,n,nw,nw,sw,sw,nw,ne,sw,ne,sw,nw,sw,ne,s,sw,sw,sw,sw,s,sw,sw,sw,sw,nw,s,s,s,nw,s,s,s,se,s,se,s,se,n,se,s,se,s,nw,sw,se,se,s,se,se,se,se,se,se,se,se,nw,se,se,se,se,se,ne,se,ne,s,se,se,se,se,se,ne,ne,ne,ne,ne,ne,se,ne,ne,ne,ne,ne,ne,s,ne,nw,ne,sw,ne,ne,ne,ne,ne,ne,ne,se,n,ne,ne,se,ne,ne,n,se,ne,ne,sw,ne,ne,n,ne,n,ne,n,n,n,sw,n,ne,n,ne,ne,se,ne,n,n,ne,n,n,s,n,n,ne,n,s,n,n,n,s,n,ne,n,n,n,n,n,se,nw,nw,n,n,nw,n,se,n,sw,s,n,nw,nw,se,nw,nw,nw,nw,n,n,se,n,n,n,nw,nw,n,nw,ne,n,nw,n,nw,sw,nw,n,n,n,ne,se,nw,n,nw,n,n,nw,n,nw,n,nw,n,nw,nw,nw,nw,nw,nw,sw,nw,nw,nw,nw,se,sw,sw,nw,se,nw,s,nw,nw,nw,nw,nw,nw,nw,s,n,nw,nw,nw,sw,nw,se,nw,nw,nw,nw,sw,sw,nw,s,sw,nw,s,nw,nw,sw,nw,sw,sw,nw,sw,se,nw,nw,nw,nw,nw,sw,sw,nw,se,sw,sw,nw,sw,nw,se,sw,nw,nw,nw,n,nw,sw,nw,ne,nw,nw,s,nw,nw,nw,sw,nw,sw,nw,sw,sw,sw,sw,n,sw,nw,s,sw,nw,ne,sw,n,s,sw,sw,sw,sw,ne,sw,sw,sw,nw,sw,s,sw,sw,nw,sw,sw,sw,sw,sw,sw,sw,sw,sw,se,n,sw,s,sw,sw,n,sw,sw,s,s,sw,sw,sw,sw,sw,sw,sw,s,s,sw,sw,sw,ne,sw,sw,s,sw,s,nw,sw,sw,se,se,sw,sw,sw,s,s,s,sw,nw,sw,nw,s,sw,sw,sw,sw,sw,sw,s,sw,s,sw,sw,sw,s,sw,s,sw,s,sw,s,sw,s,sw,s,sw,sw,s,s,s,sw,n,sw,s,n,s,s,s,sw,s,n,s,sw,sw,sw,sw,s,s,s,s,s,s,s,s,sw,sw,s,sw,se,s,s,s,sw,s,s,sw,s,ne,s,s,s,s,s,s,s,s,s,n,se,s,s,nw,s,s,s,se,s,s,s,s,s,s,s,s,s,s,nw,se,s,s,s,sw,s,s,s,s,s,s,s,ne,n,s,se,s,s,s,s,s,s,se,se,nw,nw,s,s,s,s,s,se,sw,s,s,se,s,s,s,s,s,s,s,s,s,n,s,s,s,se,s,s,s,s,s,s,se,s,s,n,s,s,se,s,s,s,se,s,s,nw,s,s,s,n,s,s,se,s,se,s,n,ne,s,s,s,s,se,ne,n,s,se,s,se,s,s,se,s,s,s,s,s,se,s,sw,s,se,se,s,se,s,s,ne,s,ne,ne,se,s,ne,se,s,ne,s,se,ne,se,se,se,sw,s,se,se,se,se,se,n,s,s,se,s,se,s,s,se,se,s,s,se,se,nw,se,ne,s,s,se,se,se,se,se,s,se,ne,se,se,s,ne,se,sw,se,se,se,se,se,nw,se,se,se,se,se,se,se,s,ne,n,sw,ne,se,se,se,se,se,ne,se,se,se,se,se,se,se,se,se,n,se,s,s,se,se,sw,nw,s,se,se,ne,se,se,ne,s,se,se,se,se,se,se,se,se,n,se,se,se,se,se,se,ne,se,ne,nw,se,se,ne,nw,nw,se,se,se,se,sw,se,se,sw,n,se,se,sw,se,se,se,se,nw,se,se,se,se,se,nw,sw,ne,ne,ne,se,ne,ne,nw,se,se,nw,se,se,se,se,se,ne,se,s,se,se,s,ne,se,ne,se,se,se,ne,s,se,ne,ne,ne,ne,se,n,se,se,se,se,ne,se,n,ne,se,se,se,ne,sw,nw,nw,ne,se,ne,se,se,se,n,se,ne,se,se,se,se,ne,se,ne,n,se,se,ne,nw,ne,ne,se,se,n,se,se,s,se,sw,ne,ne,ne,se,se,se,ne,ne,se,n,ne,ne,se,ne,ne,ne,se,ne,sw,n,ne,s,se,se,se,sw,ne,se,se,se,sw,ne,se,ne,ne,ne,sw,ne,ne,s,ne,s,ne,se,ne,ne,se,se,se,nw,ne,ne,ne,se,ne,se,se,ne,ne,ne,se,sw,ne,ne,ne,ne,se,ne,sw,ne,sw,ne,n,nw,sw,ne,ne,ne,sw,ne,se,sw,n,ne,ne,se,n,se,ne,n,ne,se,ne,nw,ne,ne,s,n,se,ne,nw,ne,se,ne,ne,ne,se,ne,se,se,ne,ne,ne,se,se,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,se,se,nw,ne,ne,ne,ne,ne,ne,ne,se,se,ne,ne,ne,se,ne,ne,ne,ne,ne,ne,ne,ne,nw,n,n,ne,nw,ne,ne,sw,se,ne,s,ne,nw,ne,nw,ne,ne,ne,ne,ne,ne,ne,n,n,ne,n,ne,ne,s,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,se,n,n,ne,s,ne,ne,ne,nw,se,ne,nw,nw,ne,n,n,ne,ne,nw,ne,n,ne,sw,n,ne,ne,ne,ne,ne,ne,ne,ne,ne,n,n,ne,ne,ne,ne,ne,n,n,ne,ne,se,sw,ne,n,ne,n,ne,ne,sw,ne,ne,n,ne,ne,se,sw,ne,ne,ne,s,n,n,s,ne,n,se,ne,ne,sw,s,ne,nw,n,n,ne,nw,ne,n,n,s,s,n,ne,ne,n,n,nw,ne,n,ne,ne,ne,ne,n,s,n,se,sw,se,ne,ne,ne,n,ne,ne,ne,n,nw,ne,n,n,ne,nw,ne,ne,sw,n,n,se,ne,n,ne,nw,se,ne,ne,ne,n,ne,ne,n,ne,ne,ne,ne,n,ne,ne,s,n,s,nw,n,n,nw,ne,ne,ne,s,n,s,ne,ne,ne,n,se,ne,ne,nw,n,n,n,ne,s,sw,n,ne,n,n,sw,n,ne,n,ne,n,sw,ne,ne,ne,sw,n,ne,ne,sw,ne,ne,n,n,se,ne,ne,s,ne,ne,n,nw,s,n,n,ne,nw,sw,ne,n,ne,ne,n,ne,n,se,n,ne,sw,sw,n,n,n,ne,ne,n,ne,n,s,ne,se,ne,nw,n,n,n,n,se,nw,ne,n,n,n,n,nw,nw,ne,n,se,ne,n,n,n,ne,n,ne,ne,ne,sw,n,s,n,n,n,ne,se,n,n,ne,ne,ne,sw,ne,ne,n,n,n,n,n,n,ne,ne,n,s,n,n,n,n,ne,ne,ne,n,n,se,nw,n,n,n,n,s,n,ne,n,n,n,n,n,n,n,n,sw,n,n,ne,n,n,n,s,ne,nw,n,nw,sw,n,n,n,n,s,n,n,ne,n,n,n,n,n,n,n,s,s,n,n,n,ne,n,s,ne,n,se,n,n,n,sw,n,n,n,ne,n,n,n,n,sw,se,n,sw,n,n,n,sw,ne,s,n,n,sw,s,se,n,n,n,n,ne,n,n,n,n,se,n,n,n,n,n,n,se,n,sw,n,n,n,nw,s,sw,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,sw,n,n,se,n,nw,se,n,sw,n,n,n,n,n,n,nw,n,n,n,n,n,n,n,n,n,sw,n,nw,ne,n,n,n,n,n,n,n,nw,n,n,sw,n,n,n,n,n,n,n,n,ne,n,s,n,n,n,n,ne,n,s,ne,n,n,n,nw,n,n,n,n,n,se,nw,n,nw,sw,n,n,ne,n,n,n,n,nw,n,n,n,nw,n,n,nw,n,n,n,sw,ne,n,n,s,n,n,n,nw,n,ne,n,nw,n,n,nw,nw,n,nw,nw,n,n,n,nw,sw,n,n,nw,sw,sw,n,nw,n,s,nw,n,s,nw,nw,nw,nw,n,se,n,n,nw,sw,nw,n,nw,n,ne,n,n,nw,nw,n,n,nw,nw,ne,nw,se,nw,nw,sw,n,n,n,sw,sw,n,n,n,n,nw,n,nw,nw,n,nw,n,nw,s,n,n,nw,nw,n,n,nw,n,sw,nw,nw,n,n,nw,nw,s,n,n,n,n,s,nw,n,n,n,n,n,nw,n,n,nw,n,nw,n,n,n,nw,n,n,nw,ne,nw,nw,n,nw,nw,n,n,nw,n,nw,ne,n,nw,n,n,nw,nw,nw,ne,nw,nw,n,n,n,se,ne,n,nw,n,n,n,n,nw,nw,n,nw,n,n,s,n,n,n,n,nw,n,nw,nw,se,n,nw,n,n,nw,nw,nw,nw,n,n,n,s,nw,nw,nw,ne,s,nw,nw,nw,n,nw,nw,sw,nw,n,nw,nw,n,nw,nw,n,nw,sw,n,n,n,n,nw,nw,nw,n,n,n,n,nw,n,n,ne,n,nw,nw,nw,ne,ne,n,n,nw,nw,ne,n,nw,nw,nw,nw,n,n,n,nw,nw,n,n,n,ne,nw,nw,nw,se,n,n,nw,n,nw,n,nw,nw,n,s,nw,n,nw,nw,nw,nw,nw,ne,nw,nw,n,nw,n,n,n,nw,n,n,ne,nw,n,n,nw,sw,nw,nw,nw,nw,nw,nw,nw,nw,s,nw,se,n,nw,nw,nw,nw,nw,nw,s,nw,n,nw,n,nw,nw,nw,nw,nw,se,s,nw,se,nw,n,ne,nw,nw,nw,n,nw,nw,nw,nw,nw,nw,n,ne,nw,se,n,nw,nw,nw,nw,sw,n,nw,nw,n,nw,n,nw,nw,ne,n,nw,n,ne,se,n,sw,nw,ne,nw,sw,nw,ne,n,nw,ne,se,nw,nw,nw,nw,nw,ne,nw,n,nw,s,nw,nw,nw,ne,nw,nw,nw,nw,s,nw,n,sw,s,nw,se,nw,ne,nw,n,nw,sw,nw,n,nw,nw,sw,nw,nw,nw,nw,n,nw,nw,nw,nw,nw,nw,nw,nw,se,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,n,s,s,nw,nw,nw,se,nw,nw,nw,nw,sw,nw,nw,n,nw,n,sw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,n,nw,s,nw,nw,nw,nw,nw,nw,nw,nw,n,nw,sw,nw,nw,nw,nw,nw,s,nw,sw,nw,nw,nw,se,nw,nw,sw,nw,nw,nw,nw,nw,nw,n,nw,nw,nw,n,nw,sw,n,nw,nw,se,nw,sw,se,sw,nw,sw,n,nw,nw,nw,ne,nw,nw,nw,se,nw,ne,ne,nw,nw,nw,nw,nw,s,nw,ne,n,nw,ne,nw,sw,nw,nw,sw,nw,se,nw,nw,ne,nw,ne,nw,sw,sw,nw,nw,nw,nw,nw,sw,nw,nw,nw,se,sw,sw,nw,s,sw,nw,nw,nw,nw,ne,nw,ne,nw,nw,sw,nw,nw,nw,sw,nw,nw,nw,ne,sw,s,nw,ne,nw,nw,se,se,n,nw,nw,sw,nw,nw,nw,nw,nw,sw,nw,nw,nw,nw,n,nw,sw,nw,s,nw,sw,nw,nw,nw,sw,nw,nw,se,nw,n,nw,nw,ne,sw,nw,ne,nw,se,s,nw,nw,n,n,nw,nw,nw,nw,ne,se,sw,nw,nw,nw,nw,se,nw,nw,nw,sw,nw,nw,s,nw,nw,nw,nw,nw,sw,nw,nw,nw,nw,sw,nw,sw,nw,nw,nw,ne,nw,sw,nw,sw,nw,sw,nw,nw,nw,sw,ne,sw,nw,sw,nw,se,nw,se,nw,nw,n,sw,nw,nw,nw,nw,sw,sw,nw,sw,nw,nw,nw,nw,nw,sw,sw,nw,nw,nw,sw,nw,nw,nw,nw,ne,nw,n,nw,sw,sw,nw,nw,nw,nw,nw,sw,nw,sw,nw,sw,sw,nw,nw,sw,sw,nw,nw,nw,ne,sw,ne,sw,sw,nw,nw,nw,nw,nw,nw,nw,sw,se,nw,nw,sw,sw,nw,nw,s,nw,nw,sw,nw,nw,nw,n,sw,nw,sw,sw,n,nw,nw,nw,sw,sw,nw,s,nw,nw,nw,sw,nw,n,nw,nw,nw,nw,n,nw,nw,nw,sw,nw,nw,nw,se,nw,sw,nw,sw,sw,sw,nw,ne,s,sw,ne,nw,nw,s,nw,sw,nw,s,nw,sw,sw,sw,s,nw,se,nw,nw,nw,sw,sw,sw,n,nw,sw,nw,nw,nw,nw,nw,nw,sw,n,nw,nw,nw,s,nw,nw,nw,nw,sw,sw,sw,nw,nw,sw,sw,nw,nw,sw,nw,sw,nw,sw,sw,sw,sw,sw,nw,sw,s,nw,nw,sw,sw,sw,sw,nw,sw,sw,nw,sw,ne,nw,sw,nw,nw,sw,nw,se,nw,n,sw,nw,s,nw,ne,nw,se,sw,sw,sw,n,ne,sw,nw,sw,nw,sw,se,s,sw,sw,nw,sw,sw,nw,nw,sw,nw,sw,nw,sw,nw,sw,sw,sw,ne,sw,nw,sw,nw,nw,sw,nw,n,nw,sw,n,nw,nw,sw,sw,se,nw,nw,sw,nw,sw,sw,sw,sw,nw,se,sw,sw,nw,nw,sw,sw,sw,nw,sw,nw,nw,nw,sw,n,nw,sw,n,nw,s,nw,nw,sw,s,sw,sw,nw,sw,sw,sw,nw,ne,sw,ne,sw,s,sw,sw,nw,sw,nw,sw,sw,nw,nw,nw,sw,sw,ne,sw,n,sw,sw,sw,n,sw,sw,nw,sw,n,n,sw,sw,sw,nw,s,sw,sw,sw,sw,nw,nw,sw,nw,sw,sw,s,sw,nw,sw,sw,sw,s,sw,sw,n,nw,sw,n,sw,sw,s,nw,se,sw,sw,sw,sw,sw,nw,sw,sw,sw,sw,sw,nw,sw,sw,sw,sw,sw,sw,sw,sw,sw,nw,nw,sw,sw,sw,s,ne,se,nw,sw,sw,sw,nw,s,nw,nw,sw,sw,s,sw,sw,se,sw,sw,sw,sw,sw,sw,sw,sw,sw,nw,sw,nw,nw,nw,nw,nw,nw,s,nw,sw,sw,sw,sw,sw,n,sw,se,sw,sw,s,sw,sw,sw,sw,sw,s,s,sw,s,ne,sw,sw,s,sw,sw,nw,sw,sw,sw,sw,ne,se,sw,sw,sw,sw,n,sw,sw,sw,sw,s,nw,se,nw,nw,sw,sw,nw,se,nw,se,sw,sw,sw,nw,s,sw,sw,sw,sw,sw,sw,sw,sw,sw,ne,se,nw,nw,sw,sw,sw,n,s,sw,nw,nw,se,sw,ne,sw,n,s,sw,sw,nw,sw,sw,sw,sw,sw,ne,sw,sw,se,sw,sw,sw,sw,nw,sw,sw,ne,sw,nw,sw,s,sw,sw,sw,sw,sw,sw,sw,sw,se,sw,se,sw,sw,sw,sw,sw,nw,sw,sw,sw,sw,sw,se,sw,sw,se,sw,sw,ne
diff --git a/2017/inputs/day_12.txt b/2017/inputs/day_12.txt
new file mode 100644
index 0000000..80e4ce6
--- /dev/null
+++ b/2017/inputs/day_12.txt
@@ -0,0 +1,2000 @@
+0 <-> 199, 1774
+1 <-> 350, 1328, 1920
+2 <-> 477, 984, 1419
+3 <-> 1465, 1568
+4 <-> 359, 1047, 1215, 1580, 1969
+5 <-> 613
+6 <-> 49, 617, 1213
+7 <-> 1263
+8 <-> 410
+9 <-> 1224
+10 <-> 1157
+11 <-> 304, 1168, 1875
+12 <-> 868, 891, 1369, 1712
+13 <-> 958, 1371
+14 <-> 1814
+15 <-> 261, 556
+16 <-> 830, 1646, 1901, 1933
+17 <-> 962, 1778
+18 <-> 109, 1229
+19 <-> 239, 1070, 1886, 1930
+20 <-> 327, 1307, 1801, 1905
+21 <-> 943, 1950
+22 <-> 1310
+23 <-> 659, 917
+24 <-> 373
+25 <-> 369
+26 <-> 947, 1023
+27 <-> 338, 1901
+28 <-> 1691
+29 <-> 132, 1219, 1699, 1962
+30 <-> 424, 822, 1419
+31 <-> 1444, 1464
+32 <-> 702, 1517
+33 <-> 1639
+34 <-> 909
+35 <-> 690, 1655
+36 <-> 988, 1149, 1166
+37 <-> 649, 1300, 1441, 1699
+38 <-> 1848
+39 <-> 382
+40 <-> 827, 1203, 1510
+41 <-> 714, 1056, 1184
+42 <-> 1018, 1873
+43 <-> 214
+44 <-> 670, 957
+45 <-> 45
+46 <-> 1195
+47 <-> 559, 1504
+48 <-> 1958
+49 <-> 6
+50 <-> 50, 1248
+51 <-> 1151
+52 <-> 52, 521, 1791
+53 <-> 304
+54 <-> 601
+55 <-> 1328
+56 <-> 939
+57 <-> 1583, 1995
+58 <-> 1422, 1694
+59 <-> 395, 1233
+60 <-> 862, 1811
+61 <-> 345, 1694
+62 <-> 62, 276
+63 <-> 280
+64 <-> 199
+65 <-> 117, 930
+66 <-> 364, 697
+67 <-> 1043
+68 <-> 287, 504, 1554
+69 <-> 498, 706
+70 <-> 77, 333, 713, 972, 1299
+71 <-> 1643
+72 <-> 694
+73 <-> 1381
+74 <-> 955, 1790
+75 <-> 1691, 1743
+76 <-> 76, 638, 1429
+77 <-> 70
+78 <-> 1513
+79 <-> 1397, 1716
+80 <-> 897
+81 <-> 968, 1841
+82 <-> 649
+83 <-> 522
+84 <-> 84, 125, 399, 498
+85 <-> 880, 1554, 1888
+86 <-> 86
+87 <-> 579, 1947
+88 <-> 470, 1451, 1750
+89 <-> 805, 1434
+90 <-> 453
+91 <-> 1208
+92 <-> 688, 1358, 1746
+93 <-> 357, 647
+94 <-> 234, 1270, 1520
+95 <-> 620, 1454
+96 <-> 390, 869, 919
+97 <-> 693, 1783
+98 <-> 259, 529, 782, 1018
+99 <-> 678
+100 <-> 1215
+101 <-> 459, 887
+102 <-> 888, 1135
+103 <-> 1006
+104 <-> 1375, 1422
+105 <-> 1657, 1730
+106 <-> 216, 1434
+107 <-> 333
+108 <-> 468, 1654
+109 <-> 18, 1791
+110 <-> 372
+111 <-> 111, 861, 1383
+112 <-> 1359, 1937
+113 <-> 414, 736, 1446
+114 <-> 426, 1457
+115 <-> 1605, 1672
+116 <-> 116, 713, 1584, 1602
+117 <-> 65
+118 <-> 1611, 1897
+119 <-> 541, 1569
+120 <-> 412, 787
+121 <-> 1344
+122 <-> 698, 752, 1693
+123 <-> 1173, 1576, 1634, 1802
+124 <-> 735
+125 <-> 84, 1032
+126 <-> 126, 225, 332
+127 <-> 1350
+128 <-> 128, 319, 327, 1582
+129 <-> 129, 654, 1260
+130 <-> 1080, 1296, 1350
+131 <-> 131
+132 <-> 29, 856, 1064
+133 <-> 659, 1367, 1776
+134 <-> 648, 1147, 1450, 1910
+135 <-> 411
+136 <-> 353, 935, 1590
+137 <-> 228
+138 <-> 194, 452, 1746, 1794
+139 <-> 139, 494, 1635
+140 <-> 681
+141 <-> 1507
+142 <-> 1288
+143 <-> 845
+144 <-> 1516
+145 <-> 502, 1146, 1155, 1809
+146 <-> 146, 750
+147 <-> 1600
+148 <-> 1206
+149 <-> 829, 1457
+150 <-> 675, 915
+151 <-> 651, 1678
+152 <-> 888, 1503
+153 <-> 498, 960, 1515
+154 <-> 1468
+155 <-> 751
+156 <-> 528, 803, 1655
+157 <-> 1486, 1937
+158 <-> 590, 1876
+159 <-> 159, 185, 1287, 1550, 1588
+160 <-> 160, 548
+161 <-> 1303, 1364
+162 <-> 1855
+163 <-> 1181
+164 <-> 442
+165 <-> 490
+166 <-> 1105
+167 <-> 1121
+168 <-> 760, 1129
+169 <-> 747
+170 <-> 1890
+171 <-> 1644
+172 <-> 593, 665
+173 <-> 1092, 1869
+174 <-> 705
+175 <-> 1345, 1999
+176 <-> 234, 606
+177 <-> 557, 688
+178 <-> 373
+179 <-> 1376
+180 <-> 638
+181 <-> 1996
+182 <-> 1094, 1206, 1748
+183 <-> 931
+184 <-> 880
+185 <-> 159, 1058, 1704
+186 <-> 765, 1178, 1877
+187 <-> 732
+188 <-> 188
+189 <-> 189, 1871
+190 <-> 395, 1639
+191 <-> 441
+192 <-> 192, 1034
+193 <-> 494
+194 <-> 138, 995, 1308
+195 <-> 1024
+196 <-> 226, 1632, 1919
+197 <-> 786
+198 <-> 286, 758, 1852
+199 <-> 0, 64, 1646
+200 <-> 314
+201 <-> 459, 658
+202 <-> 321, 492, 599, 1081, 1460
+203 <-> 225
+204 <-> 331, 462, 600
+205 <-> 898
+206 <-> 734, 1321
+207 <-> 558, 991
+208 <-> 397
+209 <-> 1145, 1886
+210 <-> 1343, 1925
+211 <-> 840, 1409
+212 <-> 1308
+213 <-> 1813
+214 <-> 43, 282
+215 <-> 1270
+216 <-> 106, 836, 1275, 1507
+217 <-> 312
+218 <-> 290, 386, 639, 1920
+219 <-> 784, 1001
+220 <-> 220, 322
+221 <-> 1681
+222 <-> 1616, 1653
+223 <-> 436, 1272, 1625
+224 <-> 1398, 1696
+225 <-> 126, 203, 1182
+226 <-> 196, 1655
+227 <-> 623
+228 <-> 137, 923
+229 <-> 253, 1387
+230 <-> 1374
+231 <-> 389, 1499
+232 <-> 442
+233 <-> 473, 1406
+234 <-> 94, 176
+235 <-> 235
+236 <-> 607, 838, 1487, 1856
+237 <-> 818
+238 <-> 387, 628
+239 <-> 19
+240 <-> 818
+241 <-> 1027, 1524
+242 <-> 1085, 1971
+243 <-> 1942
+244 <-> 299, 390, 916
+245 <-> 906
+246 <-> 246, 534, 763, 1427
+247 <-> 531, 1675
+248 <-> 336, 1832
+249 <-> 1497
+250 <-> 1836
+251 <-> 1309
+252 <-> 581, 1104
+253 <-> 229, 877, 1743
+254 <-> 254, 621
+255 <-> 831, 866, 874
+256 <-> 1942
+257 <-> 906
+258 <-> 1224
+259 <-> 98, 316, 419, 718, 1519
+260 <-> 1223, 1516, 1547, 1845, 1944
+261 <-> 15, 278, 1607, 1808
+262 <-> 1112, 1172
+263 <-> 424
+264 <-> 680
+265 <-> 1968
+266 <-> 804, 1252
+267 <-> 1739
+268 <-> 538, 546
+269 <-> 1265
+270 <-> 270
+271 <-> 1150
+272 <-> 272
+273 <-> 1208, 1537
+274 <-> 1427
+275 <-> 1349, 1829
+276 <-> 62, 906
+277 <-> 461, 634, 1887
+278 <-> 261, 1224, 1904
+279 <-> 303, 537
+280 <-> 63, 280, 926, 931
+281 <-> 862, 1041, 1119, 1863
+282 <-> 214, 488, 644
+283 <-> 646, 1124
+284 <-> 860, 1759
+285 <-> 746
+286 <-> 198
+287 <-> 68, 1045
+288 <-> 332, 1133, 1277, 1628, 1744, 1770, 1934
+289 <-> 1578, 1766
+290 <-> 218, 439, 1661
+291 <-> 596, 1377, 1620
+292 <-> 700, 848, 1099
+293 <-> 293, 1592, 1938
+294 <-> 653, 1948
+295 <-> 1505, 1936
+296 <-> 625, 925
+297 <-> 1105, 1185
+298 <-> 298, 544, 1444
+299 <-> 244, 933, 1012
+300 <-> 300, 1461, 1883
+301 <-> 880, 1698
+302 <-> 1221
+303 <-> 279, 375
+304 <-> 11, 53, 967, 1362
+305 <-> 777
+306 <-> 344
+307 <-> 582, 770
+308 <-> 792, 1895
+309 <-> 539
+310 <-> 390, 1482
+311 <-> 441, 1294
+312 <-> 217, 743
+313 <-> 1522
+314 <-> 200, 502, 835, 1084, 1134
+315 <-> 1970
+316 <-> 259
+317 <-> 1302, 1437
+318 <-> 365
+319 <-> 128, 976
+320 <-> 1056, 1466, 1778
+321 <-> 202
+322 <-> 220, 1431
+323 <-> 838, 1465, 1895
+324 <-> 443
+325 <-> 1056
+326 <-> 463, 1741, 1761
+327 <-> 20, 128, 681, 1797
+328 <-> 328, 348
+329 <-> 378, 1738
+330 <-> 459
+331 <-> 204, 331
+332 <-> 126, 288
+333 <-> 70, 107, 1747
+334 <-> 517, 614
+335 <-> 1259
+336 <-> 248, 550, 1485
+337 <-> 337
+338 <-> 27, 1212, 1264
+339 <-> 430, 963
+340 <-> 769
+341 <-> 341
+342 <-> 593, 718, 895
+343 <-> 569
+344 <-> 306, 1440, 1650, 1742
+345 <-> 61, 1006, 1664
+346 <-> 448, 1928
+347 <-> 1022, 1052
+348 <-> 328, 1232
+349 <-> 1232
+350 <-> 1, 526, 1086, 1821
+351 <-> 584
+352 <-> 518, 686, 1324, 1437
+353 <-> 136, 936
+354 <-> 1470
+355 <-> 1173, 1814
+356 <-> 698
+357 <-> 93
+358 <-> 737, 986, 1169
+359 <-> 4
+360 <-> 363
+361 <-> 417, 841
+362 <-> 928
+363 <-> 360, 1751
+364 <-> 66, 364, 1596
+365 <-> 318, 1766
+366 <-> 366
+367 <-> 367
+368 <-> 1897
+369 <-> 25, 369, 1460
+370 <-> 370
+371 <-> 1568
+372 <-> 110, 582
+373 <-> 24, 178, 1924
+374 <-> 374
+375 <-> 303
+376 <-> 1331, 1990
+377 <-> 388, 601, 837
+378 <-> 329
+379 <-> 623
+380 <-> 671
+381 <-> 938
+382 <-> 39, 1458
+383 <-> 383, 1490, 1763, 1844
+384 <-> 832
+385 <-> 745, 1673
+386 <-> 218, 779
+387 <-> 238
+388 <-> 377, 1817
+389 <-> 231, 656, 1038, 1960
+390 <-> 96, 244, 310, 721, 1094, 1501
+391 <-> 438, 819, 1870
+392 <-> 697
+393 <-> 443, 1275, 1463
+394 <-> 480
+395 <-> 59, 190, 1117, 1997
+396 <-> 595
+397 <-> 208, 397, 1727
+398 <-> 1153
+399 <-> 84
+400 <-> 825, 1693
+401 <-> 812
+402 <-> 1191
+403 <-> 1446, 1820
+404 <-> 442, 871, 1637
+405 <-> 426, 1067
+406 <-> 460, 1290
+407 <-> 1951
+408 <-> 1335, 1391, 1897
+409 <-> 984, 1217
+410 <-> 8, 1607
+411 <-> 135, 411, 454, 1393
+412 <-> 120
+413 <-> 1208
+414 <-> 113
+415 <-> 415, 1803
+416 <-> 428
+417 <-> 361
+418 <-> 1129
+419 <-> 259
+420 <-> 628
+421 <-> 1485
+422 <-> 1110, 1785
+423 <-> 1418
+424 <-> 30, 263
+425 <-> 1497
+426 <-> 114, 405, 780
+427 <-> 427
+428 <-> 416, 782
+429 <-> 429
+430 <-> 339, 1513
+431 <-> 886, 1408
+432 <-> 586, 1725
+433 <-> 889, 1753, 1881
+434 <-> 1078, 1120
+435 <-> 660, 1194, 1662
+436 <-> 223, 1332
+437 <-> 1487
+438 <-> 391
+439 <-> 290
+440 <-> 1828
+441 <-> 191, 311, 1003, 1561, 1702
+442 <-> 164, 232, 404
+443 <-> 324, 393
+444 <-> 1215, 1251
+445 <-> 792
+446 <-> 1015, 1392
+447 <-> 777
+448 <-> 346, 1097
+449 <-> 1117
+450 <-> 1395
+451 <-> 1414, 1845
+452 <-> 138
+453 <-> 90, 453
+454 <-> 411
+455 <-> 1801
+456 <-> 456, 791, 902, 1111
+457 <-> 457, 1075, 1384
+458 <-> 770, 1600
+459 <-> 101, 201, 330, 1108
+460 <-> 406, 1529
+461 <-> 277, 839, 1552
+462 <-> 204
+463 <-> 326, 1899
+464 <-> 1098
+465 <-> 764, 1630, 1779
+466 <-> 627
+467 <-> 904
+468 <-> 108, 1849
+469 <-> 469, 603, 780
+470 <-> 88, 1276, 1533
+471 <-> 1492
+472 <-> 472, 1048, 1409, 1518, 1758
+473 <-> 233, 1413, 1826
+474 <-> 780
+475 <-> 1005, 1968
+476 <-> 809
+477 <-> 2
+478 <-> 753
+479 <-> 479, 1296, 1615
+480 <-> 394, 775, 1623
+481 <-> 774, 1604
+482 <-> 763
+483 <-> 522, 591, 1344
+484 <-> 894, 1219
+485 <-> 507, 1114, 1250, 1351
+486 <-> 1099, 1879
+487 <-> 487
+488 <-> 282, 1164, 1189
+489 <-> 900, 1889
+490 <-> 165, 918, 1007
+491 <-> 1800
+492 <-> 202
+493 <-> 615, 899, 1200, 1326
+494 <-> 139, 193
+495 <-> 704, 1988
+496 <-> 496
+497 <-> 1149, 1216
+498 <-> 69, 84, 153
+499 <-> 1125, 1149
+500 <-> 642
+501 <-> 524, 1176
+502 <-> 145, 314
+503 <-> 1330, 1626
+504 <-> 68, 699
+505 <-> 672
+506 <-> 1083
+507 <-> 485, 1743
+508 <-> 520, 1236, 1296
+509 <-> 1676
+510 <-> 875, 1066
+511 <-> 511
+512 <-> 512, 1240
+513 <-> 705, 812
+514 <-> 1758
+515 <-> 1165, 1168
+516 <-> 811
+517 <-> 334, 1132, 1339
+518 <-> 352, 1674
+519 <-> 824, 1396, 1659
+520 <-> 508
+521 <-> 52, 915
+522 <-> 83, 483, 1637
+523 <-> 1317
+524 <-> 501
+525 <-> 525
+526 <-> 350, 850, 930
+527 <-> 527, 1338, 1449
+528 <-> 156
+529 <-> 98
+530 <-> 691, 1175, 1505
+531 <-> 247, 785, 1389, 1623
+532 <-> 1159
+533 <-> 1152, 1297
+534 <-> 246
+535 <-> 1144, 1491, 1622, 1935
+536 <-> 708
+537 <-> 279, 1656
+538 <-> 268, 538, 1756
+539 <-> 309, 802
+540 <-> 1239
+541 <-> 119, 1679, 1741
+542 <-> 1204
+543 <-> 642, 1926
+544 <-> 298
+545 <-> 1971
+546 <-> 268
+547 <-> 1465, 1613, 1614
+548 <-> 160
+549 <-> 820
+550 <-> 336
+551 <-> 1733
+552 <-> 552, 1563
+553 <-> 1654
+554 <-> 554, 1641, 1665
+555 <-> 555
+556 <-> 15
+557 <-> 177, 1204
+558 <-> 207, 1004
+559 <-> 47, 1297
+560 <-> 1189, 1709
+561 <-> 1013, 1709
+562 <-> 762, 912
+563 <-> 563
+564 <-> 585
+565 <-> 1333, 1494
+566 <-> 566, 938
+567 <-> 894
+568 <-> 586, 1397
+569 <-> 343, 1572
+570 <-> 704, 1220, 1459
+571 <-> 1451
+572 <-> 651, 846, 909
+573 <-> 1881
+574 <-> 1866
+575 <-> 1379
+576 <-> 1060, 1210
+577 <-> 1837
+578 <-> 1346
+579 <-> 87
+580 <-> 1509
+581 <-> 252, 1548
+582 <-> 307, 372
+583 <-> 624, 1599, 1753, 1908
+584 <-> 351, 774
+585 <-> 564, 977
+586 <-> 432, 568, 773, 1789
+587 <-> 826
+588 <-> 1854
+589 <-> 719, 845, 1214
+590 <-> 158, 1259
+591 <-> 483
+592 <-> 743, 898
+593 <-> 172, 342, 852, 943, 1053
+594 <-> 594
+595 <-> 396, 928
+596 <-> 291, 596
+597 <-> 597
+598 <-> 1980
+599 <-> 202, 1764
+600 <-> 204
+601 <-> 54, 377, 1340
+602 <-> 1718, 1866
+603 <-> 469, 789
+604 <-> 1006, 1033, 1626
+605 <-> 1535
+606 <-> 176
+607 <-> 236, 911, 1218
+608 <-> 1193, 1825
+609 <-> 1657
+610 <-> 733, 841
+611 <-> 747, 1892
+612 <-> 1098, 1196, 1267
+613 <-> 5, 1372
+614 <-> 334, 1492
+615 <-> 493, 798
+616 <-> 1025, 1940
+617 <-> 6, 666, 1155
+618 <-> 762, 1621, 1895
+619 <-> 1187
+620 <-> 95, 1761
+621 <-> 254
+622 <-> 784, 1476
+623 <-> 227, 379, 1081
+624 <-> 583
+625 <-> 296, 1222, 1882
+626 <-> 905
+627 <-> 466, 1692
+628 <-> 238, 420, 1004, 1412
+629 <-> 1532
+630 <-> 630
+631 <-> 977, 1092, 1458, 1713
+632 <-> 777, 1049, 1404
+633 <-> 994
+634 <-> 277
+635 <-> 635
+636 <-> 703, 1756
+637 <-> 840, 1585
+638 <-> 76, 180, 1373
+639 <-> 218, 639, 1835
+640 <-> 1559
+641 <-> 1800
+642 <-> 500, 543
+643 <-> 1808
+644 <-> 282
+645 <-> 1253, 1475
+646 <-> 283, 646, 864
+647 <-> 93, 1508
+648 <-> 134, 956, 1762
+649 <-> 37, 82
+650 <-> 1480, 1916
+651 <-> 151, 572, 1357
+652 <-> 1261
+653 <-> 294, 653
+654 <-> 129, 1139, 1176
+655 <-> 1251, 1656
+656 <-> 389
+657 <-> 1604
+658 <-> 201, 1208
+659 <-> 23, 133, 1868
+660 <-> 435
+661 <-> 1634
+662 <-> 1667, 1701
+663 <-> 974
+664 <-> 664, 1167
+665 <-> 172, 1370
+666 <-> 617
+667 <-> 1824
+668 <-> 952, 1605
+669 <-> 1822
+670 <-> 44, 670
+671 <-> 380, 1145, 1693, 1906
+672 <-> 505, 693
+673 <-> 1610
+674 <-> 1249, 1302
+675 <-> 150, 777
+676 <-> 1675
+677 <-> 910, 1282
+678 <-> 99, 1004
+679 <-> 679
+680 <-> 264, 917, 1137, 1687
+681 <-> 140, 327, 746
+682 <-> 682
+683 <-> 794, 1315
+684 <-> 1000, 1342
+685 <-> 1111, 1348, 1523, 1932
+686 <-> 352
+687 <-> 979, 1667
+688 <-> 92, 177
+689 <-> 937, 1939
+690 <-> 35, 1608
+691 <-> 530, 691
+692 <-> 1871
+693 <-> 97, 672
+694 <-> 72, 694
+695 <-> 1076
+696 <-> 1954
+697 <-> 66, 392, 1892
+698 <-> 122, 356, 698
+699 <-> 504, 1470
+700 <-> 292, 1407
+701 <-> 1231, 1327
+702 <-> 32
+703 <-> 636, 1083, 1210
+704 <-> 495, 570
+705 <-> 174, 513, 1332
+706 <-> 69, 1088
+707 <-> 1036, 1867
+708 <-> 536, 805, 1958
+709 <-> 709
+710 <-> 915, 1578
+711 <-> 711, 1478
+712 <-> 813, 927
+713 <-> 70, 116, 1469, 1539
+714 <-> 41
+715 <-> 840, 1473, 1562, 1705
+716 <-> 716
+717 <-> 949, 1864
+718 <-> 259, 342, 1557, 1853
+719 <-> 589, 781, 802
+720 <-> 1125
+721 <-> 390, 878
+722 <-> 1026
+723 <-> 1039, 1467
+724 <-> 1535
+725 <-> 883
+726 <-> 1832, 1917
+727 <-> 1245
+728 <-> 1291
+729 <-> 1203
+730 <-> 824
+731 <-> 1984
+732 <-> 187, 1214
+733 <-> 610, 1079, 1198
+734 <-> 206, 872, 1479, 1855
+735 <-> 124, 1371
+736 <-> 113, 736
+737 <-> 358, 1426
+738 <-> 974, 1024, 1717, 1842
+739 <-> 1489
+740 <-> 1634
+741 <-> 873, 1695
+742 <-> 1700
+743 <-> 312, 592, 1493
+744 <-> 948, 1306, 1400
+745 <-> 385, 1029, 1315, 1474
+746 <-> 285, 681, 793
+747 <-> 169, 611, 814, 1548
+748 <-> 748
+749 <-> 1134, 1498
+750 <-> 146
+751 <-> 155, 783, 1856
+752 <-> 122, 1417
+753 <-> 478, 1505
+754 <-> 810, 1742, 1955
+755 <-> 1735, 1847
+756 <-> 978, 1095
+757 <-> 1153, 1730
+758 <-> 198, 1476
+759 <-> 759
+760 <-> 168
+761 <-> 1496
+762 <-> 562, 618
+763 <-> 246, 482, 1258
+764 <-> 465
+765 <-> 186
+766 <-> 1448
+767 <-> 893, 896, 1019
+768 <-> 1730
+769 <-> 340, 1043, 1065
+770 <-> 307, 458, 1453
+771 <-> 1168
+772 <-> 911
+773 <-> 586
+774 <-> 481, 584, 774, 1148
+775 <-> 480, 1485, 1894
+776 <-> 926
+777 <-> 305, 447, 632, 675
+778 <-> 1690
+779 <-> 386
+780 <-> 426, 469, 474
+781 <-> 719, 1543
+782 <-> 98, 428, 903
+783 <-> 751, 1558
+784 <-> 219, 622
+785 <-> 531
+786 <-> 197, 911, 1312
+787 <-> 120, 880
+788 <-> 1089, 1487
+789 <-> 603, 844, 1681, 1731
+790 <-> 790, 1126
+791 <-> 456, 1363
+792 <-> 308, 445
+793 <-> 746
+794 <-> 683, 951
+795 <-> 1732, 1986
+796 <-> 1210, 1878
+797 <-> 804
+798 <-> 615
+799 <-> 1651
+800 <-> 851, 860, 1907
+801 <-> 1110, 1537, 1773
+802 <-> 539, 719
+803 <-> 156, 1528
+804 <-> 266, 797, 1549
+805 <-> 89, 708, 962
+806 <-> 1429
+807 <-> 1800
+808 <-> 873, 1421
+809 <-> 476, 809
+810 <-> 754
+811 <-> 516, 965
+812 <-> 401, 513
+813 <-> 712, 1023
+814 <-> 747
+815 <-> 1145
+816 <-> 1413
+817 <-> 1235
+818 <-> 237, 240, 1506
+819 <-> 391, 857
+820 <-> 549, 1162
+821 <-> 1410, 1607
+822 <-> 30, 1485
+823 <-> 1445, 1454
+824 <-> 519, 730, 1824
+825 <-> 400, 1381, 1472
+826 <-> 587, 1040, 1198, 1618
+827 <-> 40
+828 <-> 1870
+829 <-> 149
+830 <-> 16
+831 <-> 255
+832 <-> 384, 1890, 1913
+833 <-> 1529
+834 <-> 834
+835 <-> 314
+836 <-> 216, 1166
+837 <-> 377, 988
+838 <-> 236, 323
+839 <-> 461, 1825
+840 <-> 211, 637, 715, 1710
+841 <-> 361, 610, 841, 1815
+842 <-> 1669
+843 <-> 874, 1468
+844 <-> 789
+845 <-> 143, 589, 1053
+846 <-> 572
+847 <-> 1285
+848 <-> 292
+849 <-> 849
+850 <-> 526
+851 <-> 800, 1368, 1497
+852 <-> 593, 1798
+853 <-> 1339, 1593, 1749
+854 <-> 1445, 1787
+855 <-> 1026, 1356
+856 <-> 132
+857 <-> 819
+858 <-> 1511
+859 <-> 1191
+860 <-> 284, 800, 1619
+861 <-> 111, 1266
+862 <-> 60, 281
+863 <-> 1605
+864 <-> 646
+865 <-> 873
+866 <-> 255, 924
+867 <-> 871, 1707
+868 <-> 12
+869 <-> 96, 1278
+870 <-> 1307
+871 <-> 404, 867, 1482
+872 <-> 734, 1200
+873 <-> 741, 808, 865, 873
+874 <-> 255, 843, 1201
+875 <-> 510, 1325, 1797
+876 <-> 1504, 1825
+877 <-> 253
+878 <-> 721
+879 <-> 948, 1291, 1847
+880 <-> 85, 184, 301, 787, 1503, 1617
+881 <-> 1688
+882 <-> 882
+883 <-> 725, 1582, 1874
+884 <-> 1352
+885 <-> 885, 1974
+886 <-> 431, 1650
+887 <-> 101
+888 <-> 102, 152
+889 <-> 433, 1016
+890 <-> 890
+891 <-> 12
+892 <-> 1402, 1923
+893 <-> 767
+894 <-> 484, 567
+895 <-> 342, 1123, 1158, 1648
+896 <-> 767
+897 <-> 80, 986, 1418
+898 <-> 205, 592, 1019
+899 <-> 493, 1053
+900 <-> 489
+901 <-> 901
+902 <-> 456
+903 <-> 782
+904 <-> 467, 904, 1924
+905 <-> 626, 1881
+906 <-> 245, 257, 276
+907 <-> 907, 1101, 1826
+908 <-> 908, 1230
+909 <-> 34, 572, 1186
+910 <-> 677, 961
+911 <-> 607, 772, 786, 1196, 1405
+912 <-> 562
+913 <-> 1636
+914 <-> 1892, 1963
+915 <-> 150, 521, 710
+916 <-> 244
+917 <-> 23, 680, 1336
+918 <-> 490, 1483
+919 <-> 96
+920 <-> 1880
+921 <-> 921
+922 <-> 975, 1255
+923 <-> 228, 1202, 1452
+924 <-> 866
+925 <-> 296, 1270
+926 <-> 280, 776, 1170, 1788, 1970
+927 <-> 712
+928 <-> 362, 595, 1103
+929 <-> 929
+930 <-> 65, 526, 1256, 1500, 1722
+931 <-> 183, 280, 1484
+932 <-> 1737
+933 <-> 299
+934 <-> 1387, 1851
+935 <-> 136, 935, 1537, 1775
+936 <-> 353
+937 <-> 689, 1347
+938 <-> 381, 566
+939 <-> 56, 1762
+940 <-> 1559, 1860
+941 <-> 1504, 1671, 1723, 1724
+942 <-> 1293
+943 <-> 21, 593
+944 <-> 1335
+945 <-> 1650
+946 <-> 1556
+947 <-> 26
+948 <-> 744, 879
+949 <-> 717, 1604
+950 <-> 1201, 1322
+951 <-> 794
+952 <-> 668, 1371
+953 <-> 1272
+954 <-> 954
+955 <-> 74
+956 <-> 648, 1870
+957 <-> 44, 1769
+958 <-> 13, 1388, 1660
+959 <-> 959
+960 <-> 153
+961 <-> 910
+962 <-> 17, 805
+963 <-> 339, 1783
+964 <-> 1100
+965 <-> 811, 1677
+966 <-> 966
+967 <-> 304, 1029, 1269, 1910
+968 <-> 81, 1091
+969 <-> 1379, 1693
+970 <-> 1289
+971 <-> 971
+972 <-> 70
+973 <-> 973
+974 <-> 663, 738, 1005
+975 <-> 922
+976 <-> 319
+977 <-> 585, 631
+978 <-> 756, 1628
+979 <-> 687, 979
+980 <-> 1151, 1317
+981 <-> 1199, 1902
+982 <-> 1223
+983 <-> 1931
+984 <-> 2, 409
+985 <-> 985
+986 <-> 358, 897, 1564
+987 <-> 987, 1644
+988 <-> 36, 837
+989 <-> 1275
+990 <-> 990, 1295
+991 <-> 207, 1415
+992 <-> 1242, 1397, 1467, 1579
+993 <-> 1042, 1767
+994 <-> 633, 1595, 1813
+995 <-> 194
+996 <-> 1096, 1369
+997 <-> 1231, 1973
+998 <-> 1367
+999 <-> 999
+1000 <-> 684, 1078
+1001 <-> 219
+1002 <-> 1442
+1003 <-> 441
+1004 <-> 558, 628, 678
+1005 <-> 475, 974
+1006 <-> 103, 345, 604
+1007 <-> 490, 1274
+1008 <-> 1708, 1819
+1009 <-> 1009, 1118
+1010 <-> 1223, 1803
+1011 <-> 1867
+1012 <-> 299, 1923
+1013 <-> 561, 1187, 1477, 1926
+1014 <-> 1861
+1015 <-> 446, 1015, 1858
+1016 <-> 889
+1017 <-> 1435
+1018 <-> 42, 98
+1019 <-> 767, 898, 1764
+1020 <-> 1020
+1021 <-> 1666
+1022 <-> 347, 1022, 1310
+1023 <-> 26, 813, 1109, 1538, 1988
+1024 <-> 195, 738
+1025 <-> 616
+1026 <-> 722, 855, 1337, 1415
+1027 <-> 241, 1309
+1028 <-> 1028
+1029 <-> 745, 967
+1030 <-> 1577, 1689
+1031 <-> 1031
+1032 <-> 125
+1033 <-> 604, 1127, 1194
+1034 <-> 192
+1035 <-> 1992
+1036 <-> 707, 1509
+1037 <-> 1347
+1038 <-> 389
+1039 <-> 723, 1535
+1040 <-> 826, 1245, 1918
+1041 <-> 281
+1042 <-> 993
+1043 <-> 67, 769, 1142
+1044 <-> 1690
+1045 <-> 287
+1046 <-> 1561
+1047 <-> 4
+1048 <-> 472, 1703
+1049 <-> 632, 1816
+1050 <-> 1157, 1899
+1051 <-> 1818
+1052 <-> 347, 1904
+1053 <-> 593, 845, 899
+1054 <-> 1983
+1055 <-> 1599
+1056 <-> 41, 320, 325, 1567
+1057 <-> 1372, 1569
+1058 <-> 185
+1059 <-> 1112, 1939
+1060 <-> 576, 1314, 1557, 1751, 1752
+1061 <-> 1285
+1062 <-> 1162, 1338, 1739
+1063 <-> 1291
+1064 <-> 132
+1065 <-> 769, 1317
+1066 <-> 510
+1067 <-> 405, 1452, 1953
+1068 <-> 1200
+1069 <-> 1069
+1070 <-> 19
+1071 <-> 1361, 1382
+1072 <-> 1307, 1534
+1073 <-> 1282
+1074 <-> 1323, 1653
+1075 <-> 457
+1076 <-> 695, 1703
+1077 <-> 1180
+1078 <-> 434, 1000
+1079 <-> 733
+1080 <-> 130, 1757
+1081 <-> 202, 623
+1082 <-> 1082
+1083 <-> 506, 703, 1279
+1084 <-> 314, 1812
+1085 <-> 242
+1086 <-> 350
+1087 <-> 1524
+1088 <-> 706, 1900
+1089 <-> 788
+1090 <-> 1260
+1091 <-> 968, 1522
+1092 <-> 173, 631, 1850
+1093 <-> 1093, 1390
+1094 <-> 182, 390
+1095 <-> 756
+1096 <-> 996
+1097 <-> 448
+1098 <-> 464, 612
+1099 <-> 292, 486
+1100 <-> 964, 1326
+1101 <-> 907, 1799
+1102 <-> 1927
+1103 <-> 928, 1103
+1104 <-> 252
+1105 <-> 166, 297
+1106 <-> 1106, 1896
+1107 <-> 1107
+1108 <-> 459
+1109 <-> 1023
+1110 <-> 422, 801
+1111 <-> 456, 685
+1112 <-> 262, 1059
+1113 <-> 1267
+1114 <-> 485
+1115 <-> 1115, 1827
+1116 <-> 1596
+1117 <-> 395, 449, 1382
+1118 <-> 1009
+1119 <-> 281, 1670
+1120 <-> 434, 1165
+1121 <-> 167, 1121
+1122 <-> 1809
+1123 <-> 895
+1124 <-> 283
+1125 <-> 499, 720, 1308
+1126 <-> 790, 1526
+1127 <-> 1033
+1128 <-> 1500
+1129 <-> 168, 418, 1642, 1947
+1130 <-> 1454
+1131 <-> 1683
+1132 <-> 517, 1784
+1133 <-> 288
+1134 <-> 314, 749, 1586
+1135 <-> 102
+1136 <-> 1136
+1137 <-> 680
+1138 <-> 1755
+1139 <-> 654
+1140 <-> 1140
+1141 <-> 1141
+1142 <-> 1043, 1862
+1143 <-> 1550
+1144 <-> 535, 1144, 1849
+1145 <-> 209, 671, 815, 1268
+1146 <-> 145
+1147 <-> 134
+1148 <-> 774
+1149 <-> 36, 497, 499, 1652
+1150 <-> 271, 1150
+1151 <-> 51, 980, 1651
+1152 <-> 533
+1153 <-> 398, 757
+1154 <-> 1313
+1155 <-> 145, 617, 1336, 1721
+1156 <-> 1838
+1157 <-> 10, 1050
+1158 <-> 895
+1159 <-> 532, 1708
+1160 <-> 1357
+1161 <-> 1200, 1999
+1162 <-> 820, 1062
+1163 <-> 1821
+1164 <-> 488, 1572
+1165 <-> 515, 1120
+1166 <-> 36, 836
+1167 <-> 664
+1168 <-> 11, 515, 771, 1967
+1169 <-> 358
+1170 <-> 926
+1171 <-> 1666, 1827
+1172 <-> 262, 1439
+1173 <-> 123, 355, 1341
+1174 <-> 1204, 1525
+1175 <-> 530
+1176 <-> 501, 654
+1177 <-> 1311, 1796
+1178 <-> 186, 1536, 1551, 1853
+1179 <-> 1822, 1947
+1180 <-> 1077, 1264
+1181 <-> 163, 1181
+1182 <-> 225
+1183 <-> 1237, 1715, 1798
+1184 <-> 41
+1185 <-> 297, 1185
+1186 <-> 909
+1187 <-> 619, 1013
+1188 <-> 1698
+1189 <-> 488, 560
+1190 <-> 1834, 1933
+1191 <-> 402, 859, 1191
+1192 <-> 1839
+1193 <-> 608, 1438
+1194 <-> 435, 1033, 1754
+1195 <-> 46, 1828
+1196 <-> 612, 911, 1975
+1197 <-> 1503, 1854
+1198 <-> 733, 826
+1199 <-> 981
+1200 <-> 493, 872, 1068, 1161
+1201 <-> 874, 950
+1202 <-> 923
+1203 <-> 40, 729, 1719
+1204 <-> 542, 557, 1174
+1205 <-> 1332
+1206 <-> 148, 182
+1207 <-> 1207
+1208 <-> 91, 273, 413, 658, 1234
+1209 <-> 1995
+1210 <-> 576, 703, 796
+1211 <-> 1227, 1891
+1212 <-> 338, 1362
+1213 <-> 6
+1214 <-> 589, 732
+1215 <-> 4, 100, 444, 1842
+1216 <-> 497, 1745
+1217 <-> 409, 1354
+1218 <-> 607
+1219 <-> 29, 484, 1712
+1220 <-> 570
+1221 <-> 302, 1429
+1222 <-> 625, 1412
+1223 <-> 260, 982, 1010, 1591
+1224 <-> 9, 258, 278, 1506, 1893
+1225 <-> 1906
+1226 <-> 1226
+1227 <-> 1211
+1228 <-> 1773
+1229 <-> 18
+1230 <-> 908
+1231 <-> 701, 997
+1232 <-> 348, 349
+1233 <-> 59
+1234 <-> 1208
+1235 <-> 817, 1994
+1236 <-> 508
+1237 <-> 1183
+1238 <-> 1529
+1239 <-> 540, 1524, 1552
+1240 <-> 512
+1241 <-> 1241
+1242 <-> 992, 1685
+1243 <-> 1934
+1244 <-> 1574, 1839
+1245 <-> 727, 1040
+1246 <-> 1380
+1247 <-> 1506, 1923
+1248 <-> 50, 1610
+1249 <-> 674
+1250 <-> 485
+1251 <-> 444, 655, 1718
+1252 <-> 266, 1862
+1253 <-> 645, 1709
+1254 <-> 1254
+1255 <-> 922, 1255, 1341
+1256 <-> 930, 1346
+1257 <-> 1465, 1844
+1258 <-> 763
+1259 <-> 335, 590, 1259
+1260 <-> 129, 1090
+1261 <-> 652, 1261, 1838
+1262 <-> 1262, 1912
+1263 <-> 7, 1438, 1554
+1264 <-> 338, 1180
+1265 <-> 269, 1265
+1266 <-> 861, 1281, 1423
+1267 <-> 612, 1113, 1289
+1268 <-> 1145
+1269 <-> 967
+1270 <-> 94, 215, 925, 1860
+1271 <-> 1376
+1272 <-> 223, 953
+1273 <-> 1301
+1274 <-> 1007, 1860
+1275 <-> 216, 393, 989, 1275
+1276 <-> 470
+1277 <-> 288
+1278 <-> 869
+1279 <-> 1083, 1755
+1280 <-> 1588
+1281 <-> 1266
+1282 <-> 677, 1073, 1575, 1625
+1283 <-> 1571
+1284 <-> 1828
+1285 <-> 847, 1061, 1641
+1286 <-> 1494, 1649, 1889
+1287 <-> 159
+1288 <-> 142, 1288
+1289 <-> 970, 1267, 1668
+1290 <-> 406
+1291 <-> 728, 879, 1063, 1885
+1292 <-> 1407
+1293 <-> 942, 1318, 1459
+1294 <-> 311, 1754
+1295 <-> 990, 1512
+1296 <-> 130, 479, 508
+1297 <-> 533, 559
+1298 <-> 1839
+1299 <-> 70
+1300 <-> 37, 1886, 1998
+1301 <-> 1273, 1340
+1302 <-> 317, 674, 1485
+1303 <-> 161, 1624
+1304 <-> 1304
+1305 <-> 1410
+1306 <-> 744
+1307 <-> 20, 870, 1072
+1308 <-> 194, 212, 1125
+1309 <-> 251, 1027
+1310 <-> 22, 1022, 1777
+1311 <-> 1177
+1312 <-> 786
+1313 <-> 1154, 1706
+1314 <-> 1060
+1315 <-> 683, 745
+1316 <-> 1793, 1898
+1317 <-> 523, 980, 1065, 1787
+1318 <-> 1293
+1319 <-> 1319
+1320 <-> 1320
+1321 <-> 206
+1322 <-> 950, 1957
+1323 <-> 1074, 1823
+1324 <-> 352
+1325 <-> 875, 1740
+1326 <-> 493, 1100
+1327 <-> 701, 1633
+1328 <-> 1, 55
+1329 <-> 1633
+1330 <-> 503, 1687, 1782
+1331 <-> 376, 1531, 1766
+1332 <-> 436, 705, 1205
+1333 <-> 565
+1334 <-> 1805
+1335 <-> 408, 944
+1336 <-> 917, 1155
+1337 <-> 1026
+1338 <-> 527, 1062
+1339 <-> 517, 853
+1340 <-> 601, 1301, 1708
+1341 <-> 1173, 1255
+1342 <-> 684
+1343 <-> 210
+1344 <-> 121, 483
+1345 <-> 175
+1346 <-> 578, 1256
+1347 <-> 937, 1037, 1735
+1348 <-> 685
+1349 <-> 275, 1594
+1350 <-> 127, 130
+1351 <-> 485
+1352 <-> 884, 1352
+1353 <-> 1604, 1800
+1354 <-> 1217
+1355 <-> 1355, 1985
+1356 <-> 855, 1840
+1357 <-> 651, 1160, 1388
+1358 <-> 92
+1359 <-> 112
+1360 <-> 1455
+1361 <-> 1071, 1909
+1362 <-> 304, 1212
+1363 <-> 791
+1364 <-> 161, 1426
+1365 <-> 1365
+1366 <-> 1366, 1433
+1367 <-> 133, 998
+1368 <-> 851
+1369 <-> 12, 996, 1425
+1370 <-> 665
+1371 <-> 13, 735, 952, 1371, 1857
+1372 <-> 613, 1057
+1373 <-> 638, 1511
+1374 <-> 230, 1593
+1375 <-> 104
+1376 <-> 179, 1271, 1639
+1377 <-> 291
+1378 <-> 1919
+1379 <-> 575, 969
+1380 <-> 1246, 1501, 1903
+1381 <-> 73, 825, 1922
+1382 <-> 1071, 1117, 1541, 1810
+1383 <-> 111
+1384 <-> 457
+1385 <-> 1878, 1966
+1386 <-> 1396
+1387 <-> 229, 934, 1853
+1388 <-> 958, 1357, 1424
+1389 <-> 531
+1390 <-> 1093, 1603
+1391 <-> 408
+1392 <-> 446
+1393 <-> 411
+1394 <-> 1866
+1395 <-> 450, 1851
+1396 <-> 519, 1386
+1397 <-> 79, 568, 992
+1398 <-> 224
+1399 <-> 1443, 1799, 1915
+1400 <-> 744
+1401 <-> 1685
+1402 <-> 892
+1403 <-> 1714
+1404 <-> 632
+1405 <-> 911, 1532
+1406 <-> 233, 1606
+1407 <-> 700, 1292
+1408 <-> 431, 1408, 1416
+1409 <-> 211, 472
+1410 <-> 821, 1305
+1411 <-> 1653, 1993
+1412 <-> 628, 1222
+1413 <-> 473, 816
+1414 <-> 451
+1415 <-> 991, 1026
+1416 <-> 1408
+1417 <-> 752
+1418 <-> 423, 897
+1419 <-> 2, 30
+1420 <-> 1420
+1421 <-> 808
+1422 <-> 58, 104
+1423 <-> 1266
+1424 <-> 1388
+1425 <-> 1369
+1426 <-> 737, 1364, 1847, 1913
+1427 <-> 246, 274
+1428 <-> 1964
+1429 <-> 76, 806, 1221
+1430 <-> 1430
+1431 <-> 322
+1432 <-> 1719
+1433 <-> 1366, 1988
+1434 <-> 89, 106
+1435 <-> 1017, 1730
+1436 <-> 1997
+1437 <-> 317, 352
+1438 <-> 1193, 1263
+1439 <-> 1172
+1440 <-> 344
+1441 <-> 37
+1442 <-> 1002, 1860
+1443 <-> 1399
+1444 <-> 31, 298
+1445 <-> 823, 854
+1446 <-> 113, 403
+1447 <-> 1508, 1720
+1448 <-> 766, 1791
+1449 <-> 527
+1450 <-> 134
+1451 <-> 88, 571
+1452 <-> 923, 1067
+1453 <-> 770
+1454 <-> 95, 823, 1130, 1454
+1455 <-> 1360, 1533
+1456 <-> 1456, 1489, 1529
+1457 <-> 114, 149, 1956
+1458 <-> 382, 631, 1458
+1459 <-> 570, 1293
+1460 <-> 202, 369
+1461 <-> 300
+1462 <-> 1636
+1463 <-> 393, 1659, 1939
+1464 <-> 31
+1465 <-> 3, 323, 547, 1257, 1732
+1466 <-> 320
+1467 <-> 723, 992, 1706
+1468 <-> 154, 843
+1469 <-> 713
+1470 <-> 354, 699
+1471 <-> 1471
+1472 <-> 825
+1473 <-> 715
+1474 <-> 745
+1475 <-> 645
+1476 <-> 622, 758
+1477 <-> 1013, 1645, 1669
+1478 <-> 711
+1479 <-> 734
+1480 <-> 650
+1481 <-> 1481
+1482 <-> 310, 871
+1483 <-> 918, 1504
+1484 <-> 931
+1485 <-> 336, 421, 775, 822, 1302
+1486 <-> 157, 1631
+1487 <-> 236, 437, 788, 1980
+1488 <-> 1560
+1489 <-> 739, 1456
+1490 <-> 383
+1491 <-> 535
+1492 <-> 471, 614
+1493 <-> 743
+1494 <-> 565, 1286
+1495 <-> 1627
+1496 <-> 761, 1496
+1497 <-> 249, 425, 851
+1498 <-> 749
+1499 <-> 231
+1500 <-> 930, 1128
+1501 <-> 390, 1380
+1502 <-> 1713
+1503 <-> 152, 880, 1197
+1504 <-> 47, 876, 941, 1483, 1945
+1505 <-> 295, 530, 753
+1506 <-> 818, 1224, 1247
+1507 <-> 141, 216, 1565, 1726
+1508 <-> 647, 1447, 1521, 1590
+1509 <-> 580, 1036, 1605, 1609
+1510 <-> 40, 1885
+1511 <-> 858, 1373
+1512 <-> 1295
+1513 <-> 78, 430
+1514 <-> 1772
+1515 <-> 153
+1516 <-> 144, 260, 1818
+1517 <-> 32, 1616, 1806
+1518 <-> 472
+1519 <-> 259
+1520 <-> 94, 1542
+1521 <-> 1508
+1522 <-> 313, 1091, 1631
+1523 <-> 685
+1524 <-> 241, 1087, 1239
+1525 <-> 1174
+1526 <-> 1126
+1527 <-> 1835
+1528 <-> 803
+1529 <-> 460, 833, 1238, 1456
+1530 <-> 1784
+1531 <-> 1331
+1532 <-> 629, 1405
+1533 <-> 470, 1455, 1533, 1796
+1534 <-> 1072
+1535 <-> 605, 724, 1039
+1536 <-> 1178
+1537 <-> 273, 801, 935
+1538 <-> 1023, 1734
+1539 <-> 713
+1540 <-> 1748
+1541 <-> 1382, 1683
+1542 <-> 1520
+1543 <-> 781
+1544 <-> 1631
+1545 <-> 1910
+1546 <-> 1942
+1547 <-> 260
+1548 <-> 581, 747
+1549 <-> 804
+1550 <-> 159, 1143
+1551 <-> 1178
+1552 <-> 461, 1239, 1846
+1553 <-> 1553, 1982
+1554 <-> 68, 85, 1263, 1597
+1555 <-> 1713, 1931
+1556 <-> 946, 1556
+1557 <-> 718, 1060
+1558 <-> 783
+1559 <-> 640, 940
+1560 <-> 1488, 1806, 1898, 1949
+1561 <-> 441, 1046
+1562 <-> 715, 1889
+1563 <-> 552
+1564 <-> 986
+1565 <-> 1507, 1689
+1566 <-> 1570
+1567 <-> 1056
+1568 <-> 3, 371
+1569 <-> 119, 1057, 1852
+1570 <-> 1566, 1570
+1571 <-> 1283, 1736
+1572 <-> 569, 1164, 1995
+1573 <-> 1573, 1784, 1987
+1574 <-> 1244, 1574
+1575 <-> 1282, 1575, 1866
+1576 <-> 123
+1577 <-> 1030
+1578 <-> 289, 710
+1579 <-> 992, 1684
+1580 <-> 4
+1581 <-> 1581
+1582 <-> 128, 883
+1583 <-> 57
+1584 <-> 116
+1585 <-> 637
+1586 <-> 1134
+1587 <-> 1587
+1588 <-> 159, 1280
+1589 <-> 1915
+1590 <-> 136, 1508
+1591 <-> 1223
+1592 <-> 293, 1891
+1593 <-> 853, 1374
+1594 <-> 1349, 1886
+1595 <-> 994, 1595
+1596 <-> 364, 1116
+1597 <-> 1554
+1598 <-> 1729
+1599 <-> 583, 1055
+1600 <-> 147, 458, 1600
+1601 <-> 1894
+1602 <-> 116
+1603 <-> 1390
+1604 <-> 481, 657, 949, 1353, 1983
+1605 <-> 115, 668, 863, 1509
+1606 <-> 1406
+1607 <-> 261, 410, 821
+1608 <-> 690
+1609 <-> 1509
+1610 <-> 673, 1248
+1611 <-> 118, 1788
+1612 <-> 1854
+1613 <-> 547
+1614 <-> 547, 1807
+1615 <-> 479
+1616 <-> 222, 1517
+1617 <-> 880, 1989
+1618 <-> 826
+1619 <-> 860, 1807
+1620 <-> 291
+1621 <-> 618, 1957
+1622 <-> 535
+1623 <-> 480, 531
+1624 <-> 1303
+1625 <-> 223, 1282
+1626 <-> 503, 604
+1627 <-> 1495, 1933
+1628 <-> 288, 978
+1629 <-> 1629
+1630 <-> 465, 1872
+1631 <-> 1486, 1522, 1544
+1632 <-> 196
+1633 <-> 1327, 1329
+1634 <-> 123, 661, 740
+1635 <-> 139
+1636 <-> 913, 1462, 1752
+1637 <-> 404, 522
+1638 <-> 1779, 1813
+1639 <-> 33, 190, 1376, 1639
+1640 <-> 1816
+1641 <-> 554, 1285
+1642 <-> 1129
+1643 <-> 71, 1844
+1644 <-> 171, 987
+1645 <-> 1477
+1646 <-> 16, 199
+1647 <-> 1702
+1648 <-> 895
+1649 <-> 1286
+1650 <-> 344, 886, 945
+1651 <-> 799, 1151
+1652 <-> 1149, 1961, 1984
+1653 <-> 222, 1074, 1411
+1654 <-> 108, 553
+1655 <-> 35, 156, 226, 1992
+1656 <-> 537, 655
+1657 <-> 105, 609
+1658 <-> 1658
+1659 <-> 519, 1463
+1660 <-> 958
+1661 <-> 290, 1929
+1662 <-> 435
+1663 <-> 1855
+1664 <-> 345
+1665 <-> 554
+1666 <-> 1021, 1171
+1667 <-> 662, 687
+1668 <-> 1289
+1669 <-> 842, 1477, 1795, 1975
+1670 <-> 1119, 1921
+1671 <-> 941
+1672 <-> 115
+1673 <-> 385
+1674 <-> 518
+1675 <-> 247, 676
+1676 <-> 509, 1987
+1677 <-> 965, 1677
+1678 <-> 151, 1692
+1679 <-> 541
+1680 <-> 1680
+1681 <-> 221, 789
+1682 <-> 1736, 1767, 1947
+1683 <-> 1131, 1541
+1684 <-> 1579
+1685 <-> 1242, 1401
+1686 <-> 1736
+1687 <-> 680, 1330
+1688 <-> 881, 1829
+1689 <-> 1030, 1565
+1690 <-> 778, 1044, 1900
+1691 <-> 28, 75
+1692 <-> 627, 1678
+1693 <-> 122, 400, 671, 969
+1694 <-> 58, 61
+1695 <-> 741
+1696 <-> 224, 1958
+1697 <-> 1935
+1698 <-> 301, 1188
+1699 <-> 29, 37
+1700 <-> 742, 1883
+1701 <-> 662
+1702 <-> 441, 1647
+1703 <-> 1048, 1076
+1704 <-> 185
+1705 <-> 715
+1706 <-> 1313, 1467
+1707 <-> 867
+1708 <-> 1008, 1159, 1340
+1709 <-> 560, 561, 1253, 1976
+1710 <-> 840
+1711 <-> 1711
+1712 <-> 12, 1219
+1713 <-> 631, 1502, 1555
+1714 <-> 1403, 1714, 1902
+1715 <-> 1183
+1716 <-> 79
+1717 <-> 738
+1718 <-> 602, 1251
+1719 <-> 1203, 1432
+1720 <-> 1447
+1721 <-> 1155
+1722 <-> 930
+1723 <-> 941
+1724 <-> 941
+1725 <-> 432
+1726 <-> 1507
+1727 <-> 397
+1728 <-> 1728, 1937
+1729 <-> 1598, 1913
+1730 <-> 105, 757, 768, 1435, 1730
+1731 <-> 789
+1732 <-> 795, 1465
+1733 <-> 551, 1765, 1835
+1734 <-> 1538
+1735 <-> 755, 1347
+1736 <-> 1571, 1682, 1686
+1737 <-> 932, 1795
+1738 <-> 329, 1738
+1739 <-> 267, 1062, 1848
+1740 <-> 1325
+1741 <-> 326, 541, 1952
+1742 <-> 344, 754
+1743 <-> 75, 253, 507
+1744 <-> 288
+1745 <-> 1216
+1746 <-> 92, 138
+1747 <-> 333
+1748 <-> 182, 1540
+1749 <-> 853
+1750 <-> 88
+1751 <-> 363, 1060
+1752 <-> 1060, 1636
+1753 <-> 433, 583, 1873
+1754 <-> 1194, 1294
+1755 <-> 1138, 1279
+1756 <-> 538, 636
+1757 <-> 1080
+1758 <-> 472, 514
+1759 <-> 284
+1760 <-> 1760
+1761 <-> 326, 620
+1762 <-> 648, 939, 1989
+1763 <-> 383
+1764 <-> 599, 1019, 1941
+1765 <-> 1733
+1766 <-> 289, 365, 1331
+1767 <-> 993, 1682, 1767
+1768 <-> 1768, 1859
+1769 <-> 957
+1770 <-> 288
+1771 <-> 1875
+1772 <-> 1514, 1772
+1773 <-> 801, 1228
+1774 <-> 0
+1775 <-> 935
+1776 <-> 133
+1777 <-> 1310
+1778 <-> 17, 320
+1779 <-> 465, 1638
+1780 <-> 1906
+1781 <-> 1969
+1782 <-> 1330
+1783 <-> 97, 963, 1960, 1983
+1784 <-> 1132, 1530, 1573
+1785 <-> 422
+1786 <-> 1786
+1787 <-> 854, 1317
+1788 <-> 926, 1611
+1789 <-> 586, 1829
+1790 <-> 74, 1790
+1791 <-> 52, 109, 1448
+1792 <-> 1860
+1793 <-> 1316, 1981
+1794 <-> 138
+1795 <-> 1669, 1737, 1861
+1796 <-> 1177, 1533
+1797 <-> 327, 875
+1798 <-> 852, 1183
+1799 <-> 1101, 1399, 1964
+1800 <-> 491, 641, 807, 1353
+1801 <-> 20, 455
+1802 <-> 123
+1803 <-> 415, 1010
+1804 <-> 1804
+1805 <-> 1334, 1926
+1806 <-> 1517, 1560
+1807 <-> 1614, 1619
+1808 <-> 261, 643
+1809 <-> 145, 1122
+1810 <-> 1382
+1811 <-> 60
+1812 <-> 1084
+1813 <-> 213, 994, 1638
+1814 <-> 14, 355
+1815 <-> 841, 1996
+1816 <-> 1049, 1640
+1817 <-> 388
+1818 <-> 1051, 1516
+1819 <-> 1008
+1820 <-> 403
+1821 <-> 350, 1163
+1822 <-> 669, 1179, 1927
+1823 <-> 1323
+1824 <-> 667, 824, 1879
+1825 <-> 608, 839, 876, 1965
+1826 <-> 473, 907
+1827 <-> 1115, 1171
+1828 <-> 440, 1195, 1284, 1913
+1829 <-> 275, 1688, 1789
+1830 <-> 1830
+1831 <-> 1831
+1832 <-> 248, 726
+1833 <-> 1833
+1834 <-> 1190
+1835 <-> 639, 1527, 1733
+1836 <-> 250, 1836
+1837 <-> 577, 1970
+1838 <-> 1156, 1261
+1839 <-> 1192, 1244, 1298
+1840 <-> 1356
+1841 <-> 81
+1842 <-> 738, 1215
+1843 <-> 1843
+1844 <-> 383, 1257, 1643
+1845 <-> 260, 451
+1846 <-> 1552
+1847 <-> 755, 879, 1426
+1848 <-> 38, 1739
+1849 <-> 468, 1144
+1850 <-> 1092
+1851 <-> 934, 1395
+1852 <-> 198, 1569
+1853 <-> 718, 1178, 1387
+1854 <-> 588, 1197, 1612
+1855 <-> 162, 734, 1663
+1856 <-> 236, 751
+1857 <-> 1371
+1858 <-> 1015
+1859 <-> 1768
+1860 <-> 940, 1270, 1274, 1442, 1792
+1861 <-> 1014, 1795
+1862 <-> 1142, 1252
+1863 <-> 281
+1864 <-> 717
+1865 <-> 1865
+1866 <-> 574, 602, 1394, 1575
+1867 <-> 707, 1011
+1868 <-> 659, 1868
+1869 <-> 173, 1991
+1870 <-> 391, 828, 956, 1880
+1871 <-> 189, 692
+1872 <-> 1630
+1873 <-> 42, 1753
+1874 <-> 883
+1875 <-> 11, 1771
+1876 <-> 158
+1877 <-> 186
+1878 <-> 796, 1385
+1879 <-> 486, 1824
+1880 <-> 920, 1870
+1881 <-> 433, 573, 905
+1882 <-> 625, 1954
+1883 <-> 300, 1700
+1884 <-> 1884
+1885 <-> 1291, 1510
+1886 <-> 19, 209, 1300, 1594
+1887 <-> 277
+1888 <-> 85
+1889 <-> 489, 1286, 1562
+1890 <-> 170, 832
+1891 <-> 1211, 1592, 1973
+1892 <-> 611, 697, 914
+1893 <-> 1224
+1894 <-> 775, 1601
+1895 <-> 308, 323, 618
+1896 <-> 1106
+1897 <-> 118, 368, 408
+1898 <-> 1316, 1560, 1944
+1899 <-> 463, 1050
+1900 <-> 1088, 1690, 1951
+1901 <-> 16, 27
+1902 <-> 981, 1714
+1903 <-> 1380
+1904 <-> 278, 1052
+1905 <-> 20
+1906 <-> 671, 1225, 1780
+1907 <-> 800
+1908 <-> 583
+1909 <-> 1361, 1940
+1910 <-> 134, 967, 1545
+1911 <-> 1973
+1912 <-> 1262
+1913 <-> 832, 1426, 1729, 1828
+1914 <-> 1914
+1915 <-> 1399, 1589
+1916 <-> 650, 1916
+1917 <-> 726, 1917
+1918 <-> 1040
+1919 <-> 196, 1378, 1919
+1920 <-> 1, 218
+1921 <-> 1670, 1952
+1922 <-> 1381
+1923 <-> 892, 1012, 1247
+1924 <-> 373, 904
+1925 <-> 210, 1935
+1926 <-> 543, 1013, 1805
+1927 <-> 1102, 1822
+1928 <-> 346, 1928
+1929 <-> 1661
+1930 <-> 19
+1931 <-> 983, 1555
+1932 <-> 685
+1933 <-> 16, 1190, 1627, 1933
+1934 <-> 288, 1243
+1935 <-> 535, 1697, 1925
+1936 <-> 295
+1937 <-> 112, 157, 1728
+1938 <-> 293
+1939 <-> 689, 1059, 1463
+1940 <-> 616, 1909
+1941 <-> 1764
+1942 <-> 243, 256, 1546
+1943 <-> 1950
+1944 <-> 260, 1898
+1945 <-> 1504
+1946 <-> 1946
+1947 <-> 87, 1129, 1179, 1682
+1948 <-> 294
+1949 <-> 1560
+1950 <-> 21, 1943
+1951 <-> 407, 1900
+1952 <-> 1741, 1921
+1953 <-> 1067
+1954 <-> 696, 1882
+1955 <-> 754
+1956 <-> 1457
+1957 <-> 1322, 1621
+1958 <-> 48, 708, 1696
+1959 <-> 1959
+1960 <-> 389, 1783
+1961 <-> 1652
+1962 <-> 29
+1963 <-> 914
+1964 <-> 1428, 1799
+1965 <-> 1825
+1966 <-> 1385
+1967 <-> 1168
+1968 <-> 265, 475
+1969 <-> 4, 1781
+1970 <-> 315, 926, 1837
+1971 <-> 242, 545, 1971
+1972 <-> 1972
+1973 <-> 997, 1891, 1911
+1974 <-> 885
+1975 <-> 1196, 1669
+1976 <-> 1709
+1977 <-> 1977
+1978 <-> 1978
+1979 <-> 1979
+1980 <-> 598, 1487
+1981 <-> 1793
+1982 <-> 1553
+1983 <-> 1054, 1604, 1783
+1984 <-> 731, 1652
+1985 <-> 1355
+1986 <-> 795
+1987 <-> 1573, 1676
+1988 <-> 495, 1023, 1433
+1989 <-> 1617, 1762
+1990 <-> 376
+1991 <-> 1869
+1992 <-> 1035, 1655
+1993 <-> 1411
+1994 <-> 1235, 1994
+1995 <-> 57, 1209, 1572
+1996 <-> 181, 1815
+1997 <-> 395, 1436
+1998 <-> 1300
+1999 <-> 175, 1161
diff --git a/2017/inputs/day_13.txt b/2017/inputs/day_13.txt
new file mode 100644
index 0000000..87bfdb7
--- /dev/null
+++ b/2017/inputs/day_13.txt
@@ -0,0 +1,43 @@
+0: 3
+1: 2
+2: 4
+4: 4
+6: 5
+8: 6
+10: 6
+12: 6
+14: 6
+16: 8
+18: 8
+20: 8
+22: 8
+24: 10
+26: 8
+28: 8
+30: 12
+32: 14
+34: 12
+36: 10
+38: 12
+40: 12
+42: 9
+44: 12
+46: 12
+48: 12
+50: 12
+52: 14
+54: 14
+56: 14
+58: 12
+60: 14
+62: 14
+64: 12
+66: 14
+70: 14
+72: 14
+74: 14
+76: 14
+80: 18
+88: 20
+90: 14
+98: 17
diff --git a/2017/inputs/day_13_example.txt b/2017/inputs/day_13_example.txt
new file mode 100644
index 0000000..0de4bec
--- /dev/null
+++ b/2017/inputs/day_13_example.txt
@@ -0,0 +1,5 @@
+0: 3
+1: 2
+4: 4
+6: 4
+
diff --git a/2017/inputs/day_14.txt b/2017/inputs/day_14.txt
new file mode 100644
index 0000000..1155654
--- /dev/null
+++ b/2017/inputs/day_14.txt
@@ -0,0 +1,2 @@
+uugsqrei
+
diff --git a/2017/inputs/day_14_example.txt b/2017/inputs/day_14_example.txt
new file mode 100644
index 0000000..e0ffae2
--- /dev/null
+++ b/2017/inputs/day_14_example.txt
@@ -0,0 +1 @@
+flqrgnkx
diff --git a/2017/inputs/day_15.txt b/2017/inputs/day_15.txt
new file mode 100644
index 0000000..ffb6d14
--- /dev/null
+++ b/2017/inputs/day_15.txt
@@ -0,0 +1,2 @@
+Generator A starts with 591
+Generator B starts with 393
diff --git a/2017/inputs/day_16.txt b/2017/inputs/day_16.txt
new file mode 100644
index 0000000..8e74751
--- /dev/null
+++ b/2017/inputs/day_16.txt
@@ -0,0 +1 @@
+x3/4,pm/e,x15/7,pp/l,x5/8,s15,x2/6,s9,x0/4,s7,x8/12,pc/b,x2/14,pe/d,x10/11,pg/o,x9/14,ph/n,x15/8,s13,pe/i,x3/7,s2,pd/b,x4/15,s11,x0/14,s10,x7/3,s8,x2/1,pj/i,s8,x10/14,s5,x4/1,pa/h,s11,x12/6,s1,x1/14,s11,x5/12,s4,pn/b,x7/9,pj/l,x1/8,pd/e,s6,pp/g,x10/2,pi/o,x15/5,pp/l,x6/13,s3,x5/12,pk/f,x1/8,s4,x11/10,s10,x4/15,pe/n,x1/5,s14,x7/2,pc/i,x4/10,pj/p,x6/15,s12,x5/0,pa/n,x8/12,s14,x3/5,pb/d,x4/12,s3,x9/6,pg/h,x3/1,s5,x4/10,pm/f,x12/2,s11,x15/13,pa/g,x0/2,s13,pj/i,s13,x6/10,pn/a,x2/1,pm/f,x10/12,s4,pi/c,x14/13,s4,x15/0,s7,x14/8,s5,x5/2,pe/d,x3/9,s14,x7/0,s10,x6/14,s8,x3/15,pn/j,x2/1,pf/a,x13/10,pe/m,x8/0,s2,x4/7,pc/l,s4,x2/0,s4,x3/4,s12,x11/2,s3,x5/8,s2,x4/6,pn/f,x15/5,s15,x4/12,s11,x1/13,pm/b,s13,pj/h,s15,x9/3,pd/l,x14/15,po/i,x10/7,pd/g,x11/13,s5,x9/14,s6,x1/0,s7,x5/8,s7,x0/11,s10,x7/12,s2,x8/9,s7,pb/j,x3/2,s10,x6/0,pe/l,x4/8,pf/p,x6/0,po/i,x7/2,s10,x10/3,pb/n,x2/13,s3,x15/3,ph/c,s14,x1/8,s10,x13/10,s5,x14/7,s7,x1/5,pk/f,x7/0,s11,x13/2,pc/d,x8/10,pi/h,x5/1,pe/f,s8,pa/j,x13/10,pc/f,s12,x9/12,pa/h,x7/0,s15,x8/13,s8,x15/11,pl/d,x2/8,s8,x3/14,s1,pa/e,x4/8,pp/n,x0/14,s3,x10/12,pg/c,x14/9,s2,x0/10,s11,x9/3,pn/a,x5/4,s15,x12/1,s6,x14/6,pf/c,s7,x15/5,s1,x12/13,s13,x9/4,s13,pb/p,x10/5,pe/c,x6/15,s7,x2/14,s15,x7/6,s13,x5/10,pb/l,x9/7,s14,x1/3,s12,x9/10,pn/h,x7/12,pc/k,x9/4,s2,x5/15,s10,x9/0,s2,x11/4,pg/e,x8/1,pm/h,x3/4,s14,x12/2,pi/d,x1/4,s15,x11/15,s14,x13/10,pb/o,x9/12,s5,x6/2,s13,x7/4,ph/m,s4,x8/12,pi/n,s15,x2/5,pj/p,x10/0,s4,x15/9,pn/m,x14/13,pd/b,x10/9,s5,x1/5,s2,x15/3,pe/j,s7,x0/6,s2,x8/9,s3,x2/3,s9,x5/12,pp/b,x6/3,pf/l,x9/0,s15,x3/2,s12,pb/m,x14/6,s12,x3/15,ph/f,x5/1,s13,x0/15,s8,x1/9,pa/p,s9,x15/13,s7,pf/b,x2/8,ph/g,x10/3,pi/o,x13/5,s1,x4/3,s7,x7/8,s13,x0/13,pn/h,x12/15,s14,x2/6,pc/d,x8/12,s5,x5/3,s10,x10/9,pb/p,x4/11,pm/k,x14/3,s12,po/h,x6/1,s14,x15/3,s13,x7/5,pe/i,x12/6,s8,x8/13,s2,x12/15,s15,x2/4,s13,x10/7,s11,x15/1,s4,x5/11,s8,x1/15,s15,x8/13,s8,x1/15,s5,pb/c,x11/10,s13,pm/p,x0/8,s12,x2/5,pj/i,x14/3,pl/o,x2/11,pe/j,x13/1,pa/l,x3/10,s11,x7/4,pj/m,x5/10,ph/g,x13/9,s5,x3/4,s1,x15/8,s4,x0/1,s5,pd/j,x9/12,s6,pk/g,x4/6,s4,x1/3,ph/n,s9,x4/10,pf/i,s10,pk/j,x3/1,s11,pe/h,x12/4,s6,x10/5,s12,x12/13,s15,x7/5,pn/l,x12/15,s9,x14/11,s8,x5/10,s2,x12/8,pc/b,x3/10,po/n,s14,x6/14,pl/j,x3/10,s4,x1/13,pe/c,x15/0,pa/b,x8/4,s4,pk/c,x5/12,s2,pi/g,x11/7,pe/l,x14/12,s5,x8/4,pg/f,x1/7,s8,x4/13,s12,x10/14,pc/h,x13/2,s1,x15/11,s3,x3/14,s5,pb/g,x2/7,s13,x9/3,s9,x13/1,s9,x3/14,s6,x5/0,s6,x8/14,s3,x11/13,s9,x1/5,s12,x4/2,pf/m,x6/5,pi/o,x15/2,s5,x12/5,pc/b,s2,x9/8,s9,x14/0,s6,x6/1,pe/n,x8/9,po/k,x15/4,pl/f,x11/14,s3,x7/15,s14,x14/12,pe/o,x15/7,s15,x6/1,s13,x13/12,pg/h,x5/0,pe/b,x1/9,s1,x8/2,s2,x3/1,pl/k,x9/0,s5,x8/2,pi/c,s1,x6/14,ph/p,x11/15,s4,x4/14,pn/i,x0/3,ph/p,x4/5,s6,x3/7,s3,pj/g,x0/4,po/k,x3/13,s14,x12/2,s8,x15/5,s11,x1/10,pj/e,x6/9,s14,x0/3,s12,x8/5,s10,x4/15,s13,x11/2,pi/m,x13/1,s13,x8/10,s9,x0/13,s14,x5/10,pd/a,x12/8,pg/h,s12,x9/0,s2,x5/2,pi/m,x6/0,s8,x15/13,s10,x6/2,pc/b,x10/4,s12,x15/1,s2,x12/5,pe/d,x10/8,pc/f,s10,x14/1,s9,x6/10,s2,x5/1,s2,x10/0,pp/l,x3/7,s8,x8/2,s13,x13/12,s11,x7/14,pc/k,x0/5,s15,x11/12,pa/g,x13/8,s11,x4/2,s14,x11/5,s8,x0/7,s15,x4/2,pj/n,x11/8,s10,pg/a,x6/10,s9,x2/11,po/h,x8/3,s12,pf/l,x0/1,s12,x10/9,pg/m,x5/2,pl/e,x12/6,s9,x1/14,s12,x10/5,pa/k,x6/12,pe/g,x10/7,pj/d,x13/0,s8,pm/k,x5/12,ph/a,x15/3,po/l,x9/6,pk/g,x7/3,s14,x4/14,s7,x10/11,pp/m,x8/14,s11,x15/0,s1,pe/d,x13/12,pa/k,x8/14,s5,x9/7,pm/g,x8/12,pd/j,x1/13,s9,x10/6,s2,x14/5,pf/e,s1,x4/2,s8,x3/13,pi/k,x11/10,pn/j,x3/7,s3,x1/12,s10,x14/2,s13,x0/10,s4,x12/8,pp/e,x6/7,s13,x5/13,s13,x3/10,s4,x9/12,s12,po/b,x5/4,s6,x0/10,s4,x12/5,pf/c,s10,x10/15,pe/l,x4/9,s14,x6/5,s1,x2/9,pb/m,s1,x4/8,s7,x1/12,s13,x0/14,pa/o,x12/7,pk/m,x1/10,s11,x15/13,s10,x9/0,s8,x1/7,s11,x9/12,s1,x10/13,s3,x11/14,s3,x12/2,s3,x13/7,s11,x11/0,pf/l,x8/10,s10,x12/7,s8,x8/5,s5,x15/1,pj/n,s9,pp/i,x6/12,s15,x0/1,pg/a,x10/15,s1,x1/0,s7,x12/14,pm/d,s15,x6/11,s1,x7/12,pa/h,x3/9,s12,x8/5,pm/b,x9/1,pp/j,x8/7,pb/k,x1/5,s12,x10/9,pa/i,x1/4,s15,x2/0,s3,x15/10,s14,x11/9,s14,x6/14,s11,x13/2,pl/g,x7/11,s10,x4/15,s15,x12/0,s8,x3/6,pa/f,x11/2,s6,x13/6,s10,pk/d,x10/9,po/m,x13/12,pc/b,x8/4,s13,x1/11,pn/o,x8/13,s14,x15/0,s8,x13/9,s15,pa/i,x6/2,s8,x15/1,pc/m,x10/9,s6,x6/5,s3,pg/l,x8/3,s13,pa/m,x2/13,s15,x0/12,s12,x5/11,s3,po/k,x1/15,pa/f,x14/6,s15,x1/15,s3,x14/4,s4,x15/9,s15,pm/n,x1/5,s15,x3/2,pp/h,x13/5,s13,pm/e,x7/10,s5,x15/9,s10,pn/g,x10/6,pb/l,x0/8,s9,x13/1,s14,x5/8,s7,x15/11,s2,x13/4,s14,x12/3,s15,pe/n,x4/0,pk/i,x13/9,s14,x5/15,s11,x3/11,pa/e,x4/5,s13,x3/10,pf/d,x14/0,s14,x10/12,pk/e,s1,x0/1,pm/o,x3/8,s13,x15/9,s7,x11/10,pg/n,s6,ph/p,s12,x12/15,pi/a,x9/0,pe/m,x4/13,pi/p,x11/5,pj/k,x7/6,s7,x3/12,s7,x0/9,pa/d,x15/10,s9,x2/11,s4,x6/1,s4,x13/9,pb/c,x0/11,po/n,x13/6,s7,x5/1,pj/e,x4/10,pp/h,x13/11,pc/d,x3/8,s12,x4/9,s5,pg/m,x13/14,pa/f,x15/3,pi/k,x9/5,pb/e,x3/12,s8,x5/10,s8,po/j,x7/2,s10,x10/11,pg/m,x8/4,s14,x9/11,s5,x2/3,s6,x1/14,pf/h,x2/3,s11,pc/b,s1,x5/6,s11,x13/10,ph/j,s8,x14/9,s5,x4/1,pf/n,x6/13,pc/h,s1,x12/2,pa/j,x1/4,s8,x12/5,ph/o,x6/11,s4,x7/2,pl/b,x9/6,s14,x8/10,pk/h,x0/4,s1,x2/10,pd/o,x4/13,s5,x0/14,s11,x4/10,pl/b,s6,x14/7,pf/o,x6/15,s12,x4/1,s4,x12/13,s6,x8/10,pd/h,s9,x11/0,pb/a,x12/5,pg/h,x15/11,s4,x8/12,s11,x7/14,s15,x8/3,s2,x12/4,po/e,x6/15,s10,x8/10,pi/d,x6/4,pk/g,x5/12,pa/i,x2/9,s13,x15/12,pc/g,x11/9,s11,x2/12,s5,x1/5,pj/p,x15/8,s9,x12/1,s1,x0/2,pf/l,s3,x11/6,s8,x0/10,s9,x5/1,pn/i,x9/2,pd/k,x4/1,pp/l,x10/5,s10,x8/3,s2,x6/9,pg/e,x8/4,s13,x9/2,s8,x14/0,pb/m,x15/3,pi/g,x13/11,s2,x4/14,pj/o,x7/12,s10,x5/2,pm/d,x6/14,pj/b,x10/4,s15,x9/14,s1,x13/3,s7,x8/9,s5,x11/10,pc/a,s12,x9/6,s5,x13/8,s9,x15/12,s5,x0/6,s13,x15/1,s2,x6/3,pd/g,s3,x1/14,s13,x15/7,s6,x12/11,ph/n,x13/2,s12,pm/d,x12/15,pc/p,s12,x14/3,s6,x7/12,pl/h,x6/2,s1,x7/0,pn/c,x13/15,pe/b,x6/11,s1,x2/8,s6,x6/9,s7,x14/1,ph/i,s15,x13/3,s14,x5/6,pm/p,x10/3,s7,pn/d,x12/14,s10,x4/7,s5,x9/2,s9,x10/5,s13,x12/13,ph/k,x15/6,pg/c,x11/4,s1,x9/7,s1,x4/15,pf/m,s10,x6/10,pi/o,x12/2,s8,x4/8,pn/h,x9/6,pd/g,x0/3,s9,x1/7,pj/h,x6/12,pk/f,x7/10,pi/n,x12/0,pb/k,x14/3,pc/g,x7/1,po/n,x4/10,s11,x3/8,s9,x12/6,s13,x7/10,pb/k,x13/5,pc/a,x7/15,s2,x9/12,s14,x11/2,s10,pb/j,x14/5,s14,x4/10,s12,x6/14,s3,x3/13,po/n,x14/7,pb/m,x9/2,pa/k,x14/8,pc/l,x6/10,pj/m,s9,x13/12,pn/a,x15/1,s14,x5/8,pm/c,s1,x11/0,pn/d,x5/14,pc/b,x9/1,s14,x2/8,pi/l,x13/15,s14,x11/2,po/b,s11,x12/10,s12,x7/4,s7,x14/13,pd/n,x6/12,ph/m,x3/10,pp/f,x0/2,pl/g,x5/6,s3,x2/12,s11,x6/5,s11,x13/2,s8,x10/1,s7,pp/d,x11/14,s3,x9/13,pk/o,x2/12,s11,x4/7,s7,x15/2,pl/j,x1/12,s1,x5/9,s12,x12/15,s15,x3/7,s2,x5/8,s14,x2/10,po/m,s9,x5/7,s13,x11/9,pk/g,x3/14,pb/m,x5/2,pk/p,x4/11,s7,x3/6,s4,pe/h,x5/10,pn/j,x0/13,pg/k,x3/11,s11,x4/8,s13,x2/7,po/p,x5/9,pi/f,x8/4,s3,pn/j,x3/13,s2,x12/14,s5,x1/5,s8,x11/15,pf/c,x14/10,s10,x12/0,pa/d,x15/8,s8,x3/0,s15,x1/10,s11,x2/14,pb/n,x5/10,ph/j,x2/12,s12,x8/0,pa/d,s1,x9/15,pm/g,x14/4,s5,x11/9,s14,x14/0,pj/f,x15/6,s14,x9/13,s14,x7/4,s3,x12/10,s4,x9/13,pd/l,x10/6,pe/f,x0/13,pm/h,x6/1,s1,x12/9,pf/p,x2/14,s11,x8/7,ph/l,x15/3,s15,x11/5,pf/p,x15/2,pm/g,x0/10,pe/n,s11,x5/8,pl/o,x0/7,pa/e,x14/10,s11,x15/5,s13,x9/6,pl/o,x14/7,s5,x8/13,pp/m,x0/3,s12,x1/10,pd/l,x15/11,pj/f,x14/10,s5,x1/3,pl/p,x4/7,s8,x12/9,pe/m,x8/14,pa/n,x3/12,ph/o,s10,pi/e,x5/0,pm/g,x3/14,s8,x12/8,s13,x3/13,pc/j,x1/14,s2,x10/6,pe/f,x7/4,s13,x15/12,s7,x2/7,s1,x11/0,s6,x10/7,pd/n,s5,x4/0,s2,x12/10,s13,x9/2,s8,x14/13,s2,x12/0,pk/m,s14,x1/10,pj/c,x9/15,pm/p,x5/14,s5,x0/13,s11,x12/15,s7,x0/13,pl/i,x4/5,pn/o,x8/6,s5,x5/1,pp/b,x14/15,pc/m,x4/3,s3,x5/7,pb/f,x6/8,pi/l,x11/0,pb/a,x6/14,s4,x8/13,s9,x9/7,s9,pc/o,x2/14,s9,x15/10,pl/i,x2/1,s15,pp/b,x8/13,pk/n,x3/11,s11,x6/4,s1,x15/13,pd/i,x5/7,s8,x15/14,s4,x12/3,s4,x13/2,s4,x10/3,s10,x1/14,s14,x9/0,s1,x8/14,pp/o,x0/11,pd/c,x12/9,s3,x14/6,s13,x4/11,s2,x9/12,pn/e,x0/6,pk/l,x11/4,s9,pd/c,x7/9,po/a,s14,x14/4,s10,pd/j,x6/15,s4,x4/11,pl/h,x1/8,pj/k,x2/10,s14,x14/1,pl/o,x11/0,s4,x13/10,ph/e,x1/6,s8,pm/j,x0/8,pc/o,x15/10,pf/m,x7/3,s10,x15/0,s1,x6/1,pe/l,x13/7,s10,x8/1,s12,x4/6,s11,x5/15,s15,x14/7,pb/g,x0/12,pf/o,x1/9,s8,x0/7,s10,x1/11,s7,x4/15,pl/j,x3/9,s9,x14/15,s12,x9/1,s7,x5/8,pm/n,x6/13,pk/b,x0/7,s8,x11/10,s3,x13/12,pn/h,x10/4,pa/p,x13/15,s12,x4/14,s13,x2/1,s5,x15/10,s10,x9/3,po/m,x15/11,s11,x8/6,s1,x11/9,s7,pb/l,s8,x8/0,s15,x15/5,s14,x8/10,s5,x15/14,pf/h,x10/13,s14,x5/9,pm/c,x14/8,s9,x9/7,pg/a,x1/11,s14,x8/3,pm/n,x9/4,s4,x2/6,s3,x3/5,pf/a,x9/0,pp/k,x13/14,s1,ph/e,x1/5,s13,x3/15,s5,x12/9,s3,x7/11,s1,x6/12,pm/b,x10/11,s7,x4/1,pn/l,x6/5,s6,x12/7,ph/o,x0/8,pg/f,x12/6,s5,x0/2,s1,x10/9,pa/c,x6/1,s12,pl/j,x4/15,pi/o,x3/11,s6,x6/9,s7,x2/8,ph/j,x9/12,s14,x6/4,s6,pm/k,x13/15,s10,x9/11,pp/c,x7/6,s2,x11/10,s15,x14/8,pl/i,x4/5,ph/c,x13/12,pl/g,x8/11,pd/p,x4/9,ph/e,x12/6,s5,x13/10,pn/c,x3/5,s5,x1/8,pk/d,x14/6,s10,x4/3,s10,x12/11,s2,x5/2,pi/j,s14,x11/15,s9,x1/9,pm/k,x10/15,pp/f,x5/4,s4,x2/7,s5,x10/13,pn/o,x1/11,s10,x0/12,pe/b,x5/4,s15,x12/14,pc/i,s2,x13/4,s14,x14/1,s1,x2/4,ph/m,x14/1,s15,x3/13,pc/b,x14/9,s4,x6/8,s9,x12/14,s5,x10/9,pa/k,x14/13,s3,x5/7,s4,pj/i,x6/4,s1,pe/a,x8/5,s14,x12/9,s9,x13/14,s11,x3/15,s3,x13/11,s6,x12/7,pc/m,x8/11,s11,x10/1,s10,x15/12,pp/g,x3/4,pm/c,x15/13,s12,x10/8,s8,x5/12,pj/h,x13/4,s7,x11/9,s15,x10/12,s7,x2/11,pf/m,s13,x15/4,s4,x5/3,s4,ph/p,x4/8,s6,x9/14,pa/b,x5/4,s11,x11/8,pf/m,x15/7,s7,x4/2,s4,x15/9,pp/g,x5/7,s1,x13/11,pd/m,x5/0,s6,x3/8,pb/e,x12/2,s3,x3/6,s15,x13/2,pg/o,x5/1,s9,x10/13,s1,x2/14,s5,x10/6,s9,x5/1,pj/h,x10/3,pc/b,x2/8,pd/j,x12/1,s9,x13/8,s12,x15/12,s5,x8/9,s15,x13/0,s9,x2/11,pm/i,x8/10,s3,x14/0,s10,x10/8,s12,x2/5,s8,x1/14,pa/d,x2/0,s3,x14/9,s15,x1/0,s8,x13/7,pi/g,x0/1,s10,x10/13,pl/d,s7,x2/8,s10,x0/15,s12,x4/3,pi/k,x11/5,s3,x7/2,s15,pg/f,x4/0,pp/c,x10/15,s10,pj/a,x4/2,pg/o,s13,x9/8,pi/f,x5/7,s12,x12/9,pe/m,x2/6,s5,x11/0,s8,x6/12,pd/a,x0/2,s7,x9/7,ph/e,x14/11,pl/c,x4/3,s11,x7/0,pd/b,x8/2,s7,x15/13,pf/p,x9/11,s9,x0/10,pd/g,x2/4,pa/j,x3/8,s5,x12/1,s12,x15/5,pb/e,x9/10,pj/p,x6/5,pm/k,x11/7,pd/h,x4/0,pf/b,x10/5,pn/a,x14/11,s14,pj/l,x7/1,s9,x5/13,pg/h,x1/11,po/c,s11,x7/12,s12,x2/14,s2,x15/10,pb/d,x8/13,po/h,x12/6,pl/e,x9/11,s6,x14/15,s13,x12/13,ph/d,x9/7,s5,x11/10,pj/b,x5/13,s12,x2/11,s3,x5/6,s11,x10/4,s2,x13/11,s15,x0/2,pa/n,x12/13,pb/h,x14/3,pf/e,x9/6,s8,pj/l,x12/13,pd/k,x15/0,s5,pg/m,x14/10,pe/k,x4/3,s14,x1/9,s1,x15/0,s5,x3/8,s10,x2/1,pn/i,x0/4,s10,pj/p,x7/5,s15,x3/14,s15,x7/5,s4,x15/6,s10,x7/3,s2,x8/12,s13,x10/14,s15,x3/12,pg/i,x1/9,s6,x4/3,ph/b,x0/5,s5,pa/c,s7,x15/8,s8,x0/10,s9,x9/12,s6,x11/7,s2,x15/1,pm/p,x8/2,s15,x3/4,s3,x6/5,pa/f,x14/8,pm/b,x15/11,s2,x0/3,s6,x12/9,pi/e,x15/7,pp/n,x4/2,s15,x15/0,pf/g,x13/14,pj/m,x1/0,pe/i,x10/11,pp/d,x15/6,s2,x10/13,pj/o,x12/9,ph/e,x14/10,pm/a,x3/0,s4,x15/4,s11,x14/8,pp/n,x6/0,s3,x10/3,s3,x13/0,s7,x5/2,s2,x1/13,pk/j,x9/10,pn/a,s14,x13/8,pc/k,x6/10,pi/j,x3/12,s2,x9/8,s7,x3/1,pl/e,x12/15,po/m,x5/1,s1,x2/7,pk/l,x3/15,s10,pi/c,x11/10,s15,x12/0,pj/g,x8/7,pi/k,x11/15,s6,x1/13,s11,x14/8,s11,x13/5,s2,x15/4,s9,x1/9,pm/p,x3/11,pb/g,s13,x9/0,pl/k,x6/2,pb/f,x11/4,s14,x8/3,s6,x4/6,s10,x13/15,s9,x9/6,s6,x14/4,pd/i,x10/12,pl/h,x11/13,po/n,x6/9,pg/p,x14/7,s1,x0/11,s13,x9/3,pi/j,x14/1,s8,x8/13,s12,x4/11,s8,x13/3,pd/e,x6/7,s10,x2/5,s11,x9/14,pl/g,x15/1,pn/a,x14/12,s8,x1/15,s11,x6/9,s8,x3/7,pd/g,x11/0,pj/b,s10,x8/1,pa/m,x4/10,pe/d,x2/6,pg/b,x13/0,s14,x3/12,s11,x9/15,s6,x14/10,pk/p,x6/3,s7,x13/15,s10,x10/3,pa/e,x4/0,s13,x3/7,pl/n,s5,x5/15,pj/b,x0/1,s10,x12/13,s2,x0/6,pl/g,x3/12,pm/c,x5/1,pn/p,x4/6,pk/d,x8/2,s6,x14/12,pi/l,x3/9,s12,x6/5,s1,x2/10,s12,x12/3,pe/n,x15/4,pf/l,x12/14,pb/d,s13,x7/9,s4,x11/3,pe/f,x6/13,po/j,s8,pe/h,s12,x11/12,s15,x1/3,pl/g,s12,x10/13,s9,x5/8,s6,x0/6,s4,x5/3,pj/m,x10/2,s13,x15/7,pe/g,x5/3,s12,x1/9,s12,x2/14,s4,x11/0,s11,x2/7,pi/k,x11/9,po/b,x14/13,s11,x2/12,s10,x6/5,s11,x8/11,s14,x3/4,s3,x12/8,s2,x11/6,s8,x7/5,s9,x3/9,s13,x10/14,s2,x2/0,s8,x5/7,s5,x14/2,s1,x4/13,s5,x14/8,s2,pp/m,s15,x13/1,s5,x6/7,s4,x11/12,s5,x14/3,s2,x8/10,s7,pb/f,s1,x7/6,s7,x15/9,s13,x13/12,pg/h,x3/4,s13,x13/9,s5,x12/6,pk/c,s10,x8/1,s11,x14/0,pm/p,s12,x2/1,pb/h,x0/4,pm/l,x13/6,s3,x5/14,s14,x10/3,po/j,x0/9,s12,x1/5,s9,x8/4,s1,x12/6,ph/g,x10/11,s5,x12/9,pd/n,x1/14,s6,x11/4,pi/e,x2/1,pn/f,x11/13,s1,x5/0,s2,x6/9,pa/e,x0/10,pg/f,x13/15,s9,x5/11,po/c,x15/13,s15,x1/7,pp/l,x6/15,pg/k,x12/14,s7,x10/1,s12,pf/i,x2/7,s9,x13/4,pl/d,x14/10,s10,pm/k,x15/1,pd/e,s1,x11/12,s2,pg/o,x6/9,s14,x14/2,s4,x8/10,s4,x4/14,s15,pa/k,x3/11,s14,x14/15,pl/c,x8/3,s13,x5/1,s14,x14/8,s13,x3/7,pf/p,x13/8,pg/l,x7/6,s2,x11/9,ph/o,x0/2,pd/e,x4/6,s5,x7/2,s2,pj/i,s5,x5/12,s13,x0/10,s5,x7/8,s1,x4/1,s6,x7/9,s10,x3/15,pd/p,x2/11,s9,x0/10,pa/f,x15/4,s1,x6/10,pb/p,x4/14,s7,x2/13,pg/c,x12/10,s1,x13/4,s1,x1/7,s4,x4/5,pn/k,x11/10,pj/i,x1/0,s7,x14/6,s9,x11/5,s10,x4/13,s7,x1/12,s9,x3/14,s13,x0/1,pc/d,x11/10,s7,x8/2,s2,x5/11,s8,x15/6,pf/j,x10/0,s5,pm/d,s5,x7/5,s6,pg/a,x1/9,s4,x3/14,s14,pj/k,x12/10,s4,x15/3,pn/p,x6/11,pa/d,x10/8,s15,x9/11,s2,x2/3,po/g,x12/15,s15,x0/13,pj/p,x4/9,s6,x15/11,pk/g,x5/12,s3,x9/4,pj/a,s6,x0/14,s12,x12/7,pm/k,x2/0,s7,x6/1,pa/l,x14/5,s12,x1/4,s10,pn/g,x14/10,s8,x6/8,po/p,s8,x1/10,pc/a,x9/2,pg/h,s15,x10/11,pc/m,x14/4,s8,x11/7,s13,x9/12,s1,x6/2,pj/b,x1/12,s1,x10/6,ph/i,x3/13,s10,x2/7,s9,x14/4,s8,x3/5,s7,x7/8,pk/m,x12/15,s14,x0/9,s6,x5/4,s13,x0/11,s15,x15/14,pa/h,x4/9,s10,x5/0,s1,x13/14,s8,x12/15,s6,x2/4,pp/l,x5/6,pk/o,x13/3,s3,x8/10,s5,x11/12,ph/a,x5/0,s2,x6/13,pp/m,x5/2,pe/d,x6/13,po/n,x7/9,s13,x14/8,pm/f,x1/11,s6,pj/i,x2/9,s10,x15/5,pf/l,x14/9,s6,x15/1,s2,x4/8,pm/o,x15/13,s10,x8/1,pc/b,s6,x3/7,s1,x13/2,s4,x4/1,s4,x2/11,pe/m,x14/4,s10,x7/9,pd/k,x2/13,po/c,x3/9,s10,x13/8,s14,x4/7,s5,x2/0,pb/f,x12/6,pe/p,x11/9,s9,x12/7,pm/i,x4/3,s6,x2/13,pg/j,x12/0,s3,pl/b,x11/13,s10,x15/8,s2,x9/5,s4,x6/10,s2,x5/13,s13,x7/11,s15,x4/2,s8,x0/11,ph/p,x5/2,pm/n,x4/0,pe/l,x13/8,s13,x10/6,pp/b,x7/9,s14,x1/0,po/i,x3/13,s5,x8/12,pm/e,s10,x9/0,pp/k,x4/13,s8,x5/10,s5,pc/d,x14/4,s5,x12/10,pj/l,x13/11,s2,x8/1,s11,x3/12,s6,x10/2,s6,x0/12,s15,x9/7,pb/p,s7,x2/3,s11,x8/1,pk/m,x5/15,pf/d,x11/6,s10,x1/8,s11,x10/9,pm/p,x7/11,pn/b,s5,x13/6,s2,x8/9,s5,x7/13,s13,x4/1,s12,x3/9,pd/f,x13/14,s8,x2/0,s10,x10/14,pb/h,x11/1,s2,x15/3,s5,x10/6,s11,x8/1,pm/g,x11/12,pa/b,x5/4,s12,x7/12,pg/o,x1/15,pn/d,x13/9,s7,x2/4,s4,x12/14,pm/i,s5,x8/11,pb/g,x9/0,s6,x1/14,s3,x4/9,pd/i,x2/6,s14,x3/7,s4,x8/13,pf/k,x6/9,s7,x10/14,s3,x8/9,s8,x0/15,s1,x8/9,pl/n,x11/12,s12,x3/9,pc/a,x11/4,s2,x1/12,s12,x4/10,pb/l,x3/8,s3,x0/1,s1,x10/8,s6,x7/6,pn/e,s6,x9/8,s12,x7/5,pm/k,x14/0,pb/i,x12/5,s1,x15/3,s14,x6/10,s15,x15/11,pa/f,s7,x3/4,pj/h,s9,x8/2,pb/g,x4/3,s15,x2/11,s9,x1/4,s2,x0/12,pf/c,x13/10,s11,x5/14,s8,x9/0,s9,x11/8,pj/n,x2/15,s8,pf/k,s10,pb/j,x10/6,s13,x13/2,pg/n,x11/10,pi/j,x6/0,s12,x10/9,s10,x12/2,s11,x7/13,pa/d,x3/15,s2,x11/12,s11,x10/5,s6,x8/12,s8,x5/15,s15,x13/6,s3,po/i,x11/12,s9,x15/1,pb/f,s2,x12/6,s9,x13/4,s5,pp/d,x5/2,s6,x0/6,s9,x9/11,s14,pa/o,x15/3,s8,x9/1,s8,x11/12,pe/i,x6/3,s8,x0/4,po/f,x7/11,pm/n,x15/8,pg/o,x12/3,s8,x14/8,pk/b,x12/1,s8,x9/4,s7,x10/12,s12,x4/6,pe/d,x10/2,pb/c,s15,x4/12,s10,x9/1,po/n,s8,x3/2,pm/g,x4/1,pi/p,s11,x13/15,pk/a,x9/0,pe/m,x15/14,s4,x6/7,pl/k,x10/13,s14,x7/3,pg/e,x11/1,ph/k,s9,x15/7,s11,x14/9,pc/i,x6/15,pn/f,s6,x9/3,pk/c,x1/8,s2,x9/4,s8,x7/13,s3,pa/o,s11,x14/15,pm/e,x11/8,s1,x6/0,pb/k,x11/15,s14,x12/6,s4,x1/8,pa/h,s9,x5/0,s4,x10/9,s3,x0/4,s1,x12/7,s8,x5/15,s3,x11/0,s1,x5/12,s7,x0/6,s14,pd/c,x3/7,pa/n,s5,x12/4,s2,x3/13,pg/e,x2/15,s10,x4/1,s12,x8/15,pn/l,x3/14,s4,x1/15,pe/j,x5/4,s6,x14/7,s2,x12/13,pc/g,x2/3,pn/b,x0/6,s9,x10/2,pc/a,x15/8,pf/g,x10/11,s1,x8/13,pe/h,x4/6,pj/g,s15,x9/12,pm/l,x15/10,s8,x7/12,s8,x6/9,pn/i,x4/0,pd/a,x3/1,s7,x2/4,s1,x10/0,s4,x9/11,pe/k,x12/15,s13,pf/i,x14/11,s2,x0/15,s11,x12/13,po/k,x1/7,pi/j,x5/2,pk/m,x0/10,s2,x5/4,pp/d,s6,x8/12,pe/c,x0/14,s6,x11/6,s9,x9/7,s7,x6/0,s10,x5/2,s5,x14/11,s12,x0/4,pp/a,x9/12,pm/d,x14/6,s2,x15/4,pl/c,x11/12,s4,x7/5,po/j,x14/1,s12,pn/e,x10/4,pm/a,x2/13,s10,x12/6,s2,x9/2,s4,x3/6,s6,x2/0,s15,x11/14,pn/c,x15/13,s4,x14/0,s4,x11/9,s13,x2/6,pm/b,s8,x15/1,po/n,x9/10,s10,x5/0,pg/j,x2/8,s13,x0/15,s7,x9/1,s3,x8/6,s9,x4/0,po/l,x14/5,pd/h,x8/4,pa/l,x13/11,s7,x15/14,pb/n,x10/8,pj/f,x15/13,s13,x6/5,s15,x1/11,pd/o,x3/9,s4,x14/11,pb/m,x5/15,pa/h,s6,x1/11,pj/b,x5/14,s15,x15/3,s11,x5/12,pa/m,x9/11,s1,x10/1,s5,x12/11,pc/i,x4/1,s6,x11/13,pl/f,x1/6,s11,x15/11,pi/h,x7/10,s14,x2/9,pd/m,x8/1,s13,x0/3,s3,x7/12,pj/e,x2/14,s7,x9/12,s4,x1/10,pp/g,x9/13,s14,x12/0,s13,x1/3,pi/o,x5/9,s5,x4/12,pf/m,s15,x11/3,s11,x13/4,po/k,x5/0,s11,x7/13,pl/d,x15/11,s14,x13/6,s14,pe/o,s11,x12/14,s14,pc/j,x5/7,pa/g,x6/15,s1,x14/3,pd/j,s15,x1/8,s14,x2/6,s3,x1/0,pb/n,x14/6,pg/e,x4/13,s4,x7/0,pf/n,s10,x6/12,pj/o,x9/14,s10,x11/1,pi/m,x7/8,pf/d,x11/14,s10,pm/b,x4/5,s9,x9/7,po/j,x4/15,pi/b,s4,x8/2,s1,x3/13,s12,x15/1,s11,pm/d,x11/8,s1,x12/6,pf/g,x1/7,pm/p,x15/5,s11,x8/14,pl/h,x0/1,pe/a,x4/10,pm/p,x6/12,po/f,x7/2,pp/m,x14/3,s4,x10/15,pa/f,x0/14,pc/b,x7/11,s1,x15/9,pa/o,x3/5,pd/e,x11/6,po/m,x15/12,s5,x10/6,pb/h,x2/12,s5,x10/4,pg/i,x14/12,s4,x8/1,s13,x3/13,pj/b,x5/0,s3,x6/14,pg/m,x7/3,s4,x10/1,pb/l,s12,x8/15,s6,pm/f,x6/9,s14,x14/3,pg/k,x5/12,pd/n,x6/14,pj/f,x10/12,s1,x14/1,pc/g,x10/7,s11,x4/14,s9,x3/15,s12,x12/11,s8,x5/1,s6,x2/13,s5,x6/8,pm/k,x14/5,pf/p,x0/11,s12,x7/13,s3,x3/14,pj/h,x6/2,pe/k,x4/7,po/h,x3/8,s5,x14/10,s12,x12/4,s7,x13/14,pm/i,x4/0,po/d,x12/7,pp/b,x15/10,s7,x8/5,pl/a,x6/10,s7,x13/15,s6,x3/8,s11,x13/12,s13,x14/6,pb/m,x13/9,pe/j,x15/11,pb/f,x5/13,s3,x4/1,s3,x12/7,s5,pk/c,x15/10,s11,x1/13,s15,x9/5,s1,x14/3,pn/p,s10,x7/15,s2,pl/d,x0/2,pa/m,s7,x1/13,s10,ph/e,x6/12,pn/a,x3/15,pg/i,x10/8,pd/o,x7/13,pc/a,x10/0,pi/b,x3/12,pc/h,x15/1,s1,x0/11,pe/f,x3/15,pm/k,x8/4,pf/b,x7/10,s3,x2/13,po/k,x6/1,pl/h,x7/3,s6,pf/o,x8/1,s10,x14/13,pl/p,x4/8,s5,x14/5,pb/o,x13/2,pf/c,x9/1,pk/o,x6/11,s4,x7/0,s6,x3/11,s3,pc/b,x2/5,s15,x4/15,pm/o,s11,x7/5,pb/n,x12/10,s11,x13/15,pp/c,x8/14,s12,x3/1,s1,pe/g,x4/14,s6,x3/13,pc/p,x10/8,pn/e,s11,x4/11,s1,x7/10,s4,x5/14,pd/g,x2/12,s5,x3/13,s14,pp/b,x14/4,pk/n,x3/1,pd/g,x11/10,pe/p,s6,x9/8,s10,x11/3,s1,x5/10,s13,x8/15,s2,x12/9,s1,x0/10,pa/i,x1/9,pd/o,x5/12,s13,x2/0,s10,x13/9,s14,pb/p,x0/10,pa/h,x9/5,s3,pm/k,x4/8,s10,x6/10,s4,x11/3,s12,x4/7,s13,x9/6,s5,pd/i,x7/10,po/l,x4/14,s1,x0/2,s6,x1/5,s9,pm/c,x14/4,pp/n,x2/5,pl/k,x15/4,s2,x1/14,s9,x0/13,s14,pm/i,s1,x8/2,s10,x12/13,s1,x8/2,s3,x6/1,pb/e,x4/3,s2,x2/12,s6,x0/5,po/j,x8/4,pi/a,x10/2,pp/f,s5,x4/8,pl/g,x1/0,s8,x12/3,s3,x5/15,s4,x3/0,pm/n,x11/6,s5,x14/13,s14,x6/3,s7,x2/1,s15,x7/6,s14,x5/9,s9,x1/15,s9,x6/0,s12,x7/9,s13,x13/12,s14,x14/9,s15,x8/13,s5,x5/14,s8,x11/13,pj/b,x2/3,pn/o,x15/5,s4,x6/13,s6,pd/l,x9/8,s1,x0/14,s10,x6/5,s2,pp/i,x12/9,s7,x14/2,ph/f,s4,pi/l,x15/11,s12,x13/2,pn/h,s6,x4/10,s15,x13/6,s15,x15/8,s5,x4/14,pf/i,x3/7,po/g,x2/4,s5,x14/8,s10,x9/3,s4,x2/13,pf/a,x15/11,pd/c,x12/13,s1,x10/11,s12,x1/7,s10,x14/15,s10,x6/3,s12,x9/15,s14,x3/10,s11,pa/b,x14/2,s12,x5/13,s5,x9/2,pn/k,x7/1,s7,x4/5,s13,x13/6,s5,x15/3,s4,x13/1,pa/h,s8,x3/4,pm/e,x5/10,pb/g,x3/15,pe/i,s7,x4/5,s2,x2/15,s1,pm/a,x6/0,s5,x13/11,pp/b,x5/9,s6,x2/10,pk/o,x1/13,s3,x10/14,s1,x6/5,s11,x2/7,pg/i,s12,x13/9,s8,x2/10,s11,pm/a,x5/14,pg/o,x11/4,s11,x6/13,pd/p,x4/5,s1,x10/13,s15,x0/2,s1,x3/10,s4,x5/9,s11,x3/13,s13,x5/9,s1,x11/8,s14,x14/4,s9,x12/6,pm/f,s15,x7/2,pc/k,x5/6,s14,x13/1,pa/i,s10,x4/9,ph/c,x6/5,s1,x11/14,s1,x9/13,s14,pa/j,x7/14,pi/b,x12/10,pd/a,x0/11,s15,x12/7,pb/i,s12,x9/15,pe/f,x5/3,s7,x10/4,pg/i,s2,x1/6,s15,x8/14,po/j,s10,x9/11,pe/d,x2/3,s11,x14/10,s5,x13/3,pm/l,x7/15,pn/e,x12/6,s12,x8/5,s1,x1/14,s5,x6/7,s2,x3/12,s3,x5/15,s4,x13/3,s2,x11/2,pd/b,x7/0,s10,x13/8,s6,x6/5,s13,x7/8,pg/l,s10,x11/9,pn/a,x8/1,pm/f,s14,x15/14,s14,x2/9,s12,x13/11,s8,x5/2,pk/o,x7/11,pf/j,x15/13,pi/m,x1/7,s15,x13/14,s3,x12/0,s4,x6/1,s9,ph/l,x8/2,s4,x12/10,pm/n,x11/1,pl/j,x2/6,s7,x8/5,s7,x15/13,s6,x8/7,s2,x2/3,pk/p,x0/9,s9,x6/10,po/e,x3/14,pa/p,x8/15,s6,x3/7,s12,x14/9,s13,x2/8,pi/c,x13/15,s6,x1/3,pp/j,x5/10,s8,x15/1,po/f,x13/6,s13,x10/12,pp/j,x2/7,s14,x5/4,pe/a,x3/11,s9,x13/9,s10,x5/11,pg/n,x9/7,pa/l,x1/14,s6,x9/10,s14,x13/3,pn/o,x15/9,s3,x11/10,s7,x13/3,s7,x12/10,s1,x7/14,s4,x9/15,s8,x8/7,s3,x5/14,s7,x11/13,pc/g,x4/9,pi/n,x2/3,s11,x11/10,s13,x5/12,pf/e,x3/2,s4,x10/1,s12,po/m,x9/0,s6,x2/14,pl/f,x12/3,s6,x9/2,s10,x15/6,pi/c,x2/7,s7,x14/0,pl/m,x13/1,pe/p,x9/2,pb/j,x8/1,s11,x3/11,s4,x15/12,s7,x14/9,pg/l,x3/0,pa/p,x13/4,s5,x1/8,s10,x10/3,s6,x6/12,s8,x10/7,s1,x9/13,pk/h,x2/7,s15,pi/b,s5,pe/j,x12/6,pn/k,s14,x4/5,pi/b,x14/15,s15,x7/1,pc/a,x8/10,s6,x0/1,s4,x7/9,s10,x13/1,ph/l,x15/11,pg/a,x7/3,s4,x15/1,s1,x14/7,s13,x6/15,s8,x0/10,pm/o,x4/6,s8,x3/13,s2,x9/6,pg/p,x3/11,pi/k,x6/14,s7,x7/10,pe/l,x8/15,s9,pg/c,x7/11,pf/d,x2/8,s12,x15/11,s6,x5/9,pk/i,s5,x7/10,pa/g,x12/8,s5,x7/15,s6,x13/1,pf/b,x3/7,ph/n,x15/13,s4,x9/4,pc/g,x3/2,s12,x11/12,pm/o,x14/6,s6,pj/i,x3/4,s7,x12/0,pk/b,s11,x15/1,s14,pn/d,x11/0,pg/m,x12/1,s4,x5/7,s8,x9/15,s3,pj/h,x0/1,s10,x2/4,pd/m,x13/14,s11,pb/p,x3/10,s5,x15/8,pm/c,x4/14,s4,x5/8,s2,pa/h,x14/2,pe/i,x15/10,pp/b,x14/5,s15,x13/7,s12,x5/6,pa/c,x11/12,s9,x10/5,s7,x0/13,ph/f,s10,x3/12,s8,x15/2,pp/a,x5/0,s14,x13/11,s2,pn/e,x15/0,s11,x4/13,po/c,x2/5,s13,x11/1,s5,x12/2,s15,x15/13,s14,x9/5,s10,x13/12,pn/e,x10/8,pk/i,x0/9,s8,x2/10,s1,x8/0,po/c,x10/14,pb/h,x0/5,pn/i,x14/10,s2,x3/6,s8,x1/10,s15,x2/0,s13,x15/8,pc/h,x2/3,s15,x5/9,s11,pb/a,x14/4,s10,x13/7,s11,x6/2,s1,x5/4,pj/e,x9/3,ph/l,x15/4,s3,x5/0,s4,x10/3,s4,x4/14,pm/d,x13/9,s3,x15/7,s6,x9/14,s8,x2/10,s7,x0/4,s4,x11/6,pp/a,x13/4,s4,x0/12,s9,x14/8,pc/n,x4/2,s14,x11/9,pj/k,s14,x15/10,pd/g,x6/7,s8,x8/15,s8,pm/j,x11/1,pg/a,x5/8,pk/i,x10/2,s13,x5/14,s15,x1/15,pl/m,x5/14,s3,x10/3,pj/g,x13/9,ph/p,x5/2,pi/o,x15/12,s11,x6/10,pg/l,x8/5,s8,x4/13,pe/k,x3/0,pn/j,x2/5,s3,x10/8,pd/m,s10,x2/12,s14,x0/7,s10,x15/3,s15,x6/13,s14,x4/0,s15,x11/6,s2,x3/13,s8,x4/14,ph/k,s2,x15/6,pe/o,x3/14,s11,x1/7,s7,x2/11,pa/l,x3/0,pf/o,x4/7,s10,x11/6,pg/i,s6,pj/n,s14,x9/4,ph/d,x2/12,s13,x13/0,s13,x3/8,po/p,x14/11,s1,x0/10,pj/m,x12/1,s10,x15/11,pn/a,x2/14,ph/j,s3,x10/11,s12,x6/15,s3,x11/14,pp/c,x5/6,s4,x14/12,s8,x7/15,s2,x10/2,pl/m,x0/12,po/n,x8/5,s3,x4/14,pi/a,s13,x12/5,pd/j,x15/2,s13,x14/7,s5,x5/3,s13,x11/6,pa/c,x4/12,pp/e,x14/0,s13,x8/11,s6,x14/13,s10,x2/11,pk/i,s9,ph/f,x5/9,s5,x7/12,pk/a,x11/8,pb/n,x15/0,s3,x6/4,pl/m,x12/11,s10,x4/15,s15,x13/10,pj/p,x8/14,pg/m,x4/3,s10,x0/2,s15,x6/4,s14,pd/f,x3/12,s3,x14/9,pp/l,x3/15,s10,x4/14,pi/d,x12/1,s1,x4/11,s3,x14/3,s2,x5/8,s12,pj/p,x2/10,s3,x3/12,s14,x11/1,s1,x13/3,s5,x6/0,pl/g,x4/2,s6,x14/10,s11,x0/11,ph/j,x14/2,s13,x3/11,s5,x10/7,s8,x15/12,s8,x4/5,s10,x13/14,s11,x5/8,pg/p,x1/7,s13,x11/8,s8,x1/4,pf/h,s5,x9/12,po/k,x1/4,s10,x3/7,s8,x9/8,s13,x5/1,s11,x13/14,s2,x8/10,pf/e,s1,x12/9,po/k,s10,x11/15,s6,x7/1,s6,x8/9,pe/p,s13,x10/3,s2,x8/9,pb/c,x2/15,s11,x7/11,s3,x9/10,s15,x6/7,s5,x10/13,pa/e,x7/11,s10,x12/10,pm/l,x8/13,s9,pj/n,x15/11,pf/i,s11,x7/2,s14,x0/10,s15,x1/5,s7,x8/3,s8,x5/11,s15,pl/h,x4/2,s10,x6/8,s8,pb/g,x12/2,s11,x6/11,s6,pc/j,x14/12,s5,x6/8,s9,x11/9,s13,x12/5,s5,x3/14,s12,x1/0,pd/b,x4/5,s3,x0/6,s5,x14/15,pa/e,x7/1,s6,x11/15,s13,x14/1,s15,x10/6,pm/i,x13/2,pl/n,x6/15,pj/i,x5/7,s3,x0/8,s4,x2/9,s11,x1/3,pg/c,x11/15,pf/k,x0/9,s11,x10/7,pl/d,s11,x14/1,s1,x0/7,s12,pp/e,x10/6,pf/d,x9/4,pj/c,x7/0,s12,x14/3,s1,x9/12,s2,x15/11,s2,x12/14,s12,x4/5,pp/d,x15/12,po/h,x13/9,s4,x3/6,pa/g,x8/10,po/d,x12/14,s7,x13/9,s4,x7/12,s7,x1/6,pg/m,x2/4,s11,x5/9,s7,pc/i,x13/2,s4,x6/15,pg/o,x8/11,s15,x4/6,s5,x10/12,pe/b,x9/14,pc/a,x4/6,s10,pg/f,s5,x12/9,s9,x13/15,s9,x0/5,s10,x8/10,s1,x6/5,s9,x2/0,ph/e,x4/14,s12,x2/11,pd/k,x13/9,s4,x7/4,ph/n,s11,x8/13,pp/i,x6/11,s2,x5/15,s4,pl/c,x12/3,s10,x1/15,pg/n,s9,x11/4,s3,x9/8,s7,x11/15,s10,po/f,x5/0,s15,pa/g,x14/3,ph/m,x15/12,s8,x8/2,s3,x1/6,s1,pf/b,x7/3,s12,x11/12,po/g,x13/4,s4,pi/n,x6/9,s4,x5/13,pj/f,x6/10,s7,x3/11,s3,pg/p,x1/15,po/k,x6/0,s11,x13/2,pe/m,x0/5,s15,x1/14,s7,x2/6,pf/l,s6,x15/9,s15,x8/12,pg/o,x10/1,s8,x7/9,pa/e,s9,x0/13,pj/d,x15/9,s5,x11/4,s4,x5/7,s15,x12/1,s14,x11/15,s3,x10/0,s13,x9/14,s11,pb/h,x8/12,pn/f,x0/14,pp/l,x8/13,s10,x2/1,s11,po/f,x14/8,pn/j,x2/5,pc/h,x7/10,pn/e,x8/15,s15,x12/11,pd/l,x13/3,s9,x1/11,s3,x12/13,pb/k,x2/9,pd/m,x7/5,pf/g,x13/11,s12,x14/2,s10,x3/13,pj/e,x7/15,s2,x9/10,pc/d,x6/8,s10,x7/9,pm/e,x12/6,s10,x7/8,pp/a,x0/9,s2,pj/i,x8/1,s15,x7/10,s10,x0/3,po/g,x13/14,s4,x15/3,s11,x4/8,s2,pp/d,x7/11,s1,x9/8,s3,x15/5,s15,x3/12,s12,x9/14,pa/j,x8/0,s7,x4/5,pk/o,x7/3,s9,x6/0,s10,x4/7,pe/i,s8,x13/8,s4,x9/0,pd/k,x5/13,s8,x10/15,pf/a,x11/9,s5,x6/7,s3,x5/11,s3,x15/1,pb/d,s11,x2/8,s15,x3/15,pg/c,x2/8,pl/k,x0/9,s9,pg/h,x7/4,pa/f,s3,x13/3,pd/i,x6/12,s2,x13/9,pa/n,x0/5,s5,x3/12,s15,pl/k,x7/6,s1,x2/11,s14,x3/4,s9,x14/12,s15,pj/i,x4/3,pg/p,x15/0,po/a,x7/3,pp/n,x15/4,pd/o,s4,x5/13,ph/c,s3,x1/3,pj/i,x7/11,pd/g,x9/10,po/i,x11/5,pk/h,x8/2,s4,x0/12,pf/l,x9/5,pa/g,s2,x13/3,pk/c,x11/0,s10,x3/8,s10,x10/1,pg/o,x3/11,s11,x9/12,s4,pm/n,x3/14,s5,x15/0,s4,x10/12,ph/b,x15/0,pj/o,x2/1,s6,x9/10,s11,x7/12,pm/l,x1/8,pi/e,x2/12,pb/f,x1/10,pm/j,x14/4,pf/h,x2/3,pc/d,x13/1,s4,x4/7,pk/g,x3/6,s9,x0/14,s6,x6/11,s1,x10/1,s5,x11/12,pp/o,x14/3,s13,x7/5,s8,x11/4,s12,pk/e,x6/5,po/m,x1/15,s3,x8/4,s15,x1/5,s4,x4/15,s9,x13/3,pg/d,s2,x7/5,s9,x13/2,pk/n,s3,x9/4,s1,x0/6,s15,pb/i,x14/10,pl/j,x1/12,pp/i,x14/15,s14,pn/m,s9,pj/b,x6/3,s12,pe/k,x1/10,po/b,x13/6,ph/l,x5/8,pk/e,x6/15,pn/b,x13/7,pe/f,x10/15,s14,x8/5,ph/b,x15/2,pj/k,x9/5,s12,pi/o,x0/2,s13,x4/12,pe/c,x9/5,pg/h,x3/2,pa/m,x0/10,s10,x12/9,pc/g,x1/5,s15,x6/12,pl/m,x1/8,s4,x11/10,pb/k,x12/14,pg/i,x0/7,pj/e,s1,x12/8,s12,x7/11,pm/p,x14/8,pl/e,s14,x9/2,pk/d,x8/10,s9,x6/4,s5,x2/1,pn/j,x5/7,s2,x9/10,s12,x8/12,s7,x3/10,s2,pp/l,x7/11,pf/a,x14/8,s15,x15/4,po/k,x14/2,s7,x11/5,pc/b,x1/9,s1,x8/11,s13,x1/15,pj/p,x9/7,pe/a,x11/0,pg/i,x9/15,s13,x4/8,pa/l,x13/14,pg/d,x15/1,s10,x7/11,s3,x4/3,s9,x7/14,pi/k,x15/9,s3,x8/6,s6,x14/5,pa/m,x8/9,pc/f,s5,x5/6,s11,pi/l,x11/4,s13,x8/7,pm/c,x12/15,pl/g,x0/2,s3,x11/8,ph/m,s3,x3/14,s3,pn/j,x10/4,s5,x6/5,s9,x9/10,pm/i,x0/7,s5,x8/6,pg/e,x11/12,s7,x14/4,s7,x1/8,pn/d,x12/3,pl/f,x5/10,s12,x0/11,s8,x7/3,pg/j,x0/13,s15,x14/9,s2,x8/4,po/p,x13/10,pn/f,x15/9,s8,x5/2,s2,pg/o,x9/11,s7,x12/0,pl/c,x13/11,s11,x7/9,po/j,x5/13,s4,x9/6,s9,x11/5,s1,x1/2,s15,x3/5,s8,x10/15,pb/n,x2/1,s7,x10/4,s1,x3/5,pd/p,x12/1,s1,x11/8,s1,x6/10,s3,x15/1,pf/k,x5/2,pn/h,x3/12,pp/o,x11/5,s11,x3/10,s3,x8/0,s13,pc/d,x15/11,po/a,x13/2,ph/l,s8,pb/i,x1/12,pe/o,x13/5,ph/n,s6,x2/3,s7,x14/1,s13,x8/15,s5,x4/13,pi/b,x8/2,s10,x10/9,ph/k,x6/14,pc/n,x9/12,ph/a,x7/8,s4,x11/1,s10,x12/2,s1,x0/5,po/l,s11,pa/d,x1/14,s13,x10/13,pg/e,s4,x1/7,s5,x4/13,pf/h,x2/6,pi/p,x10/3,s13,x0/5,pg/l,x10/8,s4,x15/2,s15,x13/4,pk/c,x3/14,s5,x4/11,s13,x8/6,s7,x5/2,pi/g,x14/13,s8,x11/5,s9,x10/15,pc/b,x8/2,s15,x5/0,pm/p,x13/4,s11,x5/9,pe/c,x11/0,po/d,x7/9,s6,x11/0,s5,x13/12,ph/k,x3/15,s6,x2/6,s13,x1/10,s14,x9/5,s9,x10/7,s1,x15/6,s7,x4/11,s7,x7/6,pa/j,x0/14,pe/g,x9/6,s7,x10/3,pi/l,x15/12,pk/g,x6/13,s15,x15/1,s3,x11/8,s8,pa/n,x7/15,s10,pi/p,s15,x1/13,s13,pc/a,x8/12,s9,x11/4,pl/m,x14/8,s10,x9/15,pj/p,x7/3,s4,x9/15,pn/b,x6/8,s4,x11/1,pa/g,s9,pk/i,x4/12,s8,x0/13,pn/j,x14/10,s2,x15/7,s5,x9/8,s15,x5/1,s15,x4/11,s6,x8/15,s12,x10/14,s14,x6/1,po/m,x10/3,s6,pe/i,x1/13,pc/l,x4/9,s2,pg/p,x2/13,s9,x3/6,s13,x10/13,s11,x0/8,pe/m,s5,x2/9,pi/c,x13/6,pm/h,s14,x5/4,pa/e,x15/7,s12,x13/2,s6,x1/4,s4,x11/5,s5,x9/14,pn/f,x12/5,s12,x9/0,s3,x15/3,s4,x10/9,po/j,x7/4,s12,x14/5,pb/h,x10/11,po/j,x14/4,s4,x11/5,s12,x12/15,pb/n,x5/13,pl/e,x14/12,pj/m,x3/6,s2,x4/12,s3,x9/5,ph/o,x1/4,s7,x6/5,s2,x0/8,pc/m,x12/4,s13,x7/1,s14,x9/4,s13,ph/k,x10/3,pe/d,x5/7,pb/n,x1/11,s7,x14/12,s4,x5/8,s15,x9/2,s2,x8/10,s15,x4/1,pd/a,x8/3,pk/b,x2/11,pg/o,x15/5,s2,x1/6,pp/n,x0/5,pf/g,s1,x14/12,s11,x2/6,pj/l,x3/7,s1,x4/15,ph/a,x3/6,s14,x2/12,pi/p,x15/13,pd/m,x3/2,pg/l,x5/13,s9,x4/14,pj/c,x5/13,s6,x0/7,s10,x8/10,pm/i,x12/4,s13,x10/0,s2,x5/6,s4,x3/7,pl/j,x12/10,s6,x9/6,s5,x14/8,s2,x1/2,s12,x6/12,pn/m,x11/7,s3,x0/12,s11,pb/p,s15,x10/8,s12,x4/1,s6,x15/5,pi/a,x9/1,s14,x15/5,s11,x8/12,po/g,x4/9,s3,pn/m,s14,pl/f,x3/2,pa/p,x14/4,s9,pe/n,x11/2,pc/b,x13/10,s14,x3/11,s3,pp/d,x14/15,s13,x11/9,s14,x0/12,s7,x6/14,s2,x8/9,s2,x2/10,s13,x14/11,pe/n,x9/6,s5,x5/0,s9,x11/14,ph/d,x1/12,s3,x9/0,pb/c,x6/1,pl/m,x7/0,s5,x2/8,pc/e,x9/11,pk/m,x0/4,pi/p,x7/9,s3,x11/4,s5,x9/15,s10,x7/14,ph/n,s8,x9/5,s14,x8/12,s3,x5/7,s7,x12/3,s7,x13/7,pi/d,x8/2,s15,x3/13,s11,x8/15,s2,x12/7,s13,x3/4,s11,x15/0,pl/o,x4/2,s10,pb/d,x7/8,s12,x10/3,s3,x5/0,pl/k,x9/2,s11,x10/7,s11,pi/h,x13/0,pm/j,x11/14,s8,x7/13,pk/c,s2,x6/14,pn/i,x5/1,s5,x10/8,s11,x9/13,s1,pb/c,x8/2,s13,pd/j,x15/5,s2,x3/2,s8,x11/7,s8,x2/1,s5,x9/10,s6,x4/7,s14,x11/15,s3,x1/14,s7,x7/9,s1,x8/13,pb/e,x6/11,pp/i,x2/5,s13,pa/n,x12/13,s2,x11/7,pi/k,x1/5,s3,x11/9,s2,x2/6,pc/l,x12/9,s6,x2/15,pi/a,x6/10,pn/d,x0/1,s11,x15/6,s13,x4/11,pg/f,s7,x6/9,s14,x1/11,po/m,x14/9,s9,x15/6,s10,x5/0,s12,x3/8,s12,x10/4,s13,pb/d,x11/9,pf/e,x8/6,s10,x9/14,s10,x1/10,s5,pl/n,x12/4,pp/f,x15/8,s5,x0/4,s11,x10/12,s13,x11/1,s6,pm/l,x5/2,s9,pf/a,x10/12,s5,x0/13,pk/p,x10/7,s8,x14/11,pj/f,x0/8,pl/b,x3/9,pe/n,x8/5,pm/d,x15/6,s13,x2/13,pp/n,x6/4,s4,x7/13,s1,x2/11,s3,x14/7,pi/a,x4/3,s3,x15/7,s1,x14/4,s6,x7/5,s13,x0/12,s10,ph/b,x3/10,pn/d,x2/1,pk/f,x3/5,pd/e,s3,x11/7,s8,x14/3,s3,x7/8,s2,x4/1,pm/f,x6/11,s4,x10/7,s9,x11/0,pj/i,s5,x3/1,s6,x5/0,pc/d,x11/13,s14,pf/j,x4/12,s6,x14/0,pm/n,x3/5,po/i,x13/12,pk/b,x0/15,s9,x2/5,s9,pa/j,s6,x3/12,s12,x8/2,pe/m,x13/5,s13,x7/4,s2,x2/15,po/h,x8/0,s15,pj/g,x9/12,s10,x13/6,s13,pl/n,x2/10,s6,x5/12,pe/p,x4/11,s13,x2/14,s14,x10/4,pj/h,x2/11,pi/p,x13/5,s12,x9/0,s14,x2/11,s8,x12/15,s7,x8/10,pe/j,x6/11,s12,pp/m,x5/4,pn/k,x7/6,s13,x12/5,s10,x10/0,s11,x1/6,pm/h,x13/9,pa/d,x10/3,s15,x0/13,s11,x6/1,s2,x0/7,s2,x13/14,pp/h,x0/5,pj/d,x7/9,pb/i,s2,x0/14,s4,x4/5,s11,x11/10,s14,x7/12,s8,x5/6,s12,x8/3,pg/m,x2/13,s12,x9/5,pc/o,x3/6,pe/b,x14/2,s4,x0/1,s14,x13/4,s2,x11/9,pa/k,x12/14,s4,x13/4,pg/p,x5/11,pb/d,x8/7,pa/n,x13/6,pd/g,x10/0,s8,pm/n,x13/4,pk/d,s9,x3/5,s6,x1/4,s15,x9/12,pm/b,x5/11,pl/a,x3/8,s2,x2/1,s11,x7/10,s8,po/c,x12/5,s4,x6/9,pl/p,x1/11,s8,x14/12,pa/i,x10/8,pl/e,x7/13,s14,x10/0,s9,x6/4,s14,x10/11,ph/g,x0/9,s4,x6/2,s10,x3/7,s14,x6/5,pj/k,s2,x3/10,s3,x5/8,pp/d,x9/3,s11,x12/6,s11,x8/10,s6,x5/6,ph/n,x4/1,s13,x2/8,pl/p,s7,x6/5,s5,x3/4,s4,x7/11,s15,x13/14,pb/g,x9/8,po/n,s14,x2/15,s13,x12/3,s15,x9/13,pa/f,x3/6,s13,x1/4,pn/b,x7/0,pl/f,x1/10,pa/c,x2/7,s5,x15/14,pj/g,s13,x3/0,s7,pc/d,x12/6,pa/p,x15/8,s13,x0/9,pm/l,x4/12,pk/a,x0/3,pg/i,x2/12,s13,x4/1,pe/p,x6/0,pm/a,x15/2,pe/l,x0/6,po/f,x11/10,s5,x6/0,s9,x11/15,s5,x1/7,s8,x9/3,pg/i,s4,pb/e,x11/6,pl/k,s3,x2/3,pf/b,x1/13,pk/h,x2/5,s6,x3/6,pn/f,x5/1,pe/h,x14/12,pn/j,x10/2,s3,x1/15,s12,x13/3,s12,x1/6,pm/k,x8/15,s5,x10/14,pg/c,s6,x8/2,s14,x4/12,pj/i,x8/0,s14,x13/15,po/e,s15,x7/1,s11,pj/h,x3/5,pb/n,x11/1,s13,x8/9,s10,x0/14,s8,x9/7,s7,x4/12,s6,pc/m,x13/0,s1,x8/15,s1,x0/2,s6,x10/3,s5,x7/12,s4,x1/2,s12,x13/4,s14,x12/2,pe/n,x0/9,s5,x5/15,s8,x3/0,s4,x5/1,pg/k,x4/6,s9,x13/3,s15,x10/7,s6,x9/15,pp/n,x6/11,pd/j,s10,x1/7,s10,x13/10,s15,x4/1,s6,x2/9,pp/h,x11/14,s6,x4/0,s1,x1/5,pn/c,x8/11,s6,pp/f,x0/13,pe/m,x3/8,s9,x2/6,s12,x8/7,s14,x12/1,s1,x13/3,s1,x4/11,s9,x7/2,pn/j,x15/6,s9,x13/9,s9,x3/0,pk/c,x14/10,pf/e,x13/3,s7,x7/4,pk/p,s8,x14/2,s9,x15/3,s13,x5/6,pd/l,x8/2,s5,pm/c,x11/3,pe/g,x6/5,s4,x15/0,s10,x14/9,pc/l,x7/12,pf/i,x14/2,s2,x11/6,s10,x15/12,pg/l,x3/14,pp/h,x9/8,pl/a,x0/14,pi/m,x7/9,s8,pg/c,x2/0,pe/l,s7,x5/6,s15,x9/0,s12,pf/d,x4/11,s12,x15/1,pi/e,x4/14,pb/k,x3/0,s4,x2/14,s9,x1/6,s7,x11/7,s12,x1/10,pp/n,x15/6,ph/k,x4/11,s11,x7/0,po/g,x15/8,s3,x12/14,pl/j,x11/5,pe/d,x6/13,ph/k,s8,x10/4,s7,x14/11,pn/b,x7/1,s3,x10/3,pj/k,x11/4,s4,x13/5,s14,x1/9,s12,x0/6,s8,x15/11,s1,x5/4,po/c,x14/0,pe/k,x5/8,pb/j,x15/14,s2,x0/10,s9,x11/9,s7,x3/0,s12,x5/14,s11,pc/p,x7/2,s3,x12/1,s5,x6/0,s13,x11/5,pm/b,x14/13,pd/j,x7/1,s10,x11/14,s5,x4/13,s12,x10/8,s14,x5/12,s6,x9/4,pm/c,x10/15,s6,x3/0,pk/o,x6/13,s11,x4/11,ph/e,x1/13,s6,x2/0,s13,x3/13,s7,x14/12,s10,pk/p,x8/9,s11,x10/2,s2,x7/6,pa/l,x14/13,s11,x3/15,s3,x12/11,s10,pb/c,x0/6,pe/n,x10/4,pf/c,x2/5,pj/e,x14/13,s12,x7/3,pd/n,x10/1,pc/b,x4/3,ph/k,x9/13,s2,x14/6,s2,x5/9,s5,x2/14,s7,pa/m,x11/0,s13,x7/3,s2,x4/1,pd/l,x7/13,pp/b,x8/4,s6,x10/5,pe/g,s14,x1/12,s12,x11/6,s6,x5/8,s5,x11/15,ph/c,x6/0,po/m,x4/10,s2,pe/d,s15,x11/15,ph/c,x1/9,s6,x3/8,pf/b,x10/11,pp/n,x5/13,pj/g,s4,x12/9,s14,x4/15,s6,x1/9,s1,pp/f,s4,x15/11,pa/g,x14/2,pn/o,s9,x8/3,s12,x6/13,pa/j,x1/10,pc/h,x3/12,s14,x2/5,pk/l,x12/7,pg/i,x2/15,pk/f,x14/5,pd/g,x4/6,pj/n,x10/13,s1,x15/3,s11,x4/8,s5,x15/12,s14,x9/10,pf/b,x8/3,s2,x0/15,s14,x14/7,po/d,x5/0,s5,x8/14,s2,x3/4,s4,x0/2,s2,x5/4,s9,pb/j,x15/9,pe/p,x0/5,s12,x2/12,s15,x13/0,s15,x10/9,s8,x4/6,po/g,x11/15,pc/f,x10/2,s11,x5/11,s12,x2/1,pd/j,s14,x12/5,s14,x11/6,pi/l,x7/5,s9,x6/2,s3,x7/15,s14,x3/2,s10,x0/10,pp/f,x11/14,s9,x10/13,s3,x9/2,po/e,x12/10,s2,x7/6,s10,x8/3,s11,x11/10,pf/j,x1/5,s9,x15/4,pb/g,x11/0,pk/f,x12/14,s10,x8/2,s5,x6/10,pi/n,s12,x0/8,pm/g,x4/13,s3,x6/3,pn/p,x8/9,s15,x3/4,s1,x5/9,pm/a,x1/4,pe/b,x8/13,s7,x6/7,pk/j,s11,x3/1,s4,x2/9,s14,x6/4,s14,pb/l,s13,x0/3,pf/j,x1/10,s8,x12/11,s12,pe/h,x14/15,s10,x13/3,s11,x6/12,s10,x5/0,s7,x10/14,s11,x4/3,pk/j,x13/0,s8,x14/9,s12,x3/13,pi/m,s11,x9/11,s9,x4/3,s9,x12/7,s3,x0/11,s14,x2/8,pl/h,x5/14,s12,x11/7,s13,x12/2,po/c,x11/8,s3,pm/n,s15,x15/10,pl/c,x8/0,s6,x1/6,pb/p,x4/0,s1,x5/3,pd/i,x2/1,pl/k,x4/13,s8,x3/1,s2,ph/p,x11/4,s5,x9/10,s13,x15/14,pl/f,x2/6,pi/e,x10/0,s3,pn/k,x15/5,s6,x10/9,s8,x8/0,pi/l,x7/1,pg/a,x9/8,pb/p,x7/5,pj/h,x10/0,s9,x11/1,s8,x15/8,s8,x3/9,pd/a,x14/2,pf/c,x10/3,s5,x6/5,s8,x0/10,pd/j,x15/2,s4,pn/o,s13,pj/i,x0/9,pl/b,s12,x11/1,po/g,x13/9,pe/k,x0/15,pl/m,x9/14,po/i,s7,x6/13,s8,x8/1,s3,x12/11,s15,x3/13,s12,x5/0,pk/c,s7,x10/9,pf/m,x3/8,s3,x9/7,s8,x0/4,s7,x14/3,s1,x1/9,pg/a,s3,x5/15,pe/f,x6/13,pb/k,x4/3,po/n,x8/14,pg/i,x11/15,pd/c,s14,x1/0,s13,x15/14,s4,x12/5,s5,x15/7,ph/e,s2,x5/13,s4,pg/k,x2/3,pa/n,x15/5,ph/l,s9,x13/9,s13,x0/8,pb/p,x13/2,s9,x11/4,pk/j,x6/5,s7,x7/1,s5,x5/2,pm/p,x9/14,s11,x2/10,pg/c,x8/9,s5,x4/11,s13,pn/a,x9/0,s13,x5/8,s1,x9/0,s2,pi/p,x4/8,s13,x12/0,pb/m,x4/3,s6,pk/i,x7/12,s11,x11/9,pc/e,x15/14,pn/m,x4/8,pc/e,x9/11,pi/a,x14/6,pl/o,x0/12,pa/g,x9/7,s1,x6/5,s1,x9/3,ph/k,x7/5,s10,x11/1,s4,x5/13,s13,x7/9,pb/c,x5/13,pd/a,s5,x1/6,s5,x13/5,s8,x0/12,pj/g,x13/2,s12,po/e,x5/4,pk/d,x9/13,pp/a,x10/5,pg/n,x0/7,s4,x12/2,pi/k,x5/15,pb/e,s13,po/g,x7/11,pd/a,x12/9,ph/e,x8/2,po/n,x12/7,pg/k,x6/5,s5,x12/4,s2,x10/5,pf/e,s4,x8/2,s5,x5/14,s10,x7/15,s5,x2/9,s8,x3/6,s11,x0/8,s8,pm/a,x3/13,pb/l,x8/4,pa/j,x11/6,s6,pn/k,x7/15,s14,x6/8,pj/a,x14/0,s3,x13/8,ph/i,s13,x3/1,pj/d,x10/14,s10,x7/4,pm/h,x13/10,pp/j,x14/9,pa/h,x2/15,s7,x6/1,s4,x0/4,s6,pj/p,x7/9,s13,x6/4,ph/b,x12/11,pd/f,x4/10,pb/h,x13/7,s8,x11/15,pn/d,x14/3,s11,x12/15,s2,x2/6,s5,x15/3,pk/l,x5/12,s2,x14/8,pc/g,x6/7,pf/p,x8/3,s12,x10/11,pm/o,x7/6,s10,x2/1,pp/j,x15/10,pa/n,x1/0,s9,x8/13,pg/e,x0/4,pd/m,x15/14,pc/j,x1/7,s4,x0/6,pb/o,x9/15,s15,x10/13,s2,pj/d,s9,x12/6,s5,x11/15,s7,x1/0,s6,x4/6,s2,x11/5,ph/n,x6/12,s14,x4/5,s6,x15/6,s8,x12/2,pb/i,x6/9,s15,x8/13,s2,x5/1,s6,x0/10,pe/d,x7/8,s10,x14/1,s13,x8/4,s12,x11/5,pb/m,x7/9,s2,x11/6,s11,x12/9,po/k,x11/4,pc/m,x1/8,pf/o,x3/13,s8,x10/9,s3,x13/12,pb/g,s8,x7/9,s9,x11/4,s4,x10/8,pi/m,x13/3,pa/d,x0/15,s6,x11/10,s14,x8/4,s13,x5/15,ph/n,x10/8,s4,x0/12,s1,x11/14,s5,x6/0,pa/b,s12,x1/11,s7,x3/9,pf/e,x13/15,pm/l,s1,x8/5,ph/f,x6/0,pe/m,x7/14,s1,x5/1,s11,x14/12,po/j,x13/15,pk/f,x4/11,ph/j,x5/8,s11,x15/1,s14,x2/13,s5,x14/1,pl/g,x11/2,s9,x8/7,pb/c,x2/14,s9,x9/12,s3,x4/3,s3,x10/11,s6,x1/15,pl/f,s13,x7/11,pm/n,x3/6,pl/p,x10/4,s10,x7/6,s6,x3/11,s8,x5/2,s1,x15/8,pj/g,x10/0,pa/e,x4/2,pp/c,x12/13,s3,x8/15,s5,x4/2,pf/l,x14/5,s1,x12/10,s4,pi/a,x3/2,po/e,x8/7,pi/c,x5/6,s11,x9/7,s3,x13/12,s15,x10/3,s3,x0/7,s7,x6/8,pj/l,x15/11,s14,x9/7,pp/a,s4,pk/g,x1/2,s7,x14/6,ph/i,x0/9,pp/f,s8,x5/3,s15,pc/b,x10/2,s15,x1/3,s6,x15/12,s6,x9/1,pm/f,x12/11,s3,x10/15,pj/k,x3/5,s5,x4/6,s15,x12/1,s11,x14/2,s14,x1/15,pb/d,x2/10,s4,x14/4,s5,x2/7,s15,pk/l,x10/14,pd/b,x0/1,s11,x14/7,pi/l,s3,x1/11,pb/m,x5/7,s12,x4/1,pk/c,s8,x11/2,s8,x1/13,s11,x3/14,pp/m,s15,x8/10,pk/b,x6/7,pf/j,x14/8,s7,x12/7,s6,x4/11,pe/n,s5,x1/3,s13,x5/14,pm/d,s9,x11/12,s8,x2/1,s2,x0/12,pg/p,x15/13,s14,x3/12,s8,x14/6,pe/j,x0/11,s10,x3/4,pp/b,x6/12,s6,x5/2,pc/h,x8/4,pp/k,x14/5,s14,x7/13,s3,x2/10,s3,x11/1,s4,pl/b,s9,x0/12,ph/i,x15/8,s12,pl/p,x5/0,s1,x2/9,s4,x15/4,s14,po/m,x2/14,s1,x4/7,s14,x8/6,s13,x5/10,s4,x3/11,s5,x9/2,s6,x5/10,pd/a,s11,x8/0,s6,x7/13,s4,pg/i,x11/3,s15,x15/13,pk/d,x7/8,pi/l,x1/2,pk/a,x9/13,s2,x12/14,s8,x13/9,s2,x0/15,pg/f,x11/4,pi/o,x0/7,s7,x6/4,pk/n,x14/5,s10,x13/12,pf/l,x3/14,s13,x8/11,pg/n,x1/9,s12,x5/14,s8,x7/3,s11,pf/j,x10/12,pd/e,x13/11,s13,x1/4,pc/n,x7/8,s9,pa/k,s9,x9/1,s9,x7/11,s10,x9/2,s7,x10/15,ph/d,x7/6,pl/m,x3/2,ph/f,x5/10,pp/g,s13,x12/6,pj/c,x10/8,s3,x6/11,pk/o,x12/15,s12,x10/0,pf/l,x6/1,pc/g,x0/4,s1,x15/7,s10,x9/12,pj/n,s12,x4/5,s7,x9/6,s10,x15/10,s10,x4/9,s10,x0/8,s6,x7/3,pm/g,x15/1,s13,x2/7,s12,x6/15,s2,x5/2,s3,x15/14,s5,x4/3,pc/l,x10/9,pa/e,x3/11,s4,x0/13,s2,x15/10,s8,x0/4,pp/j,x14/13,pl/d,s6,x1/6,pe/o,x14/13,ph/c,x0/6,s3,x1/2,pb/e,x4/5,s11,x1/3,pc/o,x2/9,s14,x12/11,pm/j,x1/7,s11,pi/l,x5/6,s12,x15/8,pj/f,x5/1,s9,x11/12,s3,pb/n,x10/2,s10,x1/4,s11,x12/0,s7,x13/7,s14,x0/3,s9,x8/15,pi/j,x0/11,s5,x13/15,s11,x7/11,ph/f,x8/10,pm/n,x13/12,ph/j,x8/10,s6,x7/5,s7,x4/3,pa/o,x8/15,s4,x3/1,s8,x6/10,s9,ph/c,s6,x12/14,s12,pp/i,s8,x4/9,s1,x8/12,s3,x2/6,s14,x4/11,s2,x8/5,s10,x7/4,s14,x8/12,s4,x5/2,s1,x8/9,s5,x7/12,pb/a,x11/3,s14,x13/12,s4,x9/6,pi/l,x15/2,pk/c,x12/7,pa/d,x9/4,s14,x1/14,pm/e,x6/9,s3,x7/8,s7,x6/14,s12,x3/7,s15,ph/d,s9,x6/12,pc/a,x7/11,s6,x8/12,s1,x3/5,s1,pm/p,x8/15,s14,x0/2,pn/d,x14/8,ph/c,x13/12,pg/i,s5,x8/14,pk/m,x15/2,pp/l,x0/12,s5,x2/7,pk/e,x1/13,pi/h,x6/9,s1,x2/12,s13,x7/10,s12,x12/14,po/k,x11/4,s1,x3/8,s1,x10/2,s9,x5/4,pj/h,x13/10,s8,x8/2,pd/p,x6/3,pi/n,s9,x4/12,pj/e,s5,x8/0,s9,x4/5,s12,x10/7,pm/d,x6/8,pe/i,x0/4,pb/j,s11,x3/13,s8,pg/c,x4/11,s9,x14/5,pl/n,x10/11,s6,x5/0,pk/b,x1/3,s13,x13/4,ph/n,x2/8,s10,x11/3,s6,x7/10,po/c,x3/14,pa/k,s1,x11/8,pb/n,x0/12,s4,x5/9,s6,x2/1,s6,x6/8,s3,x5/13,ph/f,x10/1,pb/l,s9,x12/11,s15,x5/15,s8,x3/1,pd/p,x11/0,s7,x9/15,s5,x0/7,pc/n,x12/10,ph/j,x14/9,s2,x15/0,s1,x7/10,pa/n,x2/15,s1,x11/4,s14,x2/6,pj/i,x13/11,s7,x14/10,pb/f,x8/6,s11,x7/12,pm/i,x13/14,pk/o,x7/12,s12,x3/8,pj/g,x13/7,s15,x1/4,ph/n,x0/15,pl/g,x12/5,s15,pd/h,s11,x9/3,pa/n,s2,x12/6,pk/j,x10/0,s7,x3/8,s13,x0/7,pa/i,x12/11,pj/f,x5/1,s11,x13/12,s9,x15/3,pp/m,x9/5,s8,x8/2,pd/e,s8,pm/n,x10/13,s7,pd/h,x4/9,pj/c,x3/7,s10,pa/l,x12/1,s3,x2/3,pi/o,x10/5,s7,x14/0,pl/m,x2/13,s1,x5/7,s7,x14/1,pi/e,s6,x2/15,s12,x9/3,pf/n,s2,x12/13,s2,x8/1,pa/k,x7/14,pe/p,x11/6,s8,x0/9,s6,x2/15,s13,x7/9,s3,x2/10,pc/o,x3/11,s15,x15/9,pp/k,x4/12,s14,x9/11,pl/i,s13,x6/0,s9,x2/14,pc/g,x9/11,s9,x2/12,s2,x0/3,pd/j,s5,pg/p,x9/6,s8,x10/12,s9,x7/5,s8,x14/13,s13,x8/11,pa/l,x1/0,s8,x11/5,pm/n,x3/10,s2,pc/g,x2/4,pj/d,x15/7,pc/b,s5,x10/12,s8,x15/14,pj/i,x4/11,s8,x1/7,s2,x13/3,pe/p,x15/2,ph/i,x7/10,s12,x13/11,s15,x14/1,s9,x6/11,s12,x1/12,s11,x4/9,s2,x12/8,pd/p,x5/3,po/f,s3,x14/1,s1,x0/3,s9,x8/9,s14,x4/0,s5,x2/6,s2,x0/14,s2,x3/12,s2,x15/9,s6,x6/3,s3,x4/7,pd/g,x2/3,s2,x7/0,s7,x11/6,s10,x9/15,s10,x5/3,s6,x9/2,pf/p,s9,pl/c,s14,x7/11,s3,x5/15,s1,x9/11,s6,x0/13,ph/g,x12/14,s12,x7/4,pm/k,x12/11,s4,x3/7,pl/h,x10/14,s2,pj/g,x0/11,s10,x9/15,s7,x1/7,s14,x3/10,s8,x12/1,s12,x2/5,pp/i,x4/6,s9,x8/2,s14,x0/4,s11,x11/9,s11,x13/6,s8,x0/1,pb/e,x10/5,s3,x2/13,s7,x7/15,s6,x6/8,pn/d,x10/14,s7,x13/5,pf/m,x7/0,pg/l,x8/2,s4,x9/0,pa/m,x2/7,s8,x10/0,pb/f,x15/1,s3,x9/10,pk/d,x14/0,s7,x12/1,pf/h,x9/7,s9,x4/11,pi/n,x0/14,s3,x5/2,s8,x11/0,s11,x15/5,pg/a,x4/6,pk/m,s4,x2/11,s4,x3/8,pi/o,x13/4,s6,x14/9,s14,x3/15,pl/j,x0/9,s12,x2/12,s8,x13/8,ph/n,x10/9,s9,x0/1,s1,x12/5,s3,x3/15,s14,x10/2,pi/p,x1/12,pd/b,s3,x11/2,s13,x10/15,s6,x12/3,s10,x6/15,s3,x10/3,s1,x4/13,s6,x14/5,po/m,x7/0,s6,x5/2,s11,x3/13,pb/d,x7/12,s15,x4/15,pp/c,x5/1,pg/n,x14/15,s13,x12/4,s3,x5/7,s15,x11/4,s3,x13/7,pl/k,x4/0,s3,x1/3,s3,x10/12,s7,pe/i,x11/6,s6,x0/15,s7,x14/12,s9,x10/3,pf/p,x1/11,po/c,s10,x3/15,s10,pi/k,x6/4,pm/g,s11,x1/10,s8,x6/13,s7,x2/14,s11,x15/13,s14,x5/2,pf/b,x13/0,pm/i,s7,x1/2,s13,x11/7,s9,x5/9,s10,x11/15,pb/o,x13/10,s11,x2/6,s4,x8/12,s3,x10/13,pc/n,s14,x7/9,pf/m,x6/8,pi/g,x13/9,s1,x15/3,pl/m,x1/5,s5,x3/4,pd/j,x14/9,s15,pe/f,x6/5,s11,x10/11,s11,x7/15,pp/a,s9,x11/14,po/c,s13,x8/13,s7,x7/11,pi/f,x14/6,s6,x10/15,pj/a,x13/6,s14,x7/1,pl/b,x2/14,s10,x3/15,s2,x9/8,po/d,x12/15,pn/h,x4/1,s5,x2/15,pp/f,s6,x10/7,s8,x3/1,s13,x11/5,s5,x2/1,pb/h,x15/0,s12,x10/4,s13,x9/6,s4,x3/4,s9,x9/8,s15,pj/e,s13,x12/11,s1,x8/14,s7,x12/11,po/g,x4/14,pa/e,s12,x6/2,pp/o,x7/10,s1,x11/5,ph/m,x7/1,pn/o,x5/15,pm/i,s12,x9/0,s3,x5/7,pa/n,x10/11,pk/b,s2,x6/14,pi/f,s2,x9/4,s4,x12/2,s6,x13/14,s13,x10/1,pk/e,s10,x6/3,s5,pd/n,x4/5,s10,pe/i,x1/14,s5,x12/10,pj/f,x0/9,pc/d,x13/14,s11,x3/5,pn/l,x6/2,s10,x1/3,s15,x2/14,s1,x4/10,s13,x7/13,s5,x3/1,s8,x7/2,pi/a,s15,x9/14,s14,x11/0,s5,x1/5,pj/c,x10/6,pp/k,x3/13,s5,x11/12,s13,x15/0,pl/c,x4/11,s2,x10/5,po/b,x8/2,pa/m,x0/11,s14,x6/15,s14,x5/12,pg/j,s5,x9/4,s4,x3/12,po/n,x15/11,ph/m,x4/13,pi/e,s12,x3/6,s13,pd/n,x8/11,s11,x3/0,s12,pc/b,x12/1,pf/d,x3/6,s4,x5/13,s2,x2/4,s2,x15/10,po/g,x14/6,s5,x12/8,s12,x3/7,s7,x14/8,pf/j,s5,x15/11,s8,x3/7,s12,x0/8,po/g,x3/10,pe/m,s13,x15/9,s7,x10/8,s8,x14/15,s13,pl/a,x6/2,s9,x7/9,pe/b,x2/15,s14,x3/13,s7,x14/7,s13,x0/4,s14,x13/9,pk/l,x15/6,s4,x13/4,po/c,x2/1,pa/p,x4/9,s14,x15/10,ph/c,x14/12,pj/g,s8,x2/6,s9,x0/1,s9,x7/11,s10,x5/15,pm/e,x9/14,pb/c,x3/15,s9,x6/7,pk/f,s8,x9/4,pg/b,x0/7,pn/j,x11/15,pf/e,x5/13,pb/m,x12/0,s6,x2/9,s7,x5/6,ph/l,s5,x1/0,pg/f,x8/6,pn/d,x0/14,po/a,x2/15,pb/c,s10,x13/4,po/l,x6/1,pc/h,s10,x2/3,pe/b,x12/7,s15,x9/0,s5,x13/8,s1,x5/6,pk/c,x13/11,s10,x7/14,s2,x10/1,s13,x5/14,pe/l,x8/13,po/b,x11/7,s10,x2/0,s4,x9/13,s13,x3/14,s13,x4/10,s14,x14/2,pj/g,x3/1,s15,x11/6,s3,x13/4,s1,x6/1,s14,x4/14,s6,pk/a,x12/11,s11,x9/15,s6,x12/2,ph/j,x0/1,pe/b,x14/6,s10,x13/7,pi/f,x14/2,s14,x12/0,s7,x1/9,pj/h,x14/13,pg/d,x6/12,s15,x1/7,s5,x9/0,s10,x1/7,pc/e,x15/14,s5,x13/0,s10,x15/7,pj/i,s3,x4/0,s14,x7/3,s15,x14/5,pf/m,x2/1,pb/a,x3/6,pe/n,x9/2,pk/i,x10/15,s2,x4/7,s13,x15/13,s11,x2/6,pp/j,x15/11,s15,x14/5,pn/i,x4/12,s13,x2/6,pg/p,x0/3,pd/a,x15/8,pk/b,x9/14,pf/n,s11,x10/12,pl/a,x2/1,s8,x11/8,pf/h,x12/2,pc/e,x11/5,s6,po/m,x13/9,s5,x0/6,s1,x5/14,s5,x2/8,s11,pj/n,x11/15,s2,x2/3,pe/f,x4/15,s15,x3/6,s14,x0/1,s15,x12/11,pa/c,x5/1,s2,x14/9,pn/p,x0/7,s5,x14/5,s7,pd/c,x11/9,s15,x2/8,pi/b,x15/9,pk/g,x7/3,s15,x2/1,ph/o,x14/6,s7,x12/2,s7,x6/3,s4,x2/8,s3,x4/11,s3,x6/8,s5,x14/15,pe/p,x4/10,s3,x2/6,s2,x15/7,pg/o,x8/11,pc/a,x12/15,s14,x7/13,s4,x14/8,pl/h,s14,pb/p,x12/5,pe/a,x4/7,ph/c,x10/2,pj/m,x6/7,pd/b,s6,x4/9,s12,x10/12,pl/p,x3/8,s13,x10/6,pj/b,x14/15,pn/a,x1/8,s13,x14/6,po/h,x12/9,s7,x5/2,s3,x8/12,s14,x5/14,pe/a,x0/1,s1,x12/3,pl/p,s9,x9/2,s13,x11/1,pg/d,x12/2,ph/f,s10,x11/3,s9,x4/2,pd/e,x14/9,pn/l,x13/6,pi/k,x15/1,s14,x6/12,s6,x15/0,s4,x8/11,pp/j,x9/0,pd/e,x11/4,s15,x8/9,pj/i,x15/10,s3,x5/2,pl/h,x15/8,pe/p,x12/4,s9,x8/2,s5,x10/6,s14,x0/9,s14,x5/3,pm/c,x11/1,pd/o,x9/15,s10,x4/8,s14,x6/7,s12,x14/5,s9,x12/11,s2,x10/13,pi/m,s15,x15/5,s7,x10/2,s6,pk/l,x12/6,pd/h,x11/10,s9,x1/14,s3,x7/12,pf/e,s14,x3/2,s5,x0/12,s8,pc/b,x1/8,s5,x6/9,s3,x10/8,po/m,x14/9,s4,x13/15,pn/f,x3/8,s6,x15/0,ph/d,x13/3,pi/l,s13,pa/p,x12/8,pb/j,x5/13,s2,x3/15,s5,ph/p,x4/1,pj/k,x11/2,s1,pl/o,x7/1,s4,x15/12,s3,x10/4,s10,x0/2,s7,x5/4,s10,x10/1,pb/c,s8,x13/8,s3,pd/p,x6/15,s1,x13/4,s3,x0/7,s8,x8/6,s4,x2/3,s5,x9/4,s4,x3/14,s15,x15/1,s12,x2/5,pg/i,x11/9,pc/d,x3/2,s14,x15/10,pj/p,x7/13,pg/f,x12/15,po/n,x5/1,s14,x6/3,s6,x5/4,s13,x0/7,s1,x1/5,s15,x3/8,s1,x14/11,s11,x5/3,s1,x11/4,s10,x14/9,s4,x13/11,s12,x12/10,s2,x9/2,s6,x12/6,s1,x9/1,pd/f,x10/4,pe/p,x12/3,s9,x2/11,s12,x1/12,s3,x3/4,s1,x9/12,pj/n,x11/10,s3,x6/14,s2,x4/8,s7,x11/14,s3,x9/1,s7,x5/13,po/d,x9/10,pj/e,x1/6,s5,x13/3,pc/d,s8,x4/1,pp/n,x10/11,pd/o,x5/13,s4,x10/8,s13,x12/1,s14,x9/2,s9,x4/0,s6,x11/10,s12,x15/5,s9,x12/6,s7,x15/1,s6,x9/8,s1,x5/15,pm/c,x6/14,s1,x1/10,s2,x11/5,s5,x0/3,s6,x14/1,pl/o,x8/10,s1,x2/14,s6,x15/5,pg/i,x3/8,s1,x0/6,s10,x1/14,s10,x13/2,s7,x6/10,s3,x2/15,s14,x11/0,pk/h,x10/12,s3,x1/6,s8,x10/9,pp/m,x5/7,s14,x8/15,s14,x0/9,pa/l,x13/15,pc/g,s13,x1/14,s5,x15/7,s7,x12/3,s5,x15/4,s8,x13/11,pk/d,x2/15,pp/l,x14/1,s4,x8/5,pm/i,x9/11,po/g,x1/7,s15,x9/13,s12,x3/6,s15,pa/n,x7/1,s14,x15/11,pm/p,x14/6,ph/b,x15/2,s3,x4/9,s4,x5/7,s5,x3/13,s6,x11/14,s8,x2/8,s6,x6/0,s5,x1/10,s6,x14/13,s1,x7/8,pm/e,x1/3,pb/j,x15/4,s10,x6/12,s9,x0/10,s15,pk/p,x5/4,s2,x3/9,pb/l,x10/13,s8,x2/15,pa/f,s14,x12/1,pe/k,x4/14,ph/j,x1/3,pd/l,x0/4,pb/k,x7/11,s12,x4/12,s4,x0/14,s8,x1/15,s9,x13/9,s2,x6/7,s3,x12/13,pg/e,x4/6,pf/c,x0/1,s10,x12/13,s2,x9/10,pe/g,x6/2,pl/f,x7/12,s2,x6/10,pj/g,s11,x3/2,s11,x11/0,po/a,x14/9,pg/l,x4/12,s7,x5/11,pm/b,s11,x12/10,po/a,x5/3,s3,x0/9,s6,x15/4,s3,x6/11,s1,x9/2,s9,x10/6,pe/g,s7,x9/2,s8,x10/13,s11,x6/15,s14,x12/11,pm/a,x7/14,po/c,x9/3,s13,x2/5,pd/f,x13/12,s10,pe/n,x4/9,pk/c,x2/5,s3,x8/10,s1,x1/7,s9,x6/14,s6,x8/4,pf/n,x0/9,s13,x14/2,pl/c,x11/8,pd/a,x2/9,s9,x7/5,pm/b,x1/11,s8,x0/4,pc/f,x12/13,s12,x11/6,s4,x4/3,ph/i,x15/1,pm/g,x4/3,s3,x2/8,s13,x14/0,pj/b,x7/2,pg/i,x11/13,pa/f,x15/7,s11,pn/i,x11/6,pd/g,x9/3,s14,x1/4,s6,x6/11,s10,x15/2,s11,x11/1,s10,x6/4,s6,x14/7,s9,ph/n,x5/11,s8,pj/e,x7/9,s6,x6/11,s2,pc/h,x10/7,s14,x9/1,s7,x15/5,pk/o,s3,x14/7,s7,x0/2,s12,x1/14,pp/a,s8,pk/m,x12/8,s12,x9/13,s6,pj/i,x10/6,s12,x4/15,pp/g,x7/5,s7,x14/15,s6,x5/13,s4,x9/8,pe/a,x0/11,s14,x15/2,pm/o,x11/7,s10,pi/g,x8/5,po/m,x3/12,s5,pg/c,x1/8,pd/o,x11/10,s2,x6/5,ph/p,x14/11,po/b,x9/2,s15,pj/i,s15,x12/14,s10,x11/7,pm/p,s5,x10/3,s10,x7/8,s15,x11/5,po/b,s5,x15/14,s10,x3/6,pd/f,x2/10,pm/e,x4/14,s12,x5/11,s8,x12/8,s11,x10/5,s12,x0/8,s3,x5/2,s10,x11/14,s4,x4/7,pl/n,s10,x14/8,s13,pm/k,x10/15,pi/f,s1,x0/14,s11,x2/13,pc/o,x10/4,pi/g,s1,x13/14,pa/j,x9/5,s1,x4/7,s5,x1/13,s4,x5/9,pi/b,x8/11,pj/a,x2/10,pe/f,x4/12,s10,x0/3,s5,x7/12,s11,x11/6,pi/k,x5/1,s1,x0/2,pl/f,x5/15,pp/c,x14/10,pa/k,s14,x7/11,ph/b,x0/5,pe/a,x14/7,ph/i,x0/13,s9,pb/j,x1/9,pc/k,x3/8,ph/n,x10/6,pi/o,x15/7,s15,x0/14,pj/f,s1,x4/5,s11,x12/11,s4,x3/6,s5,x1/12,pp/l,x2/4,s15,x8/3,s7,x7/12,pj/o,x4/13,pe/d,s2,x6/3,s15,x5/8,s14,x3/9,s1,x7/0,s11,x2/8,pp/i,x12/13,s15,x9/11,s4,x3/4,po/n,s12,x2/11,s14,x7/6,s4,x9/14,pm/a,x2/13,s12,x9/14,s14,x5/3,pp/j,x15/7,pd/k,x0/6,s9,x12/11,pn/i,s8,x5/14,s11,x4/10,s7,x11/6,s7,x5/2,s6,x11/7,s2,x0/9,ph/d,x1/2,s7,x3/8,s11,x6/9,po/e,x0/2,s9,x8/7,s12,x4/0,pb/n,x5/11,s4,x8/1,pm/p,x12/5,s6,x2/7,s9,x6/13,pk/f,x15/3,s15,x0/5,pi/j,x11/14,pl/e,x8/4,s10,x12/9,s3,x6/1,s3,x8/9,pg/k,x6/10,s3,x15/3,s1,x8/0,s1,x6/13,pa/h,x8/7,s4,pb/f,x9/2,s10,pi/a,x1/0,pl/j,x14/3,pf/d,x9/1,pe/i,x8/4,pa/f,x7/12,pc/h,x1/10,s13,x9/15,pb/f,x5/1,ph/j,x14/12,s10,pf/p,x8/1,s4,x6/2,pa/b,x3/7,pp/k,x5/11,ph/f,x10/12,s3,x0/8,pk/d,x10/4,pb/c,x0/13,pg/o,x10/2,s14,pb/k,x5/1,s3,x10/9,ph/j,x4/8,s7,x9/7,s6,x1/5,s9,x14/13,s3,x11/6,s15,x13/9,s4,x5/7,pn/b,x10/12,s8,x1/8,s7,x3/0,s9,pj/f,x7/6,s4,x8/1,s7,x12/5,pe/b,s13,x9/13,pn/d,x14/8,pb/f,x4/7,s9,x9/14,s13,x2/11,s15,x6/4,pn/g,x3/9,s5,x8/14,pp/m,x11/7,s6,pi/e,x15/1,s9,x10/8,s1,x6/1,s6,ph/n,x4/8,pd/k,s10,x9/0,s8,pf/g,x4/8,pk/l,s4,x7/0,s2,x1/10,s9,x8/6,pf/b,x3/11,ph/j,x6/14,pk/l,x2/1,pp/m,x4/10,pa/k,x11/8,pg/j,x6/13,pe/k,x11/9,pg/o,s2,x13/6,s1,x14/4,s2,x3/9,s6,x11/13,s7,x14/15,pe/l,x11/6,pf/d,x9/15,pn/h,x2/4,s7,pg/m,x3/15,s10,x4/11,s1,x7/10,po/d,x12/11,s1,x10/9,s1,x8/7,s6,x1/2,s10,x8/5,s14,x13/9,s10,x2/1,pl/p,x7/4,s12,x0/3,pm/k,x8/1,pp/d,x14/15,s15,x6/11,s4,x9/4,s8,x1/12,pj/a,x8/9,s14,x13/5,pd/f,x8/4,s1,x0/15,pm/p,x4/7,pf/e,x3/5,pp/k,x12/10,s11,x4/14,pn/f,x11/13,s3,x8/2,pi/j,x14/13,s1,x12/15,pd/l,x14/4,po/b,x9/6,s4,x10/2,s2,x1/0,s9,x5/7,pk/g,s7,x14/15,s13,x9/4,s9,pa/m,x1/3,pf/e,x6/2,pd/l,x13/9,s5,pj/n,s11,x4/7,pi/f,x10/3,pb/l,x4/7,pj/g,x15/13,s5,x8/7,s4,pk/l,x9/12,s4,x2/0,s9,po/g,x6/4,pb/k,x5/0,s4,x13/4,pe/l,s11,x14/1,s4,x7/11,s11,x10/6,s10,pj/h,s14,x13/9,s15,x4/1,pe/c,x11/15,s15,x5/2,pd/i,x1/3,pb/a,x2/11,s6,x0/12,s9,pj/i,x1/3,pb/e,s13,x6/15,s7,x7/14,pp/h,s11,x3/15,s6,x7/12,s9,x1/14,pl/m,x6/8,pd/j,x2/11,s7,x15/1,s8,x3/6,s1,x15/9,pi/g,x7/1,pd/b,x6/5,s3,x13/4,s1,x0/2,pp/e,x9/15,pa/n,x8/2,s4,x1/7,s14,x11/6,pg/f,x3/1,pl/o,x6/15,pg/p,x1/12,s12,x0/6,pe/b,x15/10,s6,x3/2,s14,x14/1,s6,x9/12,s2,x14/2,s11,x3/5,ph/a,x10/2,s15,x12/13,pg/n,s2,pe/a,x4/11,s15,x15/7,s7,x14/0,s15,x10/9,pd/l,x12/4,s4,x15/5,pn/i,x10/1,pc/j,x5/12,s13,x2/9,s10,x15/10,s12,x11/9,s13,x13/14,pe/a,x15/8,s7,pj/h,x0/11,s3,x10/6,pe/m,x13/5,pc/k,x11/0,pf/j,x6/4,pe/o,x8/0,pj/c,x15/13,s7,x10/8,s10,x5/6,s1,x2/15,s6,x9/4,pb/h,x8/12,pe/o,x7/9,pp/k,s9,x0/2,s5,x8/14,s2,x0/3,pj/m,x4/12,pg/n,s8,x5/1,s7,x4/14,s15,x5/8,s5,x0/14,s9,x9/2,s4,x14/15,pj/l,x0/13,s4,x14/15,pn/k,x1/8,s15,x2/5,po/c,x6/7,ph/a,s6,x8/1,pm/b,s2,x7/13,s7,x6/5,s14,x0/7,s9,x2/1,s7,x15/14,po/e,x3/13,s8,x14/7,pk/c,x15/4,s14,x5/10,s6,pp/m,x11/6,s10,x5/9,s6,x10/11,s4,x13/14,pa/h,s2,x3/5,s10,x6/11,pm/e,s4,x8/3,s14,pj/l,x1/0,s9,pn/i,x11/3,pg/j,x4/10,pk/n,x0/8,pc/p,x3/15,pd/j,x9/7,pg/i,x12/1,s11,x3/8,pp/a,x0/14,pf/j,x12/13,s14,x8/9,pi/m,x13/3,s3,x7/6,pd/h,s2,x8/0,s5,pa/p,x4/12,s13,x1/2,s1,x8/5,pf/k,x11/1,s12,x10/7,s11,x13/1,s3,x2/6,pc/i,x15/8,s6,x14/7,s7,x11/1,pn/h,x13/5,s10,pj/c,x9/3,po/l,x14/0,pj/p,x8/3,s13,x0/7,s13,x1/14,pl/m,x11/10,s15,x4/2,s11,x13/7,s1,pd/j,x1/4,s4,x6/3,s13,x15/7,s9,x0/3,pi/n,x4/5,pm/e,x14/13,po/n,x5/12,pd/i,x7/3,s2,x8/11,ph/a,x3/14,s4,x5/4,pd/c,x12/3,s15,x10/7,s9,x8/11,pf/n,x5/15,s4,x7/10,pm/c,s14,x15/9,pg/o,x1/7,s6,x9/5,s15,x2/3,pp/d,x13/7,pb/c,x1/8,s5,x2/12,s13,x14/13,s10,x15/9,s10,x8/3,s1,x1/11,s10,x3/9,pi/l,x7/5,s10,x14/1,pn/p,s1,x0/4,s14,x12/11,s6,pg/h,x2/4,pc/a,x14/13,s3,x11/6,pl/k,x3/14,s9,x10/2,pm/o,x3/5,pd/k,x13/4,s7,x3/14,ph/i,x13/4,s6,x5/12,s15,x8/15,s11,x9/3,pc/g,x10/14,s9,x8/5,pe/m,s10,x15/11,pk/h,x4/10,pi/a,x0/11,s4,x3/9,ph/e,x11/8,pn/f,x10/1,pb/h,s12,x2/9,s7,x10/15,pp/d,x11/7,s12,x5/15,pk/h,x8/1,s1,x14/15,s7
diff --git a/2017/inputs/day_17.txt b/2017/inputs/day_17.txt
new file mode 100644
index 0000000..67bf40f
--- /dev/null
+++ b/2017/inputs/day_17.txt
@@ -0,0 +1 @@
+371
diff --git a/2017/inputs/day_18.txt b/2017/inputs/day_18.txt
new file mode 100644
index 0000000..8b74206
--- /dev/null
+++ b/2017/inputs/day_18.txt
@@ -0,0 +1,41 @@
+set i 31
+set a 1
+mul p 17
+jgz p p
+mul a 2
+add i -1
+jgz i -2
+add a -1
+set i 127
+set p 735
+mul p 8505
+mod p a
+mul p 129749
+add p 12345
+mod p a
+set b p
+mod b 10000
+snd b
+add i -1
+jgz i -9
+jgz a 3
+rcv b
+jgz b -1
+set f 0
+set i 126
+rcv a
+rcv b
+set p a
+mul p -1
+add p b
+jgz p 4
+snd a
+set a b
+jgz 1 3
+snd b
+set f 1
+add i -1
+jgz i -11
+snd a
+jgz f -16
+jgz a -19
diff --git a/2017/inputs/day_19.txt b/2017/inputs/day_19.txt
new file mode 100644
index 0000000..b4826aa
--- /dev/null
+++ b/2017/inputs/day_19.txt
@@ -0,0 +1,201 @@
+ |
+ +-----------------------+ +-------------------------------------------------------------------------------------------+
+ | | | | |
+ +-------------------|-----------------------|-----------------------+ +-----------------------------------------------------------------------|-----+ |
+ | | | | | | |
+ +-----------+ | +---------------------------------|-------------------------+ | | |
+ | | | | | | | | |
+ | +-----+ | | | | +---------------------|---------------------------------------+ | | |
+ | | | | | | | | | | | | |
+ | | | | +---|-------+ +---------------------------|---------------------------------------------------------------------|-----|-------------+
+ | | | | | | | | | | | | |
+ +-------|-------------------------------|-+ +-+ | | | +---------------------+ +-+ | +-----------------------+ +-------------+
+ | | | | | | | | | | | | | | | | | | | | |
+ | +---|---------|-----------------------|---|---|---|---------------|-----------------+ | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | |
+ | | | +-|-----+ | | | | | | | | +-------------------------------------|-----------------------------------------|-+
+ | | | | | | | | | | | | | | | | | | | | |
+ | +-------------|-----------------------|---|---|----Y------|-------|-----------------------------------------------------------+ | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | +-----------------------------------------------------------|-----|-------------------|-+ | |
+ | | | | | | | | | | | | | | | | | | | | | | |
+ | | +---------------------------|-----------|---------------|-------------------------------------------------------------------------------------|-----------------+ | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | +---------------------------+ | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ +-+ | | | | | | | | | | | | +-+ +-------------------------------------|-----------------------------------|-----+ | +-----+ | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | +-|-|-------------------|-------------|-|---------|---+ | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | +---|-+ | | | | | | | +-----|-------------|-----------|---|-------------------------------------------------------------|-|-----|-----------|-------|-|---+ | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | +-|---|---+ | | | | | | | | +-------|-----|-|---------|-------|-|-----+ | | | | | | | | +-|---+ | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | +-|---+ | +---------|---|-----|-------------------------------|-----------------------|-----------+ +-|-------|-|---+ | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | +-|---------------|-------|-----|-------------|-----|---------+ | | +-|---+ | +-------------------+ | +-------------------|---------|-+ | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | +-------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-------|---+ | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | +-|---|-|-------|-----------|-----|---------|-------|-------|-+ | | +-+ | | | | +-----------+ | | | +-+ | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | +-----------------|---|---|-|---+ | +-----------------------|-------+ +-+ | | +-|-|---|-|-------|-+ | | +-+ | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | +---|-----|-------------|---|-+ +-------|---------+ | | | | | | | | | | | | | | | | | | | | +-+ | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | +-|-|-----|---|-|-|-------------------------------------------|-----|-|-------+ | | | | +-----|---|---------+ | | +-----------|---------+ | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ +-|---|-|-|-+ | +---|---|-------------------------+ | | | | | +---|-------|---|-+ +-|-|---|-|-----------|-----------|-----|-|-----|---|-|-----+ | +---|-----|---+ | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | +-----|-------------------+ | | | | +---|---------+ | | | | | | | | | | +-------|-|-----|-----|-------+ | | | +-+ | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | +---------------------|-+ | | | | | | +-----|---+ | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | +-|-|-----|---|---|-|-|-|-|-------------------+ | | | | | | | | | +-|-----+ | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | +-|---|---------------------------|-------------+ | +---+ | | | | | | | | | | | | | | +-----|-----------|-----|-------|---|---+ | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | +---------|-|-|-----------------------|-|-----------|---------------|-----|---|---------|---|-|---|-|-|-----|-----------|-------|---+ | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | E | | | | | | | | | | | | | | |
+ | | | | | | | | | | +-----|-----------|---|---------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | +-|---|-+ | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | +-|-------------|-|-|-----|----------U----|-|---|-------|-------------|-|-|---|---+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | +---------------|---------------------------|-----|---------|-----|-------------|-----------------+ | | | | | | | | | +-+ | +-|---|-----------------+ | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | +-|-----+ | +-|-+ +---------------|-|---+ | | | | | | | | | | | | | | | | | +-------|-----------------------|-|---|---|-|-----|---------|-|---------|---------+ T | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-------------+ | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | +-----------------------+ | | | | | +---+ | | +-|-----|---|-|-|-+ | | | | | +-------|---+ +-+ +-|-|-+ | | +---+ | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | +-----------|-----|-----------|-----|-----|-----------------|-|---|-------------|---|---|---|-----|---------|---------|-------|-----------+ | +---|-|-|-|-|---|---|-----+ | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | +---+ | | | | | +-|-----|-----|-------|---------|-+ | | | | | +---|-----|---------|---------|-------------+ | | | +-----------|---|-------|-----+ | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ +---------|-----|-|-----|-------|-|-----------|-|-|-----|---|-------|-------|---|-|--D------|-|---|-------------|---------+ | +-------------|-|-----------------|-|---|-|-|-------|-------+ | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | +---------|---+ +-------|---|-------+ | | | | | | | | | | | | | | | +---|---------|---+ | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---------------|---|-|-----|-----+ | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-------+ +-+ | +-|-----|-----|-----|-|-|-------|-|-------|-|-|-|---+ | | | +-+ | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | +-|-------|-------|-----------------------------------|-+ | | | | | | | | | | | | | +---------------|---|-|-----|-|-|-------|-|-------+ | | | | +-|-|---|-+ +-+ | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | +---|-|---------|-|---------|-|---|-|-----|-----|-|-|-----+ +---------+ | | | | | | | | | +---|-|-|-|-+ | | | +-----+ | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | +-------------|-|-----------------|-----------|-|-----|-----|-----|-|-----+ | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | +-----|-|-----+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---------|---+ | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-|-+ | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | I | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | +-|---------|-----|---------------------------+ | | | | | | | | | | | | | | | +-|-------+ | | | | | | | | | | | | | | | | | | +-+ | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | +-|---|-------|---|-----|-|-----|---------------|-----|-----|-----------|---|-----------|-|-----|-----|---------------|---------|-|-|-+ | | | +-------|-------+ | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | +---|-|-+ +---------+ | | +-------|-----|-----|---------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ +-|-------|---+ | | | | | | | | +-----------------|-|---------------|---+ | | | | | | | +---|---|-----------|-|---+ | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | +---|---|-|-------------------------|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ +-|-------|---|-----|-----|-----------|-------------------------|---|-+ | | | | | | | | | | | | | | | | | | +-----|-----------|---|---|---+ | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ +-------------|-|-|-------|-----|-------|---------|---------|-------------------|-|---------+ +-|---|-----+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ +-|-------------|---------|---|-|-----|-|-------------------|-|-----|-----|---------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | +-----------|---|---+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | +-----|---|-----------|-|-|---------|-----|-|-------------|---|-------+ | | | | | | | | | | | | | | | | | | | | +---------|-|-----------|---|-+ | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | +---------|-----|---|-|-----|-----|-----|-|-|-----|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | +-|-|---|---|---|-------|-----------|-|-+ +-|-|-----+ | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | +-----|-|-+ | | | | | | | | +-----------|---|-----|-|-------|-|---|-|N|-|-----|-------|-|-----------|---|-|-----|-+ | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | +-|-|-------|-|---|-------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-----+ | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---|-------|---|-+ | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | +---|-----|-----------|-|-|-|-----|-|---|---|-+ | | | | | | | | | | +-|-|-|-+ | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | +---+ +---|-------|---------------|---|---|-------------------|-------------------|-|---|-|-|---|-|-------------------|-----|-----|-|---|---+ | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | +-----|---------------|-----------|---|-------|-----------------|-------|-------|-----------|-------|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | +-|---|---|-------------------|-----|-----|-----|-|-|-|-----------+ | | | | | | | +-|-|---+ | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | +-----|---------------|-------|---|---+ | | | | | | | +-----|-|-----|-|---|---|---|-|-|---------|---------|---------|---------+ | +-----------+ | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-|---------------|---|---|---|-|---------|-|---+ | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | +-------|-|-|-------|-------|---|---------|-------|-----------+ +-|---+ | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | +-------|---------|-----|---------|---------------------|-----|-----------|-|-----------|-+ | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | X | | | | | | | | | | | |
+ | | | | | | | | | +-----|-----|-|-|---------+ | | +-----------+ | | | | | | | | | | | | | | | +-----------+ +-|---+ | +-|-------|-+ | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | +-----------------|-|---+ | | | +-------|-|-------------|-------------|-----+ | | | | +-|---|-----|-+ | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ +---------|-----------|-----------------|---|---|-----|-+ | | | | | | | | +-----|-|-|---|-------|-----|---------------|-----|-----|-|---|-----------|-----|---------|-----+ | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | +---+ | | | | | +---------------------|-----|-----|-|-------------|-----|-----|-|-----------|-|-|-|-|---|-------------|---------|-----+ | +-----------|---------|---|-----|-----|-|---|-+ |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | +---|---|-----|---|-----|-------|-------|-----------|---------------------------|-|-|---------------------|-|-|---------------------|---+ | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | +-------|-----|-----------------+ | +-+ | | | | | | | | +-|-|---|-+ | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | +-|-----|---+ | | | | | | | | | | +-|-|-------------|-|-----|---------+ | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | +-|-----+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-+ |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ +-----|-|-|-------|---|---------|-------|---------|---|-----|-|-------------------|-------|-------------|-----|-|---------|-|---------------|---|-----------------|-------|-|---|-----------|---------+
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ +---------+ | | | | | | +-----|---|-----|-----|---|-|-------------------------|-|-|-----------|-|-----|---------|-----|-----------------|-----|-----|-|-------|-----------------|---------+
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | +---|-|-----------|-|-|-----|---------|-----|-----------|---|-|---+ | | | | | | | +-----------|-+ | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | A | | | | | | | | | | | | | | | | | | | | | | | | |
+ +-----|-----|-|---|-+ | | | +---+ +-----|---|-------------------------+ | | | | | +---------|---------------|-----------|-----|-+ | | | | | | +-|-------------|-|-|-|---|---+
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | +-----|-----------|-+ | | | | | | | | | | | +-+ | | | | | +---|---|---+ | | | | | +---+
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | +-|-----|-|-------|-----------+ | | | | | | | | | | | | | | | | | | | | | | | | | +-+ | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | +-----|-|-----------|-+ | | | | | | | +-------|-|-------------|-----|-----|-----|---------------------|-|-------|---|-|---|---|---|-----|-----|---+ |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | +---|---+ | | | | | | +-|-|---+ | | +-+ | | | | | | | | +---|---|-|---|-------|-+
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | +-------------|-+ | | +-|-----------------------------------+ | | | +---|-----+ | | | | | | | | | | | | +-|-----------+ | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ +---|-|-------|-+ | | +---|-------+ | | | +---------------------------|-----------|---|-------|-----|-----|---------------------------------|-------------------+ | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | +-------|---+ +-------------+ +---+ +-|-|-------|-------------|-|---------------------------|-+ | | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | +-------|---+ | | | | | | | | | | | +-+ +-------------------|-----+ +-+ +-----|-+ | +---+ | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | | +-----|-------------------|---------|---|-------|-|---+ | | | | | | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ +-+ +---|-----------|-----------------------------------------------------------------------|-------|-----------|-----|-----------------------------------+ | +-------------------+ +-|-+
+ | | | | | | | | | | | | | | | | | | | | | | | | | P
+ | +-------|---------+ | | +-------------|-------------------------|---------|---|---------|-------------|-------------------------+ | +-----------------+ | |
+ | | | | | | | | | | | | | | | | | | | | | | | | | |
+ | | | | | | | | +-----------------------------|-----+ | +-------|-------------|---+ | +-----|---+ | | | | |
+ | | | | | | | | | | | | | | | | | | | | | | | |
+ | +---+ | +-|-------------+ | | | +---------+ +-------+ +-------------+ +---+ | | +---+ |
+ | | | | | | | | | | | |
+ +-----+ +-----+ +-+ +-----+ +-----------------------------------------------------------------------------------+ +-----------------+
+
diff --git a/2017/inputs/day_2.txt b/2017/inputs/day_2.txt
new file mode 100644
index 0000000..f2f1f5e
--- /dev/null
+++ b/2017/inputs/day_2.txt
@@ -0,0 +1,16 @@
+493 458 321 120 49 432 433 92 54 452 41 461 388 409 263 58
+961 98 518 188 958 114 1044 881 948 590 972 398 115 116 451 492
+76 783 709 489 617 72 824 452 748 737 691 90 94 77 84 756
+204 217 90 335 220 127 302 205 242 202 259 110 118 111 200 112
+249 679 4015 106 3358 1642 228 4559 307 193 4407 3984 3546 2635 3858 924
+1151 1060 2002 168 3635 3515 3158 141 4009 3725 996 142 3672 153 134 1438
+95 600 1171 1896 174 1852 1616 928 79 1308 2016 88 80 1559 1183 107
+187 567 432 553 69 38 131 166 93 132 498 153 441 451 172 575
+216 599 480 208 224 240 349 593 516 450 385 188 482 461 635 220
+788 1263 1119 1391 1464 179 1200 621 1304 55 700 1275 226 57 43 51
+1571 58 1331 1253 60 1496 1261 1298 1500 1303 201 73 1023 582 69 339
+80 438 467 512 381 74 259 73 88 448 386 509 346 61 447 435
+215 679 117 645 137 426 195 619 268 223 792 200 720 260 303 603
+631 481 185 135 665 641 492 408 164 132 478 188 444 378 633 516
+1165 1119 194 280 223 1181 267 898 1108 124 618 1135 817 997 129 227
+404 1757 358 2293 2626 87 613 95 1658 147 75 930 2394 2349 86 385
diff --git a/2017/inputs/day_20.txt b/2017/inputs/day_20.txt
new file mode 100644
index 0000000..f249f9e
--- /dev/null
+++ b/2017/inputs/day_20.txt
@@ -0,0 +1,1000 @@
+p=<-317,1413,1507>, v=<19,-102,-108>, a=<1,-3,-3>
+p=<1639,477,-2519>, v=<-79,-102,130>, a=<-9,9,12>
+p=<613,-993,-305>, v=<-39,27,-48>, a=<-2,8,11>
+p=<1343,190,-1565>, v=<-82,31,31>, a=<1,-4,5>
+p=<735,-285,2387>, v=<-20,-64,-67>, a=<-2,8,-6>
+p=<963,456,-1888>, v=<-42,-73,88>, a=<-1,5,1>
+p=<-1659,1444,-463>, v=<-14,-25,-77>, a=<10,-5,10>
+p=<-443,-95,-1185>, v=<142,-14,81>, a=<-12,2,-2>
+p=<-2590,3249,-710>, v=<35,-30,36>, a=<10,-14,0>
+p=<-1602,-171,924>, v=<83,-50,-20>, a=<0,6,-3>
+p=<-633,2195,-458>, v=<31,-200,31>, a=<4,0,2>
+p=<-347,-49,-1976>, v=<-19,-50,151>, a=<8,9,5>
+p=<852,314,125>, v=<-56,-83,-22>, a=<-4,9,2>
+p=<-10088,3682,-5210>, v=<52,32,-38>, a=<14,-8,11>
+p=<-4019,1982,4446>, v=<-4,47,-7>, a=<7,-6,-7>
+p=<3444,-2319,-11041>, v=<-171,-89,81>, a=<4,9,14>
+p=<2390,792,2117>, v=<0,47,114>, a=<-4,-4,-10>
+p=<5661,-1318,-1666>, v=<-87,-44,-33>, a=<-5,5,5>
+p=<2856,-1912,743>, v=<-36,59,-174>, a=<-3,0,9>
+p=<4275,5447,-5461>, v=<6,-11,31>, a=<-8,-9,8>
+p=<1263,1223,980>, v=<-98,-69,-68>, a=<0,-3,-1>
+p=<1094,963,1253>, v=<-85,-105,-75>, a=<0,5,-3>
+p=<2641,-922,2124>, v=<-113,61,-142>, a=<-13,2,-3>
+p=<600,859,-398>, v=<-26,-97,-4>, a=<-3,5,5>
+p=<-128,-1533,330>, v=<-12,73,-88>, a=<3,7,9>
+p=<1419,-1507,-528>, v=<-159,29,-15>, a=<7,13,8>
+p=<574,-1299,-1100>, v=<-17,104,113>, a=<-4,0,-4>
+p=<-440,-1923,-8>, v=<-2,131,36>, a=<5,3,-5>
+p=<-1705,-1617,-226>, v=<45,42,123>, a=<0,0,-6>
+p=<708,36,4790>, v=<1,57,-48>, a=<-1,-3,-4>
+p=<2266,9745,3707>, v=<38,-101,-78>, a=<-5,-8,-1>
+p=<7320,-629,-2164>, v=<-134,-62,18>, a=<-3,4,2>
+p=<746,6097,-2544>, v=<-78,-44,-11>, a=<3,-6,4>
+p=<1563,-7678,5873>, v=<115,-13,-57>, a=<-8,11,-5>
+p=<-8146,-3232,-5147>, v=<156,-52,155>, a=<3,7,-1>
+p=<-3966,4235,1389>, v=<7,44,22>, a=<5,-8,-3>
+p=<2171,-5151,14708>, v=<21,-21,-75>, a=<-4,8,-16>
+p=<442,-1232,2730>, v=<9,-20,3>, a=<-2,5,-8>
+p=<-273,-1960,5408>, v=<-58,89,-100>, a=<5,-1,-8>
+p=<-624,-3559,247>, v=<50,137,31>, a=<-2,0,-3>
+p=<2106,-2688,1482>, v=<-82,144,-57>, a=<0,-3,0>
+p=<-2886,1147,2678>, v=<83,-44,-157>, a=<2,0,4>
+p=<1984,472,-191>, v=<-31,-3,63>, a=<-3,-1,-4>
+p=<3604,-6710,-2540>, v=<-21,123,-32>, a=<-8,9,9>
+p=<5305,1390,781>, v=<-182,103,-15>, a=<-1,-11,-1>
+p=<-527,256,-1055>, v=<-22,-107,39>, a=<3,7,0>
+p=<7708,1660,5803>, v=<-131,-19,-103>, a=<-11,-3,-8>
+p=<-5981,-2228,-6671>, v=<68,-15,23>, a=<11,7,16>
+p=<1356,-1869,-687>, v=<39,68,25>, a=<-6,0,0>
+p=<-1052,4725,937>, v=<38,-66,54>, a=<0,-7,-6>
+p=<-1668,10101,-631>, v=<2,-229,23>, a=<4,-9,0>
+p=<-1906,-4165,4255>, v=<-33,-24,37>, a=<7,12,-13>
+p=<-2760,-2373,-2325>, v=<-46,57,40>, a=<10,2,3>
+p=<516,-6601,-1625>, v=<69,63,44>, a=<-6,12,1>
+p=<1062,-6279,-4929>, v=<6,66,17>, a=<-3,11,11>
+p=<1636,-2387,-1205>, v=<-87,72,58>, a=<2,1,-1>
+p=<3099,3807,-117>, v=<-71,-169,77>, a=<-9,-3,-7>
+p=<1009,-3185,-991>, v=<-1,39,-47>, a=<-5,13,10>
+p=<-3228,368,1954>, v=<142,32,-62>, a=<3,-5,-4>
+p=<1180,1793,-896>, v=<-20,-173,-2>, a=<-4,8,5>
+p=<-1936,7,2790>, v=<24,1,-36>, a=<8,0,-11>
+p=<-1214,-2045,3474>, v=<116,9,-132>, a=<-5,10,-5>
+p=<4619,2971,-3480>, v=<-171,-75,104>, a=<-7,-8,8>
+p=<-2088,1166,3018>, v=<112,-40,-28>, a=<0,-2,-13>
+p=<211,653,2410>, v=<21,107,-46>, a=<-3,-14,-8>
+p=<2415,1926,-1580>, v=<-75,50,34>, a=<-5,-15,5>
+p=<1538,-908,976>, v=<-54,31,26>, a=<0,0,-4>
+p=<3539,7415,1788>, v=<-18,-151,-32>, a=<-7,-7,-2>
+p=<3249,4196,-1373>, v=<-23,-25,2>, a=<-6,-8,3>
+p=<2031,-4301,1701>, v=<-41,148,-29>, a=<-2,0,-2>
+p=<2002,11678,-2475>, v=<-25,-148,85>, a=<-3,-17,0>
+p=<2350,-560,-1315>, v=<-52,64,15>, a=<-2,-3,2>
+p=<11423,-875,9878>, v=<-163,-146,-174>, a=<-13,11,-9>
+p=<1751,-5773,2469>, v=<53,156,33>, a=<-7,2,-7>
+p=<-2155,4333,-7110>, v=<51,-122,38>, a=<1,-1,12>
+p=<-5906,7123,1229>, v=<92,-84,-39>, a=<6,-9,0>
+p=<4696,-2115,113>, v=<-106,-74,-35>, a=<-3,9,2>
+p=<-1132,-4533,1322>, v=<34,36,6>, a=<0,7,-3>
+p=<1658,519,-978>, v=<-72,-26,-46>, a=<-5,-1,14>
+p=<83,-426,732>, v=<25,-35,32>, a=<-4,8,-10>
+p=<278,-1926,-1653>, v=<-52,49,79>, a=<4,10,4>
+p=<-787,-6,-183>, v=<-21,57,61>, a=<9,-7,-6>
+p=<-487,1044,612>, v=<-65,-109,32>, a=<12,5,-9>
+p=<2603,-1521,-123>, v=<-135,86,105>, a=<-5,2,-12>
+p=<-562,1044,-1188>, v=<12,-5,160>, a=<3,-8,-10>
+p=<-1715,3425,5361>, v=<-30,-42,-103>, a=<5,-4,-4>
+p=<-2803,721,-5279>, v=<-95,92,48>, a=<11,-7,7>
+p=<957,-303,-5263>, v=<-97,-107,64>, a=<4,7,6>
+p=<829,-943,-7839>, v=<-93,12,62>, a=<4,1,11>
+p=<-2883,4417,-4703>, v=<56,-40,96>, a=<2,-6,3>
+p=<2557,-6319,3889>, v=<51,147,9>, a=<-8,3,-8>
+p=<-7939,-799,-4191>, v=<82,-9,-52>, a=<10,2,11>
+p=<-7470,-439,367>, v=<120,92,9>, a=<17,-6,-2>
+p=<-2134,-94,-898>, v=<20,-115,40>, a=<6,10,0>
+p=<-478,1930,2092>, v=<20,-35,-114>, a=<0,-4,2>
+p=<1040,-1727,551>, v=<-82,28,-59>, a=<3,4,3>
+p=<-2318,-324,2069>, v=<4,63,-77>, a=<8,-4,-1>
+p=<-2249,21,-1220>, v=<73,0,18>, a=<2,0,3>
+p=<2627,-3199,-2577>, v=<17,44,113>, a=<-11,8,0>
+p=<-2732,-1796,482>, v=<-2,103,-68>, a=<10,-2,4>
+p=<441,1243,20>, v=<43,-28,83>, a=<-10,-8,-11>
+p=<1029,-1151,-764>, v=<-104,68,94>, a=<4,2,-5>
+p=<-672,-2551,97>, v=<25,153,40>, a=<3,4,-6>
+p=<1027,1714,-804>, v=<-72,-122,60>, a=<-1,-2,1>
+p=<416,1506,-50>, v=<-32,-22,16>, a=<0,-14,-1>
+p=<-1131,1623,-1103>, v=<150,-108,20>, a=<-9,-3,10>
+p=<1001,-990,-1454>, v=<-63,37,75>, a=<-2,5,6>
+p=<-418,465,403>, v=<-35,5,45>, a=<12,-8,-14>
+p=<682,-734,73>, v=<-21,120,-75>, a=<-7,-9,11>
+p=<-2343,333,-1159>, v=<140,-79,25>, a=<12,8,13>
+p=<924,421,-587>, v=<-43,3,-75>, a=<-7,-7,21>
+p=<-693,-404,293>, v=<44,24,-5>, a=<3,2,-4>
+p=<363,355,183>, v=<-58,-33,-49>, a=<4,0,5>
+p=<-5454,-1885,-2432>, v=<116,-43,149>, a=<13,12,-3>
+p=<342,-793,-941>, v=<-17,15,23>, a=<0,2,2>
+p=<-456,1139,-920>, v=<21,-22,0>, a=<0,-3,4>
+p=<-101,-4352,13169>, v=<23,75,-150>, a=<-1,2,-10>
+p=<-3122,360,-2677>, v=<83,-49,-84>, a=<0,2,8>
+p=<-7093,-2072,800>, v=<51,-24,78>, a=<7,4,-5>
+p=<6397,1082,4505>, v=<8,88,-39>, a=<-9,-6,-4>
+p=<-63,1937,-1005>, v=<22,46,106>, a=<-1,-5,-4>
+p=<-595,1367,-910>, v=<-42,-56,45>, a=<3,1,-1>
+p=<2578,-11667,-1670>, v=<-28,-25,-52>, a=<-2,17,5>
+p=<-3425,-215,4501>, v=<138,8,41>, a=<-2,0,-11>
+p=<-4625,-135,-939>, v=<27,-77,13>, a=<7,5,1>
+p=<479,1913,2117>, v=<-17,-42,-66>, a=<0,-1,0>
+p=<-3015,2181,-3524>, v=<-9,-40,-70>, a=<7,-2,12>
+p=<-2280,-5424,436>, v=<137,74,108>, a=<-4,7,-8>
+p=<6240,-669,-2024>, v=<-54,-7,-89>, a=<-10,2,10>
+p=<-3885,-84,-8054>, v=<51,-11,50>, a=<5,1,14>
+p=<-3345,6336,2956>, v=<2,-8,-69>, a=<7,-13,-2>
+p=<-3465,-1449,-779>, v=<6,-43,-22>, a=<7,6,3>
+p=<-1170,-8754,-1094>, v=<162,92,-27>, a=<-8,13,4>
+p=<6195,2541,886>, v=<-68,10,-31>, a=<-9,-6,0>
+p=<5625,3321,-2279>, v=<-142,-78,90>, a=<-3,-2,-1>
+p=<146,1150,-504>, v=<-34,-42,20>, a=<4,-8,3>
+p=<-64,-2,1992>, v=<16,-63,-110>, a=<-1,10,-9>
+p=<-1138,334,-24>, v=<99,0,-7>, a=<0,-4,1>
+p=<2156,-146,354>, v=<-104,14,-19>, a=<-11,0,-2>
+p=<2224,501,-708>, v=<-92,-21,-46>, a=<0,0,6>
+p=<664,405,960>, v=<98,33,22>, a=<-10,-4,-5>
+p=<1144,2061,-2388>, v=<-47,-36,149>, a=<0,-4,-4>
+p=<-212,-2043,4500>, v=<-78,-65,-113>, a=<7,12,-6>
+p=<1084,4569,-4644>, v=<-57,-28,-32>, a=<1,-13,18>
+p=<-824,5649,-4296>, v=<60,-48,-34>, a=<-2,-15,17>
+p=<88,-591,-3132>, v=<22,-13,30>, a=<-2,3,8>
+p=<2836,1917,-696>, v=<-30,-105,116>, a=<-7,2,-7>
+p=<-4061,279,753>, v=<73,-63,7>, a=<7,4,-3>
+p=<4439,579,-422>, v=<-46,-23,-24>, a=<-10,0,3>
+p=<-2060,11364,-3131>, v=<-39,-107,-127>, a=<6,-14,13>
+p=<6751,672,-9962>, v=<-119,64,97>, a=<-5,-5,12>
+p=<-575,7206,-6068>, v=<-33,-100,13>, a=<3,-7,10>
+p=<2197,2553,-4418>, v=<2,-78,-71>, a=<-4,0,12>
+p=<4045,243,-5342>, v=<31,9,-26>, a=<-9,-1,11>
+p=<358,122,480>, v=<-55,-68,25>, a=<4,8,-8>
+p=<-1021,-158,1908>, v=<156,12,-122>, a=<-11,0,-2>
+p=<939,283,-283>, v=<1,33,-48>, a=<-9,-7,9>
+p=<519,-438,1425>, v=<31,107,-35>, a=<-9,-10,-9>
+p=<904,-641,-388>, v=<-139,54,12>, a=<10,-1,2>
+p=<6864,2454,-491>, v=<65,22,15>, a=<-17,-6,0>
+p=<-272,1750,-3947>, v=<57,11,-9>, a=<-3,-4,8>
+p=<1168,-6842,3589>, v=<78,164,36>, a=<-7,3,-9>
+p=<-2224,4070,-347>, v=<-80,21,-105>, a=<9,-9,7>
+p=<-1872,2102,-875>, v=<41,66,-39>, a=<1,-8,4>
+p=<-5120,-3610,1701>, v=<126,63,-4>, a=<2,3,-3>
+p=<-7936,774,-2043>, v=<115,-74,47>, a=<8,3,1>
+p=<-5770,1949,-1810>, v=<144,-4,67>, a=<16,-10,3>
+p=<1032,524,-993>, v=<66,-119,54>, a=<-12,9,0>
+p=<-241,904,-2703>, v=<23,-39,74>, a=<-1,-1,7>
+p=<1659,-2535,52>, v=<73,32,-11>, a=<-16,10,1>
+p=<-469,790,-214>, v=<-55,97,-77>, a=<8,-14,9>
+p=<-13,-179,356>, v=<31,18,-57>, a=<-3,-1,4>
+p=<899,-312,-2000>, v=<-27,-45,127>, a=<-2,6,-2>
+p=<1545,581,-727>, v=<-11,38,40>, a=<-7,-7,0>
+p=<-3167,1702,-43>, v=<147,49,4>, a=<2,-14,0>
+p=<-526,106,-3919>, v=<8,-17,38>, a=<2,1,17>
+p=<1381,-388,-404>, v=<-175,24,29>, a=<7,2,2>
+p=<-144,-1008,-374>, v=<5,163,59>, a=<2,-12,-4>
+p=<-4344,-3608,1616>, v=<45,54,-4>, a=<6,4,-3>
+p=<-1647,-787,4189>, v=<-10,-53,25>, a=<4,5,-10>
+p=<3965,7621,-1235>, v=<-35,-45,34>, a=<-4,-9,0>
+p=<-6925,-515,4255>, v=<27,33,-26>, a=<9,-1,-5>
+p=<-3361,-7715,-3737>, v=<76,48,122>, a=<1,9,-1>
+p=<4829,5857,-1217>, v=<-96,-107,15>, a=<-2,-3,1>
+p=<1877,-1469,-4079>, v=<-51,41,39>, a=<0,0,4>
+p=<4584,-3664,7121>, v=<124,69,-87>, a=<-17,3,-9>
+p=<4708,-719,1014>, v=<-8,54,-82>, a=<-9,-2,3>
+p=<-4530,3249,1665>, v=<-46,22,73>, a=<12,-8,-8>
+p=<361,-798,851>, v=<-116,55,25>, a=<10,-1,-8>
+p=<-2177,1209,-355>, v=<82,-66,16>, a=<4,0,0>
+p=<784,-573,1544>, v=<-54,52,-23>, a=<1,-2,-7>
+p=<1639,-879,-436>, v=<-73,-121,68>, a=<-2,18,-5>
+p=<1297,1317,-166>, v=<-54,-15,-4>, a=<-2,-6,1>
+p=<3466,1938,-2011>, v=<-70,-78,13>, a=<-13,-3,10>
+p=<-2096,1173,-1561>, v=<11,-83,121>, a=<11,2,-4>
+p=<-548,2163,1724>, v=<-75,-119,-109>, a=<11,0,1>
+p=<469,-2427,1067>, v=<11,3,-63>, a=<-4,14,0>
+p=<919,57,3083>, v=<-33,-78,-118>, a=<-2,8,-6>
+p=<947,-909,986>, v=<-77,0,-36>, a=<1,10,-6>
+p=<609,-857,-925>, v=<-79,73,20>, a=<5,-1,7>
+p=<-4448,-1323,-14360>, v=<54,34,149>, a=<3,0,11>
+p=<1636,4332,-3557>, v=<78,-71,-68>, a=<-6,-2,8>
+p=<-2420,-12321,6739>, v=<2,56,88>, a=<3,13,-13>
+p=<1636,6477,-944>, v=<-42,34,-35>, a=<0,-10,3>
+p=<8812,2148,-5273>, v=<-26,45,96>, a=<-10,-5,2>
+p=<-587,-3195,-14945>, v=<-85,22,84>, a=<5,3,15>
+p=<6394,-3429,3346>, v=<36,88,15>, a=<-10,0,-5>
+p=<-1958,2401,204>, v=<102,-119,-34>, a=<5,-7,3>
+p=<-1090,266,1569>, v=<55,-19,-109>, a=<3,0,0>
+p=<2574,-921,907>, v=<-139,58,-86>, a=<-6,1,3>
+p=<-2718,-298,501>, v=<59,6,-57>, a=<18,2,3>
+p=<-219,-1950,998>, v=<23,94,-40>, a=<-1,6,-4>
+p=<3407,-809,1474>, v=<-116,35,-89>, a=<-17,3,-2>
+p=<-541,-1670,-661>, v=<-14,29,41>, a=<7,12,1>
+p=<-485,451,1803>, v=<-18,-25,-75>, a=<7,-1,-7>
+p=<796,1109,1586>, v=<3,-132,-82>, a=<-8,7,-4>
+p=<5,-438,2104>, v=<22,76,-59>, a=<-3,-6,-12>
+p=<2770,724,137>, v=<-138,8,74>, a=<-8,-8,-11>
+p=<1335,-935,1586>, v=<-133,59,-52>, a=<5,1,-8>
+p=<-600,-494,17>, v=<0,26,-10>, a=<4,0,1>
+p=<-73,1376,-1547>, v=<-13,42,37>, a=<2,-14,6>
+p=<-2198,1750,-1088>, v=<85,-124,10>, a=<5,2,6>
+p=<-955,2741,1118>, v=<87,-214,-96>, a=<0,-6,-1>
+p=<79,398,260>, v=<-1,11,0>, a=<-1,-8,-4>
+p=<-394,112,-873>, v=<90,55,13>, a=<-9,-11,11>
+p=<750,-251,-1390>, v=<-2,-32,72>, a=<-11,9,9>
+p=<-933,-625,-1511>, v=<25,68,77>, a=<10,-2,10>
+p=<-812,673,-1159>, v=<38,-38,153>, a=<6,-4,-8>
+p=<-2490,1276,508>, v=<17,-16,112>, a=<5,-2,-9>
+p=<730,-1902,-4252>, v=<18,-62,21>, a=<-3,9,9>
+p=<-1678,6904,3168>, v=<17,-72,-41>, a=<3,-12,-5>
+p=<-40,-432,-3034>, v=<-56,132,50>, a=<4,-8,4>
+p=<2980,-2943,13263>, v=<-88,-2,-129>, a=<0,5,-15>
+p=<8216,3432,-5165>, v=<-67,-32,-42>, a=<-10,-4,11>
+p=<-2188,11252,-4927>, v=<64,-87,-49>, a=<0,-14,11>
+p=<-2513,-3249,3089>, v=<176,-8,-100>, a=<-6,7,0>
+p=<-5055,223,-4289>, v=<2,24,-22>, a=<10,-2,10>
+p=<-3722,1370,-2274>, v=<7,35,-7>, a=<7,-5,5>
+p=<9201,8581,1004>, v=<-55,-80,114>, a=<-9,-7,-7>
+p=<-315,469,-6640>, v=<-51,-52,-30>, a=<3,2,10>
+p=<5886,-19772,1433>, v=<-70,127,63>, a=<-4,19,-5>
+p=<4716,7333,-7264>, v=<120,12,26>, a=<-12,-10,8>
+p=<2571,4213,-7108>, v=<75,-108,42>, a=<-7,0,7>
+p=<2688,7060,-946>, v=<12,39,-36>, a=<-4,-11,3>
+p=<3195,-4523,-5548>, v=<-41,116,-38>, a=<-2,0,9>
+p=<16182,20203,8375>, v=<-134,-78,-175>, a=<-14,-22,-2>
+p=<-8583,4213,3851>, v=<41,-28,-99>, a=<9,-4,0>
+p=<-29,-291,-717>, v=<-1,26,133>, a=<1,0,-11>
+p=<-1487,-747,-663>, v=<140,90,44>, a=<-2,-4,2>
+p=<-77,-1047,129>, v=<29,63,-48>, a=<-3,4,6>
+p=<1,627,-9>, v=<-62,-5,-4>, a=<10,-7,1>
+p=<-689,225,1479>, v=<28,-4,-89>, a=<5,-2,-5>
+p=<3651,9977,-1851>, v=<-74,-16,28>, a=<-1,-12,1>
+p=<-2004,-10303,2127>, v=<-9,4,-54>, a=<3,13,0>
+p=<1389,4088,-3060>, v=<104,15,-1>, a=<-7,-6,4>
+p=<11256,-2971,-2007>, v=<-129,36,52>, a=<-8,2,0>
+p=<6147,-787,12696>, v=<-98,60,-145>, a=<-3,-2,-9>
+p=<8994,6467,10551>, v=<-51,-186,110>, a=<-9,1,-19>
+p=<2832,3035,2322>, v=<107,62,41>, a=<-9,-7,-5>
+p=<-11559,7286,-5244>, v=<116,-47,-45>, a=<9,-7,9>
+p=<5991,-8704,8679>, v=<-94,-17,-2>, a=<-3,12,-11>
+p=<4718,-4023,8441>, v=<-136,19,-128>, a=<-1,7,-9>
+p=<4625,-861,-1262>, v=<-69,77,73>, a=<-5,-3,-2>
+p=<589,3578,-416>, v=<58,-10,64>, a=<-7,-12,-4>
+p=<1141,-2678,1217>, v=<-50,34,29>, a=<0,7,-7>
+p=<3211,1600,2988>, v=<-44,4,-60>, a=<-8,-6,-6>
+p=<-2056,-33,-1727>, v=<5,51,13>, a=<7,-4,5>
+p=<-3476,6358,-3757>, v=<96,49,73>, a=<1,-16,3>
+p=<2476,-4275,-99>, v=<64,40,-29>, a=<-9,6,2>
+p=<9885,2111,1265>, v=<-47,-86,-41>, a=<-17,1,0>
+p=<-10544,1150,955>, v=<132,121,-31>, a=<13,-10,0>
+p=<-717,-338,-6640>, v=<-41,57,54>, a=<4,-3,10>
+p=<-1306,3785,-502>, v=<-22,-124,-32>, a=<4,0,3>
+p=<-3941,-2105,-5090>, v=<79,-62,-12>, a=<3,8,11>
+p=<-3352,4405,-4067>, v=<108,-32,67>, a=<0,-7,4>
+p=<403,-1972,-1042>, v=<-28,84,-34>, a=<1,-1,5>
+p=<2153,884,-496>, v=<11,69,-68>, a=<-6,-7,6>
+p=<-264,-3603,2640>, v=<26,104,-76>, a=<-1,0,0>
+p=<-754,4587,1100>, v=<22,-58,4>, a=<0,-4,-2>
+p=<4321,-3078,-6425>, v=<93,125,-33>, a=<-12,-2,12>
+p=<-1419,387,-8280>, v=<41,26,92>, a=<0,-2,8>
+p=<681,4902,3760>, v=<-55,-49,0>, a=<2,-5,-6>
+p=<1451,-7348,-10450>, v=<-59,-5,118>, a=<1,12,10>
+p=<4286,2802,-7265>, v=<-122,83,-45>, a=<0,-9,14>
+p=<1337,5510,-5238>, v=<7,-83,58>, a=<-3,-6,7>
+p=<6297,1232,8216>, v=<-89,-25,-184>, a=<-7,-1,-5>
+p=<787,3206,2183>, v=<42,-63,4>, a=<-5,-4,-6>
+p=<-941,3017,-3568>, v=<8,-112,147>, a=<2,0,-1>
+p=<4027,3557,-679>, v=<-134,-104,68>, a=<-1,-2,-3>
+p=<4864,-1438,-2137>, v=<31,67,-46>, a=<-15,-1,9>
+p=<325,164,754>, v=<-74,3,-4>, a=<7,-4,-13>
+p=<610,524,-201>, v=<-75,-22,20>, a=<2,-6,0>
+p=<-215,224,699>, v=<-9,-36,-15>, a=<5,2,-10>
+p=<-495,1334,-1331>, v=<30,-136,133>, a=<3,0,0>
+p=<-390,-6,-861>, v=<25,9,130>, a=<2,-2,-8>
+p=<-595,729,-116>, v=<-4,-59,6>, a=<11,-3,1>
+p=<1360,804,-56>, v=<-139,-72,0>, a=<0,-2,1>
+p=<90,359,-591>, v=<-78,11,92>, a=<12,-9,-6>
+p=<-620,-1566,-231>, v=<48,99,23>, a=<2,10,0>
+p=<-1355,1069,-1321>, v=<94,-126,110>, a=<7,3,4>
+p=<699,-1699,-4607>, v=<5,86,93>, a=<-3,-1,9>
+p=<2056,3131,-329>, v=<-90,8,-141>, a=<0,-12,13>
+p=<-3602,1291,407>, v=<36,-44,-53>, a=<10,-1,3>
+p=<-267,2717,-1870>, v=<83,-142,82>, a=<-6,2,0>
+p=<-704,1636,3903>, v=<6,-47,-109>, a=<2,-2,-5>
+p=<-1946,1429,1626>, v=<0,22,-70>, a=<7,-7,0>
+p=<156,4594,673>, v=<33,8,-18>, a=<-2,-7,0>
+p=<3116,1597,3966>, v=<-28,-6,-31>, a=<-3,-2,-4>
+p=<10812,5334,1672>, v=<-27,-126,-64>, a=<-14,-1,1>
+p=<1414,524,2190>, v=<75,23,131>, a=<-6,-2,-10>
+p=<5336,9663,-6357>, v=<26,-91,58>, a=<-9,-9,6>
+p=<4300,-438,-12758>, v=<73,-46,22>, a=<-10,3,17>
+p=<3967,-3546,-918>, v=<-70,0,44>, a=<-2,5,-1>
+p=<6224,10440,3670>, v=<-112,78,-23>, a=<-3,-19,-4>
+p=<7334,2707,1783>, v=<-66,-55,-48>, a=<-7,-1,0>
+p=<1007,10514,-3175>, v=<-47,-19,86>, a=<1,-14,0>
+p=<-2289,2879,3134>, v=<87,43,-47>, a=<-1,-8,-3>
+p=<1279,9407,-6930>, v=<157,-194,53>, a=<-12,-6,10>
+p=<943,-8481,-1938>, v=<-80,35,-4>, a=<3,14,4>
+p=<-7969,4127,-738>, v=<50,37,-58>, a=<12,-10,5>
+p=<2019,1112,5886>, v=<-99,-85,-7>, a=<2,3,-13>
+p=<4861,6767,-4438>, v=<-137,5,34>, a=<-2,-16,8>
+p=<6427,909,3218>, v=<-56,72,10>, a=<-11,-7,-8>
+p=<1758,2446,-4960>, v=<45,-146,112>, a=<-7,4,4>
+p=<4165,-1469,2000>, v=<-128,124,-128>, a=<-1,-5,4>
+p=<1113,-1854,63>, v=<-47,6,-29>, a=<-3,13,3>
+p=<-1495,-30,2031>, v=<65,28,-84>, a=<3,-3,-5>
+p=<-1055,-998,1583>, v=<-39,148,-56>, a=<12,-10,-5>
+p=<-2071,-654,2647>, v=<135,-1,-216>, a=<-1,5,6>
+p=<769,10,2767>, v=<-51,0,-11>, a=<0,0,-19>
+p=<-1047,3450,943>, v=<20,-45,-16>, a=<5,-20,-5>
+p=<-679,-814,1511>, v=<31,-59,-94>, a=<1,13,0>
+p=<17,-1334,-273>, v=<-4,-18,-42>, a=<0,12,7>
+p=<521,802,-1201>, v=<7,27,84>, a=<-5,-9,-1>
+p=<1041,-686,-737>, v=<-68,69,106>, a=<0,-3,-7>
+p=<5465,-618,2857>, v=<-66,17,-74>, a=<-4,0,0>
+p=<4344,-1207,-15402>, v=<-134,91,75>, a=<1,-3,17>
+p=<-1375,-181,-4002>, v=<-3,-14,87>, a=<2,1,1>
+p=<15288,-9263,3256>, v=<-71,69,-26>, a=<-17,9,-3>
+p=<-6733,-6755,2914>, v=<21,120,22>, a=<8,3,-5>
+p=<88,1567,8025>, v=<17,18,-54>, a=<-1,-3,-8>
+p=<2026,1168,-2577>, v=<-34,-30,30>, a=<-1,0,2>
+p=<-104,1351,-1305>, v=<59,-36,-21>, a=<-4,-1,5>
+p=<2137,1108,-738>, v=<-52,-55,28>, a=<-2,1,0>
+p=<3730,-2807,5013>, v=<29,90,-73>, a=<-12,1,-8>
+p=<2299,-971,1341>, v=<-86,78,-49>, a=<0,-3,0>
+p=<-939,-4363,2031>, v=<35,140,-73>, a=<0,1,0>
+p=<265,2329,5083>, v=<-66,-41,-95>, a=<4,-3,-6>
+p=<-1009,-261,8765>, v=<52,-21,-38>, a=<-1,2,-19>
+p=<2393,1125,2717>, v=<-84,-56,-83>, a=<0,1,-1>
+p=<1035,1125,-3989>, v=<8,2,84>, a=<-3,-3,4>
+p=<-85,4961,7253>, v=<-39,-164,-71>, a=<3,-1,-13>
+p=<6201,-3075,7757>, v=<-191,123,-60>, a=<-2,-1,-15>
+p=<300,-160,-566>, v=<-5,-6,-76>, a=<-2,2,15>
+p=<2281,-1672,-706>, v=<-124,42,84>, a=<-5,10,-5>
+p=<-2836,323,-251>, v=<159,-3,44>, a=<6,-3,-4>
+p=<2169,-573,-706>, v=<-71,31,54>, a=<-11,1,-1>
+p=<1511,-1259,1527>, v=<-9,95,-38>, a=<-13,-1,-10>
+p=<-330,-937,-2071>, v=<-50,-18,84>, a=<10,11,8>
+p=<13,386,1457>, v=<-7,15,-108>, a=<1,-6,0>
+p=<-953,1163,1331>, v=<-28,-33,-144>, a=<13,-7,6>
+p=<-799,-1490,246>, v=<126,149,1>, a=<-9,-6,-3>
+p=<90,-930,1177>, v=<10,64,-43>, a=<-2,0,-6>
+p=<-1763,-994,1921>, v=<95,80,12>, a=<0,-3,-11>
+p=<-1155,-709,-834>, v=<73,-25,67>, a=<-1,6,-2>
+p=<1429,-405,1959>, v=<-33,79,-90>, a=<-4,-6,-1>
+p=<4418,1330,2934>, v=<-78,-60,33>, a=<-4,1,-8>
+p=<-3239,4306,-1902>, v=<57,52,93>, a=<3,-12,-2>
+p=<-2929,-5149,4949>, v=<-65,-11,-160>, a=<10,11,0>
+p=<-511,-778,-6149>, v=<-47,40,22>, a=<4,-1,11>
+p=<5162,4306,-2677>, v=<-38,-188,38>, a=<-8,3,3>
+p=<-1631,-8674,2819>, v=<130,172,-108>, a=<-5,12,0>
+p=<-1761,3091,-1250>, v=<0,-105,8>, a=<5,-1,3>
+p=<-1631,-42,-7022>, v=<-32,110,122>, a=<7,-8,11>
+p=<150,-5333,3664>, v=<-33,3,8>, a=<2,15,-11>
+p=<6923,-3578,-418>, v=<-118,165,57>, a=<-11,-2,-3>
+p=<8873,5795,-5189>, v=<-166,-128,119>, a=<-13,-7,6>
+p=<-2125,2103,-2628>, v=<41,-40,115>, a=<3,-3,-1>
+p=<-2543,858,5229>, v=<21,-7,-67>, a=<3,-1,-5>
+p=<-4668,3476,-3917>, v=<-74,-84,132>, a=<12,-1,-1>
+p=<-8357,6332,-7793>, v=<17,-63,36>, a=<13,-7,11>
+p=<3125,665,3538>, v=<-65,-76,-2>, a=<-1,3,-5>
+p=<-6384,-14838,5203>, v=<59,58,-104>, a=<6,18,-2>
+p=<-908,3810,-1753>, v=<-51,67,8>, a=<4,-9,2>
+p=<-1722,-6180,-6082>, v=<-48,-43,49>, a=<5,11,6>
+p=<-3054,1368,-4565>, v=<83,-38,-49>, a=<0,0,9>
+p=<-2373,1080,365>, v=<-31,-24,53>, a=<12,-2,-6>
+p=<-4430,2169,-614>, v=<51,53,86>, a=<13,-13,-5>
+p=<-924,-3134,591>, v=<79,-14,-49>, a=<-3,18,2>
+p=<-1874,514,-3988>, v=<-1,-26,32>, a=<10,0,18>
+p=<-145,-1747,4486>, v=<8,43,-114>, a=<0,5,-12>
+p=<653,-2032,2320>, v=<-34,108,-70>, a=<0,0,-5>
+p=<881,2243,1294>, v=<-6,-37,-26>, a=<-4,-8,-4>
+p=<-2425,-1101,-1480>, v=<88,-11,70>, a=<4,7,1>
+p=<-2919,1578,1256>, v=<194,-32,46>, a=<-4,-5,-11>
+p=<-2634,856,2320>, v=<-1,-24,-50>, a=<14,-2,-7>
+p=<144,-1759,161>, v=<26,100,-4>, a=<-6,7,-2>
+p=<1464,-673,437>, v=<-32,55,-27>, a=<-14,0,-2>
+p=<72,1133,65>, v=<-20,-37,4>, a=<2,-9,-2>
+p=<-444,-943,-577>, v=<75,19,-53>, a=<-6,9,15>
+p=<-4278,-11885,3366>, v=<-11,163,56>, a=<7,9,-8>
+p=<3984,5233,8190>, v=<0,76,-4>, a=<-6,-12,-12>
+p=<5460,-4091,8892>, v=<-41,39,-5>, a=<-6,4,-13>
+p=<150,-2147,1692>, v=<-60,-52,-27>, a=<3,6,-1>
+p=<-2874,1183,-576>, v=<61,133,-75>, a=<1,-9,5>
+p=<-1956,-1103,1656>, v=<128,104,11>, a=<-4,-4,-3>
+p=<186,-3893,4752>, v=<50,15,-38>, a=<-3,5,-5>
+p=<-591,7845,4320>, v=<-13,-93,-43>, a=<2,-10,-6>
+p=<1889,-5082,-1012>, v=<-29,148,-63>, a=<-2,1,6>
+p=<1858,3040,-2283>, v=<100,-34,74>, a=<-10,-4,0>
+p=<-3691,1862,-299>, v=<103,132,-102>, a=<1,-12,7>
+p=<-6853,2141,1592>, v=<109,-53,13>, a=<7,-1,-4>
+p=<6663,1769,9497>, v=<-55,23,-146>, a=<-10,-5,-10>
+p=<-5309,-4880,2885>, v=<105,126,4>, a=<3,1,-5>
+p=<3021,-8416,6149>, v=<-70,125,-22>, a=<-1,7,-9>
+p=<3949,1547,1981>, v=<-5,21,84>, a=<-11,-6,-12>
+p=<5093,156,1487>, v=<-76,-47,22>, a=<-9,3,-6>
+p=<6094,2899,-5455>, v=<-74,-112,127>, a=<-12,0,6>
+p=<6523,-4615,395>, v=<-131,96,-17>, a=<-9,6,0>
+p=<-2486,1820,-2023>, v=<94,-84,130>, a=<0,1,-4>
+p=<-4028,1467,2219>, v=<128,-43,-17>, a=<10,-4,-11>
+p=<-1472,531,-5062>, v=<-14,9,150>, a=<10,-4,14>
+p=<-608,-954,-1948>, v=<-43,6,110>, a=<8,5,0>
+p=<-3921,1247,5039>, v=<-33,-106,51>, a=<9,4,-12>
+p=<-9267,1214,-175>, v=<61,14,-80>, a=<13,-3,5>
+p=<2646,4481,-6313>, v=<23,-34,-64>, a=<-6,-6,15>
+p=<996,-2548,-3145>, v=<-63,-93,61>, a=<2,10,2>
+p=<-786,-6277,-373>, v=<-26,-14,-40>, a=<3,12,3>
+p=<-2898,-8323,-2122>, v=<157,150,47>, a=<-4,6,1>
+p=<4098,9167,-2617>, v=<-89,-57,113>, a=<-2,-13,-2>
+p=<-225,1808,3752>, v=<42,13,-63>, a=<-2,-4,-3>
+p=<-4219,1852,5263>, v=<73,-68,-70>, a=<6,0,-9>
+p=<-4597,-119,6667>, v=<101,33,-80>, a=<5,-2,-12>
+p=<4637,-3521,2887>, v=<-157,-93,-108>, a=<-1,16,0>
+p=<1505,-4304,538>, v=<-41,62,7>, a=<-1,7,-2>
+p=<-4737,3953,180>, v=<127,-44,-8>, a=<9,-13,0>
+p=<-2154,-1066,-4440>, v=<81,-3,179>, a=<2,5,3>
+p=<2025,-457,4380>, v=<-8,-109,-87>, a=<-8,12,-11>
+p=<870,1916,1125>, v=<-118,-2,-31>, a=<7,-8,-2>
+p=<-33,1076,4338>, v=<-9,-94,-195>, a=<1,4,-1>
+p=<3726,1664,-1143>, v=<-122,43,-22>, a=<-5,-11,7>
+p=<-3855,-142,3645>, v=<85,-14,-19>, a=<9,2,-14>
+p=<-3330,-268,-975>, v=<137,-96,36>, a=<2,10,1>
+p=<3096,4079,2280>, v=<-4,-105,-20>, a=<-13,-8,-8>
+p=<738,943,775>, v=<-36,0,-63>, a=<-7,-16,-2>
+p=<-437,-727,-595>, v=<54,123,63>, a=<-2,-8,0>
+p=<633,-157,-1665>, v=<-86,-33,170>, a=<4,10,0>
+p=<-312,-262,-110>, v=<-8,49,-13>, a=<7,-3,5>
+p=<-897,1478,-1095>, v=<67,-92,113>, a=<4,-9,0>
+p=<548,-502,880>, v=<-61,73,-101>, a=<1,-3,3>
+p=<-957,-77,-260>, v=<18,3,-20>, a=<14,2,9>
+p=<23,-1767,370>, v=<-25,128,-50>, a=<4,10,3>
+p=<9335,-1502,-1376>, v=<-94,46,109>, a=<-12,0,-4>
+p=<-89,-8910,-1472>, v=<19,162,13>, a=<-1,7,2>
+p=<1431,402,7824>, v=<-45,-30,-30>, a=<0,1,-13>
+p=<3607,-1854,-3216>, v=<-80,90,-15>, a=<-2,-2,7>
+p=<-1431,-1856,4713>, v=<-152,52,-127>, a=<10,0,0>
+p=<1418,-8072,-4870>, v=<56,30,132>, a=<-5,10,0>
+p=<-5020,-6592,-2539>, v=<21,-67,12>, a=<6,13,3>
+p=<1418,6284,-4574>, v=<-20,-16,-85>, a=<-1,-8,11>
+p=<-1357,3879,-11493>, v=<36,30,-31>, a=<0,-7,18>
+p=<4779,-2196,-6490>, v=<34,-13,-96>, a=<-9,4,15>
+p=<405,8280,-820>, v=<63,-82,135>, a=<-4,-8,-6>
+p=<-4347,2178,890>, v=<84,-42,-153>, a=<2,-1,7>
+p=<7425,936,6740>, v=<-21,11,-1>, a=<-10,-2,-10>
+p=<2030,-6060,5989>, v=<-94,68,9>, a=<2,5,-9>
+p=<-3113,1562,-3557>, v=<121,-62,20>, a=<-2,1,4>
+p=<15387,8111,-3927>, v=<-132,-11,-27>, a=<-15,-11,7>
+p=<1105,-12905,-1522>, v=<-31,139,-16>, a=<0,11,3>
+p=<-13843,4300,957>, v=<50,-22,12>, a=<17,-5,-2>
+p=<1364,970,-338>, v=<-38,-46,-67>, a=<0,1,4>
+p=<328,-9020,11539>, v=<-67,-23,-160>, a=<3,14,-8>
+p=<1441,1858,-3933>, v=<-114,-33,72>, a=<4,-1,2>
+p=<-12401,-6674,-9819>, v=<67,19,69>, a=<15,9,11>
+p=<5095,6196,567>, v=<25,-24,-16>, a=<-9,-8,0>
+p=<-4751,-4964,10125>, v=<21,27,-152>, a=<6,6,-7>
+p=<-1546,-4772,-2286>, v=<41,141,-34>, a=<1,2,8>
+p=<6784,-1538,4434>, v=<-126,-76,-129>, a=<-8,9,-2>
+p=<-1896,4454,-2356>, v=<68,-58,70>, a=<0,-7,1>
+p=<4166,296,2040>, v=<-47,-11,0>, a=<-7,0,-5>
+p=<-7306,-125,-3525>, v=<148,-33,50>, a=<11,3,7>
+p=<-4356,-8500,-3550>, v=<69,68,168>, a=<8,21,-2>
+p=<1044,-225,-1950>, v=<-95,23,39>, a=<4,-1,3>
+p=<-617,666,-1168>, v=<-14,-32,45>, a=<4,0,1>
+p=<5515,5664,-1714>, v=<-141,-83,71>, a=<-11,-17,1>
+p=<1735,-1329,-1084>, v=<50,96,52>, a=<-12,-3,0>
+p=<1101,-5305,-338>, v=<-82,-26,-62>, a=<3,14,5>
+p=<6843,1974,-4137>, v=<5,-37,-51>, a=<-16,-2,13>
+p=<-206,-91,-1046>, v=<110,-61,68>, a=<-15,12,4>
+p=<520,877,175>, v=<8,-47,-49>, a=<-9,-5,5>
+p=<520,-795,65>, v=<-112,-9,-15>, a=<11,14,1>
+p=<597,-608,-1046>, v=<-101,10,86>, a=<8,8,1>
+p=<-1702,-190,230>, v=<138,2,54>, a=<3,3,-13>
+p=<465,-1136,-1321>, v=<-29,58,87>, a=<-2,8,5>
+p=<-1152,-487,-331>, v=<94,71,39>, a=<2,-4,-2>
+p=<-1733,-1423,-1483>, v=<-61,121,34>, a=<10,-5,2>
+p=<-3583,-148,-2933>, v=<78,-8,27>, a=<5,1,7>
+p=<1292,-548,1717>, v=<-39,125,-16>, a=<-1,-8,-4>
+p=<-333,2677,842>, v=<91,-4,-33>, a=<-6,-8,0>
+p=<1542,4377,1792>, v=<-114,32,20>, a=<4,-16,-7>
+p=<2192,402,-2183>, v=<16,22,36>, a=<-8,-3,4>
+p=<1792,102,3467>, v=<32,-57,-125>, a=<-8,4,-1>
+p=<17,2502,1642>, v=<25,29,-78>, a=<-2,-10,1>
+p=<158,-2993,164>, v=<-42,8,-3>, a=<2,4,0>
+p=<4820,-3011,2756>, v=<-5,-10,36>, a=<-7,5,-6>
+p=<-3151,-4516,-1216>, v=<118,172,1>, a=<3,4,5>
+p=<-1324,1385,-1867>, v=<-46,1,54>, a=<10,-6,3>
+p=<-4012,1028,-2329>, v=<93,40,54>, a=<9,-8,5>
+p=<524,-3697,1829>, v=<31,56,32>, a=<-5,11,-11>
+p=<-7847,-3949,10230>, v=<-49,45,-93>, a=<13,3,-9>
+p=<-969,-3322,-12874>, v=<-152,-69,203>, a=<9,8,7>
+p=<-4579,2131,-1113>, v=<-57,41,69>, a=<9,-5,-2>
+p=<-1140,-6286,-9758>, v=<67,126,121>, a=<-2,2,7>
+p=<399,-8775,5271>, v=<7,16,-99>, a=<-1,11,-2>
+p=<-1390,-740,258>, v=<152,-4,-23>, a=<-6,9,1>
+p=<2276,-2742,11>, v=<-172,213,59>, a=<0,0,-8>
+p=<1522,-714,63>, v=<-107,-62,-1>, a=<-1,17,0>
+p=<-948,1236,492>, v=<-36,-86,8>, a=<16,-1,-6>
+p=<-350,-1195,895>, v=<-68,24,5>, a=<14,10,-10>
+p=<-662,1392,-106>, v=<61,-14,-30>, a=<-1,-13,6>
+p=<2744,547,1090>, v=<-82,-82,-52>, a=<-18,6,-4>
+p=<-714,508,-886>, v=<44,-79,44>, a=<2,6,4>
+p=<91,79,957>, v=<-26,53,12>, a=<3,-10,-17>
+p=<-96,1014,-1573>, v=<3,-80,140>, a=<1,-2,0>
+p=<-393,827,55>, v=<48,-63,-8>, a=<-2,-2,0>
+p=<872,-559,583>, v=<-49,57,-8>, a=<-5,-1,-8>
+p=<-30,673,231>, v=<-57,-61,-60>, a=<10,0,6>
+p=<-613,-702,1793>, v=<2,88,-70>, a=<9,-4,-16>
+p=<663,596,-253>, v=<-48,-90,26>, a=<-2,6,-1>
+p=<-394,705,481>, v=<4,30,-34>, a=<3,-10,0>
+p=<61,-1297,-1430>, v=<84,38,50>, a=<-12,8,7>
+p=<-233,1909,-163>, v=<15,-131,-33>, a=<0,0,6>
+p=<-870,348,2105>, v=<83,-42,-45>, a=<-3,3,-14>
+p=<1664,285,1755>, v=<-113,45,-35>, a=<-1,-8,-12>
+p=<-1269,1545,-415>, v=<89,-60,-30>, a=<0,-6,8>
+p=<-534,-261,1293>, v=<-1,-21,-92>, a=<5,6,0>
+p=<-135,-121,-2557>, v=<-7,44,93>, a=<2,-4,12>
+p=<1223,-415,292>, v=<-74,35,-28>, a=<-2,0,1>
+p=<824,-1430,922>, v=<-68,115,-73>, a=<1,-1,1>
+p=<-640,2303,-1594>, v=<-90,328,-227>, a=<5,-25,15>
+p=<-1065,354,-3254>, v=<-152,47,-462>, a=<10,-3,31>
+p=<2462,751,1569>, v=<346,107,226>, a=<-22,-7,-14>
+p=<-106,-2052,-2044>, v=<-16,-295,-290>, a=<4,15,15>
+p=<-2837,147,1838>, v=<-406,22,262>, a=<24,-6,-22>
+p=<2592,-1392,-608>, v=<374,-198,-87>, a=<-23,12,7>
+p=<1813,1582,-1758>, v=<259,229,-248>, a=<-18,-17,14>
+p=<-1899,1420,658>, v=<-267,200,92>, a=<16,-16,-11>
+p=<1208,-1527,-1923>, v=<172,-215,-275>, a=<-16,10,16>
+p=<2156,-2278,169>, v=<307,-326,27>, a=<-21,22,-1>
+p=<1056,-798,-2596>, v=<147,-116,-372>, a=<-9,7,28>
+p=<-1199,620,2328>, v=<-171,88,326>, a=<14,1,-26>
+p=<-2396,-657,2316>, v=<-338,-95,329>, a=<24,6,-22>
+p=<-824,587,-2484>, v=<-121,82,-353>, a=<8,-2,28>
+p=<1659,739,-2320>, v=<235,105,-333>, a=<-18,-8,23>
+p=<-2673,-573,489>, v=<-379,-75,67>, a=<25,5,0>
+p=<-1570,-2486,60>, v=<-229,-357,7>, a=<14,29,-2>
+p=<-2626,179,257>, v=<-375,24,38>, a=<23,-1,-4>
+p=<849,-331,-2900>, v=<120,-49,-417>, a=<-8,0,31>
+p=<645,1229,2673>, v=<89,177,376>, a=<-6,-14,-28>
+p=<-1480,-2064,-361>, v=<-211,-295,-55>, a=<14,21,5>
+p=<-2665,43,1552>, v=<-381,6,223>, a=<30,3,-17>
+p=<-1459,51,2649>, v=<-202,7,371>, a=<13,-3,-21>
+p=<-1482,-2729,-452>, v=<-211,-391,-64>, a=<14,24,4>
+p=<1608,2630,144>, v=<228,371,14>, a=<-16,-26,4>
+p=<1165,499,2876>, v=<163,71,411>, a=<-12,-9,-30>
+p=<2642,-695,-895>, v=<383,-101,-127>, a=<-23,1,4>
+p=<-2614,-864,-1341>, v=<-370,-122,-187>, a=<26,8,10>
+p=<-1044,729,-2321>, v=<-151,103,-328>, a=<5,-7,22>
+p=<-1018,-916,-2755>, v=<-145,-129,-388>, a=<5,8,23>
+p=<-3177,847,960>, v=<-456,120,143>, a=<30,-8,-2>
+p=<1358,1463,-2332>, v=<194,215,-332>, a=<-15,-12,23>
+p=<-1230,-3445,-695>, v=<-178,-496,-100>, a=<9,34,8>
+p=<284,229,2992>, v=<41,34,427>, a=<-4,-2,-30>
+p=<-1398,-1284,-2531>, v=<-195,-185,-358>, a=<12,18,30>
+p=<280,1690,-1795>, v=<41,241,-252>, a=<-4,-16,19>
+p=<-1556,637,2590>, v=<-215,94,374>, a=<15,-3,-25>
+p=<1970,-1629,2345>, v=<282,-237,335>, a=<-14,13,-29>
+p=<624,-2660,-1245>, v=<92,-377,-177>, a=<-6,27,12>
+p=<2472,-1297,-1889>, v=<352,-187,-272>, a=<-21,11,21>
+p=<1475,-2024,-2192>, v=<216,-292,-316>, a=<-19,18,22>
+p=<2316,-1953,720>, v=<327,-284,103>, a=<-25,21,-5>
+p=<-1493,692,-3102>, v=<-213,100,-443>, a=<14,-7,27>
+p=<1825,1169,2010>, v=<263,164,287>, a=<-18,-10,-16>
+p=<132,-416,2718>, v=<18,-59,390>, a=<-2,7,-26>
+p=<-3328,-231,203>, v=<-477,-34,36>, a=<31,4,-4>
+p=<-1458,911,-2505>, v=<-208,128,-357>, a=<16,-9,26>
+p=<-232,2726,-1244>, v=<-34,389,-177>, a=<-3,-28,9>
+p=<-2076,-2126,878>, v=<-297,-304,128>, a=<21,23,-10>
+p=<3071,-1789,-978>, v=<444,-255,-139>, a=<-32,15,6>
+p=<470,1352,2371>, v=<69,192,338>, a=<-1,-14,-19>
+p=<-366,2757,334>, v=<-51,394,48>, a=<3,-23,-2>
+p=<142,3704,-779>, v=<23,528,-111>, a=<-4,-35,6>
+p=<-2560,678,-902>, v=<-365,96,-128>, a=<26,-4,10>
+p=<-799,-1439,1718>, v=<-115,-205,245>, a=<2,16,-16>
+p=<252,-205,2964>, v=<36,-31,420>, a=<-3,2,-29>
+p=<1111,-2850,-712>, v=<159,-409,-107>, a=<-10,28,8>
+p=<-460,2649,-1121>, v=<-67,382,-159>, a=<7,-32,15>
+p=<3050,-961,419>, v=<434,-142,58>, a=<-31,13,-4>
+p=<-690,583,3314>, v=<-98,86,474>, a=<8,-6,-34>
+p=<1533,1358,-2236>, v=<218,195,-319>, a=<-15,-12,23>
+p=<2116,1539,1334>, v=<296,223,196>, a=<-23,-12,-16>
+p=<-480,-2566,1780>, v=<-70,-372,250>, a=<5,19,-14>
+p=<-157,-2633,1171>, v=<-20,-380,163>, a=<0,30,-8>
+p=<-551,2588,-222>, v=<-81,366,-28>, a=<11,-23,-1>
+p=<-2411,917,589>, v=<-341,131,85>, a=<24,-8,-6>
+p=<-889,-2793,-844>, v=<-130,-400,-122>, a=<12,24,8>
+p=<1520,-2712,-490>, v=<219,-383,-68>, a=<-12,27,6>
+p=<-1591,-1155,1957>, v=<-228,-169,282>, a=<14,15,-18>
+p=<-2439,1395,-500>, v=<-347,199,-73>, a=<28,-12,5>
+p=<-1337,172,-2489>, v=<-187,23,-355>, a=<18,3,23>
+p=<316,-2188,1642>, v=<42,-313,230>, a=<-3,21,-17>
+p=<-165,1828,-2025>, v=<-19,258,-292>, a=<1,-16,18>
+p=<-1747,1095,1978>, v=<-244,154,284>, a=<18,-12,-25>
+p=<-2666,540,-1200>, v=<-379,80,-168>, a=<25,1,8>
+p=<1683,-834,-1770>, v=<240,-119,-252>, a=<-16,5,18>
+p=<-2653,450,-388>, v=<-382,65,-56>, a=<31,3,7>
+p=<2146,-2673,-252>, v=<307,-382,-35>, a=<-25,26,-1>
+p=<-496,-2646,1797>, v=<-73,-379,258>, a=<3,24,-16>
+p=<1530,360,-3009>, v=<217,48,-423>, a=<-15,-1,30>
+p=<-640,-802,-2660>, v=<-88,-114,-376>, a=<7,7,28>
+p=<-811,1540,-2260>, v=<-116,218,-322>, a=<1,-12,22>
+p=<-2796,1328,-710>, v=<-396,191,-100>, a=<27,-13,7>
+p=<129,472,2813>, v=<24,63,404>, a=<4,-2,-26>
+p=<-1420,-2470,-1046>, v=<-201,-355,-153>, a=<21,18,6>
+p=<2451,808,-944>, v=<347,115,-138>, a=<-24,-6,11>
+p=<-40,2324,-1830>, v=<-3,330,-266>, a=<-1,-17,18>
+p=<-82,3079,1442>, v=<-10,440,210>, a=<0,-26,-10>
+p=<2698,-1471,-783>, v=<379,-209,-112>, a=<-26,16,9>
+p=<2894,-1493,-387>, v=<412,-213,-57>, a=<-28,14,-3>
+p=<1417,2516,-12>, v=<198,358,2>, a=<-17,-23,-2>
+p=<747,2897,-1186>, v=<106,417,-165>, a=<-7,-33,15>
+p=<-4,2281,-2417>, v=<-4,328,-340>, a=<6,-23,31>
+p=<1737,-1461,2393>, v=<243,-202,335>, a=<-13,18,-30>
+p=<-902,1843,-2360>, v=<-130,264,-337>, a=<11,-15,25>
+p=<-1582,20,-1857>, v=<-227,-1,-263>, a=<14,-1,23>
+p=<-1830,629,-1964>, v=<-258,85,-278>, a=<10,-8,17>
+p=<-2085,1038,-866>, v=<-292,149,-127>, a=<21,-10,8>
+p=<-1186,2355,1683>, v=<-169,335,243>, a=<11,-23,-16>
+p=<-2259,248,-2209>, v=<-324,35,-314>, a=<22,0,21>
+p=<-1283,-2116,1398>, v=<-186,-301,202>, a=<7,19,-21>
+p=<-645,-3178,1278>, v=<-90,-449,181>, a=<6,26,-15>
+p=<-1736,-2087,-1254>, v=<-249,-297,-181>, a=<17,19,14>
+p=<183,-1786,-1791>, v=<26,-249,-259>, a=<-1,19,17>
+p=<2465,-1286,-188>, v=<355,-185,-26>, a=<-24,12,4>
+p=<234,-1280,-2961>, v=<29,-180,-419>, a=<-2,13,25>
+p=<1084,1772,-2323>, v=<151,254,-331>, a=<-10,-15,23>
+p=<-33,-757,2842>, v=<-7,-110,407>, a=<1,7,-27>
+p=<-62,223,-2854>, v=<-6,30,-407>, a=<4,-2,29>
+p=<-1939,-2234,-470>, v=<-276,-318,-65>, a=<18,23,6>
+p=<-1064,-2485,1011>, v=<-154,-357,141>, a=<10,28,-5>
+p=<-2793,-281,1074>, v=<-400,-36,156>, a=<25,2,-9>
+p=<-2153,1885,362>, v=<-301,274,50>, a=<19,-19,0>
+p=<-1097,2219,-1431>, v=<-157,314,-207>, a=<11,-22,12>
+p=<1795,-2653,694>, v=<256,-382,99>, a=<-18,29,-6>
+p=<-1706,2021,-841>, v=<-238,287,-120>, a=<17,-25,10>
+p=<-163,-1743,1795>, v=<-26,-252,258>, a=<1,17,-17>
+p=<1425,1729,977>, v=<202,243,138>, a=<-13,-17,-10>
+p=<648,2109,-994>, v=<90,303,-143>, a=<-3,-19,14>
+p=<-1738,468,1971>, v=<-249,65,278>, a=<18,0,-20>
+p=<1045,1218,2731>, v=<148,175,394>, a=<-8,-11,-27>
+p=<-540,1940,-2022>, v=<-77,280,-283>, a=<5,-21,17>
+p=<-2979,1549,-239>, v=<-430,222,-34>, a=<27,-21,0>
+p=<-2598,-2175,-183>, v=<-374,-314,-26>, a=<21,19,2>
+p=<-1391,2880,-1142>, v=<-195,410,-163>, a=<9,-28,12>
+p=<-1253,-1245,2513>, v=<-182,-173,362>, a=<12,13,-22>
+p=<771,75,2400>, v=<104,11,342>, a=<-7,4,-25>
+p=<468,988,-2854>, v=<67,143,-403>, a=<1,-13,25>
+p=<-1290,2001,1041>, v=<-180,286,148>, a=<12,-22,-8>
+p=<11,-1463,2584>, v=<-4,-215,375>, a=<0,13,-30>
+p=<1672,-2459,-1046>, v=<233,-348,-149>, a=<-21,24,15>
+p=<-1973,2358,-291>, v=<-279,338,-37>, a=<21,-23,1>
+p=<327,-2775,2079>, v=<49,-396,298>, a=<-4,32,-24>
+p=<-2260,400,-2962>, v=<-327,56,-422>, a=<22,-8,28>
+p=<-431,-282,3083>, v=<-61,-39,440>, a=<1,5,-24>
+p=<-2378,1821,-1219>, v=<-331,261,-174>, a=<14,-22,18>
+p=<187,2556,-1007>, v=<26,368,-146>, a=<-2,-24,10>
+p=<1417,-2451,289>, v=<199,-350,40>, a=<-19,25,-3>
+p=<-2105,292,2336>, v=<-295,42,329>, a=<22,-1,-23>
+p=<1397,2026,1405>, v=<200,289,200>, a=<-8,-19,-11>
+p=<2364,323,-382>, v=<341,49,-58>, a=<-21,-6,4>
+p=<-256,-3019,633>, v=<-36,-430,90>, a=<2,35,-5>
+p=<3025,-164,1078>, v=<429,-21,153>, a=<-29,1,-9>
+p=<2723,-2091,-29>, v=<388,-297,-3>, a=<-29,16,-2>
+p=<197,709,2512>, v=<30,108,362>, a=<-6,-5,-25>
+p=<-1843,874,1771>, v=<-261,131,253>, a=<17,-12,-17>
+p=<2707,-769,818>, v=<382,-107,112>, a=<-26,9,-4>
+p=<164,-239,3326>, v=<20,-36,474>, a=<-5,-2,-35>
+p=<-1484,-1867,1429>, v=<-211,-271,204>, a=<12,18,-16>
+p=<-1091,-1732,-2881>, v=<-154,-248,-411>, a=<8,15,29>
+p=<2142,1579,-1231>, v=<306,223,-177>, a=<-19,-18,6>
+p=<-2977,300,945>, v=<-425,44,133>, a=<30,3,-7>
+p=<1742,1775,-36>, v=<244,253,-7>, a=<-17,-17,5>
+p=<-1594,-2674,495>, v=<-230,-382,74>, a=<13,21,-1>
+p=<-1665,2225,-1776>, v=<-240,314,-250>, a=<17,-21,17>
+p=<142,2432,-376>, v=<18,351,-52>, a=<-2,-16,2>
+p=<-950,1633,1739>, v=<-139,229,248>, a=<9,-16,-17>
+p=<-2816,-480,-893>, v=<-404,-71,-131>, a=<31,6,8>
+p=<-455,932,2810>, v=<-69,135,403>, a=<3,-13,-27>
+p=<-3730,366,-606>, v=<-532,55,-86>, a=<37,-3,4>
+p=<252,-2577,-244>, v=<36,-367,-35>, a=<-6,26,3>
+p=<801,-2233,-1237>, v=<112,-315,-174>, a=<-8,27,13>
+p=<2442,-462,1909>, v=<350,-65,270>, a=<-22,5,-12>
+p=<-2324,1403,-1040>, v=<-332,203,-139>, a=<22,-13,12>
+p=<-2533,1295,-1541>, v=<-361,183,-221>, a=<25,-11,17>
+p=<-1512,-932,1936>, v=<-216,-134,276>, a=<18,9,-18>
+p=<2274,1583,-1494>, v=<319,227,-214>, a=<-21,-17,14>
+p=<-2158,-1734,-2643>, v=<-302,-242,-377>, a=<26,15,26>
+p=<687,954,2298>, v=<94,130,329>, a=<-12,-8,-28>
+p=<-2296,571,-1404>, v=<-334,81,-198>, a=<24,-5,13>
+p=<-431,2980,489>, v=<-55,424,64>, a=<4,-33,-4>
+p=<-2237,-2695,-582>, v=<-316,-385,-83>, a=<21,32,5>
+p=<-1619,759,-2656>, v=<-225,114,-380>, a=<19,-12,26>
+p=<945,447,3126>, v=<130,61,444>, a=<-12,-9,-31>
+p=<2412,-1076,1127>, v=<344,-158,158>, a=<-28,8,-7>
+p=<77,3074,-1824>, v=<14,438,-257>, a=<0,-30,21>
+p=<1306,1552,-1954>, v=<187,222,-281>, a=<-16,-13,18>
+p=<808,2843,1357>, v=<116,408,190>, a=<-9,-28,-10>
+p=<-105,-919,2898>, v=<-15,-129,418>, a=<1,13,-28>
+p=<994,1043,-1978>, v=<140,151,-279>, a=<-9,-9,20>
+p=<3077,70,482>, v=<442,10,68>, a=<-32,-1,-6>
+p=<-2772,1,-1392>, v=<-397,-2,-201>, a=<30,2,13>
+p=<1297,-2205,120>, v=<184,-321,17>, a=<-9,20,0>
+p=<-3102,-5,-1354>, v=<-444,3,-194>, a=<30,-1,12>
+p=<-1621,-2313,374>, v=<-235,-329,52>, a=<18,20,-3>
+p=<1902,-240,2425>, v=<266,-34,348>, a=<-19,1,-25>
+p=<-1803,-1696,-543>, v=<-257,-238,-74>, a=<21,18,4>
+p=<2854,-216,1608>, v=<404,-28,229>, a=<-30,6,-13>
+p=<1502,-1352,-2578>, v=<211,-192,-364>, a=<-15,19,16>
+p=<1559,-2311,-45>, v=<220,-328,-6>, a=<-17,22,5>
+p=<-402,2270,-796>, v=<-58,325,-110>, a=<7,-21,3>
+p=<-1370,-11,-2620>, v=<-196,3,-373>, a=<13,4,31>
+p=<-953,3009,1273>, v=<-138,429,181>, a=<8,-33,-15>
+p=<1782,-1172,-2352>, v=<255,-164,-337>, a=<-20,11,27>
+p=<2237,418,2402>, v=<322,59,341>, a=<-21,-8,-24>
+p=<2252,1657,1721>, v=<320,238,247>, a=<-20,-18,-15>
+p=<-1315,-2410,1308>, v=<-189,-340,189>, a=<10,26,-18>
+p=<48,244,-2745>, v=<2,35,-388>, a=<3,-3,29>
+p=<1665,2253,-689>, v=<237,317,-98>, a=<-17,-21,5>
+p=<1117,-1998,-2158>, v=<161,-285,-308>, a=<-9,21,22>
+p=<-1209,2307,-403>, v=<-172,324,-58>, a=<11,-24,2>
+p=<-2058,1700,1773>, v=<-291,243,254>, a=<20,-17,-18>
+p=<-995,-1138,-2951>, v=<-138,-163,-418>, a=<8,13,27>
+p=<785,-983,2672>, v=<116,-146,383>, a=<-7,10,-26>
+p=<-1923,-330,-1677>, v=<-271,-41,-241>, a=<16,4,16>
+p=<1401,1896,937>, v=<197,268,131>, a=<-16,-15,-10>
+p=<-572,2692,1022>, v=<-83,384,149>, a=<1,-24,-10>
+p=<1741,1338,-1868>, v=<253,193,-269>, a=<-17,-10,17>
+p=<1566,2188,350>, v=<225,312,48>, a=<-16,-21,-4>
+p=<-1734,-1324,-1866>, v=<-244,-188,-269>, a=<17,13,17>
+p=<3149,-129,-952>, v=<449,-16,-132>, a=<-32,-1,11>
+p=<2091,-1276,-782>, v=<293,-179,-108>, a=<-21,10,11>
+p=<1814,2072,315>, v=<260,295,47>, a=<-18,-21,-6>
+p=<-1036,-1282,1829>, v=<-147,-189,265>, a=<10,14,-18>
+p=<-2434,-333,-1071>, v=<-347,-45,-155>, a=<23,2,7>
+p=<2813,315,265>, v=<397,43,35>, a=<-29,-3,-2>
+p=<704,-541,-2684>, v=<100,-81,-383>, a=<-8,2,25>
+p=<180,-1863,-2277>, v=<28,-266,-326>, a=<-2,12,22>
+p=<-537,478,-3146>, v=<-73,72,-449>, a=<1,-3,29>
+p=<-2275,1286,1169>, v=<-326,182,165>, a=<21,-16,-13>
+p=<-3153,-167,839>, v=<-452,-22,117>, a=<31,5,-8>
+p=<-2659,-1005,-62>, v=<-379,-143,-11>, a=<33,14,0>
+p=<-2857,1552,-245>, v=<-403,219,-34>, a=<26,-15,-2>
+p=<-2420,1189,-1497>, v=<-348,165,-213>, a=<22,-10,13>
+p=<-996,-2088,1463>, v=<-141,-296,209>, a=<10,21,-13>
+p=<785,-2777,-89>, v=<111,-396,-11>, a=<-10,22,2>
+p=<-3064,52,457>, v=<-439,3,58>, a=<29,0,-1>
+p=<-2003,1537,-2027>, v=<-286,222,-283>, a=<18,-14,20>
+p=<-2744,192,516>, v=<-390,27,75>, a=<28,-1,-8>
+p=<2627,428,1268>, v=<377,62,183>, a=<-26,-4,-11>
+p=<2370,516,-2130>, v=<335,71,-306>, a=<-25,-4,20>
+p=<-167,2752,-190>, v=<-23,391,-27>, a=<1,-24,0>
+p=<-2333,-1758,399>, v=<-332,-254,59>, a=<23,10,-4>
+p=<115,1289,-2001>, v=<17,186,-285>, a=<0,-12,22>
+p=<-1645,320,-2350>, v=<-235,48,-336>, a=<15,1,23>
+p=<168,539,-2987>, v=<26,80,-429>, a=<4,-6,30>
+p=<550,109,2265>, v=<77,14,323>, a=<-1,-1,-15>
+p=<2314,-1485,1355>, v=<330,-206,194>, a=<-21,21,-13>
+p=<-2350,1553,904>, v=<-337,226,132>, a=<17,-17,-9>
+p=<-1292,2795,-539>, v=<-184,402,-74>, a=<12,-30,8>
+p=<-770,-1190,-2785>, v=<-108,-172,-397>, a=<7,9,30>
+p=<-2348,-1197,1425>, v=<-336,-172,211>, a=<23,14,-13>
+p=<1914,787,1936>, v=<275,112,273>, a=<-19,-8,-16>
+p=<-20,934,-2534>, v=<-2,133,-361>, a=<0,-9,24>
+p=<-1896,-1410,1509>, v=<-269,-201,214>, a=<14,14,-11>
+p=<-3039,-1083,-1197>, v=<-436,-151,-174>, a=<30,14,12>
+p=<-703,-1842,2083>, v=<-100,-263,297>, a=<8,21,-21>
+p=<-865,2968,-1508>, v=<-121,421,-215>, a=<8,-31,19>
+p=<3111,410,1160>, v=<442,62,161>, a=<-26,-4,-15>
+p=<-783,2409,-1292>, v=<-107,344,-184>, a=<7,-24,11>
+p=<3426,56,23>, v=<492,10,-1>, a=<-31,2,0>
+p=<-3055,796,570>, v=<-440,112,73>, a=<28,-6,-8>
+p=<-407,1576,2244>, v=<-62,226,323>, a=<3,-11,-22>
+p=<-1560,2842,919>, v=<-221,405,133>, a=<14,-26,-7>
+p=<2900,635,1073>, v=<411,92,158>, a=<-26,-3,-7>
+p=<-2028,-452,2148>, v=<-286,-59,306>, a=<22,4,-20>
+p=<-2567,1085,45>, v=<-371,157,1>, a=<32,-18,-1>
+p=<-991,1405,2370>, v=<-142,203,340>, a=<9,-14,-23>
+p=<142,-1409,-2144>, v=<15,-199,-308>, a=<0,8,26>
+p=<1497,303,-2973>, v=<213,42,-427>, a=<-13,-6,33>
+p=<-1158,221,2675>, v=<-167,32,380>, a=<9,5,-25>
+p=<-147,-400,3215>, v=<-21,-51,459>, a=<-1,0,-32>
+p=<-1828,-2033,567>, v=<-263,-290,82>, a=<19,26,-4>
+p=<-1953,1811,-2055>, v=<-278,255,-294>, a=<15,-18,14>
+p=<-838,-1721,-2258>, v=<-119,-250,-324>, a=<10,16,25>
+p=<598,-1963,-2331>, v=<84,-274,-335>, a=<-5,21,24>
+p=<-210,400,-2911>, v=<-29,61,-416>, a=<4,-9,31>
+p=<-1336,-1236,2422>, v=<-192,-175,348>, a=<9,11,-27>
+p=<2593,1842,156>, v=<366,258,23>, a=<-26,-22,3>
+p=<683,-2491,2131>, v=<94,-355,301>, a=<-5,26,-19>
+p=<-1754,-1837,-1551>, v=<-249,-262,-221>, a=<15,23,13>
+p=<1971,2423,440>, v=<278,345,64>, a=<-23,-24,-1>
+p=<-398,2348,1947>, v=<-56,333,281>, a=<-2,-23,-19>
+p=<2374,-1106,-1948>, v=<339,-158,-282>, a=<-24,13,22>
+p=<-989,-1488,-1769>, v=<-148,-214,-252>, a=<9,12,12>
+p=<2259,-943,-1333>, v=<318,-135,-185>, a=<-21,9,8>
+p=<2871,-44,150>, v=<412,-7,23>, a=<-26,2,-2>
+p=<876,-1583,-1974>, v=<131,-232,-281>, a=<-12,18,14>
+p=<-597,-2656,690>, v=<-82,-383,91>, a=<5,26,-8>
+p=<3218,-115,-141>, v=<455,-18,-18>, a=<-36,0,5>
+p=<1347,-17,-2874>, v=<195,-2,-410>, a=<-16,-4,28>
+p=<2607,646,1802>, v=<375,90,259>, a=<-30,-7,-18>
+p=<2246,-82,1413>, v=<316,-6,200>, a=<-21,-5,-11>
+p=<-1515,2402,-1329>, v=<-208,341,-188>, a=<16,-22,15>
+p=<-740,-2443,839>, v=<-106,-345,118>, a=<9,27,-9>
+p=<-370,-1496,2055>, v=<-57,-212,293>, a=<5,14,-19>
+p=<-1652,-1944,-1349>, v=<-236,-281,-184>, a=<9,16,13>
+p=<-2499,2057,-233>, v=<-355,294,-32>, a=<24,-21,2>
+p=<307,-2054,1512>, v=<38,-293,216>, a=<-4,19,-16>
+p=<-2617,-1535,-1691>, v=<-371,-221,-238>, a=<26,14,19>
+p=<1419,2503,374>, v=<205,362,55>, a=<-18,-25,-3>
+p=<2882,48,1837>, v=<407,3,267>, a=<-26,-4,-22>
+p=<-563,-3347,223>, v=<-79,-476,34>, a=<7,33,-2>
+p=<-814,-2302,-208>, v=<-116,-326,-29>, a=<7,21,2>
+p=<2886,-461,892>, v=<417,-72,127>, a=<-30,4,-11>
+p=<38,-829,2517>, v=<9,-117,361>, a=<0,6,-29>
+p=<1954,768,-1801>, v=<278,111,-257>, a=<-22,-7,22>
+p=<-1138,-848,2144>, v=<-161,-121,307>, a=<14,13,-20>
+p=<-2676,69,-662>, v=<-388,11,-94>, a=<26,0,6>
+p=<-1190,-2014,1742>, v=<-170,-287,249>, a=<11,21,-20>
+p=<-865,2859,-981>, v=<-126,407,-140>, a=<8,-31,12>
+p=<3060,1455,828>, v=<437,209,118>, a=<-25,-19,-6>
+p=<1292,-1828,-1200>, v=<181,-268,-168>, a=<-13,18,9>
+p=<-2351,-1092,557>, v=<-339,-155,81>, a=<23,13,-3>
+p=<1107,-2033,693>, v=<155,-290,100>, a=<-7,21,-10>
+p=<-962,323,3456>, v=<-140,48,493>, a=<11,-4,-30>
+p=<2434,637,-1784>, v=<348,96,-252>, a=<-24,-9,18>
+p=<2157,1618,59>, v=<308,226,8>, a=<-25,-20,-2>
+p=<849,-62,-2418>, v=<121,-8,-344>, a=<-7,-3,23>
+p=<2762,1436,-1383>, v=<394,207,-197>, a=<-23,-15,11>
+p=<-3036,419,878>, v=<-432,57,124>, a=<24,1,-10>
+p=<2503,1489,-756>, v=<356,217,-109>, a=<-25,-12,4>
+p=<-1397,-2563,-133>, v=<-199,-361,-19>, a=<12,23,1>
+p=<-288,1425,-3042>, v=<-41,207,-432>, a=<1,-13,29>
+p=<24,2975,447>, v=<2,428,63>, a=<-2,-37,-4>
+p=<285,-2013,-2331>, v=<34,-287,-329>, a=<5,25,26>
+p=<-634,-2885,-1380>, v=<-90,-410,-196>, a=<4,31,16>
+p=<-2550,-1613,1326>, v=<-369,-228,189>, a=<22,15,-12>
+p=<-260,-1885,1699>, v=<-40,-269,242>, a=<7,18,-16>
+p=<-632,1319,2283>, v=<-91,186,323>, a=<4,-18,-22>
+p=<-865,-2642,-279>, v=<-126,-373,-39>, a=<3,24,0>
+p=<2223,-1977,880>, v=<317,-281,130>, a=<-23,20,-8>
+p=<42,2810,-450>, v=<10,401,-65>, a=<0,-24,0>
+p=<-950,2330,2037>, v=<-134,332,291>, a=<4,-23,-18>
+p=<1044,286,3174>, v=<151,40,451>, a=<-8,-1,-30>
+p=<-932,2492,-342>, v=<-135,352,-53>, a=<9,-25,-1>
+p=<3318,808,-839>, v=<473,112,-125>, a=<-33,-7,8>
+p=<2190,802,1373>, v=<314,108,196>, a=<-21,-10,-13>
+p=<-110,2227,2514>, v=<-13,321,357>, a=<1,-26,-22>
+p=<-762,-2542,1571>, v=<-107,-363,219>, a=<7,27,-15>
+p=<-843,1461,-2501>, v=<-121,208,-360>, a=<6,-15,25>
+p=<1037,-2192,-1862>, v=<146,-314,-266>, a=<-9,21,16>
+p=<1428,-2502,783>, v=<208,-357,117>, a=<-12,24,-1>
+p=<-1519,802,-2626>, v=<-214,115,-375>, a=<12,-10,21>
+p=<-2483,1663,1263>, v=<-349,237,180>, a=<19,-18,-17>
+p=<1246,-500,2566>, v=<175,-69,366>, a=<-15,2,-25>
+p=<-2286,-1779,-461>, v=<-327,-255,-65>, a=<22,23,2>
+p=<350,3135,1064>, v=<50,449,152>, a=<-3,-31,-6>
+p=<-506,275,-2858>, v=<-70,47,-408>, a=<6,-1,29>
+p=<2283,2049,-751>, v=<328,292,-107>, a=<-18,-23,12>
+p=<-1926,-1360,-1240>, v=<-279,-194,-175>, a=<19,15,14>
+p=<1343,457,-2363>, v=<185,63,-333>, a=<-13,-2,23>
+p=<-1206,2687,-982>, v=<-173,379,-140>, a=<8,-22,15>
+p=<2187,30,2741>, v=<312,5,391>, a=<-21,2,-25>
+p=<2627,1354,-644>, v=<375,193,-92>, a=<-23,-13,-2>
+p=<2234,1551,-629>, v=<314,221,-87>, a=<-21,-15,6>
+p=<-2224,181,-1582>, v=<-317,28,-226>, a=<19,-2,18>
+p=<-1203,943,2568>, v=<-174,137,364>, a=<12,-2,-28>
+p=<1723,2089,584>, v=<247,300,80>, a=<-17,-19,-9>
+p=<1087,-867,2921>, v=<156,-126,421>, a=<-10,7,-29>
+p=<359,-2816,1809>, v=<51,-402,255>, a=<0,28,-19>
+p=<1010,1125,-2626>, v=<144,160,-377>, a=<-13,-17,27>
+p=<-2218,1407,-767>, v=<-321,206,-110>, a=<24,-16,1>
+p=<-3075,459,556>, v=<-436,65,76>, a=<28,-5,-5>
+p=<-711,3207,1693>, v=<-97,457,242>, a=<10,-35,-20>
+p=<2313,-442,-2190>, v=<330,-64,-315>, a=<-19,2,18>
+p=<-1225,2747,-653>, v=<-177,394,-93>, a=<8,-30,5>
+p=<1874,-2001,-949>, v=<267,-285,-133>, a=<-18,21,8>
+p=<1135,-2961,-1056>, v=<159,-420,-148>, a=<-9,25,9>
+p=<-992,1847,1999>, v=<-139,262,285>, a=<7,-22,-23>
+p=<355,2681,-983>, v=<50,383,-140>, a=<-4,-27,15>
+p=<-366,-2446,1278>, v=<-52,-353,183>, a=<4,27,-12>
+p=<1878,-2548,244>, v=<268,-365,33>, a=<-18,27,0>
+p=<2552,811,567>, v=<366,110,84>, a=<-25,-8,-8>
+p=<3105,498,303>, v=<444,68,45>, a=<-31,-5,-2>
+p=<167,-2030,-2095>, v=<20,-290,-300>, a=<2,16,26>
+p=<637,2069,1692>, v=<83,294,243>, a=<-9,-20,-18>
+p=<279,-2256,1998>, v=<45,-322,285>, a=<-6,21,-14>
+p=<1300,-1475,2240>, v=<185,-210,320>, a=<-13,10,-26>
+p=<-909,1932,1771>, v=<-128,280,256>, a=<4,-20,-20>
+p=<-2564,-1688,925>, v=<-368,-238,129>, a=<27,16,-11>
+p=<-1016,-2945,738>, v=<-147,-419,106>, a=<9,33,-5>
+p=<-53,-2665,-2270>, v=<-11,-379,-324>, a=<-2,28,19>
+p=<1575,642,2511>, v=<223,94,355>, a=<-17,-1,-16>
+p=<1038,2769,151>, v=<144,397,21>, a=<-12,-27,-3>
+p=<2607,805,-1130>, v=<372,115,-161>, a=<-27,-9,11>
+p=<2070,170,2504>, v=<298,21,356>, a=<-24,-4,-26>
+p=<-2063,152,-2561>, v=<-295,24,-365>, a=<16,-4,31>
+p=<2655,-493,-835>, v=<379,-69,-115>, a=<-26,8,7>
+p=<-2780,900,-676>, v=<-397,132,-100>, a=<29,-11,6>
+p=<252,2668,1762>, v=<39,379,250>, a=<-2,-29,-17>
+p=<-2790,-731,-1001>, v=<-395,-101,-140>, a=<26,6,13>
+p=<-1229,497,-2048>, v=<-171,72,-295>, a=<12,1,23>
+p=<2491,1388,1334>, v=<356,203,191>, a=<-29,-14,-12>
+p=<2321,-1287,2441>, v=<333,-179,351>, a=<-24,14,-23>
+p=<1460,2731,-68>, v=<209,390,-5>, a=<-15,-28,7>
+p=<1398,618,2852>, v=<202,87,407>, a=<-11,-1,-32>
+p=<47,1927,2446>, v=<9,271,348>, a=<-1,-25,-19>
+p=<757,2073,-2212>, v=<113,296,-317>, a=<-6,-25,21>
+p=<-1045,2707,-1885>, v=<-145,385,-264>, a=<5,-27,18>
+p=<-1495,-818,-1857>, v=<-215,-118,-262>, a=<14,9,12>
+p=<-2627,-718,-1764>, v=<-378,-101,-252>, a=<25,9,18>
+p=<2024,960,1742>, v=<293,135,254>, a=<-27,-9,-21>
+p=<1784,2855,-138>, v=<252,406,-15>, a=<-16,-32,1>
+p=<-2160,-710,-1609>, v=<-304,-103,-223>, a=<17,6,17>
+p=<-2478,-2089,95>, v=<-353,-299,15>, a=<28,23,1>
+p=<2435,527,2073>, v=<347,75,296>, a=<-27,-4,-20>
+p=<-1352,2955,791>, v=<-193,424,117>, a=<13,-31,-6>
+p=<3003,1189,678>, v=<424,169,100>, a=<-30,-9,-10>
+p=<604,-799,2066>, v=<89,-115,292>, a=<-10,10,-17>
+p=<-2506,-1768,406>, v=<-354,-247,58>, a=<30,16,-2>
+p=<-1310,-352,-1934>, v=<-188,-48,-276>, a=<13,6,19>
+p=<1378,-2170,834>, v=<196,-312,122>, a=<-13,22,-8>
+p=<-714,2923,-799>, v=<-107,414,-115>, a=<8,-30,7>
+p=<906,232,-2566>, v=<128,32,-362>, a=<-9,2,18>
+p=<-2288,-1476,1309>, v=<-327,-210,183>, a=<22,14,-13>
+p=<1697,1613,308>, v=<240,226,45>, a=<-16,-18,-4>
+p=<2453,773,-1994>, v=<353,111,-283>, a=<-25,-6,24>
+p=<2094,-2409,33>, v=<295,-347,4>, a=<-15,25,2>
+p=<526,-1113,2073>, v=<77,-157,294>, a=<-5,12,-21>
+p=<-2442,591,-1823>, v=<-349,83,-262>, a=<24,-1,17>
+p=<-335,-2835,592>, v=<-43,-406,86>, a=<4,28,-4>
+p=<-2785,-972,229>, v=<-394,-135,36>, a=<23,11,-1>
+p=<-1100,-1480,1796>, v=<-154,-210,257>, a=<10,17,-20>
+p=<2325,1914,-452>, v=<332,272,-60>, a=<-23,-21,2>
+p=<2180,1218,2887>, v=<313,177,412>, a=<-19,-12,-29>
+p=<2374,-881,-1454>, v=<334,-132,-207>, a=<-22,13,16>
+p=<-1748,2499,-1372>, v=<-248,359,-196>, a=<17,-23,16>
+p=<1727,-1109,1790>, v=<246,-160,255>, a=<-19,13,-19>
+p=<905,1527,-2078>, v=<121,218,-303>, a=<-5,-16,19>
+p=<2420,-59,2292>, v=<347,-12,329>, a=<-24,0,-16>
+p=<2287,-1783,1206>, v=<328,-257,170>, a=<-21,20,-14>
+p=<-2664,-152,-1382>, v=<-374,-23,-198>, a=<26,1,13>
+p=<-1081,1292,-2263>, v=<-158,184,-324>, a=<5,-11,24>
+p=<2446,-545,-2289>, v=<350,-75,-328>, a=<-25,7,22>
+p=<2235,-1381,-2054>, v=<322,-198,-298>, a=<-22,16,26>
+p=<-3257,-154,-718>, v=<-466,-23,-101>, a=<29,-2,7>
+p=<1673,1690,516>, v=<244,239,70>, a=<-19,-22,-6>
+p=<1385,-2456,418>, v=<196,-350,58>, a=<-17,25,-4>
+p=<2985,-884,-799>, v=<428,-119,-111>, a=<-33,5,7>
+p=<-1513,2311,-173>, v=<-212,328,-23>, a=<15,-20,-4>
+p=<-2074,-1496,-1222>, v=<-297,-214,-176>, a=<24,18,12>
+p=<-2057,-370,-2301>, v=<-294,-52,-326>, a=<21,6,23>
+p=<-2227,-2336,-145>, v=<-320,-339,-18>, a=<22,22,-3>
+p=<2914,1632,652>, v=<414,227,94>, a=<-28,-16,-6>
+p=<-1038,-2308,1378>, v=<-152,-333,198>, a=<13,31,-15>
+p=<643,-1788,-2511>, v=<94,-255,-361>, a=<-2,21,23>
+p=<902,2772,-1464>, v=<131,400,-212>, a=<-10,-23,17>
+p=<1063,-1453,2430>, v=<156,-209,349>, a=<-10,16,-22>
+p=<-224,3075,442>, v=<-29,439,67>, a=<-1,-31,1>
+p=<-1373,-2192,-921>, v=<-196,-313,-132>, a=<13,24,8>
+p=<-3353,295,495>, v=<-481,42,66>, a=<31,-1,-10>
+p=<-1853,809,2625>, v=<-260,110,375>, a=<17,-4,-26>
+p=<78,-1196,2121>, v=<9,-171,303>, a=<2,6,-18>
+p=<3114,913,1260>, v=<443,123,184>, a=<-28,-10,-8>
+p=<2387,-357,370>, v=<341,-48,51>, a=<-29,2,-3>
+p=<-2301,-1677,-546>, v=<-328,-241,-75>, a=<22,16,3>
+p=<1126,2571,-1330>, v=<157,367,-193>, a=<-13,-25,13>
+p=<1806,345,2195>, v=<258,46,317>, a=<-20,-3,-18>
+p=<1375,2815,-293>, v=<194,400,-43>, a=<-13,-28,0>
+p=<2393,-1081,1055>, v=<342,-154,156>, a=<-23,13,-10>
+p=<-74,1914,-2448>, v=<-14,273,-350>, a=<2,-17,23>
+p=<2018,-1928,814>, v=<287,-279,114>, a=<-23,12,-10>
+p=<-89,1458,2267>, v=<-14,213,322>, a=<-1,-16,-22>
+p=<-2310,1272,-1141>, v=<-328,178,-156>, a=<23,-12,10>
+p=<1157,2183,885>, v=<162,309,120>, a=<-11,-19,-5>
+p=<-2528,2520,163>, v=<-360,364,20>, a=<25,-29,4>
+p=<1873,1210,2281>, v=<268,176,327>, a=<-22,-10,-25>
+p=<-654,-2387,-1867>, v=<-91,-341,-267>, a=<1,22,17>
+p=<1619,-1540,-1714>, v=<226,-222,-247>, a=<-20,13,17>
+p=<-2781,1254,-451>, v=<-399,186,-64>, a=<26,-13,0>
diff --git a/2017/inputs/day_21.txt b/2017/inputs/day_21.txt
new file mode 100644
index 0000000..280e26d
--- /dev/null
+++ b/2017/inputs/day_21.txt
@@ -0,0 +1,108 @@
+../.. => ..#/#../.#.
+#./.. => #../#../...
+##/.. => ###/#.#/#..
+.#/#. => ###/##./.#.
+##/#. => .../.#./..#
+##/## => ##./#.#/###
+.../.../... => ##../.#../#.#./....
+#../.../... => ..../##.#/...#/##.#
+.#./.../... => ###./####/#.../#..#
+##./.../... => ###./.##./...#/..##
+#.#/.../... => .###/.##./#.../#.##
+###/.../... => ##.#/#..#/#.#./#.##
+.#./#../... => #.#./.###/#.../#.##
+##./#../... => #.../####/#.##/....
+..#/#../... => #.##/..#./...#/...#
+#.#/#../... => #.##/####/.#.#/#.#.
+.##/#../... => #.../##../##.#/.##.
+###/#../... => ..../#.#./.###/#...
+.../.#./... => .#.#/#..#/##../#.##
+#../.#./... => ###./.###/.#.#/..#.
+.#./.#./... => ..##/.##./..##/.#.#
+##./.#./... => ..#./##../###./...#
+#.#/.#./... => ..##/.##./.###/###.
+###/.#./... => ..#./.###/###./#.##
+.#./##./... => ###./..../.#../#...
+##./##./... => .#.#/##../##.#/...#
+..#/##./... => ##.#/.##./.###/..##
+#.#/##./... => .###/..#./#.##/####
+.##/##./... => ##.#/..#./..##/###.
+###/##./... => ..../.#.#/.#../#...
+.../#.#/... => ###./.#.#/.#../#.##
+#../#.#/... => ####/#..#/..../....
+.#./#.#/... => #.../..##/#.##/#.#.
+##./#.#/... => #.#./###./##../#.#.
+#.#/#.#/... => ...#/.##./.##./.#..
+###/#.#/... => ..../.##./####/#.#.
+.../###/... => .###/.#../.###/#.##
+#../###/... => ..##/..##/.##./##..
+.#./###/... => .#.#/..#./..##/##.#
+##./###/... => ...#/#.##/#.#./##.#
+#.#/###/... => #.##/.##./...#/###.
+###/###/... => ##../...#/..##/####
+..#/.../#.. => #.##/#.../.#../#.#.
+#.#/.../#.. => .##./.##./.#.#/.##.
+.##/.../#.. => .#.#/#.##/...#/##.#
+###/.../#.. => ##../..#./...#/##..
+.##/#../#.. => ##../..##/#..#/#..#
+###/#../#.. => ##../..#./#.#./....
+..#/.#./#.. => .##./##.#/##../####
+#.#/.#./#.. => ####/...#/.#.#/..#.
+.##/.#./#.. => .#.#/..#./##.#/.#..
+###/.#./#.. => #.../#.##/..../##.#
+.##/##./#.. => #.#./#.#./#.##/#.#.
+###/##./#.. => ...#/###./.##./.#.#
+#../..#/#.. => ####/####/..../.##.
+.#./..#/#.. => #.##/...#/..#./####
+##./..#/#.. => ..#./#.../..##/####
+#.#/..#/#.. => #.../#.##/#.##/..##
+.##/..#/#.. => ####/..../##../####
+###/..#/#.. => ..../##.#/.##./####
+#../#.#/#.. => ...#/..##/###./#..#
+.#./#.#/#.. => #..#/..#./.###/##.#
+##./#.#/#.. => ###./####/#.##/..#.
+..#/#.#/#.. => ##../##.#/..##/.##.
+#.#/#.#/#.. => .#.#/.##./#.../##.#
+.##/#.#/#.. => .#.#/#..#/.##./..#.
+###/#.#/#.. => ...#/.#../.##./##.#
+#../.##/#.. => ###./##../#.#./####
+.#./.##/#.. => .#../##../#.#./.#.#
+##./.##/#.. => ##.#/.#../.#.#/####
+#.#/.##/#.. => ####/.#.#/..../....
+.##/.##/#.. => ####/##../#..#/####
+###/.##/#.. => .###/##.#/.#../#.##
+#../###/#.. => #..#/###./####/.#.#
+.#./###/#.. => ..##/##../##.#/.#.#
+##./###/#.. => #..#/.#../####/...#
+..#/###/#.. => ##../##.#/...#/#..#
+#.#/###/#.. => ..#./.##./#..#/....
+.##/###/#.. => #..#/#.../..../.#..
+###/###/#.. => ..#./#.##/.##./#...
+.#./#.#/.#. => .#.#/.##./##.#/.##.
+##./#.#/.#. => #..#/.###/.#.#/.##.
+#.#/#.#/.#. => #.../##../#.../.###
+###/#.#/.#. => ###./.###/###./....
+.#./###/.#. => .#../####/...#/##..
+##./###/.#. => ####/###./..../....
+#.#/###/.#. => ...#/.###/..../####
+###/###/.#. => ..../#.../..#./.###
+#.#/..#/##. => #.#./#.../####/#.##
+###/..#/##. => .#.#/#..#/.###/#...
+.##/#.#/##. => ..##/..#./..../##..
+###/#.#/##. => #.#./##.#/####/#..#
+#.#/.##/##. => ..../.#../#.#./##.#
+###/.##/##. => ..../..../.#../##.#
+.##/###/##. => #.#./.###/#.#./#.##
+###/###/##. => ##.#/##.#/.###/..#.
+#.#/.../#.# => #..#/.#../#.../...#
+###/.../#.# => ##../.#../##.#/..#.
+###/#../#.# => ..##/#.#./####/.#..
+#.#/.#./#.# => ...#/...#/#..#/#.#.
+###/.#./#.# => ..../####/.##./.#.#
+###/##./#.# => #..#/.#.#/..##/####
+#.#/#.#/#.# => #.#./..#./...#/.#..
+###/#.#/#.# => ...#/##.#/.###/.#..
+#.#/###/#.# => .#.#/###./.#../.##.
+###/###/#.# => ...#/.###/.#.#/###.
+###/#.#/### => #.##/.#.#/...#/.#..
+###/###/### => ..##/.#../#.#./.#..
diff --git a/2017/inputs/day_21_example.txt b/2017/inputs/day_21_example.txt
new file mode 100644
index 0000000..f6d24df
--- /dev/null
+++ b/2017/inputs/day_21_example.txt
@@ -0,0 +1,2 @@
+../.# => ##./#../...
+.#./..#/### => #..#/..../..../#..#
diff --git a/2017/inputs/day_22.txt b/2017/inputs/day_22.txt
new file mode 100644
index 0000000..1343456
--- /dev/null
+++ b/2017/inputs/day_22.txt
@@ -0,0 +1,25 @@
+.##..#.#.##...#....#..###
+####.#...###.####..#.....
+#.#.#####....######.###.#
+#.#..###.#.#####....#..#.
+####.#.#...#.##.##..#.###
+#.####..#####.#.#....#.##
+.#.####.#....###..##....#
+..##.#..##.#.#.###.##.#..
+##....#....######.###.###
+.#.##.###.###.###.#..#.#.
+#.##.#.#..#.#.....###....
+####.....#..###..##..##..
+##....#.#...####...#.#.#.
+...#.##..###..##..#......
+#....#..##.##.#..#.###..#
+...#...##.##.##...#.#.#..
+.##....#.####.#..##.#...#
+#.######......#.#...#.##.
+#.##....###...###.###....
+#..#.#.#.#.#..#.#.....#..
+...##..##.###....#.###...
+.######.#...###.###.#.#.#
+####..###.####...#..#####
+.##.#.##...##..##...#.#.#
+###...##..#..##.##..#..#.
diff --git a/2017/inputs/day_22_example.txt b/2017/inputs/day_22_example.txt
new file mode 100644
index 0000000..3105a0b
--- /dev/null
+++ b/2017/inputs/day_22_example.txt
@@ -0,0 +1,3 @@
+..#
+#..
+...
diff --git a/2017/inputs/day_23.txt b/2017/inputs/day_23.txt
new file mode 100644
index 0000000..9d29443
--- /dev/null
+++ b/2017/inputs/day_23.txt
@@ -0,0 +1,32 @@
+set b 99
+set c b
+jnz a 2
+jnz 1 5
+mul b 100
+sub b -100000
+set c b
+sub c -17000
+set f 1
+set d 2
+set e 2
+set g d
+mul g e
+sub g b
+jnz g 2
+set f 0
+sub e -1
+set g e
+sub g b
+jnz g -8
+sub d -1
+set g d
+sub g b
+jnz g -13
+jnz f 2
+sub h -1
+set g b
+sub g c
+jnz g 2
+jnz 1 3
+sub b -17
+jnz 1 -23
diff --git a/2017/inputs/day_24.txt b/2017/inputs/day_24.txt
new file mode 100644
index 0000000..1fbfe25
--- /dev/null
+++ b/2017/inputs/day_24.txt
@@ -0,0 +1,57 @@
+42/37
+28/28
+29/25
+45/8
+35/23
+49/20
+44/4
+15/33
+14/19
+31/44
+39/14
+25/17
+34/34
+38/42
+8/42
+15/28
+0/7
+49/12
+18/36
+45/45
+28/7
+30/43
+23/41
+0/35
+18/9
+3/31
+20/31
+10/40
+0/22
+1/23
+20/47
+38/36
+15/8
+34/32
+30/30
+30/44
+19/28
+46/15
+34/50
+40/20
+27/39
+3/14
+43/45
+50/42
+1/33
+6/39
+46/44
+22/35
+15/20
+43/31
+23/23
+19/27
+47/15
+43/43
+25/36
+26/38
+1/10
diff --git a/2017/inputs/day_25.txt b/2017/inputs/day_25.txt
new file mode 100644
index 0000000..892ee98
--- /dev/null
+++ b/2017/inputs/day_25.txt
@@ -0,0 +1,62 @@
+Begin in state A.
+Perform a diagnostic checksum after 12667664 steps.
+
+In state A:
+ If the current value is 0:
+ - Write the value 1.
+ - Move one slot to the right.
+ - Continue with state B.
+ If the current value is 1:
+ - Write the value 0.
+ - Move one slot to the left.
+ - Continue with state C.
+
+In state B:
+ If the current value is 0:
+ - Write the value 1.
+ - Move one slot to the left.
+ - Continue with state A.
+ If the current value is 1:
+ - Write the value 1.
+ - Move one slot to the right.
+ - Continue with state D.
+
+In state C:
+ If the current value is 0:
+ - Write the value 0.
+ - Move one slot to the left.
+ - Continue with state B.
+ If the current value is 1:
+ - Write the value 0.
+ - Move one slot to the left.
+ - Continue with state E.
+
+In state D:
+ If the current value is 0:
+ - Write the value 1.
+ - Move one slot to the right.
+ - Continue with state A.
+ If the current value is 1:
+ - Write the value 0.
+ - Move one slot to the right.
+ - Continue with state B.
+
+In state E:
+ If the current value is 0:
+ - Write the value 1.
+ - Move one slot to the left.
+ - Continue with state F.
+ If the current value is 1:
+ - Write the value 1.
+ - Move one slot to the left.
+ - Continue with state C.
+
+In state F:
+ If the current value is 0:
+ - Write the value 1.
+ - Move one slot to the right.
+ - Continue with state D.
+ If the current value is 1:
+ - Write the value 1.
+ - Move one slot to the right.
+ - Continue with state A.
diff --git a/2017/inputs/day_3.txt b/2017/inputs/day_3.txt
new file mode 100644
index 0000000..ce15bc4
--- /dev/null
+++ b/2017/inputs/day_3.txt
@@ -0,0 +1 @@
+325489
diff --git a/2017/inputs/day_4.txt b/2017/inputs/day_4.txt
new file mode 100644
index 0000000..b9f9e0e
--- /dev/null
+++ b/2017/inputs/day_4.txt
@@ -0,0 +1,512 @@
+kvvfl kvvfl olud wjqsqa olud frc
+slhm rdfm yxb rsobyt rdfm
+pib wzfr xyoakcu zoapeze rtdxt rikc jyeps wdyo hawr xyoakcu hawr
+ismtq qwoi kzt ktgzoc gnxblp dzfayil ftfx asscba ionxi dzfayil qwoi
+dzuhys kfekxe nvdhdtj hzusdy xzhehgc dhtvdnj oxwlvef
+gxg qahl aaipx tkmckn hcsuhy jsudcmy kcefhpn kiasaj tkmckn
+roan kqnztj edc zpjwb
+yzc roc qrygby rsvts nyijgwr xnpqz
+jqgj hhgtw tmychia whkm vvxoq tfbzpe ska ldjmvmo
+nyeeg omn geyen ngyee rcjt rjuxh
+qpq udci tnp fdfk kffd eyzvmg ufppf wfuodj toamfn tkze jzsb
+rrcgxyp rbufd tfjmok vpyhej hcnz ftkojm
+jnmomfc jnmomfc bkluz izn ovvm flsch bkluz
+odisl hzwv hiasrhi hez ihihsra qpbmi ltwjj iknkwxf nbdtq gbo
+gjtszl gjtszl fruo fruo
+rdapv gaik cqboix sxnizhh uxmpali jdd usqnz advrp dze
+flooz flooz qad tcrq yze bnoijff qpqu vup hyagwll
+lnazok dze foi tqwjsk hpx qcql euzpj mwfrk
+ilb fmviby ivybmf gtx xtg
+rpauuu timere gyg wcolt ireetm safi
+croe szwmq bbhd lciird vhcci pdax
+hnc ykswt qqqmei goe bri wmyai hnc qpgqc pberqf bzs
+hsnrb wdvh iezzrq iezzrq rdbmpta iezzrq kemnptg alkjnp wymmz
+ngw don ddvyds nlhkoa aaf gptumum ugtpmmu
+vmccke qbpag kvf kvf tgrfghb kvf bhpd sglgx
+obomgk bkcgo yso ttft vbw ckl wjgk
+fli qvw zhin dfpgfjb udsin nihz ovr tiewo
+tgmzmph hauzieo jmg tdbtl lvfr qpaayq qapaqy ausioeu jun piygx
+jkp guqrnx asdqmxf vmfvtqb tloqgyo ioix gajowri tmek ilc puhipb
+uycn zxqm znft ayal znacus kvcyd ekv qqfpnh
+fqghur xtbtdd ztjrylr bpuikb ziyk
+rvakn uqbl ozitpdh uqbl dsej xehj
+laxp haz jyd xnkrb ijldth woy xapl iqgg alpx gnupa ukptmmh
+dyiy dyiy ihb qcyxr
+wbwkd hdwu zvgkn hdwu wjc sakwhn zxujdo npllzp uyr uyr
+fxczpmn cininu akcxs ggslxr riyxe ojisxe
+ppbch sampq dnct afikor dnct edsqy pnzyzmc afikor
+jnvygtn hijqjxl vsd jnvygtn nqcqv zns odq gkboxrv kolnq wrvd
+mroq mroq flsbu flsbu
+fyshor xvpaunj qmktlo xoce wkiyfu ukcl srndc ugwylwm ozcwdw mtqcste kpokr
+cfh cxjvx cfh cfh uewshh
+bpspbap bpspbap fquj mxmn bwls iirhvuk dmpkyt exrn mxmn
+tvyvzk ezszod ntxr xtnr och
+knfxhy kbnyl knfxhy xhkssx lxru uprh nkxpbx oodolxr tpvyf
+nblmysu iwoffs upgof tyagwf aan vovji ajk ywzq oyfi sfulz
+aushzkm lcaeki mkuzsah ynxvte rsntd refk pcm
+mgguob gobmug dzenpty gmogbu
+yvq eepof rgnree nerger fpb stfrln ernger
+hrgkbl mzwvswk rsrsbk ieru holco pajvvn ztgsr qkyp fyeg owpcmoj
+fowda gmsqdca yugj mcrroxv mqcbojd fjnqfji qdfsc jqs
+qnc rvjfz vvxk sjd xrma ucdjvq sbw zydyt dfzww
+ocajazv cozaajv tqunkla udwf ecnnmbz lsakqg bki njnda zsdu ccfqw rxpc
+qqm qdfya qxyx qmq qfday uqnfttt
+rnbirb iapor qet iapor hxkhz dfvzig pedl ybyb
+mkgamxg xkniv meb hbzmxjn dhbj zhbxjmn hdjb
+ilteux pyutyfx mau lrr bacak
+sjjonmn dbbbgs crxyuu jztstgd ezb uiabyaa
+tra fle ufzlvf nnaw kec hiwnnlj tei wld iyt syk hjdczb
+qmd jtlud dgh dbanock fzp dsjgqru wwvo jwvxwgv xlemfij jcacd
+rpkx oxesil snazcgx fly miiyc ikmtmp oefyyn egbw
+ypfpeu wldnyd acchppb yqwcaw wldnyd turbz megci nbgxq xkc ypfpeu
+iqqv iqqv neui iqqv
+ypsxm icqyup zyetrwq nbisrv
+viommi toszx dpueq eyy cunjou ffcjc jaeez djefra pxvkj liudlig yye
+fhnacbg jghchh ghjhhc iue hwqmo
+vbjw lpn cizba ltnsfpz tzoweml irewlc uzckhpd mszal obd
+yeos utxkft hflxkfe fxczge qpgigkc ksgr vuumql vhlvv
+xzmkv xzmkv krecdi klpem jsbu nwcmik emfzxf cjmpgnj
+vtkjo pmiv zou gxo qdiyxsf hwyinjk jhkgf rjq
+dyuoc ywiyvch irfgl ywiyvch fxb fxb
+tuz onhr syu rqya abkaf bcfx mbknex juwoor zmksl
+oheg spjorx ksdy vwtq fxz phvtazk tcze lrxg
+hew lbup botaj ltr jpd
+dxgc tzinkej gnz hxvvub adsqmc dxgc asgpp rqbdcra goy pmamdua bhiacva
+xqv ygb kihxqz vyv pjcny vmyvsdv cgsi nfyx
+tqga ssshrw ndq qlbvwh huyd pxbgj qbxk dkkbf jxy chsobw pph
+hxl iwph iwph xnr otifm ljhre
+zlgvpd kapxpoc dve rklk ogh hgnp rbrmc zzkz hhmcx aklmo
+sar gfor nkf hek nkf aql shc aql
+dtcrw kfjzcjx qyhi bldson whwdayo mqtgt xhqzp ttqmg
+omspdml isze jdl nvwo qrkm wztfg ssfgyh dryj jhp unsmty
+jxt cszylng ifht ixtuna azoi xutqlv jtx tjx
+usgm azuayp fgkby ezpyq jqwl ezofj
+tnhvil nrvg moyrpqs sldx qymoff megflxh pyhqwms xmdw
+zomy zcquwnv lzx bvcna yods mjp dgsez
+blklyf xokd gpit tiysj yrwfhm tofx
+dtig vhdp omuj vhpd
+fogwxim qvdwig emdiv jvhl euwbzkg xvxb hwmqo ujdmlp epmykj
+sjxll sjxll pedvgb sjxll
+drvay gtzhgtx yrt okz nqf
+haxfazn pvkovwb pgu tgshw mxcjf pbe nwoymzc mxcjf pbe hydwy jradcr
+prjsloa ahylvj okbsj qbdcdjt pmfo pagyoeg vkmhjzt khzmjvt opfm xfrji gyjqyel
+lzypt jdbtrad ogr jdbtrad heink
+rcoucuq gdxewa rcoucuq whlw zhhm rcoucuq azaqohe mzyli rdvaf
+yuag ebcf yuag nsotg qqzuxr jfmao vyucw wmoye
+qwvk xemm hgqrr wyxkpp tojndm xlvzypw jus bgnu bgnu nklfwhs
+daqi knenmku ccm xkiuy vkexsbc kvvdagx umopitw yaocnx yoakqql mllmsp
+mrxgl gywit mfopia ncnsvw vdxek axuiot rsejua nei prndudz mnu
+egqn gaa qgen urs mix zbn rhn
+ewharq aihy udkdaob kgrdd kgrdd kugbjtj fcef llqb pduxaq wcexmm
+dwtiw nelq hppad algxgf gcc upou akm efnb mxmhrud
+yxqaa ups okbhgt iet qns tqn rnjqxgp
+npmhdm cgds ldexvr typi jyivoqk zkgq vfyxu xgfo
+dkwnmr umm dkwnmr okpjw wqx jpztebl eqsib dkwnmr
+dxbild wpbup evscivq dxbild dxbild geqp ojfbpl jshvqej
+cxdntxs csfocjd pyy tuhws teb boyloz xfw scxh pxhonky
+lteucke xrgwy hszgzu hnyrcvb
+pfgsgwg dxzh fworek qbstod
+usemcrf psczxu gcjtr brls
+hjol efxczux bqdn gvrnpey yyoqse gbam ndzyj lbwb bhzn unsezg
+bapw xifz blupk qqdk bofvqpp wnbuwyt rnwocu lzwgtt zucag pov
+xkre lqvd juf lqvd xio xyg xyg
+tzdao ztheib aymcf aorg iyawrch hetcxa iyawrch czdymc ccv
+ucgl azlppu jvxqlj pest
+dvwlw fuuy mnhmm okrp ualnqlm uyuznba fzyejk yaq crl ctprp
+odfq knox mkbcku pxucmuf lpjpol phl
+ixongh hfs ruorbd auy qyssl kykwcix aytsm rlj aytsm duq segpqhk
+izufsk wedpzh podjkor eamo vqvev ifnz podjkor xrnuqe
+twyfps bmdbgtu qye qkwjms
+wlav htym vhsnu cocphsj mdsuq vhsnu jflgmrp
+opajag itwjhfu purnnvk opajag
+hpkopqp vnj aialpt lzrkzfs nwucez nwuezc
+mcx hzcjxq zbxr dsx tpknx fva
+rlvgm xrejsvn ghawxb efyos xty wdzdgh olahbtn rga efyos vhtm nsr
+cni mbab qtgeiow ulttn rckc kmiaju jvbq emyvpew cdlxldn ulttn brhkprx
+eykpffp rapik qki fhjgdyu tome ehjuy bibjk htxd vexvag
+wrk dpxt gwkuiov gbkif ike gbkif pcd wpj toywyf qzsa aol
+yqwzh uujn ujun ujnu
+srs ralwxrz yxvvmgp sjhbhk waasid cqtxoxf whcladv jkmaq khjbsh dlavcwh
+mdvsjh xaj etvxlsy fxgiy rgjesel rlegesj ptriz ebdyhkp kugxm dxv egljser
+lhehwrs mqevb ygmv gri izop qgb ivm
+loqqam alojlwg hgen hbyw qlwpun loqqam worgnwk kope
+phozre todsknr todsknr ibj mvllsar
+wuripy ruwlfbh wukbkey qhq iishw tvtvci xawvxc vxacwx hsiwi ogq
+xryq vxwupqa zhqex aquxpwv bnvxrba dtbxki
+yvvwh zvsm vqskhp vqskhp ggqqlw bpn wbuv
+kqz tdy goqwge ygn jgd
+szjjhdk zkpoo nxexz ebicc
+wzuemcj oyd qupulju iaakzmt vzkvz
+nppahov umm wpzev wxkgfxd owgekp bhhb bbhh dgviiw kdfgxwx wryb
+bnc rhes lmbuhhy kwbefga bnc rtxnvz bnc
+ani mggxf mcoixh zdd nai hbhzl mes bdpqr
+mjn uinoty jjegvze bjgqg yhqsxbt coj obylb hddude xqi rhfbhha alood
+cbjzj drmihy tfkrhsd nuhav hihzx bvblqpl tdd szmp gjgfv box
+uumhdxd cmwgyf vepr rwqdkj exwk
+hwvr ydvw bqefu kghes gvbhp awms iqsqes khgse
+mrey jqfw fwvzhps komj dayvs fbui zmtd cofn mrey
+dsjds fdpx irjj usndok qcctsvf fgk wvg txwxcl dxs llp zyilwtq
+xmkelgk fdukc cye legkxkm wwly
+enlny eynln cccku brkz dpof mwfoxcd yftmnqh wpebvyc
+ggdn jnysl dsacffw ukj hdae cmzxku
+uqhm gcachmn kxndfrl htmfis jfnajz fiqiypr kekho kekho ndcw ckrndub dejfna
+keazuq ertql rauwl keazuq obmh rauwl ksrotm
+jppp poigqhv repfsje grjk xwkyuh pkx ayzcj hoxzv
+yhjw pcuyad icie icie icie hwcsuy wcd yihjh jnrxs
+gaug ivvx ceb xujonak hbtfkeb ttciml cctoz
+dggyyi dggyyi gqlyumf yasu fwdfa cbb nncn verhq
+rhgcw gpcyct kiuhbg kiuhbg gpcyct jlmleo nhumm
+wulxxu jyjek hclcp ogob viex wiqcupq
+tthu nxgzpid kcnj mss ukapgkp nnc bxjocv qwxs oejwsif aywqtu brahkb
+dtde bgvb smu vbbg zhlu
+lyo nwjjmep ldbok wgxhto wwuh qfgjknk wnsl
+lleyr onha hkwulbm jfg
+bybjwd uoxvbh mvj iqfpnxs bybjwd zqtszp wvc lbazjr zkzenja cev
+rbuyyr divtslq yuqmyt ajyveb smxsjb nlk tzqhq ims fewg wpjhr gqh
+kpewfd beq klilis klisli eeezut
+euqh hueq ldoo crqurv lvrwh tmaewp oodl
+bqi lzrf jyhvxfh bqi jyhvxfh nbztd lwpdn cuzi
+srjylou phavzjd wost uxkaq byh sluryoj
+ihrdk bcegkpq nygrs qbcq wyjg dvzme pgzhjl vibg kvv
+ijsx iedemek ktlz gtga tbal lbki gtga
+vmiaxn kefig kefig vngxz
+vrdmfvi qts vlvhq vlvhq dihmq
+cfz dyrz zlw qnt vok fwvahg skshbqf hbwozdc ntana jdb uflp
+rimbj bxemw sfps krtk umta vnk ewmbx nrlje ymrtqrz mxewb kjxunbt
+egnuti ozat eltl ngueti
+qtcwoxq rmaf qtcwoxq qtcwoxq
+zws gcoa pydruw qsrk lrkybdf ugr wkrxoj nyvf vitwn
+tmr hhd dojid zwrj bhsim righ keqlep flzunou
+lwoquvy acjowxk tqudk oenvioh nyavyl
+rgh dfhgyke iff cpxhuz hui koe iff hui dmukrei
+bjiumig lcbmbgh vleipx sfawua rnf
+gftfh qwb tfdroe xbno qhgofm vqfoe mux
+ljdrr gyfggai iun nju xrucbis mhrcrh fukr obvuqc whlalfe xrucbis nju
+nxjmjr egqwg arllu xqaahri lzc ivt uhsti
+sqiepba rcmts kvesv nvp
+tiksw tiksw rjni gbhvzm ctbq zuqfyvz
+ibsnm kfka aoqigwo sqouih rxz
+jmymq lxio adtmk umyu sxvzquq bporqnb heol fow
+mepa eckq rqviawv dkqoei ifmngpp jiava rtklseu
+yuycd jiufjci yuycd uowg yuycd udq izkicbr csxobh
+nwu tfsjavb rruoxbn oepcov elxf rruoxbn rruoxbn azglwth jcjm ksqiqpv
+dthfwip zqnwa zqnwa zqnwa
+gso wruece ufl crgnlxv vllsm dpyfm wpa ctxko
+wvpze seodz lpq lpq pmtp wsxs ffppx
+yfxquj phvjn rtwieq rtwieq kgxztyu vbjvkc prqqd lyzmdo ojbrt ojbrt qiqjz
+esaezr rpggiy jey kbzrhu uthus osr xxaiijd qfxlf auhzbx gkigoqw
+yfhcj uvgck cds gjhhrg cmempgj yfhcj cjb
+yxi voxvtuw unwg jqqm
+igvjr ljz rus sru gbjtjt qfeg ztu zjl
+leof ocxns hbkoysh hbkoysh leof
+hab lyxmf yhh qeks fwhfxki xmbcak okqjii nfgzyg bhtfgdj lpmjn
+mgognh tad herere lvwnzx ixwqs zphmuuc etdjz kczsf
+mtej rlolsnn zbl uykek dpkan gmz etxtgj
+mihuieo emjgbp jgks mihuieo iexrfw mjdnr bvp mcuzea xkbusvi
+jvqpj bwt jvqpj bwt gxr
+qpnd fpt tpor bibbpcg hmvguez wqc afl ckviua gpi
+dntmcg jglm sxtnu sxtnu sxtnu
+fzkbptw cbfwo ozvwov wbv gcdd izqo ovwzov lolewo xikqpw
+nkxyxzd kpn datf fki werq mwidqx oiibor zizcjph
+xvgyxym zor ijoy lvwsf fjuara idvvq rreit mqyyy ctio tzwqqhj rnpee
+maqkfpk maqkfpk xukg sfdmnlg xjopvr xjopvr irf
+liujcd vnlkouy dxkwc gto vhjvtw
+swhqhj cas aupsd swhqhj cas bvbooii jquck dtdm
+igh iqicicf ghi pcxt srcrjx gmf gyscphv
+drplj drplj wopgpnk wytag wopgpnk
+zexe ilcqoh qiefb txkuv lirfzv
+ovvpn ovvpn uqeurqx uwzn hgmucj ovvpn sjxulms
+rox silka irhsvym kutus otasof tdneav pcagds
+mkja omu tyshbfq onp trxs lxa tftbv bnpl djhnc zdqfs muo
+tjj rmmqas cbbkxs qio pikk ykyew gxlxt nhsyl ykyew
+frcprg njrz oaxcmhc qben pedm ecvtga nzxwpb ior gaklot dpem
+zyt kncau spoe qlchg sqys wkpbng yflju qlchg vkve bzadbpa
+qtq pkaicl qtq mfkfqvr dnleiq brrjxsx uoyxh pkaicl yvmlug
+firwy imtlp ywl qfa dqrbazz ztzb pcsbwhn zesmlag
+ivey ivey mtvc mtvc
+lhize acwf moa cdeoazd voktshy qmvqq jvmuvk ljfmq tsanygc
+xreiqkc aawrovl pofcsg xreiqkc xreiqkc
+cjbzvn ozds iniqu sdoz gqmki bablvll krs vjzcbn
+izsod htkeqz entxn qtns prpcwu omfnmoy
+kwfb tctzda aztctd tadtcz gyt wunbcub ydiwdin xxk
+epnl ijcp giq ltfk zjcabve zfksmz epnl giq xxxbsom
+ulyukpa mdjsbn dydko uhkdt qms aaaj hustlwu
+zlsbu ohx jcwovf egf zlvpqgx qhejm wrywdmw
+uhxqrzr mmu kjxcalj unuohiq rri yzngnb ikvlxry mfiym qbksdx
+khqciz som yklmm jceb khqciz jspy jceb
+ncwggv njvi nqox krtsn lnm
+bgtqme xaxcoq qbtgme obqual vorfk baoqul lgrb
+jli tsbb nlxjc pkwzmz dlxrj hmho gzguko ilj iyaasm
+wlmw grkumg dynwtyo emxhhqr huluk slpqu uhqcmd absmr ufirmwr
+pbs pcammxv dplfr tzvmav nccyy blvyq ffhnz bccutq
+hgge ghge vxmvz hqxgjdg zab guo gheg
+ylj bucoyoq udndc wpgyrbx ueh udndc gxdsdh hdoz wwgqlg
+cjdeh gttyqe kdkm ltzd lfeozse quvjq mnwhokm kdv oojxm nxt
+mfkzus knqxt saxkqww njx zumsfk sbmcyad cpt agvbuv
+tukn vyco yobvsn bzgnn klrnzy kea thzk pxpwq ryfff nxzm
+ylbm lxlz lybm lzxl
+wgtxoij zad slgsi cvnxfg iomswwl vmx
+hkm yinhnkj kmh kwkw kayknck chur styjif yknakck
+rtfwhkq rtfwhkq zsf zsf
+sldq zlntr ueegiw kajivqc ozcbm ceft snvugom pdyc elppeed nnqrp prwwf
+lhk xjonc muc tudag tsafx mmivb dvrjbp qgrew
+hnzer fbgqp aazta aazta lxaz lmgv aazta
+victgxu victgxu mlpd ummrnbx cazjgnw isxcyp efy zfa cyusj
+gyojxo onzq gyojxo uxufp awi ilhl wefwfxr gcjlt tmliynw uxufp pdcnxah
+wjwachn xkuhfbp oky oky ybaeqkr rbuix yreoaw wepmye brvon aasb
+kiidorw vxtxiqx wtqvbrv efdth isel qbom vcssyc vxtxiqx wtqvbrv riafzsw mqzsj
+eurpjd vkhdamt tmfx czeoot hiz ykz lmixzq tfur jhzr
+ipuftpj qbll sqkkdw fwncmiv bri oeeh lehd ioh wag
+suima nanngc imrmc krq atxdo woy atxdo akev qlr aezco qlr
+cfc efwbzck ozkmcxv moczkvx ccf
+bnekky iakrk sask uwgnjp iyi rynev bdnas ldh kass
+sicmw vvjbvv cap nsumc xgvrlm wsoo uoqdu psykckm
+ugg mtr wnzhmmh tjxc ehwnji lwhu mdsckk yvmk enubrqo
+grb oxmxz ohu ytetedv ssx apzlppg fdkamm sxofc jdt ynmu wyejok
+umoep rbyqm eqfk twqnog cptbbi dragna ngqs ffb cexxnc rbyqm
+utizi ormkel wvwur bdx ecelqbv xiccama aag glfvmj
+znb rsuqoa uxo svc
+obs lbifa cffi catpd
+qkxwian ajlzjz wewduzp bbyv qmt fsr qgiu epinp ghmf
+hatg bfgmb aght ghat
+kuq inp dun cknbun wmwsu drlmmg kyxc bdl
+bddybth swdbf jhi fva qpobio bjwm wjaztp jywi
+mgckz vhveu zkemhp zdf xtiqqew mlx wazgd
+umbjq pya lvvxf jeavij rhrxvew bwjqgpr piz
+xaycpwo vjcuc qksc yuixhni sfbfb dydyaq gdfvb tggg xidphvf bpjdrl goskxym
+agxfoip gguif wvo agxfoip ntkbaw fbyggy ooft zxih
+nzvsu ffwq uxvfbl qrql olhmhom qhdltg ymwz krtndtx olhmhom nfsv krtndtx
+qdp jqk ustz xjripzv mnk grnodk pjwdsj uug zqxjqj
+mufrcox zunisfs ocvcge acamm xua vor bsde kxr vor kxr orccxx
+ncycbp anvcxay bmm wndmeaw oso knmk mmb wamenwd kmkv ppdd
+motdcn xzagzwu vuzt utffrn yuqxzrh uvzt ujttq
+tauoqy coiy ybesz tauoqy wpmr trquyne ahxbj jzhems dsdy
+aczq ypw pgmzz srfn quatjgf
+cih ypapk bfxvr euvhkk gugru auhqui
+vyf pssgfvy dnhvbfl xpacme dnhvbfl mzdv iynq hcqu
+lbzvbu hhxiq hdfyiiz iyzihfd xhqih uzdqyxr
+iapbdll vdr cprmrkk vdr dfjqse mlry flpqk vdr
+grrfkq xcpxd grrfkq dxc bjpr prvwh swoc swoc
+bopo chvwuhf qhd ieesl xey ieesl fnjcbe
+kic fyq hsucnu agwyl pzzmd hqksh psw
+mxf uau iti lcoz lpg zbu ocre wqlocmh mxf nidqj lcoz
+bypmix ptzxgmf xmtzgpf hrvzzq
+lbfw zwusma lbfw tuyyy
+lrf uej unswvh obgsb npbl zajr kenea uej qnyjcu wzufim qpzkgya
+qcrxj llyu kligt hlm ehwtbx dda lgsvhdt xewfcv uikn
+nfzjx izqdbq mfbxs imiuc yqxb xlmvix izqdbq eflqfq wku omgtuu izqdbq
+lasdwg hiy btzt eefd eyoep icn nnmhg otml rek luixac nyzgn
+vekteds utsuxdx utsuxdx vekteds
+feyov qrij zbebwg ijrq seplram wttkwm zewbgb kzuhuh
+dmkgtv wohgqo ddtqmv zatahx mym hqowog tkmvdg
+vhha wjrmuyx kqh vyyrj xzchbi ejsdq orlxg vyyrj dlrc
+yetngqn zdtuqox hkarjei fqpsgh eaqwbg zsssog ghb gddqqzr hbg
+obldb zsrhz zxp uxphnev mwnbc pfjft fms xwslk vjm fxy
+nfij dbfykv ttq gyjgac igxuyqi gtiioqx ilhdex dbfykv uyp bdiwya gqf
+pffzruz vogfosh dcs wje
+pohhf fhpoh oon yyz
+xxuam afwm qxl lnt syyr bwxhhf sozauq shlhfmz kwnn milav ochq
+wefcqrt gejw cwerqtf fttf gjew
+jfsvnmr osca epwtle pgfif sxom
+exlfzmq nakp rgdnx rrcvth vhrrct aajjdrt ryyg dsozd jdqlqj pakn iruv
+rmcvo txszcs xxhyxz hbsozk wshkocf rmcvo rcbnt
+kitz yjgney yvkymef nauj hmllsgl kyhm kqr pzsu rcf pzsu qpte
+cdinpx bfur mkj naz ihkheyr nohhoe
+ylris xeqcgup wap bbfih tgfoj
+ina gnlnm zyeqhij cudfuf ipufae bvkdzni aat teqsg cudfuf bjokrbl teqsg
+aedx edax dnfwq qndwf
+rdngdy jde wvgkhto bdvngf mdup eskuvg ezli opibo mppoc mdup zrasc
+qcnc iaw grjfsxe gnf gnf
+zbjm snznt zelswrk gkhlnx dqxqn qqxnd dmro
+zisecvx ztezof uzbq otnrtj qsjzkwm ewvcp rlir bfghlq tgapdr qxmr
+ipnqj opjf vabyoe wkwnd
+wyf mfqxnrf apm snarf jqu aaghx pwecbv lvghayg
+acncv jmmbwlg oiphlm ifuo cvt
+pvmb egansnd zmh gcuzzci rrxpslv ubith
+uoleptg xbouzn xbmg cfh cpn wpqi xbouzn xtxis sxzpns
+rilybri kurbpq vfmjpck tjyogho hfyxad svfofx lfbbhxj khaerfs iqr
+seaebgz wlmtkre qguv qguv wlmtkre
+sgo edkxya zdqgwtt gxu nibuu rairqoq mzxli dci qsv
+tsol mdhzqr rmaqnru ggvcq arbwkn hlkcnj ljkcuof
+mmliphp ocup puoc eijjv
+gmajqpb ijki ijki kvz
+pmqss unhlpcj dlkll nuhlcjp expe tlurzmv nsy vlumtzr tgseozl
+gkvaoni hsba hsba viuedv phyoclp fdq phyoclp febld nqfs
+rxvdtw abn pntv qrqfzz slsvv abn lrxix mnu npot
+ghlfjp woy xwkbmv bkahpkj jve cncvk jvdype fwgvoju yrkwjp gwfvln mvkv
+kmluh mie bby fwer chsinb ojglqr nqk mie
+yzmiu igkgca ybnsqja jpfejtp yjddy xsosxfi ingx qwuhb emrkwpx idqjmmm
+btrllw mphm dkvo ewdl dchcul yah btrllw kmqi mtvgk wtb
+hxsgard yuikc lykt tdee adprp gpougod klnzk mzsmlb
+hdn znblw ifoblur bwzln dbv
+smofpbs vjuyiro llk lfzesga tybu tybu
+gffnpug xaup iqiyz fjkpnkz drrk fwyxw lwzfskz gslwpmv vjxylva tbkyo nib
+evydmb nhwuiiu fkerq nkgbuyy uclrs ydjgglh xhotwbm riirgzt
+bsub eavbt uvd dpzwyt rhn khrbptt xszckc djnfxju axofhat powmso nvdffrv
+xtuykl fjz mbikc xpnx hmey fjz fjz
+rkls nwdcsyx rkls rkls
+tygml untequ ybdfumz nqffbq uipc sove hfnqj
+ytecew vven koqn royynd qsn ksl qsn sdw
+hknlw qwho whoq oqwh
+lzmmtqu qvhyeo cnofuj utpwkjz gnirz yhhu aodbnd
+zsr axw kwtzcv tydzo kwtzcv lkxsm
+rbjtqe nihifd gvdxd bpxzy rxteky vgcgllv vbbua anygiup rqo
+dpd wblfwp wblfwp wblfwp ygahc tqjbaq
+gsw gsw pacgj xmrcz zmxhmch xmrcz
+pdq rhe xqmq lgpkhg fyffrot ovnqh wle
+tbjavke ypzzrj jizx gdxoh icjsat otfh fmygumv
+snch nxlgjgp jeyn sxoqfj jtage jtage iuice
+rtb coefuj grwg grwg rtb krhqnma vfhgbr
+vhegtl btorwxg szcev kbvkx itsk nlzpbed
+hiukrf ilzkm yllhh xsgwkdp zyy kjbv
+rfcg tdorci zcj wzftlv rfcg rfcg
+lgbc lzizat vsno pau nvv vsno bbr lzizat qhtb gwp
+sfwnio tcugjk bsfsz ykyfwg ibkap fsrvy mygk kzunawx zyhyh
+mpavlh qps bylh lttjkz rqabgk vewb bwev tlzkjt gzrbxga ktmso prpkj
+gpf ims ynh ffrs vpa iemp gofh cgbauje
+secys qks mcnfhwh drog kqs pajy zoltkw lfihnb myb ioxptu
+ytq nrta ouk ajqblf yuwwcd zdy blyoxbw dakk nvgi bzrhzaa
+nkoych sufiia xkdvw crtldee zycl qblab egqhr qblab
+nllno muxaf vds qjnitmw zkpj wskyhft kmqct xamuzpw qcai cdjtbt kaxv
+qzdytpe osr fuw osr qzdytpe whperd rydwdcl knoa
+zkdznhd peh duoygr zamrgl irnvj otpe pltpq jdkecg
+byzgw rece iigdug ehif tpgje
+ccnn foqdran gbctca tefdjxh ntcr rjciii xip xlss crl wvvhzqm twyohf
+dqyii milqqc qjgkojp qjgkojp ryde
+tdkyj tbrcud tsba vqtmb cjwxnf
+hqhmq wemvrce nagig pwnw nagig epg nagig vlsi
+tqgvw luoplw hccti npjm rytdruq cylrsun rytdruq vjsbjl rytdruq ppti
+itgt tuwc itgt rvp itgt tigns eipl ksmru
+pdw wdhtkn nbdbpn wff zhuuipg rvemv qxr
+qgkwdq cjilayh ymeks mrpuzai dwgs stfstgz ucvqhb yout oiq
+vpxik ypfr qytimvu qms oxbmw ppyfx
+fwwidn gdhd pyuexk snsz iwndfw
+lfcb sllxjna lfcb hpzahfg mmvgaa svny jhuzd
+unyg gicmzd fwc spkciy toyq wjupckd vzzx iuqgka ytqycb pxsufj
+goj tnrcml eyizngj txa xrkiw zvu igduz
+wek xrrlkna clyof rrlnxak
+cjm rmyuku vjom gtf
+buk cfae awstd dywgqp hxo wcxvf laihqw xdqfes wdbh qceh uzlwj
+sudguo dxwplto rlebdh bkamu dxwplto
+crwkyxm yuz kjtdhom crwkyxm
+trhc sduorxr aizfryh rsudxor gbyc
+pczkyl bptp qnn nxmpwsx udrg hhlb rubtrmx twzodlp xygnht
+jmqct cden yfajtkz fevcw sxonbxz sxonbxz qkzkm hhngr fbv
+sdsnm mwvicr wypfi cty ndbowr woiz mrauwzd qlno mwvicr
+vteyo fng lvr lxytn txpj milg
+wjx ahtmgo cgwcaj kaxae fhlvlqf
+ezj eetqhzu upwda iiefwlk vyvby
+imalvy yeghqe jwcu mvrod cwju
+bxnmsa yhfu npsdar tsbri hfuy sirbt oofxmy
+fkndt elbjtn vepqtxt elvpf fpelv bzkgag qttexpv prblwb
+rmq iqs yvprnyy iezqrzm wlqsrr
+yviovq lekxghj oey qwhzj lxknxw qiyovv ksnt jptz
+tyrg cifxt hugqf tyrg ffuiv jmax qyw fozfosq ffuiv
+nmg rsl jpzazd qbtlf yxqtsj czwmdfd bamge lbjdof uqy jssc
+cbx boozjip pwgvzlq rjz kxy kxy hszacok fvsq jhnir cnsba gafz
+sbcuxb wfur nnnfqjj fdwg huhe sbcuxb
+icwk qelbxs uevp qped zsnhh wpuok wddxsln ftnzupr ruxol cgxjb jbhh
+izcp htykj xxmndoq amnspe htykj
+vverol oixwlny vqd tvfzu henc gnyrwr
+ytxio etytsx choynep zqapo hfjit
+lkvgr oyzfa taiqr jok djatvy ckif tmdw oyzfa zroy
+jlgpyp kkqysg oqjki hjohoug hbhta muilz zft
+sumfyu wftcu bwwdcy lezimwa qwvxv zwh mqyv bmfot aii torcol rnt
+tpdj xrw ccsbnh fhptv fwkxjfm dmqaokd bjci
+zxi vmf vmf dpyg
+sfzxysw lcms bkojtv bkojtv
+opywo qll ipkitr mtwp tudrr svhyp huz bxsdpn xomfy
+gkod luo qrosbp orbd rpsjzyd rlh gdok tze
+nusiuq nusiuq zeys ahufexc
+veno jntg avtmtdn qojxru zegdcql odfcetz pgehau
+uqun vigjm ykac ozlelj danmji bibugox
+rpuozh ajwru rbvuevv uhzsq
+iawoe tyb aewio ymf byt inijv ctu fcys micsgzl pbby alt
+gktyxp ris mqpfm bkqsfl nrg idbbcxg jhcf
+qibt invvv qibt luitx rnm eby hrfbmwl wnap sgkzvb qlwc hrfbmwl
+jwkv qecsjbw lycgldd wjvk tjcp dycldgl pzrvr zrlcf kji
+nzsrmiq nmhse ilivrk kqv
+besmyzi imkgpt iekbjax abxeijk uvzs wwv
+jdocl uki ltswp tjkljc ymce iuepze qygqxzs tei lkry
+hhyfy gvzd mqksxlq czn afe mesnag eep frwgekg mqksxlq phpy
+ehg connnza ekt ddgokw
+mpbsoms uzhzl xevww ztt uzhzl
+lftybr firc awsud dsxdkk ltf ipjv dtx lcymth
+vkcpb gxtxq yioeq fexj xxgqt
+srvca fslnnvf nfmkpvt egw wemumq jie vznf dzsjw cukf kcvyir
+yxjkl lyjkx jyxlk kgc xtz
+tpoe xzov csp leleoqo noyre tdhf cyib sjgtdx raehdw nmcxp
+qvt uhznqe bpvos vtq ddlebtd tqv
+xlw utsxs gpia rvlvnts elkxr dddihy tnrslvv ibf wlx bxg
+cwqnnrt rkkqyf dye yde fzl pthanj
+boc rqjenpp xjqte jteqx pvoofc pidqe ruoucy gvnro ognrv
+qhalb gnazwc fhl iuti
+clnbjfo nnfs nnfs heymvr oarew oarew nxu
+lwtrotg hiaxwj ymzbly nvhzjhj zlsaheg nvhzjhj ymzbly
+rrvi tsjp tsjp tsjp killji
+rpx hiclj cmwq ibhj nfd
+pvwymn iebkd xmpw vuhhkap ksw zigzy mzzyyxy rmuh iwwhea cglfq
+rlwelgy sffml jin qsdzro xlsty mgqzuu etxjuo emzd jgnoyq tkjuy vfvb
+tkctdj hhkuc viskmy obw
+zvjkuj akeky ikj jqd hfhzbwe bkc
+btev nrdo hcyiuph stf qharfg vpmel mpfz nvs ytgbbc
+ieepn ndueuw svmdr tcvumw mceyrn mrjwhyl tbdj mgrgvz
+uxrs ckyi xpmqm czzrkl cjp
+nlliwd wrqkrkz yjmng nlliwd zirde hcjjn wco ysf mgl
+dxti lcahe ommare izlwf ramsfb nzgfvo ijvm fwymrdu bndq
+isxy jpvuzu tdduyhw dixp cfa fkzbteg ytoi kepk ysf yqcpi
+qmeprfj soqo ncgeor cqsuuj grzy wogxy vyblnbg slvtry vdols kka
+ltykfp gtzl olrp gxend vapee deq
+emywfbn dbfiut rkt wvwe dbfiut bwffhea yuzcxv gogpicp wvwe
+vqvmrp ofbk dlfabd jwllzxk obx vqpwjj umvng tqwis fstxy fstxy
+miha zgvyux rmraszo xwf
+kjaagk btm kjaagk wkewjrg kjaagk
+lbmli aizs omrdr gzktnx asiz ptanzpa xlo ljre ckyb wob
+svz dlk rijagg avxmg fkzwhk uro gegm
+dzplum temdw jqnm tvxcww bmg tftttpp deuw comxey xfimzjx caluczi nqn
+uwvhxa ztkd nlsdyt vihl julkwwv uzch dwakhs
+wkhuihh ycrc cxff vzcfhpp uegfd gaok kcnvz lhzogq lwa tyrypvu
+idp zmrrzp zmrrzp nktp xsnx rjsxn
+eybrnib ivgntl vaxsbpi eybrnib
+nzvnq xvbfa pbhwwh ylju runvsj imlx vztesn
+nfdohd nfdohd gtevnky pivjyct ihvd fzcsrq lko fmqk
+kwpkks ecikxu bcxswlt qvrxm sbcqmh
+kdjrmj piuh kdjrmj vnaf gyedkg vptxgm xezssxx zsg qjzpo zsg
+oqo sley aqx qmpqb fgmylbj egd zivj kepxizv kuakyn lunbnd
+hmcf hmcf xlhgc hmcf cdlm buofnx
+onjcj yluonz kzmk phqo phqo phqo
+ohaafy efl bnkkjww wwjnyoj dxeaig ywnjjwo slk hrbebw ohlyju elf
+msohiqz aunk njki bfktdgi htmyrj mgx
+numlzrl rmnlulz glb ltt fhbajz gqxpu
+gko hco oai ryq xwy sdqosft spjkiu cxfhg ycwpglh noy rah
+btzpjem brpk vqr atxu rhlh rqv jmg fvyus
+phmxxgj ejx xje qtk hsb kqt npwj gqt
+hujyjp nwmsd ant zipuya lrkahww uwqal vzlo qmbo twkjkse ufivi
+zfbnyz fwvh xrnrw usn zin daq iwjzj
+yykyg iwypfy hehqnl cjvk cevdrec
+gui muuto wsta glqmx gfo rdmbv mxwz gffzt eejpw gion
+lpng nduid iqbpu nduid knrqd
+xwxn oefpckv gjaua ugaaj gjuaa
+qxk aeql trqdmqc crzlinj crzlinj trqdmqc rijcne ewyf
+rfv qmbe fvr bmeq
+upqyfw lowzq wpen upqyfw gfskbil sljuzh wpen
+bdcara qyhx rtaez qyq gbyr
+evzls qxtxq clzd svbgqi zxlzgss vtrre fko eebo qjyl
+zaapeo kpwhz tygknau nyd pch trp xqe
+ypzcafg rnqmbh qtteg sncu ssojhhm zonfym thir xmgheb wqj gpjg ssojhhm
+wvcwyn xrf muozyya lasdp xpjgu kpqv zkiihiv ifje cbdlavg xbied hfnaa
+qqqb rettz rycukl ihpkhh
+dnxzxqv znb znb fbxj azxtezb xvxa
+peqkd xlzqkov esgnw ucku hrwpfxd xtd vnig vlmfp ajte qswr kqoj
+dpwy oavzkk dwyp ehij upqxgii pydw
+amfc hfv xmqa nqvn cal rqmcq oej amqx cla ntxj
+hqhhe qkbhwli wmhlcq xaczs peywuo
+vcr xfv xfv kymo qpszwzo xfv
+nmrbur tswo xbo ljlrzo bmhpgc pev zovkznz lok wbbhtkk
+tojj lxqgr rhjavrm ndsdup gdbjwaq cqpnl wfaxivl rfry ryfr udspnd
+beffod sknlph amb feobdf
+mldgn jxovw yuawcvz kzgzwht rxqhzev fsdnvu vluuo eycoh cugf qjugo
+tlnd qcxj ker fdir cgkpo nrqhyq raef uqadf iahy rxx
+mhvisju lhmdbs tcxied xeidtc ujry cditex gvqpqm
+cgc jazrp crgnna uvuokl uvuokl uoiwl sknmc sknmc
+rvbu czwpdit vmlihg spz lfaxxev zslfuto oog dvoksub
diff --git a/2017/inputs/day_5.txt b/2017/inputs/day_5.txt
new file mode 100644
index 0000000..3b5dd14
--- /dev/null
+++ b/2017/inputs/day_5.txt
@@ -0,0 +1,1070 @@
+2
+2
+-1
+1
+-1
+1
+1
+-5
+-5
+-1
+0
+-8
+-2
+-11
+-4
+-5
+-10
+-4
+-9
+-9
+1
+1
+-11
+-8
+-19
+-14
+-6
+-2
+-1
+-11
+-23
+-8
+-7
+-9
+-26
+-1
+-8
+-11
+-34
+0
+-22
+-17
+-41
+-12
+-43
+-33
+-15
+0
+2
+-41
+-41
+-26
+-48
+-52
+-47
+-30
+-38
+-20
+-4
+-21
+-17
+-19
+-55
+-32
+-12
+-55
+1
+-34
+-8
+-15
+-59
+-56
+-16
+-23
+-43
+-5
+-41
+-56
+-32
+-67
+-14
+0
+-28
+-32
+-7
+-54
+-19
+-9
+-24
+-63
+-2
+-60
+-5
+-78
+-11
+-84
+-50
+-36
+-72
+-14
+-30
+-4
+-62
+-6
+-1
+-69
+-17
+-33
+-32
+-45
+-71
+-87
+-71
+-60
+-19
+-80
+-11
+-106
+-45
+-27
+-23
+-51
+-77
+-67
+-103
+-17
+-98
+-109
+-91
+-125
+-68
+-39
+-34
+-96
+-49
+-64
+-38
+-105
+-31
+-100
+-89
+-108
+-69
+-36
+-94
+-38
+-124
+-123
+-79
+-92
+-42
+-14
+-87
+-68
+-17
+-36
+-21
+-54
+-98
+-79
+-142
+-25
+-60
+-112
+-99
+-64
+-15
+-78
+-37
+-64
+-15
+-129
+-32
+-102
+-74
+-112
+1
+-146
+-151
+-147
+-153
+-4
+-181
+-22
+-176
+-4
+-57
+-151
+-86
+-121
+-38
+-137
+-160
+-156
+-72
+-73
+-149
+-64
+-182
+-117
+-146
+-180
+-195
+-27
+-194
+-191
+-108
+-153
+-40
+-149
+-100
+-120
+-207
+-83
+-94
+-73
+-200
+-95
+-155
+-94
+-76
+-9
+-149
+-70
+-125
+-49
+-146
+-223
+-68
+-139
+-26
+-132
+-142
+-165
+-2
+-45
+-154
+-129
+-130
+-185
+-60
+-34
+-173
+-91
+-37
+-40
+-153
+-189
+-236
+-95
+-128
+-46
+-14
+-53
+-245
+-67
+-9
+-208
+-244
+-198
+-74
+-62
+-104
+-51
+-251
+-48
+-50
+-115
+-76
+-79
+-32
+-82
+-65
+-185
+-124
+-32
+-189
+-124
+-174
+1
+-273
+-223
+-275
+-238
+-200
+-184
+-229
+-195
+-152
+-63
+-150
+-73
+-44
+-54
+-187
+-49
+-250
+-192
+-290
+-282
+-266
+-214
+-117
+-199
+-83
+-104
+-251
+-176
+-262
+-296
+-39
+-259
+-87
+-132
+-166
+-67
+-194
+1
+-294
+-8
+-3
+-264
+-217
+-228
+-233
+-241
+-294
+-210
+-72
+-307
+-259
+-33
+-101
+-103
+-235
+-100
+-110
+-253
+-292
+-134
+-269
+-52
+-265
+-15
+-29
+-272
+-126
+-210
+-151
+-308
+-40
+-40
+-112
+-268
+-185
+-346
+-237
+-287
+-34
+-302
+-41
+-25
+-191
+-29
+-170
+-95
+-315
+-278
+-160
+-220
+-99
+-126
+-224
+-33
+-350
+-76
+-138
+-340
+-284
+-268
+-128
+-238
+-197
+-93
+-110
+-120
+-190
+-140
+-64
+-217
+-296
+-103
+-363
+-199
+-254
+-233
+-190
+-282
+-136
+-174
+-309
+-61
+-206
+-18
+-105
+-111
+-163
+-287
+-188
+-145
+-294
+-251
+-398
+-265
+-273
+-50
+-250
+-376
+-5
+-357
+-6
+-8
+-198
+-20
+-82
+-158
+-122
+-196
+-97
+-183
+-48
+-428
+-36
+-88
+-424
+-35
+-380
+-109
+-209
+-323
+-394
+-102
+-276
+-153
+-229
+-320
+-391
+-7
+-328
+-127
+-430
+-102
+-372
+-447
+-222
+-401
+-184
+-183
+-49
+-239
+-413
+-101
+-187
+-289
+-12
+-418
+-248
+-279
+-318
+-134
+-443
+-272
+-456
+-143
+-3
+-209
+-276
+-414
+-189
+-302
+-238
+-241
+-106
+-332
+-375
+-400
+-476
+-9
+-95
+-412
+-52
+-127
+-442
+-278
+-25
+-446
+-411
+-39
+-55
+-80
+-234
+-361
+-223
+-384
+-283
+-47
+-164
+-18
+-38
+-87
+-393
+-93
+-380
+-493
+-73
+-150
+-241
+-378
+-211
+-516
+-349
+-520
+-38
+-397
+-406
+-16
+-461
+-276
+-448
+-316
+-376
+-156
+-369
+-216
+-431
+-309
+-400
+-135
+-523
+-40
+-508
+-87
+-25
+-151
+-355
+-141
+-3
+-495
+-153
+-438
+-343
+-161
+-66
+-455
+-70
+-248
+-278
+-548
+-300
+-337
+-290
+-551
+-200
+-68
+-540
+-476
+-395
+-245
+-318
+-424
+-112
+-556
+-541
+-94
+-148
+-542
+-100
+-120
+-199
+-569
+-471
+-298
+-16
+-453
+-469
+-50
+-500
+-84
+-435
+-579
+-287
+-522
+-77
+-83
+-347
+-437
+-171
+-231
+-139
+-350
+-357
+-221
+-214
+-224
+-148
+-125
+-385
+-255
+-38
+-320
+-254
+-517
+-532
+-80
+-286
+-58
+-97
+-390
+-309
+-548
+-319
+-323
+-238
+-297
+-12
+-312
+-517
+-434
+-466
+-103
+-621
+-448
+-503
+-72
+-601
+-287
+-61
+-577
+-87
+-143
+-33
+-482
+-275
+-529
+-340
+-279
+-130
+-512
+-63
+-109
+-528
+-22
+-549
+-317
+-375
+-377
+-385
+-23
+-191
+-138
+-509
+-40
+-565
+-559
+-14
+-547
+-28
+-159
+-153
+-585
+-508
+-582
+-431
+-580
+-637
+-561
+-513
+-243
+-420
+-298
+-485
+-132
+-613
+-157
+-521
+-596
+-61
+-420
+-498
+-577
+-563
+-354
+-662
+-264
+-273
+-111
+-597
+-466
+-389
+-345
+-306
+-102
+-57
+-596
+-1
+-45
+-12
+-619
+-47
+-43
+0
+-323
+-9
+-319
+-529
+-402
+-238
+-191
+-487
+-315
+-65
+-386
+-110
+-605
+-363
+-461
+-6
+-95
+-95
+2
+-596
+-454
+-618
+-83
+-481
+-283
+-386
+-247
+-417
+-707
+-564
+-603
+-17
+-712
+-140
+-336
+-567
+-443
+-36
+-476
+-251
+-735
+-589
+-198
+-197
+-476
+-49
+-736
+-422
+-383
+-569
+-732
+-1
+-104
+-261
+-352
+-453
+-273
+-344
+-66
+-307
+-698
+-158
+-238
+-280
+-207
+-624
+-491
+-765
+-506
+-146
+-616
+-711
+-650
+-655
+-393
+-19
+-315
+-311
+-572
+-675
+-533
+-156
+-373
+-744
+-142
+-582
+-491
+-796
+-777
+-125
+-483
+-426
+-510
+-560
+-700
+-778
+-407
+-440
+-409
+-238
+-738
+-477
+-147
+-152
+-317
+-110
+-323
+-788
+-601
+-202
+-517
+-487
+-726
+-300
+-1
+-554
+-448
+-15
+-191
+-531
+-568
+-466
+-527
+-132
+-254
+-290
+-8
+-400
+-655
+-788
+-376
+-249
+-662
+-315
+-378
+-41
+-793
+-163
+-29
+-327
+-839
+-133
+-124
+-129
+-673
+-32
+-605
+-393
+-664
+-374
+-135
+-366
+-717
+-93
+-601
+-763
+-788
+-494
+-802
+-282
+-443
+-491
+-461
+-197
+-83
+-96
+-162
+-97
+-161
+-232
+-144
+-472
+-118
+-429
+-387
+-724
+-789
+-636
+-298
+-484
+-720
+-526
+-382
+-102
+-449
+-846
+-525
+-547
+-696
+-524
+-272
+-843
+-286
+-247
+-838
+-447
+-489
+-797
+-483
+-386
+-775
+-340
+-772
+-158
+-293
+-256
+-432
+-812
+-273
+-93
+-487
+-264
+-594
+-330
+-712
+-798
+-131
+-591
+-539
+-677
+-455
+-470
+-108
+-573
+-57
+-845
+-383
+-273
+-890
+-747
+-913
+-648
+-625
+-650
+-544
+-137
+-490
+-434
+-734
+-182
+-355
+-859
+-835
+-141
+-536
+-874
+-102
+-940
+-359
+-83
+-800
+-894
+-712
+-470
+-687
+-578
+-435
+-935
+-400
+-780
+-814
+-458
+-892
+-481
+-371
+-761
+-348
+-388
+-891
+-764
+-297
+-536
+-695
+-314
+-336
+-978
+-379
+-462
+-597
+-533
+-561
+-9
+-474
+-292
+-560
+-420
+-828
+-721
+-769
+-874
+-157
+-495
+-771
+-899
+-571
+-98
+-282
+-233
+-203
+-982
+-416
+-142
+-993
+-540
+-979
+-851
+-506
+-238
+-292
+-184
+-695
+-195
+-632
+-575
+-962
+-76
+-546
+-705
+-13
+-271
+-222
+-124
+-380
+2
+-1003
+-251
+-525
+-228
+-644
+-159
+-624
+-477
+-912
+-712
+-343
+-263
+-88
+-745
+-85
+-374
+-675
+-804
+-610
+-854
+-511
+-612
+-964
+-731
+-358
+-495
+-946
+-466
+-364
+-1053
+-57
+-101
+-829
+-155
+-600
diff --git a/2017/inputs/day_6.txt b/2017/inputs/day_6.txt
new file mode 100644
index 0000000..b16e11b
--- /dev/null
+++ b/2017/inputs/day_6.txt
@@ -0,0 +1 @@
+4 10 4 1 8 4 9 14 5 1 14 15 0 15 3 5
diff --git a/2017/inputs/day_7.txt b/2017/inputs/day_7.txt
new file mode 100644
index 0000000..faa4be1
--- /dev/null
+++ b/2017/inputs/day_7.txt
@@ -0,0 +1,1091 @@
+yjmbbu (75)
+zdhvqrl (40) -> fpbsu, fwpfjjd, viqhfi
+dywqvqh (9)
+gewgn (31)
+xfekjt (67)
+zezowe (31)
+wgqkdcr (79)
+ljhwzvv (258)
+vustse (1584) -> ffnabs, qinmi, qhafxnl
+idfwjgx (112) -> buoakk, itwbpot
+lxesg (71)
+qkbnq (99)
+jppgd (27)
+ztghd (125) -> bcibchp, aaheijb
+qcrpdy (29)
+fwidkbp (152) -> mnkwo, ehjooz, jvccsp, cyrrjtx, imynb, chnkkj, agywjrs
+nymhem (52)
+cazid (93)
+olspit (121) -> bqtas, fhuiyrl
+ayteb (92)
+hjucki (58)
+wrqtk (305)
+jfjemon (217) -> bjhickt, uacjhqx
+mcmqliy (925) -> coopirx, ekohgo, ioywk
+rsancy (70) -> aeuub, vchuc, heacb
+zjwpbzs (23) -> jysaup, pgubexv, lckuoqf, eeguu
+qflouyn (90)
+nswximo (65478) -> ibjvonk, sdhtguj, dxyifeb
+rymkqd (102) -> vgqeyx, zezowe
+wlujpl (92) -> sjwhig, wymfopy, ylfsnz
+imcczga (95)
+xehdglb (52)
+twubx (46) -> goimlra, vlimzz, xaoncma, gfzbp, spdhhoe, fhmauag, cyapi
+yjhes (72)
+ymcuygn (81)
+yatbsip (19) -> bkdtinl, nzqcq, tkmed, ysbrui
+yipoeia (58)
+chophr (27)
+tdwtlf (305) -> epuaii, idfwjgx, nwikpdm
+emzrj (119) -> aimav, dtscjna
+vbxmpc (7)
+nrpxx (21)
+wgexpa (103) -> paxzd, vgdwm
+vnrmx (359) -> knzppj, gkkgkp, ttwfig, vcixs
+knltna (677) -> zbhtee, ztzwh
+ojvlwm (52)
+bgflw (27)
+lsdrwz (73)
+hswzo (40)
+spwgm (351) -> mizab, cyzkk
+jlnyr (16)
+nwikpdm (36) -> ihwaeuw, wwkeej
+qbmtmcs (34)
+djirpp (19)
+pkfhp (59)
+qfypnb (76)
+jzequar (272) -> mtcrswx, wkcyd
+tttle (71) -> xlskkfi, ayteb
+zbhtee (48)
+iriun (9)
+dwezv (73)
+tojyt (58) -> dwezv, nbngkou, wnjtb, rarkunn
+bsorz (27)
+qvkotfd (337)
+azxjd (268) -> exeub, lryzkx, nqvxs
+wpxxh (998) -> wrqtk, yosnw, vyxfljc
+gwournc (85)
+aghdlll (88)
+lejgcu (19)
+lxlbt (363) -> oiosol, mpchqe, bsorz, jbpjt
+nbeagw (94)
+vbbgeo (19)
+lqfyzo (21) -> tggkm, zdbqs
+vqclii (331) -> dmkbnot, omdpc
+lhmnd (216) -> onnylx, khaupo
+wwkeej (60)
+laczal (99)
+xrbjn (20)
+qvteg (64)
+ogbsm (92) -> xpzhy, mhsjkm
+ymckwqo (41)
+ghsjtj (271) -> hhmwlo, faixe
+sjrxs (259) -> mnijdlk, hygfoe
+hdvel (197) -> upuxd, dtstgj
+lckuoqf (78)
+yppydul (91)
+frirj (6)
+duftj (42)
+dnmvzeg (64)
+cpazlc (19)
+krxyaak (198) -> maqgick, xbnmvd
+oyczfgb (395) -> rxcnn, ktpte, qybmgto
+oxiuaz (12)
+wfphcf (6)
+ihtnbb (87)
+omsroa (45)
+lybkeg (6022) -> oyczfgb, jzequar, yrcgsnx, ujulj
+agywjrs (184) -> anpnrdt, hgdbaol, hcjmsd, kzbvrxk
+tiujei (34)
+lwencl (28) -> ieusgd, mthhq, fsuzqyz, miwoup, isrtfc
+wekya (34)
+bkdtinl (1167) -> ojsjuts, euoclfs, xbkeua, mykrcq, jjsvfy, aazxafl
+qinmi (1896) -> qshbt, ruozmjk
+yfmxvay (46)
+kgpwo (52)
+fgjjwep (14)
+odvtiti (76)
+ienye (19)
+tcvabyz (99)
+ycclns (7)
+njogewi (30)
+bfchbs (87) -> jykbb, qnbfk
+dlbzng (99)
+xnmvtem (51)
+ccciux (94)
+xwlmsqy (25)
+wekkbw (17)
+yipzce (21)
+hcjmsd (10)
+upvhfmn (68) -> fvlfq, ivmndi, ussmw, ccciux
+hacwv (50)
+redqvw (269)
+dtpexjq (52)
+kmlwj (84)
+mluykm (19)
+ucbbun (114) -> hrqzqqh, ccuarv
+kymhbse (155) -> tznudmk, hnlgkv
+xomnhw (185)
+nsmoh (65) -> ceuygh, acpfsnb, vgubuy, apkwi, yoeau, pdosfg, lfpzff
+zvepqr (51)
+wnotwt (99)
+lcrwbqi (27)
+hdlqvlg (27)
+iphgmyt (160) -> woolxv, ewyzqg
+ujulj (50) -> cazid, npmwcx, yeooycn, dmeee
+zjaklmn (52)
+bjrpalu (53) -> rhodopg, tcospq, cvrcvgp
+azdei (48)
+snzfrer (149) -> bhsbd, tgdzl
+zsxizw (18)
+fwpfjjd (89)
+fndxl (36)
+uzrnud (14)
+igyxt (41)
+vxdkej (135) -> diomq, qokscr
+gjuekv (5)
+uzufet (143) -> fgjjwep, uzrnud
+vzuqbye (87) -> eviqjr, cgxsmq, egmfbdq
+zirocl (29)
+jonshpm (99)
+zmlth (154) -> zhxhkgf, cokzlht
+bujroda (51)
+bdvtvcu (74) -> tvcod, ouamzwh
+jdrdxu (36)
+troyu (29)
+nrczsn (86)
+aihow (92)
+gaihmf (84)
+ehjooz (124) -> hgwsl, mefxonk
+omydd (6)
+raevpsw (64)
+aylmbfh (188) -> ddspu, thdwfw, kxnkbs, rziezq, jfjemon
+diomq (65)
+jjyjrtr (87) -> fjduphn, yjvgwdl
+zsiziaa (38)
+lyptirp (8)
+lctdjj (56)
+pbtks (85)
+jxhrar (227) -> barnhza, iqovqp
+neqfzm (13)
+dhwauy (48)
+qvjqfi (80)
+ivstcsm (72)
+aabrjf (72)
+jvccsp (86) -> gukuqw, hpmbkwb
+ddspu (113) -> yjmbbu, dzbrgb
+zgevpxx (48)
+qrrey (588) -> bhvmgw, wgexpa, xiotwdk
+ncodn (62)
+rbcqgqv (75) -> imcczga, xzurwza
+fpxtub (11)
+ldfopw (30)
+ewyzqg (49)
+iuhlc (6)
+oqphsw (2722) -> iueejt, ekdqf, btbxk, jdshuob
+eysrnaa (71)
+ojsjuts (176) -> njxyw, dzasw, rpzaqc
+ozyexx (83)
+nnldikq (316) -> upwlxnb, vbxmpc, dgwcz
+tfmtk (69)
+hwctdr (76)
+rothisa (66)
+qnbfk (91)
+qcgxvx (99)
+igyiie (237) -> knirl, trbzi, auxvur, rvhxik
+cverrt (52)
+orrutjs (93)
+ffloi (25) -> kflize, icgwppo
+phrxnli (21)
+eopxpo (41)
+vlfouc (62)
+fdnom (87)
+wuxhvnx (86) -> ikfpktb, zcvipz
+flefy (38)
+yoeau (206) -> rfwgtb, drmyco
+ozatmpe (34)
+ydbri (66)
+tufds (42)
+pprhx (57) -> xitzb, zqyua, dtpexjq, zyradhz
+zhxhkgf (29)
+qwzmv (52)
+paxzd (53)
+cyzkk (60)
+gyjxkl (37)
+pzpjw (54)
+svayf (89)
+xxxqpkx (7)
+imihjj (69) -> yygqky, qlkslp
+tkpvf (47)
+tljdqy (81) -> sxllorg, yatfpqx, zbznuyf, kymhbse, rfmeug, tetmzw
+iphzyj (260) -> omsroa, mxupea
+xiotwdk (177) -> jlnyr, nsqqw
+eyyzy (274) -> opuaau, qolnvo, jxhrar
+baewpe (55) -> svkdyq, hitoud, zvnxfa, emfctr, facrq, vykqcnj, bckuyxm
+barnhza (20)
+oafnfo (51)
+pjcttzo (50)
+aooni (205) -> xrvbzya, gvjrx
+scchi (48)
+zcgrnt (73)
+pmsdv (93) -> pyypotx, marzlxh, zvepqr
+kngbqid (89)
+iwhqlr (949) -> ztkgsyt, ffloi, hzgig
+vyxfljc (92) -> pyrlph, wdsiq, eysrnaa
+hddzn (69)
+cxvqvjz (136) -> kfrti, nslettz
+tcospq (96) -> aabrjf, dllgpye
+mnmwzz (142)
+xfblj (40)
+vfwegiu (46)
+iphncut (138) -> wslsg, qhnaxuy
+algqhtz (37) -> qeojk, sybpano
+dmoxr (73)
+tozktyo (29)
+npjxq (46)
+uvfyo (675) -> lxlbt, gnjvf, nfsuzef, spwgm
+ollhxuy (821) -> vefzbc, faecnr, geldsqv, xneoi, cxvqvjz, jgkvfa, xtwdx
+ksvfdcc (72)
+avycyh (180) -> hwosyg, alqim
+nsqqw (16)
+nsfsj (99)
+tpphe (64887) -> yatbsip, syzlt, uttujj
+miwoup (40) -> gyjpoco, apgjv, eknui
+iljwgzf (92)
+bfuywyg (82)
+aaqdb (44)
+fgbyre (11)
+kywfqzv (41) -> lajidkr, gyjxkl, wfhyr, evhsybt
+aiovxpk (95) -> yoxvx, pbtks
+hrovawq (50)
+ajenoz (48)
+aeuub (53)
+gxjvj (163) -> yiusa, nrczsn
+ippzix (9)
+ttllx (73)
+rorqy (43)
+dqash (96)
+lwvnbzs (24)
+ckheb (34)
+rgfndsx (18) -> qkbnq, welll, bkextqn, wnotwt
+rsazi (62)
+rpfmi (52)
+uxslfay (72)
+aemgsa (40)
+jfmnsqg (85)
+ggnsa (114) -> xhmfmo, azdei
+lndaa (175) -> qvjqfi, iyuuh
+kjdoubx (128) -> eopxpo, igyxt
+dzasw (47)
+emfctr (9120) -> qzckx, fsaoa, bjrpalu, mdneq, tdwtlf, hswrbpz, knltna
+srqntb (137) -> raevpsw, qvteg
+wweusm (66)
+hawsl (13)
+cupsjm (146) -> baiaa, pcqyagx
+ppqlc (42)
+tadnt (47) -> ufefj, rwxggm, rorqy
+rvhxik (11)
+vijkx (32)
+lqcar (71)
+dhkahb (49)
+ftuemb (19)
+ewdqb (50)
+npmwcx (93)
+wwezydn (97)
+fuvru (98)
+cdpwklz (83)
+dtscjna (46)
+exuusj (7)
+ouamzwh (88)
+ggvbqrp (145) -> opohwq, yrmgc, gewgn
+ekdqf (467) -> ugvqayz, ysgsry, ogbsm
+torxqh (90) -> dzwol, lepja
+hpmbkwb (69)
+ripqyzr (48)
+eiklbh (32)
+omdlwm (168) -> ihtnbb, hjjkx, bomho
+lbwzat (74) -> iivncbz, dmoxr
+pyypotx (51)
+bjabd (7)
+auzbdlz (95)
+sxfilp (72) -> livlj, lgenxz
+kxvlprg (60)
+rfmeug (121) -> apygt, viwns, chtlcwq, wekkbw
+xajjyba (164)
+kzltfq (94288) -> vnrmx, lrihy, arqoys, nsmoh
+mbhld (73)
+rwxggm (43)
+vapwxei (61)
+ufefj (43)
+oajawn (34)
+dgnjf (335) -> yxseri, nscbsob
+xaoncma (296) -> yipzce, nrpxx, rrfbngi
+kqlsniq (95) -> qwsxpnc, mqmbcl, gtbbuvb
+jrvbacq (49)
+oavluo (21)
+qpldch (54)
+ieusgd (295)
+tifgptk (100) -> ddldgex, ggvbqrp, focqhgt, cncak, ksvpnt, weuwc
+lhradm (583) -> vusxa, lbwzat, ucbbun
+apgjv (85)
+cbibo (99)
+jxhngrl (48)
+qwsxpnc (96)
+ysbrui (1293) -> iqggu, upvhfmn, kpqyb, wdeuy
+ekvall (209) -> jxhngrl, aplvqql, drwfop
+mkwfj (35)
+pjiqvd (87)
+pgubexv (78)
+vbhnmr (2850) -> iftfc, kunzpa, qrrey, tljdqy
+sjwhig (93)
+zyradhz (52)
+wcexum (116) -> eiklbh, vijkx
+cdcye (53) -> izppmg, rxvyqsp
+bdinafh (10)
+rziezq (145) -> taiho, pkfhp
+nslettz (10)
+svhbd (109) -> xcvxle, fqzsq, jopjvd
+limljj (68)
+kauphp (231) -> dyxsmz, yzxzo
+caryo (7)
+nahovfk (109) -> flefy, cfztpc
+qolnvo (267)
+cmqwplb (9)
+cfhuce (71) -> cecsr, josdslh
+zwnvqu (88)
+mhjtjp (91)
+apkwi (222) -> rxragg, zsxizw
+ioywk (16) -> ozyexx, eikmns, ktjav
+yrmgc (31)
+kqzemkv (96)
+rxvyqsp (60)
+hnlgkv (17)
+raryuo (73)
+bomho (87)
+rixnft (85) -> cpndnx, fpxtub
+zoewj (193) -> ohbuhy, ymckwqo
+hnyqq (34)
+tkmed (1959) -> tuqmup, jwgchxu, sjforw, zmsosb, tqikxkp
+wlpyulp (10)
+pixjzh (158) -> fgjwz, lsknlg, hlcghe, txhfuoh, hdvel
+likvlm (62)
+xhmfmo (48)
+rgrxpe (69)
+weuwc (84) -> xtwdau, muncur
+uevcwul (92)
+kpxqlr (155) -> nbbyqsa, ilkqp
+fqzsq (98) -> tiujei, yhubw
+ubovv (6)
+knirl (11)
+lzvniiz (60)
+cwtdf (29)
+qeojk (99)
+ycxzfkf (131) -> bgflw, chophr
+thjulip (20)
+vgdwm (53)
+myhch (25)
+bovno (175)
+uqlso (48)
+rhnkdt (59) -> rsazi, ncodn, pwizhzr, likvlm
+acpfsnb (204) -> nmlcne, vfsttaj
+wzfkk (99)
+oqlpz (81)
+nscbsob (24)
+mzmfygf (171) -> jxyoypa, ippzix
+rvrlma (211)
+pfphng (90)
+mdiqsgg (12)
+jtzkva (274) -> flomey, ukvvt
+tvwxmur (64) -> yodoqn, ksvfdcc, ivstcsm, pvgzz
+aplvqql (48)
+qybmgto (9)
+mtcrswx (75)
+aphpzub (29)
+vchsdif (105) -> ofisj, zwnvqu
+dllgpye (72)
+lfzahrm (79)
+oiosol (27)
+geldsqv (80) -> ienye, eeppf, ftuemb, vbbgeo
+vlbba (81) -> ewdqb, vfzby, pjcttzo, abddskq
+nfsuzef (75) -> dlbzng, cbibo, wzfkk, jonshpm
+lryzkx (71)
+mhndszl (190) -> tbrfk, xprzeeb
+jbepak (66)
+nmlcne (27)
+gfffvbp (8)
+bqtas (93)
+fhmauag (221) -> vantwg, kzwqzqf, vfwegiu
+misyfn (82) -> uixlx, oupzsh, bovno
+jtauf (13) -> xskehl, bmfhjm, srhirm, kjfmqkt, qzxaqvy
+eerktn (85) -> npjxq, kasfuwe, ljbss, theau
+ktaet (58)
+eeppf (19)
+vgqeyx (31)
+qhnaxuy (31)
+xrvbzya (35)
+nzqcq (66) -> vewgrvp, vfngjd, sjrxs, hvjtn, ecokyy, gcaxntb, omdlwm
+sybpano (99)
+ebsniof (39)
+urzul (9)
+srmiagk (292) -> dvdgowj, vqpeg, gjuekv
+uexdnv (82)
+pgspysb (40)
+wymfopy (93)
+nqhdt (164) -> mkwfj, gjwaqu, sxmbcwp
+twzpqip (41)
+bniti (66)
+yfjenp (295) -> qxfce, zsiziaa
+meoeea (60) -> laczal, tcvabyz
+heacb (53)
+focqhgt (238)
+dtstgj (36)
+kkmqko (7)
+vcjjo (98)
+nnnkeh (445) -> gzzpja, bhuyfk, xnukvni, tttle, snzfrer
+baesyhf (1013) -> tznkwk, hcjxz
+hygfoe (85)
+wtxbqe (87)
+vwzglf (58)
+hswrbpz (254) -> flcqsb, sbguah, cdcye
+axtqrx (29)
+auxvur (11)
+iqggu (444)
+kceusl (42)
+jykbb (91)
+nxzkuj (75)
+xzurwza (95)
+rrflox (52)
+kfmzbvk (10)
+mnkwo (212) -> jyskb, wfphcf
+dfvhic (82) -> fhmazv, hwctdr
+gfzbp (197) -> ymcuygn, mxzbcqn
+tlednk (39)
+lgenxz (54)
+emwbbut (9)
+exoft (17)
+woolxv (49)
+auxqbbc (87)
+wvocz (67)
+hvjtn (325) -> cverrt, kfxoi
+aunhcg (613) -> kjdoubx, ggnsa, acknlp
+absdwf (39)
+wajnxjj (40) -> imjzf, wwezydn
+hgdbaol (10)
+cfztpc (38)
+chlxm (46)
+ljbss (46)
+gauumxf (230) -> tkiraal, lyptirp
+nhlittn (22)
+gcaxntb (405) -> mdiqsgg, oxiuaz
+lfxew (66)
+bamxg (66)
+wdsiq (71)
+mykrcq (98) -> zcgrnt, raryuo, okrdziq
+erpvue (91)
+kmwbbz (93)
+vsgaam (7)
+hokyk (66)
+pjzpmq (38)
+iqovqp (20)
+mmcychg (65)
+guncf (259) -> proshun, wxjka
+jatnl (216) -> oavluo, phrxnli
+nhkvp (100) -> rgrxpe, nscav, illjvf
+hcjxz (31)
+mqrroj (243) -> jtjcj, dnmvzeg
+lvksghj (18)
+mhsjkm (84)
+popplum (89)
+vusxa (30) -> ieadjz, mzmtuw
+dmkbnot (26)
+httit (18)
+tbrfk (19)
+ztzwh (48)
+imjzf (97)
+rypdxr (105) -> qyoqb, lejgcu, djirpp
+qzckx (35) -> qzzkvf, pmsdv, gauumxf
+xbnmvd (76)
+ouymke (47)
+rajtef (365) -> iriun, ezaypy
+itngcua (65)
+orxoo (66)
+tcdwurt (18)
+auqoj (99)
+sqnvvbg (36)
+rxragg (18)
+kpqyb (258) -> sqkcdf, iqxwh, vnhvilk
+proshun (47)
+uscufoy (15)
+tpipb (61)
+owhjmt (155) -> vsruoi, ifxcrug
+bkvle (9)
+yosnw (32) -> ilymgq, yppydul, yamclb
+iynywq (66)
+nxpexoq (92)
+eviqjr (25)
+trbzi (11)
+rfvomn (95)
+ohbuhy (41)
+vkpltts (73)
+ktpte (9)
+bbgwzg (79)
+bgcigo (8) -> bruzfkf, lxcbjgy, vlmcmcu
+ecokyy (357) -> iaphzk, httit, vztnh, owmni
+jwgchxu (32) -> rfvomn, auzbdlz
+xlskkfi (92)
+uxjasn (36)
+dcumfo (73)
+wpnqet (87)
+ilqol (88)
+bhsbd (53)
+flcqsb (115) -> meypo, aphpzub
+yvqtyi (85)
+oyvhouc (37) -> cdpgoi, bbgwzg, xoziel, lfzahrm
+bjhickt (23)
+hmvwl (32) -> nswximo, tpphe, baewpe, hghnmib, kzltfq
+oiijtm (20)
+ylfsnz (93)
+imynb (146) -> absdwf, cikaze
+yygqky (82)
+yuswp (68)
+izppmg (60)
+itwbpot (22)
+hwosyg (42)
+mkrzp (211) -> laxsl, zirocl
+vqpeg (5)
+gddkqw (244) -> vhtyadn, lvksghj
+bhuyfk (79) -> aghdlll, ilqol
+yrfqaga (103) -> jqinti, zjaklmn
+bnfopv (118) -> cjmxed, zlzers, qrlggma
+welll (99)
+ehuzoq (77)
+nqyok (77)
+rrfbngi (21)
+yoezrpw (38)
+rpzaqc (47)
+qxlucvg (84)
+tehyhc (13)
+gqrfok (231) -> kfhnhm, aituccf, qrkhol
+zvnxfa (10022) -> aylmbfh, lwencl, pixjzh
+gzzpja (255)
+ofrwmq (205) -> iigvpqy, wweusm
+qanbo (50)
+obslyn (13)
+hwovhvw (915) -> qdhrchr, nahovfk, xomnhw, ycxzfkf
+smlfbc (1615) -> wnjwnr, pprhx, aiovxpk
+xbkeua (157) -> pgspysb, aemgsa, xfblj, hswzo
+btklib (51)
+owmni (18)
+qzzkvf (108) -> aobitc, tsrogy
+umtrod (22)
+vxajmkg (71)
+jmlmzpz (62)
+plurwe (228)
+jyskb (6)
+xnuoujm (16)
+nakmo (10)
+uzhlers (50)
+umlkxqv (20) -> ecimj, wudjf, jfmnsqg
+ziqwzzy (204) -> uscufoy, fooyrq
+ymrogz (272) -> ebsniof, tlednk
+lpuass (28)
+qrkhol (9)
+hpkpw (38)
+gtzcxq (73)
+gvjrx (35)
+ieadjz (95)
+tcukgv (66)
+ifxcrug (55)
+thxtoc (178) -> trtgn, fdnom
+puwvse (414)
+pvppi (246) -> qlwxeb, nuqyqh
+vcixs (260) -> noipcz, frohei
+cichyqw (71)
+ugvqayz (126) -> xfekjt, wvocz
+hrqzqqh (53)
+qedst (18)
+wnjtb (73)
+kjfmqkt (138) -> pzpjw, qpldch
+ussmw (94)
+sxmbcwp (35)
+dqdfv (73)
+ptyxo (13)
+upuxd (36)
+fppcif (209) -> uxslfay, yjhes
+kxykfr (82) -> twzpqip, qymwy
+yodoqn (72)
+mnzbkuh (28) -> jtouvtb, wdvwub
+omdpc (26)
+ccrftvw (62)
+bmfhjm (222) -> lyvyhkm, sbyxyf, kblshw
+fwgqj (1924) -> zmcgfdp, vzuqbye, rypdxr
+rlbom (79)
+livlj (54)
+ybvgki (8)
+zcvipz (97)
+xyohoxa (928) -> qkkzzlm, lmuyfcw, avycyh
+dchts (99) -> lctdjj, oevyknd
+ksfok (217) -> gfffvbp, ybvgki
+hoomyh (88) -> aaqdb, ljfqvk
+qijarlh (58)
+tznudmk (17)
+cyrrjtx (124) -> oqbdf, xwlmsqy, ulztj, rjsnth
+nuqyqh (52)
+oblsboq (85)
+imnhql (94)
+hxswghs (126) -> dwwsu, hdlqvlg, jppgd
+ulztj (25)
+hgwsl (50)
+ksvpnt (96) -> fqlezvk, lqcar
+mjpzp (10)
+fsaoa (89) -> dbwmq, uzufet, arwmalf, gobrf
+iftfc (159) -> thxtoc, jtzkva, tvwxmur
+zjpsm (83)
+vwfhi (9)
+opuaau (75) -> dqash, kqzemkv
+mxupea (45)
+dmkyzy (15) -> ttllx, horqcc, dcumfo
+sxllorg (69) -> kxvlprg, lzvniiz
+txhfuoh (219) -> lwdqnj, myhch
+chtlcwq (17)
+hlcbqu (104) -> ccrftvw, jmlmzpz
+ivmndi (94)
+lficpr (62)
+ortqc (99)
+dvzlq (33)
+acknlp (56) -> aozoac, ehuzoq
+jqxnf (60)
+hfftu (52)
+ihzvygq (94) -> kmwbbz, orrutjs
+rarkunn (73)
+hitoud (5511) -> vcktg, rqbjbio, xtyzy, ssdgbnh
+sdhtguj (58) -> uklsrym, mcmqliy, nnnkeh, clinrg, fwidkbp, hzmhm, xyohoxa
+hrlkgen (99)
+vuyzhsh (61)
+nzzfer (85) -> qcgxvx, ortqc, auqoj, ilfzi
+tuqmup (222)
+zbznuyf (137) -> ptyxo, qwtzc, neqfzm, hawsl
+qwtzc (13)
+vykqcnj (71) -> jitzj, nkhadt, tcsbho, fhxpkd, fwgqj, smlfbc
+mjzksjz (7)
+yfdtz (36)
+faixe (56)
+tejnuve (209) -> jgmisxl, dhkahb
+opohwq (31)
+lsknlg (95) -> vwzglf, hjucki, yrkvb
+fhmazv (76)
+egmfbdq (25)
+rxcnn (9)
+tboizos (250)
+glwhd (122) -> ceoav, troyu
+ykehxw (19)
+bruzfkf (91)
+rjjlus (87)
+ocnna (18)
+qshbt (73)
+raakduh (85) -> fuvru, vcjjo
+wudjf (85)
+ihwaeuw (60)
+kfxoi (52)
+oewzluz (39)
+coopirx (251) -> exuusj, rvimq
+cokzlht (29)
+uacjhqx (23)
+tznkwk (31)
+mthhq (111) -> uevcwul, nxpexoq
+uixlx (7) -> kmlwj, gaihmf
+nqvxs (71)
+ktjav (83)
+eknui (85)
+fhuiyrl (93)
+fktsu (65)
+vugnug (65)
+ilymgq (91)
+clinrg (1033) -> rsancy, jrqorlo, lvklj
+bkextqn (99)
+ekohgo (251) -> xxxqpkx, wkphn
+alkneau (34)
+mnijdlk (85)
+dyxsmz (38)
+mefxonk (50)
+lajidkr (37)
+uiuokpq (89)
+oupzsh (43) -> bzmade, bamxg
+cijptz (18)
+khibjj (89)
+yamclb (91)
+okrdziq (73)
+sbyxyf (8)
+zknziw (18)
+fobzai (75)
+rjsnth (25)
+iaphzk (18)
+lufgosn (10)
+rzkcu (34)
+xlhfyw (471) -> yuswp, limljj
+tcsbho (1842) -> mnmwzz, mnzbkuh, zpidc, cpqti
+docln (85)
+neeqb (7)
+tvcod (88)
+uklsrym (40) -> bbhniy, gddkqw, lhmnd, ihzvygq, nhkeb, wuxhvnx
+qkkzzlm (76) -> imnhql, nbeagw
+qywkuqu (20)
+fvgbg (191) -> iwkntdi, jdrdxu, sqnvvbg, yfdtz
+qlkslp (82)
+iqxwh (62)
+mdneq (623) -> uzhlers, qanbo, tedplb
+msmgk (173) -> fygmpjn, exoft
+euoclfs (241) -> pjzpmq, hpkpw
+vlimzz (19) -> yvqtyi, gwournc, docln, oblsboq
+zoqni (189) -> chlxm, yfmxvay
+oignan (206) -> hdaqxlh, fgbyre
+zpidc (40) -> bujroda, btklib
+aazxafl (215) -> xnmvtem, oafnfo
+yhubw (34)
+xneoi (138) -> vwfhi, cmqwplb
+vefzbc (138) -> dywqvqh, emwbbut
+ruozmjk (73)
+jrwfehi (75) -> kcnim, bdvtvcu, tfsoxgb, tboizos
+iivncbz (73)
+ccuarv (53)
+lrihy (185) -> vchsdif, bgcigo, raakduh, vlbba, igyiie, zoqni
+vewgrvp (73) -> dntphko, svayf, uiuokpq, popplum
+iigvpqy (66)
+fjduphn (91)
+uttujj (11755) -> glwhd, sxfilp, wcexum
+tluap (6)
+exeub (71)
+dzwol (61)
+ilfzi (99)
+cdpgoi (79)
+hxckb (71)
+yoxvx (85)
+theau (46)
+vwnjh (233) -> jqxnf, qfpwln
+jbpjt (27)
+zmsosb (14) -> rrflox, ovluts, rpfmi, ojvlwm
+yoivja (59)
+towlhi (36)
+zcrjb (253) -> qhohy, uwaiki
+josdslh (59)
+xoziel (79)
+fsuzqyz (169) -> duftj, ppqlc, kceusl
+chwjiub (96)
+fpbsu (89)
+qyoqb (19)
+dfeomzr (38)
+kfhnhm (9)
+oevyknd (56)
+buoakk (22)
+wduqgix (77)
+qokscr (65)
+oqbdf (25)
+jjsvfy (199) -> yoivja, gdnsat
+ssdgbnh (887) -> qtsjbq, plurwe, mhndszl, hlcbqu, pgskth, oignan
+lrsedv (213) -> eaqjcju, cekpxgj
+iwkntdi (36)
+qfgzmtz (73)
+rfwgtb (26)
+alcvj (7)
+bvdxf (30)
+ofisj (88)
+mpchqe (27)
+pwizhzr (62)
+wkcyd (75)
+mxzbcqn (81)
+npzdqeg (227) -> tufds, msxhvo, pcsucog
+illjvf (69)
+iyuuh (80)
+fygmpjn (17)
+dvdgowj (5)
+hlcghe (91) -> khibjj, kngbqid
+zvurtb (77)
+ouspx (46)
+dbvxai (76)
+facrq (13496) -> fkbla, ffvprc, yrfqaga, msmgk, hxswghs
+xbcgipi (66)
+wfhyr (37)
+ziyata (221) -> oqlpz, jjtrisl
+muncur (77)
+vlvss (183) -> odvtiti, fazqw
+kvdkwy (96)
+ddldgex (84) -> nqyok, wduqgix
+trtgn (87)
+jitzj (65) -> fvgbg, nbfqgr, zjwpbzs, lndaa, vlvss, gxjvj, zcrjb
+hkhoyje (95) -> frirj, iuhlc
+gtbbuvb (96)
+tfsoxgb (250)
+rohvy (95)
+qhohy (41)
+goimlra (227) -> orxoo, lfxew
+hubbqbi (95)
+vchuc (53)
+svkdyq (9559) -> akmgfo, lhradm, jtauf, aunhcg
+fazqw (76)
+flomey (39)
+apygt (17)
+wjptb (43)
+srhirm (147) -> bicsjoc, dvzlq, olykwbi
+wdeuy (254) -> hubbqbi, rohvy
+yeooycn (93)
+qoyzgsp (28)
+sqkcdf (62)
+rgbvlc (49)
+qinzaf (813) -> aooni, zoewj, ogzrdrk, umlkxqv
+kflize (84)
+isrtfc (201) -> vmutyru, ouymke
+nkhadt (292) -> fppcif, vwnjh, oyvhouc, ekvall, guncf, npzdqeg
+nbbyqsa (40)
+ikfpktb (97)
+maqgick (76)
+xtwdx (156)
+sbyzsq (10)
+vgubuy (74) -> iljwgzf, aihow
+taiho (59)
+cpndnx (11)
+vhtyadn (18)
+aaheijb (54)
+rykadr (19)
+onnylx (32)
+gukuqw (69)
+fooyrq (15)
+zqyua (52)
+vsruoi (55)
+ikmvhid (2745) -> hwovhvw, arsuc, yzrdupu
+vztnh (18)
+khaupo (32)
+cpqti (142)
+qtsjbq (126) -> wekya, rzkcu, alkneau
+pcsucog (42)
+lepja (61)
+ibjvonk (10277) -> xlhfyw, svhbd, misyfn
+rqbjbio (29) -> mqrroj, hjeysaa, wlujpl, vooac, rrggg, yfjenp
+ceuygh (90) -> aqxsjq, qxlucvg
+qzxaqvy (78) -> fwskxtt, jlgvplm
+fwskxtt (84)
+yrkvb (58)
+thdwfw (219) -> umtrod, nhlittn
+zpkbe (73) -> cwtdf, tozktyo, qcrpdy, axtqrx
+hjjkx (87)
+jxyoypa (9)
+ilkqp (40)
+akwvj (238) -> jatnl, iphgmyt, meoeea, gqrfok, ljhwzvv
+lkcddrg (2238) -> lqfyzo, rixnft, hkhoyje
+xprzeeb (19)
+rhodopg (94) -> qfgzmtz, dqdfv
+ttwfig (340) -> rykadr, ykehxw
+kueyf (85) -> ulbbc, nzzfer, azxjd
+zmcgfdp (136) -> tehyhc, obslyn
+ffnabs (20) -> guehoas, nnldikq, ofrwmq, lrsedv, qvkotfd, shfdaba
+arwmalf (143) -> vsgaam, bjabd, ycclns, kkmqko
+gyjpoco (85)
+drmyco (26)
+arqoys (1859) -> urzul, bkvle
+nscav (69)
+tsrogy (69)
+qhafxnl (1337) -> xbcskih, kpxqlr, algqhtz
+yiusa (86)
+zdbqs (43)
+xzppxad (58) -> ltxkw, ollhxuy, qinzaf, wpxxh
+dxyifeb (1862) -> twubx, lkcddrg, uwqgz, uvfyo
+zlzers (49)
+gkkgkp (358) -> wlpyulp, nakmo
+abddskq (50)
+tggkm (43)
+dgwcz (7)
+bhvmgw (29) -> qflouyn, pfphng
+guehoas (283) -> qedst, cijptz, zknziw
+marzlxh (51)
+mizab (60)
+jgkvfa (120) -> ocnna, tcdwurt
+jopjvd (80) -> dnouufu, wjptb
+lwdqnj (25)
+xpzhy (84)
+noipcz (59)
+bbhniy (20) -> itngcua, mmcychg, vugnug, fktsu
+jtjcj (64)
+tgdzl (53)
+gobrf (25) -> gtzcxq, lsdrwz
+arsuc (65) -> rbcqgqv, huwsoc, bnfopv, srqntb, vxdkej, owhjmt
+ogzrdrk (101) -> vztbn, wtxbqe
+oxbkwyr (91)
+yatfpqx (109) -> xrbjn, qywkuqu, thjulip, oiijtm
+jlgvplm (84)
+bcibchp (54)
+glgnecl (16)
+tqikxkp (222)
+bhcal (7)
+vmutyru (47)
+kzwqzqf (46)
+evhsybt (37)
+gdnsat (59)
+cikaze (39)
+jrqorlo (229)
+ovluts (52)
+nbfqgr (169) -> cdpwklz, zjpsm
+nbngkou (73)
+wslsg (31)
+aobitc (69)
+htgxu (24)
+wjolzt (46)
+hzgig (95) -> jrvbacq, rgbvlc
+ulbbc (217) -> bniti, jbepak, iynywq, xbcgipi
+wkphn (7)
+fkbla (207)
+jqinti (52)
+yhiogu (256) -> neusnw, tkpvf
+ebjsluk (39)
+shfdaba (76) -> wpnqet, rjjlus, pjiqvd
+anpnrdt (10)
+jdshuob (491) -> kywfqzv, zpkbe, cfhuce, mzmfygf
+vooac (341) -> lufgosn, sbyzsq, mjpzp
+frohei (59)
+baiaa (15)
+pyrlph (71)
+cgxsmq (25)
+ukvvt (39)
+gaujsyk (26) -> ktaet, yipoeia, qijarlh
+gnjvf (375) -> ajenoz, ripqyzr
+hghnmib (47802) -> vbhnmr, vustse, lybkeg, ikmvhid, oqphsw, xzppxad, gvkcsad
+yrcgsnx (270) -> qfypnb, dbvxai
+kwqrbav (34)
+wdvwub (57)
+viqhfi (89)
+akmgfo (243) -> zhvji, iphncut, oyxbblb, gaujsyk, ybftt
+faecnr (80) -> dfeomzr, yoezrpw
+xskehl (228) -> ubovv, omydd, tluap
+pdosfg (21) -> rlbom, lbjwlov, wgqkdcr
+tkiraal (8)
+aimav (46)
+ecimj (85)
+eikmns (83)
+fqlezvk (71)
+qrlggma (49)
+ztkgsyt (29) -> bfuywyg, uexdnv
+tedplb (50)
+cvrcvgp (86) -> zvurtb, dkcix
+bckuyxm (11306) -> eyyzy, jrwfehi, baesyhf
+ffvprc (65) -> vxajmkg, cichyqw
+jjtrisl (81)
+vantwg (46)
+vlmcmcu (91)
+qdhrchr (89) -> dhwauy, uqlso
+ceoav (29)
+bhrbod (50) -> oxbkwyr, erpvue, zhrnwk, mhjtjp
+yxseri (24)
+kzbvrxk (10)
+kcnim (76) -> zjoxibi, auxqbbc
+ltxkw (30) -> eerktn, nqhdt, jjyjrtr, bfchbs, redqvw, mkrzp, nymguj
+rrggg (371)
+uwqgz (1923) -> torxqh, zmlth, lnctft
+dbwmq (117) -> bmecxwd, lcrwbqi
+kasfuwe (46)
+btbxk (755) -> xajjyba, kxykfr, rymkqd
+njxyw (47)
+fvlfq (94)
+zhvji (162) -> cpazlc, mluykm
+aozoac (77)
+chnkkj (86) -> tfmtk, hddzn
+dkcix (77)
+lxcbjgy (91)
+mofks (30)
+yzrdupu (719) -> wajnxjj, dfvhic, dmkyzy, ziqwzzy
+wxjka (47)
+xitzb (52)
+rvimq (7)
+qddsx (30)
+lvklj (97) -> ydbri, tcukgv
+sjforw (208) -> alcvj, neeqb
+yjvgwdl (91)
+fhxpkd (261) -> kauphp, zdhvqrl, rhnkdt, nhkvp, tejnuve, olspit, srmiagk
+eaqjcju (62)
+ybftt (122) -> oewzluz, ebjsluk
+jgmisxl (49)
+hdaqxlh (11)
+cjmxed (49)
+aqxsjq (84)
+cekpxgj (62)
+tetmzw (121) -> ozatmpe, qbmtmcs
+mqmbcl (96)
+xtyzy (155) -> yhiogu, iphzyj, pvppi, tojyt, krxyaak, ymrogz
+drwfop (48)
+pgskth (86) -> hxckb, lxesg
+pvgzz (72)
+kunzpa (687) -> tadnt, cupsjm, hoomyh
+nhkeb (252) -> caryo, bhcal, mjzksjz, ufitse
+cncak (182) -> qoyzgsp, lpuass
+aituccf (9)
+qfpwln (60)
+laxsl (29)
+yzxzo (38)
+lnctft (116) -> zgevpxx, scchi
+lyvyhkm (8)
+vcktg (1556) -> ztghd, imihjj, ksfok
+dzbrgb (75)
+xbcskih (85) -> fobzai, nxzkuj
+jtouvtb (57)
+ufitse (7)
+upwlxnb (7)
+jysaup (78)
+ysgsry (228) -> glgnecl, xnuoujm
+horqcc (73)
+vfsttaj (27)
+gvkcsad (5412) -> ghsjtj, dgnjf, ziyata, rajtef, kqlsniq, vqclii
+lbjwlov (79)
+vnhvilk (62)
+dntphko (89)
+syzlt (6183) -> tifgptk, iwhqlr, akwvj, kueyf
+hzmhm (1087) -> rvrlma, dchts, emzrj
+neusnw (47)
+vfzby (50)
+cecsr (59)
+uwaiki (41)
+msxhvo (42)
+fgjwz (113) -> qwzmv, xehdglb, kgpwo
+lmuyfcw (164) -> hrovawq, hacwv
+zjoxibi (87)
+viwns (17)
+olykwbi (33)
+meypo (29)
+sbguah (49) -> vlfouc, lficpr
+oyxbblb (92) -> towlhi, fndxl, uxjasn
+bzmade (66)
+lfpzff (238) -> bdinafh, kfmzbvk
+epuaii (88) -> ckheb, kwqrbav
+dwwsu (27)
+xnukvni (207) -> htgxu, lwvnbzs
+zhrnwk (91)
+vfngjd (325) -> hfftu, nymhem
+vztbn (87)
+kxnkbs (19) -> tpipb, vuyzhsh, vapwxei, wbxdta
+bmecxwd (27)
+nymguj (123) -> vkpltts, mbhld
+qlwxeb (52)
+kfrti (10)
+xcvxle (106) -> qddsx, bvdxf
+wbesqn (99)
+kblshw (8)
+qymwy (41)
+ezaypy (9)
+dnouufu (43)
+cyapi (227) -> rothisa, hokyk
+itbsk (30)
+alqim (42)
+hjeysaa (251) -> mofks, itbsk, njogewi, ldfopw
+ljfqvk (44)
+iueejt (5) -> rgfndsx, bhrbod, puwvse
+knzppj (81) -> hrlkgen, nsfsj, wbesqn
+wnjwnr (197) -> hnyqq, oajawn
+xtwdau (77)
+dmeee (93)
+qxfce (38)
+pcqyagx (15)
+bicsjoc (33)
+eeguu (78)
+wbxdta (61)
+gjwaqu (35)
+mzmtuw (95)
+huwsoc (173) -> ouspx, wjolzt
+spdhhoe (167) -> chwjiub, kvdkwy
+hhmwlo (56)
+icgwppo (84)
diff --git a/2017/inputs/day_8.txt b/2017/inputs/day_8.txt
new file mode 100644
index 0000000..7b63126
--- /dev/null
+++ b/2017/inputs/day_8.txt
@@ -0,0 +1,1000 @@
+ev dec -705 if cag != 2
+b dec -195 if ty >= -8
+red dec -404 if v > -7
+d inc -971 if k >= -9
+k inc 303 if k > -8
+cag inc 539 if ev > 697
+ev inc -11 if d <= -963
+alf inc -634 if xoc < -2
+eb dec 927 if b <= 201
+e dec 67 if eb >= -930
+he dec -29 if qby < 8
+cox inc 193 if b >= 188
+red dec 340 if alf >= -7
+k dec 8 if red > 57
+eb inc -606 if e <= -75
+xoc inc 337 if red == 64
+xoc inc 186 if mk == 0
+cox inc 840 if npo >= -5
+s inc -449 if anb != -3
+eb inc -233 if npo < 2
+npo inc -808 if mk <= 9
+eb dec 139 if eb > -1161
+ty inc -929 if ty > -7
+mk inc 789 if d > -977
+red dec 915 if k < 299
+anb inc 852 if mk == 789
+red dec 242 if swy == -6
+e inc -29 if cag < 546
+alf dec -219 if cag > 535
+red dec -298 if ty < -921
+tm dec 175 if obo <= 2
+alf dec 553 if eb != -1298
+alf inc -870 if s != -449
+v dec 744 if cox < 1036
+d dec -720 if he > 24
+ty inc -201 if k <= 301
+xoc inc 956 if v > -744
+s dec 539 if e >= -100
+mk dec -37 if anb != 852
+mk dec 833 if tm < -167
+ev dec -410 if ev < 686
+s dec 77 if cag != 539
+anb inc 917 if swy >= -2
+obo dec -5 if s >= -997
+qby inc -231 if tm == -175
+ev dec 378 if tm <= -167
+b dec -106 if s < -985
+s dec 301 if e < -89
+npo inc 232 if b == 301
+red dec -960 if mqk < -9
+he inc -789 if k == 300
+npo dec 826 if cox < 1033
+e inc 101 if k > 291
+v inc -898 if he > 27
+alf inc 141 if anb > 1767
+red inc -613 if e < -2
+tm inc -151 if cag >= 530
+k inc -346 if b != 305
+he dec 967 if cag <= 546
+ev dec -931 if cag < 543
+swy dec 309 if qby < -228
+d inc 437 if cox > 1030
+ty dec 586 if ev <= 1249
+alf dec 299 if e <= -2
+d inc 977 if xoc == 523
+d inc 594 if s <= -1282
+ev inc 21 if swy < -306
+qby dec -722 if cag < 543
+k inc -381 if ev < 1259
+alf inc 847 if anb > 1764
+k inc 126 if s <= -1292
+eb inc -109 if mqk > -4
+obo dec 900 if swy < -300
+obo dec 364 if mk <= -35
+swy inc -211 if eb >= -1416
+ty dec -680 if mqk <= 1
+ty dec -235 if cox > 1024
+cag dec -261 if red <= -559
+obo dec -897 if mqk == 0
+tm inc -981 if mk < -49
+ty inc -805 if eb >= -1402
+mk inc 278 if red < -552
+ev inc 63 if v > -1645
+swy dec -388 if xoc <= 530
+mqk inc 187 if obo != -357
+s inc 416 if b < 309
+qby inc 399 if mqk >= 185
+red inc -680 if mqk != 188
+he inc -981 if eb >= -1407
+d inc 225 if tm >= -327
+he dec 158 if d <= 1991
+d dec 74 if qby == 890
+k dec -930 if anb <= 1770
+s dec -546 if mqk == 179
+ty dec 733 if k >= 874
+ev dec 581 if obo == -362
+cox dec -922 if obo == -362
+obo dec 922 if e == 5
+d inc -948 if tm == -326
+cag inc 161 if mk <= 241
+eb inc -580 if e != -1
+anb inc -632 if qby != 889
+red dec -285 if mk <= 239
+qby inc 550 if eb >= -1997
+e dec 930 if k > 869
+eb inc 604 if swy > -138
+obo inc 383 if he != -1100
+s dec -89 if eb <= -1377
+qby dec -821 if ty < -1532
+ty inc 940 if qby >= 2257
+alf inc -421 if swy != -123
+qby inc 787 if b != 293
+alf inc -80 if b < 301
+b dec 205 if eb <= -1378
+qby dec 870 if obo != -892
+d inc 183 if swy == -132
+s dec -81 if mqk != 187
+swy inc 976 if d >= 1138
+red dec 281 if anb == 1138
+xoc inc 681 if d < 1141
+v dec 14 if obo > -902
+he dec -525 if xoc <= 530
+v inc -866 if red >= -955
+cag inc -835 if mk != 240
+qby inc -549 if s <= -781
+eb dec 584 if mk >= 229
+qby dec -711 if obo >= -904
+ev inc -400 if anb <= 1144
+k inc 82 if swy >= 840
+e dec -415 if mk != 229
+red dec -923 if anb > 1128
+v dec 602 if b != 86
+ty dec -699 if ev > 346
+xoc dec 549 if k > 968
+k inc 317 if qby < 2343
+npo dec 919 if d >= 1137
+e inc 421 if e > -519
+eb dec -104 if ev <= 351
+b inc 368 if qby != 2342
+mk dec -987 if ev == 357
+eb dec -509 if alf <= 236
+obo dec -380 if v != -3127
+npo dec -790 if b < 455
+xoc inc 405 if k < 1287
+obo dec -56 if b < 465
+swy dec 194 if k != 1281
+red inc -562 if tm <= -326
+swy dec 75 if e <= -86
+obo dec -4 if ev == 350
+e inc 533 if xoc < 931
+cox inc -584 if d < 1146
+swy inc 506 if eb >= -1354
+obo dec 458 if k >= 1279
+swy inc 447 if e > 447
+qby dec 847 if cox <= 1377
+xoc inc 225 if xoc < 931
+obo dec 301 if b > 462
+cag inc -740 if e > 438
+tm dec -83 if e <= 447
+tm dec -151 if cag <= -866
+npo inc 26 if s < -784
+v inc 12 if cox != 1368
+eb inc -399 if ev > 340
+eb dec 780 if d == 1143
+e dec 87 if tm == -91
+k dec -13 if anb <= 1139
+v dec 829 if swy >= 567
+k dec -229 if ev < 351
+qby inc 972 if xoc == 1143
+s inc 609 if s >= -789
+mk dec -931 if ev > 346
+mqk inc -605 if cag > -880
+v inc 302 if anb <= 1139
+mk dec 342 if v > -3647
+xoc inc -905 if k <= 1523
+qby inc -412 if qby == 1493
+v dec -548 if d > 1142
+xoc inc 311 if obo >= -771
+npo inc -955 if xoc < 551
+swy inc -885 if mk > 821
+ty dec 91 if ty >= 100
+s dec -840 if npo <= -1492
+qby inc 158 if ev > 342
+ev inc 227 if cag >= -878
+alf dec 612 if tm <= -92
+ev inc 395 if he <= -572
+s inc 570 if swy > -311
+s inc 283 if alf > -382
+xoc inc 297 if tm >= -94
+v dec 100 if d != 1153
+cag inc 928 if ty <= 19
+tm inc 829 if obo > -765
+alf inc -94 if ty >= 8
+ty inc -224 if cox <= 1367
+obo dec -352 if d > 1137
+mqk inc 223 if ev <= 580
+cag inc 55 if eb >= -2541
+red dec 969 if alf > -474
+alf inc -564 if e != 447
+qby inc -97 if obo < -400
+red dec -530 if cag > 107
+ev inc -579 if he > -574
+tm dec -788 if eb <= -2528
+alf inc -217 if v > -3191
+tm inc 635 if cox >= 1362
+tm inc -217 if mqk < -189
+cag dec -547 if v != -3191
+red dec -241 if alf > -1045
+red inc -492 if b <= 473
+he inc 46 if b > 454
+xoc inc 86 if ty > 8
+d dec -755 if qby < 1140
+mk inc -347 if obo <= -405
+v dec 870 if npo >= -1497
+npo inc 216 if red != -1287
+anb inc -574 if obo > -414
+ev inc -364 if eb == -2534
+anb dec -825 if npo < -1277
+k dec 587 if cox < 1372
+anb inc -888 if obo > -401
+swy dec -435 if npo != -1283
+e dec 551 if e != 444
+swy dec 772 if alf == -1036
+tm dec -339 if e == 444
+swy dec 259 if mk == 470
+xoc inc -224 if ev >= -359
+ty inc 265 if red >= -1279
+obo dec 449 if mqk > -202
+d inc 891 if e >= 438
+cag dec 606 if b >= 461
+mk inc -894 if v != -4064
+cag dec -128 if d != 2034
+eb dec 723 if eb <= -2528
+swy inc -12 if s < 1525
+s inc -569 if d == 2032
+npo inc 326 if alf >= -1038
+cox dec -213 if anb == 1379
+obo dec -222 if d > 2026
+ev dec 809 if anb == 1393
+s inc -637 if alf != -1037
+s dec -892 if xoc == 942
+eb inc -248 if cag != -491
+b dec 499 if qby != 1142
+b dec 543 if d <= 2033
+mk inc 345 if mk < -411
+ty dec -284 if npo != -960
+d dec -327 if eb < -3498
+cag inc -743 if mqk > -196
+cag dec 708 if ev > -374
+eb inc 935 if swy == 113
+d dec -908 if swy == 113
+npo inc -753 if swy == 113
+cag dec -227 if alf > -1045
+red dec -658 if v <= -4061
+cox inc -66 if anb < 1397
+cag dec -209 if b > 463
+cox inc -245 if alf != -1037
+alf dec -212 if s >= 2402
+d inc 590 if d >= 3273
+xoc inc -325 if xoc > 935
+red inc 935 if he >= -519
+tm dec 332 if ev >= -366
+cag inc 583 if xoc <= 615
+e inc -892 if e >= 439
+npo inc -628 if obo > -629
+red inc -819 if tm <= 1958
+qby dec -960 if ev > -372
+red dec -781 if tm < 1959
+cox inc -831 if xoc < 621
+b inc -830 if ty >= 559
+anb inc 654 if cag < -1507
+cag dec 995 if red >= -659
+npo inc 356 if b < -361
+tm dec 286 if qby > 2093
+mk dec 369 if ty <= 569
+mk dec -971 if qby != 2112
+swy inc 137 if xoc > 617
+alf dec -743 if npo > -1355
+alf inc 39 if ty < 569
+tm dec -42 if s <= 2413
+anb inc -685 if alf != -48
+ty dec 660 if anb <= 1360
+npo dec 313 if ev < -359
+cag inc -611 if obo >= -646
+tm inc 728 if v <= -4067
+swy inc -4 if cag != -3124
+npo inc 359 if xoc >= 613
+obo inc 694 if b != -358
+obo dec 439 if e >= -452
+npo dec -160 if xoc <= 626
+red inc -659 if e <= -439
+b inc -445 if obo == -382
+red dec 543 if k > 931
+s dec 274 if qby != 2093
+cag dec -338 if k <= 934
+alf dec -211 if alf == -45
+v dec -451 if tm == 1706
+obo dec -465 if v > -3606
+k inc 415 if qby > 2100
+anb dec 220 if swy == 109
+alf inc -3 if cox < 477
+d dec 164 if s > 2131
+qby dec -974 if alf >= -40
+cag dec 891 if anb < 1146
+d dec -337 if qby > 2100
+cag dec -628 if d != 3442
+k dec -648 if alf == -46
+red dec -329 if k == 1996
+e inc -891 if alf <= -38
+cox inc -626 if ty >= -99
+mqk inc -349 if mqk >= -204
+alf inc 388 if qby > 2092
+mk inc -430 if d > 3443
+eb dec 338 if alf < 352
+mk inc -215 if cox == -147
+e dec 171 if b >= -819
+alf dec -205 if d != 3433
+d inc -490 if qby == 2102
+e inc 612 if he > -528
+anb inc -811 if mqk > -543
+he inc 685 if cox >= -154
+red dec -748 if anb <= 1129
+ty dec -872 if ty >= -97
+b inc -920 if eb == -2908
+s inc -701 if mqk >= -548
+tm inc 136 if alf > 545
+he dec -100 if e != -898
+qby inc 552 if anb >= 1132
+xoc inc 700 if xoc == 617
+xoc dec 827 if obo != -385
+anb inc 738 if d != 2956
+eb inc 476 if mqk == -544
+s dec -100 if ev == -366
+obo inc -602 if e == -898
+tm inc -80 if xoc == 490
+eb inc 160 if eb == -2432
+he inc 229 if he == 159
+tm inc 453 if b > -1739
+obo dec 786 if qby < 2655
+swy inc -120 if qby != 2651
+ev dec -382 if obo != -1770
+qby dec 41 if eb < -2265
+cox inc -991 if obo > -1765
+cag inc -713 if obo > -1773
+he inc -958 if red <= -1522
+ty inc -426 if mqk != -551
+k inc 902 if ty == 349
+npo dec -550 if eb < -2274
+swy inc -30 if d < 2954
+anb dec 990 if npo < -1139
+ty dec 301 if red >= -1529
+ev inc -687 if ty > 347
+ty dec 261 if he <= -802
+b dec -313 if ev < -1043
+alf dec 231 if k != 2889
+npo inc 956 if qby >= 2618
+cag inc -39 if npo <= -1135
+he dec 117 if qby > 2605
+v inc -574 if cag > -4421
+npo inc -179 if mk <= 538
+v inc -737 if he < -910
+npo inc 722 if swy < -37
+mk inc 200 if alf != 313
+npo dec -604 if mqk == -544
+ev dec -794 if ev > -1048
+eb inc -384 if npo == 3
+he dec -10 if qby != 2614
+e dec -317 if e > -906
+e inc -662 if d >= 2946
+s inc 941 if npo != 0
+xoc inc 765 if e <= -1235
+b inc 434 if ty > 354
+e inc 513 if anb > 880
+cox inc 146 if mk > 734
+mk inc -31 if alf == 316
+qby inc 887 if mqk == -547
+obo dec -87 if mqk != -536
+he inc -230 if tm != 2217
+e dec -469 if alf < 326
+alf inc 608 if d != 2950
+mqk dec -78 if v < -4355
+b inc -865 if ty < 356
+s dec 57 if npo < 7
+npo dec -100 if cag > -4428
+cag inc -217 if red > -1522
+b dec 338 if k == 2898
+npo inc -324 if k <= 2906
+mk dec -763 if obo >= -1687
+e inc 760 if d > 2945
+e dec 984 if v == -4350
+obo inc 651 if he <= -1126
+red dec -380 if d >= 2950
+b inc 11 if k > 2888
+v dec -406 if red <= -1142
+anb dec -900 if e <= 501
+ty inc -2 if mk != 1471
+tm dec -655 if qby > 2619
+k inc 142 if mqk < -540
+ev inc -346 if xoc != 1265
+xoc dec -284 if k >= 3032
+d inc -908 if k == 3040
+e inc 36 if swy == -41
+xoc dec 372 if alf != 930
+s dec -327 if xoc != 1159
+e inc 56 if ty < 343
+v inc -445 if npo == -221
+xoc dec 265 if s >= 2746
+k dec 604 if swy >= -42
+alf inc 918 if eb > -2662
+mk inc -227 if cox != -150
+cox dec -693 if qby <= 2614
+d inc 88 if k != 2434
+tm dec -278 if k > 2428
+v dec 384 if red <= -1145
+npo inc 854 if ev != -1390
+he inc 69 if xoc >= 893
+d inc 587 if eb <= -2650
+b dec 873 if anb == 1785
+tm dec -557 if mk != 1230
+k dec -335 if k <= 2437
+d inc -215 if cag != -4424
+obo dec -754 if red == -1140
+d inc 369 if v != -4766
+tm dec -12 if red >= -1155
+anb dec -836 if xoc <= 892
+s inc -170 if cag <= -4422
+k dec -717 if mk != 1234
+npo inc -790 if k >= 2764
+obo dec -87 if red <= -1157
+v dec -894 if ev >= -1401
+cag inc -440 if swy >= -49
+e inc 31 if d > 3091
+v dec -581 if he != -1057
+anb dec 760 if k <= 2775
+swy dec 513 if v != -3295
+s inc 840 if mk > 1242
+npo dec -359 if mqk > -549
+red dec -958 if ev >= -1403
+ty dec -246 if qby != 2617
+k inc -28 if cox <= 544
+npo inc -881 if cox > 545
+ty dec -733 if ev < -1391
+e dec 750 if cag <= -4863
+cox dec -44 if alf < 1843
+mk inc 751 if ev < -1390
+he inc -968 if mk > 1980
+d dec -431 if npo != 202
+v inc 406 if xoc != 902
+tm inc 635 if mk <= 1991
+npo dec 401 if anb <= 1022
+v dec 940 if obo >= -1034
+npo dec 572 if qby < 2619
+swy inc 934 if anb != 1021
+eb inc 499 if swy == 893
+mqk inc 17 if s < 2568
+mqk dec -704 if alf != 1836
+ty inc -301 if mqk != 162
+npo dec 29 if cox >= 579
+alf inc -677 if npo > -409
+mk dec -399 if npo == -399
+cox dec 639 if e == -213
+ev inc 602 if qby < 2617
+ev dec -238 if eb != -2149
+mqk inc 26 if k > 2734
+anb dec -153 if v > -4238
+b inc -331 if cox != 584
+mk dec 411 if s > 2574
+xoc dec -631 if xoc == 902
+mqk dec 795 if d != 3083
+swy dec -911 if anb > 1184
+anb dec 368 if e >= -217
+b dec 463 if qby != 2612
+qby dec -127 if v <= -4226
+alf inc -848 if npo != -409
+obo dec -499 if s >= 2571
+swy dec 165 if v < -4225
+alf dec 71 if mqk == -609
+b dec -717 if d != 3090
+cag inc 721 if tm <= 3694
+xoc inc 304 if ty > 1033
+swy inc 728 if d < 3096
+tm inc -690 if eb >= -2163
+qby inc 979 if ty == 1025
+s dec -175 if swy >= 1449
+s dec 639 if he > -2038
+mqk dec 615 if red <= -189
+he dec 481 if cox >= 578
+anb inc -329 if xoc <= 1532
+anb inc 350 if red != -192
+obo inc 720 if s != 2108
+ev dec -316 if s > 2111
+mqk inc 322 if alf == 246
+d dec -723 if cox > 580
+b inc -301 if alf >= 254
+cox dec 847 if xoc > 1528
+v dec -298 if cox <= -254
+eb dec -842 if cag != -4874
+he inc 483 if eb != -1324
+b inc -160 if npo >= -400
+tm dec 885 if obo == 187
+anb inc -505 if tm <= 2129
+red dec 387 if e < -212
+e dec 761 if npo <= -397
+he dec 303 if tm == 2128
+s dec 308 if b < -3718
+mqk dec -207 if he > -2041
+ev inc -655 if xoc != 1533
+s inc -601 if d > 3809
+ev dec 666 if cox < -256
+ty inc 384 if he != -2041
+v inc -560 if ty >= 1403
+ty inc 446 if obo != 194
+obo inc -570 if cag != -4868
+obo inc 21 if k == 2743
+cox dec -183 if mk != 1973
+s inc -780 if eb <= -1306
+b inc -173 if tm != 2131
+b inc 489 if v > -4488
+swy inc 337 if s < 431
+ty inc 36 if alf >= 240
+xoc inc -941 if s < 427
+xoc dec -533 if xoc <= 600
+eb dec 269 if swy == 1795
+eb inc -718 if swy < 1796
+xoc dec 319 if eb <= -2039
+ev dec 855 if npo < -390
+v inc 208 if d >= 3805
+d inc -846 if tm == 2122
+red inc -636 if mk <= 1977
+d dec 695 if ev == -1764
+e dec -864 if cox == -268
+v dec -913 if d == 2270
+alf inc -364 if cox > -270
+he dec -211 if cag != -4862
+b dec 624 if b != -3887
+v dec -953 if b < -4514
+ty dec 631 if b < -4518
+e dec -496 if obo <= -367
+d dec -911 if cag >= -4872
+mk inc -549 if xoc >= 1117
+alf dec -586 if e <= -971
+cag dec -919 if k == 2743
+qby inc -803 if cag <= -3943
+k dec 18 if k > 2734
+ty dec 537 if qby > 2909
+swy dec 973 if tm >= 2122
+d dec -502 if qby == 2916
+ty inc 50 if he >= -1816
+cag dec 344 if e > -985
+cag inc -967 if anb < 311
+ev inc 193 if npo != -393
+ev inc -934 if cag >= -5265
+ev dec 416 if d == 3683
+ty inc -963 if d < 3688
+s dec -904 if s <= 424
+b dec 52 if b >= -4524
+alf inc -427 if obo <= -363
+red dec -686 if cox > -268
+b dec 551 if mqk == -695
+xoc dec -670 if v > -2428
+anb inc 310 if ty >= 401
+ev dec 768 if red < -519
+tm dec -391 if k == 2725
+b inc -624 if xoc < 1797
+s inc -962 if ty != 391
+xoc inc -482 if mqk > -703
+alf inc -110 if v < -2418
+mqk inc -812 if s < 1329
+cag dec -584 if red >= -529
+qby dec -503 if npo >= -405
+npo dec -592 if npo <= -396
+anb inc -611 if anb < 313
+anb inc -537 if red < -538
+eb inc 781 if cag < -4664
+xoc dec -241 if he >= -1821
+k inc -974 if swy >= 816
+eb dec -649 if ev > -3690
+he dec 258 if b > -5750
+cag inc -618 if tm >= 2513
+b inc -132 if npo == 190
+cox inc -187 if mk > 1427
+tm dec 244 if npo <= 198
+cag inc -21 if alf != 350
+npo inc -332 if ev >= -3696
+obo inc -144 if ev < -3698
+npo inc 652 if k >= 1744
+anb inc 682 if b > -5739
+mk dec -585 if eb > -607
+ty dec -395 if red <= -521
+d dec -118 if cox < -260
+obo dec 97 if d < 3797
+mk inc 561 if s != 1327
+mqk inc 341 if xoc < 1558
+eb dec 136 if xoc >= 1546
+eb dec -144 if b == -5744
+b dec 416 if xoc < 1560
+e inc -688 if red <= -520
+cag inc -846 if cox <= -264
+e inc 858 if mk >= 2009
+d inc 120 if mqk < -1165
+eb inc 275 if anb < -304
+d dec 426 if e <= -801
+obo inc -175 if alf == 358
+b inc 411 if v > -2433
+anb dec -285 if qby != 3420
+e inc -899 if cox != -257
+ty inc 764 if xoc >= 1552
+eb inc 157 if tm == 2273
+alf dec 416 if xoc <= 1562
+mqk inc -251 if d <= 3498
+s inc -405 if e != -1698
+he dec 280 if v < -2419
+mqk dec 783 if e == -1705
+s dec -530 if mk > 2013
+cox dec 601 if qby >= 3421
+alf dec -214 if cox <= -253
+cox inc -280 if v < -2418
+obo inc -617 if k > 1749
+tm dec 400 if v >= -2427
+obo inc -810 if swy == 820
+cag inc 245 if red < -524
+k inc 939 if obo < -1973
+xoc inc -867 if d != 3499
+ev inc 930 if ev >= -3690
+npo inc 490 if npo == 513
+obo dec -127 if tm <= 1874
+v inc -937 if cox < -539
+cox inc 806 if eb < -315
+tm inc 868 if b == -5749
+d inc 370 if cox != 264
+mk dec 735 if d >= 3488
+v dec 651 if tm >= 2736
+d dec 751 if d == 3495
+eb inc 73 if eb == -320
+anb inc 946 if mqk >= -2202
+k inc -879 if tm != 2731
+cag dec 329 if cag >= -5075
+v dec 110 if npo <= 998
+cox inc -324 if v != -4012
+s dec -43 if xoc <= 688
+xoc inc 154 if ty <= 1552
+npo dec 126 if e == -1705
+mqk inc 631 if qby < 3428
+obo dec 875 if k < 882
+eb inc -159 if d >= 2737
+ty inc 158 if mk < 1266
+cox inc -726 if cox != -65
+red inc 699 if he <= -2352
+anb dec 348 if he == -2353
+mqk dec -25 if cox <= -792
+he inc -72 if ty == 1550
+tm dec -396 if obo >= -2712
+mqk inc -730 if alf >= 153
+ty inc 950 if b <= -5741
+qby inc 711 if b <= -5747
+he inc 990 if ty == 2500
+eb inc 691 if cag <= -5394
+v dec 315 if v >= -4001
+cag inc 831 if k == 872
+cag dec -285 if s != 974
+tm inc 500 if k >= 865
+ty inc -407 if ev >= -2761
+ev dec -960 if v >= -4019
+anb dec 698 if cox < -781
+swy dec 265 if cox <= -783
+e dec -962 if anb < 237
+he dec -152 if swy != 555
+npo dec -416 if alf < 159
+red dec 450 if qby > 4127
+cag inc 253 if s <= 964
+cox dec -969 if tm <= 3634
+e dec 442 if qby < 4135
+mk dec 890 if qby > 4128
+cag dec -934 if ty != 2085
+cox dec 905 if k != 876
+red inc 595 if k <= 862
+b inc 105 if npo > 1286
+obo dec 502 if mk == 394
+ty dec 533 if obo != -2718
+ev inc -6 if mk < 386
+npo inc -144 if d < 2746
+e inc -232 if ev >= -1813
+alf inc -78 if ty > 1553
+eb inc -637 if ev != -1796
+tm dec 132 if e != -1425
+swy inc 667 if alf == 78
+red dec -166 if mk <= 387
+swy dec -173 if v >= -4014
+qby inc 788 if qby > 4121
+ty dec 172 if qby <= 4919
+red dec 447 if tm == 3501
+obo dec 366 if alf == 78
+he dec -842 if mqk != -2305
+xoc inc -10 if d >= 2736
+ev inc 517 if cox != -726
+mqk dec 865 if npo != 1151
+obo inc 29 if red <= -552
+qby inc -337 if b == -5644
+cag dec -970 if mqk != -3172
+e dec 343 if xoc != 827
+d dec -890 if v == -4017
+v dec 793 if anb > 220
+cox dec -442 if he == -599
+eb dec -759 if anb > 225
+obo dec 45 if k == 872
+obo dec -534 if e > -1764
+cag inc 344 if npo >= 1149
+eb inc -458 if e <= -1764
+obo dec 55 if mqk > -3167
+s dec -487 if v > -4813
+xoc dec -51 if d >= 2744
+ty dec 568 if ty >= 1387
+cag inc -698 if cox <= -276
+cag dec 162 if mqk > -3170
+k inc 563 if qby > 4579
+alf inc -784 if tm >= 3498
+mqk dec 520 if obo > -2624
+npo inc -780 if qby > 4576
+alf dec 152 if he >= -602
+v inc -614 if eb <= 415
+he dec 659 if k < 1445
+ev inc -49 if d >= 2740
+e dec 302 if v >= -5424
+ty dec -877 if alf < -867
+qby inc 368 if swy != 1394
+anb inc 732 if swy < 1396
+mk inc 61 if ev > -1344
+b inc -66 if cox == -280
+npo inc 11 if swy <= 1397
+swy inc 292 if alf >= -852
+red inc -606 if mqk == -3684
+e dec -460 if cox > -272
+s dec -469 if cag > -2898
+tm dec -717 if obo > -2618
+xoc dec -796 if cag != -2893
+ev inc -145 if tm < 4222
+e dec 892 if red == -1167
+red inc -403 if red == -1164
+tm dec 519 if npo != 389
+cag dec -107 if cag <= -2900
+ev inc -385 if d > 2743
+qby inc -444 if alf <= -857
+ev inc -201 if swy != 1398
+npo dec -851 if s >= 1922
+s inc 975 if s <= 1923
+alf inc -906 if v != -5413
+obo dec 870 if ty >= 815
+obo inc -26 if anb == 959
+e dec -65 if e <= -2951
+ty dec -835 if anb == 958
+anb dec -49 if swy > 1394
+mk inc -253 if mqk <= -3680
+e dec -862 if b != -5708
+qby dec -293 if s == 2896
+s inc -845 if cox != -271
+xoc inc 509 if npo >= 387
+obo dec -758 if mqk >= -3675
+v inc 370 if b < -5703
+cox dec -986 if red >= -1172
+b inc -682 if d >= 2739
+k dec 568 if v >= -5055
+mk inc 451 if alf == -1764
+ty inc -56 if mk <= 645
+eb dec 173 if s <= 2051
+s inc 836 if ty != 764
+alf dec 345 if cag <= -2887
+cox dec 206 if k != 867
+eb inc 44 if s > 2053
+d dec -294 if cag <= -2891
+he dec 904 if swy >= 1386
+ty dec 499 if swy < 1399
+e dec 891 if tm > 3698
+b dec -732 if v < -5057
+qby inc 722 if red != -1168
+e inc -609 if npo != 379
+b inc 741 if e < -3525
+b inc -833 if tm >= 3701
+red inc 282 if ev > -2072
+obo dec 441 if b < -5647
+xoc dec -612 if anb != 1005
+s dec 67 if mk > 647
+cox dec -341 if red > -879
+v inc 316 if qby <= 5519
+mk inc -251 if ty == 271
+ty dec 587 if b <= -5658
+anb dec 204 if d < 3044
+he dec -358 if qby < 5521
+s dec -594 if obo < -3946
+xoc dec -802 if d > 3029
+alf dec -536 if alf <= -2105
+tm dec 209 if cox <= 711
+s inc -142 if anb > 809
+s inc -571 if mqk >= -3676
+npo inc 607 if alf == -1563
+swy inc -438 if swy >= 1388
+b inc 325 if xoc != 3092
+k dec 338 if s <= 2650
+cag dec -748 if he == -1804
+npo inc -186 if npo <= 382
+cag inc -920 if tm != 3483
+swy dec 288 if mk >= 652
+ty dec 362 if mqk != -3685
+alf inc 291 if anb == 811
+mqk inc 203 if red == -890
+swy inc 712 if eb >= 231
+ty dec 327 if v > -5052
+npo inc -453 if mqk == -3684
+cox inc 747 if mqk < -3685
+qby dec 844 if cox >= 698
+cag inc 785 if swy != 1659
+red dec -820 if xoc > 3086
+anb inc -2 if cox < 709
+cox inc 91 if cag <= -2280
+cox inc 988 if mk <= 643
+ev inc 895 if ty != -433
+red dec -411 if npo == -259
+npo dec 831 if npo > -261
+k dec 799 if mk == 643
+qby inc 373 if v != -5054
+e inc 949 if swy > 1668
+qby inc 278 if d > 3037
+eb inc -839 if obo != -3946
+mk dec 758 if anb <= 800
+npo inc -662 if s != 2642
+e inc -807 if e < -2575
+cag inc 755 if swy <= 1669
+e dec -532 if swy > 1662
+alf dec -4 if eb <= -596
+swy dec -552 if ev <= -1170
+d dec -857 if cox != 1700
+anb dec -31 if anb > 798
+eb dec -482 if npo < -1759
+ty inc 820 if d == 3897
+xoc inc -846 if v >= -5054
+alf dec 312 if d != 3895
+obo dec -531 if npo >= -1752
+b dec 722 if ev > -1177
+d inc 912 if ev == -1173
+e inc -497 if cag <= -1514
+b dec 551 if eb <= -599
+mqk dec -130 if alf >= -1576
+obo dec 426 if s >= 2649
+mqk inc 672 if cox >= 1698
+red inc -879 if alf <= -1568
+he dec -503 if cox != 1687
+tm dec 117 if ev != -1173
+he dec 237 if mk < 645
+qby inc 189 if eb != -601
+k inc 820 if k < -279
+mqk inc -594 if obo <= -3421
+k dec 375 if v > -5041
+cag dec 298 if d != 4807
+b inc 985 if ev != -1163
+tm inc -697 if cox >= 1687
+v dec -940 if swy >= 2212
+k inc -260 if d >= 4806
+ty dec 73 if k < -526
+swy inc -530 if s <= 2654
+mqk dec 636 if swy >= 1686
+d inc 32 if qby <= 5516
+v inc -809 if v <= -4103
+e dec 380 if k != -540
+ev inc -651 if b == -5939
+qby inc 352 if alf >= -1576
+v inc -256 if obo > -3416
+mqk dec 28 if red <= -527
+alf inc 395 if npo > -1762
+ev dec 317 if d < 4837
+cag inc 74 if red >= -528
+mk dec -575 if anb == 833
+cag dec 744 if obo == -3421
+mk dec -455 if qby == 5868
+k inc 350 if cag <= -2266
+d inc 730 if npo <= -1749
+ty dec 180 if mk != 1673
+xoc inc 364 if cox == 1694
+anb inc 937 if cox == 1694
+s dec 459 if tm >= 2785
+cox inc -594 if cag != -2271
+cox dec 874 if cox > 1102
+xoc dec 289 if alf > -1178
+e inc -178 if obo < -3413
+red dec -965 if obo >= -3416
+npo dec -47 if ty == -497
+alf inc -264 if npo < -1697
+v inc -518 if alf == -1429
+red dec -264 if swy == 1697
+k inc 540 if obo > -3415
+ev dec 208 if tm != 2799
+npo dec -967 if tm >= 2788
+xoc inc 106 if swy == 1691
+eb dec -276 if s >= 2185
+b inc -151 if mqk == -4812
+he dec 120 if he <= -1534
+e inc -236 if cox >= 1091
+tm dec -25 if alf == -1436
+xoc inc 618 if s == 2186
+b dec 269 if qby != 5876
+cag inc -911 if cag != -2267
+mqk inc -68 if he == -1658
+alf inc -267 if ev > -2035
+cag dec -228 if npo < -733
+k inc -527 if cag > -2043
+qby inc 341 if red == -533
+xoc dec 539 if mqk >= -4879
+d dec 884 if ev == -2032
+mk dec -837 if ty == -497
+tm inc -879 if k == -707
+k dec -32 if tm > 1907
+e dec 771 if ev > -2026
+qby inc -732 if s <= 2192
+ev dec 629 if swy < 1700
+obo dec -799 if e > -4138
+e dec -954 if k >= -683
+ev inc 177 if eb == -329
+d inc -151 if cag < -2032
+b dec 967 if alf > -1711
+e dec 836 if b == -7326
+he dec -543 if eb > -337
+d inc 478 if alf == -1705
+mqk dec 251 if xoc < 3047
+v inc 235 if anb == 1770
+xoc inc 94 if mqk > -5134
+swy dec -106 if s > 2176
+cox inc 591 if xoc != 3138
+eb dec -594 if eb == -329
+he inc -389 if qby == 5469
+swy dec 680 if ty != -487
+alf inc 713 if ev < -2483
+mqk dec 533 if b != -7332
+mk dec -282 if tm <= 1920
+d dec -878 if tm >= 1913
+ev inc -821 if b > -7327
+s dec -229 if qby > 5475
+tm dec -671 if swy > 1115
+mk dec 703 if eb > 262
+cag inc 96 if v == -4682
+alf inc -771 if mqk != -5672
+eb inc 140 if b > -7322
+swy inc -493 if eb != 270
+he inc 826 if eb == 273
+v inc 82 if s <= 2408
+anb inc -898 if tm <= 2585
+mk dec 735 if red <= -531
+obo inc -704 if eb >= 262
+cag dec -145 if tm == 2585
+k dec -952 if swy > 620
+mqk inc 818 if eb == 265
+he inc 229 if b > -7325
+v dec -717 if npo != -746
+npo inc -329 if d == 5890
+xoc inc 820 if v > -3957
+ev inc -751 if alf != -1768
+he inc -105 if npo == -1066
+tm inc -86 if swy <= 627
+npo inc 83 if qby < 5486
+npo inc 829 if mk != 1347
+swy dec -554 if tm >= 2504
+anb inc 836 if red <= -524
+npo dec -878 if b > -7328
+cag inc -276 if alf != -1763
+red inc 215 if qby >= 5469
+eb inc -509 if d >= 5884
+xoc dec -707 if he >= -1119
+s dec 42 if cag > -1801
+s dec 63 if obo >= -4125
+mk dec 358 if cag <= -1793
+eb inc 95 if cag <= -1793
+eb dec -637 if b >= -7323
+ty inc -617 if xoc != 3854
+mqk dec 510 if ty < -1112
+he inc -285 if tm != 2499
+ev inc -547 if qby < 5487
+mk dec -915 if npo < 730
+eb inc -953 if e > -4036
+obo dec 412 if he >= -1108
+npo inc -925 if d < 5888
+ev inc 930 if cag < -1792
+v inc 658 if npo <= 726
+ev inc 892 if mk <= 1918
+ev inc 756 if b == -7326
+qby inc -574 if s > 2307
+npo inc -638 if red >= -326
+tm dec 248 if mk < 1913
+cox inc 865 if s < 2317
+cox dec -950 if d <= 5893
+mk dec -632 if he <= -1108
+v inc 176 if d <= 5893
+mk inc -805 if ty != -1120
+ev dec 973 if npo < 89
+swy dec -601 if s < 2308
+e dec -146 if cox < 3509
+mqk inc 321 if cag > -1803
+xoc inc -534 if alf >= -1764
+d dec 747 if ev >= -3004
+npo inc -826 if obo != -4120
+xoc inc -343 if ev < -2994
+b dec 415 if anb <= 1708
+b dec 323 if xoc > 2976
+b inc 697 if ty <= -1118
diff --git a/2017/inputs/day_9.txt b/2017/inputs/day_9.txt
new file mode 100644
index 0000000..eb4d605
--- /dev/null
+++ b/2017/inputs/day_9.txt
@@ -0,0 +1 @@
+{{{{{<!!!>!>'!!!>!!!!!!!>u!!!!!>},<'>,<!>e{o!!!>!'>}},{{{<!!u<>},<!!!!!>!'!!a}!!!>,<!>!!!!!i!!,e!>,<i{o!>},<!!>}},{{},{{<e},!>},<!{"!!'e'>},<auu<oa{!!!>!i>},{<a!!,'<!>>,{<a}!!!>a>}}},{{{{<!!'!>,u!!,}!!!>!!"'!!!>,i!!e>},<!!}<!>},<!!!!'i!!!>ii{!>},<!>,<!!"!>">}},{<!!ua<!>},<{!!!>!>},<!<e''!!!>ou!!!!!>!"!!!!!!!>!!>,{<!>},<u!!a!>,<!><"ui!!,u'!>,<!!!>!!o!!a>}},{{<"!!<<!>,<!>},<o{<e!!!>!!"<!>},<o>}}}}},{{{{{{{{{<!>!>,<,>},{<!>,<,}!>},<!a"!!!>},<,!!!>,<!!!>!!!>'>}},{{<{}!!e!!!!>},{<e!!!><!!!!'!>,<ea!!u'i,e{!i>,<""a!!!>},<o>}},{<!>,<!u<!!!!au!!!>!eia'!>},<!>,<!<>,{}}},{<,oo>,{{<!>},<ei,{<oeo,!!'a!!!>!>},<''>,{<{e!!!>!!!>}>}},{{}}}},{{<i!!'}u!>>}}},{{{{<!>,<oe}'u<!>,<e"e!a>}},{{}},{{{{<!!!!!>o!!!>!!"o!!!>>}},{<'>}},{<e>}}},{{<!>,<!!o<<!>i>}},{}}},{{{<a!>!>},<!!!!{!a,!!!>{!"i!}oie>},{<e!!!!!>,<,">}}},{{{},{{{{{{<{uu{'!!>},{<>,<!aeoae>}},{{{<!!!>,<!<<!>,<!!!!i<!!!ue!>,<ui}o!!e>}},<!>,<!!e"i!!'{"'>}},{}}},<'i!!ueiu,!>},<!>},<!>!!<"}!!!>,<!>},<>}}}},{{{{<,!>},<',!!',ei!>!>},<!}!!!>i!!}ee,>,{{}}},{{{<'a'!!e!"i!>o!!!>!!!>!!!>{!!!>,<,>},<ei!<!!<!{e{ua>},{<!!!>,<{!!!!!>!!,!!!>>,{<,!!>}},{<!>,<!>!>}e!>},<!!!>}{'!!!>o>}},{}},{{{<!!!uu!!!!!!!i<>,{<,}"!>!!!>}o!>,<>}}},{{{{{<!>,<u!oo!>,<!!}a<>},{<!!!'!>o>}},<o!>,<!<!>,<<ii>}},{},{{<<!>,<>},{<i!>"o!!aue,>,<i!>},<!>},<<!!e!!i>}}},{<!>},<!!{"!>,<!o!}!>},<o,o'!>!!a,e!!!!!>,<>,{<u"!!!>!>},<!!>}}}},{{{{{<!>},<!!!>!>,<o>,{<!!!!!>!!!!o!>},<!>u!>,<!!!>i!o!>!e<!!!>''!>!>i>,{{<,u'!>i"o!!"}>}}}}},{<!!!!'}{>}},{<!>"}{!>},<!>},<i<!!!>,<i<>,<"!>,<"u>},{{}}},{{{{{<!!'e!!!!!>>,<!!a{o!>u,,o}"{>},{<!>,<<,!!!>,!>o!,!>,<!!!!'>}}},{{{<uo!!!>!>},<!>,<e>,{}},{<!!'a",!}!!!>!!i>,{{},{<!!!!!e!!"e!>},<'{<!!!>},<o!!u!!!!!>{{!>,<>}}}},{{<,<!,!!">},{{{}},<!"o<o!!}!>},<!>,<{!!!!!>"o!!<,e!o!!!!!>},<!>},<>},{<i!>},<>}},{{<'!>!>!>,<>},<"io!!!''!!!>!!o!!o!!!>,<<i<i!!!>!>,<>}},{}},{{{<'i!!!'}!!!>!>!!u!!!u!>oo!>},<>},{<!!,i!>,<!!a!>!>,<u!>},<ae>}}}},{{<{i!!iu!,!!'!!!!{"!!!>>,{<!a'>}},{{<",!>a{a!!{i!>,<!>},<}u!>,<!>!!oii>},{{<'u!!"!!!>}a!!e!aa!>,<i!!!>!!!>,<<>},<!>},<"}"!!!>i!>,<>}},{{<!!u!a',"{>,{<'}"!!!o!>},<!!'!!<a,,"!!,uo>}},{<e!>,<e{!!,}<!!<!!eu<<uui>,{<{!>,<"!>,<,!!,!!,e!!{{a,!!!!!>},<<a>}}}},{{<}!>'!!{,<!}!!"!!e!!u"e,!!i>,<!!!>e!>,<!>},<!!!!!>>},{{{{{{<!!""!!!a!u>}}},{}},{{<eio>}}}}}}},{{{{},<!!'<!!!>},<u!>!!!!i}e!!},!>,<{!>,<!!!>>},{<'!'''!>o"},!!e{!"o!>,<u!!!>{!>u>,{}}},{{{<!>,<u"o"{!!!>!>!!o!!}iou>}},{{{},<io<!!'"!>,<!>,<!!!>a<>},{<!>,<a!>},<<o!!!>{i!!o>,<!ao!>,<!!"!!u{!!{!!!!<!!e<!!a}{u}{!!!!a>}}}}},{{{{<!!!><!>},<!>},<a!"!>,<,!!!!!!,!!!>,<a!!e>}},{{<!!o<!u!!ee{>},{<!!!><<o<"e>,{<!>},<{!,!!u!!!!!!!!!>},<!!!>,!!!>i!!{<!>,<!!>}}},{<!!!!!>o!>'<!{<{!!{!!>,{<"!>!>!>},<!!!><'{o{e!>,<,a}!!i>}}},{{},{},{<!!!!a!>},<!!!}!>,<!!!>e!!!!!!!!e}!!!!a!!'}">}},{{{{<!>},<i!!!>!>},<uu<o{io>},<e<!!!>!!!>i}!>,<<>},{},{{{},{<i"!!a!!i!!!!}!>},<!}{<!'o!uu,>}},{<u!!eo!!{eo!>,<'!!!>{!!>}}},{{},{<!!!>'""!o!>,<>,<i<!>!!!>ue!!!>i{'!u<<!!!>,!,>},{{<e>}}},{{{},<!>,<!!!>,i}},!>,<!!e!!>},{{<!!!!}e!!i!'"!iu!>},<!!{!!u>},<u!>>}}},{{<"}<!!!>},<ou!o}!>,<>,<!!!>'!!!'u!!!!!u!!}>},{{<!!!>!>},<}>},<!!<!"!,'u!!!>!!,a','>},{{<u>,{}}}}},{{{{{{}}},{{{{{<aa,,!>!>,<>}},{{<oo>}}},{<}!>,<,{i!!}!>},<!!!>>},{{{{<a!!!>,<!'<!>"!!!>u<i!>},<a}'}!<ie>,{<!>,<o!!!!!>i"a}!!}a!>i<!>},<!!!>!!a!!!>>}}},{{},{}},{{{{<!>,<"u<!!}ui!!e<!a}u!>},<!!",>}},{}},{{{<">,<!>},<!!!>!!u>},{<!>,<{>,{{<"ie!}!>a!e>,{}}}},{<}i''ua{!>},<>}},{{},{<!>},<!>!>},<o},!!!>!>},<<!>,<u{,!>},<,a,>}}}}},{{},{{<,"u{>},{}}}}},{{<,!!i!!i!!!!"a"!!!>!>,<>,<e,a,}!>,<<!!!<>}},{<!!!!!>!!ou>,<<!>},<}u!!!!!>{!!,!>,<i!>,<>}},{{{<a!>{!>},<!>">},<a!o!!!>!i"!><!>,<"i}!>!>!>a>}}},{{{{<a>,<!!!>!>e!!>},{<!!a!!>},{{{},{<i>}},{}}},{{{<!>},<>,<"'<<!,">}},{{<e!!""!e!>"iaa,a>}}},{{{}},{{}},{}}},{{{},{<!i>}},{{}},{{{{<<!>},<{a!!!>!!!>}ua!!!!!>a>},{<ea!!{i!!,!!a"}!!}{u'!>ae!!!>'>}},{<>}},{{<!>},<!',!<<,!>,<>,<{,"ea>}},{<u,o!!u>,{{},<}!!{!>},<i!!!"<!!}!>},<ieo!>!>,<{!>},<!{!<!>,<!!u>}}}},{{<!!"',u"}u!>,<>}},{{{<u!>,<!a!!o>},{<!>},<!>{!>'!!u!!!!'!>,<!!<!>,<!!!>},<},!!!!'>}},{},{{{{<<ou!!e!>},<i>},{<}{!>},<!>,<!>"''!!!>a<!!!>o!!!>ue>,<!<,'!>,<<!>,<o}!!!>,<!!!>}o!!ea}>}},{{<!>eo,a!>!>},<<a!'!>},<"!u!{i!!!!e!>,<,!!u>},<{}>}}}}}},{{{}}}},{{{<,au'!>},<oo!>,<!i},}"!>},<>,<i!!!!!>},<{!!!>!>!!o'"!>!,"}!">}},{{<!!'ia!!o{e}'!>!>!!!>",!!!!!!!!!!!<!>},<>,{<!!""}!'<"{!!!>>}},{{{}}},{{<!!!>i!!!>!>},<!!!!!>!>e!!!>,<!>},<!!}eei<i!!!!uu>},{}}},{{<>},{{<!i<!!a}u!!!>"!>,<'!!!>,!>},<<!>},<ui!>,<>},<<!>o<"!!!!e}}!!!!}!!!>!!">},{{<,<!!!>e>,<!e!i!>i{<!}!>},<}!!!>>},{{<"e""!}u"!!!>!>,<!!">},{<!!!>!>},<oo!!!>'!!e!!!>!>,<!!!>,<{iau!>},<eo'>,<!>{u{e!!"}u!!<!'o>}},{}}}},{{{{{<!o!>},<>,{<o{ee!>}"!!!>},<!!o!>!!!!!>!!!>},<!>!>,<oa>}}}},{{{{<{i!!uu',",u>},<a!>,<"!!,i,!!a!>!!o!>,<!a!!e,!>},<>},<,o<!!!>!!!>o!>o>},{},{<'u!>,<!!!!>,{<i!!!>!>},<!!i!!""{!!e}u!>},<i}!!'e!!!>{'>}}}},{{{<e!>},<,!>>,{<""a'oa<!a}!!!>!>,<>,{<!>},<>}}},{<ou!!!>,!!!>,<>}},{{{<e{!!{!!!>!!!>a!!!o!!!>!!'e!>,<}o{!>},<!!">,<,'>},<!!!,!}i!>oa!>,<i"<!!<',!o>},{<i!>},<>}},{}},{{{{<,{!!o!>i>}},{<oe!>,<,"o!>},<a>}},{<i'!',!>,'>,<o<a!>},<<!>},<!!!>"!!!!o<a>},{}}}},{{{{{<a!iaou>},<!!!!!!!>ua,!>o"}e!>},<e,>},{{<,!!!>!!!><o!>,<!>,<<!>},<!>{a{i!>},<u>}}},{{{<>,{<!>,<u'i!o!>},<>}},{{}}},{{{<>}},{{<'!>,<!>},<",!!o}}{!>},<oo!!!>>},{{{{<'}!!!>,{a>},{}},{<!!!>o'!u"!!!>,<!!!!!>!a!!!>>}},{{<'!!!>,<'"}>}},{}},{{<!!!>e,o<uao>,{<<">}},{},{{{},{{<{e!!!>{!!!>},<"!"!!!>!>},<>},{<o'!!!>{>}}},{{{<'!>},<,!!e>}}}}}},{{<aioa!>{{!>,<",!>,<!!o!!a>,{{<}!>,<<!!!!!>!>},<,'{,}!>{uiu,!!i">},<!!!>u>}},{{<!!!>!!!!!!!!!>ae}'"!ua<i,!!!>,<oe!!!>>},<}!>},<!!!>}}ui!}u>},{{},{}}}},{{},{<!!!>,<!!!>o!!!!o'!!!!!>{u!>,<!>},<'i,!!}<!!,>}}},{{{<u'a,!!!>i>}},{{{{{<!!!>}e,""!{!!!!""!>!!!>ea>}}},<!!!!",'!!!>,<!!!>!!!>!<!!!>,<}>},{{<'!!!'!>ee!>,<>,<!!}!'>},<""!!!>},<i!o<!>,<eie!!",!>e>}},{<!!!>},<i!!!>'"!!!>!!<!>},<a!!,!>},<>}}},{{{{{<!>},<u!>,<!>,<!!{'!>},<!>},<<<>}},{<a!!!!!!!>!>},<<!o<"u<a'">,<!!!>,<'<!>},<!!!e!>},<!!!>oe,!!<>}},{{{{<u''!a",<io!>,<!>'a!!!>,<!!{"!!u'>},{<'!>},<!>,<!!a!>!>},<a!a!!,>}}},{{<!>},<oa>,{{{<!>},<!!o,>}},<i}u!>},<a!>},<<<!}!!!>!"e<!!!>!>},<}i>}}},{<{>,{<!>},<!>,<}{a!>,<u!>},<e!o>,{<!{e!!!>!>,<e!,!!o',>}}}},{{<'!<<i,a!!!!!o>},{{<<"}'!>},<<ao>},{<!!o!<!!!>>}},{{{},{{<!aoa{!>,<i!!e!{!!!!e!'ao!!!>,<}!>!!!>e!!{>}}},{},{{<i!>,<!>},<!>},<!>iaeo>},{{{{<!!u}!!!!,!!!!"uo!>,<<'o!>,<!>},<'i!!!>},<">},{<ii>}},<,>},{{<!>},<!>},<>,{<u>}},{<!>},<!!!!!!'"!!!>!>},<{!!!>i!>ao!>i>}},{{}}},{<i!!'!!!>e<{o"!!!!!>'>,{}}}}},{{{{<ou!{"!>},<!>},<>},<!!!>iauiui!>},<>},{<!!}e}e'!>,<!!!>>}}}}},{{{},{<!!!>}eoei!!!>u!>},<ie!!!>">,{{{<e!o!>},<}!>},<!>!!ie!,!!!i!oi!!!>},<!!!>>}}}}},{{<}!!e!iieu!!'>},{{<!>,<!!!!!>>,<}o!!!>>}},{{<!>!!u!!!>>}}},{{<!>},<<!>},<},,!!!<'u,!!o!!i<u{">,{<!>,<}!>,<!>!>,<!!!!!>!!!>!!!!}u"}i>}},{{{{<{e!>,<e{'i!oiu>},{{{{<>},{<"e!>},<ie">}}},<uu'<{<!>,<,}!!!>!!!!!>,<!!'o!!u'{>}}},{},{{},{<!!,'}!>!!!!!!!>,o!<!!!>'!>,<>,<o}!>!>,<{!!e!!,!>!!e!>,<!>i!!<{>},{}}}},{{{}},{{{<!!eu!!{o!!!>!>!!!!!!"!!!!>}},{},{<!!!>!!!!!>'oaii!!!>e!>,<!!!!!!!!!>!!!>o!>},<!!!>a>,<!!!>'!!i}u'{e!'!>e!>'!}!!>}},{{<!!!>!>},<o!!!}!!!>}'!!!>>,{}}}}}},{{{{{},{{<}u!!!!i<e!!a,i>}}}},{{<!!<}{<<u}u!>{ioe!!>,<''!!'e}!>>},{<u}eai>}},{{<'!,o>},{{}}},{{}}},{{{{{},<!!<u!!{o!}!!!>"<!>,<!,>},{{{},{}},{{<i,!>!>,<"<!}'!>,<!{>},{<!!!>}a!>ae!!!>o!!u!!"e!!<'o{>,<u<!{!>},<{>}},{{{<{}eeoua!!!>},<!!o"'{{>}},{<u!!!>!!}!!!!!>!u>},{{{<!!!>!>,<'a!>}!>!!<,u"!>!,{e<>},{{<!!eu!e!aa"'o'"!>u"'<!>>,<!>},<!!>}}},{<,eo'}o!'{>,<ia,!>i!!a"!!!>!>},<}!a!!!>!!!!!>,<ee>}}}}},{{{<!>u!!o'!!}!!!!!>!!!>>},<e<!>},<u!!>},{{<,!>!i!!<!>,<!>},<!>!>,<!!!!ao{<ae,,!>},<>,<<"e!>!>!>,<u!!!!u!!!!!>,o!>,<o!!!!!>},<a>},{{}}},{}}},{{{{},{},{<"!"<"!,!!!!!>eau!>,<,>}}}},{{{{{{}},<o<i!!!>,!>,<a,!!!>!!!>!!!>!<<<>},{<a{ue>,{<a!>!>"i!o,!!{!>},<a!!!!>}},{<"ia,i>,<'!>ioi!>},<>}},{{{<>},<!!<,e'au!!!!'>},{},{{<i',e!<!>,<'u,>}}}},{{{<o'i'!!<{!>,<a!!o!!e!!,!u!!o>},<,!>,<<o!>,i!>>},{{{<},}!!",!>!!!><>}}},{{},{{{<!!!'',u'a!<a!!!>},<ou!!!>!!a>},{{},{}}},<}a!!!,'a',!>u>},{{<!u!!!>ia{!!o!!!>},<!>,<!!<!>},<!!!>"!>,<!!!!}i>},{<!>,<!>!!,!>,!>>,{<}i>}},{{},{{<''!!e<!>},<a!!!>e{!e>}}}}}},{{{{{<"u!>!!!!>,<a!!o!>},<}!>},<!>i!}'>}}},{{{{{{<,,!eaa!u!!oie!<,!!!>!>},<!>,<!>{u{!!i>},{<"<i,!a"!!eo>,{}}},{{},{<!!!!e!>},<'!!!!,!!!>!!",>}}},{}}}},{{{<i{}'>},{<{!!!>,,!!e!>,<!!!!!>a"!u!!!!e!>,<{!!!!!',<>}},{{<!!u!!,!<}}<,<>},{<"!,!>},<{a!>},<}}>}},{{<<!!!>}!!"!>,<}!!i""'!!!>{>,<!!!>},<!>,<{!u!!'<io!o{>},{{{{{}},{<!!}!>!'u>,{<'u!!!>,<!eo<!>,<!!!>{>}}},{{<a{o!!!>"!!!>'}e!>,<}>},<!>,<}{!!!>!!!!"!"!>!!!!,}<<>}}}}}}},{{{},{{{{<,!!!>,!>},<!>,<!>},<>}}},{<!>},<>}},{}},{},{},{{},{{<u!>},<ieo!{!!<'"!u<!!!>!!!>,>,{}},{},{{{<o>},<,>},{<<i!a{{{<<!!!>!!!!o>,{<!!{<a!!!>u!>},<,!!!!oo!!!>!!u"!>}!>,<>}},{}}},{}}}},{{{{{{<<!!!!!>i!>!oi}oeuu>},{{<,{!>!>!!!>!!!>},<!!!>!!!>!!!>!!,'!},o!}>}}},{{<!>a!!iu{!e>},{{{<{!!{!!o!,!!!>>},{<!>},<!>},<"oi!"!!!>!>},<>}},{<!>},<i!!i}>},{<ue'!!a"uu{!>,<!>},<uuaa{!"!!!>>,<ee>}},{{},{{{},{}},{{<a!!!>!!!!!!{!"{e}e!!,!>ae!!'},!>},<!!!!o!>},<>}}}}},{{<!!!>},<>},{<u!!!>!><,!!!>},<!!!!<>}}},{{<{<e!<,!>},<'i!"{!>},<!>,<!>,<ie}>,<{,!{},!>e!!!!!!!>!","ua!}!!<'!!u'>},{{{{<!!!>!>,<!!e'u"'<"!"',,i!!i}<a>},<aoie}!>},<'}o,<>},{<'!a!!{"u!e!><i!!'!!"o!>,<>}},{<!>!!i!{{o!!!!!>,<!{!!i<e!!{">,<e!o'u,!!!!uu!!!}!>},<,!!}>},{{{{<!!!>,i""{!!!>},<!a,>,{}},{{<!}!!!>,o!>}"!!o,!!>},{<!>},<"u}!>"!ae!{!<>}},{{<oao}}a"i{!!!>,<o{>},{<o!!!><a!!!>u>}}},{{},{}}},{<!>!!!><",{}!>ee!>,<!'!!!eu!!!><!!>}}}}},{{{<e}!>},<!!!>!!o!!!!{{!!!>!>"a!>!!!!!!>},<!>!!!!!>!!!>e>},{{<!!a!!!>}!!{ie,!!<!>!!<e!}eo!>},<,}>,<!!!!}!>i!>,<,!!"!>},<}!>o!"oo'o!>},<>},{{<{{!!!>ua'ei'!!<>},{}}}}},{{{{{{}}}}},{{},{{<!>iu'!>>}},{{<!!ouo,!>},<i!ii!>},<o!!!>,<>},{}}},{{{{{<}<!!!>},<"}<oa!!''!>'!oe!>,<!>,<iu>},<{o<<a>}},{<!,<!!!>},<>,<>}},{{}},{{{{<!ua""<o{<!!!>!>},<'i<"!",>}},{<a{!!!>,!!i!",!>,<!!i{>},{{<a!>"{aia<!!!>!!!>,<u'!!u,>}}},{{<i!>},<!{!!!!!>},<,,!!}'!!!!ae"!>,<"i!>,<o}>,{{{<,!{o<!>},<!!a}}i>,<!!'!>!oi!!!>!u<'"e!!,{i>}},{<uu{!e!!!>}}a!,o!!a!{a>}}},{}},{{{<{!>,<!!}i!>,<}{!!!>!!!>,<i"!>,<oi"}'>},{<o!>,<!!!!!!!>,!>},<!<!"!!<!>!!!>e,>,{<!>},<!!<o!!'<}i!>!>,<u!>,<!>},<!>,<!>,<!a!>,>,{}}}},{{},<aee}}u!!<}!>i!>,<>},{{{{{},{<!!!>!!"'{!!,'}>}},{{},{<!!!<>}}},{{<'a"!>e!>},<',>},<io,,a!!!>!>,<i!e!!,!>,<,,eu!!!>!!u!>,<>},{{{{<,!}<!!!!{!>,<{!!!><ia}e!>},<{}e>}},{<!!!!!!{a,>}},{{{{<i,e!!{!!!>"o{uu!>},<>},<!>},<!>!!!'!!i!>!"a!!}!>,<"'!'!>>},<{!!!>,<!!!>a!!!!{""!>"!!"'u!!!!!><!!!>>}}}},{{<!!}!>,<!>},<'!!"!"<!!,<!!!!!>!>>},<!>{}!>!>},<}}"ao!!!!ua!!{!><">},{{<!!!!!!ou<!!'u!>!>},<!>,<{!>!><>}}}}}}},{{{{<'}u!>,<{!!,}!>},<'!"'{!>},<!>>}}},{{{<{a!!!>u!>!>!!!>ae}!>!>},<{!!ua>},{{}}},{{<,!!!>},<!>!!!>>},{<}!!!uu{,!!!!i!>},<{!!!>},<ie<!a"e>}},{{<ou{!>!!!>a!!}!!>},{{{{}},{<!,u'!!!>,<u!>,<ui,}u!!!'!!!>{a!>a>,<,,"!!a!!>}},{<!!!>!>},<o!!{!>oa!!{!!!>a}a!!{>},{{<!>},<a>,{<!!o!>,<!"}!!'!!a",!a!>,<i!!!>o!!e!>,>}},{<,!>},<"{}}}"<!>},<!!e!!!e!!!>,<!!!>,<<!>},<>,{}},{<!!iao!>},<}!!!ea{!!!>,<'uui>,<i"!!!>!>,<u!a"ea!!!>,<>}}}}}},{{{{{{{}},{<,!>},<a{!>},<eoei<<o>,<>}},{},{<i!!!>!>!!!>ii!>!'<!!!>"},},!!>}},{{{{{<,,!i,,ae{!!!,!>!!!>},<!,!!o!!}!!!>}>,{{<}!!!>!!!>'!!!>"!{{!>!!!>>}}},{<!!a!>,<{oia}ueue!!!>eai>}},{{<!>},<!}!!!>!!!!!!ei!io}!!!>!!ue>},{<}!!!>!>i}!!!>,<!>u!>,<!a!!!>!>,<"o!>,<!>,<a!>},<!>,<>}}},{{<!>eo,o!'!!!>'<!!e>}}},{{{{{<!e!>!>,<!!<!!!>!!!!!>}>}},<!>!>'}}!!!>!>!>,<!>!u>},{<!o!!!{>,<!>},<'''!>},<">}},{<<,iiu!'iu!><>,{<,!!{e!!!>o!ai'!!'!!!!{a!>>}},{{<a},!>},<!!!!!><,i{!>"}>},<'<ui<!!a!!''!aa!!!!!>!!!>u'ao!!<!'>}},{{{<!u<e!>,<'{"a'!>,<!>},<!!!>>,<!i'>},{}},{{<'!,e!>},<!!>},{},{{{<<euu!>,<!!,!e!>,<!!!!},!>},<a}!!!!!>a{>},{{<!<ee!>},<o<{i!!}!!!>'!u!>,<>},<}!!!!eai!!!>,<e!>!>!!!!!>>}},{<!!!!!u!!!>!!a{oo,i>}}},{{{}},{},{<!!!>,<{'a!!'a!!!>{<!<e!>},<!!'!io>}}},{{{<i!!,!!e!!aee!!!!!>},,!!'>},{{},<e"o!!u{!>,<{!>},<,>}},{<",!>,<'!>,<!!!>!!u!!{'{!>},<}!!{!oa!!!!e'!>>,{<!>,<!>},<!>,<uie!!,!>,<{!>!!!!!!!>>}},{{<>},{{<!>,<!!a!}!!o'!>!>,<>}}}}},{{{{{{<>}},<u{!>},<e'!>,<,!>},<>},{{},<>},{{<',!,ioe!>u>,{<!>}o!>},<}>}},{{<{a'e,i!>"u>},{{{<!>},<!!!>,i,eo!!!!!>},<eo!>>},{}}}}}}},{},{{},{{{{{},{<a!!a!!!>,<e{>}}},{{<>},{{{<!>},<>}},<<ea,},!!!>!>!!"{,uei!>},<}>}},{<!!',eu'"a}!>o'}!<!>!a!!o!eu>}},{<>,<!!!>>},{<!,!!o!!!>,!,u!!}'!{ee!!i!>,<!!!>!!!>!>>}}}},{{<uo!!">},{<!!u!a!!">,<!!!>!!,}o{>},{<iuoa{!}u',{!!,}'!>,<>,<!!!>!!a!>!!!>u!>,<!>},<!>,<!'!>,<!!!!!><!!!>},<!!<>}}},{{{<!!!>},<!e>,{}},{}},{}},{{{{<,e!!,!>,<!>},<,!!!>a!,!!'ie!>,<o!>},<>},{{<e!!'i!>},<!!!>,!e!!!>!!!e"}uu!>},<u!i'>},{{},{{{<o!><!!o<"!'!!!>,<!>},<!!!>!!!>e'u!!!>o!!u!>},<}>},{}}}},{{{<!i<!i>,<{'!!i!>,<>},{{}}},{}}},{{<>,<,<e!!!>,>},<{>}},{<!!!>,<e!>,<<!!,!<!!,ou>,<!!!>o'!!!!!!!>"a!!eeu!o,!>},<o<>},{{<!>},<!!,!!,o,>},{}}},{{<!>,<'o>},{{<aeei{o}i>},{}}}},{{{{},<>},{<{!>},<!!!!!!<!!'e!>'e>,{{}}}},{{{{{{<!>,<e!{!>,<i!u!!!!<!>,<!!!>>},{}},{<oo">}},{{},<',i!!"<>}},{{{<!>,<!!,u,u'}i<!>},<!!!>!!!>{!>},<!i>},{}},{{<!oe!>}'iou!{u!!!!!!}!<!>u<a>,{<{!!'oa}!!!>!!!!,ii!>,<oa!!i!!a>}},{{{<{a}o}!,!!!!!>,<'}{>}},{{{<!>!!i"eeeuo!>},<<aa!{!!!>!!!!!>!>,<>},<{!!'>},<!>,<<<a!!,{'!!<>}},{{<'!>ao!{u!!!>"!i{}i'u,},>,{<!!!>!!iuee!!!>'!!!>,<>}},<!!!>!>},<!o!>,<e!!!!"!>,'e'a<!!}>}},{{{<eou!>o}i!>!!u}>}}}}},{{{<!!}u!>o!>,<u!!u"u!!a",a!>,<>,{}},<}}"!>,<o!>,<!}'!>>}},{{<>,<!>!>'!!!>!>!>,<!!!ai!,>},{<}}!!!><!>!!!>!!!>},<!><!>!!{!{!!}o!}>,<}i!!"!!!>,<,,!!!!!>>},{{<!!!>'!!}!!!>!!!!!>>}}}}},{{{}},{{{{<!'i!>,<ae>}},<!aa!,">}}}},{{{<!!a,"!iu!!e!"'{>},{{{{<uu'i<!!!><!>!>}uieo!!!>!>,<"o>},<}!>}!>,<>}},{{<!!!>'<!>,<!>},<ua{!>},<i!i!}!!i>},{}}},{{<!!u}!!!><a{!u!>"o!!!>!!!>",e">,<{}i!!!>!!!,!!u!!,"}!>,<!>,<i>},{<!!'o!!!!{>},{{{{<!!!>a!}e!!e"!>},<!><!o>},{{<"a""!>},<!!!!,!>}!>},<}'!!u!!!!!>!>},<>}}},{{},<}>},{{<ioo!!u}!>},<<{"!!!!ui!!{>},<"!iui!!!>!!!>'"!!!!,!!o''!>},<}u!!!>{>}},{{},{<a!!oi>}}}}},{{<"o!>},<,!}!!!>"<ao'>,{<e!>,<eu>}},{{},{{<<}!!o!{!i<!!!>,<!!!>,!>},<o"!!!>!>},<!>,<>},{<!!"u!>,<!!oa"'!!!!>}},{<!>},<o!><<<,>,{{{<!!!>{!!'u!>,<!!{o}"!>},<!>,<>}},<!!!>!!>}}},{}},{{<!!!>},<,!>ei'!e!!!>},<u,u!!!>'aui>,{}}},{{{{{<!>,<"oia!!e!!!>!!{!!u!>,<>,<!!>},{<!'!i!!!>o!o{>}},{<',!!{",<>,{<o!!<}'ii!!!>!>},<''!!!>>}},{{}}},{{{},{<!!!>{{!!!!!!a,e!'<!>,<!!!>!!!>u"i!,i!e>},{{<{<}>},{<!>,<!>{>}}},{{},{<i!!},u}'!<>,<!><o!>>},{}},{{{<a!!!!!>{!>,<o>,{<!!!>!>},<!!'a!>ii!!!>u!!oa}}"">}},{<!ai!ua!!<!!!>,<<e}a!>>}},{<u!ea"ue,!!<!<,>,{{<!}"a!>>}}},{<oa!!!>,<{!>},<e!,!>!!!!<u!!i}!>>,{{<,{{"!>},<<!>,<!>u!>!>},<}'{!!!ao>},{<!!!>},<>}}}}}},{{{{<{o'oi!>,<o!>},<ue!>},<ao>},{<!>,<a!!ia!,i}{!>,<!!!>>}}},{{{<!!o!>,<o!>},<!>},<,,{!>},<i!>u!>,<i}>,<e!!!>,<!>,<'!><a<e!>,<!>},<e,",!{!!!>,<i>},{{<!>,<"!>},<!!}!!!!!!!>!!aa!!o'!>},<!>},<>,{{}}}}},{{{<<ea!!!!}!o!!,!!,!!!>!>i!>,<"''!>!!}>,{<,,!!!!!>},<"!>!!!!!>,<o>}}}},{{<!>},<u{!a<"!!>,{<}!>,<}'e!!"<!>},<>}},{{<a!!'}{!>},<{!!!>!!!>,oa"!>,<}''!!!>,<!!}u>}},{<!!'!!'a!>},<!!!>!!!!>,{<!!!>},<{a"u}!>},<!!,!>,<i>}}},{}},{{{}},{{<"!>},<!!,uii"a!>},<a!>>},<aa!>>},{{<!!'>},{<!>!>,<e!!a''!>"!!!>o>}}},{{{<!>},<u'<'!>,<o'"!>,<,"a!>,<!!a!{!>,<!!>},{{{}}}},{{},{{{{<}}}!!!!!>,<!iiue!!"!!>},{}},{<!>!!!!!><!!!!!>!a!!!>!!,<!>},<<aa'!!<u!>,<!">},{{},<>}},{{<e!!!>a<{!!!!'}!>oi!!<!!!!!}>,{{{{<!>}}a"!!,"!!!>!>,<e!!i!!!!!>a'!!e>,{<>,{<{ue!!!!!>!!}!!!>o>,{<!>,<!>}!>!<!>!>},<!!!!!oa!!!>!>},<!>},<}<'>}}}}},<!!"u>},{}}},{<>},{<ii}!!!>}i>}},{{},{<}!>,<!>},<<">,<!>{>},{{{<'>},<>}}},{{{<!{ia!>,<a!!<'!!!",<!}e>}},{},{{{<'u}>}},{<}i!>},<}<!!o}'a,}!>!}!>i<>}}}},{{{{<>},{<!i!!"!!!>},<"!!e}u!!!>},<'!!>,{{<o!>,<!!a"!!<!>,<'!>,<,}!!!!!{!>a!!!!ea>}}},{{<!>,<<!>},<{ao}>},<>}},{{{{<uo!>,<>},{<}<!!>}},{<,u!>},<!>,<}i>}},{{<a!>,<,!!!>o!>!>},<"{oa>,{{<o!>,<!!!>,!{!>},<"}i!!!o!!!>>}}},{<,o!!!i!a{<!>,<!!!!"!,!!!>>}}}},{{<e!!ai!e,!>>,<i{,e}e!>!>},<!!'!!a<>}},{{{<i!>},<!>,<!>},<!!o>,{<"!!!>!>,<>}}},{{},{<!>},<<i>,<<!>,<oi!!!!!>!a!>,<!'"!>,<!>},<"!!!>{>}}},{{<eao!>},<a{a<e"!>!>},<>},{{{{<!!!>!'!!!!!>e!>},<!!",>},<!o<!!!!!>,!!'!!!!,i!>o!!!!!>{!'"u}>}},{{},{{{{<i!<!!,!!!!!>!!!>>}},<!!!>!{}a!!!!!>},<i",>},{},{<>,<{!><o!o!!!!!!!>i"uo}o!!"!!{>}}}}}}},{{{{<,e!!}">},<!>},<e!>,<u!!!>,<'!>},<<!!u!>!!>},{{},{}}},{{<<!>,<{<!!!u>},{{<!,!,>},{<<!>},<}a!!{!><>,{<e!>!>},<,oai!>!>},<!{>}}},{{<"u!>,<<!>},<i!>,<i'<!>!!e!{!>},<!!i,>}}},{{<}!!<!>},<i!!!!<<!!!>,<!>,<!!i!!!!!>!>},<!!!>},<ao,!>},<>},{<i!!!>"a'!!}!!{"{>,{{<!!u!!"!>,<'>},{<!!""u!e!!!!u!>,<io!>,<"u!>,<{'">}}}}},{{<!>!!<oe!>!!!>'!!,<!!<!!!>}!>>,{{{}},<!!!>,!!!>!>"ii>}},{{{<'u!!!>!!!>,<>},<u>}}}}},{{{{<i!!!{,!"!!o"i}!>,<!!!{{>}},{{{}},{{{<ao!>,<!}'!}"e,o!!!!>},<!>!>,<a{e,a<!!!>",'oe<>},{<ae,!!oue}>,{<','a!!!>a!!<!iu!a!!u!!!i>,{<}!!,!>},<!!!>,a>}}},{{<}>}}},{{{},{<i!!o!!!>"!>!!ou!}i!!oo!>},<'!!!!!>>}}}},{<!>!!u}!>,!>i!!!!!!,"!!,!>},<u!!,'>,{<}a'ua!>o!>},<!}!>},<!!u>}}},{<!>,<!!!!!>},<!!e!o!>'!!"!>,<>,{<eu,e!uiioe{>}}},{{{}}}}}},{{{<>,{}},{<o!>},<'>}},{},{{{{{{}},{{<!>},<!!,'ii!>,<!!o,!>},<"!!i'"u}a!"e>}}},<!,<i>},{<!"!e"''!>,<iau!>!>},<i'>,{{}}},{{},<!!!>,<ea!>,<!a!'}<!!!>,<!!!>!>},<!!!!!!!,>}},{{{{<e<e>},{<>}},<!'au!>!!!!!>!>,<'!!',ea'!!o!}}!!}>},{{<!!!>a{!!,!!""oue{o"!>!!}>,{}},{}}},{{{},<a"!><a!!u!>!>,<u{!>!!">},{{{<!!o!>},<ao,o!!!>,<,i<i>}}}}}}}},{{{{{<"e}uu!!,!!i!!!>!>},<"!>>,{<}<!>!!!>!>,<i!!{!!",a<!>},<!>},<!o!>o>}}},{{{{<iuu>,{{{<,>},<!>},<e!>,<}!!!><o!>},<o!!!!}>},<{a>}}},{{<!!!>ie}i<!"a{!!i>}}},{<!>u!e,e!!!!!>e"e!!!!!>ue{{!!"!>},<u>},{{{<,!a!>!,!>},<,,e!!,!,<ui>},{{<auei!!!>{!!!!!!>},<!!!>'}!>,<a!!!>e'"o!>!>"{ou}}!!}>}}}},{{{<!>,<!!'u!u!>!!!>!>,<!!,!!!>i!>,<o"!>,<}>,{}},{<>}},{{{<a'o<!>,<i!'ia!!e!!!"!!!>u'!o>},{<}!!e!!!>>}}},{{<e!>!>},<>}}},{{{},{{{{<!!!!a!!!!!!<u>}}},<'!'<!au!!!>a!<'{e,,!!{a'!!}>}},{<,>,<!!!>!!>}}},{{{{},{<>},{{<!!!>},<"!}{!!'{!!!}e"o!>,<}!>!}ou,!!<>}}},{{<<}!>},<>},{{<!>!>,<!!!>o,""eu!!'u!!i>}}},{{<!>},<iu!>,<e>,<!>},<',o,,{a!!!!o<!<e!>,<>},{{<'!>,<o!>,<!>,<>},{}}}},{{{{}},{{<}!!e!!}!}}!!!>{{>}}},{{},{{{{{{<!>"iu!<!!,i!!!>>},{<u'>,{}}},{},{}},{{<o<}u'e!>,<!!u{a!>,<eaoa>}},{<!>},<{i!>},<o>,{<,!eo!!}>}}},{{{{<!!!!!!!!!><!!!>>},<!!!!!!e{}!>,<!>,<{!,e{}aoo!!{{}>},{<!>},<u!>},<!!!<'>}},{{{},{}}}},{<!!ue!>},<!!""}{!!!>,,{a!{{!!"!!!>,<e>,{<ou,,"}!!!>!!!>!!!""!>,<o,e!}"!!!>a>}}}},{<e!!!>!>},<!>},<u>,<u'!>},<"a"!!!>,!!!>>}},{{{},<eoeo'<eiaa!!,,>},{<!!,!!!>{!!!'!>},<{!>,<ou!}!!!>,'!!!!o>},{{<o!!aa!>!!!>!>,<"!'!!!>!!!!{"a!!!>io<!>},<!>},<>}}},{{{<o"!!!>!!!>},<e!>},<o!!a>,{<ieoie!>,<u!!a!>">}},{{<!!!>!!a!>,<a!!!,!>},<!>},<u!>u">}},{{{}},{<io!!i!>,<!!e{aa!>},<>,{{<!>},<!!!!ui!!,!>!!!!{o}}!>},<>},{{}}}}}},{{{<"!!!>!>,<!>},<,a!'}!!}!>},<u"}!!,>}}}}},{{{<a'"<>},{{<!>u!>{!!i>},{{<!>{!!!>},<o!o!!"!>},<e}i!!!>o>},{<aei<e{",!!>}}},{{{<!!!!!>!o!!!>!>!>},<u{<!!}i!!!>,<!!!!<"'ei>}},{<{e!>"!>,!a!!!>,<!!!{!!!>!!!>{<!>,<!!!>,<>}}}},{{{{{<}u>},<i"!<u}!!u,!>,<>},{<!!!>!>},<}{!!"oeu>}},{{<,"'u}!>!<{'o>,<{!!}!>,!!!!!!,!>,,"!>,<!eu!>},<!>},<<>},{<!>},<'!!!>!>!>},<}<!"!><oua!<'ou>}},{{{<>},<>}}},{{{{<ai!>,<}''!>},<o!"i!>>},{<{!>u!eu{!!!>}'e>}},{<,{!e!!}!!!>,<,i>}},{<!!"i{{>},{}}},{{{{<ui>},{}},{{{}},{{<<!>,<{!!a<!>},<!!!!"a!!!>},<e'!!>}}},{{<u!>},<i!">},{{<e,!}!aea!"!'!!ea>,{<a!>},<!>,<o!>},<!>,<!>>}},{}}}},{},{{{{},{<"!!e!!"!>},<"}!><{}"!>>,{{<!o!!!>uo!!,o!!!!io!!!>'>}}},{{{<a>}},{<e,,!>,,!!i<!}!!{!!!!!>!>e!>},<u>}}},{}},{{<!!!!!!">},{{{},{<uo<!>""!>,<!!}"!>!!!>i!>>}}},{{{<!>,<e!>o!!!>o!>{,'u}!!u',!>},<}>}},{}}}},{{{}},{{{<<!>!!!>,<!>>},<{i"<uu{a!!a!}!>},<!>},<!!!}}>},{{<oaa!>!>},<'>},<!!!!aie>},{<e!>,<u,}<!>},<{iu}'!>}!!<'i>,<oea!>},<!><!u}<a"!>{>}},{<>,{}}}}},{{{},{{{<e}e<u>},{{<a"!>!!!>!!!>'>,<{,'!>!!}!>u<}!!,!!i!!!ei}>},<a!"!!!>>}}}},{{<'!!!>!!o!>,<}',!>o<o!>},<!!i>,{<!>,!>},<>}},{<{!!,!!{<ouu>}},{{{{{<o!{!}!i!io!>!!!!e!!!>!>!>!!!>!>'>}},{}},{<!!!>>,<!!!u!>""!,!>},<i}!>},<ou!>!>{,!>'o>},{}},{{<ua>,{<!!!!!>a,!}!>,<!>iaa>}},{<>}},{{{}}}}},{{{{{<!!!>!>},<{e>},{<!>,<!>,,<i}!!!!!uu,!!!>>,{<!i">}}},{{<!,!u>},{{<!>},<"uoa<au!!!>a!!,}>}}},{<!!aa}!>,<!>,<au!!!<o>}},{{{<!>!,!!u!!!>'<!>,<,!>!!>},{<!!e!>uo!!'ai{a!>>,{}},{{<o{!><i{!!!>!!!>!>>}}},{{{{<!>!>},<a!}!a!!!!>}},<!>},<,<'o!!!!,uiu>},{<!!e}{"u!!!i!>},<!!a!>!!!!!}'>},{}}},{{<!!'!!!>,!""!!!>,'!>},<{o!!}!o<>,{<"o!!"!!uu>}},{},{{}}},{{},{{{<!>},<{!!!!,!>,<>,{}},{{<oie!!i!eo!!!>{!>},<<<>}},{{}}},{{<!>},<!>!!ae!>,<>},<!>,<!{!>!>!>},<'i!!>},{<i}!!!a!>u!<'>}},{{{<!!aee!!!>!>,<!!!>u"}!!"!!i!>!e,i!!{,>},<e'oa{!!e!!}'a!!!!!>>},{{}}},{{{<a!!e!>{,i"i!!!>}!!"!!!!!>},<uu!>},<">}},{<!>!>},<!"a}ee"!>,<{!>,<,oe!!!>!>!>,<!>>}}}},{{{{{<!>,<{!!o>,{<{,!>e}!e!>,<>}},{},{<!>},<<!>,!>u,!>,<!!!!!>ae'>,{<!>},<'!!o!>},<!!e}o}!!!>!>,<e!>},<'i{!!o>}}},{{{<"!!{}"!!,,!>},<i<"e}>,{<>,{}}}},{{<u'<!!'!>},<!!!>>}},{{<!>e!!!>},<!>,<!!!>i!>!>},<ae,{u!iu!!!>u}!!e>},{<!!!>a'i!!au!{u!>},<!>},<o},u>}}}}},{{{{{<!!!ee"!>},<!>,<a!>},<a!>a!>},<}<!!"!!!>>}},{{<!!!u{<",ao!!u,!>,<'!!!>},<!!!>u>},{<ueea}!!!>{!!!!!!!!!!!>!>},<!!>,{<!!!!!>o'>}}}}},{{{<'!!!>!>o{""<i"}!"!>},<!!e!!!>!>},<{>},{<!>!!u!>},<!!,'u!>},<!>"u!>"!}!>{a!!!>},<}>},{{<!>},<e!!!>}"i{>,{}},{{{<a'!>,<,o!!!>,<e'}>}},{<!!u'!!<,e{e!><i!!!>a<>}},{<o{!!'!!!>!!{}!!<{}!>!>,<!!}>}}},{{{}}},{<!>o"u!{u"{!>,<'!!!!!>!>!>},<>,<!,a<{!!!>!!,i!>!>},<e<<!>a>}},{{<,>,{}},{{<!!o"!!!>>},{{{}},<ea">}}}},{{},{{<!!eeou{!!!>ai!>,u!!!>,<!}'!>,<!<{>,{<!!!'!<e>}}},{},{{{{<u!!!>u!>,<!!'!>,<}a!!,!>},<i!>,<>},{}},{<i{!>,<!!!>{!>!>},<!>},<{a>,<oi!i{!>o!>!!{e!>,<}!!!>>}},{},{{{<>}},{{{<!!!'!,!>e!>o<e!>i!>,<>}},{}}}}},{{{{{{{{},<!>},<o!>,<!!'eo!!!>},<!!i!"!>,<!!!>!>ie"ae>},{<!!{au!{!!!i!}a!!!>,<o!u}}!!!>!!!>,<!!!>>}},<ui!!!"","'}!>,<,!!!>e!!,!>,<!>},<!!e!!!>,<!!!!i>},{{<!>!!}"e}{!oe!'}!>!>a,>},{<!{!!u!>},<>}},{<!!!,!>,<o!!!>'''!{!!!>'!!!!!>"!>},<!!>}},{<o!>,<o"i'!>!eo>,{{{<u!!!>,,!!!>!>!>,<!>,<>},<!}!!!>e!a}ao!i!>aau,!!!!!>e>},{<!ee!o,}!!!!!>>,{<!!">}}}}},{},{{},{<!!'a!{!!!>!!{,!>!!u}!!!>,<>}}}}}},{{{},{{{}}},{}},{{{{<uu!i{}!>,<'!i>},<{aa!>,<<e!>},<<!>a!>>},{{<<a<ue!>},<o!!!!!>},<{!!eea!>,<>},{}},{<!>},<"eo!!!!o,a!!"u!!>}},{{{<}}!>,<!!o!>},<e>},{<!!!!ao!>,<!!!!!!!!!>!>!'e<<<!!!,o,!!!>!>,<>}},{<}},'!>e!!!>!!!>!a}<!>,<!!!>e}!>},<!!!>>},{<,e>,{<!>,<eu}!!!!'e"!!"!i!!!>o!!i!>"!>>,{<'}o!!u<!!!>!>},<<a<!>},<!!i<{!>,<u>}}}},{{{{{{<!>!>},<"io>}},{<'!e{!>!>},<!>,<!>,<ii}>}}},<u!!"!!!!!>,<i'e!>},<'i!!!>i{>},{{{{<!>,<a<"<{>},<u!'!>},<!!!!}{!>!!!>!>},<o>}}}},{{{{},{{},<a!!!>!o!>},<i!!!>,<'"e<}!!>}},{{}}},{{<{,!!!,!!!>},<"!>!!!>},<!!!>"'"'!!!>!!!>!>,<>}},{{},{<!!>}}}}}},{{{{<aao!!!>,<'{u"u>},{<!>},<{!>},<i!>ii!>},<!>"a<i!!>}}},{{{{{}},{<"i!!{>,{{{<!><!>},<a,,!{!!!i,!!',,'ae>}},<euio!iu!!!>!!""!>a!>},<"oa>}},{{},{<!!'}!>,<<},!!u,,!!!>!!!!,!!!{',{!<!!o!!!>>,<e{!!>},{{<<!>},<}"">,<a'<!!ouo!>,">},{}}}},{{{<{{!!"!>},<""{!o!>},<!>,<!!!>!>i!!!>!>,<}>},{<!!,"!!!}uu>,{<i!!u<!>},<uo!>,<!!ia!>,<>}}},<!!<!!a<!!!>i<!!!!!a!!ouo!!!!!!!>e>},{<o!{o}o!!!>,!>},<aa!',!!>,{<!!"!!!>},<!>i{>}}},{{<!>!}!>a'>,{{<"a}'eo!!!>,!!!>,<{",!>!>>}}},{},{<!!i!>!!}>,{}}},{{{{{},{{}}},{{}},{{{{<!>>},<}ao!!,'!!u!>,<'}{!!!>o!>},<<!!"a>},{{<e!!i!!}'!!!!!!!>},<!!!!!!i{eiu!>},<!!!>!i!>},<<!>!!!!!>!>,<>}},{{{{},{}},{<!!uo!>,<"!!e!!!!!>,'!!}>}},{<!!}!!!>!>,<>}}},{<!!e"!uuu>},{{<,>},{{},{{}}}}}}},{{},{{<,{e!>},<!,!!ue>}}},{{{{<{!>},<>,{<}"!>!>,<!}"!>,<!!!!a!>},<ea!!!!{>}}},{<!!'o!!!>u<>,{<!i!{>}}},{{<'oa!>},<>},<iio!>!>,<!<!>,<!ie!!{"<}<!!!!!>!>},<!>>}},{{<!>,o!!oe!!{!>,<"e!!!>!>>}}}},{{{},<!>},<}!!a!!!>e!!,!!!>,!!!>!>},<<o!!i!>},<>},{<!i!!!>!>},<!!!!!!!>,<<!!"!!!!a!!!!!><u!>,<>,{{<'''>}}},{{{<!>o'!>i{!>},<!>},<a">},{{<!!e>},{{<>},{{{<"<!!iia!>,<a<a!>},<!i,!>!!!!o!>},<!!!>,<u">},{<}!!,!>ii<!>,<o}io>}}}}},{{<!'"!<"!!!>,<!>!>},<!}!!a!!"!e<u"oi!>,<>,<!!!>,!i!>},<'i>},{<<o!!'oiue!!!>!eiu}!>,<!>},<!>},<>}}},{{}},{{<!>},<!!!!!>>},{<!>,"!!!!!>!i!!!>!>!><{ae!!!>o!>},<>}}}},{{{<!!!!!>}!!!>u"o''"!ai!>,<!!!!>,{{<!!!>!!!!,!>},<{!>,<!>{<eo{,!!o!>},<'i!<'>},{<!!!>>}}},<!>,<!!!>i>},{{<!!!!!{,iu!a{!>!!!>"!>},<a!>a>}}}},{{{{{<!!!>,<!!!!"<"!!<!a!>,<'!>,<<u!>,<">},<!>,<!!!>},<!>,<e!!!>!!o!!o!!!!o!!!!>},{{<'u!>a!>,<>},<!!!>!i<o!a!!!><}aouu'<,>},{{{<!!!>"!!!>,}ea!!}!>!><!!'"!!<{>,<e!!!>!>!a<!!o!!!>i}!!}>},{{{<!>},<!">}},{<,!!!!!!!><>}},{{<!!!>},<'e>,<i!>,!i,!!!>ea>},{{<,>,<!!!>o!u,i!>u!!!!u!!!!!!!>},<}{!!>}},{{<}!>,,>}}}},{<i}}iu}{!>},<!>{<u!!!!!!o'>,<}<!!<<<,!>,<!<!!"u!>,<u>}}},{{{<!>},<!>},<!!'!>,<!!o!!oa!}!>!>!!!!"{>}},{}},{{{<<!>e!ooa!!!>},<<!!!>",!>},<!u{!!!!<e!!<>},{<}}u{!!"!>},<"!!o!!!><!<!!!>,<e!!!>u!!a!!!>},<>}},{{},<a!>'{"!>},<}!>,<!!!>"e>},{{<!>},<>,{<oe!!!>!!u>}},{<!!!!!>},<!>,<!>!!i!>,<!>}},!!!!e",>},{{<}!!!>!>},<!!a'oi<>,{{<"ou!!{{!>,<''euu>}}},{{<i<<o>},{}}}}}},{{{{<uu!!!>,<!>,<e!{,!>,<!!!!!>'!!>}},{{<o,>,{<{}oe}!o!>!!!!>}},{{}},{{<<o'!<!>,<{{,!!!>},<'e!!!!!!,!!!>!!!!!!!!>}}}},{{},{{}},{{<ai!>},<}!>,}<!!"e<!>,<!o>}}},{{{<<}o!!!>!}!}>},<"i"ei<}!!!!ae,!>,<!u!!i!>!!u>},{{{<!!!>"{o!!!>!!!>ii!!!!!}!!"!!u!!!>,<!!!>e!!<>},{<uu!>'ou!'""!"i!!!>,>}},<!o!>,<<!!!!<e!>},<"!>,<>}},{{}}}}},{{{{{},<'e!!'>},{{<!!,!>!e,!>},<,'!>},<!!!!!>!!!>},<,!!a,ie!!o!>},<!u>,{<a}"!a!>!!!!!>!>},<eao!>!!oi>}},{<!a!}!>o!!!>e!>,<!!!>,<!!!>,!!a"!!,{a,>}}},{{<!!!>a!!!!!>!!!>>},{{{<!!!>}!ueae!>!>{o!!!!!>!!"!!!>!>!ua>}},<!!!>}>}},{{{{<'u,!e!{"!!{!!{"''"a}{u!}>},<!!!oo'!>,<!!!>},<!!!!!!!>},<!!!>},<!>},<o!}!!!}>}},{{{<i!>,<!!!>ui!!!>!>}i<e>},{{{<!>,<!!e!>},<"!,'!!!!aa'!!!!,>}},{<u!!"!!!>!>},<!!!>{!!!!">}}},{{<'u!!{!}{>,<!e!>,<}e}!>},<>}},{<ea!!'!>!>,<o}<!!!!!!",e!!!'}>,{<>}}},{{<{!>},<o!!!>,<,>},{{{},{<u,e!!!>},<{u!>,<'au>}},{{<{a!o,!!{<!!!>{"!>!!!>!>},<'{'<>}}}},{}},{{{{<!>{!>,<<'ei!,!!!>iu!>e!!!>!!>}},<!>,<!>},<!!o'}}u!!!>,<!>!!!>},<eu>},{{<i<"{!"}!!!<o>},{<ao!!!i!!}!!!>!>!<oae<>}},{{{},{},{<}"!>,!!}'!>},<i!!!o}!!oo!!!>!!!>i!!>,{<<!!<e<!!!!!!eo!>},<!!o!a!!!>ei!!!>!>,<!!','<u>}}},{}}}}},{{{<}>},{<!!!>eu>,{<ui<!'!!{!!!>!!!>},<o!!!>o"u!!>,<}!!!>i!!!!!!!>!>},<!<uo<''!!,ii>}},{{},{<'e'!>!>},<!!!a!>!!i!!!>!!!!<!>"{<}>}}},{{<!>,<{i>,{{<a'!eu!>"!!!>>}}},{{<!>,<o!!!>,<o<!e}"!!!>!!!>"!},,e>}},{{{{<!>,<>},{<!!a!>,<u!!<,!!o"!'{>}},<!>!>,<o"<!!!,!><<!>u>},{},{{{<e!>,<o!>,<,!>,<!>,<>},{}},{}}}},{{{{<>},{<uo>,{{{<!!!>o!>},<}e}a"{e!!!>,<!>,<u<"!!"!>},<>}}}}}},{{{<,!{>}},{<o>}},{}}}},{{{{},{{<<!!{!!!>!!!!!!!>!>},<!>},<!!a!!!>},<,!!!>'!!!!!>,!!!>''">,{{},{<{}{'!>>}}}},{}},{{{}},{{{<>}},{<a"{!>},<>}}},{},{{{{},{<!!!>>}}},{{{<!"!>},<!!<<{!>,<!!a>},<{aoi'!!>}}}},{{{{{},{<'!>}!!!>,<!!!>i!o!!!>i!!!>},<"!>,!>!!{!>,<o>,<i<!>,<!!}",>},{<i!>},<a!>!!e>,{<<!}{!>},<!!!>!!!>!>,<!>},<!!!!!>!>!!>}}},{{<!!{"!!!{!!u!!!>'!!!>!!e!!!,'>}}},{{{}},{{{<!>},<>},<}e!'i>},{{{<!>ue!!!>},<{uu!!!>}!!{'>,{{<!!!>!e!>,<ooa}ou{!>''!}",!a'>}}},{{<i!!!<}u!!,}u!!!>"!!!>},<}{!!}>},{<!!'o,!>},<o}}',!>},<<!>},<!!,a"!>,<!"!>,<a>}}},{{<i{}o!!>,{<}i!!!>!>,<!!!>!!,!!!>{>,<!>},<!>,<!<!!'!!!"}!!!>e!>,<u<>}}}}},{<!!!u,!>!>,<u>,<e{!!!>u{eu!>},<!!<<!>,<u>}},{{{<!!}!>},<'!!'ii,"!!uu!>!'e>}}},{{{{<!a<'!>,<,>},<>},{<!!,}>}}}},{{<aoo,'!>!!,!>},<!i!!u>,{}},{{}}}},{{{<{!!'e!!!>!>},<!!!>"o!!,!>},<ooi!!!><>},{{<!!!!!>},<ee!!!>,<'!!!>a{!!,e!!!!!>a!>,!<!i!>,<>}}},{{{<ua}!>o>,{<!>,<!>'a{!!!>,<!>>}},{{{<,oiu{!!!!!!!>},<eo>},{<<e>}}}},{<!>},<""!!!>!>,<,ooe!!{!!!>},<!>,<>}},{{<i!!!><>},{},{{{<!!e{!>,<!!o!!!>,<e<!}!!"!!!>!>},<,>},{<!>},<!!oo}!a!!!>!!<'u>}},{{<e>},<>}}},{{<!}{a<!'}"a!>,<a!!o'i>,<!!!>},<!!!>i"!!!!{!!!!}ao!>},<}!!'i!!!!!!>},{{<!>},<!!,!>a!"!!u!!"a!!e>},<o,e!>,<!>,<}!!e!>},<!!'a,ii!o!>},<!!ai">},{{<o"!!!>!!!>}}!!!!!>i!>},<!>},<">,<!!!!!!!><{!!u!!,a'o{!>,<!">},{{<<a<>,<{>},{{{<!>o!>!>e}i">},{{<!!!!!>!>,<<!>},<!{a<a<!!>},{<!!'ue"e{ua>,<!>'!!}o!!!>!!!>a!>,<<!!!>!!!!!!{!>>}}},<{<a"!!"}o'io>},{<ue!>},<}e'e{>}},{{<'!>,<o!!!>},<!>!!!>oi'!!!>},<'o<>},{{{<!>!>!!!>!>},<!!!>},<u,!>,<!o}>},{}},{<!!!!}!u{!o!!ieea",u!!!!!>!!!>!><!!"">}},{<!>},<<}!!aa"!>},<"!>}a{!>},<!!!!!>!uo>}}}}}}},{{{{<{!}>},{{}},{}},{},{{<,!>"!!!>!>,<!!oo!!!>},<}i!'u'!!!>!>!>},<{a>,{<a!!!>!!!>!>,<!!!'!>!a",!>},<!!o!>},<a!!!!}}{>}},{<{u!>{,!>!!<!i>,<e<!>o!i!!!>!!!!"uo"!>,<u'"!>},<,!i>}}},{{{<<iee!!a"!>},<!>,<,>,<,!!!!!>}o!>,<oo!>!>,<"io!>},<}!',"!o>},{<}!!{'{!!!!<{!ai!!!>"!<ou!!a!{<!!">},{<!>},<!>,<i!e!!!>a!>,<!!o!>!>},<!>},<!!!>aa>,{<u"{<!>},<}!!o'"i!!u<}a>}}},{{{{{<>},{<<}uoa,'!e!!e!!!>!{o!!!i>}}},{<ai!!!>eou!!!>!a!!!ei}!{u!!!a!!!<!!ei>,<aue}!!!!}!>,<a{o!>,<!!!!>}},{{<!!o!!ieu!>,<!u',aeaia!!}">},{{{},{<!!'"<}i>}}}}}},{{},{{{{<'!!e!i!>u!><e,!">},{<!<<!>!!uu"!>},<!!u<iia!!}!">,{}}},{{}}},{{<a!!a<!>,<'!>,<!>,<,',!>,<>,{{{<!!!!!!!>e}"!!i<>}},<e!}'!>},<!>!>},<!!a!!'i>}},{<"!a',"a>}}},{{{<<,!>},<!>,<!o<!>},<<!!!>u>},{{{}},{<!!!!e<!!!!!>o!>,<o{!>!>,<>,<>},{}},{{},{<"!>,<!i>,{<>}}}},{{{<{!"!>i"!!<i"{}>}},{<>,<oi,i'>}},{{{<{!!!>oe!'!!!!!>!>!>},<!>,!!!e{a>}},{{<"!>,<!>u!!,!>a{<!!'a,>,{<i"!>},<u!>,<,,'!,!o!>},<!!!!i>}},<i!>},<io<!!a!!,!!!>}!"'"o!!o!>}>},{<!>'ue!!!>,<'ia}{!>},<!>,<{o<u!>,<>}},{{{{{<>}},<!o!!!>},<!!!>!>},<!!{ae!!e!!!!!!!!!!!>i>},{{},{{<o!>},<}{o!>,<!!!!!>!!!>,<!>!!!>!>,<u>}}},{{{<!>,a"!!i!>},<!!"!!"!!u}ue!!"o!!e>},{}},{<!>,<!!!>!!!>{ue!e,!>,<o<o{!>,<!>,<!!!>,<>}}},{{<!>},<i}!!<<!!e!>>}}}}},{{{<,>,<{!>},<{!,{,>},{<<e"}u}}!!!>!>!!!>a!>},<!>,<oea'u!!!>>,<i!>,o<!>!!"!>a!!!>,<!'!>!!!>>},{<{o{uuo<,o!!!>!!!>!!!>}>,{}}}},{{},{{{},{}},{{<i{ie"!o'{!!!>},<!a}!!!>},<>},<!!,e<e!>},<!>},<!!!>a!!e!>i>}},{{{{{{{{{<!>u!!!>!!!>!ui'{!>},<>}},{}},{}}},{<o!!!>>},{}},{{{{}},{{{<}ue<!!!!!>i!>},<!!a}a<!>,<!>,<>}},{{<!!{!>i!!!>},<a<!!!>!>},<!>},<u}{ao!!!!>},<o!>,<o!!!>!!!>i!!!><!>oe}!o>},{{{<!>!>,<!>ee!!!a!>!!!>>}}}},{{<a!!!>!!<<!!!!u!!e>,{}}},{{{<!>},<eu!>i!!'!>!!!!!>!>,<">},{{<'!!!!!>u!>,<ue"{,i!a}"{!!!>!!o!>,<>}},{{},{}}},{{{{},{{{<!>,<!'>}}},{<!i!>,<oe}!!o''<!>},<>}},{{{<ee!>!!>}},{<a{>,<!>!!{!>,<>}},{{{}},{{{{<!!a>},<>},<{!!!>,<o>},{{<{<<>},<!!!"!>,<!!!!!>!!e!!!>!>!!>}}},{{<!!,u{!!}"uie!!}!>,<o>},{{{<}!!!>!>,<!>},<a>}},{<!!!>!>,<<ea{"!>}aua}!>},<}!!!>!!!o'>,{<'",}"}>}}}}}},{{{<e!>},<!>>},{{<!>!>"'!!!<}!io!!!!u!!!>!><i!a!!!!!>>}}},{}},{{}}}},{{{<>},{{<!!!!!}!!i!><!!!>>}},{{<!!!!!>'>}}},{{{<{!!!><!!!>e!>!!!>e"!,}u>},{<!>}>,<!!!>'!"ae<a>},{{<i!>,<"!>},<!!!!!>},<ae!>>},{}}},{{{{<>}},{<o<!!!>e>,{{<oa!>,<"!}'u!>,<o'!>!"",!!!>>},{<!!a!>,<!!}!>},<!>},<!!!!!>,<u!>,<e<!!<a!{a!,!!!>!!!>>}}},{{<}'{!!a!!!>!!o!>!{!>},<!!!!!!""'>},{<{!!!>{>}}},{},{{{{{}},{{{<!!{"eu>},{}},{<!!'ia!}a''!>}>,{{<<},!>,<,ea!oi!!'a!!!"!!!>!>,<!!!>u>},<>}}}},{{<>}},{{{{<!>,<{!e!>,<au<,}>},{<!>!>},<"<e!>!"o',ua'"!>},<!!!{>}},{<!"!>},<!!}!!"e!!!>{{!!'u!e!>,<"!>,<>}},{{{<o!!!>!!"!"o!>!>,<!!!>>},<,a<!>},<!>,<!!o{ioo!"!>>},{{}},{{{<}'!!!!!>},<}{>}}}}}},{{<}e{!!ieia"a!>!eeu!!i!>>,{<!!!!!>"i>}},{{<'<,!'!!!>!>},<e>,<a!>>},{{<!!u<a'!!!><"!ou>,<!!!>!,!!>}}},{{<}u!o>},<!>!>,<ui>}}},{{<uu!i!<u!<u!!!>{!!!ii!!!>>},{<!!,,!<!{!>},<!!!>>,<<i!"}!!!>"oi}"o'!>!'!>!u>},{{<<i!!a!>!!"o!!i!!,e}{!!"i!!!><>},{}}}}},{{{{{},<a"!!!>!>'>}},{{<'>},{<,!!eie!>},<!!!>},<o!!!>!!!>'"!!!!<!>>,<o!>ou<>},{{<a!i!!io,>}}},{{{{<!!!>!>},<!!'!!,"!!!>!}"}!>},<}!!u>,<<a!!!>"!>,<"!!"o!>},<>},{{}}}}}},{{{<u!!!>"!>!!!>oi{!!!!<a!>},<i{!>!>"<}>},{{<}!!ee!>!!!!ea!!!!!!!><,!>>},<i!!!>,<u<i}"!!!>,iii{a}a!o>}},{<!>,<!>},<!!,}!!<!!!>'!!!>'!!!>},<!!!a>,{<!<}!>,<!!!>,!{{<o!>,<a!!!>!{u!>,<}!!!!!!,>}},{<o>}},{{{<!e!!!!!>,<,}a!!o!e}!!<i,a!!!!!>!>>}},{{<'!>},<!!<i!>!>a!><!>,<!!!>'>}}},{{{{<}!>,<!>},<>}},{<}!!!>!!!>!!e!>,<ooia!<>}},{{<}"i,i{!>,<<,}!>}!<!!}!!!!,{!!>},<<ii}!!!>!i>},{}}}},{{{<i,,a"!!oie!>,<u>}}}},{{{<>},{<!ua}>}}},{{},{},{{{},{<'!ou{>}},<!!!>!>!>},<{!>,<oeu>}}},{{<!!!!o!>!!"!!!>!>,<!"!>!!!>!>,<{u!!!>},<!!!>"!!>}},{{{<!>!},<!!{<>},<!>},<o}e!>,<}>},{{{},{{<aio{<!{!!u!>'{a,o!!ii">}},{<ei!>},<},!'<!!o'!!<!!{!>,<a!{>,{{}}}},{},{{<!!!>!>},<,!!!>}!>}!!ou!}ia'i>,<!e!!!!!!i!>},<!!!>!>!>},<!>,<!!!>},<e'!!'u!!!a{>},<u'i}!!!!}!>e">}},{<{!!auo!>,<e!>},<<i!!i!>,<'!!!>ie}"u>}}},{{<>,{{}}},{{{{<!!<a!!<,!!a!!!!!!e<>},<!>>},{<a}!!!>!>},<{!>},<u!>},<,!>},<'>}},{},{<"!!!!i!!{"o!!a}!o!!!>!>'>}}},{{<ou<!>,<>,{<!>,<!!,{'a,'!!,!>,<!!u!>,<!>!<<!>,<">}},{<<'>}}}}}}
diff --git a/2017/src/bin/day_1.rs b/2017/src/bin/day_1.rs
new file mode 100644
index 0000000..5d0e431
--- /dev/null
+++ b/2017/src/bin/day_1.rs
@@ -0,0 +1,24 @@
+extern crate advent_of_code_2017;
+use advent_of_code_2017::*;
+
+fn main() {
+ let args = AdventArgs::init();
+
+ let number_chars = args.input[0].chars().collect::<Vec<_>>();
+
+ let mut sum = 0;
+
+ for i in 0..number_chars.len() {
+ let next = if args.part == 1 {
+ (i + 1)
+ } else {
+ (i + number_chars.len() / 2)
+ } % number_chars.len();
+ if (number_chars[i] == number_chars[next]) {
+ let parsed: i32 = number_chars[i].to_string().parse().unwrap();
+ sum += parsed;
+ }
+ }
+
+ println!("Sum is {}", sum);
+}
diff --git a/2017/src/bin/day_10.rs b/2017/src/bin/day_10.rs
new file mode 100644
index 0000000..faec18a
--- /dev/null
+++ b/2017/src/bin/day_10.rs
@@ -0,0 +1,63 @@
+extern crate advent_of_code_2017;
+use advent_of_code_2017::*;
+
+fn main() {
+ let args = AdventArgs::init();
+
+ let lengths: Vec<usize> = if args.part == 1 {
+ args.input[0].split(",").map(|x| x.parse().unwrap()).collect()
+ } else {
+ let suffix: [usize; 5] = [17, 31, 73, 47, 23];
+ args.input[0].as_bytes()
+ .iter().map(|&x| x as usize)
+ .chain(suffix.iter().cloned())
+ .collect()
+ };
+
+ let mut position = 0;
+ let mut list: Vec<u32> = (0..256).collect();
+
+ if args.part == 1 {
+ hash_round(&mut list, &lengths, &mut position, 0);
+ } else {
+ for i in 0..64 {
+ let skip = lengths.len() * i;
+ hash_round(&mut list, &lengths, &mut position, skip);
+ }
+ }
+
+
+ if args.part == 1 {
+ let answer = list[0]*list[1];
+ println!("{}", answer);
+ } else {
+ let mut current_char = 0;
+ for (i, l) in list.iter().enumerate() {
+ current_char = current_char ^ l;
+ if i % 16 == 15 {
+ print!("{:02x}", current_char);
+ current_char = 0;
+ }
+ }
+ println!("");
+ }
+}
+
+fn hash_round(list: &mut Vec<u32>, lengths: &Vec<usize>, position: &mut usize, skip: usize) {
+ for (inner_skip, &length) in lengths.iter().enumerate() {
+ reverse(list, *position, length);
+ *position = (*position + length + skip + inner_skip) % list.len();
+ }
+}
+
+fn reverse(list: &mut Vec<u32>, position: usize, length: usize) {
+ let mut a = position;
+ let mut b = position + length - 1;
+ let len = list.len();
+ while a < b {
+ list.swap(a%len, b%len);
+
+ a += 1;
+ b -= 1;
+ }
+}
diff --git a/2017/src/bin/day_11.rs b/2017/src/bin/day_11.rs
new file mode 100644
index 0000000..ffb0833
--- /dev/null
+++ b/2017/src/bin/day_11.rs
@@ -0,0 +1,57 @@
+extern crate advent_of_code_2017;
+use advent_of_code_2017::*;
+
+fn main() {
+ let args = AdventArgs::init();
+
+ let directions: Vec<&str> = args.input[0].split(",").collect();
+
+ let mut x = 0.0;
+ let mut y = 0.0;
+
+ let mut max_away = 0.0;
+
+ for dir in directions {
+ y += match dir {
+ "ne" => 0.5,
+ "n" => 1.0,
+ "nw" => 0.5,
+ "se" => -0.5,
+ "s" => -1.0,
+ "sw" => -0.5,
+ _ => panic!("Unexpected direction {}", dir)
+ };
+
+ x += match dir {
+ "ne" => -0.5,
+ "n" => 0.0,
+ "nw" => 0.5,
+ "se" => -0.5,
+ "s" => 0.0,
+ "sw" => 0.5,
+ _ => panic!("Unexpected direction {}", dir)
+ };
+
+ let current_distance = tile_distance(x, y);
+ if current_distance > max_away {
+ max_away = current_distance;
+ }
+ }
+
+ if args.part == 1 {
+ println!("Child process is {} away", tile_distance(x, y));
+ } else {
+ println!("At most, child process was {} away", max_away);
+ }
+
+}
+
+fn tile_distance(x: f32, y: f32) -> f32 {
+ let tiles_x = x.abs()*2.0;
+ let tiles_y = if y.abs() < tiles_x {
+ 0.0
+ } else {
+ y.abs() - tiles_x
+ };
+ tiles_x + tiles_y
+}
diff --git a/2017/src/bin/day_12.rs b/2017/src/bin/day_12.rs
new file mode 100644
index 0000000..39f05e9
--- /dev/null
+++ b/2017/src/bin/day_12.rs
@@ -0,0 +1,52 @@
+extern crate advent_of_code_2017;
+use advent_of_code_2017::*;
+
+use std::cmp;
+
+fn main() {
+ let args = AdventArgs::init();
+
+ let mut groups: Vec<Vec<i32>> = vec!(vec!(0)); //0 in the first group
+
+ for line in args.input {
+ let mut words_iter = line.split_whitespace();
+ let current: i32 = words_iter.next().unwrap().parse().unwrap();
+ if find_group(&groups, current).is_none() {
+ groups.push(vec!(current));
+ }
+ words_iter.next().unwrap(); //<->
+ for other_str in words_iter {
+ let other: i32 = other_str.trim_right_matches(",").parse().unwrap();
+
+ match (find_group(&groups, current), find_group(&groups, other)) {
+ (Some(current_group), Some(other_group)) if current_group != other_group => {
+ merge_groups(&mut groups, current_group, other_group);
+ },
+ (Some(_), Some(_)) => {
+ },
+ (Some(current_group), None) => {
+ groups[current_group].push(other);
+ },
+ (None, _) => panic!("Current group not found!")
+ };
+ }
+ }
+
+ if args.part == 1 {
+ println!("First group has {} members", groups[0].len());
+ } else {
+ println!("Total of {} groups", groups.len());
+ }
+}
+
+fn find_group(groups: &Vec<Vec<i32>>, x: i32) -> Option<usize> {
+ groups.iter().position(|group| group.contains(&x))
+}
+
+fn merge_groups(groups: &mut Vec<Vec<i32>>, a: usize, b: usize) {
+ let src = cmp::max(a, b);
+ let dest = cmp::min(a, b);
+
+ let mut from = groups.swap_remove(src);
+ groups[dest].append(&mut from)
+}
diff --git a/2017/src/bin/day_13.rs b/2017/src/bin/day_13.rs
new file mode 100644
index 0000000..e85b541
--- /dev/null
+++ b/2017/src/bin/day_13.rs
@@ -0,0 +1,46 @@
+extern crate advent_of_code_2017;
+use advent_of_code_2017::*;
+
+use std::collections::HashMap;
+
+fn main() {
+ let args = AdventArgs::init();
+
+ let input: HashMap<u32, u32> = args.input.iter().map(|line| {
+ let mut split_line = line.split(": ");
+ (split_line.next().unwrap().parse().unwrap(), split_line.next().unwrap().parse().unwrap())
+ }).collect();
+
+ if args.part == 1 {
+ let severity = calculate_severity(&input, 0, &args);
+ println!("Severity: {}", severity);
+ } else {
+ let optimal_delay = (0u32..).find(|&delay| calculate_severity(&input, delay, &args) == 0).unwrap();
+ println!("Wait {} picoseconds", optimal_delay);
+ }
+}
+
+fn calculate_severity(input: &HashMap<u32, u32>, delay: u32, args: &AdventArgs) -> u32 {
+ let mut severity = 0;
+ let max_depth = input.keys().max().cloned().unwrap();
+
+ for depth in 0..max_depth+1 {
+ severity += match input.get(&depth) {
+ Some(range) => {
+ let position = (depth + delay) % (2*range-2);
+
+ if position == 0 {
+ if args.part == 1 {
+ range * depth
+ } else {
+ range * depth + 1
+ }
+ } else {
+ 0
+ }
+ },
+ None => 0
+ };
+ }
+ severity
+}
diff --git a/2017/src/bin/day_14.rs b/2017/src/bin/day_14.rs
new file mode 100644
index 0000000..778a57f
--- /dev/null
+++ b/2017/src/bin/day_14.rs
@@ -0,0 +1,52 @@
+extern crate advent_of_code_2017;
+use advent_of_code_2017::*;
+
+fn main() {
+ let args = AdventArgs::init();
+ let input = args.input[0].clone();
+
+ let mut used = 0;
+ let mut grid: Vec<Vec<bool>> = vec!(vec!(false; 128); 128);
+ for i in 0..128 {
+ let to_hash = format!("{}-{}", input, i);
+ let hash = knot_hash(&to_hash);
+ for (x1,c) in hash.chars().enumerate() {
+ let parsed = u32::from_str_radix(&c.to_string(), 16).unwrap();
+ used += parsed.count_ones();
+ for (x2,b) in format!("{:04b}",parsed).chars().enumerate() {
+ grid[i][4*x1+x2] = b == '1';
+ }
+ }
+ }
+
+ if args.part == 1 {
+ println!("{} is used", used);
+ } else {
+ let mut group_count = 0;
+ for start_y in 0..128 {
+ for start_x in 0..128 {
+ if grid[start_y][start_x] {
+ group_count += 1;
+ clear_group(&mut grid, Point{
+ x: start_x as i32,
+ y: start_y as i32
+ });
+ }
+ }
+ }
+ println!("{} groups", group_count);
+
+ }
+}
+
+fn clear_group(grid: &mut Vec<Vec<bool>>, point: Point) {
+ if point.x >= 0 && point.x < 128 && point.y >= 0 && point.y < 128 {
+ if grid[point.y as usize][point.x as usize] {
+ grid[point.y as usize][point.x as usize] = false;
+ clear_group(grid, point.up());
+ clear_group(grid, point.down());
+ clear_group(grid, point.left());
+ clear_group(grid, point.right());
+ }
+ }
+}
diff --git a/2017/src/bin/day_15.rs b/2017/src/bin/day_15.rs
new file mode 100644
index 0000000..29b63ad
--- /dev/null
+++ b/2017/src/bin/day_15.rs
@@ -0,0 +1,40 @@
+extern crate advent_of_code_2017;
+use advent_of_code_2017::*;
+
+fn main() {
+ let args = AdventArgs::init();
+
+ let mut a: u64 = 591;
+ let mut b: u64 = 393;
+
+ let mut matches: u64 = 0;
+
+ let comparisons = if args.part == 1 {
+ 40_000_000
+ } else {
+ 5_000_000
+ };
+
+ for _ in 0..comparisons {
+ a = (a * 16807) % 2147483647;
+ b = (b * 48271) % 2147483647;
+
+ while args.part != 1 && a % 4 != 0 {
+ a = (a * 16807) % 2147483647;
+ }
+ while args.part != 1 && b % 8 != 0 {
+ b = (b * 48271) % 2147483647;
+ }
+
+ if lower_16_match(a, b) {
+ matches += 1;
+ }
+ }
+
+ println!("There were {} matches", matches);
+}
+
+fn lower_16_match(a: u64, b: u64) -> bool {
+ let mask = 65535; //2^16-1, ie 16 ones
+ (a & mask) == (b & mask)
+}
diff --git a/2017/src/bin/day_16.rs b/2017/src/bin/day_16.rs
new file mode 100644
index 0000000..9676714
--- /dev/null
+++ b/2017/src/bin/day_16.rs
@@ -0,0 +1,87 @@
+extern crate advent_of_code_2017;
+use advent_of_code_2017::*;
+
+extern crate regex;
+use regex::Regex;
+
+fn main() {
+ let args = AdventArgs::init();
+
+ let spin_re = Regex::new(r"s(\d+)").unwrap();
+ let exchange_re = Regex::new(r"x(\d+)/(\d+)").unwrap();
+ let partner_re = Regex::new(r"p(\w)/(\w)").unwrap();
+ let input: Vec<Instruction> = args.input[0]
+ .split(',')
+ .map(|instruction| {
+ if let Some(caps) = spin_re.captures(instruction) {
+ let spin_amount: usize = caps[1].parse().unwrap();
+ Instruction::Spin(spin_amount)
+ } else if let Some(caps) = exchange_re.captures(instruction) {
+ let position_a: usize = caps[1].parse().unwrap();
+ let position_b: usize = caps[2].parse().unwrap();
+ Instruction::Exchange(position_a, position_b)
+ } else if let Some(caps) = partner_re.captures(instruction) {
+ let program_a = caps[1].chars().next().unwrap();
+ let program_b = caps[2].chars().next().unwrap();
+ Instruction::Partner(program_a, program_b)
+ } else {
+ panic!("Unhandled instruction: {}", instruction)
+ }
+ })
+ .collect();
+
+ let mut states = vec!("abcdefghijklmnop".chars().collect());
+ if args.part == 1 {
+ let answer = run(&input, &states.last().unwrap());
+ println!("{}", answer.iter().collect::<String>());
+ } else {
+ let repetitions = 1_000_000_000;
+ let mut cycle_found = false;
+ let mut cycle_start = 0;
+ while !cycle_found {
+ let next = run(&input, &states.last().unwrap());
+ if let Some(i) = states.iter().position(|&ref x| *x == next) {
+ cycle_found = true;
+ cycle_start = i;
+ } else {
+ states.push(next);
+ }
+ }
+ println!("Cycle found after pushing {} states", states.len());
+ println!("Cycle starts at {} states", cycle_start);
+
+ let solution_index = (repetitions - cycle_start) % (states.len() - cycle_start);
+ println!("{}", states[solution_index].iter().collect::<String>());
+
+ }
+}
+
+enum Instruction {
+ Spin(usize),
+ Exchange(usize, usize),
+ Partner(char, char)
+}
+
+fn run(instructions: &[Instruction], start: &Vec<char>) -> Vec<char> {
+ let mut programs = start.clone();
+ for instruction in instructions {
+ match instruction {
+ &Instruction::Exchange(a, b) => {
+ programs.swap(a, b);
+ },
+ &Instruction::Spin(spin_amount) => {
+ for _ in 0..spin_amount {
+ //this may be slow, but will suffice for right now
+ let end = programs.pop().unwrap();
+ programs.insert(0, end);
+ }
+ },
+ &Instruction::Partner(program_a, program_b) => {
+ let position_a: usize = programs.iter().position(|&x| x == program_a).unwrap();
+ let position_b: usize = programs.iter().position(|&x| x == program_b).unwrap();
+ programs.swap(position_a, position_b);
+ }
+ }
+ }
+ programs
+}
diff --git a/2017/src/bin/day_17.rs b/2017/src/bin/day_17.rs
new file mode 100644
index 0000000..09d6fdc
--- /dev/null
+++ b/2017/src/bin/day_17.rs
@@ -0,0 +1,47 @@
+extern crate advent_of_code_2017;
+use advent_of_code_2017::*;
+
+fn main() {
+ let args = AdventArgs::init();
+ let step_size: usize = args.input[0].parse().unwrap();
+
+ let inserts = if args.part == 1 {
+ 2017
+ } else {
+ 50_000_000
+ };
+
+ let mut buffer = Vec::with_capacity(inserts + 1);
+ buffer.push(0);
+ let mut position = 0;
+
+ for i in 0..inserts as u32 {
+ let to_insert = i+1;
+ // the +1 is because they want it to insert AFTER the element
+ // that adding position ends on
+ position = ((position + step_size) % buffer.len()) + 1;
+ if args.part == 2 && position != 1 {
+ // for big vectors, push is MUCH more efficient than
+ // insert (O(C) vs O(n)). In part 2, we want the element
+ // after 0, which will always be index 1. It only needs to
+ // be inserted into the right place if it's actually going
+ // to be in position 1.
+ //
+ // If I wasn't meshing the solution with part 1, there
+ // probably wouldn't even be a vector, just tracking the
+ // length and index 1.
+ buffer.push(to_insert);
+ } else {
+ buffer.insert(position, to_insert);
+ }
+ }
+
+ let answer_position = if args.part == 1 {
+ (position+1)%buffer.len()
+ } else {
+ 1
+ };
+
+ let answer = buffer[answer_position];
+ println!("{}", answer);
+}
diff --git a/2017/src/bin/day_18.rs b/2017/src/bin/day_18.rs
new file mode 100644
index 0000000..f763f1f
--- /dev/null
+++ b/2017/src/bin/day_18.rs
@@ -0,0 +1,207 @@
+extern crate advent_of_code_2017;
+use advent_of_code_2017::*;
+
+use std::str::FromStr;
+use std::collections::HashMap;
+use std::sync::mpsc::*;
+
+fn main() {
+ let args = AdventArgs::init();
+
+ let instructions: Vec<Instruction> = args.input.iter()
+ .map(|line| line.parse().unwrap())
+ .collect();
+
+ let (sender0, receiver0) = channel();
+ let (sender1, receiver1) = channel();
+
+ let mut program0 = Program::new(0, instructions.clone(), sender0, receiver1, args.part == 1);
+
+ if args.part == 1 {
+ program0.run();
+ let mut answer = 0;
+ while let Ok(x) = receiver0.try_recv() {
+ answer = x;
+ }
+
+ println!("Last sent value: {}", answer);
+ } else {
+ let mut program1 = Program::new(1, instructions.clone(), sender1, receiver0, args.part == 1);
+
+ while !(program0.terminated && program1.terminated) && (program0.run() || program1.run()) {
+ }
+
+
+ println!("Program 0 sent {} messages", program0.sent_count);
+ println!("Program 1 sent {} messages", program1.sent_count);
+ }
+
+
+}
+
+struct Program {
+ instructions: Vec<Instruction>,
+ registers: HashMap<char, i64>,
+ pc: i64,
+ terminated: bool,
+ sender: Sender<i64>,
+ sent_count: u64,
+ receiver: Receiver<i64>,
+ part1: bool
+}
+
+impl Program {
+ fn new(process_id: i64, instructions: Vec<Instruction>, sender: Sender<i64>, receiver: Receiver<i64>, part1: bool) -> Program {
+ let mut reg = HashMap::new();
+ if !part1 {
+ reg.insert('p', process_id);
+ }
+ Program {
+ instructions: instructions,
+ registers: reg,
+ pc: 0,
+ terminated: false,
+ sender: sender,
+ sent_count: 0,
+ receiver: receiver,
+ part1: part1
+ }
+ }
+ fn run(&mut self) -> bool {
+ use Instruction::*;
+
+ let mut blocked = false;
+ let mut did_something = false;
+
+ while !blocked && !self.terminated {
+ if self.pc < 0 || self.pc as usize >= self.instructions.len() {
+ self.terminated = true;
+ }
+ else {
+ let ins = self.instructions[self.pc as usize].clone();
+
+ match ins {
+ Snd(x) => {
+ self.sent_count += 1;
+ self.sender.send(self.get(x)).ok();
+ },
+ Set(x, y) => {
+ let y_val = self.get(y);
+ self.set(x, y_val);
+ },
+ Add(x, y) => {
+ let x_val = self.get(x);
+ let y_val = self.get(y);
+ self.set(x, x_val + y_val);
+ },
+ Mul(x, y) => {
+ let x_val = self.get(x);
+ let y_val = self.get(y);
+ self.set(x, x_val * y_val);
+ },
+ Mod(x, y) => {
+ let x_val = self.get(x);
+ let y_val = self.get(y);
+ self.set(x, x_val % y_val);
+ },
+ Rcv(x) => {
+ if self.part1 {
+ blocked = self.get(x) != 0;
+ } else {
+ match self.receiver.try_recv() {
+ Ok(y) => {
+ self.set(x, y);
+ },
+ Err(_) => {
+ blocked = true;
+ return did_something;
+ }
+ }
+ }
+ },
+ Jgz(x, y) => {
+ if self.get(x) > 0 {
+ self.pc = self.pc + self.get(y) - 1;
+ }
+ },
+ }
+ self.pc += 1;
+ did_something = true;
+ }
+ }
+ true
+ }
+
+ fn get(&self, register: Data) -> i64 {
+ use Data::*;
+ match register {
+ Register(c) => self.registers.get(&c).cloned().unwrap_or(0),
+ Literal(i) => i
+ }
+ }
+
+ fn set(&mut self, register: Data, value: i64) {
+ use Data::*;
+ match register {
+ Register(c) => {
+ self.registers.insert(c, value);
+ },
+ _ => {}
+ }
+ }
+}
+
+#[derive(Debug, Clone)]
+enum Instruction {
+ Snd(Data),
+ Set(Data, Data),
+ Add(Data, Data),
+ Mul(Data, Data),
+ Mod(Data, Data),
+ Rcv(Data),
+ Jgz(Data, Data)
+}
+
+impl FromStr for Instruction {
+ type Err = String;
+
+ fn from_str(s: &str) -> Result<Self, Self::Err> {
+ use Instruction::*;
+
+ let mut str_iter = s.split_whitespace();
+ let ins = str_iter.next();
+ let x = str_iter.next().map(|x| x.parse::<Data>());
+ let y = str_iter.next().map(|x| x.parse::<Data>());
+
+ match (ins, x, y) {
+ (Some("snd"), Some(Ok(x)), _) => Ok(Snd(x)),
+ (Some("set"), Some(Ok(x)), Some(Ok(y))) => Ok(Set(x, y)),
+ (Some("add"), Some(Ok(x)), Some(Ok(y))) => Ok(Add(x, y)),
+ (Some("mul"), Some(Ok(x)), Some(Ok(y))) => Ok(Mul(x, y)),
+ (Some("mod"), Some(Ok(x)), Some(Ok(y))) => Ok(Mod(x, y)),
+ (Some("rcv"), Some(Ok(x)), _) => Ok(Rcv(x)),
+ (Some("jgz"), Some(Ok(x)), Some(Ok(y))) => Ok(Jgz(x, y)),
+ (_, _, _) => Err(format!("Unknown instruction {}", s))
+ }
+ }
+}
+
+#[derive(Debug, Clone, Copy)]
+enum Data {
+ Literal(i64),
+ Register(char)
+}
+
+impl FromStr for Data {
+ type Err = String;
+
+ fn from_str(s: &str) -> Result<Self, Self::Err> {
+ use Data::*;
+
+ match (s.parse(), s.chars().next()) {
+ (Ok(num), _) => Ok(Literal(num)),
+ (Err(_), Some(c)) => Ok(Register(c)),
+ (_, _) => Err(format!("Invalid data {}", s))
+ }
+ }
+}
diff --git a/2017/src/bin/day_19.rs b/2017/src/bin/day_19.rs
new file mode 100644
index 0000000..b333c98
--- /dev/null
+++ b/2017/src/bin/day_19.rs
@@ -0,0 +1,78 @@
+extern crate advent_of_code_2017;
+use advent_of_code_2017::*;
+
+fn main() {
+ use Direction::*;
+
+ let args = AdventArgs::init();
+
+ let input: Vec<Vec<char>> = args.input.iter().map(|line| line.chars().collect()).collect();
+
+ let mut position = Point {
+ x: input[0].iter().position(|&c| c == '|').unwrap() as i32,
+ y: 0
+ };
+
+ let mut direction = Down;
+ let mut path_ended = false;
+ let mut tokens = Vec::new();
+
+ // moving onto the map counts as one, but because of how I'm
+ // counting there's also an off the map step that I shouldn't be
+ // counting at the end. They cancel out.
+ let mut steps_moved = 0;
+
+ while !path_ended {
+ position = position.shift(&direction);
+ steps_moved += 1;
+
+ match char_at(&input, &position) {
+ '|' | '-' => {
+ //continue as is
+ },
+ ' ' => {
+ path_ended = true;
+ },
+ '+' => {
+ let left_option = char_at(&input, &position.shift(&direction.rotate_left()));
+ let right_option = char_at(&input, &position.shift(&direction.rotate_right()));
+ match (left_option, right_option) {
+ (' ', ' ') => {
+ path_ended = true;
+ },
+ (_, ' ') => {
+ direction = direction.rotate_left();
+ },
+ (' ', _) => {
+ direction = direction.rotate_right();
+ },
+ _ => {
+ panic!("Don't know where to go from {:?}", position);
+ }
+ }
+ },
+ token => {
+ tokens.push(token);
+ }
+ }
+
+ }
+
+ if args.part == 1 {
+ println!("{}", tokens.iter().collect::<String>());
+ } else {
+ println!("{}", steps_moved);
+ }
+}
+
+fn char_at(input: &Vec<Vec<char>>, position: &Point) -> char {
+ if position.y < 0 ||
+ position.x < 0 ||
+ position.y as usize >= input.len() ||
+ position.x as usize >= input[position.y as usize].len() {
+ ' '
+ } else {
+ input[position.y as usize][position.x as usize]
+ }
+
+}
diff --git a/2017/src/bin/day_2.rs b/2017/src/bin/day_2.rs
new file mode 100644
index 0000000..307029a
--- /dev/null
+++ b/2017/src/bin/day_2.rs
@@ -0,0 +1,26 @@
+extern crate advent_of_code_2017;
+use advent_of_code_2017::*;
+
+fn main() {
+ let args = AdventArgs::init();
+ let sum = args.input.iter().map(|line| {
+ let splitline = parse_space_separated_ints(line).unwrap();
+
+ if args.part == 1 {
+ let max = splitline.iter().max().unwrap();
+ let min = splitline.iter().min().unwrap();
+ max-min
+ } else {
+ for i in 0..splitline.len() {
+ for j in 0..splitline.len() {
+ if i != j && splitline[i] % splitline[j] == 0 {
+ return splitline[i] / splitline[j];
+ }
+ }
+ }
+ panic!("Didn't find a dividing one! {:?}", splitline)
+ }
+ }).sum::<i32>();
+
+ println!("Checksum is {}", sum);
+}
diff --git a/2017/src/bin/day_20.rs b/2017/src/bin/day_20.rs
new file mode 100644
index 0000000..f528675
--- /dev/null
+++ b/2017/src/bin/day_20.rs
@@ -0,0 +1,89 @@
+extern crate advent_of_code_2017;
+use advent_of_code_2017::*;
+
+extern crate regex;
+use regex::Regex;
+
+#[macro_use]
+extern crate lazy_static;
+
+use std::str::FromStr;
+
+fn main() {
+ let args = AdventArgs::init();
+
+ let mut particles: Vec<Particle> = args.input.iter()
+ .map(|line| line.parse().unwrap())
+ .collect();
+
+ // I took eventually to be after a largish number. Seemed to work
+ // out, but I'm sure there is a more mathematical way to work it
+ // out.
+ for _ in 0..1000 {
+ particles = particles.iter().map(|p| p.step()).collect();
+ if args.part == 2 {
+ let before_collisions = particles.clone();
+ particles.retain(|p| {
+ before_collisions.iter().filter(|p2| p2.position == p.position).count() == 1
+ });
+ }
+ }
+
+ if args.part == 1 {
+ let (closest, _) = particles.iter().enumerate().min_by_key(|&(_, p)| p.position.manhattan_distance()).unwrap();
+ println!("Closest to 0: {}", closest);
+ } else {
+ let remaining = particles.iter().count();
+ println!("Remaining: {}", remaining);
+ }
+
+}
+
+#[derive(Debug, Clone)]
+struct Particle {
+ position: Point3d,
+ velocity: Point3d,
+ acceleration: Point3d
+}
+
+
+impl Particle {
+ fn step(&self) -> Particle {
+ let v = self.velocity + self.acceleration;
+ Particle {
+ position: self.position + v,
+ velocity: v,
+ acceleration: self.acceleration
+ }
+ }
+}
+
+impl FromStr for Particle {
+ type Err = String;
+
+ fn from_str(s: &str) -> Result<Self, Self::Err> {
+ lazy_static!{
+ static ref RE: Regex = Regex::new(r"p=<(-?\d+),(-?\d+),(-?\d+)>, v=<(-?\d+),(-?\d+),(-?\d+)>, a=<(-?\d+),(-?\d+),(-?\d+)>").unwrap();
+ };
+
+ let caps = RE.captures(s).unwrap();
+ Ok(Particle {
+ position: Point3d {
+ x: caps[1].parse().unwrap(),
+ y: caps[2].parse().unwrap(),
+ z: caps[3].parse().unwrap()
+ },
+ velocity: Point3d {
+ x: caps[4].parse().unwrap(),
+ y: caps[5].parse().unwrap(),
+ z: caps[6].parse().unwrap()
+ },
+ acceleration: Point3d {
+ x: caps[7].parse().unwrap(),
+ y: caps[8].parse().unwrap(),
+ z: caps[9].parse().unwrap()
+ }
+ })
+ }
+}
+
diff --git a/2017/src/bin/day_21.rs b/2017/src/bin/day_21.rs
new file mode 100644
index 0000000..7f7ac79
--- /dev/null
+++ b/2017/src/bin/day_21.rs
@@ -0,0 +1,200 @@
+extern crate advent_of_code_2017;
+use advent_of_code_2017::*;
+
+extern crate regex;
+use regex::Regex;
+
+fn main() {
+ let args = AdventArgs::init();
+
+ let (t2, t3) = parse_transforms(&args.input);
+
+ let mut picture = vec!(
+ vec!(false, true, false),
+ vec!(false, false, true),
+ vec!(true, true, true)
+ );
+
+ let iterations = if args.part == 1 {
+ 5
+ } else {
+ 18
+ };
+ for _ in 0..iterations {
+ picture = expand(&picture, &t2, &t3);
+ }
+
+ let ones: usize = picture.iter().map(
+ |row| row.iter().filter(|&&x| x).count()
+ ).sum();
+ println!("{} ones", ones);
+}
+
+fn print(picture: &Vec<Vec<bool>>) {
+ for row in picture {
+ for &c in row {
+ print!("{}", if c {"#"} else {"."});
+ }
+ println!();
+ }
+ println!();
+}
+
+fn expand(picture: &Vec<Vec<bool>>, t2: &Vec<Transform2>, t3: &Vec<Transform3>) -> Vec<Vec<bool>> {
+ let size = picture.len();
+ let div = if size % 2 == 0 { 2 } else { 3 };
+ let segments = size / div;
+ let new_size = size + segments;
+
+ let mut result = vec!(vec!(false; new_size); new_size);
+
+ for i in 0..segments {
+ let y = i*div;
+ let v = i*(div+1);
+ for j in 0..segments {
+ let x = j*div;
+ let u = j*(div+1);
+ if div == 2 {
+ let init = [
+ [picture[y][x], picture[y][x+1]],
+ [picture[y+1][x], picture[y+1][x+1]]
+ ];
+ let pattern = t2.iter().find(|p| p.matches(&init)).expect(&format!("No pattern matches {:?}", init));
+ let to = pattern.to;
+
+ for a in 0..div+1 {
+ for b in 0..div+1 {
+ result[v+a][u+b] = to[a][b];
+ }
+ }
+ } else {
+ let init = [
+ [picture[y][x], picture[y][x+1], picture[y][x+2]],
+ [picture[y+1][x], picture[y+1][x+1], picture[y+1][x+2]],
+ [picture[y+2][x], picture[y+2][x+1], picture[y+2][x+2]]
+ ];
+ let pattern = t3.iter().find(|p| p.matches(&init)).expect(&format!("No pattern matches {:?}", init));
+ let to = pattern.to;
+
+ for a in 0..div+1 {
+ for b in 0..div+1 {
+ result[v+a][u+b] = to[a][b];
+ }
+ }
+ }
+ }
+ }
+
+ result
+}
+
+fn parse_transforms(input: &Vec<String>) -> (Vec<Transform2>, Vec<Transform3>) {
+ let t2_re = Regex::new(r"^(.)(.)/(.)(.) => (.)(.)(.)/(.)(.)(.)/(.)(.)(.)$").unwrap();
+ let t3_re = Regex::new(r"^(.)(.)(.)/(.)(.)(.)/(.)(.)(.) => (.)(.)(.)(.)/(.)(.)(.)(.)/(.)(.)(.)(.)/(.)(.)(.)(.)$").unwrap();
+
+ let mut t2 = Vec::new();
+ let mut t3 = Vec::new();
+ for line in input {
+ if let Some(t2_caps) = t2_re.captures(line) {
+ t2.push(Transform2 {
+ from: [
+ [&t2_caps[1] == "#", &t2_caps[2] == "#"],
+ [&t2_caps[3] == "#", &t2_caps[4] == "#"]
+ ],
+ to: [
+ [&t2_caps[5] == "#", &t2_caps[6] == "#", &t2_caps[7] == "#"],
+ [&t2_caps[8] == "#", &t2_caps[9] == "#", &t2_caps[10] == "#"],
+ [&t2_caps[11] == "#", &t2_caps[12] == "#", &t2_caps[13] == "#"]
+ ]
+ });
+ } else if let Some(t3_caps) = t3_re.captures(line) {
+ t3.push(Transform3 {
+ from: [
+ [&t3_caps[1] == "#", &t3_caps[2] == "#", &t3_caps[3] == "#"],
+ [&t3_caps[4] == "#", &t3_caps[5] == "#", &t3_caps[6] == "#"],
+ [&t3_caps[7] == "#", &t3_caps[8] == "#", &t3_caps[9] == "#"]
+ ],
+ to: [
+ [&t3_caps[10] == "#", &t3_caps[11] == "#", &t3_caps[12] == "#", &t3_caps[13] == "#"],
+ [&t3_caps[14] == "#", &t3_caps[15] == "#", &t3_caps[16] == "#", &t3_caps[17] == "#"],
+ [&t3_caps[18] == "#", &t3_caps[19] == "#", &t3_caps[20] == "#", &t3_caps[21] == "#"],
+ [&t3_caps[22] == "#", &t3_caps[23] == "#", &t3_caps[24] == "#", &t3_caps[25] == "#"]
+ ]
+ });
+ }
+ }
+
+ (t2, t3)
+}
+
+#[derive(Debug)]
+struct Transform2 {
+ from: [[bool; 2]; 2],
+ to: [[bool; 3]; 3]
+}
+
+impl Transform2 {
+ fn rotate(from: &[[bool;2];2]) -> [[bool;2];2] {
+ [
+ [from[1][0],from[0][0]],
+ [from[1][1],from[0][1]]
+ ]
+ }
+
+ fn flip(from: &[[bool;2];2]) -> [[bool;2];2] {
+ [
+ [from[0][1],from[0][0]],
+ [from[1][1],from[1][0]]
+ ]
+ }
+
+ fn matches(&self, other: &[[bool; 2]; 2]) -> bool {
+ let mut any_match = false;
+ let mut spinning_other = other.clone();
+ for _ in 0..4 {
+ any_match = any_match ||
+ self.from == spinning_other ||
+ self.from == Transform2::flip(&spinning_other);
+
+ spinning_other = Transform2::rotate(&spinning_other);
+ }
+ any_match
+ }
+}
+
+#[derive(Debug)]
+struct Transform3 {
+ from: [[bool; 3]; 3],
+ to: [[bool; 4]; 4]
+}
+
+impl Transform3 {
+ fn rotate(from: &[[bool;3];3]) -> [[bool;3];3] {
+ [
+ [from[2][0],from[1][0],from[0][0]],
+ [from[2][1],from[1][1],from[0][1]],
+ [from[2][2],from[1][2],from[0][2]]
+ ]
+ }
+
+ fn flip(from: &[[bool;3];3]) -> [[bool;3];3] {
+ [
+ [from[0][2],from[0][1],from[0][0]],
+ [from[1][2],from[1][1],from[1][0]],
+ [from[2][2],from[2][1],from[2][0]]
+ ]
+ }
+
+ fn matches(&self, other: &[[bool; 3]; 3]) -> bool {
+ let mut any_match = false;
+ let mut spinning_other = other.clone();
+ for _ in 0..4 {
+ any_match = any_match ||
+ self.from == spinning_other ||
+ self.from == Transform3::flip(&spinning_other);
+
+ spinning_other = Transform3::rotate(&spinning_other);
+ }
+ any_match
+ }
+}
diff --git a/2017/src/bin/day_22.rs b/2017/src/bin/day_22.rs
new file mode 100644
index 0000000..917ed63
--- /dev/null
+++ b/2017/src/bin/day_22.rs
@@ -0,0 +1,73 @@
+extern crate advent_of_code_2017;
+use advent_of_code_2017::*;
+
+use std::collections::HashSet;
+
+fn main() {
+ let args = AdventArgs::init();
+ let input_width = args.input[0].len();
+ let input_height = args.input.len();
+
+ let mut position = Point {
+ x: (input_width / 2) as i32,
+ y: (input_height / 2) as i32,
+ };
+ let mut direction = Direction::Up;
+
+ let mut weakened: HashSet<Point> = HashSet::new();
+ let mut infected: HashSet<Point> = HashSet::new();
+ let mut flagged: HashSet<Point> = HashSet::new();
+
+ for (y, line) in args.input.iter().enumerate() {
+ for (x, c) in line.chars().enumerate() {
+ if c == '#' {
+ infected.insert(Point {
+ x: x as i32,
+ y: y as i32
+ });
+ }
+ }
+ }
+
+ let mut infections_caused = 0;
+
+ let bursts = if args.part == 1 {
+ 10_000
+ } else {
+ 10_000_000
+ };
+
+ for _ in 0..bursts {
+ if args.part == 1 {
+ if infected.contains(&position) {
+ direction = direction.rotate_right();
+ infected.remove(&position);
+ } else {
+ direction = direction.rotate_left();
+ infected.insert(position);
+ infections_caused += 1;
+ }
+ }
+ else {
+ if weakened.contains(&position) {
+ infected.insert(position);
+ weakened.remove(&position);
+ infections_caused += 1;
+ } else if infected.contains(&position) {
+ direction = direction.rotate_right();
+ flagged.insert(position);
+ infected.remove(&position);
+ } else if flagged.contains(&position) {
+ direction = direction.rotate_right().rotate_right();
+ flagged.remove(&position);
+ } else {
+ direction = direction.rotate_left();
+ weakened.insert(position);
+ }
+ }
+ position = position.shift(&direction);
+ }
+
+ println!("Infections caused {}", infections_caused);
+
+}
diff --git a/2017/src/bin/day_23.rs b/2017/src/bin/day_23.rs
new file mode 100644
index 0000000..d199af0
--- /dev/null
+++ b/2017/src/bin/day_23.rs
@@ -0,0 +1,168 @@
+extern crate advent_of_code_2017;
+use advent_of_code_2017::*;
+
+use std::str::FromStr;
+
+fn main() {
+ let args = AdventArgs::init();
+
+ if args.part == 1 {
+ let instructions: Vec<Instruction> = args.input.iter()
+ .map(|line| line.parse().unwrap())
+ .collect();
+
+ let mut program = Program::new(instructions.clone(), args.part == 1);
+ let mul_called = program.run();
+ println!("Mult called {} times", mul_called);
+ } else {
+ println!("Result is {}", run_as_rust());
+ }
+
+}
+
+fn to_register(c: char) -> usize {
+ (c as u32 - 'a' as u32) as usize
+}
+
+struct Program {
+ instructions: Vec<Instruction>,
+ registers: [i64; 8],
+ pc: i64
+}
+
+impl Program {
+ fn new(instructions: Vec<Instruction>, part1: bool) -> Program {
+ let mut reg = [0; 8];
+ if part1 == false {
+ reg[0] = 1;
+ }
+ Program {
+ instructions: instructions,
+ registers: reg,
+ pc: 0
+ }
+ }
+ fn run(&mut self) -> u32 {
+ use Instruction::*;
+
+ let mut mul_called = 0;
+
+ while self.pc >= 0 && (self.pc as usize) < self.instructions.len() {
+ let ins = self.instructions[self.pc as usize].clone();
+
+ match ins {
+ Set(x, y) => {
+ let y_val = self.get(y);
+ self.set(x, y_val);
+ },
+ Sub(x, y) => {
+ let x_val = self.get(x);
+ let y_val = self.get(y);
+ self.set(x, x_val - y_val);
+ },
+ Mul(x, y) => {
+ let x_val = self.get(x);
+ let y_val = self.get(y);
+ self.set(x, x_val * y_val);
+ mul_called += 1;
+ },
+ Jnz(x, y) => {
+ if self.get(x) != 0 {
+ self.pc = self.pc + self.get(y) - 1;
+ }
+ },
+ }
+ self.pc += 1;
+ }
+
+ mul_called
+ }
+
+ fn get(&self, register: Data) -> i64 {
+ use Data::*;
+ match register {
+ Register(c) => self.registers[c],
+ Literal(i) => i
+ }
+ }
+
+ fn set(&mut self, register: Data, value: i64) {
+ use Data::*;
+ match register {
+ Register(c) => {
+ self.registers[c] = value;
+ },
+ _ => {}
+ }
+ }
+}
+
+#[derive(Debug, Clone)]
+enum Instruction {
+ Set(Data, Data),
+ Sub(Data, Data),
+ Mul(Data, Data),
+ Jnz(Data, Data)
+}
+
+impl FromStr for Instruction {
+ type Err = String;
+
+ fn from_str(s: &str) -> Result<Self, Self::Err> {
+ use Instruction::*;
+
+ let mut str_iter = s.split_whitespace();
+ let ins = str_iter.next();
+ let x = str_iter.next().map(|x| x.parse::<Data>());
+ let y = str_iter.next().map(|x| x.parse::<Data>());
+
+ match (ins, x, y) {
+ (Some("set"), Some(Ok(x)), Some(Ok(y))) => Ok(Set(x, y)),
+ (Some("sub"), Some(Ok(x)), Some(Ok(y))) => Ok(Sub(x, y)),
+ (Some("mul"), Some(Ok(x)), Some(Ok(y))) => Ok(Mul(x, y)),
+ (Some("jnz"), Some(Ok(x)), Some(Ok(y))) => Ok(Jnz(x, y)),
+ (_, _, _) => Err(format!("Unknown instruction {}", s))
+ }
+ }
+}
+
+#[derive(Debug, Clone, Copy)]
+enum Data {
+ Literal(i64),
+ Register(usize)
+}
+
+impl FromStr for Data {
+ type Err = String;
+
+ fn from_str(s: &str) -> Result<Self, Self::Err> {
+ use Data::*;
+
+ match (s.parse(), s.chars().next()) {
+ (Ok(num), _) => Ok(Literal(num)),
+ (Err(_), Some(c)) => Ok(Register(to_register(c))),
+ (_, _) => Err(format!("Invalid data {}", s))
+ }
+ }
+}
+
+
+fn run_as_rust() -> i64 {
+ let mut h: i64 = 0;
+ let mut b: i64 = 99 * 100 + 100000;
+ let c: i64 = b + 17000;
+
+ while b <= c {
+ let f = (2..b).any(|d| {
+ b % d == 0
+ });
+
+ if f {
+ h += 1;
+ }
+
+ b += 17;
+ }
+
+ h
+}
diff --git a/2017/src/bin/day_24.rs b/2017/src/bin/day_24.rs
new file mode 100644
index 0000000..eb7fddd
--- /dev/null
+++ b/2017/src/bin/day_24.rs
@@ -0,0 +1,60 @@
+extern crate advent_of_code_2017;
+use advent_of_code_2017::*;
+
+fn main() {
+ let args = AdventArgs::init();
+ let components: Vec<Component> = args.input.iter()
+ .map(|line| {
+ let mut split = line.split('/');
+ Component {
+ a: split.next().unwrap().parse().unwrap(),
+ b: split.next().unwrap().parse().unwrap()
+ }
+ })
+ .collect();
+
+ if args.part == 1 {
+ let strongest = build_strongest(0, components);
+ println!("{}", strongest);
+ } else {
+ let (strongest, longest) = build_longest(0, components);
+ println!("length: {}, strength: {}", longest, strongest);
+ }
+}
+
+fn build_strongest(start: u32, components: Vec<Component>) -> u32 {
+ components.iter().enumerate()
+ .filter(|&(_, c)| c.a == start || c.b == start)
+ .map(|(i, c)| {
+ let end = if c.a == start { c.b } else { c.a };
+ let mut subset = components.clone();
+ subset.remove(i);
+ c.strength() + build_strongest(end, subset)
+ }).max().unwrap_or(0)
+}
+
+fn build_longest(start: u32, components: Vec<Component>) -> (u32, u32) {
+ components.iter().enumerate()
+ .filter(|&(_, c)| c.a == start || c.b == start)
+ .map(|(i, c)| {
+ let end = if c.a == start { c.b } else { c.a };
+ let mut subset = components.clone();
+ subset.remove(i);
+ let (s, l) = build_longest(end, subset);
+ (c.strength() + s, 1 + l)
+ }).max_by(|&(s1, l1), &(s2, l2)| {
+ l1.cmp(&l2).then(s1.cmp(&s2))
+ }).unwrap_or((0, 0))
+}
+
+#[derive(Debug, Clone)]
+struct Component {
+ a: u32,
+ b: u32
+}
+
+impl Component {
+ fn strength(&self) -> u32 {
+ self.a + self.b
+ }
+}
diff --git a/2017/src/bin/day_25.rs b/2017/src/bin/day_25.rs
new file mode 100644
index 0000000..8d7b0da
--- /dev/null
+++ b/2017/src/bin/day_25.rs
@@ -0,0 +1,125 @@
+extern crate advent_of_code_2017;
+use advent_of_code_2017::*;
+
+extern crate regex;
+use regex::Regex;
+
+use std::slice::Iter;
+use std::collections::HashSet;
+
+fn main() {
+ let args = AdventArgs::init();
+ let program = parse(&args.input);
+
+ let mut position: i32 = 0;
+ let mut state = program.state(program.start).expect("Started out of program bounds");
+ let mut tape = HashSet::new();
+
+ for _ in 0..program.iterations {
+ let instruction = if tape.contains(&position) {
+ &state.if1
+ } else {
+ &state.if0
+ };
+ if instruction.write {
+ tape.insert(position);
+ } else {
+ tape.remove(&position);
+ }
+ position += instruction.offset;
+ state = program.state(instruction.next).expect("Redirected to unknown state");
+ }
+
+ println!("{}", tape.len());
+}
+
+fn parse(input: &Vec<String>) -> Program {
+ let state_re = Regex::new(r"state (\w)").unwrap();
+ let iterations_re = Regex::new(r"(\d+) steps").unwrap();
+ let write_re = Regex::new(r"Write the value (\d)").unwrap();
+ let move_re = Regex::new(r"Move one slot to the (\w+)").unwrap();
+
+ let mut lines = input.iter();
+ let start = parse_char(&mut lines, &state_re);
+ let iterations = parse_number(&mut lines, &iterations_re);
+
+ let mut states = Vec::new();
+ while let Some(heading) = lines.next() {
+ states.push(State {
+ id: state_re.captures(heading).unwrap()[1].chars().next().unwrap(),
+ if0: parse_instruction(&mut lines, &write_re, &move_re, &state_re),
+ if1: parse_instruction(&mut lines, &write_re, &move_re, &state_re)
+ });
+ }
+
+ Program {
+ start: start,
+ iterations: iterations,
+ states: states
+ }
+}
+
+fn parse_char(lines: &mut Iter<String>, re: &Regex) -> char {
+ re.captures(
+ lines.next().unwrap()
+ ).unwrap()[1].chars().next().unwrap()
+}
+
+fn parse_number(lines: &mut Iter<String>, re: &Regex) -> u32 {
+ re.captures(
+ lines.next().unwrap()
+ ).unwrap()[1].parse().unwrap()
+}
+fn parse_direction(lines: &mut Iter<String>, re: &Regex) -> i32 {
+ if re.captures(
+ lines.next().unwrap()
+ ).unwrap()[1] == *"left" {
+ -1
+ } else {
+ 1
+ }
+}
+
+fn parse_bool(lines: &mut Iter<String>, re: &Regex) -> bool {
+ re.captures(
+ lines.next().unwrap()
+ ).unwrap()[1] == *"1"
+}
+
+fn parse_instruction(lines: &mut Iter<String>, write_re: &Regex, offset_re: &Regex, next_re: &Regex) -> Instruction {
+ lines.next();
+ Instruction {
+ write: parse_bool(lines, &write_re),
+ offset: parse_direction(lines, &offset_re),
+ next: parse_char(lines, &next_re)
+ }
+}
+
+#[derive(Debug)]
+struct Program {
+ start: char,
+ iterations: u32,
+ states: Vec<State>
+}
+
+impl Program {
+ fn state(&self, i: char) -> Option<&State> {
+ self.states.iter().find(|s| s.id == i)
+ }
+}
+
+#[derive(Debug)]
+struct State {
+ id: char,
+ if0: Instruction,
+ if1: Instruction
+}
+
+#[derive(Debug)]
+struct Instruction {
+ write: bool,
+ offset: i32,
+ next: char
+}
+
+
diff --git a/2017/src/bin/day_3.rs b/2017/src/bin/day_3.rs
new file mode 100644
index 0000000..69ded88
--- /dev/null
+++ b/2017/src/bin/day_3.rs
@@ -0,0 +1,62 @@
+extern crate advent_of_code_2017;
+use advent_of_code_2017::*;
+
+use std::collections::HashMap;
+
+fn main() {
+ use Direction::*;
+
+ let args = AdventArgs::init();
+ let input = args.one_number_input().unwrap();
+
+ let mut memory: HashMap<Point, i32> = HashMap::new();
+ let mut last_allocated = 1;
+
+ let mut current = Point {
+ x: 0,
+ y: 0
+ };
+ memory.insert(current, last_allocated);
+
+ let mut steps_per_direction = 1;
+ let mut steps_to_next_turn = 1;
+ let mut turns_to_spiral_increase = 2;
+
+ let mut current_index = 1;
+ let mut current_direction = Right;
+
+ while (args.part == 1 && current_index != input) || (args.part == 2 && last_allocated < input) {
+ current = current.shift(&current_direction);
+ current_index += 1;
+
+ steps_to_next_turn -= 1;
+ if steps_to_next_turn == 0 {
+ current_direction = current_direction.rotate_left();
+ turns_to_spiral_increase -= 1;
+ if turns_to_spiral_increase == 0 {
+ steps_per_direction += 1;
+ turns_to_spiral_increase = 2;
+ }
+
+ steps_to_next_turn = steps_per_direction;
+ }
+
+ if args.part == 2 {
+ last_allocated = memory.get(&current.left()).cloned().unwrap_or(0) +
+ memory.get(&current.right()).cloned().unwrap_or(0) +
+ memory.get(&current.up()).cloned().unwrap_or(0) +
+ memory.get(&current.down()).cloned().unwrap_or(0) +
+ memory.get(&current.up().left()).cloned().unwrap_or(0) +
+ memory.get(&current.up().right()).cloned().unwrap_or(0) +
+ memory.get(&current.down().left()).cloned().unwrap_or(0) +
+ memory.get(&current.down().right()).cloned().unwrap_or(0);
+
+ memory.insert(current, last_allocated);
+ }
+ }
+
+ println!("{:?}", current);
+ println!("Distance: {}", current.x.abs() + current.y.abs());
+ println!("Last Allocated Value: {}", last_allocated);
+
+}
diff --git a/2017/src/bin/day_4.rs b/2017/src/bin/day_4.rs
new file mode 100644
index 0000000..a9a098a
--- /dev/null
+++ b/2017/src/bin/day_4.rs
@@ -0,0 +1,37 @@
+extern crate advent_of_code_2017;
+use advent_of_code_2017::*;
+
+fn main() {
+ let args = AdventArgs::init();
+
+ let valid_count = args.input.iter()
+ .map(|line| {
+ let words = line.split_whitespace().map(|x| x.to_string()).collect::<Vec<String>>();
+ if args.part == 1 {
+ let mut deduped_words = words.clone();
+ deduped_words.sort();
+ deduped_words.dedup();
+ words.len() == deduped_words.len()
+ } else {
+ !words.iter().enumerate().any(|(i, word1)| {
+ words.iter().enumerate().any(|(j, word2)| {
+ i != j && is_anagram(word1, word2)
+ })
+ })
+ }
+ })
+ .filter(|&valid| valid)
+ .count();
+
+ println!("Valid count: {}", valid_count);
+}
+
+fn is_anagram(word1: &str, word2: &str) -> bool {
+ let mut chars1 = word1.chars().collect::<Vec<_>>();
+ chars1.sort();
+ let mut chars2 = word2.chars().collect::<Vec<_>>();
+ chars2.sort();
+
+ chars1.len() == chars2.len() &&
+ chars1.iter().zip(chars2.iter()).all(|(c1, c2)| c1 == c2)
+}
diff --git a/2017/src/bin/day_5.rs b/2017/src/bin/day_5.rs
new file mode 100644
index 0000000..49bdbd1
--- /dev/null
+++ b/2017/src/bin/day_5.rs
@@ -0,0 +1,25 @@
+extern crate advent_of_code_2017;
+use advent_of_code_2017::*;
+
+fn main() {
+ let args = AdventArgs::init();
+
+ let mut jumps: Vec<i32> = args.input.iter().map(|line| line.parse().unwrap()).collect();
+ let mut steps_taken = 0;
+ let mut current_position: i32 = 0;
+
+ while current_position >= 0 && (current_position as usize) < jumps.len() {
+ let previous_position = current_position;
+ current_position += jumps[current_position as usize];
+
+ if args.part == 1 || jumps[previous_position as usize] < 3 {
+ jumps[previous_position as usize] += 1;
+ } else {
+ jumps[previous_position as usize] -= 1;
+ }
+
+ steps_taken += 1;
+ }
+
+ println!("Escaped in {} jumps", steps_taken);
+}
diff --git a/2017/src/bin/day_6.rs b/2017/src/bin/day_6.rs
new file mode 100644
index 0000000..be9a515
--- /dev/null
+++ b/2017/src/bin/day_6.rs
@@ -0,0 +1,61 @@
+extern crate advent_of_code_2017;
+use advent_of_code_2017::*;
+
+fn main() {
+ let args = AdventArgs::init();
+
+ let init_layout = parse_space_separated_ints(&args.input[0]).unwrap();
+
+ let mut layouts = vec!(init_layout);
+ let mut balances = 0;
+ let mut cycle_found = false;
+ let mut cycle_size = 0;
+
+ while !cycle_found {
+ balances += 1;
+ let new_layout = find_next_layout(&layouts);
+
+ if let Some(index) = layouts.iter().position(|x| *x == new_layout) {
+ cycle_found = true;
+ cycle_size = layouts.len() - index;
+ };
+
+ layouts.push(new_layout);
+ }
+
+ if args.part == 1 {
+ println!("Did {} rebalances", balances);
+ } else {
+ println!("Cycle was {} long", cycle_size);
+ }
+}
+
+fn find_next_layout(layouts: &Vec<Vec<i32>>) -> Vec<i32> {
+ let previous_layout = layouts.last().unwrap();
+ rebalance(&previous_layout)
+}
+
+fn rebalance(layout: &Vec<i32>) -> Vec<i32> {
+ let biggest_container = layout.iter()
+ .enumerate()
+ .max_by(|&(ai, &asize), &(bi, &bsize)| {
+ asize.cmp(&bsize).then(bi.cmp(&ai))
+ })
+ .map(|(i, _)| i)
+ .unwrap();
+
+
+ let mut new_layout = layout.clone();
+ let mut to_redistribute = new_layout[biggest_container];
+ new_layout[biggest_container] = 0;
+ let mut target = (biggest_container + 1) % layout.len();
+
+ while to_redistribute > 0 {
+ new_layout[target] += 1;
+ to_redistribute -= 1;
+ target = (target + 1) % layout.len();
+ }
+
+ new_layout
+}
+
diff --git a/2017/src/bin/day_7.rs b/2017/src/bin/day_7.rs
new file mode 100644
index 0000000..3c3b185
--- /dev/null
+++ b/2017/src/bin/day_7.rs
@@ -0,0 +1,62 @@
+extern crate advent_of_code_2017;
+use advent_of_code_2017::*;
+
+extern crate regex;
+use regex::Regex;
+
+fn main() {
+ let args = AdventArgs::init();
+
+ let names_re = Regex::new(r"[a-z]+").unwrap();
+ let weight_re = Regex::new(r"\d+").unwrap();
+
+ let tree: Vec<(String, Vec<String>, i32)> = args.input.iter()
+ .map(|line| {
+ let mut matches = names_re.find_iter(line);
+ let base = matches.next().unwrap().as_str().to_string();
+ let leaves = matches.map(|m| m.as_str().to_string()).collect();
+ let weight = weight_re.find(line).unwrap().as_str().parse().unwrap();
+ (base, leaves, weight)
+ }).collect();
+
+ let mut possible_roots: Vec<String> = tree.iter().map(|&(ref id, _, _)| id.clone()).collect();
+ for &(_, ref leaves, _) in &tree {
+ for leaf in leaves {
+ let index = possible_roots.iter().position(|x| x == leaf).unwrap();
+ possible_roots.remove(index);
+ }
+ }
+ let root = &possible_roots[0];
+
+ if args.part == 1 {
+ println!("{:?}", root);
+ } else {
+ find_unweighted_plate(&root, &tree);
+ }
+}
+
+fn find_unweighted_plate(root: &String, tree: &Vec<(String, Vec<String>, i32)>) -> i32 {
+ let root_node = find_node(&root, &tree);
+ let &(_, ref leaves, ref weight) = root_node;
+ let leaf_weights: Vec<i32> = leaves.iter().map(|leaf| {
+ find_unweighted_plate(&leaf, &tree)
+ }).collect();
+
+ if let Some(base_leaf_weight) = leaf_weights.first() {
+ if let Some(different_leaf_weight) = leaf_weights.iter().find(|&w| w != base_leaf_weight) {
+ println!("Unbalanced plate is off by {}", (different_leaf_weight-base_leaf_weight).abs());
+ println!("Towers on plate: {:?} weigh {:?}", leaves, leaf_weights);
+ // This still needs some manual work to get to the puzzle
+ // output. Take the first unbalanced plate, figure out
+ // which is the unbalanced tower visually, find its
+ // individual weight in the file, and add/subtract as
+ // necessary.
+ }
+ }
+
+ leaf_weights.iter().sum::<i32>() + weight
+}
+
+fn find_node<'a>(name: &String, tree: &'a Vec<(String, Vec<String>, i32)>) -> &'a (String, Vec<String>, i32) {
+ tree.iter().find(|&&(ref id, _, _)| id == name).unwrap()
+}
diff --git a/2017/src/bin/day_8.rs b/2017/src/bin/day_8.rs
new file mode 100644
index 0000000..0359747
--- /dev/null
+++ b/2017/src/bin/day_8.rs
@@ -0,0 +1,99 @@
+extern crate advent_of_code_2017;
+use advent_of_code_2017::*;
+
+extern crate regex;
+use regex::Regex;
+
+#[macro_use]
+extern crate lazy_static;
+
+use std::str::FromStr;
+use std::collections::HashMap;
+use std::cmp;
+
+fn main() {
+ let args = AdventArgs::init();
+
+ let instructions: Vec<Instruction> = args.input.iter()
+ .map(|line| line.parse().unwrap())
+ .collect();
+
+ let mut memory: HashMap<String, i32> = HashMap::new();
+ let mut max_mem_ever = 0;
+
+ for instruction in instructions {
+ if instruction.is_true(&memory) {
+ instruction.execute(&mut memory);
+ max_mem_ever = cmp::max(max_mem_ever, memory.values().max().cloned().unwrap_or(0));
+ }
+ }
+
+ let max_mem = memory.values().max().cloned().unwrap_or(0);
+
+ if args.part == 1 {
+ println!("Highest value in memory is {}", max_mem);
+ } else {
+ println!("Highest value in memory ever is {}", max_mem_ever);
+ }
+}
+
+
+struct Instruction {
+ target_register: String,
+ action: String,
+ value: i32,
+ condition_register: String,
+ condition: String,
+ condition_value: i32
+}
+
+#[derive(Debug)]
+struct InstructionParseError {
+ reason: String
+}
+
+impl FromStr for Instruction {
+ type Err = InstructionParseError;
+ fn from_str(s: &str) -> Result<Self, InstructionParseError> {
+ lazy_static!{
+ static ref INSTRUCTION_RE: Regex = Regex::new(r"^(\w+) (inc|dec) (-?\d+) if (\w+) (<|>|<=|>=|==|!=) (-?\d+)").unwrap();
+ }
+ match INSTRUCTION_RE.captures(s) {
+ Some(caps) => Ok(Instruction{
+ target_register: caps[1].to_string(),
+ action: caps[2].to_string(),
+ value: caps[3].parse().unwrap(),
+ condition_register: caps[4].to_string(),
+ condition: caps[5].to_string(),
+ condition_value: caps[6].parse().unwrap()
+ }),
+ None => Err(InstructionParseError {
+ reason: format!("{} did not match regex", s)
+ })
+ }
+ }
+}
+
+impl Instruction {
+ fn is_true(&self, memory: &HashMap<String, i32>) -> bool {
+ let mem = memory.get(&self.condition_register).cloned().unwrap_or(0);
+ match self.condition.as_ref() {
+ "<" => mem < self.condition_value,
+ ">" => mem > self.condition_value,
+ "<=" => mem <= self.condition_value,
+ ">=" => mem >= self.condition_value,
+ "==" => mem == self.condition_value,
+ "!=" => mem != self.condition_value,
+ _ => panic!("Unknown condition: {}", self.condition)
+ }
+ }
+
+ fn execute(&self, memory: &mut HashMap<String, i32>) {
+ let modifier = if self.action == "inc" {
+ self.value
+ } else {
+ -self.value
+ };
+ *memory.entry(self.target_register.clone()).or_insert(0) += modifier;
+ }
+}
diff --git a/2017/src/bin/day_9.rs b/2017/src/bin/day_9.rs
new file mode 100644
index 0000000..e0ca0c0
--- /dev/null
+++ b/2017/src/bin/day_9.rs
@@ -0,0 +1,42 @@
+extern crate advent_of_code_2017;
+use advent_of_code_2017::*;
+
+fn main() {
+ let args = AdventArgs::init();
+
+ let mut cancelled = false;
+ let mut in_garbage = false;
+
+ let mut depth = 0;
+ let mut total_score = 0;
+ let mut total_garbage = 0;
+
+ for c in args.input[0].chars() {
+ if cancelled {
+ cancelled = false;
+ } else if c == '!' {
+ cancelled = true;
+ } else if in_garbage {
+ if c == '>' {
+ in_garbage = false;
+ } else {
+ total_garbage += 1;
+ }
+ } else {
+ if c == '<' {
+ in_garbage = true;
+ } else if c == '{' {
+ depth += 1;
+ total_score += depth;
+ } else if c == '}' {
+ depth -= 1;
+ }
+ }
+ }
+
+ if args.part == 1 {
+ println!("Total score is {}", total_score);
+ } else {
+ println!("Total garbage is {}", total_garbage);
+ }
+}
diff --git a/2017/src/lib.rs b/2017/src/lib.rs
new file mode 100644
index 0000000..53d7d20
--- /dev/null
+++ b/2017/src/lib.rs
@@ -0,0 +1,225 @@
+extern crate structopt;
+#[macro_use]
+extern crate structopt_derive;
+use structopt::StructOpt;
+
+use std::path::PathBuf;
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+use std::process;
+
+#[derive(StructOpt, Debug)]
+#[structopt(name = "AOC2017", about = "An Advent of Code CLI arguments object.")]
+struct AdventCli {
+ #[structopt(help = "Which part of the puzzle you are solving")]
+ part: u32,
+
+ #[structopt(help = "Input file", parse(from_os_str))]
+ input: PathBuf
+}
+
+pub struct AdventArgs {
+ pub part: u32,
+ pub input: Vec<String>
+}
+
+impl AdventArgs {
+ pub fn init() -> AdventArgs {
+ let opt = AdventCli::from_args();
+ let input = match AdventArgs::read_file(&opt.input) {
+ Ok(input) => input,
+ Err(error) => {
+ // Typically I would think of exiting the program like
+ // this to be bad form, but in this case I'm matching the
+ // interface of StructOpt: if the input parameters were
+ // invalid, just quit now with a nice message.
+ eprintln!("Error reading file: {}", error);
+ process::exit(1);
+ }
+ };
+ AdventArgs {
+ part: opt.part,
+ input: input
+ }
+ }
+
+ fn read_file(file: &PathBuf) -> Result<Vec<String>, std::io::Error> {
+ let file = File::open(file)?;
+ let file_reader = BufReader::new(file);
+ file_reader.lines()
+ .collect::<Result<Vec<_>, _>>()
+ .map(AdventArgs::preprocess_file_lines)
+ }
+
+ fn preprocess_file_lines(lines: Vec<String>) -> Vec<String> {
+ lines.iter()
+ .filter(|line| line.len() > 0)
+ .map(|line| line.trim_right().to_string())
+ .collect()
+ }
+
+ pub fn one_number_input(&self) -> Result<i32, std::num::ParseIntError> {
+ self.input[0].parse()
+ }
+ pub fn number_per_line_input(&self) -> Result<Vec<i32>, std::num::ParseIntError> {
+ self.input.iter().map(|line| line.parse()).collect()
+ }
+}
+
+pub fn parse_space_separated_ints(line: &String) -> Result<Vec<i32>, std::num::ParseIntError> {
+ line.split_whitespace()
+ .map(|x| x.parse::<i32>())
+ .collect()
+}
+
+
+#[derive(Hash, Eq, PartialEq, Debug, Clone, Copy)]
+pub struct Point {
+ pub x: i32,
+ pub y: i32
+}
+
+impl Point {
+ pub fn up(&self) -> Point {
+ Point {
+ y: self.y-1,
+ ..*self
+ }
+ }
+
+ pub fn down(&self) -> Point {
+ Point {
+ y: self.y+1,
+ ..*self
+ }
+ }
+
+ pub fn left(&self) -> Point {
+ Point {
+ x: self.x-1,
+ ..*self
+ }
+ }
+
+ pub fn right(&self) -> Point {
+ Point {
+ x: self.x+1,
+ ..*self
+ }
+ }
+
+ pub fn shift(&self, dir: &Direction) -> Point {
+ use Direction::*;
+
+ match *dir {
+ Right => self.right(),
+ Left => self.left(),
+ Up => self.up(),
+ Down => self.down()
+ }
+ }
+}
+
+#[derive(Debug)]
+pub enum Direction {
+ Left,
+ Up,
+ Down,
+ Right
+}
+
+impl Direction {
+ pub fn rotate_left(&self) -> Direction {
+ use Direction::*;
+ match *self {
+ Right => Up,
+ Up => Left,
+ Left => Down,
+ Down => Right
+ }
+ }
+
+ pub fn rotate_right(&self) -> Direction {
+ use Direction::*;
+ match *self {
+ Right => Down,
+ Up => Right,
+ Left => Up,
+ Down => Left
+ }
+ }
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+pub struct Point3d {
+ pub x: i32,
+ pub y: i32,
+ pub z: i32
+}
+
+impl std::ops::Add for Point3d {
+ type Output = Point3d;
+
+ fn add(self, other: Point3d) -> Point3d {
+ Point3d {
+ x: self.x + other.x,
+ y: self.y + other.y,
+ z: self.z + other.z
+ }
+ }
+
+}
+
+impl Point3d {
+ pub fn manhattan_distance(&self) -> i32 {
+ self.x.abs() + self.y.abs() + self.z.abs()
+ }
+}
+
+pub fn knot_hash(input: &String) -> String {
+ let suffix: [usize; 5] = [17, 31, 73, 47, 23];
+ let lengths: Vec<usize> = input.as_bytes()
+ .iter().map(|&x| x as usize)
+ .chain(suffix.iter().cloned())
+ .collect();
+
+ let mut position = 0;
+ let mut list: Vec<u32> = (0..256).collect();
+
+ for i in 0..64 {
+ let skip = lengths.len() * i;
+ knot_hash_round(&mut list, &lengths, &mut position, skip);
+ }
+
+ let mut current_char = 0;
+ let mut result = String::new();
+ for (i, l) in list.iter().enumerate() {
+ current_char = current_char ^ l;
+ if i % 16 == 15 {
+ result.push_str(&format!("{:02x}", current_char));
+ current_char = 0;
+ }
+ }
+ result
+}
+
+fn knot_hash_round(list: &mut Vec<u32>, lengths: &Vec<usize>, position: &mut usize, skip: usize) {
+ for (inner_skip, &length) in lengths.iter().enumerate() {
+ knot_hash_reverse_segment(list, *position, length);
+ *position = (*position + length + skip + inner_skip) % list.len();
+ }
+}
+
+fn knot_hash_reverse_segment(list: &mut Vec<u32>, position: usize, length: usize) {
+ let mut a = position;
+ let mut b = position + length - 1;
+ let len = list.len();
+ while a < b {
+ list.swap(a%len, b%len);
+
+ a += 1;
+ b -= 1;
+ }
+}
+
diff --git a/2018/Cargo.toml b/2018/Cargo.toml
new file mode 100644
index 0000000..b1342d1
--- /dev/null
+++ b/2018/Cargo.toml
@@ -0,0 +1,11 @@
+[package]
+name = "advent_of_code_2018"
+version = "0.1.0"
+authors = ["Justin Worthe <justin@worthe-it.co.za>"]
+
+[dependencies]
+im-rc = "12.2.0"
+arrayvec = "0.4.9"
+
+[profile.release]
+debug = true
diff --git a/2018/inputs/1.txt b/2018/inputs/1.txt
new file mode 100644
index 0000000..079567f
--- /dev/null
+++ b/2018/inputs/1.txt
@@ -0,0 +1,968 @@
++11
++9
++15
+-17
++8
++16
++5
++13
++8
+-6
++12
+-17
+-16
++13
++16
+-15
+-5
++11
++19
++5
+-8
++20
++18
++15
+-4
+-12
++8
++2
++15
++12
+-13
+-4
+-1
+-14
+-15
+-6
+-9
+-13
++18
++13
++6
+-8
+-3
+-19
++8
++17
++8
++5
+-11
++15
+-7
++9
+-18
+-9
++17
+-14
+-19
++4
+-6
++4
++1
+-12
++4
+-1
+-9
++4
++19
++20
++11
++8
++19
+-13
++17
++6
++8
+-11
++5
++9
+-15
++17
+-12
++6
+-19
+-2
++17
+-18
++7
+-5
++19
++15
++5
+-6
++2
++5
++18
++11
++2
++5
+-14
++17
++17
++1
++17
+-9
+-1
++5
+-11
++5
+-17
++2
++14
++16
+-3
++17
++18
++1
+-16
++19
+-11
+-10
++3
++8
++17
++19
+-18
++6
+-1
+-2
++14
+-2
++12
++11
++1
+-19
+-1
++18
++13
+-6
+-10
+-13
++12
+-11
++19
++14
++17
+-2
+-18
+-4
++11
+-12
+-2
+-21
++7
+-1
+-5
+-13
+-18
+-18
+-7
++9
++12
++6
+-12
++20
+-19
++6
+-19
++3
+-16
++20
+-17
+-8
++4
++8
+-21
++18
+-6
+-13
++2
++5
+-14
+-16
+-19
+-17
++4
+-15
+-11
+-3
++6
++13
++18
+-16
+-16
+-15
+-15
+-2
++1
+-3
++13
++25
++1
++14
+-8
+-8
+-19
++7
++11
++20
++5
+-9
++8
++19
+-9
++3
++1
++1
+-12
++18
++15
+-5
++11
+-1
++18
+-2
+-18
+-14
+-1
+-16
++12
++12
+-20
++10
++25
+-13
+-17
+-20
+-13
++11
+-40
+-19
++5
+-21
+-9
+-15
+-6
++3
++13
+-5
+-2
++33
++3
+-7
++42
++32
+-13
++2
++37
+-1
+-20
++30
++3
++8
++10
++11
+-5
+-26
++35
++16
+-12
++9
++16
++18
+-13
+-15
++19
++6
++18
++16
++11
++16
+-2
+-10
++1
+-2
++17
++7
+-1
++17
++6
++15
++7
+-5
+-6
++9
+-4
+-17
+-14
+-1
+-21
+-2
++15
++3
++8
+-18
+-17
+-14
++6
+-17
++20
++13
++14
+-1
+-1
++3
+-11
++19
++19
++7
+-18
+-9
++11
+-12
++11
++4
++2
++8
+-2
++6
+-20
++5
++6
+-13
+-8
++6
++11
++8
++2
++7
++11
+-7
++18
++11
++15
+-16
+-18
++6
++10
++6
++15
++13
++4
++4
++14
++14
+-47
++17
+-7
+-20
+-1
++19
++16
+-23
+-13
+-17
++13
+-8
++6
+-20
++4
++15
++4
++19
++19
+-7
+-24
+-17
+-19
+-2
++19
+-13
++8
+-4
+-19
+-9
++29
++21
+-29
++2
++15
++22
++1
++21
+-13
+-14
++12
+-57
+-5
+-49
+-10
+-19
+-19
+-6
++7
++21
+-12
+-13
+-13
++4
+-15
++9
++21
+-7
++19
++32
++31
+-27
+-21
++25
+-101
++69
+-75
++26
+-22
+-45
+-30
++5
+-40
+-15
+-880
+-60727
++14
+-13
+-18
++7
++2
+-5
++6
++14
++5
++5
+-18
+-15
+-9
++7
+-10
++19
++4
++7
++6
++3
++21
++2
++5
+-19
++15
+-11
+-19
+-7
+-1
+-16
++4
+-12
+-15
++3
++5
+-6
+-14
++11
+-16
+-7
+-15
++8
++12
+-2
+-9
+-12
+-17
++19
+-5
+-19
++16
+-10
+-13
+-14
+-1
+-10
+-18
+-6
+-11
++8
+-11
++4
++14
++9
++8
+-18
+-9
++8
+-19
+-5
+-14
++13
++19
++13
++16
++19
+-4
+-4
++3
++19
+-4
+-7
+-15
++6
+-9
+-15
++12
+-14
++6
+-17
++9
++13
+-4
+-20
++17
+-9
+-12
++16
++6
+-9
++19
++10
++11
++17
+-19
+-1
++12
++12
++1
+-6
+-1
++4
+-12
++11
+-14
++19
+-3
+-9
+-6
+-23
+-2
+-13
++18
+-2
++10
++2
++8
+-9
+-20
+-17
+-21
+-14
++11
+-5
+-15
++2
+-9
++4
+-7
+-12
++9
+-1
+-11
++1
+-10
++11
+-17
+-10
+-17
+-3
+-10
++11
++15
+-19
+-14
++1
++2
++18
++17
++3
++17
+-18
+-15
++2
+-3
+-14
++9
++9
++6
+-18
++13
+-21
+-18
++12
++7
++13
+-11
++20
++12
++1
++15
+-14
++4
++11
++18
+-2
+-7
+-12
+-11
++5
++10
++6
++8
++18
++6
+-13
++19
+-5
+-3
++14
+-3
+-20
+-3
+-3
++16
+-15
+-12
++8
+-24
+-16
+-13
+-3
++13
++6
+-12
+-31
++7
+-18
++17
+-13
++1
+-15
++16
++4
+-1
+-17
+-1
++16
+-4
++13
++8
++3
++33
++8
+-6
++20
+-4
++2
++13
+-29
+-17
+-22
+-24
+-5
++2
+-12
+-1
++2
+-15
++2
+-11
++6
++1
+-2
++5
++4
+-22
++5
++19
+-13
+-7
++16
++6
++2
+-22
++19
++9
++8
+-9
+-12
+-18
+-13
++1
++5
+-9
++10
+-11
+-10
++16
+-15
+-2
+-16
++1
+-15
+-17
+-3
++6
++11
++4
++11
+-16
+-3
++6
+-1
++13
++18
++6
+-2
+-6
+-4
+-5
++20
++19
+-8
++1
+-13
++16
++1
++10
+-25
+-19
+-4
++9
+-8
++17
++6
+-19
+-2
++5
++12
++7
+-21
+-12
++3
+-7
+-11
+-3
+-18
++2
++12
++20
+-23
+-19
+-17
++9
+-19
++1
+-14
+-5
+-4
+-9
++17
++4
++3
++15
+-13
++1
+-12
+-17
++8
++8
+-20
+-17
++15
+-16
++10
++7
++2
+-10
+-2
++8
++19
+-6
+-17
+-8
++9
++17
++25
+-5
+-18
++4
++18
++9
++18
+-14
+-2
++11
++14
+-17
+-15
++38
++12
+-2
++14
++4
++21
++16
++12
++15
++23
+-1
++6
++9
+-24
+-6
+-13
+-3
++33
+-13
++62
++81
++11
+-5
+-27
++9
+-7
++20
+-19
+-4
++27
++28
+-29
++82
++11
+-10
++8
+-22
++42
++34
+-24
+-15
++19
+-66
+-70
+-34
+-18
+-548
++408
+-1249
+-60542
++6
+-17
+-4
++6
+-7
++3
++14
++2
++15
+-6
+-5
++19
+-17
+-10
++6
+-11
++2
+-4
++10
+-5
+-11
+-13
+-12
+-14
+-10
+-9
++17
++9
++15
++1
+-10
+-10
++14
++16
+-17
+-15
++7
+-6
+-16
+-10
++15
+-2
+-7
+-3
+-5
+-14
+-8
+-9
++16
++7
++17
+-22
++12
+-16
++18
++5
++15
++10
++20
++11
+-5
++12
+-16
++8
+-16
++13
++14
+-5
+-12
+-9
+-16
+-5
++16
+-18
++21
+-9
+-13
+-8
+-10
++14
++18
+-17
+-16
++8
+-15
++2
+-4
++3
+-21
++17
+-16
++18
++18
+-3
+-21
++1
+-19
+-3
+-2
+-4
+-5
+-20
+-19
++6
+-19
++3
+-12
++124236
diff --git a/2018/inputs/10.txt b/2018/inputs/10.txt
new file mode 100644
index 0000000..3c77538
--- /dev/null
+++ b/2018/inputs/10.txt
@@ -0,0 +1,369 @@
+position=<-30052, -9918> velocity=< 3, 1>
+position=< 20349, -50260> velocity=<-2, 5>
+position=< 40505, -40169> velocity=<-4, 4>
+position=< 30444, 50599> velocity=<-3, -5>
+position=< 40549, -50259> velocity=<-4, 5>
+position=< 30454, -30087> velocity=<-3, 3>
+position=< 50623, 20347> velocity=<-5, -2>
+position=< 30439, -50262> velocity=<-3, 5>
+position=< 50623, 40516> velocity=<-5, -4>
+position=<-40143, -30090> velocity=< 4, 3>
+position=< 50594, 50602> velocity=<-5, -5>
+position=< -9884, -30087> velocity=< 1, 3>
+position=<-19958, -40168> velocity=< 2, 4>
+position=< 20357, 40513> velocity=<-2, -4>
+position=<-50240, 30431> velocity=< 5, -3>
+position=< 20351, 40516> velocity=<-2, -4>
+position=<-50257, -20005> velocity=< 5, 2>
+position=<-30073, 10253> velocity=< 3, -1>
+position=<-50265, 50597> velocity=< 5, -5>
+position=<-40154, 50601> velocity=< 4, -5>
+position=<-19987, -40168> velocity=< 2, 4>
+position=<-19987, -30087> velocity=< 2, 3>
+position=<-50257, 30425> velocity=< 5, -3>
+position=< 40558, 30425> velocity=<-4, -3>
+position=<-19990, 10256> velocity=< 2, -1>
+position=<-19979, 30425> velocity=< 2, -3>
+position=<-19976, -50254> velocity=< 2, 5>
+position=< 30446, -40172> velocity=<-3, 4>
+position=<-40157, 40515> velocity=< 4, -4>
+position=<-40143, 20342> velocity=< 4, -2>
+position=< 30467, -50255> velocity=<-3, 5>
+position=<-30040, 50606> velocity=< 3, -5>
+position=<-30037, 50605> velocity=< 3, -5>
+position=< 20382, -30086> velocity=<-2, 3>
+position=< 50594, 10262> velocity=<-5, -1>
+position=< 20342, 40515> velocity=<-2, -4>
+position=<-19963, -50258> velocity=< 2, 5>
+position=<-40135, 50599> velocity=< 4, -5>
+position=< 40558, 10262> velocity=<-4, -1>
+position=< 20366, -40177> velocity=<-2, 4>
+position=< -9888, -9919> velocity=< 1, 1>
+position=<-19998, 40511> velocity=< 2, -4>
+position=< 50608, 40516> velocity=<-5, -4>
+position=< 10263, 40520> velocity=<-1, -4>
+position=< 40521, -40171> velocity=<-4, 4>
+position=< 30427, -20005> velocity=<-3, 2>
+position=< 20333, -9916> velocity=<-2, 1>
+position=< -9909, -9913> velocity=< 1, 1>
+position=< 50628, 40511> velocity=<-5, -4>
+position=< 50610, 30430> velocity=<-5, -3>
+position=<-50248, 30433> velocity=< 5, -3>
+position=< 50612, 50599> velocity=<-5, -5>
+position=<-50253, -40170> velocity=< 5, 4>
+position=< -9880, 40513> velocity=< 1, -4>
+position=< 20362, 10256> velocity=<-2, -1>
+position=< -9877, -30087> velocity=< 1, 3>
+position=<-40182, -30082> velocity=< 4, 3>
+position=<-50240, -20003> velocity=< 5, 2>
+position=<-40138, 10255> velocity=< 4, -1>
+position=<-50221, 20348> velocity=< 5, -2>
+position=< -9896, -9917> velocity=< 1, 1>
+position=<-50209, 40516> velocity=< 5, -4>
+position=< 20352, 50602> velocity=<-2, -5>
+position=< 50607, -19998> velocity=<-5, 2>
+position=<-19995, -30087> velocity=< 2, 3>
+position=<-20003, 40517> velocity=< 2, -4>
+position=<-50219, 30431> velocity=< 5, -3>
+position=< 40521, -20001> velocity=<-4, 2>
+position=<-30036, 20339> velocity=< 3, -2>
+position=< 50624, 10257> velocity=<-5, -1>
+position=<-50224, 40517> velocity=< 5, -4>
+position=< -9907, 20344> velocity=< 1, -2>
+position=< 40534, -40169> velocity=<-4, 4>
+position=<-30065, -20003> velocity=< 3, 2>
+position=< -9922, 20339> velocity=< 1, -2>
+position=<-30052, 50602> velocity=< 3, -5>
+position=< 10276, -50263> velocity=<-1, 5>
+position=< 50594, 10258> velocity=<-5, -1>
+position=< -9876, 10258> velocity=< 1, -1>
+position=<-20001, -30091> velocity=< 2, 3>
+position=<-50253, 50602> velocity=< 5, -5>
+position=<-40159, -20002> velocity=< 4, 2>
+position=<-50224, -30091> velocity=< 5, 3>
+position=<-20001, 40511> velocity=< 2, -4>
+position=< 20357, -40173> velocity=<-2, 4>
+position=< 50615, 10255> velocity=<-5, -1>
+position=< -9877, -50254> velocity=< 1, 5>
+position=< 30440, 40516> velocity=<-3, -4>
+position=< 30427, 50605> velocity=<-3, -5>
+position=< 30419, -30090> velocity=<-3, 3>
+position=< 20376, -20001> velocity=<-2, 2>
+position=< 10255, 20344> velocity=<-1, -2>
+position=< 30419, 20344> velocity=<-3, -2>
+position=< 50595, -40169> velocity=<-5, 4>
+position=<-30081, 40513> velocity=< 3, -4>
+position=<-40143, -30090> velocity=< 4, 3>
+position=< 40553, 20344> velocity=<-4, -2>
+position=< 40529, -40170> velocity=<-4, 4>
+position=< 30427, -50262> velocity=<-3, 5>
+position=<-50240, -19996> velocity=< 5, 2>
+position=<-50245, -30090> velocity=< 5, 3>
+position=< 30448, -30087> velocity=<-3, 3>
+position=< -9875, -40171> velocity=< 1, 4>
+position=< -9900, 50599> velocity=< 1, -5>
+position=<-19954, -40168> velocity=< 2, 4>
+position=< 40526, 40518> velocity=<-4, -4>
+position=<-20011, 30428> velocity=< 2, -3>
+position=< 10283, 10257> velocity=<-1, -1>
+position=<-40175, 40520> velocity=< 4, -4>
+position=< 50636, -9915> velocity=<-5, 1>
+position=< -9904, 10255> velocity=< 1, -1>
+position=< 30435, 40520> velocity=<-3, -4>
+position=< 30424, -50254> velocity=<-3, 5>
+position=< 20393, 50602> velocity=<-2, -5>
+position=<-50261, -30083> velocity=< 5, 3>
+position=<-30065, 10254> velocity=< 3, -1>
+position=<-30052, -40177> velocity=< 3, 4>
+position=< 50625, -50263> velocity=<-5, 5>
+position=<-40142, -20001> velocity=< 4, 2>
+position=< 20338, -19996> velocity=<-2, 2>
+position=< 50599, 50604> velocity=<-5, -5>
+position=< 40534, -40176> velocity=<-4, 4>
+position=<-50235, 20339> velocity=< 5, -2>
+position=<-30068, -9918> velocity=< 3, 1>
+position=<-40173, 20339> velocity=< 4, -2>
+position=<-30054, -9915> velocity=< 3, 1>
+position=< 10255, 20348> velocity=<-1, -2>
+position=<-40162, 40520> velocity=< 4, -4>
+position=<-40158, -9918> velocity=< 4, 1>
+position=< 40508, 20348> velocity=<-4, -2>
+position=< 10307, -40177> velocity=<-1, 4>
+position=< 40545, -50261> velocity=<-4, 5>
+position=<-30073, -40172> velocity=< 3, 4>
+position=<-50209, -9918> velocity=< 5, 1>
+position=< -9913, 40515> velocity=< 1, -4>
+position=< -9873, -50262> velocity=< 1, 5>
+position=< -9877, 10261> velocity=< 1, -1>
+position=<-50245, -30084> velocity=< 5, 3>
+position=< 30440, 50606> velocity=<-3, -5>
+position=<-40167, 40514> velocity=< 4, -4>
+position=<-30076, -50255> velocity=< 3, 5>
+position=< -9891, -19996> velocity=< 1, 2>
+position=< -9877, 20340> velocity=< 1, -2>
+position=< 20365, -9911> velocity=<-2, 1>
+position=<-50256, 10253> velocity=< 5, -1>
+position=< -9909, -19996> velocity=< 1, 2>
+position=< 30479, -9919> velocity=<-3, 1>
+position=<-30065, 10257> velocity=< 3, -1>
+position=< 50652, -9919> velocity=<-5, 1>
+position=< 20338, -9914> velocity=<-2, 1>
+position=<-30062, 20339> velocity=< 3, -2>
+position=< 20360, 10259> velocity=<-2, -1>
+position=< 40537, 50604> velocity=<-4, -5>
+position=<-50221, 50603> velocity=< 5, -5>
+position=< 40505, -30090> velocity=<-4, 3>
+position=< -9890, 20339> velocity=< 1, -2>
+position=<-30097, -50261> velocity=< 3, 5>
+position=<-19995, -30086> velocity=< 2, 3>
+position=< 20341, 10255> velocity=<-2, -1>
+position=<-19977, -20005> velocity=< 2, 2>
+position=<-30053, -50259> velocity=< 3, 5>
+position=<-30065, -40173> velocity=< 3, 4>
+position=< 50617, 50601> velocity=<-5, -5>
+position=< 50631, -40171> velocity=<-5, 4>
+position=< -9925, -9915> velocity=< 1, 1>
+position=<-40150, 10262> velocity=< 4, -1>
+position=< 40526, 40516> velocity=<-4, -4>
+position=<-30055, -9915> velocity=< 3, 1>
+position=<-50264, 30432> velocity=< 5, -3>
+position=< 10287, -20003> velocity=<-1, 2>
+position=< 40534, 20348> velocity=<-4, -2>
+position=<-19960, -19998> velocity=< 2, 2>
+position=< 30464, -40173> velocity=<-3, 4>
+position=<-50220, -50259> velocity=< 5, 5>
+position=< 40537, -9919> velocity=<-4, 1>
+position=< 20357, 20346> velocity=<-2, -2>
+position=< 40510, 50598> velocity=<-4, -5>
+position=< 50607, -40172> velocity=<-5, 4>
+position=< 40537, -19996> velocity=<-4, 2>
+position=< 50636, 10261> velocity=<-5, -1>
+position=< -9896, 30425> velocity=< 1, -3>
+position=< -9917, 10255> velocity=< 1, -1>
+position=<-50248, 50606> velocity=< 5, -5>
+position=<-50237, -9919> velocity=< 5, 1>
+position=<-30073, -20005> velocity=< 3, 2>
+position=< 40529, 50606> velocity=<-4, -5>
+position=< 50650, -30082> velocity=<-5, 3>
+position=<-30093, 10258> velocity=< 3, -1>
+position=< 30456, -40177> velocity=<-3, 4>
+position=< 40521, -40170> velocity=<-4, 4>
+position=< 30468, 10257> velocity=<-3, -1>
+position=< 10276, -50261> velocity=<-1, 5>
+position=< 30421, -9919> velocity=<-3, 1>
+position=< -9877, 20346> velocity=< 1, -2>
+position=< 10258, -40177> velocity=<-1, 4>
+position=<-50264, 40516> velocity=< 5, -4>
+position=< -9883, -40173> velocity=< 1, 4>
+position=<-40127, -50256> velocity=< 4, 5>
+position=< -9885, 20343> velocity=< 1, -2>
+position=< 20382, -9914> velocity=<-2, 1>
+position=<-30076, -19998> velocity=< 3, 2>
+position=<-30073, 50601> velocity=< 3, -5>
+position=< -9893, 20345> velocity=< 1, -2>
+position=< -9904, 10258> velocity=< 1, -1>
+position=< 20393, -40171> velocity=<-2, 4>
+position=<-19984, 50603> velocity=< 2, -5>
+position=< -9889, 20343> velocity=< 1, -2>
+position=<-19982, 40512> velocity=< 2, -4>
+position=<-20009, -40168> velocity=< 2, 4>
+position=<-30069, -19997> velocity=< 3, 2>
+position=<-19987, -30085> velocity=< 2, 3>
+position=< 10252, 10259> velocity=<-1, -1>
+position=< -9917, 30428> velocity=< 1, -3>
+position=< 10287, 20342> velocity=<-1, -2>
+position=<-50245, -20000> velocity=< 5, 2>
+position=<-40165, -40177> velocity=< 4, 4>
+position=<-40135, -50262> velocity=< 4, 5>
+position=<-19984, -30085> velocity=< 2, 3>
+position=< 30428, -30091> velocity=<-3, 3>
+position=<-30089, 30431> velocity=< 3, -3>
+position=< 30467, 20344> velocity=<-3, -2>
+position=<-19987, 40520> velocity=< 2, -4>
+position=<-30037, 40512> velocity=< 3, -4>
+position=< 40557, -50255> velocity=<-4, 5>
+position=< 40550, 10254> velocity=<-4, -1>
+position=<-40159, 10258> velocity=< 4, -1>
+position=< 40539, 20343> velocity=<-4, -2>
+position=< 30440, 50605> velocity=<-3, -5>
+position=< 30453, 30434> velocity=<-3, -3>
+position=< 40550, -30088> velocity=<-4, 3>
+position=<-40151, 10256> velocity=< 4, -1>
+position=< 10276, 40514> velocity=<-1, -4>
+position=< 10280, 20348> velocity=<-1, -2>
+position=<-20009, -30091> velocity=< 2, 3>
+position=< 30467, 50601> velocity=<-3, -5>
+position=< 30439, -20000> velocity=<-3, 2>
+position=< 10276, -20005> velocity=<-1, 2>
+position=< 40562, -30082> velocity=<-4, 3>
+position=<-19986, -20004> velocity=< 2, 2>
+position=< 20333, 10259> velocity=<-2, -1>
+position=<-50224, -9911> velocity=< 5, 1>
+position=< -9872, -9919> velocity=< 1, 1>
+position=< 10295, -30085> velocity=<-1, 3>
+position=<-19990, 30429> velocity=< 2, -3>
+position=< 10295, -30084> velocity=<-1, 3>
+position=< 30429, 40515> velocity=<-3, -4>
+position=< 20365, -30086> velocity=<-2, 3>
+position=< 50618, 10258> velocity=<-5, -1>
+position=<-20010, -9910> velocity=< 2, 1>
+position=< 20373, -40169> velocity=<-2, 4>
+position=< 10307, -50261> velocity=<-1, 5>
+position=< 20381, 10256> velocity=<-2, -1>
+position=< 40513, 40517> velocity=<-4, -4>
+position=< -9865, 20345> velocity=< 1, -2>
+position=< -9909, 20347> velocity=< 1, -2>
+position=< 10284, 20348> velocity=<-1, -2>
+position=<-30073, 20342> velocity=< 3, -2>
+position=<-30078, 30425> velocity=< 3, -3>
+position=< -9899, 20342> velocity=< 1, -2>
+position=< 20333, 30429> velocity=<-2, -3>
+position=< 10306, 10253> velocity=<-1, -1>
+position=<-50261, 10260> velocity=< 5, -1>
+position=< 30459, -9912> velocity=<-3, 1>
+position=< 10292, -40176> velocity=<-1, 4>
+position=< 20389, -30083> velocity=<-2, 3>
+position=<-40166, 20340> velocity=< 4, -2>
+position=< -9901, 20345> velocity=< 1, -2>
+position=< 40557, -20004> velocity=<-4, 2>
+position=<-40158, -30090> velocity=< 4, 3>
+position=<-50209, 10255> velocity=< 5, -1>
+position=<-50265, -40172> velocity=< 5, 4>
+position=<-50245, 50605> velocity=< 5, -5>
+position=< 30443, -40177> velocity=<-3, 4>
+position=< -9916, 20339> velocity=< 1, -2>
+position=< 50640, 50601> velocity=<-5, -5>
+position=<-19971, -20005> velocity=< 2, 2>
+position=< 40522, -9914> velocity=<-4, 1>
+position=< 50607, -19999> velocity=<-5, 2>
+position=<-50243, 40515> velocity=< 5, -4>
+position=<-50240, 10260> velocity=< 5, -1>
+position=< 40561, -19998> velocity=<-4, 2>
+position=<-50211, -50254> velocity=< 5, 5>
+position=<-40143, 30431> velocity=< 4, -3>
+position=< 30430, -50259> velocity=<-3, 5>
+position=< 30479, -20002> velocity=<-3, 2>
+position=<-30092, 20344> velocity=< 3, -2>
+position=<-30092, -40168> velocity=< 3, 4>
+position=< 50601, 10257> velocity=<-5, -1>
+position=< 20373, 40515> velocity=<-2, -4>
+position=< 30479, -19997> velocity=<-3, 2>
+position=<-40175, 50605> velocity=< 4, -5>
+position=< -9880, -40173> velocity=< 1, 4>
+position=< 20349, -50255> velocity=<-2, 5>
+position=< 20362, -9914> velocity=<-2, 1>
+position=<-30089, 50601> velocity=< 3, -5>
+position=< 30467, 10253> velocity=<-3, -1>
+position=< 40565, 30429> velocity=<-4, -3>
+position=<-40142, 10257> velocity=< 4, -1>
+position=< 50609, -50263> velocity=<-5, 5>
+position=< -9881, -40173> velocity=< 1, 4>
+position=< 50639, 40515> velocity=<-5, -4>
+position=<-50269, -40170> velocity=< 5, 4>
+position=< 40553, -9910> velocity=<-4, 1>
+position=< 30455, 30434> velocity=<-3, -3>
+position=< 20362, 10258> velocity=<-2, -1>
+position=< 40505, 50603> velocity=<-4, -5>
+position=<-19990, 10260> velocity=< 2, -1>
+position=< 30447, -19998> velocity=<-3, 2>
+position=<-40150, -30087> velocity=< 4, 3>
+position=< -9907, -40172> velocity=< 1, 4>
+position=<-30044, 20348> velocity=< 3, -2>
+position=<-40178, -9913> velocity=< 4, 1>
+position=<-50261, 30428> velocity=< 5, -3>
+position=<-40151, 20348> velocity=< 4, -2>
+position=<-50224, 30432> velocity=< 5, -3>
+position=< 50652, -50263> velocity=<-5, 5>
+position=<-19952, 50606> velocity=< 2, -5>
+position=< 30431, 40511> velocity=<-3, -4>
+position=< 30459, -30088> velocity=<-3, 3>
+position=< 50651, 20347> velocity=<-5, -2>
+position=< 10292, -30082> velocity=<-1, 3>
+position=< 20366, 10257> velocity=<-2, -1>
+position=<-19987, -9913> velocity=< 2, 1>
+position=< -9865, -40170> velocity=< 1, 4>
+position=< -9889, 50597> velocity=< 1, -5>
+position=<-30065, -50262> velocity=< 3, 5>
+position=< -9921, 20347> velocity=< 1, -2>
+position=<-30084, 10253> velocity=< 3, -1>
+position=< 10248, -20005> velocity=<-1, 2>
+position=< 20345, -9915> velocity=<-2, 1>
+position=< -9882, -9915> velocity=< 1, 1>
+position=<-30065, 50602> velocity=< 3, -5>
+position=< 40565, 50599> velocity=<-4, -5>
+position=< 20349, -50261> velocity=<-2, 5>
+position=<-19960, -19998> velocity=< 2, 2>
+position=< 10255, -50258> velocity=<-1, 5>
+position=< -9901, -50255> velocity=< 1, 5>
+position=<-50219, -9916> velocity=< 5, 1>
+position=< 40524, -30086> velocity=<-4, 3>
+position=< 40550, 50600> velocity=<-4, -5>
+position=<-50233, -30091> velocity=< 5, 3>
+position=< 30440, -50257> velocity=<-3, 5>
+position=< -9920, 50605> velocity=< 1, -5>
+position=< 40507, 20339> velocity=<-4, -2>
+position=< 10264, 30426> velocity=<-1, -3>
+position=< 40556, 20341> velocity=<-4, -2>
+position=< -9875, -9913> velocity=< 1, 1>
+position=<-30068, -50254> velocity=< 3, 5>
+position=< -9889, 30425> velocity=< 1, -3>
+position=<-20011, -40172> velocity=< 2, 4>
+position=<-50269, 10259> velocity=< 5, -1>
+position=<-40132, 30432> velocity=< 4, -3>
+position=< 40553, -9913> velocity=<-4, 1>
+position=<-30073, 10256> velocity=< 3, -1>
+position=<-30092, 20340> velocity=< 3, -2>
+position=< 40542, 50606> velocity=<-4, -5>
+position=<-50224, 20347> velocity=< 5, -2>
+position=<-40143, 50606> velocity=< 4, -5>
+position=<-19971, -20000> velocity=< 2, 2>
+position=< 40553, 20340> velocity=<-4, -2>
+position=<-30081, -20001> velocity=< 3, 2>
+position=<-30037, -40172> velocity=< 3, 4>
+position=< -9865, 30428> velocity=< 1, -3>
+position=< 30479, 20340> velocity=<-3, -2>
+position=< 30429, 20343> velocity=<-3, -2>
+position=<-19971, -40172> velocity=< 2, 4>
+position=< 30431, 50601> velocity=<-3, -5>
+position=<-19982, 10256> velocity=< 2, -1>
+position=< 20344, 20343> velocity=<-2, -2>
diff --git a/2018/inputs/12.txt b/2018/inputs/12.txt
new file mode 100644
index 0000000..6d801ae
--- /dev/null
+++ b/2018/inputs/12.txt
@@ -0,0 +1,34 @@
+initial state: ###..#...####.#..###.....####.######.....##.#####.##.##..###....#....##...##...##.#..###..#.#...#..#
+
+.###. => .
+..#.. => .
+.#### => .
+.##.. => #
+#.#.# => .
+..#.# => #
+#.##. => #
+#...# => #
+..... => .
+##..# => #
+.#.#. => .
+..##. => #
+##.#. => .
+###.. => .
+.#... => #
+..### => .
+#..## => .
+...#. => .
+###.# => #
+.##.# => .
+.#.## => .
+....# => .
+##### => .
+#.#.. => #
+...## => #
+#.... => .
+#.### => #
+##... => #
+.#..# => .
+####. => .
+#..#. => #
+##.## => #
diff --git a/2018/inputs/13.txt b/2018/inputs/13.txt
new file mode 100644
index 0000000..a2195f8
--- /dev/null
+++ b/2018/inputs/13.txt
@@ -0,0 +1,150 @@
+ /----------------------------------------------------\ /----------------------------\
+ /-------->-------\ | /----+----------+----------------------------+----------\
+ | /+-----+-----------------------------------------------+----+----------+-\ /---+-------\ |
+ | /-------++-----+-----------------------------------------------+----+----------+-+---\ | | | |
+ /--+-------+-------++-----+-----------------------------------------------+---\| | | | | | | |
+ /----------+--+-----\ | || | /----------------------------------+---++----------+-+---+----\ | | | |
+ | | | /---+-+-------++-----+------------+--------------->------------------+---++----------+-+\ | | | | | |
+ | /-----+--+-+---+-+-------++-----+------------+----------------------------------+---++---\ | || | | | | | |
+ | | | | | | | || | | /-------------------+---++---+--\ | || | | | | | |
+ /+----+-----+--+-+---+-+-------++-----+------------+\ | | || | | | || | | | | | |
+ || | /---+--+-+---+-+-------++-----+------------++-------------+-------------------+---++---+--+-\ | || | | | | | |
+ || | | | | | | | || /-+---------\ || | | || | | | | || | | | | | |
+ || | | | | | | | || | | | || | | || | | | | || | | | | | |
+ || | | | | | | ^ || | | | || | /-----+---++---+--+-+-+-++--+----+-------------+---+--\ | |
+ || | | | | | | | ||/--+-+---------+--++-------------+------->-----+-----+\ || | | | | || | | | | | | |
+ || | | | | | | | ||| | | | || /-------+-------------+-----++--++---+--+-+-+-++--+----+-------------+---+\ | | |
+ || | | | | | | | ||| |/+---------+--++-----+-------+-------------+-----++--++---+--+-+-+-++--+----+-------------+---++\| | |
+ || \-+---+--+-+---+-+-------+++--+++---------+--++-----+-------+-------------+-----++--++---/ | | | || |/---+-------------+---++++----+--+\
+ || | | | | | | ||| ||| | || | | | || || | | | || || | \---++++----/ ||
+ || | | \-+---+-+-------+/| ||| | || | | | |v || | | | || || | |||| ||
+ || | | | | | | |/-+++-----\ | || | | | || || | | | || || | |||| ||
+ || | | | | | | || ||| | | || | | | || || /----+-+-+-++--++---+-----------------++++-------++--\
+ || | /+----+---+-+-------+-++-+++-----+---+--++-\ | | | || || | | | | || || | |||| || |
+ || /--+--++----+---+-+--\ | || ||| | | || | | | /------+-----++--++-+----+-+-+-++--++---+-----------------++++--\ || |
+ || | | || | | | | | || ||| | | || | | | | /-+-----++-\|| | | | | || || | |||| | || |
+ || | | ||/---+---+-+--+----+-++-+++-----+---+--++-+---+--->---+-\ | | | || |||/+----+-+-+-++--++---+-----------------++++--+----++--+\
+ || | | ||| | | | | | || ||| | | || | | | | | | \-----++-+++++----+-+-+-++--++---+-----------------+++/ | || ||
+ || | | ||| | | | | | || ||| | | || | /+-------+-+----+----+-------++\||||| | | | || || | ||| | || ||
+ || | | ||| | | | | /+-++-+++-----+---+--++-+--++-------+-+\ /+----+-------++++++++----+-+-+-++--++---+-----------------+++-\ | || ||
+ || | | ||| /-+---+-+--+---++-++-+++-----+---+--++-+--++-------+-++--++----+------\|||||||| | | | || || | ||| | | || ||
+ || | | ||| | | | | | || || ||| | | || | || | || || | ||||||||| |/+-+-++--++---+-----------------+++-+-+\ || ||
+ || | | ||| | | | | | || || ||| | | || | || \-++--++----+------+++++++++----/|| | || /++---+------------\ ||| | || || ||
+ || | | ||| | | | | | || || ||| | | || | || /++--++----+---\ ||||||||| || | || ||| | | ||| | || || ||
+ || | | ||| | | | | | || || ||| | | || | || ||| || | | ||||||||| || | || ||\---+------------+----+++-+-++---+/ ||
+ || | | ||| | | | | | || || ||| |/--+--++-+--++-------\||| || | | ||||||||| || | || || | | ||| | || | ||
+ || | | /+++-+-+---+-+--+---++-++-+++-----++--+--++-+--++-------++++--++----+---+--+++++++++----\|| | || || | | ||| | || | ||
+ || | | |||| | | | | | || || ||\-----++--+--++-+--++-------++++--++----+---+--++++++/|| ||| | || || | | ||| | || | ||
+ || | | |||| | |/--+-+--+---++-++-++------++--+--++\| || /----++++--++----+---+--++++++-++----+++-+-++-++----+------\ | ||| | || | ||
+ || | | |||| | || | | | || || || || | |||| || | |||| || | | |||||| || ||| | || || | | | ||| | || | ||
+ || | | |||| | || | | | || || || /++--+--++++--++--+----++++--++----+---+--++++++-++----+++-+-++-++----+------+-----+----+++-+-++---+---++\
+ || | | |||| | || | | | || || || /---+++--+--++++--++--+----++++--++----+---+--++++++-++----+++-+-++-++\ | | /+----+++-+-++---+--\|||
+ || | | |||| | || | | | || || || | ||| | \+++--++--+----++++--++----+---+--++++++-++----+++-+-++-+++---/ | || ||| | || | ||||
+ || | | |||| | || | | | || || \+-+---+++--/ ||| || | |||| || | | |||||| || ||| | || ||| | || ||| | || | ||||
+ || | | |||| | || | | | || || |/+---+++------+++--++--+----++++--++\ | | |||||| || ||| | || ||| | || ||| | || | ||||
+ || | | |||| | || | | | || || ||| ||| ||| || | ||||/-+++---+---+--++++++-++----+++-+-++-+++----------+----++----+++-+\|| | ||||
+ || | | |||| \-++--+-+--+---++-++--+++---+++------+++--++--+----+++++-+++---+---+--/||||| || ||| | || ||| | || ||| |||| | ||||
+ || | | |||| || | | | || || ||| ||| ||| || | ||||| ||| | | ||||| || ||| | || ||| | || ||| |||| | ||||
+ || | | |||| || | | | || || ||| ||| /----+++--++--+----+++++-+++---+---+---+++++-++----+++-+-++-+++----------+----++---\||| |||| | ||||
+ || | /+-++++---++--+-+--+---++-++--+++---+++-+----+++--++--+----+++++-+++\ | | ||||| || ||| | || ||| | ||/--++++-++++\ | ||||
+ || |/++-++++---++--+-+--+--\|| || ||| ||\-+----+++--++--+----/\+++-++++--+---/ ||||| || ||| | || ||| | ||| |||| ||||| | ||||
+ || |||| |||| || | | | ||| || ||| || | ||| || | ||| |||| | ||||| || /-+++-+-++-+++---\ | ||| |||| ||||| | ||||
+ |\---++++-++++---++--/ | | ||| || ||| || | ||| || \------+++-++++--+-------+++++-++--+-+++-+-++-+++---+------/ ||| |||| ||||| | ||||
+ | |||| |||| || | | ||| || ||| || | ||| || ||| |||| | ||||| || | ||| | || ||| | ||| |||| ||||| | ||||
+ | |||| |||| || \--+--+++-++--+++---++--+----+++--++---------+++-++++--+-------+++++-++--+-+++-+-++-+/| | ||| |||| ||||| | ||||
+ | ||||/++++---++-------+--+++-++--+++---++--+----+++--++---------+++\|||| | ||||| || | |||/+-++-+-+---+-----------+++--++++-+++++--+\ ||||
+ | ||||||||\<--++-------+--+++-++--+++---++--+----+++--++---------/||||||| \-------+++/| || | ||||| || \-+---+-----------+/| |||| ||||| || ||||
+ | |||||||| /++------\| ||| || /+++---++--+----+++--++----------+++++++----------+++-+-++--+-+++++-++---+---+---------\ | | |||| ||||| || ||||
+ | |||||||| ||| ||/-+++-++-++++---++--+-\ ||| || ||||||| ||| | || | ||||| || | | | | | |||| ||||| || ||||
+ | |||||||| ||| ||| ||| || |||| || | | ||| || ||||||| /+++-+-++--+-+++++-++\ | | | | \--++++-++++/ || ||||
+ | |||||||| ||| ||| ||| || |||| || | | ||| || ||||||| |\++-+-++--+-+++++-+++--+---+---------+-+----++++-++++---/| ||||
+ | /--++++++++---+++------+++-+++-++-++++---++--+-+--+++\ || ||||||| | || | || | ||||| ||| | | | \----++++-++++----+-/|||
+ | | |||||||| ||| ||| ||| || |||| || | | |||| || ||||||| | || | || | ||||| ||| | |/--------+----\ |||| |||| | |||
+ | | |||||||| ||| /+++-+++-++-++++---++--+-+--++++-++----------+++++++---\ | || | || | ||||| ||| | || /------+---\| |||| |||| | |||
+ | | |||||||| ||| |||| ||| || |||| || | | |||| || /-----+++++++---+---\ | || | || | ||||| ||| |/--++-+------+---++-++++-++++----+-\|||
+ \-+--++++++++---+++-----++++-+++-++-++++---++--+-+--/||| || | ||||||| | | | || | || | ||||| ||| || || | | || |||| |||| | ||||
+ | |||||||| /-+++-----++++-+++-++-++++---++--+\| ||| || | ||||||| | | | || | || | ||||| ||| || || | | || |||| |||| | ||||
+ | |||||||| | ||| |||| ||| ||/++++---++--+++---+++-++----+-----+++++++---+---+-+-++-+-++--+-+++++-+++--++--++-+------+\ || |||| |||| | ||||
+/--+--++++++++-+-+++-----++++-+++-+++++++---++--+++---+++-++----+-----+++++++---+---+-+-++-+-++--+-+++++-+++\ || || | || || |||| |||| | ||||
+| | |||||||| | ||| ||||/+++-+++++++---++--+++---+++-++----+-----+++++++---+\ | | || | |\--+-+++++-++++-++--++-+------++--++-++++-++++----+-+/||
+| | |||||||| | ||| |||||||| ||||||| || ||| ||| || | ||||||| || | | || | | | ||||| |||| || || | || || |||| |||| | | ||
+| | |||||||| | |||/----++++++++-+++++++---++--+++---+++-++----+-----+++++++---++--+-+-++-+-+---+-+++++-++++-++\ || | || || |||| |||| | | ||
+| | |||||||| | |||| |||||||| ||||||| /-++--+++---+++-++----+-----+++++++---++--+\| || | | | ||||| |||| ||| || | || || |||| |||| | | ||
+| | |||||||| | |||| |||||||| ||||||| | || ||| ||| || | ||||||| || ||| || | | | ||||| |||| ||| || | || || |||| |||| | | ||
+| | |||\++++-+-++++----++++++++-+++++++-+-++--+++---+++-++----+-----+++++++---++--+++-++-+-+---+-++/|| |||| ||| || | || || |||| |||| | | ||
+| | ||| |||| | |||| ||||||||/+++++++-+-++\ ||| ||| || \-----+++++++---++--/|| || | | | || || |||| ||| || | || || |||| |||| | | ||
+| | ||| |||| | |||| |||||||\++++++++-+-+++-+++---+++-++----------+++++++---++---++-++-+-+---+-++-++-/||| ||| || | || || |||| |||| | | ||
+| | ||| |\++-+-++++----+++++++-++++++++-+-+++-+++---+++-++----------+++++++---++---++-++-+-+---+-/\-++--+++-+++-++-+------++--++-++++-+++/ | | ||
+| | ||| | || | |||| ||||||| |||||||| | ||| ||| ||| ^| ||||\++---++---++-++-+-+---+----++--+++-+++-++-+------++--++-++++-++/ | | ||
+| | ||| | || | |||| ||||||| ||||||\+-+-+++-+++---+++-++----------++++-/|/--++---++-++-+-+---+----++--+++-+++-++-+-\ || || |||| || | | ||
+| | ||| | || \-++++----+++++++-++++++-+-+-+++-+/| /-+++-++-------\ |||| || || || |v | v | \+--+++-+++-++-+-+----++--++-++++-++------/ | ||
+| | ||| | || |\++----+++++++-++++++-+-+-+++-+-+-+-+++-++-------+--++++--++--++---++-++-+-+---+-----+--/|| ||| || | | || || |||| || | ||
+| /+--+++-+-++---+-++----+++++++-++++++-+-+-+++-+-+-+-+++-++-------+--++++--++-\|| || || | | /+-----+---++-+++-++-+-+----++--++-++++-++-----\ | ||
+| || ||| | \+---+-++----+++++++-++++++-+-+-+++-+-+-+-+/| || | |||| || ||| || || | | || | || |\+-++-+-+----++--++-++++-++-----+--/ ||
+| || ||| | | |/++----+++++++-++++++-+-+-+++-+-+-+-+-+-++-------+--++++--++-+++---++-++-+-+--++-----+---++-+\| || | | || || |||| || | ||
+| || ||| | | |||| ||||||\-++++++-+-+-+++-+-+-+-+-+-++-------+--/||| || ||| || || | | || /---+---++-+++-++-+-+----++--++-++++-++---\ | ||
+| || ||| | /+---++++----++++++--++++++-+-+-+++-+-+-+-+-+-++-------+---+++--++-+++---++-++-+-+--++-+--\| || ||| || | | || || |||| || | | ||
+| || ||| | || /-++++----++++++\ |||||| | \-+++-+-+-+-+-+-++-------+---+++--++-+++---/| ||/+-+--++-+--++---++-+++-++-+\| || || |||| || | | ||
+| || ||\-+-++-+-++++----+++++++-++++++-+---+++-+-+-+-+-+-++-------+---+++--/| ||| | |||| | || | || || ||| || ||| || || |||| || | | ||
+| || || | |\-+-++++----+++++++-++++++-+---+++-+-+-+-+-+-++-------+---+++---+-+++----+-+++/ | || | || || ||| || ||| || || |||| || | | ||
+| || || | | | \+++----+/||||| \+++++-+---++/ | | | | | || | ||| | ||| | ||| | || | || || ||| || ||| || || |||| || | | ||
+| || || | | | |\+----+-+++++--+++++-+---++--+-+-+-/ | || | ||| | ||| | ||| | || | || || ||| || ||| || || |||| || | | ||
+| || || | | | | | | ||||| ||||| | || | | | /+-++-------+\ ||| | ||| | ||| | || | || || ||| || ||| || || |||| || | | ||
+| || || \-+--+--+-+----+-+++++--+++++-+---++--+-+-+--++-++-------++--+/| | ||| \-+++--+--++-+--++---/| ||| || ||| || || |||| || | | ||
+| || || | | | | | ||||| ||||| | || | | | || || /----++--+-+---+-+++------+++--+--++-+--++----+-+++-++-+++----++-\|| |||| || | | ||
+| || ||/---+--+-\| |/---+-+++++--+++++-+---++--+-+-+--++-++--+----++--+-+---+-+++----\ ||| | ||/+--++----+-+++-++-+++----++-+++-++++-++---+\| ||
+| || ||| | | || || | ||||| ||||| | || | | | || || | || | | | ||| | ||| \--++++--++----+-+++-++-+++----++-+++-++++-++---+++----/|
+| || ||| | | || || | ||||| ||||| | || | | | /++-++--+----++--+-+---+-+++----+-+++-----++++--++----+-+++-++-+++----++-+++\|||| || ||| |
+| || ||| ^ | || || | ||||| ||||| | || | | | ||| || | || | | | ||| | ||| |||\--++----+-+++-++-+++----++-++++++++-++---/|| |
+| || ||| | | || || | ||||| ||||| | || \-+-+-+++-++--+----++--+-+---+-+++----+-+++-----+++---++----+-+++-++-+++----++-++++/||| || || |
+| || ||| | | || || | ||||| ||||| | || | | ||| || | /-++--+-+---+-+++----+-+++-----+++---++----+-+++-++-+++--\ || |||| ||| || || |
+|/++--+++---+--+-++-++---+-+++++--+++++-+--\|| |/+-+++-++--+--+\|| | | | ||| | ||| ||| |\----+-+++-++-+++--+-++-++++-/|| || || |
+|||| ||| | | || || | ||||| ||||| | ||| /+++-+++-++--+--++++--+-+---+-+++----+-+++-----+++---+-----+-+++-++-+++--+-++-++++\ || || || |
+|||| ||| | | || || | ||||| |\+++-+--++/ |||| ||| || | |||| | | | ||| | ||| ||| | | ||| || ||| | || ||||| || || || |
+|||| ||| | | || || | ||||| |/+++-+--++---\|||| ||| || | |||| | | | ||| | ||| ||| | | ||| || ||| | || ||||| || || || |
+|||| |\+---+--+-++-++---+-+++/| ||||| | |\---+++++-+++-++--+--++++--+-+---+-+++----+-+++-----+++---+-----+-+++-++-+++--+-++-+++++-++-++----++-----/
+|||| | | | | |\-++---+-+++-+--+++++-+--+----+++++-+++-++--+--++++--+-+---+-+++----+-+++-----+++---+-----+-+/| || ||| | || ||||| || || ||
+|||| | | | | | /++---+-+++\| ||||| | | ||||| ||| || | |||| | | | ||| | ||| ||| | | | | || ||| | || ||||| || || ||
+|||| | | | /+-+-+++--\| ||||| ||||| | | ||||| ||| || | |||| | | | ||| | ||| ||| | | | | || ||| | || ||||| || || ||
+|||| | | | || | ||| || ||||| ||||| | | ||||| ||| || | |||| | | | ||| /-+-+++-----+++---+----\| | | || ||| | || ||||| || || ||
+|||| | | | || | ||| /++-+++++--+++++-+--+----+++++-+++-++--+--++++-\| | | ||| | | ||| ||\---+----++-+-+-++-+++--+-++-+++++-++-++----/|
+|||| | | | || | ||| ||| ||||| ||||| \--+----+++++-+++-++--+--++++-++-+---+-+++--+-+-+++-----++----+----++-/ | || ||| | || ||||| || || |
+|||| \-+--<+-++-+-+++-+++-/|||| ||||| | |\+++-+++-++--+--++++-++-+---+-+++--+-+-+++-----++----+----++---+-++-+++--+-++-++++/ || || |
+|||| | | || | ||| ||| |||| ||||| | | ||| ||| || | |||| |\-+---+-+++--+-+-+++-----++----+----++---+-++-+++--+-++-++++--++-+/ |
+|\++----+---+-++-+-+++-+++--++++--+++++----/ | ||| ||| \+--+--++++-+--+---+-+++--+-+-+/| |\----+----++---+-/| ||| | || |||| || | |
+| || | | || | ||| ||| |||| \++++---------+-+++-+++--+--+--++++-+--+---+-+++--+-+-/ | | | || | | ||| | || |||| || | |
+| || | | || | ||| ||| |||| |||\---------+-+++-+++--+--+--++++-+--+---+-+++--+-+---+-----+-----+----++---+--+-+++--+-++-++++--+/ | |
+| || | | || | ||| ||| |||| ||| /----+-+++-+++--+--+--++++-+--+---+-+++--+-+---+-----+--\ | || | | |||/-+-++-++++--+--+------+-\
+| |\----+---+-++-+-+++-+++--++++---+++-----+----+-+++-++/ | | |||| | \---+-+++--+-+---+-----+--+--+----++---+--+-++++-+-++-++++--+--/ | |
+| | | | || | ||| ||| |||| ||| | | ||| || | | |||| | | ||| | | | | | | || | | \+++-+-++-+/|| | | |
+| \-----+---+-++-+-+++-+++--++++---+++-----+----+-+++-++---+--+--++++-+------+-/|| | | \-----+--+--+----++---+--+--/|| | || | || | | |
+| | \-++-+-+++-+++--++++---+++-----+----+-+++-++---+--+--++++-+------+--++--+-+---------+--+--/ || | | || |/++-+-++--+---------+-+---\
+| | |\-+-+++-+++--+++/ /+++-----+----+-+++-++---+--+--++++-+------+--++--+-+---------+--+-------++---+--+>--++-++++-+-++--+-------\ | | |
+| | | | ||| ||| ||| ||\+-----+----+-+++-++---+--+--++++-+------+--++--+-+---------+--+-------++---+--+---++-+++/ | || | | | | |
+| | | | ||| ||| ||| || | | | ||| || \--+--++++-+------+--++--+-+---------+--+-------++---+--+---++-+++--+-++--/ | | | |
+| | | | ||| ||| \++---++-+-----+----+-/|| || | |||| | | || | | | | || | | || ||| | || | | | |
+| | | | \++-+++---+/ || | \----+--++-++------+--++++-+------+--++--+-+---------+--/ || | | || ||| | || | | | |
+| | | | || ||| \----++-+----------+--++-++------+--++++-+---->-+--+/ | | | || | | || ||| | || | | | |
+| | | | || \++--------++-+----------+--++-++------+--++++-/ | | | | \----------++---+--+---++-+++--+-++----------+-/ | |
+| | | | || || || | | || || | |||| | | | | /--------------++---+--+---++-+++--+-++-----\ | | |
+| | | | || || || | | || || | \+++--------+--+---+-+-----+--------------++---+--+---++-/|| | || | | | |
+| | | | || || || | | || || | ||| | | \-+-----+--------------/| | | || || | || | | | |
+| | | | || || /++-+----------+\ || \+------+---+++--------+--+-----+-----+---------------+---+--+---++--++--+-+/ | | | |
+| | | | || || |\+-+----------++-++--+------+---+++--------+--+-----+-----+---------------+---+--+---++--++--+-+------+----/ | |
+| | | | /++--++-------+-+-+----------++-++--+------+---+++-\ \--+-----+-----+---------------+---+--+---/| || | | | | |
+| | | | ||| || | | | || \+--+------+---/|| | | | | | | | | || | | | | |
+| | | | ||| || | | | |v | | | || | | | | | | | | \+--+-+------+--------+---/
+| /-+-----+--+-+++--++-------+-+-+----------++--+--+------+----++-+---------+-----+-----+---------------+\ | | | | | | | |
+| | | | | ||| |\-------+-+-+----------++--+--+------+----++-+---------/ | | || | | | | | | | |
+| | | | | ||| | | | \----------++--+--+------+----++-+---------------+-----+---------------++--+--+----+---/ | | | |
+| | | | | ||| | | | || | \------+----+/ | | | || | | | | | | |
+| | | \--+-+++--/ ^ | || | | | | | | || | | | | | | |
+| | | | ||\-----------+-+------------++--+---------+----+--+---------------/ | || | | \------+-+------+--------/
+| | | | || | | || \---------+----/ | | || | | | | |
+\-----+-+--------+-++------------+-+------------++------------+-------+---------------------+---------------/| | | | | |
+ | | | |\------------+-+------------++------------+-------+-<-------------------+----------------+--/ \-----------+-/ |
+ | | | | \-+------------+/ \-------+---------------------+----------------+-----------------/ |
+ | | | \---------------+------------+---------------------/ | | |
+ | | | \------------/ \----------------+--------------------------/
+ \-+--------+-------------------------------------------------------------------------------------------/
+ \--------/
diff --git a/2018/inputs/15.txt b/2018/inputs/15.txt
new file mode 100644
index 0000000..0bd71e0
--- /dev/null
+++ b/2018/inputs/15.txt
@@ -0,0 +1,32 @@
+################################
+#######################.########
+#######################.########
+########..#############.########
+#######.....#########....#..####
+#######.....##########......####
+######....#..########.......#..#
+#######.G...########...........#
+####..GG....G######..........###
+########....G..###..E.......#.E#
+########...G..#....G..G.....E..#
+########...G...G.G...........E.#
+####....G.....#####..E......#E.#
+####.####.#..#######....G.....##
+####.G#####.#########..........#
+####G#####..#########..........#
+####.####..E#########..........#
+####...#..#.#########.G........#
+####.....G..#########.........##
+####..G....E.#######........####
+####G.........#####...##....####
+#####G................###..E####
+#####..####...............######
+####..#####.............########
+#####.#######...........########
+#####.########.........#########
+#####.########.....E..##########
+#.....#########...#.############
+#..#############....############
+################....############
+##################.#############
+################################
diff --git a/2018/inputs/16_1.txt b/2018/inputs/16_1.txt
new file mode 100644
index 0000000..755acda
--- /dev/null
+++ b/2018/inputs/16_1.txt
@@ -0,0 +1,3143 @@
+Before: [2, 3, 2, 2]
+0 3 3 0
+After: [0, 3, 2, 2]
+
+Before: [1, 1, 2, 3]
+6 0 2 0
+After: [0, 1, 2, 3]
+
+Before: [1, 0, 2, 2]
+6 0 2 0
+After: [0, 0, 2, 2]
+
+Before: [1, 1, 1, 1]
+11 2 1 0
+After: [2, 1, 1, 1]
+
+Before: [3, 0, 0, 2]
+0 3 3 2
+After: [3, 0, 0, 2]
+
+Before: [1, 1, 2, 2]
+9 1 0 2
+After: [1, 1, 1, 2]
+
+Before: [3, 2, 1, 1]
+5 2 1 1
+After: [3, 2, 1, 1]
+
+Before: [1, 1, 0, 3]
+7 1 3 0
+After: [0, 1, 0, 3]
+
+Before: [1, 2, 1, 3]
+5 2 1 0
+After: [2, 2, 1, 3]
+
+Before: [0, 2, 2, 0]
+8 0 0 0
+After: [0, 2, 2, 0]
+
+Before: [2, 0, 0, 1]
+3 0 3 0
+After: [1, 0, 0, 1]
+
+Before: [3, 1, 2, 2]
+4 1 3 1
+After: [3, 0, 2, 2]
+
+Before: [2, 2, 1, 1]
+5 2 1 1
+After: [2, 2, 1, 1]
+
+Before: [1, 1, 2, 2]
+6 0 2 2
+After: [1, 1, 0, 2]
+
+Before: [1, 1, 1, 2]
+4 1 3 0
+After: [0, 1, 1, 2]
+
+Before: [2, 1, 3, 1]
+13 1 3 0
+After: [1, 1, 3, 1]
+
+Before: [0, 1, 2, 1]
+13 1 3 1
+After: [0, 1, 2, 1]
+
+Before: [2, 1, 0, 2]
+4 1 3 1
+After: [2, 0, 0, 2]
+
+Before: [2, 1, 0, 1]
+2 0 1 3
+After: [2, 1, 0, 1]
+
+Before: [3, 1, 2, 1]
+12 1 2 2
+After: [3, 1, 0, 1]
+
+Before: [1, 1, 3, 2]
+4 1 3 3
+After: [1, 1, 3, 0]
+
+Before: [2, 2, 1, 3]
+7 1 3 0
+After: [0, 2, 1, 3]
+
+Before: [1, 3, 2, 1]
+6 0 2 1
+After: [1, 0, 2, 1]
+
+Before: [2, 1, 2, 1]
+13 1 3 1
+After: [2, 1, 2, 1]
+
+Before: [2, 1, 3, 0]
+14 2 0 3
+After: [2, 1, 3, 1]
+
+Before: [1, 1, 2, 3]
+6 0 2 3
+After: [1, 1, 2, 0]
+
+Before: [1, 1, 1, 3]
+11 2 1 2
+After: [1, 1, 2, 3]
+
+Before: [2, 2, 3, 2]
+0 3 3 0
+After: [0, 2, 3, 2]
+
+Before: [1, 2, 0, 2]
+1 0 2 3
+After: [1, 2, 0, 0]
+
+Before: [2, 1, 0, 0]
+2 0 1 3
+After: [2, 1, 0, 1]
+
+Before: [0, 2, 1, 1]
+5 2 1 3
+After: [0, 2, 1, 2]
+
+Before: [0, 3, 2, 1]
+10 3 2 3
+After: [0, 3, 2, 1]
+
+Before: [3, 3, 2, 2]
+0 3 3 0
+After: [0, 3, 2, 2]
+
+Before: [1, 1, 2, 0]
+12 1 2 0
+After: [0, 1, 2, 0]
+
+Before: [0, 2, 1, 3]
+5 2 1 0
+After: [2, 2, 1, 3]
+
+Before: [0, 3, 2, 1]
+8 0 0 0
+After: [0, 3, 2, 1]
+
+Before: [1, 1, 1, 3]
+11 2 1 1
+After: [1, 2, 1, 3]
+
+Before: [0, 1, 1, 2]
+11 2 1 2
+After: [0, 1, 2, 2]
+
+Before: [1, 1, 1, 1]
+13 1 3 1
+After: [1, 1, 1, 1]
+
+Before: [1, 3, 0, 0]
+1 0 2 1
+After: [1, 0, 0, 0]
+
+Before: [2, 2, 3, 1]
+14 2 0 1
+After: [2, 1, 3, 1]
+
+Before: [0, 3, 0, 3]
+8 0 0 3
+After: [0, 3, 0, 0]
+
+Before: [0, 0, 1, 1]
+8 0 0 2
+After: [0, 0, 0, 1]
+
+Before: [0, 3, 2, 1]
+8 0 0 2
+After: [0, 3, 0, 1]
+
+Before: [2, 1, 2, 3]
+12 1 2 1
+After: [2, 0, 2, 3]
+
+Before: [3, 2, 2, 3]
+14 2 1 2
+After: [3, 2, 1, 3]
+
+Before: [2, 2, 3, 0]
+15 2 2 2
+After: [2, 2, 1, 0]
+
+Before: [2, 3, 3, 2]
+15 2 2 0
+After: [1, 3, 3, 2]
+
+Before: [1, 1, 0, 0]
+1 0 2 3
+After: [1, 1, 0, 0]
+
+Before: [3, 2, 2, 2]
+0 3 3 3
+After: [3, 2, 2, 0]
+
+Before: [1, 3, 2, 2]
+6 0 2 3
+After: [1, 3, 2, 0]
+
+Before: [2, 1, 0, 1]
+3 0 3 1
+After: [2, 1, 0, 1]
+
+Before: [3, 3, 1, 3]
+7 2 3 0
+After: [0, 3, 1, 3]
+
+Before: [0, 2, 1, 0]
+5 2 1 3
+After: [0, 2, 1, 2]
+
+Before: [1, 1, 1, 2]
+4 1 3 2
+After: [1, 1, 0, 2]
+
+Before: [0, 3, 1, 2]
+8 0 0 1
+After: [0, 0, 1, 2]
+
+Before: [2, 1, 3, 3]
+7 1 3 0
+After: [0, 1, 3, 3]
+
+Before: [3, 2, 2, 1]
+10 3 2 0
+After: [1, 2, 2, 1]
+
+Before: [2, 1, 0, 1]
+3 0 3 3
+After: [2, 1, 0, 1]
+
+Before: [2, 1, 1, 1]
+13 1 3 2
+After: [2, 1, 1, 1]
+
+Before: [2, 2, 0, 3]
+7 1 3 1
+After: [2, 0, 0, 3]
+
+Before: [2, 2, 0, 1]
+3 0 3 0
+After: [1, 2, 0, 1]
+
+Before: [2, 2, 3, 1]
+3 0 3 3
+After: [2, 2, 3, 1]
+
+Before: [1, 2, 0, 0]
+1 0 2 1
+After: [1, 0, 0, 0]
+
+Before: [2, 2, 2, 2]
+14 3 2 1
+After: [2, 0, 2, 2]
+
+Before: [3, 1, 1, 2]
+4 1 3 1
+After: [3, 0, 1, 2]
+
+Before: [2, 1, 1, 1]
+2 0 1 3
+After: [2, 1, 1, 1]
+
+Before: [1, 1, 0, 0]
+1 0 2 1
+After: [1, 0, 0, 0]
+
+Before: [1, 3, 0, 2]
+1 0 2 1
+After: [1, 0, 0, 2]
+
+Before: [1, 1, 1, 3]
+9 1 0 2
+After: [1, 1, 1, 3]
+
+Before: [3, 1, 2, 2]
+12 1 2 2
+After: [3, 1, 0, 2]
+
+Before: [0, 1, 2, 1]
+12 1 2 2
+After: [0, 1, 0, 1]
+
+Before: [3, 2, 0, 3]
+7 1 3 3
+After: [3, 2, 0, 0]
+
+Before: [2, 1, 2, 3]
+7 2 3 2
+After: [2, 1, 0, 3]
+
+Before: [3, 1, 3, 1]
+13 1 3 0
+After: [1, 1, 3, 1]
+
+Before: [2, 1, 1, 1]
+11 2 1 0
+After: [2, 1, 1, 1]
+
+Before: [0, 1, 1, 0]
+11 2 1 3
+After: [0, 1, 1, 2]
+
+Before: [2, 1, 3, 3]
+7 1 3 2
+After: [2, 1, 0, 3]
+
+Before: [2, 3, 2, 1]
+10 3 2 1
+After: [2, 1, 2, 1]
+
+Before: [1, 1, 2, 2]
+4 1 3 1
+After: [1, 0, 2, 2]
+
+Before: [1, 3, 0, 1]
+1 0 2 0
+After: [0, 3, 0, 1]
+
+Before: [1, 3, 0, 3]
+1 0 2 3
+After: [1, 3, 0, 0]
+
+Before: [2, 3, 3, 1]
+3 0 3 1
+After: [2, 1, 3, 1]
+
+Before: [2, 1, 1, 2]
+11 2 1 3
+After: [2, 1, 1, 2]
+
+Before: [2, 1, 1, 1]
+2 0 1 1
+After: [2, 1, 1, 1]
+
+Before: [3, 1, 2, 2]
+4 1 3 0
+After: [0, 1, 2, 2]
+
+Before: [2, 0, 2, 1]
+10 3 2 1
+After: [2, 1, 2, 1]
+
+Before: [1, 3, 0, 1]
+1 0 2 1
+After: [1, 0, 0, 1]
+
+Before: [1, 1, 0, 2]
+9 1 0 0
+After: [1, 1, 0, 2]
+
+Before: [2, 3, 2, 1]
+3 0 3 2
+After: [2, 3, 1, 1]
+
+Before: [1, 2, 2, 1]
+0 3 3 3
+After: [1, 2, 2, 0]
+
+Before: [3, 1, 2, 2]
+12 1 2 1
+After: [3, 0, 2, 2]
+
+Before: [0, 2, 3, 1]
+8 0 0 1
+After: [0, 0, 3, 1]
+
+Before: [0, 0, 2, 1]
+10 3 2 2
+After: [0, 0, 1, 1]
+
+Before: [3, 2, 1, 3]
+15 0 0 3
+After: [3, 2, 1, 1]
+
+Before: [1, 3, 2, 2]
+6 0 2 2
+After: [1, 3, 0, 2]
+
+Before: [1, 2, 2, 3]
+6 0 2 3
+After: [1, 2, 2, 0]
+
+Before: [1, 1, 3, 2]
+4 1 3 2
+After: [1, 1, 0, 2]
+
+Before: [1, 2, 2, 1]
+10 3 2 3
+After: [1, 2, 2, 1]
+
+Before: [1, 2, 2, 1]
+6 0 2 2
+After: [1, 2, 0, 1]
+
+Before: [1, 2, 1, 3]
+7 2 3 1
+After: [1, 0, 1, 3]
+
+Before: [1, 2, 2, 1]
+10 3 2 0
+After: [1, 2, 2, 1]
+
+Before: [2, 3, 3, 1]
+3 0 3 3
+After: [2, 3, 3, 1]
+
+Before: [2, 3, 2, 3]
+14 2 0 2
+After: [2, 3, 1, 3]
+
+Before: [2, 1, 3, 1]
+2 0 1 3
+After: [2, 1, 3, 1]
+
+Before: [0, 3, 3, 0]
+8 0 0 1
+After: [0, 0, 3, 0]
+
+Before: [2, 1, 1, 3]
+7 2 3 2
+After: [2, 1, 0, 3]
+
+Before: [0, 2, 2, 1]
+10 3 2 3
+After: [0, 2, 2, 1]
+
+Before: [3, 2, 1, 3]
+5 2 1 3
+After: [3, 2, 1, 2]
+
+Before: [3, 1, 1, 2]
+0 3 3 2
+After: [3, 1, 0, 2]
+
+Before: [0, 3, 1, 3]
+7 2 3 3
+After: [0, 3, 1, 0]
+
+Before: [2, 0, 2, 1]
+10 3 2 3
+After: [2, 0, 2, 1]
+
+Before: [2, 2, 1, 0]
+5 2 1 2
+After: [2, 2, 2, 0]
+
+Before: [2, 1, 2, 2]
+4 1 3 3
+After: [2, 1, 2, 0]
+
+Before: [1, 3, 1, 1]
+0 2 3 2
+After: [1, 3, 0, 1]
+
+Before: [1, 1, 0, 3]
+1 0 2 3
+After: [1, 1, 0, 0]
+
+Before: [1, 0, 0, 3]
+1 0 2 2
+After: [1, 0, 0, 3]
+
+Before: [2, 1, 1, 0]
+11 2 1 0
+After: [2, 1, 1, 0]
+
+Before: [2, 0, 0, 1]
+3 0 3 3
+After: [2, 0, 0, 1]
+
+Before: [3, 3, 0, 1]
+14 0 2 2
+After: [3, 3, 1, 1]
+
+Before: [0, 1, 2, 0]
+8 0 0 1
+After: [0, 0, 2, 0]
+
+Before: [2, 0, 1, 1]
+3 0 3 2
+After: [2, 0, 1, 1]
+
+Before: [1, 3, 2, 0]
+6 0 2 1
+After: [1, 0, 2, 0]
+
+Before: [3, 3, 2, 0]
+2 0 2 3
+After: [3, 3, 2, 1]
+
+Before: [2, 1, 0, 1]
+13 1 3 2
+After: [2, 1, 1, 1]
+
+Before: [1, 1, 2, 1]
+13 1 3 2
+After: [1, 1, 1, 1]
+
+Before: [1, 3, 2, 0]
+6 0 2 2
+After: [1, 3, 0, 0]
+
+Before: [3, 1, 3, 2]
+4 1 3 1
+After: [3, 0, 3, 2]
+
+Before: [2, 3, 2, 2]
+15 0 0 3
+After: [2, 3, 2, 1]
+
+Before: [2, 3, 2, 1]
+3 0 3 3
+After: [2, 3, 2, 1]
+
+Before: [2, 1, 1, 2]
+4 1 3 0
+After: [0, 1, 1, 2]
+
+Before: [1, 1, 1, 1]
+13 1 3 0
+After: [1, 1, 1, 1]
+
+Before: [3, 1, 1, 0]
+11 2 1 2
+After: [3, 1, 2, 0]
+
+Before: [3, 1, 1, 1]
+11 2 1 0
+After: [2, 1, 1, 1]
+
+Before: [3, 1, 0, 2]
+4 1 3 0
+After: [0, 1, 0, 2]
+
+Before: [3, 3, 1, 3]
+15 0 0 3
+After: [3, 3, 1, 1]
+
+Before: [1, 2, 2, 1]
+10 3 2 1
+After: [1, 1, 2, 1]
+
+Before: [1, 1, 1, 0]
+11 2 1 3
+After: [1, 1, 1, 2]
+
+Before: [1, 1, 1, 2]
+11 2 1 0
+After: [2, 1, 1, 2]
+
+Before: [3, 2, 2, 2]
+14 2 1 2
+After: [3, 2, 1, 2]
+
+Before: [0, 0, 3, 3]
+15 2 2 3
+After: [0, 0, 3, 1]
+
+Before: [0, 3, 2, 2]
+0 3 3 0
+After: [0, 3, 2, 2]
+
+Before: [1, 0, 2, 1]
+10 3 2 1
+After: [1, 1, 2, 1]
+
+Before: [2, 1, 2, 2]
+14 3 2 1
+After: [2, 0, 2, 2]
+
+Before: [1, 0, 0, 3]
+1 0 2 1
+After: [1, 0, 0, 3]
+
+Before: [3, 2, 1, 3]
+7 2 3 1
+After: [3, 0, 1, 3]
+
+Before: [3, 1, 1, 2]
+11 2 1 0
+After: [2, 1, 1, 2]
+
+Before: [1, 3, 2, 1]
+6 0 2 0
+After: [0, 3, 2, 1]
+
+Before: [2, 0, 3, 1]
+3 0 3 0
+After: [1, 0, 3, 1]
+
+Before: [3, 1, 2, 2]
+12 1 2 0
+After: [0, 1, 2, 2]
+
+Before: [3, 1, 2, 0]
+12 1 2 3
+After: [3, 1, 2, 0]
+
+Before: [2, 1, 2, 0]
+2 0 1 3
+After: [2, 1, 2, 1]
+
+Before: [1, 1, 3, 1]
+14 2 3 2
+After: [1, 1, 0, 1]
+
+Before: [1, 3, 2, 3]
+6 0 2 0
+After: [0, 3, 2, 3]
+
+Before: [1, 1, 2, 3]
+12 1 2 0
+After: [0, 1, 2, 3]
+
+Before: [3, 0, 2, 1]
+10 3 2 1
+After: [3, 1, 2, 1]
+
+Before: [1, 0, 2, 0]
+6 0 2 1
+After: [1, 0, 2, 0]
+
+Before: [2, 3, 1, 3]
+7 2 3 2
+After: [2, 3, 0, 3]
+
+Before: [1, 1, 1, 1]
+11 2 1 3
+After: [1, 1, 1, 2]
+
+Before: [2, 1, 2, 2]
+2 0 1 0
+After: [1, 1, 2, 2]
+
+Before: [1, 2, 1, 3]
+7 2 3 3
+After: [1, 2, 1, 0]
+
+Before: [1, 1, 2, 2]
+12 1 2 0
+After: [0, 1, 2, 2]
+
+Before: [2, 0, 2, 1]
+10 3 2 2
+After: [2, 0, 1, 1]
+
+Before: [0, 1, 2, 3]
+12 1 2 2
+After: [0, 1, 0, 3]
+
+Before: [2, 1, 1, 3]
+11 2 1 0
+After: [2, 1, 1, 3]
+
+Before: [2, 1, 3, 1]
+13 1 3 3
+After: [2, 1, 3, 1]
+
+Before: [0, 2, 1, 1]
+8 0 0 1
+After: [0, 0, 1, 1]
+
+Before: [1, 0, 0, 2]
+1 0 2 1
+After: [1, 0, 0, 2]
+
+Before: [2, 1, 3, 3]
+2 0 1 1
+After: [2, 1, 3, 3]
+
+Before: [0, 1, 2, 2]
+4 1 3 2
+After: [0, 1, 0, 2]
+
+Before: [1, 1, 2, 1]
+13 1 3 0
+After: [1, 1, 2, 1]
+
+Before: [1, 1, 3, 0]
+9 1 0 1
+After: [1, 1, 3, 0]
+
+Before: [1, 1, 0, 1]
+1 0 2 1
+After: [1, 0, 0, 1]
+
+Before: [2, 2, 3, 1]
+3 0 3 1
+After: [2, 1, 3, 1]
+
+Before: [3, 2, 1, 2]
+5 2 1 0
+After: [2, 2, 1, 2]
+
+Before: [1, 1, 2, 0]
+12 1 2 1
+After: [1, 0, 2, 0]
+
+Before: [3, 0, 2, 3]
+2 0 2 3
+After: [3, 0, 2, 1]
+
+Before: [2, 1, 3, 3]
+2 0 1 2
+After: [2, 1, 1, 3]
+
+Before: [3, 1, 3, 1]
+15 0 0 0
+After: [1, 1, 3, 1]
+
+Before: [0, 1, 3, 2]
+4 1 3 1
+After: [0, 0, 3, 2]
+
+Before: [3, 2, 3, 3]
+15 2 0 0
+After: [1, 2, 3, 3]
+
+Before: [1, 3, 3, 1]
+0 3 3 0
+After: [0, 3, 3, 1]
+
+Before: [0, 0, 2, 3]
+7 2 3 0
+After: [0, 0, 2, 3]
+
+Before: [0, 2, 1, 3]
+7 2 3 2
+After: [0, 2, 0, 3]
+
+Before: [3, 0, 2, 1]
+2 0 2 0
+After: [1, 0, 2, 1]
+
+Before: [2, 2, 2, 1]
+10 3 2 2
+After: [2, 2, 1, 1]
+
+Before: [1, 2, 0, 1]
+1 0 2 0
+After: [0, 2, 0, 1]
+
+Before: [1, 2, 0, 0]
+1 0 2 2
+After: [1, 2, 0, 0]
+
+Before: [3, 1, 2, 1]
+2 0 2 1
+After: [3, 1, 2, 1]
+
+Before: [0, 0, 3, 1]
+8 0 0 1
+After: [0, 0, 3, 1]
+
+Before: [0, 1, 1, 2]
+11 2 1 3
+After: [0, 1, 1, 2]
+
+Before: [0, 1, 3, 1]
+13 1 3 2
+After: [0, 1, 1, 1]
+
+Before: [1, 1, 1, 2]
+11 2 1 2
+After: [1, 1, 2, 2]
+
+Before: [2, 0, 3, 1]
+3 0 3 3
+After: [2, 0, 3, 1]
+
+Before: [0, 2, 1, 2]
+8 0 0 0
+After: [0, 2, 1, 2]
+
+Before: [1, 0, 2, 1]
+6 0 2 1
+After: [1, 0, 2, 1]
+
+Before: [1, 1, 0, 2]
+4 1 3 3
+After: [1, 1, 0, 0]
+
+Before: [2, 2, 1, 1]
+3 0 3 2
+After: [2, 2, 1, 1]
+
+Before: [1, 2, 1, 2]
+5 2 1 2
+After: [1, 2, 2, 2]
+
+Before: [2, 0, 2, 1]
+3 0 3 3
+After: [2, 0, 2, 1]
+
+Before: [2, 1, 0, 1]
+3 0 3 2
+After: [2, 1, 1, 1]
+
+Before: [2, 2, 1, 2]
+5 2 1 1
+After: [2, 2, 1, 2]
+
+Before: [1, 1, 2, 2]
+9 1 0 3
+After: [1, 1, 2, 1]
+
+Before: [2, 2, 1, 3]
+15 0 0 3
+After: [2, 2, 1, 1]
+
+Before: [3, 1, 0, 1]
+13 1 3 3
+After: [3, 1, 0, 1]
+
+Before: [3, 3, 2, 1]
+10 3 2 2
+After: [3, 3, 1, 1]
+
+Before: [0, 1, 3, 2]
+4 1 3 3
+After: [0, 1, 3, 0]
+
+Before: [0, 1, 1, 0]
+11 2 1 2
+After: [0, 1, 2, 0]
+
+Before: [3, 1, 3, 1]
+14 3 1 0
+After: [0, 1, 3, 1]
+
+Before: [0, 1, 3, 3]
+8 0 0 3
+After: [0, 1, 3, 0]
+
+Before: [0, 1, 2, 1]
+10 3 2 0
+After: [1, 1, 2, 1]
+
+Before: [2, 1, 2, 1]
+3 0 3 2
+After: [2, 1, 1, 1]
+
+Before: [0, 2, 1, 3]
+5 2 1 3
+After: [0, 2, 1, 2]
+
+Before: [1, 0, 0, 3]
+1 0 2 0
+After: [0, 0, 0, 3]
+
+Before: [2, 3, 0, 1]
+3 0 3 0
+After: [1, 3, 0, 1]
+
+Before: [2, 1, 2, 1]
+12 1 2 1
+After: [2, 0, 2, 1]
+
+Before: [2, 1, 3, 2]
+4 1 3 0
+After: [0, 1, 3, 2]
+
+Before: [1, 2, 1, 0]
+5 2 1 3
+After: [1, 2, 1, 2]
+
+Before: [3, 1, 3, 1]
+13 1 3 1
+After: [3, 1, 3, 1]
+
+Before: [1, 2, 1, 0]
+5 2 1 1
+After: [1, 2, 1, 0]
+
+Before: [3, 1, 2, 1]
+10 3 2 1
+After: [3, 1, 2, 1]
+
+Before: [1, 1, 1, 1]
+13 1 3 2
+After: [1, 1, 1, 1]
+
+Before: [2, 1, 2, 1]
+13 1 3 2
+After: [2, 1, 1, 1]
+
+Before: [1, 2, 1, 3]
+7 1 3 1
+After: [1, 0, 1, 3]
+
+Before: [0, 0, 2, 2]
+14 3 2 3
+After: [0, 0, 2, 0]
+
+Before: [2, 2, 1, 3]
+15 0 0 1
+After: [2, 1, 1, 3]
+
+Before: [2, 1, 3, 2]
+4 1 3 1
+After: [2, 0, 3, 2]
+
+Before: [1, 2, 1, 3]
+5 2 1 2
+After: [1, 2, 2, 3]
+
+Before: [2, 2, 1, 0]
+5 2 1 3
+After: [2, 2, 1, 2]
+
+Before: [2, 0, 2, 1]
+3 0 3 2
+After: [2, 0, 1, 1]
+
+Before: [1, 0, 0, 1]
+1 0 2 0
+After: [0, 0, 0, 1]
+
+Before: [2, 1, 1, 0]
+15 0 0 0
+After: [1, 1, 1, 0]
+
+Before: [0, 0, 3, 3]
+8 0 0 0
+After: [0, 0, 3, 3]
+
+Before: [1, 1, 1, 2]
+4 1 3 3
+After: [1, 1, 1, 0]
+
+Before: [1, 2, 0, 3]
+1 0 2 1
+After: [1, 0, 0, 3]
+
+Before: [1, 1, 0, 2]
+9 1 0 1
+After: [1, 1, 0, 2]
+
+Before: [3, 1, 1, 1]
+11 2 1 3
+After: [3, 1, 1, 2]
+
+Before: [1, 1, 0, 3]
+7 1 3 1
+After: [1, 0, 0, 3]
+
+Before: [1, 1, 1, 3]
+7 1 3 2
+After: [1, 1, 0, 3]
+
+Before: [1, 1, 2, 3]
+6 0 2 1
+After: [1, 0, 2, 3]
+
+Before: [2, 1, 1, 2]
+4 1 3 3
+After: [2, 1, 1, 0]
+
+Before: [2, 2, 2, 3]
+7 1 3 2
+After: [2, 2, 0, 3]
+
+Before: [1, 3, 2, 1]
+0 3 3 3
+After: [1, 3, 2, 0]
+
+Before: [0, 0, 3, 3]
+8 0 0 3
+After: [0, 0, 3, 0]
+
+Before: [3, 1, 3, 1]
+15 0 0 1
+After: [3, 1, 3, 1]
+
+Before: [1, 0, 0, 2]
+1 0 2 2
+After: [1, 0, 0, 2]
+
+Before: [0, 0, 0, 1]
+0 3 3 1
+After: [0, 0, 0, 1]
+
+Before: [1, 1, 1, 2]
+9 1 0 0
+After: [1, 1, 1, 2]
+
+Before: [1, 3, 0, 1]
+1 0 2 2
+After: [1, 3, 0, 1]
+
+Before: [1, 1, 3, 3]
+9 1 0 0
+After: [1, 1, 3, 3]
+
+Before: [2, 1, 3, 1]
+13 1 3 2
+After: [2, 1, 1, 1]
+
+Before: [2, 1, 3, 2]
+4 1 3 3
+After: [2, 1, 3, 0]
+
+Before: [2, 1, 2, 1]
+13 1 3 3
+After: [2, 1, 2, 1]
+
+Before: [1, 0, 2, 2]
+6 0 2 1
+After: [1, 0, 2, 2]
+
+Before: [1, 1, 2, 1]
+10 3 2 2
+After: [1, 1, 1, 1]
+
+Before: [3, 2, 1, 3]
+5 2 1 2
+After: [3, 2, 2, 3]
+
+Before: [0, 1, 2, 0]
+12 1 2 2
+After: [0, 1, 0, 0]
+
+Before: [2, 1, 1, 3]
+2 0 1 0
+After: [1, 1, 1, 3]
+
+Before: [1, 2, 2, 3]
+14 2 1 2
+After: [1, 2, 1, 3]
+
+Before: [1, 2, 0, 3]
+1 0 2 0
+After: [0, 2, 0, 3]
+
+Before: [0, 1, 2, 2]
+8 0 0 2
+After: [0, 1, 0, 2]
+
+Before: [0, 2, 1, 0]
+5 2 1 1
+After: [0, 2, 1, 0]
+
+Before: [2, 0, 0, 1]
+15 0 0 2
+After: [2, 0, 1, 1]
+
+Before: [2, 2, 1, 3]
+5 2 1 0
+After: [2, 2, 1, 3]
+
+Before: [3, 2, 2, 1]
+10 3 2 2
+After: [3, 2, 1, 1]
+
+Before: [0, 3, 2, 2]
+14 3 2 2
+After: [0, 3, 0, 2]
+
+Before: [1, 2, 0, 1]
+1 0 2 2
+After: [1, 2, 0, 1]
+
+Before: [0, 1, 1, 0]
+11 2 1 0
+After: [2, 1, 1, 0]
+
+Before: [1, 2, 2, 3]
+14 2 1 3
+After: [1, 2, 2, 1]
+
+Before: [2, 1, 3, 1]
+3 0 3 3
+After: [2, 1, 3, 1]
+
+Before: [0, 1, 2, 3]
+7 1 3 3
+After: [0, 1, 2, 0]
+
+Before: [2, 1, 2, 2]
+2 0 1 1
+After: [2, 1, 2, 2]
+
+Before: [2, 2, 1, 0]
+5 2 1 1
+After: [2, 2, 1, 0]
+
+Before: [3, 2, 1, 3]
+5 2 1 0
+After: [2, 2, 1, 3]
+
+Before: [1, 1, 2, 1]
+0 3 3 1
+After: [1, 0, 2, 1]
+
+Before: [1, 0, 2, 1]
+6 0 2 3
+After: [1, 0, 2, 0]
+
+Before: [1, 3, 0, 2]
+1 0 2 0
+After: [0, 3, 0, 2]
+
+Before: [0, 1, 1, 3]
+11 2 1 2
+After: [0, 1, 2, 3]
+
+Before: [1, 1, 3, 3]
+9 1 0 1
+After: [1, 1, 3, 3]
+
+Before: [3, 1, 2, 3]
+12 1 2 1
+After: [3, 0, 2, 3]
+
+Before: [0, 1, 1, 1]
+13 1 3 0
+After: [1, 1, 1, 1]
+
+Before: [1, 1, 2, 3]
+9 1 0 1
+After: [1, 1, 2, 3]
+
+Before: [0, 3, 1, 3]
+7 2 3 0
+After: [0, 3, 1, 3]
+
+Before: [3, 1, 2, 1]
+13 1 3 2
+After: [3, 1, 1, 1]
+
+Before: [1, 0, 1, 3]
+7 2 3 1
+After: [1, 0, 1, 3]
+
+Before: [1, 1, 0, 3]
+1 0 2 0
+After: [0, 1, 0, 3]
+
+Before: [2, 1, 2, 2]
+12 1 2 2
+After: [2, 1, 0, 2]
+
+Before: [3, 0, 1, 3]
+14 3 0 0
+After: [1, 0, 1, 3]
+
+Before: [3, 1, 3, 3]
+7 1 3 3
+After: [3, 1, 3, 0]
+
+Before: [1, 1, 0, 0]
+1 0 2 0
+After: [0, 1, 0, 0]
+
+Before: [1, 1, 1, 1]
+0 2 3 2
+After: [1, 1, 0, 1]
+
+Before: [2, 1, 0, 1]
+2 0 1 2
+After: [2, 1, 1, 1]
+
+Before: [1, 1, 2, 1]
+14 3 1 1
+After: [1, 0, 2, 1]
+
+Before: [0, 0, 2, 3]
+7 2 3 3
+After: [0, 0, 2, 0]
+
+Before: [3, 2, 0, 0]
+14 0 2 1
+After: [3, 1, 0, 0]
+
+Before: [0, 0, 2, 3]
+8 0 0 0
+After: [0, 0, 2, 3]
+
+Before: [3, 1, 1, 0]
+11 2 1 1
+After: [3, 2, 1, 0]
+
+Before: [1, 2, 1, 1]
+5 2 1 2
+After: [1, 2, 2, 1]
+
+Before: [0, 2, 1, 3]
+7 2 3 3
+After: [0, 2, 1, 0]
+
+Before: [3, 1, 2, 2]
+15 0 0 3
+After: [3, 1, 2, 1]
+
+Before: [0, 0, 0, 2]
+8 0 0 2
+After: [0, 0, 0, 2]
+
+Before: [3, 1, 3, 1]
+13 1 3 2
+After: [3, 1, 1, 1]
+
+Before: [1, 1, 2, 3]
+9 1 0 2
+After: [1, 1, 1, 3]
+
+Before: [1, 2, 0, 2]
+1 0 2 2
+After: [1, 2, 0, 2]
+
+Before: [2, 1, 2, 3]
+2 0 1 3
+After: [2, 1, 2, 1]
+
+Before: [1, 2, 0, 3]
+1 0 2 2
+After: [1, 2, 0, 3]
+
+Before: [1, 0, 2, 0]
+6 0 2 3
+After: [1, 0, 2, 0]
+
+Before: [1, 0, 3, 1]
+0 3 3 2
+After: [1, 0, 0, 1]
+
+Before: [1, 3, 2, 1]
+6 0 2 3
+After: [1, 3, 2, 0]
+
+Before: [1, 1, 1, 1]
+9 1 0 3
+After: [1, 1, 1, 1]
+
+Before: [0, 3, 2, 1]
+0 3 3 1
+After: [0, 0, 2, 1]
+
+Before: [1, 1, 3, 1]
+13 1 3 3
+After: [1, 1, 3, 1]
+
+Before: [2, 2, 0, 3]
+7 1 3 0
+After: [0, 2, 0, 3]
+
+Before: [0, 3, 2, 1]
+0 3 3 0
+After: [0, 3, 2, 1]
+
+Before: [1, 0, 0, 1]
+1 0 2 2
+After: [1, 0, 0, 1]
+
+Before: [2, 1, 2, 1]
+2 0 1 2
+After: [2, 1, 1, 1]
+
+Before: [1, 2, 2, 2]
+6 0 2 2
+After: [1, 2, 0, 2]
+
+Before: [0, 1, 1, 1]
+13 1 3 3
+After: [0, 1, 1, 1]
+
+Before: [2, 1, 1, 0]
+11 2 1 2
+After: [2, 1, 2, 0]
+
+Before: [0, 1, 3, 1]
+13 1 3 1
+After: [0, 1, 3, 1]
+
+Before: [3, 2, 0, 2]
+0 3 3 1
+After: [3, 0, 0, 2]
+
+Before: [1, 1, 2, 1]
+10 3 2 3
+After: [1, 1, 2, 1]
+
+Before: [2, 1, 2, 1]
+13 1 3 0
+After: [1, 1, 2, 1]
+
+Before: [2, 1, 0, 1]
+13 1 3 1
+After: [2, 1, 0, 1]
+
+Before: [2, 1, 2, 2]
+12 1 2 3
+After: [2, 1, 2, 0]
+
+Before: [0, 1, 2, 0]
+12 1 2 1
+After: [0, 0, 2, 0]
+
+Before: [3, 1, 2, 2]
+4 1 3 2
+After: [3, 1, 0, 2]
+
+Before: [1, 1, 0, 2]
+1 0 2 1
+After: [1, 0, 0, 2]
+
+Before: [0, 2, 1, 1]
+0 2 3 2
+After: [0, 2, 0, 1]
+
+Before: [1, 1, 2, 0]
+6 0 2 0
+After: [0, 1, 2, 0]
+
+Before: [0, 3, 1, 2]
+8 0 0 3
+After: [0, 3, 1, 0]
+
+Before: [1, 3, 0, 0]
+1 0 2 2
+After: [1, 3, 0, 0]
+
+Before: [1, 1, 2, 0]
+12 1 2 2
+After: [1, 1, 0, 0]
+
+Before: [2, 1, 0, 2]
+0 3 3 1
+After: [2, 0, 0, 2]
+
+Before: [0, 3, 3, 3]
+8 0 0 1
+After: [0, 0, 3, 3]
+
+Before: [3, 3, 0, 1]
+0 3 3 0
+After: [0, 3, 0, 1]
+
+Before: [3, 1, 1, 2]
+4 1 3 3
+After: [3, 1, 1, 0]
+
+Before: [2, 1, 2, 3]
+12 1 2 3
+After: [2, 1, 2, 0]
+
+Before: [3, 1, 2, 1]
+12 1 2 3
+After: [3, 1, 2, 0]
+
+Before: [1, 0, 2, 2]
+6 0 2 3
+After: [1, 0, 2, 0]
+
+Before: [1, 1, 0, 1]
+0 3 3 1
+After: [1, 0, 0, 1]
+
+Before: [1, 1, 0, 3]
+9 1 0 2
+After: [1, 1, 1, 3]
+
+Before: [3, 0, 2, 1]
+10 3 2 3
+After: [3, 0, 2, 1]
+
+Before: [2, 2, 3, 3]
+14 3 2 3
+After: [2, 2, 3, 1]
+
+Before: [3, 1, 2, 2]
+12 1 2 3
+After: [3, 1, 2, 0]
+
+Before: [0, 1, 2, 1]
+10 3 2 1
+After: [0, 1, 2, 1]
+
+Before: [0, 1, 3, 0]
+8 0 0 2
+After: [0, 1, 0, 0]
+
+Before: [3, 1, 2, 0]
+12 1 2 1
+After: [3, 0, 2, 0]
+
+Before: [1, 3, 2, 0]
+6 0 2 3
+After: [1, 3, 2, 0]
+
+Before: [2, 0, 1, 3]
+7 2 3 3
+After: [2, 0, 1, 0]
+
+Before: [3, 2, 2, 1]
+10 3 2 3
+After: [3, 2, 2, 1]
+
+Before: [1, 2, 0, 0]
+1 0 2 3
+After: [1, 2, 0, 0]
+
+Before: [2, 1, 1, 1]
+0 2 3 0
+After: [0, 1, 1, 1]
+
+Before: [3, 2, 1, 1]
+5 2 1 3
+After: [3, 2, 1, 2]
+
+Before: [3, 1, 3, 1]
+14 2 3 0
+After: [0, 1, 3, 1]
+
+Before: [2, 1, 1, 3]
+14 2 1 1
+After: [2, 0, 1, 3]
+
+Before: [0, 1, 1, 2]
+8 0 0 0
+After: [0, 1, 1, 2]
+
+Before: [2, 3, 3, 2]
+15 2 2 2
+After: [2, 3, 1, 2]
+
+Before: [0, 1, 2, 3]
+7 2 3 1
+After: [0, 0, 2, 3]
+
+Before: [1, 1, 0, 2]
+4 1 3 2
+After: [1, 1, 0, 2]
+
+Before: [0, 2, 3, 0]
+8 0 0 2
+After: [0, 2, 0, 0]
+
+Before: [0, 1, 1, 1]
+11 2 1 1
+After: [0, 2, 1, 1]
+
+Before: [2, 1, 1, 1]
+13 1 3 0
+After: [1, 1, 1, 1]
+
+Before: [2, 3, 1, 3]
+7 2 3 0
+After: [0, 3, 1, 3]
+
+Before: [2, 1, 2, 3]
+12 1 2 2
+After: [2, 1, 0, 3]
+
+Before: [2, 2, 1, 3]
+5 2 1 3
+After: [2, 2, 1, 2]
+
+Before: [3, 1, 1, 3]
+11 2 1 0
+After: [2, 1, 1, 3]
+
+Before: [0, 0, 1, 3]
+7 2 3 1
+After: [0, 0, 1, 3]
+
+Before: [1, 3, 2, 1]
+10 3 2 2
+After: [1, 3, 1, 1]
+
+Before: [3, 2, 1, 2]
+15 0 0 2
+After: [3, 2, 1, 2]
+
+Before: [1, 2, 1, 1]
+0 2 3 1
+After: [1, 0, 1, 1]
+
+Before: [1, 1, 1, 3]
+9 1 0 3
+After: [1, 1, 1, 1]
+
+Before: [1, 1, 0, 3]
+9 1 0 3
+After: [1, 1, 0, 1]
+
+Before: [0, 1, 1, 1]
+11 2 1 2
+After: [0, 1, 2, 1]
+
+Before: [0, 1, 2, 1]
+13 1 3 2
+After: [0, 1, 1, 1]
+
+Before: [1, 1, 2, 2]
+4 1 3 2
+After: [1, 1, 0, 2]
+
+Before: [3, 1, 1, 2]
+11 2 1 3
+After: [3, 1, 1, 2]
+
+Before: [2, 2, 3, 2]
+0 3 3 3
+After: [2, 2, 3, 0]
+
+Before: [0, 0, 1, 1]
+0 2 3 1
+After: [0, 0, 1, 1]
+
+Before: [0, 1, 2, 2]
+12 1 2 1
+After: [0, 0, 2, 2]
+
+Before: [2, 0, 3, 1]
+3 0 3 2
+After: [2, 0, 1, 1]
+
+Before: [1, 0, 2, 0]
+6 0 2 0
+After: [0, 0, 2, 0]
+
+Before: [0, 2, 1, 1]
+5 2 1 0
+After: [2, 2, 1, 1]
+
+Before: [1, 3, 3, 0]
+15 2 2 0
+After: [1, 3, 3, 0]
+
+Before: [0, 3, 2, 0]
+8 0 0 2
+After: [0, 3, 0, 0]
+
+Before: [2, 2, 2, 1]
+0 3 3 1
+After: [2, 0, 2, 1]
+
+Before: [3, 1, 1, 2]
+4 1 3 0
+After: [0, 1, 1, 2]
+
+Before: [1, 2, 1, 0]
+5 2 1 0
+After: [2, 2, 1, 0]
+
+Before: [2, 2, 3, 3]
+15 0 0 0
+After: [1, 2, 3, 3]
+
+Before: [2, 1, 0, 0]
+2 0 1 1
+After: [2, 1, 0, 0]
+
+Before: [1, 2, 2, 3]
+6 0 2 2
+After: [1, 2, 0, 3]
+
+Before: [1, 0, 0, 1]
+1 0 2 1
+After: [1, 0, 0, 1]
+
+Before: [2, 2, 0, 1]
+3 0 3 1
+After: [2, 1, 0, 1]
+
+Before: [3, 2, 1, 2]
+5 2 1 1
+After: [3, 2, 1, 2]
+
+Before: [2, 1, 3, 2]
+14 2 0 1
+After: [2, 1, 3, 2]
+
+Before: [1, 1, 0, 0]
+9 1 0 2
+After: [1, 1, 1, 0]
+
+Before: [2, 2, 3, 3]
+15 2 2 2
+After: [2, 2, 1, 3]
+
+Before: [0, 2, 1, 0]
+8 0 0 2
+After: [0, 2, 0, 0]
+
+Before: [1, 1, 0, 1]
+9 1 0 0
+After: [1, 1, 0, 1]
+
+Before: [0, 1, 2, 2]
+4 1 3 0
+After: [0, 1, 2, 2]
+
+Before: [1, 1, 0, 0]
+9 1 0 0
+After: [1, 1, 0, 0]
+
+Before: [2, 3, 2, 1]
+3 0 3 1
+After: [2, 1, 2, 1]
+
+Before: [1, 2, 1, 3]
+5 2 1 3
+After: [1, 2, 1, 2]
+
+Before: [2, 1, 1, 3]
+11 2 1 2
+After: [2, 1, 2, 3]
+
+Before: [1, 1, 3, 0]
+9 1 0 2
+After: [1, 1, 1, 0]
+
+Before: [2, 1, 1, 3]
+11 2 1 1
+After: [2, 2, 1, 3]
+
+Before: [2, 1, 3, 2]
+2 0 1 2
+After: [2, 1, 1, 2]
+
+Before: [0, 2, 1, 3]
+5 2 1 2
+After: [0, 2, 2, 3]
+
+Before: [1, 0, 0, 2]
+1 0 2 3
+After: [1, 0, 0, 0]
+
+Before: [1, 1, 1, 2]
+9 1 0 3
+After: [1, 1, 1, 1]
+
+Before: [2, 1, 3, 2]
+4 1 3 2
+After: [2, 1, 0, 2]
+
+Before: [1, 0, 2, 2]
+6 0 2 2
+After: [1, 0, 0, 2]
+
+Before: [3, 1, 1, 3]
+11 2 1 1
+After: [3, 2, 1, 3]
+
+Before: [3, 1, 2, 3]
+2 0 2 0
+After: [1, 1, 2, 3]
+
+Before: [1, 2, 0, 2]
+1 0 2 0
+After: [0, 2, 0, 2]
+
+Before: [3, 1, 2, 1]
+10 3 2 2
+After: [3, 1, 1, 1]
+
+Before: [1, 0, 2, 3]
+7 2 3 0
+After: [0, 0, 2, 3]
+
+Before: [3, 1, 2, 3]
+12 1 2 0
+After: [0, 1, 2, 3]
+
+Before: [2, 1, 1, 3]
+7 2 3 1
+After: [2, 0, 1, 3]
+
+Before: [0, 2, 1, 2]
+5 2 1 3
+After: [0, 2, 1, 2]
+
+Before: [3, 1, 1, 0]
+11 2 1 0
+After: [2, 1, 1, 0]
+
+Before: [1, 1, 3, 1]
+9 1 0 0
+After: [1, 1, 3, 1]
+
+Before: [1, 1, 2, 2]
+9 1 0 1
+After: [1, 1, 2, 2]
+
+Before: [2, 1, 1, 3]
+11 2 1 3
+After: [2, 1, 1, 2]
+
+Before: [1, 1, 1, 2]
+4 1 3 1
+After: [1, 0, 1, 2]
+
+Before: [3, 1, 0, 1]
+13 1 3 0
+After: [1, 1, 0, 1]
+
+Before: [1, 2, 2, 3]
+6 0 2 0
+After: [0, 2, 2, 3]
+
+Before: [1, 3, 0, 3]
+1 0 2 0
+After: [0, 3, 0, 3]
+
+Before: [2, 1, 1, 0]
+2 0 1 2
+After: [2, 1, 1, 0]
+
+Before: [0, 1, 2, 1]
+12 1 2 3
+After: [0, 1, 2, 0]
+
+Before: [2, 3, 1, 1]
+3 0 3 3
+After: [2, 3, 1, 1]
+
+Before: [2, 1, 3, 3]
+2 0 1 3
+After: [2, 1, 3, 1]
+
+Before: [1, 3, 2, 1]
+10 3 2 3
+After: [1, 3, 2, 1]
+
+Before: [1, 1, 3, 3]
+9 1 0 3
+After: [1, 1, 3, 1]
+
+Before: [1, 1, 3, 2]
+9 1 0 1
+After: [1, 1, 3, 2]
+
+Before: [1, 1, 0, 1]
+13 1 3 2
+After: [1, 1, 1, 1]
+
+Before: [3, 0, 2, 0]
+2 0 2 1
+After: [3, 1, 2, 0]
+
+Before: [2, 0, 0, 0]
+14 0 1 2
+After: [2, 0, 1, 0]
+
+Before: [0, 1, 2, 1]
+13 1 3 3
+After: [0, 1, 2, 1]
+
+Before: [2, 1, 3, 0]
+14 2 0 1
+After: [2, 1, 3, 0]
+
+Before: [2, 1, 0, 1]
+13 1 3 0
+After: [1, 1, 0, 1]
+
+Before: [2, 1, 0, 1]
+2 0 1 1
+After: [2, 1, 0, 1]
+
+Before: [0, 3, 2, 1]
+10 3 2 0
+After: [1, 3, 2, 1]
+
+Before: [0, 1, 3, 1]
+0 3 3 2
+After: [0, 1, 0, 1]
+
+Before: [0, 2, 1, 1]
+5 2 1 1
+After: [0, 2, 1, 1]
+
+Before: [2, 1, 1, 2]
+15 0 0 3
+After: [2, 1, 1, 1]
+
+Before: [1, 1, 2, 0]
+6 0 2 2
+After: [1, 1, 0, 0]
+
+Before: [1, 1, 2, 1]
+6 0 2 0
+After: [0, 1, 2, 1]
+
+Before: [0, 2, 1, 3]
+7 1 3 1
+After: [0, 0, 1, 3]
+
+Before: [1, 0, 0, 0]
+1 0 2 3
+After: [1, 0, 0, 0]
+
+Before: [2, 1, 2, 3]
+2 0 1 2
+After: [2, 1, 1, 3]
+
+Before: [0, 2, 0, 2]
+0 3 3 1
+After: [0, 0, 0, 2]
+
+Before: [0, 2, 3, 0]
+15 2 2 2
+After: [0, 2, 1, 0]
+
+Before: [1, 2, 2, 2]
+14 2 1 3
+After: [1, 2, 2, 1]
+
+Before: [0, 1, 3, 1]
+8 0 0 2
+After: [0, 1, 0, 1]
+
+Before: [3, 3, 3, 2]
+15 0 0 3
+After: [3, 3, 3, 1]
+
+Before: [3, 3, 0, 2]
+14 0 2 1
+After: [3, 1, 0, 2]
+
+Before: [0, 1, 1, 3]
+11 2 1 0
+After: [2, 1, 1, 3]
+
+Before: [1, 1, 0, 1]
+9 1 0 2
+After: [1, 1, 1, 1]
+
+Before: [0, 1, 2, 1]
+10 3 2 3
+After: [0, 1, 2, 1]
+
+Before: [2, 2, 2, 1]
+10 3 2 1
+After: [2, 1, 2, 1]
+
+Before: [0, 1, 2, 2]
+4 1 3 3
+After: [0, 1, 2, 0]
+
+Before: [1, 2, 2, 1]
+10 3 2 2
+After: [1, 2, 1, 1]
+
+Before: [2, 1, 1, 2]
+11 2 1 1
+After: [2, 2, 1, 2]
+
+Before: [1, 1, 2, 1]
+12 1 2 3
+After: [1, 1, 2, 0]
+
+Before: [3, 3, 1, 1]
+0 2 3 1
+After: [3, 0, 1, 1]
+
+Before: [0, 1, 2, 2]
+4 1 3 1
+After: [0, 0, 2, 2]
+
+Before: [0, 3, 2, 2]
+8 0 0 3
+After: [0, 3, 2, 0]
+
+Before: [2, 1, 2, 1]
+2 0 1 0
+After: [1, 1, 2, 1]
+
+Before: [1, 1, 0, 3]
+1 0 2 1
+After: [1, 0, 0, 3]
+
+Before: [3, 3, 3, 2]
+15 0 0 0
+After: [1, 3, 3, 2]
+
+Before: [0, 1, 1, 2]
+4 1 3 2
+After: [0, 1, 0, 2]
+
+Before: [1, 3, 0, 3]
+1 0 2 1
+After: [1, 0, 0, 3]
+
+Before: [1, 1, 0, 1]
+1 0 2 2
+After: [1, 1, 0, 1]
+
+Before: [2, 1, 0, 2]
+4 1 3 0
+After: [0, 1, 0, 2]
+
+Before: [3, 2, 2, 2]
+2 0 2 2
+After: [3, 2, 1, 2]
+
+Before: [0, 2, 2, 1]
+10 3 2 1
+After: [0, 1, 2, 1]
+
+Before: [0, 1, 0, 2]
+4 1 3 2
+After: [0, 1, 0, 2]
+
+Before: [0, 1, 0, 2]
+4 1 3 3
+After: [0, 1, 0, 0]
+
+Before: [1, 1, 2, 1]
+10 3 2 1
+After: [1, 1, 2, 1]
+
+Before: [1, 1, 0, 1]
+13 1 3 0
+After: [1, 1, 0, 1]
+
+Before: [1, 3, 2, 2]
+6 0 2 1
+After: [1, 0, 2, 2]
+
+Before: [0, 1, 2, 1]
+13 1 3 0
+After: [1, 1, 2, 1]
+
+Before: [0, 1, 1, 3]
+11 2 1 1
+After: [0, 2, 1, 3]
+
+Before: [3, 2, 1, 0]
+5 2 1 3
+After: [3, 2, 1, 2]
+
+Before: [2, 1, 2, 3]
+7 2 3 3
+After: [2, 1, 2, 0]
+
+Before: [1, 1, 1, 1]
+11 2 1 2
+After: [1, 1, 2, 1]
+
+Before: [2, 1, 1, 1]
+3 0 3 2
+After: [2, 1, 1, 1]
+
+Before: [0, 1, 1, 3]
+8 0 0 1
+After: [0, 0, 1, 3]
+
+Before: [3, 2, 3, 3]
+7 1 3 3
+After: [3, 2, 3, 0]
+
+Before: [0, 3, 0, 0]
+8 0 0 2
+After: [0, 3, 0, 0]
+
+Before: [1, 1, 2, 1]
+6 0 2 1
+After: [1, 0, 2, 1]
+
+Before: [0, 1, 1, 2]
+4 1 3 0
+After: [0, 1, 1, 2]
+
+Before: [1, 1, 2, 1]
+9 1 0 1
+After: [1, 1, 2, 1]
+
+Before: [3, 1, 2, 0]
+12 1 2 0
+After: [0, 1, 2, 0]
+
+Before: [1, 3, 0, 3]
+1 0 2 2
+After: [1, 3, 0, 3]
+
+Before: [1, 1, 0, 3]
+9 1 0 1
+After: [1, 1, 0, 3]
+
+Before: [0, 2, 2, 2]
+8 0 0 1
+After: [0, 0, 2, 2]
+
+Before: [0, 1, 1, 1]
+13 1 3 1
+After: [0, 1, 1, 1]
+
+Before: [1, 1, 3, 1]
+13 1 3 0
+After: [1, 1, 3, 1]
+
+Before: [0, 1, 2, 1]
+8 0 0 0
+After: [0, 1, 2, 1]
+
+Before: [2, 1, 2, 1]
+12 1 2 2
+After: [2, 1, 0, 1]
+
+Before: [1, 0, 2, 3]
+6 0 2 1
+After: [1, 0, 2, 3]
+
+Before: [3, 0, 3, 1]
+15 2 0 2
+After: [3, 0, 1, 1]
+
+Before: [0, 1, 1, 1]
+0 2 3 0
+After: [0, 1, 1, 1]
+
+Before: [3, 0, 0, 3]
+14 0 2 1
+After: [3, 1, 0, 3]
+
+Before: [3, 1, 1, 1]
+0 2 3 1
+After: [3, 0, 1, 1]
+
+Before: [0, 1, 2, 3]
+7 2 3 3
+After: [0, 1, 2, 0]
+
+Before: [3, 1, 0, 1]
+13 1 3 1
+After: [3, 1, 0, 1]
+
+Before: [0, 0, 3, 0]
+8 0 0 1
+After: [0, 0, 3, 0]
+
+Before: [1, 1, 0, 2]
+1 0 2 3
+After: [1, 1, 0, 0]
+
+Before: [2, 1, 1, 2]
+4 1 3 1
+After: [2, 0, 1, 2]
+
+Before: [3, 2, 3, 0]
+15 2 2 3
+After: [3, 2, 3, 1]
+
+Before: [0, 2, 0, 3]
+7 1 3 0
+After: [0, 2, 0, 3]
+
+Before: [1, 1, 3, 2]
+9 1 0 2
+After: [1, 1, 1, 2]
+
+Before: [0, 3, 1, 3]
+8 0 0 1
+After: [0, 0, 1, 3]
+
+Before: [3, 1, 2, 1]
+2 0 2 0
+After: [1, 1, 2, 1]
+
+Before: [1, 1, 3, 1]
+9 1 0 2
+After: [1, 1, 1, 1]
+
+Before: [2, 1, 3, 0]
+2 0 1 3
+After: [2, 1, 3, 1]
+
+Before: [2, 1, 1, 0]
+11 2 1 1
+After: [2, 2, 1, 0]
+
+Before: [3, 1, 1, 1]
+13 1 3 0
+After: [1, 1, 1, 1]
+
+Before: [2, 2, 1, 3]
+5 2 1 1
+After: [2, 2, 1, 3]
+
+Before: [0, 0, 2, 1]
+10 3 2 3
+After: [0, 0, 2, 1]
+
+Before: [3, 3, 0, 2]
+0 3 3 1
+After: [3, 0, 0, 2]
+
+Before: [0, 2, 1, 0]
+8 0 0 0
+After: [0, 2, 1, 0]
+
+Before: [3, 3, 0, 2]
+15 0 0 3
+After: [3, 3, 0, 1]
+
+Before: [1, 0, 2, 3]
+6 0 2 0
+After: [0, 0, 2, 3]
+
+Before: [0, 0, 1, 1]
+8 0 0 1
+After: [0, 0, 1, 1]
+
+Before: [1, 0, 2, 1]
+10 3 2 0
+After: [1, 0, 2, 1]
+
+Before: [1, 2, 1, 2]
+5 2 1 1
+After: [1, 2, 1, 2]
+
+Before: [2, 1, 3, 1]
+14 2 0 1
+After: [2, 1, 3, 1]
+
+Before: [2, 1, 2, 0]
+2 0 1 0
+After: [1, 1, 2, 0]
+
+Before: [1, 1, 2, 2]
+6 0 2 3
+After: [1, 1, 2, 0]
+
+Before: [2, 1, 1, 3]
+2 0 1 2
+After: [2, 1, 1, 3]
+
+Before: [2, 3, 3, 2]
+14 2 0 2
+After: [2, 3, 1, 2]
+
+Before: [1, 0, 0, 2]
+1 0 2 0
+After: [0, 0, 0, 2]
+
+Before: [3, 3, 2, 2]
+15 0 0 0
+After: [1, 3, 2, 2]
+
+Before: [0, 1, 1, 2]
+4 1 3 3
+After: [0, 1, 1, 0]
+
+Before: [2, 2, 1, 2]
+5 2 1 3
+After: [2, 2, 1, 2]
+
+Before: [2, 1, 2, 0]
+12 1 2 0
+After: [0, 1, 2, 0]
+
+Before: [3, 1, 0, 1]
+13 1 3 2
+After: [3, 1, 1, 1]
+
+Before: [1, 2, 1, 1]
+5 2 1 1
+After: [1, 2, 1, 1]
+
+Before: [2, 1, 2, 2]
+4 1 3 2
+After: [2, 1, 0, 2]
+
+Before: [0, 1, 0, 2]
+4 1 3 0
+After: [0, 1, 0, 2]
+
+Before: [3, 1, 0, 2]
+4 1 3 2
+After: [3, 1, 0, 2]
+
+Before: [1, 1, 3, 2]
+4 1 3 1
+After: [1, 0, 3, 2]
+
+Before: [3, 1, 1, 1]
+13 1 3 2
+After: [3, 1, 1, 1]
+
+Before: [0, 0, 2, 0]
+8 0 0 3
+After: [0, 0, 2, 0]
+
+Before: [1, 1, 3, 2]
+9 1 0 0
+After: [1, 1, 3, 2]
+
+Before: [3, 2, 1, 0]
+5 2 1 1
+After: [3, 2, 1, 0]
+
+Before: [1, 1, 0, 2]
+1 0 2 0
+After: [0, 1, 0, 2]
+
+Before: [2, 1, 0, 1]
+13 1 3 3
+After: [2, 1, 0, 1]
+
+Before: [3, 1, 2, 0]
+12 1 2 2
+After: [3, 1, 0, 0]
+
+Before: [3, 2, 2, 3]
+2 0 2 0
+After: [1, 2, 2, 3]
+
+Before: [1, 1, 1, 0]
+11 2 1 1
+After: [1, 2, 1, 0]
+
+Before: [0, 0, 1, 2]
+8 0 0 3
+After: [0, 0, 1, 0]
+
+Before: [1, 1, 0, 0]
+9 1 0 3
+After: [1, 1, 0, 1]
+
+Before: [1, 1, 3, 0]
+9 1 0 3
+After: [1, 1, 3, 1]
+
+Before: [1, 1, 1, 1]
+11 2 1 1
+After: [1, 2, 1, 1]
+
+Before: [3, 0, 0, 0]
+14 0 2 3
+After: [3, 0, 0, 1]
+
+Before: [2, 1, 1, 3]
+7 1 3 3
+After: [2, 1, 1, 0]
+
+Before: [0, 3, 3, 2]
+8 0 0 2
+After: [0, 3, 0, 2]
+
+Before: [3, 1, 2, 1]
+12 1 2 1
+After: [3, 0, 2, 1]
+
+Before: [3, 0, 2, 3]
+7 2 3 0
+After: [0, 0, 2, 3]
+
+Before: [3, 1, 1, 1]
+14 3 1 1
+After: [3, 0, 1, 1]
+
+Before: [1, 1, 1, 3]
+9 1 0 0
+After: [1, 1, 1, 3]
+
+Before: [0, 0, 3, 3]
+8 0 0 2
+After: [0, 0, 0, 3]
+
+Before: [3, 1, 3, 3]
+7 1 3 1
+After: [3, 0, 3, 3]
+
+Before: [1, 1, 2, 2]
+12 1 2 1
+After: [1, 0, 2, 2]
+
+Before: [1, 1, 0, 1]
+1 0 2 3
+After: [1, 1, 0, 0]
+
+Before: [2, 2, 2, 1]
+3 0 3 2
+After: [2, 2, 1, 1]
+
+Before: [2, 0, 3, 0]
+14 0 1 1
+After: [2, 1, 3, 0]
+
+Before: [1, 1, 2, 2]
+4 1 3 3
+After: [1, 1, 2, 0]
+
+Before: [1, 1, 2, 3]
+12 1 2 2
+After: [1, 1, 0, 3]
+
+Before: [1, 2, 1, 3]
+7 2 3 2
+After: [1, 2, 0, 3]
+
+Before: [3, 0, 0, 1]
+14 0 2 2
+After: [3, 0, 1, 1]
+
+Before: [3, 2, 1, 0]
+5 2 1 0
+After: [2, 2, 1, 0]
+
+Before: [2, 3, 2, 1]
+3 0 3 0
+After: [1, 3, 2, 1]
+
+Before: [0, 1, 3, 2]
+8 0 0 3
+After: [0, 1, 3, 0]
+
+Before: [2, 2, 1, 1]
+3 0 3 3
+After: [2, 2, 1, 1]
+
+Before: [3, 2, 3, 1]
+0 3 3 3
+After: [3, 2, 3, 0]
+
+Before: [2, 1, 1, 0]
+14 2 1 3
+After: [2, 1, 1, 0]
+
+Before: [2, 2, 1, 3]
+7 2 3 1
+After: [2, 0, 1, 3]
+
+Before: [2, 3, 3, 1]
+3 0 3 2
+After: [2, 3, 1, 1]
+
+Before: [1, 1, 2, 1]
+9 1 0 2
+After: [1, 1, 1, 1]
+
+Before: [0, 3, 2, 1]
+10 3 2 1
+After: [0, 1, 2, 1]
+
+Before: [0, 1, 0, 1]
+13 1 3 3
+After: [0, 1, 0, 1]
+
+Before: [1, 1, 1, 3]
+11 2 1 3
+After: [1, 1, 1, 2]
+
+Before: [3, 1, 1, 2]
+11 2 1 2
+After: [3, 1, 2, 2]
+
+Before: [1, 3, 2, 3]
+6 0 2 3
+After: [1, 3, 2, 0]
+
+Before: [0, 1, 2, 3]
+8 0 0 2
+After: [0, 1, 0, 3]
+
+Before: [3, 0, 1, 3]
+14 3 0 2
+After: [3, 0, 1, 3]
+
+Before: [2, 1, 2, 0]
+12 1 2 3
+After: [2, 1, 2, 0]
+
+Before: [0, 1, 1, 1]
+11 2 1 0
+After: [2, 1, 1, 1]
+
+Before: [2, 3, 2, 1]
+0 3 3 2
+After: [2, 3, 0, 1]
+
+Before: [1, 1, 0, 2]
+0 3 3 3
+After: [1, 1, 0, 0]
+
+Before: [1, 0, 0, 1]
+1 0 2 3
+After: [1, 0, 0, 0]
+
+Before: [3, 2, 1, 3]
+7 2 3 3
+After: [3, 2, 1, 0]
+
+Before: [3, 1, 1, 3]
+11 2 1 2
+After: [3, 1, 2, 3]
+
+Before: [0, 1, 2, 2]
+12 1 2 3
+After: [0, 1, 2, 0]
+
+Before: [3, 3, 2, 1]
+10 3 2 0
+After: [1, 3, 2, 1]
+
+Before: [1, 1, 3, 1]
+13 1 3 1
+After: [1, 1, 3, 1]
+
+Before: [2, 2, 1, 1]
+3 0 3 1
+After: [2, 1, 1, 1]
+
+Before: [2, 1, 2, 2]
+4 1 3 0
+After: [0, 1, 2, 2]
+
+Before: [1, 1, 1, 1]
+9 1 0 2
+After: [1, 1, 1, 1]
+
+Before: [1, 3, 2, 1]
+10 3 2 0
+After: [1, 3, 2, 1]
+
+Before: [2, 0, 2, 1]
+10 3 2 0
+After: [1, 0, 2, 1]
+
+Before: [1, 1, 0, 3]
+1 0 2 2
+After: [1, 1, 0, 3]
+
+Before: [1, 2, 0, 1]
+1 0 2 3
+After: [1, 2, 0, 0]
+
+Before: [1, 3, 0, 0]
+1 0 2 0
+After: [0, 3, 0, 0]
+
+Before: [2, 1, 1, 3]
+14 2 1 0
+After: [0, 1, 1, 3]
+
+Before: [1, 1, 1, 2]
+9 1 0 1
+After: [1, 1, 1, 2]
+
+Before: [1, 1, 0, 1]
+13 1 3 1
+After: [1, 1, 0, 1]
+
+Before: [2, 0, 0, 2]
+15 0 0 0
+After: [1, 0, 0, 2]
+
+Before: [2, 3, 1, 1]
+3 0 3 0
+After: [1, 3, 1, 1]
+
+Before: [0, 1, 2, 0]
+12 1 2 3
+After: [0, 1, 2, 0]
+
+Before: [1, 2, 1, 2]
+5 2 1 0
+After: [2, 2, 1, 2]
+
+Before: [2, 0, 2, 2]
+14 3 2 2
+After: [2, 0, 0, 2]
+
+Before: [0, 2, 2, 1]
+10 3 2 0
+After: [1, 2, 2, 1]
+
+Before: [2, 1, 0, 2]
+4 1 3 3
+After: [2, 1, 0, 0]
+
+Before: [1, 3, 0, 2]
+1 0 2 2
+After: [1, 3, 0, 2]
+
+Before: [0, 0, 2, 3]
+8 0 0 1
+After: [0, 0, 2, 3]
+
+Before: [2, 1, 1, 3]
+7 1 3 0
+After: [0, 1, 1, 3]
+
+Before: [3, 1, 2, 1]
+13 1 3 0
+After: [1, 1, 2, 1]
+
+Before: [2, 0, 1, 1]
+3 0 3 1
+After: [2, 1, 1, 1]
+
+Before: [1, 1, 2, 1]
+13 1 3 1
+After: [1, 1, 2, 1]
+
+Before: [0, 1, 2, 1]
+12 1 2 1
+After: [0, 0, 2, 1]
+
+Before: [2, 2, 3, 3]
+14 3 2 2
+After: [2, 2, 1, 3]
+
+Before: [3, 1, 1, 1]
+13 1 3 3
+After: [3, 1, 1, 1]
+
+Before: [3, 3, 3, 2]
+15 2 0 1
+After: [3, 1, 3, 2]
+
+Before: [2, 1, 2, 1]
+3 0 3 1
+After: [2, 1, 2, 1]
+
+Before: [3, 1, 2, 0]
+2 0 2 3
+After: [3, 1, 2, 1]
+
+Before: [1, 2, 1, 2]
+5 2 1 3
+After: [1, 2, 1, 2]
+
+Before: [3, 2, 1, 1]
+5 2 1 0
+After: [2, 2, 1, 1]
+
+Before: [0, 1, 2, 1]
+12 1 2 0
+After: [0, 1, 2, 1]
+
+Before: [2, 1, 1, 1]
+3 0 3 0
+After: [1, 1, 1, 1]
+
+Before: [3, 1, 1, 2]
+11 2 1 1
+After: [3, 2, 1, 2]
+
+Before: [1, 1, 1, 3]
+11 2 1 0
+After: [2, 1, 1, 3]
+
+Before: [1, 1, 2, 0]
+9 1 0 3
+After: [1, 1, 2, 1]
+
+Before: [0, 2, 2, 3]
+8 0 0 3
+After: [0, 2, 2, 0]
+
+Before: [0, 0, 2, 1]
+10 3 2 1
+After: [0, 1, 2, 1]
+
+Before: [0, 2, 3, 3]
+14 3 2 0
+After: [1, 2, 3, 3]
+
+Before: [2, 1, 0, 3]
+2 0 1 2
+After: [2, 1, 1, 3]
+
+Before: [3, 1, 2, 0]
+2 0 2 0
+After: [1, 1, 2, 0]
+
+Before: [3, 1, 0, 2]
+14 0 2 0
+After: [1, 1, 0, 2]
+
+Before: [2, 1, 3, 0]
+2 0 1 1
+After: [2, 1, 3, 0]
+
+Before: [1, 1, 1, 0]
+9 1 0 3
+After: [1, 1, 1, 1]
+
+Before: [1, 0, 0, 0]
+1 0 2 1
+After: [1, 0, 0, 0]
+
+Before: [0, 3, 2, 2]
+8 0 0 2
+After: [0, 3, 0, 2]
+
+Before: [3, 3, 2, 2]
+2 0 2 0
+After: [1, 3, 2, 2]
+
+Before: [0, 2, 1, 2]
+5 2 1 1
+After: [0, 2, 1, 2]
+
+Before: [3, 3, 2, 2]
+2 0 2 3
+After: [3, 3, 2, 1]
+
+Before: [0, 2, 1, 2]
+5 2 1 0
+After: [2, 2, 1, 2]
+
+Before: [1, 0, 2, 1]
+10 3 2 2
+After: [1, 0, 1, 1]
+
+Before: [0, 1, 0, 1]
+13 1 3 2
+After: [0, 1, 1, 1]
+
+Before: [3, 1, 1, 1]
+14 2 1 1
+After: [3, 0, 1, 1]
+
+Before: [0, 1, 0, 1]
+13 1 3 1
+After: [0, 1, 0, 1]
+
+Before: [2, 2, 0, 1]
+3 0 3 2
+After: [2, 2, 1, 1]
+
+Before: [3, 2, 1, 3]
+14 3 0 0
+After: [1, 2, 1, 3]
+
+Before: [1, 1, 2, 2]
+4 1 3 0
+After: [0, 1, 2, 2]
+
+Before: [3, 1, 2, 3]
+7 1 3 1
+After: [3, 0, 2, 3]
+
+Before: [3, 0, 3, 0]
+15 2 2 1
+After: [3, 1, 3, 0]
+
+Before: [0, 2, 2, 2]
+14 2 1 3
+After: [0, 2, 2, 1]
+
+Before: [1, 1, 2, 3]
+12 1 2 1
+After: [1, 0, 2, 3]
+
+Before: [3, 1, 1, 1]
+13 1 3 1
+After: [3, 1, 1, 1]
+
+Before: [2, 1, 1, 1]
+13 1 3 3
+After: [2, 1, 1, 1]
+
+Before: [2, 2, 2, 3]
+7 2 3 3
+After: [2, 2, 2, 0]
+
+Before: [2, 3, 3, 3]
+15 0 0 2
+After: [2, 3, 1, 3]
+
+Before: [3, 1, 2, 1]
+13 1 3 3
+After: [3, 1, 2, 1]
+
+Before: [3, 3, 3, 2]
+15 0 2 0
+After: [1, 3, 3, 2]
+
+Before: [3, 1, 0, 2]
+0 3 3 0
+After: [0, 1, 0, 2]
+
+Before: [2, 0, 3, 2]
+14 0 1 1
+After: [2, 1, 3, 2]
+
+Before: [1, 0, 2, 1]
+10 3 2 3
+After: [1, 0, 2, 1]
+
+Before: [1, 3, 3, 1]
+0 3 3 2
+After: [1, 3, 0, 1]
+
+Before: [0, 2, 2, 1]
+10 3 2 2
+After: [0, 2, 1, 1]
+
+Before: [2, 2, 1, 0]
+5 2 1 0
+After: [2, 2, 1, 0]
+
+Before: [2, 3, 0, 1]
+3 0 3 2
+After: [2, 3, 1, 1]
+
+Before: [1, 2, 2, 2]
+6 0 2 1
+After: [1, 0, 2, 2]
+
+Before: [0, 1, 2, 2]
+12 1 2 0
+After: [0, 1, 2, 2]
+
+Before: [1, 1, 0, 2]
+9 1 0 2
+After: [1, 1, 1, 2]
+
+Before: [0, 1, 2, 2]
+12 1 2 2
+After: [0, 1, 0, 2]
+
+Before: [2, 1, 2, 0]
+12 1 2 2
+After: [2, 1, 0, 0]
+
+Before: [2, 3, 3, 0]
+15 0 0 3
+After: [2, 3, 3, 1]
+
+Before: [2, 2, 0, 1]
+15 0 0 0
+After: [1, 2, 0, 1]
+
+Before: [2, 0, 3, 2]
+0 3 3 2
+After: [2, 0, 0, 2]
+
+Before: [3, 0, 3, 2]
+15 2 2 3
+After: [3, 0, 3, 1]
+
+Before: [2, 3, 2, 1]
+10 3 2 3
+After: [2, 3, 2, 1]
+
+Before: [2, 1, 2, 1]
+3 0 3 3
+After: [2, 1, 2, 1]
+
+Before: [1, 3, 0, 0]
+1 0 2 3
+After: [1, 3, 0, 0]
+
+Before: [3, 1, 2, 3]
+2 0 2 3
+After: [3, 1, 2, 1]
+
+Before: [2, 1, 1, 2]
+11 2 1 2
+After: [2, 1, 2, 2]
+
+Before: [1, 3, 2, 3]
+7 2 3 1
+After: [1, 0, 2, 3]
+
+Before: [0, 0, 0, 0]
+8 0 0 3
+After: [0, 0, 0, 0]
+
+Before: [1, 0, 3, 1]
+14 2 3 2
+After: [1, 0, 0, 1]
+
+Before: [3, 2, 0, 3]
+14 0 2 3
+After: [3, 2, 0, 1]
+
+Before: [3, 2, 2, 1]
+2 0 2 1
+After: [3, 1, 2, 1]
+
+Before: [2, 1, 2, 1]
+3 0 3 0
+After: [1, 1, 2, 1]
+
+Before: [2, 2, 0, 1]
+3 0 3 3
+After: [2, 2, 0, 1]
+
+Before: [0, 3, 3, 2]
+8 0 0 0
+After: [0, 3, 3, 2]
+
+Before: [3, 2, 0, 1]
+14 0 2 1
+After: [3, 1, 0, 1]
+
+Before: [1, 1, 1, 3]
+9 1 0 1
+After: [1, 1, 1, 3]
+
+Before: [0, 1, 0, 1]
+13 1 3 0
+After: [1, 1, 0, 1]
+
+Before: [1, 1, 1, 0]
+9 1 0 1
+After: [1, 1, 1, 0]
+
+Before: [1, 3, 2, 2]
+6 0 2 0
+After: [0, 3, 2, 2]
+
+Before: [2, 1, 1, 1]
+14 3 1 0
+After: [0, 1, 1, 1]
+
+Before: [1, 1, 3, 0]
+9 1 0 0
+After: [1, 1, 3, 0]
+
+Before: [2, 1, 3, 1]
+3 0 3 2
+After: [2, 1, 1, 1]
+
+Before: [2, 1, 1, 1]
+3 0 3 1
+After: [2, 1, 1, 1]
+
+Before: [3, 2, 1, 3]
+7 1 3 3
+After: [3, 2, 1, 0]
+
+Before: [2, 0, 3, 3]
+15 0 0 2
+After: [2, 0, 1, 3]
+
+Before: [3, 0, 2, 1]
+10 3 2 2
+After: [3, 0, 1, 1]
+
+Before: [1, 1, 2, 3]
+9 1 0 0
+After: [1, 1, 2, 3]
+
+Before: [1, 2, 1, 1]
+5 2 1 0
+After: [2, 2, 1, 1]
+
+Before: [0, 1, 2, 3]
+12 1 2 1
+After: [0, 0, 2, 3]
+
+Before: [1, 3, 0, 1]
+1 0 2 3
+After: [1, 3, 0, 0]
+
+Before: [2, 1, 0, 1]
+2 0 1 0
+After: [1, 1, 0, 1]
+
+Before: [3, 2, 2, 3]
+2 0 2 1
+After: [3, 1, 2, 3]
+
+Before: [1, 2, 0, 1]
+1 0 2 1
+After: [1, 0, 0, 1]
+
+Before: [1, 2, 2, 0]
+6 0 2 0
+After: [0, 2, 2, 0]
+
+Before: [2, 1, 1, 2]
+11 2 1 0
+After: [2, 1, 1, 2]
+
+Before: [3, 1, 1, 3]
+7 1 3 2
+After: [3, 1, 0, 3]
+
+Before: [2, 2, 1, 3]
+5 2 1 2
+After: [2, 2, 2, 3]
+
+Before: [3, 1, 1, 1]
+11 2 1 1
+After: [3, 2, 1, 1]
+
+Before: [2, 1, 2, 2]
+4 1 3 1
+After: [2, 0, 2, 2]
+
+Before: [1, 1, 2, 1]
+12 1 2 0
+After: [0, 1, 2, 1]
+
+Before: [1, 1, 0, 2]
+9 1 0 3
+After: [1, 1, 0, 1]
+
+Before: [3, 3, 2, 3]
+2 0 2 0
+After: [1, 3, 2, 3]
+
+Before: [1, 1, 2, 3]
+9 1 0 3
+After: [1, 1, 2, 1]
+
+Before: [2, 1, 2, 1]
+12 1 2 0
+After: [0, 1, 2, 1]
+
+Before: [1, 1, 0, 2]
+4 1 3 1
+After: [1, 0, 0, 2]
+
+Before: [1, 2, 2, 0]
+6 0 2 3
+After: [1, 2, 2, 0]
+
+Before: [2, 1, 1, 0]
+11 2 1 3
+After: [2, 1, 1, 2]
+
+Before: [1, 1, 0, 1]
+13 1 3 3
+After: [1, 1, 0, 1]
+
+Before: [3, 1, 2, 3]
+7 1 3 3
+After: [3, 1, 2, 0]
+
+Before: [0, 2, 1, 3]
+8 0 0 0
+After: [0, 2, 1, 3]
+
+Before: [3, 2, 1, 3]
+7 1 3 0
+After: [0, 2, 1, 3]
+
+Before: [1, 2, 2, 2]
+6 0 2 3
+After: [1, 2, 2, 0]
+
+Before: [1, 1, 1, 1]
+13 1 3 3
+After: [1, 1, 1, 1]
+
+Before: [2, 1, 3, 2]
+15 2 2 1
+After: [2, 1, 3, 2]
+
+Before: [2, 1, 0, 3]
+2 0 1 0
+After: [1, 1, 0, 3]
+
+Before: [1, 1, 2, 1]
+12 1 2 2
+After: [1, 1, 0, 1]
+
+Before: [1, 1, 3, 2]
+4 1 3 0
+After: [0, 1, 3, 2]
+
+Before: [2, 3, 2, 3]
+7 2 3 2
+After: [2, 3, 0, 3]
+
+Before: [2, 2, 1, 1]
+5 2 1 3
+After: [2, 2, 1, 2]
+
+Before: [0, 0, 2, 1]
+10 3 2 0
+After: [1, 0, 2, 1]
+
+Before: [3, 1, 0, 3]
+7 1 3 2
+After: [3, 1, 0, 3]
+
+Before: [2, 1, 3, 2]
+2 0 1 1
+After: [2, 1, 3, 2]
+
+Before: [2, 3, 1, 1]
+3 0 3 1
+After: [2, 1, 1, 1]
+
+Before: [2, 2, 1, 3]
+7 1 3 3
+After: [2, 2, 1, 0]
+
+Before: [3, 3, 3, 1]
+15 0 2 1
+After: [3, 1, 3, 1]
+
+Before: [0, 1, 1, 0]
+11 2 1 1
+After: [0, 2, 1, 0]
+
+Before: [1, 1, 1, 0]
+11 2 1 0
+After: [2, 1, 1, 0]
+
+Before: [3, 1, 3, 1]
+13 1 3 3
+After: [3, 1, 3, 1]
+
+Before: [0, 1, 3, 2]
+8 0 0 1
+After: [0, 0, 3, 2]
+
+Before: [2, 2, 0, 3]
+7 1 3 3
+After: [2, 2, 0, 0]
+
+Before: [1, 0, 2, 1]
+6 0 2 2
+After: [1, 0, 0, 1]
+
+Before: [1, 3, 0, 2]
+0 3 3 3
+After: [1, 3, 0, 0]
+
+Before: [1, 1, 0, 1]
+9 1 0 3
+After: [1, 1, 0, 1]
+
+Before: [1, 2, 2, 3]
+7 1 3 1
+After: [1, 0, 2, 3]
+
+Before: [1, 1, 2, 2]
+12 1 2 3
+After: [1, 1, 2, 0]
+
+Before: [1, 1, 2, 0]
+12 1 2 3
+After: [1, 1, 2, 0]
+
+Before: [0, 1, 0, 2]
+4 1 3 1
+After: [0, 0, 0, 2]
+
+Before: [1, 1, 1, 0]
+9 1 0 0
+After: [1, 1, 1, 0]
+
+Before: [1, 1, 2, 0]
+9 1 0 0
+After: [1, 1, 2, 0]
+
+Before: [1, 2, 1, 1]
+5 2 1 3
+After: [1, 2, 1, 2]
+
+Before: [3, 0, 3, 2]
+15 2 2 0
+After: [1, 0, 3, 2]
+
+Before: [2, 2, 1, 3]
+7 2 3 3
+After: [2, 2, 1, 0]
+
+Before: [3, 1, 2, 2]
+4 1 3 3
+After: [3, 1, 2, 0]
+
+Before: [3, 1, 2, 1]
+15 0 0 1
+After: [3, 1, 2, 1]
+
+Before: [2, 3, 2, 1]
+10 3 2 0
+After: [1, 3, 2, 1]
+
+Before: [2, 1, 2, 2]
+0 3 3 1
+After: [2, 0, 2, 2]
+
+Before: [1, 2, 0, 2]
+1 0 2 1
+After: [1, 0, 0, 2]
+
+Before: [3, 3, 2, 0]
+2 0 2 0
+After: [1, 3, 2, 0]
+
+Before: [0, 1, 1, 2]
+11 2 1 1
+After: [0, 2, 1, 2]
+
+Before: [3, 1, 2, 1]
+13 1 3 1
+After: [3, 1, 2, 1]
+
+Before: [3, 1, 3, 3]
+15 2 0 3
+After: [3, 1, 3, 1]
+
+Before: [0, 1, 0, 1]
+8 0 0 3
+After: [0, 1, 0, 0]
+
+Before: [2, 3, 2, 1]
+0 3 3 3
+After: [2, 3, 2, 0]
+
+Before: [2, 1, 1, 2]
+4 1 3 2
+After: [2, 1, 0, 2]
+
+Before: [0, 1, 3, 1]
+13 1 3 0
+After: [1, 1, 3, 1]
+
+Before: [2, 2, 1, 1]
+5 2 1 0
+After: [2, 2, 1, 1]
+
+Before: [3, 1, 2, 0]
+15 0 0 0
+After: [1, 1, 2, 0]
+
+Before: [1, 1, 1, 1]
+9 1 0 0
+After: [1, 1, 1, 1]
+
+Before: [1, 1, 2, 2]
+12 1 2 2
+After: [1, 1, 0, 2]
+
+Before: [1, 1, 2, 1]
+10 3 2 0
+After: [1, 1, 2, 1]
+
+Before: [2, 0, 1, 1]
+3 0 3 3
+After: [2, 0, 1, 1]
diff --git a/2018/inputs/16_2.txt b/2018/inputs/16_2.txt
new file mode 100644
index 0000000..6f6f812
--- /dev/null
+++ b/2018/inputs/16_2.txt
@@ -0,0 +1,1014 @@
+8 0 0 2
+5 2 2 2
+6 3 1 1
+8 0 0 3
+5 3 0 3
+9 2 3 1
+8 1 3 1
+8 1 2 1
+11 0 1 0
+10 0 0 1
+8 0 0 2
+5 2 3 2
+6 3 0 3
+8 2 0 0
+5 0 1 0
+12 3 2 0
+8 0 3 0
+11 1 0 1
+10 1 1 3
+6 1 2 0
+8 1 0 1
+5 1 0 1
+6 0 0 2
+5 0 1 1
+8 1 3 1
+11 3 1 3
+10 3 3 2
+6 3 0 3
+6 2 1 1
+4 3 1 0
+8 0 3 0
+11 0 2 2
+10 2 0 1
+8 1 0 0
+5 0 1 0
+8 3 0 2
+5 2 0 2
+6 2 1 3
+8 0 2 3
+8 3 3 3
+8 3 3 3
+11 3 1 1
+10 1 1 3
+6 3 3 2
+6 0 0 1
+8 0 2 0
+8 0 1 0
+8 0 1 0
+11 3 0 3
+10 3 0 0
+6 2 2 1
+6 1 0 3
+13 1 2 1
+8 1 2 1
+11 1 0 0
+10 0 3 2
+6 2 0 0
+6 3 1 1
+6 2 0 3
+9 0 3 1
+8 1 1 1
+8 1 3 1
+11 1 2 2
+10 2 0 0
+6 3 1 1
+6 2 1 2
+6 0 2 3
+7 3 2 1
+8 1 2 1
+8 1 2 1
+11 1 0 0
+10 0 3 3
+6 3 1 2
+6 1 2 0
+6 0 1 1
+6 2 1 1
+8 1 1 1
+11 3 1 3
+10 3 3 1
+6 2 0 3
+8 0 0 2
+5 2 0 2
+6 2 2 0
+15 0 3 0
+8 0 1 0
+8 0 2 0
+11 0 1 1
+10 1 0 0
+6 3 1 1
+6 0 0 3
+6 2 1 2
+7 3 2 2
+8 2 2 2
+11 2 0 0
+10 0 1 1
+6 1 0 3
+8 0 0 0
+5 0 2 0
+8 0 0 2
+5 2 0 2
+3 0 3 2
+8 2 3 2
+8 2 2 2
+11 1 2 1
+10 1 1 3
+8 2 0 2
+5 2 3 2
+6 3 2 0
+6 1 3 1
+8 1 2 2
+8 2 1 2
+11 2 3 3
+6 1 1 0
+8 1 0 2
+5 2 0 2
+6 2 0 0
+8 0 3 0
+11 3 0 3
+10 3 3 2
+6 2 1 0
+6 2 2 3
+6 0 1 1
+9 0 3 0
+8 0 1 0
+8 0 1 0
+11 0 2 2
+10 2 3 3
+6 3 1 1
+8 3 0 2
+5 2 1 2
+6 1 3 0
+5 0 1 0
+8 0 2 0
+11 0 3 3
+10 3 0 0
+6 1 3 3
+8 0 0 2
+5 2 0 2
+6 0 1 1
+5 3 1 2
+8 2 2 2
+11 0 2 0
+10 0 2 3
+6 2 1 1
+6 2 0 2
+6 3 3 0
+13 1 0 1
+8 1 2 1
+11 1 3 3
+10 3 2 2
+6 1 1 3
+6 0 2 1
+6 0 2 0
+5 3 1 3
+8 3 2 3
+11 2 3 2
+10 2 3 3
+6 1 3 0
+6 0 0 2
+6 3 1 1
+8 0 2 1
+8 1 3 1
+11 3 1 3
+10 3 0 1
+6 2 2 0
+6 2 1 3
+6 3 3 2
+9 0 3 2
+8 2 2 2
+8 2 3 2
+11 2 1 1
+10 1 3 3
+6 0 3 2
+8 2 0 1
+5 1 3 1
+2 0 1 1
+8 1 1 1
+11 1 3 3
+10 3 3 2
+6 3 0 1
+6 1 1 3
+3 0 3 1
+8 1 3 1
+11 2 1 2
+10 2 1 0
+6 2 1 1
+6 1 3 2
+6 2 0 3
+9 1 3 3
+8 3 3 3
+11 3 0 0
+10 0 3 2
+6 2 3 0
+6 1 0 3
+3 0 3 3
+8 3 2 3
+11 2 3 2
+10 2 2 1
+6 1 2 3
+6 2 3 2
+3 0 3 2
+8 2 1 2
+8 2 2 2
+11 2 1 1
+10 1 0 2
+6 3 2 1
+6 3 3 0
+11 3 3 1
+8 1 2 1
+8 1 2 1
+11 2 1 2
+6 2 1 1
+13 1 0 0
+8 0 3 0
+8 0 1 0
+11 0 2 2
+10 2 1 3
+8 1 0 0
+5 0 1 0
+6 0 0 2
+8 0 2 0
+8 0 3 0
+8 0 2 0
+11 3 0 3
+10 3 3 1
+6 3 3 2
+6 2 1 0
+6 2 2 3
+15 0 3 3
+8 3 2 3
+11 3 1 1
+10 1 3 2
+6 3 1 1
+8 2 0 3
+5 3 0 3
+4 1 0 1
+8 1 2 1
+11 2 1 2
+10 2 0 1
+6 3 1 2
+6 1 1 3
+6 1 0 0
+8 3 2 3
+8 3 2 3
+11 1 3 1
+10 1 2 3
+6 2 1 1
+6 2 1 2
+10 0 2 2
+8 2 1 2
+11 3 2 3
+6 0 0 1
+6 2 1 2
+10 0 2 0
+8 0 3 0
+11 3 0 3
+10 3 1 2
+8 2 0 3
+5 3 0 3
+6 1 1 0
+11 0 0 3
+8 3 2 3
+11 3 2 2
+10 2 3 3
+6 2 1 1
+6 3 2 2
+6 2 2 0
+0 0 2 0
+8 0 1 0
+11 0 3 3
+10 3 3 2
+6 2 1 3
+6 2 0 0
+6 3 0 1
+15 0 3 3
+8 3 1 3
+8 3 3 3
+11 3 2 2
+10 2 3 1
+8 1 0 0
+5 0 1 0
+6 3 3 2
+8 0 0 3
+5 3 1 3
+8 0 2 3
+8 3 1 3
+11 3 1 1
+10 1 1 3
+6 0 0 1
+6 2 1 2
+10 0 2 1
+8 1 2 1
+11 1 3 3
+10 3 2 0
+8 0 0 2
+5 2 0 2
+6 3 2 3
+6 3 3 1
+12 3 2 1
+8 1 1 1
+11 1 0 0
+10 0 0 3
+6 3 2 1
+6 2 2 0
+6 3 3 2
+0 0 2 0
+8 0 3 0
+8 0 1 0
+11 0 3 3
+10 3 3 2
+6 1 3 1
+8 1 0 3
+5 3 2 3
+8 0 0 0
+5 0 2 0
+1 1 3 0
+8 0 1 0
+11 2 0 2
+6 3 1 1
+6 2 0 0
+4 1 0 1
+8 1 2 1
+11 2 1 2
+10 2 1 1
+6 3 0 2
+6 1 2 3
+3 0 3 0
+8 0 1 0
+11 0 1 1
+8 3 0 2
+5 2 2 2
+6 2 0 3
+8 2 0 0
+5 0 3 0
+2 2 0 2
+8 2 1 2
+11 1 2 1
+10 1 2 0
+6 3 0 1
+8 0 0 2
+5 2 0 2
+14 2 3 1
+8 1 2 1
+11 1 0 0
+10 0 2 3
+6 3 3 2
+6 1 3 0
+8 3 0 1
+5 1 1 1
+11 1 0 2
+8 2 3 2
+8 2 3 2
+11 3 2 3
+10 3 3 1
+6 2 2 2
+6 0 2 3
+7 3 2 0
+8 0 2 0
+8 0 2 0
+11 1 0 1
+10 1 2 3
+6 3 2 0
+8 2 0 2
+5 2 0 2
+8 1 0 1
+5 1 3 1
+0 2 0 0
+8 0 3 0
+11 0 3 3
+10 3 2 1
+6 1 1 0
+8 3 0 3
+5 3 0 3
+6 1 1 2
+6 3 0 2
+8 2 2 2
+11 2 1 1
+10 1 3 2
+8 3 0 1
+5 1 1 1
+6 3 1 3
+11 0 0 1
+8 1 1 1
+11 1 2 2
+10 2 1 1
+6 1 2 2
+6 3 2 0
+6 2 1 3
+12 0 2 0
+8 0 3 0
+11 1 0 1
+10 1 1 2
+6 2 3 0
+8 2 0 3
+5 3 1 3
+6 3 1 1
+5 3 1 3
+8 3 2 3
+11 2 3 2
+6 0 3 3
+6 3 0 0
+8 2 0 1
+5 1 2 1
+13 1 0 0
+8 0 1 0
+11 0 2 2
+10 2 3 1
+6 2 1 2
+6 1 2 3
+6 3 0 0
+2 2 0 3
+8 3 3 3
+11 1 3 1
+10 1 2 3
+6 1 3 0
+6 3 0 1
+5 0 1 1
+8 1 2 1
+11 1 3 3
+10 3 3 2
+6 1 3 3
+8 0 0 1
+5 1 0 1
+8 1 0 0
+5 0 2 0
+3 0 3 1
+8 1 2 1
+11 2 1 2
+6 1 1 0
+6 0 2 1
+8 3 0 3
+5 3 2 3
+5 0 1 0
+8 0 3 0
+8 0 2 0
+11 0 2 2
+6 1 0 1
+6 2 1 0
+15 0 3 3
+8 3 3 3
+11 3 2 2
+6 0 2 1
+6 2 3 3
+6 3 3 0
+4 0 3 1
+8 1 2 1
+11 2 1 2
+6 0 1 3
+8 0 0 0
+5 0 2 0
+8 3 0 1
+5 1 2 1
+6 3 0 0
+8 0 2 0
+8 0 3 0
+11 0 2 2
+10 2 1 3
+8 2 0 2
+5 2 3 2
+6 1 1 1
+6 2 3 0
+1 1 0 2
+8 2 3 2
+11 3 2 3
+10 3 0 0
+6 0 3 3
+8 3 0 1
+5 1 0 1
+6 2 0 2
+7 3 2 2
+8 2 2 2
+11 0 2 0
+10 0 0 3
+6 2 3 1
+8 3 0 2
+5 2 0 2
+6 3 3 0
+13 1 0 2
+8 2 3 2
+8 2 3 2
+11 3 2 3
+8 3 0 2
+5 2 2 2
+2 2 0 1
+8 1 3 1
+11 3 1 3
+10 3 2 2
+6 1 3 3
+6 3 3 1
+6 2 0 0
+3 0 3 3
+8 3 3 3
+11 3 2 2
+10 2 2 0
+6 1 1 1
+6 2 1 3
+8 2 0 2
+5 2 0 2
+14 2 3 2
+8 2 2 2
+8 2 3 2
+11 2 0 0
+10 0 1 3
+6 3 0 1
+6 3 2 2
+6 2 0 0
+6 2 1 0
+8 0 2 0
+11 3 0 3
+10 3 0 1
+6 0 1 3
+6 2 3 2
+8 3 0 0
+5 0 0 0
+7 3 2 3
+8 3 3 3
+8 3 2 3
+11 1 3 1
+10 1 1 2
+6 2 0 0
+8 0 0 3
+5 3 1 3
+6 1 1 1
+1 3 0 1
+8 1 2 1
+11 1 2 2
+10 2 2 3
+6 0 2 1
+6 3 1 0
+6 2 2 2
+2 2 0 1
+8 1 3 1
+8 1 1 1
+11 1 3 3
+10 3 1 2
+6 1 0 1
+6 2 2 3
+1 1 3 0
+8 0 2 0
+8 0 3 0
+11 2 0 2
+10 2 3 1
+6 2 0 0
+6 2 0 2
+15 0 3 3
+8 3 1 3
+11 3 1 1
+10 1 0 3
+6 3 0 2
+6 1 3 1
+0 0 2 2
+8 2 3 2
+11 3 2 3
+10 3 3 0
+6 1 2 3
+6 3 1 1
+6 0 0 2
+12 1 2 3
+8 3 3 3
+8 3 3 3
+11 3 0 0
+10 0 3 1
+8 1 0 0
+5 0 2 0
+8 1 0 2
+5 2 2 2
+6 0 2 3
+7 3 2 2
+8 2 2 2
+11 2 1 1
+10 1 2 3
+6 2 3 1
+6 3 1 2
+13 1 2 0
+8 0 3 0
+11 0 3 3
+10 3 1 1
+6 1 2 3
+6 3 1 0
+8 3 2 0
+8 0 1 0
+11 1 0 1
+6 1 3 0
+6 2 2 2
+6 3 0 3
+10 0 2 0
+8 0 1 0
+11 0 1 1
+6 3 0 0
+2 2 0 3
+8 3 1 3
+11 3 1 1
+10 1 2 3
+6 1 2 2
+8 1 0 1
+5 1 1 1
+6 2 2 0
+1 1 0 0
+8 0 3 0
+11 3 0 3
+10 3 1 0
+6 2 0 3
+6 2 0 2
+1 1 3 3
+8 3 1 3
+11 3 0 0
+10 0 0 3
+6 3 2 1
+8 3 0 0
+5 0 2 0
+6 3 2 2
+0 0 2 2
+8 2 1 2
+11 3 2 3
+10 3 3 0
+8 0 0 3
+5 3 0 3
+6 1 3 1
+6 2 2 2
+7 3 2 3
+8 3 1 3
+8 3 3 3
+11 0 3 0
+10 0 0 3
+6 3 2 2
+6 2 1 0
+0 0 2 1
+8 1 3 1
+8 1 2 1
+11 1 3 3
+8 1 0 2
+5 2 2 2
+6 3 1 0
+6 3 3 1
+2 2 1 1
+8 1 1 1
+11 3 1 3
+10 3 1 1
+6 3 2 3
+6 2 0 0
+6 3 0 2
+13 0 2 3
+8 3 3 3
+8 3 1 3
+11 3 1 1
+10 1 2 3
+8 2 0 0
+5 0 1 0
+8 3 0 2
+5 2 2 2
+8 0 0 1
+5 1 0 1
+11 0 0 1
+8 1 2 1
+11 3 1 3
+10 3 3 0
+6 0 1 3
+6 3 3 1
+6 3 1 2
+14 3 2 3
+8 3 3 3
+11 0 3 0
+10 0 2 3
+6 1 0 1
+6 1 0 0
+6 2 3 2
+10 0 2 1
+8 1 1 1
+8 1 2 1
+11 1 3 3
+6 1 1 2
+6 0 3 1
+5 0 1 2
+8 2 3 2
+11 3 2 3
+10 3 2 1
+8 3 0 3
+5 3 2 3
+8 1 0 0
+5 0 2 0
+6 3 3 2
+0 0 2 3
+8 3 2 3
+8 3 1 3
+11 3 1 1
+10 1 2 0
+6 1 3 3
+8 3 0 2
+5 2 1 2
+6 0 1 1
+5 3 1 3
+8 3 1 3
+11 0 3 0
+10 0 3 1
+6 1 3 0
+6 0 3 3
+8 1 0 2
+5 2 2 2
+7 3 2 3
+8 3 2 3
+11 3 1 1
+6 0 0 2
+6 2 3 3
+6 0 3 0
+14 2 3 0
+8 0 1 0
+8 0 1 0
+11 0 1 1
+10 1 0 3
+6 3 0 2
+6 2 2 0
+6 2 0 1
+13 0 2 1
+8 1 3 1
+8 1 1 1
+11 3 1 3
+10 3 2 1
+6 3 1 3
+6 1 2 0
+8 0 2 2
+8 2 3 2
+11 1 2 1
+6 1 0 3
+6 3 3 2
+11 0 0 2
+8 2 2 2
+11 1 2 1
+10 1 2 3
+6 0 3 0
+8 1 0 2
+5 2 2 2
+6 3 2 1
+2 2 1 2
+8 2 1 2
+11 3 2 3
+6 0 0 2
+6 1 3 1
+8 1 2 0
+8 0 3 0
+8 0 2 0
+11 0 3 3
+10 3 2 2
+6 2 2 0
+6 1 2 3
+3 0 3 0
+8 0 2 0
+11 2 0 2
+10 2 3 3
+6 0 0 1
+6 2 0 0
+6 3 3 2
+0 0 2 2
+8 2 1 2
+8 2 1 2
+11 2 3 3
+10 3 1 0
+6 2 3 1
+6 2 3 3
+8 3 0 2
+5 2 0 2
+14 2 3 2
+8 2 3 2
+11 2 0 0
+10 0 0 1
+8 2 0 2
+5 2 0 2
+6 1 0 0
+1 0 3 3
+8 3 2 3
+8 3 2 3
+11 1 3 1
+6 2 2 0
+6 2 0 3
+6 1 3 2
+15 0 3 0
+8 0 2 0
+11 1 0 1
+10 1 2 0
+6 3 0 1
+6 0 3 2
+6 1 1 3
+12 1 2 1
+8 1 1 1
+11 1 0 0
+10 0 1 2
+6 3 1 1
+6 3 1 0
+5 3 1 3
+8 3 3 3
+11 2 3 2
+10 2 1 0
+6 0 2 3
+6 2 3 2
+8 1 0 1
+5 1 0 1
+7 3 2 3
+8 3 1 3
+8 3 1 3
+11 3 0 0
+6 2 1 1
+6 3 0 2
+6 0 1 3
+14 3 2 2
+8 2 2 2
+11 2 0 0
+8 2 0 2
+5 2 0 2
+6 1 1 3
+6 2 3 1
+8 1 3 1
+11 0 1 0
+10 0 0 1
+6 2 1 0
+6 3 1 2
+1 3 0 0
+8 0 2 0
+11 0 1 1
+10 1 3 0
+6 0 3 3
+6 1 1 1
+14 3 2 1
+8 1 2 1
+11 0 1 0
+10 0 3 2
+6 2 3 1
+6 2 0 0
+6 1 1 3
+1 3 0 0
+8 0 1 0
+11 0 2 2
+10 2 0 1
+6 0 2 2
+6 2 0 3
+6 2 1 0
+15 0 3 3
+8 3 2 3
+8 3 3 3
+11 1 3 1
+6 3 0 0
+8 0 0 3
+5 3 1 3
+11 3 3 3
+8 3 1 3
+8 3 1 3
+11 3 1 1
+10 1 3 3
+6 2 0 0
+6 3 0 2
+8 0 0 1
+5 1 2 1
+0 0 2 1
+8 1 1 1
+8 1 1 1
+11 1 3 3
+10 3 1 2
+6 2 0 1
+6 2 3 3
+15 0 3 1
+8 1 1 1
+8 1 1 1
+11 1 2 2
+10 2 1 0
+6 0 2 3
+6 3 3 1
+6 2 1 2
+7 3 2 3
+8 3 3 3
+11 3 0 0
+10 0 0 2
+6 2 3 0
+6 0 0 3
+2 0 1 3
+8 3 3 3
+11 2 3 2
+10 2 2 3
+6 1 0 2
+6 1 0 1
+1 1 0 1
+8 1 1 1
+11 3 1 3
+8 1 0 1
+5 1 3 1
+2 0 1 1
+8 1 3 1
+11 3 1 3
+10 3 0 2
+6 2 2 3
+8 2 0 1
+5 1 3 1
+15 0 3 1
+8 1 1 1
+8 1 1 1
+11 2 1 2
+10 2 3 0
+6 3 0 1
+6 1 0 3
+6 2 1 2
+2 2 1 2
+8 2 2 2
+8 2 3 2
+11 0 2 0
+10 0 0 1
+6 1 0 0
+6 2 2 2
+10 0 2 2
+8 2 1 2
+11 1 2 1
+10 1 2 0
+6 3 1 1
+6 2 0 3
+6 2 0 2
+9 2 3 2
+8 2 1 2
+11 0 2 0
+10 0 2 2
+6 1 1 3
+6 0 2 1
+8 0 0 0
+5 0 1 0
+5 3 1 3
+8 3 2 3
+11 3 2 2
+10 2 0 1
+6 1 2 2
+6 2 1 3
+1 0 3 2
+8 2 2 2
+11 2 1 1
+6 3 3 2
+6 2 3 0
+15 0 3 2
+8 2 2 2
+11 2 1 1
+10 1 2 0
+6 2 1 1
+6 3 3 2
+9 1 3 3
+8 3 3 3
+11 0 3 0
+10 0 2 1
+6 0 0 2
+6 2 0 0
+6 1 1 3
+1 3 0 2
+8 2 1 2
+8 2 1 2
+11 2 1 1
+10 1 0 0
+6 2 2 1
+6 0 0 3
+6 3 2 2
+13 1 2 2
+8 2 3 2
+11 0 2 0
+10 0 0 2
+6 2 2 3
+8 2 0 0
+5 0 0 0
+6 3 1 1
+6 3 0 0
+8 0 3 0
+11 0 2 2
+10 2 0 1
+6 0 1 2
+6 3 2 0
+6 0 1 3
+12 0 2 3
+8 3 1 3
+8 3 2 3
+11 3 1 1
+10 1 3 2
+6 2 2 1
+6 2 3 0
+6 3 2 3
+4 3 1 1
+8 1 2 1
+11 2 1 2
+10 2 0 0
+8 3 0 3
+5 3 1 3
+6 1 1 1
+6 3 3 2
+8 3 2 3
+8 3 2 3
+11 0 3 0
+6 2 3 2
+6 2 0 1
+6 2 0 3
+9 1 3 3
+8 3 1 3
+11 0 3 0
+10 0 1 2
+6 1 3 3
+6 2 2 0
+11 3 3 3
+8 3 2 3
+11 2 3 2
+6 2 0 3
+6 3 1 1
+15 0 3 0
+8 0 2 0
+8 0 2 0
+11 2 0 2
+10 2 2 3
+8 2 0 0
+5 0 1 0
+8 3 0 1
+5 1 1 1
+6 0 0 2
+8 1 2 2
+8 2 2 2
+8 2 1 2
+11 3 2 3
+10 3 2 0
diff --git a/2018/inputs/17.txt b/2018/inputs/17.txt
new file mode 100644
index 0000000..1e2ccdd
--- /dev/null
+++ b/2018/inputs/17.txt
@@ -0,0 +1,1713 @@
+y=1181, x=576..579
+y=434, x=498..503
+x=647, y=653..675
+y=1204, x=593..595
+y=268, x=475..498
+x=599, y=619..638
+y=1130, x=452..478
+x=439, y=1365..1377
+y=652, x=589..595
+y=1552, x=560..577
+x=439, y=852..867
+x=605, y=292..298
+x=489, y=709..718
+x=567, y=1087..1097
+y=1774, x=631..634
+x=649, y=592..612
+x=610, y=533..555
+x=564, y=996..1008
+x=651, y=416..441
+y=1106, x=502..519
+y=1015, x=479..487
+x=572, y=25..35
+x=630, y=849..865
+x=573, y=884..897
+x=614, y=667..688
+x=464, y=1542..1567
+x=645, y=258..270
+y=1029, x=656..662
+y=1502, x=483..511
+x=589, y=1553..1555
+x=535, y=1792..1795
+x=469, y=166..193
+x=484, y=1117..1142
+x=655, y=1277..1295
+x=598, y=162..170
+y=620, x=430..455
+x=665, y=1205..1212
+x=501, y=1347..1364
+x=661, y=664..684
+x=583, y=131..142
+x=542, y=722..727
+x=475, y=748..761
+x=602, y=1386..1393
+x=578, y=1651..1662
+y=1711, x=598..603
+y=164, x=642..660
+x=488, y=1176..1183
+x=644, y=207..221
+x=654, y=1678..1691
+y=1673, x=448..454
+x=630, y=1299..1312
+y=695, x=472..474
+x=465, y=1022..1045
+x=645, y=1216..1243
+x=623, y=423..437
+x=625, y=200..219
+x=565, y=1153..1166
+x=490, y=1510..1519
+x=553, y=941..947
+x=634, y=1101..1126
+x=515, y=111..113
+y=1146, x=427..438
+y=1096, x=451..460
+x=464, y=1339..1346
+x=612, y=1383..1396
+y=500, x=516..532
+x=555, y=941..947
+x=528, y=1243..1270
+x=646, y=1136..1146
+y=887, x=470..484
+x=617, y=316..343
+x=575, y=1060..1069
+y=1047, x=443..455
+y=1120, x=527..580
+x=514, y=126..135
+y=292, x=484..500
+x=556, y=75..91
+y=646, x=494..518
+x=644, y=552..568
+x=509, y=8..17
+y=735, x=591..614
+x=586, y=1215..1228
+y=1335, x=443..465
+y=495, x=522..526
+x=610, y=864..867
+y=221, x=639..644
+y=1346, x=464..469
+x=489, y=967..983
+x=602, y=1277..1289
+x=620, y=1348..1375
+x=575, y=1736..1744
+x=629, y=462..466
+y=270, x=645..652
+x=518, y=1244..1270
+x=576, y=1151..1162
+x=483, y=970..973
+y=1349, x=606..610
+y=1335, x=634..655
+y=1671, x=650..657
+x=619, y=243..265
+x=585, y=558..563
+x=536, y=1876..1887
+x=652, y=551..559
+x=593, y=1256..1268
+x=440, y=1480..1496
+y=1401, x=520..541
+x=624, y=1297..1306
+x=501, y=1510..1528
+x=587, y=567..575
+y=1470, x=560..580
+y=776, x=519..523
+x=601, y=981..983
+x=516, y=655..666
+y=1803, x=573..578
+x=504, y=1654..1677
+y=1931, x=537..667
+x=540, y=145..163
+x=616, y=204..210
+x=473, y=1856..1859
+x=547, y=241..259
+x=664, y=932..939
+x=475, y=306..316
+y=1572, x=622..628
+x=641, y=985..1001
+x=527, y=1572..1575
+x=447, y=1116..1124
+x=595, y=650..652
+y=1326, x=616..619
+x=626, y=822..835
+x=583, y=1063..1075
+x=576, y=1212..1222
+y=1206, x=486..495
+x=602, y=1885..1910
+x=460, y=1781..1805
+y=996, x=521..527
+x=591, y=1083..1103
+x=569, y=1563..1574
+y=785, x=560..579
+y=857, x=522..524
+x=599, y=804..805
+x=651, y=1724..1736
+y=637, x=449..467
+x=455, y=815..842
+x=476, y=1327..1345
+y=1533, x=615..624
+y=1268, x=633..655
+x=653, y=295..299
+x=522, y=388..415
+y=1365, x=462..487
+y=1430, x=428..438
+x=487, y=488..499
+y=1150, x=599..608
+x=559, y=1922..1927
+x=664, y=170..193
+y=1531, x=441..444
+y=1315, x=600..604
+x=603, y=1541..1543
+x=664, y=1401..1420
+x=580, y=322..345
+x=449, y=627..637
+y=1749, x=497..511
+x=577, y=1060..1069
+y=289, x=492..494
+x=443, y=1330..1335
+x=487, y=405..416
+x=603, y=18..33
+y=1312, x=612..630
+x=605, y=625..633
+x=546, y=1230..1232
+x=553, y=1126..1142
+x=441, y=936..943
+y=1715, x=544..641
+y=1693, x=594..596
+x=649, y=1151..1170
+x=490, y=405..416
+x=602, y=1602..1623
+y=142, x=580..583
+x=574, y=646..660
+y=789, x=479..485
+y=1093, x=640..655
+y=1200, x=501..508
+y=225, x=557..572
+x=591, y=727..735
+x=515, y=1653..1665
+x=467, y=489..499
+y=193, x=459..469
+x=593, y=1143..1162
+x=461, y=489..493
+x=547, y=198..217
+x=522, y=61..73
+x=626, y=1767..1779
+y=446, x=437..448
+y=840, x=443..451
+x=496, y=597..601
+x=650, y=1004..1013
+x=429, y=936..943
+x=557, y=812..822
+x=542, y=1633..1635
+x=469, y=1607..1615
+y=1654, x=624..626
+x=504, y=787..798
+x=569, y=1868..1875
+y=902, x=641..644
+y=1170, x=649..651
+x=606, y=532..555
+x=493, y=1509..1528
+x=452, y=1410..1425
+x=535, y=468..480
+x=599, y=1150..1158
+y=1486, x=429..437
+y=415, x=518..522
+x=511, y=1490..1502
+x=634, y=1765..1774
+x=539, y=869..879
+x=470, y=1413..1418
+x=516, y=1641..1648
+y=598, x=432..434
+x=494, y=807..818
+x=477, y=1875..1898
+x=577, y=77..98
+x=477, y=324..337
+x=451, y=1510..1535
+x=590, y=838..849
+x=565, y=1872..1898
+x=516, y=825..831
+x=541, y=869..879
+y=695, x=427..444
+x=437, y=1166..1194
+x=593, y=1279..1292
+x=518, y=469..480
+x=532, y=1851..1861
+y=1861, x=532..536
+y=1485, x=636..652
+y=1887, x=493..496
+x=436, y=749..766
+y=1268, x=593..610
+y=1145, x=512..520
+y=334, x=482..485
+y=1351, x=553..565
+x=491, y=1547..1556
+y=1908, x=530..549
+y=521, x=607..634
+x=602, y=1687..1698
+x=631, y=1725..1736
+y=1792, x=432..456
+x=530, y=1572..1575
+x=584, y=1154..1166
+x=620, y=1286..1292
+x=537, y=1918..1931
+x=608, y=1474..1489
+x=461, y=989..1006
+x=477, y=1672..1678
+y=1287, x=492..495
+y=1318, x=532..554
+x=463, y=12..30
+x=628, y=595..608
+x=560, y=778..785
+y=1624, x=472..480
+y=673, x=486..489
+x=475, y=1241..1254
+y=1479, x=472..485
+x=458, y=468..477
+y=1298, x=494..497
+x=641, y=1437..1447
+y=973, x=464..483
+y=1695, x=594..596
+x=460, y=1084..1096
+x=613, y=293..298
+x=503, y=1548..1556
+x=574, y=915..931
+y=25, x=482..501
+x=637, y=529..549
+x=441, y=1440..1453
+y=91, x=556..567
+x=432, y=1695..1711
+y=1375, x=620..644
+y=1912, x=553..556
+y=413, x=595..598
+x=584, y=1257..1281
+y=131, x=551..556
+x=493, y=573..576
+x=551, y=860..864
+x=469, y=79..91
+x=462, y=1144..1150
+x=513, y=812..814
+y=1789, x=582..607
+y=1246, x=590..592
+x=544, y=1703..1715
+y=677, x=480..496
+x=432, y=588..598
+x=566, y=556..559
+y=1926, x=511..515
+y=592, x=455..478
+x=610, y=1647..1659
+x=651, y=213..238
+y=1622, x=543..565
+x=451, y=90..104
+x=576, y=1174..1181
+y=1243, x=645..651
+x=553, y=1343..1351
+x=572, y=201..225
+x=648, y=947..970
+x=581, y=444..462
+x=459, y=36..59
+x=642, y=147..164
+x=561, y=1634..1635
+x=593, y=697..707
+x=557, y=200..225
+y=1077, x=457..461
+y=1429, x=600..626
+x=631, y=781..785
+x=565, y=1343..1351
+x=651, y=891..905
+x=445, y=1827..1843
+y=1711, x=432..460
+x=491, y=1819..1821
+x=558, y=725..730
+x=434, y=991..1012
+x=634, y=434..442
+x=452, y=527..540
+x=618, y=1479..1484
+x=644, y=621..626
+x=533, y=1526..1544
+y=831, x=490..516
+y=466, x=629..649
+y=1228, x=568..586
+x=567, y=1062..1075
+x=640, y=1747..1758
+x=579, y=777..785
+x=549, y=812..822
+y=1732, x=638..640
+y=490, x=576..594
+x=516, y=1495..1518
+x=620, y=1297..1306
+y=254, x=460..468
+x=475, y=254..268
+x=482, y=12..25
+y=1183, x=468..488
+x=587, y=666..675
+y=68, x=479..500
+x=524, y=1789..1801
+x=613, y=1046..1058
+x=580, y=567..575
+y=879, x=539..541
+x=448, y=533..537
+x=658, y=1363..1375
+y=410, x=427..438
+y=176, x=501..504
+x=491, y=783..794
+x=570, y=351..373
+y=259, x=521..547
+y=480, x=518..535
+y=633, x=605..607
+x=523, y=767..776
+y=898, x=552..556
+x=606, y=1340..1349
+x=494, y=631..646
+x=496, y=1688..1695
+y=821, x=634..642
+y=1393, x=602..605
+x=443, y=1175..1177
+x=531, y=851..861
+y=582, x=442..546
+y=864, x=551..570
+x=562, y=996..1008
+y=575, x=580..587
+x=529, y=1763..1775
+y=40, x=502..506
+y=73, x=522..529
+y=798, x=504..526
+y=628, x=513..529
+x=520, y=1657..1662
+y=1648, x=516..536
+y=1142, x=484..495
+x=492, y=302..315
+x=586, y=1176..1187
+y=512, x=516..518
+y=218, x=502..504
+y=515, x=516..518
+x=516, y=512..515
+x=444, y=690..695
+y=626, x=624..644
+x=637, y=1276..1295
+y=1370, x=592..595
+y=1860, x=609..620
+x=620, y=900..915
+x=614, y=727..735
+x=437, y=1464..1486
+y=1254, x=457..475
+y=910, x=583..585
+y=294, x=429..436
+y=398, x=481..501
+x=642, y=1768..1779
+y=1845, x=500..524
+y=1898, x=561..565
+y=712, x=571..573
+y=735, x=489..491
+y=887, x=586..589
+y=1518, x=516..521
+x=466, y=551..560
+x=472, y=1613..1624
+x=561, y=701..715
+y=33, x=599..603
+x=538, y=896..908
+x=568, y=1456..1464
+y=559, x=566..568
+x=515, y=328..356
+x=662, y=1020..1029
+x=624, y=355..377
+x=480, y=1612..1624
+y=1139, x=570..574
+y=1795, x=530..535
+x=516, y=490..500
+x=462, y=1830..1837
+x=437, y=202..223
+x=661, y=1504..1509
+x=451, y=470..481
+x=515, y=1836..1840
+x=633, y=189..191
+x=467, y=708..718
+x=528, y=900..902
+x=497, y=232..241
+x=588, y=1686..1698
+y=1306, x=620..624
+x=480, y=667..677
+x=493, y=9..21
+y=1416, x=490..515
+x=624, y=1507..1533
+x=436, y=290..294
+y=708, x=571..573
+x=462, y=601..615
+y=595, x=628..638
+y=1205, x=621..626
+x=582, y=1130..1142
+x=487, y=1000..1015
+x=651, y=1695..1703
+x=544, y=891..902
+x=459, y=165..193
+x=549, y=1897..1908
+y=1484, x=616..618
+x=556, y=1887..1912
+y=1868, x=462..480
+x=621, y=1177..1205
+x=561, y=1873..1898
+x=624, y=1475..1489
+y=1377, x=439..451
+y=943, x=429..441
+y=1553, x=610..615
+x=509, y=1048..1074
+x=483, y=915..928
+x=480, y=606..608
+x=580, y=1027..1043
+x=630, y=978..996
+x=516, y=1875..1887
+x=501, y=1190..1200
+y=377, x=624..632
+y=481, x=451..470
+y=555, x=606..610
+x=445, y=1542..1567
+x=514, y=1231..1233
+x=572, y=62..72
+y=1097, x=548..567
+x=593, y=1784..1786
+x=556, y=29..31
+x=514, y=34..44
+x=651, y=29..31
+x=601, y=1342..1352
+x=439, y=177..182
+x=522, y=853..857
+x=638, y=110..114
+y=1166, x=565..584
+x=549, y=447..457
+x=508, y=1896..1898
+x=525, y=1763..1775
+x=572, y=350..373
+x=583, y=273..301
+x=496, y=148..158
+x=427, y=690..695
+x=506, y=449..461
+x=622, y=592..612
+x=492, y=497..521
+x=554, y=962..972
+x=543, y=827..840
+y=91, x=469..487
+x=446, y=614..616
+x=477, y=453..456
+x=501, y=366..376
+y=487, x=564..568
+x=495, y=1188..1206
+x=530, y=1896..1908
+x=436, y=123..147
+x=471, y=1856..1859
+x=486, y=664..673
+y=770, x=573..583
+x=565, y=1403..1411
+x=599, y=18..33
+y=1599, x=556..577
+y=1411, x=565..567
+x=541, y=986..1012
+x=601, y=1083..1103
+y=1825, x=486..502
+y=1695, x=480..496
+x=440, y=122..147
+x=476, y=364..376
+y=409, x=449..463
+x=446, y=1143..1150
+x=536, y=1614..1619
+y=290, x=510..514
+y=600, x=454..459
+y=1837, x=562..579
+x=462, y=1851..1868
+x=544, y=278..297
+y=902, x=544..563
+x=580, y=1438..1447
+x=546, y=570..582
+x=644, y=1874..1875
+x=447, y=306..316
+x=556, y=277..297
+x=626, y=424..437
+y=806, x=549..557
+x=596, y=1693..1695
+y=936, x=444..451
+y=1156, x=486..510
+y=1567, x=445..464
+y=779, x=514..530
+x=536, y=1851..1861
+y=992, x=504..509
+x=535, y=329..356
+y=814, x=513..519
+y=210, x=604..616
+x=491, y=731..735
+x=558, y=1084..1093
+y=352, x=642..648
+x=425, y=591..601
+x=634, y=1586..1603
+x=554, y=599..608
+x=605, y=397..419
+x=514, y=267..290
+y=263, x=554..568
+x=473, y=911..937
+y=897, x=573..579
+x=595, y=1401..1409
+x=613, y=367..370
+y=1535, x=433..451
+x=573, y=767..770
+x=665, y=41..45
+y=1093, x=558..561
+x=454, y=1666..1673
+x=495, y=1662..1672
+x=566, y=220..222
+x=492, y=1268..1287
+x=534, y=808..818
+x=480, y=1852..1868
+y=282, x=590..616
+x=502, y=218..221
+y=1187, x=566..586
+x=598, y=317..343
+x=562, y=1833..1837
+x=499, y=470..481
+y=113, x=456..478
+y=1703, x=649..651
+x=454, y=598..600
+x=474, y=1058..1074
+x=498, y=434..436
+y=1680, x=481..483
+x=662, y=851..868
+y=987, x=563..565
+y=299, x=653..660
+y=1590, x=617..625
+y=608, x=476..480
+x=538, y=527..540
+y=246, x=488..504
+x=455, y=611..620
+x=490, y=345..356
+x=566, y=602..604
+y=1603, x=634..650
+x=608, y=1150..1158
+x=454, y=363..376
+y=1679, x=596..623
+x=483, y=1569..1571
+x=554, y=1309..1318
+x=660, y=146..164
+x=442, y=752..755
+x=514, y=850..861
+y=1142, x=531..553
+y=1509, x=653..661
+x=509, y=1836..1840
+x=604, y=1301..1315
+x=488, y=426..440
+x=475, y=1733..1758
+x=543, y=41..67
+x=527, y=1107..1120
+y=660, x=574..577
+x=502, y=1081..1106
+x=469, y=1428..1434
+y=564, x=488..492
+x=430, y=1435..1455
+x=547, y=919..929
+x=641, y=1560..1563
+x=480, y=646..657
+y=715, x=478..480
+x=622, y=193..215
+x=445, y=271..274
+x=612, y=1280..1292
+y=938, x=608..621
+x=526, y=1897..1898
+x=610, y=441..443
+x=610, y=666..688
+y=1887, x=516..536
+x=625, y=1287..1292
+x=512, y=1204..1207
+x=505, y=1292..1303
+y=1045, x=465..485
+x=485, y=327..334
+x=574, y=570..587
+x=463, y=394..409
+x=485, y=1460..1479
+y=457, x=549..552
+y=456, x=477..479
+x=453, y=758..770
+x=660, y=360..381
+y=1895, x=616..620
+x=530, y=93..101
+x=589, y=861..887
+x=657, y=41..45
+y=31, x=556..564
+y=1823, x=512..656
+x=542, y=381..398
+y=1897, x=616..620
+x=610, y=1922..1927
+y=675, x=635..647
+x=535, y=938..950
+x=525, y=180..188
+x=635, y=654..675
+y=356, x=515..535
+x=520, y=1525..1544
+x=469, y=1799..1801
+x=478, y=1780..1805
+x=604, y=204..210
+x=456, y=490..493
+x=504, y=1875..1898
+x=527, y=1013..1027
+x=521, y=974..996
+x=583, y=737..760
+x=598, y=410..413
+x=476, y=493..496
+x=478, y=588..592
+x=438, y=1134..1146
+x=639, y=172..182
+x=471, y=1826..1843
+x=489, y=731..735
+x=427, y=888..914
+x=490, y=215..224
+y=1287, x=644..649
+x=655, y=729..747
+x=493, y=1788..1792
+x=596, y=763..765
+y=1236, x=446..456
+x=442, y=590..601
+x=600, y=1277..1289
+y=1224, x=590..608
+x=452, y=1102..1130
+x=504, y=165..176
+x=494, y=1296..1298
+x=615, y=511..516
+x=512, y=1465..1469
+x=649, y=1280..1287
+x=656, y=1811..1823
+x=567, y=76..91
+y=111, x=502..510
+y=867, x=439..444
+x=638, y=595..608
+y=87, x=531..549
+x=484, y=278..292
+y=1364, x=501..511
+x=454, y=1848..1872
+x=607, y=821..835
+x=504, y=218..221
+y=1402, x=626..640
+x=468, y=244..254
+x=554, y=1735..1744
+y=540, x=452..538
+x=472, y=493..496
+x=434, y=1757..1760
+x=502, y=97..111
+x=630, y=1250..1254
+y=1479, x=616..618
+x=549, y=788..806
+x=522, y=198..217
+x=577, y=1539..1552
+x=639, y=206..221
+x=591, y=697..707
+x=514, y=1554..1581
+x=647, y=1325..1330
+x=597, y=192..215
+x=461, y=1058..1077
+y=1528, x=493..501
+x=503, y=191..203
+y=1348, x=431..435
+y=1898, x=477..504
+x=487, y=79..91
+y=1074, x=509..519
+x=601, y=1361..1373
+x=579, y=499..504
+x=640, y=243..265
+y=1922, x=435..438
+y=1267, x=429..448
+x=650, y=156..158
+x=449, y=1439..1453
+x=545, y=417..419
+y=521, x=492..504
+x=517, y=895..908
+y=315, x=492..510
+x=644, y=1280..1287
+y=666, x=512..516
+y=395, x=490..494
+x=433, y=1434..1455
+x=510, y=1595..1617
+x=588, y=763..765
+x=631, y=1550..1552
+x=612, y=1102..1126
+y=1635, x=542..561
+x=526, y=787..798
+x=580, y=1497..1511
+x=603, y=1709..1711
+x=471, y=947..963
+y=730, x=558..564
+x=496, y=168..180
+x=435, y=1331..1348
+y=983, x=489..501
+y=257, x=597..613
+x=617, y=1343..1352
+x=598, y=498..504
+x=580, y=78..98
+y=104, x=441..451
+x=500, y=279..292
+x=626, y=1419..1429
+x=613, y=254..257
+x=610, y=1552..1553
+y=1418, x=470..472
+x=470, y=1038..1041
+y=1375, x=652..658
+y=230, x=457..467
+x=547, y=1370..1395
+x=597, y=1324..1349
+x=504, y=235..246
+x=499, y=728..739
+y=1910, x=602..627
+y=1830, x=456..462
+x=487, y=445..459
+x=525, y=590..610
+y=238, x=651..654
+x=587, y=367..370
+y=1336, x=554..575
+y=462, x=566..581
+x=452, y=1167..1194
+y=798, x=626..643
+x=507, y=507..518
+x=554, y=1523..1525
+x=536, y=1766..1778
+x=539, y=1465..1469
+x=465, y=1329..1335
+x=516, y=1697..1722
+y=970, x=644..648
+y=739, x=483..499
+x=625, y=1584..1590
+x=631, y=1765..1774
+x=598, y=1709..1711
+y=1330, x=645..647
+y=914, x=427..455
+y=1177, x=443..445
+x=618, y=1142..1162
+x=434, y=588..598
+y=560, x=450..466
+x=621, y=921..938
+y=481, x=478..499
+x=620, y=1857..1860
+x=577, y=843..845
+x=486, y=1647..1649
+x=589, y=534..537
+x=576, y=216..223
+y=606, x=476..480
+x=500, y=1831..1845
+x=450, y=644..650
+x=490, y=1401..1416
+x=581, y=63..72
+x=547, y=543..563
+x=605, y=1386..1393
+y=1249, x=575..599
+x=518, y=632..646
+y=563, x=581..585
+y=1805, x=460..478
+x=551, y=125..131
+x=483, y=366..376
+y=1013, x=645..650
+y=1560, x=641..649
+x=664, y=1267..1295
+y=462, x=543..560
+y=221, x=502..504
+x=604, y=101..107
+y=1263, x=602..604
+x=624, y=621..626
+y=996, x=630..632
+y=1659, x=567..571
+y=851, x=606..608
+y=928, x=483..486
+y=840, x=523..543
+y=1649, x=463..486
+x=592, y=1358..1370
+y=1615, x=457..469
+y=1295, x=546..550
+x=581, y=855..868
+y=698, x=462..480
+x=594, y=864..867
+x=593, y=216..223
+x=552, y=723..727
+y=707, x=591..593
+y=1142, x=565..582
+x=496, y=127..135
+x=637, y=1197..1223
+x=608, y=839..851
+x=641, y=1703..1715
+y=745, x=506..518
+x=536, y=1205..1207
+y=1233, x=502..514
+x=447, y=1732..1758
+x=627, y=529..549
+y=1008, x=562..564
+y=1784, x=593..598
+x=496, y=407..421
+x=583, y=163..170
+x=595, y=1193..1204
+x=519, y=1049..1074
+x=509, y=971..992
+y=785, x=631..634
+x=495, y=1117..1142
+y=1563, x=641..649
+x=540, y=591..603
+x=572, y=838..849
+y=1898, x=508..526
+y=568, x=642..644
+y=1571, x=576..585
+y=1001, x=453..455
+x=448, y=1702..1704
+x=553, y=141..164
+y=559, x=647..652
+y=297, x=544..556
+x=451, y=925..936
+x=626, y=1400..1402
+x=467, y=1058..1074
+x=502, y=1230..1233
+y=376, x=454..476
+x=487, y=1354..1365
+x=537, y=1554..1581
+x=495, y=1269..1287
+y=1212, x=656..665
+x=519, y=1082..1106
+x=628, y=728..747
+x=552, y=1652..1662
+x=510, y=98..111
+x=640, y=1730..1732
+y=1035, x=539..558
+x=616, y=1479..1484
+x=472, y=1460..1479
+x=626, y=771..798
+x=520, y=1395..1401
+y=163, x=533..540
+y=931, x=574..578
+y=1455, x=430..433
+x=552, y=674..689
+x=579, y=1832..1837
+x=467, y=208..230
+x=650, y=1587..1603
+x=464, y=969..973
+x=565, y=1129..1142
+x=660, y=294..299
+y=180, x=496..513
+x=622, y=1566..1572
+y=1556, x=491..503
+y=516, x=612..615
+y=1006, x=445..461
+x=574, y=404..411
+x=485, y=787..789
+x=548, y=1086..1097
+x=538, y=7..25
+x=504, y=971..992
+x=517, y=9..17
+x=615, y=803..805
+x=570, y=998..1012
+x=519, y=767..776
+x=571, y=708..712
+y=1295, x=637..655
+y=215, x=597..622
+x=569, y=737..760
+y=1779, x=626..642
+x=549, y=81..87
+y=135, x=496..514
+x=644, y=848..865
+x=543, y=417..419
+x=551, y=591..603
+y=939, x=585..591
+x=498, y=947..963
+x=568, y=1214..1228
+x=588, y=1477..1489
+x=586, y=1196..1207
+x=514, y=749..761
+x=455, y=548..557
+y=1162, x=576..578
+x=481, y=1326..1345
+y=1069, x=575..577
+x=573, y=1777..1803
+x=483, y=1490..1502
+x=595, y=410..413
+x=636, y=1463..1485
+y=1001, x=641..655
+x=486, y=1189..1206
+x=488, y=190..203
+x=493, y=1883..1887
+x=560, y=1539..1552
+x=455, y=992..1001
+x=564, y=482..487
+y=1292, x=593..612
+y=587, x=559..574
+x=436, y=37..59
+x=549, y=872..885
+x=456, y=177..182
+y=991, x=552..572
+y=812, x=513..519
+x=469, y=1338..1346
+x=500, y=1570..1571
+x=518, y=721..745
+y=1821, x=491..493
+x=429, y=1239..1267
+x=430, y=749..766
+x=470, y=471..481
+x=532, y=491..500
+x=612, y=1796..1805
+x=478, y=1103..1130
+x=478, y=471..481
+x=647, y=931..939
+y=983, x=601..622
+x=628, y=1565..1572
+x=631, y=1197..1223
+y=1489, x=570..588
+x=460, y=926..934
+x=542, y=112..113
+x=444, y=482..503
+x=557, y=789..806
+x=446, y=12..30
+x=635, y=1557..1567
+x=660, y=1197..1200
+x=565, y=977..987
+y=549, x=627..637
+x=654, y=213..238
+y=504, x=579..598
+x=565, y=1627..1640
+y=885, x=531..549
+x=474, y=683..695
+x=531, y=380..398
+x=445, y=1175..1177
+y=1455, x=548..550
+y=1235, x=536..556
+x=627, y=1249..1254
+x=595, y=1358..1370
+x=459, y=598..600
+x=496, y=910..937
+x=580, y=1108..1120
+y=1840, x=509..515
+x=499, y=324..337
+x=575, y=1893..1914
+x=593, y=1892..1914
+x=599, y=1239..1249
+x=520, y=1137..1145
+y=343, x=598..617
+x=575, y=1238..1249
+y=947, x=553..555
+x=568, y=482..487
+x=556, y=1224..1235
+y=241, x=495..497
+x=454, y=124..138
+x=550, y=1438..1455
+x=645, y=1004..1013
+y=1722, x=514..516
+x=486, y=915..928
+y=768, x=547..561
+x=499, y=1789..1792
+x=531, y=871..885
+y=1805, x=606..612
+x=437, y=1757..1760
+y=1158, x=599..608
+x=480, y=713..715
+x=541, y=1396..1401
+x=441, y=89..104
+y=493, x=456..461
+x=648, y=359..381
+x=552, y=1043..1053
+x=634, y=1318..1335
+y=1345, x=476..481
+x=620, y=1895..1897
+y=223, x=437..442
+x=432, y=271..274
+x=429, y=1463..1486
+x=579, y=884..897
+x=577, y=1585..1599
+y=141, x=610..633
+y=1075, x=567..583
+y=1270, x=518..528
+x=572, y=980..991
+y=35, x=551..572
+x=656, y=1205..1212
+y=1914, x=575..593
+x=441, y=1516..1531
+y=1801, x=524..550
+x=439, y=614..616
+y=604, x=566..572
+y=222, x=563..566
+x=531, y=674..689
+y=1281, x=559..584
+x=590, y=1222..1224
+x=633, y=120..141
+x=451, y=1365..1377
+x=595, y=534..537
+y=219, x=625..635
+y=1413, x=588..608
+x=470, y=445..459
+y=615, x=462..486
+y=1659, x=610..632
+x=585, y=950..974
+x=603, y=1583..1596
+y=747, x=628..655
+y=1519, x=472..490
+x=643, y=771..798
+x=578, y=914..931
+y=1678, x=461..477
+x=498, y=1531..1542
+y=101, x=627..641
+x=667, y=1918..1931
+x=455, y=587..592
+x=632, y=979..996
+y=1331, x=603..625
+x=519, y=792..794
+y=1223, x=631..637
+x=560, y=1458..1470
+y=1511, x=556..580
+x=610, y=998..1020
+x=441, y=532..537
+y=608, x=628..638
+y=158, x=650..653
+x=568, y=253..263
+y=608, x=554..578
+x=488, y=552..564
+y=1778, x=520..536
+x=430, y=610..620
+x=493, y=1532..1542
+x=497, y=1743..1749
+y=223, x=576..593
+x=500, y=878..881
+x=512, y=427..440
+y=822, x=549..557
+x=551, y=181..188
+y=1640, x=565..618
+x=432, y=1788..1792
+y=437, x=623..626
+x=608, y=1403..1413
+y=1786, x=593..598
+y=1289, x=600..602
+x=477, y=1590..1599
+x=467, y=628..637
+x=513, y=627..628
+y=164, x=553..565
+x=658, y=1400..1420
+x=438, y=645..650
+x=554, y=1422..1437
+x=514, y=1696..1722
+x=492, y=553..564
+x=632, y=1136..1146
+x=648, y=1679..1691
+x=472, y=1412..1418
+y=421, x=479..496
+x=444, y=1745..1773
+x=454, y=645..657
+x=479, y=1000..1015
+x=493, y=1819..1821
+x=490, y=382..395
+x=472, y=683..695
+x=543, y=1609..1622
+x=616, y=1895..1897
+y=881, x=500..515
+y=557, x=455..459
+x=657, y=1656..1671
+y=356, x=468..490
+x=584, y=1028..1043
+y=537, x=589..595
+x=580, y=702..715
+y=657, x=454..480
+x=642, y=810..821
+x=572, y=602..604
+x=474, y=1038..1041
+x=655, y=985..1001
+x=563, y=890..902
+y=107, x=604..614
+x=571, y=1654..1659
+x=609, y=947..963
+x=526, y=488..495
+x=612, y=511..516
+x=466, y=925..934
+x=575, y=542..563
+x=456, y=1224..1236
+y=1927, x=559..610
+y=1124, x=428..447
+x=641, y=899..902
+x=490, y=824..831
+x=600, y=1302..1315
+x=616, y=172..182
+y=527, x=565..567
+y=1596, x=581..603
+y=21, x=491..493
+x=566, y=443..462
+y=1792, x=493..499
+x=607, y=493..521
+y=381, x=648..660
+x=545, y=1519..1530
+y=67, x=535..543
+x=506, y=37..40
+x=529, y=626..628
+y=1043, x=580..584
+x=464, y=784..794
+x=500, y=54..68
+y=934, x=460..466
+y=477, x=458..464
+x=550, y=1789..1801
+x=460, y=245..254
+y=274, x=432..445
+y=204, x=604..616
+x=591, y=919..939
+x=438, y=1915..1922
+x=592, y=1563..1574
+y=1623, x=592..602
+x=445, y=989..1006
+y=1150, x=446..462
+x=567, y=501..527
+x=474, y=125..138
+x=501, y=11..25
+y=1396, x=590..612
+x=652, y=1463..1485
+x=478, y=102..113
+x=479, y=408..421
+x=578, y=1151..1162
+x=461, y=122..135
+x=640, y=111..114
+x=461, y=1671..1678
+x=489, y=1654..1677
+y=135, x=461..466
+x=536, y=1225..1235
+x=579, y=843..845
+y=170, x=583..598
+x=524, y=1832..1845
+x=501, y=165..176
+x=457, y=1059..1077
+x=466, y=122..135
+x=652, y=1442..1456
+x=565, y=500..527
+y=1792, x=530..535
+y=1295, x=659..664
+x=427, y=386..410
+y=31, x=648..651
+x=509, y=597..601
+x=585, y=1324..1349
+x=623, y=1668..1679
+x=435, y=1849..1872
+x=445, y=147..158
+y=1544, x=520..533
+x=592, y=1243..1246
+x=556, y=1585..1599
+x=624, y=947..963
+y=781, x=631..634
+x=626, y=1654..1656
+x=527, y=973..996
+x=442, y=1340..1350
+y=1662, x=520..530
+x=602, y=1260..1263
+x=606, y=1796..1805
+x=633, y=890..905
+x=494, y=35..44
+x=456, y=1788..1792
+x=498, y=255..268
+y=1656, x=624..626
+y=1162, x=593..618
+x=510, y=1154..1156
+x=633, y=1258..1268
+x=547, y=765..768
+y=217, x=522..547
+x=444, y=926..936
+x=581, y=1582..1596
+x=593, y=1193..1204
+x=471, y=1799..1801
+x=483, y=1589..1599
+y=849, x=572..590
+y=1837, x=456..462
+x=496, y=666..677
+x=458, y=753..755
+x=468, y=345..356
+x=511, y=214..224
+x=444, y=853..867
+y=1469, x=512..539
+x=523, y=589..610
+y=761, x=475..514
+x=439, y=326..335
+x=597, y=255..257
+x=579, y=1212..1222
+x=426, y=954..975
+x=489, y=1293..1303
+x=615, y=1551..1553
+x=582, y=1541..1543
+x=650, y=1656..1671
+x=575, y=1324..1336
+x=568, y=1519..1530
+y=147, x=436..440
+x=638, y=189..191
+x=627, y=77..101
+x=518, y=512..515
+x=515, y=1400..1416
+y=684, x=657..661
+y=1654, x=567..571
+y=1856, x=471..473
+y=1875, x=631..644
+x=494, y=382..395
+x=524, y=853..857
+x=645, y=1478..1480
+x=552, y=447..457
+y=612, x=622..649
+x=645, y=169..193
+x=462, y=1354..1365
+y=1555, x=589..606
+x=428, y=1746..1773
+x=590, y=1383..1396
+x=647, y=552..559
+y=503, x=444..446
+y=25, x=523..538
+y=1672, x=495..498
+y=794, x=511..519
+x=663, y=1557..1567
+y=1012, x=425..434
+x=495, y=232..241
+x=478, y=713..715
+x=484, y=861..887
+y=1464, x=568..571
+x=655, y=1319..1335
+y=1373, x=584..601
+y=576, x=493..532
+x=574, y=1127..1139
+y=1456, x=652..665
+x=455, y=888..914
+y=1859, x=471..473
+x=649, y=461..466
+x=579, y=1174..1181
+y=1425, x=445..452
+y=1194, x=437..452
+x=556, y=124..131
+y=496, x=472..476
+y=718, x=467..489
+x=652, y=1363..1375
+x=627, y=1884..1910
+y=794, x=464..491
+y=1437, x=554..561
+x=550, y=999..1012
+x=578, y=598..608
+x=446, y=481..503
+x=581, y=558..563
+x=481, y=384..398
+x=559, y=1256..1281
+y=937, x=473..496
+x=585, y=1568..1571
+x=465, y=758..770
+y=867, x=594..610
+y=805, x=599..615
+y=1395, x=547..575
+x=511, y=792..794
+y=675, x=568..587
+y=1207, x=512..536
+y=845, x=577..579
+x=470, y=860..887
+x=481, y=1675..1680
+x=642, y=553..568
+y=974, x=585..599
+x=479, y=55..68
+x=583, y=768..770
+x=518, y=387..415
+x=443, y=1020..1047
+x=480, y=686..698
+x=616, y=620..638
+x=592, y=1602..1623
+x=612, y=1300..1312
+x=550, y=1273..1295
+y=461, x=506..525
+y=316, x=447..475
+x=638, y=1730..1732
+x=634, y=781..785
+x=521, y=1496..1518
+x=563, y=977..987
+y=1496, x=440..465
+x=510, y=266..290
+x=519, y=812..814
+x=497, y=1595..1618
+x=438, y=387..410
+x=448, y=436..446
+x=658, y=224..247
+x=455, y=1021..1047
+y=459, x=470..487
+x=479, y=453..456
+x=443, y=833..840
+x=528, y=1614..1619
+x=448, y=1240..1267
+x=542, y=1230..1232
+x=632, y=354..377
+x=511, y=1743..1749
+y=1027, x=513..527
+y=963, x=471..498
+x=464, y=468..477
+y=939, x=647..664
+x=433, y=1510..1535
+x=511, y=1346..1364
+x=553, y=1886..1912
+x=602, y=441..443
+x=551, y=26..35
+y=376, x=483..501
+y=1698, x=588..602
+x=640, y=1400..1402
+x=536, y=414..424
+x=506, y=722..745
+x=502, y=1809..1825
+y=1691, x=648..654
+x=449, y=395..409
+x=643, y=1478..1480
+x=600, y=1418..1429
+x=502, y=37..40
+y=908, x=517..538
+y=1074, x=467..474
+y=1662, x=552..578
+x=514, y=1596..1617
+y=441, x=651..663
+x=445, y=1411..1425
+y=894, x=552..556
+y=1058, x=613..628
+x=645, y=1325..1330
+y=1568, x=576..585
+y=370, x=587..613
+x=515, y=878..881
+x=442, y=203..223
+x=435, y=1914..1922
+y=1420, x=658..664
+x=530, y=1792..1795
+y=443, x=602..610
+x=598, y=1784..1786
+x=607, y=625..633
+x=537, y=1653..1665
+x=524, y=900..902
+x=561, y=1084..1093
+x=468, y=1175..1183
+y=766, x=430..436
+x=645, y=1891..1908
+x=663, y=416..441
+x=425, y=992..1012
+x=457, y=1608..1615
+y=1349, x=585..597
+y=1760, x=434..437
+y=1200, x=656..660
+x=513, y=1013..1027
+y=688, x=610..614
+x=523, y=828..840
+y=59, x=436..459
+y=715, x=561..580
+x=570, y=1127..1139
+x=585, y=998..1020
+x=501, y=385..398
+x=590, y=1243..1246
+x=536, y=1747..1758
+y=835, x=607..626
+y=424, x=536..552
+x=622, y=980..983
+x=604, y=1260..1263
+x=648, y=343..352
+x=645, y=435..442
+x=536, y=1640..1648
+y=770, x=453..465
+x=552, y=894..898
+x=606, y=839..851
+y=1736, x=631..651
+x=564, y=29..31
+y=1434, x=469..490
+x=521, y=242..259
+y=114, x=638..640
+y=765, x=588..596
+x=577, y=647..660
+x=606, y=1552..1555
+x=653, y=1505..1509
+y=1617, x=510..514
+y=499, x=467..487
+y=915, x=607..620
+y=1908, x=637..645
+x=463, y=1646..1649
+x=483, y=1674..1680
+y=1677, x=489..504
+y=373, x=570..572
+x=624, y=1654..1656
+x=453, y=1897..1912
+x=585, y=919..939
+x=626, y=1177..1205
+x=529, y=61..73
+x=531, y=1125..1142
+x=450, y=550..560
+y=1012, x=550..570
+x=583, y=906..910
+x=592, y=1869..1875
+y=865, x=630..644
+x=490, y=1428..1434
+x=582, y=1773..1789
+x=655, y=1258..1268
+x=608, y=1223..1224
+x=558, y=1023..1035
+x=486, y=601..615
+x=635, y=201..219
+x=659, y=1267..1295
+x=576, y=1568..1571
+y=1704, x=448..453
+x=503, y=434..436
+y=72, x=572..581
+x=657, y=663..684
+x=665, y=1443..1456
+x=453, y=1702..1704
+x=580, y=1459..1470
+x=588, y=1404..1413
+x=524, y=1854..1867
+y=905, x=633..651
+x=567, y=1044..1053
+x=499, y=701..713
+y=601, x=425..442
+y=1883, x=493..496
+x=492, y=276..289
+y=193, x=645..664
+y=442, x=634..645
+x=610, y=121..141
+x=570, y=1478..1489
+x=427, y=1133..1146
+x=652, y=257..270
+y=1126, x=612..634
+x=568, y=667..675
+x=559, y=403..411
+y=224, x=490..511
+y=537, x=441..448
+x=642, y=343..352
+y=518, x=507..529
+x=561, y=765..768
+x=586, y=862..887
+x=614, y=102..107
+x=451, y=1083..1096
+x=533, y=144..163
+x=522, y=488..495
+x=557, y=322..345
+y=1775, x=525..529
+x=585, y=906..910
+x=644, y=899..902
+y=610, x=523..525
+x=476, y=606..608
+y=1041, x=470..474
+y=603, x=540..551
+y=1574, x=569..592
+x=594, y=476..490
+y=1254, x=627..630
+x=610, y=1340..1349
+x=510, y=301..315
+x=535, y=40..67
+x=485, y=1023..1045
+x=644, y=948..970
+x=459, y=548..557
+y=1409, x=595..599
+y=1665, x=515..537
+x=653, y=156..158
+y=247, x=658..662
+x=483, y=728..739
+y=861, x=514..531
+y=1801, x=469..471
+y=17, x=509..517
+y=818, x=494..534
+x=610, y=1257..1268
+y=1489, x=608..624
+x=649, y=1560..1563
+y=950, x=535..561
+y=713, x=499..511
+y=301, x=570..583
+x=463, y=816..842
+x=573, y=961..972
+y=335, x=439..453
+x=496, y=1883..1887
+x=556, y=1523..1525
+x=515, y=1904..1926
+x=656, y=1197..1200
+x=456, y=103..113
+x=617, y=1583..1590
+y=1543, x=582..603
+x=570, y=274..301
+x=460, y=1696..1711
+y=1758, x=536..640
+x=437, y=435..446
+x=465, y=1479..1496
+y=1020, x=585..610
+x=641, y=77..101
+y=929, x=527..547
+x=618, y=1627..1640
+y=601, x=496..509
+x=651, y=1217..1243
+x=494, y=276..289
+x=656, y=1021..1029
+x=616, y=266..282
+x=619, y=1324..1326
+y=616, x=439..446
+x=514, y=770..779
+x=616, y=1324..1326
+y=899, x=641..644
+y=1103, x=591..601
+y=1710, x=659..663
+x=542, y=1853..1867
+x=488, y=234..246
+y=1352, x=601..617
+x=523, y=6..25
+x=630, y=1231..1233
+x=444, y=1339..1350
+y=975, x=426..434
+x=438, y=1412..1430
+x=546, y=1272..1295
+y=1530, x=545..568
+x=590, y=266..282
+y=868, x=656..662
+x=603, y=1320..1331
+x=457, y=1241..1254
+x=498, y=1662..1672
+x=573, y=856..868
+x=634, y=494..521
+x=552, y=979..991
+x=532, y=573..576
+x=428, y=1412..1430
+y=158, x=445..496
+x=644, y=1347..1375
+y=182, x=616..639
+x=491, y=9..21
+x=532, y=1309..1318
+x=442, y=1896..1912
+x=520, y=1765..1778
+x=497, y=1296..1298
+y=1233, x=620..630
+y=1296, x=494..497
+y=1447, x=580..641
+x=659, y=1709..1710
+x=615, y=1507..1533
+x=564, y=726..730
+x=462, y=685..698
+x=640, y=1075..1093
+x=632, y=1647..1659
+x=576, y=476..490
+x=482, y=327..334
+x=559, y=569..587
+y=345, x=557..580
+x=656, y=851..868
+x=456, y=1830..1837
+x=607, y=1773..1789
+y=755, x=442..458
+y=101, x=530..550
+x=561, y=939..950
+y=1744, x=554..575
+y=1567, x=635..663
+x=556, y=894..898
+y=1525, x=554..556
+x=655, y=1076..1093
+y=1618, x=490..497
+x=442, y=571..582
+x=649, y=1694..1703
+y=1453, x=441..449
+y=1575, x=527..530
+y=1843, x=445..471
+x=512, y=1811..1823
+y=650, x=438..450
+x=434, y=954..975
+x=662, y=223..247
+x=472, y=1511..1519
+x=568, y=556..559
+x=453, y=992..1001
+y=398, x=531..542
+x=619, y=1550..1552
+x=561, y=1421..1437
+y=337, x=477..499
+y=44, x=494..514
+x=457, y=208..230
+x=511, y=701..713
+x=620, y=1232..1233
+y=1146, x=632..646
+y=1872, x=435..454
+x=451, y=834..840
+x=565, y=142..164
+y=419, x=543..545
+y=1875, x=569..592
+y=1552, x=619..631
+x=490, y=1595..1618
+x=578, y=1777..1803
+x=543, y=434..462
+y=113, x=515..542
+y=1350, x=442..444
+y=963, x=609..624
+x=587, y=398..419
+y=1572, x=527..530
+x=501, y=966..983
+x=563, y=220..222
+x=566, y=1177..1187
+x=429, y=289..294
+y=972, x=554..573
+x=554, y=1323..1336
+x=584, y=1360..1373
+y=419, x=587..605
+x=565, y=1610..1622
+x=486, y=1810..1825
+y=1571, x=483..500
+y=30, x=446..463
+x=512, y=656..666
+y=1599, x=477..483
+x=530, y=1657..1662
+y=138, x=454..474
+y=1773, x=428..444
+y=1619, x=528..536
+x=486, y=1154..1156
+x=550, y=92..101
+y=1581, x=514..537
+y=440, x=488..512
+x=634, y=809..821
+x=599, y=1401..1409
+y=1222, x=576..579
+x=552, y=413..424
+y=265, x=619..640
+x=599, y=951..974
+x=504, y=496..521
+x=532, y=985..1012
+x=508, y=1189..1200
+y=188, x=525..551
+y=727, x=542..552
+x=631, y=1873..1875
+y=638, x=599..616
+x=556, y=1498..1511
+y=1292, x=620..625
+x=513, y=167..180
+y=1912, x=442..453
+x=531, y=82..87
+x=589, y=651..652
+x=637, y=1892..1908
+x=560, y=435..462
+y=411, x=559..574
+y=416, x=487..490
+y=1542, x=493..498
+x=602, y=1195..1207
+x=573, y=708..712
+x=575, y=1370..1395
+y=1480, x=643..645
+x=489, y=664..673
+x=428, y=1116..1124
+x=651, y=1152..1170
+x=625, y=1319..1331
+y=45, x=657..665
+x=453, y=325..335
+y=760, x=569..583
+x=628, y=1047..1058
+x=530, y=769..779
+y=842, x=455..463
+x=596, y=1669..1679
+x=571, y=1456..1464
+x=448, y=1667..1673
+x=648, y=29..31
+y=868, x=573..581
+y=1207, x=586..602
+y=1758, x=447..475
+x=444, y=1516..1531
+y=1303, x=489..505
+x=567, y=1404..1411
+y=689, x=531..552
+y=182, x=439..456
+x=570, y=861..864
+y=1012, x=532..541
+x=608, y=920..938
+y=563, x=547..575
+x=525, y=450..461
+y=1232, x=542..546
+x=539, y=1023..1035
+x=480, y=1689..1695
+y=191, x=633..638
+x=548, y=1437..1455
+y=1243, x=590..592
+x=431, y=1330..1348
+y=1053, x=552..567
+x=594, y=1693..1695
+x=479, y=787..789
+x=567, y=1654..1659
+y=902, x=524..528
+y=98, x=577..580
+x=554, y=253..263
+x=609, y=1856..1860
+y=203, x=488..503
+x=527, y=918..929
+x=607, y=901..915
+x=511, y=1905..1926
+y=436, x=498..503
+x=446, y=1224..1236
+x=580, y=131..142
+x=663, y=1708..1710
+x=512, y=1138..1145
+x=529, y=508..518
+y=298, x=605..613
+y=1867, x=524..542
diff --git a/2018/inputs/18.txt b/2018/inputs/18.txt
new file mode 100644
index 0000000..9e354bc
--- /dev/null
+++ b/2018/inputs/18.txt
@@ -0,0 +1,50 @@
+#.#.|..#|.||.#...|...#.|.......##|##..#..||.||....
+#.......#.....|##..#|..#.##..##|.|.#..|.#...|....#
+.|..........#.|..|.....|..|#.#...##|#|.|#|##|...#|
+#|....#|##..#|.|||.#.|.#...#.##.......#||..#......
+.#|....|.|..#..||...#||...|......###.#.#...##..#..
+..||#...|.#.|||||.....|.......##...#.#....|..#....
+###|..##...|.#|..|.#|#...|.#.|....||.|...#|.|#...#
+|.#.|#.#.|###.|..#..|....#....#|.#..||.||.....#..#
+.#..|.#..#|##..|.....|.#.|.#.#|.......#..|...#..|.
+...|||##...|..#.#|#|..#.#..#|.|.|#..##........##.#
+|#.#..||....|...|#..|....|#|...#.#.#.##|.|.#......
+|..|...|.|#.........|..#|...|.#.|##....|..|..|#.||
+|....#..||..|...#|......|||||.|#....||....|.#|.#..
+......#||.#.#.||..|.......|....||#||#.|.#.|.##||#|
+.##.#....##.#.|....|...###..#...|.#....|.#...|..##
+.##..#|#.#.##.||..|.#|..|.|.##|....|...#||||.|..#.
+|.|..|#|....|.#.#..||.....|.....##....||....|.||..
+#|.|.##...||...........|..#.||.|.#..##..|#||......
+||..||.||..#.##.#...|.#|.....|###....#.....#...|..
+|.#.##|.|...||#.#...||....|.|#..|.#....##........#
+..|....|.#.##|....|||#....#.|.|.##....|##|.|#.....
+.|.....#|.#....|###|..#|||........||#.#..||..|..#.
+#..#...|#|.#...|.||##..#.|..|.|.#.|..#.#.|.....#.#
+|#||.##..#..|||.......#|..#...#..##....#||.#|.....
+.|.#.....|..#...#...##...|.#...|.#|.......|..#...|
+.||.......|..##..##.#|.|..|...#.|.#..#.|....#.|#.|
+....#..#|##|....#..|.#..|||..#....#.#|...||.#..|..
+#......#|.##..|..|....|.##.#|...#..#.|..|..|..|##.
+...|||.#|#.#.|..|||.#.#.#...||...||..##..#.....|..
+..#..|.|#.#..|..##|..#....#.|..|.......|||#.|.|.|#
+.##|..#...#..||..|.........|#.|#.....|...##.|..||#
+#.....||....#.....|#.||......|.#|.#|....||.||.#.#.
+#..|#..|......|.#.#.#.##..||.|.#.|......#|#||#.|.#
+..||..||.....|.#..###.#.|#..|.......|....#||.|..#.
+.#...###|#|#|||...|...#.#|.#|..|...#..#.|#|.#...|.
+...|..#||....##|..#...#....#||#.......|....#.|###.
+..#....|#..#|.....|.#|..#..|#....||......|.|.#.|#.
+..|##....#.|..#..#.|.#..||....#...|.....|..#.....|
+.......#||..#||...|.#.|#...#....|.|.||.#.|...#.##|
+.|.|||.....#............#..#..|..|..#.|.#..|......
+|...|.|####..#.....#..#..|#|#..#..|......|...|.#|#
+|.|...#..#..|....|.....#|#||..#.||..|#|..|||.|.|.|
+..#...|#.......||.#.#.#....#.........##|.|..#.##||
+#|#..|..|#|.##.|.|#......||......|.....#||###.|###
+....#..#.|..|...#|#|..|#..|.#|....||#|.||.|#|.....
+|..#.|..#.|#......#...#|.#|#|.....|#...###....##..
+...##..#..|..#..#.#...|.#..#|...|#.##|.#|..##..#.#
+|.|.|...#.|..##.|.|....|..#..|...|..##|...|..|....
+.#|..|..|..|.|..#...|.||#...#......||.#.#.........
+.#.##..|............|.||.....#||..|##.|..|.....#.|
diff --git a/2018/inputs/19.txt b/2018/inputs/19.txt
new file mode 100644
index 0000000..1207b7b
--- /dev/null
+++ b/2018/inputs/19.txt
@@ -0,0 +1,37 @@
+#ip 4
+addi 4 16 4
+seti 1 7 2
+seti 1 1 5
+mulr 2 5 3
+eqrr 3 1 3
+addr 3 4 4
+addi 4 1 4
+addr 2 0 0
+addi 5 1 5
+gtrr 5 1 3
+addr 4 3 4
+seti 2 7 4
+addi 2 1 2
+gtrr 2 1 3
+addr 3 4 4
+seti 1 3 4
+mulr 4 4 4
+addi 1 2 1
+mulr 1 1 1
+mulr 4 1 1
+muli 1 11 1
+addi 3 3 3
+mulr 3 4 3
+addi 3 9 3
+addr 1 3 1
+addr 4 0 4
+seti 0 1 4
+setr 4 9 3
+mulr 3 4 3
+addr 4 3 3
+mulr 4 3 3
+muli 3 14 3
+mulr 3 4 3
+addr 1 3 1
+seti 0 6 0
+seti 0 7 4
diff --git a/2018/inputs/2.txt b/2018/inputs/2.txt
new file mode 100644
index 0000000..1edb865
--- /dev/null
+++ b/2018/inputs/2.txt
@@ -0,0 +1,250 @@
+krdmtuqjmwfoevnadixyclzspv
+yrdmtuqjiwfoevnabfxyclzsph
+kqjvtuqjgwfoevnabixyclzsph
+krdmtuqjgwjoevnaolxyclzsph
+krdmtnqjgwfoevnabiiyxlzsph
+lrymtuqjgwhoevnabixyclzsph
+krdmguqjgwfoevnabixkclzsah
+krdmtuqjgwfoevnibinyclzdph
+krdmtucjgwfoevnabhxyclzspv
+krdmtuqjgwfoevtabixyulzsuh
+krdmtuqqgwfoevnabixdblzsph
+krdmtuqjawfsevnabiyyclzsph
+krdmtuqjgwfoevnabzxccldsph
+krdmtcqegwfhevnabixyclzsph
+krdmtuqjgwforvnaxixycgzsph
+krdmtuqjgwfoqvnaxixyclzskh
+krdmtutjgwfoevyajixyclzsph
+krdmtuqmgwfoevnabixycxzspc
+krdptuqjgwhoevkabixyclzsph
+krdttuqjhwfoevnabixyclzspa
+krdmtuqjgwfoevnabibyhnzsph
+krdmtuqjywfoevntbidyclzsph
+krdmtojdgwfoevnabixyclzsph
+krdmtuqjgpfuevnauixyclzsph
+krdmtoqjgwfrevjabixyclzsph
+krdmtuqjgwfoyvndbixyclzyph
+krdmtxqjgwfomvnayixyclzsph
+crdmtuqjgwfoevnabixyoxzsph
+krdmtpqjgwfdevnabixycqzsph
+krdmtuqjgwfoevuabfxsclzsph
+krdmtuqjgwfoevnybixycdzskh
+krdmtusjgwfoevnabixxclzdph
+krdmtuqjgwfoevnaboxyglzjph
+zrdmtuqjgrfoevnalixyclzsph
+krdmtuqjclfoevnabixyclzsih
+kqdmtlqjgwfoevnabtxyclzsph
+krdmtuqggwpoevnabixyclzlph
+krdmtuqjgwfobwnrbixyclzsph
+krdmtuqjgwfoevwabkxycnzsph
+kldmtuqjgwfogvyabixyclzsph
+krdmtuqvgwfoevnabixtcrzsph
+krdmtuqjgwroevnabixyrlzspw
+krdmtuqjgjfoevnabixyelzrph
+krdmtuqjgffoevnaaixyclzspa
+krdmtuqjgwfoevxabifywlzsph
+krdmtuqjgwfoevlabixycrzsrh
+krdmtuqjgwfpevnabixocqzsph
+krdmtuqjgwfoevdabixycnhsph
+krdmtmqjgwfoevnajixyclvsph
+krdmtuqjjvfoevnabgxyclzsph
+krzmtuqjgwfoevnabioyckzsph
+kodmtwqjgwfoevnabieyclzsph
+ehdmthqjgwfoevnabixyclzsph
+krdmtuqjxwioevnabixyclbsph
+grdmkutjgwfoevnabixyclzsph
+krdutuqjgwfoebnabixaclzsph
+krdmtuqjgwfoebnabixyclcjph
+krdmteqjgwfoevnlbixycizsph
+krdmtegjgwhoevnabixyclzsph
+krdmtuqjgwfdrvnabixbclzsph
+krdmtuqjgyfoevidbixyclzsph
+krdmtubjawfoevnabixyclzuph
+krdmtuqjgwfoavjabixyclzssh
+krdmtuqjgwfoeonabixyclzsvo
+vrdmtuqjgwffevnabixpclzsph
+krdmtuqonwfoevnabixycfzsph
+krdmtumjgwfpevnubixyclzsph
+krdmtutjgwfoevnaciyyclzsph
+krdrtuqjgwfoevnwbixyglzsph
+krdmtuqjgwfoevbabixyclesdh
+krdmtuqcgwfoevnabixyqdzsph
+krdmtuqjgwfogvnabrxycezsph
+krdmujqkgwfoevnabixyclzsph
+krdmtuqjgtooevnabixyclzzph
+jrdntuqjgwfoevnabixyclrsph
+krdmtuqjgzfoevkebixyclzsph
+krdmtuqjgwfosvnaeixyclztph
+krdmtuqjgwfoevzabixydlzaph
+krdmtuqzgwfoavnabiqyclzsph
+krdmtuqvgwfoevnabixycwzspv
+krdmvuqjgwteevnabixyclzsph
+krdmtujjgwfoevgybixyclzsph
+kydmtuqjgwfoeunacixyclzsph
+krdmtuqjgifoqvnabicyclzsph
+krnltiqjgwfoevnabixyclzsph
+krdmtuqjgwfoevnabhxyclzsgi
+kfdmtuqjnwfowvnabixyclzsph
+kmdmtuljgwfoevnabixycvzsph
+krdmtxqjgwaoevvabixyclzsph
+kramduqjgwfoevnabixyclzwph
+krdutuqjgwfoennabixyclziph
+krdmvuqfgwfoevnacixyclzsph
+krdmtuqogwfoevnabmvyclzsph
+krdmfuqjgwfoyvnabixyclzseh
+krdmtuqjgweoelnabixyclzspd
+krdmtumjgwfoevnabixyclzypo
+krdmtuqjgkfoevhabixyclzsqh
+kjdmtuqjgwfoevgabixyclzsah
+krdmtuqjgwfoevnlbixyclzsbw
+mrdmtxqjgwfoevnabgxyclzsph
+krdmtuqpgwfoevnhbixycltsph
+krdmtuqjgwfmqvnabixyclzslh
+krqmtuqogwfoevnaqixyclzsph
+krdmtusjggfoevnabicyclzsph
+krcmtuljgwfoevlabixyclzsph
+krdmtuojgwfoeknabixyclzsrh
+krdmtuqjtwfoevnabiypclzsph
+krvmtupjgwfoevnabixycldsph
+krdmtuxjgwfoevaabxxyclzsph
+krdmtvqlgwfoehnabixyclzsph
+wrdmtuqjgwfoevnabixyclzdpy
+krdatuqlgwfoevnabixyclzsjh
+krdmtuqjgwfoevpabkxyclzsjh
+krdmtuqjgwqvsvnabixyclzsph
+krdmtwqjgwfoevnobixyclzspm
+krdmtuqjgssoevnabixyclgsph
+krdmtuqjgwfoevnafixyclzbpp
+krdmtuqjowfoevxabiuyclzsph
+krdmtuqrgwfoevntbixyclzspu
+krdmtucjgwfoevnabixcnlzsph
+krddtuojgwfoevnabixyclzzph
+krdmtuqjgwuoevnabiqycldsph
+kpdmpuqjgwfoevnabixyclzslh
+krdmtuqjgwfoewnabixyzxzsph
+krdmtuejswfoevhabixyclzsph
+krdmtuqggwfoevntbikyclzsph
+krdmtuqjgwfoevnabixydlhnph
+krdmtcqjglfoevnaxixyclzsph
+krumyuqjgwfoevnrbixyclzsph
+kgdmmuqjgwooevnabixyclzsph
+krdmteqjgwfqevwabixyclzsph
+krdmfuqjgwfpevnabixyclzspq
+erdmtycjgwfoevnabixyclzsph
+krdmcuqjgwfoevnabixjglzsph
+krdmtuqjgtfoeunabixiclzsph
+krdmtuqjgwfoevmqbixyclzspu
+krlmtuqjvwfoevnabikyclzsph
+krdotuqjgwfoevnagrxyclzsph
+krdmtuqbgwfoefnabixyclasph
+kwdmtuqjgwfosjnabixyclzsph
+kydmtuqjgwfoevcabixycezsph
+crdmtuqjgwloevnabixkclzsph
+krimtuqhgwfoevnbbixyclzsph
+krdmjuqagwfoevnabicyclzsph
+krdmtuqdgzfoevnabixydlzsph
+krdmtuqjgwwoevnaqixyclzspf
+krdmtuqjgwfoevnabdxyzvzsph
+krdmtuqjgwaofvnabixyclzsnh
+krdmturjgwfmevnabixyclzspn
+krdmvuqjgwboevnabixyolzsph
+krdmtuqjgwfomvnabijyclzspx
+bedmtuqjgwfoevnabixyslzsph
+krdmtenjgwfoevnabixyclzsqh
+krdmtuqugwfoevnabixpcdzsph
+krdmtuqjgiloevnabrxyclzsph
+krdmtupjcwfoevnabixyclwsph
+kremtuqjgwfoevnabixyyjzsph
+krdmtuqjgwnoovnabixyclzshh
+qrdmtuqjgwfoevnabixyciasph
+krdituqjgbfoevnagixyclzsph
+krdmnoqjgwfoqvnabixyclzsph
+krdmtuqegwfoevhkbixyclzsph
+krdmkucjgwfoevnabixnclzsph
+krdmtuqbnwpoevnabixyclzsph
+krdmttqjgwfoevnabixyclbspz
+srdmtubjgwfrevnabixyclzsph
+krdmruqjzwfoevnabixyclesph
+ardmtuqfgwwoevnabixyclzsph
+yrumtuqjgwhoevnabixyclzsph
+rrdmtuqjgwfoevnabsxycwzsph
+krpmtuqjgwfoevdabixyclzzph
+krdmuuqjgwfoevnabixyclriph
+krdmtuqjgwfobvnabixyvgzsph
+krdmbuujgwfoevnabixycczsph
+krhmtuwjgwfoeqnabixyclzsph
+krdwtuqjgwfoevnkbixyclzzph
+krdmtuqjgwkoeqnabixyvlzsph
+kadmtuqjgwfoednabcxyclzsph
+krdmtyqqgwfoevnabizyclzsph
+krdmtuqjgnfoevnabiyycmzsph
+krdmtuqjcwfouvnabixyclznph
+krdmtuqjjwfcevnqbixyclzsph
+krdmtuqfgbfoevgabixyclzsph
+kkdmtuqjgwfoevnapixyclzsth
+nrdmtuqjgwtoevnakixyclzsph
+krdmtuqjglfoevlabixdclzsph
+zrdmtuqjgwfoevndbixbclzsph
+krdmeuqjgwfoeenabixyclrsph
+krdmoaqjzwfoevnabixyclzsph
+krsmtuqjgwfoevnwbixyclzsfh
+kadmtuqjgwfoqdnabixyclzsph
+krsmtuqjgofoevnabixkclzsph
+krdmtuqjdwfoevnibixdclzsph
+mrdmtuqjgwfouvnabixyclzfph
+trdmtlqjgwfoevnabixyclzjph
+trdmyuqjgwfozvnabixyclzsph
+krdmtiqjgwroevnabixyclzspk
+erdmtutjgwftevnabixyclzsph
+krdwyuqjgwfoevnaaixyclzsph
+krdmthqbgwfoevnabixyclksph
+krdmttqjgwfoivnabixyclvsph
+krdmtuqjgwfoefnabixyflgsph
+khdmtuqjgwfoevnajixyvlzsph
+krdmtuqvgwfoevnasixyclzspt
+krdmtuqjgkwogvnabixyclzsph
+krdmtuqjgwfoevnaboxpglzjph
+kadmtuqjgwfoxvnabixyclziph
+krdmtuqjfwfoevnabaxycbzsph
+krdjtuqjgwfoevnabiryhlzsph
+krdvtuqjgpfoevnabcxyclzsph
+brdmtuqjgwfoevnafixyqlzsph
+krdmtuqjgwfoevnavixxcllsph
+krdhtuqjkwfoevfabixyclzsph
+krdmtuqjgjfoevnawixyclzsuh
+krddtuqjgwfoeqnabiwyclzsph
+krhmtuqjgwfnevnabinyclzsph
+kedmtuqjgzfmevnabixyclzsph
+qrdmtuqjgwfoevntbixyclzxph
+krdmtuqsgwfoevnabixvclzrph
+scdmtuqjgwfoevnabixtclzsph
+krymtuqjgjfolvnabixyclzsph
+krdmtuqjgwfkevnablxyclzskh
+krymtuqjswfoevnabixyclzvph
+krdmtuqjhwfoevnabixycwzspd
+krdmtuxjgwfoevnabyxyclzzph
+krdmtlqjgwfovvnabilyclzsph
+krdmtuqjgwfoevnaaijcclzsph
+krdatrqjgwfokvnabixyclzsph
+krdmtuqjgwfoevnaxifyclzkph
+krddtuqjgwfoevnabixccozsph
+krdmtuqngwfoevnabiyycxzsph
+krdmtumdgwfoevnqbixyclzsph
+krdmtuqjgwfoevnabixyxlmsch
+krdmtudzgwfoevnabixtclzsph
+krdmtuqjgwfoevnpbixyclhspl
+krdmtqqjgwjoevnabexyclzsph
+kydmtuqzgwfoevnabixyclwsph
+krdmeucjgwqoevnabixyclzsph
+krdmtuqjghfoevjabixyclzspp
+krdmtuqjgjfwevnabixyclzskh
+krdmkuhjgwfoevnabipyclzsph
+krdytuqjgwfoevnabibyclztph
+krdmtuqjgwfpevnabisyzlzsph
+kmdmtgqjgwfsevnabixyclzsph
+krdmtuqjgsfoevnabijyclzszh
+krdmtuqjgwfoevnabivyclzuuh
+krdstuqjgrfoevnabixyclzspu
+jrdmtuqjgwfotvnabixyclzspj
+krdmrumjgwfoevnabixeclzsph
+krpmtusjgwfoevnabioyclzsph
diff --git a/2018/inputs/20.txt b/2018/inputs/20.txt
new file mode 100644
index 0000000..620f018
--- /dev/null
+++ b/2018/inputs/20.txt
@@ -0,0 +1 @@
+^ESEEEESSWNWSWSEESESENENNNW(SSWENN|)NENWWWWWNWNWWS(SWSEESE(SSWSWNWSSSESWWSSSSEEESWWSESSEENN(WSNE|)NENEEEEESSSEENNNNENEEENNWWS(WWNNNENWW(NENNNNNEEENWNNWWWWWWWSWNNNWNNEES(SENNNWNNWNNNWWNWSWNWNNENNEENNNWSWNNNWWNWWWSWWSEEEE(NWES|)SENESSS(EE|WNWSSSSE(NNESNWSS|)SWWNNNNNWN(E|WWWWNNWSWWSWWWWWNNESEENNEEE(SWWSNEEN|)NWWNWNNWWSESWSE(E|S(WWNNNNWNWWNNENNWNWNNNNWSSWWNENWWWNWSSSWSSENESEEEE(NWWWNWNE(WSESEEWWNWNE|)|SSE(SWSWNNNWSSWSSSWNWSWNNWNNN(NWSWWNENWWNWWNWWNNNESSEEES(W|ENNENNESENNWWNNWWNWNNNWWWSEESSWSSENESESE(N|SSWSWNW(S|NWN(EESEWNWW|)WWNNE(NWWNNE(SEEWWN|)NWWSWWWN(WSWSEEEEESSSE(SSSSWSSWNWSSWNWWWNENEE(SWEN|)ENE(S|NN(ESSNNW|)NWSWNWSWWSW(NNNEN(NNN(WSSSNNNE|)E|ES(SWEN|)EEEN(ESNW|)WW)|SE(SWSSSEEESWSSESSSENNNENEN(WWSWENEE|)EEESSWW(NEWS|)WSWSEENESSEEENNNW(SWSEWNEN|)NNE(SESEE(NWNWESES|)SSSWSW(NNNESNWSSS|)WSWSSWWNENWN(EE|WSSSWSWWNWWNWSW(NNNNNESSE(NNNWWNNE(NWES|)S|EEENE(SSSW(S|WN(W(WW|S)|E))|E))|SESWSSSESESEEEESWWWSSWWNENWNW(N|SSSSSSEEENN(WSWNSENE|)EEENWWNEEESSSSSENENNENNNNWWW(SEESSW(N|SS)|NNNWWSS(ENSW|)WNW(NW(S|WNENNESSE(S|NEEENEEEESWSWNWS(WWW|SSSEENN(WSNE|)EEN(W|NEENENEEEEESSWWN(WWSWSEE(SENEESENNENEESSW(N|SEENNNEEEE(SWWSEESWSWSSSSSSESSENNEESESSWSWWWSWNWSWNWSSWNWWWWWSWWNWNWSWWNNE(NWWW(NENNNENEENNNEE(NWWNWSSSSWNW(NEWS|)SS|ESWWSEESSWNWSSESWWNNWSSW(SEESES(W|EENN(NNEESWSSEEN(W|NEENESENENE(NWWWNWSS(EE|WSWNNWNNESE(NN(E(SEEES(ENN(N(E|NN)|WWW)|W)|NN)|WW(WSSSSE|N))|S))|SSWSSEE(NWES|)S(WWWWNWSW(NNEEES|WS(WNWSW(S|W)|EEE))|EEEN(N|E))))|W(S|W)))|N))|SWSESWSWNNWWSWNWWWN(WWSESWSESESSEEEEENESSWSESWSESSENESENNNNWSW(SEWN|)NNENENENN(W(WS(SW(S|NWWN(WSSWWNENWW(SS|N(WSNE|)E)|N))|E)|NNN)|ESEE(NWES|)SSWW(NEWS|)SESSSWNW(N(N(N|W)|E)|SSESSESSSSSWWNENNNWN(WWWWWSWSESWWWNWWWNNW(NEEEEES(WS(WWNE|ES)|ENN(ESNW|)NNWSWS(WNWSWWNNE(S|EENE(S|N(EESWENWW|)WWSWNW(NN(ESNW|)N|S)))|E))|SSSEESE(ESSWNWWW(NEWS|)SSESEESSENESESWWWWWW(SSSSSSSSEESESSEENESEENENENESSWSESSESWSEENESSWSEENEESENNENWNNENEEEEENWWNWNWWNWNNEENNWSWWWSESSSSSE(SWSWSESSWNW(S|NWNENNNE(NWWWW(NEENWNNWNWSSWNNWSSSES(ENENSWSW|)WWWWWNNNENEE(NWN(ENNW(NNNWS(S|WWN(WWNWESEE|)ENNNESES(W|EEEE(NWWWN(W|NESENNE(NWWSWN|S(ENSW|)S))|ESSESENENN(WSWNSENE|)NNNNESENEENWWNNENEEEENEENNNNESSEESSENNNWWNNWN(WWS(E|WSWSWWSWNWSWSW(SSWSESSENNNEN(W|NESENENES(SWEN|)ENNE(N|SS))|NNENEENESENENWN(EESNWW|)WSWWWSE(WNEEENSWWWSE|)))|EN(ESSSENESENEEEEESESENESENEESSENNNESSSESESWWSSENES(ENNNNENENE(NNNNWNN(WWNWWWSESE(SSEE(NNWSNESS|)ESWWWSSW(SE(ENEN(E|W)|S)|NNWWWSWWWWWNWNENNNNWNWW(NEENWWNEEESEESWS(WNSE|)ESSSW(SSES(EENNNW(S(W|S)|NENEE(N(EEE|NNWSWNNEENWN(WSWWNWN(EE(EE|S)|W(NEWS|)SWS(WNWSWNWWSWNW(NE(EEEEEE|N)|SSES(W|ENE(SE(N|S)|N)))|EESEESSS(S|EE)))|E))|SSW(N|SSENE(SENSWN|)N)))|W)|NN)|SESESSWSSWNNN(WSSSWWWN(WS|EENWW)|N|E)))|N)|EES(SSESWENWNN|)W)|SSWSWSEEE(SESEEN(EN(EES(EENWESWW|)S(SSSS|W(N|W))|W)|W)|N(W|N)))|SSWSWWSWSEEEE(N(NESE(E|N)|WW)|SSSWWNENWWSSSWSSESENN(W|NESSSSWWWNWWSESESSESENNWNEEESWSSESWSWWWSESENEENEN(NNWESS|)EEESSEEEENWWNW(S|NNEEEE(NNWWWS(EE|W)|SS(WNW(S|W)|EEN(EEENWNENN(WSNE|)NESENESEENNNEESWSSEEN(W|NEESENENENWNNWWNWNENESEENNENWWWS(ESNW|)WNWNEEENNESSEENWNENNENESSEESEESWSWSWNN(WSW(NN(N|EE)|SSSW(SSW(SS(WNNWWEESSE|)EEENNN(WSSWENNE|)EENESENNN(WSWWSWNN(SSENEEWWSWNN|)|NESSSEENWNENWNWNNNESSENNNWNWSWSSWNNWW(SEWN|)NNNWWNENNWNENESSEENNNW(SS|NNWWNENEEENNEESSW(SESSWSW(SSESSEENNW(S|N(W|NEES(ENENWNENEENWNWSWWW(NNENNWNWNEENNWSWWWSESSS(E(N|E)|WWWWSS(EENWESWW|)WSWSWWNNNWNNENNWSWWNWWWSWSWSWWSESEEN(NESESSENENE(NNWWNWS(SE(S|E)|W)|SSSE(SSWWWSESSSSSSWWWSEESENESSSENNNNESE(NNWNNNE(SSEWNN|)NENWNW(SWS(SSSW(S(S|E)|NNNN)|E)|NEESEESW(ENWWNWESEESW|))|EESWWSW(SSWWWSWS(E|WWSWWSWNNENWNNWNEENE(ESE(N|SE(ENWESW|)SWWS(E|W(S|NN(WSNE|)(N|E))))|NNWNWNEEENWNNENWNWWSWWSEEE(SWWS(EE|SWSESSE(E|SWWWSW(SSEE(N(N|W)|ESWWSESWSSWNNWSW(SSSEN(N|ESEESENENN(WSW(NNENNSSWSS|)W|ESSEE(SSESSENESSWWWNWN(NWSWS(E|WSS(WNNNEN(ENEEWWSW|)WWSWNW(SWS|NEE)|S))|E)|NENWW(NEWS|)S)))|N))|WNWSWNNEEE(EN(ESNW|)WWNNNEE(SWSEWNEN|)N(ESNW|)NWNNNWWWWWNWNNNEENNENWWSSWWSWWSESSWWWS(ESEEEN(NNN|ESSSEEENWWNEEEESSS(W(NN|WWWWSEEESSWWN(E|W(SSSSES(ENNWNEEENNN(SSSWWWEEENNN|)|WWW)|WNNNW(NEWS|)S)))|E)|WW)|W(W|NNEE(E|NNNNNEENESS(WWSEWNEE|)ENNNWWNWWSS(ENSW|)WNW(SSEWNN|)NWNNNEENNESESSS(WW(S|N(EN|WS))|ENNEENNWNWNWS(SESEWNWN|)WNNENNWNNESEENWNEESSESEENWNNNW(SS|WWWNNESEEEEEENNNEENNNNWWWN(EEEESSSSSENNENWNEN(EEESESSWWN(E|W(NEWS|)SSSSSSSENESSWWWWWSEEESESWSESENENWNEN(NEEESENNWWWNW(NWNENWW(NEEESESEEENWNNENESESW(W|SEEEEENNNENESSSSENENNESEESESESSENNNESESWSSWSEEENWNEESENNWWNEENNNESESWSSSESENNWNEESE(SWSESWWWSESWSESSSSWNNNWNNNN(WSSWN(N|WSSEESSSSSWSSEEN(N(NNN|ESENESE(NNWNENNW(NNNESS|S)|SSSSSSSWNNWSSSEESSSSSWNWSWWNENWWSWWNNWWNWNENWNWSSSWSWNNW(NNENNNWS(S|WNNEENENESENENESE(SSESSEEE(ENE(NWW(NEE|SWNWS)|S)|SSSSSES(SENNSSWN|)WWNNNWSSSW(NNNNEENWWWNWWWS(EES(SE(SSWNSENN|)N|W)|WNNN(WSSSSS(W|S)|EEE(NWES|)S(E|WW)))|S))|NNENWWNWNWSWSES(WS(WWWS(E|WWS(EE|WWNENEENNENENE(ENNWSWWSWWNWWWSWWWWWWSEEESWWWWSEEESENENEESS(W(N|WSEESWWWSWWWSESSWS(WWNEN(E|WWWWWSS(ENESE(S|N)|WNNWSSWS(SWWWWNENNNWSWNNWNNNESSEENWNNNNNWWSSWNN(NEENNNN(WWWSSENESSW(ENNWSWENESSW|)|NES(ENNN(WSWNSENE|)ESSSENNNNN(SSSSSWENNNNN|)|SSSSEESWSSESEESSWNW(WNSE|)SSS(WW|SES(WSESWENWNE|)ENNN(WSNE|)EES(EENNNENNWSWSWW(SEESNWWN|)NEN(WWNW(NNNWWEESSS|)(S|W)|ENEEESE(SWSESWWSSENESENNENE(SENE|NWWS)|NNWWWNNNESSEEE(N(ENWNENWNN(ENESENESEESWWSWSW(SSENESENN(W|EEENESENNESENNEE(NWNWNWSWSWS(EENEWSWW|)WW(N(WW|NNN|E)|S(SWWEEN|)EE)|SESWW(N|S(EEESEE(NWES|)S(SESENSWNWN|)WW|SWW(NEWS|)(S|WWWWWS)))))|NN(E|W))|WSWWN(WNSE|)E)|WW)|S)))|W))))|WWSWWS(WNNE(NWWSSNNEES|)E|SEESEN(N(WW|N)|E(EENNSSWW|)SSWWSW(SWSS(WNNSSE|)ESENENN(WSWENE|)E(NWES|)SESWSEE(E|SSSESWSWSWNN(WSSSES(EEESES(WSNE|)ENENEN(WWSWNN(E|W(WS(W|E)|NENNEE))|ESE(NN|EEE(N|S(WWS(WNWWEESE|)SSESW(W|SESWS(E|WW))|E))))|WWNWNE)|NNE(NWW(WW|N)|SS)))|NN))))|E)))|SENENNEN(W|ENESENESEE(NWES|)SWWS(WWN(WSWSESE(N|SS(ENSW|)WNWSWN(NEWS|)WWSS(SE(ENWN|SWS)|W))|E)|E))))|ENEENN(WNWS(SEWN|)WWW|E))|SSSW(N|W))))|E)|E(E|N))))|SSS(SWEN|)EEESESESESENN(WNWN(WNWESE|)E|ESE(N|SWSWSSWSSSWSWWNNE(S|NWNW(NENN(WSNE|)E(ESWSSE(NENSWS|)SS|N)|WSWWSESSSWSW(WWWSWNW(S|NNWNEESE(NN|S(W|ENEE(SW|EN))))|SESSSESWS(W|SSSENEESESESESSWSSESSENNN(W|NENNESESEEESWSWWWN(N|WSSEEESSSWWNENWWSSWWN(E|WNWWNWSSSSSWNWNNE(NNWSWSSWWSEESWSEE(N|SSSWSEESENNESEESENNWNEENENNESENN(WWWSWNWNWW(NEWS|)SSE(N|SE(N|E(E|SWWS(S|WNNWSW(N|S(E|S))))))|EEENWNNEN(W|ESE(NNNW(SWEN|)NNWNENE(SSS|NWWSWSSWNNNENNNENESE(NNWWNNWWSSS(ENNSSW|)SWSWWSWSW(SE(ENEE(S(S|W)|N(ENSW|)W)|SS)|WNNW(S|NEEE(SWSNEN|)NWNWWS(WSSWWNENNENENENEEENENNNEESEESESS(SE(SWEN|)NNNNNNNWNENNWWS(SSWWS(EES(E(S|N)|W)|WNNW(SWS(SSWS(E|SWWN(E|WSWS(WN(NENNW(NENSWS|)S|WSSSENE(WSWNNNSSSENE|))|E)))|E)|NEEE(SWEN|)NNEN(WWSSW|EESW)))|E)|WWWNN(ESEWNW|)W(SSSSSSWNW(SSEWNN|)WNEN(WWSWENEE|)E(S|N)|N))|E)))|SWWSEE))|SSSW(NNWESS|)SESSWWN(E|NWWSESSSSWSWNWNN(ESENNWW(EESSWNSENNWW|)|WSSSESEEESWWSWWWWWNWSSSWNNNWN(ENESEESEN(ESEWNW|)NNN|WSWWWSWNWNWSWSESSEN(N|EEESEEE(SEESENESSSENESESEESESESWSSWWSESESEENE(NNWSW(S|W|NNEENNW(S|NENNNNNWSSWNNWNNN(ESSENE(S|NWNWNN(ENE(NNWSW(S|N)|SS(S|W))|W))|WSWWSSEE(NWES|)SESWW(WN(E|WNW(S|NENWWWSE(WNEEESNWWWSE|)))|SEEEESW(W|S)))))|SSSSSWSSWSESE(SSSWNNWWSESWWWS(WNNNENWNNNESSES(SSWENN|)E(E|NNWNNENWNEN(WWSWSS(ENSW|)WNNNWWSSE(SSWSWWWNENWWWSSWSESEESESENESSS(ENNE(SS|NWNWWN(EEE(N(W|N)|S)|W(WWNNSSEE|)S))|WNWWS(E|WNN(NWSWNWN(WSSWSES(WWWWNEENNENWNNWSWWNNE(NNWWWNENENNNWSWWWNEENNWNENNNNEEESSEEESEENNW(NENNWWS(E|WNWN(EENESEESE(N|EESESSSESWWSEESWWSESSWNWWSESESESS(WWN(WSWNNWWNWNWWSSS(W(NNNNEEENNEN(WWSSWWNENN(WWW(NNESNWSS|)SE(SSWNSENN|)E|E)|ESSWSSEE(S(ESEWNW|)W|N(NNNEE(SWSEWNEN|)NNNN(ESSNNW|)NWWSSE(SSWNSENN|)N|W)))|W)|SSEENWNE(NWNSES|)ESSE(ESWWSW(NWW|SEEN)|NN))|E)|E(S(E|S)|NNN(W|NNESSEENE(NWNW(NNW(SSWENN|)NEESES(S|W|EENWN(E|NW(WNWSWNWNN(SSESENSWNWNN|)|S)))|SS)|ES(WSNE|)E)))))|WWNENWNNWWNNENNNNWNENESSEENEE(SSW(N|WWWSEESWS(EEESEN(EESWENWW|)NN(NNES|WWSE)|SW(W|NN)))|NWWW(S|NEENNENE(NNNWSSWNWSS(SWS(WNWNEENNW(WS(E|WSSWNW(NNE(S|E)|SSESWWNW(NENSWS|)SWWSWSSWSESWSSESSSESSSSESSEENWNNNEESENNN(EESWSSE(SWS(WSSSSWNN(NNN(WNSE|)E|WSSSSWWSESWSWWNWNENNNES(EENWNENWWSWNNWSSWSESSWNWNWWNEENWNNNNESSSE(S|NNEE(NWWNEENWNWWWNEEN(ESNW|)NWSWWWWNEENE(S|EENWNWNNWSWSS(E(E|N)|WNNW(SWSSSSE(NN(EE|N)|SESWWSSWNNWWWNWNN(EEENWN(WSWNSENE|)EE(NWES|)SSSWW(SEEEWWWN|)W|WSWSWWWNWSWSEEEEESSSENNE(NWNSES|)SSSSSWNNWSSWNNWSWWSSSWWWWSESWSESEEEENWWNW(NEESEENWNEESSSEESWSEESESESEENWNEEENNNENE(NWNWSWWSSWWNWSS(EEEE(NNEWSS|)SWWW(W|S)|WNNNWNN(W(WWWNE|SSSE)|ESENENNENN(ESSSWSS(ENE(ENESE(ENWNNWSWW(NNE(EENWN(WSNE|)ENE(NWES|)SES(WSSS|ENE)|S)|S)|S)|S)|WS(ESNW|)W)|NWN(WSSS(ENSW|)SS|E))))|SENESSSEN(ESSWWWNWSW(NNEEWWSS|)SWWSESESWSESENENWNN(NEESS(WNSE|)EESSEEEENWWWNNEN(W(WSWNSENE|)N|ESS(ENEESWSESWSEESWWWWN(E|WSWSWWNEN(E|WW(NNESNWSS|)WSSSSEESENN(WWNNSSEE|)ESSENNNESSENEN(ESESENEE(SSW(N|WSS(EEEN(WW|NEENNWSWN(SENESSNNWSWN|))|WWWWNN(ENESESWW(EENWNWESESWW|)|WSSWNWSWNWSWWWWWWWNENENESS(W|EN(ESENSWNW|)NNNWWWWSWNWSWWNENEENEE(NWWNN(ESENSWNW|)WSSSWWWNNESENNWWNE(NWNWWSWWNWWWWSSWWSWWWNNESENEENWNE(EEEEEE(ENWNSESW|)S|NWNNWWSESWSWWS(EEENSWWW|)WSSWSWSSESWSESESWWWSSWWNWWNNWSSSWWNNNE(SS|NWNENENNWWS(E|WS(E|SWWWWSSSESWSSES(ENN(ENWNENN(WSWNSENE|)ESSSSSEEES(WWWWNSEEEE|)EEEN(WWNEWSEE|)EEEES(EENENNW(SW(S|WN(WSNE|)E)|NEESSSS(W|ENESEEENEENWWNWNNEENWNEENNWNNW(NEESSENESSSW(SSWSEEESSEE(SEEN(W|ESE(EN(ENEEWWSW|)W|SSWNWSWWN(E|WSWNN(E|WW(SS(ENSW|)WW|NN(ESNW|)WW(SEWN|)W)))))|NWNN(E(E|S)|WN(WSNE|)ENNW(NNE(N|S)|S)))|N)|SSS(WSSWSWNWS(WWNENEENWWN(EEE(ENWESW|)SS|WSSWS(WNNN(W|NE(SS|NN))|S))|SEESWWSEESEN(SWNWWNSEESEN|))|E))))|WWW)|W)|WWWNENNNWWSS(ENSW|)WWNNWSSWSES(WWWWNENE(S|NWWSWSSWNWSWNNWSWNWNEENWWWWWSESSS(WNWWW(SEEWWN|)NNNENWNEENNNENNWNNWSW(SSSE(SSWNSENN|)N(E|N)|NNENNW(S|NENESSSSENENENNNWSW(S(S|E)|NWNWNW(NNNEESWSEES(W|ES(EEEEESWWWSESEEN(W|ESSSWWWSWW(SSESSENEENNW(W(SEWN|)W|NEESSSEESSSWSEESENEESWSE(S(S|WWWN(WSSWNNN(WWNWNEE(S|NENWWWS(E|WWSESSWS(EE(N|ESSE(SEWN|)NN)|WWNEN(E|WW(SSWSSS(WNSE|)E|NENE(NWN(E|NN(WSNE|)N)|S))))))|E)|E))|EEE(SS|ENWNENNNEEESWS(EENENWNEENNWWWNWNNNNNNWNENESSESENNWNNENNWWS(WWS(W(NNENN(WSWENE|)EES(WSNE|)ENESEESWSSS(SSSSSSESWWNWW(SESEEEENNESSSSENNNNNNNESENEEENENNNNNWWNWWSESWSSWWNNWSSWNW(SSEEES(WWWSSEE(SWW|NW)|ENEEE(SWWEEN|)ENWN(WS|ENW))|NENNNEESS(WNSE|)E(SS|NNENNEEEESWS(WWNEWSEE|)SEESESSSSW(NNN|SSWSSWWSWSWNW(NEENEE|SSESWSS(SSEESESSE(NNNWNNNW(NEN(NESESE(NNE(EENWNENENNNNNENWWNW(NEENWWW(W(NNNNNEENE(SSWWSSSEENN(WSNE|)ESES(W|SEEEE(SWSEESWWSEE(EENNW(N(EESE(SWEN|)N|W)|S)|SSWWWN(EE|NNNW(SSSSW(SE(SWSEWNEN|)EEEE|N)|N(WSWENE|)E)))|NWNW(SWNSEN|)NEENEE(NWES|)S(WSWENE|)EEE(SWEN|)E))|E(NWNNWNWWWWWWNNNESSENNEEE(SSWWNE|NWNNWSSWNNNENENEENNE(ENNWSWWWNNNWSWWNENEENN(WWNWNWSSES(WS(SWSSSEEEN(WWNSEE|)ESSS(ENESNWSW|)SWSWWNENENWWWWNWSWSWNNENEENNNWNW(NEN(W|EE(SWSES|NW))|SSWWWW(NENWESWS|)WSSWWSESSWWSSWSWNWN(WWSSE(N|ESESWSSSWNNNW(NEWS|)SSW(SESESS(ENNESENNWNEENEENWNEESESESEESENNEEE(SWSSW(WSWSWWSSESSEEESWSEE(NNESENNESSES(ENNWNNNN(EESWSEE(ENWN|SWW)|WSWS(WNN(E|N(WSSSS(WWNW(N(EE(S|N(N|W))|W)|S)|E)|NN))|E))|WWW)|SWWWNNWWNWSS(WWNENWW(NW(SWNWESEN|)NNNNEESSW(SEES(E(NNWNENENWN(EES(S|E)|WN(E|WWSS(WNSE|)E(ESNW|)N|N))|E)|W)|N)|S)|ESWSESEN(NN|EEEE)))|NN)|EENNWSWNWWS(E|WWNNNEEENN(WSWWWSWWWN(NENN(WSNE|)NNESE(SWSS(EN|SW)|EN(EENSWW|)W)|WWSES(WWSWS(SWEN|)E|EEEESS(SE|WNW)))|E(SSS(WWWSNEEE|)EE|E))))|WWN(NWWS(WNWSWWNNE(S|NEN(NNWSWNWSSE(E|S)|ESEESWWW(EEENWWEESWWW|)))|SE(SES(SSENSWNN|)W|N))|E))|N))|NESENNNE(SEWN|)NWW(W|NEEEEN)))|E)|EE)|EESE(NN|EE(E|SWSWWN(E|W(N|SSSENEEE(SSENEWSWNN|)N)))))|SSSWWS(ESWSEE(SWSEWNEN|)NEN(W|N)|W)))|EE))|W)|S)|SSESWSSS(ENNSSW|)W(S(SW(N|S(W(S|W)|E))|E)|N))|S)|SWSW(NN|S))|W)|SW(SEWN|)N)|S(WS(WNNW(SS|WN(NESE|WS))|S)|E))|WWWW(SWSSW|NENW))))))|NEENWWN(SEESWWEENWWN|))|W)|WSE(SSWNWSWNW(N|WSWSEE(N|SSWNWSSSESESSSENNNNWN(EENNN(WSSNNE|)ESESE(NNWESS|)SSWNW(N|SWSSEESES(EN(NWNWWEESES|)E(EE|S)|WWW(NEWS|)SESWS(E|SSWNNNWSWWWNENNW(S|NWNEE(NWWNW(SSS|NNESE(NNWNNE(S|N(WWSS(WNNWWWNEENNWSWWWW(SESENSWNWN|)WNENNWSWWNEN(EEESESWSEENNN(ESES(E(NNWNSESS|)SSES(ENSW|)W|W)|W)|NNWW(NEWS|)SESWSS)|S)|E))|S))|SE(N|SS(EE|S)))))))|W)))|E))|EE)|E)|SW(SESWENWN|)NN))))|NEN(EEE|N)))|W))|SS(S|E)))))|EE(NWNNSSES|)EE))|EEENWW))))))|E)|ES(WW|EE))))))|NWW(W|NNESENN(E|WWWNNNE(EN(E|WWWW(NENNE(E|NN)|W))|SS))))|W)))|W))|W)|N))|S)))|NENN(WSNE|)ES(ENEES(W|ENE(SSWS(WNSE|)S|EN(EE|N)))|S))))|S(ESNW|)W))|SSS))|EEE(NWES|)ESEESWW(EENWWNSEESWW|))|N)|WWS(WNW(NENWNNEEESSS(WNNWESSE|)ENNNNWWNNWNEESE(NN(ENNESE|WWWWSSW(N|SS(EENWESWW|)S(SSS|W)))|S(ESSNNW|)W)|SSS)|E))))|NNNEEEES(WSWNWS|EESS(EEEEE(SEWN|)NWNEN(WN(NW(SSSWW(SEEWWN|)NWN(W(S|W)|EE(NWES|)S)|N)|E)|E)|S)))|E)|E)|S)))))|S)|S)|EN(EESWENWW|)N)|E)|E)))|N)|ESE(SWSSWENNEN|)N))|EEEEE)|NNN))|NNWW(SEWN|)W)))))))))|S))|EE))))))))|W)))|W))|N)|NNNNWNN(ESNW|)WWS(ES(SSENSWNN|)W|WWWSWSW(SEENSWWN|)WNWNWSS(E|WNWNN(E(S|EEEES(ENEEEWWWSW|)(S|W))|WS(WNWW(S(SS|E)|WWWSWWSESSWNW(S|NNW(S|WN(WSWSWSW(SESNWN|)NW(S|NN(ESENEWSWNW|)W)|EEEE))))|S))|S))))|SS)|S)|WW))|W)|WWSWNWSSSWWNNN(ESSNNW|)WWSESSWWN(NNWSWWSEESSSEEEN(WW|ESS(WWWWSSESENN(ESSSWWSWNNWSSWNWWNNENENWNNN(ESE(S(W|SSSWSW)|N)|NWNWWSWNN(EEEE(EE|S)|WWWWSWNWSSWSEEEN(W|ENESE(SWWSSEEN(W|EESSSWWSESWWNWSWSWSESENESEENESSENESEN(NWWNW(NNE(NNE(S|NNNW(N|SS|WW))|S)|WW(WW|S))|EEESE(S(E|WWNWSSESWWSWNNENWWWWWWN(EE|WWSWNNWWSWSWNWNNWNEENNENNEENN(WSWNWNWSSWSWWNWNEE(S|ENNNN(WWSSS(ENNSSW|)WNWNWN(EESNWW|)WSWSEESWWWSWSWNNWSWNW(WWNNESEEEEE(ENN(E|WSWWN(WSWNWWWSS(NNEEESNWWWSS|)|E))|S)|SSEESSENESS(EENENEE(ESESES(ENN(W|E(SS|EN(W|N)))|SSWNW(SSSEEN(ESSSE(N|SENEEE(ESSSWSW(SEESW(W|SEEENNNW(NEENNN(EEEESSSSESWWWWSSSE(EEEEE(SEWN|)NNNNW(N(W|ENEE(SWSE|ENNWS))|SSWS(WWN(WSNE|)E|E))|SWW(N(WWSEWNEE|)NNNNENESENNWWNEE(WWSEESNWWNEE|)|SS))|W(WSSENSWNNE|)N)|SS|W))|WNENN(ESNW|)WSWWWW(S(ESENES|W)|N(NNWESS|)E))|N(W|N)))|W)|N(NWSWW(NENEWSWS|)WW|E)))|NWN(ENSW|)WWS(WS(S|E)|E))|WWSWWSSW(S(ESENNENW(ESWSSWENNENW|)|W)|N)))|EEES(ENSW|)S(WNWSNESE|)S))|EESWSSWWSSE(EN(ENEN(E(EENSWW|)S|W)|W)|SSWW(WSEWNE|)N(N|E)))))|N)))|N))))|W)|EESEENNEE(SWSEWNEN|)NNEE(SWEN|)NWWW(N|WWSES(ENSW|)WWWSEES(NWWNEEWWSEES|))))|E)))))))|S))|N))|N)))|N))|NN))|W))|SE(SWSEWNEN|)E)|W)))|NN(E|NW(W|SS)))|N)))|NN)|NN))|E))|W)))))))|W)))))|S)|WWS(E|SWNWN(WWSESESESSWS(WWNEN(WN(E|N)|E)|ES(W|S(EEN(EE(SWSNEN|)E|W)|S)))|E)))|SSW(WSEEWWNE|)N)|SSEE(NWES|)SWWSES)|SS))|EN(WN|ESE))|NN(EESWENWW|)N)|N))|N)))|EEENWNEESS(NNWWSEWNEESS|)))|S)|NNWNWWSS(E(E|N)|WWWWW(N(EENN(N|ESE(NEN|SW))|WWWNWWNNW(SWSES(EE|WSWW(SEWN|)N(ENW|WS))|NNESE(SSEWNN|)N))|S))))|N)|E)))))|S)))))|NWWNW(SWWEEN|)NENNNE)|EEEN(WW|E))))|N)|EE)|S))))|ESSEE(SWEN|)NN(WS|ES))|E|N))|S))))|W)|SWSESSWNWWSWSWS(WW(S|WWWNEEEENWNNEES(S|W|EN(EE|NWNWSW(W(SSSWWEENNN|)W|N))))|EEEEE(SSS|N(WW(W|N)|E))))|E)|E)|E)$
diff --git a/2018/inputs/21.txt b/2018/inputs/21.txt
new file mode 100644
index 0000000..aaebbac
--- /dev/null
+++ b/2018/inputs/21.txt
@@ -0,0 +1,32 @@
+#ip 2
+seti 123 0 4
+bani 4 456 4
+eqri 4 72 4
+addr 4 2 2
+seti 0 0 2
+seti 0 1 4
+bori 4 65536 1
+seti 16031208 7 4
+bani 1 255 3
+addr 4 3 4
+bani 4 16777215 4
+muli 4 65899 4
+bani 4 16777215 4
+gtir 256 1 3
+addr 3 2 2
+addi 2 1 2
+seti 27 3 2
+seti 0 9 3
+addi 3 1 5
+muli 5 256 5
+gtrr 5 1 5
+addr 5 2 2
+addi 2 1 2
+seti 25 7 2
+addi 3 1 3
+seti 17 4 2
+setr 3 1 1
+seti 7 5 2
+eqrr 4 0 3
+addr 3 2 2
+seti 5 1 2
diff --git a/2018/inputs/22.txt b/2018/inputs/22.txt
new file mode 100644
index 0000000..e2e94a0
--- /dev/null
+++ b/2018/inputs/22.txt
@@ -0,0 +1,2 @@
+depth: 7863
+target: 14,760
diff --git a/2018/inputs/23.txt b/2018/inputs/23.txt
new file mode 100644
index 0000000..306c4ad
--- /dev/null
+++ b/2018/inputs/23.txt
@@ -0,0 +1,1000 @@
+pos=<61981295,70302690,50074583>, r=86817788
+pos=<-39574082,11593440,52034024>, r=86226353
+pos=<-22613800,41560771,22762338>, r=83067593
+pos=<-12414843,51978293,68300191>, r=85018769
+pos=<-12727191,34870716,52975971>, r=52899633
+pos=<-32063168,40924402,49558575>, r=74871596
+pos=<18752046,16372097,-9651854>, r=70068867
+pos=<3474631,29804741,98417262>, r=77072884
+pos=<18354169,57026789,74027645>, r=65025959
+pos=<22104105,74882695,61927007>, r=67031041
+pos=<-42133805,38530007,57591711>, r=90581205
+pos=<-47869746,22599340,42855147>, r=77956291
+pos=<-27020782,-4791281,34203354>, r=93149809
+pos=<-18487970,40655084,49627122>, r=61095611
+pos=<10137288,54171533,97007570>, r=93367254
+pos=<21836035,43430190,47217893>, r=78376026
+pos=<8216569,21003453,101684850>, r=78676489
+pos=<-40466865,34952266,70038151>, r=97782720
+pos=<72670731,-8427298,58419388>, r=97862747
+pos=<-26904810,19437248,39548346>, r=63460381
+pos=<-14862223,38537164,6158587>, r=88895667
+pos=<-4093645,28809183,65079634>, r=50307904
+pos=<-13276886,43613687,45971502>, r=55187766
+pos=<49089034,29003918,14560017>, r=57321614
+pos=<-13807521,-29104885,50131321>, r=99255387
+pos=<48476757,37188242,72540714>, r=62665037
+pos=<7140081,51751715,-8561127>, r=94827577
+pos=<-43249072,32737116,53752441>, r=82064216
+pos=<6641528,98591490,47271959>, r=91547386
+pos=<-23305462,10475650,56073326>, r=75115096
+pos=<6053316,21990329,84119652>, r=62287689
+pos=<7023331,60698763,57949984>, r=63950985
+pos=<-36608889,31399128,35446137>, r=74217136
+pos=<6817093,34966536,98116734>, r=78591704
+pos=<4957605,61740316,52702032>, r=61810336
+pos=<-2269508,-8851147,43341014>, r=63321024
+pos=<12839874,52090204,58609561>, r=50185956
+pos=<-24117273,33915884,49793440>, r=60152075
+pos=<74759590,28034712,42456610>, r=54126256
+pos=<-48197949,37668470,48713802>, r=86905688
+pos=<-465248,41562365,60498029>, r=54851108
+pos=<10694430,32208520,48027772>, r=61692668
+pos=<-8548512,14246214,83247198>, r=83761331
+pos=<43950964,33755026,90173201>, r=72338199
+pos=<-14628694,43441676,58236468>, r=68632319
+pos=<106381567,34503222,46141825>, r=91485627
+pos=<-42403687,53189612,46049581>, r=93968393
+pos=<3940021,35797440,82233626>, r=66416478
+pos=<-12215361,4082478,43661351>, r=60012674
+pos=<19860123,68466722,60165468>, r=61097501
+pos=<70777186,32758921,32118468>, r=65206073
+pos=<-38591125,46522298,54596946>, r=92035892
+pos=<22636563,105345403,45688673>, r=80723037
+pos=<-3951303,29434316,22353040>, r=52688125
+pos=<-176419819,31194464,52039201>, r=76587195
+pos=<-3596358,48726226,78390625>, r=83038642
+pos=<7182613,37282188,20126279>, r=51628082
+pos=<-25240363,51483969,55323702>, r=84373768
+pos=<21428319,64401806,57994375>, r=53293330
+pos=<-5939048,7790261,21935573>, r=71754303
+pos=<-14391272,30291007,70042112>, r=67049881
+pos=<-22323827,29920141,55916312>, r=60485891
+pos=<13475129,52193445,63897921>, r=54942071
+pos=<-3994272,15505795,89454649>, r=84155011
+pos=<475865,1537450,69193888>, r=73392255
+pos=<-10815135,44879964,69035166>, r=77056155
+pos=<11306358,28884419,64442081>, r=91273574
+pos=<14678811,33694651,48185622>, r=71901550
+pos=<3756099,71276526,21743645>, r=87431573
+pos=<40262582,59466852,61256380>, r=65445301
+pos=<11616060,70966185,64722364>, r=76397938
+pos=<3872060,39650278,107716165>, r=95819913
+pos=<9586133,45083261,78735554>, r=66558242
+pos=<77865670,42917012,73695024>, r=98936729
+pos=<-1745961,55327607,42088395>, r=56640112
+pos=<26855240,67981174,26878283>, r=61746856
+pos=<-14224458,28877026,31495228>, r=53261041
+pos=<15850501,66941649,70246547>, r=73663230
+pos=<-22483771,25856673,49504583>, r=52343508
+pos=<9442908,53159770,55875115>, r=51917541
+pos=<1959101,903989,50510107>, r=53859027
+pos=<7569188,-24881655,45995388>, r=69519533
+pos=<1336123,50534199,50773018>, r=52296589
+pos=<-6780305,30188574,97998637>, r=87293233
+pos=<-27347231,32710526,48539527>, r=60922750
+pos=<-54109318,45563567,46755290>, r=98753653
+pos=<-23931716,34591305,51177382>, r=62025865
+pos=<1842700,54313361,57870403>, r=62666497
+pos=<9906862,47176518,46588813>, r=49926624
+pos=<-5650338,36212767,99081721>, r=93270578
+pos=<-9210222,73861103,51071528>, r=86469031
+pos=<-48605170,28058111,39410284>, r=78908074
+pos=<6277738,31698726,83207681>, r=60954109
+pos=<5935953,25376812,52194560>, r=66482724
+pos=<-33349449,32090950,46515684>, r=64281651
+pos=<-1144497,68829923,72349587>, r=94649606
+pos=<68150356,106204720,129297951>, r=83514523
+pos=<8426203,98908672,49758875>, r=92566786
+pos=<16538168,48418035,65737293>, r=49942650
+pos=<19573131,82515397,58801909>, r=74069662
+pos=<98906639,46422007,45986912>, r=95774562
+pos=<12340098,62609442,59505078>, r=62099865
+pos=<-28251146,31055125,25461712>, r=75499853
+pos=<19758085,59632651,60443124>, r=52643379
+pos=<-63046046,25663836,40121278>, r=92801960
+pos=<-37359413,31532323,71313730>, r=92530910
+pos=<53387378,31226416,70902974>, r=59975761
+pos=<-111343725,90010574,65438544>, r=96905196
+pos=<39565178,36023094,48981621>, r=96285986
+pos=<-18425354,35959496,54078093>, r=60788536
+pos=<4117058,66844365,17924670>, r=86457430
+pos=<4823188,-14314294,64385895>, r=80088678
+pos=<20323219,61060408,10757887>, r=71634602
+pos=<89860271,38268711,51332073>, r=83920073
+pos=<6829746,30401653,100430131>, r=76327501
+pos=<-18163621,73955629,42658058>, r=91116552
+pos=<-9868198,28983545,82688052>, r=73865474
+pos=<-3955635,32776886,7789254>, r=70598099
+pos=<22115720,88382733,50485824>, r=69078561
+pos=<-25241164,31938266,56917737>, r=66422608
+pos=<14985873,-15753032,55823238>, r=62802267
+pos=<16643466,61628684,29386869>, r=57253552
+pos=<21580242,42328478,123256438>, r=96330398
+pos=<-25199672,13587085,61865724>, r=79689986
+pos=<25598120,-21677261,57401363>, r=63021973
+pos=<20683805,43416073,80207144>, r=55264851
+pos=<-12206963,28525784,76317729>, r=69375956
+pos=<66517337,40023722,63765750>, r=74765959
+pos=<21046583,32632182,66997632>, r=92540759
+pos=<-13138431,65411819,48286547>, r=79162230
+pos=<-33524737,76477821,155964131>, r=73103463
+pos=<-33331228,9961241,69359006>, r=98940886
+pos=<39564979,28572472,53811503>, r=61407169
+pos=<-48869811,21665479,51245298>, r=84661484
+pos=<-8710194,53780076,47547665>, r=62363657
+pos=<-7314943,55087956,46146524>, r=60875047
+pos=<-61837954,25859003,56641091>, r=98831768
+pos=<-5695240,58983811,70577156>, r=87581649
+pos=<-25981379,35101300,31842886>, r=70894580
+pos=<3669996,59130810,1907555>, r=95208068
+pos=<34776272,-4188188,70499131>, r=67808809
+pos=<-35530241,30475154,50076449>, r=68407314
+pos=<-8155622,43149031,72681791>, r=76311918
+pos=<6666752,64359993,46401448>, r=56420132
+pos=<14935236,11018971,47709423>, r=95072999
+pos=<-31457362,28416643,49636691>, r=61836519
+pos=<-16109927,48371152,51014763>, r=67821289
+pos=<42694611,33011663,86560963>, r=66726260
+pos=<10684191,49511278,21069239>, r=59412987
+pos=<-423180,40569321,15553431>, r=67093941
+pos=<-32350990,31916431,66781337>, r=83374335
+pos=<-40417062,33333028,20729982>, r=94675000
+pos=<-5784232,29640751,62496121>, r=50246685
+pos=<-15428974,17471422,52568175>, r=56737766
+pos=<-2932788,33823267,68046768>, r=57128261
+pos=<63579456,43455645,46047101>, r=57541191
+pos=<15403015,31974701,112979009>, r=81876224
+pos=<-24087841,19769551,56050682>, r=66580826
+pos=<-11649390,82772147,39945831>, r=96130620
+pos=<20266288,41030544,49627298>, r=52471876
+pos=<15271488,104802139,55747920>, r=97604129
+pos=<-17294454,29095937,38121063>, r=49924113
+pos=<-28047432,15028531,34900811>, r=73659132
+pos=<63036558,50019938,71871561>, r=89387198
+pos=<-34801957,36642230,53036734>, r=76806612
+pos=<-38144076,30407351,68440798>, r=89317810
+pos=<3512495,54767308,49076598>, r=52656960
+pos=<14274088,34274498,46377106>, r=89548213
+pos=<39329258,25136254,46456590>, r=73770931
+pos=<-43496380,31317940,30852295>, r=85616814
+pos=<14184631,31298574,54769039>, r=52386260
+pos=<80496193,20583845,74488856>, r=92746549
+pos=<-23389071,63823214,32693625>, r=96173548
+pos=<-25690209,44737890,68493032>, r=91246752
+pos=<-27606431,29594954,78055471>, r=87582356
+pos=<72441600,37663099,5449732>, r=98443349
+pos=<64033149,70075201,56633740>, r=95201164
+pos=<-41252112,41584295,58764742>, r=93926622
+pos=<-12824950,60182885,70449830>, r=95783330
+pos=<63858499,1902299,56897189>, r=77198605
+pos=<-35302433,28371559,42263514>, r=63065421
+pos=<-50193553,13029004,178032706>, r=87155339
+pos=<-10241339,30475433,65035094>, r=58077303
+pos=<27176667,88255399,39199151>, r=70021298
+pos=<3789738,63200642,58556644>, r=70293009
+pos=<-29026962,17065408,63626804>, r=81800634
+pos=<-15528112,28599049,55171449>, r=51624044
+pos=<67553889,-12734884,46684710>, r=85318716
+pos=<-22058789,25579659,47800035>, r=50491043
+pos=<65502868,77153034,48367762>, r=95482653
+pos=<52012555,29111973,69892338>, r=55475892
+pos=<7094796,39275693,83735416>, r=68242166
+pos=<1860284,40455320,92877446>, r=83797940
+pos=<11928924,-2446863,70048662>, r=66778312
+pos=<7667696,94196419,41409153>, r=86774357
+pos=<-47571004,37469854,46817463>, r=84183789
+pos=<-4156736,84010739,52365610>, r=92858630
+pos=<6056924,12888978,84519517>, r=71785287
+pos=<-47345906,30387796,45986301>, r=76045882
+pos=<-14305750,38815805,53464135>, r=58911123
+pos=<-5509681,53176769,46879448>, r=57891332
+pos=<-12499446,35923605,56390435>, r=57139055
+pos=<-52764985,37485922,49356853>, r=91933283
+pos=<-995676,157395073,-3073485>, r=52828911
+pos=<20007537,18034710,53163539>, r=53689323
+pos=<14489164,16396768,90904833>, r=66230860
+pos=<-56656961,29846250,59765242>, r=98593988
+pos=<12580077,72518760,77049199>, r=89313340
+pos=<100504676,32770164,49001641>, r=86735485
+pos=<56363428,40982042,51325603>, r=53130348
+pos=<67579027,45292106,26873551>, r=79786057
+pos=<26991023,51464352,68172728>, r=51087111
+pos=<-2477721,38040811,90549029>, r=83393046
+pos=<39812282,49420172,27946843>, r=55074069
+pos=<-7592987,58715561,48320434>, r=66954427
+pos=<7777052,28459937,51985707>, r=53419415
+pos=<-34825568,30793001,25736210>, r=81537269
+pos=<-24303136,54965408,48394944>, r=79988927
+pos=<-23117889,8738217,68644161>, r=89235517
+pos=<-25024083,8306905,47947646>, r=70876621
+pos=<2007442,56985136,59636415>, r=66939562
+pos=<-13687550,71578246,57121637>, r=94712935
+pos=<-16345760,32983233,89061217>, r=90715694
+pos=<86368374,35824210,61445425>, r=88097056
+pos=<-35743614,53334234,57645839>, r=99049305
+pos=<-15191744,62377081,28606960>, r=90616727
+pos=<15180924,74088799,62177344>, r=73410680
+pos=<87747671,31399471,31905651>, r=81030076
+pos=<490300,35168974,87629502>, r=74633619
+pos=<-7639730,47107985,53037366>, r=60110529
+pos=<-15154000,47565888,46724248>, r=61769578
+pos=<-15930553,8949295,49890450>, r=63083820
+pos=<-2085646,59550216,190147611>, r=69262241
+pos=<7225777,50890764,62861738>, r=58852281
+pos=<90275849,20142660,46920592>, r=75399045
+pos=<-26764544,42182428,46746825>, r=68019674
+pos=<76321467,29233298,55996378>, r=66010239
+pos=<-72399950,54572749,137176788>, r=75623903
+pos=<20511710,69381130,54777605>, r=55972482
+pos=<11171812,-1838585,60251989>, r=57130513
+pos=<-15322219,34977106,95397324>, r=98022178
+pos=<45186029,75515109,54316351>, r=79476635
+pos=<-33243023,32685580,54621141>, r=72875433
+pos=<-61584462,35077699,48778369>, r=97765970
+pos=<-2080973,32701858,77315532>, r=64423903
+pos=<-28378799,39591108,22227847>, r=87396852
+pos=<-8099746,62641467,55946146>, r=79012806
+pos=<-24720179,45274695,48132554>, r=70452861
+pos=<20784250,45013508,95099754>, r=71654519
+pos=<-30064753,33988072,46097252>, r=62475758
+pos=<34563348,30488217,55672227>, r=86287854
+pos=<-16742541,7677207,74209817>, r=89487059
+pos=<48717911,60141573,64839376>, r=78157946
+pos=<11980231,77201897,12503508>, r=94373076
+pos=<-35767666,29757894,59267775>, r=77118779
+pos=<-22126819,32362172,682297>, r=95461509
+pos=<-20183006,18654168,80542091>, r=88282618
+pos=<29158741,90530365,43109268>, r=70368234
+pos=<78589607,47357015,57145573>, r=87551217
+pos=<53822697,51713673,83991488>, r=93986944
+pos=<-37287747,28688663,72807970>, r=91110215
+pos=<13542941,37989744,51992083>, r=61754737
+pos=<14525371,30291586,55624740>, r=74352172
+pos=<65594982,25847880,72811378>, r=70903881
+pos=<85028254,32319009,59775298>, r=81581589
+pos=<-47952231,24568531,49936283>, r=79531659
+pos=<-21321958,21913518,49475661>, r=55095834
+pos=<-48453939,34233126,49830769>, r=84843339
+pos=<99391685,35202974,43142729>, r=85240537
+pos=<22710331,34170304,55092906>, r=91207796
+pos=<-12135705,32243191,63938331>, r=60642766
+pos=<-12338157,43480193,54115729>, r=62259632
+pos=<8622864,24881999,3805702>, r=58230495
+pos=<34000374,4364405,71395390>, r=59376643
+pos=<-19712623,50327429,47038637>, r=69404671
+pos=<-8596487,17062414,87164926>, r=84910663
+pos=<-18913938,45008114,51843283>, r=68090880
+pos=<19472967,181579393,106030809>, r=56142937
+pos=<-17173370,-3226764,55066991>, r=81678816
+pos=<63850431,62835473,23871657>, r=96602589
+pos=<-3798894,30299579,101412001>, r=87836232
+pos=<9068586,62089120,57368844>, r=62714847
+pos=<-22474207,29499886,47923819>, r=52223751
+pos=<-45651602,35036414,46323892>, r=79337438
+pos=<-12419250,32111741,56514558>, r=53370983
+pos=<12664542,52854651,103268523>, r=95784065
+pos=<22357114,12328694,108875611>, r=80401468
+pos=<-6746842,50055566,49180574>, r=58308458
+pos=<-27320265,33686937,48286622>, r=61619350
+pos=<-5359976,29458721,92619986>, r=79764181
+pos=<10052919,30248699,46342959>, r=64500134
+pos=<31603672,24458394,109318746>, r=74809324
+pos=<15363324,39635782,101274262>, r=77872183
+pos=<13846270,53578231,29556061>, r=51830690
+pos=<-15354477,46149883,46658194>, r=60488156
+pos=<-569362,85626876,46006904>, r=84528844
+pos=<10749296,42284246,82711135>, r=66571646
+pos=<-14856420,53289609,77345425>, r=97817094
+pos=<-23825436,15929136,64937891>, r=79045870
+pos=<89568342,30383137,46009564>, r=70420359
+pos=<13145554,32649278,85217834>, r=57047183
+pos=<554467,16643477,85598183>, r=74612189
+pos=<36666635,41828463,88364574>, r=71318747
+pos=<12602990,89529451,67821002>, r=97072935
+pos=<-33112360,18329619,59694200>, r=80688742
+pos=<-15561603,38236853,67667639>, r=73791835
+pos=<3519076,58523179,5256274>, r=91402635
+pos=<37058015,73816180,6497217>, r=98165326
+pos=<-485820,34664283,76480969>, r=63956703
+pos=<8046540,50222182,60417372>, r=54918488
+pos=<6698732,2095928,57478145>, r=54895175
+pos=<-110267625,103715108,49404770>, r=83596582
+pos=<14488717,37517183,47868787>, r=90880734
+pos=<11594929,31481958,92334208>, r=64546675
+pos=<13142664,33433973,51871828>, r=78783673
+pos=<14725843,21079396,84588725>, r=54995145
+pos=<17991922,28746415,53178977>, r=62665596
+pos=<21345476,109893878,54658351>, r=95532225
+pos=<99514509,32213492,45962288>, r=82149323
+pos=<37772543,40405568,108402968>, r=91040181
+pos=<16477866,1889108,-9755558>, r=86930037
+pos=<6066766,45074819,93307079>, r=84640752
+pos=<63259627,39790194,63298460>, r=70807277
+pos=<85870661,25697065,48142683>, r=66661876
+pos=<-20063299,13270466,81943036>, r=94947530
+pos=<9219021,14187810,110350611>, r=93155487
+pos=<11396690,79601451,29059476>, r=80800086
+pos=<-5992626,63895408,63403216>, r=85617223
+pos=<13745746,56178190,15154849>, r=68932414
+pos=<-19200598,41415603,54301128>, r=67242872
+pos=<66801369,67709049,33790327>, r=94508881
+pos=<-58054899,31429373,50412427>, r=92222250
+pos=<17725131,19747008,101361033>, r=70100661
+pos=<16315702,21937157,109577476>, r=77536345
+pos=<-21450279,31429149,47689387>, r=52894343
+pos=<16503867,46780903,71008828>, r=53611297
+pos=<-10617311,71781674,53581209>, r=88305651
+pos=<-18369624,34464166,58808640>, r=63968022
+pos=<-44338154,47516775,49329347>, r=93509756
+pos=<7546939,23561808,74615854>, r=49718921
+pos=<-23553075,43233473,30179868>, r=78262286
+pos=<-33728549,33419608,75400040>, r=94873708
+pos=<4130401,-415851,60422323>, r=62919529
+pos=<12199308,42656684,46658363>, r=62914010
+pos=<-10823045,40017720,87358982>, r=90525236
+pos=<54855928,43498518,54679995>, r=57493498
+pos=<12261573,29515175,45893575>, r=97366173
+pos=<15817533,48376146,72425161>, r=57309456
+pos=<22499943,43484899,49303866>, r=84870164
+pos=<15087449,40820405,15442472>, r=51945357
+pos=<2380830,39189079,87564730>, r=76698440
+pos=<10292232,61644825,58639264>, r=62317309
+pos=<-25063352,29824290,49726684>, r=56939825
+pos=<9247300,60592893,82851862>, r=86522910
+pos=<34974237,51631378,71206261>, r=62271044
+pos=<11115341,39008866,88216499>, r=68435471
+pos=<-47347839,33255463,54507917>, r=87436830
+pos=<-12385471,35476634,66586332>, r=66774052
+pos=<40297014,43609070,76102045>, r=64467152
+pos=<-25028316,48459326,70188306>, r=96001387
+pos=<29716238,95743100,36047260>, r=83200834
+pos=<-2195894,57161709,59974579>, r=71657615
+pos=<-34897564,36092514,37195303>, r=75449626
+pos=<-34350080,30930206,62762967>, r=80368703
+pos=<-13299160,-1305686,52546724>, r=73363335
+pos=<74203994,40071747,39943051>, r=68121068
+pos=<-30255218,53252625,55149209>, r=90982504
+pos=<-23708755,36047177,30518158>, r=70892646
+pos=<-42225041,28551593,47086408>, r=70188476
+pos=<45093813,91953991,40089158>, r=90747011
+pos=<20989497,-9578662,65146013>, r=59947021
+pos=<-9469151,9360043,19787978>, r=75862353
+pos=<-10455182,76182076,47046337>, r=86009032
+pos=<1489674,30920418,49075947>, r=50871653
+pos=<-1805815,40895592,59548754>, r=54575822
+pos=<22434664,50411195,76723826>, r=57025799
+pos=<1351173,-35240030,57415985>, r=97516622
+pos=<-32995557,45695405,31582059>, r=88763841
+pos=<96147879,48598772,48672050>, r=97877850
+pos=<71556712,165083816,80525352>, r=61212474
+pos=<-26738516,51821211,51973287>, r=82858872
+pos=<-45126452,24625563,45768892>, r=72481504
+pos=<-1724534,91435747,47738636>, r=93224354
+pos=<-42642617,17009143,50075464>, r=81920769
+pos=<52222152,55156460,54199932>, r=66037534
+pos=<8639285,85433958,47459393>, r=76579513
+pos=<10141717,61817092,48597374>, r=52598556
+pos=<47916267,47143215,50290112>, r=49808644
+pos=<-1999143,50275699,76700962>, r=81301257
+pos=<-41681257,20679616,56340422>, r=83553725
+pos=<35884408,41646080,79776061>, r=61765620
+pos=<4301038,52856724,21630776>, r=68579717
+pos=<-40960612,30439627,37255922>, r=75799466
+pos=<35444048,43762938,84706440>, r=68372926
+pos=<79975658,29137911,50197120>, r=63769730
+pos=<93007,44307904,61961116>, r=58501565
+pos=<-32671755,39076539,66101849>, r=90175907
+pos=<-19991034,51969552,46041742>, r=70328104
+pos=<-35314188,37602800,46861313>, r=72103772
+pos=<37201145,71666894,82972323>, r=96299533
+pos=<-49234235,28079826,57132180>, r=86771712
+pos=<8312877,40022919,72604965>, r=56640475
+pos=<39181205,52790049,92153926>, r=88584204
+pos=<7068698,47606987,62510305>, r=55374127
+pos=<30603349,56814294,106942634>, r=98819430
+pos=<16115552,28332758,35601360>, r=54887656
+pos=<10074393,95989908,47950308>, r=86191298
+pos=<-5591354,49710053,47446079>, r=55073040
+pos=<-16059874,70092354,52417407>, r=90895487
+pos=<-3286599,20110685,83441267>, r=72828890
+pos=<-6936335,22574502,22140566>, r=57762340
+pos=<32992478,36116750,76761537>, r=50329801
+pos=<-89483882,3641127,125934475>, r=84985845
+pos=<45083402,48971622,84039680>, r=82553733
+pos=<16543763,-12232511,59927146>, r=61828172
+pos=<-128930120,71482570,52773218>, r=59057806
+pos=<-3321066,36249470,10553454>, r=70672189
+pos=<11035114,-4452527,60224262>, r=59853336
+pos=<-26291008,49849603,66835908>, r=95302073
+pos=<7937807,81400916,47819246>, r=73607886
+pos=<16576233,48187487,42040402>, r=56973312
+pos=<4344158,75290424,35788694>, r=76812485
+pos=<32189900,-55403075,49857150>, r=95795351
+pos=<17696418,36185949,87820170>, r=58635317
+pos=<777488,12020182,61326632>, r=54740630
+pos=<33863194,35023084,109647702>, r=82992971
+pos=<27201238,50703815,113905343>, r=96269385
+pos=<13342983,51362786,14113529>, r=65561106
+pos=<-3406344,1514525,71500197>, r=79603699
+pos=<-4003952,88211664,52599168>, r=97140440
+pos=<7364870,66805533,30929588>, r=70166122
+pos=<4337235,69741240,49137686>, r=66867686
+pos=<39289283,41543331,80086140>, r=65377837
+pos=<31061019,37187231,96617615>, r=69325024
+pos=<12227872,90873558,49623164>, r=80594302
+pos=<-29205869,34879980,48574906>, r=64986227
+pos=<-23428908,25034353,70988758>, r=75595080
+pos=<31236415,75651801,72043812>, r=83391270
+pos=<-35663336,33550704,50545521>, r=72085007
+pos=<-25373194,33271630,48939058>, r=59909386
+pos=<81186014,21770112,48774152>, r=66535373
+pos=<-36266473,21205391,64408172>, r=85681063
+pos=<46509791,41930052,-8736829>, r=90965014
+pos=<-22028107,15234691,51487555>, r=64492638
+pos=<-20542339,31539802,48757530>, r=53165383
+pos=<13662571,56928981,15523678>, r=69397563
+pos=<-12746344,18867316,85938166>, r=86028894
+pos=<-301007,47558794,60352290>, r=60537813
+pos=<32207624,60299805,78729522>, r=75695968
+pos=<100081770,31328053,46754080>, r=82623316
+pos=<-48070787,30652729,47098499>, r=78147703
+pos=<3499835,47702960,54008261>, r=50536940
+pos=<-30212070,27990135,63986849>, r=74514607
+pos=<-15832151,28224015,56445561>, r=52827166
+pos=<-67978767,28737500,46365512>, r=95407212
+pos=<-30015019,22627881,66498575>, r=80097431
+pos=<-3376964,87518399,46889764>, r=90110663
+pos=<-12133745,41888151,15297059>, r=80379652
+pos=<-3430750,43859378,-4475364>, r=93420295
+pos=<10612582,58698878,71450281>, r=71862044
+pos=<-16853417,30239412,55512427>, r=54930714
+pos=<9856655,-15034177,76105296>, r=87495006
+pos=<19700487,14896792,94233323>, r=65848189
+pos=<90908533,40366432,47407308>, r=83141710
+pos=<53053613,45815347,47231085>, r=50559042
+pos=<91606120,30241005,62870344>, r=89176478
+pos=<6549177,28253488,45947118>, r=89716871
+pos=<-54966251,31984766,51327953>, r=90604410
+pos=<11739879,47302011,70593259>, r=58480946
+pos=<17782015,-43385757,45900297>, r=77715722
+pos=<-22321136,33175591,26785779>, r=70365922
+pos=<7447288,64317364,46803776>, r=55999602
+pos=<7212096,101522192,49782085>, r=96417911
+pos=<9756698,57513943,50726200>, r=50809212
+pos=<53938302,42703477,85380074>, r=86480889
+pos=<6127018,32634301,81765609>, r=60598446
+pos=<16024259,75089269,42148970>, r=58570841
+pos=<-14467950,30833664,53148474>, r=50775521
+pos=<1055620,-8213227,49647151>, r=63016576
+pos=<20109959,34289334,98011242>, r=64516119
+pos=<-51406886,30261849,39781808>, r=83541835
+pos=<21609187,48166640,103039225>, r=81922186
+pos=<-37318020,42076555,46223326>, r=77943551
+pos=<-9802864,50149053,57309602>, r=69587023
+pos=<8892924,30956296,4508427>, r=59209772
+pos=<17951962,38815438,50096954>, r=68485096
+pos=<12306030,97501425,46533603>, r=84054466
+pos=<-37463875,31083117,49553934>, r=70426366
+pos=<92230728,52683980,47015111>, r=96388808
+pos=<9364608,56647782,54993450>, r=54602057
+pos=<8684942,36838535,105538060>, r=86017275
+pos=<-35827611,42789189,57956518>, r=88898907
+pos=<5807845,31720781,7757680>, r=59810369
+pos=<-25365859,48253374,51239130>, r=77183993
+pos=<-13706311,23188045,2328735>, r=83730603
+pos=<-1053434,40958215,58697392>, r=53034540
+pos=<16686564,43884661,76779893>, r=56303739
+pos=<94046858,44171067,48044994>, r=90722205
+pos=<-59177933,25088148,47504944>, r=87806389
+pos=<-18654288,54793837,56331529>, r=82105172
+pos=<113519092,134203172,41554166>, r=95154840
+pos=<9436438,34715386,46078979>, r=73810378
+pos=<49732913,61362619,75247356>, r=90801939
+pos=<-54495041,22320842,50939618>, r=89325794
+pos=<12427539,17900057,11259909>, r=53954136
+pos=<16888421,45562882,95425764>, r=76425888
+pos=<-13394846,17877372,48322242>, r=50051600
+pos=<-20925432,28703245,52084455>, r=54038872
+pos=<8561924,38380609,101695915>, r=83840427
+pos=<76633366,35686884,48280680>, r=65060182
+pos=<15355031,32838431,53406732>, r=83822095
+pos=<-22241568,21612015,21308708>, r=74861862
+pos=<-45540364,39478825,56854957>, r=94199599
+pos=<-130761639,-7225545,18556230>, r=71625415
+pos=<12371981,60358241,50483820>, r=50795545
+pos=<-52881118,38556375,50525246>, r=94288177
+pos=<-5508845,44982595,39309821>, r=52836406
+pos=<-12223578,42705080,48054452>, r=55308618
+pos=<19782229,-391087,65138940>, r=51959480
+pos=<11688897,65712575,56641017>, r=62990663
+pos=<26728983,4877916,77607591>, r=57803924
+pos=<-66749809,31885857,41453884>, r=98836603
+pos=<12947494,40474371,72186292>, r=52038612
+pos=<22710949,73206326,90156950>, r=92977765
+pos=<21418285,58754538,74497516>, r=64159328
+pos=<-14006029,39388620,45791459>, r=51511854
+pos=<32331392,-9548718,53912995>, r=54138363
+pos=<-11103143,48665873,60597818>, r=72692378
+pos=<8404016,40264319,-15387292>, r=88902405
+pos=<-60697351,19761606,51535474>, r=98682907
+pos=<113332017,31654847,49314512>, r=98760760
+pos=<-17968649,23774520,26514627>, r=63220547
+pos=<-7891448,38548696,51246202>, r=50011819
+pos=<-36243928,28580831,31232834>, r=75246710
+pos=<2236746,78152395,33336820>, r=84233689
+pos=<-42646767,27988371,50996303>, r=73957310
+pos=<-12975938,19343337,62716304>, r=62560618
+pos=<-6698310,59281250,50138827>, r=68443906
+pos=<-29169469,6610144,55165008>, r=83936144
+pos=<-859099,48228088,68790664>, r=70203324
+pos=<-53259426,43091307,49454062>, r=98130240
+pos=<40051035,15273208,52961854>, r=55405641
+pos=<8599969,22173989,57555102>, r=96158345
+pos=<11561358,34996323,107452493>, r=83213190
+pos=<12971841,75769901,53455514>, r=68579059
+pos=<-24609077,31137632,12599716>, r=84801836
+pos=<39964941,58818274,67271078>, r=70513393
+pos=<11590874,44091058,16246818>, r=57908243
+pos=<11534010,42492557,73281128>, r=56565109
+pos=<46029692,44356665,33034407>, r=51140346
+pos=<230818789,28332006,48666836>, r=77009932
+pos=<-49307134,28877489,51162598>, r=81672730
+pos=<-24858611,61344602,49583599>, r=88112245
+pos=<-33971422,31026034,46645662>, r=63968617
+pos=<-14920621,60364341,48024490>, r=75635084
+pos=<-18886432,44383739,46645651>, r=62241356
+pos=<63367787,57050728,56716295>, r=81594314
+pos=<-29235501,30020585,46865414>, r=58446946
+pos=<-1116549,51739608,46803263>, r=51985095
+pos=<-12898335,8922965,49532990>, r=59720175
+pos=<11377440,35121435,54012286>, r=63237886
+pos=<-28362629,38084006,47961632>, r=66733755
+pos=<-32732759,53759806,34185847>, r=93961530
+pos=<-2049132,35100887,26872869>, r=51932182
+pos=<10307391,63192491,78308824>, r=83519668
+pos=<-11173886,50879581,47031969>, r=61411041
+pos=<-6714487,69428860,48945046>, r=77413940
+pos=<-35145310,126288277,94537390>, r=86514887
+pos=<15372059,77344628,57152598>, r=71450857
+pos=<-5534049,28501573,47802916>, r=70800310
+pos=<30282369,-27855631,57777471>, r=74260879
+pos=<27578388,34577846,94631718>, r=61246950
+pos=<5377307,28529784,46392652>, r=82994735
+pos=<-9288964,40034367,85892017>, r=87541479
+pos=<32663376,50111633,96347262>, r=83581281
+pos=<64590061,24883190,74402048>, r=72454312
+pos=<6011059,52895297,-9651139>, r=98190405
+pos=<-40075559,29164760,46796031>, r=68361786
+pos=<-27324257,33280398,58797836>, r=71727947
+pos=<65478625,51242475,73962244>, r=95142344
+pos=<-8161052,44514515,51881665>, r=56882708
+pos=<37117480,70516429,65453164>, r=77546136
+pos=<-66556175,24793456,46807708>, r=94782274
+pos=<6745175,-9697218,46249405>, r=55413236
+pos=<-15842202,54067556,49741202>, r=71976478
+pos=<-26234670,32761687,62384539>, r=73706383
+pos=<27047080,45210798,96262259>, r=72979567
+pos=<-54875381,19475504,41999639>, r=88941400
+pos=<15588049,51830394,45712337>, r=63164637
+pos=<78521098,9084198,53510654>, r=81292772
+pos=<-35117158,30884180,40930824>, r=66725315
+pos=<38517388,31310367,53377273>, r=93263507
+pos=<-34824848,35863485,57039123>, r=80052924
+pos=<87999262,21593229,36952685>, r=77127999
+pos=<-14970039,39281480,31602555>, r=64303877
+pos=<30996868,32710257,-7944148>, r=65439616
+pos=<-46544578,32730823,48455778>, r=80056612
+pos=<-25655223,54235827,24268664>, r=97277174
+pos=<-31661104,34739101,46810221>, r=65535871
+pos=<-15725105,33623089,58648908>, r=60322582
+pos=<30366481,48524611,105759957>, r=89110268
+pos=<7896511,67058144,60224279>, r=71711348
+pos=<8886133,36820409,69879921>, r=50139913
+pos=<-35009499,24967338,48346229>, r=64600051
+pos=<12236743,61232811,36406256>, r=54244674
+pos=<32133015,71147471,65672434>, r=73411928
+pos=<-4312430,48491142,58819757>, r=63948774
+pos=<-11255504,48618070,49019953>, r=61218979
+pos=<-36126448,28661597,45905741>, r=63019487
+pos=<6995492,-14641677,39110487>, r=64076982
+pos=<-494882,62507397,74981307>, r=90309172
+pos=<21658971,20515757,32538766>, r=68078733
+pos=<-42721200,2165630,50987236>, r=97754561
+pos=<-46441522,14810192,60365689>, r=98209160
+pos=<48051150,31166319,50307623>, r=70921992
+pos=<28821739,29694631,-1122960>, r=53427671
+pos=<-54273229,34572094,50463893>, r=91634895
+pos=<14673784,34863932,82993530>, r=55509157
+pos=<-32934723,17649588,51138183>, r=72635067
+pos=<-50994378,41060824,52259311>, r=96639953
+pos=<-13412903,29052830,62027839>, r=56819094
+pos=<16028543,72922360,86313287>, r=95532757
+pos=<-29190239,30088199,43593943>, r=57339282
+pos=<-67676350,28809916,49909454>, r=98721154
+pos=<-43374507,39597274,53913745>, r=89211024
+pos=<-27366900,30364601,50115222>, r=60172177
+pos=<16917628,52399768,64291470>, r=52099066
+pos=<41279617,21014635,54307699>, r=93725431
+pos=<1365818,19740622,70504983>, r=55610202
+pos=<-54647289,29012271,49857475>, r=85842468
+pos=<44221414,66917783,53886884>, r=69485079
+pos=<-9940873,70529264,26788845>, r=95336159
+pos=<-2891536,43027095,81243592>, r=79487809
+pos=<16856578,70770998,65638794>, r=71878974
+pos=<48647431,57474901,3221288>, r=96689472
+pos=<18398962,37387340,106423442>, r=77737407
+pos=<6875506,40281303,93455690>, r=79187050
+pos=<2454291,28249463,81600089>, r=59720809
+pos=<-1468549,29220087,631469>, r=71712205
+pos=<1576323,77863026,52114347>, r=80726896
+pos=<11328724,-1103809,57250256>, r=53237238
+pos=<14166873,32412130,88906135>, r=59476952
+pos=<68172516,66679724,50794113>, r=90105431
+pos=<-4882904,63239852,64521058>, r=84969357
+pos=<-39573626,43281992,58908860>, r=94089955
+pos=<47082853,25450033,45728957>, r=77686997
+pos=<30259034,36081601,79825507>, r=50625134
+pos=<13485963,34007713,111156423>, r=84003646
+pos=<-103414983,93539548,30098680>, r=85922019
+pos=<-6802701,-3790574,59234245>, r=76039201
+pos=<82390172,51540341,50478214>, r=88867872
+pos=<5396715,-12159909,37977747>, r=64326869
+pos=<60082922,38998779,61741375>, r=65282109
+pos=<-16364819,10714145,61687053>, r=73549544
+pos=<-58301485,30719708,55794510>, r=97141432
+pos=<16352057,56953747,89166657>, r=82093799
+pos=<-34630538,59464956,51639108>, r=98060041
+pos=<490228,30703545,109025168>, r=91563918
+pos=<-6013632,8426824,52874814>, r=56673453
+pos=<-36209880,25159205,51113229>, r=68375671
+pos=<17796723,1411910,80111570>, r=67114697
+pos=<-31889116,28510083,45862954>, r=58587653
+pos=<19168448,33254095,39684567>, r=98395168
+pos=<-6095859,46062067,73594989>, r=78078378
+pos=<-304797,59105732,57302395>, r=69038374
+pos=<55099745,36449947,86305322>, r=82314003
+pos=<33473188,6098096,-4438050>, r=79487709
+pos=<-31472777,36089404,51315048>, r=71202749
+pos=<15962314,28423814,-7317040>, r=61433573
+pos=<7998189,2801039,69890583>, r=65303215
+pos=<130870385,104831832,11196492>, r=68126888
+pos=<-5327566,58947831,12940865>, r=92989660
+pos=<3824920,57094208,49926985>, r=55521839
+pos=<-1717656,36673098,102114555>, r=92830763
+pos=<-6542148,37528701,53564176>, r=49960544
+pos=<-14811298,29054822,83783336>, r=79975290
+pos=<-37201984,61523961,41570442>, r=98810391
+pos=<20636169,30198837,103026121>, r=64914223
+pos=<10371395,31519349,55590694>, r=62337567
+pos=<31884149,40789942,72870652>, r=50003827
+pos=<-30398435,29198407,42512686>, r=58738952
+pos=<43939568,28346223,78157090>, r=54901870
+pos=<9128846,67552702,83250788>, r=94000232
+pos=<-2588856,30760371,91977867>, r=77653177
+pos=<15962420,82995471,76760935>, r=96119428
+pos=<-33661280,31365698,48813484>, r=66166075
+pos=<-16115499,43852463,46308402>, r=58601848
+pos=<-6987272,33841983,84781289>, r=77936013
+pos=<-485860,34594456,81980122>, r=69386193
+pos=<-15363694,37898885,53146470>, r=58734501
+pos=<-17124380,71830052,45774058>, r=87053925
+pos=<8219084,70226598,55923252>, r=70256199
+pos=<-3903209,29453615,46544603>, r=75288840
+pos=<-9159457,25097083,71581481>, r=61856037
+pos=<-6436575,16618931,70357346>, r=66386656
+pos=<-8806699,29246129,72352585>, r=62730916
+pos=<68862343,36688765,49225208>, r=59235344
+pos=<-79171684,112113447,67348279>, r=92995215
+pos=<2638935,25190324,85791990>, r=64174419
+pos=<14827988,29466545,48474491>, r=98818958
+pos=<-14381380,32037768,62743833>, r=61488450
+pos=<3154619,88011848,41382872>, r=85129150
+pos=<51747013,31306559,79606148>, r=67118845
+pos=<4782291,34063349,70169217>, r=51776099
+pos=<-39091050,45657329,51675336>, r=88749304
+pos=<-26634338,29826468,49344705>, r=58131168
+pos=<28955639,11886714,83389681>, r=58803847
+pos=<-13895377,39956378,49929456>, r=56106810
+pos=<-20174467,38776446,18529455>, r=82076331
+pos=<11908029,50316295,76200518>, r=66934331
+pos=<79036827,16924288,76062556>, r=96520365
+pos=<9584540,67893747,64596741>, r=75231780
+pos=<1999297,28072699,90660851>, r=69059706
+pos=<-4999516,1406744,49697518>, r=59502059
+pos=<-12138046,52832626,53760320>, r=71057036
+pos=<14911107,50532270,74102432>, r=62049081
+pos=<-28076669,-5209886,42939079>, r=85888492
+pos=<-1381979,35962916,89448258>, r=79118686
+pos=<-27555180,38443112,78090455>, r=96414564
+pos=<-45684157,22499678,51249216>, r=80645467
+pos=<-33262343,42412693,21018032>, r=96311801
+pos=<-24933943,30266769,36206604>, r=60648927
+pos=<47087640,55749463,76069992>, r=83366515
+pos=<40948562,39725308,77828570>, r=62961879
+pos=<-21047756,32265813,60780681>, r=66419686
+pos=<37924327,42452651,67877724>, r=52713763
+pos=<-58689938,30781189,50489915>, r=92286565
+pos=<13216582,64885410,61404468>, r=65398749
+pos=<-43382614,29830485,70345833>, r=95884395
+pos=<-20520219,36470699,75190567>, r=84507131
+pos=<14237854,59338973,85949685>, r=83376237
+pos=<-450228,37867875,64907958>, r=55551952
+pos=<17760677,61033651,84995936>, r=80594372
+pos=<22176975,82022403,46533128>, r=58704060
+pos=<22779974,94329178,17857701>, r=95346900
+pos=<-38001053,34049218,49600706>, r=73976424
+pos=<16848379,29946291,48116237>, r=55533891
+pos=<-42631692,35454176,53098888>, r=83510344
+pos=<4649340,48178580,58429391>, r=54284128
+pos=<847183,51607513,81674534>, r=84760407
+pos=<-21437870,4973092,57201053>, r=79877495
+pos=<-31919810,30134447,55487065>, r=69866771
+pos=<-27341158,67125553,48484104>, r=95276520
+pos=<34772295,-8690710,66519732>, r=68327958
+pos=<-31969415,39408252,48343122>, r=72046242
+pos=<102875003,13271850,46851582>, r=94799961
+pos=<-12487583,35034265,55339911>, r=55187220
+pos=<9093156,39769707,84017977>, r=67020115
+pos=<-16380910,41574541,66165228>, r=76446125
+pos=<78145797,37164108,49128463>, r=68897409
+pos=<12696275,29248422,93349910>, r=62227566
+pos=<3806267,80300805,32983373>, r=85166064
+pos=<96882526,36942217,48757938>, r=87041670
+pos=<-171249798,39499790,57712028>, r=97294519
+pos=<-2013420,51530722,55656270>, r=61525906
+pos=<10506453,22608309,43074519>, r=92987198
+pos=<-12980027,57643628,73634339>, r=96583452
+pos=<9759074,34807718,46383535>, r=76510831
+pos=<-46481921,33185083,62928260>, r=94920705
+pos=<-41982125,32478135,69194276>, r=95980083
+pos=<6066850,16557724,-23317282>, r=96233732
+pos=<-27420476,39804614,13027130>, r=95852751
+pos=<-35598484,27994414,43416148>, r=61831662
+pos=<53497255,74968025,34467126>, r=87786515
+pos=<5629165,76030721,52476464>, r=75203884
+pos=<-52112524,15110086,40185629>, r=92357875
+pos=<-23905340,18683396,67786661>, r=79220265
+pos=<1204692,65009004,78621903>, r=94751674
+pos=<-10066560,46695198,48547405>, r=57634798
+pos=<10289802,-10697128,21104545>, r=74844012
+pos=<-40310292,28833507,46959457>, r=68428878
+pos=<-13764816,49841026,61895287>, r=77826610
+pos=<-19679027,58605601,66152788>, r=96763074
+pos=<8809311,33356810,46152100>, r=63432984
+pos=<-29709153,29461995,49058531>, r=60555118
+pos=<-13129092,-9705209,46828679>, r=75874660
+pos=<102118197,31480871,42422516>, r=84965146
+pos=<-32517383,30565130,33503263>, r=71234788
+pos=<9534874,52896280,70697014>, r=66384094
+pos=<16880678,65311318,51702479>, r=52458646
+pos=<-36132788,43209378,55775064>, r=87442665
+pos=<22744530,34380596,134099136>, r=98061118
+pos=<-26547963,41862023,60462772>, r=81198255
+pos=<-545734,40978449,60677738>, r=54527403
+pos=<16538063,68562231,28273188>, r=65405796
+pos=<14494679,58745235,31512009>, r=54393346
+pos=<7791169,67262375,35493930>, r=65632071
+pos=<8485973,48520508,103076567>, r=95436538
+pos=<8214274,28745216,50655896>, r=92680074
+pos=<-6937397,27971689,49092605>, r=65350532
+pos=<-22481435,9380958,40012423>, r=68629066
+pos=<62129884,16597211,12546768>, r=80660497
+pos=<6258688,62081024,87730516>, r=95878363
+pos=<-32278381,28495170,53585234>, r=66684251
+pos=<8040391,72063718,51083757>, r=67432585
+pos=<-5673174,25046673,73686241>, r=60524423
+pos=<-8001243,63756911,61002978>, r=85086692
+pos=<-26577068,41949907,46813510>, r=67665926
+pos=<27314118,87945331,52949180>, r=72667621
+pos=<-20191543,30416348,7242015>, r=85020749
+pos=<-40509210,25805511,61018374>, r=81933846
+pos=<-27572422,16102428,56368833>, r=74050704
+pos=<-11240828,50248391,27895560>, r=75248609
+pos=<34613570,41153477,100115019>, r=80341645
+pos=<15579024,9723842,69284527>, r=50193328
+pos=<-46066212,37488646,47288596>, r=83168980
+pos=<16651399,81480864,60218612>, r=77373965
+pos=<-4490123,12256693,29836426>, r=57938091
+pos=<-9722027,38414943,53203837>, r=53666284
+pos=<-17608773,53047624,65044179>, r=88026024
+pos=<-46201175,24018662,58511638>, r=86905837
+pos=<83707615,22862590,47033198>, r=66223477
+pos=<75278564,31837146,46877582>, r=58452382
+pos=<66228245,28297748,1246309>, r=87068293
+pos=<-41563889,138361221,22834552>, r=92320836
+pos=<-15149458,41692211,57568440>, r=66735557
+pos=<-29959760,29199939,50714596>, r=62199729
+pos=<42142694,49570710,97616140>, r=93788536
+pos=<61202922,61131481,71470186>, r=98263590
+pos=<29827492,38051686,24415070>, r=56692483
+pos=<17592777,73628928,77556835>, r=85918423
+pos=<-20783874,35242533,54629155>, r=62981079
+pos=<64237574,1302210,73405037>, r=94685683
+pos=<-21188594,47968883,69462691>, r=90945802
+pos=<30657831,49880981,-20723938>, r=95051093
+pos=<22864844,93114017,56937539>, r=79512153
+pos=<36531726,66041045,59031978>, r=66063917
+pos=<19846259,-13074428,65015549>, r=64455431
+pos=<-7113733,38738967,15168250>, r=72339348
+pos=<-25341686,54431754,46334838>, r=78433824
+pos=<20656999,57196763,75771625>, r=64636928
+pos=<-22838713,34493030,27829494>, r=71157081
+pos=<-27835555,38366205,61876949>, r=80404149
+pos=<79754868,48144480,60613367>, r=92971746
+pos=<20721233,45043536,93948762>, r=70596524
+pos=<-46680111,37879564,53763782>, r=90648947
+pos=<16009840,86125003,58588086>, r=81028766
+pos=<20025736,5391570,85015946>, r=65810395
+pos=<33720066,104264468,55486952>, r=97930498
+pos=<-63554526,31193768,49947114>, r=97020908
+pos=<-55699886,23371204,32454537>, r=95415201
+pos=<73230725,36900143,48087090>, r=62677110
+pos=<-32963671,28309367,52478944>, r=66077418
+pos=<5939165,55024902,62755578>, r=64166779
+pos=<-24917309,29082130,46444648>, r=52769524
+pos=<7735621,49034186,60918429>, r=54542530
+pos=<4877732,8430499,59198278>, r=52101779
+pos=<83731770,35839732,49766995>, r=73797528
+pos=<-11074931,33743791,62322816>, r=59467077
+pos=<47699715,55835903,55060273>, r=63055430
+pos=<37657191,-9104085,74776203>, r=79882754
+pos=<-46744861,30151111,64292721>, r=93514232
+pos=<-13186319,46003906,17086538>, r=83758581
+pos=<32840031,56015193,64841941>, r=58156157
+pos=<6062205,42632964,47615029>, r=73781872
+pos=<-19799971,51835559,58790016>, r=82751306
+pos=<-30893469,30656893,46300617>, r=60176438
+pos=<-55830501,22240501,57274377>, r=97076042
+pos=<15868849,46019629,96676898>, r=79153313
+pos=<-16265649,52075245,75590161>, r=96256506
+pos=<14624864,56207969,57618910>, r=51527552
+pos=<318934,59504614,60032696>, r=71543938
+pos=<-23487442,41093331,19776590>, r=86459237
+pos=<67237678,41609284,51037661>, r=64343635
+pos=<-19179700,33732993,56360250>, r=61598596
+pos=<-34730837,5580174,61364913>, r=96727618
+pos=<53061020,1668645,85754857>, r=95492537
+pos=<3877306,43959248,85023639>, r=77431037
+pos=<-10413451,33996655,77197477>, r=73933065
+pos=<-15270541,18375898,55749133>, r=58855471
+pos=<37599773,64150517,58789624>, r=64998919
+pos=<6641382,32884368,86779494>, r=65348099
+pos=<-28989825,39572241,63995218>, r=84883334
+pos=<12972158,71582537,87975353>, r=98911274
+pos=<41852603,48069590,65721204>, r=60103061
+pos=<-12895423,34234299,51393776>, r=50848940
+pos=<76683281,42692313,48821155>, r=72655746
+pos=<9795431,-286238,55311954>, r=52014423
+pos=<-12408641,28693619,67844073>, r=61271790
+pos=<18776047,80030396,38475557>, r=64433947
+pos=<75995398,33442514,24888484>, r=78338116
+pos=<-22764877,22172460,58097441>, r=64901579
+pos=<10239772,40250323,68821851>, r=51158213
+pos=<-6984206,11263546,-3408779>, r=94670545
+pos=<-25723496,46861709,48289286>, r=73199930
+pos=<5729735,28403922,117678625>, r=92678286
+pos=<11079147,38654325,86908021>, r=66808654
+pos=<19012903,51490161,13432661>, r=60699507
+pos=<-19708767,24665073,51422478>, r=52677853
+pos=<2549542,80274103,46746108>, r=76796138
+pos=<-48466554,29995042,56395431>, r=87182744
+pos=<86083343,46696534,52688635>, r=89927531
+pos=<19978558,94248897,26059694>, r=89865438
+pos=<21928133,43444423,89266701>, r=63108468
+pos=<-32662150,34466095,53616954>, r=73070642
+pos=<-4767571,24202491,48306992>, r=52750940
+pos=<-6049891,44411137,66256832>, r=69043725
+pos=<14845730,-1633797,-11680131>, r=94009220
+pos=<65363,73430740,49753549>, r=75444608
+pos=<10919543,55374161,60523054>, r=57303105
+pos=<-33344704,36874381,61740346>, r=84284898
+pos=<90823294,32581102,47524970>, r=75388376
+pos=<56762466,39329407,28284461>, r=61595785
+pos=<14326905,38412743,-13806339>, r=79547110
+pos=<-27408929,29564102,49418580>, r=58717093
+pos=<72828690,34540465,56644790>, r=68473289
+pos=<-23879984,-80533415,-13926388>, r=52569551
+pos=<623363,23117915,46129959>, r=71699945
+pos=<-21310687,28343530,48201114>, r=50180986
+pos=<-11268087,54197123,60947343>, r=78738009
+pos=<62637156,43374891,28845119>, r=70955785
+pos=<101486863,29252465,58609523>, r=93807860
+pos=<-7121743,-17618647,50972485>, r=81924604
+pos=<33712412,33093334,104500328>, r=75765083
+pos=<70057598,30520257,59928664>, r=64965508
+pos=<13577885,32272356,41344051>, r=98076208
+pos=<8955771,46905424,22660149>, r=56944295
+pos=<-31671198,35282234,47777117>, r=67056086
+pos=<-28701991,29968381,30147369>, r=70177802
+pos=<46883174,34145057,15459578>, r=59357035
+pos=<-21541824,-3738229,54506228>, r=85997940
+pos=<-7165905,-13698956,55634555>, r=82711088
+pos=<-42136026,37824576,54914702>, r=87201260
+pos=<75444044,34090961,64356096>, r=78350113
+pos=<27070208,76993574,17498441>, r=80354253
+pos=<-24556265,40605071,29335340>, r=77481284
+pos=<7679148,40322729,74549753>, r=59518815
+pos=<64743952,34069862,51081505>, r=54354571
+pos=<7888777,51012156,-6093924>, r=90872090
+pos=<-38312643,6053130,45786004>, r=84257215
+pos=<-10907447,30880694,71717384>, r=65831363
+pos=<-21415341,33770607,55616361>, r=63127773
+pos=<-9268341,12931923,58776983>, r=61325095
+pos=<53680780,36878021,92991425>, r=88009224
+pos=<16325289,32873290,52486621>, r=50056228
+pos=<2379678,52409295,64101601>, r=66456683
+pos=<12407570,48986679,9677595>, r=68556317
+pos=<-23196672,47847216,47491952>, r=70861580
+pos=<17092834,24513176,91350037>, r=55955816
+pos=<8752629,37508985,49239757>, r=72585978
+pos=<52794942,76928483,47757542>, r=81940023
+pos=<12527582,-6613411,50632808>, r=50930382
+pos=<-70810892,45621857,-48305364>, r=62008194
+pos=<-18412210,36869794,57144258>, r=64752285
+pos=<87656632,20763685,66883781>, r=92122439
+pos=<61764769,33809145,-512978>, r=89875236
+pos=<-21591807,57503330,27237264>, r=93512809
+pos=<-8980322,48822102,24813214>, r=74644293
+pos=<-13586166,29673545,54387395>, r=49972553
+pos=<-21336027,12684379,50240160>, r=65103467
+pos=<15312696,61249932,61078049>, r=59340843
+pos=<3820682,55264026,85971673>, r=89740512
+pos=<-8720944,7901096,48785694>, r=55817204
+pos=<46676113,42744663,57067759>, r=50947525
+pos=<63180707,54936070,46238435>, r=68814227
+pos=<-59988823,31676130,52904181>, r=96894648
+pos=<-55767575,34582277,42911408>, r=89093361
+pos=<-24727493,22617024,22771261>, r=74880311
+pos=<30402823,52581940,78464394>, r=65908330
+pos=<-12446120,14245346,47969322>, r=52381926
+pos=<13932111,12087077,52306416>, r=71083363
+pos=<12361114,5008235,62369519>, r=51211858
+pos=<62655763,37235551,16180822>, r=77498932
+pos=<5158458,57101119,21414371>, r=72183092
+pos=<2908218,33006742,52557556>, r=82743046
+pos=<57439166,18173939,101222852>, r=98833513
+pos=<52238468,31780002,45678724>, r=78491149
+pos=<-45793920,10537217,50965371>, r=92433881
+pos=<-13743952,64107054,54632417>, r=84808943
+pos=<-170006460,33686904,57787874>, r=58950081
+pos=<-26862218,29083237,47085032>, r=55356188
+pos=<794530,52505491,57994889>, r=62031400
+pos=<62469765,31544111,56755533>, r=55228669
+pos=<33597386,32945456,56175425>, r=60893404
+pos=<67662625,38142990,51575060>, r=61839764
+pos=<-48808932,29332298,47264670>, r=77731645
+pos=<-13897506,80448804,52473065>, r=99144940
+pos=<-41499426,33500208,34694650>, r=81959864
+pos=<21500730,1820261,108639134>, r=91529831
+pos=<37273144,59821099,54577329>, r=56130643
+pos=<-21429926,6902774,61057229>, r=81796239
+pos=<3340434,50630706,26961101>, r=61983979
+pos=<20112657,-7766263,32920789>, r=50273913
+pos=<66869619,52342243,67598868>, r=91270061
+pos=<6129880,42603189,67116575>, r=55915349
+pos=<6398878,1688559,79467734>, r=77591971
+pos=<14501207,33194081,103787164>, r=74805573
+pos=<-41363813,41379031,51239687>, r=86308022
+pos=<-5072359,37511009,73502277>, r=68411104
+pos=<9979161,47203323,76860857>, r=66410591
+pos=<8272810,70008182,48415971>, r=62477175
+pos=<16131738,39072448,57020881>, r=66650334
+pos=<-18513223,15536711,73318828>, r=82507011
+pos=<-53344764,29150642,46822282>, r=81643567
+pos=<-19488382,39476575,49309757>, r=60600153
+pos=<17795545,86761153,34350936>, r=76269651
+pos=<-39860391,37740470,42830687>, r=76425286
+pos=<75357927,42659157,48122833>, r=70599033
+pos=<67060727,20786860,43203283>, r=50745152
+pos=<11307310,64243278,77782998>, r=83044472
diff --git a/2018/inputs/24.txt b/2018/inputs/24.txt
new file mode 100644
index 0000000..0c90bb1
--- /dev/null
+++ b/2018/inputs/24.txt
@@ -0,0 +1,23 @@
+Immune System:
+2991 units each with 8084 hit points (weak to fire) with an attack that does 19 radiation damage at initiative 11
+4513 units each with 3901 hit points (weak to slashing; immune to bludgeoning, radiation) with an attack that does 7 bludgeoning damage at initiative 12
+5007 units each with 9502 hit points (immune to bludgeoning; weak to fire) with an attack that does 16 fire damage at initiative 2
+2007 units each with 5188 hit points (weak to radiation) with an attack that does 23 cold damage at initiative 9
+1680 units each with 1873 hit points (immune to bludgeoning; weak to radiation) with an attack that does 10 bludgeoning damage at initiative 10
+1344 units each with 9093 hit points (immune to bludgeoning, cold; weak to radiation) with an attack that does 63 cold damage at initiative 16
+498 units each with 2425 hit points (immune to fire, bludgeoning, cold) with an attack that does 44 slashing damage at initiative 3
+1166 units each with 7295 hit points with an attack that does 56 bludgeoning damage at initiative 8
+613 units each with 13254 hit points (immune to radiation, cold, fire) with an attack that does 162 radiation damage at initiative 15
+1431 units each with 2848 hit points (weak to radiation) with an attack that does 19 cold damage at initiative 1
+
+Infection:
+700 units each with 47055 hit points (weak to fire; immune to slashing) with an attack that does 116 fire damage at initiative 14
+2654 units each with 13093 hit points (weak to radiation) with an attack that does 8 radiation damage at initiative 19
+5513 units each with 18026 hit points (immune to radiation; weak to slashing) with an attack that does 6 slashing damage at initiative 20
+89 units each with 48412 hit points (weak to cold) with an attack that does 815 radiation damage at initiative 17
+2995 units each with 51205 hit points (weak to cold) with an attack that does 28 slashing damage at initiative 7
+495 units each with 21912 hit points with an attack that does 82 cold damage at initiative 13
+2911 units each with 13547 hit points with an attack that does 7 slashing damage at initiative 18
+1017 units each with 28427 hit points (immune to fire) with an attack that does 52 fire damage at initiative 4
+2048 units each with 29191 hit points (weak to bludgeoning) with an attack that does 22 bludgeoning damage at initiative 6
+1718 units each with 15725 hit points (immune to cold) with an attack that does 18 slashing damage at initiative 5
diff --git a/2018/inputs/25.txt b/2018/inputs/25.txt
new file mode 100644
index 0000000..d359c48
--- /dev/null
+++ b/2018/inputs/25.txt
@@ -0,0 +1,1248 @@
+-6,2,-8,3
+7,8,-1,-8
+7,-2,-4,-2
+4,-4,2,7
+5,8,-1,6
+-1,6,-4,-5
+-2,-6,-6,-6
+1,4,7,0
+-1,-3,-8,2
+5,-6,-5,-2
+-5,7,4,-2
+-2,6,-1,6
+5,4,0,-7
+1,5,-8,-3
+-3,3,8,2
+4,0,0,6
+4,-8,-3,3
+0,0,-7,-5
+-2,0,5,-3
+2,1,7,-1
+1,6,2,2
+4,4,7,-6
+-1,0,-1,1
+2,4,4,6
+-4,3,-7,2
+-5,-2,8,-7
+6,-8,-1,3
+-8,-6,-7,-3
+4,1,-7,-1
+-7,-5,-4,4
+5,-2,8,-5
+-5,-1,4,-4
+3,-3,8,4
+3,8,-8,-7
+-3,7,7,0
+-7,-5,-3,5
+-4,-5,-3,-2
+6,-8,3,8
+-2,0,8,7
+-4,3,5,7
+-6,3,5,0
+5,2,-3,-3
+0,8,0,5
+-5,-8,-1,-8
+2,6,0,6
+5,-4,0,0
+3,-2,-8,-5
+8,-4,-7,-7
+-3,-7,-8,-2
+6,7,-2,3
+5,0,-6,0
+0,-6,0,2
+8,-4,6,-3
+-5,-4,4,-4
+2,0,3,-1
+3,-5,8,5
+6,-1,5,5
+-6,-5,-4,8
+7,-4,0,5
+5,3,1,6
+-7,2,-3,1
+-4,1,-6,-7
+-4,4,0,8
+-6,4,1,-8
+3,-6,-6,5
+2,-4,-3,2
+-2,2,-2,1
+2,-4,0,0
+3,1,4,8
+-1,3,-7,-5
+-3,-7,2,0
+-2,-2,-8,0
+1,6,0,7
+-6,-3,0,-1
+7,0,-2,-7
+5,-5,-3,0
+7,0,0,5
+-6,5,6,2
+0,8,3,-1
+0,-8,-7,-1
+3,6,7,-7
+-2,4,-8,-3
+3,-3,-6,-4
+-1,-5,0,2
+-7,2,4,0
+-2,7,4,-2
+2,4,-1,5
+-1,-6,-6,4
+4,-6,-7,-2
+-6,6,-4,-2
+5,-5,-2,-6
+4,5,4,0
+3,3,0,-5
+-5,4,3,-2
+-6,1,7,-6
+3,5,-8,5
+-2,8,-2,-2
+-5,6,-2,-7
+-3,-6,7,-4
+-8,-6,7,7
+-5,-7,4,-4
+-8,-8,-6,7
+-7,-1,-2,-1
+3,-1,4,0
+3,6,1,-8
+2,6,-4,0
+-6,4,4,6
+7,7,6,-5
+4,-3,-2,7
+-1,8,2,-2
+3,-1,-4,5
+-2,1,-6,-8
+-3,1,7,-1
+-7,-1,8,6
+4,2,6,-6
+8,-1,8,-8
+4,6,-1,4
+7,-1,6,5
+0,-6,2,3
+-2,-8,-8,-6
+0,6,-4,-8
+4,-8,-7,6
+-3,-3,2,2
+2,1,4,7
+-3,7,-1,-8
+1,1,-2,-5
+3,-6,-4,7
+-3,5,0,8
+3,3,1,0
+1,5,4,6
+7,0,-2,-5
+1,5,-3,7
+-1,-4,3,4
+-4,3,-2,0
+-1,-8,2,0
+-8,-8,3,-3
+-2,-6,5,2
+8,-1,-3,-6
+2,-8,3,-5
+-8,-8,3,4
+-3,-5,-7,0
+0,3,1,3
+-8,5,-6,4
+2,0,4,-2
+-5,1,-7,0
+-5,0,-2,1
+4,-7,0,3
+7,0,4,-1
+0,-3,5,4
+-8,-8,-2,3
+2,5,4,6
+7,0,-8,-7
+-1,8,3,-3
+1,-2,2,-4
+-1,-3,3,-2
+4,6,7,-1
+3,8,2,-3
+-1,-8,8,7
+-8,4,7,-2
+-8,2,-8,-7
+-2,5,0,-5
+-1,-2,-5,-5
+4,6,-2,0
+0,8,0,-4
+2,0,-2,-1
+-8,0,-5,0
+-2,-8,-5,6
+2,0,5,7
+6,0,7,0
+-6,-8,3,-1
+2,2,6,-8
+-8,7,-8,7
+5,0,7,-6
+0,-3,6,-4
+-5,7,-6,-6
+2,5,0,-6
+-6,8,-3,3
+-8,-7,-1,-8
+-1,3,0,0
+1,2,3,-7
+-5,-1,7,2
+4,2,0,2
+-6,-6,-1,-2
+1,0,8,-1
+0,-1,-8,7
+2,2,-6,-4
+-2,3,2,6
+-6,-6,-2,-3
+-2,6,-2,1
+4,0,-8,7
+4,8,1,-1
+4,2,-2,5
+1,-2,-6,1
+1,5,-5,-4
+0,8,7,-6
+8,8,2,-3
+-3,-4,-5,3
+-2,6,-8,-1
+-2,-2,-4,2
+0,6,-3,7
+8,3,-3,7
+6,0,-1,-6
+8,8,3,0
+-7,0,8,7
+-5,7,-2,0
+2,-7,7,3
+8,-5,0,0
+-6,-8,1,-7
+-7,-3,0,5
+5,6,1,-7
+-3,8,-3,6
+-4,0,-4,-5
+7,4,2,1
+-7,-7,-8,6
+7,-7,4,4
+-6,-2,-1,1
+5,7,-6,-5
+1,6,-2,5
+-6,5,-6,3
+-6,-8,0,0
+2,-4,2,8
+0,0,0,-8
+-8,0,-2,2
+0,-4,-8,-8
+1,-5,-8,5
+6,-4,-5,6
+8,4,-5,-1
+8,-7,4,-4
+-7,-6,-8,0
+-2,3,-2,3
+-8,-3,-6,-3
+0,5,5,0
+3,7,-8,6
+0,-7,-5,-1
+1,6,-4,-3
+-4,5,-3,5
+7,-5,-5,8
+-4,4,0,-8
+7,-7,0,2
+6,0,2,-8
+-6,-4,1,0
+-1,0,-2,4
+-4,-8,5,7
+-8,4,-5,-2
+2,8,-8,-8
+-4,7,1,6
+-2,-2,-7,3
+6,4,-1,0
+-1,-7,-4,0
+-4,0,3,0
+0,3,5,2
+-4,-5,-1,0
+8,2,-6,0
+-2,5,-3,8
+7,0,3,-2
+6,0,-5,0
+4,-6,-5,6
+-7,8,0,-1
+8,-2,3,-4
+7,0,-4,7
+-4,-6,-7,-7
+2,8,0,4
+1,-6,5,-6
+4,-7,-2,-2
+4,1,-6,2
+0,7,4,3
+4,1,-1,-5
+1,-4,6,-6
+1,2,-2,-2
+2,-2,6,-5
+-8,6,-6,6
+0,6,8,2
+-3,-2,0,-8
+-6,-5,2,-6
+0,5,-8,-5
+1,-1,7,6
+-6,-3,-7,-3
+-4,-6,-1,0
+8,-3,-6,-2
+-5,-2,6,-1
+-1,0,3,1
+0,2,-6,7
+3,3,5,-2
+8,4,5,-1
+-5,-1,0,-1
+-6,-1,0,6
+2,6,-3,-3
+8,7,-8,4
+-6,-8,-3,0
+-1,-1,0,7
+6,-2,-8,4
+-3,8,3,-1
+6,2,0,4
+0,-3,7,3
+-5,3,-2,-1
+-6,-7,-2,-3
+4,-5,-3,-6
+-7,6,-2,4
+-2,-5,7,0
+1,8,-8,7
+8,3,-3,4
+-3,3,2,-4
+5,-7,4,1
+8,-3,-5,0
+-5,-4,-1,-8
+2,1,-2,-3
+-1,-4,-1,-7
+-7,-8,-7,-2
+3,0,7,4
+6,3,7,7
+0,-2,-4,2
+0,-1,-6,7
+-3,-8,-1,-7
+-8,-6,-6,-4
+-5,-4,-4,0
+0,7,-7,3
+-8,-7,-6,-8
+-5,3,0,-3
+-7,-6,0,7
+-7,6,-6,-2
+-2,8,2,-4
+2,0,0,5
+0,5,-2,0
+8,-7,-7,-1
+-1,3,2,-7
+-3,4,-7,-4
+-6,-3,2,-7
+-7,5,4,3
+5,-1,-6,-2
+3,-7,1,0
+-7,0,-4,-3
+-6,8,-1,0
+3,8,4,-2
+-1,-4,-8,-7
+3,3,8,1
+-5,1,4,5
+8,8,-1,2
+-3,-3,7,-4
+8,-3,2,-4
+6,-8,-6,8
+3,6,3,-2
+-7,-2,6,-4
+-6,-8,-8,5
+6,0,0,7
+-6,7,0,7
+8,0,-6,-3
+0,-3,-7,0
+-2,6,-7,-7
+5,-1,-3,0
+2,3,4,-5
+1,7,-6,0
+3,3,0,-3
+-1,0,-8,-8
+-2,5,-7,4
+7,-1,-8,5
+-2,-1,-1,6
+-2,-6,5,1
+4,-2,5,5
+-7,8,4,7
+-2,-2,6,5
+-6,1,-5,3
+-8,4,0,7
+8,-4,5,5
+-4,8,-4,1
+-8,0,5,4
+8,1,0,0
+-6,-8,-6,-2
+2,-5,0,0
+5,-6,5,-4
+1,2,7,2
+8,-4,6,5
+-6,0,7,6
+6,5,7,-6
+-2,-6,-2,5
+-6,-4,3,1
+6,-8,4,-4
+8,6,1,2
+7,5,7,-2
+7,-2,-6,-1
+4,-2,1,2
+1,1,-3,5
+0,-4,8,4
+5,2,-3,-4
+8,4,1,-3
+-1,1,-8,1
+-1,-1,0,5
+-4,4,6,0
+0,6,-2,6
+-3,4,5,5
+-7,5,4,-4
+2,2,-2,-4
+8,-1,2,-5
+-5,-2,6,-2
+7,2,1,6
+-3,-2,4,-5
+8,8,-7,-8
+0,1,-8,-4
+-3,-6,-3,3
+-4,-4,8,4
+-3,2,-4,-6
+-6,5,-5,-2
+-3,-7,-3,8
+0,6,-1,8
+8,0,7,1
+1,1,-8,-2
+6,-6,-7,3
+4,-5,8,-8
+-3,-6,6,7
+8,-5,2,4
+2,5,-3,-4
+-3,0,-6,7
+-1,-7,7,0
+2,-3,-5,5
+-7,-7,0,-2
+0,-4,7,8
+5,3,7,2
+-2,-7,5,5
+-6,-1,0,-8
+-3,0,8,-5
+-8,-1,1,1
+1,0,-6,8
+-1,-5,8,4
+-5,-4,4,8
+2,-3,0,-4
+-4,-3,0,7
+5,6,5,-5
+-3,-8,-3,-2
+5,8,-8,5
+-7,-2,-2,-2
+7,6,8,6
+0,-6,4,-7
+-1,-4,-7,0
+8,7,-6,6
+6,-5,-1,-3
+5,-2,-2,-3
+6,-3,-5,0
+-8,5,6,-5
+3,-7,7,8
+1,3,-8,0
+-6,8,-5,6
+6,-5,-5,-2
+3,8,1,-8
+-8,5,2,0
+0,5,-3,6
+-5,-7,-8,4
+0,7,0,0
+-5,6,-5,6
+-5,1,6,5
+6,1,-2,-8
+0,-8,3,1
+0,-3,-8,-3
+0,6,0,-2
+-8,0,-7,-5
+-8,2,0,6
+1,6,3,-4
+8,-5,0,-4
+-6,7,0,0
+5,0,1,0
+-8,8,2,8
+-7,4,2,4
+0,3,-2,-4
+-5,5,7,0
+5,0,-1,5
+-7,8,-6,8
+-8,-1,3,-3
+0,-7,-7,-7
+-4,4,8,-2
+1,2,1,-4
+1,-5,-1,8
+-3,8,-2,-2
+8,0,4,-4
+-8,5,-5,3
+-7,-7,-6,-2
+0,-6,-8,-8
+-1,-2,-3,0
+-4,0,1,7
+1,-6,-8,4
+0,8,6,-1
+-8,-5,-7,8
+2,7,-8,4
+-8,4,-3,2
+3,-1,-7,3
+4,-2,-6,-6
+-1,-4,1,-2
+3,-4,2,-6
+2,4,5,-3
+-7,7,1,6
+8,-6,-5,-3
+-7,1,-6,0
+-3,-6,-6,-8
+-8,-5,-6,4
+-5,-1,7,8
+0,7,6,2
+6,-2,-1,5
+0,4,-8,8
+-3,-5,-8,0
+2,-6,-2,-1
+5,8,-6,4
+-5,-1,0,-6
+-8,-5,8,2
+5,6,-3,-3
+-4,-7,2,6
+0,-3,-6,7
+-4,-6,-8,-8
+6,7,1,3
+7,-2,4,-3
+4,2,3,1
+0,8,-3,-8
+-8,0,1,0
+4,5,-4,-2
+-2,-6,4,2
+-4,0,-4,0
+8,-1,2,-2
+5,-7,8,1
+-2,5,-6,1
+6,-7,3,-7
+2,1,0,6
+-8,-3,-1,0
+8,-1,8,-3
+0,-6,6,0
+7,3,7,3
+-8,0,6,-1
+-5,-4,-5,0
+-2,0,3,-7
+0,2,0,0
+-3,6,6,3
+-6,-3,-1,-3
+8,0,1,5
+-7,4,-8,0
+8,8,-5,4
+-2,0,-7,-4
+-8,5,-7,-7
+8,0,-1,4
+8,-7,5,0
+-6,-1,-4,2
+-8,-8,6,-5
+7,2,-3,1
+2,0,2,6
+8,-7,-8,3
+-2,-7,-8,0
+0,3,-1,4
+-8,7,5,3
+0,-4,0,3
+6,6,-2,-6
+-4,8,6,-3
+0,3,0,-4
+6,-2,1,5
+1,4,4,3
+0,-7,4,-1
+1,3,-8,-2
+-5,0,4,0
+8,2,-6,-4
+-8,8,-2,6
+-5,7,-7,-2
+5,0,-4,-4
+-1,-5,3,7
+-2,-3,7,3
+-3,4,2,0
+-7,-8,1,3
+-8,-8,-3,2
+0,5,-8,7
+1,7,-6,5
+2,-6,-5,0
+-8,4,4,2
+7,3,1,-6
+-5,-4,8,2
+-7,7,0,0
+8,6,-1,6
+2,5,3,-7
+-7,3,1,5
+-8,-3,-4,3
+0,-2,0,8
+-7,-7,-5,8
+3,6,3,0
+-4,2,8,-4
+-6,2,6,-3
+0,-7,-6,-7
+0,-6,3,-6
+-4,-5,-5,-2
+1,-7,-2,-5
+5,7,0,4
+2,-1,3,-3
+7,1,-5,8
+0,3,0,2
+5,0,-5,-3
+-2,6,2,5
+6,4,-4,-7
+4,-8,4,8
+-5,-2,-6,7
+-1,-4,-4,5
+-2,-7,3,7
+-3,-8,-2,2
+1,-2,-5,-3
+0,-4,-1,3
+4,8,2,-5
+8,6,-6,1
+-8,-1,1,-4
+5,6,4,-8
+-7,-6,-5,4
+-3,-3,5,0
+-6,7,2,1
+-5,5,-1,0
+1,-8,2,0
+0,-3,-7,6
+4,-4,1,0
+-4,-6,0,4
+4,0,4,0
+4,-7,3,-2
+0,-3,0,4
+2,-3,2,2
+2,0,0,-4
+-8,6,6,4
+7,7,4,-2
+0,5,0,-1
+5,7,3,6
+5,2,4,-3
+5,4,-7,-6
+-8,1,7,2
+0,5,8,-1
+5,-3,-6,0
+-6,0,4,6
+-2,-2,6,-6
+-6,3,5,2
+8,-2,-3,-1
+-8,1,3,-4
+1,-6,-5,-6
+8,-4,6,-1
+-5,-7,-7,-5
+-1,-6,1,-4
+4,2,-3,0
+7,1,-4,4
+2,6,-8,0
+7,7,2,-5
+5,-2,-8,-3
+-5,0,3,2
+-1,6,-1,-4
+6,4,-3,-4
+4,1,4,-6
+3,5,0,-1
+5,-3,7,2
+3,-3,-7,5
+-3,-6,-1,2
+-7,-6,5,5
+-3,-7,1,-7
+5,5,-4,3
+6,-4,0,-1
+-7,-8,-1,7
+6,1,3,8
+8,-3,-5,2
+-3,1,-2,7
+-3,8,3,-4
+0,-8,7,3
+5,0,-4,-3
+3,-8,2,4
+-8,-3,6,-3
+0,6,-5,4
+-2,-8,-2,0
+-4,-4,-4,8
+-6,8,-5,-1
+-8,0,1,1
+-4,3,1,-2
+-1,-7,4,8
+3,0,7,-4
+5,7,3,-1
+7,-8,-3,1
+5,5,0,1
+-3,-1,0,8
+-6,-8,-4,1
+-3,-1,-6,0
+0,-1,0,0
+6,0,0,8
+3,-1,-4,6
+-4,4,0,-5
+3,7,1,7
+-5,0,6,7
+5,-5,2,3
+5,-7,2,1
+-6,1,-3,-6
+7,8,-2,8
+5,4,0,6
+-8,-3,4,-3
+-3,-6,2,6
+1,4,2,5
+0,7,6,-5
+-1,7,5,4
+4,-5,-4,0
+-2,1,4,-7
+-2,0,0,8
+7,0,1,1
+-3,-7,8,6
+-2,-8,6,7
+6,3,-4,5
+5,2,-5,8
+4,-2,5,-2
+8,5,-4,-4
+2,6,-7,6
+-4,-2,-6,-5
+0,5,-6,-1
+5,3,4,3
+4,2,1,5
+6,-6,-8,3
+-7,2,3,-2
+0,2,2,1
+0,1,2,3
+-6,4,1,-4
+7,-4,-1,4
+-5,3,-3,0
+3,8,-3,-4
+-2,-3,4,2
+4,7,-2,4
+4,-4,-3,-8
+1,0,-2,-6
+6,7,-4,0
+-2,-7,2,-2
+0,4,2,2
+-4,8,-1,0
+-4,5,1,1
+-2,-8,-1,4
+2,3,-3,4
+-8,-4,-5,0
+-6,3,0,2
+6,-5,1,0
+4,-2,-8,4
+0,7,-5,-2
+-7,-3,5,-1
+5,7,-4,1
+-3,-3,3,5
+2,0,-4,-4
+-7,0,6,6
+4,-4,-3,-1
+-6,6,-1,-6
+-1,2,1,-8
+-2,3,4,6
+5,8,-4,-8
+0,5,0,-4
+-5,-3,7,7
+5,4,5,-2
+4,-2,8,-5
+-4,2,-7,4
+1,-8,4,-4
+7,8,-7,3
+2,7,-8,-5
+-1,-5,6,-7
+5,-4,7,-2
+0,-3,0,6
+0,-7,-2,2
+4,8,0,-1
+0,-3,5,-3
+5,-6,0,4
+1,-7,2,-2
+-1,0,-3,1
+-4,0,4,-6
+5,3,7,3
+7,-4,7,-8
+-3,-5,3,7
+0,-6,8,2
+4,-6,-1,8
+0,-7,0,-8
+-4,5,0,6
+7,6,-6,2
+-6,-5,-7,3
+0,-1,4,-8
+4,6,-4,4
+-4,-2,5,4
+-8,-8,0,4
+2,-8,4,-1
+2,4,0,0
+-6,-1,8,7
+-6,5,8,-5
+-3,-5,-7,-3
+3,-1,-5,-7
+0,4,-4,-7
+2,-4,-1,-6
+-6,-6,0,5
+0,6,3,-5
+0,-3,8,2
+7,-6,6,-1
+-3,7,-4,-5
+-3,1,3,7
+5,-2,-6,-7
+-6,3,-1,8
+0,0,-4,-2
+-8,2,3,-4
+0,-2,-4,0
+1,8,-3,-7
+-2,-4,3,0
+3,-8,7,0
+-1,-6,3,-4
+3,0,8,4
+3,3,-5,-6
+5,0,-1,-2
+7,1,-4,8
+4,-5,3,-2
+4,-4,0,8
+-4,2,1,-8
+-8,0,-7,-2
+4,-2,0,0
+-8,3,7,-8
+8,-8,6,-5
+-8,0,3,-5
+6,3,-2,-3
+4,0,-5,7
+-1,-5,-6,2
+4,-1,-7,2
+-8,-1,-2,0
+1,7,-7,-2
+5,0,-5,-7
+8,-3,6,-2
+1,-6,2,-3
+6,-1,6,3
+-7,4,3,4
+-7,-5,-5,-4
+-7,2,-8,-4
+-5,8,3,-3
+1,2,-3,4
+-6,-5,-4,1
+5,4,5,7
+0,0,-1,-4
+5,-8,3,-1
+5,6,-5,0
+-7,-3,-6,0
+2,-8,0,1
+1,4,-7,-8
+-4,-7,-6,3
+0,1,-1,0
+-6,-1,6,0
+1,6,-4,-2
+8,-3,0,0
+-2,0,-3,7
+3,8,-4,3
+-8,7,2,0
+1,4,-6,3
+5,-3,4,-4
+-3,-5,5,5
+-6,4,-2,2
+-4,0,2,4
+-7,1,6,1
+-2,2,4,6
+-5,-2,6,0
+-1,4,8,0
+0,8,6,-6
+-6,6,-4,-7
+-6,-7,3,0
+4,-1,3,4
+0,-7,-4,-6
+-6,-5,-5,0
+-2,-5,-4,0
+2,0,-8,6
+-1,1,0,0
+-6,-4,-3,-1
+7,5,-7,1
+-5,-1,3,3
+6,1,0,1
+6,7,6,7
+-3,1,0,-3
+-5,-1,-6,4
+-5,1,1,8
+8,-1,-2,-6
+3,0,6,7
+0,8,4,0
+-8,0,-2,5
+-4,-3,-5,5
+-5,3,2,5
+-2,-3,0,-6
+-3,-4,1,-2
+8,-4,-7,-6
+2,8,6,-7
+3,-1,1,-6
+0,-8,1,3
+-2,-4,8,0
+7,-7,-3,5
+8,5,6,-5
+-3,7,2,8
+6,-1,-7,1
+-4,0,-2,-2
+7,8,1,-3
+-2,5,8,6
+-7,-5,0,3
+-7,3,-1,6
+2,-1,-4,0
+-8,-6,2,-8
+-7,-5,-5,1
+0,-5,-4,4
+5,-2,-3,-8
+-5,-8,1,4
+5,0,7,-4
+8,7,1,-1
+-4,-1,-5,2
+4,8,-6,1
+-3,2,3,4
+-5,-2,1,3
+-3,5,5,4
+-6,4,-1,5
+6,1,3,0
+0,-4,-5,0
+-4,4,2,6
+-7,-8,-6,7
+8,4,5,1
+0,5,-3,-1
+3,6,5,-8
+1,8,3,-6
+3,-3,-5,-8
+-7,5,-5,0
+-6,4,0,-6
+-7,7,6,-3
+-3,-1,7,8
+-7,-7,1,-4
+-7,-1,-8,6
+6,0,-2,2
+-5,-8,0,7
+-5,-4,8,4
+1,5,4,2
+8,8,-2,6
+-3,2,-2,1
+-5,-2,1,-2
+8,8,-8,-4
+-7,-8,8,-4
+0,-6,8,-2
+-6,8,1,0
+-8,0,8,-4
+-6,5,1,2
+1,7,5,-2
+-4,1,0,-7
+2,-8,3,7
+-1,-6,-2,-1
+3,-5,-1,7
+0,-7,2,1
+0,8,2,0
+-1,-2,-8,-2
+6,2,5,0
+7,-8,-8,0
+-2,1,2,6
+-3,-7,-4,2
+7,1,4,-3
+5,4,-1,1
+8,-8,8,-7
+3,7,7,-1
+0,-7,0,-4
+-4,2,7,-7
+-7,2,-5,7
+7,-3,2,0
+-8,1,2,0
+5,8,8,-3
+0,7,-2,7
+-3,0,0,-1
+6,8,3,-1
+1,0,-8,0
+8,-5,6,6
+3,0,0,3
+1,4,-4,4
+-2,-5,-3,3
+7,3,-1,-1
+2,-5,1,-5
+-3,-2,6,6
+0,7,-2,-2
+0,0,3,-7
+-1,-7,2,-2
+-6,-1,0,1
+-4,1,1,8
+-4,-6,1,1
+5,7,3,-3
+8,-2,4,2
+0,-6,5,-8
+4,5,0,-6
+1,0,-2,-1
+-6,0,0,-6
+-5,-7,-4,-6
+-8,8,-5,-2
+1,-7,0,4
+4,6,8,1
+-2,-6,6,6
+7,1,-6,0
+-5,6,-4,0
+-4,1,1,4
+8,-7,-1,4
+-7,8,4,-2
+8,5,-7,3
+2,-5,5,-1
+-5,-5,3,8
+-5,-3,-7,6
+5,2,2,1
+-1,-7,-5,2
+0,7,8,-5
+6,-4,5,0
+-1,5,-2,8
+-8,7,0,7
+-4,8,-1,1
+5,-1,1,-2
+2,-3,8,0
+0,6,-1,1
+-2,7,-7,8
+-6,1,-1,6
+5,7,-6,0
+-5,-1,-6,-6
+-2,3,-8,-5
+1,5,-7,-8
+7,-5,-2,5
+-5,7,5,-2
+-5,0,0,7
+-4,-4,0,0
+-3,0,2,-7
+5,4,3,-1
+-5,-7,7,5
+-2,-3,4,5
+-5,-3,4,2
+-7,0,-5,3
+0,0,-8,8
+0,5,-7,4
+-8,-3,8,-2
+-5,8,-2,-5
+-8,8,0,0
+-8,-3,5,-1
+-6,1,8,-3
+3,7,-6,3
+-6,6,2,5
+1,-4,-3,0
+-8,-8,5,3
+1,-4,8,-2
+4,7,3,1
+7,0,4,0
+0,3,-4,-2
+-7,3,7,4
+-4,-7,-1,3
+1,-7,2,1
+3,3,-5,-1
+5,-7,2,2
+1,-4,-4,0
+-8,5,-3,-1
+3,-3,4,0
+7,0,4,-5
+0,1,1,2
+1,-5,6,-5
+-3,2,7,7
+-3,-3,6,2
+2,-2,0,-3
+3,8,-3,2
+-1,1,3,-4
+2,7,4,8
+7,6,-1,6
+8,8,6,5
+2,8,-6,-7
+-1,-3,-3,3
+4,0,-5,-1
+-4,-4,-1,2
+2,-1,-2,-3
+3,3,-3,1
+-1,3,2,2
+4,1,4,7
+-1,-6,-4,2
+-5,-5,2,-1
+-2,2,0,-5
+-1,-8,5,-2
+-6,1,-1,-1
+-8,-8,0,2
+7,8,-7,-1
+-6,7,0,-6
+-4,4,8,-7
+7,1,5,7
+-5,2,2,-5
+1,-2,-3,0
+0,7,-8,-5
+-1,0,-5,6
+-6,1,-4,-3
+8,2,4,-7
+0,-3,0,-7
+6,-5,-8,-4
+-3,4,-3,7
+0,-1,-8,2
+3,1,-8,0
+-8,1,3,7
+-7,1,8,6
+7,7,-3,7
+4,0,2,-3
+0,-2,1,-7
+-7,6,-3,7
+-3,8,-7,4
+6,4,2,5
+3,-3,6,-7
+6,-8,-3,-1
+-2,-8,-8,4
+-3,-2,1,6
+3,1,-1,-1
+8,6,7,5
+5,7,7,-8
+-7,3,3,4
+8,6,-5,-4
+1,-4,-5,-3
+4,6,-6,-6
+-3,4,0,7
+1,-4,-3,8
+3,-7,-2,1
+2,-4,4,8
+-5,1,-7,5
+0,-5,0,3
+0,7,-8,5
+-8,-2,1,3
+-5,8,8,6
+0,5,4,-1
+0,-8,-7,8
+3,2,1,-7
+2,-3,4,1
+5,4,7,-3
+-8,-3,7,-3
+-2,5,6,-5
+5,0,0,-3
+-4,6,6,1
+8,-2,-5,2
+0,4,-2,3
+-8,-5,-8,6
+-5,0,5,7
+-7,1,-8,4
+7,2,6,-2
+-2,-7,-2,6
+-7,7,0,5
+-5,-3,1,4
+-4,8,2,3
+-7,0,0,-6
+2,4,0,8
+2,7,7,0
+7,4,-4,-3
+2,7,5,7
+-3,4,1,3
+-2,-3,-3,1
+2,8,-1,8
+0,-7,6,8
+1,6,5,5
+-8,-6,-6,-5
+6,-8,-8,-1
+-8,3,3,3
+5,-7,7,-2
+5,8,1,6
+0,2,3,5
+-2,7,-7,-3
+-5,6,1,-5
+6,7,-1,4
+8,-3,6,-7
+5,0,-8,3
+0,6,2,0
+-8,-6,-6,5
+0,7,2,-3
+1,-4,6,-7
+-6,7,0,4
+4,-4,0,4
+6,3,7,-2
+3,-8,2,3
+0,5,3,-8
+2,6,7,4
+2,-7,-5,1
+-8,-3,-2,4
+-7,-7,0,4
+-4,-5,-6,1
+-6,-6,0,-3
+-8,8,-3,-4
+-6,7,1,-6
+-5,4,0,7
+-4,-1,5,3
+5,-7,3,1
+0,-4,-6,-3
+6,-6,-1,-5
+3,1,5,-3
+-1,1,2,-3
+0,7,-1,-7
+-8,0,8,0
+0,8,0,-6
+2,-7,2,0
+0,-1,-2,-7
+-2,0,1,1
+1,-7,8,4
+3,-6,0,7
+0,0,-5,4
+2,-7,0,6
+-6,4,5,-7
+-3,5,7,4
+-2,-1,7,8
+-7,0,-2,-4
+3,-6,6,0
+5,-4,-4,4
+6,8,8,-3
+6,-6,-6,3
+2,-3,-3,-3
+8,-5,-2,0
+-3,5,7,-4
+-7,-8,1,5
+0,-1,-1,-1
+8,1,7,-8
+4,4,2,4
+6,2,-1,2
+-5,6,-6,5
+-2,-5,-3,4
+6,-3,-4,0
+8,8,-5,-7
+2,2,0,-3
+-5,-8,1,2
+7,-6,-2,8
+-5,0,-3,3
+-2,7,-4,-5
+8,-1,-6,1
+7,6,-1,-4
+-3,0,2,1
+0,0,5,0
+-1,8,-2,3
+-3,2,1,-8
+1,7,-7,0
+1,4,-1,0
+6,-4,3,-2
+-1,-6,-2,2
+-2,2,2,2
+2,0,-3,5
+-4,1,-8,-3
+-4,1,5,-7
+-6,8,1,4
+5,3,0,1
+-8,-7,7,-1
+-8,-3,1,-7
+0,2,4,7
+6,7,2,-8
+4,1,2,8
+3,-2,1,-5
+8,2,-7,6
+8,0,5,3
+-7,4,8,-7
+3,8,-1,-7
+-1,-5,-2,0
+-3,0,6,3
+6,5,-3,-2
+1,8,7,-2
+-4,-1,-7,-2
+-6,-1,8,3
+8,-1,5,-6
+5,0,5,2
+-4,8,0,-1
+-5,2,7,-3
+5,-2,-6,5
+4,-4,4,0
+-7,-1,-5,-5
+-8,-5,4,5
+4,-6,-8,3
+7,2,7,-5
+1,6,2,-3
+-3,3,-8,0
+1,-6,7,-3
+-5,8,6,-3
+-3,-2,-4,-6
+7,-7,-2,1
+5,4,-7,-1
+3,-4,-5,-1
+-1,-5,6,-1
+-8,4,-5,1
diff --git a/2018/inputs/3.txt b/2018/inputs/3.txt
new file mode 100644
index 0000000..4701818
--- /dev/null
+++ b/2018/inputs/3.txt
@@ -0,0 +1,1385 @@
+#1 @ 342,645: 25x20
+#2 @ 124,968: 28x19
+#3 @ 680,765: 26x20
+#4 @ 832,699: 12x15
+#5 @ 4,746: 29x14
+#6 @ 926,115: 19x17
+#7 @ 662,587: 28x12
+#8 @ 532,568: 27x23
+#9 @ 860,23: 16x21
+#10 @ 530,562: 12x27
+#11 @ 15,254: 10x27
+#12 @ 375,611: 18x10
+#13 @ 357,389: 22x23
+#14 @ 483,392: 14x16
+#15 @ 426,705: 17x13
+#16 @ 273,918: 23x28
+#17 @ 873,722: 13x13
+#18 @ 429,749: 12x25
+#19 @ 701,937: 14x11
+#20 @ 89,231: 23x26
+#21 @ 704,220: 10x27
+#22 @ 481,847: 21x24
+#23 @ 9,378: 14x19
+#24 @ 682,442: 10x21
+#25 @ 242,63: 21x23
+#26 @ 748,871: 20x13
+#27 @ 784,338: 25x25
+#28 @ 966,669: 20x20
+#29 @ 589,833: 22x25
+#30 @ 489,489: 16x24
+#31 @ 976,478: 4x4
+#32 @ 739,826: 13x15
+#33 @ 783,753: 21x17
+#34 @ 433,367: 22x11
+#35 @ 32,841: 10x20
+#36 @ 258,497: 26x28
+#37 @ 632,776: 18x25
+#38 @ 517,389: 20x14
+#39 @ 446,740: 19x26
+#40 @ 667,455: 15x14
+#41 @ 664,252: 25x26
+#42 @ 227,45: 29x21
+#43 @ 127,138: 29x27
+#44 @ 466,308: 19x17
+#45 @ 356,134: 12x19
+#46 @ 609,640: 28x24
+#47 @ 677,228: 16x27
+#48 @ 149,610: 10x28
+#49 @ 863,498: 21x28
+#50 @ 913,511: 12x27
+#51 @ 748,761: 24x11
+#52 @ 802,288: 10x22
+#53 @ 26,442: 29x20
+#54 @ 85,464: 20x21
+#55 @ 262,944: 21x18
+#56 @ 876,753: 15x10
+#57 @ 105,199: 23x19
+#58 @ 335,848: 23x24
+#59 @ 467,537: 24x22
+#60 @ 552,217: 14x13
+#61 @ 534,820: 10x19
+#62 @ 261,579: 25x13
+#63 @ 541,445: 19x17
+#64 @ 869,769: 28x11
+#65 @ 447,668: 25x26
+#66 @ 42,734: 18x16
+#67 @ 553,233: 13x13
+#68 @ 47,861: 12x16
+#69 @ 33,834: 21x14
+#70 @ 240,174: 29x13
+#71 @ 611,362: 24x14
+#72 @ 899,371: 21x21
+#73 @ 340,5: 23x23
+#74 @ 69,246: 14x18
+#75 @ 432,558: 11x10
+#76 @ 737,175: 27x20
+#77 @ 623,365: 15x22
+#78 @ 666,453: 26x28
+#79 @ 368,774: 25x10
+#80 @ 923,879: 18x16
+#81 @ 37,315: 16x23
+#82 @ 119,279: 18x26
+#83 @ 928,850: 20x18
+#84 @ 896,902: 18x16
+#85 @ 332,590: 28x13
+#86 @ 902,815: 27x21
+#87 @ 215,508: 19x12
+#88 @ 981,57: 10x15
+#89 @ 706,393: 21x24
+#90 @ 975,369: 10x11
+#91 @ 635,845: 29x18
+#92 @ 831,543: 15x16
+#93 @ 296,865: 19x10
+#94 @ 889,189: 24x19
+#95 @ 59,749: 11x22
+#96 @ 739,946: 24x27
+#97 @ 536,759: 27x29
+#98 @ 982,234: 17x11
+#99 @ 639,615: 26x25
+#100 @ 867,397: 26x29
+#101 @ 881,784: 19x19
+#102 @ 215,912: 22x28
+#103 @ 127,336: 10x15
+#104 @ 313,729: 15x12
+#105 @ 695,74: 17x28
+#106 @ 748,187: 11x16
+#107 @ 809,2: 16x27
+#108 @ 891,192: 17x18
+#109 @ 72,920: 16x20
+#110 @ 41,967: 22x28
+#111 @ 91,733: 22x20
+#112 @ 464,641: 13x13
+#113 @ 464,860: 17x10
+#114 @ 623,106: 13x28
+#115 @ 358,85: 24x21
+#116 @ 774,944: 19x28
+#117 @ 752,587: 11x20
+#118 @ 635,103: 25x11
+#119 @ 498,36: 17x11
+#120 @ 227,659: 15x13
+#121 @ 924,553: 13x13
+#122 @ 775,297: 23x24
+#123 @ 479,866: 10x11
+#124 @ 387,798: 11x28
+#125 @ 526,847: 19x27
+#126 @ 747,861: 11x25
+#127 @ 789,652: 14x10
+#128 @ 419,7: 17x13
+#129 @ 356,142: 26x10
+#130 @ 436,239: 14x27
+#131 @ 555,710: 14x23
+#132 @ 871,447: 13x27
+#133 @ 473,730: 14x14
+#134 @ 558,170: 16x18
+#135 @ 888,882: 29x25
+#136 @ 834,147: 24x18
+#137 @ 721,467: 28x12
+#138 @ 223,105: 28x26
+#139 @ 285,326: 28x23
+#140 @ 584,300: 3x6
+#141 @ 710,754: 23x21
+#142 @ 283,892: 21x14
+#143 @ 448,894: 18x3
+#144 @ 380,479: 16x15
+#145 @ 703,57: 16x20
+#146 @ 692,448: 24x11
+#147 @ 926,350: 20x26
+#148 @ 167,528: 25x12
+#149 @ 444,722: 28x21
+#150 @ 166,183: 15x18
+#151 @ 546,472: 29x18
+#152 @ 532,900: 12x22
+#153 @ 215,490: 29x20
+#154 @ 678,458: 25x23
+#155 @ 601,462: 24x11
+#156 @ 484,514: 12x11
+#157 @ 863,763: 10x18
+#158 @ 653,452: 16x23
+#159 @ 464,302: 13x21
+#160 @ 868,65: 21x18
+#161 @ 227,824: 20x11
+#162 @ 111,629: 29x19
+#163 @ 55,554: 27x21
+#164 @ 0,757: 21x17
+#165 @ 418,861: 13x16
+#166 @ 932,903: 12x16
+#167 @ 429,772: 11x14
+#168 @ 706,805: 11x23
+#169 @ 487,24: 26x15
+#170 @ 806,900: 16x16
+#171 @ 580,719: 24x22
+#172 @ 458,481: 20x17
+#173 @ 343,488: 18x11
+#174 @ 734,342: 12x27
+#175 @ 320,439: 4x3
+#176 @ 446,635: 26x25
+#177 @ 552,683: 11x23
+#178 @ 181,168: 26x24
+#179 @ 851,583: 27x28
+#180 @ 879,363: 10x11
+#181 @ 884,139: 11x21
+#182 @ 912,88: 24x27
+#183 @ 52,35: 22x18
+#184 @ 657,705: 11x14
+#185 @ 370,777: 11x17
+#186 @ 801,354: 21x24
+#187 @ 773,546: 16x20
+#188 @ 888,322: 19x11
+#189 @ 807,788: 27x13
+#190 @ 465,956: 19x29
+#191 @ 369,770: 13x21
+#192 @ 311,137: 12x14
+#193 @ 148,150: 19x29
+#194 @ 389,613: 28x25
+#195 @ 429,373: 10x25
+#196 @ 892,148: 20x15
+#197 @ 890,271: 11x19
+#198 @ 58,861: 18x19
+#199 @ 449,255: 9x5
+#200 @ 257,887: 27x15
+#201 @ 383,616: 20x18
+#202 @ 663,657: 18x21
+#203 @ 331,648: 25x13
+#204 @ 509,53: 10x28
+#205 @ 86,287: 15x20
+#206 @ 753,190: 20x20
+#207 @ 922,527: 19x12
+#208 @ 132,948: 20x26
+#209 @ 883,786: 15x21
+#210 @ 117,592: 27x15
+#211 @ 960,611: 13x22
+#212 @ 829,769: 14x19
+#213 @ 669,686: 17x13
+#214 @ 276,787: 27x10
+#215 @ 619,909: 18x22
+#216 @ 418,209: 21x25
+#217 @ 231,831: 27x18
+#218 @ 336,538: 22x18
+#219 @ 180,783: 14x23
+#220 @ 609,263: 22x10
+#221 @ 360,982: 21x16
+#222 @ 775,813: 14x26
+#223 @ 906,198: 10x24
+#224 @ 937,144: 28x28
+#225 @ 475,903: 24x12
+#226 @ 887,149: 11x16
+#227 @ 927,259: 20x25
+#228 @ 71,862: 29x26
+#229 @ 136,954: 26x17
+#230 @ 721,827: 15x13
+#231 @ 769,931: 21x25
+#232 @ 728,119: 13x28
+#233 @ 654,942: 13x27
+#234 @ 434,737: 18x13
+#235 @ 672,331: 27x20
+#236 @ 816,17: 25x21
+#237 @ 251,781: 28x20
+#238 @ 342,209: 16x10
+#239 @ 581,434: 23x22
+#240 @ 782,100: 14x11
+#241 @ 878,831: 14x12
+#242 @ 667,233: 19x28
+#243 @ 237,650: 28x24
+#244 @ 425,738: 11x15
+#245 @ 936,470: 23x23
+#246 @ 68,321: 21x19
+#247 @ 356,539: 27x29
+#248 @ 945,353: 18x23
+#249 @ 906,933: 22x28
+#250 @ 360,812: 10x29
+#251 @ 884,774: 17x27
+#252 @ 413,769: 23x20
+#253 @ 594,75: 21x15
+#254 @ 676,702: 15x11
+#255 @ 233,529: 27x25
+#256 @ 173,236: 15x17
+#257 @ 907,949: 16x13
+#258 @ 809,570: 24x10
+#259 @ 67,678: 29x22
+#260 @ 176,951: 25x18
+#261 @ 754,625: 10x18
+#262 @ 142,270: 26x29
+#263 @ 558,673: 24x19
+#264 @ 224,27: 24x14
+#265 @ 725,829: 7x6
+#266 @ 703,941: 9x3
+#267 @ 880,864: 28x27
+#268 @ 727,445: 25x24
+#269 @ 747,520: 17x15
+#270 @ 850,410: 26x21
+#271 @ 363,964: 10x16
+#272 @ 752,721: 23x16
+#273 @ 295,351: 26x20
+#274 @ 899,877: 26x16
+#275 @ 95,804: 20x28
+#276 @ 543,866: 20x16
+#277 @ 917,887: 19x27
+#278 @ 449,474: 16x22
+#279 @ 673,459: 28x23
+#280 @ 971,786: 13x17
+#281 @ 42,176: 21x18
+#282 @ 531,886: 15x13
+#283 @ 679,438: 15x22
+#284 @ 161,659: 19x25
+#285 @ 838,148: 15x23
+#286 @ 496,732: 26x14
+#287 @ 482,256: 19x26
+#288 @ 389,941: 27x25
+#289 @ 352,255: 23x15
+#290 @ 825,688: 25x24
+#291 @ 894,313: 23x20
+#292 @ 906,553: 21x17
+#293 @ 293,130: 21x13
+#294 @ 549,80: 25x18
+#295 @ 85,871: 20x10
+#296 @ 876,734: 20x24
+#297 @ 831,935: 14x17
+#298 @ 618,819: 23x20
+#299 @ 750,70: 24x14
+#300 @ 749,711: 22x17
+#301 @ 555,801: 17x12
+#302 @ 544,64: 28x21
+#303 @ 114,413: 21x22
+#304 @ 215,526: 13x21
+#305 @ 147,31: 25x12
+#306 @ 679,427: 18x17
+#307 @ 634,930: 23x24
+#308 @ 41,419: 21x28
+#309 @ 892,162: 18x24
+#310 @ 812,886: 19x14
+#311 @ 440,700: 28x13
+#312 @ 586,832: 28x21
+#313 @ 255,687: 13x22
+#314 @ 945,879: 22x16
+#315 @ 480,731: 18x11
+#316 @ 738,731: 15x10
+#317 @ 528,621: 11x16
+#318 @ 243,787: 28x26
+#319 @ 512,493: 22x13
+#320 @ 762,692: 27x11
+#321 @ 316,57: 12x14
+#322 @ 410,860: 17x12
+#323 @ 772,591: 14x24
+#324 @ 813,221: 13x11
+#325 @ 161,271: 12x14
+#326 @ 520,597: 26x19
+#327 @ 577,129: 25x20
+#328 @ 448,31: 10x15
+#329 @ 594,33: 16x27
+#330 @ 170,498: 25x19
+#331 @ 882,833: 6x4
+#332 @ 190,548: 12x26
+#333 @ 639,879: 28x25
+#334 @ 473,817: 19x26
+#335 @ 543,458: 11x23
+#336 @ 676,657: 26x25
+#337 @ 786,353: 28x17
+#338 @ 873,508: 14x17
+#339 @ 208,782: 17x27
+#340 @ 392,542: 10x26
+#341 @ 672,650: 29x23
+#342 @ 446,637: 20x18
+#343 @ 534,58: 16x15
+#344 @ 696,760: 23x17
+#345 @ 265,767: 18x15
+#346 @ 105,750: 12x16
+#347 @ 731,438: 28x10
+#348 @ 535,833: 24x21
+#349 @ 72,531: 18x28
+#350 @ 640,734: 27x21
+#351 @ 156,265: 15x16
+#352 @ 227,299: 24x22
+#353 @ 552,492: 11x29
+#354 @ 605,95: 14x20
+#355 @ 665,490: 11x25
+#356 @ 456,289: 25x12
+#357 @ 876,516: 13x18
+#358 @ 26,163: 20x28
+#359 @ 228,769: 19x11
+#360 @ 766,766: 16x12
+#361 @ 167,654: 13x28
+#362 @ 728,185: 20x25
+#363 @ 321,340: 23x20
+#364 @ 327,175: 18x14
+#365 @ 83,860: 10x19
+#366 @ 361,177: 20x24
+#367 @ 282,505: 18x16
+#368 @ 780,44: 29x28
+#369 @ 854,406: 15x25
+#370 @ 142,928: 10x19
+#371 @ 114,594: 11x20
+#372 @ 775,78: 26x24
+#373 @ 264,791: 28x12
+#374 @ 789,217: 24x20
+#375 @ 931,559: 19x22
+#376 @ 523,549: 22x20
+#377 @ 744,356: 23x24
+#378 @ 630,746: 25x11
+#379 @ 339,201: 11x28
+#380 @ 777,698: 25x14
+#381 @ 198,933: 29x21
+#382 @ 222,919: 27x25
+#383 @ 356,648: 16x19
+#384 @ 237,915: 10x12
+#385 @ 10,864: 17x26
+#386 @ 494,808: 29x23
+#387 @ 440,547: 24x25
+#388 @ 688,247: 10x16
+#389 @ 95,580: 16x19
+#390 @ 374,8: 12x27
+#391 @ 287,332: 20x26
+#392 @ 453,940: 24x22
+#393 @ 344,878: 10x22
+#394 @ 541,277: 16x18
+#395 @ 965,360: 24x12
+#396 @ 280,878: 21x20
+#397 @ 680,384: 25x19
+#398 @ 670,76: 12x12
+#399 @ 540,457: 18x20
+#400 @ 524,406: 17x16
+#401 @ 625,272: 25x22
+#402 @ 100,906: 26x12
+#403 @ 281,871: 7x10
+#404 @ 275,849: 21x26
+#405 @ 357,559: 13x13
+#406 @ 918,753: 25x21
+#407 @ 270,837: 25x17
+#408 @ 780,84: 20x20
+#409 @ 503,893: 11x13
+#410 @ 154,609: 12x23
+#411 @ 871,739: 21x22
+#412 @ 529,698: 27x27
+#413 @ 376,844: 14x23
+#414 @ 498,876: 13x21
+#415 @ 893,958: 15x27
+#416 @ 635,498: 20x20
+#417 @ 571,884: 24x21
+#418 @ 336,586: 24x24
+#419 @ 0,206: 29x16
+#420 @ 655,64: 24x11
+#421 @ 436,648: 28x16
+#422 @ 952,593: 17x11
+#423 @ 643,6: 17x18
+#424 @ 224,166: 29x11
+#425 @ 818,905: 15x14
+#426 @ 18,863: 18x11
+#427 @ 497,902: 15x10
+#428 @ 564,545: 16x29
+#429 @ 657,446: 18x20
+#430 @ 245,25: 17x11
+#431 @ 936,346: 23x24
+#432 @ 127,152: 24x19
+#433 @ 563,928: 19x27
+#434 @ 684,407: 27x13
+#435 @ 737,584: 15x15
+#436 @ 644,837: 16x14
+#437 @ 702,978: 20x15
+#438 @ 422,65: 11x16
+#439 @ 121,142: 13x20
+#440 @ 68,437: 19x16
+#441 @ 121,382: 24x28
+#442 @ 805,910: 29x14
+#443 @ 795,432: 21x20
+#444 @ 269,735: 25x22
+#445 @ 226,877: 11x17
+#446 @ 550,450: 29x18
+#447 @ 606,726: 14x25
+#448 @ 46,546: 10x19
+#449 @ 320,95: 11x25
+#450 @ 935,419: 12x15
+#451 @ 453,862: 13x16
+#452 @ 315,500: 23x12
+#453 @ 181,127: 17x18
+#454 @ 243,907: 19x13
+#455 @ 263,960: 29x22
+#456 @ 509,159: 14x17
+#457 @ 486,810: 23x21
+#458 @ 560,945: 25x13
+#459 @ 6,400: 24x28
+#460 @ 368,783: 17x23
+#461 @ 75,792: 26x29
+#462 @ 543,395: 22x23
+#463 @ 47,464: 19x10
+#464 @ 342,494: 27x24
+#465 @ 911,861: 19x25
+#466 @ 94,272: 23x23
+#467 @ 420,516: 15x26
+#468 @ 146,233: 20x27
+#469 @ 201,907: 10x23
+#470 @ 446,887: 23x16
+#471 @ 468,702: 14x27
+#472 @ 799,865: 23x25
+#473 @ 451,242: 27x20
+#474 @ 915,801: 28x27
+#475 @ 471,445: 23x16
+#476 @ 381,751: 26x28
+#477 @ 903,539: 23x21
+#478 @ 621,280: 13x26
+#479 @ 658,132: 27x19
+#480 @ 136,639: 22x26
+#481 @ 24,185: 22x23
+#482 @ 732,779: 25x25
+#483 @ 760,858: 20x22
+#484 @ 24,408: 26x19
+#485 @ 457,627: 20x16
+#486 @ 353,284: 20x10
+#487 @ 920,899: 10x3
+#488 @ 436,694: 11x17
+#489 @ 849,162: 17x16
+#490 @ 786,236: 27x20
+#491 @ 709,245: 11x28
+#492 @ 462,389: 13x17
+#493 @ 738,88: 27x21
+#494 @ 111,617: 24x24
+#495 @ 896,764: 11x23
+#496 @ 473,321: 23x16
+#497 @ 589,67: 17x16
+#498 @ 183,298: 18x17
+#499 @ 557,675: 10x11
+#500 @ 875,298: 21x17
+#501 @ 128,420: 18x25
+#502 @ 158,17: 27x26
+#503 @ 966,380: 13x29
+#504 @ 571,449: 15x28
+#505 @ 968,404: 12x27
+#506 @ 722,350: 10x24
+#507 @ 247,595: 17x25
+#508 @ 65,734: 22x21
+#509 @ 411,715: 25x12
+#510 @ 123,742: 15x12
+#511 @ 439,687: 19x12
+#512 @ 829,932: 12x13
+#513 @ 893,146: 23x19
+#514 @ 861,131: 15x23
+#515 @ 551,85: 20x7
+#516 @ 957,437: 22x17
+#517 @ 777,65: 22x24
+#518 @ 638,851: 24x21
+#519 @ 116,492: 12x29
+#520 @ 187,785: 3x18
+#521 @ 791,56: 17x27
+#522 @ 406,108: 28x28
+#523 @ 695,252: 21x16
+#524 @ 498,247: 24x17
+#525 @ 301,235: 19x27
+#526 @ 14,173: 13x10
+#527 @ 116,587: 11x29
+#528 @ 170,247: 18x22
+#529 @ 714,745: 20x23
+#530 @ 682,474: 27x19
+#531 @ 838,605: 23x22
+#532 @ 684,330: 20x18
+#533 @ 754,852: 27x25
+#534 @ 885,197: 24x26
+#535 @ 97,256: 16x18
+#536 @ 604,669: 20x19
+#537 @ 612,14: 18x29
+#538 @ 278,738: 8x14
+#539 @ 102,976: 13x15
+#540 @ 50,860: 16x12
+#541 @ 574,411: 16x22
+#542 @ 124,894: 26x20
+#543 @ 848,521: 25x25
+#544 @ 271,287: 25x27
+#545 @ 253,656: 21x16
+#546 @ 547,979: 18x11
+#547 @ 444,332: 12x26
+#548 @ 106,753: 15x16
+#549 @ 886,615: 14x15
+#550 @ 549,216: 27x24
+#551 @ 481,720: 23x13
+#552 @ 505,7: 17x22
+#553 @ 539,106: 28x27
+#554 @ 395,174: 24x12
+#555 @ 547,490: 10x22
+#556 @ 950,79: 21x12
+#557 @ 529,817: 12x23
+#558 @ 40,270: 19x24
+#559 @ 556,127: 25x14
+#560 @ 407,39: 16x26
+#561 @ 130,852: 29x14
+#562 @ 144,368: 27x22
+#563 @ 980,174: 18x22
+#564 @ 285,98: 16x24
+#565 @ 648,686: 16x26
+#566 @ 361,487: 21x16
+#567 @ 471,380: 23x14
+#568 @ 167,331: 23x25
+#569 @ 768,773: 14x16
+#570 @ 328,13: 29x15
+#571 @ 444,697: 14x17
+#572 @ 215,301: 27x27
+#573 @ 238,207: 23x14
+#574 @ 252,346: 21x20
+#575 @ 910,272: 11x18
+#576 @ 751,833: 18x13
+#577 @ 781,221: 10x17
+#578 @ 538,775: 14x26
+#579 @ 982,705: 11x21
+#580 @ 205,805: 25x27
+#581 @ 948,713: 21x12
+#582 @ 647,249: 11x20
+#583 @ 841,156: 19x21
+#584 @ 401,835: 13x28
+#585 @ 637,819: 24x12
+#586 @ 286,241: 19x23
+#587 @ 661,878: 15x24
+#588 @ 115,774: 19x14
+#589 @ 353,655: 22x14
+#590 @ 838,616: 25x23
+#591 @ 573,395: 28x27
+#592 @ 321,67: 26x13
+#593 @ 371,931: 17x19
+#594 @ 765,719: 24x10
+#595 @ 595,574: 21x21
+#596 @ 346,497: 10x16
+#597 @ 67,869: 16x19
+#598 @ 133,284: 10x25
+#599 @ 464,174: 20x25
+#600 @ 613,82: 29x28
+#601 @ 98,519: 27x12
+#602 @ 896,934: 14x17
+#603 @ 645,205: 23x23
+#604 @ 810,96: 9x15
+#605 @ 91,464: 14x23
+#606 @ 798,67: 18x21
+#607 @ 560,243: 27x20
+#608 @ 486,52: 14x12
+#609 @ 623,174: 11x20
+#610 @ 203,404: 10x14
+#611 @ 927,293: 12x10
+#612 @ 457,860: 26x14
+#613 @ 690,648: 13x15
+#614 @ 673,615: 23x22
+#615 @ 399,718: 16x14
+#616 @ 309,695: 23x17
+#617 @ 881,450: 10x24
+#618 @ 879,295: 12x29
+#619 @ 914,865: 5x4
+#620 @ 692,653: 28x26
+#621 @ 468,183: 19x11
+#622 @ 487,258: 13x25
+#623 @ 458,724: 13x16
+#624 @ 793,416: 28x23
+#625 @ 804,843: 28x13
+#626 @ 345,711: 15x20
+#627 @ 679,461: 28x23
+#628 @ 652,655: 20x20
+#629 @ 330,343: 12x13
+#630 @ 919,801: 16x11
+#631 @ 974,473: 10x28
+#632 @ 112,537: 11x18
+#633 @ 680,494: 23x25
+#634 @ 307,283: 16x28
+#635 @ 904,314: 11x25
+#636 @ 718,778: 12x22
+#637 @ 30,550: 23x25
+#638 @ 146,964: 14x18
+#639 @ 167,242: 28x19
+#640 @ 228,443: 17x15
+#641 @ 914,547: 10x15
+#642 @ 931,708: 23x23
+#643 @ 105,180: 16x10
+#644 @ 455,283: 14x16
+#645 @ 491,723: 28x17
+#646 @ 618,6: 17x27
+#647 @ 635,361: 24x25
+#648 @ 883,585: 26x16
+#649 @ 131,346: 17x26
+#650 @ 78,25: 22x12
+#651 @ 611,643: 28x22
+#652 @ 647,114: 15x23
+#653 @ 229,550: 21x28
+#654 @ 190,124: 15x14
+#655 @ 903,330: 13x16
+#656 @ 750,722: 20x19
+#657 @ 26,456: 25x13
+#658 @ 414,283: 16x16
+#659 @ 940,221: 28x25
+#660 @ 585,932: 20x18
+#661 @ 96,398: 20x17
+#662 @ 371,915: 12x19
+#663 @ 819,706: 22x25
+#664 @ 347,500: 15x9
+#665 @ 275,85: 24x10
+#666 @ 435,743: 26x26
+#667 @ 535,568: 22x20
+#668 @ 46,389: 17x25
+#669 @ 584,880: 24x18
+#670 @ 630,266: 18x18
+#671 @ 431,377: 26x14
+#672 @ 559,677: 4x3
+#673 @ 701,439: 16x14
+#674 @ 829,446: 20x11
+#675 @ 555,565: 20x13
+#676 @ 917,846: 14x17
+#677 @ 593,676: 18x16
+#678 @ 542,798: 20x19
+#679 @ 6,372: 24x29
+#680 @ 578,809: 24x24
+#681 @ 64,522: 11x4
+#682 @ 591,896: 13x26
+#683 @ 932,572: 11x25
+#684 @ 867,131: 27x19
+#685 @ 495,889: 23x22
+#686 @ 367,827: 21x13
+#687 @ 232,45: 18x28
+#688 @ 704,711: 11x27
+#689 @ 309,517: 23x13
+#690 @ 429,199: 17x11
+#691 @ 717,52: 20x15
+#692 @ 912,877: 27x25
+#693 @ 447,764: 16x11
+#694 @ 799,769: 28x22
+#695 @ 361,912: 27x26
+#696 @ 891,829: 10x28
+#697 @ 233,895: 20x23
+#698 @ 806,276: 16x13
+#699 @ 377,966: 21x18
+#700 @ 792,875: 20x22
+#701 @ 255,807: 18x19
+#702 @ 634,238: 15x26
+#703 @ 492,519: 13x24
+#704 @ 953,632: 19x26
+#705 @ 684,587: 10x17
+#706 @ 391,424: 16x17
+#707 @ 654,158: 14x27
+#708 @ 118,638: 23x11
+#709 @ 302,282: 17x13
+#710 @ 662,54: 14x19
+#711 @ 909,835: 14x23
+#712 @ 558,971: 18x11
+#713 @ 90,774: 11x28
+#714 @ 745,346: 15x11
+#715 @ 488,860: 22x14
+#716 @ 848,568: 26x23
+#717 @ 6,625: 28x25
+#718 @ 34,388: 15x18
+#719 @ 965,778: 23x24
+#720 @ 103,500: 20x18
+#721 @ 506,222: 29x17
+#722 @ 226,197: 24x25
+#723 @ 129,939: 15x25
+#724 @ 140,644: 11x18
+#725 @ 905,904: 20x25
+#726 @ 423,276: 13x12
+#727 @ 62,511: 17x24
+#728 @ 932,814: 19x26
+#729 @ 9,810: 11x26
+#730 @ 32,624: 16x20
+#731 @ 967,236: 28x18
+#732 @ 616,948: 27x12
+#733 @ 714,733: 15x17
+#734 @ 277,783: 25x24
+#735 @ 482,675: 16x12
+#736 @ 862,11: 19x26
+#737 @ 667,668: 27x15
+#738 @ 131,406: 13x28
+#739 @ 707,788: 26x27
+#740 @ 859,505: 21x21
+#741 @ 968,785: 4x6
+#742 @ 813,939: 11x27
+#743 @ 611,781: 28x17
+#744 @ 298,82: 28x27
+#745 @ 352,828: 16x27
+#746 @ 920,831: 20x23
+#747 @ 967,694: 19x29
+#748 @ 370,50: 25x18
+#749 @ 545,724: 13x16
+#750 @ 102,391: 13x22
+#751 @ 904,122: 22x19
+#752 @ 118,439: 23x10
+#753 @ 793,859: 23x27
+#754 @ 722,798: 27x29
+#755 @ 97,774: 24x10
+#756 @ 326,707: 26x14
+#757 @ 559,909: 28x14
+#758 @ 33,822: 29x21
+#759 @ 508,227: 24x7
+#760 @ 115,427: 26x16
+#761 @ 665,766: 27x25
+#762 @ 303,847: 19x28
+#763 @ 157,535: 19x12
+#764 @ 968,680: 18x10
+#765 @ 668,464: 20x9
+#766 @ 114,534: 27x10
+#767 @ 841,609: 17x21
+#768 @ 972,671: 20x13
+#769 @ 490,506: 27x18
+#770 @ 0,407: 13x26
+#771 @ 626,219: 11x14
+#772 @ 174,512: 12x24
+#773 @ 162,251: 10x18
+#774 @ 612,206: 11x25
+#775 @ 97,517: 11x10
+#776 @ 31,916: 11x17
+#777 @ 261,148: 17x16
+#778 @ 815,577: 26x24
+#779 @ 545,521: 29x23
+#780 @ 842,800: 25x23
+#781 @ 391,437: 23x20
+#782 @ 333,886: 20x14
+#783 @ 109,171: 11x14
+#784 @ 344,483: 28x16
+#785 @ 581,195: 15x24
+#786 @ 608,372: 12x13
+#787 @ 740,279: 14x18
+#788 @ 653,626: 27x22
+#789 @ 308,182: 24x20
+#790 @ 899,219: 16x12
+#791 @ 515,556: 21x11
+#792 @ 171,0: 18x29
+#793 @ 204,304: 27x14
+#794 @ 488,289: 25x25
+#795 @ 479,382: 14x18
+#796 @ 626,889: 25x11
+#797 @ 604,948: 16x10
+#798 @ 182,277: 21x18
+#799 @ 623,205: 24x20
+#800 @ 720,654: 11x25
+#801 @ 731,103: 26x17
+#802 @ 829,581: 14x25
+#803 @ 431,738: 17x29
+#804 @ 524,620: 15x12
+#805 @ 512,539: 23x23
+#806 @ 829,943: 29x18
+#807 @ 93,176: 13x26
+#808 @ 883,796: 12x12
+#809 @ 214,543: 28x16
+#810 @ 518,231: 15x14
+#811 @ 213,502: 21x20
+#812 @ 255,598: 10x22
+#813 @ 352,477: 24x16
+#814 @ 664,653: 15x20
+#815 @ 741,338: 28x26
+#816 @ 361,174: 25x22
+#817 @ 101,582: 14x27
+#818 @ 237,103: 13x12
+#819 @ 814,157: 20x17
+#820 @ 182,216: 28x21
+#821 @ 194,282: 17x18
+#822 @ 247,657: 20x14
+#823 @ 0,647: 14x29
+#824 @ 899,959: 12x23
+#825 @ 151,90: 20x20
+#826 @ 341,562: 25x22
+#827 @ 895,137: 28x18
+#828 @ 853,703: 16x11
+#829 @ 8,934: 11x17
+#830 @ 395,528: 28x13
+#831 @ 874,122: 13x28
+#832 @ 605,187: 19x17
+#833 @ 684,219: 24x24
+#834 @ 382,885: 13x21
+#835 @ 751,858: 19x21
+#836 @ 518,38: 11x27
+#837 @ 812,383: 21x28
+#838 @ 904,886: 21x19
+#839 @ 356,751: 25x24
+#840 @ 586,554: 28x20
+#841 @ 98,582: 10x25
+#842 @ 438,552: 11x21
+#843 @ 231,601: 20x20
+#844 @ 906,176: 11x21
+#845 @ 237,52: 12x23
+#846 @ 81,19: 15x21
+#847 @ 600,731: 19x14
+#848 @ 553,43: 10x22
+#849 @ 703,825: 14x21
+#850 @ 193,283: 10x26
+#851 @ 73,407: 22x26
+#852 @ 226,602: 25x21
+#853 @ 515,223: 26x15
+#854 @ 95,363: 28x13
+#855 @ 927,2: 28x22
+#856 @ 457,470: 16x13
+#857 @ 67,23: 24x14
+#858 @ 435,244: 10x16
+#859 @ 640,450: 29x22
+#860 @ 385,778: 16x23
+#861 @ 734,157: 23x25
+#862 @ 516,727: 11x15
+#863 @ 488,733: 16x12
+#864 @ 83,719: 19x21
+#865 @ 530,287: 15x15
+#866 @ 729,671: 24x16
+#867 @ 240,320: 26x18
+#868 @ 311,583: 13x24
+#869 @ 224,956: 10x13
+#870 @ 662,482: 17x14
+#871 @ 533,896: 12x17
+#872 @ 844,440: 10x26
+#873 @ 104,625: 16x11
+#874 @ 632,431: 25x17
+#875 @ 735,292: 22x24
+#876 @ 74,625: 22x24
+#877 @ 752,738: 24x25
+#878 @ 599,594: 18x10
+#879 @ 220,951: 15x26
+#880 @ 339,67: 14x19
+#881 @ 856,704: 15x22
+#882 @ 829,158: 10x13
+#883 @ 823,838: 27x11
+#884 @ 368,952: 10x15
+#885 @ 32,281: 23x28
+#886 @ 700,84: 11x26
+#887 @ 800,342: 23x9
+#888 @ 392,728: 18x10
+#889 @ 488,802: 22x26
+#890 @ 206,785: 18x25
+#891 @ 411,294: 24x11
+#892 @ 566,932: 24x10
+#893 @ 529,409: 15x17
+#894 @ 477,549: 24x24
+#895 @ 816,957: 14x22
+#896 @ 256,719: 23x20
+#897 @ 860,304: 15x16
+#898 @ 881,268: 27x10
+#899 @ 470,387: 17x10
+#900 @ 173,25: 24x13
+#901 @ 144,28: 26x16
+#902 @ 685,372: 14x23
+#903 @ 695,681: 22x14
+#904 @ 748,874: 29x22
+#905 @ 897,765: 18x17
+#906 @ 880,756: 24x12
+#907 @ 627,112: 24x18
+#908 @ 655,479: 16x11
+#909 @ 392,560: 15x16
+#910 @ 61,740: 23x20
+#911 @ 696,232: 11x20
+#912 @ 452,30: 11x24
+#913 @ 581,289: 16x23
+#914 @ 786,561: 16x19
+#915 @ 774,346: 23x28
+#916 @ 537,171: 25x11
+#917 @ 326,723: 11x27
+#918 @ 224,914: 17x16
+#919 @ 906,176: 25x18
+#920 @ 878,572: 27x25
+#921 @ 391,561: 19x27
+#922 @ 715,976: 19x12
+#923 @ 275,748: 23x19
+#924 @ 381,802: 10x14
+#925 @ 940,217: 24x23
+#926 @ 741,53: 27x15
+#927 @ 104,445: 16x18
+#928 @ 519,127: 27x20
+#929 @ 445,598: 23x21
+#930 @ 126,601: 29x13
+#931 @ 658,225: 24x19
+#932 @ 920,952: 26x23
+#933 @ 110,776: 16x14
+#934 @ 896,945: 24x14
+#935 @ 733,125: 11x17
+#936 @ 849,555: 23x17
+#937 @ 376,546: 24x18
+#938 @ 153,930: 24x24
+#939 @ 470,855: 22x21
+#940 @ 45,321: 27x10
+#941 @ 773,553: 26x14
+#942 @ 749,180: 12x14
+#943 @ 736,631: 28x26
+#944 @ 737,871: 11x14
+#945 @ 447,253: 14x11
+#946 @ 825,628: 27x26
+#947 @ 749,435: 11x20
+#948 @ 919,271: 10x14
+#949 @ 556,558: 10x14
+#950 @ 258,595: 14x28
+#951 @ 324,858: 12x15
+#952 @ 54,735: 24x20
+#953 @ 718,354: 25x10
+#954 @ 954,20: 22x17
+#955 @ 625,176: 15x28
+#956 @ 828,374: 26x14
+#957 @ 946,677: 29x25
+#958 @ 94,678: 12x26
+#959 @ 657,251: 16x22
+#960 @ 537,124: 26x14
+#961 @ 893,609: 14x11
+#962 @ 131,596: 12x13
+#963 @ 436,44: 18x17
+#964 @ 359,651: 18x21
+#965 @ 427,288: 29x14
+#966 @ 521,545: 13x22
+#967 @ 558,231: 17x28
+#968 @ 179,334: 26x28
+#969 @ 801,166: 20x29
+#970 @ 542,41: 25x27
+#971 @ 545,606: 24x29
+#972 @ 278,868: 20x17
+#973 @ 46,956: 16x25
+#974 @ 62,784: 26x15
+#975 @ 346,55: 13x26
+#976 @ 772,213: 22x28
+#977 @ 581,146: 29x17
+#978 @ 283,845: 16x13
+#979 @ 961,683: 19x13
+#980 @ 968,686: 25x17
+#981 @ 637,18: 29x22
+#982 @ 558,932: 24x10
+#983 @ 376,193: 26x10
+#984 @ 884,430: 15x10
+#985 @ 317,13: 21x18
+#986 @ 568,56: 28x13
+#987 @ 661,718: 25x15
+#988 @ 715,672: 20x20
+#989 @ 861,782: 17x26
+#990 @ 455,852: 12x25
+#991 @ 889,802: 17x11
+#992 @ 879,106: 25x23
+#993 @ 867,347: 15x21
+#994 @ 924,422: 18x10
+#995 @ 814,942: 18x29
+#996 @ 84,858: 12x22
+#997 @ 581,427: 28x24
+#998 @ 247,182: 27x21
+#999 @ 971,182: 23x21
+#1000 @ 978,776: 11x17
+#1001 @ 1,786: 13x26
+#1002 @ 977,224: 20x25
+#1003 @ 576,413: 12x12
+#1004 @ 892,182: 23x11
+#1005 @ 680,350: 26x15
+#1006 @ 489,881: 21x15
+#1007 @ 900,891: 21x17
+#1008 @ 591,883: 12x22
+#1009 @ 826,602: 14x24
+#1010 @ 366,486: 23x22
+#1011 @ 711,115: 19x19
+#1012 @ 707,116: 27x10
+#1013 @ 826,817: 27x19
+#1014 @ 315,770: 14x11
+#1015 @ 296,676: 21x26
+#1016 @ 713,373: 19x18
+#1017 @ 7,925: 28x26
+#1018 @ 821,893: 26x19
+#1019 @ 679,85: 28x11
+#1020 @ 2,802: 27x12
+#1021 @ 335,491: 27x22
+#1022 @ 299,337: 12x21
+#1023 @ 804,708: 20x18
+#1024 @ 903,888: 26x19
+#1025 @ 264,744: 29x26
+#1026 @ 813,823: 18x29
+#1027 @ 757,36: 12x18
+#1028 @ 589,217: 14x29
+#1029 @ 761,553: 16x15
+#1030 @ 632,430: 10x13
+#1031 @ 855,795: 28x27
+#1032 @ 93,625: 15x26
+#1033 @ 139,934: 19x20
+#1034 @ 561,850: 12x17
+#1035 @ 834,159: 23x13
+#1036 @ 479,845: 29x16
+#1037 @ 767,935: 10x29
+#1038 @ 506,816: 18x17
+#1039 @ 670,548: 25x22
+#1040 @ 415,58: 14x27
+#1041 @ 943,188: 12x26
+#1042 @ 7,381: 22x17
+#1043 @ 674,568: 12x17
+#1044 @ 410,2: 12x10
+#1045 @ 685,688: 13x23
+#1046 @ 609,566: 18x10
+#1047 @ 484,48: 29x22
+#1048 @ 676,659: 27x14
+#1049 @ 0,812: 12x28
+#1050 @ 282,572: 20x23
+#1051 @ 898,860: 17x25
+#1052 @ 892,949: 14x20
+#1053 @ 580,906: 14x16
+#1054 @ 65,234: 20x19
+#1055 @ 856,479: 10x24
+#1056 @ 475,143: 13x13
+#1057 @ 822,556: 14x27
+#1058 @ 970,678: 22x16
+#1059 @ 488,191: 19x10
+#1060 @ 843,298: 23x10
+#1061 @ 686,225: 17x12
+#1062 @ 224,784: 24x19
+#1063 @ 104,978: 6x10
+#1064 @ 809,756: 29x23
+#1065 @ 851,756: 28x21
+#1066 @ 144,943: 13x26
+#1067 @ 491,667: 10x27
+#1068 @ 383,574: 29x19
+#1069 @ 525,485: 13x11
+#1070 @ 494,721: 21x14
+#1071 @ 670,473: 16x16
+#1072 @ 923,103: 20x23
+#1073 @ 425,367: 27x11
+#1074 @ 975,667: 18x23
+#1075 @ 607,94: 16x25
+#1076 @ 29,617: 10x14
+#1077 @ 741,763: 27x15
+#1078 @ 907,281: 24x21
+#1079 @ 527,545: 21x24
+#1080 @ 751,599: 26x28
+#1081 @ 129,945: 10x28
+#1082 @ 545,718: 17x21
+#1083 @ 833,143: 14x23
+#1084 @ 678,337: 13x22
+#1085 @ 450,473: 10x20
+#1086 @ 883,388: 17x28
+#1087 @ 865,314: 16x21
+#1088 @ 861,408: 20x22
+#1089 @ 582,264: 15x26
+#1090 @ 612,913: 10x11
+#1091 @ 868,575: 11x15
+#1092 @ 854,596: 14x18
+#1093 @ 551,232: 22x24
+#1094 @ 675,898: 24x10
+#1095 @ 70,425: 12x16
+#1096 @ 325,763: 29x19
+#1097 @ 907,855: 16x21
+#1098 @ 770,817: 11x25
+#1099 @ 370,788: 20x22
+#1100 @ 883,426: 22x13
+#1101 @ 718,42: 10x23
+#1102 @ 670,568: 19x28
+#1103 @ 556,702: 23x27
+#1104 @ 224,245: 17x19
+#1105 @ 861,50: 18x25
+#1106 @ 840,622: 21x16
+#1107 @ 827,711: 13x21
+#1108 @ 211,46: 12x16
+#1109 @ 243,918: 19x19
+#1110 @ 855,323: 17x14
+#1111 @ 409,758: 27x24
+#1112 @ 337,193: 26x24
+#1113 @ 272,288: 12x26
+#1114 @ 197,340: 22x21
+#1115 @ 950,574: 16x21
+#1116 @ 311,508: 27x13
+#1117 @ 798,339: 29x17
+#1118 @ 892,173: 10x15
+#1119 @ 779,604: 11x12
+#1120 @ 225,818: 13x15
+#1121 @ 784,25: 19x11
+#1122 @ 88,25: 25x27
+#1123 @ 246,755: 25x28
+#1124 @ 239,175: 26x24
+#1125 @ 398,547: 18x23
+#1126 @ 756,193: 29x25
+#1127 @ 96,680: 4x20
+#1128 @ 916,826: 20x12
+#1129 @ 457,578: 29x29
+#1130 @ 91,576: 23x27
+#1131 @ 618,39: 29x18
+#1132 @ 621,960: 25x21
+#1133 @ 275,936: 14x27
+#1134 @ 130,144: 29x16
+#1135 @ 400,747: 15x29
+#1136 @ 619,221: 20x15
+#1137 @ 734,169: 17x11
+#1138 @ 359,635: 18x16
+#1139 @ 244,349: 29x22
+#1140 @ 202,270: 14x29
+#1141 @ 461,556: 29x28
+#1142 @ 503,155: 24x21
+#1143 @ 857,610: 18x15
+#1144 @ 660,592: 29x27
+#1145 @ 218,446: 12x13
+#1146 @ 149,850: 28x14
+#1147 @ 564,679: 16x11
+#1148 @ 709,112: 28x22
+#1149 @ 465,713: 17x19
+#1150 @ 36,827: 17x21
+#1151 @ 755,284: 14x29
+#1152 @ 313,74: 12x28
+#1153 @ 371,863: 25x26
+#1154 @ 908,817: 10x28
+#1155 @ 561,136: 17x13
+#1156 @ 449,55: 25x14
+#1157 @ 229,617: 18x11
+#1158 @ 841,529: 23x27
+#1159 @ 946,219: 4x17
+#1160 @ 255,612: 15x28
+#1161 @ 617,908: 28x23
+#1162 @ 830,821: 10x15
+#1163 @ 936,168: 15x27
+#1164 @ 275,84: 11x24
+#1165 @ 182,337: 22x18
+#1166 @ 722,642: 17x19
+#1167 @ 120,542: 20x22
+#1168 @ 377,916: 20x26
+#1169 @ 407,724: 25x10
+#1170 @ 380,470: 23x27
+#1171 @ 235,732: 28x15
+#1172 @ 485,445: 19x21
+#1173 @ 8,248: 11x10
+#1174 @ 96,594: 28x10
+#1175 @ 417,110: 13x17
+#1176 @ 316,128: 15x28
+#1177 @ 895,164: 11x10
+#1178 @ 720,148: 28x22
+#1179 @ 932,807: 13x25
+#1180 @ 615,487: 23x12
+#1181 @ 291,846: 21x21
+#1182 @ 931,467: 13x21
+#1183 @ 766,736: 27x13
+#1184 @ 345,728: 19x12
+#1185 @ 781,161: 17x27
+#1186 @ 262,891: 15x25
+#1187 @ 219,755: 12x20
+#1188 @ 681,109: 23x11
+#1189 @ 941,959: 29x16
+#1190 @ 800,13: 23x25
+#1191 @ 51,902: 28x24
+#1192 @ 261,704: 18x12
+#1193 @ 63,438: 20x17
+#1194 @ 428,339: 22x23
+#1195 @ 732,860: 18x25
+#1196 @ 132,750: 23x12
+#1197 @ 771,59: 26x18
+#1198 @ 19,322: 24x17
+#1199 @ 558,119: 11x22
+#1200 @ 213,33: 13x14
+#1201 @ 746,843: 13x12
+#1202 @ 607,223: 15x25
+#1203 @ 744,185: 13x16
+#1204 @ 896,863: 14x11
+#1205 @ 781,653: 20x16
+#1206 @ 519,411: 14x10
+#1207 @ 587,708: 27x14
+#1208 @ 353,41: 29x16
+#1209 @ 555,555: 14x11
+#1210 @ 408,553: 25x22
+#1211 @ 639,190: 27x29
+#1212 @ 149,88: 12x27
+#1213 @ 988,44: 10x20
+#1214 @ 617,812: 26x19
+#1215 @ 308,435: 25x12
+#1216 @ 629,405: 11x29
+#1217 @ 732,761: 11x25
+#1218 @ 802,229: 16x17
+#1219 @ 302,310: 28x26
+#1220 @ 918,368: 16x10
+#1221 @ 66,423: 12x16
+#1222 @ 917,267: 23x28
+#1223 @ 601,956: 3x10
+#1224 @ 653,919: 14x24
+#1225 @ 144,271: 20x16
+#1226 @ 508,421: 27x15
+#1227 @ 519,505: 18x11
+#1228 @ 530,385: 12x13
+#1229 @ 665,446: 18x16
+#1230 @ 520,399: 19x25
+#1231 @ 637,653: 22x29
+#1232 @ 583,956: 14x11
+#1233 @ 484,567: 23x21
+#1234 @ 216,301: 17x12
+#1235 @ 691,507: 12x17
+#1236 @ 854,476: 12x11
+#1237 @ 64,49: 11x16
+#1238 @ 863,564: 16x10
+#1239 @ 360,381: 16x17
+#1240 @ 925,888: 10x18
+#1241 @ 665,330: 12x18
+#1242 @ 228,601: 16x13
+#1243 @ 574,908: 17x13
+#1244 @ 597,953: 14x20
+#1245 @ 954,866: 17x19
+#1246 @ 791,870: 14x12
+#1247 @ 667,476: 13x28
+#1248 @ 662,488: 10x12
+#1249 @ 497,34: 10x27
+#1250 @ 110,132: 22x24
+#1251 @ 177,93: 4x11
+#1252 @ 721,114: 10x20
+#1253 @ 476,376: 21x27
+#1254 @ 384,888: 6x14
+#1255 @ 698,514: 16x26
+#1256 @ 779,308: 16x11
+#1257 @ 701,777: 26x22
+#1258 @ 933,733: 15x26
+#1259 @ 934,70: 24x26
+#1260 @ 72,787: 22x27
+#1261 @ 449,652: 18x15
+#1262 @ 425,558: 16x22
+#1263 @ 622,445: 15x16
+#1264 @ 157,175: 20x23
+#1265 @ 887,212: 21x21
+#1266 @ 514,490: 16x20
+#1267 @ 368,488: 4x6
+#1268 @ 797,41: 18x27
+#1269 @ 91,685: 22x23
+#1270 @ 277,115: 27x28
+#1271 @ 297,360: 27x20
+#1272 @ 195,559: 3x11
+#1273 @ 719,686: 23x10
+#1274 @ 397,818: 29x15
+#1275 @ 487,267: 27x10
+#1276 @ 711,388: 20x18
+#1277 @ 309,496: 27x27
+#1278 @ 414,173: 29x11
+#1279 @ 857,568: 12x18
+#1280 @ 165,155: 19x28
+#1281 @ 656,714: 12x26
+#1282 @ 255,921: 3x12
+#1283 @ 276,163: 12x14
+#1284 @ 634,812: 16x29
+#1285 @ 340,248: 23x23
+#1286 @ 193,268: 12x10
+#1287 @ 383,629: 21x26
+#1288 @ 933,297: 8x16
+#1289 @ 613,167: 13x25
+#1290 @ 852,118: 15x25
+#1291 @ 661,343: 11x20
+#1292 @ 827,119: 14x28
+#1293 @ 636,46: 27x11
+#1294 @ 629,202: 11x15
+#1295 @ 361,286: 18x23
+#1296 @ 539,925: 10x26
+#1297 @ 489,869: 15x18
+#1298 @ 415,45: 26x17
+#1299 @ 94,358: 20x17
+#1300 @ 413,552: 13x17
+#1301 @ 529,918: 16x24
+#1302 @ 400,808: 10x21
+#1303 @ 940,370: 21x27
+#1304 @ 813,185: 29x14
+#1305 @ 95,28: 24x11
+#1306 @ 249,327: 24x16
+#1307 @ 760,926: 26x12
+#1308 @ 732,957: 13x12
+#1309 @ 582,910: 13x13
+#1310 @ 0,162: 17x20
+#1311 @ 747,594: 10x11
+#1312 @ 712,513: 20x23
+#1313 @ 489,795: 26x29
+#1314 @ 474,335: 11x11
+#1315 @ 928,854: 27x16
+#1316 @ 7,377: 14x23
+#1317 @ 923,373: 20x22
+#1318 @ 411,954: 16x11
+#1319 @ 9,935: 20x14
+#1320 @ 887,848: 26x10
+#1321 @ 404,860: 11x11
+#1322 @ 475,281: 24x22
+#1323 @ 710,774: 21x22
+#1324 @ 794,158: 17x24
+#1325 @ 513,797: 25x28
+#1326 @ 707,755: 26x26
+#1327 @ 53,33: 29x24
+#1328 @ 506,184: 13x26
+#1329 @ 829,145: 20x10
+#1330 @ 891,774: 16x12
+#1331 @ 807,597: 26x27
+#1332 @ 375,313: 16x25
+#1333 @ 918,895: 16x11
+#1334 @ 884,128: 24x23
+#1335 @ 340,833: 25x24
+#1336 @ 202,485: 26x10
+#1337 @ 279,681: 21x10
+#1338 @ 199,913: 19x14
+#1339 @ 537,813: 26x29
+#1340 @ 89,723: 10x24
+#1341 @ 286,935: 22x27
+#1342 @ 347,72: 22x25
+#1343 @ 805,893: 11x28
+#1344 @ 917,81: 18x11
+#1345 @ 630,949: 21x16
+#1346 @ 526,905: 22x17
+#1347 @ 908,578: 17x15
+#1348 @ 235,237: 10x25
+#1349 @ 224,798: 20x23
+#1350 @ 759,525: 24x27
+#1351 @ 738,299: 25x16
+#1352 @ 224,888: 25x14
+#1353 @ 319,601: 28x26
+#1354 @ 212,397: 11x25
+#1355 @ 102,538: 21x28
+#1356 @ 457,251: 14x17
+#1357 @ 931,293: 13x24
+#1358 @ 808,93: 14x22
+#1359 @ 593,814: 12x23
+#1360 @ 468,131: 10x21
+#1361 @ 593,251: 15x15
+#1362 @ 362,16: 20x19
+#1363 @ 862,511: 14x11
+#1364 @ 671,626: 17x16
+#1365 @ 473,697: 16x14
+#1366 @ 368,329: 28x18
+#1367 @ 925,194: 24x29
+#1368 @ 875,511: 12x12
+#1369 @ 967,411: 25x27
+#1370 @ 89,411: 15x18
+#1371 @ 307,943: 12x28
+#1372 @ 119,13: 29x16
+#1373 @ 806,710: 15x11
+#1374 @ 544,534: 13x18
+#1375 @ 672,698: 14x17
+#1376 @ 645,848: 23x20
+#1377 @ 889,954: 25x13
+#1378 @ 378,24: 12x14
+#1379 @ 542,442: 22x15
+#1380 @ 42,454: 18x28
+#1381 @ 175,91: 11x22
+#1382 @ 840,533: 12x21
+#1383 @ 792,736: 24x27
+#1384 @ 731,713: 17x27
+#1385 @ 614,449: 22x20
diff --git a/2018/inputs/4.txt b/2018/inputs/4.txt
new file mode 100644
index 0000000..4a0ff6e
--- /dev/null
+++ b/2018/inputs/4.txt
@@ -0,0 +1,1088 @@
+[1518-09-17 23:48] Guard #1307 begins shift
+[1518-06-03 00:00] Guard #3217 begins shift
+[1518-07-28 00:49] falls asleep
+[1518-03-30 00:57] falls asleep
+[1518-07-01 23:58] Guard #409 begins shift
+[1518-04-13 00:25] wakes up
+[1518-04-09 00:22] wakes up
+[1518-11-02 00:41] falls asleep
+[1518-11-21 00:23] falls asleep
+[1518-05-03 00:59] wakes up
+[1518-11-21 00:02] Guard #1459 begins shift
+[1518-08-18 00:27] wakes up
+[1518-08-09 00:48] falls asleep
+[1518-09-23 00:23] falls asleep
+[1518-03-29 23:57] Guard #113 begins shift
+[1518-04-16 00:43] wakes up
+[1518-05-13 00:33] falls asleep
+[1518-05-19 00:58] wakes up
+[1518-07-09 00:44] wakes up
+[1518-04-26 00:03] falls asleep
+[1518-08-24 00:55] falls asleep
+[1518-06-30 00:51] falls asleep
+[1518-10-14 00:06] falls asleep
+[1518-04-28 00:23] falls asleep
+[1518-10-05 00:57] wakes up
+[1518-09-02 00:56] wakes up
+[1518-03-11 00:38] falls asleep
+[1518-07-30 00:54] wakes up
+[1518-09-15 23:58] Guard #1811 begins shift
+[1518-08-08 23:58] Guard #1033 begins shift
+[1518-08-07 00:08] falls asleep
+[1518-06-13 00:46] wakes up
+[1518-10-08 00:54] falls asleep
+[1518-06-08 23:46] Guard #557 begins shift
+[1518-06-01 00:22] wakes up
+[1518-08-05 00:59] wakes up
+[1518-03-08 00:03] Guard #3271 begins shift
+[1518-07-18 23:59] Guard #449 begins shift
+[1518-09-24 00:00] Guard #389 begins shift
+[1518-04-22 00:45] wakes up
+[1518-07-31 00:41] falls asleep
+[1518-03-24 00:02] falls asleep
+[1518-05-21 00:29] falls asleep
+[1518-05-27 23:59] Guard #449 begins shift
+[1518-10-30 00:52] wakes up
+[1518-08-09 00:51] wakes up
+[1518-03-16 00:54] wakes up
+[1518-04-11 00:28] falls asleep
+[1518-04-25 00:58] wakes up
+[1518-10-06 00:07] falls asleep
+[1518-08-15 23:49] Guard #557 begins shift
+[1518-10-17 23:51] Guard #739 begins shift
+[1518-06-27 00:00] Guard #3217 begins shift
+[1518-06-30 00:01] Guard #1237 begins shift
+[1518-04-29 00:01] Guard #3271 begins shift
+[1518-11-12 00:19] falls asleep
+[1518-07-27 00:50] wakes up
+[1518-03-06 00:42] falls asleep
+[1518-11-17 00:57] wakes up
+[1518-07-21 00:48] wakes up
+[1518-03-04 00:28] falls asleep
+[1518-08-24 00:37] falls asleep
+[1518-09-19 00:21] wakes up
+[1518-11-05 00:24] wakes up
+[1518-06-24 00:02] falls asleep
+[1518-10-24 00:55] falls asleep
+[1518-06-14 00:56] wakes up
+[1518-06-29 00:47] wakes up
+[1518-04-15 00:14] wakes up
+[1518-08-21 00:08] falls asleep
+[1518-09-16 00:48] falls asleep
+[1518-10-11 00:42] wakes up
+[1518-03-04 00:09] wakes up
+[1518-03-13 00:18] falls asleep
+[1518-10-28 00:56] wakes up
+[1518-03-27 00:20] wakes up
+[1518-05-24 00:03] Guard #739 begins shift
+[1518-08-31 00:54] wakes up
+[1518-06-22 00:50] falls asleep
+[1518-06-15 00:45] wakes up
+[1518-07-22 23:47] Guard #2647 begins shift
+[1518-09-02 00:00] falls asleep
+[1518-05-04 00:14] falls asleep
+[1518-03-06 00:51] wakes up
+[1518-10-02 00:35] wakes up
+[1518-10-05 00:20] falls asleep
+[1518-05-06 00:53] falls asleep
+[1518-10-12 00:47] wakes up
+[1518-04-08 00:30] wakes up
+[1518-11-19 00:40] falls asleep
+[1518-11-13 00:32] falls asleep
+[1518-08-21 23:46] Guard #3271 begins shift
+[1518-05-31 00:56] falls asleep
+[1518-05-18 00:57] wakes up
+[1518-05-17 00:56] wakes up
+[1518-05-24 23:51] Guard #601 begins shift
+[1518-10-30 00:32] wakes up
+[1518-10-05 00:13] wakes up
+[1518-11-02 00:03] Guard #2647 begins shift
+[1518-05-02 00:36] wakes up
+[1518-07-29 00:40] wakes up
+[1518-07-16 00:53] wakes up
+[1518-09-04 00:18] wakes up
+[1518-05-11 00:33] falls asleep
+[1518-03-09 00:00] Guard #1811 begins shift
+[1518-10-24 23:57] Guard #827 begins shift
+[1518-11-18 00:46] wakes up
+[1518-08-14 00:27] falls asleep
+[1518-05-25 00:17] wakes up
+[1518-03-03 00:02] Guard #947 begins shift
+[1518-05-29 00:00] falls asleep
+[1518-06-05 00:04] wakes up
+[1518-07-26 00:42] wakes up
+[1518-10-01 00:39] falls asleep
+[1518-06-22 00:54] wakes up
+[1518-09-06 00:24] wakes up
+[1518-08-04 00:24] falls asleep
+[1518-04-25 00:35] wakes up
+[1518-11-11 00:11] falls asleep
+[1518-09-27 00:58] wakes up
+[1518-09-16 00:15] falls asleep
+[1518-07-25 00:55] wakes up
+[1518-08-28 00:27] falls asleep
+[1518-08-12 00:39] falls asleep
+[1518-11-05 00:32] falls asleep
+[1518-05-29 23:52] Guard #3209 begins shift
+[1518-04-27 00:35] wakes up
+[1518-04-20 00:06] falls asleep
+[1518-03-21 00:47] falls asleep
+[1518-10-18 00:55] wakes up
+[1518-09-29 00:31] falls asleep
+[1518-09-17 00:40] wakes up
+[1518-04-22 00:19] falls asleep
+[1518-06-14 00:32] falls asleep
+[1518-10-07 23:59] Guard #1307 begins shift
+[1518-04-25 00:55] falls asleep
+[1518-08-27 00:24] falls asleep
+[1518-08-01 23:56] Guard #389 begins shift
+[1518-09-04 23:56] Guard #409 begins shift
+[1518-09-29 23:56] Guard #449 begins shift
+[1518-10-05 00:23] wakes up
+[1518-04-04 00:58] wakes up
+[1518-08-05 00:54] falls asleep
+[1518-07-20 00:46] wakes up
+[1518-04-08 00:46] wakes up
+[1518-06-18 00:52] wakes up
+[1518-05-03 23:59] Guard #1033 begins shift
+[1518-11-01 00:37] wakes up
+[1518-03-11 00:30] wakes up
+[1518-06-06 00:42] wakes up
+[1518-06-20 00:06] falls asleep
+[1518-04-05 00:55] wakes up
+[1518-09-13 23:57] Guard #3217 begins shift
+[1518-04-21 00:00] Guard #1459 begins shift
+[1518-03-18 00:00] Guard #1307 begins shift
+[1518-09-13 00:03] Guard #557 begins shift
+[1518-05-28 23:51] Guard #3217 begins shift
+[1518-10-23 23:49] Guard #113 begins shift
+[1518-03-11 23:59] Guard #113 begins shift
+[1518-09-06 00:07] falls asleep
+[1518-03-03 00:42] falls asleep
+[1518-07-21 00:57] falls asleep
+[1518-06-12 00:08] falls asleep
+[1518-10-04 23:59] Guard #1237 begins shift
+[1518-08-19 00:36] falls asleep
+[1518-10-13 00:09] falls asleep
+[1518-08-18 00:57] wakes up
+[1518-08-28 23:52] Guard #1307 begins shift
+[1518-09-09 00:58] wakes up
+[1518-10-11 00:14] falls asleep
+[1518-07-25 23:50] Guard #1559 begins shift
+[1518-07-14 23:59] Guard #1237 begins shift
+[1518-09-26 00:58] wakes up
+[1518-05-22 23:59] Guard #3067 begins shift
+[1518-05-22 00:57] falls asleep
+[1518-05-02 00:58] wakes up
+[1518-05-14 00:52] wakes up
+[1518-04-18 00:51] wakes up
+[1518-06-17 00:35] wakes up
+[1518-05-18 23:59] Guard #389 begins shift
+[1518-08-16 00:12] wakes up
+[1518-11-08 00:49] wakes up
+[1518-08-18 00:04] Guard #1307 begins shift
+[1518-07-13 00:48] wakes up
+[1518-08-18 23:58] Guard #1459 begins shift
+[1518-03-09 00:52] wakes up
+[1518-03-16 00:00] Guard #1237 begins shift
+[1518-06-13 00:24] falls asleep
+[1518-08-16 00:04] falls asleep
+[1518-09-19 00:55] wakes up
+[1518-10-04 00:47] wakes up
+[1518-05-04 23:50] Guard #389 begins shift
+[1518-07-03 00:57] wakes up
+[1518-04-24 00:14] falls asleep
+[1518-09-03 00:22] wakes up
+[1518-11-09 00:54] falls asleep
+[1518-09-02 00:36] wakes up
+[1518-06-30 00:56] wakes up
+[1518-08-26 00:51] wakes up
+[1518-04-27 23:56] Guard #1307 begins shift
+[1518-11-02 00:10] falls asleep
+[1518-09-20 23:57] Guard #1811 begins shift
+[1518-03-14 00:48] wakes up
+[1518-05-31 00:30] wakes up
+[1518-08-07 00:03] Guard #3209 begins shift
+[1518-08-07 00:50] falls asleep
+[1518-09-25 00:57] wakes up
+[1518-10-18 00:08] wakes up
+[1518-10-03 00:56] wakes up
+[1518-05-27 00:46] wakes up
+[1518-06-07 00:18] falls asleep
+[1518-06-06 00:55] wakes up
+[1518-03-18 00:56] wakes up
+[1518-04-04 23:59] Guard #449 begins shift
+[1518-09-28 00:59] wakes up
+[1518-08-10 00:12] wakes up
+[1518-05-30 00:21] wakes up
+[1518-11-09 00:57] wakes up
+[1518-11-15 00:13] falls asleep
+[1518-06-10 23:57] Guard #1811 begins shift
+[1518-11-04 00:01] falls asleep
+[1518-05-21 00:47] falls asleep
+[1518-10-07 00:05] falls asleep
+[1518-03-12 00:36] wakes up
+[1518-08-09 00:37] wakes up
+[1518-09-23 00:58] wakes up
+[1518-04-14 00:22] falls asleep
+[1518-07-07 00:35] falls asleep
+[1518-03-15 00:59] wakes up
+[1518-03-14 00:44] falls asleep
+[1518-11-06 00:04] Guard #3067 begins shift
+[1518-07-14 00:01] Guard #3217 begins shift
+[1518-10-23 00:09] falls asleep
+[1518-07-01 00:38] wakes up
+[1518-11-05 00:51] wakes up
+[1518-04-08 00:52] falls asleep
+[1518-09-22 00:40] falls asleep
+[1518-09-08 00:20] falls asleep
+[1518-05-09 00:49] falls asleep
+[1518-10-17 00:02] Guard #3067 begins shift
+[1518-10-01 23:56] Guard #3217 begins shift
+[1518-05-10 00:58] wakes up
+[1518-11-11 23:57] Guard #3271 begins shift
+[1518-09-27 00:49] falls asleep
+[1518-09-30 00:48] wakes up
+[1518-06-06 00:01] Guard #601 begins shift
+[1518-03-18 23:59] Guard #3217 begins shift
+[1518-03-20 23:57] Guard #2647 begins shift
+[1518-07-29 00:52] falls asleep
+[1518-04-01 23:51] Guard #1459 begins shift
+[1518-03-23 00:14] falls asleep
+[1518-07-28 00:38] wakes up
+[1518-09-04 00:49] wakes up
+[1518-06-10 00:57] wakes up
+[1518-10-26 00:57] wakes up
+[1518-04-01 00:52] wakes up
+[1518-07-10 00:47] wakes up
+[1518-03-24 23:56] Guard #3217 begins shift
+[1518-07-07 00:58] wakes up
+[1518-08-10 00:11] falls asleep
+[1518-08-22 00:56] falls asleep
+[1518-11-03 00:21] wakes up
+[1518-03-28 23:59] Guard #947 begins shift
+[1518-07-29 00:35] falls asleep
+[1518-09-09 00:05] falls asleep
+[1518-04-11 00:58] wakes up
+[1518-10-12 00:55] wakes up
+[1518-11-14 00:44] wakes up
+[1518-03-17 00:47] wakes up
+[1518-03-29 00:13] falls asleep
+[1518-06-04 00:40] falls asleep
+[1518-11-16 00:14] falls asleep
+[1518-05-11 00:04] Guard #1459 begins shift
+[1518-06-03 00:11] falls asleep
+[1518-10-22 00:58] wakes up
+[1518-04-15 00:57] falls asleep
+[1518-07-12 00:59] wakes up
+[1518-05-21 00:31] wakes up
+[1518-06-27 00:09] falls asleep
+[1518-08-07 00:41] wakes up
+[1518-10-22 00:11] falls asleep
+[1518-09-02 00:43] falls asleep
+[1518-05-31 00:28] falls asleep
+[1518-05-25 00:07] falls asleep
+[1518-07-25 00:13] wakes up
+[1518-06-13 00:35] wakes up
+[1518-08-17 00:40] falls asleep
+[1518-08-02 00:58] wakes up
+[1518-03-26 00:23] falls asleep
+[1518-11-04 00:59] wakes up
+[1518-03-28 00:38] falls asleep
+[1518-10-29 23:57] Guard #113 begins shift
+[1518-09-11 23:59] Guard #2647 begins shift
+[1518-03-09 00:48] falls asleep
+[1518-08-18 00:53] wakes up
+[1518-09-02 00:46] wakes up
+[1518-06-18 00:02] Guard #739 begins shift
+[1518-10-22 00:00] Guard #1811 begins shift
+[1518-09-23 00:27] wakes up
+[1518-08-31 00:38] falls asleep
+[1518-09-25 00:39] falls asleep
+[1518-08-08 00:03] Guard #2647 begins shift
+[1518-09-14 00:23] falls asleep
+[1518-08-21 00:04] Guard #877 begins shift
+[1518-10-09 00:31] wakes up
+[1518-06-20 00:51] wakes up
+[1518-06-06 00:17] falls asleep
+[1518-08-10 00:17] falls asleep
+[1518-05-08 00:57] wakes up
+[1518-11-10 00:06] falls asleep
+[1518-05-30 23:58] Guard #1559 begins shift
+[1518-10-12 00:44] falls asleep
+[1518-09-08 00:53] wakes up
+[1518-04-08 00:28] falls asleep
+[1518-08-17 00:52] wakes up
+[1518-05-02 00:57] falls asleep
+[1518-05-06 00:56] wakes up
+[1518-03-23 00:00] Guard #1811 begins shift
+[1518-04-27 00:10] falls asleep
+[1518-06-09 00:04] falls asleep
+[1518-08-18 00:10] falls asleep
+[1518-07-25 00:46] falls asleep
+[1518-10-10 00:43] wakes up
+[1518-04-19 00:48] wakes up
+[1518-10-20 00:49] wakes up
+[1518-04-17 00:01] Guard #1237 begins shift
+[1518-05-21 00:06] falls asleep
+[1518-11-15 00:37] wakes up
+[1518-05-04 00:24] wakes up
+[1518-10-04 00:01] Guard #2647 begins shift
+[1518-03-26 00:00] Guard #389 begins shift
+[1518-08-29 00:23] wakes up
+[1518-04-02 00:03] falls asleep
+[1518-05-14 00:12] falls asleep
+[1518-04-14 00:57] wakes up
+[1518-06-01 23:56] Guard #449 begins shift
+[1518-08-11 23:56] Guard #1811 begins shift
+[1518-07-04 00:01] Guard #3271 begins shift
+[1518-07-22 00:38] falls asleep
+[1518-11-13 23:58] Guard #2647 begins shift
+[1518-05-07 00:59] wakes up
+[1518-06-22 00:26] falls asleep
+[1518-08-28 00:01] Guard #3067 begins shift
+[1518-10-31 00:03] Guard #113 begins shift
+[1518-06-24 00:48] wakes up
+[1518-03-18 00:28] falls asleep
+[1518-03-16 00:13] falls asleep
+[1518-04-27 00:57] falls asleep
+[1518-07-14 00:24] wakes up
+[1518-11-18 00:59] wakes up
+[1518-05-01 00:00] Guard #739 begins shift
+[1518-11-08 23:56] Guard #3209 begins shift
+[1518-06-20 00:36] falls asleep
+[1518-09-21 00:20] falls asleep
+[1518-05-28 00:21] wakes up
+[1518-03-05 00:23] falls asleep
+[1518-03-30 00:38] wakes up
+[1518-07-12 00:56] falls asleep
+[1518-04-03 00:25] wakes up
+[1518-03-21 00:58] wakes up
+[1518-08-11 00:17] falls asleep
+[1518-08-12 23:59] Guard #947 begins shift
+[1518-04-29 23:53] Guard #947 begins shift
+[1518-05-10 00:03] Guard #3209 begins shift
+[1518-03-04 00:38] wakes up
+[1518-05-14 00:03] Guard #947 begins shift
+[1518-03-22 00:57] wakes up
+[1518-07-15 00:37] falls asleep
+[1518-06-11 00:48] wakes up
+[1518-04-14 00:01] Guard #557 begins shift
+[1518-07-24 00:49] wakes up
+[1518-09-01 00:56] wakes up
+[1518-08-26 00:59] wakes up
+[1518-08-25 00:15] falls asleep
+[1518-07-06 00:04] falls asleep
+[1518-07-03 00:03] Guard #557 begins shift
+[1518-10-20 00:45] falls asleep
+[1518-10-18 00:53] falls asleep
+[1518-06-19 00:53] wakes up
+[1518-03-27 00:51] falls asleep
+[1518-07-11 00:43] falls asleep
+[1518-05-03 00:55] falls asleep
+[1518-09-21 00:49] falls asleep
+[1518-09-20 00:54] wakes up
+[1518-06-01 00:04] falls asleep
+[1518-05-13 00:37] wakes up
+[1518-06-27 00:46] wakes up
+[1518-04-03 00:01] Guard #601 begins shift
+[1518-03-13 00:55] falls asleep
+[1518-10-10 00:13] falls asleep
+[1518-10-31 00:21] falls asleep
+[1518-03-14 00:54] falls asleep
+[1518-04-06 00:02] Guard #1237 begins shift
+[1518-10-15 00:48] wakes up
+[1518-03-27 00:02] Guard #1559 begins shift
+[1518-10-12 00:14] falls asleep
+[1518-07-11 00:25] falls asleep
+[1518-03-04 00:43] falls asleep
+[1518-04-16 00:53] falls asleep
+[1518-06-11 00:54] falls asleep
+[1518-06-16 00:15] falls asleep
+[1518-10-18 00:46] falls asleep
+[1518-07-24 00:02] Guard #389 begins shift
+[1518-04-04 00:26] wakes up
+[1518-04-07 00:21] falls asleep
+[1518-04-12 23:56] Guard #2647 begins shift
+[1518-07-18 00:49] wakes up
+[1518-05-07 00:04] falls asleep
+[1518-10-06 00:04] Guard #947 begins shift
+[1518-09-18 00:43] wakes up
+[1518-04-29 00:33] wakes up
+[1518-07-29 00:57] falls asleep
+[1518-08-27 00:42] wakes up
+[1518-03-16 23:46] Guard #739 begins shift
+[1518-05-20 00:23] falls asleep
+[1518-07-27 00:09] falls asleep
+[1518-08-18 00:37] falls asleep
+[1518-06-26 00:01] Guard #1307 begins shift
+[1518-09-30 00:20] falls asleep
+[1518-04-11 00:44] falls asleep
+[1518-04-09 00:12] falls asleep
+[1518-03-31 00:03] Guard #1559 begins shift
+[1518-06-08 00:00] Guard #449 begins shift
+[1518-11-07 00:46] wakes up
+[1518-04-11 00:04] Guard #409 begins shift
+[1518-03-04 00:56] wakes up
+[1518-07-24 00:47] falls asleep
+[1518-08-25 00:21] wakes up
+[1518-05-24 00:06] falls asleep
+[1518-05-08 00:52] falls asleep
+[1518-08-29 23:57] Guard #3067 begins shift
+[1518-05-18 00:00] falls asleep
+[1518-08-19 23:59] Guard #1459 begins shift
+[1518-05-31 00:58] wakes up
+[1518-06-13 00:00] Guard #947 begins shift
+[1518-10-28 00:48] falls asleep
+[1518-05-20 23:58] Guard #877 begins shift
+[1518-08-20 00:28] falls asleep
+[1518-06-17 00:12] falls asleep
+[1518-08-19 00:51] falls asleep
+[1518-03-03 23:48] Guard #557 begins shift
+[1518-10-28 00:30] falls asleep
+[1518-03-30 00:11] falls asleep
+[1518-06-07 00:53] wakes up
+[1518-07-22 00:01] Guard #557 begins shift
+[1518-11-11 00:58] wakes up
+[1518-08-27 00:00] Guard #3067 begins shift
+[1518-06-06 00:19] wakes up
+[1518-10-24 00:59] wakes up
+[1518-11-03 00:26] falls asleep
+[1518-08-19 00:41] wakes up
+[1518-03-19 00:33] falls asleep
+[1518-10-02 00:53] wakes up
+[1518-07-31 23:58] Guard #1723 begins shift
+[1518-08-23 00:53] wakes up
+[1518-03-13 00:59] wakes up
+[1518-10-20 23:59] Guard #449 begins shift
+[1518-05-12 00:09] falls asleep
+[1518-05-17 23:54] Guard #1811 begins shift
+[1518-06-25 00:53] wakes up
+[1518-06-17 00:55] wakes up
+[1518-05-09 00:24] falls asleep
+[1518-08-14 00:01] Guard #739 begins shift
+[1518-03-20 00:06] falls asleep
+[1518-11-20 00:28] falls asleep
+[1518-04-15 00:58] wakes up
+[1518-05-22 00:36] wakes up
+[1518-04-12 00:04] Guard #877 begins shift
+[1518-06-04 23:52] Guard #877 begins shift
+[1518-10-09 00:07] falls asleep
+[1518-06-05 00:15] falls asleep
+[1518-06-28 00:34] wakes up
+[1518-11-13 00:37] wakes up
+[1518-09-24 00:48] wakes up
+[1518-05-15 00:02] Guard #557 begins shift
+[1518-05-27 00:21] falls asleep
+[1518-11-12 00:34] wakes up
+[1518-06-06 00:51] falls asleep
+[1518-11-21 00:43] wakes up
+[1518-09-01 00:28] falls asleep
+[1518-10-13 00:00] Guard #947 begins shift
+[1518-11-20 00:46] wakes up
+[1518-05-22 00:01] Guard #1559 begins shift
+[1518-04-05 00:07] falls asleep
+[1518-06-11 23:56] Guard #3209 begins shift
+[1518-07-11 00:51] wakes up
+[1518-08-30 00:17] falls asleep
+[1518-05-12 23:57] Guard #3271 begins shift
+[1518-03-15 00:24] falls asleep
+[1518-04-26 23:59] Guard #3067 begins shift
+[1518-03-09 00:06] falls asleep
+[1518-03-09 00:57] wakes up
+[1518-03-08 00:58] wakes up
+[1518-04-13 00:22] falls asleep
+[1518-04-14 23:46] Guard #1033 begins shift
+[1518-07-28 00:54] falls asleep
+[1518-09-20 00:00] Guard #3067 begins shift
+[1518-05-09 00:43] wakes up
+[1518-11-01 00:03] Guard #3067 begins shift
+[1518-05-12 00:55] wakes up
+[1518-03-08 00:09] falls asleep
+[1518-03-10 00:40] wakes up
+[1518-03-28 00:00] Guard #1459 begins shift
+[1518-10-14 00:34] falls asleep
+[1518-09-22 00:26] falls asleep
+[1518-10-30 00:26] falls asleep
+[1518-09-12 00:07] falls asleep
+[1518-03-26 00:58] wakes up
+[1518-07-20 00:20] falls asleep
+[1518-06-28 00:25] falls asleep
+[1518-09-12 00:24] wakes up
+[1518-05-22 00:13] falls asleep
+[1518-08-13 00:42] wakes up
+[1518-08-22 00:04] falls asleep
+[1518-07-28 23:59] Guard #1559 begins shift
+[1518-08-24 23:59] Guard #2647 begins shift
+[1518-10-24 00:05] falls asleep
+[1518-06-22 00:47] wakes up
+[1518-10-26 00:35] falls asleep
+[1518-08-10 00:58] wakes up
+[1518-03-14 00:57] wakes up
+[1518-07-09 00:32] falls asleep
+[1518-04-28 00:55] falls asleep
+[1518-10-13 00:41] wakes up
+[1518-07-02 00:17] falls asleep
+[1518-04-17 00:58] wakes up
+[1518-05-22 00:58] wakes up
+[1518-09-01 00:48] wakes up
+[1518-04-01 00:48] falls asleep
+[1518-07-01 00:00] Guard #557 begins shift
+[1518-04-18 00:40] falls asleep
+[1518-03-13 23:57] Guard #449 begins shift
+[1518-04-08 00:00] Guard #877 begins shift
+[1518-09-16 23:57] Guard #1459 begins shift
+[1518-11-06 00:57] wakes up
+[1518-07-19 23:56] Guard #1459 begins shift
+[1518-03-07 00:42] falls asleep
+[1518-06-10 00:02] Guard #1559 begins shift
+[1518-06-20 00:25] wakes up
+[1518-04-08 00:44] falls asleep
+[1518-06-22 00:01] Guard #113 begins shift
+[1518-07-08 23:46] Guard #1811 begins shift
+[1518-07-23 00:03] falls asleep
+[1518-04-23 00:31] falls asleep
+[1518-08-20 00:58] wakes up
+[1518-09-30 23:57] Guard #3217 begins shift
+[1518-10-28 00:00] Guard #449 begins shift
+[1518-06-02 00:30] falls asleep
+[1518-09-04 00:36] falls asleep
+[1518-07-24 00:56] falls asleep
+[1518-04-16 00:04] Guard #601 begins shift
+[1518-05-20 00:38] wakes up
+[1518-10-29 00:33] falls asleep
+[1518-07-17 00:42] wakes up
+[1518-04-07 00:01] Guard #449 begins shift
+[1518-08-29 00:54] wakes up
+[1518-04-08 00:54] wakes up
+[1518-03-12 00:32] falls asleep
+[1518-05-06 00:43] wakes up
+[1518-03-05 00:00] Guard #3271 begins shift
+[1518-07-30 00:04] Guard #389 begins shift
+[1518-07-26 00:00] falls asleep
+[1518-10-17 00:23] falls asleep
+[1518-09-06 23:53] Guard #389 begins shift
+[1518-03-08 00:56] falls asleep
+[1518-09-13 00:55] wakes up
+[1518-07-20 00:31] wakes up
+[1518-10-14 00:02] Guard #557 begins shift
+[1518-05-26 00:01] Guard #1811 begins shift
+[1518-05-29 00:29] wakes up
+[1518-07-08 00:57] falls asleep
+[1518-07-10 00:21] falls asleep
+[1518-08-24 00:50] wakes up
+[1518-03-09 00:09] wakes up
+[1518-08-16 00:22] falls asleep
+[1518-05-01 00:52] wakes up
+[1518-06-01 00:25] falls asleep
+[1518-07-01 00:26] wakes up
+[1518-09-08 23:52] Guard #389 begins shift
+[1518-09-17 00:35] falls asleep
+[1518-05-30 00:58] wakes up
+[1518-11-11 00:54] wakes up
+[1518-04-30 00:37] wakes up
+[1518-05-06 23:54] Guard #1033 begins shift
+[1518-11-08 00:25] falls asleep
+[1518-11-15 23:58] Guard #3217 begins shift
+[1518-11-01 00:14] falls asleep
+[1518-10-08 00:57] wakes up
+[1518-08-18 00:56] falls asleep
+[1518-11-10 23:57] Guard #2647 begins shift
+[1518-03-21 23:57] Guard #389 begins shift
+[1518-09-22 23:59] Guard #3209 begins shift
+[1518-08-24 00:58] wakes up
+[1518-10-19 23:57] Guard #389 begins shift
+[1518-09-07 23:48] Guard #3209 begins shift
+[1518-08-10 23:57] Guard #1033 begins shift
+[1518-03-13 00:03] Guard #3271 begins shift
+[1518-03-19 00:37] wakes up
+[1518-06-18 23:59] Guard #877 begins shift
+[1518-10-04 00:51] falls asleep
+[1518-09-28 00:42] falls asleep
+[1518-05-06 00:00] Guard #1459 begins shift
+[1518-05-03 00:26] wakes up
+[1518-06-26 00:55] wakes up
+[1518-09-15 00:59] wakes up
+[1518-07-22 00:35] wakes up
+[1518-09-03 00:51] wakes up
+[1518-07-22 00:58] wakes up
+[1518-04-29 00:15] falls asleep
+[1518-10-29 00:58] wakes up
+[1518-07-27 00:46] falls asleep
+[1518-07-29 00:54] wakes up
+[1518-11-23 00:54] wakes up
+[1518-04-25 23:48] Guard #877 begins shift
+[1518-08-16 23:57] Guard #1559 begins shift
+[1518-09-25 00:47] falls asleep
+[1518-03-06 00:18] wakes up
+[1518-10-18 00:00] falls asleep
+[1518-10-01 00:48] wakes up
+[1518-04-12 00:59] wakes up
+[1518-11-13 00:50] falls asleep
+[1518-09-10 23:58] Guard #3209 begins shift
+[1518-09-27 00:00] Guard #409 begins shift
+[1518-09-21 23:51] Guard #3209 begins shift
+[1518-11-03 00:11] falls asleep
+[1518-11-18 00:06] falls asleep
+[1518-03-06 00:56] falls asleep
+[1518-07-14 00:17] falls asleep
+[1518-08-05 00:40] falls asleep
+[1518-04-23 00:43] falls asleep
+[1518-09-18 00:00] falls asleep
+[1518-08-02 23:56] Guard #2647 begins shift
+[1518-09-22 00:34] wakes up
+[1518-06-19 00:08] falls asleep
+[1518-06-01 00:41] wakes up
+[1518-09-08 00:11] wakes up
+[1518-04-17 00:54] falls asleep
+[1518-05-27 00:02] Guard #3271 begins shift
+[1518-08-07 00:53] wakes up
+[1518-07-20 00:39] falls asleep
+[1518-11-07 23:58] Guard #449 begins shift
+[1518-09-24 23:57] Guard #1459 begins shift
+[1518-04-28 00:57] wakes up
+[1518-08-28 00:53] wakes up
+[1518-04-16 00:29] falls asleep
+[1518-07-12 00:42] wakes up
+[1518-06-22 23:56] Guard #3067 begins shift
+[1518-03-20 00:46] wakes up
+[1518-05-07 23:50] Guard #409 begins shift
+[1518-08-25 00:48] wakes up
+[1518-04-06 00:56] falls asleep
+[1518-09-03 00:06] falls asleep
+[1518-09-10 00:01] falls asleep
+[1518-07-17 00:11] falls asleep
+[1518-10-23 00:49] wakes up
+[1518-05-30 00:03] falls asleep
+[1518-10-12 00:51] falls asleep
+[1518-11-17 00:00] Guard #1307 begins shift
+[1518-03-23 00:28] wakes up
+[1518-08-02 00:54] falls asleep
+[1518-08-16 00:53] wakes up
+[1518-06-09 00:43] wakes up
+[1518-04-23 00:50] wakes up
+[1518-11-02 00:51] wakes up
+[1518-08-25 00:46] falls asleep
+[1518-06-27 00:36] wakes up
+[1518-04-08 23:57] Guard #1559 begins shift
+[1518-07-09 00:58] wakes up
+[1518-10-28 23:56] Guard #449 begins shift
+[1518-04-02 00:53] wakes up
+[1518-05-17 00:45] falls asleep
+[1518-03-15 00:04] Guard #601 begins shift
+[1518-03-17 00:15] wakes up
+[1518-05-05 00:59] wakes up
+[1518-05-25 00:03] wakes up
+[1518-10-18 23:57] Guard #1559 begins shift
+[1518-10-21 00:27] falls asleep
+[1518-05-12 00:40] wakes up
+[1518-04-06 00:58] wakes up
+[1518-05-23 00:20] falls asleep
+[1518-07-16 23:56] Guard #1459 begins shift
+[1518-06-12 00:51] wakes up
+[1518-04-19 00:34] falls asleep
+[1518-06-14 00:09] falls asleep
+[1518-08-08 00:19] falls asleep
+[1518-09-04 00:02] falls asleep
+[1518-05-23 00:57] wakes up
+[1518-03-27 00:17] falls asleep
+[1518-04-15 00:28] falls asleep
+[1518-09-23 00:30] falls asleep
+[1518-10-08 00:44] wakes up
+[1518-08-29 00:29] falls asleep
+[1518-08-03 00:52] falls asleep
+[1518-10-24 00:45] wakes up
+[1518-05-12 00:45] falls asleep
+[1518-09-12 00:29] falls asleep
+[1518-04-16 00:59] wakes up
+[1518-07-11 00:31] wakes up
+[1518-07-04 00:39] wakes up
+[1518-05-16 00:44] wakes up
+[1518-06-21 00:45] wakes up
+[1518-07-26 23:58] Guard #3209 begins shift
+[1518-05-08 23:58] Guard #877 begins shift
+[1518-11-07 00:20] falls asleep
+[1518-08-26 00:04] Guard #389 begins shift
+[1518-03-11 00:16] falls asleep
+[1518-11-17 00:20] falls asleep
+[1518-09-10 00:49] wakes up
+[1518-05-10 00:36] falls asleep
+[1518-05-16 00:55] wakes up
+[1518-08-04 00:01] Guard #409 begins shift
+[1518-04-26 00:45] wakes up
+[1518-09-07 00:46] wakes up
+[1518-10-21 00:47] wakes up
+[1518-05-15 00:46] wakes up
+[1518-08-21 00:50] wakes up
+[1518-08-08 00:58] wakes up
+[1518-08-26 00:57] falls asleep
+[1518-07-02 00:51] wakes up
+[1518-03-25 00:16] falls asleep
+[1518-08-11 00:59] wakes up
+[1518-04-19 00:58] wakes up
+[1518-10-15 00:56] falls asleep
+[1518-06-15 00:14] falls asleep
+[1518-04-03 00:42] wakes up
+[1518-11-14 00:18] falls asleep
+[1518-05-12 00:02] Guard #947 begins shift
+[1518-04-15 00:05] falls asleep
+[1518-04-23 00:39] wakes up
+[1518-07-22 00:19] falls asleep
+[1518-07-31 00:44] wakes up
+[1518-10-27 00:43] wakes up
+[1518-09-22 00:03] falls asleep
+[1518-03-07 00:02] Guard #3067 begins shift
+[1518-03-03 00:55] wakes up
+[1518-06-02 00:56] wakes up
+[1518-03-04 00:23] wakes up
+[1518-08-06 00:37] falls asleep
+[1518-06-23 23:50] Guard #1559 begins shift
+[1518-09-27 00:50] wakes up
+[1518-07-08 00:19] falls asleep
+[1518-05-09 00:52] wakes up
+[1518-03-06 00:02] falls asleep
+[1518-06-05 00:01] falls asleep
+[1518-05-03 00:47] wakes up
+[1518-05-29 00:41] falls asleep
+[1518-10-25 23:58] Guard #947 begins shift
+[1518-10-14 23:59] Guard #3209 begins shift
+[1518-03-04 00:02] falls asleep
+[1518-07-28 00:03] Guard #3217 begins shift
+[1518-09-12 00:09] wakes up
+[1518-03-09 00:35] wakes up
+[1518-10-27 00:00] Guard #739 begins shift
+[1518-07-29 00:59] wakes up
+[1518-11-10 00:34] wakes up
+[1518-05-25 00:02] falls asleep
+[1518-03-10 00:30] falls asleep
+[1518-07-08 00:48] wakes up
+[1518-05-19 23:57] Guard #3217 begins shift
+[1518-03-31 00:40] wakes up
+[1518-08-02 00:28] falls asleep
+[1518-11-11 00:57] falls asleep
+[1518-06-27 00:45] falls asleep
+[1518-07-05 23:53] Guard #1559 begins shift
+[1518-10-02 00:17] falls asleep
+[1518-06-13 00:45] falls asleep
+[1518-10-04 00:18] falls asleep
+[1518-06-03 00:59] wakes up
+[1518-06-11 00:57] wakes up
+[1518-04-04 00:02] Guard #947 begins shift
+[1518-04-24 00:45] falls asleep
+[1518-03-20 00:00] Guard #1307 begins shift
+[1518-11-16 00:58] wakes up
+[1518-05-01 23:58] Guard #389 begins shift
+[1518-08-06 00:00] Guard #1559 begins shift
+[1518-03-05 23:49] Guard #113 begins shift
+[1518-06-23 00:56] wakes up
+[1518-09-28 00:48] wakes up
+[1518-07-19 00:49] wakes up
+[1518-07-08 00:58] wakes up
+[1518-04-03 00:41] falls asleep
+[1518-09-14 00:57] wakes up
+[1518-07-25 00:05] falls asleep
+[1518-11-12 23:57] Guard #1811 begins shift
+[1518-06-10 00:29] falls asleep
+[1518-08-21 00:58] wakes up
+[1518-03-17 00:43] falls asleep
+[1518-03-06 00:59] wakes up
+[1518-08-06 00:44] wakes up
+[1518-07-04 23:56] Guard #2389 begins shift
+[1518-06-21 00:03] falls asleep
+[1518-04-10 00:27] falls asleep
+[1518-03-30 00:59] wakes up
+[1518-03-31 23:57] Guard #449 begins shift
+[1518-09-08 00:01] falls asleep
+[1518-04-10 00:58] wakes up
+[1518-05-30 00:45] falls asleep
+[1518-09-26 00:51] falls asleep
+[1518-09-20 00:16] falls asleep
+[1518-05-08 00:05] falls asleep
+[1518-09-13 00:23] falls asleep
+[1518-09-12 00:23] falls asleep
+[1518-03-31 00:39] falls asleep
+[1518-06-08 00:40] falls asleep
+[1518-08-23 23:59] Guard #409 begins shift
+[1518-09-03 00:35] falls asleep
+[1518-06-04 00:00] Guard #1237 begins shift
+[1518-11-05 00:01] Guard #3209 begins shift
+[1518-07-21 00:36] falls asleep
+[1518-10-11 23:59] Guard #601 begins shift
+[1518-11-19 00:59] wakes up
+[1518-11-17 23:57] Guard #1559 begins shift
+[1518-06-07 00:04] Guard #3209 begins shift
+[1518-10-15 00:21] falls asleep
+[1518-04-07 00:58] wakes up
+[1518-07-09 00:19] wakes up
+[1518-08-05 00:51] wakes up
+[1518-05-01 00:22] wakes up
+[1518-03-07 00:59] wakes up
+[1518-08-12 00:33] wakes up
+[1518-05-03 00:18] falls asleep
+[1518-03-10 00:04] Guard #3271 begins shift
+[1518-10-31 00:55] wakes up
+[1518-07-03 00:48] falls asleep
+[1518-05-31 23:52] Guard #3271 begins shift
+[1518-05-23 00:37] wakes up
+[1518-06-13 00:59] wakes up
+[1518-11-06 00:29] falls asleep
+[1518-10-27 00:09] falls asleep
+[1518-05-07 00:50] falls asleep
+[1518-06-28 23:53] Guard #1459 begins shift
+[1518-04-04 00:37] falls asleep
+[1518-10-09 23:56] Guard #3209 begins shift
+[1518-06-29 00:02] falls asleep
+[1518-09-16 00:56] wakes up
+[1518-05-08 00:31] wakes up
+[1518-10-08 00:20] falls asleep
+[1518-04-21 00:58] wakes up
+[1518-03-09 00:56] falls asleep
+[1518-06-13 23:58] Guard #1033 begins shift
+[1518-07-22 00:42] wakes up
+[1518-05-28 00:11] falls asleep
+[1518-06-17 00:00] Guard #3271 begins shift
+[1518-09-27 00:56] falls asleep
+[1518-04-18 00:00] Guard #947 begins shift
+[1518-09-19 00:04] Guard #3209 begins shift
+[1518-11-18 00:49] falls asleep
+[1518-08-25 00:42] wakes up
+[1518-04-20 00:56] wakes up
+[1518-08-22 00:47] wakes up
+[1518-10-07 00:59] wakes up
+[1518-04-18 23:59] Guard #389 begins shift
+[1518-07-16 00:23] falls asleep
+[1518-07-30 00:17] falls asleep
+[1518-04-24 00:03] Guard #877 begins shift
+[1518-05-06 00:38] falls asleep
+[1518-05-28 00:44] falls asleep
+[1518-05-02 23:56] Guard #557 begins shift
+[1518-11-17 00:47] falls asleep
+[1518-06-18 00:44] falls asleep
+[1518-11-04 00:14] wakes up
+[1518-06-16 00:30] wakes up
+[1518-11-02 00:22] wakes up
+[1518-04-22 23:57] Guard #601 begins shift
+[1518-06-20 23:50] Guard #3067 begins shift
+[1518-07-28 00:06] falls asleep
+[1518-08-25 00:28] falls asleep
+[1518-11-06 00:47] falls asleep
+[1518-05-16 00:49] falls asleep
+[1518-09-15 00:40] falls asleep
+[1518-09-25 00:44] wakes up
+[1518-06-04 00:58] wakes up
+[1518-03-08 00:50] wakes up
+[1518-10-30 00:58] wakes up
+[1518-05-01 00:25] falls asleep
+[1518-11-13 00:51] wakes up
+[1518-10-06 00:54] wakes up
+[1518-04-28 00:51] wakes up
+[1518-04-24 00:33] wakes up
+[1518-03-25 00:51] wakes up
+[1518-11-02 23:58] Guard #877 begins shift
+[1518-07-12 00:00] Guard #1459 begins shift
+[1518-09-12 00:45] wakes up
+[1518-11-11 00:47] falls asleep
+[1518-10-08 23:57] Guard #947 begins shift
+[1518-06-08 00:59] wakes up
+[1518-07-10 00:04] Guard #3217 begins shift
+[1518-09-03 23:50] Guard #1459 begins shift
+[1518-09-01 23:50] Guard #3271 begins shift
+[1518-11-19 23:56] Guard #113 begins shift
+[1518-04-22 00:00] Guard #3217 begins shift
+[1518-07-20 23:58] Guard #877 begins shift
+[1518-09-28 00:03] Guard #3217 begins shift
+[1518-03-04 00:18] falls asleep
+[1518-09-03 00:03] Guard #1307 begins shift
+[1518-09-14 00:48] falls asleep
+[1518-09-02 00:49] falls asleep
+[1518-03-24 00:46] wakes up
+[1518-07-24 00:59] wakes up
+[1518-09-01 00:02] Guard #449 begins shift
+[1518-04-25 00:24] falls asleep
+[1518-06-11 00:28] falls asleep
+[1518-07-09 00:49] falls asleep
+[1518-08-31 00:02] Guard #409 begins shift
+[1518-08-05 00:02] Guard #389 begins shift
+[1518-08-22 00:58] wakes up
+[1518-09-29 00:52] wakes up
+[1518-09-07 00:01] falls asleep
+[1518-10-19 00:15] falls asleep
+[1518-07-18 00:39] falls asleep
+[1518-07-06 23:58] Guard #113 begins shift
+[1518-11-10 00:04] Guard #1033 begins shift
+[1518-08-15 00:01] Guard #1559 begins shift
+[1518-04-12 00:13] falls asleep
+[1518-06-05 00:56] wakes up
+[1518-10-17 00:54] falls asleep
+[1518-10-10 23:58] Guard #1459 begins shift
+[1518-08-13 00:14] falls asleep
+[1518-10-16 00:02] Guard #2389 begins shift
+[1518-07-11 00:01] Guard #557 begins shift
+[1518-10-02 00:42] falls asleep
+[1518-07-15 23:57] Guard #449 begins shift
+[1518-03-07 00:45] wakes up
+[1518-11-19 00:02] Guard #389 begins shift
+[1518-11-03 00:51] wakes up
+[1518-10-22 23:59] Guard #1459 begins shift
+[1518-07-08 00:02] Guard #3271 begins shift
+[1518-09-16 00:18] wakes up
+[1518-05-05 00:00] falls asleep
+[1518-09-15 00:01] Guard #2647 begins shift
+[1518-05-19 00:46] falls asleep
+[1518-10-17 00:48] wakes up
+[1518-03-07 00:57] falls asleep
+[1518-09-11 00:52] wakes up
+[1518-10-13 00:53] falls asleep
+[1518-07-13 00:43] falls asleep
+[1518-06-26 00:30] falls asleep
+[1518-07-28 00:59] wakes up
+[1518-08-12 00:15] falls asleep
+[1518-06-25 00:21] falls asleep
+[1518-05-26 00:38] falls asleep
+[1518-07-12 23:59] Guard #1811 begins shift
+[1518-05-28 00:47] wakes up
+[1518-10-02 23:56] Guard #1307 begins shift
+[1518-09-22 00:47] wakes up
+[1518-05-07 00:35] wakes up
+[1518-08-09 00:17] falls asleep
+[1518-10-30 00:42] falls asleep
+[1518-04-04 00:18] falls asleep
+[1518-03-22 00:44] falls asleep
+[1518-06-13 00:57] falls asleep
+[1518-05-02 00:29] falls asleep
+[1518-08-15 00:55] wakes up
+[1518-04-19 00:57] falls asleep
+[1518-04-19 23:59] Guard #947 begins shift
+[1518-05-02 00:46] falls asleep
+[1518-11-15 00:00] Guard #3209 begins shift
+[1518-10-13 00:57] wakes up
+[1518-04-03 00:07] falls asleep
+[1518-08-15 00:20] falls asleep
+[1518-03-13 00:47] wakes up
+[1518-09-19 00:09] falls asleep
+[1518-11-17 00:21] wakes up
+[1518-10-19 00:35] wakes up
+[1518-05-15 00:40] falls asleep
+[1518-11-03 23:48] Guard #1307 begins shift
+[1518-04-10 00:04] Guard #1307 begins shift
+[1518-06-20 00:04] Guard #3217 begins shift
+[1518-05-16 00:04] falls asleep
+[1518-07-19 00:12] falls asleep
+[1518-10-12 00:23] wakes up
+[1518-03-11 00:56] wakes up
+[1518-05-23 00:56] falls asleep
+[1518-06-28 00:32] falls asleep
+[1518-05-11 00:45] wakes up
+[1518-04-09 00:33] falls asleep
+[1518-10-05 00:10] falls asleep
+[1518-06-30 00:37] wakes up
+[1518-07-04 00:06] falls asleep
+[1518-05-02 00:53] wakes up
+[1518-10-06 23:54] Guard #557 begins shift
+[1518-08-23 00:17] falls asleep
+[1518-09-11 00:19] falls asleep
+[1518-03-27 00:58] wakes up
+[1518-09-06 00:01] Guard #1237 begins shift
+[1518-07-06 00:45] wakes up
+[1518-08-04 00:48] wakes up
+[1518-09-19 00:25] falls asleep
+[1518-04-11 00:31] wakes up
+[1518-04-21 00:20] falls asleep
+[1518-10-30 00:57] falls asleep
+[1518-08-03 00:58] wakes up
+[1518-04-27 00:58] wakes up
+[1518-10-15 00:58] wakes up
+[1518-11-23 00:42] falls asleep
+[1518-06-15 00:01] Guard #1559 begins shift
+[1518-04-24 00:49] wakes up
+[1518-09-21 00:31] wakes up
+[1518-05-26 00:41] wakes up
+[1518-07-28 00:51] wakes up
+[1518-11-22 23:58] Guard #2647 begins shift
+[1518-10-28 00:39] wakes up
+[1518-09-14 00:37] wakes up
+[1518-05-15 23:51] Guard #3217 begins shift
+[1518-07-01 00:33] falls asleep
+[1518-03-29 00:44] wakes up
+[1518-05-22 00:51] wakes up
+[1518-10-14 00:54] wakes up
+[1518-07-15 00:45] wakes up
+[1518-06-14 00:27] wakes up
+[1518-07-13 00:55] wakes up
+[1518-09-28 00:54] falls asleep
+[1518-10-18 00:50] wakes up
+[1518-08-26 00:27] falls asleep
+[1518-11-04 00:53] falls asleep
+[1518-05-01 00:10] falls asleep
+[1518-08-02 00:47] wakes up
+[1518-04-30 00:05] falls asleep
+[1518-09-05 00:56] wakes up
+[1518-09-01 00:55] falls asleep
+[1518-06-15 23:56] Guard #1559 begins shift
+[1518-09-09 23:46] Guard #947 begins shift
+[1518-06-06 00:36] falls asleep
+[1518-07-24 23:48] Guard #1237 begins shift
+[1518-07-01 00:08] falls asleep
+[1518-07-12 00:37] falls asleep
+[1518-03-30 00:54] wakes up
+[1518-06-17 00:48] falls asleep
+[1518-11-07 00:03] Guard #1459 begins shift
+[1518-03-28 00:58] wakes up
+[1518-08-03 00:48] wakes up
+[1518-06-09 00:32] falls asleep
+[1518-11-05 00:11] falls asleep
+[1518-11-21 23:52] Guard #409 begins shift
+[1518-11-22 00:04] falls asleep
+[1518-08-22 23:59] Guard #113 begins shift
+[1518-11-06 00:41] wakes up
+[1518-10-03 00:40] falls asleep
+[1518-06-25 00:00] Guard #877 begins shift
+[1518-05-17 00:00] Guard #449 begins shift
+[1518-06-28 00:03] Guard #3271 begins shift
+[1518-09-29 00:03] Guard #2647 begins shift
+[1518-05-21 00:19] wakes up
+[1518-03-30 00:53] falls asleep
+[1518-08-14 00:49] wakes up
+[1518-06-23 00:37] falls asleep
+[1518-07-31 00:00] Guard #3217 begins shift
+[1518-06-09 00:29] wakes up
+[1518-03-11 00:00] Guard #389 begins shift
+[1518-11-11 00:27] wakes up
+[1518-08-21 00:57] falls asleep
+[1518-08-09 23:56] Guard #1811 begins shift
+[1518-04-25 00:04] Guard #2647 begins shift
+[1518-07-09 00:03] falls asleep
+[1518-09-25 23:58] Guard #1033 begins shift
+[1518-07-17 23:58] Guard #409 begins shift
+[1518-05-22 00:47] falls asleep
+[1518-08-30 00:32] wakes up
+[1518-10-14 00:23] wakes up
+[1518-10-17 00:56] wakes up
+[1518-08-12 00:59] wakes up
+[1518-09-21 00:58] wakes up
+[1518-09-22 00:22] wakes up
+[1518-05-29 00:52] wakes up
+[1518-09-05 00:51] falls asleep
+[1518-10-05 00:52] falls asleep
+[1518-03-09 00:29] falls asleep
+[1518-04-09 00:50] wakes up
+[1518-10-04 00:59] wakes up
+[1518-07-27 00:33] wakes up
+[1518-07-13 00:51] falls asleep
+[1518-06-28 00:29] wakes up
+[1518-07-23 00:44] wakes up
+[1518-05-24 00:58] wakes up
+[1518-09-24 00:07] falls asleep
+[1518-08-19 00:55] wakes up
+[1518-04-15 00:53] wakes up
+[1518-08-29 00:04] falls asleep
+[1518-07-21 00:59] wakes up
+[1518-05-03 00:45] falls asleep
+[1518-03-17 00:01] falls asleep
+[1518-03-05 00:51] wakes up
+[1518-07-22 00:46] falls asleep
+[1518-06-30 00:14] falls asleep
+[1518-08-03 00:32] falls asleep
+[1518-11-22 00:08] wakes up
+[1518-05-21 00:58] wakes up
+[1518-03-23 23:46] Guard #3209 begins shift
diff --git a/2018/inputs/5.txt b/2018/inputs/5.txt
new file mode 100644
index 0000000..4d4b703
--- /dev/null
+++ b/2018/inputs/5.txt
@@ -0,0 +1 @@
+XxSsdDIijNnJACszZScZfFhHQyYrRqzdXTtxDEeNnGgOaAcCMcCLlMmogQeEqGgFfGyYuUOIiYyhHlLmUulAUKkudDOoDdaLGRrgoDdDdGgRruUhJLljQqdwWDZzHXxppPTwWCcZzDmfFlLPpdDSsgGtFfTEeTOotyYMOGgkJjKZUuQdNnDhHvVntKkTNqTjJeEVkZzttTYyTDdIiRrqQyYYyxbBXLlKHhvtYyzoKMmiIkaAUvVuvEejoOJUuQoOLlLloOxoOXaAqYYXxyzMmZyoOVhHIiIKfFkiIKAaUukRrKQqASsakLgGlGgLxXhHmcCzZxXMWdUulLJjDwnNYkKFfZzpPVuUvHhbQqIiLRrlEeVvBQJjlLGgjYyJoAalxXuUqgGQLQqOqNJjzZnyOusSUeEFfodcLuUlCcCIiNnGgaADVwWGgvZtTewWENnSszBKkDdeEYytTzpPsSjJpPZkNnIiPpDIideEcCKCcNABbKnpPGgtTNqQGgklLtTuUgGQqaNnnVveEgjJJEejGkKziIAaZmMbopPOgDdGubBIiUZGgzuUoOkMYymvBbVPpmMqQKDdCiDdIcpDjHhIiqQJLlFCcfqxXwWQdsSKkPgdqQDGjcFfCCceEsSkKjJkKKlcuUCsaUuASLAaEekmYqyXxkKYBbeEQuUZzpPeEdeEDKkNnuUQsSTtqufFUNIGginpAXZiJjJjhOWwkKBbogGHsSRNnqQrIzZxXhEeHKlLtTrpPsbBSbBDdlkSsKZXxnwTtWCrRcNfMmPpFzNbBneFfVYyvuUBjJbEzKkZuUkCcKTPptehHfJjEeBbuUioOIIiqQFDdFfvLUVDZaAkKHhEeAaHRrOohVxXHhvNnzQqdoOaAOxsSXogiEeIGvhWwHROoruVtTvaAUDdPpuImMVePCcpEUuFfptFMmfTVvhaAHUuoQwWlLqmMKkONnhNnIisSgGHPwWQVvroDOodgGORqvGgZRrEeMeEkKBbRyYrrzZREepPCcmJSstTNntTjvOoyyxXYzZIiYVUuUunzZBbNWvVPwnNWeVvLnNlpxvVXjJPDdZOozItTiYzRrKkZngGNiIyXiIxYyCcSsEOmMUeEqQAaINCcxXniuOeAamMmMmMRFfoOHhaArMmpPRGgrVVvvIiUudwPpWDuVvspPSbBUzrJmMjjJnNRAamVvfFMaCTTVYyvXxGRrgttkJjYmkKPpMyTtkKHoOhJnNjifFIKTmMuLFftTlwWUtAyYajJyZzmMhHhrRsSHGtTiIgBmEeXxMnNpKkSsDdbBpPPZJjHRrhKQquUkzvQdDVaAWwveEqAaVSAasBbFftQqCcTuuUOVvoUccAaIiCnNCHhXxpPWfybBYOoFwarPptTRRrArRrRusScOoCUMqpPLlfFMmjJHhDdpDOpPoAabBwWdQqfFPDdeCHSHRrhlLszqQZhVvnNodDQqOPVvpcAnNLlfFSoOsiIOoSsJvOoNnVJjxXjkKuEsSEeWbBnNEewpPbBANnakKkKHhMNnrXxjJREyYemoOqQeTbgGBtIWwiIFfHhiCcEKkeHZzhhHRshzkAajlLJKZVvEeCgGdDhHSPpEQqOoescCuUcPYypJaQqFfGgPpAPpeEjZzXxbBNqQfFRPTIRraAFJjsSfibBZztJjrRprlLiIycCBbYKknrvVHNmMneEhSshHGgSbnNgGBqQDwWdUutxXxFfXGNngaYyGgHSshfFrRjAaJAVTKktzMuviJjIVUmbTtgGBzZmMFfwlwWtHhTLfFWYycXxCrEeNsHhSrECceRTJjtyYRrGgrRZsSiIzpjJgGPeEhHWNnwSsZmOoRrMzxSsQqaAzZKtTkWsSyuvVbBVvUYChHOCcoeEciIwZzWlqQLnNpnNmMPwIiTbNnBLaAlJPpSaAsjGTtyYMZzfFmiaOBboAOAalLEejIikKqQSsXxAaJJpzZwBbBbnEearRAmMNDSsdyxqJjlLQHhpSsPEqQeAauUJKkmkKLlMjvVoOPpPpCBbGgoORrtTXuUxfaIwWiAsIKkpPifFSQqZpPAXxazEpKkPtTqQeaAnLdKOokLlDlpNngGcCmhHMrRiIqWwqQVabBARrcCUuviIvpPbBwnNWHONnIioGgOoIiVvAuUaoMrZzRugGUmMmxXMmaANLAalnOhbZBbzMmZzmMuWwnNUJjdDBqQHjJqQaAbBhNdDnzZZztThHeTtDUTtQquaAkCcGgKkjdDJKZzbcCBwWjBacCAYygGiILtTfdDEeLlFkKiQqItkKDAaKkaloOLARraApFfzZtTYkKcJjdDGgDdfFCPpQzZqvVcCgGfTtJjbBCLlAgGacYyFFfyqQYyPVvvCcrRQqVwWkEeFfpPKBcEeCnBbAarRNnNnCcTtNbYyhHGgPOGZzgopHMmNnIdDihyYHhEeLplLPieENnfFXxAavVIJjJLlAavVJjBHqQmMhbiImMbBEejrRQBbjJKkwiIWqKnpYyPVvNbCcZzBrGgRPpiISszZAazZBbzGgZUuyYbBKkoQXxIiTtOolLfFNnUuqjKRLlbBrNnMmkyOoyYWgOozZlLBbYyOojJDaAkKmMtOoXxqQAaTncCBCcaAevVEeMIQqiQqXxsSmEDdWIiwWIiqYyQwhHXJjxxMmXNwWFfnxRrXXtoOTxzZpPrmMsSRpPbefFEkBbKtTMmYyXgGVvWOowRWwreExUuyYFpPfztTGgNoOFfMmnXoEeOBbxRrUuZzxZCczrdDRxMmZzWOowTtJjanfkZzwWoOfFKuoOUFUuHhFfKLlkyHOovVrvVRHhRrSsJTAPiIpjJoSsOQnNqaQxXLlfnNhHnNlLFiIsSqtVvltcPOozSsjJHhLbBlZrLifFIhBbkKHldDsvVcCSMmtTlLBbumMOovVUWyYcCNnRQqrKkwRpmMBUuASsoOqQabAayuUFfEeVvUuTtJjxXmcYyFfCEeUuPzdDZDdpOWwZyVvQqYfWwNnFzWVvwaAARrkKaoiIcCsWFfbQqBGgnNZzyYcjGgJCrkKFfRZFfzZHhzvVUbBumEkaAlLKsEeVvSIiezZhHisSsSeLlEIxXcLlCMFQqfGgmsLlaAMmaACctTAaYySENoODdEeutHhTKFfTtkkgVvWfiIDdLllSSssLbIhHmMeEgRrGiiIufCZzcFUBFMmdDHhqpOoNnWWwKYySseEKkxZKkzXiIdGgzZMmDhyYHsMmIiCcnbHSXxsTTtthRjJhXxJXxjBbUuPQqUTtupLNnVvtTlHjJqQrBJhHHbBkKhyuUYKknNoOcvVTtyYeESsCqQQKkqQqQRrqHmMZfFnNXVvCcXxgGxzmaAMjJvVTtTtRzZjJrPVpPkaAzZnCtTLlTMmtuUAazXJtgGTjRrSsrRqQqWJnQuUjfGHbBRQqhrRHrtTdyAaKkOoSsYQarRxVqkKngQqGpPHfYyPoOvJvVjVrRpMmFcCkwWaAYfQqtDdNMbBmVvqQpSMdDmgGsPEeyHgBbPZDdGgrPsSsGgrRCcSequTtUQoOKkSsfFflPpLFILliWwEkKcCxnNXYeErRyZztTpHhSBbsmMgXxGRrmMReNnEHheGWwgvVgGEzhHRrlHhhRrhHqQHLwtYwQqWbBjJeQqRZzrEfMmKoOXXxxkYObBoqaAQRrCcLlyhNnEOoebNnKrRTaAtuUkbBbBNuAaoOUnbDdGgZzYyKkbBuCXrRxcAaPfFpGFNZznkBboOsSggGiItXxEeTgGGKsSfrRvbcqQCBVbBqWvVbBIiAaRryYTOotHhwMmSqQjaJVJjvcaACrTjJcCSsQqDUTtucCdtIiHhQVxXdDvVkKvLlqPgYdmMDKrRjrRTKktQqOoAawBbDivVIdWnqFBbfZoOzQOoDRrdYLlhHxNhHnGghsSHVUuvsvuUuoOlEefNnFfWwCclLYyYyZzRroOTtFNnhkKiIHKkqMmwWYyMmPGTpIiwWzZTtpPhnNHmToOTttfFYKkPplPpOoLVUBbuRrVfFFJjffSTtsVvJjFcCgCUueEcoQqyYNnqIeEiTtQpCcWtTpPYyycaACYSyYsJiGgrRIGGgDNGgxyuUYXXxhvVHqQnDDsSukKiIEeUeJjmMGgLlGgtTKwWkxXxEeXEHNTtnhSXDbLlBddLlDzZNyYKYDRrXxGgzZdVvSgaAGsWwlbBIWwzZiiIXxLYyuUllLlXxSsvVLVvQqIgOoGeehzwWdDyiICpPIgGNnanNJjWDdwOoiIAicCxXWYEDbBavuUQQqUbBuuiIUHhWzZZzmMwKkqiiIIhYTtyvwPpTtKksSmMnGgDdNRrHhKhxXOXxpIiPzTteEZVWwvRaArCSIixXFfTtQqsclLmMPpCmxmMBbXMQYfYyPCczpPZqvFlLlyHhYHhjlLlLJOkKdsSDXxovMCcmmCcMqQLlVHLlFfhwWADdREerBbpVmlLMJjIiqQvPbeEBqQJjNnvdDVxZzXYVOFTiImkJjKNnDdMkKqQFfUueWwEhHSsxXKkmnVoOrWAawRvglLPpZCcpPYASstTGyLlSsYCcqQeEgIiVvauZzUnZcCzKkNFfTtWstTSWwzZlrRLMmEwWBRrPpbsSCgcWwJcCIAaijCRrmMdBLlrffFFBbdaAkpPKDRPpBwWbuUGgMmpsSPCcQKvVyYwCcSsuIiLlUHHhDTtlLvVkKIidYyhiIXxxXuLlUzwWiITteEmMiINFfnNnZNDnNcGgdDCveEVdjJnYyBbVvhHyYrRwAKkaChHIiMmcCcICcuKkUjNnJyZzYyYoOrRrRWwefFaAHhPpNvfdeEgGdDbFfBbmMJEejAwWaDnNvVdpPRrMrmIBvVbSsiaJjqmCcMQudDfxXPpIihrRkYylLRruRrUaAKoOyYbvVHuuxXUUxGgXSAPpNnKicCXWuUYyweEuaAUlLOgaAGXxtOoTgBbGCczIiZUuXKkXClLeErUVaAvwWlLXcCxnoQPpqFfOecCjJLlEoOzDdZSzZiuUFUuIifbBiISSlLsQoOqEeBqQbrRxXaAIiOojjJJVzqSsrRwWBqQYybQUCeFfclLCspPSEPGgYyfFpGgnNNtTnQqeKkUuMxXvVmRrhQDdCZzcCCUuccoOeEJjxXMmqHDtnNAvVEezfFAaZUuLlDdcIiZzZzCrTtdDRVdDvLsSlTmMGnNfFeEvVqyfaAFQqBbehHELyjFfJGgNyYTtxSsXkKOoSsJjKkQEebsSGQqNnFfYygmMUbBKggOohHWhHXzburReEUyYRroOnNpPBtfRZzrMEemWwFTklLZzZOozSseESYysszZSqHhQRrnNKpPfFDqBCxXcmMgGbQdsSAadDEAoOoOGeObBoLlEgaUDdVvOooOrUaAOouXhHRrdDUHhudDLlPpsVvSxRrUrNBbTtTwWtCyYcqQrRJTtJjWwXxFfHhseEzEemEkKxXtTerRiIHhamaAbcCTtBteETzZINXxniiRrIMYaAyxKkWwzbcCwuUWBMfRruUFVvvVXxmBbCcpfFOoPQcMmMmBbLljJwWVcCSsPpsSvCMoODdYDeEdyPqQplLlFfxXLmJSsVnNvTtIiUuOoFRHRrhwAXxukCcwWfFQuUcgpPGCqWTkYyjWwJKmMAZvVzaBbaQqACmMcnIiNweEWSoOstTBvcCVouqQUkKdzZNqQnHDwnNNnhHuVvJoOcCskKSPpXWVvxyYXwCBPpIibcesSExqbBqmFRxXrhZYCckUAaaXUrlnNLJxXUUvUMmPiQqZkZztTJWwyMmKkSMSaJjNnpPAQfWTtKKkoOBWwbhDDddQAaqHWwBbhrYyRNnAaNRIireEoObBWUuwnoOBbPlLpwyRrYDdTthHNrRnUTEetWwSbBnMmNgHhGsKkdDErRHbBoraAROpvVVvPGEegrRrdDNRrNndLywWYpTtKkPpTILliAatPlDLvVlFsSfKYTcCIxXVvnfFRrWwWwmmMMmMbRrBVvDdRrsSeiIEUpGtVvTCXxcbPpBjbBJBAVvaDqPpcgGCQOoPjJXxpftNXxVvRAaeEKkpPMHhdDbBiImkKKcCsFVvfvVkKSDdQqAafFAaZxXwWNnzlLnMbBmmMqAaQwTKnkMdDdlLzZDCcmuIcCGgzZiWwGRCcrgUiILUAWwaeEXxFfCciXeEfbBlqaAEBbVQqIYyifZzsSFItTDdanEeNsSlLldDoOeEHhMqSsQaAsmRrMjCcJXRrxScCkKJjfvFbBfVvVlXlgGLbBiQiEyzZYyYehtrRTHiIGpOaAokKkGgKTtVvCtUuTfFcCcuUEmMixXITsSwWgExXYBbBvVbaAfJjLdDSsKkDdAaVRrvpPBbZzjJQqSAaNnsyHhsdDzZlLSYbBdxXetTEgGSsYymlauUeYyEfFaNnAALiIXlJjLxjwWPCcoEecCOJjhpwWPbWKFfIizTeEMmlLteEtTRrCcGgrWCcYgGTHhtydNgAaGnDwTiItYWwUhHwLFKksSflWnXxNaABLTtAaMmlPaAheEHpnNOAaSRrCGDdxKkXlKknNIDdiqQqQoOuTJjtUTtXxUUumMtNnTYmMoWWGgwCcYUumMmMPpvnXxnJjjJNNDdXiBbIxVwWTtFfWwLIiSslqLQqNnXxwfFWyYGgDdQevVARryVoKWCcNnwkGgOMmvVwOocCXkKEehHtBhHbICsSciYytTZaAUGgbBuZbBzzsSTDdPpJXxlLNnzZwygpzZwWtTsAaQqvUpiIiIiIPRrgFMmJjWESseEbBewTtfWwrjJYVSanNhHAfFsVvzZbFfzZBhFKgGKoOkcBEeWwoeEObCpnNPpPlEOCczMmGgZoewNnJjUPkKpkPpRrZzAQqaumMqrXtOoTcCNoFfOnNTtnAaPUuEeesSEwWVvpAaeENhbBHnJjNnZvaAAaVQqQqPpgbBGlukAiIaRFpPfrxXaMsBcCaAbBIiPpbOojUutTbhHXcCrZzoOZzRJjmgGMeGgeNnyYmyYdwWDMVklLKrRvVvjJrtTuUWbBUcCuDdlLyoOYyYmMjRrsVcCPpjniSsOoCcgXCcfNnwWFFVvfnWzZkLlgGwWKdDSsGEhHWsAaSZEUXxLlyYMmdDMmrRupPeAaCcWwzwDQqiIqQfVvQHhwWbTobBsSZXUuXxbsSyFtTjGgSkBbnNKGgtWyYEwWevAaEeVMmDdQqOUuiIbBhHqvVQHAgJjGaAjJbBonHwYyUpPnNuJgGjSsTmImMZuFfmPpsSTccCCiIpfiIFPHhTtPpKkUTlwWLtnNSsdRrXxKkAMqQoOrZYywWzOoqQNFfYyjJnNjJZYyvEeVzfjJZzVVvFdDYQqysSfNwkKWrRdTiAWwahHqcCQRrrbTtJNXxnZmmMJjJjgwFmRrRrAaquUKkXTUuDdbtTBkKmMqQlLEeSsGtlTtoOHhSdDKMmsLlPpgjJGvVSoOPpGggGwWhJaASszZaAPpUqeEVacCAfQqiqpPSstEDdxkKaAxXXenleGguflLRDdrqQwWDdVdeEjRrqHhQuAaOoUgBzZAFfajyJjJXxvVvKrNnplGgpPXiIHhxBlHhHtThLNnnNzZbLCYycSdDsCceuzEIielLCcZiUuEqQtTqQiIIioODXxxXdUlLUiIPZhXFfqQzTtZaomMeEvVDBboOdOxXaAWzsRkyYgSqatTAQsOoGCQqcEedDKMNtXxmuUMgdDGpPTgGWwuUmMncCmslCaUuAcLSrMSwAakZzpzZMmeXQlLwLlWAaBqQNnhoOrCcxXLlRMRrKOorQiwWIlOAaoBBbsSTtbqnMmYcChHUYlRkKqQHkaxpPriIoOPpXvhiYyRrqQqQIHUxXjMmmMrRxcnNeAXUpNnPIipoQqOZWweEXQqDvVSsdtOZzogaAaAUqjAaJhFFYykeEKXWwxQJjfFWzGgugGTJXGgKkgpPGSWwSsPiFpMmPvVfIwHhWpelXxLdDqQwWxXiIVrqyYLOfYyFtOoWHhwDJjGgqkZzKPpsyIQqHXxhNniQUuqcCzZzyaJjvVqgGnDVvnGgKkEevVIxXNniVvTndDQhHpPqmpPMqdpdDWwRrPeEiEeOBboZzZZiIVvzzzZhHIDAaMmXxNnQNRrhHtiLsSCDMjJqQmfFPplIiRreEMPKkpNnzZGgPRrQqpBbDdWtHdDqQhzSLlsZMffSsFFmukKbsSQRrqadDXUuxAXYiIyWwpuUgGHpGgAaPHhXxKklLhfFKzZIikPLlxXjJHhtjJTHhNnNnxMfexkKqQsStpEehJjhvVIRrTtkKNvqQVfFAKdvkCuUKkcOJmTtUqQlLtRKkrXjJoOxLKaAhHTttTkYgsSGyBbXxQqpjdjxFfYyXJDFfVvadkSuUmqSshHQqAaBbAaUxXuXxtNnEeaoOyXxYbBkCcgGFNnPhnNHTnNYyoOxXFBuOowWUbCaAthxfFXjJhHHCcYdQvVOkCLlLlcoOEpPGgLleqfwWFQTTtNRluULrntNdyYJDdyYDdaYpPjrvMoOpIitTPaAqQssaUuLlAkKCcSRHcefCSsOoevVrREvVcdwWwWabBADkKgdTIgGiteTtWtbBTwCeEJkIQkKlLMIlLiGgpTiInaAvOkLDvAaFAdDaXzZxwWuUOnzZlLEcCemzZwVvyEePpYWuUbIitOoeETyNndDYOoyiIYmMIoOeFfEVviWyYwUutQqQzQYyYypuQqkKrRLlDrZKkXOLsSeMmrRFfipPJjnfFLfFSLqQCcwMmKkWuUmSarRAsruXpSsPJMmDdPTtpTtpcCcZzCmMVbBlLXxAamMmjuABbauUddfFmMWUiIfEhHEeseETjpPOoHJZruAaUtLrRlgMmodLlyYOoVvuUDdnNSkuUgGwIKKkYyjsPpmJKJjCcFHhfUYyFfeyfRrJmMjFTthqvBfFdocCnFfRcCgGYyBbrRrEqaAsUulLSKMRrOokKRrKkKlLJWIjJiwdDWwcCGgIixGJrRRrAGgaqOogghHGrRKIcEegdJjDGVKWwfFkxQqmeEMCcXIivmMtYyTGuWtTlRyJjYrXxRrZtTFfzLKHhCAacgGuRrAajbpPBTBbtQqrTtOoeEJjXLmMyYeElbBZzlMwIAaOoUuKkiXGghHxWUiVuvVUvvVrwVaEeOghHGEeHhoAwBIUpAagUuuUGfFqQRNnjJhPeEjKkGDdgIZzKpLlaoOKgGALlaFfLDCcLeECOUubBotgGiINnTjJcEBbelIiTlLeEXmAaMxuUtMzZmYyuRrpPOojJcPxIiXEeaAYKkyEeeEBjJwWExfFXejtTJNVqQoOtTfFvRSsrQEjCDdgGcSsgGJXUuxhHlqQthxXkuytTYUKVsIiwWSNPpnBbZHhzFQqflzZMmGgkcOcCGYyEeWwhHDdgANVvNnBbVLeEmMiFpPfLlKksIMRrmUIiKQqkIiZzuTXeExQqSrFqQPpFbByYTuUlMmThHrEFLZzlZnNzfIsdYhJjHWcCRxXEeSueXpPjyYmMnrRNxXrZzmMPpIiiInNRIhHDpPQqdVxXutTUJLYOodrRDxXmlLEgGeMyDVvdikGgbBRriRrdOouvVdXxRvIlLPpwKsSMmHlLhfvVJmMOiRxXjJaAjJrxAaYyEezZDznSssSQqjlsSWwCMAamiIcqKzEzZZzeBbTESsTnqfFprRPZnNGuUmSfFIkQPqQHhjJpqqQQRfyoLLllnPkcKkSXxTtsxXCgPPsSppNnPdAeQqBbvVcZDdOiMmyqJBiIQTklLKPpsbBGgMntTLlNfFTtWwtPsSppzZSjJsnNTAZOxHRrkKvHUutIsEeJjSiBETCctyvVrUrRRAUuXxarNnuIQqYJjwVsSIiZzdTsnmCcQNnTAHhatHhnkKcYDdyCKbByYkGgYywWuuUQLlqxmIZziJJjLAlgGLacXxYyCKwfFxXxXWCchHkKkpPdDgaALlOqUuFfLlcSsqUuPTtEeMWwMnNmJjNnvKkAaiIKhtjJIaAFfrjJQqrRtTRxvVxXWuUPIiTtpAwWeEaKkwlgGLuUIuUjMgGlwWtTFCdDcxXIbdFCcIwEeWjJiCxXTNzZvVdbvVbBBkKCWwFgGfcRAarmuUNRrGgfVbmEeMHhyLlsOefFEQDaAxXXZmMztKqQlLktTYyLlnNrlLVvRTuUPiIHhXuUagGulVvoVeZztbBUuAKTzZtjJkgZxqQXOqQoFrRzaAGgBbPpVsScCMDdpPGgmEeGIWKkrRnNXxwVoOvPpCcbBZziaAEFfEuUeERreYqeEYgyYQBbqGKknNLzOopPCtcCRrAulLhTtuqQnNtTaAFkWdDMmEepPdDJjssfXtTzwaAZiIzYnlLZzvHhbBUpOEXxeyYyYvVIiwWITgjLlJNnXxfFdEeKbBUuZztTRAafFrkPtfFcCTtTdDhHNEzxXZeeurDdRMzZQqmrvVLlRvKkQaApPlLWwLDdEeOoEZtKkTWYSsFfypPbBqnNmnnNNUuMeEGaAgKEekFfEBbGZzvVmMEegKPpkYyzJjRsAaSoqFcCjFxyAajJYRrCYyXIicCXxvqQVEJKqQBbkYpPyjeEhrrRYEeJwpPWlVvLwWRrAzTKzQqxjJPNsSMmYybqQiUXuUhHFyYfbBKCcksSiIxucCvzYGVvjSPpnzYuuUAaUWwYyuEeUFfzFcqSsjYyBbgmqQMWwkKeEdDsyCgCcGWwRrZzIgGiLrVvtYyDXgNfGgPpnNbBDIiqjJQdzZgMJaMJsSGgjVviINuPIZzJCcooOlLqnNQTtOXxrRyTgGkKABbRrUukKrRsdDSGdPEsSepDoceAaEgwWWwhfVvoSsOeEtZiIMkKpPYqQVDoOdvEetTyMmnNjJwVPbytXxjJTyYFTXxtzKzZkbBhIZOnEeYyywWEeYeESUusudDpQqNiInPAlDdkJlOBbaAqQMFfbZzGgTtBieZpPQqEeoQMMhAakSsKHAakKWUuGoOGgKkgoEehHeEQqlLOVvWwPkHNEBOVLpPAamRTtDdrSswWMWwEeqQxRrXeEPLgLQeZyYzERlHhPqmMQOtIvVwaNncJjuUnNzZOqQWRrQqsgGRrSOmCSEOKSHhseHcHhKkCzLXpRrPrIKHhtmQKHnNVxXOMlFdDkcCKTtQVHhyjJUVZNFflLngGgGuUpPkKkrMXxXnerREhbHhpGFyudwvzaAZKkBbALDYpPSHhsjXwqOodDwfFWQWrtWoMmOwKyYiVqQvPpPubHfFUuYcKYyiIqOSsPpovQQSsoEAwWUuvekKueEAAaUuKXxNEeWgGwcbBCKXxhHQAaFQqWmgrUAJjlNAtTanIZbBDdiIzZggTDdnNJjtCtTIpzQqgMFfCcaAmcChiFfUuHhMYBbymMnuMmUqrRFROEeoEeJjhZzahHJjlFYygGAPtmmMnNdDRrZEzOoZaAaFYpHhPzZyAavbBzZPtrFKtJyYjnYyXWwxZzNdDTNOohHFfquzDdZhkKHUCchsSJYQMmDJjuMmCZzbBcoiwWIiIHJjtTtFfSsHxXhTVvIiaUuhAadyOOeEoWDdeXxoOpSsPEZzCcsSipmSLyKksuUSJTonNOXxGVpPczEebQqkKoKOoXdDxKOnaAECcAxXAGgsWwSaZUwWxcCXuKkwehHXxUuUadDAFHORrohfuaMmASsEjcKTDdDdKNgGksYylLsmMnqeXxPxXceEPpCIlLANqQyYEensSTZiImMzSVJBhHBBbBbKktTJIJMmYyGgSsayJYJxkqdDFfQKPpMmWwXjSprRkKDdnIcCbgGBikgUucCGnSCcsfFJLEDKlAagaJjAjrqQRJZzTGlTtjJfFrHWwhRfqRwXxAaPpWcMmZuULZhHzpPmureEjSsJSJjnNnNcoOCOnNdDEeJjBEHwWcCEzwEkhHAPpnNjPpAYykxVlLlLvWwXXPpxGgmMxXOoFfyYPpPpzgGiBuUYgjYyJVvVvtSMYhAJcgGZXemdRCgmXxMFdDpPzZIvQqBYybVxIiXtVPvHxXBGCcuUgbbeERbBPriIWwRYyMEepPmJAawkKaRyoIiOfZGncCrIifqQKkJOojfHbBlLhFyVvPaGgwyYBFXxpPnNuUNnhSsbBlLpPEMmFffFeHPmdDNnMpwWfjpPLyNnqcuWXzOoZtTzZxjJLlUuXxGgQqVEeFBJjoxfFXeLlMmHCcLGbBqvswbnaZoOzCcVvCGXABBbziITmMUutwWKjJfUuuUMwWaAlLiNsSnAaCcEhHmMHhJOoKkjeIrIEUuyFbiaAIWUuwDeEFrRTtFfLoFTtDSsjUuWwWuUcykKTdvBbFyYfVuBSsbUaAdbBDrYBWwbyVNnGNneEgYONnrRIdmVbOxhWhBbuUoOaBAsbhbBvFfVzLlhOLloZzuMmomtTMiSsiZuUoOBkKbPJYyjISsSshHgxXkaAAaKBDdfbBFfFKfuUsYyiqQXxItEeBFdDhHnNyEevHHFPpvVZzLDdlDHhkKnNqgXwWbBZzPJLlKkMJjjJWDdmMWwwKkFDdjSsoEeRzZeBZzNuHhdOoDJdDDWwqIfFiSsXxKxWmMwXqQjJNpjXRMmsnaArJjCcsSpPlLCclXxdpmMmMbBwPpMbBteCcDTeljbfiIGKkbtcVvCTrRfFrnNmrRHTtXxLVFnTtCcCUTKVcCpPVvwWvxXoXxOvaUAagCcTtQzZFcRrAaAxpPxXhHkKJSsugGlgGLbgVvVKkYRrJjlCQqaHKkeEhHIyixUuMmkKqnNczOgyYexbcCBIibBRWkBbKoXDFPcSseaAKkfbBEeAEeHhqQylLCcHhPpEJxXRrSHhUZzzYyTtnNZzEBxmtTtdtTIiDgoORgGuBbDgeksSzbBPsSPWMmITtFfiKkmjUujJlLJMEcsnNNnIwWJYyxWPpSCcsGgCgMbWrRwRrOdDwWHcChGgoIiBDxFfzFAafnuUzmMjJmMgGInNievVEKMmIGgiuwWUhcAaOeGnCcLUulaAXMmxCctKXxkXRrUowVrYyRlLzlpPyYZUojMYyqhkKHzeMmEMdDmrRAJjDdRYlKkPpaREehHxHhtTLjJIilcJjoZzOEIWwrRDdimoOMsSRJCwWMmMmmIiMmMNNnnSNgGThHtnnNmWwvNMOWOdDonjcCcROoOoFPxUPpHhsSuXSvVsMmVvtTJZWGJjDHIkJZzzZoOTNnaCghyYxgZfnNJDdKUNnBPbBplwNeXxbFfcYPRjJrtTpLXxebBEhNnhHzFUEeriXxZZAogGVvzhbBHIECcBbVvZzDMmKgcCDcCdLxDdcCXlwQqjJWVaknNmMdDLJjlIHhLnsSaAJjrrSpbBPwIMZzYeuUUuBHhbwGQqHhZvfFVvVgGsCUuuHhweNRrqipDIidWbBwDddDZYhHlxKfQwUugVLMDdxXfFPpmhiVeWwrlJLlYyvzPpzVfFvZOogmYXpaAPruUAfoPOomFfRXxjtqnfFNOSsoXBXxLlNnaANnbylLxZkRXvgGZziIZyYpmMPxXaAuOoTtVgaAEeGPGgLlzzGgHhSnNsYxtpPTpvxXkHUuoOVjuUJvMmLlbraglLfFqEezWZzuUfFwkhJjBbhgWwewZzWECWREdDmOoJjwWJjxaAXkTQLlqOofCqQetTOgWxXwvVGtAaesSETyFfYxXoxtkKwxXWCcTdKiIkYyDlFEefFyYMPaPpPCcklLXkKnNoOlAdJOSUuYyrRrThHBbqLMxbBhfFOoHCUucmMeXxdDjnuJcCgiInNrfFvVQsSpPAaAmbBMdadRidDYyRrfZzdbBDLlSopPJjXyRiIMCIMojJXxIxeGtiyYKkioldDdDFTbutTUSsKlLmMXxksSLlrJIaKkOoSNnoOUbucyAjeCcXCctTanNnNAWDjJDNndGgVFsCuUcSwWfBpJjxXBbWYyzZvyhUuHYvhHuUftTFCDRSXyYxseEMmnNZQqOYymXxEeyYbRzaIywWxXSsgsSGtaLlNrRDzwWZdAanZzqQpMmJrqPFElTUutJjwzZlwSaAmzZZrRzoSbBsOCpmMPccnNuUOocMYMnNOTtcLlCPpwWyqQeNGgnMmEEPAaKkZRhHrsSjYyJgiIUtLGgTpgTSQGgqZlowWOLzvzkcCrDjIXxkdDKaAEeElIiCTtcIGMmbBVvIjJJeSkuoBPpzZbphHTxXtoGqScBbElLheXxrREeromMORGgyALXxqjkKJnNSDdNnKlLLlkotgLEelPpmSsMqmDdTtVeEvWLFfloOJiIiTtzWwJkiIKrRrRrlLQqOUxsSXxoOlLoOTvbBVBUulLPLlAxIiqQFzZPpDmMdVvoqdDqQNjJnQwlLFfTtWkIZziKfFhgYueEUjJuZlOrRrHhoOxlLOoXpPRooqxXrRQSsOvzZjhHdyYDWwJTYytwWuUXxMbBmAiInNFQqQKtXxRKUuBkgTtGKxoOcCEsctTCPwWpHhbBfiXDpPIiTtdyYFfwWxdnpPqFTPFfpGQZzJetTPUuplLTtwlLtKkaxMiIfMmOoPrLlfFVJFfPCcloOLSsrRejBbSjJsJUuEHLluvVrHAAadiIgIiaAGqTtxDJfoTBbtCcVvbnmMNPpBSsaeUSLhHjSsEvlLVvVjAaLzZYywUDdWNnwcCKkSyYKuULUDdnsRrSrRNuoTtdDSsprRtTTuUPxNCcBbzZrXVMmQqbBkJjMMmmKCTcmwWpPQhHetTjJUucCUHoPpRLlhHrkIWwWRrhbBftzZTmMFPGgnNuVvrFfxXRciqESsYkKyYymPpMeZzucbBSgGwWvVeLlBbzFfhbiILPpxrRrRQqVdGgjJGxXGgmMLlnNJjqnTtNYyvQrxXRZzOVusGCcPmMpgSDdkuoOxcBbChvrSsYfHcChDdFPUzZnNiWeqQvVkcCKEwzZIbIeELlqWDdPtgGjMmPpFfVLlvZzGFfMOmJjIiykcCFfdRrdDDEOTtoDeWwHhdFfDpsSPzZlawWAVvjNEeyHsSRzzJRUurjPpFiWwnfFsoeETbYbBRiIrOoIiOEqQKSwJhHhHEwWncCPpntMmQKkqmccCwvcCcRBcCzNyMmvOoVvjJLYyloOVNnMjGgyAVpPxXqQgrvVxsCbdDBcGQIipPNDdspQNnqPaARrpnsScCTrRXZKsVbBeDkKdZQtTqhpGvVLDidDEnNeydTVcfLlFImWYQZhhawojJjJQORrousSVwfFPenAaAaPpkgGUuKMmAaNpceEVGKkXxXePjTUgLnNlGGgLNnqpNimMvVOtkAlLayYkUuKrRxTBbAatBkKdDknNKkMmnUgOBbooOMmMeEpjvLlSsIqxLlJjZzUKkTtYyAawuUNEJuUjfLkINVuCArRQqkKJZKTRDhkpPIiBtTCvVHAahcLJjaxBbeEBFYSQqxHhdCUlLAmiaAjLlaAJgLlimMITtFfjZYzuDdoPlLIwWaAIipqsxXBAaVvbjJuUGgFXYyadsBbSYXeIYyeEvVijYAQIiOozZcgGBbcvkBLluURVvAdfzWhHwPbRrvVjKkBdrRDguHkKoOAZVPUDdIYrTLlQPpqsSNZcSsdAWziFfLlqQwWmaAMmMQBZzbUpMVvmoiIsyNeGgkKeEFvVrRMVBhHCcMcljMQkPbLzZwJASMmHpPtTHcBbYPpgGsxXZzUuZlkBbKjJgYyDPpSXxghHCuUGpPggfyYOoLnBVvzTIrGchotThHJRlFBvgghHGXxzPLlpHeLgiIiIVgNnGnYWwySDdpSsMglLzZGkavMPDdBbGUrKkaARuqjJQJwWjbBgPpqQQuoaAOnAduDqHhQdUtOoGsSYynEpLlQqbBMmgyrUDMmnKpPkNdTtLacDgGAaxZqQNnOoAKdFfFHTVBafFAbptTFfOoRLihKkccLEiPLAZFCcYfFyImQLlqZcEVveHMDddnMTwWsKwxRnNYWwyugQqGwWPpIKbBPpkjRrSOoExVvJjNPBodDUukKTwhfFpNnWXxIilyHhzxBGOoYPpDdDayXxzRrZkbaPAhqQzZHfgkkKQBrhJjroHfSsCcNiIcCFjUwWPpsSjJVGMhaALVvlHEeyYuUNnLwWDEeIPfFpvVAPpagGJIihGgaCcFfAzZIZDeNnEdzMmUkyVvWcCGwQEYygKkGNukwWymMYcWqQSrRWEIEeYyEJjMmRreZctbAavVECphHXUuxYtoOTHDdhIiWcCrMmRwvVDdAirRCTVsUuSDvVJwWjMmdkKFfwWuoOYduBdaLVyYbfoLyYlEPpFjCmOoMlLMwWmyJjmMVOafFDIBbLoDdbBLlIiUwWuLxvVXlnNkDzZnNcZhHrRMmzllzNnqTeEmvpPCcWBklLDdrqQoUXxZmMxDfeicCUNqmVvGDoOevBUWwusVyRhGgOocCLQDdqhzgNuUwWaAyqFFLLzZZfbBNnFzISjyYQqWwWwhiIHIiJOoYyskQDpPtTBAaMbRbYyBuUrBSZzJYbqCtpAaPTcAqQawDdZcyOxXzHhzZSssbBdPdRUuBeEbrsRarzkLBQqIYoOpPNnbhfFHcGvVgSsShHYynYyKkiIwWHhNGNPtBkKWbyzlIZzoVvwWiIVvbBRrOPVvNnwWpurIyHYHhPpyfHCMmIiJrrRRjNnSstmRXOoOoSBlJjlrIivNrRngPpGNEVvSLpUvVhHXxfFnNPpzpPZtNAoOYyIOoJjQpJjPiIhcCmMXDdYyYgFkZEIidoOdDmNnJlXiIhnDdQqtWjAIiIbBIiiIgGWLlGoOKruFfUTtTtutTUdQqXOAaMQqmEeGsTKkaArTZoWwOsPwWpVvJjFiumhHAaNSsbBzZblLIfFVviBUMmYskCsSMeEbsGgGYyQqgSgGrsSSmMshKkHRKkVvvzwBwjcCJEPqNvsSCRwuCcUHhcSsOMGPJNCcnMmjHhNnRrtTiQqnNZqtmzZMiNNNnnoHCcuZzgogxXgNnGGgBbUuGPpYpHhnNPsDhCcTNqcCKGhPqQSjkgxFfXwUlCcDdozZCXasRuUQGArgOxXGTtznNZxXgoGRFqQmMKkxjJAwMcTtCUkyYKQPpSspUnNAazZLlnNyWwYKkueMBoOmxUuiISsdDbBDVMwWmnRroiqQBIzjCZDdSsVviNIsQqMmHcRrMzpHhCcPdbDXsuFTPjPpqYuUkKsSfFtTUuuicCiIIULAaiFVBsSmQqDkBHhbUdIiBjyWwDtJjcMwWzbBZhgGrvVMJjJfnNenNulLByaAYcZzgGpkXeZziSQqEnsSGgnNNCgYyPqQvWwOoVcCTiuUrROZEkJjGvVkDdzZbaUWnLppPKyYTtkPRrgYYLfiJZNnzYTbroXKbFwWfXGgUnNJpmMPvoOmMbZzbBkNyvmMVtkKTxXEyOBrEeRbMsSmIiMmdDpgFfGPDbBdmMWwpPPVBzZbKfdlLQqrRlHnoXEeVvaAxXJjxPvOtTwWiWxNrRnXYGgyYzZUxLtTIVTtHsiUmaMmeEAaRluiIUfFvpPvhMXxRrVBMmhHblLtiKDKkgaApPcCNwzWvfFeEeHhWMmwvjAaWwoeLlEgbXxQZAFsxXSfHfFkrLDAaIjJvGuUgBbVEffFjnkwLFjxgGcCVTOotjJeEnVvZRrzkIeEaAIiVBbvLewmMWEcRxXaAtyYtcCyYNRrwWBwWbCchsSzZtbBlLhHhLBblbBemOdCVmMvTtWwcCDdBSXGsOvVZoFNtrRuCbBKkfFcUfxkVvVOalvbBVLduULlpnNhgUMmPpRrulLlLHWoYwWLkVbBHfFKUuAaqhwBIibhHIiOpgGkDDdqQZEscxoOfFXCSiIezZPUMmPMtTebqQMHhzujJtTBnNKjogGsyszcMPIoOvAaSTcORXOTtoOhQaqZzWlWwNzZIiPEfYmRIiUuDdbMsSpPDIwWjJeyYEryYzekKEGgsjUxXuYbTtYVIVJFfojkYDdyaAxoOusYkKErmxaWzCzhHZcLkXAlCjJcRrJAZGgzaeEfPyYQTWbBwuUSXOoFfuSVBbcCviUuxitTSokKuUHXYKGZzPpjHhbXECbBVvcDyVlIqnCcEeyfIoOiHYzSWwqSWwsMztHWwbQcCnbBoKuDlyYPpgRVUayYAFWwfbKnNkrRUukIruuYyyYsSoOUbaABCJjZbDdBbnuzzZgmzAaWfrFLiISVvsCNQNjaAUEKkegGuDyYdgGWwJWnxWJtlBLqQlJCOodNnQCVsTNyYpPJjntetlMmBbkvVcCDdQyjJqQHknTtNsxXWKkoIiOfTXyYvoOVprXWifFIwWwWwLrKEeksZztTOHHhZMKbBZmMJjuTqNwRrWohHOzrBbXxHjZzJhMFpwpAaAahLluUlLHRTtDrcCRbZzmeELrRiIldDEmeEIuUjYjJtTtTIrOoRisSIqQpclLOdDoOoftTrxWlMLtzszUuZPpMIiQqrRmgGgWXnNVvFAUNKhHkWCcAFAtTucCRCrRZPOoYOTOhDJjVvhrRkTtKHzjEQfMKScLlYyWsSwfQFZzfspPVgGbTZKUunNIlRoMmDZbBiManLlIHhibrCsHKeElqKkXrmMCJFUrRcCgNMaTDRNnNVCTjcGgCHeytNnSPlPKkpwshXTbFhZzJKAjMmJgwTfpPkkKKxXRrZzRfzZzZvVflLqQLFfBoObgSsUumMUZzdDormXRrpPiaOFUunZoxsSWwXOQTthHkVBxhHttTCchBmgLlGTpPsbhKDgWRrwGnsGgQqnIixjQqOoJlLlmtTkKmGfFlLtHtTZzhHMmiSeERfGpchHhHYyXrnJAnaALeEEeyTgGdbxXGPpmMCMgPqsSVvphfSNnsFAfCckKDvVDddtTkKZTwhmLBbhHNnlWgVrpSEeNjHhChzZmxPpUuubBUPpEeZzoclVvuApPaCMmQQGgYyVvQSoObrbVvTSCcOoHtTgaMQWnNPcFfteGCOCcgGocSBABbSswWtqwLLloEeDdQoOkDdKpPxFfFzZIiDTtfLlQZzvqQViWthVaFYyDzcsSUuNAaqQeKXoAAYVIiBmfFZSubBUgXyWdYyweEeGgevsgEeGMgKiIMMmIimVirRxXUuaQleRrpWwmCMPFBbvNpZzjnNJVvTADyylErReLZzfrcxNnXebCcEeiIRrxroORPcHdDQexXwRVvrzZrRqQTtAWwaZzMmWmCcFIsSAzQFfyEkkKeYicCPpWwIfFkKSXzvbNBbwWvVOonPpBNnLlRIYQqWAwvWwVWZzatkKxmJPpsZqQLXvKkViQqzZApPCcMCcRroOxXXiIUTtuxOEeoEwWYRbBTtwjINvlLcyYCVXHuUhvJkLIilzGllWgbBWgBmMpHCcVpwWPsKLlUuOiIFcCfowoepsetTaXxmMFfNnNuvEXrRlLHpCjSCnoOJjLcClXvdLnXxHWTtKGrxXbBlvpPVriIxmMcGgrQoONnnIYxGbBVRrOooOvyzWwdyGgPpMHfiIRrFtaASrRsYYsSJHhjUulGsFSgGaAdDsQqiIfSDxvVXdXxXxgTIPyYeNAwjvVhbBHNSsAanzMmZFfcCnXxJzZjCUUuJxISeTyYaAthUuOkquTtrHFfcXjxYygtTWzNnZuGgAZVUYNXxnAaFfBbxKkgwWuUqQGWwzIiBrRqQMmEjgUZRryvKkVFkltTLJjlOEeFfXNwWnLYytJjTXxkpPrBttiIYyIYsSdDmMtTKrfofFOyUuLllhUuHqIQiHhImXxaAHzZJlcQxXqxGQnFOofzZNxXdtTFfwKZBbVNAnXxNEekeqQPcjxkhHgTtXxQmGgmGrPCKjJUuxDLlNuspIUVWJJjLgfYsPokKOIWwcCbWKkqgFsSBcCKavVooFpLlPxXpgkPEStTsFxLlHhXnBbErSsqQRHpMvVmbDprsgtTGSZzRIihPZhHzZdbwpPDDddEkeELlKsNnudTTQqnrqUumFZNUIiDsKdikKIFLWnapPGmUHBbWKkjJHOohhHCnNcdDdQqIJjigRVifPtyYnfLlqQFNLlDFMJJjjVtOQtTUuGgqoqXxQWzkmscIwbBNnocZYyYWmMqQZTNCcnSsfwZzaImMhTOocGgCtvcwWXBuQquFCbZeEJjqQVdDsSerLhZzRJjyOoYDdWKkVvBgQqGhGgbBcCZAUupxOSuAPcCypPYpgGavYEfFlDHeXugrrBTrnOoNqQBNFiRrHhmHgQyrRhHDdYrlsSKNnnHhNxWwumgRTwWtMmgqQjiqQBIQqVvirKUgryMmYCLloiarLOxJTSuSsTgjJGfAdyCcwCFzLcMfFCcxTtIXhyYQqHxauCeEcUWFikIiOLDdlGdQNnqDoOywWdDYYyVvThHJjHhLhlLBbsRrPxhTYpPmMmMyMmlWfWoWWsAkmMNnkNyYoWSCYAWwEJdHOoGsVRfFOoqJEejQiIVvrlzzZhwgGWTPxUuEyYOoIRAariPpXTMIFlLiiIWJjEkcCKejZzJZYwUuwFfWhEQHuWwGHhKgyoOkFYybyYBfjJGBbgTcjOGZRrzgoBMeWNlIFNGbPptvVTruvJJoOQEeIiAzLhHyYmGgMIiCctTODtTdaLZdDZsIiSSsaEzNjmjouTVDVUuvmiWwkYyuUPIEeHTtrOJjYtTutfTtiITBEupPSsUNnZzkOUTtZzeUuvVVvExZRHhahKkgGcCcCtCNnTZzzQdUkjJRfFiIrKVVvvHVvfFcngiVKkiSsSTmRQfFwPpRrgIpgOoGGLdOoDlwWLlLEGbSsqykKzYyRLlIintpPcCYaAkPHwWhpvzKdBKOTzZDdyrRpPVvWwbcdhuKqFKGgkKkHpPGSsgsMmgiIIaACcERAaBbkoyWwnLvchHfeoUNeRrMeScCFhBLFZzcCfcwwWXmMDwYztHdDUuWwYzuUHmYzrXMurRYBarRFdDvvUVSdyYBkgGdDkemMgGJPilLlGoqRrRrLWwOowLOAJhROozHhZNitTtTkKITsQXtnXxRMmooFIWlAiTtkwzkNngRGxXvVXwWABGgnAaNBbqQJgbGSsbEGVvgSsfFvVBXeEIGtRlLrGIiKvvoOtklaAfjdDxogMmxXTNTvxAauiIUzsSqQOEejNvVnjJkcCSjtTBeZdDfFKicYukKqQJjUyWgXXxZSOThHtdDuQtezXxTGfiIFfEcmiIHhMfVkXeEgGgAaGgeUUuAyYzZaaYfFylETvVtHheLsFpPfGgSaOnNYHhNnyYsbAnNjWRCcrcGQnQqYuvHgGJgaABNTSNuUdyYMximDahuTdDwWQXxVxyYUIWMtApCczxIAlLOwKpPTtJXAavfFiZbBnrqnNhHqjJmUEHfFFYyJPySQEQVvwWhqQEmMewJNbnzQNlVvLPQHpwLwWlJWShFasowWdFtCDduiIaAizEJWwKpPHhFkKKoVvVDSsYytAeEtjUpJXmdkhHKceBbWXopxSJLaOomQWmMlZIizNEeEpPeGuhHoKcrleTZQquOoUmMqknNKkdDRfFfdDmMFtJbJjfSgGhHGBLeEJjlvlcCLVrhqVvBvVbzqPpyYxWwHJZwdDdXxOBtZtgGTzTgGaqJXsSVIimWFfmKNMOphpPHShlDBjsSsVouBBVFcGeEzRrRSsrZFBvVMpSRUYCjJjmGuUbOfuzyHhkbBGgkfFcdXZHmMWBbRgNmTbBnleEkdfFwAzzMkEguUuUXrtYgGNnyxbBylLYwbBEjDduUJEeSHYyXLxRIsSVMxXmtJqOozbVxgUEeAmMHhasmxXelNqQQqCuPygHtssoDdCcAsSTaBbqPYyEBbeqQnqQNYewzZpOJTaAtTvoXFaYytTAQYIdqQgbpdDDZFFUmevRKkQqraJjxZkKZjKWwlLQqAkKLliIeCxXcfFIizZEjhHGsiKtMpWiIwPQwbJWvVxmVGgvWwfFWeEaAEeDdDankdeEDJaAjSscChHrRLAsNBfMmFYLllovDNZJluUCcAmMMmTDdtvVvXxIiFavNnozzNOocChHnFpkAZCfAcdNgAMnIiNoGoGKqyYPpsQkeEEkYmMLlWZzkMmdOoKHyYYvVUCobYhcCwEeUuOoWVvTtqdDciKktTILHKGLQMmIHhCVwHhFCcjGocpbcCuqQUTtqQDsoBXxLJevKkCZHYcMqfFrMhHYynolQbBVFfvEeUuAbNEendwfFUrUHhiIKkAiIyYRrauRqtsGmMcPIGjEecpPODWVddWSswKZzNAINyYyYpCTrbRGEfhOtZXuUxlLMmzTsHhiImMqQopTtKkVPLEyWwNnAoOQJTPpgniVpJUumMNIntorHhnNacXxeezEqHTPpUrOfapExqBlFdGzNnkKVVXxKWInNLfHzZXSyHhvqDJzbTkKPQehLpxKlLJOooTtuaAUOjCcNcCPUuztDzYyZyHlsSYHnkykzZKlsBbrMSnieBbEXSbCUQtetBbTVlQqLtoJjQqTtHeEcsViIkpjYLnfFwWyYkKwvVkBGaHVedAWwXoCKPpIpBsxaAXSTEezZvputBSPpSQqzDdaYDiGKnNiaoqQayYQZzEQPVnNKpPSsXmbfwOsDPxUuuRgBmMDdsxbcCcCoOGZdhHffrRFFniXSCcFfsxrRAweMDEiIhHULXpxXMmfroaWwAWwUugGCfaYLqIidDdDKePpqgJItuQqUVSOoYdDPhVRDdrwWxWwAaPSzOoTmUaMKkBHGgdppmMpztLlLFUuRyfaAZAipMhHmJwqQYmkKMvaALnYyAIKMseESmdtyYFquUwWcCkxpuddOmBbwWMOnnKkAzLuUlHeyVdpJjPDdcZqmEUugsRrIcTTpRrzZPjJjJjtKVskDMmCcGgPpoSsBHeEjIYOoCcwLlcCDdBbWWBIefhHrRHFfOoeEhDdRBKbBWwkjFIiIlPnqfwFPjDdJgAztTsmhHGyaUuTtGYfAStcjWwkXGkLlKjxAJiMmGgmHbjJbyYyTyYttTYewWSKTtNnuUoYyKzZsqAFIiIXBRqSDbBdKkxBckKHTtYjocCOSGgsDqfyYiIJjFhHlLQKLGaAeWwsAHqvxPuXnNekKsWVaAVeIiLlccZtTzcCzCErPoHOohOdmMeElOYyNnvVpauWVvwfbBdTAUuCcLEyyWlLeucwFeLIRrffXxdDrRLRrpPSFfxgGOogGiIYGSqtKVQqpPkYitCHqIibBEbWwBDdEeoOLleAaCLlcjSvJOoDFODrRdsQVvqBEMmrmYqFLlXxKfMUbapScjPpbuvlLrAahXgGVvViKkepPosAxXLSsXcWyYSVxRXxreEXowZDzXxUJjLUOeyQMmzZAHhMAamNjyYXIixJUrRkKbeOnOGDAXfoOhQqzKfQqFjzPPJUWYNqWCBbckkuuHoSswxXWkOouMmUPNEXwxOxXJXwNbQqOoBkBbvzZMmuUUuBbqVulLCmytsgGaASkdFfDToQqOsLlMWwZCcHheiIuUkRWgpMvVmMgGYyLLkeBxOoaAEgcCqnNQYyQkkKTtySsYfFtxXbjlNsSoOpItBlBblgFfOoxrPdeyzOXsGgplLbBMfhtTeCcEMHhmMmAayYjJfFmMdIisRUGPpHDdhqoZzMjdDwVYNnDdGTtgyxyNnppPPkKJsUuYSTrRhfFHFfzxMTnnlLunKurRUVvwOoWCtTmfFwsLYUhHQquyaQTtFfrnFYWbckSqQsYklJKkjULBRzZrblEgrmMQdaCSxPwOzgmUhSmjJMcEZdlUpRgdLlCcXxewWlTtLEXIYoOyyYiddamchnGspRxtaANnPEpFfxoDmMoIiRymYkvVWwKyTtMVQRrgGRUDduyRGtTFuEYckVvaAsSmFfMxdDXvBedDdCHuMmRkiGHHMmhhhjlUuJtTEUuYQqUOnOMaasSdniILOorsSTQpPqugxICdpaCezBzJoOUujnNeQqwtlGPpHhKkgDAPfYyDDQvvVeEHjrOoRVOcCmuNnUGEeEeoZztjBbgKQqXxDAadTtIiJTtjhpUNaDeGsGbBsCChiIoOVqQLlzPOomMwFkKfrRYftmMTRnqQYsSyySjjWbzxqPsRrSNtqQaUtIiugGUTlLPMPLlqTqwpPWbGHrRTtAaGKkEeMDWRCBRrRrFaAfjGqCqQRrcQgoUuOJjOogTbKkGgdJvVaAjDyTtCIXZzxrIPQlMRrSeEBeEbhHsAaJRmWwMEeViiIXxYIRUuriGseDoldvcNoXfOSsslkTexBbniIcBpXmLWqbFqQCzNmMnZXuglWwvAUrWwffFUuFOUuIVhvbLxTYgzJjdkZnrRDClUpQqNZzYKkRjuLvVNwlkMKSIfjJejsFjuZWwIgTYHHhgqYyIbBuVbGszvyYVfCcIRtlLvVqQDdIgwjIGXxbyiKBbXkMzothtkKYyCcEuPEeLlmIiCcdOvHCPxXpjJzhHsJapSTauUJjfLSgsSrjhHhfjjJdDezAabmYyhHTkuOTkWhMmloSBaoYyYNEmtTHgUtpRrgCRxhcyYoOgGdzcBhiIiVekdYkUbqsXLiekmgnLODwPpwhwMmwfoWXxvvVAbCCciHdDHBbDerveysGHFvfFVhopPykoOjHIErKvrKCCDdLCizZIlLchLYnJKZsSxyYeEoPHhglLSQqQKkqsoOOokZzKVhtcCTUcLlCEaBQocjhEQwWqzZtWTtUpQqPjsSMfpjJAHfFhToOoOqtCBbJSdFdDlLfSsSsmemMaAXVIIiSLlqQOdMSXHhuUMbBIsgVvGcCzhHnNJjhZHgownefCXmMRrpEPTfWwOvLdDvUunNKpmFfiIMslEgPCcEjJeOoHTtYDZpPzAtTLeEJjlBVvpIXzpYyPuUajLXRmLWWLUFfrtQqFFUwlLNndcUNjhQkUZdnNgQlAaLyYkFFqoEdgwWDzZdbKsMYDlxXMpVEXuUFfsPpGgKARQFeEYzZnMEPOYyjJCcGPkKGfFjUOmMoHrWwwWqtTkKtTEePHNvMmVdTyYjJyJjsceuUNJEegFVrRvvLkvVxXEEstTwUuwgGwPdwsMYGoAcMqfTjqwUKbMxYyXFRNGgnrfmBkuWUuQJtwWFQmsJjSCaOgylLmSEMmgGeWDpWnGXxgNaAWtTWtTSeDCcdYyeKUulNniGgIVDpWwPdfGjNnKkqQnuUECSYtDPLkKlcCpnhpKkDdQRhuJgcCpgpPoTfFtpemeENykKMmfqrakVvLvVWVvwIilSyYxevPmLdymjCcJGXxgSqTtQkBGgGDeOQfIiwWfKTyfFYtqsSGDzuPpKqHJnAaudAaDCDdDWuCcCcfdDfTRulcCwvWwVwlqUuQMrxlJSsAVyYvJjZxiPnNbadyqQkVZzvKhphHGpPeLSPkVRcCrBblVoDdFRFfyYrtpePZzxcFECcNWOGhzEeHmMZSstTaASimxsWwmDoWwsAarRivxAaCcEMFfDsjylLYcTQDdtaPFmHheEKktToOJuUuIdDiwTeHJuUCOqbAbBvVeHhusSHxXvoOmMGpOXQqzkjqdDQNylHvVlvVcMmckOoRVpHhkKPkReihJKYDdbBOHfkKhgQBbqSYEVREdoOrRhhPpIcBjJacCmMsSVxXOowOFWWHWWdolcCNGMKEIlxSQBuKyDRrAaKSsEvIHbCZDCHXrcGPTuGwWhHhMenyOAbsbBOdDlLLvVHwKtoUKtMBTtZEuUgGRrJFHJRGslFAtnNsPAjSGgZXxchVgGoDZzMpUelLaATHTOcCZmKxkIYQqBgiJWGiTriFmMZSgBvUiQGhytIgaAFfGiGiBbzUJfjJSJdDMmEiIFiskmKzZLWnvVlUJrynPuGgLcdNzKDZIiGytXlBVXxHvjJinNxXoyYSEesRuaVLGUoOlLkKxzLlZDdcqQfBQiIwlMxbBPbCNLlXEtKLSHhoBNwWFfVvnuUbFyYxBbvVOnUuCVDSsLOdiIESgsSKkyIvkKkEeKrwWVvjRrmfFLqpikKRicDdCcYLlEeBaiIAdDuUtGJbeEEecrwdmKkgTSstNxXUunoOhgBQthtbBTHgGQpmpFftTuVvATnpJjQXTtnjJxvVXyYFiIfcRgGrCNZBwJsSJsYNrFjJYyyoOAaWSspZvHcvVcSgSgEdAnuPHkGJTDdMFfjJmOfFtWwTgMovPpAaJGghVNnqddFpUuadLqQhvKkVHTbMmBWEZbZEcAPDciXnNGoOUtRlNDbBVvGgAAKkmoNLlkKouyejZzLJHOogEeIhHYyKrUhcDOoEbVQqKCyeUIifgiJjIEerYrqkKBsSsSbvgGgGQqWwVvYrOdOXPepTXeErPSgNHCMANnDDxeUsfFSuZzEHhjJDGrPuLjJDzeCkKsHuMGZoWpOoXscADqRGeuLWwaAKyKCBwJjyjJfNRqAMmlSRrWMcMmkNUcCeENrRNGgtmXZsSzrRZJNsvVhOoaAHSnjtsySjYXYiIyvSsWuUJmOQgBburQqSIinNoODAUuayEqQWwCcRJjfBYyMpPmbFrlgGkvVaAKLeYHFmPSxoZYEDGgpCcRXGLLvvVVbTiDWwPyjJNnYsSnLJBTMmfFvVtIiTvVKqGevVrBwIFfiWbRXbEKlcClmPKSskEeGwDdrQqKEzmStKTYMciuUIUvQVKnWxjfFoXWxenpnNfFKWwNnOhUlLUKKwQnywUwWuujpPppZJkZHFjJUuxadgoNoYyEBunakKEeqpyYPYuUEYqQqQyouCcluZdnNzjJWOnNRrvswCdDxlaSOECcIZzvxRrHRAaaAVUsSBJlLCsPABuSRrsmFQqUugGkqZzQfQyMRDdFbHhBfebBbYySDPpdoRreEfdjVsEoOeJQhCcgGcTIIiyvVKpPvkTQPpsgyXsclLBgcCGbCrRlFFiIFfRrijQuUqJnNBbgGlcCEfFfWCRrUxXnswPhHpWSQqNEwIiYYelatDFUuUjJAKkPKkoPHhpCGgBbcLfFDpRecZkKCCbtTBEvvwSExUpXeEeEVCcOoQhaSEglkqUuQdJyhCbuyYUXsQrbLlxiJjfaQSkOksJjEyYXMmxjJBBhMXxIjzZaUGguXJgxoOKJCSZzsTsoOdDaFyOogAYgVvMqQSZaIiGpRrfWtTFQNpLiCcIkDdKifJKkbrCcAaHGTtGgsSfFghMKkjJmFfPiLlIpFfFEiaAbwRrycCiJhLlbOdKFfSvkyYTAacCVvJtcYyUuCZztCiSGGmMNngpPeMTtQzCDvYEhrRZPpaNNooDkKDQqUPXKEQqeQfTDkiaNlVNnyqQWjPIazFYXxrlLiIfvVlTZBbPPqHhuUQPZzDCcsTtSsShbRrmAuMfWWwDrRdRrwFtZspXvHpqcCQyIiDdFfsvTijGQEktTRrQlyAFcXqCcQBbxzZTcCtORFPeECcwWxluedmFfEWaINhHDzIigEeuUBXSbGrUUudDXpdSoiIWFqQBMxkvpUuqeqkKAqtTQOgGAIyYkgIdyXxAIPpifFZsmMsblLTUmMfFJjPVIitbPikcRrOxXxaDEvhAgbfFKWmMNQqeUuElyJPKvSTtChBbOeETNnvETzZqaAucBsxIaANuuUUsuUmRoIvRrDdiIViRDdrOSLiIkuUKYKNhyLhYkKLldmMGZzMbBmcfFCvXxJjVAaNngTZpRzZrZznJFffFjkXkBzZbKtTPlLbBlHEqptBZjdQVIiCcJjYsxhhHSsFlifFwkvvcCZggGZzDfLgGBbbQXePAFoRDduthQePpZdDEECnNAWwROTNinjaAPvINGXxdDYytjqFfaYTtelpvPKkOrRZzSoHwWFiIegmMrBRhHtcPniankXxDdPpDDvZlLzvVuUwsSdopPCJgipvVsSEeCdDgSTQfiSueEUsIFuWPpDunNUiIBafFbBkKbBqLONrXxRmRCcXxfFcCDdQmCyhzEeRrcxQqIiLlXWwVEjlbOPpSdZLlzVvTtBPCOgJCcfWqQvcPpQqihJjHPpMViIQqvrjXxJRmqxXlgLlkJjhlCQHOoyBLlOcuyQqjUuJhksGAaHhgSNnDyYKEewMmeEkKyKePpKqXxSySsYQLlrRLlKXkxXKkKKkxkkrRgOgOqQmaGnDCaFczvVaKPfZcCmFfYyMoeEwWOZNnlLDdqQnNyRPprJjXxYgGahHAOVAfVYyaLjzndVOLybnSoOmMalcCKNkKAdPpwMQqXwCcjBVvWcCqmTkKkIwWSgQqvMmVwWbBBGgbJazdDZBbqQkTtJzCcUuzXuUAVLlEMuffzHhdJjdDIZzivVPBGDiQqyqGgYyfxOVtjoPWEyCcpDdxXGghPpHQAtaOBPpbHhSSThGYpUcnLEYyMSuZzGXvBZzZQGgjTvvVsSirXlxhspPeqQWwsSWXOoTRxuycCYmVKkKkvMAaWDdwUfKkzZFGMmeKmZZaWDKLNtMnGKtTkrwmFmMfMGgOohzZzxDCKmMKYZUFoBgMJNncyursPZzmbAafgfFRrCfhYyyYHgfFGbBxXvbbWwUqdDlLQOvBbSJpuUPbdLHsFfPaAomEenkMwmMUuMZzqQvfUufFFEexjBGUugbQAboxXDWzjhXQCcZjJAuUaEelLQHRbOogvyYVsFBjTdDrKQztELVvRUuCkOvVTtUgnLwrRqMAljrcClLRHhsXPOcCxwECLlDPpMxjvVfFPpPuJHhTaTpPkKvVWwdjJvYyTHhgbBGtOkfRrkjeZIUDdcTfuUIiDOSAfGgHswjBbLlxXIiWPBoObhqpWwnRrqZNBnjWHqeqsMTtmTJjtYpjfwWheuMmSsZzMsSQEeuUQRNzIzZVxjkWoNnaiXZPJjaTmwiuoOIiuUXvqLKklBbtUHwWAdMIXUuJjmAaDUunstYynbGjhUuEeVUyNqgsSZzkquUQKCAawJaQgGqBSyoAdDZzgGAKMmkuEHhGtzZTxfFUYhHyoPeEpOlQqLuKvFCWweoiIOeEFgtZETqYUXxuyESsgGeUoszkKmZzMxGwSsCIkzEeEuUbJsKxuUfTtFBbJjXLlJoZmMaAXxXsjJSVtntMmGOXJDdFeELPpKtTTVNnmMVhkKnNHkFfsSgTgixdCcDWwbQWwsSqeBgPOoPppBGjKkbaFfxblLBgyqQYpqQPrGKZyYWeEUuKIaIiLwifOuwWUOrNTxkKqStnrHjaolWlQiIOgZdDzhHLIiIpjEsRrSXxMmWwKKbDsvOouVdDVflrRLAbyUmLloOMmsSxRZyMhZyBbhTZMmfHhFyWdBbxWClbHoOdfFyYzZIiDfeEsWpPqQKkwoOEmERdDrnyYLluOEFIsSiCVlpPNJjYSsOKreyYimMOoGyYShfQknNUHDCBlLsSNnYzZSskKUutyYoBbsSkbDkZVjJKwWyaATVvNrZYQBgelWyYiHNnhMmIwgPiGWiAgGaIqrMtsIvOoIpSsPGXMmxTtpuUfErzBbZyYReFPNChHhMrVvRLlmuDdpPDqZtTtVvcTcCHArzXMmuoKebtTtFTNnUyowWRhiprRXxKiITaAtIMdvtUOJkKHuUhMJnkKZeAzKkzlzZPpAofFTtlwWZaXxAaqjjVUuURSsFRrfBiIgqGgaAHhQHhnfiLoOnwEmqQbPpwWJCtZzWwKYGkQqgUAaWwhqAaeHWyIiOozWCcwwxXIHhfimtxrReKkFfSsXptFfFfGRrgHZLvSghzZDjkPpKepPaysScswOnYyKmMKaSwwOwFfFlLwLZzYmrRMyttTHXpSHEelyuUYzgGZtKkoOxXgDdoKIfHgGhwOoAkBJjbKRWcCEewoOriqQrRXmClZfcWYDaFsStUdDstjXoCclRgGAIOcRGukRbImMJBbGvyYVrbBGRrKoOPpkSsMwWUXkLRIiqnNOogGjJWwGhMIfnbRtbRRGwWJjVvUxEhdLeyVxXUsvVoXtTPazcCHWwbwKkrHleERKkEvzoOBcfWVvwUUboOvVxCVHzZdDibrRBALlQqIiWwWFtzwyFfeEzMmCONnWEeiCSMKqQZwIiTvmtDdQqTjJfHhjJZzdWwTpuUFmMIyYvAarGDOopPwhHhuMgANwljJfAazqQEeZDCckpPSdunzfMQZzRNttDtTUxXAmMauUQqNnpPSEqQFuGgUfeecCrReEbBWBDLlGBbguUzWwpHPdBCcPhUubBeNtTpPfbBiILlepKWwGUuPJjfOOAktTbyyTtYYfWtTwGdjJDQKkwiIBHdrRDhirRpSyFGljyYbHhBwvzuUZuiPSUndXgKeEPpmMrRkWwpPoORyYrzZGkcpRIigMMqGKXOoOoJCpfFEKanOovzdDkWDqdFfFfDMmgDdQqDSsBbdXCLjlLhAaGgMqiQeEhrRHLYFwWRkyZzXxiLldwWDTTbCcRKtKkcCMmmMjJmMFeEfTlxoYyVvLKfYxXkKRrzuGJebZtTsSXyBbuvzuUaUwtTGvVXJxCmMhRTtUQXxmMdXxPpDKorRzZxXHDdwqKAakQWVvEsiXxXjucNJWanEpkpVNnvDjKkJrcCRdLlKksSPKityWwYSsaAGgLyyaATqHhQhmYDZAaYRrSsgXkKpPGgyigpPGNNcJjCnkKqbQqBlLRCXRLnNRgkYyaAvVwbBwWwWhNluCFfJjcCcpPUDVVvxNchHsJhHcPhxeTCcaAQqtlLVRrLDdlmJjixXQqEeIMUneEAESPtTGgHhEOWHhkzbBZnHhNSvhDsSdPbBbuUGwFfGRvVrsSwLLcCgZKXxyYjZzVxUuniLlJWryeKIhHrnNRikTpPtvWeyYEEewVbBqQkKSsKkmaIRrvVxlzZzKkgGSsSjMmMXHhTdDlLwynNirFfOooOTtHhVZWwxsyEJjFkKfKeYqZaifMwBbDdWEqqQhCpXRLlrBEeECeERFXxYYdatQqPnVfpmzZcMPELqioOIAIvwKlLWwkvVWbYylBbLBSgGsFfksMsSYymCcSGmSmoOMqQVkKEjJKkEfFWDwwWYxJjGszJjMbvyMmayYeaOxnNkKWwTtkUuEAanCZuUdfAyYDdvuUHTwIYZzgnrRNGMmVvzZHhyqFFfdRrgGfXqQqOlWQTaxXbsbBnLlXxNgETGgCpwqmkwWKgGAGULlpBbPuPphtTsMmtBRlLBAasMmqtTIiVvqqJjYycfFULCOQqokKOSsaAWwgiIGXMgGBbNnkrgGRKHCccJnkKTtstTPRuUvGwMHPpLlWtzFfFaHSsPdDQpGmcVvgBDnNtYlNajNRxHhvVhHCiIPgFrsIozcCZOtTVvCchTRraARrCcgMMLXNKkSNdkHBmMStEeMWwGgbHSsTXbcCvKGgRrqzNXxwWfBboAIpPxMqYyfFXqQxQROaAuLjJiIlwWVgGvHhKSTiItnNsZSszkGBblFwWZsSzaAFrnVvNGhHgFTttLlWiIpPXxGgGaOouUVvkjHfBtSsxVvHSWAaLpCcjJfsSFsWwTHhYEhJtcvcCncCrdtAmnGcCBbuIifjJjcmMJjRxQLXxkzZhSAaczZRBzZNAmGgSSssIUuzHhdOcCrLmMaAikztBvpjJGgPwaAWSkKqFCsKkkLlZzmnUuNCcJjOoFqOoeJZTtdHotAaocCzZypzoOYycrUMmafaylQqLxXYwKkJnNjmjJRrMnuaKkfxwEeGSZYyTlmLwRrUuXhDdHRFCPiIiPpyJiBbMekKMGgBgUusSGsSdrcCPWPfmRZfFnJjzhHZQsStUiLlPpIzuQqUaAkmQqzhbBoeESqEeQxXDdgGfFGnNghPKkpHbBRuUlWIiwsSxTtRPxtFyYwSAapPKhaAXxZzYsSqKkKLuUdDTEWwCcSWwfkKtAaTXxFvcqDcHhjbxXLTjIiwXNwjJpRrBbPjJjOoJnJjqeEnIiuQqUcoOtTlfRRrFAawZkKMGZUNBzcURiKoOsSKkBdDuvrGLZAazdUkOvJjuUVNqhHBhTYyZSsmUuSsQoOrBbRsWwhHZyhWwIijJFYNyiIYQieELbkKBdDnaANvYJjdRrCcQqJjeEexBJQqnNgFiuHhUIfkKrRkCcyxhwWnNOiIxXZzsIXVkKvUuIlQlLmMqtTtTLsUxYystTpPGgtqpFjCiIcLaxKlcCZFfwAJjXUuMQOoaRrkKAqReLlySzZUXKJOFWwfjNnviIivyxXFfBcCyHhJSZynNeEZzYRidmBHhrMycCeEZzFVvegGPpHhkuUcCdDKpNnUunLwCcQAqHoxroCtLlsVYSsyipmHhCZSHhYSTtaAOJlLkmjvVJZzlLMbTtyYUuUnNZmSsLlBEmXxBbUupGgupCczYydKPovVsStAaTWIiHQkhvKlyDdOtTwhKkGHAkKaszZJjSPDTtDdAovKXFTnfGyYgZzOzoSuUgxsaAbjJcGgWwDwWojJMMmEbBHHhTfFHnTThuUrRHrClpNnPwWiKBHNGgnhbNvXJfldDWKuPpUtTfFNJFeidlLlRKAhHagGhaSsGDdgrReEzqBUuGVvOnNyYJAapZzPVEVwZWncCFyYfvVGdkrRITNnvmHVaAVLqQkKoOrAMuQqSsIShvigaAGlXgGuuUrHhRnNeEywISsoVpONhLDaAFkXnNxHhEeviRrtTIDdpGgKkRroYxXuURretCcvlLVTHhsYySbBYnKBVwpVvTtKkrRFfPWBbKkjCcuxqQBkxORBtyjIFlyySsAmMwWTtaUuGlYyNwurRiIAaAcCBKgKezoFfqfuUnNvVjJVvpPUuFQItpGceabBAszZQqIVJjvVvvVEAaxKtTtuUTMmPmMpPXIixCbUEFPpxXjPpEemRHVvMmmCaADdTdYoOJUubDuKQHhqVvdOoMbKkvaAmDdsSYyMfIlxGgXflLFfsCcSFZzjJuxXeEUdDFwWfyQPBbSsMmVPpvpJptfUSxIidBDZmChMmSyYDdinPpIwWLRrlzTWwsStrRuUcqQJjJZibEeIAavVGgFfOlsZzpPSLNRrNnoXxOvdXMbmiIEQqICcixXPVvFfqeEumFfWaaBxXiFfIbAOoXyYZzfwWboOBzZayYgJnNjqrSRrMmjJAxDdcOLyYNnuWeKkrREGKiIVvJWwoOsWwoOpHgkQntbBHdSIiyOgGRrNnGUhVvCcOnITdDQNnzfFvMmVImMpMmgdyYDmoCZkKzYykKDdYyWrcVvdDVnQpehHWRrbhHWZLlVELleKkBzZmoOiIciIKIOoiFfStTyunEXxeMUIiIfSFfztRtSkKgeEoxwWDRkgwiBbaJwMmTXxNHxUuLjmOoCgGdUuDcMMzWwZDezKflZzvVLvVGKkyxXujJoOrGgRUxdDKUVvukHqiaBbgGqQnTumRraABbkKMPluUsOonNKkeOoGgeEAanCcVIiRLLbstTetiITEeExrMTcvVhFjJhTtYutTUiRURKkriLCcBbQCcqZYBwbHVvRrHhhcWwCoOTuGgQqhHxXUpkKnWwgCiIcsCBybBcCiEeblBbKZujJURAxXrSDpDRrNnSZoYzhHbBZCwRrWwWzWSsQByzCcZjiIDdMmsqQVvKIiDrRrRdkmMmbhHBbdMmqKJjVviZqQplLzZVvoOPzliXqQxIlrRWwffAaQYFfnGZnaANHFfYdDylHoOrRhDdHrYIivSFfZzTtbbBcCVMFfmEdWwgANnaMQnOdDCcoLlhHCcuIBbIiEFdIimMXzuaAcJjSsCORKxXbwVjJMtQDdLlhHAaZLLZzCdKOlidAovYiImMVvcYyJfezZOFBvlADbUlLXxsSoODuUyXxuUrRaAUXfFxvtcILVeEvcClqQaRrnNyPcJjeBTCQuUqPfSsFpziUuewswCKUneqWgwYygGrRDdhHYKrrRRuiatlLTHhAHRrjidlmgvuYyJfnnNFsShORHUuRbqKGlLiISsFxAasSXapAvVBKsSbBYkKAjGgJjJdygbnNXNnZaAUuHhYwWLlLtTlEeTtLmEeMjJwPHWtOkKzZbpnXesJtTiUuUrXWkSfFkKGgttTmUujJNEeDpPmhEoOlLdDCcWweCYyPvVWwpzMtTiQFfqfzalpEeMmIiIuUeDvVQqqQdllLCCHIlrOlLoFffFIiPQqBWCcwbvthDdpywWYPEefDkacoOCDdzuUKkXdoOkKCAlqQXxuRYfFnNGPexXCcNgwWTDaAaNUwWqRrpmfFVUuGgOovrReEVAyYKcCmPsSsNtTacCANQqnvuYyUwDkKdFfWGQqlmMhDdHELloOhQqjPpoOJZGVDdbfFfLrjFfOHCahHrTtRAgrRRiIiNnEetZbsSNoOmrRMlFGsSLlCcoOlGGSsggLcGqQzZsdMmYybBGjJLzfZzZhHzFbBcCEefFaAlLSSvIiVsyCNnhhsTQRjwWJvAaVrqtTtaeEzZjWlBpKoOeVvEqmhHvVvVJLCVdpPmMDvcCSsmbvmfqQoOEnYDdSOPHpPALQqlahuqFMmfIZwaDCznzZeAaEuUvVuULlvVtaNnAtTXdcCVvDxVvRTtyiupvTtzavtTVhfLIvVFfpPilFUGqQfFbJOoVvwGgUuWBkKpZFDvVjJarbUuKVCCqoOHcChayJgGExRriIqPpxXQPpyiIcCpPDAxfPpxMmXSQUuPNnRriNnlLpOUSsZySszvVJGIMOhHoamMmMucuUDMReEwWYujJUeEymMrVvYbBypPmXsBbyfevVEbXAlbBhHhIihHnNxYyXHhNnHbKmMHdCDdDdlLDdcrtkzjVvbBacUvfFniwHhuUmtTMWKpkKrTtFfBbRPlFuUJjJjjJTthHenWuXGgQiHhAxXaVJxXPIimGLlNEnuTtVvNNnyYkKKbXdwqCcQzZcCkKoOWKTovrRIieVvEVVvInPQDdZzlgGutKwWkJpPpExgvCPuUEpWvvVfFsSUhHqptTPOyybBYYBbWyYAHHzqywMkKKRrkiCvtQYyqDDdYPpKkIdDlLdgIiGlgPLlHOocCzEvSkgGzxtJSsBbjNPSngGpPqiIgSuUMmXHgGhRSFfssSGvaNnYJmQqvVvVvVrYzZyYeEyooOYyORYnqQZbnNrCVWCwWMBbTNhIiqQTtHIiiIzZZzNfEcCooOOFfgGeFejWskeYyoyBAatiIOSsSsSNIfZVUuvZqQoOrhYnzFtNfFnTaAfZJLxXEdOoCcfNnFDdxXeDdKYIIiWPpwiSwWVvsMoKkmgFkKaAfCcJTpIWwiHhwQkWwKHhiBLlvMmPbBVTtvTtuUpeEhHVuHhpyvQqVRnNEaAeVHXUXDdxfFfyYnNmGgLliIIiMdiIDFdDKWwAaDCcdUvVvoqjJAaVQgmMjwWJfFDoOvVvXfFVvlEeBbRrBHZEsCUoOVvQICIiUpAajJHwbBiEeKOzGgKkbBUxXzZYyjJxXuZhuRrEvVqnNnNqQMCivIiEDdeVNnItcdDvxRrMmRnXVvKkOopttTSsRrPPpRrOlkZfFznuUniINPBbpNsYyuWRZzrlJhHzZenNJliIgGsrRCctTaAZzuEAkKPxXpXUfFuHhQqxOVUVvuvBbFrRqQjRYyrdeEeEZzcCXbBwWapPAQsSDMnNmahRUhFiIfbxrRXBivVIQqHhpzZRrjGgvRpFtTmXcCPprRATWwcCWEjqgtfQNDIFhHBbtTEebLlBSeRrwWXbkUurTkqfiIaOoVXxLzUyWwGHkDdSrHUuhRdKkDsCclLhHKgGOfhHmMXaLlpbtXxXxXuoDsSdsFflLSRGOogrRjYyfFrnEeDdNnNaoOPpHhARtTRrZfRrXxGnNgFITHxXhtXxjMmwyYJjJjWwMQGTYyOsQlagGAaYEHezZCPKkpsQgIiOfFPOqQEeUKsjJEVvMmuUjigiGgjJFfjJLAMmaQSsqbBFfEonNOBbcCxXoURruVvjJNnPpOqQoTgGtOebBelLiZzJdRKZqQVHhstGsSXxPtkKjJlRHhrTsSvVusSGiIzpeYKkcFhHcCfPpiICxXyYomysQWwqZnNpOyYogGPEezUuSmlLCZzFfVWwvCLlMsXxlLWLWwWcCLelLaAfsSYyRreEUuNnpQRjPARrdDTYiAnNfFZrBoOMHhozOoAardctcCTcCuUCcVVEeSGgswvVPbvdwxEJiIaYCUJjBusMmAijRJjBCcHhtjcCJfLePpzZXxEjJCcyYODdIHvVhITgWwEeEXiOiILlmsSnIiNCcZziFfcBbBbTtmrYdDXxrRxwUujJWwWOsZzfarRAFIiFJjIrDyYnIiNADmhHMaqRgGGUujUNJEAabBLlRrXKkmlQQqtRsCciIJjoeEHhjDPpeEaQqxXLxKldDiIiILpkXxKApTtcCmDEeTtdfLoQqOXoOZzOoYyLlEcFNnztTXxrpPRZTEetQOoqtxXCcKUusSJjMerwceEGFfHHKikKIaVvLlPpAIiloPpOuULZQLlIiOoGgGAqQRBUuMmAsSavVeEhKVSsPXydDGgZZpvUzVCMmcxrKmMzXYWEewWwxrRhHQBbTJKkpDdKkiIPcqQCdDNnrMpPXsSsSEexUCcjJRrDduLlpOFZzSscvVUuBbiOoIyYkKCcFfCoOjJaRYyxyMNnGHhAahHFZzdjJDfUUNCcnuBbuUfFuIiZVaTtAjiILRvVEsSEeAavCCccIrRHPplvGWqFkzJjAaMmZtoOwWTKkXLuUyzPIwWwWvBbVLlYwWyQlLjJeEnEfFWUcVOfFdDOoYyxXovShRwWrHzzZJjgWCcPpnNEymcXxPpCLliWsDdRRjbBWMmzLlVvkKZUGguwJcdDstTSCNliXxKAvmMGkdeilLZKkOoOazrwWRNnzRrIRcCzYyZufZDdUuaCcAHlyCBEnaAZzIimMWhHqQyYLtTbDCcdukuxXUjFzWwUuARraGXxXHrVvlAaLRGgGTtcKkAteEjBbKAaiQqhdeEJSsjgwzrRHhcDdCjLlMmWwpfvVrCJNwocEeCoOmnRrVMjJscjraAtJjlLTeAaoFfOCgGuUqHvVhVvQoOhHuUMmmMXrALpPKkyraZXvVxQmdDJObBFfeExXuUuIiVntTNyYvgGwCcWuUzxXLZVuUvfFvnNKkBbcCWGguUmMBbSsOuxTLlVSsvHsSBbsShNmMAagFfaAETtoCHoEemMOkZNZtTqQdDFfXdNcCnJjmOoqQBnNbGFfFfCcgiIGSsxXcvVwrcCRsSoOXUiIujUuibBSCekKwpWwpcCEeZXxKEsSGsSEedlLUrJjfCchoOHuUFAMmDdaGAakKTjJMyYkpPKXbjJesoOKkSZuBbsWwjMmeZzYMmazZFEMmCpfJwhvVHWjmMyYSKksdxSsNnSsOwrdDXEGebBoOXxXxEnNuUCJjcoOskVvmMBbKSoXBbxZCQBbFfXIYhHqOovVQiXxiIvaArtJjTdDMmRVqQiIKkpPXcCnNxhGgAcLyphHPiMmITsSHhAaLltyCcYKkvlLaAGGgiTtvVIIiBURrjXxNnqfkKFQXaCVvfBbqGuAVkttTujJrmMpPzZRcNfvlhfFMRBgFtEeTBJNnyYLEFTtftdETLTtlmqQWHhPmMfFFRrzZfDyiIYUujJwWLRNSEeWwrBbBbOhHMmoxeEJPfFnoAaWidDIwOkQdoOjUnUubEJjUuEeVveEtTrOJJjfCcmjphHGqQgxFgGfqPpQGAaQnNkKdUufUunNlLhyYhVzsSZYYyfbOuUpPoTSzZFBbkDCcdCcbYyYykKgxXGGiJxXBbxXjrREepbBzGgIzZIEeOoOUtTHIiZHBSabAyLlYHwHkKIiEeJjXoreERBUcCnNuLxXlvMDirRoyPpvxXRtTDtjJvVYCdDwlLJdxXfPpOVvoOPplfBbsSdBhHfAaYYMYyRrzZmdDyeiXxREeZzmrRFqQkKkIHhibBYyZbanNyYxgcfFALlNuUBWpQqPeESVvWvVdDFfwDdkKxrRXXKkEerRaAxVhAuUaHQglhEqQOWuUwLlSsblLpPfJjvfEeFHhycCYcCqQdDfyYFIiwUCFUAajJufQYlJPpbPpCcLvVlAauUWEebBAphHBbhHYFRgGNgrRzgGRrFYrUuAWNndDjtTpoOtyYTrxXzZBYypPmMBbhVQqpQGaAgAxXaYycCqvTizLlZfGcrePmMpkKEDMJjBeiIEuEedDUuDdAaUbzIiZEDdxzmLlLlMCjgGaHymsTgGGenNEjJyLlbIZaMmAAamZzzZMKaJHhjCcsSJaduUDKeuUUuWZehebossSaAjzZJsSRQqUMlzpEepPHhPLlCLRrlzZrQNnHhEpPkyYKegGFoOmzZMLgtnNGcCLkdelpPiIjomMoOOwWNEexXGgKpqQPNlLKzZkPXxskKJMmYyjyeEjCfFcxXEjJnFfNWjDdJOoweYAjiMAdCcDZYyzlLavVtTmjlLbCcuUbmMjvoOYDdIZziysyYuUkKeIRriEgQqGtaipmMQqOtTpPoEVmMXxxXvQNEeLZdDzlJjbBroOsdHhkKDSRVvdxXDSDdSKnfFkWNnwtkCcCQqKkJjJuULlWeEzpPYyaeEeNuUoKkuILliUkkYyOBEGWwLlVYyvgeZRrCmMdogGOxXDvgMmtmMFfjYlVvzZulLbBAaUPpsMbBPIwhHfFoKkrPpRzZaAYDHAhOJjUFfeEuUoOdqVvpPEeyjMmHQnKkMmQqyYmMtTkjWwJEexXVHhvfRTGjcCJksSKgpVDuwWUdlLOXxoBbKkLRZLlzrlfAeWuUxXPsSpqQWzZwpPnNaAZzZzSsFeXxEfwzjCcxXJMTpaftTaAXxGgLgGHDtTvVhHdmMhlLAHrOofQTtNmIlLHGZPiuUcDdGGRrCIicziLatTUuubBbBzZFfjJRGMwfqoOknLlkaOoUBbEakKlLAVabBkKexXOqQqqVhHgGQMmJjkOoCdDaNnAyiPpIHZzhhXxBchHCUpPpIMmkuUXjJxtThyoOYHTRBlLwoJjOtsqQQqOoiISTdDWvXUuGuUgrRxLlVbxrRFfJiCcIqQSsyLldlyoOIifFYaVWDjJgGYyUYfiIgPBUuHNxmJjCccCLlcCMdDmRKbBZzzvujJYiIvGgMmpPZkKzbBAaWwqkbBBmMuUqQbYyKfLmovTtWwtUuThkqMhFeCcEnNfbBHMygjJGYmbBTkiRlLxlZSJjshEzZQqkALlkKIiaoNnCcdDeWwDvVlkKLJdDjdcCcCscMiIoHRrhsEzZeSmMwNnomDdMEeCAWiToAapLrXxqllLBbuUGlJjplvDdobenhKdzZDpyUuYwmDdmqOySsYWwzEIfbBFbAaBpPmZnpPtyYTNzhOoHoLjbBKLqQanNRaArUrgGLlJjRNozWwiZvBbVUusSzHsSBbjJwWsSZfYBpbBSsvWhHbBoMmCcpfFPWwOWsjJnNOoSTtfFwmzTFHVNZznvXxSTtsmMGCOjgpgYyGeEPGuUtiITJTBbFftgSsTtatYjoOipUnmLlGgAqQjyYRrJIFfpTtaAPxXSsiqQjzpIiPsSZTyYtudDdDUmVvLlNnKUTtukXhHsSxGFIiGiIgfeEFnuUlLGxdZzTRldDWwcYSGRtTKkcCjJrBbJQCfWpPpPwZjJyMmdDmgGMReELlHhrZNLldDsCcdDoOJgyZNnVHhBDdbIBnHhZFZzfzeEDxXbBfFdpXZlLktZaZXxzvOkQZzqhHEeEecCKUuaAdKkcCDoVWwGNnKkKkNngpwiIWPjqQRFfryRjJAaHrRegGoxXOxkoOKczZJnNqQbsJjSBjvVXfdDfFJfnNQfFIkKipPOZziIrZeEevVeEPpQyiIYwiIzmpPMMmmiIMqQeTtZzWGgwlxXqIrRiHhVUPpKkEOoEMmewWDdplLPpPnpwWKjJkvVAtTaqQWwpmMOoPDnNGtioIinNPuVNNnoOaiIAyWDDdGgHhRrdZVvxFqQnNPpkWwKSSkNaAdDnKwKfMyYbBmnNUHUaTOoIgNnGyDdYpPitTcZlyQyeiIRrSsZzEeNniwWIgvZiIfxXzGasZzaASTEIipEeERrHbBlLbBhrRePvOWwVvLpVDDMBbmddvPUAGgxpxdJbUuBjSsRLlrqzZwXxsSWoSwBbzZWrRVvYBvFnMFpbBiIPfGgrRNnmMDNXxSsnOonwWZzKkJjDdLGgltcSsfzZvVDGMmgBiWwfLlLmJiCcVvVgpPGvYtOoTyWwXMuUmLliznNZPpgGTsSaAHkVWjJIcCiwrhHRmpKTtkQCVvQoGmMbBIiuUuUdDhHvMmVljDdMkKcCXUsIiSNqBbMoAYyabrRBOIiNuEeULtTlbBNGgnQqStDvFOofWwWiIyiHhiIRYebTzZhVvEHUuheULlOmMmMobBMvVZzEelLmucCVrRhXozaKklLXxtPXxYyvVLlDdbBTnNqQiIXoOxmStqbjQyYYIozGgyYmMCndDeSsENjJEaBYyaAbzZDlLpCcoOQqSsGKCcNnpNvVYblLBygGlLosQqSdDOKFfkOJjYFrtTaAqKVvEeiMZzmsFfFfMgzQNbBRrtfFCcfhHFTtgGetZiqQIkQLJNXCcxKpUuPPTtpkUutTsSXxfFZOodnSsNXIoVvjBbbBBbWjJzZxyYXwFaAkWlVvbBLhHSsiVaxXAQqJjNnXxfFQqrRrDUDAaIKICclYygGjlxXLvjJyYiJxEUuUmMgGnNsrrRkuUKwZqQzheEHyDqQSioOIimMvrRVPpnNFfeAaRtHhLtGgwWMmRrwWfrlLEIieYyIiRfRstUukKHhHZzhoOGWwgDuUrRdjJoLldmMyYDFfOUuiSdDyYIlgyYGQqQXxuPpHPpBbhUfFqvQqnHOohaoCGgKLvHTKEhHekPpZzLGgCcdFhHfDeqnbNRXxrnnNCcJjjJBDduUKkYybpCUmMWwYyddDGqQfFgWXDdxpPTtDWgqLlQGwdwlDrRHhEepPdOXxokZJcHhCjGEegzAJjzZmMSsPkiJsSSoOsSsYypHGuUgRrrPuibcCOoISsiWXxvdDWRINhHnYyuUQqVvnCcNTdDtuSsmLLrRlgjMmJgGGxRdgGQCcRrqlxMmXLNnDWpPwxXJyYBbUkhHCchGgbBHlBbLOowKkMmUgEeCiaAkcCDWwddPpPpFfDxXZzGaAjJQjgXvVXcCxqQGVvnNgqQnlLNjaAPppPkmBxYyzZuHdDhUXbkJjypPYQIiIiddDDBbSwWsegYyJjGYyFmMfBCcbXxNQqLlbbBBODBgGwWFfoOXlLxhPpHMmbyYbnXxNWgGwutTUVkeEKQHYrREukjMSJiJjIBbkiRrWxTtXKsDOlLGTRmMDXxdPqQpzjhWwJWwUutuUXxJjJBbjStTeyYgGQqFGguBbSBbsJjwDDUJMvDbBGjJxXgfGgqQFdzZPjxQqUmMzZQqpPnNOoOoOpPZzOooKkNnCcaARUCcuhHMLOPpollWwcCskKlQqNtTLlIwWEzXxJoOjZloRrxzRdfFUEePGgMmqZRrqeETtTJfFjmMBVvzZcCIiWwZhbBHFfzMPpLlcwWuUCcHKkhVvbgGBCNofVTwvVWtdlgGksSGgKKUuoVNkKtRrWwPmfFCcWwqwWiIzXxZifFKjQqiIfVvFiDdIcufFUiIZzlLEGgbBDbBTteEGFEzZCcboaAqQAajJoKkzZOOrReEBCheErIsSiZzdDSmiIVvVRkKEUuesSGbBgJyAtWwTjDnKkkKWwPpKJjofQqFvVqEwWyYeDvqQVyTZzcftJjqFeEfQbBphXxYfFZDdsStTziIydDHlLXKkxWwXxvVeMoOmEvVyYOzZyYoNnmMflVqQvUuSsywWBbFfbNnhHdDBhlLeEHzZvMmbBVYLKpPATQMscCKDjFfJAJPciIYyKkCcCJjlTGguMaAjoKNnVDkanDdMnNmGgiCcWwmMHyYsSLlnNHLlPSsTdDEMmSCMmcsCceetTEKkOqQAaoDdRoOHaAhrztTaUKYypPkuAvVZgGqQXEFmDyYdHhEeBUeElLSJjsTwPpwWmCOocpvSsVzdDZLlPLteEILlmFwWfHhMiXxTdFfcljpPJZaVvAXxzcCkKIdyYDNLlxXVWwiIzZCckKvdxXKkNQAaNnIFfiAYZYLlSQjJTtfyYFItKkTeEevMLlmkKVESsiMmZzdxXKkqQTMmlLoyNLlnYlQRhHvaAEsxjtnNUZwqdDffkoQqOKCcnNtThHHQYyhHBbeSsEJjuGBbTxzzZwWoOdDPKlLkTtuKlLkrRHhyYLlxaSUusDAadjJaAEHhVvkKYyCsSXrRJFdDfunNqQVxJjzZRXAtROoZzmMrGgCcgGTKhqQrtTSsMTtprOoRjJfNnFPmLkKyaWwAuEPpePSspOoyiWwIJeEfFjmOooOHhMNzZQLVvqTtRCckwWmOWwogGuUHbqaKkAxYaAyiIEWwPKHhWsKkmSeEZwjJkKDFfdKkAaWwYyAgGinNDdIxHWwrrTtRmMRDqQYydeEOoFfuUzVqaAQwWvpEeulLuTwWtUAEeKONnokWwyUuYtjJTauJYyjNnFfmMepPyYIJjUbBEPXxyYVvRkutTUVMmjYzZgGZzFOYyBbofJtTgNnGuUbrRGJWbqGgQBwDdDSsnuUNHhoxXjvVJQBbqOUuvstTShHzZSsvhHVFwWFgGfUljJtTLEVhHvEeGgLNFfexXEGIigTkKQvVIfFHhVvrRFlAaKwWkLvQuEeMGxXtTeEgmQCcaAqXnNxwWcCjJjGggGHjJsSkIisKkLHhowWQqOTgtnNxvVmxXMsSQxXFfMXxzZTtfEKgGMmkjDdJeWslLSlLGMzjrhHRgjJGPpBzZIiRaUoOuAItDJvVjVCcyYjJYyvlLvYyVnGgAakKSsbBAavTtFRzZrDdMIAqQlLWwKkapPimpPnkKRmbFfBiILlaLlDudDrRlLtMQFfVeEvquUulLfVvFPxXppPUUaAzPAabBLEtTewWlpcCcCilhHLPpfFfKkFMtQqEehFfEepPHTtvKkVWLlhNOyTtYahozTtjJZGSsgwyqWwocYDdyCOQYxlLXTsgGdDBbFUuUufUBbtBbTuUuYyDdRrgGZBbzZzJdDfYyJjYqQpOoPviIVhHAaArROoXxsuUSaicCIBxvVzZzOtgJjGBeEUuIyKkYbBixXJjWxXLlsSeEaAsOomMMmLlphHMsSwWUumDdPSrRwqFvVyYqgGQdhUmclLxXCMhHPpuNnaGgAvsShHVHSgGsQHhqegpbBfFPwNHqQhlLxDnNdGxrDdRDdGgowWOUSspPuvVXnNJjaoOYyAtTINXxJvaBbjJxXASJjJFMmfwRKXxQqakKAVvkEExOeEMvSsFfVmoBJSJjmAKIikWOoWIiwwWwKIiULfIiFzxRpPpqQPQUlLIiKjZzJudDyYIiaAiIWEezZLYSAasdDybBcCxYyRrZnNzpPcCgGwLlLlTtWGgvVYyXiIuUkfOoXxCZzcOuoOUoHWwvyRoOEeHhFfNnwWGCcQhHKkquAaVZzZDZzdYyCckKjJCcoOzIiqQSNhHnyaAlnNLYcqQBbMYynNqQkKmsSCnIiiIcCYFfyyYYyQqNPMmLaASsiIlGYoYyOdDnDdhHeENTtWjMmSsFWwMmfFMmfxJjfFFfWsiQqISDXxPpZzdMmFfMmlLvIiCUuceEYaEZPpzdBbgGDPpqzZQGIigGgoODMmMmdmJxXjMBbAayQqIjtTJJjiQqwMmyFfYOyuIhHiUuLgwWWiIwcMmqVvQCNnwWdDcsoOorRbuSsSsySCcsRZkVvwyYBPpHkmMKUuRriPpUuICLNnlcGgAFfaLlpfmMYyFJMfFuUZzEewrOYyoRhHLlYyxXGghHWxNnXnNcCwWRrZpPPpzLlyYbBDdDyeEtTYWhHwXNnxKkVvHhZzlfFFYyyeyYGtAKkaekEoOeKPgtwWTIqIwAaWmMKCckSbBqQSsoOVvsLJjlxuUHhVvhAaHLFmLAUqQuiLlolLOtTveVvdDQUucCpPLDdZzFGgrnNgxXGkKfFUuHhcCwjJWZzRHhKkxIKkulIiKNwuUvVWHhPpEekNhHndoODDdDderREtIiWbAafFniINSQqsBFfGgNPdDBbuWwvVqQUuUlLYJjypKkRrkrRQqLlpPTfFtAaKkrsSEzkKZowWOiIuUGglLQktTKqGgaANhHsSpPaAnenwzZWnNTyYxmnNMXNnBbFepPEFfCdDcdbdDKtTkYyzZrzZRTtGgGgJoMmOBbjXbBmZzMxgEePuZzNxOoXaAsSTXxtiFfOaAotykhHAiIOoPpaWrRmMwDdyYGgnNnRcChHblLxXBSsTthVLIaAilQqOoUuveuGgJjTtwWbBWolLsAaSOOoKPpwWqQkDLfFlzZdKknNfFPpSsPpkSsHhTvVtHhzZKXCcnNMmcCxxXHdDkTtxXiIwFXxqOorRsSzZgCeEcGoOsNnMmmmMXCcyjZMKkmzIiJYlFfhzZAdDwWaZzHJjLfFSsEetTxdXRrxDQqdDsVvCdDcAaYtbBXxyfFBbYfFOoqRrQTUuSsjjJKbBVvBbAaztTnNIxsFfSXpuFfVuujXxRyYulLVvsdDSxABbuRrEeKzZhpvVPAaHydUupPDgGeEJjDdztTHfBbgGVvMCyYvKkuFfUVfFcQQzZeEjiIUWdhDOjMmJzZbaAUuaAEeVSaAsvteEwKkDdKUpPHhaWzZcTDNndtCrCZzmgGMcfSsPpFWwlSsLfjqQQHhoOsSYrRfTteEFyYcCykKsbBgGSLUulqiNnIdDqgyYGHluULYyhIiZXAlXKkLyYkKlJjmMVvXrRxSwWsxTYWciICwytfFLMkKZMmyjfFJhHRrWwYdDfzZFSjnRTXxtnNeOhHoYybBEHhTtnNZzunNRZzVvrFoOfRziIbBYyZrRuevVAZzqQeEBbQNnqawWHoOhFftTaADyYFBbfaAdZxwGMmSsdDZzGCclDdLxXOokuTtuUBqTtHhOoUunYqQlYYVvUuKkyBbQgLhHgGlAWwsSGNngaBFfbtFfkSsKISsiNnTtjQqJaTdwvVWjJCcErREeUucuZvNnEGgeIigGqQsIsqOqQoQoTtbBBbObBuUNwWkKrReEegGEhHuSsyYtUuAjJakKfRrCcFdvVHtThDPpkLMmlKTRcVtTvxxJjoGgQuhHUUuglLGnLlORrcaACaAoNnNbBHhWkKZrRzAawxXsSyYhHqxvtTVPpIcEeCBbBbkTFftashHACcPpKklLuUabmMBhMmBbBcCHcCFeIiLlEVvqfFeEkKeEQRrEeIiUkKOQqoAyYYydDMRUuXOvVoxmNhHniIBDJjPMmppPFWwVmQeEqMqQBboOnEaAoaAOiWWEzZekYhHyoOdbBDqlLbGgXPpxDWwsIiRrEeTtbBiISyYGAXxBbdDacqQFbBfiIGjJdDDdgZzxXUcCaJzZLljAuewAaWwyVvzGNMtDdRcCrfiOoOyIiYoDdyIiYIovyaMmfVfFQAaVSsvpFluULKklLyqQJjuUvVqdDopJjEePOcFfzYyYysSZLlqQfFoHqjJQkYLlyuUWlfFLVMdDmtTLlHVuUAdTtfujJUFcIiCwPpWrRdDvVeYyexXEgGyMmwcsxXTtDdQQqsSqnNzZSsSMIimFfYZiIUuHhHEDYydEaAqQitYyTHhrRLcIiWbBwChHQMmqyXxnqQNEekyYCiIcdDeBbaYyAEcCncCoUuvVOeEoObBxnNsIiPAaplLXEJjiIehHxddcCdaAJjhHgSsFfjJjHWwTvVtAagGJjhiIIiSswHhYyrbBRPOosSvVhHOEeGEeDdvnNfycCYFvAabBqQyMWwPDdtBbgpQLTtvVTwWtlLlLUVOHhoOoOonNSxXGgwWVvEeWwNnGgFfNnCcQqnQqwgyYGWGwWgDduUKkhuUMmNnHNXZzOoRrXxrvVqQaAuUNdVviIDcCIfFiZImMizkKnBbBOobRFfyNbSsaABbAaGgBJkOhAavVFfHoybBcCGiIpoOxXVvXxWuUoOwRjAJwWlRrLsyTtEeYCcBbQpPqjJMmQgbOsLYylSoCcqQBgGUBLlDdiwWfFZWwzfFIqwWQbTHhtBwWlmMFfLgBbGLlDdKkhHBWwWwHhHCcBbFwWPhHMmJOorRTtjpbUBbujJWwBymMSsFfKkjJgGTzZWMmppPLUulGNnhzZYdDEeLlGCOocgnTyWwDdYLlNnFEONxXJgGjnHhRroeyyYPpsSlLBbFyYLlzZfKmMhNPaZzpPARrpRrRyYkKMmUwWurAaaALlyYVvfFOXxoUuDdmMQsSvaAYyFVGgsSvumMrIiRzBbZUfiWoOwIoOpfFCcPTGghHXxotTOtBYybMmfFwWQqdDSLlzZsXAPpqLldgGrRHrosBbSOtTRhwWDkKDnNhgGWjJVvwFfDdFfVPpvTtoOgFQqYQqzZOoCcyJjJxlLXLlqRvDdVRrrtTbBCcfFYyPpXxWwtTxXvVUuAabBNKtTMmkvVxXEHhzZTtRregWwYyGjKXxhHkJjwfFKkQBbsxXryYHhfFRyYSFfmMxvVHhKktTjJCcYyZcpPNKfFUugGMmvpPMmVvEvVewWpxeEBbbhHdDDdDdBXtjJTeEZzPNCctTadDFfAnjAaJUurzZRHhphHtThjtHhhHtTTNvcCVlmMLnNbBSkZaAHhzwlLGgFfnNJYyyYjJjJjgKkGzZPQVvwLlVvXxjJZteETgAaGDdWwzGKUuYyUneEehHMVMmvmQqMOoNmMIiUDCcjJoOdhHunwSFfaLlSsVzZvACcuUMiIPoWEewHhWIiwVvOgGyYYXxOnNoyTtpnNZOaAxKkTtMzZmIvVmMstTSWwPpBbgGiXLoOlBbosSzWbtTBwyncCNJhHcCjjEeSsHfjJbBFhJZzIiTtvgNnGeEVpZzthYyhBbHkKxXHKkrRTmnNxEeOokKbmmMTtMgGBXMTtpPWwKwWkJjLlPBOoiIbYGgXrRxrRmewWEMCcTRrpPPptMPpmXxYFaTtAfQJOsSoZzjqSsmhQqHMSschHeECylLxXYdLAadDvVlqQqQqQDMsSmRrEKkekOomMhHsZzpPUuUuonNXxjJOSAPpasdDSKJtTRrjhHKkCdPpsSPlKkLpDTLMmYyCcIAaicCeplLsSnpPNPEtFfTLlJjYkIiKyjPphPpXxuUyYYNEeMmmWwhHZzMvYydBbDVkKZzAHpPhnNPpXJjHvVHhKqQOcCotTMmhHkhkmMjJCNnczNnpaADdUuPZIiKaAXZBVjJvbpPvVRryYSsNdGrfNnezTtZEFRwjJduuxXUjJUXZLlzWwxKXxWpPbkKsSBwkiIlLDSsgleEWwuULEMEemsmyYMfkTtKFroTtORkKsSSrRfFeGoOxbBXSsYazbBeEZASnNsXotTOYyxnNSsJOBYybZztTNnyYYykXxXVvxNnmMOBbTASyYINnisauHhUtoxpPXNnxTtnNzZcHhCcCLlXIATtabBAaYyYyqQilkKWCcEFfewsXxSdnUlLuRrNZzqQDOpPoMEexXEesScCWwBiiidDIdDIHhpPHhIyqNnsSQFEeHnNhBbfYbmDdnNuUaAvrRsSVvVaDdRsSrcDdIiCAtTdmMOombBLlMwgGWqQTnoOwWsSaAWFSsfwNyYijQqSsJvVrROokKIlajJAyYkjJOoKbFmMfDdqQJRrztTLBblPpqQZTaQqZCczAXxclLOMmoHHXxhjJoOhnNMmLcCcfyYFCgGlNfFnCHsxXczZCShpPVKkvtdXxYySspPYyEEejJSsNzZkMmKwWnVUukiIKvEeVGSsZzdDwGWwgWgpPXSsZzxRPprQlNnLiIMmPqWCcwTtnNQNvRrVGkKgcCQgBbGysSYqCcpvVPDbBWwuUeAgGDdanhHgGRrNEHbEZSAaszeCcBhcCdlOoadDAWSswLZWwzFSsjJcXvVYmQqGgfFsSxiIXJjoOMlSsLwEeRrJjkKrIiuURWWQqPjTtCcBbodDJrRjIQrRqXxtTxcCXcCjRrpgGPJJlLjNiIgGaAuUqgGQfFcumMPhHpUCZzpPlLYyvVaAAarRgGWwukKBbUwWiItcCNnTvVmeEMMmuzDdpPZWwaAsUuSUngKktbXxBKkqQkKXQqGEegAyYAakKwWanVxXvTQqtHhwWRFoOlLLlgGXxoOfZvBbsxXovsSVJoOLljOoOlLRrSJNypYyPHhyzZYYWBbdDoOraAqQRwqKkQVvnjeEOoSPtQqTNnpIisbOoBJjTLlwWJjYSXxsGgyOosRNnNnndDNsSIqQkeEKiHhIiPphPpHrRkQqKTtuUcCVvkGSUupPsSXGgmMZzYyxIGdDgiEesHhgKxXFpPfhaARrPpEKkQqeHQWwqTgGdDtHjvVJKTtsqoJjOnNbBQiIuUSHhzZkDdSGgJjwOoWqQCsScMmVJjrRaASBbZzdDsvrEqQtLlTeGLlQqDiAloOnNLaoiIOfFYyIfFdgUfjWwTzMmZtJMmFJKkHhdDNzZnjJjbwJmMYyjTrRtWlLOoXXxnMmDSeEHhsdNmMVvDdxBvVyYPVUuvBbLleEOofFNnrRgGMmlLgGpgGjNgGvVwWnzZtTeJjXFWJjHhwfgGXxxzZVTtzvVZwWLlWwvVsSvWwgGrRpPtrRoOTEZzpFwWfPvVISwWsiTaAtYGgoDdLlOyQPHhdDCcpBjXxJbPZgGzpZzqtTOokKOoSsJiBbAaIgGssmMmMSSYyaNNnwWnEQVFfeWwEvpPAavVHhmXxbyYiIfrRFYANnGZzKkgLOolsSaVAIiaYysOouUPpxXQQqqwWQqrcCRMmPVvxXpSbWwOoAaBvPpsjJdDSgKkRrSGjpPJgJjSssGgSsUhHwWuMmAazZzZQzZlSsAaNnuFfUaALqbpPmMYyWwMmBvhHzZVXxXqyYQyYdDqQPpdDxZzhHRLxXlxXEemqQMIirRAaHhTGVFfvgvBbAaFflLvVVHhrRHhRQqsSrRrEYyUXxueVNxXnGgKpPkPpvCcttTPpryYoOGNTtUuQqIiTtEVvIieXxYyxXEiIvCcKkTbBtlaALniIzZNVvVeDdWNnziIZgzZGjGgTtJwHpfyYPpFPGghdhHSsJAajPrvVSsRpDKbzZBknwWyYiLlqQwUcCuWWKkwzZiIITtDdApPacAPRruUyqfFVvQYpcCZiUuAaIpPEqQoySsNnmMYfjJwWFZdDNnLlAalLOnNozoIOovVwWiUjhHJuVvXxlLCcJaAjCcOoVvCciGgIpqlbBLZDdzzZQgpPGwqaXxKkAjBbJmMQUukYJjaZznpPlLNrRALHhaAlBbbBPpywWiIQqsSKIioTtoOOzbdDvDdVBiFfSsjeEGUugzZJEeHhuUmMlfFSsBbRrvVyyYoOYdavVCUucWwADvVtTeEuUJjJHlLhjJrRjVEeYyRKkrFfWwDdRriIAQsSqHhaLMgGmYySszZsgcCGKoOkSBbljJFUufbBbBbBJjHhXxyYEeERKkBbIivVoOeErAaUuJjGgQqFfxXtTRwWwWrxXOoLVwHhWvGgYynNvJjSsmMhHjabBAJYyQqdxXpPDmrGgJlLjRMRwWrVxUEeuXDdDdRYyxXcCTthZzHUukoBbOiIVyFfYvgUuHhsSGvVjuUJVFfvzpPqgGQjJUuxEejJJsSFfUtTujqQkSsKhBrRbNyYZznjiIEcRrQnNqZzNnCeBbJHPpaSiIsATtaPZPpgGzyYlLyyrRvgGVLhHXxzZlYKVvhPpHpPIikMfFFLlfJLRrHWwGjJgegGCrRcEPLlNaAnpPpCsSdbBDIvVluUSsLiJuUSDdsjcGgMmuUvasSbBaAAIiUuTfFnNtHnNhNxXnFfRroOVniINhRqQrwWWwvqQvmMDdLlCcuFfUzZVVBboXxRrOlIimdDYyMtTUuJKktNNnnbBsmMEeSTwelLEWjVvWzZLlwobBpPIijJdDYyKkOWUuwJjyYAaxXxXIfFizZnNEVnNpPvQRrqeQnNMmqghHcXxXxCWwlLGTIAaUuTttTitltiIvVWwIiTAarRZzQNnoOqxXlLsSmMiOosSEegGQqdeEjJKkuUKkCaAKkCcbBcHfFeEhSseEPVvKklLYyGgpDdcCtSsglLrTtRGPphHNnuUfFeAaEnNWwNnPPpOokKcCCcmtTsSGPpgMa
diff --git a/2018/inputs/6.txt b/2018/inputs/6.txt
new file mode 100644
index 0000000..e544bbd
--- /dev/null
+++ b/2018/inputs/6.txt
@@ -0,0 +1,50 @@
+195, 221
+132, 132
+333, 192
+75, 354
+162, 227
+150, 108
+46, 40
+209, 92
+153, 341
+83, 128
+256, 295
+311, 114
+310, 237
+99, 240
+180, 337
+332, 176
+212, 183
+84, 61
+275, 341
+155, 89
+169, 208
+105, 78
+151, 318
+92, 74
+146, 303
+184, 224
+285, 348
+138, 163
+216, 61
+277, 270
+130, 155
+297, 102
+197, 217
+72, 276
+299, 89
+357, 234
+136, 342
+346, 221
+110, 188
+82, 183
+271, 210
+46, 198
+240, 286
+128, 95
+111, 309
+108, 54
+258, 305
+241, 157
+117, 162
+96, 301
diff --git a/2018/inputs/7.txt b/2018/inputs/7.txt
new file mode 100644
index 0000000..3fe80cb
--- /dev/null
+++ b/2018/inputs/7.txt
@@ -0,0 +1,101 @@
+Step E must be finished before step Y can begin.
+Step Y must be finished before step T can begin.
+Step I must be finished before step C can begin.
+Step G must be finished before step F can begin.
+Step C must be finished before step P can begin.
+Step B must be finished before step Q can begin.
+Step Z must be finished before step N can begin.
+Step J must be finished before step W can begin.
+Step W must be finished before step P can begin.
+Step K must be finished before step D can begin.
+Step Q must be finished before step L can begin.
+Step V must be finished before step D can begin.
+Step O must be finished before step M can begin.
+Step A must be finished before step P can begin.
+Step M must be finished before step L can begin.
+Step R must be finished before step S can begin.
+Step D must be finished before step X can begin.
+Step X must be finished before step N can begin.
+Step P must be finished before step T can begin.
+Step F must be finished before step N can begin.
+Step S must be finished before step L can begin.
+Step U must be finished before step N can begin.
+Step T must be finished before step L can begin.
+Step N must be finished before step H can begin.
+Step L must be finished before step H can begin.
+Step N must be finished before step L can begin.
+Step X must be finished before step F can begin.
+Step P must be finished before step F can begin.
+Step P must be finished before step H can begin.
+Step B must be finished before step D can begin.
+Step V must be finished before step H can begin.
+Step X must be finished before step S can begin.
+Step Q must be finished before step O can begin.
+Step Z must be finished before step T can begin.
+Step K must be finished before step N can begin.
+Step S must be finished before step H can begin.
+Step M must be finished before step P can begin.
+Step Q must be finished before step D can begin.
+Step R must be finished before step U can begin.
+Step J must be finished before step P can begin.
+Step P must be finished before step S can begin.
+Step V must be finished before step U can begin.
+Step R must be finished before step T can begin.
+Step F must be finished before step S can begin.
+Step D must be finished before step T can begin.
+Step E must be finished before step N can begin.
+Step J must be finished before step N can begin.
+Step J must be finished before step A can begin.
+Step K must be finished before step U can begin.
+Step V must be finished before step N can begin.
+Step V must be finished before step S can begin.
+Step U must be finished before step L can begin.
+Step F must be finished before step U can begin.
+Step I must be finished before step T can begin.
+Step J must be finished before step L can begin.
+Step E must be finished before step T can begin.
+Step T must be finished before step N can begin.
+Step I must be finished before step G can begin.
+Step R must be finished before step D can begin.
+Step E must be finished before step B can begin.
+Step X must be finished before step H can begin.
+Step P must be finished before step L can begin.
+Step Z must be finished before step J can begin.
+Step O must be finished before step L can begin.
+Step E must be finished before step H can begin.
+Step F must be finished before step T can begin.
+Step A must be finished before step F can begin.
+Step U must be finished before step H can begin.
+Step F must be finished before step H can begin.
+Step C must be finished before step W can begin.
+Step A must be finished before step L can begin.
+Step V must be finished before step M can begin.
+Step U must be finished before step T can begin.
+Step E must be finished before step P can begin.
+Step Y must be finished before step U can begin.
+Step W must be finished before step R can begin.
+Step E must be finished before step X can begin.
+Step Q must be finished before step U can begin.
+Step I must be finished before step F can begin.
+Step V must be finished before step F can begin.
+Step V must be finished before step T can begin.
+Step R must be finished before step P can begin.
+Step B must be finished before step A can begin.
+Step S must be finished before step T can begin.
+Step M must be finished before step F can begin.
+Step Y must be finished before step F can begin.
+Step C must be finished before step K can begin.
+Step D must be finished before step S can begin.
+Step O must be finished before step S can begin.
+Step M must be finished before step U can begin.
+Step Z must be finished before step S can begin.
+Step R must be finished before step H can begin.
+Step C must be finished before step O can begin.
+Step G must be finished before step Q can begin.
+Step Z must be finished before step D can begin.
+Step B must be finished before step N can begin.
+Step I must be finished before step H can begin.
+Step I must be finished before step P can begin.
+Step E must be finished before step J can begin.
+Step V must be finished before step L can begin.
+Step B must be finished before step U can begin.
diff --git a/2018/inputs/8.txt b/2018/inputs/8.txt
new file mode 100644
index 0000000..ecb2263
--- /dev/null
+++ b/2018/inputs/8.txt
@@ -0,0 +1 @@
+8 11 7 2 4 4 3 6 1 5 0 8 1 6 1 1 5 4 7 3 1 2 3 1 1 1 5 0 9 9 5 2 8 7 5 7 1 4 2 2 1 1 3 1 6 0 8 6 1 8 1 1 5 4 1 3 3 3 1 3 3 1 4 1 2 2 3 3 4 1 9 0 10 1 9 5 2 6 5 6 5 7 1 2 3 1 3 3 2 3 1 1 1 7 0 11 2 5 1 1 8 4 9 1 5 4 7 3 1 3 3 1 1 3 1 7 0 8 5 2 7 8 5 4 1 1 1 1 3 2 1 3 2 3 3 3 2 3 7 1 8 0 9 2 5 4 6 7 2 9 2 1 3 1 3 3 2 1 2 2 1 5 0 9 1 1 6 1 4 2 9 4 3 1 1 2 1 3 1 6 0 9 7 2 9 4 4 5 1 8 6 1 3 1 3 1 1 5 3 3 4 4 3 4 3 7 1 6 0 11 1 3 1 1 1 7 3 8 2 1 6 1 2 1 3 1 1 1 9 0 7 7 2 1 8 1 9 8 2 1 1 3 1 1 3 1 2 1 7 0 8 5 7 1 9 7 6 5 3 1 1 1 2 2 2 2 2 2 1 2 3 2 4 1 4 1 2 5 5 3 4 1 8 0 9 1 3 7 1 2 1 3 9 8 3 1 1 3 3 2 3 1 1 6 0 7 2 4 2 6 8 1 6 2 1 1 3 3 2 1 5 0 10 1 6 6 9 7 8 4 4 9 7 1 2 1 2 3 1 1 4 4 3 6 1 6 0 10 1 7 2 8 1 6 9 3 6 7 2 2 1 3 1 3 1 8 0 8 1 8 9 7 6 1 3 4 1 1 3 2 2 3 2 2 1 6 0 8 1 8 2 3 9 5 1 6 2 1 2 1 2 1 4 2 3 5 5 5 3 4 1 6 0 10 5 7 6 5 7 1 7 4 1 5 1 1 3 2 2 3 1 8 0 7 7 1 8 1 6 4 3 3 3 2 1 3 2 1 1 1 7 0 10 6 1 1 5 9 3 2 3 3 9 3 3 3 1 1 1 1 1 2 1 1 3 5 1 8 0 11 1 3 1 6 6 6 5 1 5 1 6 2 1 3 1 3 2 1 2 1 8 0 6 1 1 2 1 9 9 1 3 1 2 2 3 1 2 1 6 0 9 8 4 2 8 8 7 1 8 1 1 2 2 1 1 2 5 1 1 4 2 3 6 1 8 0 8 4 1 8 1 3 6 9 8 3 1 2 1 3 2 3 1 1 6 0 7 9 1 6 4 9 4 6 1 3 1 1 1 3 1 8 0 7 5 4 1 5 7 1 8 2 1 1 2 2 2 1 2 1 2 1 1 4 4 2 2 3 3 2 4 4 3 7 1 9 0 8 3 3 7 1 1 5 3 3 2 2 1 1 2 1 2 3 1 1 9 0 8 5 9 8 9 4 4 8 1 1 3 2 3 2 1 1 1 1 1 9 0 8 3 6 5 1 8 4 5 2 1 1 3 2 2 1 1 1 3 1 1 5 5 5 5 1 3 4 1 8 0 8 8 5 8 6 7 1 3 5 1 2 3 1 2 3 2 1 1 8 0 9 4 2 8 6 6 2 2 1 2 3 1 1 1 1 3 1 3 1 6 0 7 5 4 4 2 2 2 1 1 1 2 3 1 1 5 5 2 3 3 6 1 8 0 6 1 5 6 4 3 8 1 3 2 1 2 3 2 1 1 6 0 11 7 1 3 7 3 5 3 9 1 5 6 3 2 1 1 1 1 1 7 0 8 7 6 2 8 5 1 3 4 3 2 1 3 2 2 2 1 4 5 4 2 1 3 4 1 6 0 11 7 4 1 1 8 4 6 3 9 2 8 1 1 3 3 3 1 1 8 0 7 1 4 9 2 1 4 6 1 2 2 3 1 3 3 3 1 6 0 8 7 6 2 1 8 4 8 7 2 1 3 1 3 2 2 1 5 3 4 4 4 4 5 4 3 4 1 7 0 10 1 3 1 7 1 1 7 9 5 7 1 2 1 1 3 3 1 1 6 0 11 4 1 7 7 2 4 6 1 7 8 3 1 1 2 1 3 2 1 9 0 9 6 2 9 1 9 9 5 6 1 2 2 1 2 3 3 3 1 3 2 2 2 1 3 5 1 8 0 11 4 8 7 1 3 2 3 6 1 3 9 2 1 2 3 3 2 1 3 1 8 0 6 4 4 3 6 1 2 1 3 3 1 3 2 2 1 1 9 0 10 7 5 1 7 6 1 3 6 6 6 3 3 2 1 1 2 1 1 2 3 1 2 5 5 3 6 1 9 0 10 9 9 2 1 6 4 4 4 1 2 1 2 1 1 3 3 1 1 1 1 6 0 8 1 4 6 1 4 5 8 6 2 1 2 1 1 1 1 7 0 7 3 9 1 1 1 1 1 1 3 1 3 1 3 3 3 3 5 4 2 2 3 5 1 5 0 8 7 6 5 7 1 9 4 5 1 2 1 2 1 1 8 0 10 5 3 2 8 3 6 1 7 9 1 1 3 1 1 2 1 3 2 1 6 0 10 2 6 1 6 9 9 7 6 1 4 2 1 2 3 2 1 5 4 3 1 2 3 4 1 5 0 10 6 2 1 7 1 1 7 5 1 8 1 1 1 1 1 1 7 0 6 1 3 7 4 7 1 3 2 3 1 1 1 1 1 5 0 8 6 5 1 4 4 1 7 2 2 1 2 3 1 3 4 2 5 2 4 6 5 5 4 3 7 1 9 0 6 4 4 1 8 4 1 1 3 1 2 2 2 1 3 1 1 5 0 8 1 3 2 8 1 5 5 5 3 2 3 3 1 1 6 0 7 2 1 8 7 2 7 8 1 2 2 2 3 3 3 5 4 2 5 5 4 3 7 1 6 0 10 6 7 5 1 7 7 5 1 9 1 2 3 1 3 2 2 1 6 0 7 8 6 4 5 6 5 1 2 3 1 1 3 2 1 7 0 7 9 1 1 1 6 3 9 2 1 3 2 2 1 2 2 5 1 4 3 5 1 3 7 1 6 0 7 4 6 1 5 3 1 3 1 3 2 1 1 1 1 9 0 9 1 3 8 4 5 7 9 2 5 3 3 2 1 3 1 2 3 1 1 9 0 8 2 5 6 1 5 5 1 8 2 3 1 2 1 1 2 3 1 3 4 1 2 4 3 2 3 7 1 5 0 9 4 8 1 8 7 1 1 7 6 1 2 1 3 2 1 8 0 8 8 3 5 4 1 3 3 3 1 1 2 1 2 1 1 2 1 5 0 8 1 5 7 8 5 7 3 5 3 3 1 2 1 2 2 5 4 3 5 1 3 6 1 5 0 10 8 6 1 6 7 3 4 2 1 7 2 2 1 2 3 1 5 0 7 4 2 9 1 3 5 1 3 3 3 1 1 1 5 0 11 7 8 2 5 9 5 2 2 5 1 7 1 3 1 1 1 2 4 1 3 4 2 7 3 5 2 5 3 3 5 1 9 0 11 6 2 2 1 7 8 4 6 8 9 1 2 3 1 1 1 1 3 3 3 1 5 0 11 3 4 8 3 9 1 2 5 4 1 2 2 1 1 3 3 1 8 0 6 2 1 2 8 1 1 3 2 1 2 3 2 1 2 1 3 3 3 4 3 4 1 8 0 9 9 8 4 1 3 6 4 1 3 1 2 2 1 2 2 2 1 1 8 0 8 1 9 1 1 7 2 1 5 1 3 2 1 1 2 1 3 1 7 0 6 1 8 7 8 5 4 1 3 2 2 2 1 2 3 5 1 2 3 4 1 9 0 6 1 1 2 7 2 8 2 3 3 3 2 1 3 1 3 1 6 0 9 9 7 7 3 8 5 2 6 1 1 3 1 1 3 2 1 7 0 8 5 4 5 1 7 3 8 1 2 3 1 3 1 3 3 2 3 3 3 3 6 1 6 0 6 1 1 1 6 6 3 2 3 3 2 3 1 1 9 0 10 6 6 9 5 9 2 9 7 6 1 1 1 2 2 3 1 1 1 2 1 5 0 10 4 1 7 4 2 8 3 3 7 3 3 1 3 1 2 2 3 5 2 3 3 3 4 1 6 0 8 4 3 7 7 5 2 4 1 1 1 3 3 1 1 1 8 0 10 5 9 8 3 9 1 1 8 4 7 1 1 3 3 1 2 3 3 1 8 0 8 4 9 1 1 9 4 6 3 1 1 1 1 1 1 3 1 3 2 2 3 3 7 5 4 5 3 5 1 8 0 7 1 6 1 8 5 9 2 2 1 3 3 3 1 3 1 1 5 0 9 3 6 2 2 4 1 4 1 7 1 2 2 1 2 1 9 0 6 4 7 1 1 1 8 2 1 1 1 2 1 2 2 1 4 3 2 4 5 3 6 1 7 0 10 3 2 6 2 1 5 7 8 9 5 1 2 1 3 2 2 3 1 7 0 6 3 6 6 1 4 6 1 1 1 3 2 1 3 1 7 0 9 6 1 3 1 3 8 5 9 4 1 2 2 2 1 1 3 2 3 2 1 2 3 3 4 1 5 0 11 1 3 8 7 7 7 7 2 2 3 1 3 1 1 1 2 1 9 0 10 4 5 1 3 2 8 8 8 3 9 3 1 1 2 3 1 2 2 3 1 7 0 6 6 3 1 3 2 4 3 1 3 1 3 3 2 2 1 3 4 3 5 1 5 0 10 7 8 5 2 3 3 7 1 6 6 1 1 3 1 1 1 9 0 8 5 1 6 1 2 7 4 3 1 3 2 2 1 3 2 2 3 1 9 0 8 9 8 1 4 4 9 3 8 3 2 3 2 1 1 1 1 1 4 4 4 3 1 4 4 6 5 3 5 5 6 3 5 5 3 5 1 6 0 11 8 3 8 1 1 1 6 6 7 5 6 2 3 1 1 3 2 1 9 0 7 4 1 2 1 8 1 2 1 1 1 2 3 3 3 2 2 1 7 0 7 5 6 4 7 3 1 1 1 2 1 2 1 2 2 4 4 1 3 2 3 5 1 9 0 8 5 8 2 3 6 1 9 9 3 1 3 1 3 1 2 3 2 1 8 0 10 2 7 5 2 2 1 5 1 7 9 1 1 3 2 3 1 2 2 1 8 0 8 8 7 5 9 9 8 1 1 1 1 2 1 1 1 2 2 2 2 2 2 2 3 5 1 7 0 11 7 2 2 5 7 1 4 9 4 6 4 2 3 3 2 3 2 1 1 9 0 7 1 3 3 5 2 1 9 3 1 1 2 3 1 3 3 2 1 7 0 10 1 7 6 1 9 3 6 2 4 4 1 1 1 2 2 3 3 2 2 1 2 1 3 4 1 9 0 7 3 6 9 6 7 1 3 1 2 1 2 1 1 1 2 1 1 8 0 10 1 3 9 1 3 8 7 6 6 4 2 2 1 3 2 1 1 1 1 5 0 6 9 8 1 3 5 4 2 2 3 1 3 5 2 3 5 3 4 1 7 0 9 2 9 6 9 1 2 9 2 2 3 1 1 3 3 2 2 1 6 0 11 9 7 3 4 2 9 5 1 6 5 4 3 1 2 3 1 3 1 6 0 7 5 9 3 9 1 1 6 1 1 3 2 3 3 2 3 3 4 6 5 3 5 4 5 3 3 5 1 7 0 6 9 1 6 2 1 6 1 1 3 2 3 3 1 1 7 0 10 6 1 2 9 7 1 8 5 9 1 1 3 2 3 1 2 2 1 7 0 11 2 6 4 4 1 2 2 5 6 2 8 1 3 3 1 3 2 3 4 1 1 5 4 3 4 1 8 0 7 1 6 5 8 5 8 9 1 2 3 3 3 1 2 1 1 5 0 8 3 5 2 4 1 9 4 5 3 1 2 3 3 1 9 0 9 9 2 1 7 2 9 8 5 1 3 1 3 2 2 1 2 1 2 4 3 4 1 3 5 1 9 0 10 5 5 6 1 5 5 6 1 3 7 2 1 1 1 1 1 2 1 2 1 5 0 6 1 5 7 2 3 9 1 2 3 2 3 1 7 0 10 7 8 4 8 9 8 2 1 2 5 1 2 2 1 2 3 3 3 4 4 1 3 3 4 1 8 0 6 3 4 7 1 3 1 3 3 1 3 2 3 3 3 1 5 0 7 6 2 7 4 3 1 1 1 2 3 2 1 1 5 0 8 1 1 4 5 6 3 5 7 3 1 1 3 2 3 1 5 2 3 6 1 6 0 10 1 8 1 1 2 2 5 5 1 3 2 1 1 1 3 1 1 6 0 8 4 2 1 7 7 8 8 5 1 3 1 2 1 1 1 9 0 7 5 8 3 6 1 7 5 3 3 1 2 1 2 3 3 2 5 5 5 2 1 1 2 4 5 4 4 3 5 1 9 0 8 2 1 8 2 4 1 3 4 1 3 2 1 2 1 1 2 2 1 9 0 6 8 8 1 8 8 6 1 1 1 2 1 3 2 2 1 1 7 0 7 7 8 1 8 7 7 8 1 1 1 1 1 3 3 3 5 2 5 2 3 6 1 9 0 8 9 2 8 3 4 7 1 1 1 3 3 3 2 1 2 3 1 1 6 0 7 2 1 9 4 1 3 1 1 2 3 1 2 2 1 5 0 9 8 2 2 7 3 4 1 6 3 1 2 2 1 2 4 3 1 2 1 5 3 7 1 8 0 7 1 6 2 5 3 8 3 2 1 1 1 1 2 3 1 1 8 0 10 5 2 1 1 1 5 7 1 4 9 2 1 1 2 2 2 1 3 1 6 0 10 5 4 8 1 6 2 7 1 6 1 1 3 3 1 3 3 5 3 5 1 5 1 5 3 7 1 8 0 9 6 5 9 1 1 8 5 5 7 2 1 2 1 2 1 3 3 1 6 0 7 9 8 1 2 1 2 5 1 2 1 2 3 1 1 8 0 6 5 3 1 5 3 7 1 3 3 1 1 1 1 1 4 1 1 2 1 3 1 1 2 2 6 5 4 3 6 1 6 0 6 9 5 7 8 1 4 3 1 2 1 2 1 1 8 0 8 4 6 3 1 9 7 1 6 1 1 3 1 3 3 2 3 1 7 0 6 1 1 8 2 3 3 3 1 1 2 2 1 1 4 1 1 2 2 2 3 4 1 6 0 8 8 5 1 1 5 1 7 9 3 1 3 1 1 3 1 5 0 10 6 9 5 9 3 5 2 8 1 1 1 1 2 1 1 1 5 0 10 3 6 7 9 9 1 6 4 2 8 2 1 3 1 1 2 1 2 4 3 7 1 8 0 8 1 3 7 9 5 8 8 3 1 1 1 1 3 1 3 2 1 5 0 10 8 1 9 9 1 5 9 8 4 3 1 2 3 2 3 1 6 0 6 9 9 5 1 7 9 1 2 1 1 3 3 2 3 2 4 1 3 1 3 4 1 7 0 10 3 5 8 9 6 4 1 8 9 1 3 3 1 1 2 3 1 1 6 0 6 3 8 2 1 2 5 3 2 2 1 1 1 1 6 0 10 3 2 6 6 1 2 1 6 4 4 1 1 3 1 3 1 1 5 2 2 3 6 1 5 0 6 2 6 6 1 1 9 1 2 3 2 1 1 8 0 6 6 3 3 6 1 1 3 2 3 2 1 3 2 1 1 8 0 9 1 1 6 8 4 6 2 9 9 3 3 2 2 1 1 3 1 2 1 5 1 3 3 1 5 6 6 5 4 3 4 1 7 0 7 3 5 1 9 7 3 3 1 1 1 2 1 1 3 1 6 0 9 8 7 7 2 1 1 4 5 7 1 1 1 1 2 1 1 8 0 11 8 7 9 1 1 2 9 7 1 8 1 1 2 2 2 3 2 2 2 5 4 2 2 3 6 1 9 0 10 5 4 3 9 1 1 6 9 4 5 1 1 1 3 1 1 3 1 1 1 5 0 6 1 2 1 6 4 8 2 2 3 2 1 1 7 0 6 5 4 5 5 1 1 3 1 2 3 1 3 3 1 1 3 2 1 1 3 4 1 7 0 10 4 4 9 1 5 8 1 2 7 8 2 3 1 1 3 3 2 1 7 0 7 4 9 4 4 1 4 4 3 3 1 2 1 1 1 1 5 0 11 5 3 6 6 4 8 6 5 6 1 3 1 1 1 1 1 4 1 3 3 3 4 1 8 0 8 9 8 1 6 9 8 5 6 1 2 1 1 1 1 1 2 1 8 0 9 1 3 3 5 9 1 1 3 6 1 1 3 2 2 1 1 3 1 8 0 10 8 3 5 6 2 5 7 4 1 4 1 2 1 3 3 1 2 1 2 3 5 3 3 5 1 8 0 11 5 4 9 9 7 9 4 2 7 5 1 3 1 2 1 1 1 2 1 1 5 0 6 1 1 9 9 1 8 2 2 3 2 1 1 7 0 7 3 1 4 2 2 5 5 1 2 3 3 1 3 1 3 1 3 5 1 2 2 7 6 5 3 3 5 1 9 0 10 1 2 7 9 6 4 5 6 9 1 2 2 2 1 2 1 3 2 3 1 5 0 6 8 7 5 1 2 5 3 2 1 2 3 1 6 0 7 9 4 2 9 2 3 1 1 1 3 3 1 1 4 5 3 2 3 3 5 1 8 0 9 3 4 3 1 9 9 3 1 4 1 3 1 2 3 2 2 3 1 9 0 9 7 7 3 8 9 9 1 5 8 2 1 2 2 1 3 2 3 3 1 7 0 9 4 1 6 4 5 4 3 9 1 3 3 1 2 2 2 3 5 5 2 2 2 3 5 1 7 0 7 1 5 7 1 5 1 4 3 1 1 1 2 1 3 1 6 0 6 1 3 2 1 4 5 1 1 3 3 2 1 1 9 0 10 9 4 5 3 8 5 1 3 3 5 2 3 3 1 2 1 1 3 1 1 1 3 5 1 3 7 1 8 0 7 7 3 4 5 1 1 1 1 2 2 1 1 2 1 3 1 9 0 10 9 1 5 3 7 2 2 1 1 7 3 3 1 2 3 3 1 2 1 1 5 0 11 1 1 3 3 3 4 5 2 6 5 1 1 2 2 2 3 1 4 1 2 5 2 4 3 4 1 7 0 8 7 1 8 1 4 2 5 8 1 2 2 2 1 3 2 1 6 0 7 3 5 9 4 1 6 1 1 3 2 3 2 2 1 5 0 6 5 8 6 3 9 1 3 3 1 2 1 3 4 4 2 5 3 2 6 4 2 7 3 5 4 3 5 1 6 0 10 3 5 9 1 1 3 7 1 1 2 1 1 2 3 3 2 1 9 0 7 8 2 9 2 4 1 1 1 1 2 3 2 2 2 1 2 1 7 0 7 6 1 1 8 6 8 6 1 3 1 3 2 2 3 5 3 1 2 3 3 7 1 6 0 11 4 2 7 6 1 2 8 8 1 7 1 2 3 2 1 2 1 1 5 0 9 1 9 1 3 6 7 6 4 4 2 1 3 2 2 1 9 0 8 2 9 1 5 7 2 4 6 2 2 3 2 1 3 1 3 1 5 3 1 4 3 3 4 3 4 1 9 0 8 3 5 3 2 1 2 3 7 1 1 3 1 2 1 3 1 2 1 6 0 8 1 5 7 9 3 7 4 7 1 3 3 2 3 3 1 9 0 8 8 2 9 7 1 6 7 2 1 2 1 2 3 3 3 1 3 5 2 3 2 3 6 1 5 0 6 5 3 2 1 5 7 1 1 3 3 1 1 8 0 10 7 1 7 1 4 5 9 7 9 8 3 3 1 2 1 1 3 1 1 6 0 7 7 1 3 8 1 7 4 1 1 3 3 2 2 2 3 2 2 3 2 3 4 1 8 0 6 2 4 4 6 9 1 3 3 1 3 1 3 3 1 1 8 0 6 9 1 2 9 8 3 1 2 2 1 2 1 1 2 1 7 0 6 1 5 1 9 1 2 3 1 1 3 3 2 1 1 3 2 5 1 3 4 3 5 3 3 4 1 6 0 11 9 5 9 6 3 9 9 4 4 1 2 1 3 1 1 3 3 1 9 0 7 8 8 1 3 5 4 7 2 3 3 2 1 3 2 2 1 1 7 0 10 9 9 1 7 7 4 7 8 1 7 3 1 3 3 1 3 3 3 1 4 2 3 5 1 7 0 11 2 9 9 1 5 7 1 1 5 6 8 3 3 3 1 3 2 2 1 6 0 7 5 7 1 2 6 9 5 1 1 3 1 3 1 1 7 0 8 1 3 2 2 2 5 4 8 3 1 3 3 3 1 2 2 5 5 1 2 3 4 1 7 0 10 4 3 3 5 1 4 9 9 3 1 1 2 2 1 1 2 3 1 8 0 7 8 5 8 7 2 2 1 1 2 1 1 3 3 2 1 1 9 0 7 3 7 5 1 1 5 3 3 1 1 2 2 1 1 1 1 4 2 1 2 3 4 1 5 0 7 4 4 1 6 8 6 1 2 2 1 3 1 1 8 0 6 1 5 9 9 1 2 2 3 2 2 1 3 3 1 1 6 0 9 6 5 4 2 3 1 5 2 1 3 3 1 1 1 2 2 4 5 2 3 5 1 7 0 10 1 7 1 4 1 1 1 1 1 2 2 2 3 3 2 2 1 1 5 0 8 7 6 3 1 1 9 4 1 1 1 2 1 1 1 8 0 9 1 9 1 8 3 1 2 9 5 3 1 2 2 2 1 1 2 3 2 3 5 2 4 5 5 4 3 3 6 1 5 0 6 3 1 5 1 1 9 1 2 1 1 1 1 8 0 9 6 1 3 9 4 4 4 8 6 1 2 2 2 1 3 1 1 1 8 0 7 2 8 1 7 3 3 1 2 1 1 3 3 2 1 3 5 3 3 1 4 5 3 7 1 5 0 6 4 2 5 5 1 1 1 1 2 1 2 1 6 0 6 8 9 9 3 1 7 1 3 3 2 1 1 1 7 0 6 9 3 6 9 1 3 1 1 1 2 1 1 2 1 4 2 2 1 5 5 3 4 1 6 0 6 2 3 9 1 5 3 3 3 1 3 1 1 1 5 0 9 1 1 7 2 8 1 6 2 7 1 3 1 3 2 1 8 0 7 1 9 1 5 2 5 9 2 1 1 1 3 2 2 3 2 1 3 4 3 7 1 8 0 8 8 1 2 7 6 1 9 2 1 3 2 3 2 3 3 2 1 5 0 6 9 8 9 8 6 1 1 3 2 3 1 1 6 0 6 5 1 3 7 1 1 1 2 2 1 1 1 3 1 3 2 2 3 1 2 4 4 5 3 3 7 1 8 0 8 8 2 1 2 3 4 5 2 2 2 1 1 2 3 2 3 1 9 0 11 2 8 2 9 6 1 5 9 9 7 5 3 2 2 3 2 2 1 3 1 1 9 0 9 5 1 1 9 2 1 6 5 4 2 1 3 3 2 2 1 3 1 3 3 3 5 2 2 2 3 5 1 8 0 6 7 7 1 5 9 1 3 1 2 2 3 2 1 3 1 9 0 7 2 9 1 2 4 5 3 2 2 1 3 2 1 2 2 2 1 9 0 7 9 1 1 3 1 4 9 1 3 3 2 1 2 1 3 2 4 2 2 1 4 3 7 1 5 0 11 9 9 5 6 3 1 9 5 7 5 3 1 2 3 1 2 1 7 0 7 5 9 1 3 7 2 1 1 3 3 1 1 1 3 1 5 0 9 3 3 1 5 4 4 2 8 1 1 1 1 2 1 4 4 2 2 5 2 2 3 5 1 9 0 10 2 4 2 1 5 6 2 3 9 6 1 1 1 3 2 1 2 3 3 1 8 0 8 1 7 7 5 7 5 5 9 2 2 1 1 2 1 1 3 1 7 0 9 9 4 4 6 1 5 1 4 1 3 2 1 3 1 2 2 5 2 2 3 3 3 7 1 9 0 10 3 1 9 6 4 7 1 8 8 2 1 2 3 2 2 3 1 2 3 1 6 0 11 9 6 5 3 8 1 8 1 7 5 7 1 2 3 2 1 1 1 8 0 9 3 5 2 1 6 8 9 5 3 3 3 1 2 1 1 3 3 3 3 5 4 3 2 3 2 5 5 5 3 3 6 1 7 0 6 1 8 1 1 8 1 1 2 3 1 1 2 2 1 9 0 10 2 3 6 9 9 7 3 5 1 3 2 2 3 2 2 3 1 2 1 1 8 0 6 9 1 7 1 4 8 1 3 3 2 2 2 1 2 2 2 5 4 1 1 3 4 1 9 0 9 2 2 2 4 9 1 2 8 7 2 3 1 1 3 1 2 1 1 1 8 0 7 4 7 5 4 1 1 7 2 2 1 2 1 1 3 3 1 9 0 10 8 5 1 9 4 5 8 7 2 1 2 2 3 2 2 1 1 3 2 5 3 1 1 3 7 1 6 0 10 8 1 6 8 3 4 6 6 3 7 1 1 3 3 3 1 1 8 0 8 3 1 7 5 1 4 2 2 1 3 1 3 3 3 1 3 1 7 0 9 1 9 8 7 3 3 6 3 6 1 1 1 3 2 3 1 1 3 5 3 2 4 4 3 4 1 8 0 6 8 7 8 4 9 1 1 3 2 1 1 3 3 1 1 8 0 9 8 4 1 9 2 2 7 4 1 3 1 2 3 2 1 2 3 1 8 0 11 2 7 8 5 1 3 1 8 3 7 5 2 3 3 2 3 1 1 3 4 5 5 1 3 7 1 5 0 10 7 8 9 5 9 6 4 3 2 1 3 1 1 3 1 1 7 0 8 4 4 3 5 3 7 9 1 3 1 1 1 1 1 2 1 5 0 8 2 3 5 8 4 8 1 2 2 3 1 3 3 3 3 5 3 2 4 4 6 5 1 5 3 3 5 1 8 0 8 6 1 6 6 6 1 9 7 3 1 3 3 2 2 1 3 1 9 0 9 3 6 3 1 1 1 2 9 2 1 3 2 3 3 1 3 3 3 1 7 0 9 1 2 5 2 1 7 9 9 6 2 3 1 2 2 3 2 4 1 1 1 1 3 4 1 6 0 6 1 6 9 9 2 4 1 2 3 1 1 2 1 5 0 7 1 1 5 2 9 8 9 1 1 1 3 2 1 8 0 9 9 5 1 1 6 9 6 6 9 1 1 2 1 1 3 3 1 2 3 2 2 3 6 1 8 0 6 1 8 4 4 6 9 3 1 3 2 2 1 2 1 1 7 0 7 1 3 5 3 1 7 1 2 3 3 2 2 2 1 1 7 0 8 2 6 8 6 1 1 5 6 2 1 2 1 3 1 2 4 4 3 2 2 3 3 6 1 8 0 10 5 8 3 9 1 9 8 3 5 6 1 1 2 1 1 2 2 2 1 8 0 8 4 1 2 7 1 7 5 9 2 1 1 2 3 2 2 3 1 7 0 8 4 1 8 2 5 6 4 8 3 1 1 1 2 1 3 3 2 3 3 4 5 3 6 1 9 0 6 2 4 1 9 1 2 3 2 2 1 1 3 2 1 1 1 8 0 10 4 2 8 8 5 5 9 5 1 5 2 3 2 3 1 3 2 1 1 6 0 10 7 6 1 2 1 6 1 2 5 3 3 3 3 1 3 1 4 2 1 1 3 3 7 4 1 5 4 3 4 1 5 0 9 8 8 7 5 3 3 4 1 5 2 3 1 3 2 1 8 0 7 8 9 6 6 1 1 1 3 2 3 1 1 1 2 3 1 8 0 8 8 4 1 2 7 1 5 8 3 3 3 1 2 2 2 2 1 5 2 4 3 7 1 6 0 11 3 6 9 1 6 9 5 1 6 4 2 1 2 1 3 3 1 1 8 0 7 1 1 6 4 7 9 7 3 2 1 1 3 1 1 2 1 8 0 6 1 1 3 9 1 9 3 1 3 1 3 2 2 2 3 3 3 1 3 5 1 3 5 1 8 0 8 7 2 6 8 1 1 2 9 1 3 3 3 1 2 3 1 1 7 0 11 9 5 3 3 4 9 8 7 9 4 1 1 1 3 3 2 3 2 1 9 0 9 9 3 1 6 1 6 8 4 1 3 3 3 3 1 2 1 1 2 4 5 1 5 4 3 4 1 7 0 8 1 2 2 4 9 6 1 1 3 1 3 1 2 1 3 1 6 0 7 3 4 5 9 7 1 5 3 2 2 1 1 2 1 9 0 6 5 3 1 4 5 1 1 1 3 1 3 1 1 3 1 1 4 1 2 3 6 1 5 0 6 7 1 6 8 3 1 1 1 3 1 3 1 7 0 9 1 2 2 9 8 7 7 1 9 1 2 3 1 2 3 1 1 8 0 11 7 5 6 5 1 4 4 4 7 1 4 2 3 3 3 1 1 3 2 5 5 3 5 2 3 5 1 7 5 8 8 1 6 2 4 5 3 4 1 9 0 8 3 8 1 3 6 9 4 1 1 2 3 3 1 3 2 3 1 1 7 0 10 8 5 2 1 3 4 7 2 3 5 3 1 3 1 3 1 3 1 8 0 7 2 1 4 3 9 1 6 1 1 3 2 3 2 3 2 3 4 5 4 3 7 1 6 0 6 1 1 7 9 9 5 1 1 1 2 3 3 1 7 0 10 8 7 4 5 6 4 1 1 3 7 1 2 2 3 3 3 3 1 6 0 7 4 3 7 1 3 8 2 3 2 1 1 1 1 2 3 1 4 4 2 1 3 7 1 7 0 6 7 3 6 3 7 1 3 1 1 3 2 2 1 1 8 0 6 4 5 6 9 1 5 3 1 1 1 3 2 1 2 1 6 0 10 7 6 5 6 4 2 3 3 1 6 3 1 2 3 1 3 3 3 4 5 2 2 4 3 5 1 9 0 9 8 1 3 7 4 9 9 1 1 2 1 1 1 1 2 2 1 3 1 6 0 9 3 7 4 2 1 6 8 4 9 1 3 3 3 1 1 1 7 0 6 4 6 8 7 3 1 2 2 3 2 2 1 2 1 4 2 5 4 6 6 2 5 1 5 4 3 4 1 6 0 9 1 2 7 3 3 9 1 6 9 1 2 3 2 1 3 1 5 0 8 3 8 8 9 9 2 5 1 3 1 1 3 1 1 9 0 6 7 4 1 4 1 9 1 3 1 2 1 1 2 1 1 3 1 3 1 3 4 1 9 0 9 4 1 1 4 3 7 6 4 6 3 1 2 1 3 2 1 1 1 1 6 0 7 8 1 6 5 8 3 1 3 2 3 3 2 1 1 6 0 11 2 3 3 6 1 3 7 1 7 7 1 2 3 2 1 1 3 4 3 4 1 3 4 1 5 0 9 1 5 4 7 6 1 1 5 3 3 2 1 1 2 1 6 0 10 6 9 1 5 5 5 9 8 6 3 1 1 3 3 1 1 1 6 0 11 1 9 3 2 3 1 4 9 2 4 4 2 2 1 1 3 3 2 3 3 4 3 6 1 9 0 6 1 9 9 6 6 2 1 3 3 1 3 2 3 3 1 1 6 0 9 7 5 1 1 4 4 9 4 1 3 3 2 1 1 1 1 6 0 7 5 7 1 8 7 3 9 3 1 2 2 2 1 3 1 4 3 3 2 3 5 1 7 0 10 6 1 1 6 1 9 4 9 2 3 1 2 3 3 2 3 3 1 7 0 8 1 6 1 2 4 1 2 8 1 1 1 2 3 1 2 1 7 0 6 2 3 1 4 2 6 3 1 1 1 1 3 1 3 2 3 3 1 7 3 4 3 5 3 3 4 1 9 0 8 1 4 6 6 4 9 1 2 2 2 2 2 2 1 3 3 2 1 6 0 7 6 1 1 5 9 5 7 1 3 3 3 1 1 1 8 0 10 6 1 3 3 1 7 2 8 9 9 1 1 2 3 2 2 3 1 1 3 3 2 3 6 1 7 0 6 8 2 2 7 1 6 2 1 3 2 1 2 3 1 6 0 8 2 5 1 8 1 7 6 6 2 3 1 2 1 2 1 7 0 9 6 3 9 1 7 3 5 2 8 1 3 1 1 1 1 2 4 1 5 3 5 3 3 4 1 6 0 8 3 1 1 9 2 8 2 1 2 3 3 1 2 1 1 7 0 6 1 9 4 4 8 1 3 1 2 1 3 1 1 1 9 0 10 5 2 5 9 4 2 1 8 1 5 3 3 1 3 1 1 3 3 2 2 3 4 5 3 7 1 8 0 11 7 6 3 6 2 1 6 3 5 3 1 3 1 3 3 1 3 3 2 1 9 0 8 5 4 3 4 7 1 4 2 3 3 2 1 3 1 3 1 3 1 8 0 6 1 9 1 5 2 4 1 1 3 1 3 2 2 2 5 5 4 4 4 3 1 3 4 1 8 0 9 3 2 1 6 5 9 6 5 7 2 3 1 2 3 2 3 2 1 5 0 11 7 6 8 6 4 3 1 8 2 1 6 1 1 3 1 1 1 5 0 9 3 1 8 3 9 4 8 8 9 2 3 2 2 1 5 1 4 1 3 5 2 5 3 3 5 1 5 0 9 7 8 2 2 2 2 5 1 5 1 3 1 2 1 1 5 0 7 1 4 2 8 1 6 1 1 3 1 3 2 1 5 0 8 2 7 2 9 1 6 1 8 3 3 1 2 2 3 5 1 3 4 3 5 1 6 0 6 9 7 1 2 3 8 2 2 2 3 1 1 1 6 0 8 1 4 8 8 9 8 6 2 1 3 1 1 2 1 1 9 0 11 7 2 1 1 7 6 3 2 6 7 2 1 1 1 1 3 2 3 3 2 1 4 3 4 4 3 6 1 5 0 10 2 9 1 1 7 1 3 9 2 6 1 3 1 3 2 1 7 0 6 1 7 8 2 8 2 2 1 1 3 3 2 1 1 9 0 10 8 5 7 3 1 2 7 1 6 1 1 2 2 3 1 2 1 1 3 4 2 5 3 4 4 3 7 1 5 0 11 1 8 2 3 7 8 2 1 3 7 4 1 2 2 1 1 1 9 0 9 6 2 7 6 9 3 6 2 1 2 1 2 2 2 1 1 1 1 1 7 0 7 3 9 8 1 4 1 6 3 1 2 2 2 1 3 2 1 2 5 4 1 3 3 6 1 8 0 11 4 6 2 5 2 5 5 5 1 3 1 3 1 1 3 1 1 2 1 1 9 0 8 2 5 7 9 1 3 5 1 1 2 1 2 1 1 1 2 3 1 6 0 11 7 1 3 2 8 9 7 8 5 1 1 2 3 3 1 2 2 3 5 3 1 3 2 1 4 4 5 4 3 4 1 9 0 7 4 9 7 2 7 1 8 3 3 3 1 2 1 1 1 3 1 5 0 7 8 1 2 8 5 3 7 1 2 3 1 2 1 5 0 6 1 5 7 6 1 8 2 3 3 2 1 3 2 4 2 3 4 1 9 0 7 1 5 4 7 8 1 3 3 1 1 3 1 3 2 1 1 1 7 0 11 6 6 3 2 2 3 1 3 9 6 3 1 1 1 2 3 2 2 1 9 0 6 1 1 3 3 4 3 2 3 1 1 1 1 1 1 3 3 3 3 3 3 7 1 5 0 9 9 1 5 5 4 8 2 5 4 1 1 2 2 2 1 7 0 9 5 1 6 8 5 3 7 4 1 1 2 1 3 2 1 2 1 9 0 8 7 8 3 7 5 4 1 5 2 3 2 1 1 1 1 1 3 5 3 1 2 1 3 1 3 4 1 9 0 6 1 6 5 6 8 4 3 3 1 1 3 2 2 1 1 1 9 0 7 9 5 3 1 5 2 1 3 2 3 2 1 1 3 1 3 1 5 0 9 3 1 8 1 4 4 5 9 6 1 2 1 1 2 1 2 1 1 3 7 1 5 0 11 7 4 4 6 1 7 6 1 1 6 2 2 1 1 3 2 1 9 0 6 1 9 9 1 3 6 3 1 1 2 1 1 1 2 1 1 8 0 7 8 7 2 2 1 6 3 2 3 1 1 2 2 3 1 4 5 5 1 4 5 2 3 4 1 5 4 5 3 4 1 6 0 10 6 9 8 8 5 5 8 1 4 7 2 1 1 1 2 3 1 8 0 7 6 3 2 4 7 4 1 1 3 2 1 3 3 2 3 1 9 0 11 6 9 3 7 8 6 5 6 4 1 7 2 2 2 1 1 1 2 1 3 3 3 3 3 3 6 1 5 0 7 3 8 6 2 7 1 9 1 1 1 2 1 1 6 0 8 8 9 7 1 1 7 2 6 1 1 2 3 1 3 1 8 0 8 1 6 9 2 6 6 3 6 3 1 3 2 1 3 2 1 3 4 1 4 2 1 3 5 1 9 0 6 2 6 7 3 1 2 2 2 1 2 3 2 1 2 3 1 9 0 7 7 5 7 6 1 8 1 1 1 2 1 1 3 3 3 2 1 9 0 7 6 8 4 1 2 1 3 3 3 3 3 1 2 3 1 2 2 1 5 2 3 3 6 1 8 0 7 1 1 5 7 9 1 3 3 1 3 3 1 1 2 1 1 7 0 11 5 9 1 3 5 8 5 8 2 2 8 3 2 3 1 2 1 3 1 5 0 9 6 9 4 2 1 1 3 6 2 1 3 3 1 1 3 3 4 3 5 5 2 3 6 1 1 2 8 7 3 5 3 3 6 1 6 0 6 1 1 1 8 7 6 1 2 3 3 1 3 1 8 0 9 1 3 7 5 6 7 5 1 6 3 3 1 1 1 1 3 2 1 7 0 7 2 1 8 9 3 8 1 3 2 1 3 2 2 1 2 2 2 1 3 4 3 7 1 5 0 9 2 2 9 6 7 9 7 1 7 3 2 1 1 1 1 8 0 7 7 6 8 1 2 6 8 3 3 1 1 3 2 2 1 1 9 0 9 1 1 7 1 3 2 5 5 5 3 1 1 2 1 3 2 1 3 5 4 1 5 3 1 1 3 7 1 9 0 7 2 1 1 7 5 5 3 1 3 1 3 1 2 1 3 3 1 7 0 10 2 3 7 7 3 6 2 3 1 7 3 2 3 1 2 2 3 1 9 0 8 9 7 7 3 9 3 1 4 3 1 1 1 1 3 3 1 1 3 4 1 1 3 4 3 3 5 1 9 0 9 1 2 3 9 6 3 7 6 1 1 1 2 1 1 3 2 3 1 1 9 0 6 1 9 1 4 3 3 2 1 1 3 3 1 3 1 3 1 8 0 11 3 3 1 3 6 7 1 8 6 4 3 3 3 1 2 1 1 1 1 1 5 4 1 1 3 5 1 8 0 8 4 8 1 6 3 1 6 3 3 2 2 3 1 3 3 3 1 5 0 10 1 1 8 1 1 7 1 5 4 6 3 3 1 1 3 1 6 0 7 1 9 5 1 3 2 6 1 3 3 2 2 1 3 4 1 2 4 2 3 2 5 3 3 6 1 6 0 10 3 7 9 5 6 1 7 2 3 1 2 2 3 1 1 2 1 7 0 7 1 7 5 6 2 6 7 1 1 1 2 1 1 2 1 9 0 11 3 6 7 9 8 8 8 7 3 1 3 3 1 2 1 1 1 3 2 3 3 3 3 1 4 3 3 7 1 5 0 7 8 3 6 1 3 6 4 2 1 2 1 3 1 6 0 10 7 4 6 9 1 6 5 5 2 8 1 1 1 1 2 2 1 8 0 6 2 6 8 7 1 2 3 2 2 1 3 1 1 2 2 2 2 5 3 1 4 3 4 1 5 0 6 2 1 7 4 4 5 3 2 1 3 1 1 8 0 10 4 4 5 1 1 7 2 2 8 6 2 1 3 3 1 2 1 1 1 6 0 6 6 6 1 3 6 3 2 1 2 1 1 1 1 4 1 2 3 6 1 5 0 7 1 8 5 2 7 3 4 1 1 2 2 2 1 6 0 8 7 8 1 7 7 4 1 1 2 3 3 2 3 1 1 6 0 8 8 1 1 4 8 4 4 4 1 3 2 3 1 1 4 3 5 2 1 2 3 5 1 8 0 6 1 3 8 5 2 1 2 1 1 2 2 1 2 1 1 7 0 10 9 6 9 8 4 8 1 2 2 4 1 1 1 1 2 2 1 1 5 0 7 1 7 3 9 6 1 3 2 1 2 2 2 5 3 5 1 1 3 7 4 5 4 3 5 1 5 0 6 5 1 5 2 4 6 1 3 1 2 3 1 7 0 7 1 8 4 1 5 1 3 3 1 2 1 1 1 1 1 5 0 9 5 1 1 4 8 1 4 6 8 2 2 2 3 1 4 2 2 2 4 3 4 1 6 0 10 8 2 9 4 6 2 1 7 9 3 2 2 1 2 2 2 1 5 0 7 1 4 9 4 7 9 6 1 1 2 2 3 1 6 0 10 1 1 3 5 6 2 4 5 4 3 3 1 3 1 1 1 5 3 5 3 3 4 1 5 0 7 1 1 5 3 4 7 9 1 2 1 3 1 1 6 0 10 7 6 7 8 2 2 5 8 3 1 2 2 1 1 3 3 1 8 0 11 2 1 3 8 9 1 5 4 7 3 4 1 1 3 1 2 2 3 2 1 1 4 2 3 6 1 9 0 8 2 9 1 1 7 4 8 7 1 3 2 1 2 3 2 1 2 1 8 0 10 1 7 3 6 1 6 1 9 3 3 2 3 1 1 2 2 1 2 1 6 0 9 2 4 2 1 6 6 8 4 1 2 1 3 1 1 1 2 1 3 2 4 2 3 7 1 7 0 11 7 7 9 6 3 3 4 5 5 1 5 1 2 1 3 3 1 1 1 6 0 8 6 6 7 2 9 1 6 5 2 3 2 2 2 1 1 5 0 6 3 1 1 2 4 2 1 2 2 1 2 3 3 4 2 5 5 2 4 2 4 3 5 5 3 7 1 7 0 6 1 9 3 8 7 1 3 3 3 2 3 1 2 1 5 0 9 3 7 1 6 1 2 7 4 3 3 1 1 1 3 1 5 0 11 1 8 9 9 9 6 1 8 6 8 3 3 1 1 1 1 2 3 5 2 2 1 4 3 5 1 5 0 8 8 3 5 4 1 1 9 5 1 3 1 3 1 1 8 0 7 1 7 5 1 6 4 8 2 1 3 2 1 1 3 2 1 9 0 11 9 3 1 4 9 8 6 9 3 8 8 3 3 3 3 2 1 1 1 2 3 2 3 2 1 3 4 1 5 0 8 1 7 5 3 9 3 3 9 2 1 2 2 1 1 5 0 7 3 1 9 3 9 3 6 3 3 3 2 1 1 5 0 9 5 6 4 8 3 1 1 7 6 3 1 3 3 1 3 5 5 3 3 4 1 8 0 8 1 3 1 6 1 5 9 8 3 3 1 1 2 3 1 1 1 8 0 8 1 7 8 1 9 6 9 6 1 1 2 1 1 2 2 3 1 6 0 7 4 8 2 4 7 7 1 1 2 1 1 2 1 2 3 3 5 3 7 1 5 0 10 9 2 9 7 1 2 1 1 4 2 3 1 2 1 1 1 8 0 10 4 1 1 2 1 5 7 3 7 5 2 1 1 2 1 2 2 1 1 7 0 7 4 4 5 1 4 2 1 1 2 1 3 3 3 3 1 1 1 2 2 1 4 1 3 6 1 6 5 4 3 7 1 7 0 6 7 3 3 5 8 1 1 1 2 2 3 3 1 1 5 0 8 8 1 8 8 4 9 1 1 2 3 1 3 3 1 5 0 7 8 8 8 1 5 5 1 3 1 2 1 1 1 4 3 1 5 5 3 3 5 1 5 0 10 3 9 5 9 5 9 8 3 1 2 1 1 1 1 1 1 9 0 7 6 2 1 3 3 7 2 2 2 2 3 1 2 3 1 2 1 5 0 9 3 7 3 7 1 9 7 3 7 3 2 2 1 2 2 1 4 1 5 3 7 1 5 0 7 1 8 6 6 9 5 5 2 3 2 1 1 1 8 0 9 5 3 2 1 5 3 7 3 9 3 2 3 3 1 2 1 3 1 6 0 10 1 6 5 8 9 5 3 1 2 6 1 2 3 2 1 1 4 5 3 4 3 2 3 3 5 1 5 0 11 7 5 2 1 4 7 4 9 4 3 6 1 1 2 1 2 1 7 0 8 6 8 6 6 1 3 3 1 1 1 1 2 3 1 3 1 8 0 7 3 1 9 4 8 7 4 1 1 3 1 3 3 2 1 2 4 3 4 1 3 6 1 6 0 8 9 1 3 7 2 1 1 1 2 3 1 2 2 1 1 6 0 8 3 5 4 6 6 3 7 1 1 1 1 2 2 1 1 7 0 10 3 6 4 1 1 7 1 6 1 8 1 2 2 2 1 1 1 2 2 3 3 3 3 1 7 2 5 5 5 3 4 1 6 0 9 1 7 1 1 8 6 2 5 1 1 1 2 1 1 1 1 5 0 11 9 2 1 2 7 5 5 8 6 1 7 1 3 1 1 2 1 7 0 7 4 7 8 4 7 1 8 3 3 3 2 2 1 1 1 3 1 2 3 6 1 7 0 9 7 5 1 2 7 9 8 3 7 3 3 1 3 1 1 1 1 6 0 9 6 6 1 3 9 3 8 4 7 1 1 1 1 3 2 1 6 0 7 8 5 6 6 1 5 5 1 2 3 1 3 1 1 2 3 3 5 5 3 6 1 5 0 6 3 4 1 1 7 9 3 2 2 2 1 1 9 0 11 7 1 2 6 7 2 8 5 4 5 7 2 2 3 1 1 2 2 3 1 1 6 0 9 6 6 2 9 5 7 2 1 6 1 1 2 3 3 3 4 2 3 1 2 2 3 7 1 7 0 11 2 9 8 1 1 7 7 4 6 7 5 3 1 2 1 2 3 3 1 6 0 7 9 2 1 3 2 7 8 3 3 2 2 1 1 1 5 0 10 5 5 3 1 8 5 2 2 3 6 1 2 1 2 2 1 4 2 3 2 2 2 3 4 1 5 0 7 1 3 7 2 9 2 9 1 3 3 2 1 1 9 0 7 5 1 4 4 3 3 1 1 1 1 2 1 2 3 1 2 1 8 0 11 3 6 1 3 3 2 8 6 2 6 7 3 1 1 1 2 1 1 3 5 3 5 3 3 3 4 7 4 5 5 3 5 1 6 0 8 3 2 8 1 9 6 1 9 3 1 1 2 2 1 1 9 0 8 1 9 4 6 1 9 9 8 1 3 2 3 1 2 2 3 3 1 8 0 9 5 3 1 9 6 6 7 7 4 1 1 1 1 2 3 1 1 1 1 1 5 4 3 6 1 9 0 11 1 7 4 2 7 4 8 9 3 5 4 1 1 3 3 1 1 2 1 3 1 7 0 9 1 2 2 7 5 5 9 5 3 2 2 3 1 3 3 3 1 8 0 6 1 6 1 2 4 1 3 1 1 2 1 3 1 1 2 2 3 2 3 4 3 7 1 7 0 8 5 9 7 1 5 1 7 7 2 1 1 1 2 1 1 1 9 0 8 3 4 9 3 6 1 2 3 3 2 2 1 2 3 2 1 1 1 8 0 6 2 4 5 5 7 1 3 2 3 1 2 2 2 2 1 1 5 5 3 4 1 3 7 1 8 0 9 1 6 3 9 4 1 9 4 8 2 3 2 3 2 1 1 1 1 9 0 10 4 1 4 5 2 6 1 6 2 2 1 3 3 1 3 2 3 2 2 1 5 0 6 1 9 9 6 5 1 3 1 2 1 1 1 1 2 4 3 3 4 3 7 1 9 0 7 5 5 5 5 1 3 3 3 2 1 3 2 1 2 3 1 1 7 0 6 6 9 7 9 1 5 1 2 3 1 1 3 1 1 9 0 11 5 3 7 6 7 4 8 1 1 8 3 2 1 2 3 2 1 3 1 1 2 3 3 1 4 4 2 4 1 7 5 3 9 7 8 7 2 5 4 3 7 1 6 0 8 9 1 1 7 4 1 1 2 3 2 1 3 2 2 1 8 0 7 8 4 5 4 4 1 2 1 2 2 1 3 3 2 1 1 6 0 10 7 8 4 1 1 7 5 9 5 2 1 1 1 3 1 1 1 2 2 1 5 4 4 3 5 1 8 0 10 3 1 2 1 8 1 5 4 2 7 2 1 3 2 3 2 1 3 1 8 0 10 4 1 8 6 8 6 4 2 5 1 1 2 2 3 2 2 1 1 1 5 0 9 1 5 8 4 1 7 6 7 1 1 1 2 2 2 4 1 3 3 1 3 7 1 8 0 8 1 6 3 2 6 7 2 7 2 2 3 3 1 1 2 1 1 7 0 9 7 1 3 4 5 8 9 1 6 3 1 2 2 2 1 2 1 5 0 7 8 1 8 4 2 5 6 3 1 3 2 2 2 5 3 1 4 2 1 3 5 1 8 0 10 1 1 5 7 3 7 5 1 3 7 1 2 3 1 3 1 2 1 1 8 0 9 3 1 2 1 1 7 8 1 6 3 3 2 1 2 1 1 1 1 5 0 11 5 4 1 5 2 1 6 2 2 6 9 3 3 3 2 1 4 1 1 3 2 3 4 1 7 0 7 5 9 1 2 7 3 9 1 2 3 2 3 2 3 1 5 0 7 4 7 5 8 1 5 3 2 3 3 1 1 1 6 0 9 2 2 8 5 3 1 2 1 6 3 2 2 1 1 3 4 1 3 5 5 1 4 3 4 4 3 5 1 8 0 10 9 5 8 8 3 3 3 1 8 1 2 3 2 1 2 1 3 2 1 6 0 11 4 9 1 2 8 6 7 7 9 6 4 2 1 1 1 3 2 1 6 0 8 2 3 1 3 6 4 8 8 2 1 3 2 3 1 1 2 4 3 2 3 4 1 9 0 10 5 6 5 8 4 1 5 8 1 5 1 3 1 2 1 1 1 2 1 1 8 0 7 6 2 8 3 9 6 1 2 1 1 3 2 3 2 2 1 7 0 6 9 9 2 5 6 1 1 2 3 1 2 3 2 1 5 4 2 3 5 1 6 0 6 1 4 4 1 9 1 1 1 2 1 3 2 1 5 0 10 9 9 4 1 6 5 3 8 3 9 3 1 3 3 1 1 8 0 9 6 8 1 3 8 6 1 4 5 3 1 2 3 3 1 3 2 3 5 2 4 3 3 6 1 7 0 6 8 1 2 4 5 9 1 3 2 3 3 2 1 1 6 0 6 6 1 8 7 5 1 2 3 1 2 1 1 1 5 0 8 9 1 7 5 3 9 5 5 2 1 2 2 1 1 2 2 2 4 1 4 1 6 5 4 3 3 5 1 9 0 10 3 6 1 2 9 6 8 2 9 5 1 2 1 1 3 3 2 1 3 1 9 0 9 6 3 4 7 5 1 6 4 9 1 2 2 1 3 1 1 2 1 1 8 0 8 7 2 6 6 1 3 8 1 1 3 3 1 1 1 1 1 2 3 1 2 5 3 5 1 7 0 10 8 8 8 1 8 5 4 6 1 3 2 2 2 3 1 3 1 1 8 0 10 1 2 1 8 7 3 2 2 6 3 1 3 2 2 3 3 1 1 1 5 0 11 1 9 6 7 1 8 8 8 2 6 6 2 2 2 1 2 4 3 2 1 4 3 6 1 7 0 10 3 6 1 7 9 3 3 1 8 9 3 3 2 3 2 1 3 1 9 0 7 2 2 2 4 5 9 1 2 2 2 2 2 1 1 3 2 1 7 0 7 1 1 3 9 5 3 4 1 1 1 2 1 3 1 3 2 3 1 4 3 3 7 1 6 0 10 6 7 4 3 1 1 8 4 3 6 2 1 1 3 1 3 1 7 0 6 1 1 4 2 8 3 1 2 1 1 1 2 2 1 9 0 10 6 9 1 8 5 5 4 8 5 1 2 3 3 2 1 2 1 3 3 4 2 2 5 3 3 1 4 2 3 5 5 3 6 1 7 0 9 9 9 8 1 7 5 1 3 3 2 3 2 1 3 1 1 1 7 0 7 4 1 9 9 3 1 8 1 1 3 1 2 1 1 1 9 0 9 9 9 8 5 2 7 2 5 1 2 1 1 1 2 2 3 1 3 1 4 1 2 3 5 3 4 1 7 0 6 7 4 4 3 6 1 1 3 2 1 1 2 3 1 6 0 6 3 1 9 5 5 5 3 3 1 1 2 1 1 9 0 8 8 8 4 5 4 1 5 7 1 3 2 3 1 3 2 2 2 1 4 3 5 3 6 1 9 0 10 7 7 2 9 5 1 4 2 1 4 3 2 3 3 2 1 2 3 1 1 9 0 8 1 6 4 7 1 4 9 1 1 3 2 3 3 2 2 2 3 1 6 0 9 9 8 6 6 6 1 6 4 9 3 2 1 3 3 1 1 2 4 1 3 4 3 5 1 6 0 10 3 1 7 3 9 7 5 6 7 8 2 1 1 1 2 2 1 5 0 8 1 9 1 4 8 1 2 5 1 2 1 3 2 1 7 0 9 4 6 9 6 1 6 8 5 6 1 3 1 1 1 1 2 3 2 1 3 1 3 5 1 7 0 6 9 8 8 1 3 5 1 2 1 1 3 2 3 1 9 0 8 4 8 7 9 3 7 1 7 2 2 1 3 1 1 2 3 2 1 9 0 7 3 2 8 1 8 3 2 3 3 1 1 3 1 1 1 1 1 2 3 3 4 5 5 5 2 2 5 3 3 5 1 7 0 8 1 1 1 5 1 8 5 3 3 2 1 2 1 2 2 1 7 0 9 5 1 8 1 5 4 8 6 5 1 1 2 3 1 2 3 1 6 0 10 1 9 8 4 5 7 1 7 5 1 3 1 2 2 1 1 2 2 1 2 5 3 5 1 6 0 9 8 3 3 1 2 5 1 3 6 1 2 2 3 1 2 1 6 0 8 5 2 5 1 4 4 4 1 3 1 2 2 1 1 1 5 0 10 6 3 3 1 3 7 5 3 8 8 1 3 2 2 1 1 3 4 2 5 3 6 1 9 0 8 6 8 1 4 8 1 6 8 1 3 2 3 1 3 3 1 3 1 7 0 7 7 1 1 1 3 4 9 2 1 3 2 2 1 2 1 8 0 8 3 6 2 8 5 1 6 1 2 2 2 3 1 1 2 1 4 1 1 3 1 3 3 6 1 8 0 10 3 2 9 1 3 1 6 8 4 3 1 1 2 1 2 2 2 2 1 8 0 10 4 1 3 7 4 4 2 3 6 1 1 1 3 1 2 1 3 1 1 5 0 8 8 9 1 3 1 6 5 2 2 1 1 2 3 2 5 2 2 3 1 3 6 1 7 0 6 6 6 1 1 2 3 2 1 3 1 2 2 3 1 5 0 11 9 3 2 7 4 7 6 3 1 6 6 3 3 1 2 1 1 8 0 11 9 1 5 8 7 1 2 1 1 9 2 1 2 1 2 2 1 1 1 2 4 3 5 2 3 3 2 1 5 3 3 4 1 9 0 6 8 8 5 6 1 2 2 3 3 1 2 2 2 2 1 1 7 0 6 9 7 9 1 3 9 3 3 1 1 2 1 2 1 5 0 6 2 5 1 5 9 5 1 2 1 2 1 3 5 5 2 3 7 1 7 0 7 2 2 2 1 3 5 1 1 3 1 2 2 3 3 1 9 0 10 4 1 3 9 5 4 4 1 5 1 3 2 2 3 2 1 1 2 3 1 8 0 11 2 9 6 8 3 6 1 1 1 4 4 3 1 3 1 3 1 2 3 2 1 4 5 4 4 1 3 6 1 7 0 8 1 3 6 4 1 5 7 7 1 2 1 3 3 1 2 1 5 0 10 9 1 4 1 3 3 8 4 5 6 3 2 1 1 2 1 9 0 9 2 6 9 1 5 9 6 4 4 3 1 1 1 2 2 2 2 3 2 2 1 2 5 1 3 7 1 6 0 8 9 1 4 4 1 2 6 8 1 1 1 3 3 3 1 5 0 8 1 6 7 1 4 4 8 3 2 2 3 3 1 1 6 0 10 1 4 8 7 1 2 9 8 9 7 1 2 2 3 1 3 5 5 2 4 2 2 3 3 4 1 5 0 8 1 5 8 2 7 9 8 1 3 3 3 1 1 1 5 0 9 5 1 2 4 6 8 2 4 1 3 3 3 1 1 1 7 0 7 7 4 9 4 1 7 1 3 1 3 3 3 3 1 5 5 2 1 3 1 4 5 5 3 4 1 8 0 10 7 1 9 2 7 1 6 9 6 8 1 1 2 3 3 2 3 1 1 7 0 7 3 1 9 8 1 4 2 1 3 3 2 2 3 2 1 7 0 10 5 6 5 7 8 1 6 6 8 4 2 1 1 3 2 3 3 2 2 5 3 3 6 1 9 0 9 7 9 4 5 1 1 5 7 2 1 1 1 2 3 3 1 1 1 1 6 0 9 9 2 5 3 7 1 1 8 3 1 1 3 3 3 1 1 6 0 9 5 2 7 2 1 8 1 8 1 1 1 1 2 1 3 3 5 1 1 2 4 3 4 1 8 0 10 3 6 3 8 4 5 1 6 8 2 1 1 1 2 1 2 1 2 1 7 0 7 1 5 6 1 4 5 9 1 3 2 2 1 3 1 1 8 0 8 9 2 9 9 6 8 1 1 3 3 3 2 1 1 1 3 1 4 3 4 3 4 1 6 0 10 3 9 2 3 9 1 1 4 2 1 2 2 1 1 3 3 1 7 0 10 1 5 1 7 2 1 2 2 8 3 1 1 1 1 2 1 3 1 8 0 6 9 8 1 3 4 6 1 1 3 2 3 2 2 3 3 5 5 4 3 6 1 5 0 11 1 8 8 4 9 1 3 4 3 7 5 2 1 1 2 3 1 8 0 7 1 3 5 6 7 6 4 1 1 1 3 2 1 1 1 1 7 0 11 3 3 7 3 7 7 8 3 3 5 1 3 3 1 3 3 2 2 2 5 5 4 2 5 6 1 6 5 3 4 5 6 3 5 3 3 6 1 6 0 8 1 1 3 4 2 1 1 7 3 1 1 3 1 1 1 8 0 8 4 1 1 9 2 9 9 4 1 1 3 1 1 3 3 1 1 5 0 10 1 2 9 3 8 5 9 3 4 8 3 2 3 1 2 3 5 2 5 3 4 3 5 1 9 0 6 2 3 7 1 6 7 2 1 2 3 2 2 2 3 1 1 6 0 9 8 1 8 9 5 7 4 1 4 2 1 1 3 1 2 1 6 0 9 6 8 6 1 5 2 1 3 6 1 3 1 2 1 1 3 3 3 2 5 3 5 1 9 0 7 6 3 3 3 1 3 3 1 3 1 1 2 1 2 2 2 1 9 0 10 3 6 8 7 4 4 9 1 1 3 3 2 2 3 2 1 2 1 1 1 6 0 6 1 8 4 3 8 8 1 2 1 3 3 3 3 3 2 4 1 3 6 1 8 0 11 8 9 6 2 1 1 1 9 8 2 5 2 1 3 2 1 1 1 1 1 9 0 10 9 5 8 1 1 4 4 1 7 7 2 3 1 1 2 2 3 2 3 1 6 0 11 1 5 8 9 5 7 6 8 6 1 6 1 1 1 1 2 3 4 1 1 4 2 3 3 4 1 9 0 9 4 1 9 6 6 9 8 1 2 2 3 1 2 1 3 2 2 1 1 6 0 9 3 7 1 2 2 5 4 2 2 1 2 2 1 3 2 1 7 0 9 5 5 1 6 1 5 1 6 6 2 3 1 1 1 1 1 1 5 4 5 3 4 5 4 4 3 5 1 7 0 7 5 6 5 7 1 4 9 3 3 1 3 1 1 3 1 5 0 9 1 1 9 9 2 9 9 5 9 2 1 3 1 1 1 8 0 8 8 1 4 6 4 7 8 4 1 3 3 1 3 2 3 3 3 3 5 1 4 3 7 1 9 0 7 6 8 2 1 8 3 9 3 1 3 3 2 3 1 1 3 1 7 0 8 1 5 9 4 2 7 2 9 1 1 1 1 2 1 1 1 5 0 11 8 5 1 4 2 6 1 1 4 9 4 1 1 1 2 1 3 2 5 3 1 4 4 3 4 1 7 0 11 9 5 7 1 8 1 2 7 9 7 5 1 1 2 3 2 3 1 1 6 0 10 2 1 9 3 8 3 1 5 4 5 3 2 1 3 1 1 1 9 0 10 3 5 8 9 4 3 1 6 3 3 3 3 2 3 1 2 3 3 2 3 1 1 4 3 7 1 9 0 8 1 1 8 5 2 6 8 7 2 3 3 2 1 1 1 1 3 1 6 0 7 7 5 8 3 1 1 1 1 2 1 3 1 1 1 6 0 7 1 8 3 8 2 5 5 3 2 2 2 3 1 3 2 5 3 3 5 2 2 6 4 5 5 5 3 6 1 9 0 10 8 9 6 9 9 6 1 1 7 3 3 2 2 1 1 3 1 2 1 1 6 0 11 1 4 7 8 9 5 4 2 1 6 1 1 2 1 1 3 3 1 8 0 8 8 1 7 6 7 5 7 9 2 2 3 2 1 3 3 3 1 3 5 2 1 3 3 5 1 5 0 9 3 7 2 1 2 7 5 1 1 3 2 2 1 1 1 8 0 6 7 1 6 9 1 8 3 2 3 2 2 1 1 1 1 7 0 9 7 2 9 4 1 8 1 1 1 2 1 2 3 1 1 3 2 1 4 4 3 3 4 1 7 0 7 9 7 1 6 2 6 1 2 3 1 1 2 1 2 1 9 0 8 9 9 3 3 5 3 1 1 2 1 1 1 2 1 3 1 3 1 5 0 6 1 1 6 6 2 5 1 2 3 3 1 4 2 3 5 3 4 1 5 0 10 2 6 1 4 1 7 4 2 3 2 1 2 2 3 2 1 7 0 11 1 3 5 1 3 3 7 1 5 1 5 2 1 3 2 1 2 1 1 8 0 8 4 1 8 2 8 4 3 1 2 3 1 2 2 1 2 2 2 2 1 3 3 4 1 8 0 8 5 6 9 5 7 4 1 4 1 3 3 2 2 3 2 1 1 5 0 10 4 5 5 2 7 6 3 1 9 5 1 2 2 2 1 1 8 0 7 2 9 5 1 2 5 6 3 1 1 3 1 1 1 3 2 3 1 4 2 2 4 2 3 5 3 3 4 1 6 0 11 1 8 7 7 1 6 6 5 3 1 2 1 2 3 3 1 1 1 5 0 9 5 1 1 8 1 9 3 3 6 3 1 1 2 3 1 5 0 11 9 5 6 8 6 2 1 8 7 4 1 1 3 2 1 1 2 4 1 1 3 6 1 9 0 6 9 3 3 4 1 7 1 3 2 1 1 1 2 3 1 1 6 0 10 1 3 8 2 8 5 4 8 2 8 1 2 3 2 3 2 1 5 0 7 7 4 4 7 1 7 8 1 3 3 1 3 2 4 1 3 2 3 3 6 1 5 0 9 4 5 7 7 3 2 2 1 5 1 3 3 3 1 1 6 0 11 3 5 1 5 4 9 9 4 2 9 7 3 3 1 1 3 2 1 7 0 10 9 7 8 1 9 3 2 2 9 6 2 3 1 2 2 1 3 3 3 3 1 2 1 3 7 1 6 0 7 7 6 4 7 8 5 1 2 3 1 2 3 1 1 9 0 7 7 4 1 5 5 7 8 3 1 1 1 3 3 1 2 2 1 8 0 6 3 1 8 2 4 3 1 2 3 1 1 2 2 2 5 4 1 2 4 1 1 3 6 1 5 0 6 3 7 1 6 4 6 2 3 1 1 1 1 8 0 10 1 8 3 1 5 1 4 1 3 6 1 2 1 2 2 1 2 1 1 5 0 11 8 5 2 3 4 4 4 5 1 1 8 3 1 3 3 2 3 1 2 1 2 1 4 2 1 5 3 3 4 1 7 0 9 1 1 9 6 3 9 2 5 5 3 3 1 2 2 1 3 1 8 0 9 6 9 8 4 8 1 6 2 4 1 1 1 2 1 1 2 3 1 7 0 9 6 8 4 4 1 1 3 1 2 1 3 2 2 3 1 3 3 5 1 2 3 6 1 9 0 7 7 5 1 9 9 3 6 3 1 3 2 1 2 3 1 1 1 6 0 6 7 1 6 9 2 3 2 3 2 3 3 1 1 6 0 8 3 6 5 9 1 7 9 7 2 1 3 2 1 1 3 5 1 3 1 3 3 4 1 5 0 8 1 2 9 1 9 7 7 5 3 3 2 1 1 1 5 0 11 5 5 8 3 1 7 5 8 4 1 1 1 1 3 3 2 1 7 0 10 8 3 2 1 7 2 8 7 9 7 1 2 1 3 3 1 3 1 2 2 1 3 6 1 6 0 10 2 8 7 5 1 7 1 8 4 1 3 1 1 2 2 2 1 6 0 9 8 9 8 1 9 1 1 1 3 2 1 2 2 1 1 1 5 0 8 1 5 1 5 8 6 4 6 3 3 2 1 2 4 2 3 2 2 2 3 4 1 8 0 6 4 4 6 5 1 9 2 1 2 1 3 1 2 1 1 8 0 10 2 1 1 8 1 3 2 1 2 1 2 1 3 3 3 1 2 2 1 6 0 8 2 4 1 1 3 4 7 1 2 1 3 1 1 1 1 1 3 3 3 5 2 4 3 3 7 1 6 0 10 1 2 4 5 3 5 9 7 8 1 1 1 3 1 3 2 1 5 0 8 7 1 4 1 2 7 4 1 3 1 3 3 2 1 9 0 11 9 9 7 4 3 4 4 9 1 2 3 1 2 1 3 1 2 1 3 1 2 3 4 3 2 2 1 3 6 1 9 0 10 3 4 6 5 8 1 1 9 2 2 3 3 2 2 2 2 1 2 3 1 5 0 9 4 1 3 9 9 5 5 1 1 1 3 2 1 3 1 9 0 9 1 6 2 6 9 2 1 9 9 1 1 1 3 3 1 1 2 1 3 3 1 1 1 3 3 6 1 5 0 11 2 7 7 3 1 1 3 8 1 9 6 1 1 1 1 3 1 9 0 8 7 3 1 7 9 5 1 8 2 1 1 1 1 2 2 3 3 1 9 0 11 9 1 7 1 8 1 1 3 4 6 3 2 1 2 2 3 2 3 1 1 3 5 4 4 5 5 3 4 1 7 0 6 9 2 6 1 1 1 3 3 3 1 3 1 1 1 6 0 11 9 2 2 1 2 5 7 7 4 5 7 1 3 3 1 1 2 1 6 0 7 6 1 9 9 1 3 5 2 1 1 1 3 2 4 4 3 1 1 2 1 8 7 5 7 2 4 5 3 6 1 7 0 8 1 6 7 2 5 2 1 1 2 2 2 1 2 1 2 1 9 0 9 9 4 3 4 5 9 1 2 8 3 1 1 2 2 1 3 1 1 1 7 0 7 6 4 8 2 1 4 8 3 3 1 1 2 2 2 5 2 5 4 1 3 3 7 1 8 0 9 8 7 3 3 6 1 5 1 9 3 3 3 1 3 2 1 3 1 6 0 11 4 7 4 3 8 7 1 7 1 2 8 1 1 3 2 1 3 1 5 0 8 9 1 1 8 7 2 2 1 1 1 1 1 2 4 5 1 5 3 5 3 3 4 1 5 0 6 8 7 2 1 1 1 3 1 2 3 2 1 5 0 6 9 5 1 5 7 3 2 2 1 1 3 1 5 0 6 9 4 1 3 1 5 1 2 1 3 1 3 4 2 3 3 7 1 6 0 9 9 8 3 1 7 6 8 7 8 3 3 2 1 1 1 1 7 0 10 2 7 5 2 8 7 6 1 3 2 2 1 3 1 1 1 2 1 6 0 7 1 1 8 9 2 7 2 2 3 1 1 3 2 5 5 5 3 4 2 4 4 2 2 3 1 5 4 3 6 1 9 0 8 7 5 1 9 3 4 7 6 3 2 1 2 1 1 3 2 2 1 5 0 6 9 8 7 3 8 1 1 1 3 1 2 1 9 0 10 8 5 5 3 1 3 5 4 1 7 2 1 2 3 1 1 1 2 1 4 1 1 1 5 2 3 6 1 6 0 6 9 9 1 2 4 1 1 1 1 2 2 3 1 5 0 6 8 2 4 5 6 1 2 1 1 1 2 1 9 0 7 4 1 2 2 2 4 5 2 2 1 3 3 2 2 2 1 2 1 2 5 1 1 3 5 1 7 0 11 5 3 1 7 1 8 8 8 4 9 9 3 3 1 1 3 1 3 1 5 0 10 6 5 1 3 8 8 7 2 1 5 3 2 3 1 1 1 8 0 11 1 1 3 7 8 3 5 9 5 2 3 1 1 3 3 2 1 1 3 3 5 3 3 1 3 5 1 5 0 8 9 1 6 5 1 4 8 1 3 1 3 1 2 1 5 0 6 1 6 2 9 9 4 3 2 3 1 1 1 5 0 11 3 5 4 2 4 1 1 1 3 4 6 2 1 3 2 2 3 4 4 1 5 3 7 1 9 0 8 1 5 9 2 6 8 4 1 3 3 1 1 3 3 3 3 3 1 7 0 8 4 1 1 1 7 2 5 5 1 2 1 3 1 1 1 1 8 0 8 8 5 9 2 5 7 4 1 2 1 1 1 1 1 2 2 1 4 2 2 5 3 5 4 2 1 7 5 3 3 6 1 9 0 9 5 1 7 6 2 1 9 3 1 1 2 1 3 2 3 1 1 1 1 7 0 9 6 1 5 4 4 1 3 5 4 1 1 3 3 1 2 3 1 6 0 7 5 3 8 3 7 7 1 2 3 2 3 2 1 4 1 5 2 5 2 3 7 1 8 0 8 2 3 6 6 4 1 1 4 3 2 3 3 2 2 1 2 1 9 0 10 4 2 5 3 6 3 9 2 1 1 1 2 3 2 2 1 3 1 3 1 6 0 9 5 4 8 8 3 1 1 3 6 3 2 3 3 1 1 4 3 2 5 3 5 3 3 5 1 5 0 11 1 6 8 1 2 3 5 7 7 3 8 1 3 2 1 3 1 6 0 10 6 9 3 7 5 5 1 1 5 6 1 3 2 1 1 2 1 5 0 10 3 7 3 1 5 1 7 6 2 9 2 2 1 2 1 5 2 2 1 2 3 7 1 8 0 6 6 5 1 1 3 7 2 1 3 2 1 2 1 2 1 7 0 7 7 5 4 3 8 1 3 1 2 3 1 1 1 3 1 7 0 11 4 4 6 7 6 1 5 7 2 8 1 2 3 3 1 2 3 1 1 4 1 1 5 5 1 3 6 1 5 0 9 6 2 4 3 5 1 5 1 7 3 3 2 1 2 1 9 0 10 6 1 3 1 8 9 3 8 5 4 1 1 2 3 1 3 3 1 2 1 7 0 9 5 3 7 5 4 1 1 1 6 1 2 1 3 2 2 1 2 1 2 3 1 5 6 1 6 5 3 3 7 1 6 0 9 8 1 9 8 7 1 5 3 2 1 3 1 3 3 1 1 5 0 8 8 3 8 5 1 1 5 4 1 3 1 2 3 1 6 0 9 6 7 2 3 1 5 5 7 5 1 1 2 1 3 3 5 3 1 1 5 4 5 3 4 1 8 0 6 8 6 7 1 5 8 1 1 1 1 2 1 1 2 1 7 0 9 1 5 7 9 1 9 9 1 4 1 3 2 2 1 2 1 1 5 0 11 6 7 1 2 8 3 2 7 4 6 5 1 1 1 3 3 3 3 1 4 3 6 1 8 0 9 8 2 2 1 6 6 9 2 1 3 2 3 3 2 2 1 2 1 7 0 7 4 7 1 1 2 8 3 2 1 1 3 2 3 3 1 9 0 6 8 1 1 1 7 2 1 1 2 3 2 1 1 3 2 1 5 3 5 3 1 3 5 1 5 0 7 8 3 3 1 7 7 1 2 3 3 3 1 1 8 0 11 3 1 6 8 7 1 5 2 9 5 6 1 1 2 1 2 2 3 1 1 6 0 7 1 6 2 6 9 1 1 2 1 1 1 1 2 2 4 2 5 4 3 5 1 7 0 9 3 9 3 8 8 1 2 2 8 3 1 2 1 3 2 3 1 5 0 7 1 8 4 7 7 2 6 2 3 1 3 1 1 7 0 9 9 1 4 8 7 8 9 9 1 3 2 3 2 3 2 1 2 5 4 2 5 5 5 6 5 4 3 4 1 8 0 11 2 5 5 4 1 6 4 1 4 1 4 2 2 3 1 2 2 2 1 1 6 0 9 1 8 3 5 6 1 2 3 2 1 2 2 2 1 3 1 5 0 8 8 1 5 8 1 5 2 7 2 2 1 3 1 4 3 2 3 3 7 1 5 0 7 7 6 9 1 6 1 7 3 1 3 1 1 1 5 0 6 7 8 3 1 2 8 1 3 3 2 3 1 9 0 9 7 9 3 1 7 1 9 9 4 1 1 1 2 1 1 3 3 2 2 1 3 3 3 1 5 3 6 1 7 0 11 7 1 3 2 1 1 6 5 4 5 5 1 2 1 3 1 3 3 1 6 0 6 1 2 9 7 7 1 2 1 2 3 1 3 1 8 0 10 6 9 1 9 8 9 3 4 1 5 1 1 1 1 2 1 1 1 3 3 3 5 1 4 3 7 1 5 0 8 8 3 4 8 7 1 7 9 1 3 1 2 1 1 6 0 11 9 1 7 1 6 8 8 9 3 5 5 3 2 1 2 1 1 1 5 0 9 9 9 7 1 7 1 2 1 4 2 2 2 1 2 3 3 1 5 1 1 3 3 6 1 7 0 10 3 4 8 6 8 6 1 9 3 3 1 2 3 3 1 2 3 1 9 0 9 1 9 8 3 9 1 8 7 2 1 3 1 3 1 3 3 2 3 1 7 0 8 9 1 4 8 7 5 5 6 1 2 3 3 3 3 2 4 5 4 2 4 1 4 5 5 7 5 4 3 4 1 5 0 8 8 1 6 6 6 8 8 1 1 1 1 2 2 1 6 0 10 5 9 1 3 8 8 9 7 2 9 3 1 3 2 2 1 1 6 0 8 5 7 2 1 3 3 6 1 3 1 1 1 2 1 2 1 2 4 3 4 1 7 0 10 1 2 2 5 9 1 1 7 1 6 3 2 2 3 3 1 2 1 8 0 10 1 9 4 7 7 8 3 3 9 4 2 1 2 3 1 2 2 1 1 7 0 8 7 4 6 4 1 2 6 7 1 2 1 2 1 1 2 1 5 5 3 3 5 1 5 0 10 6 7 2 1 5 1 9 8 8 9 2 1 1 1 1 1 8 0 10 2 1 9 6 1 1 4 7 9 5 1 3 3 2 3 1 3 1 1 5 0 11 5 4 7 7 5 9 5 5 7 1 7 1 1 1 1 3 4 3 1 1 2 3 7 1 8 0 9 9 5 1 7 6 5 7 4 8 1 1 3 3 3 1 1 2 1 5 0 9 1 8 5 3 4 8 5 1 6 1 2 3 1 3 1 5 0 7 1 6 6 8 7 3 7 3 1 3 1 3 1 2 5 2 3 5 3 3 4 1 6 0 10 1 4 2 2 6 8 6 6 3 6 1 3 1 2 1 2 1 7 0 11 3 3 2 1 1 9 1 1 4 7 7 1 3 1 1 1 2 3 1 8 0 11 6 2 1 4 3 9 8 4 4 6 2 2 2 1 1 1 2 2 2 3 3 3 5 1 4 4 6 5 5 3 7 1 7 0 7 6 6 3 2 7 1 5 3 3 1 3 1 3 1 1 6 0 11 5 7 1 2 5 5 1 5 5 9 4 1 1 1 3 1 2 1 6 0 7 5 5 6 5 4 1 8 1 1 2 2 1 2 3 3 5 5 2 3 2 3 5 1 6 0 9 4 6 5 8 4 5 1 1 5 1 3 1 1 3 3 1 7 0 10 3 2 1 9 3 2 3 4 9 1 1 3 1 2 1 1 2 1 8 0 9 9 1 3 1 1 4 4 9 9 3 3 1 3 1 3 2 2 1 3 3 2 2 3 7 1 8 0 6 1 7 2 7 1 5 1 3 3 1 1 3 2 3 1 9 0 9 3 2 4 1 9 1 8 1 9 3 1 3 1 3 3 1 1 1 1 6 0 9 5 5 1 6 4 7 2 8 6 1 2 3 1 1 2 2 4 2 1 4 1 2 3 6 1 9 0 10 1 5 1 3 7 4 6 3 7 2 3 1 1 1 2 1 1 3 2 1 9 0 6 7 4 1 1 1 8 2 2 1 2 3 2 3 1 2 1 8 0 6 8 1 5 2 8 4 1 3 2 2 3 2 1 1 1 2 5 1 4 2 3 4 1 8 0 11 1 5 8 3 4 7 8 5 6 5 8 3 3 3 2 3 1 2 3 1 5 0 6 1 7 9 6 1 1 2 2 1 2 1 1 5 0 11 4 1 4 1 7 4 3 3 2 2 3 1 3 2 1 1 4 2 3 3 4 7 4 3 2 7 5 7 6 10 3 1 4 3 1 4 6 2
diff --git a/2018/inputs/9.txt b/2018/inputs/9.txt
new file mode 100644
index 0000000..eaf3e92
--- /dev/null
+++ b/2018/inputs/9.txt
@@ -0,0 +1 @@
+438 players; last marble is worth 71626 points
diff --git a/2018/license.org b/2018/license.org
new file mode 100644
index 0000000..8d31e87
--- /dev/null
+++ b/2018/license.org
@@ -0,0 +1,21 @@
+* The MIT License
+
+Copyright (c) 2018 Justin Worthe
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/2018/readme.org b/2018/readme.org
new file mode 100644
index 0000000..7fe82e4
--- /dev/null
+++ b/2018/readme.org
@@ -0,0 +1,38 @@
+* Advent of Code 2018
+
+** What is Advent of Code?
+
+Advent of Code is a programming advent calendar. On the 25 days of
+December leading up to Christmas, each morning a new programming
+challenge is unlocked. The race is then on to see who can solve the
+challenge and get the answer to their particular input first.
+
+It's a lot of fun. I have my solutions posted here so that I can share
+them with my friends, as well as the broader community if they're
+interested.
+
+** A note on error handling and code quality
+
+The only important metric to consider in terms of taking the Advent of
+Code challenges seriously from a competitive point of view is how
+quickly you arrive at an answer for your particular input.
+
+These solutions should not in any way be seen as an example of good
+coding standards in Rust. The error handling in particular is
+appalling. The reason for this is that I can look at the input data
+and be certain that some error cases won't come up, like empty
+lists. I can also assume that things like file system access will
+always work because I'm only running it on my machine under my
+supervision.
+
+When my assumptions are wrong, the program panics and dies, but I'm
+currently there programming it when it's running so that isn't really
+a big deal.
+
+The short version of what I'm trying to say is that even though I use
+~unwrap~ all over the place in this particular repo, I still think
+it's a really bad idea to use it in a real project.
+
+** License
+
+See [[./license.org]].
diff --git a/2018/src/bin/day_1.rs b/2018/src/bin/day_1.rs
new file mode 100644
index 0000000..4693579
--- /dev/null
+++ b/2018/src/bin/day_1.rs
@@ -0,0 +1,32 @@
+extern crate advent_of_code_2018;
+use advent_of_code_2018::*;
+
+extern crate im_rc;
+
+use std::error::Error;
+use std::path::PathBuf;
+
+use im_rc::HashSet;
+
+// cargo watch -cs "cargo run --release --bin day_1"
+
+fn main() -> Result<(), Box<Error>> {
+ let input = read_file(&PathBuf::from("inputs/1.txt"))?;
+ let input_ints: Vec<i32> = input.iter().map(|str| str.parse::<i32>().unwrap()).collect();
+
+ println!("Input: {:?}", input_ints);
+
+ let sum: i32 = input_ints.iter().sum();
+ println!("Sum: {}", sum);
+
+ let first_repeat = input_ints.iter().cycle().try_fold((0, HashSet::new()), |(acc, seen), &i| {
+ if seen.contains(&acc) {
+ Err(acc)
+ } else {
+ Ok((acc + i, seen.update(acc)))
+ }
+ }).err().unwrap();
+ println!("First repeat: {}", first_repeat);
+
+ Ok(())
+}
diff --git a/2018/src/bin/day_10.rs b/2018/src/bin/day_10.rs
new file mode 100644
index 0000000..082be7c
--- /dev/null
+++ b/2018/src/bin/day_10.rs
@@ -0,0 +1,82 @@
+extern crate advent_of_code_2018;
+use advent_of_code_2018::*;
+
+use std::str::FromStr;
+
+use std::error::Error;
+use std::path::PathBuf;
+
+use std::i32;
+
+// cargo watch -cs "cargo run --release --bin day_10"
+
+
+
+#[derive(Debug, Clone)]
+struct Star {
+ x: i32,
+ y: i32,
+ dx: i32,
+ dy: i32
+}
+
+impl FromStr for Star {
+ type Err = Box<Error>;
+
+ fn from_str(s: &str) -> Result<Self, Self::Err> {
+ let split = s
+ .split(|c: char| c != '-' && !c.is_numeric())
+ .filter(|s| !s.is_empty())
+ .map(|s| s.parse())
+ .collect::<Result<Vec<i32>, _>>()?;
+
+ Ok(Star {
+ x: split[0],
+ y: split[1],
+ dx: split[2],
+ dy: split[3]
+ })
+ }
+}
+
+fn main() -> Result<(), Box<Error>> {
+ let input = read_file(&PathBuf::from("inputs/10.txt"))?;
+ let mut stars = input.iter().map(|line| line.parse::<Star>().unwrap()).collect::<Vec<_>>();
+
+ //debug!(input);
+ //debug!(stars);
+
+ let screen_width = 80;
+ let screen_height = 80;
+
+ for seconds in 0..1000000 {
+ let min_x = stars.iter().map(|s| s.x).min().unwrap();
+ let max_x = stars.iter().map(|s| s.x).max().unwrap();
+ let min_y = stars.iter().map(|s| s.y).min().unwrap();
+ let max_y = stars.iter().map(|s| s.y).max().unwrap();
+
+ if max_x - min_x < screen_width && max_y - min_y < screen_height {
+ debug!(seconds);
+ for y in min_y..max_y+1 {
+ for x in min_x..max_x+1 {
+ let star_at_point = stars.iter().any(|s| s.x == x && s.y == y);
+ if star_at_point {
+ print!("#");
+ } else {
+ print!(" ");
+ }
+ }
+ println!();
+ }
+ println!();
+ println!();
+ }
+
+ for star in &mut stars {
+ star.x += star.dx;
+ star.y += star.dy;
+ }
+ }
+
+ Ok(())
+}
diff --git a/2018/src/bin/day_11.rs b/2018/src/bin/day_11.rs
new file mode 100644
index 0000000..0e458a3
--- /dev/null
+++ b/2018/src/bin/day_11.rs
@@ -0,0 +1,66 @@
+extern crate advent_of_code_2018;
+use advent_of_code_2018::*;
+
+use std::error::Error;
+use std::i32;
+
+// cargo watch -cs "cargo run --release --bin day_11"
+
+fn main() -> Result<(), Box<Error>> {
+ let input = 1723;
+
+ println!("Input: {:?}", input);
+
+ let powers = precompute_powers(input);
+
+ let power_per_size = (1..300).map(|size| {
+ (1..302-size).map(|left| {
+ (1..302-size).map(|top| {
+ (power_for_block(left, top, size, &powers), (left, top, size))
+ }).max_by_key(|(p, _)| *p).unwrap()
+ }).max_by_key(|(p, _)| *p).unwrap()
+ }).collect::<Vec<_>>();
+
+ let (max_power_at_size_3, coordinate_at_size_3) = power_per_size[2]; // index from 0 vs 1
+ debug!(max_power_at_size_3);
+ debug!(coordinate_at_size_3);
+
+ let (max_power, coordinate) = power_per_size.iter().max_by_key(|(p, _)| p).unwrap();
+
+ debug!(max_power);
+ debug!(coordinate);
+
+ Ok(())
+}
+
+fn power_for_block(left: i32, top: i32, size: i32, powers: &[[i32;300];300]) -> i32 {
+ (left..left+size).map(|x| {
+ (top..top+size).map(|y| {
+ powers[x as usize - 1][y as usize - 1]
+ }).sum::<i32>()
+ }).sum()
+}
+
+fn precompute_powers(input: i32) -> [[i32;300];300] {
+ let mut powers: [[i32;300];300] = [[0;300];300];
+ for x in 1..301 {
+ for y in 1..301 {
+ powers[x as usize - 1][y as usize - 1] = power_from_coordinates(x, y, input);
+ }
+ }
+ powers
+}
+
+fn power_from_coordinates(x: i32, y: i32, input: i32) -> i32 {
+ let rack_id = x + 10;
+ ((((rack_id * y) + input) * rack_id / 100) % 10) - 5
+}
+
+
+#[test]
+fn power_from_coord_example() {
+ assert_eq!(power_from_coordinates(3, 5, 8), 4);
+ assert_eq!(power_from_coordinates(122, 79, 57), -5);
+ assert_eq!(power_from_coordinates(217,196, 39), 0);
+ assert_eq!(power_from_coordinates(101, 153, 71), 4);
+}
diff --git a/2018/src/bin/day_12.rs b/2018/src/bin/day_12.rs
new file mode 100644
index 0000000..65a966d
--- /dev/null
+++ b/2018/src/bin/day_12.rs
@@ -0,0 +1,102 @@
+extern crate advent_of_code_2018;
+use advent_of_code_2018::*;
+
+use std::error::Error;
+use std::path::PathBuf;
+
+use std::str::FromStr;
+
+// cargo watch -cs "cargo run --release --bin day_12"
+
+use std::collections::HashSet;
+
+#[derive(Debug)]
+struct Rule {
+ input: [bool; 5],
+ output: bool
+}
+
+impl FromStr for Rule {
+ type Err = Box<Error>;
+
+ fn from_str(s: &str) -> Result<Self, Self::Err> {
+ //##..# => #
+ let mut input = [false; 5];
+ let mut iter = s.chars().filter(|c| *c == '#' || *c == '.');
+ for (i, c) in iter.by_ref().take(5).enumerate() {
+ if c == '#' {
+ input[i] = true;
+ }
+ }
+ Ok(Rule {
+ input,
+ output: iter.next() == Some('#')
+ })
+ }
+}
+
+impl Rule {
+ fn matches(&self, state: &HashSet<i64>, index: i64) -> bool {
+ self.input.iter().enumerate().all(|(i, expected)| {
+ let pot_index = index - 2 + i as i64;
+ *expected == state.contains(&pot_index)
+ })
+ }
+}
+
+fn main() -> Result<(), Box<Error>> {
+ let input = read_file(&PathBuf::from("inputs/12.txt"))?;
+
+ println!("Input: {:?}", input);
+
+ let mut initial_state: HashSet<i64> = HashSet::new();
+ for (i, c) in input[0].chars().filter(|c| *c == '#' || *c == '.').enumerate() {
+ if c == '#' {
+ initial_state.insert(i as i64);
+ }
+ }
+ let rules = input.iter().skip(1).map(|line| line.parse()).collect::<Result<Vec<Rule>, Box<Error>>>()?;
+
+ debug!(initial_state);
+ debug!(rules);
+
+ let part1_time = 20;
+ let part2_time = 50000000000;
+
+ let part1_final_state = iterate_states(&initial_state, &rules, part1_time);
+ let sum_of_part1_pot_numbers: i64 = part1_final_state.iter().sum();
+ debug!(sum_of_part1_pot_numbers);
+
+ let part2_final_state = iterate_states(&initial_state, &rules, part2_time);
+ let sum_of_part2_pot_numbers: i64 = part2_final_state.iter().sum();
+ debug!(sum_of_part2_pot_numbers);
+
+ Ok(())
+}
+
+fn iterate_states(initial_state: &HashSet<i64>, rules: &[Rule], time: i64) -> HashSet<i64> {
+ let mut current_state = initial_state.clone();
+ for current_time in 0..time {
+ let mut new_state = HashSet::new();
+ let min = current_state.iter().min().cloned().unwrap_or(-1) - 2;
+ let max = current_state.iter().max().cloned().unwrap_or(-1) + 2;
+
+ for i in min..max+1 {
+ if rules.iter().find(|r| r.matches(&current_state, i)).expect("No matching rule").output {
+ new_state.insert(i as i64);
+ }
+ }
+
+ if current_state.iter().map(|v| v + 1).collect::<HashSet<i64>>() == new_state {
+ // Iterations are just shifting 1 to the right at this
+ // point. Found by inspecting a debugging log of the
+ // generations.
+
+ let remaining_iterations = time-current_time;
+ return current_state.iter().map(|v| v + remaining_iterations).collect::<HashSet<i64>>();
+ }
+
+ current_state = new_state;
+ }
+ current_state
+}
diff --git a/2018/src/bin/day_13.rs b/2018/src/bin/day_13.rs
new file mode 100644
index 0000000..005f216
--- /dev/null
+++ b/2018/src/bin/day_13.rs
@@ -0,0 +1,249 @@
+extern crate advent_of_code_2018;
+use advent_of_code_2018::*;
+
+use std::error::Error;
+use std::path::PathBuf;
+
+// cargo watch -cs "cargo run --release --bin day_13"
+
+#[derive(Debug)]
+enum Road {
+ LeftRight,
+ UpDown,
+ LeftUpRightDown,
+ RightUpLeftDown,
+ Intersection,
+ None
+}
+
+#[derive(Debug)]
+struct Cart {
+ next_turn: TurnDirection,
+ facing: FacingDirection,
+ x: usize,
+ y: usize,
+ crashed: bool
+
+}
+
+#[derive(Debug, Clone, Copy)]
+enum FacingDirection {
+ Up,
+ Down,
+ Left,
+ Right
+}
+
+#[derive(Debug, Clone, Copy)]
+enum TurnDirection {
+ Left,
+ Straight,
+ Right
+}
+
+impl TurnDirection {
+ fn next(&self) -> TurnDirection {
+ use TurnDirection::*;
+
+ match *self {
+ Left => Straight,
+ Straight => Right,
+ Right => Left
+ }
+ }
+
+ fn rotate(&self, facing: &FacingDirection) -> FacingDirection {
+ match *self {
+ TurnDirection::Left => match *facing {
+ FacingDirection::Up => FacingDirection::Left,
+ FacingDirection::Left => FacingDirection::Down,
+ FacingDirection::Down => FacingDirection::Right,
+ FacingDirection::Right => FacingDirection::Up
+ },
+ TurnDirection::Right => match *facing {
+ FacingDirection::Up => FacingDirection::Right,
+ FacingDirection::Left => FacingDirection::Up,
+ FacingDirection::Down => FacingDirection::Left,
+ FacingDirection::Right => FacingDirection::Down
+ },
+ TurnDirection::Straight => facing.clone()
+ }
+ }
+}
+
+
+
+fn main() -> Result<(), Box<Error>> {
+ let input = read_file(&PathBuf::from("inputs/13.txt"))?;
+
+// for i in &input {
+// println!("{}", i);
+// }
+
+ let mut map: Vec<Vec<Road>> = Vec::new();
+ let mut carts: Vec<Cart> = Vec::new();
+
+ for (y, line) in input.iter().enumerate() {
+ let mut map_row = Vec::new();
+ for (x, c) in line.chars().enumerate() {
+ let tile = match c {
+ ' ' => Road::None,
+ '-' => Road::LeftRight,
+ '|' => Road::UpDown,
+ '/' => Road::LeftUpRightDown,
+ '\\' => Road::RightUpLeftDown,
+ '+' => Road::Intersection,
+ '^' => {
+ carts.push(Cart {
+ next_turn: TurnDirection::Left,
+ facing: FacingDirection::Up,
+ x: x,
+ y: y,
+ crashed: false
+ });
+ Road::UpDown
+ },
+ '<' => {
+ carts.push(Cart {
+ next_turn: TurnDirection::Left,
+ facing: FacingDirection::Left,
+ x: x,
+ y: y,
+ crashed: false
+ });
+ Road::LeftRight
+ },
+ 'v' => {
+ carts.push(Cart {
+ next_turn: TurnDirection::Left,
+ facing: FacingDirection::Down,
+ x: x,
+ y: y,
+ crashed: false
+ });
+ Road::UpDown
+ },
+ '>' => {
+ carts.push(Cart {
+ next_turn: TurnDirection::Left,
+ facing: FacingDirection::Right,
+ x: x,
+ y: y,
+ crashed: false
+ });
+ Road::LeftRight
+ },
+
+ _ => {
+ panic!("Unknown character {}", c);
+ }
+ };
+ map_row.push(tile);
+ }
+ map.push(map_row);
+ }
+
+ while carts.len() > 1 {
+ carts.sort_unstable_by(|a, b| a.y.cmp(&b.y).then(a.x.cmp(&b.x)));
+
+ for i in 0..carts.len() {
+ {
+ let mut cart = &mut carts[i];
+ let road = &map[cart.y][cart.x];
+
+ match (road, cart.facing, cart.next_turn) {
+ (Road::LeftRight, FacingDirection::Left, _) => {
+ cart.x -= 1;
+ },
+ (Road::LeftRight, FacingDirection::Right, _) => {
+ cart.x += 1;
+ },
+ (Road::LeftRight, _, _) => {
+ panic!("Sideways cart heading left-right");
+ },
+
+ (Road::UpDown, FacingDirection::Up, _) => {
+ cart.y -= 1;
+ },
+ (Road::UpDown, FacingDirection::Down, _) => {
+ cart.y += 1;
+ },
+ (Road::UpDown, _, _) => {
+ panic!("Sideways cart heading up-down");
+ },
+
+ // /
+ (Road::LeftUpRightDown, FacingDirection::Down, _) => {
+ cart.x -= 1;
+ cart.facing = FacingDirection::Left;
+ },
+ (Road::LeftUpRightDown, FacingDirection::Right, _) => {
+ cart.y -= 1;
+ cart.facing = FacingDirection::Up;
+ },
+ (Road::LeftUpRightDown, FacingDirection::Left, _) => {
+ cart.y += 1;
+ cart.facing = FacingDirection::Down;
+ },
+ (Road::LeftUpRightDown, FacingDirection::Up, _) => {
+ cart.x += 1;
+ cart.facing = FacingDirection::Right;
+ },
+
+ // \
+ (Road::RightUpLeftDown, FacingDirection::Up, _) => {
+ cart.x -= 1;
+ cart.facing = FacingDirection::Left;
+ },
+ (Road::RightUpLeftDown, FacingDirection::Left, _) => {
+ cart.y -= 1;
+ cart.facing = FacingDirection::Up;
+ },
+ (Road::RightUpLeftDown, FacingDirection::Right, _) => {
+ cart.y += 1;
+ cart.facing = FacingDirection::Down;
+ },
+ (Road::RightUpLeftDown, FacingDirection::Down, _) => {
+ cart.x += 1;
+ cart.facing = FacingDirection::Right;
+ },
+
+ (Road::Intersection, f, d) => {
+ cart.facing = d.rotate(&f);
+ cart.next_turn = d.next();
+ match cart.facing {
+ FacingDirection::Up => { cart.y -= 1 },
+ FacingDirection::Down => { cart.y += 1 },
+ FacingDirection::Left => { cart.x -= 1 },
+ FacingDirection::Right => { cart.x += 1 },
+ }
+ },
+
+ (Road::None, _, _) => {
+ panic!("Offroad cart!");
+ }
+
+ }
+
+ }
+
+ let collisions = carts.iter()
+ .enumerate()
+ .filter(|(other_i, other)| *other_i != i && other.x == carts[i].x && other.y == carts[i].y)
+ .map(|(other_i, _)| other_i)
+ .collect::<Vec<_>>();
+ for other_i in collisions {
+ let crash_location = (carts[i].x, carts[i].y);
+ debug!(crash_location);
+ carts[i].crashed = true;
+ carts[other_i].crashed = true;
+ }
+ }
+
+ carts.retain(|cart| !cart.crashed);
+ }
+
+ debug!(carts);
+
+ Ok(())
+}
diff --git a/2018/src/bin/day_14.rs b/2018/src/bin/day_14.rs
new file mode 100644
index 0000000..cb16623
--- /dev/null
+++ b/2018/src/bin/day_14.rs
@@ -0,0 +1,111 @@
+extern crate advent_of_code_2018;
+use advent_of_code_2018::*;
+
+use std::error::Error;
+use std::path::PathBuf;
+
+// cargo watch -cs "cargo run --release --bin day_14"
+
+fn main() -> Result<(), Box<Error>> {
+ let input = 540561;
+
+ let scoreboard = find_ten_scoreboard_after(input);
+
+ println!("Result: ");
+ scoreboard.iter().for_each(|s| {
+ print!("{}", s);
+ });
+ println!();
+
+ let first_occurence = find_first_occurence_of(input);
+ debug!(first_occurence);
+
+ Ok(())
+}
+
+fn find_ten_scoreboard_after(input: usize) -> Vec<usize> {
+ let mut scoreboard = vec!(3,7);
+ let mut elf1_pos = 0;
+ let mut elf2_pos = 1;
+
+ while scoreboard.len() < (input + 10) {
+ let next = scoreboard[elf1_pos] + scoreboard[elf2_pos];
+ for digit in number_to_digits_vec(next) {
+ scoreboard.push(digit);
+ }
+
+ elf1_pos = (elf1_pos + 1 + scoreboard[elf1_pos]) % scoreboard.len();
+ elf2_pos = (elf2_pos + 1 + scoreboard[elf2_pos]) % scoreboard.len();
+ }
+
+ scoreboard.iter().skip(input).take(10).cloned().collect()
+}
+
+fn find_first_occurence_of(input: usize) -> usize {
+ let target_sequence = number_to_digits_vec(input);
+ debug!(target_sequence);
+
+ let mut scoreboard = vec!(3,7);
+ let mut elf1_pos = 0;
+ let mut elf2_pos = 1;
+ let mut target_index = None;
+
+ while target_index.is_none() {
+ let next = scoreboard[elf1_pos] + scoreboard[elf2_pos];
+ for digit in number_to_digits_vec(next) {
+ scoreboard.push(digit);
+ }
+
+ elf1_pos = (elf1_pos + 1 + scoreboard[elf1_pos]) % scoreboard.len();
+ elf2_pos = (elf2_pos + 1 + scoreboard[elf2_pos]) % scoreboard.len();
+
+ if scoreboard.len() >= target_sequence.len() + 2 {
+ for potential_target_index in scoreboard.len()-target_sequence.len()-2..scoreboard.len()-target_sequence.len()+1 {
+ let found = scoreboard.iter()
+ .skip(potential_target_index)
+ .take(target_sequence.len())
+ .zip(target_sequence.iter())
+ .all(|(a, b)| a == b);
+ if found {
+ target_index = Some(potential_target_index);
+ }
+ }
+ }
+ }
+
+ target_index.unwrap()
+}
+
+fn number_to_digits_vec(input: usize) -> Vec<usize> {
+ if input == 0 {
+ return vec!(0);
+ }
+
+ let mut result = Vec::new();
+ let mut acc = input;
+ while acc > 0 {
+ result.push(acc % 10);
+ acc /= 10;
+ }
+ result.reverse();
+ result
+}
+
+#[test]
+fn vectorification() {
+ assert_eq!(number_to_digits_vec(10), vec!(1, 0));
+ assert_eq!(number_to_digits_vec(1), vec!(1));
+ assert_eq!(number_to_digits_vec(0), vec!(0));
+}
+
+#[test]
+fn part1_examples() {
+ assert_eq!(find_ten_scoreboard_after(9), vec!(5,1,5,8,9,1,6,7,7,9));
+ assert_eq!(find_ten_scoreboard_after(2018), vec!(5,9,4,1,4,2,9,8,8,2));
+}
+
+#[test]
+fn part2_examples() {
+ assert_eq!(find_first_occurence_of(51589), 9);
+ assert_eq!(find_first_occurence_of(59414), 2018);
+}
diff --git a/2018/src/bin/day_15.rs b/2018/src/bin/day_15.rs
new file mode 100644
index 0000000..c6f3cf2
--- /dev/null
+++ b/2018/src/bin/day_15.rs
@@ -0,0 +1,272 @@
+extern crate advent_of_code_2018;
+use advent_of_code_2018::*;
+
+use std::error::Error;
+use std::path::PathBuf;
+
+// cargo watch -cs "cargo run --release --bin day_15"
+
+fn main() -> Result<(), Box<Error>> {
+ let input = read_file(&PathBuf::from("inputs/15.txt"))?;
+
+ let (round_hp_product, _) = calculate_round_hp_product(&input, 3);
+ debug!(round_hp_product);
+
+ for power in 3.. {
+ let (round_hp_product_without_losses, elf_losses) = calculate_round_hp_product(&input, power);
+ if (elf_losses == 0) {
+ debug!(round_hp_product_without_losses);
+ break;
+ }
+ }
+
+ Ok(())
+}
+
+fn calculate_round_hp_product(input: &[String], elf_power: i32) -> (i32, usize) {
+ let goblin_power = 3;
+ let initial_hp = 200;
+
+ let mut map = Vec::new();
+ let mut units = Vec::new();
+
+ for (y, line) in input.iter().enumerate() {
+ let mut map_row = Vec::new();
+ for (x, c) in line.chars().enumerate() {
+ map_row.push(c == '#');
+
+ let maybe_unit = match c {
+ 'G' => Some(Unit {
+ team: false,
+ x: x as i32,
+ y: y as i32,
+ hp: initial_hp
+ }),
+ 'E' => Some(Unit {
+ team: true,
+ x: x as i32,
+ y: y as i32,
+ hp: initial_hp
+ }),
+ _ => None
+ };
+ if let Some(unit) = maybe_unit {
+ units.push(unit);
+ }
+ }
+
+ map.push(map_row);
+ }
+ let start_elves = units.iter().filter(|u| u.team).count();
+
+ for round in 0.. {
+ // debug!(round);
+ // debug!(units);
+ // debug_print(&units, &map);
+ units.sort_unstable_by(|a, b| a.y.cmp(&b.y).then(a.x.cmp(&b.x)));
+
+ for i in 0..units.len() {
+ if units[i].hp > 0 {
+ let battle_over = !units.iter().any(|other| other.hp > 0 && other.team != units[i].team);
+ if battle_over {
+ println!("Battle over");
+ let hp_sum = units.iter().filter(|u| u.hp > 0).map(|u| u.hp).sum::<i32>();
+ debug!(round);
+ debug!(hp_sum);
+
+ let elf_losses = start_elves - units.iter().filter(|u| u.team).count();
+ debug!(elf_losses);
+ return (round * hp_sum, elf_losses);
+ }
+
+ let is_next_to_opponent = unit_at_point(!units[i].team, units[i].x-1, units[i].y, &units)
+ .or_else(|| unit_at_point(!units[i].team, units[i].x+1, units[i].y, &units))
+ .or_else(|| unit_at_point(!units[i].team, units[i].x, units[i].y-1, &units))
+ .or_else(|| unit_at_point(!units[i].team, units[i].x, units[i].y+1, &units)).is_some();
+ if !is_next_to_opponent {
+ if let Some((next_x, next_y)) = find_next_step(i, &units, &map) {
+ units[i].x = next_x;
+ units[i].y = next_y;
+ }
+ }
+
+ let mut attack_candidates = adjacent_units(!units[i].team, units[i].x, units[i].y, &units);
+ attack_candidates.sort_by(|&a, &b| units[a].hp.cmp(&units[b].hp));
+ if let Some(&to_attack) = attack_candidates.first() {
+ let attack_power = if units[i].team { elf_power } else { goblin_power };
+ units[to_attack].hp -= attack_power;
+ }
+ }
+ }
+
+ units.retain(|u| u.hp > 0);
+ }
+
+ panic!("Match ended unexpectedly");
+}
+
+fn find_next_step(i: usize, units: &[Unit], map: &Vec<Vec<bool>>) -> Option<(i32, i32)> {
+ let mut explored = vec!(Explored {
+ x: units[i].x,
+ y: units[i].y,
+ distance: 0,
+ parent: 0
+ });
+
+ let mut explored_index = 0;
+ let mut distance_found = None;
+ while explored_index < explored.len() && distance_found.map_or(true, |distance| explored[explored_index].distance < distance) {
+ let distance = explored[explored_index].distance;
+ for (new_x, new_y) in adjacent_empty_spaces(explored[explored_index].x, explored[explored_index].y, &map, &units, &explored) {
+ explored.push(Explored {
+ x: new_x,
+ y: new_y,
+ distance: distance + 1,
+ parent: explored_index
+ });
+
+ if adjacent_units(!units[i].team, new_x, new_y, &units).len() > 0 {
+ distance_found = Some(distance + 1);
+ }
+ }
+ explored_index += 1;
+ }
+
+ if let Some(distance) = distance_found {
+ let mut candidates = explored.iter().enumerate()
+ .filter(|(_,e)| e.distance == distance)
+ .filter(|(_,e)| adjacent_units(!units[i].team, e.x, e.y, &units).len() > 0)
+ .collect::<Vec<_>>();
+ candidates.sort_by(|(_,a), (_,b)| a.y.cmp(&b.y).then(a.x.cmp(&b.x)));
+ let (best_index, _) = candidates[0];
+
+ let mut result_index = best_index;
+ let mut next_index = best_index;
+ while next_index != 0 {
+ result_index = next_index;
+ next_index = explored[result_index].parent;
+ }
+ return Some((explored[result_index].x, explored[result_index].y));
+ }
+ None
+}
+
+fn adjacent_empty_spaces(x: i32, y: i32, map: &Vec<Vec<bool>>, units: &[Unit], explored: &[Explored]) -> Vec<(i32, i32)> {
+ [(x, y-1), (x-1, y), (x+1, y), (x, y+1)].iter()
+ .filter(|(x, y)| *x >= 0 && *y >= 0)
+ .filter(|(x, y)| !explored.iter().any(|e| e.x == *x && e.y == *y))
+ .filter(|(x, y)| !units.iter().any(|e| e.hp > 0 && e.x == *x && e.y == *y))
+ .filter(|(x, y)| !map[*y as usize][*x as usize])
+ .cloned()
+ .collect()
+}
+
+fn adjacent_units(team: bool, x: i32, y: i32, units: &[Unit]) -> Vec<usize> {
+ [(x, y-1), (x-1, y), (x+1, y), (x, y+1)].iter()
+ .filter_map(|(x, y)| unit_at_point(team, *x, *y, units))
+ .collect()
+}
+
+fn unit_at_point(team: bool, x: i32, y: i32, units: &[Unit]) -> Option<usize> {
+ units.iter().enumerate()
+ .find(|(_, u)| u.hp > 0 && u.team == team && u.x == x && u.y == y)
+ .map(|(i, _)| i)
+}
+
+#[derive(Debug, Clone)]
+struct Unit {
+ team: bool,
+ x: i32,
+ y: i32,
+ hp: i32
+}
+
+#[derive(Debug)]
+struct Explored {
+ x: i32,
+ y: i32,
+ distance: u32,
+ parent: usize
+}
+
+
+fn debug_print(units: &[Unit], map: &Vec<Vec<bool>>) {
+ for (y, line) in map.iter().enumerate() {
+ for (x, wall) in line.iter().enumerate() {
+ let unit = units.iter().find(|u| u.hp > 0 && u.x == x as i32 && u.y == y as i32);
+ print!("{}", match (wall, unit) {
+ (true, _) => '#',
+ (false, Some(unit)) if unit.team => 'E',
+ (false, Some(_)) => 'G',
+ (false, None) => '.'
+ });
+ }
+ println!();
+ }
+ println!();
+ println!();
+}
+
+fn part_1_test(input: &[&str]) -> i32 {
+ let owned_input = input.iter()
+ .map(|&line| line.to_owned())
+ .collect::<Vec<String>>();
+ let (product, _) = calculate_round_hp_product(&owned_input, 3);
+ product
+}
+
+#[test]
+fn example_1() {
+ let input = vec!(
+ "#######",
+ "#.G...#",
+ "#...EG#",
+ "#.#.#G#",
+ "#..G#E#",
+ "#.....#",
+ "#######");
+ assert_eq!(part_1_test(&input), 27730);
+}
+
+#[test]
+fn example_2() {
+ let input = vec!(
+ "#######",
+ "#G..#E#",
+ "#E#E.E#",
+ "#G.##.#",
+ "#...#E#",
+ "#...E.#",
+ "#######"
+ );
+ assert_eq!(part_1_test(&input), 36334);
+}
+
+#[test]
+fn example_3() {
+ let input = vec!(
+ "#######",
+ "#E.G#.#",
+ "#.#G..#",
+ "#G.#.G#",
+ "#G..#.#",
+ "#...E.#",
+ "#######"
+ );
+ assert_eq!(part_1_test(&input), 27755);
+}
+
+#[test]
+fn example_4() {
+ let input = vec!(
+ "#######",
+ "#.E...#",
+ "#.#..G#",
+ "#.###.#",
+ "#E#G#G#",
+ "#...#G#",
+ "#######"
+ );
+ assert_eq!(part_1_test(&input), 28944);
+}
+
diff --git a/2018/src/bin/day_16.rs b/2018/src/bin/day_16.rs
new file mode 100644
index 0000000..275ec45
--- /dev/null
+++ b/2018/src/bin/day_16.rs
@@ -0,0 +1,205 @@
+extern crate advent_of_code_2018;
+use advent_of_code_2018::*;
+
+use std::error::Error;
+use std::path::PathBuf;
+
+use std::collections::{HashMap, HashSet};
+
+// cargo watch -cs "cargo run --release --bin day_16"
+
+struct Instruction {
+ op: Op,
+ a: i32,
+ b: i32,
+ c: i32
+}
+
+impl Instruction {
+ fn execute(&self, registers: &[i32; 4]) -> [i32; 4] {
+ use Op::*;
+
+ let mut result_registers = registers.clone();
+
+ result_registers[self.c as usize] = match self.op {
+ Addr => registers[self.a as usize] + registers[self.b as usize],
+ Addi => registers[self.a as usize] + self.b,
+ Mulr => registers[self.a as usize] * registers[self.b as usize],
+ Muli => registers[self.a as usize] * self.b,
+ Banr => registers[self.a as usize] & registers[self.b as usize],
+ Bani => registers[self.a as usize] & self.b,
+ Borr => registers[self.a as usize] | registers[self.b as usize],
+ Bori => registers[self.a as usize] | self.b,
+ Setr => registers[self.a as usize],
+ Seti => self.a,
+ Gtir => if self.a > registers[self.b as usize] { 1 } else { 0 },
+ Gtri => if registers[self.a as usize] > self.b { 1 } else { 0 },
+ Gtrr => if registers[self.a as usize] > registers[self.b as usize] { 1 } else { 0 },
+ Eqir => if self.a == registers[self.b as usize] { 1 } else { 0 },
+ Eqri => if registers[self.a as usize] == self.b { 1 } else { 0 },
+ Eqrr => if registers[self.a as usize] == registers[self.b as usize] { 1 } else { 0 }
+ };
+
+ result_registers
+ }
+}
+
+#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+enum Op {
+ Addr,
+ Addi,
+ Mulr,
+ Muli,
+ Banr,
+ Bani,
+ Borr,
+ Bori,
+ Setr,
+ Seti,
+ Gtir,
+ Gtri,
+ Gtrr,
+ Eqir,
+ Eqri,
+ Eqrr
+}
+
+impl Op {
+ fn all() -> [Op; 16] {
+ use Op::*;
+ [
+ Addr,
+ Addi,
+ Mulr,
+ Muli,
+ Banr,
+ Bani,
+ Borr,
+ Bori,
+ Setr,
+ Seti,
+ Gtir,
+ Gtri,
+ Gtrr,
+ Eqir,
+ Eqri,
+ Eqrr
+ ]
+ }
+}
+
+struct UnknownInstruction {
+ before: [i32; 4],
+ after: [i32; 4],
+ opcode: i32,
+ a: i32,
+ b: i32,
+ c: i32
+}
+
+impl UnknownInstruction {
+ fn possible_matches(&self) -> HashSet<Op> {
+ Op::all()
+ .iter()
+ .filter(|&&op| {
+ let instruction = Instruction {
+ op: op,
+ a: self.a,
+ b: self.b,
+ c: self.c
+ };
+ let result = instruction.execute(&self.before);
+ result == self.after
+ })
+ .cloned()
+ .collect()
+ }
+}
+
+fn main() -> Result<(), Box<Error>> {
+ let input_part_1 = read_file(&PathBuf::from("inputs/16_1.txt"))?;
+
+ let unknown_instructions: Vec<UnknownInstruction> = input_part_1.chunks(3)
+ .map(|chunk| {
+ let mut before_iter = chunk[0].trim_matches(|c: char| !c.is_numeric()).split(", ").map(|c| c.parse::<i32>().unwrap());
+ let before = [
+ before_iter.next().unwrap(),
+ before_iter.next().unwrap(),
+ before_iter.next().unwrap(),
+ before_iter.next().unwrap(),
+ ];
+ let mut after_iter = chunk[2].trim_matches(|c: char| !c.is_numeric()).split(", ").map(|c| c.parse::<i32>().unwrap());
+ let after = [
+ after_iter.next().unwrap(),
+ after_iter.next().unwrap(),
+ after_iter.next().unwrap(),
+ after_iter.next().unwrap(),
+ ];
+ let mut instruction_iter = chunk[1].split_whitespace().map(|c| c.parse::<i32>().unwrap());
+ UnknownInstruction {
+ before, after,
+ opcode: instruction_iter.next().unwrap(),
+ a: instruction_iter.next().unwrap(),
+ b: instruction_iter.next().unwrap(),
+ c: instruction_iter.next().unwrap(),
+ }
+ })
+ .collect();
+
+ let matches_more_then_3 = unknown_instructions.iter()
+ .filter(|unknown| {
+ unknown.possible_matches().len() >= 3
+ })
+ .count();
+
+ debug!(matches_more_then_3);
+
+
+ let mut opcodes: HashMap<i32, HashSet<Op>> = HashMap::new();
+ for unknown in unknown_instructions {
+ let matches = unknown.possible_matches();
+ let to_insert = match opcodes.get(&unknown.opcode) {
+ None => matches,
+ Some(existing) => existing.intersection(&matches).cloned().collect()
+ };
+ opcodes.insert(unknown.opcode, to_insert);
+ }
+ debug!(opcodes);
+
+ let mut known_opcodes: HashMap<i32, Op> = HashMap::new();
+
+ while known_opcodes.len() < 16 {
+ let (opcode, op) = {
+ let (opcode, opset) = opcodes.iter().find(|(_,set)| set.len() == 1).unwrap();
+ let op = opset.iter().next().unwrap().clone();
+ (opcode.clone(), op)
+ };
+ known_opcodes.insert(opcode, op);
+ opcodes.iter_mut().for_each(|(_, set)| {
+ set.remove(&op);
+ });
+ }
+ debug!(known_opcodes);
+
+
+ let input_part_2 = read_file(&PathBuf::from("inputs/16_2.txt"))?;
+ let instructions: Vec<Instruction> = input_part_2.iter()
+ .map(|line| {
+ let mut instruction_iter = line.split_whitespace().map(|c| c.parse::<i32>().unwrap());
+ Instruction {
+ op: known_opcodes.get(&instruction_iter.next().unwrap()).unwrap().clone(),
+ a: instruction_iter.next().unwrap(),
+ b: instruction_iter.next().unwrap(),
+ c: instruction_iter.next().unwrap(),
+ }
+ })
+ .collect();
+
+ let mut registers = [0; 4];
+ for instruction in instructions {
+ registers = instruction.execute(&registers);
+ }
+ debug!(registers);
+
+ Ok(())
+}
diff --git a/2018/src/bin/day_17.rs b/2018/src/bin/day_17.rs
new file mode 100644
index 0000000..f479c3a
--- /dev/null
+++ b/2018/src/bin/day_17.rs
@@ -0,0 +1,175 @@
+extern crate advent_of_code_2018;
+use advent_of_code_2018::*;
+
+use std::error::Error;
+use std::path::PathBuf;
+
+// cargo watch -cs "cargo run --release --bin day_17"
+
+struct CoordBuilder {
+ xmin: Option<usize>,
+ xmax: Option<usize>,
+ ymin: Option<usize>,
+ ymax: Option<usize>
+}
+
+#[derive(Debug)]
+struct Coord {
+ xmin: usize,
+ xmax: usize,
+ ymin: usize,
+ ymax: usize
+}
+
+impl CoordBuilder {
+ fn new() -> CoordBuilder {
+ CoordBuilder {
+ xmin: None,
+ xmax: None,
+ ymin: None,
+ ymax: None
+ }
+ }
+
+ fn build(&self) -> Coord {
+ Coord {
+ xmin: self.xmin.unwrap(),
+ xmax: self.xmax.unwrap(),
+ ymin: self.ymin.unwrap(),
+ ymax: self.ymax.unwrap(),
+ }
+ }
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+enum Tile {
+ Clay,
+ RunningWater,
+ HalfSettledWater,
+ SettledWater,
+ Sand
+}
+
+fn main() -> Result<(), Box<Error>> {
+ let input = read_file(&PathBuf::from("inputs/17.txt"))?;
+
+ let clay_coords = input.iter().map(|line| {
+ let mut builder = CoordBuilder::new();
+ for split in line.split(", ") {
+ if split.starts_with("x=") {
+ let mut range_split = split
+ .trim_matches(|c: char| !c.is_numeric())
+ .split("..")
+ .map(|s| s.parse().unwrap());
+ if let Some(min) = range_split.next() {
+ builder.xmin = Some(min);
+ builder.xmax = Some(min+1);
+ }
+ if let Some(max) = range_split.next() {
+ builder.xmax = Some(max+1);
+ }
+ } else {
+ let mut range_split = split
+ .trim_matches(|c: char| !c.is_numeric())
+ .split("..")
+ .map(|s| s.parse().unwrap());
+ if let Some(min) = range_split.next() {
+ builder.ymin = Some(min);
+ builder.ymax = Some(min+1);
+ }
+ if let Some(max) = range_split.next() {
+ builder.ymax = Some(max+1);
+ }
+ }
+ }
+ builder.build()
+ }).collect::<Vec<_>>();
+
+ let range = CoordinateSystem {
+ xmin: clay_coords.iter().min_by_key(|coord| coord.xmin).unwrap().xmin-2,
+ xmax: clay_coords.iter().max_by_key(|coord| coord.xmax).unwrap().xmax+2,
+ ymin: clay_coords.iter().min_by_key(|coord| coord.ymin).unwrap().ymin,
+ ymax: clay_coords.iter().max_by_key(|coord| coord.ymax).unwrap().ymax
+ };
+
+ debug!(range);
+
+
+ let mut map = vec!(Tile::Sand; range.vector_size());
+ for coord in clay_coords {
+ for y in coord.ymin..coord.ymax {
+ for x in coord.xmin..coord.xmax {
+ map[range.to_vec(x, y)] = Tile::Clay;
+ }
+ }
+ }
+
+ debug!(map[range.to_vec(500, range.ymin)]);
+ map[range.to_vec(500, range.ymin)] = Tile::RunningWater;
+
+ let mut last_iter = Vec::new();
+ while last_iter != map {
+ last_iter = map.clone();
+ for y in range.ymin..range.ymax-1 {
+ for x in range.xmin..range.xmax {
+ match map[range.to_vec(x, y)] {
+ Tile::RunningWater => {
+ if map[range.to_vec(x, y+1)] == Tile::Sand {
+ map[range.to_vec(x, y+1)] = Tile::RunningWater;
+ }
+ if map[range.to_vec(x-1, y)] == Tile::Sand && (map[range.to_vec(x, y+1)] == Tile::Clay || map[range.to_vec(x, y+1)] == Tile::SettledWater) {
+ map[range.to_vec(x-1, y)] = Tile::RunningWater;
+ }
+ if map[range.to_vec(x+1, y)] == Tile::Sand && (map[range.to_vec(x, y+1)] == Tile::Clay || map[range.to_vec(x, y+1)] == Tile::SettledWater) {
+ map[range.to_vec(x+1, y)] = Tile::RunningWater;
+ }
+ if (map[range.to_vec(x-1, y)] == Tile::Clay || map[range.to_vec(x-1, y)] == Tile::HalfSettledWater) && (map[range.to_vec(x, y+1)] == Tile::Clay || map[range.to_vec(x, y+1)] == Tile::SettledWater) {
+ map[range.to_vec(x, y)] = Tile::HalfSettledWater;
+ }
+ },
+ Tile::HalfSettledWater => {
+ if map[range.to_vec(x+1, y)] == Tile::Clay {
+ for xleft in 0.. {
+ if map[range.to_vec(x-xleft, y)] == Tile::HalfSettledWater {
+ map[range.to_vec(x-xleft, y)] = Tile::SettledWater;
+ } else {
+ break;
+ }
+ }
+ }
+ },
+ _ => {}
+ }
+ }
+ }
+ }
+
+ let water_tiles = map.iter()
+ .filter(|&&t| t == Tile::RunningWater || t == Tile::SettledWater || t == Tile::HalfSettledWater)
+ .count();
+ debug!(water_tiles);
+
+ let settled_water_tiles = map.iter()
+ .filter(|&&t| t == Tile::SettledWater)
+ .count();
+ debug!(settled_water_tiles);
+
+ Ok(())
+}
+
+#[derive(Debug)]
+struct CoordinateSystem {
+ xmin: usize,
+ xmax: usize,
+ ymin: usize,
+ ymax: usize
+}
+
+impl CoordinateSystem {
+ fn vector_size(&self) -> usize {
+ (self.xmax - self.xmin) * (self.ymax - self.ymin)
+ }
+ fn to_vec(&self, x: usize, y: usize) -> usize {
+ ((y - self.ymin) * (self.xmax - self.xmin)) + (x - self.xmin)
+ }
+}
diff --git a/2018/src/bin/day_18.rs b/2018/src/bin/day_18.rs
new file mode 100644
index 0000000..3908ea7
--- /dev/null
+++ b/2018/src/bin/day_18.rs
@@ -0,0 +1,123 @@
+extern crate advent_of_code_2018;
+use advent_of_code_2018::*;
+
+extern crate arrayvec;
+use arrayvec::ArrayVec;
+
+use std::error::Error;
+use std::path::PathBuf;
+
+use std::collections::HashMap;
+
+// cargo watch -cs "cargo run --release --bin day_18"
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+enum State {
+ Open,
+ Trees,
+ Lumber
+}
+
+fn main() -> Result<(), Box<Error>> {
+ let input = read_file(&PathBuf::from("inputs/18.txt"))?;
+
+// println!("Input: {:?}", input);
+
+ let map = input.iter().map(|line| {
+ line.chars().map(|c| match c {
+ '.' => State::Open,
+ '|' => State::Trees,
+ '#' => State::Lumber,
+ _ => panic!("Unknown character {}", c)
+ }).collect::<Vec<_>>()
+ }).collect::<Vec<_>>();
+// debug!(map);
+
+ let after_10 = simulate(&map, 10);
+ let trees_count_10: usize = after_10.iter().map(|row| row.iter().filter(|&&x| x == State::Trees).count()).sum();
+ let lumber_count_10: usize = after_10.iter().map(|row| row.iter().filter(|&&x| x == State::Lumber).count()).sum();
+ debug!(trees_count_10);
+ debug!(lumber_count_10);
+ debug!(trees_count_10 * lumber_count_10);
+
+ let after_many = simulate(&map, 1000000000);
+ let trees_count_many: usize = after_many.iter().map(|row| row.iter().filter(|&&x| x == State::Trees).count()).sum();
+ let lumber_count_many: usize = after_many.iter().map(|row| row.iter().filter(|&&x| x == State::Lumber).count()).sum();
+ debug!(trees_count_many);
+ debug!(lumber_count_many);
+ debug!(trees_count_many * lumber_count_many);
+
+
+ Ok(())
+}
+
+
+fn simulate(start_map: &Vec<Vec<State>>, duration: u32) -> Vec<Vec<State>> {
+ let mut previous_maps = HashMap::new();
+
+ let mut map = start_map.clone();
+
+ let mut t = 0;
+ while t < duration {
+ let map0 = map.clone();
+ for y in 0..map.len() {
+ for x in 0..map[y].len() {
+ let adjacent = [
+ (x.wrapping_sub(1), y.wrapping_sub(1)),
+ (x, y.wrapping_sub(1)),
+ (x+1, y.wrapping_sub(1)),
+ (x.wrapping_sub(1), y),
+ (x+1, y),
+ (x.wrapping_sub(1), y+1),
+ (x, y+1),
+ (x+1, y+1)
+ ].iter().map(|&(other_x,other_y)| {
+ if other_y >= map0.len() || other_x >= map0[other_y].len() {
+ State::Open
+ } else {
+ map0[other_y][other_x]
+ }
+ }).collect::<ArrayVec<[State; 8]>>();
+
+ let adjacent_trees = adjacent.iter().filter(|&&x| x == State::Trees).count();
+ let adjacent_lumber = adjacent.iter().filter(|&&x| x == State::Lumber).count();
+
+ map[y][x] = match (map0[y][x], adjacent_trees, adjacent_lumber) {
+ (State::Open, trees, _) if trees >= 3 => State::Trees,
+ (State::Open, _, _) => State::Open,
+ (State::Trees, _, lumber) if lumber >= 3 => State::Lumber,
+ (State::Trees, _, _) => State::Trees,
+ (State::Lumber, trees, lumber) if trees >= 1 && lumber >= 1 => State::Lumber,
+ (State::Lumber, _, _) => State::Open
+ }
+ }
+ }
+
+ t += match previous_maps.get(&map) {
+ Some(previous_t) => {
+ let period = t + 1 - previous_t;
+ let whole_periods = (duration - t - 1) / period;
+ (period * whole_periods) + 1
+ },
+ None => 1
+ };
+ previous_maps.insert(map.clone(), t);
+ }
+
+ map
+}
+
+fn debug_print(map: &Vec<Vec<State>>) {
+ for row in map {
+ for c in row {
+ print!("{}", match c {
+ State::Open => '.',
+ State::Trees => '|',
+ State::Lumber => '#'
+ });
+ }
+ println!();
+ }
+ println!();
+ println!();
+}
diff --git a/2018/src/bin/day_19.rs b/2018/src/bin/day_19.rs
new file mode 100644
index 0000000..37ffef1
--- /dev/null
+++ b/2018/src/bin/day_19.rs
@@ -0,0 +1,139 @@
+extern crate advent_of_code_2018;
+use advent_of_code_2018::*;
+
+use std::error::Error;
+use std::path::PathBuf;
+
+// cargo watch -cs "cargo run --release --bin day_19"
+
+#[derive(Debug)]
+struct Instruction {
+ op: Op,
+ a: i32,
+ b: i32,
+ c: i32
+}
+
+impl Instruction {
+ fn execute(&self, counter_register: usize, registers: &mut [i32; 6]) -> i32{
+ use Op::*;
+
+ registers[self.c as usize] = match self.op {
+ Addr => registers[self.a as usize] + registers[self.b as usize],
+ Addi => registers[self.a as usize] + self.b,
+ Mulr => registers[self.a as usize] * registers[self.b as usize],
+ Muli => registers[self.a as usize] * self.b,
+ Banr => registers[self.a as usize] & registers[self.b as usize],
+ Bani => registers[self.a as usize] & self.b,
+ Borr => registers[self.a as usize] | registers[self.b as usize],
+ Bori => registers[self.a as usize] | self.b,
+ Setr => registers[self.a as usize],
+ Seti => self.a,
+ Gtir => if self.a > registers[self.b as usize] { 1 } else { 0 },
+ Gtri => if registers[self.a as usize] > self.b { 1 } else { 0 },
+ Gtrr => if registers[self.a as usize] > registers[self.b as usize] { 1 } else { 0 },
+ Eqir => if self.a == registers[self.b as usize] { 1 } else { 0 },
+ Eqri => if registers[self.a as usize] == self.b { 1 } else { 0 },
+ Eqrr => if registers[self.a as usize] == registers[self.b as usize] { 1 } else { 0 },
+ };
+
+ registers[counter_register]+1
+ }
+}
+
+#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+enum Op {
+ Addr,
+ Addi,
+ Mulr,
+ Muli,
+ Banr,
+ Bani,
+ Borr,
+ Bori,
+ Setr,
+ Seti,
+ Gtir,
+ Gtri,
+ Gtrr,
+ Eqir,
+ Eqri,
+ Eqrr
+}
+
+fn main() -> Result<(), Box<Error>> {
+ let input = read_file(&PathBuf::from("inputs/19.txt"))?;
+
+ println!("Input: {:?}", input);
+
+ let mut input_iter = input.iter();
+ let counter_register: usize = input_iter.next()
+ .map(|line| line.split_whitespace().nth(1).unwrap().parse().unwrap())
+ .unwrap();
+
+ let instructions: Vec<Instruction> = input_iter
+ .map(|line| {
+ let mut instruction_iter = line.split_whitespace();
+ Instruction {
+ op: match instruction_iter.next().unwrap() {
+ "addr" => Op::Addr,
+ "addi" => Op::Addi,
+ "mulr" => Op::Mulr,
+ "muli" => Op::Muli,
+ "banr" => Op::Banr,
+ "bani" => Op::Bani,
+ "borr" => Op::Borr,
+ "bori" => Op::Bori,
+ "setr" => Op::Setr,
+ "seti" => Op::Seti,
+ "gtir" => Op::Gtir,
+ "gtri" => Op::Gtri,
+ "gtrr" => Op::Gtrr,
+ "eqir" => Op::Eqir,
+ "eqri" => Op::Eqri,
+ "eqrr" => Op::Eqrr,
+ _ => panic!("unknown instruction")
+ },
+ a: instruction_iter.next().unwrap().parse().unwrap(),
+ b: instruction_iter.next().unwrap().parse().unwrap(),
+ c: instruction_iter.next().unwrap().parse().unwrap(),
+ }
+ })
+ .collect();
+
+ debug!(counter_register);
+ debug!(instructions);
+
+ let part1_registers = execute_program(&instructions, counter_register, [0; 6]);
+ debug!(part1_registers);
+
+ //let part2_registers = execute_program(&instructions, counter_register, [1, 0, 0, 0, 0, 0]);
+ //debug!(part2_registers);
+ part2();
+
+ Ok(())
+}
+
+fn execute_program(instructions: &Vec<Instruction>, counter_register: usize, registers: [i32; 6]) -> [i32; 6] {
+ let mut counter_val: i32 = 0;
+ let mut registers = registers.clone();
+ while counter_val >= 0 && counter_val < instructions.len() as i32 {
+ registers[counter_register] = counter_val;
+ counter_val = instructions[counter_val as usize].execute(counter_register, &mut registers);
+ }
+
+ registers
+}
+
+
+
+fn part2() {
+ let r1 = ((27*28)+29)*30*14*32 + (11 * 19 * 2 * 2) + (3 * 22) + 9;
+ let mut r0 = 0;
+ for r5 in 1..r1+1 {
+ if r1 % r5 == 0 {
+ r0 += r1 / r5;
+ }
+ }
+ debug!(r0);
+}
diff --git a/2018/src/bin/day_2.rs b/2018/src/bin/day_2.rs
new file mode 100644
index 0000000..7700871
--- /dev/null
+++ b/2018/src/bin/day_2.rs
@@ -0,0 +1,53 @@
+extern crate advent_of_code_2018;
+use advent_of_code_2018::*;
+
+use std::error::Error;
+use std::path::PathBuf;
+
+extern crate im_rc;
+use im_rc::HashMap;
+
+// cargo watch -cs "cargo run --release --bin day_2"
+
+fn main() -> Result<(), Box<Error>> {
+ let input = read_file(&PathBuf::from("inputs/2.txt"))?;
+
+ println!("Input: {:?}", input);
+
+ let (twice, thrice) = input.iter().fold((0,0), |(twice, thrice), next| {
+ let occurances = next.chars().fold(HashMap::new(), |occurances, c| {
+ let counter = occurances.get(&c).cloned().unwrap_or(0);
+ occurances.update(c, counter + 1)
+ });
+ let has_twice = occurances.values().any(|count| *count == 2);
+ let has_thrice = occurances.values().any(|count| *count == 3);
+
+ (
+ twice + if has_twice { 1 } else { 0 },
+ thrice + if has_thrice { 1 } else { 0 },
+ )
+ });
+
+ println!("Twice: {}", twice);
+ println!("Thrice: {}", thrice);
+
+ let checksum = twice * thrice;
+ println!("Checksum: {}", checksum);
+
+ for i in &input {
+ for j in &input {
+ let diff = i.chars().zip(j.chars()).fold(0, |diff, (x, y)| {
+ if x != y {
+ diff + 1
+ } else {
+ diff
+ }
+ });
+ if diff == 1 {
+ println!("Diff of 1: {} + {}", i, j);
+ }
+ }
+ }
+
+ Ok(())
+}
diff --git a/2018/src/bin/day_20.rs b/2018/src/bin/day_20.rs
new file mode 100644
index 0000000..6486d72
--- /dev/null
+++ b/2018/src/bin/day_20.rs
@@ -0,0 +1,137 @@
+extern crate advent_of_code_2018;
+use advent_of_code_2018::*;
+
+use std::error::Error;
+use std::path::PathBuf;
+
+use std::collections::{HashSet, HashMap};
+
+// cargo watch -cs "cargo run --release --bin day_20"
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+enum Dir {
+ N, S, E, W
+}
+
+#[derive(Debug)]
+struct Room {
+ doors: HashSet<Dir>
+}
+
+impl Room {
+ fn new() -> Room {
+ Room {
+ doors: HashSet::new()
+ }
+ }
+}
+
+fn main() -> Result<(), Box<Error>> {
+ let input = &read_file(&PathBuf::from("inputs/20.txt"))?[0];
+
+ println!("Input: {:?}", input);
+
+ let rooms = populate_rooms(input);
+ let distances = distance_map(&rooms);
+
+ debug!(distance_to_furthest_room(&distances));
+ debug!(distances_more_than_1000(&distances));
+
+ Ok(())
+}
+
+fn populate_rooms(input: &str) -> HashMap<(i32, i32), Room> {
+ let mut rooms: HashMap<(i32, i32), Room> = HashMap::new();
+ rooms.insert((0,0), Room::new());
+
+ let mut coords = vec!((0, 0));
+
+ let mut coord_stack: Vec<(Vec<(i32, i32)>, Vec<(i32, i32)>)> = Vec::new();
+
+ for c in input.chars() {
+ match c {
+ '^' | '$' => {},
+ 'E' => {
+ for coord in &mut coords {
+ rooms.get_mut(coord).unwrap().doors.insert(Dir::E);
+ coord.0 += 1;
+ rooms.entry(*coord).or_insert(Room::new());
+ }
+ },
+ 'W' => {
+ for coord in &mut coords {
+ rooms.get_mut(coord).unwrap().doors.insert(Dir::W);
+ coord.0 -= 1;
+ rooms.entry(*coord).or_insert(Room::new());
+ }
+ },
+ 'N' => {
+ for coord in &mut coords {
+ rooms.get_mut(coord).unwrap().doors.insert(Dir::N);
+ coord.1 -= 1;
+ rooms.entry(*coord).or_insert(Room::new());
+ }
+ },
+ 'S' => {
+ for coord in &mut coords {
+ rooms.get_mut(coord).unwrap().doors.insert(Dir::S);
+ coord.1 += 1;
+ rooms.entry(*coord).or_insert(Room::new());
+ }
+ },
+ '(' => {
+ coord_stack.push((coords.clone(), Vec::new()));
+ },
+ '|' => {
+ coord_stack.last_mut().unwrap().1.append(&mut coords);
+ coords = coord_stack.last().unwrap().0.clone();
+ },
+ ')' => {
+ coord_stack.last_mut().unwrap().1.append(&mut coords);
+ coords = coord_stack.pop().unwrap().1;
+ coords.sort();
+ coords.dedup();
+ },
+ c => {
+ panic!("Unknown character {}", c);
+ }
+ }
+ }
+
+ debug!(rooms.len());
+
+ rooms
+}
+
+fn distance_map(rooms: &HashMap<(i32, i32), Room>) -> HashMap<(i32, i32), u32> {
+ let mut distances: HashMap<(i32, i32), u32> = HashMap::new();
+ distances.insert((0,0), 0);
+
+ while distances.len() < rooms.len() {
+ let current_max = *distances.values().max().unwrap();
+ let new_distances = distances.iter()
+ .filter(|(_, &d)| d == current_max)
+ .flat_map(|(&coord, _)| {
+ let room = rooms.get(&coord).unwrap();
+ room.doors.iter().map(|dir| match dir {
+ Dir::N => (coord.0, coord.1-1),
+ Dir::S => (coord.0, coord.1+1),
+ Dir::W => (coord.0-1, coord.1),
+ Dir::E => (coord.0+1, coord.1)
+ }).collect::<Vec<_>>()
+ })
+ .collect::<Vec<_>>();
+ for coord in new_distances {
+ distances.entry(coord).or_insert(current_max + 1);
+ }
+ }
+ distances
+}
+
+fn distance_to_furthest_room(distances: &HashMap<(i32, i32), u32>) -> u32 {
+ distances.values().max().unwrap().clone()
+}
+
+fn distances_more_than_1000(distances: &HashMap<(i32, i32), u32>) -> u32 {
+ distances.values().filter(|&&x| x >= 1000).count() as u32
+}
diff --git a/2018/src/bin/day_21.rs b/2018/src/bin/day_21.rs
new file mode 100644
index 0000000..0d9a97c
--- /dev/null
+++ b/2018/src/bin/day_21.rs
@@ -0,0 +1,137 @@
+extern crate advent_of_code_2018;
+use advent_of_code_2018::*;
+
+use std::error::Error;
+use std::path::PathBuf;
+use std::u32;
+
+use std::collections::HashMap;
+// cargo watch -cs "cargo run --release --bin day_21"
+
+use std::i32;
+
+#[derive(Debug)]
+struct Instruction {
+ op: Op,
+ a: i32,
+ b: i32,
+ c: i32
+}
+
+impl Instruction {
+ fn execute(&self, counter_register: usize, registers: &mut [i32; 6]) -> i32{
+ use Op::*;
+
+ registers[self.c as usize] = match self.op {
+ Addr => registers[self.a as usize].wrapping_add(registers[self.b as usize]),
+ Addi => registers[self.a as usize].wrapping_add(self.b),
+ Mulr => registers[self.a as usize].wrapping_mul(registers[self.b as usize]),
+ Muli => registers[self.a as usize].wrapping_mul(self.b),
+ Banr => registers[self.a as usize] & registers[self.b as usize],
+ Bani => registers[self.a as usize] & self.b,
+ Borr => registers[self.a as usize] | registers[self.b as usize],
+ Bori => registers[self.a as usize] | self.b,
+ Setr => registers[self.a as usize],
+ Seti => self.a,
+ Gtir => if self.a > registers[self.b as usize] { 1 } else { 0 },
+ Gtri => if registers[self.a as usize] > self.b { 1 } else { 0 },
+ Gtrr => if registers[self.a as usize] > registers[self.b as usize] { 1 } else { 0 },
+ Eqir => if self.a == registers[self.b as usize] { 1 } else { 0 },
+ Eqri => if registers[self.a as usize] == self.b { 1 } else { 0 },
+ Eqrr => if registers[self.a as usize] == registers[self.b as usize] { 1 } else { 0 },
+ };
+
+ registers[counter_register]+1
+ }
+}
+
+#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+enum Op {
+ Addr,
+ Addi,
+ Mulr,
+ Muli,
+ Banr,
+ Bani,
+ Borr,
+ Bori,
+ Setr,
+ Seti,
+ Gtir,
+ Gtri,
+ Gtrr,
+ Eqir,
+ Eqri,
+ Eqrr
+}
+
+
+fn main() -> Result<(), Box<Error>> {
+ let input = read_file(&PathBuf::from("inputs/21.txt"))?;
+
+ let mut input_iter = input.iter();
+ let counter_register: usize = input_iter.next()
+ .map(|line| line.split_whitespace().nth(1).unwrap().parse().unwrap())
+ .unwrap();
+
+ let instructions: Vec<Instruction> = input_iter
+ .map(|line| {
+ let mut instruction_iter = line.split_whitespace();
+ Instruction {
+ op: match instruction_iter.next().unwrap() {
+ "addr" => Op::Addr,
+ "addi" => Op::Addi,
+ "mulr" => Op::Mulr,
+ "muli" => Op::Muli,
+ "banr" => Op::Banr,
+ "bani" => Op::Bani,
+ "borr" => Op::Borr,
+ "bori" => Op::Bori,
+ "setr" => Op::Setr,
+ "seti" => Op::Seti,
+ "gtir" => Op::Gtir,
+ "gtri" => Op::Gtri,
+ "gtrr" => Op::Gtrr,
+ "eqir" => Op::Eqir,
+ "eqri" => Op::Eqri,
+ "eqrr" => Op::Eqrr,
+ _ => panic!("unknown instruction")
+ },
+ a: instruction_iter.next().unwrap().parse().unwrap(),
+ b: instruction_iter.next().unwrap().parse().unwrap(),
+ c: instruction_iter.next().unwrap().parse().unwrap(),
+ }
+ })
+ .collect();
+
+ execute_program(&instructions, counter_register, [0, 0, 0, 0, 0, 0]);
+
+ Ok(())
+}
+
+fn execute_program(instructions: &Vec<Instruction>, counter_register: usize, registers: [i32; 6]) {
+ let mut instructions_executed: u64 = 0;
+ let mut counter_val: i32 = 0;
+ let mut registers = registers.clone();
+ let mut halting_values = HashMap::new();
+
+ while counter_val >= 0 && counter_val < instructions.len() as i32 {
+ if counter_val == 28 {
+ if halting_values.contains_key(&registers[4]) {
+ break;
+ }
+ halting_values.entry(registers[4]).or_insert(instructions_executed+2);
+ }
+ registers[counter_register] = counter_val;
+ counter_val = instructions[counter_val as usize].execute(counter_register, &mut registers);
+ instructions_executed += 1;
+ }
+
+ let (min_halting, min_halting_time) = halting_values.iter().min_by_key(|&(_, v)| v).unwrap();
+ debug!(min_halting);
+ debug!(min_halting_time);
+ let (max_halting, max_halting_time) = halting_values.iter().max_by_key(|&(_, v)| v).unwrap();
+ debug!(max_halting);
+ debug!(max_halting_time);
+
+}
diff --git a/2018/src/bin/day_22.rs b/2018/src/bin/day_22.rs
new file mode 100644
index 0000000..f9013cf
--- /dev/null
+++ b/2018/src/bin/day_22.rs
@@ -0,0 +1,165 @@
+extern crate advent_of_code_2018;
+use advent_of_code_2018::*;
+
+use std::error::Error;
+use std::path::PathBuf;
+
+use std::u32;
+use std::collections::{HashMap, HashSet};
+
+// cargo watch -cs "cargo run --release --bin day_22"
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+struct Position {
+ x: u32,
+ y: u32,
+ equipment: u32 // 0 = nothing, 1 = torch, 2 = climbing
+}
+
+impl Position {
+ fn adjacent(&self, map: &Vec<Vec<u32>>) -> Vec<(Position, u32)> {
+ let all_adjacent = [
+ (Position {
+ x: self.x.saturating_sub(1),
+ ..*self
+ }, 1),
+ (Position {
+ y: self.y.saturating_sub(1),
+ ..*self
+ }, 1),
+ (Position {
+ x: self.x+1,
+ ..*self
+ }, 1),
+ (Position {
+ y: self.y+1,
+ ..*self
+ }, 1),
+ (Position {
+ equipment: (self.equipment+1)%3,
+ ..*self
+ }, 7),
+ (Position {
+ equipment: (self.equipment+2)%3,
+ ..*self
+ }, 7)
+ ];
+ all_adjacent.iter()
+ .filter(|(p, _)| {
+ let region = map[p.y as usize][p.x as usize];
+ let out_of_bounds = self == p;
+ let invalid_equipment = (region == 0 && p.equipment == 0) ||
+ (region == 1 && p.equipment == 1) ||
+ (region == 2 && p.equipment == 2);
+ !out_of_bounds && !invalid_equipment
+ })
+ .cloned()
+ .collect()
+ }
+}
+
+fn main() -> Result<(), Box<Error>> {
+ let input = &read_file(&PathBuf::from("inputs/22.txt"))?;
+
+ let depth: u32 = input[0].trim_matches(|c: char| !c.is_numeric()).parse().unwrap();
+ debug!(depth);
+ let mut input_target_iter = input[1]
+ .split(|c: char| !c.is_numeric())
+ .filter(|s| !s.is_empty())
+ .map(|s| s.parse::<u32>().unwrap());
+
+ let target_x = input_target_iter.next().unwrap();
+ let target_y = input_target_iter.next().unwrap();
+
+ debug!((target_x, target_y));
+
+ let mut map_width = target_x;
+ let mut map_height = target_y;
+ let mut map = build_map(map_width, map_height, depth, target_x, target_y);
+
+ let risk: u32 = map.iter().take((target_y+1) as usize).map(|row| row.iter().take((target_x+1) as usize).sum::<u32>()).sum();
+ debug!(risk);
+
+
+ let mut distances = HashMap::new();
+ let mut unexplored = HashSet::new();
+ let initial = Position {
+ x: 0,
+ y: 0,
+ equipment: 1
+ };
+ let target = Position {
+ x: target_x,
+ y: target_y,
+ equipment: 1
+ };
+ distances.insert(initial, 0);
+ unexplored.insert(initial);
+
+ while !distances.contains_key(&target) || unexplored.contains(&target) {
+ let (current, current_distance) = unexplored.iter()
+ .map(|unexp| (unexp.clone(), distances.get(unexp).cloned().unwrap()))
+ .min_by_key(|(_, d)| *d)
+ .unwrap();
+
+ if current.y+1 >= map_height {
+ map_height *= 2;
+ map = build_map(map_width, map_height, depth, target_x, target_y);
+ debug!(map_height);
+ }
+ if current.x+1 >= map_width {
+ map_width *= 2;
+ map = build_map(map_width, map_height, depth, target_x, target_y);
+ debug!(map_width);
+ }
+
+ for (adjacent, further) in current.adjacent(&map) {
+ let distance = current_distance + further;
+ let best_previous_distance = distances.get(&adjacent).cloned().unwrap_or(u32::MAX);
+ if best_previous_distance > distance {
+ distances.insert(adjacent, distance);
+ unexplored.insert(adjacent);
+ }
+
+ }
+ unexplored.remove(&current);
+ }
+
+ debug!(distances.get(&target));
+
+ Ok(())
+}
+
+
+fn build_map(max_x: u32, max_y: u32, depth: u32, target_x: u32, target_y: u32) -> Vec<Vec<u32>> {
+ let mut geologic_index: Vec<Vec<u32>> = Vec::new();
+ let mut erosion_level: Vec<Vec<u32>> = Vec::new();
+ let mut region_type: Vec<Vec<u32>> = Vec::new();
+
+ for y in 0..max_y {
+ let mut geologic_row = Vec::new();
+ let mut erosion_row = Vec::new();
+ let mut type_row = Vec::new();
+
+ for x in 0..max_x {
+ let index = match (x, y) {
+ (0, 0) => 0,
+ (x, y) if x == target_x && y == target_y => 0,
+ (x, 0) => x*16807,
+ (0, y) => y*48271,
+ (x, y) => erosion_row[(x-1) as usize] * erosion_level[(y-1) as usize][x as usize]
+ };
+ let erosion = (index + depth) % 20183;
+ let block_type = erosion % 3;
+
+ geologic_row.push(index);
+ erosion_row.push(erosion);
+ type_row.push(block_type);
+ }
+
+ geologic_index.push(geologic_row);
+ erosion_level.push(erosion_row);
+ region_type.push(type_row);
+ }
+ region_type
+}
diff --git a/2018/src/bin/day_23.rs b/2018/src/bin/day_23.rs
new file mode 100644
index 0000000..463f3d3
--- /dev/null
+++ b/2018/src/bin/day_23.rs
@@ -0,0 +1,114 @@
+extern crate advent_of_code_2018;
+use advent_of_code_2018::*;
+
+use std::error::Error;
+use std::path::PathBuf;
+use std::cmp;
+
+// cargo watch -cs "cargo run --release --bin day_23"
+
+#[derive(Debug, Clone)]
+struct Bot {
+ radius: i64,
+ position: Position
+}
+
+#[derive(Debug, Clone)]
+struct Position {
+ x: i64,
+ y: i64,
+ z: i64
+}
+
+impl Position {
+ fn distance(&self, other: &Position) -> i64 {
+ (other.z - self.z).abs() +
+ (other.y - self.y).abs() +
+ (other.x - self.x).abs()
+ }
+}
+
+fn main() -> Result<(), Box<Error>> {
+ let input = read_file(&PathBuf::from("inputs/23.txt"))?;
+
+ let mut bots: Vec<Bot> = input.iter().map(|line| {
+ let mut line_iter = line.split(|c: char| c != '-' && !c.is_numeric())
+ .filter(|s| !s.is_empty())
+ .map(|s| s.parse::<i64>().unwrap());
+ Bot {
+ position: Position {
+ x: line_iter.next().unwrap(),
+ y: line_iter.next().unwrap(),
+ z: line_iter.next().unwrap()
+ },
+ radius: line_iter.next().unwrap()
+ }
+ }).collect();
+
+ let biggest_radius = bots.iter().max_by_key(|bot| bot.radius).unwrap();
+ let biggest_radius_in_range_count = bots.iter()
+ .filter(|bot| biggest_radius.position.distance(&bot.position) <= biggest_radius.radius)
+ .count();
+ debug!(biggest_radius);
+ debug!(biggest_radius_in_range_count);
+
+
+ let min_x = bots.iter().min_by_key(|bot| bot.position.x).unwrap().position.x;
+ let max_x = bots.iter().max_by_key(|bot| bot.position.x).unwrap().position.x;
+ debug!(min_x);
+ debug!(max_x);
+ let min_y = bots.iter().min_by_key(|bot| bot.position.y).unwrap().position.y;
+ let max_y = bots.iter().max_by_key(|bot| bot.position.y).unwrap().position.y;
+ debug!(min_y);
+ debug!(max_y);
+ let min_z = bots.iter().min_by_key(|bot| bot.position.z).unwrap().position.z;
+ let max_z = bots.iter().max_by_key(|bot| bot.position.z).unwrap().position.z;
+ debug!(min_z);
+ debug!(max_z);
+
+ let origin = Position { x: 0, y: 0, z: 0 };
+
+ let mut radius = cmp::max(max_x - min_x, cmp::max(max_y-min_y, max_z-min_z));
+ let mut center = origin.clone();
+
+ while radius > 0 {
+ let delta = 0.8;
+ let new_radius = if radius == 1 { 0 } else { (radius as f32 * delta) as i64 };
+ let deltas = [-1.0, -0.8, -0.6, -0.4, -0.2, 0.0, 0.2, 0.4, 0.6, 0.8, 1.0];
+ let subs: Vec<Position> = deltas.iter().flat_map(|&dx| {
+ deltas.iter().flat_map(|&dy| {
+ deltas.iter().map(|&dz| {
+ Position {
+ x: center.x + (radius as f32 * dx) as i64,
+ y: center.y + (radius as f32 * dy) as i64,
+ z: center.z + (radius as f32 * dz) as i64
+ }
+ }).collect::<Vec<_>>()
+ }).collect::<Vec<_>>()
+ }).collect();
+
+ center = subs.iter()
+ .map(|new_center| {
+ (new_center, bots.iter()
+ .filter(|bot| bot.position.distance(&new_center) <= bot.radius + new_radius)
+ .count())
+ })
+ .max_by(|(a_center, a_bots), (b_center, b_bots)| {
+ a_bots.cmp(&b_bots).then(b_center.distance(&origin).cmp(&a_center.distance(&origin)))
+ })
+ .map(|(center, _)| center)
+ .unwrap().clone();
+
+ radius = new_radius;
+ }
+
+ let connected_in_radius = bots.iter()
+ .filter(|bot| bot.position.distance(&center) <= bot.radius)
+ .count();
+ debug!(connected_in_radius);
+ debug!(center);
+ let distance_to_origin = center.distance(&origin);
+ debug!(distance_to_origin);
+
+ Ok(())
+}
diff --git a/2018/src/bin/day_24.rs b/2018/src/bin/day_24.rs
new file mode 100644
index 0000000..d52f7d0
--- /dev/null
+++ b/2018/src/bin/day_24.rs
@@ -0,0 +1,217 @@
+extern crate advent_of_code_2018;
+use advent_of_code_2018::*;
+
+use std::error::Error;
+use std::path::PathBuf;
+use std::str::FromStr;
+
+use std::collections::HashMap;
+
+// cargo watch -cs "cargo run --release --bin day_24"
+
+#[derive(Debug, Clone)]
+struct Army {
+ units: u32,
+ hp: u32,
+ weaknesses: Vec<String>,
+ immunities: Vec<String>,
+ damage_type: String,
+ damage: u32,
+ initiative: u32
+}
+
+impl Army {
+ fn effective_power(&self) -> u32 {
+ self.units * self.damage
+ }
+
+ fn actual_damage(&self, other: &Army) -> u32 {
+ let modifier = if other.weaknesses.contains(&self.damage_type) {
+ 2
+ } else if other.immunities.contains(&self.damage_type) {
+ 0
+ } else {
+ 1
+ };
+ self.effective_power() * modifier
+ }
+}
+
+impl FromStr for Army {
+ type Err = Box<Error>;
+
+ fn from_str(s: &str) -> Result<Self, Self::Err> {
+ // 2991 units each with 8084 hit points (weak to fire) with an attack that does 19 radiation damage at initiative 11
+ let mut words = s.split_whitespace();
+ let units = words.next().unwrap().parse()?;
+ let hp = words.nth(3).unwrap().parse()?;
+ let _ = words.nth(1);
+
+ let mut weaknesses = Vec::new();
+ let mut immunities = Vec::new();
+
+ let mut bracket_handled = false;
+ while !bracket_handled {
+ let maybe_weak_or_immune = words.next().unwrap().trim_matches(|c: char| !c.is_alphabetic());
+ if maybe_weak_or_immune == "weak" {
+ let mut weakness = words.nth(1).unwrap();
+ weaknesses.push(weakness.trim_matches(|c: char| !c.is_alphabetic()).to_string());
+ while weakness.ends_with(',') {
+ weakness = words.next().unwrap();
+ weaknesses.push(weakness.trim_matches(|c: char| !c.is_alphabetic()).to_string());
+ }
+ }
+ else if maybe_weak_or_immune == "immune" {
+ let mut immunity = words.nth(1).unwrap();
+ immunities.push(immunity.trim_matches(|c: char| !c.is_alphabetic()).to_string());
+ while immunity.ends_with(',') {
+ immunity = words.next().unwrap();
+ immunities.push(immunity.trim_matches(|c: char| !c.is_alphabetic()).to_string());
+ }
+ }
+ else {
+ bracket_handled = true;
+ }
+ }
+ let damage = words.nth(4).unwrap().parse()?;
+ let damage_type = words.next().unwrap().to_string();
+ let initiative = words.nth(3).unwrap().parse()?;
+
+ Ok(Army {
+ units, hp, weaknesses, immunities, damage_type, damage, initiative
+ })
+ }
+}
+
+
+
+fn main() -> Result<(), Box<Error>> {
+ let input = read_file(&PathBuf::from("inputs/24.txt"))?;
+
+ let mut input_iter = input.iter();
+ let _ = input_iter.next();
+ let immune_army: Vec<Army> = input_iter.by_ref()
+ .take_while(|&line| line != "Infection:")
+ .map(|line| line.parse().unwrap())
+ .collect();
+ let infection_army: Vec<Army> = input_iter
+ .map(|line| line.parse().unwrap())
+ .collect();
+
+ let (unboosted_immune_army_size, unboosted_infection_army_size) = simulate(&immune_army, &infection_army, 0);
+ debug!(unboosted_immune_army_size);
+ debug!(unboosted_infection_army_size);
+
+ for boost in 0.. {
+ debug!(boost);
+ let (immune_army_size, infection_army_size) = simulate(&immune_army, &infection_army, boost);
+ debug!(immune_army_size);
+ debug!(infection_army_size);
+ if immune_army_size > 0 {
+ break;
+ }
+ }
+
+ Ok(())
+}
+
+
+fn target_selection(targeting_army: &Vec<Army>, targeted_army: &Vec<Army>) -> HashMap<usize, usize> {
+ let mut targets = HashMap::new();
+ for (i, army) in targeting_army.iter().enumerate() {
+ let best_target = (0..targeted_army.len())
+ .filter(|potential_target| !targets.values().any(|targeted| targeted == potential_target))
+ .fold(None, |best_target, next| {
+ let next_actual_damage = army.actual_damage(&targeted_army[next]);
+ let last_best_actual_damage = best_target.map(|best_target| army.actual_damage(&targeted_army[best_target])).unwrap_or(0);
+ let next_effective_power = targeted_army[next].effective_power();
+ let last_best_effective_power = best_target.map(|best_target: usize| targeted_army[best_target].effective_power()).unwrap_or(0);
+ let next_initiative = targeted_army[next].initiative;
+ let last_best_initiative = best_target.map(|best_target| targeted_army[best_target].initiative).unwrap_or(0);
+ if next_actual_damage == 0 && last_best_actual_damage == 0 {
+ None
+ } else if next_actual_damage > last_best_actual_damage {
+ Some(next)
+ } else if next_actual_damage == last_best_actual_damage && next_effective_power > last_best_effective_power {
+ Some(next)
+ } else if next_actual_damage == last_best_actual_damage && next_effective_power == last_best_effective_power && next_initiative > last_best_initiative {
+ Some(next)
+ } else {
+ best_target
+ }
+ });
+
+ if let Some(best_target) = best_target {
+ targets.insert(i, best_target);
+ }
+ }
+
+ targets
+}
+
+fn attack(aggressor: &Army, target: &mut Army) {
+ let damage = aggressor.actual_damage(target);
+ let units_destroyed = damage / target.hp;
+ target.units = target.units.saturating_sub(units_destroyed);
+}
+
+
+fn simulate(immune_army: &[Army], infection_army: &[Army], boost: u32) -> (u32, u32) {
+ let mut infection_army = Vec::from(infection_army);
+
+ let mut immune_army: Vec<Army> = immune_army.iter().map(|army| Army {
+ damage: army.damage + boost,
+ ..army.clone()
+ }).collect();
+
+ let mut watchdog_sum = immune_army.iter().map(|a| a.units).sum::<u32>() + infection_army.iter().map(|a| a.units).sum::<u32>();
+ while immune_army.len() > 0 && infection_army.len() > 0 {
+ immune_army.sort_by(|a, b| b.effective_power().cmp(&a.effective_power()).then(b.initiative.cmp(&a.initiative)));
+ infection_army.sort_by(|a, b| b.effective_power().cmp(&a.effective_power()).then(b.initiative.cmp(&a.initiative)));
+
+ let mut immune_targets = target_selection(&immune_army, &infection_army);
+ let mut infection_targets = target_selection(&infection_army, &immune_army);
+
+ while immune_targets.len() > 0 || infection_targets.len() > 0 {
+ let next_immune = immune_targets.keys()
+ .map(|&k| (k, immune_army[k].initiative.clone()))
+ .max_by_key(|(_, initiative)| *initiative);
+ let next_infection = infection_targets.keys()
+ .map(|&k| (k, infection_army[k].initiative.clone()))
+ .max_by_key(|(_, initiative)| *initiative);
+ match (next_immune, next_infection) {
+ (None, None) => {
+ panic!("No targets left")
+ },
+ (Some((immune_key, immune_init)), Some((_infect_key, infect_init))) if immune_init > infect_init => {
+ attack(&immune_army[immune_key], &mut infection_army[*immune_targets.get(&immune_key).unwrap()]);
+ immune_targets.remove(&immune_key);
+ },
+ (Some((_immune_key, _immune_init)), Some((infect_key, _infect_init))) => {
+ attack(&infection_army[infect_key], &mut immune_army[*infection_targets.get(&infect_key).unwrap()]);
+ infection_targets.remove(&infect_key);
+ },
+ (Some((immune_key, _immune_init)), None) => {
+ attack(&immune_army[immune_key], &mut infection_army[*immune_targets.get(&immune_key).unwrap()]);
+ immune_targets.remove(&immune_key);
+ },
+ (None, Some((infect_key, _infect_init))) => {
+ attack(&infection_army[infect_key], &mut immune_army[*infection_targets.get(&infect_key).unwrap()]);
+ infection_targets.remove(&infect_key);
+ }
+ };
+ }
+
+ immune_army.retain(|a| a.units > 0);
+ infection_army.retain(|a| a.units > 0);
+
+ let new_watchdog_sum = immune_army.iter().map(|a| a.units).sum::<u32>() + infection_army.iter().map(|a| a.units).sum::<u32>();
+ if watchdog_sum == new_watchdog_sum {
+ // Stalemate! Everyone loses.
+ return (0, 0);
+ }
+ watchdog_sum = new_watchdog_sum;
+ }
+
+ (immune_army.iter().map(|a| a.units).sum(), infection_army.iter().map(|a| a.units).sum())
+}
diff --git a/2018/src/bin/day_25.rs b/2018/src/bin/day_25.rs
new file mode 100644
index 0000000..9e74f49
--- /dev/null
+++ b/2018/src/bin/day_25.rs
@@ -0,0 +1,47 @@
+extern crate advent_of_code_2018;
+use advent_of_code_2018::*;
+
+use std::error::Error;
+use std::path::PathBuf;
+
+// cargo watch -cs "cargo run --release --bin day_25"
+
+fn main() -> Result<(), Box<Error>> {
+ let input = read_file(&PathBuf::from("inputs/25.txt"))?;
+
+ let mut constellations: Vec<Vec<Vec<i32>>> = input.iter()
+ .map(|line| line.split(',').map(|x| x.parse().unwrap()).collect::<Vec<_>>())
+ .map(|points| vec!(points))
+ .collect();
+
+ // debug!(constellations);
+
+ while join_constellations(&mut constellations) {
+ }
+
+ debug!(constellations.len());
+
+ Ok(())
+}
+
+fn distance(xs: &[i32], ys: &[i32]) -> i32 {
+ xs.iter().zip(ys.iter()).map(|(x,y)| (x - y).abs()).sum()
+}
+
+fn join_constellations(constellations: &mut Vec<Vec<Vec<i32>>>) -> bool {
+ for i in 0..constellations.len()-1 {
+ for j in i+1..constellations.len() {
+ let connected = constellations[i].iter().any(|ci| {
+ constellations[j].iter().any(|cj| {
+ distance(&ci, &cj) <= 3
+ })
+ });
+ if connected {
+ let mut to_join = constellations.remove(j);
+ constellations[i].append(&mut to_join);
+ return true;
+ }
+ }
+ }
+ false
+}
diff --git a/2018/src/bin/day_3.rs b/2018/src/bin/day_3.rs
new file mode 100644
index 0000000..685e288
--- /dev/null
+++ b/2018/src/bin/day_3.rs
@@ -0,0 +1,76 @@
+extern crate advent_of_code_2018;
+use advent_of_code_2018::*;
+
+use std::str::FromStr;
+
+use std::error::Error;
+use std::path::PathBuf;
+
+use std::collections::HashMap;
+
+// cargo watch -cs "cargo run --release --bin day_3"
+
+#[derive(Debug)]
+struct Claim {
+ id: u32,
+ x: u32,
+ y: u32,
+ w: u32,
+ h: u32
+}
+
+impl FromStr for Claim {
+ type Err = Box<Error>;
+
+ fn from_str(s: &str) -> Result<Self, Self::Err> {
+ //#123 @ 3,2: 5x4
+ let split = s
+ .split(|c: char| !c.is_numeric())
+ .filter(|s| !s.is_empty())
+ .map(|s| s.parse())
+ .collect::<Result<Vec<u32>, _>>()?;
+
+ Ok(Claim {
+ id: split[0],
+ x: split[1],
+ y: split[2],
+ w: split[3],
+ h: split[4]
+ })
+ }
+}
+
+fn main() -> Result<(), Box<Error>> {
+ let input = read_file(&PathBuf::from("inputs/3.txt"))?;
+ let claims = input.iter().map(|line| line.parse::<Claim>()).collect::<Result<Vec<_>, _>>()?;
+
+ let mut claimed = HashMap::new();
+ for claim in &claims {
+ for x in claim.x..claim.x+claim.w {
+ for y in claim.y..claim.y+claim.h {
+ *claimed.entry((x,y)).or_insert(0) += 1;
+ }
+ }
+ }
+
+ let conflicts = claimed.values().filter(|&x| *x > 1).count();
+ println!("Conflicts: {}", conflicts);
+
+ let conflict_free = claims.iter().filter(|c| check_for_conflicts(c, &claimed)).collect::<Vec<_>>();
+
+ println!("Conflict free: {:?}", conflict_free);
+
+ Ok(())
+}
+
+
+fn check_for_conflicts(claim: &Claim, claimed: &HashMap<(u32, u32), u32>) -> bool {
+ for x in claim.x..claim.x+claim.w {
+ for y in claim.y..claim.y+claim.h {
+ if claimed.get(&(x,y)).map_or(false, |c| *c > 1) {
+ return false;
+ }
+ }
+ }
+ true
+}
diff --git a/2018/src/bin/day_4.rs b/2018/src/bin/day_4.rs
new file mode 100644
index 0000000..2010cf8
--- /dev/null
+++ b/2018/src/bin/day_4.rs
@@ -0,0 +1,116 @@
+extern crate advent_of_code_2018;
+use advent_of_code_2018::*;
+
+use std::str::FromStr;
+
+use std::error::Error;
+use std::path::PathBuf;
+use std::collections::HashMap;
+
+// cargo watch -cs "cargo run --release --bin day_4"
+
+#[derive(Debug, PartialOrd, Ord, PartialEq, Eq)]
+struct Event {
+ date: String,
+ hour: u32,
+ minute: u32,
+ what: EventType
+}
+
+#[derive(Debug, PartialOrd, Ord, PartialEq, Eq)]
+enum EventType {
+ BeginShift(u32),
+ Asleep,
+ Awake
+}
+
+impl FromStr for Event {
+ type Err = Box<Error>;
+
+ fn from_str(s: &str) -> Result<Self, Self::Err> {
+ let date = s.split_whitespace().nth(0).unwrap().trim_matches('[').to_string();
+ let time = s.split_whitespace().nth(1).unwrap().trim_matches(']');
+ let hour = time.split(':').nth(0).unwrap().parse().unwrap();
+ let minute = time.split(':').nth(1).unwrap().parse().unwrap();
+ let guard = s.split_whitespace().nth(3).and_then(|x| x.trim_matches('#').parse().ok());
+
+ let what = match s.split_whitespace().nth(2).unwrap() {
+ "Guard" => EventType::BeginShift(guard.unwrap()),
+ "falls" => EventType::Asleep,
+ "wakes" => EventType::Awake,
+ _ => panic!("Unknown event")
+ };
+
+ Ok(Event {
+ date,
+ hour,
+ minute,
+ what
+ })
+ }
+}
+
+#[derive(Debug)]
+struct GuardSleepStats {
+ per_minute: HashMap<u32, u32>
+}
+
+impl GuardSleepStats {
+ fn new() -> GuardSleepStats {
+ GuardSleepStats {
+ per_minute: HashMap::new()
+ }
+ }
+ fn total(&self) -> u32 {
+ self.per_minute.values().sum()
+ }
+}
+
+
+fn main() -> Result<(), Box<Error>> {
+ let input = read_file(&PathBuf::from("inputs/4.txt"))?;
+
+ //println!("Input: {:?}", input);
+
+ let mut events: Vec<Event> = input.iter().map(|line| line.parse().unwrap()).collect();
+ events.sort();
+ //println!("Events: {:?}", events);
+
+
+ let mut sleep = HashMap::new();
+ let mut current_guard = 0;
+ let mut last_asleep = 0;
+ for event in events {
+ match event.what {
+ EventType::BeginShift(guard) => current_guard = guard,
+ EventType::Asleep => last_asleep = event.minute,
+ EventType::Awake => {
+ for i in last_asleep..event.minute {
+ *sleep
+ .entry(current_guard)
+ .or_insert(GuardSleepStats::new())
+ .per_minute
+ .entry(i)
+ .or_insert(0) += 1
+ }
+ }
+ }
+ }
+
+ println!("Stats: {:?}", sleep);
+
+ let (sleepiest_guard, sleepiest_stats) = sleep.iter().max_by_key(|(_,v)| v.total()).unwrap().clone();
+ println!("Sleepiest guard: {:?}", sleepiest_guard);
+ let (sleepiest_minute, sleepiest_occurances) = sleepiest_stats.per_minute.iter().max_by_key(|(_,v)| *v).unwrap().clone();
+ println!("Sleepiest minute: {:?}", sleepiest_minute);
+ println!("Part 1 answer: {}", sleepiest_guard * sleepiest_minute);
+
+
+ let (specific_minute_offender, specific_minute_stats) = sleep.iter().max_by_key(|(_,v)| v.per_minute.values().max().unwrap()).unwrap().clone();
+ println!("Specific minute: {:?}", specific_minute_offender);
+ let (specific_minute_minute, specific_minute_occurances) = specific_minute_stats.per_minute.iter().max_by_key(|(_,v)| *v).unwrap().clone();
+ println!("Specific Minute minute: {:?}", specific_minute_minute);
+ println!("Part 2 answer: {}", specific_minute_offender * specific_minute_minute);
+
+ Ok(())
+}
diff --git a/2018/src/bin/day_5.rs b/2018/src/bin/day_5.rs
new file mode 100644
index 0000000..2b24d4c
--- /dev/null
+++ b/2018/src/bin/day_5.rs
@@ -0,0 +1,53 @@
+extern crate advent_of_code_2018;
+use advent_of_code_2018::*;
+
+use std::error::Error;
+use std::path::PathBuf;
+use std::cmp;
+
+// cargo watch -cs "cargo run --release --bin day_5"
+
+fn main() -> Result<(), Box<Error>> {
+ let input = read_file(&PathBuf::from("inputs/5.txt"))?;
+
+ //println!("Input: {:?}", input);
+ let polymer = {
+ let mut polymer: Vec<char> = input[0].chars().collect();
+ reduce(&mut polymer);
+ polymer
+ };
+
+ debug!(polymer.len());
+
+
+ let mut min_length = polymer.len();
+ for c in "abcdefghijklmnopqrstuvwxyz".chars() {
+ let mut polymer_without_char = polymer.clone();
+ polymer_without_char.retain(|x| x.to_ascii_lowercase() != c);
+ reduce(&mut polymer_without_char);
+ min_length = cmp::min(min_length, polymer_without_char.len());
+ }
+
+ debug!(min_length);
+
+ Ok(())
+}
+
+
+fn reduce(polymer: &mut Vec<char>) {
+ let mut had_reductions = true;
+ while had_reductions {
+ had_reductions = false;
+
+ for i in 0..polymer.len()-1 {
+ if polymer[i].to_ascii_lowercase() == polymer[i+1].to_ascii_lowercase() && polymer[i] != polymer[i+1] {
+ had_reductions = true;
+ polymer.remove(i+1);
+ polymer.remove(i);
+
+ // break isn't efficient, but does prevent indexing issues after removing
+ break;
+ }
+ }
+ }
+}
diff --git a/2018/src/bin/day_6.rs b/2018/src/bin/day_6.rs
new file mode 100644
index 0000000..16c8782
--- /dev/null
+++ b/2018/src/bin/day_6.rs
@@ -0,0 +1,103 @@
+extern crate advent_of_code_2018;
+use advent_of_code_2018::*;
+
+use std::error::Error;
+use std::path::PathBuf;
+
+use std::collections::{HashSet, HashMap};
+
+// cargo watch -cs "cargo run --release --bin day_6"
+
+fn main() -> Result<(), Box<Error>> {
+ let input = read_file(&PathBuf::from("inputs/6.txt"))?;
+ let coordinates = input.iter().map(|line| {
+ let mut split = line.split(|c: char| !c.is_numeric());
+ let x: i32 = split.next().unwrap().parse().unwrap();
+ let _ = split.next();
+ let y: i32 = split.next().unwrap().parse().unwrap();
+ (x, y)
+ }).collect::<Vec<_>>();
+ debug!(coordinates);
+
+ let min_x = coordinates.iter().map(|(x, _)| x).min().unwrap().clone();
+ let max_x = coordinates.iter().map(|(x, _)| x).max().unwrap().clone();
+ let min_y = coordinates.iter().map(|(_, y)| y).min().unwrap().clone();
+ let max_y = coordinates.iter().map(|(_, y)| y).max().unwrap().clone();
+
+ debug!(min_x);
+ debug!(max_x);
+ debug!(min_y);
+ debug!(max_y);
+
+ let mut infinite = HashSet::new();
+ for x in min_x..max_x+1 {
+ for y in &[0, max_y] {
+ if let Some(coord) = find_closest(&coordinates, x, *y) {
+ infinite.insert(coord);
+ }
+ }
+ }
+ for y in min_y..max_y+1 {
+ for x in &[0, max_x] {
+ if let Some(coord) = find_closest(&coordinates, *x, y) {
+ infinite.insert(coord);
+ }
+ }
+ }
+
+ debug!(infinite);
+
+
+ let mut areas = HashMap::new();
+ for x in min_x..max_x+1 {
+ for y in min_y..max_y+1 {
+ if let Some(coord) = find_closest(&coordinates, x, y) {
+ *areas.entry(coord).or_insert(0) += 1;
+ }
+ }
+ }
+
+ debug!(areas);
+
+ let biggest_non_infinite = areas.iter()
+ .filter(|(k,_)| !infinite.contains(&k))
+ .max_by_key(|(_,v)| *v);
+ debug!(biggest_non_infinite);
+
+
+
+ let safe_distance = 10000;
+ let mut safe_size = 0;
+ for x in min_x..max_x+1 {
+ for y in min_y..max_y+1 {
+ let distance_sum: i32 = coordinates.iter()
+ .map(|(x1, y1)| manhattan_distance(*x1, *y1, x, y))
+ .sum();
+ if distance_sum < safe_distance {
+ safe_size += 1;
+ }
+ }
+ }
+ debug!(safe_size);
+
+ Ok(())
+}
+
+fn find_closest(coordinates: &Vec<(i32, i32)>, x: i32, y: i32) -> Option<usize> {
+ let mut distances = coordinates.iter()
+ .map(|(x1, y1)| manhattan_distance(*x1, *y1, x, y))
+ .enumerate()
+ .collect::<Vec<_>>();
+ distances.sort_by_key(|(_, d)| *d);
+
+ if distances[0] == distances[1] {
+ None
+ }
+ else {
+ distances.first().map(|(i, _)| *i)
+ }
+}
+
+fn manhattan_distance(x1: i32, y1: i32, x2: i32, y2: i32) -> i32 {
+ (x2-x1).abs() + (y2-y1).abs()
+}
diff --git a/2018/src/bin/day_7.rs b/2018/src/bin/day_7.rs
new file mode 100644
index 0000000..ec9d0be
--- /dev/null
+++ b/2018/src/bin/day_7.rs
@@ -0,0 +1,135 @@
+extern crate advent_of_code_2018;
+use advent_of_code_2018::*;
+
+use std::error::Error;
+use std::path::PathBuf;
+
+use std::collections::{HashMap, HashSet};
+
+// cargo watch -cs "cargo run --release --bin day_7"
+
+fn main() -> Result<(), Box<Error>> {
+ let input = read_file(&PathBuf::from("inputs/7.txt"))?;
+
+ //println!("Input: {:?}", input);
+
+ let (all_steps, blockers) = parse(&input);
+
+
+ let mut serial_ordered = Vec::new();
+ let mut remaining_steps = all_steps.clone();
+ let mut remaining_blockers = blockers.clone();
+
+ while !remaining_steps.is_empty() {
+ let mut unblocked: Vec<char> = remaining_steps.iter()
+ .filter(|c| remaining_blockers.get(c).map(|blockers| blockers.is_empty()).unwrap_or(true))
+ .cloned()
+ .collect();
+ unblocked.sort();
+
+ let next_step = unblocked.first().unwrap().clone();
+
+ serial_ordered.push(next_step);
+ remaining_steps.remove(&next_step);
+ for (_k, mut v) in &mut remaining_blockers {
+ v.retain(|c| *c != next_step);
+ }
+ }
+
+ debug!(serial_ordered);
+ for c in serial_ordered {
+ print!("{}", c);
+ }
+ println!();
+
+
+ let workers = 5;
+ let mut worker_tasks: Vec<Task> = Vec::new();
+ let mut parallel_ordered = Vec::new();
+ let mut remaining_steps = all_steps.clone();
+ let mut remaining_blockers = blockers.clone();
+ let mut current_time = 0;
+
+ while !remaining_steps.is_empty() {
+ let mut unblocked: Vec<char> = remaining_steps.iter()
+ .filter(|c|
+ remaining_blockers.get(c).map(|blockers| blockers.is_empty()).unwrap_or(true)
+ && !worker_tasks.iter().any(|w| w.t == **c)
+ )
+ .cloned()
+ .collect();
+ unblocked.sort();
+
+ let next_unblocked = if worker_tasks.len() < workers {
+ unblocked.first().cloned()
+ } else {
+ None
+ };
+
+ if let Some(next_task) = next_unblocked {
+ worker_tasks.push(Task {
+ t: next_task,
+ completion: current_time + time(next_task)
+ });
+ }
+ else {
+ //Advance time
+ worker_tasks.sort_by_key(|w| w.completion);
+ let complete = worker_tasks.swap_remove(0);
+ current_time = complete.completion;
+ let next_step = complete.t;
+
+ parallel_ordered.push(next_step);
+ remaining_steps.remove(&next_step);
+ for (_k, mut v) in &mut remaining_blockers {
+ v.retain(|c| *c != next_step);
+ }
+ }
+
+
+ }
+
+ debug!(parallel_ordered);
+ for c in parallel_ordered {
+ print!("{}", c);
+ }
+ println!();
+ debug!(current_time);
+
+
+ Ok(())
+}
+
+#[derive(Debug, Copy, Clone, PartialEq, Eq)]
+struct Task {
+ t: char,
+ completion: u32
+}
+
+
+fn parse(input: &Vec<String>) -> (HashSet<char>, HashMap<char, Vec<char>>) {
+ let mut blockers = HashMap::new();
+ let mut all_steps = HashSet::new();
+
+ for line in input {
+ //Step I must be finished before step C can begin.
+ let mut split = line.split_whitespace();
+ let blocker: char = split.nth(1).and_then(|x| x.chars().nth(0)).unwrap();
+ let blocked: char = split.nth(5).and_then(|x| x.chars().nth(0)).unwrap();
+
+ blockers.entry(blocked).or_insert(Vec::new()).push(blocker);
+ all_steps.insert(blocker);
+ all_steps.insert(blocked);
+ }
+
+ debug!(all_steps);
+ debug!(blockers);
+
+ (all_steps, blockers)
+}
+
+fn time(c: char) -> u32 {
+ let base_time = 60;
+ let char_time = c as u32 - 'A' as u32 + 1;
+ base_time + char_time
+}
diff --git a/2018/src/bin/day_8.rs b/2018/src/bin/day_8.rs
new file mode 100644
index 0000000..59813b0
--- /dev/null
+++ b/2018/src/bin/day_8.rs
@@ -0,0 +1,66 @@
+extern crate advent_of_code_2018;
+use advent_of_code_2018::*;
+
+use std::error::Error;
+use std::path::PathBuf;
+
+use std::slice::Iter;
+
+// cargo watch -cs "cargo run --release --bin day_8"
+
+fn main() -> Result<(), Box<Error>> {
+ let input: Vec<u32> = read_file(&PathBuf::from("inputs/8.txt"))
+ .map(|lines| lines[0]
+ .split_whitespace()
+ .map(|s| s.parse().unwrap())
+ .collect()
+ )?;
+
+ //println!("Input: {:?}", input);
+
+ let metadata_sum = sum_metadata(&mut input.iter());
+ debug!(metadata_sum);
+
+ let value = node_value(&mut input.iter());
+ debug!(value);
+
+ Ok(())
+}
+
+fn sum_metadata(iter: &mut Iter<'_, u32>) -> u32 {
+ let num_children = iter.next().unwrap().clone();
+ let num_metadata = iter.next().unwrap().clone();
+
+ let children_sum: u32 = (0..num_children)
+ .map(|_| sum_metadata(iter))
+ .sum();
+
+ let metadata_sum: u32 = (0..num_metadata)
+ .map(|_| iter.next().unwrap())
+ .sum();
+
+ children_sum + metadata_sum
+}
+
+
+fn node_value(iter: &mut Iter<'_, u32>) -> u32 {
+ let num_children = iter.next().unwrap().clone();
+ let num_metadata = iter.next().unwrap().clone();
+
+ let node_values: Vec<u32> = (0..num_children)
+ .map(|_| node_value(iter))
+ .collect();
+
+ let metadata: Vec<u32> = (0..num_metadata)
+ .map(|_| iter.next().unwrap().clone())
+ .collect();
+
+ if num_children == 0 {
+ metadata.iter().sum()
+ } else {
+ metadata.iter()
+ .filter(|m| **m > 0 && **m-1 < num_children)
+ .map(|m| node_values[*m as usize - 1])
+ .sum()
+ }
+}
diff --git a/2018/src/bin/day_9.rs b/2018/src/bin/day_9.rs
new file mode 100644
index 0000000..3f85620
--- /dev/null
+++ b/2018/src/bin/day_9.rs
@@ -0,0 +1,91 @@
+extern crate advent_of_code_2018;
+use advent_of_code_2018::*;
+
+use std::error::Error;
+
+use std::collections::LinkedList;
+
+// cargo watch -cs "cargo run --release --bin day_9"
+
+fn main() -> Result<(), Box<Error>> {
+ debug!(get_winning_player_score(438, 71626));
+ debug!(get_winning_player_score(438, 71626*100));
+
+ Ok(())
+}
+
+
+fn get_winning_player_score(players: usize, last_marble_score: u32) -> u32 {
+ let mut marbles_head = LinkedList::new();
+ let mut marbles_tail = LinkedList::new();
+ marbles_head.push_back(0);
+
+ let mut current_player = 0;
+ let mut next_marble = 1;
+ let mut scores = vec!(0; players);
+
+ while next_marble <= last_marble_score {
+ if next_marble % 23 == 0 {
+ move_backwards(&mut marbles_head, &mut marbles_tail, 7);
+ let removed = marbles_head.pop_back().expect("Going backwards should have ended with pushing to head");
+ move_forward(&mut marbles_head, &mut marbles_tail, 1);
+
+ let score = next_marble + removed;
+ scores[current_player] += score;
+ } else {
+ move_forward(&mut marbles_head, &mut marbles_tail, 1);
+ marbles_head.push_back(next_marble);
+ }
+
+ next_marble += 1;
+ current_player = (current_player + 1) % players;
+ }
+
+ scores.iter().max().unwrap().clone()
+}
+
+// WARNING: These don't play well with empty lists
+fn move_forward(marbles_head: &mut LinkedList<u32>, marbles_tail: &mut LinkedList<u32>, i: usize) {
+ if i != 0 {
+ match marbles_tail.pop_front() {
+ Some(marble) => {
+ marbles_head.push_back(marble);
+ move_forward(marbles_head, marbles_tail, i-1);
+ },
+ None => {
+ marbles_tail.append(marbles_head);
+ move_forward(marbles_head, marbles_tail, i);
+ },
+ }
+ }
+}
+
+fn move_backwards(marbles_head: &mut LinkedList<u32>, marbles_tail: &mut LinkedList<u32>, i: usize) {
+ if i != 0 {
+ match marbles_head.pop_back() {
+ Some(marble) => {
+ marbles_tail.push_front(marble);
+ move_backwards(marbles_head, marbles_tail, i-1);
+ },
+ None => {
+ marbles_head.append(marbles_tail);
+ move_backwards(marbles_head, marbles_tail, i);
+ },
+ }
+ }
+}
+
+
+#[test]
+fn trivial() {
+ assert_eq!(get_winning_player_score(9, 32), 32);
+}
+
+#[test]
+fn examples() {
+ assert_eq!(get_winning_player_score(10, 1618), 8317);
+ assert_eq!(get_winning_player_score(13, 7999), 146373);
+ assert_eq!(get_winning_player_score(17, 1104), 2764);
+ assert_eq!(get_winning_player_score(21, 6111), 54718);
+ assert_eq!(get_winning_player_score(30, 5807), 37305);
+}
diff --git a/2018/src/lib.rs b/2018/src/lib.rs
new file mode 100644
index 0000000..72520fe
--- /dev/null
+++ b/2018/src/lib.rs
@@ -0,0 +1,31 @@
+use std::path::PathBuf;
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+
+/// Reads a specified file into a vector of strings, one line of the
+/// file per string. Fails if any part of reading the file fails.
+pub fn read_file(file: &PathBuf) -> Result<Vec<String>, std::io::Error> {
+ let file = File::open(file)?;
+ let file_reader = BufReader::new(file);
+ file_reader.lines()
+ .collect::<Result<Vec<_>, _>>()
+ .map(preprocess_file_lines)
+}
+
+/// Removes any empty lines and makes sure that lines don't have
+/// problematic whitespace.
+pub fn preprocess_file_lines(lines: Vec<String>) -> Vec<String> {
+ lines.iter()
+ .filter(|line| line.len() > 0)
+ .map(|line| line.trim_right().to_string())
+ .collect()
+}
+
+
+#[macro_export]
+macro_rules! debug {
+ ( $x:expr ) => {
+ println!("{} = {:?}", stringify!($x), $x);
+ };
+}