diff options
70 files changed, 11292 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1e7caa9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +Cargo.lock +target/ diff --git a/d01/Cargo.toml b/d01/Cargo.toml new file mode 100644 index 0000000..0c0a29c --- /dev/null +++ b/d01/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "d01" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/d01/input.txt b/d01/input.txt new file mode 100644 index 0000000..2c9ac6a --- /dev/null +++ b/d01/input.txt @@ -0,0 +1 @@ +L2, L5, L5, R5, L2, L4, R1, R1, L4, R2, R1, L1, L4, R1, L4, L4, R5, R3, R1, L1, R1, L5, L1, R5, L4, R2, L5, L3, L3, R3, L3, R4, R4, L2, L5, R1, R2, L2, L1, R3, R4, L193, R3, L5, R45, L1, R4, R79, L5, L5, R5, R1, L4, R3, R3, L4, R185, L5, L3, L1, R5, L2, R1, R3, R2, L3, L4, L2, R2, L3, L2, L2, L3, L5, R3, R4, L5, R1, R2, L2, R4, R3, L4, L3, L1, R3, R2, R1, R1, L3, R4, L5, R2, R1, R3, L3, L2, L2, R2, R1, R2, R3, L3, L3, R4, L4, R4, R4, R4, L3, L1, L2, R5, R2, R2, R2, L4, L3, L4, R4, L5, L4, R2, L4, L4, R4, R1, R5, L2, L4, L5, L3, L2, L4, L4, R3, L3, L4, R1, L2, R3, L2, R1, R2, R5, L4, L2, L1, L3, R2, R3, L2, L1, L5, L2, L1, R4 diff --git a/d01/src/main.rs b/d01/src/main.rs new file mode 100644 index 0000000..3117a5a --- /dev/null +++ b/d01/src/main.rs @@ -0,0 +1,123 @@ +use std::fs; + +enum Heading { + North, + East, + South, + West, +} + +impl Heading { + fn turn_left(&mut self) { + *self = match *self { + Heading::North => Heading::West, + Heading::East => Heading::North, + Heading::South => Heading::East, + Heading::West => Heading::South, + }; + } + + fn turn_right(&mut self) { + *self = match *self { + Heading::North => Heading::East, + Heading::East => Heading::South, + Heading::South => Heading::West, + Heading::West => Heading::North, + }; + } +} + +fn get_route(input: &str) -> Vec<(isize, isize)> { + let steps: Vec<&str> = input.trim().split(", ").collect(); + + let mut pos = (0, 0); + let mut route = vec![pos]; + + let mut facing = Heading::North; + for s in steps { + // Read which way to turn + if s.starts_with("L") { + facing.turn_left(); + } else if s.starts_with("R") { + facing.turn_right(); + } + + // Read how far to go in the new direction + let dist: usize = s[1..].parse().unwrap(); + + // Add each 1-block step to `route' so that part 2 can be solved + for _i in 0..dist { + pos = match facing { + Heading::North => (pos.0 + 1, pos.1), + Heading::East => (pos.0, pos.1 + 1), + Heading::South => (pos.0 - 1, pos.1), + Heading::West => (pos.0, pos.1 - 1), + }; + route.push(pos); + } + } + + route +} + +fn solve_part1(input: &str) -> isize { + let route = get_route(input); + let ended = route.last().unwrap(); + + // Manhattan distance from origin to `ended' position + ended.0.abs() + ended.1.abs() +} + +fn solve_part2(input: &str) -> Option<isize> { + let route = get_route(input); + + for i in 1..route.len() { + let pos = route[i - 1]; + if route[i..].contains(&pos) { + // Manhattan distance to first twice-visited position + return Some(pos.0.abs() + pos.1.abs()); + } + } + + None +} + +fn main() { + // Read instructions from input text file + let input = fs::read_to_string("input.txt").unwrap(); + + // Part 1 gives 181 for me + println!("Part 1 solution: {}", solve_part1(&input)); + + // Part 2 gives 140 for me + println!("Part 2 solution: {}", solve_part2(&input).unwrap()); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn part1_example1() { + let input = "R2, L3"; + assert_eq!(solve_part1(input), 5); + } + + #[test] + fn part1_example2() { + let input = "R2, R2, R2"; + assert_eq!(solve_part1(input), 2); + } + + #[test] + fn part1_example3() { + let input = "R5, L5, R5, R3"; + assert_eq!(solve_part1(input), 12); + } + + #[test] + fn part2_example1() { + let input = "R8, R4, R4, R8"; + assert_eq!(solve_part2(input).unwrap(), 4); + } +} diff --git a/d02/Cargo.toml b/d02/Cargo.toml new file mode 100644 index 0000000..47add02 --- /dev/null +++ b/d02/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "d02" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/d02/input.txt b/d02/input.txt new file mode 100644 index 0000000..ba5a73d --- /dev/null +++ b/d02/input.txt @@ -0,0 +1,5 @@ +RUDULRLLUULRURDDRRUDURULLLDRLRLUDDLUDUDDUDRRDUDULDUUULLRULLRLDDLDLDDRLRRRRUDLLDDUULDRLLUDDRRUURLULRRRDLLURRUUDURUDDURLUDDDLUDDUUDUURUDLRDRDRLRDRLDRUDRUUDLRDDRRURDDLRDDRRURDUDDLULLUDRURURRRLRRUDUULULULRRLDLUDUURRLLRUDLLDRDDLRRRULRUDLULDDLLLULDLRUDLLLLRDDLRDRLDRLLRDRRDLRDULULRLLLDRUDRRRUULRUULDRURLUDRURRDLLDLRDLDDDDRRLUDLRRLUUUURDRDDLRRURURRDUULLRLURLURUDDDRDURDUUDRLRLRRLDDLDLDLDDDUDDULURLDDLLRLRRDULUDDLULRLUDDLDLRULUUUDRLDRUDURLUDDRLLRUULDLRRRRDLLLLURULLRDRRUDLUULRRDLLRLRLUDLDDULLDLLRDLDLL +LLUUUUUUDUDRLRDRDLDURRRLLRRLRURLLUURRLLUDUDLULUURUUURDLUDLDDLULLRDLRUULDLRDUDURLLDDUDUDULLUDDUULLLUULRRRLULRURRDLRUDUDDURRRDRUURDURLLULLRULLDRUULLURLDRDUUDDDDDDRRLDRLRRRLULDDUURRLLLLDRURLURDRDRDURUDUURRDUDUDRLLUUDDRLUDDDRDLDLRLDRURRDLLRULDRLLURURRLUULLRLRRURDDRDRUUURUURUUUDLLRRLUDRLDLRLURLDLUDDUDDDLDUDRRLDLRURULRLLRDUULURRRULDLLLRLDDDUURRRRDULLRURRLULULDLRRUDUDDLRUURDLDUDDUDRRDLRRRDUDUUUDLLDDDDLURLURRRUUULLLULRRLLLLLLULDUUDLRUDRRDLRDUUDUDLLRLDLLRUURDUUURUUUDDLLUUDLULDURLULULUUUDRUDULLURRULRULLRDLDDU +RLUUURULLDLRLDUDRDURRDUURLLUDDDUULRRRLRLURDDRUULUDULDUUDDDDUDDDDRUDDLDUUDRUDLRRRLLRDDLLLRLLRUULRUULDDRURRLURRLRLULDDRRRDDURDDRDRDULRUDRUUDULRLLULDLRLLDRULRDDRRDDUDLRLLUDRDRRRLUDULRDLRDDURRUUDDRRUDURRUUUDDRRDUDURLUUDUDUURDDDLURLULLUULULURUDUUDRUDULLUUULURDLDUULLDDLLDULRLRLRDUUURUUDLRLDURUDRLDULLUDLDLLRDUURRDUDURLUUUDLLRRULRLULRLDLLURDURRULRLLRRDUDLLRDRRRRDLUUDRUUUDDLRLUDDDDDDRURRRUUURRDLLRURLDDLLDLRRLLLDRRULRRUDLDRDDRRLULURLLUURURURRRRUUUUURUDURLRLLLULULDLLDLRDRRULUDUDRDRRDRDRRDUDLLLRUDRUDDDULRULRRRDRLRUUUURUDURDUUULLULRUDDULDUUDLDURRD +ULRULDDLDLULLLRRRLRUDDDDDLLDDUDLRRDULUUDRDLRRURDRRLUULRURUDRRULDLLLUDRUUDULULUDDRUDDDRDURRRDRDUUURLRDULUDRDRLDRUDDLLLDRRULUDLUDLDLLRRUDUULULDLDLLUURDLDDLLUUDURLURLLLDRDLDRRLRULUURRDRULRUUURULRRUDDDDLLDLDDLLRRLRRRRDUUDUDLDRDRRURDLRURULDLRDLLLLRUDRLLRDLRLRDURDRUDURRRLRDRDLLRLUDDDDRLRLLDUURRURLUURUULUDLUURDRRUDDLUDUDDDURRDRUDRLRULDULUUUUUUDDUDRUDUUURUDRRDLUDLUUDUULUDURDLDDDLLURRURUUDUDDRRDRLLULULDRLRURRDDDRDUUURDDDRULUDRDDLDURRLDDDLRRRLDDRDURULDLUDLLLURLURRLRRULDLLDDUDRRULDRRRRLURRUULRRRUDLURDLLDLLDULUUDRRLDLLLDRLRUDLUULDLDRUDUDURDRUDRDDDLRLULLUR +LRLUUURRLRRRRRUURRLLULRLULLDLUDLUDRDDRLDLRLULLURDURLURDLLRLDUUDDURRRRLDLLRULLRLDLLUUDRLDDLLDRULDRLLRURDLRURRUDLULLRURDLURRURUDULLDRLLUUULUDRURRUUDUDULUUULRLDDULDRDLUDDUDDDLRURULLDLLLRLLUURDLRUDLLLLDLLRLRUUUDDRUUUUDLDLRDDURLDURUULLLUUDLLLLDULRRRLLDLDRRDRLUDRUDURLLUDLRLLUDUDRDDDRDLRDLRULUULDRLUDLRLDUURLRRLUDDDUUDDDUDRLDLDUDLURUULLDDDURUUULRLUDLDURUUDRDRURUDDUURDUUUDLLDLDLDURUURLLLLRURUURURULRULLRUDLRRUUUUUDRRLLRDDUURDRDRDDDUDRLURDRRRUDLLLDURDLUUDLLUDDULUUDLDUUULLDRDLRURUURRDURRDLURRRRLLUUULRDULDDLDUURRDLDLLULRRLLUDLDUDLUUL diff --git a/d02/src/main.rs b/d02/src/main.rs new file mode 100644 index 0000000..33c7ec0 --- /dev/null +++ b/d02/src/main.rs @@ -0,0 +1,86 @@ +use std::fs; + +fn solve_part1(lines: &Vec<&str>) -> String { + let mut result = String::new(); + + let mut num = 5; + for line in lines { + for c in line.chars() { + num = match c { + 'U' => if num - 3 > 0 { num - 3 } else { num }, + 'D' => if num + 3 < 10 { num + 3 } else { num }, + 'L' => if num % 3 != 1 { num - 1 } else { num }, + 'R' => if num % 3 != 0 { num + 1 } else { num }, + _ => num, // shouldn't happen + } + } + result.push_str(&num.to_string()); + } + + result +} + +fn solve_part2(lines: &Vec<&str>) -> String { + let mut result = String::new(); + + // Part 2's keypad is a bit more exotic + let keypad = [ + [0, 0, 1, 0, 0], + [0, 2, 3, 4, 0], + [5, 6, 7, 8, 9], + [0, 10, 11, 12, 0], + [0, 0, 13, 0, 0], + ]; + let mut pos = (2, 0); // (row, col) index + + for line in lines { + for c in line.chars() { + let mut new = pos; + match c { + 'U' => new.0 = if pos.0 > 0 { pos.0 - 1 } else { pos.0 }, + 'D' => new.0 = if pos.0 < 4 { pos.0 + 1 } else { pos.0 }, + 'L' => new.1 = if pos.1 > 0 { pos.1 - 1 } else { pos.1 }, + 'R' => new.1 = if pos.1 < 4 { pos.1 + 1 } else { pos.1 }, + _ => {}, // shouldn't happen + }; + // Ignore this `c' if it would take us off the diamond's edge + if keypad[new.0][new.1] != 0 { + pos = new; + } + } + + // Print as hexadecimal to follow puzzle description + result.push_str(&format!("{:X}", keypad[pos.0][pos.1])); + } + + result +} + +fn main() { + // Read directions from input text file + let input = fs::read_to_string("input.txt").unwrap(); + let lines = input.lines().collect(); + + // Part 1 gives 74921 for me + println!("Part 1 solution: {}", solve_part1(&lines)); + + // Part 2 gives A6B35 for me + println!("Part 2 solution: {}", solve_part2(&lines)); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn part1_example1() { + let lines = vec!["ULL", "RRDDD", "LURDL", "UUUUD"]; + assert_eq!(solve_part1(&lines), "1985"); + } + + #[test] + fn part2_example1() { + let lines = vec!["ULL", "RRDDD", "LURDL", "UUUUD"]; + assert_eq!(solve_part2(&lines), "5DB3"); + } +} diff --git a/d03/Cargo.toml b/d03/Cargo.toml new file mode 100644 index 0000000..5bff35d --- /dev/null +++ b/d03/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "d03" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/d03/input.txt b/d03/input.txt new file mode 100644 index 0000000..b8e5272 --- /dev/null +++ b/d03/input.txt @@ -0,0 +1,1911 @@ + 541 588 421 + 827 272 126 + 660 514 367 + 39 703 839 + 229 871 3 + 237 956 841 + 898 566 112 + 101 79 112 + 813 541 146 + 603 135 565 + 335 363 180 + 382 493 669 + 545 81 843 + 657 960 849 + 823 909 9 + 370 194 908 + 101 750 317 + 295 671 968 + 656 431 64 + 634 291 245 + 819 663 266 + 504 662 829 + 760 590 918 + 733 859 258 + 197 651 137 + 357 799 638 + 544 250 597 + 604 654 431 + 90 870 184 + 609 535 604 + 313 777 650 + 421 320 741 + 278 967 430 + 299 722 23 + 362 949 973 + 353 258 989 + 992 607 461 + 850 264 490 + 251 351 569 + 810 320 116 + 959 335 611 + 450 242 624 + 849 26 376 + 419 42 222 + 995 14 291 + 711 174 615 + 17 982 961 + 722 895 941 + 920 161 480 + 905 246 531 + 794 190 144 + 317 318 633 + 145 233 150 + 445 534 519 + 935 592 863 + 784 260 844 + 255 704 570 + 521 57 61 + 490 149 110 + 163 144 142 + 771 289 60 + 914 233 541 + 271 93 542 + 411 640 812 + 370 968 65 + 61 960 781 + 333 79 421 + 269 190 428 + 477 225 96 + 610 641 265 + 650 135 461 + 145 759 380 + 758 451 682 + 524 125 861 + 760 555 251 + 360 219 567 + 456 285 726 + 510 98 927 + 886 336 228 + 356 916 323 + 685 974 165 + 253 532 207 + 868 990 548 + 811 803 525 + 205 624 894 + 707 512 328 + 835 288 657 + 496 776 413 + 484 185 10 + 33 832 403 + 896 678 789 + 745 595 773 + 287 201 669 + 150 189 513 + 884 42 131 + 934 214 407 + 239 819 149 + 145 582 334 + 375 307 467 + 680 59 850 + 873 441 973 + 243 393 256 + 509 237 265 + 302 550 334 + 728 524 291 + 130 986 333 + 60 926 390 + 133 653 692 + 428 755 491 + 24 476 659 + 446 290 823 + 906 703 410 + 950 183 391 + 199 735 250 + 734 908 254 + 635 373 34 + 489 567 275 + 587 746 463 + 512 508 367 + 104 971 568 + 647 857 191 + 605 20 775 + 118 853 634 + 432 559 322 + 887 433 134 + 660 332 336 + 669 711 952 + 762 713 610 + 108 972 860 + 732 743 562 + 877 277 758 + 225 590 380 + 708 35 424 + 989 425 439 + 279 413 818 + 107 422 634 + 775 833 667 + 755 755 279 + 694 293 6 + 156 75 649 + 820 303 651 + 448 934 587 + 25 830 788 + 473 192 932 + 734 126 535 + 940 215 513 + 935 126 656 + 428 905 789 + 760 742 772 + 510 523 633 + 994 808 110 + 93 740 100 + 943 80 198 + 329 888 532 + 50 763 337 + 320 673 741 + 722 52 639 + 18 130 566 + 733 130 921 + 280 586 642 + 450 222 350 + 178 427 325 + 317 685 261 + 744 261 105 + 621 809 326 + 740 532 605 + 855 690 526 + 441 301 185 + 783 309 196 + 525 272 334 + 502 58 432 + 980 150 121 + 891 9 800 + 286 143 705 + 985 846 850 + 362 696 70 + 807 194 900 + 912 193 448 + 405 148 461 + 677 261 30 + 121 406 308 + 34 206 451 + 109 473 312 + 46 726 695 + 793 847 25 + 834 160 708 + 372 849 375 + 744 799 423 + 631 478 715 + 346 82 545 + 541 184 95 + 492 228 588 + 542 635 43 + 75 347 439 + 612 321 431 + 719 526 847 + 158 270 338 + 813 482 560 + 817 253 402 + 899 630 887 + 198 456 730 + 235 286 344 + 125 646 398 + 204 375 401 + 80 289 308 + 295 664 862 + 284 382 565 + 816 130 651 + 947 596 383 + 131 611 723 + 617 471 549 + 663 282 697 + 475 219 901 + 535 829 434 + 542 502 544 + 23 649 110 + 733 691 820 + 684 21 821 + 740 689 1 + 224 249 280 + 485 776 350 + 682 971 182 + 465 12 610 + 294 296 13 + 606 297 594 + 337 104 3 + 154 257 343 + 352 171 349 + 322 466 973 + 189 173 854 + 484 338 714 + 194 194 551 + 188 741 162 + 14 696 663 + 219 868 33 + 224 4 446 + 218 865 411 + 392 536 574 + 616 692 482 + 746 592 94 + 230 72 663 + 291 487 99 + 326 482 669 + 131 265 155 + 61 422 609 + 80 552 641 + 509 334 851 + 475 211 911 + 193 274 737 + 128 15 973 + 381 31 255 + 413 21 812 + 778 461 3 + 514 307 697 + 329 353 695 + 48 90 212 + 856 354 294 + 863 265 360 + 496 918 264 + 377 889 164 + 603 164 418 + 159 701 199 + 283 503 186 + 127 658 54 + 938 226 855 + 189 533 465 + 924 365 906 + 322 422 291 + 943 713 238 + 714 508 138 + 612 328 49 + 962 877 685 + 849 963 732 + 154 278 428 + 49 624 476 + 111 518 753 + 284 330 216 + 716 689 290 + 667 369 127 + 719 728 175 + 543 493 139 + 759 408 286 + 915 970 827 + 482 289 787 + 713 860 621 + 836 286 729 + 921 447 223 + 665 655 706 + 692 579 316 + 772 679 289 + 972 394 84 + 221 675 877 + 272 336 864 + 439 684 69 + 780 721 503 + 225 587 125 + 802 945 408 + 280 237 682 + 406 281 745 + 176 60 71 + 450 720 335 + 656 293 383 + 324 694 454 + 547 57 51 + 415 965 657 + 311 936 687 + 989 878 585 + 156 72 165 + 938 823 574 + 626 968 146 + 823 896 588 + 294 236 597 + 177 294 177 + 287 351 480 + 133 252 649 + 706 319 175 + 34 418 960 + 722 583 906 + 711 379 674 + 529 574 882 + 546 868 781 + 577 875 687 + 881 844 503 + 926 247 190 + 621 535 356 + 294 105 257 + 601 640 579 + 573 142 519 + 978 900 427 + 693 823 350 + 275 362 683 + 137 291 741 + 258 130 517 + 838 686 12 + 59 800 869 + 790 188 881 + 997 324 278 + 582 338 887 + 900 23 712 + 288 619 402 + 480 168 596 + 292 505 505 + 993 30 982 + 636 335 892 + 813 363 175 + 230 248 620 + 450 668 896 + 460 736 874 + 331 800 837 + 844 805 734 + 620 54 708 + 726 820 592 + 126 20 394 + 728 820 219 + 229 27 32 + 164 569 939 + 290 559 949 + 325 360 794 + 342 356 529 + 203 627 691 + 60 932 544 + 767 865 563 + 770 316 525 + 99 756 674 + 165 783 180 + 72 27 846 + 973 419 905 + 104 364 294 + 896 271 613 + 294 222 416 + 414 609 858 + 481 429 478 + 308 544 615 + 624 139 560 + 574 626 840 + 998 338 328 + 403 739 211 + 625 472 120 + 808 190 64 + 5 202 558 + 800 42 607 + 874 801 675 + 27 275 735 + 898 927 280 + 366 794 526 + 233 529 13 + 314 744 525 + 842 530 617 + 704 461 406 + 281 946 841 + 389 113 678 + 545 652 410 + 851 754 339 + 14 56 706 + 623 131 738 + 636 127 931 + 857 404 199 + 682 25 387 + 574 406 435 + 508 528 307 + 574 531 575 + 223 433 827 + 80 811 486 + 710 642 904 + 749 903 795 + 920 205 60 + 904 286 108 + 96 428 120 + 631 364 307 + 599 169 180 + 743 491 302 + 133 939 980 + 559 879 883 + 642 605 918 + 935 868 810 + 539 860 357 + 584 643 972 + 831 562 800 + 211 561 108 + 953 928 802 + 730 611 73 + 483 373 139 + 245 374 210 + 493 582 77 + 671 422 887 + 568 458 930 + 727 462 467 + 663 603 657 + 113 490 966 + 95 26 415 + 74 84 463 + 117 78 276 + 81 814 741 + 407 852 36 + 348 39 748 + 144 43 826 + 915 174 218 + 775 148 820 + 388 305 131 + 458 135 195 + 142 199 96 + 79 223 625 + 338 47 879 + 295 217 575 + 790 72 723 + 713 736 711 + 366 769 330 + 302 642 718 + 603 526 956 + 450 181 663 + 176 638 433 + 902 801 408 + 750 545 97 + 398 366 271 + 490 186 474 + 801 290 324 + 964 652 190 + 937 593 344 + 112 888 373 + 940 377 623 + 668 693 367 + 623 889 870 + 231 714 220 + 694 535 837 + 701 178 674 + 620 887 23 + 603 133 576 + 224 983 601 + 3 103 234 + 867 232 33 + 869 235 233 + 448 909 262 + 247 941 265 + 464 909 4 + 30 224 22 + 154 99 764 + 146 187 786 + 789 347 512 + 474 166 775 + 583 253 359 + 517 531 274 + 154 414 735 + 397 436 997 + 864 822 104 + 712 303 243 + 310 652 217 + 915 772 521 + 25 780 616 + 927 266 233 + 899 327 372 + 796 897 343 + 741 794 508 + 533 554 586 + 470 656 176 + 159 863 749 + 680 644 839 + 784 768 143 + 152 451 939 + 125 366 67 + 779 902 437 + 657 749 452 + 325 759 722 + 576 562 249 + 776 467 790 + 776 580 296 + 705 264 84 + 522 526 220 + 879 278 392 + 712 426 442 + 288 589 363 + 74 23 960 + 203 873 22 + 170 857 952 + 155 46 56 + 840 855 211 + 740 816 188 + 644 272 737 + 623 362 311 + 309 416 848 + 895 807 900 + 196 790 127 + 871 912 916 + 569 966 180 + 461 223 854 + 805 754 886 + 828 353 453 + 263 697 656 + 595 541 418 + 235 302 908 + 883 446 723 + 996 745 204 + 457 813 925 + 674 271 977 + 463 769 97 + 668 535 957 + 609 720 417 + 889 987 722 + 649 852 317 + 450 69 383 + 499 915 226 + 430 185 435 + 475 840 992 + 775 992 695 + 334 725 933 + 642 273 908 + 682 693 55 + 14 532 444 + 63 192 736 + 51 362 930 + 306 301 474 + 448 330 373 + 691 115 425 + 431 321 623 + 265 881 504 + 591 726 138 + 58 930 870 + 540 954 120 + 496 157 772 + 116 376 817 + 943 249 828 + 945 384 518 + 777 573 897 + 769 254 676 + 290 691 734 + 845 818 135 + 860 802 75 + 956 267 157 + 964 92 268 + 631 126 262 + 571 59 14 + 45 226 368 + 144 878 306 + 166 940 581 + 803 30 24 + 40 408 268 + 782 423 267 + 511 251 426 + 680 962 467 + 919 817 103 + 558 609 789 + 619 7 544 + 122 611 384 + 503 449 80 + 373 982 264 + 355 559 207 + 911 801 105 + 382 889 894 + 762 707 989 + 754 83 383 + 890 198 327 + 189 185 492 + 844 820 374 + 602 375 81 + 399 871 374 + 576 446 620 + 696 249 930 + 203 510 741 + 485 264 79 + 485 310 443 + 163 340 469 + 187 15 873 + 309 506 141 + 319 508 753 + 202 457 500 + 560 614 177 + 377 909 534 + 84 32 898 + 261 761 825 + 207 763 85 + 649 544 761 + 874 639 578 + 760 555 435 + 738 108 970 + 711 458 986 + 31 529 83 + 98 374 182 + 344 620 186 + 421 340 29 + 490 860 153 + 97 793 609 + 412 70 510 + 855 542 805 + 753 320 429 + 130 245 621 + 173 309 23 + 741 513 716 + 588 632 728 + 53 928 543 + 429 868 480 + 455 90 465 + 673 302 632 + 238 255 483 + 455 49 181 + 325 935 570 + 631 118 140 + 579 987 515 + 385 485 576 + 466 497 16 + 85 57 595 + 967 801 619 + 792 543 386 + 842 480 332 + 861 688 780 + 88 209 741 + 784 542 396 + 696 800 232 + 434 969 747 + 709 342 679 + 698 892 147 + 526 474 726 + 491 707 679 + 241 197 440 + 799 371 452 + 832 425 98 + 249 288 669 + 657 909 768 + 657 930 957 + 751 211 846 + 2 642 844 + 748 718 11 + 694 764 366 + 332 231 268 + 580 593 459 + 921 656 751 + 171 757 815 + 828 555 167 + 38 409 765 + 244 455 834 + 251 121 421 + 659 271 526 + 401 470 326 + 354 241 846 + 145 732 473 + 53 261 972 + 192 594 511 + 480 337 383 + 68 182 937 + 472 478 653 + 84 346 471 + 707 458 137 + 710 483 366 + 954 52 537 + 871 116 778 + 670 104 912 + 989 639 346 + 139 444 640 + 876 497 599 + 313 8 980 + 211 896 163 + 127 894 850 + 504 230 28 + 385 710 79 + 602 553 90 + 981 628 560 + 653 532 914 + 452 275 432 + 251 486 366 + 521 257 539 + 385 255 892 + 552 405 361 + 220 223 576 + 608 368 309 + 287 92 647 + 33 346 483 + 271 397 213 + 834 8 851 + 450 129 51 + 477 139 847 + 652 619 430 + 525 117 446 + 505 656 250 + 387 34 263 + 288 651 381 + 450 665 145 + 704 612 710 + 875 974 543 + 887 419 378 + 328 768 521 + 249 30 936 + 318 762 906 + 807 242 71 + 794 413 374 + 100 200 330 + 317 65 889 + 268 175 870 + 69 215 691 + 487 484 583 + 368 497 505 + 402 64 263 + 290 420 846 + 552 525 839 + 300 497 485 + 371 144 551 + 590 391 504 + 790 519 261 + 533 533 519 + 997 537 453 + 869 26 534 + 179 787 612 + 470 6 559 + 407 781 138 + 239 498 490 + 390 291 976 + 604 227 556 + 78 937 610 + 513 171 447 + 528 874 853 + 308 925 92 + 113 114 109 + 286 820 150 + 68 64 664 + 29 952 167 + 86 988 736 + 530 285 93 + 533 829 394 + 654 917 322 + 79 802 748 + 79 226 476 + 63 681 810 + 699 249 37 + 970 116 99 + 332 355 71 + 821 366 189 + 653 531 751 + 577 791 917 + 841 104 877 + 717 993 919 + 342 969 58 + 469 458 501 + 190 446 208 + 511 151 600 + 635 875 369 + 443 580 620 + 235 761 902 + 170 707 130 + 404 586 241 + 270 920 319 + 280 340 126 + 226 357 857 + 432 401 816 + 122 962 518 + 903 139 38 + 886 928 553 + 884 636 522 + 139 696 787 + 936 455 611 + 935 238 617 + 879 265 631 + 162 490 358 + 447 520 570 + 283 118 375 + 432 411 768 + 468 110 89 + 642 116 624 + 299 8 687 + 426 802 789 + 428 846 419 + 21 750 486 + 306 251 164 + 824 54 144 + 625 273 242 + 625 507 776 + 618 429 200 + 7 81 763 + 167 288 97 + 60 239 173 + 223 370 259 + 719 160 934 + 895 833 51 + 961 693 984 + 240 940 566 + 240 869 930 + 171 457 848 + 105 693 480 + 807 288 493 + 839 883 538 + 18 659 905 + 883 665 543 + 904 746 659 + 225 119 529 + 523 104 507 + 447 57 109 + 642 234 709 + 319 554 656 + 849 437 597 + 648 645 614 + 482 447 953 + 891 321 883 + 432 423 391 + 295 684 242 + 214 303 540 + 562 256 130 + 784 369 960 + 414 510 954 + 395 508 442 + 790 536 212 + 764 463 384 + 515 37 205 + 857 840 421 + 778 876 558 + 594 698 882 + 274 425 847 + 463 766 592 + 825 456 751 + 42 530 818 + 800 812 238 + 795 832 365 + 879 814 318 + 102 763 445 + 916 349 731 + 165 838 485 + 757 973 270 + 520 501 512 + 682 157 411 + 326 563 238 + 881 173 303 + 776 160 358 + 810 284 156 + 169 981 827 + 132 886 635 + 109 223 359 + 785 28 287 + 2 855 288 + 782 854 23 + 824 452 743 + 425 79 768 + 839 380 810 + 859 212 356 + 545 250 389 + 341 270 90 + 271 31 500 + 958 38 718 + 890 7 642 + 437 869 750 + 267 488 241 + 481 517 781 + 898 751 423 + 363 244 7 + 938 960 415 + 714 297 426 + 821 370 697 + 454 77 498 + 290 171 296 + 257 509 698 + 504 455 525 + 619 771 981 + 502 179 779 + 554 746 322 + 554 203 273 + 576 557 27 + 560 474 284 + 76 85 88 + 366 418 956 + 426 487 928 + 468 783 402 + 547 167 678 + 206 627 728 + 467 191 185 + 621 856 989 + 618 794 862 + 183 667 714 + 582 707 993 + 558 38 366 + 324 111 131 + 939 660 600 + 863 576 550 + 761 410 470 + 414 273 362 + 411 148 179 + 532 795 514 + 299 214 719 + 296 871 522 + 557 895 97 + 489 873 782 + 398 81 760 + 493 75 328 + 832 502 96 + 482 505 247 + 378 667 38 + 463 434 78 + 190 789 78 + 798 510 131 + 855 502 824 + 698 775 920 + 685 930 693 + 920 723 923 + 911 303 901 + 668 574 538 + 8 832 573 + 670 629 626 + 248 686 96 + 434 131 743 + 456 716 679 + 294 807 107 + 533 284 167 + 765 615 130 + 958 870 257 + 910 169 662 + 304 829 425 + 600 235 796 + 411 788 121 + 243 840 791 + 576 707 927 + 613 307 633 + 58 888 639 + 634 707 253 + 589 371 730 + 193 956 813 + 733 551 197 + 155 973 175 + 763 477 200 + 102 984 83 + 207 427 487 + 135 868 546 + 375 596 389 + 329 405 299 + 496 691 230 + 266 975 261 + 295 834 423 + 80 140 572 + 844 660 625 + 772 44 369 + 171 642 782 + 352 889 273 + 788 228 588 + 737 852 753 + 599 322 664 + 545 296 545 + 445 137 454 + 218 69 171 + 234 928 681 + 67 991 829 + 166 131 174 + 442 11 769 + 324 133 795 + 736 757 408 + 49 177 439 + 719 923 31 + 497 953 502 + 664 684 447 + 173 497 278 + 954 888 913 + 764 118 107 + 601 850 972 + 466 61 19 + 969 499 418 + 686 460 404 + 327 329 165 + 596 726 139 + 811 596 75 + 185 331 327 + 216 409 168 + 160 196 483 + 264 533 1 + 227 495 151 + 226 708 155 + 580 345 615 + 586 900 862 + 16 699 871 + 38 594 382 + 760 684 141 + 770 455 511 + 286 821 117 + 582 919 393 + 433 979 346 + 75 939 949 + 102 899 631 + 98 305 567 + 349 636 399 + 627 981 520 + 948 639 181 + 753 150 521 + 776 563 328 + 89 613 658 + 552 747 504 + 131 449 276 + 429 824 391 + 283 542 472 + 731 199 435 + 456 707 160 + 675 243 107 + 547 911 854 + 170 849 912 + 497 869 377 + 475 951 392 + 458 273 24 + 140 109 311 + 38 276 388 + 151 274 515 + 100 704 858 + 811 362 42 + 745 777 817 + 740 497 81 + 424 270 266 + 375 714 277 + 602 668 923 + 33 492 225 + 603 953 772 + 244 65 920 + 247 659 29 + 380 651 916 + 674 529 388 + 656 624 288 + 53 112 270 + 653 385 841 + 736 945 725 + 474 883 204 + 995 21 127 + 264 886 337 + 873 870 237 + 275 42 834 + 188 202 872 + 232 234 490 + 688 384 29 + 713 174 281 + 90 533 299 + 365 437 364 + 345 940 484 + 572 829 274 + 556 319 28 + 310 736 27 + 758 729 19 + 919 993 823 + 942 949 411 + 520 610 663 + 376 24 997 + 876 668 790 + 762 682 677 + 530 224 905 + 480 624 428 + 127 796 916 + 777 114 158 + 38 824 844 + 771 821 741 + 870 738 438 + 615 13 677 + 856 751 710 + 68 89 515 + 827 390 728 + 889 356 930 + 741 935 128 + 858 515 386 + 641 922 307 + 714 383 434 + 381 638 194 + 710 290 388 + 601 658 846 + 610 559 781 + 10 439 810 + 114 699 864 + 848 860 733 + 949 736 155 + 454 185 588 + 188 877 350 + 597 820 593 + 240 725 614 + 22 553 516 + 239 428 318 + 707 173 296 + 649 766 51 + 557 760 313 + 913 62 485 + 362 24 684 + 805 55 212 + 610 397 255 + 331 680 376 + 733 339 525 + 777 7 686 + 879 920 684 + 495 926 25 + 175 533 818 + 678 810 343 + 690 823 682 + 52 185 180 + 245 228 826 + 299 102 977 + 904 227 871 + 867 20 889 + 666 220 171 + 696 805 515 + 380 681 837 + 738 243 339 + 576 513 714 + 898 609 914 + 732 403 842 + 65 29 417 + 635 604 578 + 588 610 339 + 123 147 654 + 65 80 660 + 113 123 70 + 530 767 183 + 154 253 34 + 377 994 217 + 991 771 825 + 557 595 223 + 839 175 698 + 680 414 626 + 57 876 930 + 675 735 408 + 674 747 543 + 547 749 929 + 161 36 383 + 286 951 733 + 453 923 535 + 480 575 661 + 643 402 847 + 630 953 624 + 21 888 632 + 136 814 335 + 833 441 246 + 937 388 147 + 613 604 255 + 668 625 410 + 196 660 255 + 117 333 779 + 884 780 853 + 912 919 303 + 72 632 889 + 929 27 933 + 858 630 181 + 647 439 851 + 543 205 795 + 270 431 312 + 514 300 234 + 455 290 594 + 415 38 755 + 392 749 796 + 760 749 105 + 368 10 783 + 844 620 117 + 514 323 208 + 359 499 126 + 641 9 263 + 636 233 362 + 61 245 109 + 665 493 989 + 494 711 865 + 195 534 431 + 200 651 721 + 42 832 577 + 178 262 431 + 912 555 708 + 891 524 503 + 326 978 344 + 984 371 44 + 678 443 935 + 655 654 905 + 384 602 298 + 828 716 458 + 734 243 645 + 200 588 627 + 434 319 449 + 541 648 208 + 618 393 505 + 49 51 527 + 651 431 27 + 794 116 242 + 454 99 190 + 614 169 369 + 635 347 837 + 533 718 55 + 127 859 890 + 809 535 303 + 922 487 246 + 199 619 78 + 124 599 113 + 951 248 547 + 853 792 528 + 639 270 510 + 704 256 49 + 192 143 521 + 821 5 339 + 14 299 920 + 827 296 810 + 396 630 54 + 409 319 535 + 582 850 483 + 748 125 175 + 876 51 329 + 536 141 309 + 944 357 396 + 807 390 188 + 889 577 474 + 778 295 217 + 752 299 217 + 45 424 155 + 506 283 758 + 239 427 742 + 740 162 16 + 103 466 204 + 656 718 395 + 711 370 556 + 915 240 466 + 381 152 564 + 698 136 118 + 801 989 979 + 404 20 740 + 920 980 503 + 426 449 642 + 345 396 63 + 314 52 601 + 908 910 453 + 639 943 749 + 886 903 652 + 505 623 394 + 564 131 304 + 250 542 119 + 470 353 683 + 207 558 664 + 587 282 129 + 368 850 270 + 721 525 763 + 857 515 929 + 163 172 921 + 813 379 716 + 848 308 879 + 231 683 824 + 564 715 305 + 589 903 967 + 452 576 371 + 120 820 215 + 444 536 215 + 897 300 478 + 659 78 489 + 688 259 807 + 475 744 132 + 430 47 721 + 59 729 594 + 123 255 846 + 267 822 141 + 283 982 920 + 914 670 772 + 31 803 762 + 882 940 22 + 196 889 610 + 412 540 310 + 473 467 599 + 186 108 628 + 749 266 559 + 876 263 736 + 741 794 155 + 916 489 217 + 244 683 93 + 735 32 860 + 79 469 774 + 694 498 168 + 875 971 968 + 44 660 936 + 891 909 68 + 335 803 447 + 592 440 192 + 602 625 528 + 964 299 913 + 864 165 676 + 870 211 388 + 139 658 896 + 161 710 828 + 239 681 111 + 71 727 871 + 899 324 898 + 876 969 47 + 102 426 768 + 645 531 788 + 740 143 24 + 126 687 39 + 692 236 701 + 680 904 696 + 19 888 694 + 315 353 457 + 331 917 500 + 407 291 968 + 335 410 880 + 558 515 406 + 450 379 766 + 500 149 685 + 90 442 254 + 590 573 807 + 444 759 934 + 547 983 229 + 591 6 764 + 457 631 82 + 351 623 791 + 697 240 380 + 680 586 523 + 142 542 564 + 196 568 103 + 671 672 588 + 861 102 540 + 297 946 373 + 351 757 750 + 573 445 421 + 110 931 491 + 244 667 417 + 253 852 662 + 133 258 885 + 801 791 404 + 840 867 890 + 138 506 521 + 786 496 173 + 813 618 607 + 56 189 183 + 143 464 143 + 194 568 251 + 553 975 89 + 40 956 336 + 529 579 340 + 517 876 870 + 698 748 771 + 513 191 220 + 985 754 351 + 297 869 155 + 865 124 214 + 349 627 737 + 458 241 398 + 383 417 996 + 469 56 636 + 281 379 667 + 290 375 403 + 61 54 128 + 47 999 378 + 16 996 484 + 453 718 314 + 324 643 418 + 240 134 361 + 890 9 340 + 141 90 353 + 868 94 582 + 876 486 539 + 231 662 114 + 981 831 580 + 609 264 435 + 510 378 388 + 125 321 143 + 245 785 782 + 171 368 238 + 78 959 740 + 174 264 202 + 797 597 391 + 832 496 415 + 155 676 108 + 648 947 171 + 630 556 239 + 75 61 727 + 356 439 740 + 363 455 230 + 746 64 703 + 699 487 178 + 110 477 537 + 347 640 201 + 704 118 559 + 857 719 453 + 215 861 623 + 665 768 311 + 635 95 630 + 418 547 323 + 546 432 466 + 635 256 163 + 20 948 990 + 164 982 281 + 152 173 745 + 688 580 193 + 602 239 331 + 875 390 312 + 935 818 360 + 163 996 778 + 838 617 720 + 69 195 442 + 795 604 370 + 809 647 473 + 724 606 742 + 709 743 861 + 101 798 285 + 656 333 91 + 541 591 94 + 185 327 149 + 677 34 945 + 543 170 473 + 544 183 994 + 578 574 351 + 560 863 386 + 62 613 114 + 67 950 242 + 303 606 171 + 364 461 152 + 592 209 521 + 736 696 587 + 935 534 284 + 466 283 120 + 301 458 742 + 622 618 758 + 332 643 475 + 704 495 412 + 386 920 113 + 632 658 906 + 405 917 669 + 969 309 974 + 762 93 102 + 778 191 601 + 897 117 681 + 313 553 678 + 60 703 504 + 360 711 335 + 240 415 317 + 83 256 292 + 182 622 509 + 945 298 318 + 812 581 650 + 988 778 820 + 744 692 625 + 808 652 11 + 156 285 613 + 256 59 486 + 9 493 462 + 246 488 875 + 476 284 372 + 84 413 124 + 508 626 464 + 784 760 569 + 275 439 701 + 669 705 634 + 571 647 526 + 704 798 866 + 141 939 981 + 700 416 888 + 677 579 687 + 127 250 564 + 302 288 392 + 747 164 661 + 876 145 974 + 235 776 950 + 698 425 25 + 711 960 937 + 587 155 168 + 321 39 529 + 843 172 601 + 538 979 79 + 209 788 585 + 347 615 623 + 605 703 53 + 348 760 293 + 825 194 336 + 246 913 550 + 571 745 359 + 755 305 568 + 137 502 612 + 92 335 819 + 185 176 244 + 793 927 516 + 90 917 10 + 795 120 526 + 376 200 481 + 935 286 222 + 745 116 477 + 132 528 588 + 812 162 598 + 926 516 67 + 137 753 113 + 762 860 967 + 894 663 993 + 420 933 587 + 822 614 897 + 946 964 988 + 731 224 756 + 582 547 763 + 273 333 12 + 520 794 181 + 461 498 846 + 970 493 885 + 866 400 229 + 895 427 943 + 80 303 913 + 658 256 244 + 481 981 281 + 418 784 512 + 785 739 556 + 598 79 548 + 905 798 18 + 16 747 709 + 604 422 109 + 622 337 607 + 235 664 940 + 192 928 263 + 427 669 747 + 259 364 794 + 312 606 973 + 66 888 604 + 504 601 128 + 789 731 543 + 883 385 584 + 549 746 739 + 243 30 974 + 517 774 893 + 479 361 847 + 507 170 333 + 264 387 860 + 688 905 485 + 302 677 369 + 521 918 694 + 306 435 744 + 413 683 692 + 662 504 471 + 131 393 765 + 277 613 541 + 311 977 448 + 77 714 200 + 535 760 407 + 567 910 371 + 477 161 408 + 175 224 834 + 524 139 423 + 53 197 234 + 741 44 130 + 747 220 343 + 152 970 844 + 517 178 54 + 585 864 867 + 812 201 16 + 434 561 27 + 617 372 23 + 483 981 131 + 635 157 182 + 729 836 185 + 638 762 607 + 99 836 79 + 714 939 613 + 19 369 171 + 168 424 312 + 161 605 447 + 294 24 766 + 390 16 992 + 188 31 532 + 876 971 282 + 893 980 505 + 36 64 438 + 820 658 792 + 784 742 672 + 544 951 415 + 825 586 313 + 115 47 298 + 913 539 539 + 399 383 574 + 5 616 775 + 401 574 837 + 932 186 210 + 314 140 652 + 685 75 667 + 683 303 224 + 654 260 698 + 269 338 909 + 481 395 983 + 467 651 337 + 117 633 789 + 960 676 402 + 570 438 248 + 537 686 151 + 100 375 563 + 894 196 476 + 902 430 890 + 832 161 413 + 852 600 150 + 655 713 277 + 223 462 773 + 579 348 861 + 423 599 107 + 820 655 872 + 664 615 487 + 175 158 793 + 382 330 208 + 226 433 657 + 316 321 505 + 332 718 917 + 349 349 837 + 220 449 309 + 353 49 699 + 745 314 852 + 488 295 161 + 390 277 913 + 403 130 139 + 194 244 874 + 250 900 126 + 234 800 17 + 434 407 144 + 502 334 514 + 777 558 417 + 581 435 444 + 644 399 448 + 351 674 351 + 588 789 785 + 418 283 642 + 410 177 125 + 110 116 747 + 116 392 639 + 22 250 219 + 106 332 452 + 882 523 655 + 838 798 712 + 970 438 99 + 796 526 268 + 18 569 586 + 811 154 770 + 225 483 638 + 700 365 856 + 628 121 280 + 109 217 93 + 610 365 262 + 628 309 184 + 716 382 175 + 72 480 116 + 762 852 94 + 398 119 308 + 595 323 380 + 289 260 116 + 73 26 147 + 833 574 967 + 790 595 890 + 513 446 883 + 657 520 594 + 241 206 421 + 193 383 465 + 993 932 141 + 972 902 489 + 54 459 409 + 67 134 614 + 43 487 631 + 578 500 479 + 728 426 182 + 441 202 325 + 213 653 761 + 311 499 642 + 265 939 467 + 457 609 840 + 43 732 121 + 487 317 958 + 223 424 394 + 489 429 40 + 367 87 362 + 420 217 87 + 628 855 185 + 212 679 162 + 142 146 150 + 770 529 597 + 735 410 568 + 457 497 182 + 203 447 45 + 266 299 200 + 933 580 14 + 345 883 795 + 629 311 798 + 81 312 674 + 25 40 629 + 58 343 43 + 285 384 381 + 365 202 764 + 144 319 775 + 236 237 727 + 219 681 491 + 374 901 870 + 429 92 77 + 561 73 648 + 845 28 647 + 764 497 183 + 345 591 73 + 824 804 193 + 37 452 516 + 12 25 584 + 33 431 562 + 283 354 846 + 457 278 67 + 698 201 894 + 26 283 646 + 658 597 344 + 686 455 490 + 473 265 560 + 497 207 736 + 140 298 623 + 588 960 698 + 591 32 249 + 3 973 823 + 265 151 789 + 644 300 86 + 552 366 744 + 561 302 955 + 547 867 988 + 514 852 638 + 682 499 416 + 573 945 845 + 535 635 658 + 197 495 330 + 333 483 690 + 309 42 532 + 489 158 372 + 566 482 961 + 109 341 783 + 677 712 119 + 531 37 232 + 340 720 347 + 913 134 690 + 889 142 429 + 206 232 821 + 742 721 309 + 461 532 188 + 888 360 389 + 671 950 531 + 569 238 573 + 205 837 461 + 678 911 560 + 537 935 552 + 245 346 500 + 84 225 546 + 506 752 793 + 499 609 383 + 246 199 476 + 197 634 991 + 420 554 641 + 238 720 826 + 571 179 321 + 547 902 890 + 550 5 156 + 424 149 875 + 598 156 814 + 724 95 766 + 38 236 620 + 742 238 162 + 462 213 218 + 283 599 565 + 460 812 473 + 331 733 798 + 43 32 896 + 286 711 908 + 406 288 678 + 515 881 387 + 914 756 617 + 300 178 3 + 559 543 905 + 485 486 909 + 851 950 411 + 360 806 419 + 704 305 747 + 730 206 61 + 808 435 421 + 588 349 416 + 346 519 684 + 718 771 253 + 936 695 748 + 966 123 346 + 487 571 976 + 717 673 998 + 343 505 124 + 109 169 918 + 247 646 985 + 850 995 239 + 702 762 661 + 733 677 459 + 54 660 25 + 625 661 192 + 654 55 168 + 227 364 350 + 221 655 867 + 52 413 767 + 948 714 641 + 111 412 816 + 859 833 382 + 250 719 818 + 528 616 94 + 386 203 781 + 111 447 244 + 316 383 677 + 280 100 824 + 452 322 649 + 634 793 332 + 625 665 349 + 49 435 758 + 320 580 776 + 352 166 227 + 691 801 376 + 89 794 10 + 758 19 387 + 24 951 738 + 584 127 681 + 564 888 469 + 421 813 308 + 120 380 894 + 539 675 908 + 610 112 430 + 605 196 435 + 822 89 10 + 912 760 205 + 497 850 873 + 472 876 699 + 582 896 978 + 727 238 974 + 748 784 223 + 961 411 965 + 954 767 62 + 148 855 987 + 832 955 512 + 399 748 110 + 530 616 422 + 525 708 992 + 668 340 962 + 833 804 120 + 797 294 259 + 693 181 688 + 898 165 715 + 675 424 309 + 596 76 129 + 519 470 267 + 377 926 744 + 551 66 834 + 560 976 275 + 475 551 92 + 195 468 205 + 446 358 122 + 366 338 734 + 972 710 760 + 914 818 24 + 532 324 333 + 75 917 277 + 605 656 369 + 727 548 469 + 58 84 437 + 674 524 68 + 467 452 792 + 841 519 660 + 922 861 946 + 682 753 605 + 777 419 758 + 536 434 269 + 291 624 351 + 372 151 768 + 86 579 751 + 252 720 474 + 976 739 949 + 878 23 771 + 320 259 561 + 536 887 709 + 491 828 668 + 949 488 913 + 973 40 122 + 868 492 808 + 261 938 614 + 42 327 679 + 296 806 227 + 251 681 523 + 555 933 543 + 802 343 31 + 739 605 863 + 581 553 337 + 198 880 885 + 139 466 781 + 479 471 785 + 565 29 36 + 962 283 367 + 756 881 927 + 761 837 936 + 413 712 289 + 118 620 91 + 297 732 256 + 733 895 489 + 163 12 540 + 655 898 321 + 241 509 371 + 916 272 653 + 688 281 810 + 103 215 281 + 987 92 408 + 957 170 454 + 466 88 293 + 40 813 103 + 436 766 254 diff --git a/d03/src/main.rs b/d03/src/main.rs new file mode 100644 index 0000000..d168a44 --- /dev/null +++ b/d03/src/main.rs @@ -0,0 +1,89 @@ +use std::fs; + +fn solve_part1(rows: &Vec<Vec<usize>>) -> usize { + let mut num_valid: usize = 0; + + for row in rows { + let mut sides = row.clone(); + + sides.sort(); + if sides[0] + sides[1] > sides[2] { + num_valid += 1; + } + } + + num_valid +} + +fn solve_part2(rows: &Vec<Vec<usize>>) -> usize { + let mut num_valid: usize = 0; + + // For each 3 consecutive rows of data + for i in 0..(rows.len() / 3) { + // For each of the 3 numbers per row + for j in 0..3 { + let mut sides = Vec::new(); + // For each row in this group of 3 rows + for k in 0..3 { + sides.push(rows[3 * i + k][j]); + } + + sides.sort(); + if sides[0] + sides[1] > sides[2] { + num_valid += 1; + } + } + } + + num_valid +} + +fn main() { + // Read and parse triangle data from input text file + let input = fs::read_to_string("input.txt").unwrap(); + let lines: Vec<&str> = input.lines().collect(); + let words: Vec<Vec<&str>> = lines + .into_iter() + .map(|l| l.split_ascii_whitespace().collect()) + .collect(); + let rows: Vec<Vec<usize>> = words + .into_iter() + .map(|w123| w123 + .into_iter() + .map(|s| s.parse().unwrap()) + .collect()) + .collect(); + + // Part 1 gives 993 for me + println!("Part 1 solution: {}", solve_part1(&rows)); + + // Part 2 gives 1849 for me + println!("Part 2 solution: {}", solve_part2(&rows)); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn part1_example1() { + let rows = vec![ + vec![5, 10, 25], + vec![3, 4, 5], + ]; + assert_eq!(solve_part1(&rows), 1); + } + + #[test] + fn part2_example1() { + let rows = vec![ + vec![101, 301, 501], + vec![102, 302, 502], + vec![103, 303, 503], + vec![201, 401, 601], + vec![202, 402, 602], + vec![203, 403, 603], + ]; + assert_eq!(solve_part2(&rows), 6); + } +} diff --git a/d04/Cargo.toml b/d04/Cargo.toml new file mode 100644 index 0000000..4a8c306 --- /dev/null +++ b/d04/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "d04" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/d04/input.txt b/d04/input.txt new file mode 100644 index 0000000..1d7aee4 --- /dev/null +++ b/d04/input.txt @@ -0,0 +1,1066 @@ +nzydfxpc-rclop-qwzhpc-qtylyntyr-769[oshgk] +qzlozfhmf-bzmcx-bnzshmf-zbpthrhshnm-339[zmxdi] +xtwtelcj-rclop-upwwjmply-zapcletzyd-743[itbds] +mrxivrexmsrep-fewoix-ywiv-xiwxmrk-308[kzypw] +ibghopzs-qobrm-difqvogwbu-142[lnrzo] +irgyyolokj-xghhoz-lotgtiotm-228[vnmxd] +foadouwbu-gqojsbusf-vibh-fsgsofqv-376[ymswi] +jvuzbtly-nyhkl-wyvqljapsl-wshzapj-nyhzz-ylzlhyjo-903[jnyaz] +amjmpdsj-cee-qcptgacq-236[caejm] +nvrgfezqvu-avccpsvre-crsfirkfip-217[nrzcd] +vdzonmhydc-bzmcx-bnzshmf-zbpthrhshnm-235[znyot] +oxaflxzqfsb-mixpqfz-doxpp-abmxoqjbkq-393[xqbfo] +drxevkzt-upv-crsfirkfip-893[rfikp] +rkpqxyib-zelzlixqb-obzbfsfkd-627[wzymt] +ajvyjprwp-kdwwh-bjunb-563[jwbpa] +nzcczdtgp-eza-dpncpe-mldvpe-opalcexpye-171[wjzyc] +jxdkbqfz-zixppfcfba-mixpqfz-doxpp-abmilvjbkq-809[nbaoc] +tbxmlkfwba-zelzlixqb-xkxivpfp-315[yixla] +gvcskirmg-gerhc-gsexmrk-hizipstqirx-620[zyosg] +ygcrqpkbgf-ecpfa-eqcvkpi-uvqtcig-440[sbpfj] +irdgrxzex-vxx-rthlzjzkzfe-425[zdqok] +szfyrqriuflj-tfcfiwlc-wcfnvi-uvjzxe-425[lfipb] +zgmfyxypbmsq-aylbw-bcqgel-912[dqtlr] +ubhatstkwhnl-cxeeruxtg-wxitkmfxgm-475[ectpi] +ejpanjwpekjwh-fahhuxawj-wymqeoepekj-316[utnvq] +qlm-pbzobq-ciltbo-pqloxdb-601[lktqh] +votubcmf-fhh-efwfmpqnfou-493[aiyzx] +jqwpihizlwca-uqtqbizg-ozilm-kivlg-twoqabqka-382[frmkh] +zovldbkfz-bdd-tlohpelm-497[dcfxw] +atyzghrk-yigbktmkx-natz-jkyomt-748[ktyag] +iuxxuyobk-hgyqkz-iayzuskx-ykxboik-566[yzsxi] +jvsvymbs-zjhclunly-obua-klzpnu-903[ckmyr] +sbnqbhjoh-ezf-tbmft-623[bfhte] +forwcoqhwjs-rms-difqvogwbu-870[owfqr] +yhtwhnpun-ibuuf-zopwwpun-721[tjlfz] +guahyncw-wbiwifuny-omyl-nymncha-968[nywac] +ykjoqian-cnwza-bhksan-zaoecj-576[btksq] +ckgvutofkj-igtje-zxgototm-800[mlqgz] +ipvohghykvbz-jvsvymbs-lnn-dvyrzovw-227[pysto] +jqwpihizlwca-zilqwikbqdm-ntwemz-kwvbiqvumvb-382[antsy] +njmjubsz-hsbef-cvooz-mbcpsbupsz-805[bferv] +ojk-nzxmzo-xgvnndadzy-xcjxjgvoz-mzxzdqdib-785[vzpun] +yhkpvhjapcl-ihzrla-svnpzapjz-747[pahzj] +htqtwkzq-zsxyfgqj-kqtbjw-rfsfljrjsy-827[wzxif] +fubrjhqlf-sodvwlf-judvv-ilqdqflqj-257[flqdj] +forwcoqhwjs-qobrm-qcohwbu-rsgwub-116[gtsir] +nzydfxpc-rclop-mfyyj-cpdplcns-483[gzysm] +cjpibabsepvt-cbtlfu-nbobhfnfou-857[bfcno] +oxmeeuruqp-ngzzk-geqd-fqefuzs-222[equzf] +mvkccspson-lexxi-bomosfsxq-614[ybgsn] +frqvxphu-judgh-fdqgb-frdwlqj-vhuylfhv-231[bojwc] +sno-rdbqds-bgnbnkzsd-btrsnldq-rdquhbd-989[dbnsq] +wrs-vhfuhw-fdqgb-frdwlqj-uhvhdufk-179[fhduw] +ftzgxmbv-ynssr-vahvhetmx-mktbgbgz-397[truqi] +xst-wigvix-tpewxmg-kveww-ywiv-xiwxmrk-984[nmrid] +dkqjcbctfqwu-rncuvke-itcuu-ucngu-544[inaxl] +hwdtljsnh-wfggny-fsfqdxnx-151[anbvm] +aflwjfslagfsd-bwddqtwsf-vwhdgqewfl-970[sjqtc] +hmsdqmzshnmzk-okzrshb-fqzrr-sqzhmhmf-885[qzbly] +xcitgcpixdcpa-qphzti-gtrtxkxcv-141[ctxip] +nbhofujd-tdbwfohfs-ivou-gjobodjoh-649[fnwgk] +wfruflnsl-wfggny-xjwanhjx-905[lnztx] +jrncbavmrq-rtt-fgbentr-975[rtbna] +jqwpihizlwca-akidmvomz-pcvb-bziqvqvo-460[zakpd] +oxmeeuruqp-nmewqf-eqdhuoqe-560[vtznk] +plolwdub-judgh-udeelw-uhvhdufk-985[fnsty] +kfg-jvtivk-treup-ivrthlzjzkzfe-503[ktvze] +bqvvu-ywjzu-ykwpejc-naoawnyd-550[txaws] +gsvvswmzi-wgezirkiv-lyrx-qerekiqirx-984[irevg] +vcibutulxiom-yaa-uhufsmcm-552[gpimb] +ugjjgkanw-usfvq-ugslafy-lwuzfgdgyq-918[gufaj] +qfmcusbwq-foadouwbu-dzoghwq-ufogg-hsqvbczcum-506[uoqbc] +qzchnzbshud-rbzudmfdq-gtms-zmzkxrhr-547[gxjyh] +aflwjfslagfsd-usfvq-ugslafy-esjcwlafy-450[kjnil] +nzwzcqfw-nsznzwlep-afcnsldtyr-951[hjrdi] +aoubshwq-pogysh-kcfygvcd-740[pxyzt] +zbytomdsvo-lkcuod-nocsqx-380[rqsuo] +fmsledevhsyw-jpsaiv-wivzmgiw-542[pitok] +qvbmzvibqwvit-ntwemz-abwziom-304[urjat] +gvaaz-tdbwfohfs-ivou-eftjho-389[inlud] +wlqqp-avccpsvre-ivjvrity-399[qcgto] +shmml-pelbtravp-pubpbyngr-znantrzrag-897[prabn] +iruzfrtkzmv-jtrmvexvi-ylek-jvimztvj-477[vijmr] +hdgdovmt-bmvyz-xjgjmapg-xviyt-xjvodib-yzqzgjkhzio-499[tsira] +willimcpy-yaa-omyl-nymncha-916[jtwau] +dpssptjwf-gmpxfs-bobmztjt-389[kjlin] +gpbepvxcv-snt-tcvxcttgxcv-245[etyfm] +jxdkbqfz-ciltbo-cfkxkzfkd-367[xldij] +udglrdfwlyh-sodvwlf-judvv-pdunhwlqj-231[rslnt] +ygcrqpkbgf-ecpfa-eqcvkpi-gpikpggtkpi-440[pgkci] +sno-rdbqds-eknvdq-otqbgzrhmf-391[yzexr] +lzfmdshb-atmmx-bnmszhmldms-313[bacsl] +qczcftiz-xszzmpsob-aofyshwbu-974[nxzyq] +nwzekwypera-fahhuxawj-iwngapejc-420[yzguv] +sbnqbhjoh-gmpxfs-efwfmpqnfou-389[sbwne] +ugjjgkanw-xdgowj-ksdwk-554[sntqw] +wdjcvuvmyjpn-kgvnodx-bmvnn-ncdkkdib-213[apifx] +nvrgfezqvu-tyftfcrkv-uvgcfpdvek-269[tiuvc] +uiovmbqk-jcvvg-abwziom-252[trvgn] +fydelmwp-prr-ecltytyr-561[ryelp] +ujoon-rpcsn-rdpixcv-jhtg-ithixcv-999[dcbon] +ahngzyzqcntr-eknvdq-dmfhmddqhmf-131[dhmnq] +iqmbazulqp-ngzzk-fqotzaxask-222[nmtgf] +tfejldvi-xiruv-avccpsvre-nfibjyfg-113[vfice] +wlsiayhcw-nij-mywlyn-xsy-nywbhifias-552[otlcf] +muqfedyput-sqdto-seqjydw-skijecuh-iuhlysu-764[mqlfy] +wbhsfbohwcboz-suu-hfowbwbu-324[bwhou] +owshgfarwv-hdsklau-yjskk-suimakalagf-944[wtiza] +ahngzyzqcntr-rbzudmfdq-gtms-bnmszhmldms-859[yvztm] +qyujihctyx-vohhs-fiacmncwm-292[knzep] +vetllbybxw-xzz-ybgtgvbgz-579[bgzlt] +zekvierkzferc-tyftfcrkv-uvgrikdvek-477[pecqo] +molgbzqfib-mixpqfz-doxpp-obzbfsfkd-367[ptnjg] +oxmeeuruqp-otaoaxmfq-geqd-fqefuzs-924[puwxb] +gpewwmjmih-nippcfier-gsrxemrqirx-646[tpsoa] +xgvnndadzy-wvnfzo-gvwjmvojmt-603[nfstl] +bjfutsneji-hfsid-htfynsl-htsyfnsrjsy-983[fdzej] +pynffvsvrq-wryylorna-qrcnegzrag-351[dymsz] +xjgjmapg-rzvkjiduzy-wvnfzo-kpmxcvndib-109[eyrcm] +sebehvkb-rkddo-vydqdsydw-296[lgonm] +hjgbwuladw-uzgugdslw-kwjnauwk-138[kgloe] +ohmnuvfy-wuhxs-wiuncha-uwkocmcncih-890[tvylz] +udpsdjlqj-iorzhu-wudlqlqj-491[rtwma] +rdggdhxkt-ytaanqtpc-ejgrwphxcv-635[gtacd] +eqttqukxg-ecpfa-yqtmujqr-596[hnvwy] +laffe-lruckx-iutzgotsktz-852[nglsy] +pkl-oaynap-xwogap-yqopkian-oanreya-394[ebzft] +kyelcrga-afmamjyrc-bcnyprkclr-314[crayk] +joufsobujpobm-dipdpmbuf-ufdiopmphz-571[ytgxs] +ydjuhdqjyedqb-fbqijys-whqii-tufqhjcudj-894[ekswi] +ajvyjprwp-kdwwh-mnenuxyvnwc-251[psaok] +ibghopzs-suu-gsfjwqsg-220[qshwm] +ugjjgkanw-hdsklau-yjskk-dstgjslgjq-502[lqxth] +ugdgjxmd-hdsklau-yjskk-hmjuzskafy-788[vtyzi] +lqwhuqdwlrqdo-mhoobehdq-oderudwrub-751[bzype] +wdjcvuvmyjpn-kgvnodx-bmvnn-pnzm-oznodib-837[dcbaw] +vcibutulxiom-qyujihctyx-wbiwifuny-fiacmncwm-994[tjxnm] +vqr-ugetgv-dcumgv-tgegkxkpi-102[gvekt] +encuukhkgf-lgnnadgcp-wugt-vguvkpi-752[vdmps] +ktfitzbgz-wrx-vhgmtbgfxgm-267[twjsh] +dzczkrip-xiruv-jtrmvexvi-ylek-kvtyefcfxp-243[vctis] +pynffvsvrq-enzcntvat-qlr-qrcnegzrag-377[vdxzy] +zixppfcfba-mixpqfz-doxpp-ixyloxqlov-679[pxfio] +shoewudys-isqludwuh-xkdj-kiuh-juijydw-608[qedlg] +qjopwxha-ywjzu-ykwpejc-nayaerejc-524[syznu] +upq-tfdsfu-dboez-dpbujoh-nbobhfnfou-415[bfoud] +fruurvlyh-udeelw-dqdobvlv-907[psznj] +tcfkqcevkxg-dwppa-wugt-vguvkpi-336[klouj] +plolwdub-judgh-gbh-uhdftxlvlwlrq-621[bnwav] +chnylhuncihuf-wuhxs-wiuncha-xypyfijgyhn-110[hnuyc] +froruixo-gbh-rshudwlrqv-153[amoni] +clxalrtyr-nsznzwlep-zapcletzyd-327[guevs] +xgsvgmotm-igtje-rghuxgzuxe-306[lcxzy] +gpsxdprixkt-rpcsn-gtprfjxhxixdc-401[xprcd] +lsyrkjkbnyec-nio-bokmaescsdsyx-874[nkgyo] +buzahisl-ibuuf-zopwwpun-747[vwuxt] +vqr-ugetgv-fag-yqtmujqr-882[gqrtu] +bgmxkgtmbhgte-wrx-wxlbzg-137[zquts] +ujqgywfau-ugdgjxmd-tskcwl-hmjuzskafy-112[yolzm] +lqwhuqdwlrqdo-fkrfrodwh-frqwdlqphqw-985[qwdrf] +surmhfwloh-fdqgb-uhvhdufk-621[dimhn] +fhezusjybu-hqrryj-qdqboiyi-322[esjtk] +gvaaz-tdbwfohfs-ivou-tijqqjoh-857[oafhi] +xmtjbzidx-xviyt-mznzvmxc-759[xmzit] +tfiifjzmv-gcrjkzt-xirjj-dribvkzex-399[ijrzf] +zuv-ykixkz-kmm-uvkxgzouty-748[xvipz] +gokzyxsjon-cmkfoxqob-rexd-domrxyvyqi-172[yfozw] +plolwdub-judgh-frqvxphu-judgh-sodvwlf-judvv-frqwdlqphqw-959[duhlq] +kfg-jvtivk-treup-tfekrzedvek-373[xyqzr] +dmybmsuzs-oaddaeuhq-qss-pqeusz-586[mansh] +ryexqpqhteki-rqiauj-iqbui-660[trqbl] +ytu-xjhwjy-jll-wjhjnansl-125[zketn] +fhezusjybu-muqfedyput-sqdto-udwyduuhydw-660[udyef] +qspkfdujmf-dipdpmbuf-mphjtujdt-909[dwuov] +cebwrpgvyr-enqvbnpgvir-enoovg-nanylfvf-533[akmyb] +qfmcusbwq-pogysh-hfowbwbu-246[hdsbg] +dmybmsuzs-bxmefuo-sdmee-abqdmfuaze-846[wsntq] +sno-rdbqds-azrjds-nodqzshnmr-157[ogtbm] +dpotvnfs-hsbef-cbtlfu-qvsdibtjoh-493[isjkl] +nwilwcejc-lhwopey-cnwoo-odellejc-732[isofe] +gokzyxsjon-mkxni-mykdsxq-bomosfsxq-822[nyudi] +molgbzqfib-gbiivybxk-obxznrfpfqflk-679[wotra] +cybyjqho-whqtu-rqiauj-jhqydydw-920[qyhjd] +tinnm-pogysh-ghcfous-506[xtcso] +myvybpev-cmkfoxqob-rexd-cdybkqo-146[boycd] +pbeebfvir-shmml-enoovg-chepunfvat-949[nltsr] +apuut-ezggtwzvi-yzqzgjkhzio-135[gdywb] +xfbqpojafe-ezf-bobmztjt-441[qbwdc] +ktfitzbgz-xzz-ehzblmbvl-943[zdigt] +eqnqthwn-dcumgv-rwtejcukpi-232[umdca] +xlrypetn-clmmte-opawzjxpye-379[bkvqj] +fydelmwp-awldetn-rcldd-lylwjdtd-821[dlwet] +owshgfarwv-esyfwlau-kusnwfywj-zmfl-ugflsafewfl-658[fwlsa] +bnmrtldq-fqzcd-eknvdq-sqzhmhmf-807[snkmf] +tyepcyletzylw-upwwjmply-cpnptgtyr-951[kyfol] +ckgvutofkj-igtje-iugzotm-ynovvotm-462[otgvi] +jshzzpmplk-ihzrla-klzpnu-981[yiaum] +aoubshwq-qczcftiz-qvcqczohs-qighcasf-gsfjwqs-896[hyxzq] +zilqwikbqdm-kpwkwtibm-ewzsapwx-668[zujgy] +tpspahyf-nyhkl-jhukf-jvhapun-zopwwpun-669[slmnt] +iuruxlar-lruckx-aykx-zkyzotm-852[kruxa] +bdavqofuxq-bxmefuo-sdmee-dqeqmdot-144[gblym] +eqnqthwn-ygcrqpkbgf-dcumgv-octmgvkpi-778[aznbf] +amppmqgtc-kyelcrga-bwc-ylyjwqgq-522[aedsm] +diozmivodjivg-xviyt-xjvodib-vxlpdndodji-109[dcnaq] +wifilzof-wbiwifuny-uwkocmcncih-474[lcymu] +dpmpsgvm-dboez-dpbujoh-efwfmpqnfou-779[ujlre] +iwcjapey-fahhuxawj-nayaerejc-758[elvba] +tcorcikpi-ejqeqncvg-vgejpqnqia-414[tywiv] +excdklvo-mrymyvkdo-wkbuodsxq-120[ngxcw] +nbhofujd-qmbtujd-hsbtt-bobmztjt-467[evdab] +fubrjhqlf-gbh-pdqdjhphqw-959[nmklz] +lxuxaodu-snuuhknjw-cnlqwxuxph-667[skyjn] +ytu-xjhwjy-jll-zxjw-yjxynsl-931[tyzfu] +cjpibabsepvt-sbccju-tbmft-519[ijnyz] +bkwzkqsxq-lexxi-cobfsmoc-406[xbcko] +yaxsnlcrun-dwbcjkun-kdwwh-orwjwlrwp-823[wnrcd] +jchipqat-gpqqxi-ejgrwphxcv-739[pqcgh] +etyyx-dff-cdudknoldms-937[dfyce] +jsehsyafy-vqw-dgyaklauk-112[rhsgp] +nzwzcqfw-awldetn-rcldd-opalcexpye-587[cdelw] +nvrgfezqvu-wcfnvi-uvjzxe-139[vefnu] +apuut-kgvnodx-bmvnn-ncdkkdib-915[stofz] +hwdtljsnh-ojqqdgjfs-zxjw-yjxynsl-489[ftzsy] +pualyuhapvuhs-jhukf-jvhapun-ayhpupun-877[oflqz] +yaxsnlcrun-bljenwpna-qdwc-mnenuxyvnwc-407[ncwae] +eqnqthwn-ejqeqncvg-nqikuvkeu-102[exsvc] +ynssr-lvtoxgzxk-angm-tvjnblbmbhg-813[bgnlm] +sehheiylu-zubboruqd-cqdqwucudj-400[ziuys] +awzwhofm-ufors-qobrm-gozsg-246[zurge] +ahngzyzqcntr-bzmcx-bnzshmf-lzmzfdldms-677[zmnbc] +eza-dpncpe-awldetn-rcldd-wzrtdetnd-769[mtgef] +htsxzrjw-lwfij-kqtbjw-wjxjfwhm-931[sjxwa] +szfyrqriuflj-jtrmvexvi-ylek-nfibjyfg-373[alfvj] +emixwvqhml-ntwemz-amzdqkma-876[lutzf] +hwbba-fag-tgegkxkpi-726[zilbc] +nwilwcejc-zua-zalhkuiajp-212[acijl] +aflwjfslagfsd-esyfwlau-kusnwfywj-zmfl-mkwj-lwklafy-892[flwas] +fmsledevhsyw-fewoix-xiglrspskc-256[sefil] +zuv-ykixkz-lruckx-ykxboiky-306[odviu] +ftzgxmbv-utldxm-ftgtzxfxgm-969[noxmk] +ojk-nzxmzo-nxvqzibzm-cpio-mzvxlpdndodji-109[nfysr] +molgbzqfib-mixpqfz-doxpp-abmilvjbkq-133[bimpq] +zekvierkzferc-tyftfcrkv-jkfirxv-867[bjyft] +gvaaz-ezf-bobmztjt-727[muyvq] +mvhkvbdib-zbb-hvivbzhzio-551[yntvz] +dwbcjkun-kdwwh-ujkxajcxah-641[jkwac] +lhkhszqx-fqzcd-qzaahs-lzmzfdldms-209[tklbi] +njmjubsz-hsbef-sbccju-qvsdibtjoh-571[tpswx] +avw-zljyla-lnn-zopwwpun-149[lnwap] +ckgvutofkj-hgyqkz-iayzuskx-ykxboik-358[mdnay] +ytu-xjhwjy-hfsid-rfsfljrjsy-697[hmiag] +houngfgxjuay-igtje-sgtgmksktz-384[monuj] +qfkkj-ojp-ecltytyr-249[itsvz] +udglrdfwlyh-udeelw-zrunvkrs-985[dlrue] +gsvvswmzi-tpewxmg-kveww-viwievgl-178[vbmit] +houngfgxjuay-yigbktmkx-natz-ykxboiky-930[bjyzu] +eqttqukxg-uecxgpigt-jwpv-uvqtcig-102[gnzpx] +amjmpdsj-bwc-pcqcypaf-288[gsywq] +zntargvp-cynfgvp-tenff-npdhvfvgvba-793[vfngp] +hdgdovmt-bmvyz-xcjxjgvoz-ozxcijgjbt-811[snjmz] +etaqigpke-rncuvke-itcuu-ewuvqogt-ugtxkeg-154[eugtk] +pbybeshy-sybjre-ybtvfgvpf-117[vszqj] +vqr-ugetgv-tcddkv-uvqtcig-336[hzkdw] +ykhknbqh-xwogap-pnwejejc-368[nqxzy] +sehheiylu-rkddo-jusxdebewo-634[edhos] +mvydjvxodqz-xcjxjgvoz-adivixdib-395[snpmt] +ahngzyzqcntr-bzmcx-rsnqzfd-183[zfkpc] +qxdwpopgsdjh-eaphixr-vgphh-detgpixdch-973[hpdgx] +nij-mywlyn-jlidywncfy-jfumncw-alumm-zchuhwcha-682[nvybs] +yhtwhnpun-jhukf-klzpnu-383[hnukp] +yhtwhnpun-qlssfilhu-svnpzapjz-175[fopst] +sgmtkzoi-jek-jkbkruvsktz-774[whzny] +gifavtkzcv-wcfnvi-rercpjzj-711[cvfij] +pkl-oaynap-acc-lqnydwoejc-940[aclno] +vhkkhlbox-ktuubm-tvjnblbmbhg-475[gyhzn] +guahyncw-wfummczcyx-wuhxs-guleyncha-422[iybfa] +ydjuhdqjyedqb-hqrryj-sedjqydcudj-816[ftnej] +rnqnyfwd-lwfij-gfxpjy-xytwflj-801[phsxc] +vdzonmhydc-qzaahs-rdquhbdr-365[quvjr] +ucynmlgxcb-zyqicr-rcaflmjmew-444[ncmzr] +wfummczcyx-gcfcnuls-aluxy-luvvcn-jolwbumcha-864[culma] +qzoggwtwsr-dfcxsqhwzs-suu-qighcasf-gsfjwqs-220[sgqwf] +esyfwlau-mfklstdw-uzgugdslw-suimakalagf-918[igapw] +zntargvp-wryylorna-genvavat-819[zmnji] +ugfkmewj-yjsvw-uzgugdslw-umklgewj-kwjnauw-268[wugjk] +xjinphzm-bmvyz-kgvnodx-bmvnn-pnzm-oznodib-109[rfzpw] +mvydjvxodqz-mvwwdo-ozxcijgjbt-265[cxfdz] +ujoon-rwdrdapit-bpcpvtbtci-375[ptbcd] +aczupnetwp-dnlgpyrpc-sfye-afcnsldtyr-457[cydjq] +uzfqdzmfuazmx-eomhqzsqd-tgzf-ymzmsqyqzf-898[zmqfd] +lugjuacha-luvvcn-ijyluncihm-890[uclah] +mtzslklcozfd-upwwjmply-lnbftdtetzy-379[yzwvu] +myvybpev-oqq-bocokbmr-328[bomqv] +tagzsrsjvgmk-xdgowj-ghwjslagfk-346[anbri] +dpmpsgvm-ezf-mphjtujdt-493[dolas] +votubcmf-sbccju-efqbsunfou-831[mnvky] +zotts-xsy-nywbhifias-188[boqzr] +gvcskirmg-glsgspexi-irkmriivmrk-646[igrkm] +bnknqetk-cxd-cdozqsldms-625[dcknq] +eqnqthwn-lgnnadgcp-cpcnauku-206[ytmnv] +kmjezxodgz-wpiit-mznzvmxc-525[gtdob] +dpotvnfs-hsbef-fhh-dvtupnfs-tfswjdf-519[fsdht] +bwx-amkzmb-kpwkwtibm-lmdmtwxumvb-486[qmvwa] +guahyncw-vohhs-lyuwkocmcncih-760[chnou] +guahyncw-zfiqyl-nywbhifias-188[szhfp] +ksodcbwnsr-foppwh-kcfygvcd-194[cdfko] +gpewwmjmih-glsgspexi-jmrergmrk-542[bfqnt] +vqr-ugetgv-fag-fgxgnqrogpv-440[gvfqr] +encuukhkgf-etaqigpke-tcddkv-ceswkukvkqp-726[fijhw] +yrwxefpi-fyrrc-hiwmkr-724[rfiwy] +hwdtljsnh-bjfutsneji-hfsid-htfynsl-xfqjx-801[cdbsl] +xjmmjndqz-xcjxjgvoz-jkzmvodjin-681[jmxzd] +jqwpihizlwca-kivlg-tijwzibwzg-200[jpsbx] +fodvvlilhg-froruixo-fkrfrodwh-wudlqlqj-621[yketz] +wpuvcdng-fag-fgrctvogpv-518[klean] +xgvnndadzy-xviyt-xjvodib-mzxzdqdib-421[oypak] +kzeed-gzssd-qtlnxynhx-515[byszr] +surmhfwloh-iorzhu-pdqdjhphqw-517[bhpqy] +xcitgcpixdcpa-ytaanqtpc-rjhidbtg-htgkxrt-167[kjlxw] +yuxufmdk-sdmpq-nmewqf-emxqe-248[cteon] +iuxxuyobk-kmm-xkykgxin-306[hjxkm] +joufsobujpobm-dboez-dpbujoh-mphjtujdt-675[fwybh] +ajmrxjlcren-ouxfna-vjatncrwp-459[ajnrc] +nwzekwypera-xwogap-paydjkhkcu-992[akpwe] +aietsrmdih-gpewwmjmih-gerhc-stivexmsrw-282[eimhr] +sxdobxkdsyxkv-nio-yzobkdsyxc-874[gpnhm] +qfkkj-mldvpe-afcnsldtyr-639[dfkla] +eqnqthwn-tcddkv-ucngu-674[lekca] +lqxlxujcn-bcxajpn-667[aomrt] +etaqigpke-dcumgv-wugt-vguvkpi-180[guvei] +udglrdfwlyh-mhoobehdq-orjlvwlfv-413[mnizv] +wyvqljapsl-jhukf-jvhapun-klzpnu-851[ixkjt] +esyfwlau-jsttal-wfyafwwjafy-138[afwyj] +bdavqofuxq-ymszqfuo-otaoaxmfq-fdmuzuzs-222[zbyrv] +udskkaxawv-wyy-vwkayf-996[drsqf] +qzoggwtwsr-qczcftiz-foppwh-gvwddwbu-246[btqac] +yaxsnlcrun-yujbcrl-pajbb-nwprwnnarwp-745[cdwey] +zhdsrqlchg-gbh-pdunhwlqj-439[hdglq] +zekvierkzferc-nvrgfezqvu-treup-tfrkzex-ivjvrity-139[nthvs] +vhkkhlbox-ktwbhtvmbox-vtgwr-vhtmbgz-ftgtzxfxgm-709[tbghv] +kmjezxodgz-xmtjbzidx-agjrzm-rjmfncjk-863[hramk] +qspkfdujmf-kfmmzcfbo-vtfs-uftujoh-129[nmtql] +ipvohghykvbz-jhukf-jvhapun-jvuahputlua-591[cyqjf] +lahxpnwrl-lqxlxujcn-vjwjpnvnwc-563[wcjme] +sbejpbdujwf-qmbtujd-hsbtt-bdrvjtjujpo-493[jbtdu] +ujoon-hrpktcvtg-wjci-stepgibtci-115[tdcgy] +wlqqp-jtrmvexvi-ylek-rercpjzj-321[pyfoz] +qyujihctyx-vohhs-yhachyylcha-604[xfbmz] +eza-dpncpe-nlyoj-nzletyr-epnsyzwzrj-925[ytbnm] +nzwzcqfw-awldetn-rcldd-lnbftdtetzy-743[tomzn] +nwzekwypera-bhksan-yqopkian-oanreya-914[otvsm] +avw-zljyla-wshzapj-nyhzz-klclsvwtlua-773[lazwh] +plolwdub-judgh-iorzhu-vdohv-179[bmrjz] +lnkfaypeha-zua-zarahkliajp-368[tzngm] +slqryzjc-afmamjyrc-pcqcypaf-418[tjmsy] +frqvxphu-judgh-vfdyhqjhu-kxqw-rshudwlrqv-387[dxhnm] +uqtqbizg-ozilm-lgm-nqvivkqvo-928[rmnzf] +lqwhuqdwlrqdo-edvnhw-ilqdqflqj-335[ctsda] +zloolpfsb-mixpqfz-doxpp-obzbfsfkd-133[txiel] +otzkxtgzoutgr-igtje-iugzotm-xkykgxin-592[zywxn] +sbnqbhjoh-kfmmzcfbo-nbobhfnfou-701[fihgn] +eqttqukxg-tcfkqcevkxg-rncuvke-itcuu-vtckpkpi-960[fobts] +xgjougizobk-hatte-jkbkruvsktz-592[ktbgj] +bqvvu-bhksan-pnwejejc-836[tcjgz] +ikhcxvmbex-unggr-kxvxbobgz-787[opysz] +jsehsyafy-usfvq-mkwj-lwklafy-320[msztr] +ikhcxvmbex-ktuubm-ftgtzxfxgm-891[ojsny] +ajvyjprwp-ajkkrc-mnenuxyvnwc-381[umkpn] +pinovwgz-zbb-mznzvmxc-993[aumbt] +ajyqqgdgcb-aylbw-rcaflmjmew-678[abcgj] +houngfgxjuay-kmm-zxgototm-488[zudop] +kmjezxodgz-ezggtwzvi-ozxcijgjbt-707[jyizu] +eadalsjq-yjsvw-xdgowj-mkwj-lwklafy-762[jwald] +aczupnetwp-ojp-dstaatyr-379[ftyeo] +gvcskirmg-yrwxefpi-gerhc-gsexmrk-ywiv-xiwxmrk-958[rgixe] +yuxufmdk-sdmpq-rxaiqd-pqbmdfyqzf-196[azivn] +qyujihctyx-wuhxs-yhachyylcha-344[zdimn] +rflsjynh-idj-yjhmstqtld-515[cvfph] +lqwhuqdwlrqdo-edvnhw-rshudwlrqv-257[nlxst] +odiih-kdwwh-mnbrpw-953[wdhib] +ugdgjxmd-uzgugdslw-klgjsyw-814[cktda] +mybbycsfo-pvygob-myxdksxwoxd-744[ifscp] +bqvvu-ywjzu-odellejc-316[krcsj] +nzcczdtgp-dnlgpyrpc-sfye-cplnbftdtetzy-743[kbdyu] +pinovwgz-xcjxjgvoz-xjiovdihzio-525[mhjxn] +ckgvutofkj-igtje-xkykgxin-878[vimez] +rmn-qcapcr-zsllw-bcnjmwkclr-912[anzkg] +ipvohghykvbz-yhiipa-zlycpjlz-227[oyzjt] +nwilwcejc-nwxxep-wymqeoepekj-550[ztyes] +uzfqdzmfuazmx-otaoaxmfq-pqhqxabyqzf-274[qafzm] +hafgnoyr-qlr-chepunfvat-975[zauvm] +irdgrxzex-treup-tfrkzex-ljvi-kvjkzex-269[lozqp] +udskkaxawv-bwddqtwsf-klgjsyw-944[nmsxw] +ujoon-rpcsn-gtprfjxhxixdc-921[xcjno] +jrncbavmrq-enoovg-qrfvta-195[aqyxs] +xgsvgmotm-yigbktmkx-natz-iutzgotsktz-462[smvtd] +sxdobxkdsyxkv-mkxni-zebmrkcsxq-770[zkwax] +zbytomdsvo-oqq-crszzsxq-614[iwqoc] +wfruflnsl-kqtbjw-qfgtwfytwd-801[imsvp] +nglmtuex-wrx-ybgtgvbgz-787[etuki] +ixeumktoi-yigbktmkx-natz-uvkxgzouty-774[hylkz] +cxy-bnlanc-ljwmh-cnlqwxuxph-719[unwgt] +xcitgcpixdcpa-ytaanqtpc-hidgpvt-453[cptai] +udglrdfwlyh-fkrfrodwh-fxvwrphu-vhuylfh-985[ntvum] +dsxxw-glrcplyrgmlyj-afmamjyrc-yaosgqgrgml-912[hstuv] +nglmtuex-xzz-wxiehrfxgm-267[wjyqr] +ixccb-fdqgb-xvhu-whvwlqj-153[bchqv] +vhehkyne-vtgwr-vhtmbgz-ehzblmbvl-449[mnuht] +xgjougizobk-hgyqkz-jkyomt-774[sdeqt] +ktiaaqnqml-zijjqb-abwziom-252[fgisn] +glrcplyrgmlyj-cee-pcyaosgqgrgml-470[osmrp] +qjopwxha-lhwopey-cnwoo-nawymqeoepekj-472[rfgnc] +plolwdub-judgh-fdqgb-vklsslqj-959[ldbgj] +yknnkoera-zua-wymqeoepekj-472[rsqmj] +ujoon-ytaanqtpc-gtrtxkxcv-635[tacno] +tcfkqcevkxg-fag-ujkrrkpi-856[njiek] +uzfqdzmfuazmx-bdavqofuxq-qss-dqmocgueufuaz-170[wktxs] +ltpedcxots-rpcsn-hwxeexcv-375[draoy] +zntargvp-pnaql-nanylfvf-585[iejdf] +lqwhuqdwlrqdo-vfdyhqjhu-kxqw-orjlvwlfv-101[szrtk] +dyz-combod-oqq-cdybkqo-614[odqbc] +jyddc-fyrrc-wepiw-802[chjtm] +nglmtuex-yehpxk-phkdlahi-319[cjshn] +surmhfwloh-fdqgb-xvhu-whvwlqj-205[vzite] +wrs-vhfuhw-udeelw-dqdobvlv-179[znwyc] +myxcewob-qbkno-lkcuod-cdybkqo-328[ysbjw] +ixeumktoi-inuiurgzk-giwaoyozout-124[vnlcr] +vhehkyne-utldxm-nlxk-mxlmbgz-839[cnryt] +tagzsrsjvgmk-tskcwl-klgjsyw-216[sgkjl] +bjfutsneji-idj-ijajqturjsy-203[gkoyb] +plolwdub-judgh-gbh-wudlqlqj-335[snabj] +ydjuhdqjyedqb-sqdto-seqjydw-tufbeocudj-504[cawtu] +fkqbokxqflkxi-ciltbo-jxohbqfkd-913[mthlx] +eadalsjq-yjsvw-tskcwl-sfsdqkak-840[sakdj] +tipfxvezt-dzczkrip-xiruv-irsszk-ivtvzmzex-347[ewgst] +plolwdub-judgh-fdqgb-pdqdjhphqw-309[slvtc] +nwilwcejc-iehepwnu-cnwza-ywjzu-naoawnyd-914[wnace] +lejkrscv-irsszk-fgvirkzfej-633[krsef] +qzlozfhmf-bgnbnkzsd-qdrdzqbg-105[ltrxz] +hmsdqmzshnmzk-bkzrrhehdc-idkkxadzm-sqzhmhmf-833[vsftk] +mbggf-wyvqljapsl-ibuuf-ylhjxbpzpapvu-565[kxetg] +vehmsegxmzi-tpewxmg-kveww-erepcwmw-360[ewmgp] +mhi-lxvkxm-xzz-wxoxehifxgm-475[zvuxn] +pejji-nio-gybucryz-848[scvwe] +oqnidbshkd-rbzudmfdq-gtms-cdozqsldms-729[dsmqb] +hmsdqmzshnmzk-lzfmdshb-idkkxadzm-btrsnldq-rdquhbd-937[yncvm] +fmsledevhsyw-wgezirkiv-lyrx-jmrergmrk-932[bgytv] +houngfgxjuay-lruckx-iayzuskx-ykxboik-462[vefmw] +njmjubsz-hsbef-dboez-vtfs-uftujoh-337[bfjsu] +lhkhszqx-fqzcd-azrjds-cdozqsldms-157[amnks] +dpotvnfs-hsbef-dipdpmbuf-tbmft-103[zhrge] +sebehvkb-rqiauj-jusxdebewo-166[jscdv] +diozmivodjivg-pinovwgz-ezggtwzvi-mznzvmxc-811[ysntj] +kwtwznct-kpwkwtibm-zmamizkp-902[kwmtz] +jyddc-fyrrc-asvowlst-828[ybfgd] +tagzsrsjvgmk-vqw-ugflsafewfl-580[xmqnr] +mfklstdw-tmffq-kwjnauwk-502[fkwmt] +xcitgcpixdcpa-rpcsn-rdpixcv-rdcipxcbtci-453[ynzqc] +fmsledevhsyw-wgezirkiv-lyrx-hitevxqirx-542[eirvx] +ojk-nzxmzo-zbb-ozxcijgjbt-213[zbjox] +gpewwmjmih-hci-vigimzmrk-932[injxy] +gpsxdprixkt-qjccn-hpath-349[pchtx] +diozmivodjivg-nxvqzibzm-cpio-omvdidib-109[jivdx] +dzczkrip-xiruv-srjbvk-crsfirkfip-269[mbnda] +lgh-kwujwl-usfvq-ugslafy-vwhsjlewfl-580[ftwxr] +ymszqfuo-rxaiqd-xmnadmfadk-456[smxyt] +slqryzjc-njyqrga-epyqq-kypicrgle-158[ktcij] +apwmeclga-hcjjwzcyl-bctcjmnkclr-496[cjlam] +pejji-zvkcdsm-qbkcc-gybucryz-770[junto] +kzeed-kqtbjw-xmnuunsl-931[eknub] +fhezusjybu-sedikcuh-whqtu-hqrryj-cqhaujydw-322[kogjn] +encuukhkgf-uecxgpigt-jwpv-fgrnqaogpv-648[gpuce] +fnjyxwrinm-kjbtnc-bjunb-225[nbjcf] +gifavtkzcv-sleep-kvtyefcfxp-737[cusry] +nij-mywlyn-xsy-fiacmncwm-266[txfyk] +pxtihgbsxw-cxeeruxtg-labiibgz-501[vfryk] +oaxadrgx-vqxxknqmz-etubbuzs-612[gmzpy] +oxaflxzqfsb-yxphbq-obzbfsfkd-497[gsjqc] +lxaaxbren-ajmrxjlcren-kdwwh-uxprbcrlb-563[rxabl] +drxevkzt-jtrmvexvi-ylek-ivrthlzjzkzfe-893[evzkr] +xst-wigvix-veqtekmrk-hci-hizipstqirx-334[itxeh] +hqcfqwydw-sxesebqju-bewyijysi-556[upyan] +oxjmxdfkd-avb-abmxoqjbkq-809[cuyzr] +vkppo-isqludwuh-xkdj-husuylydw-686[sfajr] +nwilwcejc-ykjoqian-cnwza-ywjzu-ykjpwejiajp-576[jwaci] +gpewwmjmih-hci-jmrergmrk-360[jftsi] +ibghopzs-gqojsbusf-vibh-gvwddwbu-324[ratwb] +mvhkvbdib-wvnfzo-gvwjmvojmt-785[zljyf] +lahxpnwrl-mhn-bjunb-719[kexws] +iuxxuyobk-inuiurgzk-vaxingyotm-722[snwtx] +rnqnyfwd-lwfij-xhfajsljw-mzsy-wjhjnansl-671[nyphz] +uwtojhynqj-wfggny-yjhmstqtld-229[qzmtg] +dfcxsqhwzs-pibbm-qighcasf-gsfjwqs-220[iucxp] +eqttqukxg-dwppa-uvqtcig-362[setiw] +gcfcnuls-aluxy-vohhs-guleyncha-500[gchrt] +ocipgvke-dwppa-gpikpggtkpi-518[tihzs] +qfmcusbwq-dzoghwq-ufogg-cdsfohwcbg-454[ylkjh] +yhtwhnpun-msvdly-zlycpjlz-123[qjnxy] +lxuxaodu-ljwmh-lxjcrwp-anjlzdrbrcrxw-199[lnesc] +qekrixmg-jpsaiv-tyvglewmrk-646[egikm] +emixwvqhml-moo-wxmzibqwva-720[mwioq] +kpvgtpcvkqpcn-dwppa-cpcnauku-934[bmprc] +lugjuacha-vumeyn-mylpcwym-604[muyac] +lzfmdshb-ahngzyzqcntr-dff-nodqzshnmr-937[pwdof] +sbqiiyvyut-vkppo-zubboruqd-cqdqwucudj-348[osntj] +ubhatstkwhnl-wrx-ftkdxmbgz-111[fojwk] +mvhkvbdib-zbb-ncdkkdib-967[brnch] +vetllbybxw-utldxm-mktbgbgz-579[gljhz] +htsxzrjw-lwfij-gzssd-btwpxmtu-333[rhtqs] +nzcczdtgp-nlyoj-nzletyr-xlcvpetyr-587[smnct] +pybgmyargtc-zsllw-jyzmpyrmpw-366[zutsy] +kfg-jvtivk-upv-jvimztvj-997[xicjt] +kpvgtpcvkqpcn-hnqygt-ewuvqogt-ugtxkeg-388[gtkpq] +ktiaaqnqml-kpwkwtibm-mvoqvmmzqvo-564[asert] +mfklstdw-uzgugdslw-dgyaklauk-892[dgklu] +gzefmnxq-pkq-xmnadmfadk-196[madfk] +qcbgiasf-ufors-dzoghwq-ufogg-ghcfous-714[yiavh] +veqtekmrk-nippcfier-asvowlst-958[thmsn] +iehepwnu-cnwza-zua-skngodkl-134[naeku] +xfbqpojafe-fhh-tfswjdft-571[fhjta] +laffe-jek-ygrky-150[pjbaq] +lxwbdvna-pajmn-kjbtnc-fxatbqxy-459[xbmlo] +wkqxodsm-bkllsd-bomosfsxq-276[isaey] +ovbunmneqbhf-fpniratre-uhag-qrirybczrag-741[rabne] +xjmmjndqz-mvwwdo-kpmxcvndib-395[hyolt] +zbytomdsvo-mkxni-mykdsxq-bomosfsxq-276[efcvd] +jqwpihizlwca-bwx-amkzmb-jcvvg-ivitgaqa-252[dsmej] +dszphfojd-sbccju-nbobhfnfou-805[bfocd] +hwbba-lgnnadgcp-vgejpqnqia-830[ptkvu] +wfintfhynaj-hmthtqfyj-fhvznxnynts-125[nfhty] +wfummczcyx-wbiwifuny-mbcjjcha-864[cmwbf] +tfcfiwlc-avccpsvre-uvjzxe-269[cvefa] +dlhwvupglk-msvdly-dvyrzovw-331[nmeji] +fnjyxwrinm-npp-orwjwlrwp-979[tqyvp] +sgmtkzoi-hgyqkz-xkgiwaoyozout-904[ogkzi] +qjopwxha-oywrajcan-dqjp-opknwca-680[qgsnh] +oxjmxdfkd-zxkav-pxibp-185[mtfwl] +mfklstdw-wyy-lwuzfgdgyq-814[iznma] +zlilocri-bdd-pefmmfkd-341[intay] +rwcnawjcrxwju-kdwwh-cajrwrwp-849[wrcja] +xmrrq-uzgugdslw-jwuwanafy-372[uwagr] +kzgwomvqk-zijjqb-ewzsapwx-278[wzjkq] +lxuxaodu-ouxfna-ujkxajcxah-277[xaujo] +nwzekwypera-iehepwnu-cnwza-fahhuxawj-zalhkuiajp-186[nbzay] +vhkkhlbox-ktuubm-hixktmbhgl-943[byecg] +qxdwpopgsdjh-uadltg-prfjxhxixdc-141[eqzvr] +kyelcrga-zsllw-pcacgtgle-522[lcgae] +qzoggwtwsr-ksodcbwnsr-dzoghwq-ufogg-zcuwghwqg-818[dzclv] +xekdwvwnzkqo-lhwopey-cnwoo-bejwjyejc-238[ksrhc] +npmhcargjc-cee-bctcjmnkclr-782[tgrxz] +hwbba-ecpfa-eqcvkpi-ceswkukvkqp-336[kcepa] +uwtojhynqj-hmthtqfyj-wjhjnansl-437[kylvd] +sxdobxkdsyxkv-bknsykmdsfo-oqq-kmaescsdsyx-380[skdxo] +rmn-qcapcr-afmamjyrc-dglylagle-158[aclmr] +raphhxuxts-gpqqxi-advxhixrh-583[vuafx] +nij-mywlyn-xsy-jolwbumcha-760[mkhgy] +lnkfaypeha-xqjju-odellejc-680[ghsol] +ytu-xjhwjy-wfggny-zxjw-yjxynsl-931[tynvp] +myxcewob-qbkno-lkcuod-nofovyzwoxd-744[obcdk] +diozmivodjivg-mvwwdo-gvwjmvojmt-161[vpsib] +vhkkhlbox-cxeeruxtg-ehzblmbvl-787[behlx] +iruzfrtkzmv-treup-tfrkzex-jvimztvj-841[xmwvi] +kyelcrga-cee-pcacgtgle-730[yladm] +iutyaskx-mxgjk-yigbktmkx-natz-jkyomt-436[tznsm] +hvbizodx-agjrzm-ncdkkdib-421[iqnst] +xzwrmkbqtm-kivlg-lmxtwgumvb-252[tkefm] +udpsdjlqj-vfdyhqjhu-kxqw-pdqdjhphqw-439[dqhjp] +mbggf-ibuuf-mpuhujpun-695[gnpdh] +irdgrxzex-avccpsvre-ivtvzmzex-997[stcvr] +sawlkjevaz-ywjzu-opknwca-602[awjkz] +wlqqp-irsszk-tljkfdvi-jvimztv-217[mrqcl] +sehheiylu-tou-sedjqydcudj-192[teamg] +ajyqqgdgcb-pyzzgr-kylyeckclr-470[cjtul] +ziuxioqvo-moo-bziqvqvo-278[ixnjm] +vjpwncrl-kjbtnc-nwprwnnarwp-199[nwprc] +wpuvcdng-gii-hkpcpekpi-986[picgk] +dmybmsuzs-nmewqf-iadwetab-456[mabde] +rtqlgevkng-tcddkv-fgukip-830[juyzr] +votubcmf-dipdpmbuf-sfbdrvjtjujpo-727[rcslk] +vhkkhlbox-wrx-ftgtzxfxgm-163[txmwq] +zloolpfsb-mixpqfz-doxpp-qbzeklildv-289[lpozb] +rkpqxyib-zxkav-zlxqfkd-xkxivpfp-393[bpquj] +pbafhzre-tenqr-qlr-freivprf-455[byihv] +kzeed-hfsid-htfynsl-jslnsjjwnsl-905[egluv] +nlyoj-nzletyr-lylwjdtd-899[ymzvu] +laffe-pkrrehkgt-sgxqkzotm-800[gsdnt] +ynukcajey-xwogap-zaoecj-212[ewjah] +rgndvtcxr-bxaxipgn-vgpst-hrpktcvtg-wjci-sthxvc-661[zwgis] +ujqgywfau-vqw-vwnwdghewfl-580[istzh] +jyddc-tvsnigxmpi-fewoix-hiwmkr-178[idmwx] +fab-eqodqf-omzpk-etubbuzs-430[befoq] +ibghopzs-suu-fsoqeiwgwhwcb-792[qzyrk] +sedikcuh-whqtu-uww-vydqdsydw-166[dwuhq] +cjpibabsepvt-qmbtujd-hsbtt-tupsbhf-467[wsrek] +aietsrmdih-ikk-gsrxemrqirx-594[irekm] +bwx-amkzmb-jcvvg-bziqvqvo-694[vbmqz] +ixccb-exqqb-xvhu-whvwlqj-647[qxbch] +nwlddtqtpo-nlyoj-dezclrp-639[dlnop] +ahngzyzqcntr-azrjds-otqbgzrhmf-833[oquzx] +xcitgcpixdcpa-gpqqxi-ejgrwphxcv-193[cpxgi] +buzahisl-zjhclunly-obua-svnpzapjz-643[zalub] +excdklvo-mkxni-mykdsxq-nozkbdwoxd-458[fxjwy] +jvyyvzpcl-jyfvnlupj-msvdly-klclsvwtlua-253[injkl] +emixwvqhml-akidmvomz-pcvb-zmkmqdqvo-434[mvqdi] +dszphfojd-qmbtujd-hsbtt-sfbdrvjtjujpo-831[ykcho] +kwzzwaqdm-zijjqb-camz-bmabqvo-902[zabmq] +nvrgfezqvu-irsszk-jkfirxv-789[neysm] +yflexwxoalrp-zelzlixqb-jxohbqfkd-679[lxbef] +wfummczcyx-yaa-nluchcha-344[rmpgs] +tcfkqcevkxg-gii-ocpcigogpv-674[stfma] +nwzekwypera-ywjzu-ajcejaanejc-316[xoprq] +qzlozfhmf-idkkxadzm-btrsnldq-rdquhbd-105[pawus] +uqtqbizg-ozilm-kivlg-uizsmbqvo-356[xhvzm] +apuut-kgvnodx-bmvnn-mzvxlpdndodji-473[dnvmo] +wfummczcyx-dyffsvyuh-guhuaygyhn-500[yufhc] +cybyjqho-whqtu-shoewudys-vbemuh-tuiywd-842[huywb] +sedikcuh-whqtu-tou-jhqydydw-920[dhuqt] +zekvierkzferc-wcfnvi-ljvi-kvjkzex-815[ibzsg] +froruixo-udeelw-orjlvwlfv-777[zyusv] +oxmeeuruqp-ngzzk-qzsuzqqduzs-222[mcqzj] +gpewwmjmih-ikk-ywiv-xiwxmrk-568[uszki] +aietsrmdih-jpsaiv-wepiw-334[iaeps] +joufsobujpobm-cbtlfu-dvtupnfs-tfswjdf-441[fubjo] +xst-wigvix-hci-viwievgl-256[jnlst] +oknkvcta-itcfg-wpuvcdng-dwppa-qrgtcvkqpu-414[dcxst] +rnqnyfwd-lwfij-gfxpjy-htsyfnsrjsy-957[whlxr] +sbnqbhjoh-fhh-tbmft-181[jndic] +slqryzjc-afmamjyrc-qcptgacq-236[soytq] +rgllk-qss-ymdwqfuzs-768[ynsjx] +nwilwcejc-ywjzu-ykwpejc-pnwejejc-966[fthzx] +gokzyxsjon-lexxi-gybucryz-146[qomrj] +cybyjqho-whqtu-zubboruqd-cqhaujydw-192[naxrp] +esyfwlau-bwddqtwsf-vwkayf-294[acbmr] +shmml-rtt-znantrzrag-455[vseqh] +qlm-pbzobq-yrkkv-obpbxoze-601[lfewg] +fbebmtkr-zktwx-utldxm-ybgtgvbgz-995[stygr] +ikhcxvmbex-ietlmbv-zktll-vnlmhfxk-lxkobvx-943[lxkvb] +rgndvtcxr-hrpktcvtg-wjci-prfjxhxixdc-193[crxtd] +ucynmlgxcb-pyzzgr-kypicrgle-158[qtuyz] +wpuvcdng-lgnnadgcp-vtckpkpi-466[sftpn] +tfiifjzmv-treup-kirzezex-633[gjtxn] +cvabijtm-jiasmb-lmxizbumvb-356[axbtn] +xgvnndadzy-kgvnodx-bmvnn-yzkgjthzio-395[byaut] +rdchjbtg-vgpst-tvv-pcpanhxh-765[hptvc] +hqcfqwydw-isqludwuh-xkdj-cqhaujydw-322[mzgty] +hvbizodx-wvnfzo-gjbdnodxn-577[kljip] +udpsdjlqj-fruurvlyh-fdqgb-frdwlqj-vdohv-283[ktzrm] +xjmmjndqz-zbb-jkzmvodjin-707[jmzbd] +glrcplyrgmlyj-zsllw-nspafyqgle-184[ptidc] +zvyvgnel-tenqr-cebwrpgvyr-fpniratre-uhag-hfre-grfgvat-377[zesyf] +ubhatstkwhnl-vahvhetmx-wxitkmfxgm-605[qzvme] +iqmbazulqp-dmnnuf-ruzmzouzs-898[shtag] +surmhfwloh-gbh-ghsorbphqw-179[sickj] +htqtwkzq-uqfxynh-lwfxx-xjwanhjx-593[rwtbd] +kgjgrypw-epybc-njyqrga-epyqq-rpyglgle-600[jkcuz] +ktiaaqnqml-zijjqb-zmikycqaqbqwv-642[qaibj] +udglrdfwlyh-fdqgb-frdwlqj-sxufkdvlqj-803[cmkaq] +oxmeeuruqp-pkq-pqbmdfyqzf-196[qpefm] +dzczkrip-xiruv-sleep-ivjvrity-893[xjomn] +dmpuamofuhq-ymszqfuo-otaoaxmfq-fdmuzuzs-482[mufoa] +nbhofujd-ezf-tbmft-389[cjgtr] +uzfqdzmfuazmx-otaoaxmfq-iadwetab-820[afmzd] +froruixo-fdqgb-oderudwrub-205[ziyjo] +ugjjgkanw-kusnwfywj-zmfl-dstgjslgjq-840[nhxgt] +zhdsrqlchg-iorzhu-sxufkdvlqj-101[qtzca] +dsxxw-aylbw-amyrgle-qcptgacq-912[qdwmn] +veqtekmrk-hci-xiglrspskc-282[tfuln] +qcffcgwjs-forwcoqhwjs-rms-hfowbwbu-480[hgnsl] +jvsvymbs-jovjvshal-zhslz-539[ocmvj] +enqvbnpgvir-rtt-fuvccvat-195[nmrlc] +oxmeeuruqp-bxmefuo-sdmee-geqd-fqefuzs-170[uenfm] +wlsiayhcw-wfummczcyx-xsy-xyjfisgyhn-214[zpqtr] +jxdkbqfz-avb-obxznrfpfqflk-133[fbkqx] +zvyvgnel-tenqr-pnaql-bcrengvbaf-195[eghnt] +diozmivodjivg-ytz-vxlpdndodji-551[diovj] +jyddc-jpsaiv-ywiv-xiwxmrk-308[idjvw] +pbafhzre-tenqr-enoovg-hfre-grfgvat-403[erfga] +pbeebfvir-enoovg-ernpdhvfvgvba-793[vebfg] +wfummczcyx-zfiqyl-uhufsmcm-292[tvcdw] +kwvacumz-ozilm-zijjqb-ivitgaqa-746[iazjm] +udpsdjlqj-ixccb-sodvwlf-judvv-ghyhorsphqw-465[kgyhw] +tcrjjzwzvu-wcfnvi-rthlzjzkzfe-451[zjcfr] +qxdwpopgsdjh-rpcsn-htgkxrth-947[dkwlb] +yaxsnlcrun-kdwwh-bnaerlnb-953[zyncx] +zhdsrqlchg-vfdyhqjhu-kxqw-xvhu-whvwlqj-699[mriyj] +bkzrrhehdc-bgnbnkzsd-lzqjdshmf-417[izpxt] +nwzekwypera-fahhuxawj-wjwhuoeo-862[wsmnu] +zgmfyxypbmsq-bwc-rcaflmjmew-964[nmpwb] +guahyncw-wuhxs-wihnuchgyhn-188[vmayn] +kwtwznct-jcvvg-uizsmbqvo-980[ryzva] +udskkaxawv-lgh-kwujwl-uzgugdslw-vwhdgqewfl-138[trijm] +shoewudys-rkddo-huiuqhsx-868[tozlb] +bnknqetk-atmmx-rzkdr-183[zbyuw] +hwdtljsnh-idj-xytwflj-983[sztqp] +tipfxvezt-jtrmvexvi-ylek-cfxzjkztj-165[gwmzp] +clotzlnetgp-nsznzwlep-opdtry-327[khryz] +mhi-lxvkxm-bgmxkgtmbhgte-wrx-ltexl-449[cfrql] +hqtyeqsjylu-sxesebqju-cqdqwucudj-686[ngaly] +zlkprjbo-doxab-avb-ildfpqfzp-211[ponbm] +bqvvu-zua-ykjpwejiajp-420[mdlgx] +tfcfiwlc-treup-tfrkzex-drerxvdvek-841[fmlyq] +rmn-qcapcr-qaytclecp-fslr-bctcjmnkclr-652[zksta] +oazegyqd-sdmpq-nmewqf-xasuefuoe-248[qypjm] +kwtwznct-lgm-tijwzibwzg-278[ytdmc] +wlqqp-gcrjkzt-xirjj-rthlzjzkzfe-555[xzkhl] +gpewwmjmih-gerhc-erepcwmw-646[stnzy] +dmybmsuzs-qss-eqdhuoqe-144[sqdem] +yflexwxoalrp-zelzlixqb-qoxfkfkd-705[gtnxw] +votubcmf-cvooz-sftfbsdi-701[qhtkp] +iuruxlar-xghhoz-gtgreyoy-306[fnctb] +slqryzjc-bwc-qyjcq-574[pozts] +wdjcvuvmyjpn-nxvqzibzm-cpio-gjbdnodxn-525[pcmhn] +excdklvo-mkxni-mykdsxq-vklybkdybi-744[vmsba] +pybgmyargtc-hcjjwzcyl-sqcp-rcqrgle-912[nhxvg] +wifilzof-wuhxs-xypyfijgyhn-760[nuovc] +ktiaaqnqml-jcvvg-lmaqov-512[nwxms] +kfg-jvtivk-tyftfcrkv-crsfirkfip-945[fkirt] +tfiifjzmv-avccpsvre-ivjvrity-581[fnemb] +zotts-wuhxs-wiuncha-xyjfisgyhn-786[tzjse] +ynssr-ktuubm-phkdlahi-579[bemfv] +xlrypetn-mldvpe-dlwpd-145[rnfmz] +mfklstdw-wyy-wfyafwwjafy-840[lksij] +dsxxw-aylbw-amlryglkclr-938[larwx] +wyvqljapsl-msvdly-mpuhujpun-435[gzlnx] +bxaxipgn-vgpst-hrpktcvtg-wjci-steadnbtci-323[tcgip] +oxjmxdfkd-mixpqfz-doxpp-abpfdk-471[dpxfk] +tipfxvezt-szfyrqriuflj-avccpsvre-ivrthlzjzkzfe-321[zfrve] +qyujihctyx-mwupyhayl-bohn-uwkocmcncih-708[chyui] +zilqwikbqdm-kivlg-apqxxqvo-434[obtmp] +willimcpy-luvvcn-qilembij-578[ilcmv] +rflsjynh-kqtbjw-ijxnls-437[zskut] +jsvagsulanw-hdsklau-yjskk-klgjsyw-814[uzmvg] +oknkvcta-itcfg-tcddkv-yqtmujqr-908[zdync] +zvyvgnel-tenqr-pnaql-pbngvat-qrcyblzrag-741[gvtck] +xjgjmapg-zbb-adivixdib-395[ovzan] +gvcskirmg-tpewxmg-kveww-wlmttmrk-464[szvty] +gpewwmjmih-gerhc-gsexmrk-wlmttmrk-620[fqrba] +jchipqat-gpqqxi-jhtg-ithixcv-661[ihqtc] +bjfutsneji-ojqqdgjfs-ijufwyrjsy-619[jfsiq] +gvcskirmg-fyrrc-hitpscqirx-308[kwgpv] +mvhkvbdib-wpiit-rjmfncjk-525[stlem] +bnqqnrhud-qzaahs-cdrhfm-339[pbsax] +qfmcusbwq-qvcqczohs-rsgwub-116[qcsbu] +qyujihctyx-yaa-guhuaygyhn-734[yahug] +jqwpihizlwca-kivlg-kwibqvo-uizsmbqvo-616[qozkj] +nglmtuex-vtgwr-ybgtgvbgz-865[gtbve] +encuukhkgf-ecpfa-eqcvkpi-yqtmujqr-414[cekqu] +jchipqat-ytaanqtpc-tcvxcttgxcv-375[jnfcy] +mvydjvxodqz-xviyt-xjvodib-vxlpdndodji-915[spxnt] +wfintfhynaj-hmthtqfyj-xmnuunsl-151[nfhtj] +pynffvsvrq-sybjre-ratvarrevat-611[rvaef] +hplazytkpo-dnlgpyrpc-sfye-nfdezxpc-dpcgtnp-327[uzifr] +cybyjqho-whqtu-vbemuh-qdqboiyi-374[zlsdw] +yhkpvhjapcl-wshzapj-nyhzz-svnpzapjz-825[bpcty] +zhdsrqlchg-mhoobehdq-fxvwrphu-vhuylfh-179[hdflo] +ynukcajey-ywjzu-ykwpejc-qoan-paopejc-238[bpemf] +vehmsegxmzi-gerhc-gsexmrk-pefsvexsvc-256[umtvy] +lugjuacha-jfumncw-alumm-uwkocmcncih-240[bzlaw] +nvrgfezqvu-jtrmvexvi-ylek-jkfirxv-165[ywnzb] +fhezusjybu-uww-fkhsxqiydw-920[hgusy] +bgmxkgtmbhgte-vahvhetmx-hixktmbhgl-189[ebaun] +apwmeclga-afmamjyrc-pcqcypaf-496[uyatz] +pdjqhwlf-vfdyhqjhu-kxqw-whfkqrorjb-829[xogzy] +crwwv-rkpqxyib-zxkav-rpbo-qbpqfkd-289[bkpqr] +tfcfiwlc-irsszk-kvtyefcfxp-893[fciks] +lejkrscv-wcfnvi-ivjvrity-191[uyalq] +ktfitzbgz-unggr-inkvatlbgz-111[lmwni] +fodvvlilhg-fdqgb-frdwlqj-frqwdlqphqw-205[kxstn] +odkasqzuo-bxmefuo-sdmee-fqotzaxask-638[oaesd] +pdjqhwlf-fdqgb-frdwlqj-rshudwlrqv-569[xcdnu] +ckgvutofkj-vrgyzoi-mxgyy-jkvgxzsktz-592[murta] +eza-dpncpe-mtzslklcozfd-clmmte-dezclrp-353[celzd] +vehmsegxmzi-nippcfier-wxsveki-516[vqrpz] +rflsjynh-jll-ijufwyrjsy-853[taqil] +jvyyvzpcl-msvdly-hjxbpzpapvu-513[nyxtz] +iehepwnu-cnwza-fahhuxawj-oanreyao-264[ulyvn] +gcfcnuls-aluxy-wbiwifuny-omyl-nymncha-526[snoxf] +oaxadrgx-dmpuamofuhq-omzpk-etubbuzs-638[uamob] +oxmeeuruqp-nmewqf-dqeqmdot-352[kjtia] +bqxnfdmhb-dff-btrsnldq-rdquhbd-521[iyjvl] +joufsobujpobm-fhh-pqfsbujpot-701[obfjp] +hafgnoyr-pnaql-pbngvat-fnyrf-845[vtsod] +mhi-lxvkxm-wrx-kxvxbobgz-657[npmfu] +jrncbavmrq-pnaql-chepunfvat-299[tnzyx] +xgsvgmotm-lruckx-gtgreyoy-566[cuxte] +vcibutulxiom-wbiwifuny-xyjfisgyhn-994[uayrz] +wyvqljapsl-zjhclunly-obua-vwlyhapvuz-123[stmdx] +tvsnigxmpi-jpsaiv-stivexmsrw-568[lhxnw] +bnqqnrhud-azrjds-cdrhfm-703[pozyr] +mfklstdw-tmffq-ugflsafewfl-164[flmst] +tcorcikpi-hnqygt-fgukip-778[hzsum] +amppmqgtc-hcjjwzcyl-qfgnngle-262[yfnvu] +ynssr-vtgwr-ehzblmbvl-631[zxbiy] +slqryzjc-aylbw-amyrgle-dglylagle-938[lyage] +vrurcjah-pajmn-snuuhknjw-jwjuhbrb-745[dphsv] +oaddaeuhq-eomhqzsqd-tgzf-etubbuzs-222[inrke] +yrwxefpi-veffmx-qerekiqirx-542[efirx] +nchhg-rmttgjmiv-bziqvqvo-304[vghim] +vkppo-vbemuh-efuhqjyedi-244[fetmj] +tyepcyletzylw-nlyoj-nzletyr-qtylyntyr-379[ngrvh] +otzkxtgzoutgr-hatte-giwaoyozout-228[tjxcr] +rgllk-eomhqzsqd-tgzf-pqbxakyqzf-534[lzpxc] +zgmfyxypbmsq-zyqicr-jyzmpyrmpw-704[ewjdl] +vehmsegxmzi-gerhc-gsexmrk-qevoixmrk-204[tyisn] +lugjuacha-zfiqyl-xyjfisgyhn-890[fcsxk] +qjopwxha-ywjzu-ykwpejc-zaoecj-810[rvmet] +bnknqetk-sno-rdbqds-idkkxadzm-knfhrshbr-521[kdnbr] +ksodcbwnsr-tzcksf-cdsfohwcbg-818[mnker] +vdzonmhydc-rbzudmfdq-gtms-lzqjdshmf-183[abjvy] +wfummczcyx-luvvcn-yhachyylcha-630[cyhal] +zvyvgnel-tenqr-rtt-freivprf-351[zymsx] +fhezusjybu-sqdto-jusxdebewo-972[amzjn] +amjmpdsj-zyqicr-cleglccpgle-106[vdopa] +hjgbwuladw-wyy-kwjnauwk-502[mrbin] +willimcpy-vohhs-mbcjjcha-734[vsbfq] +xjgjmapg-xcjxjgvoz-omvdidib-317[wynjr] +htqtwkzq-idj-xytwflj-385[tjqwd] +ynssr-xzz-xgzbgxxkbgz-579[nsivc] +xgvnndadzy-agjrzm-rjmfncjk-473[toazb] +pbeebfvir-sybjre-fuvccvat-533[stklm] +jvuzbtly-nyhkl-ibuuf-aljouvsvnf-851[lmnuf] +ziuxioqvo-ntwemz-uiviomumvb-902[arxeu] +vrurcjah-pajmn-ajkkrc-mnbrpw-589[qmtsy] +dwbcjkun-bljenwpna-qdwc-vjwjpnvnwc-537[nwjcb] +oxjmxdfkd-mixpqfz-doxpp-jxkxdbjbkq-913[xdjkp] +mvkccspson-mkxni-mykdsxq-vyqscdsmc-432[stfwy] +rflsjynh-htwwtxnaj-jll-qtlnxynhx-879[jsdzt] +pelbtravp-onfxrg-chepunfvat-663[hazbg] +zbytomdsvo-zvkcdsm-qbkcc-vyqscdsmc-692[csdmv] +qspkfdujmf-fhh-vtfs-uftujoh-415[nmzht] +aczupnetwp-nlyoj-qtylyntyr-405[tjvzp] +gsvvswmzi-jyddc-glsgspexi-wxsveki-646[puyzv] +rgndvtcxr-eaphixr-vgphh-sthxvc-973[ijhlr] +dyz-combod-mrymyvkdo-domrxyvyqi-250[pjlom] +xst-wigvix-fewoix-jmrergmrk-646[irxeg] +xgsvgmotm-kmm-iutzgotsktz-436[mtgko] +nzwzcqfw-awldetn-rcldd-nzyeltyxpye-769[delnw] +crwwv-oxyyfq-rpbo-qbpqfkd-393[qbfop] +wlsiayhcw-jfumncw-alumm-lywycpcha-344[wfzqm] +qfkkj-fydelmwp-nlyoj-nzletyr-cpnptgtyr-951[oxpuz] +qcffcgwjs-qobrm-rsdofhasbh-376[zwyat] +jshzzpmplk-pualyuhapvuhs-yhiipa-zopwwpun-669[simvn] +nglmtuex-wrx-kxvxbobgz-735[phwgz] +oaxadrgx-nmewqf-abqdmfuaze-404[tysvj] +vkppo-zubboruqd-qdqboiyi-998[dhjui] +ajvyjprwp-snuuhknjw-dbna-cnbcrwp-667[ziuhp] +pybgmyargtc-zsllw-bcnjmwkclr-314[mnhck] +pkl-oaynap-xwogap-opknwca-992[nhagy] +hafgnoyr-onfxrg-znexrgvat-741[cywdg] +vkppo-sqdto-ijehqwu-816[opqde] +jvsvymbs-jhukf-zavyhnl-409[vhjsy] +hqtyeqsjylu-cqwdujys-tou-husuylydw-686[kcdsj] +awzwhofm-ufors-pibbm-rsdofhasbh-298[bfhos] +xjinphzm-bmvyz-nxvqzibzm-cpio-mznzvmxc-161[oslup] +tfejldvi-xiruv-wcfnvi-fgvirkzfej-529[sgtbw] +qlm-pbzobq-ciltbo-pxibp-185[zjmpt] +guahyncw-xsy-xymcah-630[fckyn] +lahxpnwrl-ljwmh-jlzdrbrcrxw-407[lrwhj] +dmybmsuzs-omzpk-ogefayqd-eqdhuoq-222[mctji] +forwcoqhwjs-pibbm-twbobqwbu-480[bwoqc] +mhi-lxvkxm-lvtoxgzxk-angm-xgzbgxxkbgz-839[lczyd] +iqmbazulqp-rxaiqd-mocgueufuaz-378[ygdtb] +plolwdub-judgh-udeelw-uhfhlylqj-309[ludhe] +raphhxuxts-hrpktcvtg-wjci-htgkxrth-739[htrxc] +pybgmyargtc-hcjjwzcyl-rcaflmjmew-548[ajlkr] +lnkfaypeha-ywjzu-ykwpejc-ykjpwejiajp-368[jpyae] +vehmsegxmzi-gerhc-gsexmrk-hizipstqirx-100[jzboa] +pdjqhwlf-frqvxphu-judgh-iorzhu-frqwdlqphqw-725[yijon] +kzgwomvqk-kivlg-kwibqvo-ivitgaqa-720[zjyxm] +xqvwdeoh-surmhfwloh-fkrfrodwh-dqdobvlv-855[xwtjs] +xgsvgmotm-igtje-iugzotm-sgxqkzotm-228[ygzda] +lxwbdvna-pajmn-snuuhknjw-bcxajpn-953[yxark] +oaddaeuhq-omzpk-oamfuzs-mocgueufuaz-326[odcqb] +jyddc-ikk-hitevxqirx-750[btmqn] +oaddaeuhq-rxaiqd-fqotzaxask-586[slgad] +kwzzwaqdm-moo-nqvivkqvo-798[epnyr] +fydelmwp-nsznzwlep-opalcexpye-847[ltbwy] +dszphfojd-cbtlfu-tupsbhf-415[fbdhp] +hqcfqwydw-rkddo-skijecuh-iuhlysu-114[ynqsd] +ixeumktoi-inuiurgzk-uvkxgzouty-410[acqzt] +wlqqp-avccpsvre-wzeretzex-347[bgzvw] +vdzonmhydc-bzmcx-bnmszhmldms-157[rspcq] +fodvvlilhg-mhoobehdq-whfkqrorjb-699[defpm] +gntmfefwitzx-ojqqdgjfs-qfgtwfytwd-827[sypzf] +nzydfxpc-rclop-mfyyj-wlmzclezcj-769[clyzf] +zuv-ykixkz-pkrrehkgt-rumoyzoiy-852[yhkru] +aietsrmdih-glsgspexi-vigimzmrk-802[sgnmt] +rgndvtcxr-hrpktcvtg-wjci-igpxcxcv-245[xszoq] +nwzekwypera-xqjju-skngodkl-758[kejnw] +hcd-gsqfsh-rms-rsdzcmasbh-974[vtsqm] +qspkfdujmf-dboez-mphjtujdt-935[diolt] +aczupnetwp-nlyoj-afcnsldtyr-665[zemik] +aoubshwq-qobrm-qcohwbu-rsdofhasbh-376[wyzxl] +xtwtelcj-rclop-ncjzrpytn-ojp-qtylyntyr-353[lyris] +zvyvgnel-tenqr-pelbtravp-rtt-fnyrf-819[fjysz] +ejpanjwpekjwh-bhksan-paydjkhkcu-420[jkahp] +ygcrqpkbgf-hnqygt-hkpcpekpi-882[pgkch] +raphhxuxts-gpqqxi-pcpanhxh-817[qinta] +gsvvswmzi-wgezirkiv-lyrx-stivexmsrw-646[isvrw] +htqtwkzq-kqtbjw-fsfqdxnx-307[ytxis] +oqnidbshkd-eknvdq-cdozqsldms-833[dqskn] +qxdwpopgsdjh-hrpktcvtg-wjci-hidgpvt-219[tdlsw] +fnjyxwrinm-snuuhknjw-jwjuhbrb-459[vjwxy] +egdytrixat-eaphixr-vgphh-stepgibtci-609[vrzoq] +veqtekmrk-fewoix-pskmwxmgw-906[ekmwx] +xmrrq-eadalsjq-yjsvw-usfvq-vwnwdghewfl-502[wqsva] +dpotvnfs-hsbef-gvaaz-sbccju-tfswjdft-649[lbipa] +zvyvgnel-tenqr-enoovg-ybtvfgvpf-637[kchij] +pynffvsvrq-cynfgvp-tenff-ybtvfgvpf-247[dcwfm] +xjinphzm-bmvyz-xviyt-xjvodib-zibdizzmdib-187[gbnqs] +ugfkmewj-yjsvw-hdsklau-yjskk-dgyaklauk-502[kajsu] +iruzfrtkzmv-sleep-tljkfdvi-jvimztv-269[vitze] +sawlkjevaz-oywrajcan-dqjp-hkceopeyo-550[gvitx] +wfummczcyx-wifilzof-vumeyn-ijyluncihm-604[lnmdw] +lahxpnwrl-kdwwh-xynajcrxwb-927[xykwv] +xekdwvwnzkqo-fahhuxawj-oanreyao-836[xnzsy] +mbiyqoxsm-bkllsd-bokmaescsdsyx-718[thcfp] +uiovmbqk-zijjqb-zmamizkp-746[xpstr] +nglmtuex-vkrhzxgbv-xzz-ehzblmbvl-293[zblvx] +xgvnndadzy-kgvnodx-bmvnn-xpnojhzm-nzmqdxz-577[qgfhc] +zntargvp-ohaal-jbexfubc-975[vflzg] +vqr-ugetgv-tcddkv-gpikpggtkpi-830[zlyxv] +qfkkj-nsznzwlep-nzyeltyxpye-847[satrm] +dwbcjkun-yujbcrl-pajbb-fxatbqxy-225[glisn] +tyftfcrkv-tljkfdvi-jvimztv-113[tvfij] +hjgbwuladw-ugjjgkanw-tskcwl-suimakalagf-450[cneum] +vkrhzxgbv-wrx-etuhktmhkr-397[fnspx] +elrkdcdugrxv-zhdsrqlchg-edvnhw-vklsslqj-933[dlhrs] +etaqigpke-lgnnadgcp-uvqtcig-752[ojdgw] +nsyjwsfyntsfq-hmthtqfyj-ywfnsnsl-385[sfnyt] +bnmrtldq-fqzcd-bgnbnkzsd-sqzhmhmf-833[jipnm] +fkqbokxqflkxi-bdd-xkxivpfp-471[rjlxc] +lnkfaypeha-bhksan-hwxknwpknu-316[nsoam] +pelbtravp-ohaal-erprvivat-221[kdvcs] +dfcxsqhwzs-qobrm-qcohwbu-ghcfous-350[choqs] +ejpanjwpekjwh-xwogap-ajcejaanejc-706[dtcks] +gzefmnxq-rxaiqd-pqhqxabyqzf-638[yntmj] +awzwhofm-ufors-qobrm-qcohwbu-hsqvbczcum-454[tfiay] +yknnkoera-yhwooebeaz-lhwopey-cnwoo-klanwpekjo-420[fqbwp] +bkzrrhehdc-bzmcx-bnzshmf-cdoknxldms-183[bcdhm] +htqtwkzq-jll-jslnsjjwnsl-905[oicay] +npmhcargjc-bwc-sqcp-rcqrgle-834[thaxs] +njmjubsz-hsbef-dboez-dvtupnfs-tfswjdf-909[qkeyv] +qyujihctyx-wuhxs-wiuncha-nywbhifias-994[hiuwy] +vetllbybxw-unggr-phkdlahi-475[rqpto] +etyyx-dff-qdzbpthrhshnm-313[zpisy] +ijmockjgz-jwezxo-nojmvbz-993[jozmb] +xgvnndadzy-ytz-mznzvmxc-343[uhztm] +pxtihgbsxw-yehpxk-wxitkmfxgm-189[clynd] +tfiifjzmv-treup-tfekrzedvek-711[gptfw] +sedikcuh-whqtu-rqiauj-iuhlysui-660[znymv] +ktwbhtvmbox-ynssr-cxeeruxtg-tvjnblbmbhg-813[kdico] +xst-wigvix-wgezirkiv-lyrx-tyvglewmrk-542[igrvw] +gzefmnxq-fab-eqodqf-pkq-pqhqxabyqzf-222[examq] +ncjzrpytn-nlyoj-nzletyr-ecltytyr-925[jybxu] +mvkccspson-lexxi-crszzsxq-588[jirxq] +zbytomdsvo-bkllsd-ecob-docdsxq-640[getaf] +willimcpy-luvvcn-mbcjjcha-552[snrxz] +htsxzrjw-lwfij-gntmfefwitzx-hfsid-htfynsl-xmnuunsl-307[fnsth] +iuruxlar-jek-jkvruesktz-306[btnac] +cqwdujys-rqiauj-efuhqjyedi-166[rgncm] +dpssptjwf-dipdpmbuf-sfbdrvjtjujpo-623[yeftd] +pbybeshy-onfxrg-qrfvta-195[wmjer] +laffe-pkrrehkgt-uvkxgzouty-644[kefgr] +rnqnyfwd-lwfij-jll-fhvznxnynts-723[qmybf] +dyz-combod-lkcuod-wkbuodsxq-354[suqhl] +gpewwmjmih-veffmx-ywiv-xiwxmrk-464[zyowm] +xfbqpojafe-cvooz-bdrvjtjujpo-363[qgvxl] +wyvqljapsl-kfl-huhsfzpz-435[yomjs] +hqcfqwydw-rqiauj-huiuqhsx-478[kxtls] +ajyqqgdgcb-zsllw-qrmpyec-392[nztsu] +luxciuwncpy-zfiqyl-xypyfijgyhn-838[bzpxo] +kdijqrbu-fbqijys-whqii-udwyduuhydw-556[ihdkv] +mfklstdw-bwddqtwsf-ghwjslagfk-450[esbmd] +lugjuacha-dyffsvyuh-nywbhifias-578[snqwt] +ibghopzs-qobrm-qcohwbu-fsoqeiwgwhwcb-298[ndtlm] +nwilwcejc-oywrajcan-dqjp-hkceopeyo-394[cejow] +vqr-ugetgv-tcddkv-ucngu-258[xetvd] +rtt-genvavat-975[taveg] +willimcpy-dyffsvyuh-xyjfisgyhn-656[mrjtz] +dmbttjgjfe-njmjubsz-hsbef-gmpxfs-dpoubjonfou-779[yakzv] +muqfedyput-rqiauj-kiuh-juijydw-660[rkonp] +pkl-oaynap-fahhuxawj-odellejc-342[xmeyn] +qlm-pbzobq-yrkkv-pbosfzbp-315[bpkoq] +wihmogyl-aluxy-vumeyn-ijyluncihm-292[yilmu] +mvydjvxodqz-wvnfzo-nvgzn-291[vnzdo] +ikhcxvmbex-ktuubm-hixktmbhgl-215[bhkmx] +willimcpy-vohhs-xypyfijgyhn-136[pmnwz] +ynukcajey-xwogap-skngodkl-394[enjif] +ynukcajey-xqjju-zalwnpiajp-394[kzjlp] +yhtwhnpun-jovjvshal-hjxbpzpapvu-539[ycldk] +nglmtuex-ktuubm-ybgtgvbgz-397[qvtsp] +cvabijtm-rmttgjmiv-lmxtwgumvb-174[zpytf] +fnjyxwrinm-ajkkrc-mnyuxhvnwc-459[molxs] +mybbycsfo-mkxni-yzobkdsyxc-614[ybckm] +ugdgjxmd-kusnwfywj-zmfl-ghwjslagfk-840[gfjwd] +wbhsfbohwcboz-dzoghwq-ufogg-cdsfohwcbg-766[obghw] +qekrixmg-ikk-qerekiqirx-334[aeldt] +ktwbhtvmbox-mhi-lxvkxm-utldxm-lmhktzx-657[yqjuz] +ugdgjxmd-wyy-klgjsyw-216[gydjw] +ucynmlgxcb-cee-pcacgtgle-704[tonxb] +nsyjwsfyntsfq-hmthtqfyj-ijxnls-931[rdmog] +enzcntvat-ohaal-ybtvfgvpf-455[cvmts] +aczupnetwp-nsznzwlep-dlwpd-483[ticoy] +wbhsfbohwcboz-pibbm-cdsfohwcbg-350[oebpc] +shmml-cynfgvp-tenff-znexrgvat-715[fyuze] +sedikcuh-whqtu-uww-huiuqhsx-582[ytsoz] +ynukcajey-pkl-oaynap-xwogap-nayaerejc-550[mnfkp] +ipvohghykvbz-zjhclunly-obua-huhsfzpz-851[mecug] +tbxmlkfwba-oxyyfq-ixyloxqlov-783[woqrj] +zilqwikbqdm-kpwkwtibm-abwziom-954[yzmul] +kwvacumz-ozilm-zijjqb-apqxxqvo-590[dojfm] +bqxnfdmhb-bgnbnkzsd-sdbgmnknfx-547[ajynr] +sbnqbhjoh-dmbttjgjfe-dipdpmbuf-gjobodjoh-103[bjdoh] +jsvagsulanw-usfvq-vwhsjlewfl-268[kiwfy] +mbggf-buzahisl-lnn-wbyjohzpun-539[bnghl] +htwwtxnaj-jll-ijajqturjsy-411[zhgpj] +amppmqgtc-aylbw-amyrgle-pcacgtgle-496[agclm] +jchipqat-uadltg-detgpixdch-895[wogif] +ktfitzbgz-unggr-tgterlbl-605[wjmxs] +yhwooebeaz-ywjzu-ykwpejc-bejwjyejc-498[sgtmz] +muqfedyput-fbqijys-whqii-cqhaujydw-634[pcekt] +udskkaxawv-mfklstdw-hdsklau-yjskk-dstgjslgjq-840[xeguw] +hqfxxnknji-kqtbjw-qfgtwfytwd-983[fqtwj] +veqtekmrk-fyrrc-eguymwmxmsr-490[stfrm] +awzwhofm-ufors-ksodcbwnsr-tzcksf-gozsg-298[sofwz] +tinnm-gqojsbusf-vibh-gsfjwqsg-714[dczyw] +nuatmlmdpage-ngzzk-pqbxakyqzf-456[azgkm] +htsxzrjw-lwfij-kqtbjw-jslnsjjwnsl-255[ldqwi] +zotts-zfiqyl-lywycpcha-136[fwujm] +odiih-kdwwh-ldbcxvna-bnaerln-927[dnabh] +nuatmlmdpage-dmnnuf-xasuefuoe-586[atenm] +qxdwpopgsdjh-rpcsn-rdpixcv-htgkxrth-739[pkxqs] +iruzfrtkzmv-sleep-rthlzjzkzfe-633[ykopj] +ejpanjwpekjwh-nwxxep-zaoecj-550[ejpwa] +rwcnawjcrxwju-kdwwh-cnlqwxuxph-979[genou] +rwcnawjcrxwju-lqxlxujcn-mnyuxhvnwc-719[wxnmk] +qlm-pbzobq-avb-jxohbqfkd-601[mzylk] +lqwhuqdwlrqdo-vfdyhqjhu-kxqw-frqwdlqphqw-881[qwdhl] +udglrdfwlyh-gbh-ilqdqflqj-439[otyms] +hvbizodx-ezggtwzvi-nojmvbz-473[isoun] +dzczkrip-xiruv-vxx-ivtvzmzex-763[yblku] +oaxadrgx-bxmefuo-sdmee-xasuefuoe-222[exaou] +bnmrtldq-fqzcd-bzmcx-vnqjrgno-287[odhcx] +wifilzof-wbiwifuny-lyuwkocmcncih-864[iwcfl] +ynukcajey-ydkykhwpa-yqopkian-oanreya-654[cghze] +egdytrixat-qjccn-bpgztixcv-349[ctgix] +slqryzjc-cee-kypicrgle-210[gqknl] +jef-iushuj-rqiauj-iqbui-296[mzxhd] +qcffcgwjs-gqojsbusf-vibh-gozsg-220[gsfbc] +eadalsjq-yjsvw-usfvq-ugslafy-vwnwdghewfl-606[kyzev] +willimcpy-jfumncw-alumm-xymcah-318[mclai] +excdklvo-bkllsd-vklybkdybi-432[hrznt] +gntmfefwitzx-gzssd-xjwanhjx-801[xfgjn] +qzoggwtwsr-xszzmpsob-fsgsofqv-636[cthmf] +houngfgxjuay-hgyqkz-xkykgxin-332[spxuj] +oaxadrgx-eomhqzsqd-tgzf-qzsuzqqduzs-638[meluy] +qzoggwtwsr-qobrm-rsdzcmasbh-740[fwsan] +bkzrrhehdc-sno-rdbqds-qzaahs-vnqjrgno-339[rdhnq] +excdklvo-cmkfoxqob-rexd-zebmrkcsxq-458[xaqgb] +oknkvcta-itcfg-uecxgpigt-jwpv-fgukip-856[gcikp] +shoewudys-rkddo-qdqboiyi-530[doiqs] +mrxivrexmsrep-gerhc-pefsvexsvc-828[ubzia] +fydelmwp-mfyyj-hzcvdsza-769[anbml] +rwcnawjcrxwju-ljwmh-bqryyrwp-277[nxatm] diff --git a/d04/src/main.rs b/d04/src/main.rs new file mode 100644 index 0000000..2369431 --- /dev/null +++ b/d04/src/main.rs @@ -0,0 +1,135 @@ +use std::collections::HashMap; +use std::fs; + +fn sector_if_valid(room: &str) -> Option<u32> { + let mut letters = HashMap::new(); + let mut sector = String::new(); + let mut checksum = ""; + + for (i, c) in room.chars().enumerate() { + if c.is_ascii_lowercase() { + // Keep track of each letter's frequency + let count = letters.entry(c).or_insert(0); + *count += 1; + } else if c.is_ascii_digit() { + // Store the sector ID number + sector.push(c); + } else if c == '[' { + // Checksum is 5 characters in square brackets + checksum = &room[i + 1..i + 6]; + break; + } + } + + // Check if this room's checksum is valid + for c in checksum.chars() { + // Expect the most common letters, in alphabetical order if tied: + // score = 100 * frequency - alphabet index - constant + let &expected = letters + .iter() + .max_by_key(|x| 100 * x.1 - x.0.to_digit(36).unwrap()) + .unwrap() + .0; + letters.remove(&c); + + if c != expected { + return None; + } + } + + Some(sector.parse().unwrap()) +} + +fn solve_part1(lines: &Vec<&str>) -> u32 { + let mut total = 0; + + for room in lines { + let sec = sector_if_valid(room); + if sec.is_some() { + total += sec.unwrap(); + } + } + + total +} + +fn solve_part2(lines: &Vec<&str>) -> Option<u32> { + for line in lines { + let osector = sector_if_valid(line); + if osector.is_none() { + continue; + } + + // Extract ciphertext from `line' + let mut ctext = String::new(); + for c in line.chars() { + if c.is_ascii_digit() { + break; + } + ctext.push(c); + } + // Ignore last '-' before sector ID + ctext.pop(); + + // Decrypt ciphertext into plaintext + let mut ptext = String::new(); + for c in ctext.chars() { + if c == '-' { + ptext.push(' '); + } else { + // Apply shift cipher (shift by sector ID) + let old = c.to_digit(36).unwrap() - 10; + let new = (old + osector.unwrap()) % 26; + ptext.push(char::from_digit(new + 10, 36).unwrap()); + } + } + + // Right name found by inspecting decrypted list by eye + if ptext == "northpole object storage" { + return osector; + } + } + + None // shouldn't happen +} + +fn main() { + // Read room list from input text file + let input = fs::read_to_string("input.txt").unwrap(); + let lines = input.lines().collect(); + + // Part 1 gives 158835 for me + println!("Part 1 solution: {}", solve_part1(&lines)); + + // Part 2 gives 993 for me + println!("Part 2 solution: {}", solve_part2(&lines).unwrap()); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn part1_example1() { + let lines = vec!["aaaaa-bbb-z-y-x-123[abxyz]"]; + assert_eq!(solve_part1(&lines), 123); + } + + #[test] + fn part1_example2() { + let lines = vec!["a-b-c-d-e-f-g-h-987[abcde]"]; + assert_eq!(solve_part1(&lines), 987); + } + + #[test] + fn part1_example3() { + let lines = vec!["not-a-real-room-404[oarel]"]; + assert_eq!(solve_part1(&lines), 404); + } + + #[test] + fn part1_example4() { + let lines = vec!["totally-real-room-200[decoy]"]; + assert_eq!(solve_part1(&lines), 0); + } +} diff --git a/d05/Cargo.toml b/d05/Cargo.toml new file mode 100644 index 0000000..38415e6 --- /dev/null +++ b/d05/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "d05" +version = "0.1.0" +edition = "2021" + +[dependencies] +md5 = "0.7.0" diff --git a/d05/src/main.rs b/d05/src/main.rs new file mode 100644 index 0000000..25986ef --- /dev/null +++ b/d05/src/main.rs @@ -0,0 +1,86 @@ +use md5; + +fn solve_part1(seed: &str) -> String { + let mut passw = String::new(); + + let mut i = 0; + loop { + let data = format!("{}{}", seed, i.to_string()); + let hash = format!("{:x}", md5::compute(data)); + + // We've mined a block, so-- wait wrong software + if hash.starts_with("00000") { + passw.push(hash.chars().nth(5).unwrap()); + if passw.len() >= 8 { + break; + } + } + + i += 1; + } + + passw +} + +fn solve_part2(seed: &str) -> String { + // We'll replace each `x' with the true character + let mut passw = String::from("xxxxxxxx"); + + let mut i = 0; + loop { + let data = format!("{}{}", seed, i.to_string()); + let hash = format!("{:x}", md5::compute(data)); + + // I wonder how this loop affects global power consumption... + if hash.starts_with("00000") { + let c = hash.chars().nth(5).unwrap(); + if c.is_ascii_digit() { + // Get index of character to replace + let k = String::from(c).parse().unwrap(); + + // Is `k' in bounds, and haven't we replaced `passw[k]' already? + if k < 8 && passw.chars().nth(k).unwrap() == 'x' { + let s = String::from(hash.chars().nth(6).unwrap()); + passw.replace_range(k..k + 1, &s); + + // Have we replaced all characters in `passw'? + if !passw.contains('x') { + break; + } + } + } + } + + i += 1; + } + + passw +} + +fn main() { + // My personal input ID + let id = "ugkcyxxp"; + + // Part 1 gives "d4cd2ee1" for me + println!("Part 1 solution: {}", solve_part1(id)); + + // Part 2 gives "f2c730e5" for me + println!("Part 2 solution: {}", solve_part2(id)); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn part1_example1() { + let id = "abc"; + assert_eq!(solve_part1(id), "18f47a30"); + } + + #[test] + fn part2_example1() { + let id = "abc"; + assert_eq!(solve_part2(id), "05ace8e3"); + } +} diff --git a/d06/Cargo.toml b/d06/Cargo.toml new file mode 100644 index 0000000..193d51a --- /dev/null +++ b/d06/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "d06" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/d06/input.txt b/d06/input.txt new file mode 100644 index 0000000..c223f71 --- /dev/null +++ b/d06/input.txt @@ -0,0 +1,572 @@ +drhqjkbv +dtmukohn +pblnptvr +rggqrqre +ihknljci +ncoeigib +qbmbrgzv +zfahdmvg +mblaahfc +irafzbak +wghpbuwg +pyijzopp +dxpqsjkd +nhrosahg +ekfkwiqi +khgwbxsz +fkkinvci +xlmjkxql +rvzsdcve +josyoqlp +wnyzmbhh +bvkkwyxp +zdnlhnlv +hbgmztkb +yugdjalz +ittbvkxm +pbnxevdt +fptnvjdb +dsypeozk +gcjmtlcc +pqsnuztm +meilciol +uolptcbc +jueofzif +mryrumjt +jxmdacbz +plraftrm +ljgrwfiz +ligncqig +hrcmfkwa +kraqruef +mawxovke +fgwermvq +ipfzrpoz +rhfgebjy +ltqkdjag +dvgdhywz +ojnzjack +ktnqjzlc +uvcyfogs +anqjxrbb +rqedwxhi +iliuzgff +lanioopk +kbcwlndi +wuzfguwq +oclgdxdn +euqmnjxb +rwgdgwac +gepgmuuw +xmsfhugr +cmmgvoza +mrdnpirq +muorgsxa +awdmmpth +abwkhkot +hlztzuhm +qwbxfktf +gkdslbhk +rqppdpfj +juuuxmwh +sprwgdoi +eptrqcap +fdtoubid +lnkxrjrr +yxxiuuzb +kcbgcuno +ssszanxv +xajngqze +dqprwcbs +tmehzhsh +eeooqhko +eacbmenw +qpbwiznc +hoofmvah +noicaaqv +reqwbpnl +ctfbzydf +kkjvsvob +pwkramtw +txsebrtx +wpxomtjx +xwcxfihp +iabaswyj +ubvgfrsw +yhxvrlwg +kyighkhi +kfmcjeci +wtxvnufi +eggyqgwj +azywqbdk +egwprvgp +gxtgzqek +hbypquhd +oqbpykib +bsaybmgo +ctzhjzgf +uqcatiea +fkquufln +mzuepzcn +rwteqddf +uandcifd +chqjvavf +xrugbecb +bynqmlhg +keruzmmy +tpxbrwkw +czawkslt +duunzdgl +mhhrgsfi +lhiorqvn +uroxbpki +uyqvmdvr +wbvzxinc +hvjbywqh +opztxiye +jnkvbsss +awfhhjuh +wldwnsms +vzdtdfzz +qcgjdsxf +ncungtbd +bsfmblxe +iztafyde +omxfacnb +bfjgzohh +idowhvnt +etxcropc +dlebejbz +dpgrvvyg +yyetaiyd +zmvvslxw +iolevdzw +pwrbpwyt +ncxnbdcs +bizuessl +csomkqnr +gukypdxo +zzazkgze +mhygipbc +nidnvzql +oblusiue +rnuvqhpy +ybeycdic +sbzmvzxq +gvvqcrug +zkdknqod +zkztprqv +xlprotcp +sndzhrmt +cntdipcw +siiqfres +pnfcbzjo +twbgdnrv +zzxnngor +nmcmxqgt +jayxwvrm +pahclzsw +ztddtnyo +odidwauv +tzlaantg +nttefszm +jahhbgpt +pvxsgjsl +gewlnlqm +bykgsqzo +zqrrhrkl +isxyqlbv +wfzkqgvt +mcwizlzj +ugtgyrez +qfyzoall +cfyqxoyx +vdszizjm +bgrcpovm +einnyfdv +uugncaps +letylmon +ocltwlem +owfskawk +hvripclk +jmgrulzy +kjxyhhle +ionkwbuu +tmjsudwf +kxocxtoa +ejbuoost +nzqdzsdd +dkuiiisp +dxwhxbvj +ghipctmd +mwmcfifl +vfptvuxo +zfqsjsbx +peazobjt +nlwomnpb +ndxbvgqn +zonnhffl +vjnyiejx +ghrcsxgl +fsdiwdmy +jmhtpgis +sscjmpev +oivfuctm +zwtllrfo +uuzpmnjx +wgpccyiu +ujhilevq +hjjieaag +dfbfylpe +ypegnmyg +vjnjrgcu +enylcycn +ptlneeqo +nfiplyjo +dxcrmicb +vdxohgvl +iycioixk +rwqrjyyu +rfatusnv +mnyvdlhu +piyhcljq +edcykiom +wrtwvqub +ejtepubt +vegruhiu +qmrlbprr +wntjsebz +hkdkuasw +jxkfblck +knrwttyx +pmjitnry +lrtbermt +qkhtmeoe +skmqdpek +fmxlqqhn +ureaitwq +qufcyfph +wcidvwgt +ybkrmqem +qhuacrls +yvnsqqdb +xpjchodx +lcwzkemd +jokzbvsi +jjbklvqq +xfswceep +xsjwsymu +slmsyksa +oaquyavd +zxteczie +yglonpuu +rdfvsbno +wgxhuxga +kvpetmdr +fjeoobow +atdqjabp +prjazwst +yqkisdog +wvswvdtm +iogvloma +srxeqnqq +ipjfezkx +joonxwtz +yjovntqa +svbbkcvw +mgyseuqr +dxflpkvp +gqbiytmk +siccxtsn +oepstegr +uwjjhhqb +eosfjfhv +dsaqqhda +vudzwxak +njzjiowv +anfpqwsz +geuqffcr +vhhbkgeb +flkqpzbn +fgtdspvd +yjhxwcps +aimfdnpv +hhvklxlo +yjoxsxhj +bllophbc +ntclfhgs +gtnsuqdp +dazhoeap +klczitkw +tlkedeuy +cvbuidmk +vjubfgqg +qimvfpxg +hnqegigv +cppyezxe +czcmiytj +ypvezoca +adjxiooc +mdshbmjd +urthwyqf +dhoijcrh +vxnnyszn +ttzkydfs +lhnbywji +tyiuyhxa +fyryagxi +hboupxaq +urctvbue +cirtbbfu +bkoxlmkm +rdeoosjs +qemhixen +zqfioppk +vopwlhhe +gmpihxop +aamsrrzs +sdyssprk +hmrqkghm +oevtvzwl +bqufyyuu +ennrxvaf +slmshjpz +qgraeety +mczjxfan +wzwmupvu +sqbkhwxg +abbotwty +trafaoli +bkuarvfz +wuffaong +fqevpper +eekwoblz +spsztgee +yjfbfeif +qcjdtsez +omujkwzt +vjpfndxp +hkpxvjix +eiigrazh +jmtdqwuu +jnsfvufm +xhkdzgjf +rvqigugc +bivqnzgu +ydadmvyq +ghsohaqa +eulugttl +nvhaafrh +ikdtvxpu +fbmztykr +gmhluyfq +biovnlho +xinmgiwl +xsvlnvnr +gryuussb +eeqmavbo +fuftdkgb +wwmwybtx +txshabuj +ewxcrjmj +lskdajks +pabjhzen +xzfmdhaj +gojxghyk +iyqaryra +bnlovokf +mehlaadw +tzqhtnhv +kgacrpdt +qxawodku +fcrouumv +yzqxkmgi +xzspfhmp +omhlnexu +olstosyp +gxslgwcn +juamcglq +irdvybpr +ncsacfpd +hczoulhg +kqjpowtq +bzefqjnj +qnrtwygz +rztxjfyr +lcpxloro +gdibhhkc +qgwuyhea +uweyjukp +hsljwmyy +ayhxycnx +klzvtttr +lgdmpcww +cqvtjkyw +rfyjuybh +tskdjzrt +mhwspcvf +xplpnemj +lrjvgjgs +crllldzy +ikczhybc +oolwtfoj +pqfgligu +cdgktmmx +jbpatjkl +keqepeax +qfirnsdi +juyzjarn +tuymbnri +jijsmffx +xfnbxvzo +oxmscdkf +hkfcgeuv +mkkuxffi +vjmccxrb +wrpagtbd +wcnmlred +pafkwcph +tcvjkxyl +stvhdkom +cfzhzuif +avdzxwyd +wdoyqfpy +gtolniag +nvznsjsi +cabyykqf +bxfoznta +mobkmnwc +sauywroh +xexkiuyy +oyevexto +vqegjclw +xoifoyic +rshyscwd +hvreaslo +negmieaw +dmfggrux +yxmknfpx +ttyuarnj +tiwewqnv +fgmplqux +fsdeavfu +uvqczvae +dydssjnh +ihlykqnj +xygdlwae +usyabtdd +yqikfwvv +nvqrjqzh +rexbjqsu +nzerccmq +apzjtxxq +dgnykfrj +izahycnb +ruubddeh +xkrbsmak +eooaoaxz +alwnxxey +rpxrikkc +syafkuqf +fqwavgfy +jlrielnd +ylmuftje +jigqlhyu +fdbusljj +ltsvqjss +ryzsnxja +sdvtoolp +ttvfgkan +zzbzmsdh +oneyivvm +lmkooris +qbwaumyc +upooekoi +oaplwhwf +zvvsffan +hjujkmzt +ksocowvu +xmaxctph +uohgaowz +wyiqttrj +apdmkleo +ngirmkie +zdmekxlr +zghwmffq +kkwtxmht +aopxxxla +cwaxcndp +mchejzuf +qiisajma +paqlvgwk +neepulbv +locpxcge +zqihibab +mpwwkcnc +acltdkmx +tsveirfy +oyqnektx +roljqjyy +tppfxdlm +pdkdgzbj +hqohdklw +ffaqesqq +cluhwwfj +bfwsfqjl +yxeforet +auhwgphh +wqeumebp +stagigac +typntncz +hdlxeizg +daaredsw +tbgzwdkl +jnncvszy +vzzojziz +uhuiphch +sflgjnmx +zjcebfsa +psvusroj +isyddacs +qjnifltk +lxsjtnwd +gfrahlus +vvzirpuo +zxscyfrr +asdpeiwa +hzrjpvlj +lubqxhin +kauqzmng +vlchbkuk +baivdnom +cuwbwhml +inwmiyfq +ywvdnsqq +sohppxig +vnvqqmjy +aaekdkci +byyylakp +vwctbbrq +pguveyxu +ccbkkuqw +qmtotaum +bbghdbpn +miuprwir +lkjlnmus +zhvpqpwz +xtxzqnix +lxckscjy +lkvlzrta +feoujqdq +myecxjgd +dwkmzbor +gfdlcijs +abwlgpdc +vwspenjl +cigbugvr +ugjalecy +klbkpbsg +qraxrapw +vyjcmvmy +ffhvruro +eluiytkn diff --git a/d06/src/main.rs b/d06/src/main.rs new file mode 100644 index 0000000..e482735 --- /dev/null +++ b/d06/src/main.rs @@ -0,0 +1,63 @@ +use std::collections::HashMap; +use std::fs; + +fn solve_puzzle(lines: &Vec<&str>, use_max: bool) -> String { + let mut freqs = Vec::new(); + for _i in 0..lines[0].len() { + let hm: HashMap<char, usize> = HashMap::new(); + freqs.push(hm); + } + + // Count char occurrences at each index in line + for line in lines { + for (i, c) in line.chars().enumerate() { + *freqs[i].entry(c).or_insert(0) += 1; + } + } + + let mut result = String::new(); + for hm in freqs { + let c = if use_max { + // Part 1: take most common character + hm.into_iter().max_by_key(|x| x.1).unwrap().0 + } else { + // Part 2: take least common character + hm.into_iter().min_by_key(|x| x.1).unwrap().0 + }; + result.push(c); + } + + result +} + +fn main() { + // Read messages from input text file + let input = fs::read_to_string("input.txt").unwrap(); + let lines = input.lines().collect(); + + // Part 1 gives "mlncjgdg" for me + println!("Part 1 solution: {}", solve_puzzle(&lines, true)); + + // Part 2 gives "bipjaytb" for me + println!("Part 2 solution: {}", solve_puzzle(&lines, false)); +} + +#[cfg(test)] +mod tests { + use super::*; + + const EXAMPLE1_LINES: [&str; 16] = [ + "eedadn", "drvtee", "eandsr", "raavrd", "atevrs", "tsrnev", "sdttsa", "rasrtv", + "nssdts", "ntnada", "svetve", "tesnvt", "vntsnd", "vrdear", "dvrsen", "enarar", + ]; + + #[test] + fn part1_example1() { + assert_eq!(solve_puzzle(&Vec::from(EXAMPLE1_LINES), true), "easter"); + } + + #[test] + fn part2_example1() { + assert_eq!(solve_puzzle(&Vec::from(EXAMPLE1_LINES), false), "advent"); + } +} diff --git a/d07/Cargo.toml b/d07/Cargo.toml new file mode 100644 index 0000000..903d267 --- /dev/null +++ b/d07/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "d07" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/d07/input.txt b/d07/input.txt new file mode 100644 index 0000000..d50f36c --- /dev/null +++ b/d07/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/d07/src/main.rs b/d07/src/main.rs new file mode 100644 index 0000000..ef53b6e --- /dev/null +++ b/d07/src/main.rs @@ -0,0 +1,153 @@ +use std::fs; + +fn solve_part1(lines: &Vec<&str>) -> usize { + let mut total_tls = 0; + + for line in lines { + let chars: Vec<char> = line.chars().collect(); + + let mut has_tls = false; + let mut in_brackets = false; + for i in 0..chars.len() - 3 { + // Are we entering/leaving a "hypernet sequence"? + if chars[i] == '[' { + in_brackets = true; + } else if chars[i] == ']' { + in_brackets = false; + } + + // Check for ABBA pattern to know if address has TLS + let ch0 = chars[i]; + let ch1 = chars[i + 1]; + if ch0 != ch1 && chars[i + 3] == ch0 && chars[i + 2] == ch1 { + if !in_brackets { + has_tls = true; + } else { + // Reject if an ABBA occurs in brackets + has_tls = false; + break; + } + } + } + + if has_tls { + total_tls += 1; + } + } + + total_tls +} + +fn solve_part2(lines: &Vec<&str>) -> usize { + let mut total_ssl = 0; + + for line in lines { + let chars: Vec<char> = line.chars().collect(); + + let mut has_ssl = false; + let mut in_brack_aba = false; + 'outer: for i in 0..chars.len() - 2 { + // Are we entering/leaving brackets on our ABA search? + if chars[i] == '[' { + in_brack_aba = true; + } else if chars[i] == ']' { + in_brack_aba = false; + } + + // Check for ABA pattern + let ch0 = chars[i]; + let ch1 = chars[i + 1]; + if !in_brack_aba && ch0 != ch1 && chars[i + 2] == ch0 { + // If ABA was found, check entire address for BAB + let mut in_brack_bab = false; + for j in 0..chars.len() - 2 { + // Are we entering/leaving brackets on our BAB search? + if chars[j] == '[' { + in_brack_bab = true; + } else if chars[j] == ']' { + in_brack_bab = false; + } + + if chars[j] == ch1 && chars[j + 1] == ch0 && chars[j + 2] == ch1 { + // BAB must be in square brackets + if in_brack_bab { + has_ssl = true; + break 'outer; + } + } + } + } + } + + if has_ssl { + total_ssl += 1; + } + } + + total_ssl +} + +fn main() { + // Read address list from input text file + let input = fs::read_to_string("input.txt").unwrap(); + let lines = input.lines().collect(); + + // Part 1 gives 118 for me + println!("Part 1 solution: {}", solve_part1(&lines)); + + // Part 2 gives 260 for me + println!("Part 2 solution: {}", solve_part2(&lines)); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn part1_example1() { + let lines = vec!["abba[mnop]qrst"]; + assert_eq!(solve_part1(&lines), 1); + } + + #[test] + fn part1_example2() { + let lines = vec!["abcd[bddb]xyyx"]; + assert_eq!(solve_part1(&lines), 0); + } + + #[test] + fn part1_example3() { + let lines = vec!["aaaa[qwer]tyui"]; + assert_eq!(solve_part1(&lines), 0); + } + + #[test] + fn part1_example4() { + let lines = vec!["ioxxoj[asdfgh]zxcvbn"]; + assert_eq!(solve_part1(&lines), 1); + } + + #[test] + fn part2_example1() { + let lines = vec!["aba[bab]xyz"]; + assert_eq!(solve_part2(&lines), 1); + } + + #[test] + fn part2_example2() { + let lines = vec!["xyx[xyx]xyx"]; + assert_eq!(solve_part2(&lines), 0); + } + + #[test] + fn part2_example3() { + let lines = vec!["aaa[kek]eke"]; + assert_eq!(solve_part2(&lines), 1); + } + + #[test] + fn part2_example4() { + let lines = vec!["zazbz[bzb]cdb"]; + assert_eq!(solve_part2(&lines), 1); + } +} diff --git a/d08/Cargo.toml b/d08/Cargo.toml new file mode 100644 index 0000000..fbd4f83 --- /dev/null +++ b/d08/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "d08" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/d08/input.txt b/d08/input.txt new file mode 100644 index 0000000..6085312 --- /dev/null +++ b/d08/input.txt @@ -0,0 +1,162 @@ +rect 1x1 +rotate row y=0 by 6 +rect 1x1 +rotate row y=0 by 3 +rect 1x1 +rotate row y=0 by 5 +rect 1x1 +rotate row y=0 by 4 +rect 2x1 +rotate row y=0 by 5 +rect 2x1 +rotate row y=0 by 2 +rect 1x1 +rotate row y=0 by 5 +rect 4x1 +rotate row y=0 by 2 +rect 1x1 +rotate row y=0 by 3 +rect 1x1 +rotate row y=0 by 3 +rect 1x1 +rotate row y=0 by 2 +rect 1x1 +rotate row y=0 by 6 +rect 4x1 +rotate row y=0 by 4 +rotate column x=0 by 1 +rect 3x1 +rotate row y=0 by 6 +rotate column x=0 by 1 +rect 4x1 +rotate column x=10 by 1 +rotate row y=2 by 16 +rotate row y=0 by 8 +rotate column x=5 by 1 +rotate column x=0 by 1 +rect 7x1 +rotate column x=37 by 1 +rotate column x=21 by 2 +rotate column x=15 by 1 +rotate column x=11 by 2 +rotate row y=2 by 39 +rotate row y=0 by 36 +rotate column x=33 by 2 +rotate column x=32 by 1 +rotate column x=28 by 2 +rotate column x=27 by 1 +rotate column x=25 by 1 +rotate column x=22 by 1 +rotate column x=21 by 2 +rotate column x=20 by 3 +rotate column x=18 by 1 +rotate column x=15 by 2 +rotate column x=12 by 1 +rotate column x=10 by 1 +rotate column x=6 by 2 +rotate column x=5 by 1 +rotate column x=2 by 1 +rotate column x=0 by 1 +rect 35x1 +rotate column x=45 by 1 +rotate row y=1 by 28 +rotate column x=38 by 2 +rotate column x=33 by 1 +rotate column x=28 by 1 +rotate column x=23 by 1 +rotate column x=18 by 1 +rotate column x=13 by 2 +rotate column x=8 by 1 +rotate column x=3 by 1 +rotate row y=3 by 2 +rotate row y=2 by 2 +rotate row y=1 by 5 +rotate row y=0 by 1 +rect 1x5 +rotate column x=43 by 1 +rotate column x=31 by 1 +rotate row y=4 by 35 +rotate row y=3 by 20 +rotate row y=1 by 27 +rotate row y=0 by 20 +rotate column x=17 by 1 +rotate column x=15 by 1 +rotate column x=12 by 1 +rotate column x=11 by 2 +rotate column x=10 by 1 +rotate column x=8 by 1 +rotate column x=7 by 1 +rotate column x=5 by 1 +rotate column x=3 by 2 +rotate column x=2 by 1 +rotate column x=0 by 1 +rect 19x1 +rotate column x=20 by 3 +rotate column x=14 by 1 +rotate column x=9 by 1 +rotate row y=4 by 15 +rotate row y=3 by 13 +rotate row y=2 by 15 +rotate row y=1 by 18 +rotate row y=0 by 15 +rotate column x=13 by 1 +rotate column x=12 by 1 +rotate column x=11 by 3 +rotate column x=10 by 1 +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 2 +rotate column x=2 by 1 +rotate column x=1 by 1 +rotate column x=0 by 1 +rect 14x1 +rotate row y=3 by 47 +rotate column x=19 by 3 +rotate column x=9 by 3 +rotate column x=4 by 3 +rotate row y=5 by 5 +rotate row y=4 by 5 +rotate row y=3 by 8 +rotate row y=1 by 5 +rotate column x=3 by 2 +rotate column x=2 by 3 +rotate column x=1 by 2 +rotate column x=0 by 2 +rect 4x2 +rotate column x=35 by 5 +rotate column x=20 by 3 +rotate column x=10 by 5 +rotate column x=3 by 2 +rotate row y=5 by 20 +rotate row y=3 by 30 +rotate row y=2 by 45 +rotate row y=1 by 30 +rotate column x=48 by 5 +rotate column x=47 by 5 +rotate column x=46 by 3 +rotate column x=45 by 4 +rotate column x=43 by 5 +rotate column x=42 by 5 +rotate column x=41 by 5 +rotate column x=38 by 1 +rotate column x=37 by 5 +rotate column x=36 by 5 +rotate column x=35 by 1 +rotate column x=33 by 1 +rotate column x=32 by 5 +rotate column x=31 by 5 +rotate column x=28 by 5 +rotate column x=27 by 5 +rotate column x=26 by 5 +rotate column x=17 by 5 +rotate column x=16 by 5 +rotate column x=15 by 4 +rotate column x=13 by 1 +rotate column x=12 by 5 +rotate column x=11 by 5 +rotate column x=10 by 1 +rotate column x=8 by 1 +rotate column x=2 by 5 +rotate column x=1 by 5 diff --git a/d08/src/main.rs b/d08/src/main.rs new file mode 100644 index 0000000..cbdd1fd --- /dev/null +++ b/d08/src/main.rs @@ -0,0 +1,78 @@ +use std::fs; + +fn solve_puzzle(lines: &Vec<&str>) -> [[bool; 6]; 50] { + let mut pixels = [[false; 6]; 50]; + + for line in lines { + let words: Vec<&str> = line.split_ascii_whitespace().collect(); + if words[0] == "rect" { + // Read operation parameters + let wxh: Vec<&str> = words[1].split('x').collect(); + let w: usize = wxh[0].parse().unwrap(); + let h: usize = wxh[1].parse().unwrap(); + + // Apply operation to state + for x in 0..w { + for y in 0..h { + pixels[x][y] = true; + } + } + } else if words[0] == "rotate" && words[1] == "row" { + // Read operation parameters + let which: Vec<&str> = words[2].split('=').collect(); + let y: usize = which[1].parse().unwrap(); + let n: usize = words[4].parse().unwrap(); + + // Apply operation to state + let mut old = Vec::new(); + for x in 0..50 { + old.push(pixels[x][y]); + } + for x in 0..50 { + pixels[x][y] = old[(x + 50 - n) % 50]; + } + } else if words[0] == "rotate" && words[1] == "column" { + // Read operation parameters + let which: Vec<&str> = words[2].split('=').collect(); + let x: usize = which[1].parse().unwrap(); + let n: usize = words[4].parse().unwrap(); + + // Apply operation to state + let old = pixels[x]; + for y in 0..6 { + pixels[x][y] = old[(y + 6 - n) % 6]; + } + } + } + + pixels +} + +fn main() { + let input = fs::read_to_string("input.txt").unwrap(); + let lines = input.lines().collect(); + + let pixels = solve_puzzle(&lines); + + // Part 2 must be read by eye, gives "UPOJFLBCEZ" for me + println!("Part 2 solution:"); + let mut total = 0; + for y in 0..6 { + print!("\t"); + for x in 0..50 { + print!( + "{}", + if pixels[x][y] { + total += 1; + '#' + } else { + ' ' + } + ); + } + print!("\n"); + } + + // Part 1 gives 116 for me + println!("Part 1 solution: {}", total); +} diff --git a/d09/Cargo.toml b/d09/Cargo.toml new file mode 100644 index 0000000..0424984 --- /dev/null +++ b/d09/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "d09" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/d09/input.txt b/d09/input.txt new file mode 100644 index 0000000..c4c806c --- /dev/null +++ b/d09/input.txt @@ -0,0 +1 @@ +(172x1)(3x7)XPJ(70x4)(40x7)WKQANMDILIQOOWQZDNGORPHFNHBKKKVQEJNUVNAQ(3x2)VFV(10x1)XUNNCAFYMV(9x13)OUIKISEPR(66x13)(10x6)JHDDURBDQC(3x11)SNT(2x11)EW(16x6)WMJFKTNQEACIZXLH(5x12)KPVAD(13x8)(8x2)ELNIDSSO(11x7)RFITQIJYVQB(6x5)HTVSFUVZ(89x12)(44x5)(7x1)VHEWGTT(5x11)GLDZO(14x13)DZVEJXGSGUDJKV(24x14)(18x3)AWXPFDVHVRRUAIELQO(2x13)UW(120x7)(62x7)(21x10)JFUYPPCABHPYTIJUUIEVK(5x5)UNAMQ(17x14)TFQKSOALOJYMSMLMK(17x2)NBDXRSHFDREHZPWMM(23x5)(1x11)O(10x6)QVOCIXBIQW(5x10)FOLCQ(6635x5)(3576x2)(456x13)(449x3)(1x2)M(1x11)I(215x14)(28x2)(1x14)R(9x7)OSMSWTRTV(2x3)RP(87x2)(14x9)QACULEYKFWPHFQ(41x15)LTBJBTBTFQLLEAWJTICLZBHGAYERVARMDLCBZXYPY(4x6)CEOP(4x13)JQJI(62x5)(15x6)YQPFVDNREIYOUKL(15x15)PUSBXTHCMLGOCNT(8x4)YAUHTKIM(1x1)E(14x2)(9x1)YHUAWBSED(37x12)(14x9)(8x11)SVYXKPGZ(10x13)WTQVTWIWGP(162x9)(68x1)(1x4)I(21x14)WTBNFSPQKDFYITBOFYYQN(3x8)UOY(13x14)KCDKDKYFQNNPX(1x6)K(20x9)PMGWXQWRLRWRETULVFPW(1x3)T(20x13)(7x7)YYHNWZC(2x10)HH(22x10)XDUOOOIDYYXQKQDBLGCPSR(1297x7)(359x13)(62x9)(7x15)LRERGOG(25x15)KYQSSJBREHLNZXSLSYGIIADSC(10x15)WMFZAHRNRU(283x14)(68x12)(16x10)QGQDCKCPTECIPTOW(19x6)WMPAPTDDUABBOLYMMBR(14x1)XRZVQKCBBBMCNI(29x5)HSGAQWQRLOILWCRJOCRDFZSOTPLBH(82x1)(12x1)RENHWOTHWXPZ(39x10)BIKLBTNHOLVUWVGTPRPXXROUGEJRHRADHASJDMJ(4x13)VRRP(3x1)BFC(79x9)(39x4)OINGYXONKTSXJBCNNYZMWSYGIUMFATXEUDZQZVL(9x13)OIMKIRFAT(5x1)MIUXM(3x13)EPG(496x13)(37x4)(31x9)(2x5)MF(18x2)MEVRXNGVBHEGENHJTL(11x13)TTCEWIFBGGJ(150x4)(68x13)(9x10)KJJRCHTUM(11x10)SVUDYGHJWKF(6x12)LNWLUN(8x11)LUVPHPZC(4x8)VFUZ(32x9)(2x3)RH(5x5)OOAGL(1x15)W(2x11)WM(3x4)GFG(22x13)(8x6)ZVCSHQXP(4x8)KOXS(193x3)(25x7)PXQFECGPYZOYUWTMOTBFZGGAO(28x12)(7x4)XHUHXEN(10x4)DTXYSILNLW(1x2)Q(101x13)(16x11)MZVPYIEPSLDSIEAF(27x11)NFACRSGETEPHFJQKPTXUQNNSPWT(6x13)UADYIT(2x8)LB(19x7)QYBDEBFMFAWOTYACZQM(6x13)YEABPA(72x6)(58x13)(3x15)UOO(43x6)GRXJNNQQXQVANDHYVVQTTWIKVLPHBJMCSEOPBELMGHG(1x10)G(178x10)(12x1)(6x15)JWYUKS(93x13)(5x11)CQCXM(56x7)(9x5)FIARQLQTK(11x3)NSXGBEOBVXI(9x15)QIBUNRTPC(5x8)GBIYV(13x10)(2x6)RC(1x5)T(33x14)(3x4)END(19x6)MYZTTHSNYAYANBPGVHZ(2x14)YD(6x12)(1x5)N(3x13)TFG(224x8)(11x15)XNMAIBBNTMC(199x8)(2x10)VG(23x11)(5x11)KOKXL(7x9)MIMRNXM(121x10)(10x9)OGYRDPVNEI(27x5)XUBNCPGOKJIXZNAHHLLDRUUTPRM(25x2)FVEEUXQTUBDUDSMIRLBFQYULY(13x5)JTJASJBCCKFHV(16x6)TVTTDIFACKNORYBR(4x2)LIFO(17x2)RZGYMXWONVKWJMSVW(833x6)(586x12)(230x10)(2x13)EL(41x15)(34x11)KPHSFJQJWTINMWYVNSVVZBABFYEBZCLNMQ(17x14)CRLPIZUEIBCKNKRJJ(62x15)(9x4)XTGHEGPMK(11x12)NCNNMDWDNMI(8x2)PKWGUNYT(10x15)DVAFJQIPSK(74x10)(5x15)ZLKKA(17x11)GIERLJRIDYLPWZCKG(33x2)OASXACZZRSCLVDVNLNGQHLRLMZCTMBCYP(153x7)(2x14)UX(49x8)(11x14)GEHZYBKESFQ(2x6)TE(6x3)THQOAO(8x6)FSPDZODL(42x11)(2x12)XO(10x7)IZTTYUPKBT(11x13)PVRXUXHBKQI(35x6)(5x5)UDRJC(1x9)B(13x9)YHHERZVEFSCFX(78x11)(36x3)(1x6)X(23x14)DHLGIIMPJGKDUOPFEBPKJZB(7x12)TMWJAJD(16x12)YVALDPNTHINYQQIC(2x9)OY(90x5)(62x10)(9x6)RUUFLMWQS(28x6)TAZAAAIDBGZMYXMNGHVTBRHWFHXV(8x13)JIRKEMEB(15x5)ORKLKISZMYECJBE(178x12)(59x5)(5x9)QLOCV(6x5)XETXIX(11x15)USNLPYJLBOW(13x15)ZYMFNBNVKKQFT(11x3)PISAKCRXTWT(90x7)(52x2)(1x3)F(21x6)QFIQOUEYORICJDZVHMIOW(13x6)ONYWAVOHAIQXE(9x5)TKBIAQVJC(7x5)SUEYTHE(1x4)H(46x13)(33x3)(26x15)(1x3)Q(14x3)OHRVGRUAQFTYYS(2x6)BS(960x3)(544x15)(160x14)(15x2)(1x11)D(3x9)PXR(52x4)(9x13)ZVIVIWOIO(1x5)D(1x12)Y(8x8)CKZGFGQO(6x9)DAMZNP(75x8)(13x1)VDPXRVCMGTZIY(3x13)WMF(10x12)KDJVCJQVEC(24x3)GEKGZEIIDDDJRSZBNAIDNASO(3x15)VUI(74x5)(46x8)(6x2)GSPMZV(4x2)XOOW(9x15)COLWEPZNQ(5x13)UGBDW(15x10)TTWVRPQTREJDSJS(137x14)(65x10)(8x13)OMBDNQBZ(44x13)RVXFBIJOFAQJCLTKYBXVWALEONUACICLGJIWATGHHCZK(22x14)ZSGSVEEFHRWHXBLGCDJKZV(30x2)(2x12)GG(9x12)HJQCPKGNY(1x14)H(134x15)(5x4)YGCHW(5x10)EROTH(26x10)(7x1)OXPTTDP(8x10)OJJSDGCL(74x8)BDTYNXCCPDQCMYZJTAJOYCGMWJLOMLEQYBCYAZOLTCYNDAPXMXCHVSKJCYXZWBKGVELGTLNCEB(54x14)(14x13)(2x9)SM(1x10)U(27x3)XFJSNXIJPTSFDKVNGBDNRLQYJKQ(16x11)(10x9)BAPIHODLEG(317x8)(112x11)(30x4)(6x15)UTROFQ(11x11)UYHDNMPLNBH(28x5)ZMZKTXRTUNMVSQTUGNYDWUOFAFBA(2x4)OT(21x15)(9x3)VRSRVOEDX(1x10)W(1x12)H(86x12)(1x6)Y(25x9)ZYIPXGLABDQQRIQOWYNSVRDDS(35x5)NJIVDKLQTESWZNBIFFPADGWBQGVWPNOZKOB(3x8)JZK(98x8)(45x10)(6x5)LYJQMR(10x7)EFMGJRIYHN(1x12)W(5x11)CXUHP(40x1)(33x14)BIXNELLRAWDEQWDLFXASPCFKGYXNPZRLP(102x3)(35x15)(29x2)(1x1)P(8x2)OGCHVTFM(5x2)CVQRK(54x3)(48x4)(10x3)(5x6)IUXTW(26x7)(7x3)MCAIFSI(9x6)THFFYJGAO(1522x10)(25x12)(18x13)(12x1)(7x4)HVDYPIO(1159x6)(211x8)(154x11)(21x6)VCPDOYQRGXIJVQGRJTVWP(12x10)CEOZLAMGANTR(16x14)HRTTJOTOJYRMGUDK(79x5)(4x11)JHCB(4x15)FHRU(9x12)TVDNDJPQW(2x5)WH(30x14)LUFKTGXZTAORPRJMZESFFDVVWPVYTB(42x14)(35x14)(29x2)SAGPXWQEGTZAIADCQFBLWRLZIQGCN(135x7)(15x14)UQJYCTIFFWSUWWM(65x2)(9x9)(3x12)JUN(18x5)(12x8)RDYSFFHOCMTA(2x7)QY(14x3)(9x7)FERWVDDHQ(36x2)(11x7)ILSHNBRIBMC(13x8)SRXBXAPPTJPLF(101x14)(2x10)VE(86x10)(29x8)(23x8)KAMCCHDVKOOJCGDQJPZZMPJ(32x9)UEYJFLAOACKYLFDJWQUXGIZYWMHDKYLK(8x6)(3x3)LKI(682x13)(208x6)(76x14)(8x10)AYLZDXBI(3x9)BRC(25x10)IEATCRHBHGIKZBQTRCTXULAMN(15x12)ZHRTNMVERVGZZCG(32x3)(4x14)ERHO(7x7)NNNSCSF(5x4)TTUFM(4x7)XYWL(72x4)(3x7)SDF(29x13)OQXOWQELFOXUFEEBUPLNHMAOGLLPV(14x5)SZJGEXPPXSUXCB(3x8)KND(95x1)(28x5)(7x3)LVLVSVN(10x8)TGDBTKXVLI(10x11)WRFPBLNECA(29x1)XFGOLCPIYTKNJTXBAEATURQVVXGFP(3x14)YBZ(205x1)(16x14)(10x8)IFQMAAEMOP(32x9)(16x14)VBFTUPKSNIUAEBHA(3x14)EMW(23x11)(2x7)XS(3x7)QWS(2x12)TE(107x2)(21x12)XKLOCAHJZFYLQZMQDZUJP(28x15)VFRNAEWVNJVUZDURVOCUEISKGWWN(20x6)NXCCPUPQKGXTOWWRANDP(12x9)WRJVTTEYFJBE(146x12)(1x12)M(46x3)(12x15)ELAIIEJMLHRV(1x8)I(1x14)K(2x9)RN(1x14)E(81x6)(14x4)SHLOZXCBQTBEZF(40x2)YMEOXRNZXDIEEFLRQQDPWXILUOJQHDSUEKNXNQSP(3x2)TGQ(1x10)X(315x14)(307x10)(3x11)ZDV(260x4)(97x8)(20x11)YRELCFEJXQZADZSOJION(14x14)BGCJIBHVHEGFOD(3x14)PVA(33x13)KHUWKRRNHTHJCROVFAOIWGGOTIPKDMPRC(36x5)(2x8)HZ(22x14)YZSUXCHXDEPXIGCWUOKUXZ(62x10)(15x7)JZUDNJCWXTQAMOM(4x10)BJDT(24x14)ETEADJJYZZDODVKPPXTBTUPC(40x1)(5x9)UZDRJ(24x2)VPGSGVADLRBFODBZBMWBRJFC(24x14)(10x10)NJQVLSVHKJ(1x15)B(1402x12)(1381x11)(690x9)(163x6)(76x1)(16x11)TTKEOWZUHJMAOJVI(4x15)LGFT(3x6)MYP(17x7)CHKQJJMHHGHDXWBSO(7x7)UJLDJLX(11x12)LGBIGRGMTBV(21x6)RISOUTKGCNPQLLDWNLYEA(5x14)IZRZO(19x8)(13x7)ZYNNYQLEROHNK(23x9)(3x13)KRN(9x5)(4x5)OXVO(185x5)(52x6)(6x4)QOSUZS(18x6)GUQOGCRNSAKDCOCTSE(10x14)KGZBUGVIIH(40x10)(6x12)CMZQRR(1x5)Q(15x11)WEKZHYYCTPIPOZJ(58x8)(1x4)A(6x8)ABJIRX(11x15)EQFJHQOVGLY(6x3)YYQMKZ(7x7)LKJYEWV(5x4)BPTKB(1x4)J(284x5)(63x10)(1x8)W(11x13)MPTRNQPSBXM(15x3)VHDTUWNDEGLNCSQ(2x1)CQ(6x2)OCFRSJ(63x9)(15x12)AEYDUUWROCUABMX(12x4)RPGECWZRBHLK(1x11)O(10x4)JCBDSFSXDE(13x11)(8x4)BEHBONOK(83x2)(4x6)ANAD(3x15)LOP(20x15)TJLFCNGAYSBMWACNIOME(14x14)OLVVHGNWUVNXMR(10x12)DAHIOTLOCP(30x9)(2x12)TR(16x3)DYWYHJLMIYAHQIIE(3x8)SNV(112x15)(19x8)PBXORKYLISLHVCJVBJP(74x10)(2x8)FP(24x13)ZXILHYHYDGDNGHIPFHLMRLQS(2x11)WN(21x13)RDQDPNVEOLOSPLAHQHHMY(1x9)R(14x6)LIIRDEBBHSKXZT(372x10)(164x2)(40x7)RMPKUSRDBXNZLGDXZIAUAZNQBJEMSBUJOJNPHHHI(12x15)IAFPAWBOSBOS(76x6)(5x6)UYNUU(25x15)XPXFOEMDDICGRJONJBWMOZCIW(8x5)KJJIEDUG(15x2)IEUTKVCMTTXZNTC(11x9)IKWCZMUNCOP(61x12)(54x13)(13x12)NIOHBMYALHOUO(7x10)KFDUHJL(2x3)NM(9x9)OSVPKOFSM(5x5)VAMMP(9x3)EZLMGESLP(102x5)(26x5)(7x9)NHCIGIE(3x3)IVY(1x2)L(12x7)UXAUQLEXZGXN(46x6)(1x14)R(11x9)QTBPNKUFZOA(16x9)DLXKSEJJVMWIIHPB(157x8)(30x4)(13x15)TNSMJZJMNEUQM(4x12)HRAW(113x15)(17x4)(3x13)VQG(2x11)YK(4x9)GMIK(15x12)YGMZABAZZNHPRHP(23x4)(5x13)ZBQGH(7x3)SPNLPWT(24x1)HVEWGOENETTTKKBJHMBEFJSJ(6x14)WGBSYS(2694x1)(873x13)(591x15)(1x2)H(14x12)(9x8)(4x7)PHPZ(59x10)(10x7)EQJUHLQDSB(11x6)MHGNANYAWWK(3x8)FEN(11x12)RCPCNTVKIXQ(491x7)(78x14)(40x11)YVRYFJZMQREHNXZZPWXKNPHSUTVUGVEOPFQQBLOJ(25x1)(13x1)HQFQJIYOMZFGW(1x8)F(182x6)(86x14)(12x9)WODINQMTBDAX(6x7)JFCXXM(6x1)FKJPPD(40x2)IDAKJRAQIDKLPCCATMTFTOWNPLHKNJBTAVVHUWWN(53x8)(4x1)FXRX(9x1)DCBBRHJVU(2x2)RA(10x14)IWJGLMPMBS(1x5)H(14x2)WXKMITJBMZACIB(5x2)WLBVL(5x1)XNGOL(193x3)(6x8)ANFCUH(11x13)ZVGWPGYGIAR(72x4)(9x10)LUYDGWJLX(8x1)WUXTMRZR(2x3)FK(21x8)AGZIOWSLPHAKSUPECVOHV(4x12)FDXE(6x12)(1x8)M(68x7)(3x4)EOK(28x13)JXAMSHCQOBIUKUHUFYOOZJRMMNCW(19x4)YBUXDOFHTQVATUPANAF(1x15)H(110x13)(93x7)(87x2)(4x12)GMOE(50x11)(13x3)VHUHCBUNINBAH(9x14)ABWUPTZJB(10x1)ULUUYHAWHR(14x7)RSQMESIUXRZOVL(6x4)FBTNDA(5x7)ADGJH(139x5)(131x10)(123x14)(88x6)(1x11)A(17x13)XCWUXQVXMMRLURVHL(9x12)NBLNMYWQH(23x14)IOMVENQGFGYSOQNKKMXALXR(7x6)OWEXJQO(23x1)BGMPXSGMVQUXQJNAGUDPASW(168x14)(149x3)(17x1)(11x1)PPOPWWURQYN(119x7)(63x1)(4x14)CIWA(9x5)(4x3)YHDL(32x10)THARHNYWOIICGXLNEHOTTIEJXOLESVFO(44x2)(30x2)FMAVRVLKELMJLGHIPGCRCHJFVTBSUP(3x3)SIW(7x8)BIFVNRC(706x15)(699x8)(6x6)(1x1)B(284x11)(154x1)(26x12)BCUDXLZNEUYZIEKRPJNGEFKMNE(49x5)JNLLBDIRMRINXOUMGKJXTVCKAMZCEPVXFRIUUQXUQAHXXWERV(41x4)(5x15)JUNET(9x14)LAEKWBIYU(1x1)O(4x4)JFAB(13x4)KARCNJKHMFJFW(94x7)(64x7)(7x14)VRRWPHM(16x2)RYATIQNKHUXCZEGS(8x13)WZSZNRIH(3x7)TBE(2x4)DA(10x10)TJBORFEVFS(2x4)VE(8x15)YTADJOMR(4x2)XQAO(389x2)(171x3)(52x4)(1x6)C(14x1)QUCOESZSLGRLIJ(7x13)UVHYAWH(1x8)A(1x14)R(16x2)HOCCGBBDBBAJPVFU(52x8)(2x3)IV(20x3)BADNVTFDYEOJOSTOURIR(6x12)UAKYYR(1x12)D(3x8)RDJ(18x15)GDBLXRBQGDVOGYNIDB(7x9)RVLXMQP(146x2)(45x15)(3x3)NNY(10x14)EUROHLVNXH(4x12)JYRH(5x3)GJZII(2x1)IN(6x6)GPYYHE(70x5)(22x3)JSUZJGHKJQSJZHNHSBYXRX(11x4)CKNLLPRJDJB(11x9)EYWLHDJWYMZ(3x4)EOQ(39x11)(19x11)(12x15)ZSNCSSNGFNWK(7x11)QKRQMES(915x15)(657x4)(121x15)(21x4)(6x9)PBLEYF(5x3)JYILW(88x7)(48x6)(18x11)LHFNPRFKADOZQRHQVE(5x9)JSXCT(8x2)QOQRTIAA(7x3)NKKNWLS(16x4)URODMQWUOAUZDVTW(203x11)(196x3)(72x2)(1x12)L(2x3)AO(8x3)XROVOMDL(9x8)YZAEPPLFP(25x5)TJCBFMVSXVPIIOUHRJCUZAFPK(35x9)(22x5)BSQZOCOFMKGAVXARGGFCYV(2x1)BR(46x10)(3x1)MNZ(13x4)EBBUVWXRIWLMZ(13x8)EXOJUNPCWPYQE(9x14)(3x15)NYG(4x3)XNAD(6x3)OAGYDW(299x3)(130x5)(5x5)ZIVTZ(4x8)WRBW(73x12)(5x13)TCVNI(25x12)TLVHEMSRDZWQRIYKHDGLZVLEQ(24x3)PIOJWVRBAOPTXHUJAGHCRGNK(24x14)VCVZEHKJWAPXJDMALSUKRZAW(30x4)DMROHLLFJEFQZPAEVOYCSESESVCDPT(107x1)(19x11)XYGUSLMMCMUYFOZZCSG(9x13)(4x5)TMYS(2x1)BK(1x3)L(46x13)(40x7)JGIWCASPBLNAZSSBXMFLCZNHCLRYKJTSKTRIYXZD(7x7)SIMRJYC(243x12)(219x7)(4x8)XKYN(202x11)(26x11)(4x11)JIBP(3x12)TUQ(1x12)U(78x11)(10x12)PYKJEJKLOP(7x12)MGGQRIM(6x3)WDBTTC(10x6)EFUZOEPGTG(15x8)ULWOSKACKQHHDTH(2x5)OX(24x4)(1x13)Q(3x10)PLC(2x11)AZ(40x14)(4x3)IOIG(7x15)QQTGOCG(4x1)TTYK(4x1)KMKT(11x2)DUFCFLWJKDO(4988x11)(514x13)(184x10)(176x15)(168x14)(49x8)(11x13)NGQSRMSYVIT(5x13)LIGXA(13x13)QLVGLJOXJZEMA(14x3)BHSJULNXUJNMLB(21x13)QWVNZXHEHTXEDXQKZCKZH(59x3)(23x14)IZNXJWCWIXNWKNQDTNQUAEO(23x6)GDBWPQKJXRWQSZJUZRGBNNF(14x4)(9x7)RQPHPKUPM(7x9)QVUICMY(269x12)(34x4)(11x1)IODKMJLLLKQ(10x15)KDIWUXJCVN(221x12)(47x9)(12x12)RCNHOSXDVYYI(21x11)(3x4)IJG(8x4)XBPLQPKV(150x6)(75x15)(2x6)DH(23x10)WKXGJRDSEZTLPKCMMUZZMXF(7x7)WURAPMO(3x4)RIC(12x6)MFVQJUULXSZX(9x7)LSYQTUAPN(47x14)(3x10)YZI(7x6)YHUFAXO(1x4)M(14x4)LANLTXIEINNYBW(6x3)(1x1)W(8x9)FNIRZGYT(3676x12)(585x11)(242x2)(19x8)(12x15)OWCUIMOZCPJU(210x4)(107x13)(10x14)BTVYEADZIL(39x12)UMDJKKZWWGKFLEFWKVTRGZMWUTEWWFYSVMIVJQF(3x10)NEL(28x11)MLIMLBMEATHPEVTQRQTHBUOCFZMW(65x2)(23x12)SGEKZUXQNIGZURVKPNAISOY(21x2)UGJLXKWJVUFGJURKHTETM(2x11)XQ(17x13)CTOVPHTPJVNUSQZLY(329x9)(27x4)(20x15)(6x7)SWYPVM(3x10)ICH(105x3)(7x2)(2x1)QZ(11x11)(5x14)XUSZN(69x8)(7x12)VCQYFSA(24x7)EFVFKBFLRAJTGXEQGICZSOSE(10x7)CNXAKLLDBZ(4x13)XFXW(20x5)(13x15)SQZPVKWYCGMLX(96x12)(9x10)QNJNUKACF(14x3)WBKWFXIFFTAGKJ(2x11)TM(47x7)(9x4)WKFDSSPUO(12x2)TNCXEWMSFUPL(3x7)BCH(1x10)W(49x5)(23x10)(17x8)LMJYTUJGSCJDSMNZI(1x14)A(7x3)DYODODD(735x4)(2x13)CT(147x12)(140x1)(10x14)(5x6)KBFDG(74x11)(3x7)ASG(6x1)BAMUUR(11x1)HYWHOBKJIPH(22x14)ROJWCVIRBUVOXMHEBMHRBD(4x6)IHCB(36x9)(2x12)KI(1x1)I(16x4)TYYWOESVEYUUSCSQ(272x12)(6x13)YBZCAF(2x12)XV(12x10)(7x5)EOKMUXF(91x8)(4x3)CYOY(76x4)(2x6)QT(29x5)NMTVCDRMTLDIVOECJLYHZUBPYGOFD(4x5)IAJR(11x10)YPFPNDBONFO(2x3)WI(129x6)(77x2)(10x14)PAQKAHBQAX(2x4)YV(19x1)KXUKEJINNRYFXQJKRSM(10x2)YJAIIRZOWD(7x4)MDVMTGB(19x6)(4x9)MMQC(5x6)VZZVQ(2x7)XE(2x3)EQ(2x1)MA(202x9)(183x5)(13x5)YGYLMWENWKOEP(8x15)MIAMCHRA(67x15)(2x14)RP(10x5)NVJOFHUZFU(19x13)ELUOKNLHOOIAYZOCIMD(10x13)DQTLOMUCCQ(70x4)(11x1)KZALNOFLDHG(15x13)WLWZWHTUHWOZLES(9x10)FMITUKLQU(3x14)WCL(2x6)CK(6x10)(1x2)W(76x10)(2x8)ML(62x11)(48x11)(4x12)IRUH(4x3)DBQU(22x15)DYDBCSWMYSBLRNSNGRWCEU(1x15)Z(745x3)(23x1)(6x8)OKKJKF(7x1)(2x1)UU(709x5)(217x7)(116x3)(41x11)OAOMKCXJMJKKPSYWLNBFUDEVLICRKCGHRTGCIUAXZ(17x12)SKMYSNPPLDSOKIKXI(10x2)AYWGQTPNPX(12x14)GQFNEYXBYAAN(4x2)DWAS(12x13)MGXEWSKMSNTH(69x8)(7x6)LEFUMOK(19x4)UREDJOQURHFQCDSOZKZ(8x13)QPNYHWBW(12x2)JVUTOZHSWMXS(143x9)(79x6)(5x6)ZLLEG(4x13)ZAKG(2x6)QM(32x5)ADNXICFDFEOECVZHIVQKALYWLJGUSOSI(9x9)AWIAWSRJZ(52x5)(5x6)QSJGP(10x1)KDADHYYLCR(4x9)BQEP(1x1)Z(6x9)OMYNHU(103x7)(86x5)(2x13)AB(45x6)PQHXQFEMSNVRLACWAKQOYTZVLYPGBLAVMANXZHEMATRCF(14x4)YEVRVCORQWAJYG(2x3)AC(6x4)(1x4)W(135x15)(4x9)NULK(79x7)(7x10)RVBBWHN(3x12)MEL(33x9)FQIMGFZZTZBDCAYWARBLFRRQTJROKZXOJ(6x8)PWSZAR(2x5)ZR(13x8)RGRLYMPEYXDYF(15x15)EKZSLEASGQCSSAQ(76x5)(3x1)GDV(14x4)BYSPLEVMSPGXHS(4x2)LIDY(33x9)(27x4)ZWOLHCSTTPJZTODWETGHTNMAPAF(1215x14)(142x4)(14x1)ODRTZPGCANTMRQ(11x12)FFJIYPJJDPY(18x13)(12x7)PHABYHRKCIBS(72x12)TLUCYATALAFMLBSLTDHFNEGCVYKQFKPHVAMBSCYPSYMMGFGEPKMZRVXAZLGQQGCAQVIDKQCZ(119x10)(100x8)(6x6)ZKHOPF(37x8)JZJYXJTGQWXJKOWCEGRYFWORONDPKWDHGQFWR(9x10)JZTDQPVOV(7x11)MNMFBYO(12x9)(6x12)TEOCNK(6x11)(1x9)U(413x10)(1x12)W(357x6)(81x1)(20x13)AXMPRMJPLLNQTKNAKAKL(15x11)NCYQCFJRFVEBMBE(10x15)IDMWCCMJMT(9x15)KDITVSFLX(8x13)LWDZHEIH(85x4)(9x8)DNTHBQVEK(3x12)RCQ(17x5)IONTLMAHANUFDOIZZ(3x1)IKC(24x10)YQLVKHSGEHGXGFYSVJGHUHUA(109x4)(4x12)XZEO(12x5)HEZUPCXXEENI(12x12)OMJTLBITZWOB(13x13)YWOEGEYKAOZJS(36x8)VUZJQCVRHXSSCZNTEFKDZLVHDVCJSREVEVCB(43x6)(2x4)RT(4x12)CIZV(20x6)HHICUGNPVNOEZZGDLIZY(36x6)WRYFVILIDECKLNDCCWDEBAAPNRQVLQTWUQRC(260x7)(81x9)(5x1)XTIWO(7x2)(2x7)HZ(47x3)(6x5)EJMXOK(10x14)CVISHTXMOH(6x12)QCQAWT(1x12)V(1x3)Y(165x10)(21x10)PSYSIOEUPVJSLHBRVCOJD(39x12)(12x14)UBTGKOQEIYFM(5x4)CLHJC(5x4)FWNYB(9x13)ZHUPCPRPR(39x13)(10x15)YKYHEZRRDL(3x9)TRX(8x15)STWMOZDH(23x10)(2x9)ZM(2x7)MV(3x13)OQK(243x11)(210x8)(42x14)(17x12)JIOXSDZFXPPALZIKA(12x5)VJLEWBRVXMCD(23x2)VNXQYVPIRTMBGPKVZNTOFOG(61x6)(7x4)NSPFDMJ(9x14)TVHJEJSSJ(2x13)IJ(13x9)QTFHJIOJOQAOA(1x11)C(59x3)(6x11)MSQZOU(31x14)VLYOENWNIUSCUPMSOZEFABALZGGUXSZ(3x12)MIA(13x5)XZEMQZEXZTHJP(1x14)O(358x8)(162x14)(39x11)(13x5)(7x10)ZEJGPTO(1x12)V(8x7)PFNFRIMK(8x12)(2x13)LL(47x1)(41x8)(1x6)W(16x10)KZDYKHCTWZXEKCNJ(6x11)BKPJMJ(42x15)MMVAWYBRUXHRRXCVQBRTDORBFQQBOOHMVEKUQKJQTP(58x11)(28x5)NMWGTZUQBNENKBJWXUSTOSCMPLCZ(18x7)XIOSACAMZDWOJMBKQD(105x2)(72x12)(48x12)(5x10)XABVT(4x1)FENC(3x3)FPK(3x2)BMX(7x2)CTTSNTO(11x2)(5x14)XLVEE(2x1)PI(6x10)XMZISE(2x6)AK(6x1)ZPYKXO(774x3)(10x4)QTZHPYSXNC(720x15)(226x14)(40x9)(2x10)BT(17x14)(2x15)SO(4x2)ECYN(2x10)JM(7x4)XOBYLTV(120x3)(1x3)N(19x12)PEGBFGRTJFJSVIQZTNS(2x5)JD(41x13)(3x13)YTK(6x4)FUJASF(5x10)NHCVS(5x7)EBSJH(27x3)MMLCNRRAUAKKAGPBUHZQKMJVRLY(35x8)(12x5)EUFDLSCJNJIW(1x11)F(5x8)OICJN(178x3)(1x5)O(164x12)(69x5)(1x3)Y(13x7)NJGIFSDNRZGUN(20x2)CHUHUOZQHKOBNBNITRCT(3x13)XHS(4x4)HCZB(47x10)(13x13)HKZXATQZXPKJC(3x6)LFO(5x2)ZUTAK(4x8)JGZZ(13x1)BPKJSEMKXVWPD(10x8)CFBDPLWXUF(4x11)DYMH(283x14)(100x12)(9x14)LWMYUMEGI(79x7)(73x7)FBVHIBPTQYOPEWFQTFYYLGGOYUBRWFHKOXUWAZPIAVVVOWQGVUUKSSIGQWGTGTVMFEUSTYTQV(55x2)(10x14)IKRUCTQUXX(32x5)(20x2)JNEGAYZJAEFMMZNDQAYI(1x5)N(36x10)(12x10)PFTBHPEYKBFW(11x7)YRKUEULAVQO(65x9)(13x12)NKUIAGSIXWKEW(38x10)(4x8)IVPO(12x2)ENSUUWUGMFDE(6x5)GBZVEV(1x4)H(18x4)(12x6)(6x15)(1x6)C(1798x6)(725x7)(718x4)(128x9)(72x4)(41x6)XHDCTSCOLQXDITGBJPZCFXWLCBVNRWZKIHXOYRZQE(2x11)AL(10x11)CKPZHZXSEL(44x2)(38x2)(24x12)KQQVZKDYTAXJIECUHRNEEHIE(2x5)MR(2x14)EX(525x9)(135x3)(24x1)(6x4)AJAHVA(8x4)FCQQTUCX(42x9)(16x1)YJXDRMKLAJWGHRSL(9x8)CYVVQKOEQ(1x8)S(11x7)CGKRJUPVKDK(28x3)HQMZNCYOAIJBKRAGXYWTWOMEDSBE(1x4)U(16x13)UWNXBMZLSDWJWXRY(13x14)VALDTDWVJQQYY(48x4)(8x5)(3x2)HCC(28x13)(10x14)UFDCSYFEPI(5x11)NPDJR(279x1)(72x15)(15x11)CZESSYYLTNHNNEL(4x12)SCJE(2x4)IK(2x13)UO(19x8)AXUVJUCVOZYXECUHXTP(101x2)(7x3)MUNLZOM(5x7)GYXMB(13x2)UGNTFKQKQNSBU(27x9)IVJLAPCSRKKUBGNZXYELDTFXXDJ(20x12)KHMCDFDXECBLOWYPQFYZ(13x2)VDLMHMTQWHSIS(66x11)(6x14)RHRBCF(12x12)QBPGBNHZPQMS(28x11)BMIFCPCTBLKBIXCWFNLFSAOGHDWA(36x10)(30x1)KQYVYKBALRKIFSCOPWNQPYGRSSDAFY(1057x14)(320x8)(131x14)(124x3)(6x1)(1x8)Y(11x11)RYCMRYHAPAM(12x4)(7x2)LMPRCHR(65x7)(20x12)FBGHCCVXKKFXNJJWLKIU(16x10)KIYAZDBPNWXQXAKQ(9x11)EEQGTCDVB(1x3)I(132x2)(125x1)(20x12)HBEZQGFLJSFHGOYMLHSG(19x7)(3x5)THM(6x4)XKBKJV(7x12)(2x8)DF(14x12)(8x14)AXZPIRCT(33x9)(20x11)JCTTWVAOXNBCDBCUVNCX(1x9)J(36x9)(30x9)GCKYVYDUIBAWHSKBTTAHOYQWUQJHIV(699x2)(400x2)(45x10)(2x12)DY(31x7)(2x13)CP(6x11)TCMIXN(5x13)GBDVM(3x11)JAD(136x14)(11x1)ABIOQIJMVTI(6x10)NNTWTD(29x6)(1x14)Q(16x9)NNLMOVNFVJLXXLJJ(66x6)(4x3)RAZW(11x3)EQUJQECMCRI(10x14)DWLVSFXKGZ(5x15)RGJPT(7x1)RDFSOXE(74x8)(5x8)NEBHU(7x15)UEWKNIH(45x7)(19x3)TLAIFAYOOOCZMBIKVOU(4x6)OZBT(5x14)JEPAV(108x8)(2x15)LU(21x7)(3x6)JAV(2x3)LL(1x6)J(2x12)DX(59x6)(12x4)QXLWMASKAATM(10x7)OWRCRLMNRR(1x6)X(5x8)FBCAK(3x13)SIC(211x15)(2x6)IG(196x10)(54x8)(10x6)ZVIJHGXDTL(4x6)WCBN(2x12)IP(7x4)YLCWERN(4x1)LVRK(59x7)(5x5)JSDEV(4x14)FJFZ(17x7)KGBZBEJEIMCGUMSPZ(3x8)TAF(3x7)JTW(64x12)(2x11)BL(7x8)EQAGDIV(1x4)X(13x12)WDLMTJDUILHTJ(11x13)CBRRLLSHSWI(1x1)G(61x3)(3x7)CVG(27x9)(3x5)WIL(13x1)KFMXZGHEODGKB(2x1)QU(7x11)(1x13)S(18x5)VCSBJGLOOVXYTVMKOJ(143x10)(74x5)(25x12)IRMWONJTNGIJCGCTHVQOPQPIB(2x13)EY(6x8)NWOYXV(17x1)VBWAHETINYXRWMUVH(14x6)XEWNDODPNFJNFR(36x10)(5x1)XVRMW(3x15)PEE(4x9)RIJF(3x3)SYV(19x8)(12x13)(1x4)P(1x2)H(13x7)UKWAWHHQFYDWF(96x11)(5x12)PRKUK(13x14)RDQYSCYBCMONV(36x9)(3x15)ZOZ(8x15)PSPDGSWF(8x6)BMEGXZMZ(17x7)RQNGEXECJCUYFXPMB(163x14)(75x12)(9x9)YKFJTBRHE(44x15)DDSGHUAIXMRFTUHJZKDCTCLFREDDDHFAFQXALBIGIEMS(5x3)ZFRYZ(66x4)(7x8)KMXIZSU(34x15)ETTRETRSNLYOQZNWUXCNGPPUJPQNFYYEEC(7x12)RFTTNRF(3x12)HVO(97x15)(9x13)EASXOBURZ(14x14)EPODGHCXUDADRA(7x10)ECBRZCQ(22x13)SCAQGLZJTRSFEBTFFDTDRZ(13x7)RHQRORLJVNLWN(6x2)INZFFT diff --git a/d09/src/main.rs b/d09/src/main.rs new file mode 100644 index 0000000..7b24487 --- /dev/null +++ b/d09/src/main.rs @@ -0,0 +1,123 @@ +use std::fs; + +fn decompress(input: &str, recurse: bool) -> String { + let mut output = String::new(); + + let mut i = 0; + let chars: Vec<char> = input.chars().collect(); + + while i < chars.len() { + // If we find a compression marker "(LENGTHxREPETITIONS)" + if chars[i] == '(' { + i += 1; + let mut marker = String::new(); + while chars[i] != ')' { + marker.push(chars[i]); + i += 1; + } + i += 1; // i -> first char after ')' + + // Read info from the compression marker... + let parsed: Vec<&str> = marker.split('x').collect(); + let len: usize = parsed[0].parse().unwrap(); + let rep: usize = parsed[1].parse().unwrap(); + + // ... and decompress the next `len' characters accordingly + let replacement = if recurse { + // Part 2: markers within decompressed data are also handled + decompress(&input[i..i + len], true) + } else { + // Part 1: markers within decompressed data are ignored + String::from(&input[i..i + len]) + }; + for _n in 0..rep { + output.push_str(&replacement); + } + + i += len; + } else { + // This part isn't compressed, copy it verbatim + output.push(chars[i]); + i += 1; + } + } + + output +} + +fn main() { + // Read my initial data from input text file + let input = fs::read_to_string("input.txt").unwrap(); + let compr = input.trim_end(); + + // Part 1 gives 110346 for me + println!("Part 1 solution: {}", decompress(compr, false).len()); + + // Part 2 gives 10774309173 for me. Watch that RAM! + println!("Part 2 solution: {}", decompress(compr, true).len()); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn part1_example1() { + let input = "ADVENT"; + assert_eq!(decompress(input, false).len(), 6); + } + + #[test] + fn part1_example2() { + let input = "A(1x5)BC"; + assert_eq!(decompress(input, false).len(), 7); + } + + #[test] + fn part1_example3() { + let input = "(3x3)XYZ"; + assert_eq!(decompress(input, false).len(), 9); + } + + #[test] + fn part1_example4() { + let input = "A(2x2)BCD(2x2)EFG"; + assert_eq!(decompress(input, false).len(), 11); + } + + #[test] + fn part1_example5() { + let input = "(6x1)(1x3)A"; + assert_eq!(decompress(input, false).len(), 6); + } + + #[test] + fn part1_example6() { + let input = "X(8x2)(3x3)ABCY"; + assert_eq!(decompress(input, false).len(), 18); + } + + #[test] + fn part2_example1() { + let input = "(3x3)XYZ"; + assert_eq!(decompress(input, true).len(), 9); + } + + #[test] + fn part2_example2() { + let input = "X(8x2)(3x3)ABCY"; + assert_eq!(decompress(input, true).len(), 20); + } + + #[test] + fn part2_example3() { + let input = "(27x12)(20x12)(13x14)(7x10)(1x12)A"; + assert_eq!(decompress(input, true).len(), 241920); + } + + #[test] + fn part2_example4() { + let input = "(25x3)(3x3)ABC(2x3)XY(5x2)PQRSTX(18x9)(3x2)TWO(5x7)SEVEN"; + assert_eq!(decompress(input, true).len(), 445); + } +} diff --git a/d10/Cargo.toml b/d10/Cargo.toml new file mode 100644 index 0000000..f900463 --- /dev/null +++ b/d10/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "d10" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/d10/input.txt b/d10/input.txt new file mode 100644 index 0000000..d68df01 --- /dev/null +++ b/d10/input.txt @@ -0,0 +1,231 @@ +bot 171 gives low to bot 4 and high to bot 84 +bot 1 gives low to bot 117 and high to bot 81 +bot 82 gives low to bot 209 and high to bot 103 +bot 128 gives low to bot 56 and high to bot 91 +value 23 goes to bot 8 +bot 7 gives low to bot 148 and high to bot 22 +bot 179 gives low to bot 91 and high to bot 77 +bot 158 gives low to bot 125 and high to bot 143 +bot 190 gives low to bot 26 and high to bot 100 +bot 32 gives low to output 12 and high to bot 6 +bot 115 gives low to bot 126 and high to bot 38 +bot 101 gives low to bot 202 and high to bot 66 +bot 143 gives low to bot 169 and high to bot 76 +bot 31 gives low to bot 109 and high to bot 95 +bot 103 gives low to bot 9 and high to bot 171 +bot 180 gives low to bot 137 and high to bot 93 +bot 73 gives low to bot 21 and high to bot 19 +bot 91 gives low to bot 18 and high to bot 58 +bot 49 gives low to bot 85 and high to bot 188 +bot 41 gives low to bot 69 and high to bot 203 +bot 10 gives low to bot 31 and high to bot 94 +bot 29 gives low to output 9 and high to bot 164 +bot 44 gives low to bot 194 and high to bot 180 +bot 157 gives low to bot 67 and high to bot 14 +bot 104 gives low to bot 114 and high to bot 149 +bot 183 gives low to bot 201 and high to bot 151 +bot 138 gives low to output 19 and high to bot 37 +bot 21 gives low to bot 98 and high to bot 205 +bot 9 gives low to bot 36 and high to bot 4 +bot 136 gives low to bot 87 and high to bot 196 +bot 99 gives low to output 20 and high to bot 96 +bot 142 gives low to bot 27 and high to bot 116 +bot 42 gives low to bot 118 and high to bot 104 +bot 108 gives low to bot 64 and high to bot 42 +value 7 goes to bot 157 +bot 159 gives low to bot 78 and high to bot 192 +bot 81 gives low to bot 124 and high to bot 3 +bot 148 gives low to bot 96 and high to bot 146 +bot 107 gives low to bot 49 and high to bot 48 +bot 38 gives low to bot 177 and high to bot 200 +value 43 goes to bot 106 +bot 28 gives low to bot 70 and high to bot 79 +bot 172 gives low to bot 106 and high to bot 190 +bot 162 gives low to bot 158 and high to bot 59 +bot 208 gives low to output 4 and high to output 13 +value 47 goes to bot 21 +bot 124 gives low to bot 79 and high to bot 83 +bot 206 gives low to bot 196 and high to bot 55 +bot 17 gives low to bot 65 and high to bot 187 +bot 144 gives low to bot 46 and high to bot 107 +bot 154 gives low to bot 195 and high to bot 78 +bot 106 gives low to bot 72 and high to bot 26 +bot 186 gives low to bot 14 and high to bot 209 +value 67 goes to bot 10 +bot 187 gives low to bot 123 and high to bot 193 +bot 5 gives low to bot 136 and high to bot 206 +bot 166 gives low to bot 61 and high to bot 85 +value 37 goes to bot 32 +bot 198 gives low to bot 76 and high to bot 71 +bot 97 gives low to output 18 and high to bot 129 +bot 139 gives low to bot 108 and high to bot 88 +bot 192 gives low to bot 131 and high to bot 89 +bot 174 gives low to bot 80 and high to bot 127 +bot 92 gives low to bot 11 and high to bot 7 +bot 94 gives low to bot 95 and high to bot 183 +value 5 goes to bot 98 +bot 72 gives low to bot 207 and high to bot 43 +bot 12 gives low to bot 68 and high to bot 195 +bot 156 gives low to bot 89 and high to bot 1 +bot 188 gives low to bot 197 and high to bot 64 +bot 3 gives low to bot 83 and high to bot 105 +bot 77 gives low to bot 58 and high to bot 41 +bot 11 gives low to bot 99 and high to bot 148 +bot 55 gives low to bot 45 and high to bot 44 +bot 66 gives low to bot 5 and high to bot 141 +bot 23 gives low to bot 48 and high to bot 139 +bot 18 gives low to bot 39 and high to bot 174 +bot 40 gives low to bot 190 and high to bot 39 +bot 90 gives low to bot 179 and high to bot 36 +bot 196 gives low to bot 92 and high to bot 45 +bot 79 gives low to bot 162 and high to bot 147 +value 2 goes to bot 172 +bot 135 gives low to bot 133 and high to bot 168 +bot 117 gives low to bot 28 and high to bot 124 +bot 118 gives low to bot 13 and high to bot 114 +bot 26 gives low to bot 43 and high to bot 12 +bot 185 gives low to bot 32 and high to bot 34 +value 61 goes to bot 207 +bot 193 gives low to bot 101 and high to bot 132 +bot 16 gives low to bot 186 and high to bot 82 +bot 93 gives low to bot 144 and high to bot 60 +bot 116 gives low to bot 155 and high to bot 57 +bot 39 gives low to bot 100 and high to bot 80 +bot 131 gives low to bot 173 and high to bot 74 +bot 133 gives low to output 11 and high to bot 20 +bot 137 gives low to bot 33 and high to bot 144 +value 11 goes to bot 52 +bot 105 gives low to bot 62 and high to bot 122 +bot 126 gives low to bot 25 and high to bot 177 +bot 78 gives low to bot 75 and high to bot 131 +bot 132 gives low to bot 66 and high to bot 167 +bot 202 gives low to bot 181 and high to bot 5 +bot 27 gives low to bot 163 and high to bot 116 +bot 173 gives low to bot 193 and high to bot 63 +value 41 goes to bot 112 +bot 13 gives low to bot 182 and high to bot 50 +bot 59 gives low to bot 143 and high to bot 198 +bot 123 gives low to bot 200 and high to bot 101 +bot 182 gives low to output 2 and high to bot 97 +bot 112 gives low to bot 8 and high to bot 15 +bot 86 gives low to bot 164 and high to bot 166 +bot 201 gives low to bot 82 and high to bot 151 +bot 62 gives low to bot 198 and high to bot 122 +bot 65 gives low to bot 38 and high to bot 123 +bot 165 gives low to bot 121 and high to bot 110 +bot 197 gives low to bot 37 and high to bot 111 +bot 69 gives low to bot 127 and high to bot 0 +bot 57 gives low to bot 81 and high to bot 3 +bot 168 gives low to bot 20 and high to bot 170 +value 31 goes to bot 31 +bot 6 gives low to output 7 and high to bot 133 +value 3 goes to bot 72 +bot 67 gives low to bot 204 and high to bot 161 +bot 35 gives low to bot 30 and high to bot 11 +bot 14 gives low to bot 161 and high to bot 90 +bot 175 gives low to bot 157 and high to bot 186 +bot 96 gives low to output 1 and high to bot 29 +bot 170 gives low to bot 51 and high to bot 176 +bot 68 gives low to bot 191 and high to bot 17 +bot 209 gives low to bot 90 and high to bot 9 +bot 150 gives low to bot 168 and high to bot 119 +bot 203 gives low to bot 0 and high to bot 27 +bot 2 gives low to output 3 and high to bot 208 +bot 50 gives low to bot 97 and high to bot 24 +bot 161 gives low to bot 128 and high to bot 179 +bot 167 gives low to bot 141 and high to bot 158 +value 73 goes to bot 112 +bot 163 gives low to bot 156 and high to bot 155 +bot 4 gives low to bot 178 and high to bot 84 +bot 147 gives low to bot 59 and high to bot 62 +bot 25 gives low to bot 135 and high to bot 150 +bot 121 gives low to bot 160 and high to bot 110 +bot 169 gives low to bot 44 and high to bot 47 +bot 75 gives low to bot 187 and high to bot 173 +bot 120 gives low to bot 176 and high to bot 87 +bot 177 gives low to bot 150 and high to bot 102 +bot 37 gives low to output 16 and high to bot 134 +bot 149 gives low to bot 24 and high to bot 130 +bot 34 gives low to bot 6 and high to bot 135 +value 71 goes to bot 109 +bot 43 gives low to bot 199 and high to bot 68 +bot 145 gives low to bot 139 and high to bot 88 +bot 84 gives low to bot 140 and high to bot 142 +bot 20 gives low to output 8 and high to bot 51 +bot 95 gives low to bot 16 and high to bot 201 +bot 61 gives low to output 5 and high to bot 138 +bot 83 gives low to bot 147 and high to bot 105 +bot 46 gives low to bot 166 and high to bot 49 +bot 153 gives low to bot 93 and high to bot 160 +bot 71 gives low to bot 152 and high to bot 165 +bot 48 gives low to bot 188 and high to bot 108 +bot 98 gives low to bot 185 and high to bot 184 +bot 70 gives low to bot 167 and high to bot 162 +bot 195 gives low to bot 17 and high to bot 75 +bot 205 gives low to bot 184 and high to bot 126 +bot 24 gives low to bot 129 and high to bot 130 +bot 60 gives low to bot 107 and high to bot 23 +bot 51 gives low to output 6 and high to bot 189 +bot 45 gives low to bot 7 and high to bot 194 +bot 164 gives low to output 0 and high to bot 61 +bot 8 gives low to bot 10 and high to bot 15 +value 19 goes to bot 67 +bot 181 gives low to bot 120 and high to bot 136 +value 13 goes to bot 204 +bot 114 gives low to bot 50 and high to bot 149 +bot 113 gives low to bot 52 and high to bot 56 +bot 30 gives low to output 14 and high to bot 99 +bot 63 gives low to bot 132 and high to bot 70 +bot 80 gives low to bot 154 and high to bot 159 +bot 53 gives low to bot 23 and high to bot 145 +bot 125 gives low to bot 55 and high to bot 169 +bot 56 gives low to bot 40 and high to bot 18 +bot 54 gives low to bot 192 and high to bot 156 +bot 155 gives low to bot 1 and high to bot 57 +bot 102 gives low to bot 119 and high to bot 181 +bot 151 gives low to bot 103 and high to bot 171 +bot 200 gives low to bot 102 and high to bot 202 +bot 0 gives low to bot 54 and high to bot 163 +bot 191 gives low to bot 115 and high to bot 65 +bot 119 gives low to bot 170 and high to bot 120 +bot 207 gives low to bot 73 and high to bot 199 +bot 184 gives low to bot 34 and high to bot 25 +value 59 goes to bot 73 +bot 130 gives low to bot 2 and high to bot 208 +bot 111 gives low to bot 134 and high to bot 13 +bot 15 gives low to bot 94 and high to bot 183 +bot 146 gives low to bot 29 and high to bot 86 +bot 58 gives low to bot 174 and high to bot 69 +bot 189 gives low to output 15 and high to bot 30 +bot 33 gives low to bot 86 and high to bot 46 +bot 100 gives low to bot 12 and high to bot 154 +bot 160 gives low to bot 60 and high to bot 53 +bot 129 gives low to output 17 and high to bot 2 +bot 87 gives low to bot 35 and high to bot 92 +bot 64 gives low to bot 111 and high to bot 118 +bot 134 gives low to output 10 and high to bot 182 +bot 122 gives low to bot 71 and high to bot 165 +bot 178 gives low to bot 41 and high to bot 140 +value 29 goes to bot 175 +bot 19 gives low to bot 205 and high to bot 115 +bot 47 gives low to bot 180 and high to bot 153 +value 17 goes to bot 113 +bot 176 gives low to bot 189 and high to bot 35 +bot 88 gives low to bot 42 and high to bot 104 +bot 199 gives low to bot 19 and high to bot 191 +value 53 goes to bot 185 +bot 22 gives low to bot 146 and high to bot 33 +bot 52 gives low to bot 172 and high to bot 40 +bot 141 gives low to bot 206 and high to bot 125 +bot 152 gives low to bot 153 and high to bot 121 +bot 140 gives low to bot 203 and high to bot 142 +bot 85 gives low to bot 138 and high to bot 197 +bot 89 gives low to bot 74 and high to bot 117 +bot 109 gives low to bot 175 and high to bot 16 +bot 36 gives low to bot 77 and high to bot 178 +bot 76 gives low to bot 47 and high to bot 152 +bot 194 gives low to bot 22 and high to bot 137 +bot 110 gives low to bot 53 and high to bot 145 +bot 74 gives low to bot 63 and high to bot 28 +bot 204 gives low to bot 113 and high to bot 128 +bot 127 gives low to bot 159 and high to bot 54 diff --git a/d10/src/main.rs b/d10/src/main.rs new file mode 100644 index 0000000..650c146 --- /dev/null +++ b/d10/src/main.rs @@ -0,0 +1,173 @@ +// Let the record show that I hated every second of solving this puzzle. + +use std::fs; + +#[derive(Copy, Clone, Debug)] +struct Bot { + lo: Option<usize>, + hi: Option<usize>, +} + +impl Bot { + fn new() -> Self { + Self { lo: None, hi: None } + } + + fn recv_chip(&mut self, val: usize) { + if self.lo.is_none() && self.hi.is_none() { + self.lo = Some(val); + } else if self.lo.is_some() && self.hi.is_none() { + let old_lo = self.lo.unwrap(); + if old_lo < val { + self.hi = Some(val); + } else { + self.lo = Some(val); + self.hi = Some(old_lo); + } + } else if self.lo.is_none() && self.hi.is_some() { + let old_hi = self.hi.unwrap(); + if old_hi > val { + self.lo = Some(val); + } else { + self.lo = Some(old_hi); + self.hi = Some(val); + } + } else if self.lo.is_some() && self.hi.is_some() { + // If both slots are occupied, we can't accept any more + } + } + + fn give_chip_lo(&mut self) -> Option<usize> { + let result = self.lo; + if result.is_some() { + self.lo = None; + } + result + } + + fn give_chip_hi(&mut self) -> Option<usize> { + let result = self.hi; + if result.is_some() { + self.hi = None; + } + result + } + + fn num_chips(&self) -> usize { + let mut result = 0; + + if self.lo.is_some() { + result += 1; + } + if self.hi.is_some() { + result += 1; + } + + result + } +} + +fn solve_puzzle(lines: &Vec<&str>, target: (usize, usize)) -> (usize, usize) { + let mut bots: Vec<Bot> = [Bot::new()].repeat(300); + let mut bins: Vec<Option<usize>> = [None].repeat(300); + + let mut part1 = None; + let mut part2 = None; + + let mut ln = 0; + // Loop 50k times until a self-consistent state is reached + for _i in 0..50000 { + let words: Vec<&str> = lines[ln].split_ascii_whitespace().collect(); + + // Take chip from input bin + if words[0] == "value" { + let to: usize = words[5].parse().unwrap(); + bots[to].recv_chip(words[1].parse().unwrap()); + } + + // Give chips to other bots or to output bins + if words[0] == "bot" { + let from: usize = words[1].parse().unwrap(); + + // Does the giver have two chips? If not, ignore this line (for now) + if bots[from].lo.is_some() && bots[from].hi.is_some() { + // Bot/bin indices to give chips to + let lo_to: usize = words[6].parse().unwrap(); + let hi_to: usize = words[11].parse().unwrap(); + + // Can the destination accept our chips? + let lo_avail = + (words[5] == "bot" && bots[lo_to].num_chips() < 2) || words[5] == "output"; + let hi_avail = + (words[10] == "bot" && bots[hi_to].num_chips() < 2) || words[10] == "output"; + if lo_avail && hi_avail { + // Give the low chip + let lo = bots[from].give_chip_lo().unwrap(); + if words[5] == "bot" { + bots[lo_to].recv_chip(lo); + } else if words[5] == "output" { + bins[lo_to] = Some(lo); // overwrite + } + + // Give the high chip + let hi = bots[from].give_chip_hi().unwrap(); + if words[10] == "bot" { + bots[hi_to].recv_chip(hi); + } else if words[10] == "output" { + bins[hi_to] = Some(hi); // overwrite + } + } + } + } + + // Which bot ends up comparing the target-valued chips? + for j in 0..bots.len() { + if bots[j].lo.is_some() && bots[j].lo.unwrap() == target.0 { + if bots[j].hi.is_some() && bots[j].hi.unwrap() == target.1 { + part1 = Some(j); + } + } + } + + // What is the product of the chips that end up in output bins 0, 1 and 2? + if bins[0].is_some() && bins[1].is_some() && bins[2].is_some() { + part2 = Some(bins[0].unwrap() * bins[1].unwrap() * bins[2].unwrap()); + } + + ln = (ln + 1) % lines.len(); + } + + (part1.unwrap(), part2.unwrap()) +} + +fn main() { + // Read instructions from input text file + let input = fs::read_to_string("input.txt").unwrap(); + let lines = input.lines().collect(); + + let (part1, part2) = solve_puzzle(&lines, (17, 61)); + + // Part 1 gives 101 for me + println!("Part 1 solution: {}", part1); + + // Part 2 gives 37789 for me + println!("Part 2 solution: {}", part2); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn part1_example1() { + let lines = vec![ + "value 5 goes to bot 2", + "bot 2 gives low to bot 1 and high to bot 0", + "value 3 goes to bot 1", + "bot 1 gives low to output 1 and high to bot 0", + "bot 0 gives low to output 2 and high to output 0", + "value 2 goes to bot 2", + ]; + assert_eq!(solve_puzzle(&lines, (2, 5)), (2, 30)); + } +} diff --git a/d11/Cargo.toml b/d11/Cargo.toml new file mode 100644 index 0000000..c5e07ff --- /dev/null +++ b/d11/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "d11" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/d11/input.txt b/d11/input.txt new file mode 100644 index 0000000..7364dd0 --- /dev/null +++ b/d11/input.txt @@ -0,0 +1,4 @@ +The first floor contains a promethium generator and a promethium-compatible microchip. +The second floor contains a cobalt generator, a curium generator, a ruthenium generator, and a plutonium generator. +The third floor contains a cobalt-compatible microchip, a curium-compatible microchip, a ruthenium-compatible microchip, and a plutonium-compatible microchip. +The fourth floor contains nothing relevant. diff --git a/d11/src/main.rs b/d11/src/main.rs new file mode 100644 index 0000000..3dfad58 --- /dev/null +++ b/d11/src/main.rs @@ -0,0 +1,251 @@ +use std::collections::{HashSet, VecDeque}; + +#[derive(Clone, Debug, PartialEq)] +struct Floor<'a> { + generators: HashSet<&'a str>, + microchips: HashSet<&'a str>, +} + +#[derive(Clone, Debug, PartialEq)] +struct State<'a> { + // Elevator's current location (index into `floors') + elevator: usize, + // Generators and microchips on each floor + floors: [Floor<'a>; 4], +} + +impl<'a> State<'a> { + // We need to serialize states into a hashable type + // to get O(1) membership tests in the history log. + // `HashSet' isn't hashable, so no `Hash' trait here. + fn serialize(&self) -> String { + let mut result = format!("{} ", self.elevator); + + for f in &self.floors { + let mut gkeys: Vec<&&str> = f.generators.iter().collect(); + gkeys.sort(); + for gk in gkeys { + result.push_str(gk); + } + result.push(' '); + + let mut mkeys: Vec<&&str> = f.microchips.iter().collect(); + mkeys.sort(); + for mk in mkeys { + result.push_str(mk); + } + result.push(','); + } + + result + } +} + +fn solve_puzzle(start: State) -> usize { + let mut visited = HashSet::from([start.serialize()]); // O(1) `contains()' + let mut queue = VecDeque::from([(start, 0)]); + + // Breadth-first search of the state space, where nodes are legal states + // and edges are legal moves. The space is large, so this takes a minute. + loop { + let (state, depth) = queue.pop_front().unwrap(); + + // Abbreviation for current floor + let ce = state.elevator; + let cf = &state.floors[ce]; + + // End condition: are all floors empty, except the top one? + if state.elevator == 3 { + let mut others_empty = true; + for f in &state.floors[0..3] { + others_empty &= f.generators.len() == 0 && f.microchips.len() == 0; + } + if others_empty { + return depth; + } + } + + // Generate item choices to take into elevator for next step + let mut choices = Vec::new(); + for &g1 in &cf.generators { + // Pick one generator `g1' + choices.push(Floor { + generators: HashSet::from([g1]), + microchips: HashSet::new(), + }); + // Pick two generators `g1' and `g2' + for &g2 in &cf.generators { + choices.push(Floor { + generators: HashSet::from([g1, g2]), + microchips: HashSet::new(), + }); + } + // Pick one generator `g1' and one microchip `m1' + for &m1 in &cf.microchips { + choices.push(Floor { + generators: HashSet::from([g1]), + microchips: HashSet::from([m1]), + }); + } + } + for &m1 in &cf.microchips { + // Pick one microchip `m1' + choices.push(Floor { + generators: HashSet::new(), + microchips: HashSet::from([m1]), + }); + // Pick two microchips `m1' and `m2' + for &m2 in &cf.microchips { + choices.push(Floor { + generators: HashSet::new(), + microchips: HashSet::from([m1, m2]), + }); + } + } + + // Possible next locations of elevator (one floor up or down) + let mut new_elevs = Vec::new(); + if state.elevator < 3 { + new_elevs.push(state.elevator + 1); + } + if state.elevator > 0 { + new_elevs.push(state.elevator - 1); + } + + let mut candidates = Vec::new(); + 'choices: for choice in choices { + // If we picked one generator and one microchip, they must be compatible. + // The puzzle description is actually unclear on if this is a legal move, + // i.e. is the elevator ride long enough to fry an incompatible chip? + // I assumed yes, and got the right answer, so... + if choice.generators.len() == 1 && choice.microchips.len() == 1 { + for m in &choice.microchips { // runs once + if !choice.generators.contains(m) { + continue 'choices; + } + } + } + + // Convert `choice' into `candidates' for new states + for &ne in &new_elevs { + let mut cand = state.clone(); + cand.elevator = ne; + for g in &choice.generators { + cand.floors[ce].generators.remove(g); + cand.floors[ne].generators.insert(g); + } + for m in &choice.microchips { + cand.floors[ce].microchips.remove(m); + cand.floors[ne].microchips.insert(m); + } + + // Check if this new state is allowed + let mut is_legal = true; + // Do we leave behing the old/current floor in a valid configuration? + if cand.floors[ce].generators.len() > 0 { + for m in &cand.floors[ce].microchips { + if !cand.floors[ce].generators.contains(m) { + is_legal = false; + break; + } + } + } + // Will the new floor be in a valid configuration? + if cand.floors[ne].generators.len() > 0 { + for m in &cand.floors[ne].microchips { + if !cand.floors[ne].generators.contains(m) { + is_legal = false; + break; + } + } + } + if is_legal { + candidates.push(cand); + } + } + } + + // Breadth-first search stuff: add unexplored nodes to queue + for cand in candidates { + let ser = cand.serialize(); + if !visited.contains(&ser) { + visited.insert(ser); + queue.push_back((cand, depth + 1)); + } + } + } +} + +fn main() { + // Unlike all other days with an `input.txt' file, I just hardcode + // my input here, because I'm too lazy to parse natural language. + let floor1_part1 = Floor { + generators: HashSet::from(["Pm"]), + microchips: HashSet::from(["Pm"]), + }; + let floor2 = Floor { + generators: HashSet::from(["Co", "Cm", "Ru", "Pu"]), + microchips: HashSet::new(), + }; + let floor3 = Floor { + generators: HashSet::new(), + microchips: HashSet::from(["Co", "Cm", "Ru", "Pu"]), + }; + let floor4 = Floor { + generators: HashSet::new(), + microchips: HashSet::new(), + }; + // Part 1 gives 33 for me + println!( + "Part 1 solution: {}", + solve_puzzle(State { + elevator: 0, + floors: [floor1_part1, floor2.clone(), floor3.clone(), floor4.clone()], + }) + ); + + let floor1_part2 = Floor { + generators: HashSet::from(["Pm", "El", "Di"]), + microchips: HashSet::from(["Pm", "El", "Di"]), + }; + // Part 2 gives 57 for me + println!( + "Part 2 solution: {}", + solve_puzzle(State { + elevator: 0, + floors: [floor1_part2, floor2.clone(), floor3.clone(), floor4.clone()], + }) + ); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn part1_example1() { + let floor1 = Floor { + generators: HashSet::new(), + microchips: HashSet::from(["H", "Li"]), + }; + let floor2 = Floor { + generators: HashSet::from(["H"]), + microchips: HashSet::new(), + }; + let floor3 = Floor { + generators: HashSet::from(["Li"]), + microchips: HashSet::new(), + }; + let floor4 = Floor { + generators: HashSet::new(), + microchips: HashSet::new(), + }; + assert_eq!( + 11, + solve_puzzle(State { + elevator: 0, + floors: [floor1, floor2, floor3, floor4], + }) + ); + } +} diff --git a/d12/Cargo.toml b/d12/Cargo.toml new file mode 100644 index 0000000..79bcf74 --- /dev/null +++ b/d12/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "d12" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/d12/input.txt b/d12/input.txt new file mode 100644 index 0000000..bb2a2ff --- /dev/null +++ b/d12/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/d12/src/main.rs b/d12/src/main.rs new file mode 100644 index 0000000..d49ec45 --- /dev/null +++ b/d12/src/main.rs @@ -0,0 +1,129 @@ +use std::fs; +use std::collections::HashMap; + +enum Oper<'a> { + IncReg, + DecReg, + CpyReg(&'a str), + CpyLit(isize), + JnzReg(&'a str, isize), + JnzLit(isize, isize), +} + +fn parse(lines: Vec<&str>) -> Vec<(Oper, &str)> { + // We emit tuples of type `(Oper, &str)', where the second field + // is the destination register. Storing the destination this way, + // instead of inside the `Oper' enum, helps keep `execute()' DRY. + let mut insts = Vec::new(); + + for line in lines { + let words: Vec<&str> = line.split_ascii_whitespace().collect(); + + if words[0] == "inc" { + // words[1] is register name + insts.push((Oper::IncReg, words[1])); + } else if words[0] == "dec" { + // words[1] is register name + insts.push((Oper::DecReg, words[1])); + } else if words[0] == "cpy" { + // words[1] is source, can be literal number or register name + // words[2] is destination register name + if words[1].chars().all(|c| c.is_ascii_digit() || c == '-') { // yes I know + let val = words[1].parse().unwrap(); + insts.push((Oper::CpyLit(val), words[2])); + } else { + insts.push((Oper::CpyReg(words[1]), words[2])); + } + } else if words[0] == "jnz" { + // words[1] is value, can be literal number or register name + // words[2] is offset to jump by if branch is taken + let off = words[2].parse().unwrap(); + if words[1].chars().all(|c| c.is_ascii_digit() || c == '-') { // I know + let val = words[1].parse().unwrap(); + insts.push((Oper::JnzLit(val, off), "_")); + } else { + insts.push((Oper::JnzReg(words[1], off), "_")); + } + } + } + + insts +} + +fn execute(insts: &Vec<(Oper, &str)>, init: Vec<(&str, isize)>) -> isize { + // `init' contains initial register values + let mut state: HashMap<&str, isize> = init.into_iter().collect(); + + let mut ip = 0; // instruction pointer + while ip < insts.len() { + // Get destination register now, because we'll mess with `ip' later + let dst = insts[ip].1; + + // Too early for mutable borrow of `state', so write to `tmp' instead + let mut tmp = state.get(dst).copied().unwrap_or(0); + match insts[ip].0 { + Oper::IncReg => { + tmp += 1; + }, + Oper::DecReg => { + tmp -= 1; + }, + Oper::CpyLit(val) => { + tmp = val; + }, + Oper::CpyReg(src) => { + let val = state.get(&src).copied().unwrap_or(0); + tmp = val; + }, + Oper::JnzLit(val, off) => { + if val != 0 { + // Subtract 1 to compensate for `ip += 1;' below + ip = ((ip as isize) + off - 1) as usize; + } + }, + Oper::JnzReg(src, off) => { + let val = state.get(&src).copied().unwrap_or(0); + if val != 0 { + // Subtract 1 to compensate for `ip += 1;' below + ip = ((ip as isize) + off - 1) as usize; + } + }, + }; + + // "_" is a dummy destination register used by the "jnz" instructions + if dst != "_" { + *state.entry(dst).or_insert(0) = tmp; + } + + ip += 1; + } + + state.get("a").copied().unwrap() +} + +fn main() { + // Read assembly from input text file and parse it + let input = fs::read_to_string("input.txt").unwrap(); + let lines = input.lines().collect(); + let insts = parse(lines); + + // Part 1 gives 318117 for my input + println!("Part 1 solution: {}", execute(&insts, vec![])); + + // Part 2 gives 9227771 for my input + println!("Part 2 solution: {}", execute(&insts, vec![("c", 1)])); +} + + + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn part1_example1() { + let lines = vec!["cpy 41 a", "inc a", "inc a", "dec a", "jnz a 2", "dec a"]; + let insts = parse(lines); + assert_eq!(execute(&insts, vec![]), 42); + } +} diff --git a/d13/Cargo.toml b/d13/Cargo.toml new file mode 100644 index 0000000..2bab20e --- /dev/null +++ b/d13/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "d13" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/d13/src/main.rs b/d13/src/main.rs new file mode 100644 index 0000000..52ef4ce --- /dev/null +++ b/d13/src/main.rs @@ -0,0 +1,79 @@ +use std::collections::VecDeque; + +fn is_space(seed: usize, (x, y): (usize, usize)) -> bool { + let sum = x*x + 3*x + 2*x*y + y + y*y + seed; + let bin = format!("{:#b}", sum); + bin.matches('1').count() % 2 == 0 +} + +fn solve_puzzle(seed: usize, part1_goal: (usize, usize), part2_limit: usize) -> (usize, usize) { + let mut part1_found = false; + let mut part1_depth = 0; + let mut part2_count = 1; + + // Breadth-first search of the maze + let start = (1, 1); + let mut visited = vec![start]; + let mut queue = VecDeque::from([(start, 0)]); + loop { + let (pos, depth) = queue.pop_front().unwrap(); + + // Is this the shortest path to `part1_goal'? + if pos == part1_goal && !part1_found { + part1_found = true; + part1_depth = depth; + } + // Have we found all the information we want? + if depth > part2_limit && part1_found { + return (part1_depth, part2_count); + } + + // The grid extends infinitely far in the positive directions + let mut adjacents = vec![ + (pos.0 + 1, pos.1), + (pos.0, pos.1 + 1), + ]; + if pos.0 > 0 { + adjacents.push((pos.0 - 1, pos.1)); + } + if pos.1 > 0 { + adjacents.push((pos.0, pos.1 - 1)); + } + + for adj in adjacents { + // Is this a valid move to a space we haven't visited before? + if is_space(seed, adj) && !visited.contains(&adj) { + visited.push(adj); + queue.push_back((adj, depth + 1)); + + // Count locations reachable in at most `part2_limit' steps + if depth < part2_limit { + part2_count += 1; + } + } + } + } +} + +fn main() { + // My personal puzzle input + let seed = 1358; + + let (part1, part2) = solve_puzzle(seed, (31, 39), 50); + + // Part 1 gives 96 for me + println!("Part 1 solution: {}", part1); + + // Part 2 gives 141 for me + println!("Part 2 solution: {}", part2); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn part1_example1() { + assert_eq!(solve_puzzle(10, (7, 4), 42).0, 11); + } +} diff --git a/d14/Cargo.toml b/d14/Cargo.toml new file mode 100644 index 0000000..af72462 --- /dev/null +++ b/d14/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "d14" +version = "0.1.0" +edition = "2021" + +[dependencies] +md5 = "0.7.0" diff --git a/d14/src/main.rs b/d14/src/main.rs new file mode 100644 index 0000000..52f9f1f --- /dev/null +++ b/d14/src/main.rs @@ -0,0 +1,116 @@ +use md5; + +type Hash = Vec<char>; + +// Find first `char' appearing three time in a row in `h', if any +fn find_triple(h: &Hash) -> Option<char> { + for i in 0..h.len() - 2 { + if h[i] == h[i + 1] && h[i] == h[i + 2] { + return Some(h[i]); + } + } + None +} + +// Does `h' contain `c' five times in a row? +fn has_quintuple(h: &Hash, c: char) -> bool { + let mut qs: Vec<char> = Vec::new(); + + for i in 0..h.len() - 4 { + if h[i] == h[i + 1] && h[i] == h[i + 2] && h[i] == h[i + 3] && h[i] == h[i + 4] { + qs.push(h[i]) + } + } + + qs.contains(&c) +} + +struct HashCache<'a> { + salt: &'a str, + reps: usize, + vec: Vec<Hash>, +} + +impl<'a> HashCache<'a> { + fn new(salt: &'a str, reps: usize) -> Self { + HashCache { + salt, + reps, + vec: Vec::new(), + } + } + + // Generate hashes on demand, and always cache them for later use. + // Can't write this as `impl Index<usize> for HashCache' because + // the `Index' trait only allows an immutable borrow `&self'. + fn at_index(&mut self, i: usize) -> &Hash { + // If this hash is not in the cache yet... + if i >= self.vec.len() { + // ... calculate all hashes up to the requested one + for j in self.vec.len()..i + 1 { + let d = format!("{}{}", self.salt, j); + let mut h = format!("{:x}", md5::compute(d)); + + // Additional key stretching repetitions + for _k in 0..self.reps { + h = format!("{:x}", md5::compute(h)); + } + + self.vec.push(h.chars().collect()); + } + } + + &self.vec[i] + } +} + +fn solve_puzzle(salt: &str, reps: usize) -> usize { + // The 64 valid indices we want to find + let mut valid = Vec::new(); + + let mut hc = HashCache::new(salt, reps); + let mut i = 0; + while valid.len() < 64 { + // If `hc.at_index(i)' contains any `c' three times in a row + if let Some(c) = find_triple(hc.at_index(i)) { + for j in 1..1001 { + if has_quintuple(hc.at_index(i + j), c) { + valid.push(i); + break; + } + } + } + + i += 1; + } + + *valid.last().unwrap() +} + +fn main() { + // My personal puzzle input + let salt = "yjdafjpo"; + + // Part 1 gives 25427 for me + println!("Part 1 solution: {}", solve_puzzle(salt, 0)); + + // Part 2 gives 22045 for me + println!("Part 2 solution: {}", solve_puzzle(salt, 2016)); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn part1_example1() { + let salt = "abc"; + assert_eq!(solve_puzzle(salt, 0), 22728); + } + + #[test] + fn part2_example1() { + let salt = "abc"; + assert_eq!(solve_puzzle(salt, 2016), 22551); + } +} diff --git a/d15/Cargo.toml b/d15/Cargo.toml new file mode 100644 index 0000000..01030d9 --- /dev/null +++ b/d15/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "d15" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/d15/input.txt b/d15/input.txt new file mode 100644 index 0000000..396cee2 --- /dev/null +++ b/d15/input.txt @@ -0,0 +1,6 @@ +Disc #1 has 13 positions; at time=0, it is at position 10. +Disc #2 has 17 positions; at time=0, it is at position 15. +Disc #3 has 19 positions; at time=0, it is at position 17. +Disc #4 has 7 positions; at time=0, it is at position 1. +Disc #5 has 5 positions; at time=0, it is at position 0. +Disc #6 has 3 positions; at time=0, it is at position 1. diff --git a/d15/src/main.rs b/d15/src/main.rs new file mode 100644 index 0000000..be1ce8f --- /dev/null +++ b/d15/src/main.rs @@ -0,0 +1,71 @@ +use std::fs; + +#[derive(Clone, Debug)] +struct Disc { + pos: usize, + period: usize, +} + +fn parse(lines: Vec<&str>) -> Vec<Disc> { + let mut result = Vec::new(); + // Add a dummy 0th disc for slightly cleaner code later + result.push(Disc { pos: 0, period: 1 }); + + for line in lines { + let words: Vec<&str> = line.split_ascii_whitespace().collect(); + result.push(Disc { + pos: words[11].trim_end_matches('.').parse().unwrap(), + period: words[3].parse().unwrap(), + }); + } + + result +} + +fn solve_puzzle(discs: &Vec<Disc>) -> usize { + let mut t_start = 0; + + 'outer: loop { + let mut dt = 1; + while dt < discs.len() { + // Calculate the disc's current position. If 0, the capsule + // can continue, otherwise this `t_start' must be rejected. + if (discs[dt].pos + t_start + dt) % discs[dt].period != 0 { + t_start += 1; + continue 'outer; + } + dt += 1; + } + + return t_start; + } +} + +fn main() { + // Read disc stats from input text file + let input = fs::read_to_string("input.txt").unwrap(); + let lines = input.lines().collect(); + let mut discs = parse(lines); + + // Part 1 gives 203660 for me + println!("Part 1 solution: {}", solve_puzzle(&discs)); + + discs.push(Disc { pos: 0, period: 11 }); + // Part 2 gives 2408135 for me + println!("Part 2 solution: {}", solve_puzzle(&discs)); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn part1_example1() { + let lines = vec![ + "Disc #1 has 5 positions; at time=0, it is at position 4.", + "Disc #2 has 2 positions; at time=0, it is at position 1.", + ]; + let discs = parse(lines); + assert_eq!(solve_puzzle(&discs), 5); + } +} diff --git a/d16/Cargo.toml b/d16/Cargo.toml new file mode 100644 index 0000000..32dad4c --- /dev/null +++ b/d16/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "d16" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/d16/src/main.rs b/d16/src/main.rs new file mode 100644 index 0000000..06ba9e1 --- /dev/null +++ b/d16/src/main.rs @@ -0,0 +1,81 @@ +fn generate_data(input: &str, length: usize) -> String { + let mut a = String::from(input); + + while a.len() < length { + let mut b = String::new(); + + // Fill `b' with reversed and bit-flipped `a' + for c in a.chars().rev() { + b.push(if c == '0' { '1' } else { '0' }); + } + + a = format!("{}0{}", a, b); + } + + a.truncate(length); + a +} + +fn get_checksum(data: &str) -> String { + let mut chars: Vec<char> = data.chars().collect(); + + while chars.len() % 2 == 0 { + let mut next = Vec::new(); + + // For each pair of characters (length is even due to `while') + for i in 0..chars.len() / 2 { + // If both chars in this pair are equal + if chars[2 * i] == chars[2 * i + 1] { + next.push('1'); + } else { + next.push('0'); + } + } + + chars = next; + } + + chars.into_iter().collect() +} + +fn solve_puzzle(input: &str, length: usize) -> String { + let data = generate_data(input, length); + get_checksum(&data) +} + +fn main() { + // My personal puzzle input + let input = "11011110011011101"; + + // Part 1 gives 00000100100001100 for me + println!("Part 1 solution: {}", solve_puzzle(input, 272)); + + // Part 1 gives 00011010100010010 for me + println!("Part 2 solution: {}", solve_puzzle(input, 35651584)); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_data() { + assert_eq!(generate_data("1", 3), "100"); + assert_eq!(generate_data("0", 3), "001"); + assert_eq!(generate_data("11111", 11), "11111000000"); + assert_eq!( + generate_data("111100001010", 25), + "1111000010100101011110000" + ); + } + + #[test] + fn test_checksum() { + assert_eq!(get_checksum("110010110100"), "100"); + } + + #[test] + fn part1_example1() { + assert_eq!(solve_puzzle("10000", 20), "01100"); + } +} diff --git a/d17/Cargo.toml b/d17/Cargo.toml new file mode 100644 index 0000000..afee2ab --- /dev/null +++ b/d17/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "d17" +version = "0.1.0" +edition = "2021" + +[dependencies] +md5 = "0.7.0" diff --git a/d17/src/main.rs b/d17/src/main.rs new file mode 100644 index 0000000..bacc9f4 --- /dev/null +++ b/d17/src/main.rs @@ -0,0 +1,109 @@ +use std::collections::VecDeque; + +use md5; + +fn solve_puzzle(passwd: &str) -> Vec<String> { + let mut paths = Vec::new(); + + // Breadth-first search of all possible paths + let start = (String::new(), (0, 0)); + let mut queue = VecDeque::from([start]); + loop { + let pp = queue.pop_front(); + // All paths have finished or got stuck at locked doors + if pp.is_none() { + break; + } + // Did we successfully reach the bottom-right corner? + let (path, pos) = pp.unwrap(); + if pos == (3, 3) { + paths.push(path.clone()); + continue; + } + + // Doors open based on MD5 hash of `passw' + `path' + let data = format!("{}{}", passwd, path); + let hash: Vec<char> = format!("{:x}", md5::compute(data)).chars().collect(); + + // Which doors are open, i.e. what are the valid next moves? + let mut options = Vec::new(); + let unlock = ['b', 'c', 'd', 'e', 'f']; + if unlock.contains(&hash[0]) && pos.1 > 0 { + options.push((format!("{}U", path), (pos.0, pos.1 - 1))); + } + if unlock.contains(&hash[1]) && pos.1 < 3 { + options.push((format!("{}D", path), (pos.0, pos.1 + 1))); + } + if unlock.contains(&hash[2]) && pos.0 > 0 { + options.push((format!("{}L", path), (pos.0 - 1, pos.1))); + } + if unlock.contains(&hash[3]) && pos.0 < 3 { + options.push((format!("{}R", path), (pos.0 + 1, pos.1))); + } + + // This is a breadth-first search, but because `path' is encoded + // into the state, we don't need to check that nodes are unexplored + for (npath, npos) in options { + queue.push_back((npath, npos)); + } + } + + paths +} + +fn main() { + // My personal puzzle input + let input = "edjrjqaa"; + + let paths = solve_puzzle(input); + + // Part 1 gives "DUDRDLRRRD" for me + println!("Part 1 solution: {}", paths.first().unwrap()); + + // Part 2 gives 502 for me + println!("Part 2 solution: {}", paths.last().unwrap().len()); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn part1_example1() { + let passwd = "ihgpwlah"; + assert_eq!(solve_puzzle(passwd).first().unwrap(), "DDRRRD"); + } + + #[test] + fn part2_example1() { + let passwd = "ihgpwlah"; + assert_eq!(solve_puzzle(passwd).last().unwrap().len(), 370); + } + + #[test] + fn part1_example2() { + let passwd = "kglvqrro"; + assert_eq!(solve_puzzle(passwd).first().unwrap(), "DDUDRLRRUDRD"); + } + + #[test] + fn part2_example2() { + let passwd = "kglvqrro"; + assert_eq!(solve_puzzle(passwd).last().unwrap().len(), 492); + } + + #[test] + fn part1_example3() { + let passwd = "ulqzkmiv"; + assert_eq!( + solve_puzzle(passwd).first().unwrap(), + "DRURDRUDDLLDLUURRDULRLDUUDDDRR" + ); + } + + #[test] + fn part2_example3() { + let passwd = "ulqzkmiv"; + assert_eq!(solve_puzzle(passwd).last().unwrap().len(), 830); + } +} diff --git a/d18/Cargo.toml b/d18/Cargo.toml new file mode 100644 index 0000000..02d725e --- /dev/null +++ b/d18/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "d18" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/d18/input.txt b/d18/input.txt new file mode 100644 index 0000000..2036710 --- /dev/null +++ b/d18/input.txt @@ -0,0 +1 @@ +.^^^.^.^^^^^..^^^..^..^..^^..^.^.^.^^.^^....^.^...^.^^.^^.^^..^^..^.^..^^^.^^...^...^^....^^.^^^^^^^ diff --git a/d18/src/main.rs b/d18/src/main.rs new file mode 100644 index 0000000..a9410f2 --- /dev/null +++ b/d18/src/main.rs @@ -0,0 +1,62 @@ +use std::fs; + +fn solve_puzzle(first: &str, num_rows: usize) -> usize { + let mut total = first.matches('.').count(); + + let mut tiles: Vec<char> = first.chars().collect(); + for _i in 1..num_rows { + let mut next = Vec::new(); + + for j in 0..tiles.len() { + let is_trap; + + // At left wall + if j == 0 { + is_trap = tiles[j + 1] == '^'; // rule 2 + 4 + // At right wall + } else if j == tiles.len() - 1 { + is_trap = tiles[j - 1] == '^'; // rule 1 + 3 + // Away from the walls + } else { + is_trap = tiles[j - 1] == '^' && tiles[j + 1] == '.' // rule 1 + 3 + || tiles[j - 1] == '.' && tiles[j + 1] == '^'; // rule 2 + 4 + } + + next.push(if is_trap { '^' } else { '.' }); + } + + tiles = next; + total += tiles.iter().filter(|&c| *c == '.').count(); + } + + total +} + +fn main() { + // Read my personal puzzle input + let input = fs::read_to_string("input.txt").unwrap(); + let first = input.trim_end(); + + // Part 1 gives 1939 for me + println!("Part 1 solution: {}", solve_puzzle(first, 40)); + + // Part 2 gives 19999535 for me + println!("Part 1 solution: {}", solve_puzzle(first, 400000)); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn part1_example1() { + let input = "..^^."; + assert_eq!(solve_puzzle(input, 3), 6); + } + + #[test] + fn part1_example2() { + let input = ".^^.^.^^^^"; + assert_eq!(solve_puzzle(input, 10), 38); + } +} diff --git a/d19/Cargo.toml b/d19/Cargo.toml new file mode 100644 index 0000000..92c186c --- /dev/null +++ b/d19/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "d19" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/d19/src/main.rs b/d19/src/main.rs new file mode 100644 index 0000000..91d9524 --- /dev/null +++ b/d19/src/main.rs @@ -0,0 +1,85 @@ +// Find the next Elf still in the game, to the left of `i' +fn next_elf(elves: &[bool], i: usize) -> usize { + let mut n = (i + 1) % elves.len(); + while !elves[n] { + n = (n + 1) % elves.len(); + } + n +} + +fn solve_puzzle( + num_elves: usize, + victim1: usize, + next_victim: fn(&[bool], usize, usize, usize) -> usize, +) -> usize { + // We only need to store whether an Elf is still in the game; + // we don't care how many presents each one has. + let mut elves = [true].repeat(num_elves); + + // Thief and victim indices, respectively + let mut t = 0; + let mut v = victim1; + + let mut rem = num_elves; + while rem > 1 { + // Perform the act of stealing + elves[v] = false; + rem -= 1; + + // Who does the stealing next? + t = next_elf(&elves, t); + + // Who gets stolen from next? + v = next_victim(&elves, rem, t, v); + } + + // Elves should be numbered from 1 instead of 0 + t + 1 +} + +// Part 1: victim is always to the left of thief. +fn next_victim_part1(elves: &[bool], _rem: usize, nthief: usize, _victim: usize) -> usize { + next_elf(elves, nthief) +} + +// Part 2: victim is always across from thief. +// It's less clear that this function is correct, but it is! +fn next_victim_part2(elves: &[bool], rem: usize, _nthief: usize, victim: usize) -> usize { + let mut nv = next_elf(elves, victim); + if rem % 2 == 0 { + nv = next_elf(elves, nv); + } + nv +} + +fn main() { + // My personal puzzle input + let input = 3014603; + + // Part 1 gives 1834903 for me + println!( + "Part 1 solution: {}", + solve_puzzle(input, 1, next_victim_part1) + ); + + // Part 2 gives 1420280 for me + println!( + "Part 2 solution: {}", + solve_puzzle(input, input / 2, next_victim_part2) + ); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn part1_example1() { + assert_eq!(solve_puzzle(5, 1, next_victim_part1), 3); + } + + #[test] + fn part2_example1() { + assert_eq!(solve_puzzle(5, 5 / 2, next_victim_part2), 2); + } +} diff --git a/d20/Cargo.toml b/d20/Cargo.toml new file mode 100644 index 0000000..f5251d0 --- /dev/null +++ b/d20/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "d20" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/d20/input.txt b/d20/input.txt new file mode 100644 index 0000000..c3e912f --- /dev/null +++ b/d20/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/d20/src/main.rs b/d20/src/main.rs new file mode 100644 index 0000000..fbfd5dc --- /dev/null +++ b/d20/src/main.rs @@ -0,0 +1,72 @@ +use std::fs; + +fn solve_part1(ranges: &Vec<(u32, u32)>) -> u32 { + 'outer: for i in 0..u32::MAX { + for &(lower, upper) in ranges { + if i >= lower && i <= upper { + // This IP is blacklisted + continue 'outer; + } + } + + return i; + } + + u32::MAX // shouldn't be reached +} + +fn solve_part2(mut ranges: Vec<(u32, u32)>) -> u32 { + // Sort by upper limit, so we know if a range is still needed + ranges.sort_by_key(|x| x.1); + + let mut count = 0; + 'outer: for i in 0..u32::MAX { + // Reduce the size of `ranges' to keep loop time reasonable + if i > ranges[0].1 { + ranges.remove(0); + } + + for &(lower, upper) in &ranges { + if i >= lower && i <= upper { + // This IP is blacklisted + continue 'outer; + } + } + + count += 1; + } + + count +} + +fn main() { + // Read blacklist from input text file + let input = fs::read_to_string("input.txt").unwrap(); + let lines: Vec<&str> = input.lines().collect(); + + let mut ranges = Vec::new(); + for line in lines { + let split: Vec<&str> = line.split('-').collect(); + let lower: u32 = split[0].parse().unwrap(); + let upper: u32 = split[1].parse().unwrap(); + ranges.push((lower, upper)); + } + ranges.sort_by_key(|x| x.0); + + // Part 1 gives 23923783 for me + println!("Part 1 solution: {}", solve_part1(&ranges)); + + // Part 2 gives 125 for me + println!("Part 2 solution: {}", solve_part2(ranges)); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn part1_example1() { + let ranges = vec![(5, 8), (0, 2), (4, 7)]; + assert_eq!(solve_part1(&ranges), 3); + } +} diff --git a/d21/Cargo.toml b/d21/Cargo.toml new file mode 100644 index 0000000..f06cd6a --- /dev/null +++ b/d21/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "d21" +version = "0.1.0" +edition = "2021" + +[dependencies] +itertools = "0.10.5" diff --git a/d21/input.txt b/d21/input.txt new file mode 100644 index 0000000..b39b884 --- /dev/null +++ b/d21/input.txt @@ -0,0 +1,100 @@ +reverse positions 1 through 6 +rotate based on position of letter a +swap position 4 with position 1 +reverse positions 1 through 5 +move position 5 to position 7 +swap position 4 with position 0 +swap position 4 with position 6 +rotate based on position of letter a +swap position 0 with position 2 +move position 5 to position 2 +move position 7 to position 1 +swap letter d with letter c +swap position 5 with position 3 +reverse positions 3 through 7 +rotate based on position of letter d +swap position 7 with position 5 +rotate based on position of letter f +swap position 4 with position 1 +swap position 3 with position 6 +reverse positions 4 through 7 +rotate based on position of letter c +move position 0 to position 5 +swap position 7 with position 4 +rotate based on position of letter f +reverse positions 1 through 3 +move position 5 to position 3 +rotate based on position of letter g +reverse positions 2 through 5 +rotate right 0 steps +rotate left 0 steps +swap letter f with letter b +rotate based on position of letter h +move position 1 to position 3 +reverse positions 3 through 6 +rotate based on position of letter h +swap position 4 with position 3 +swap letter b with letter h +swap letter a with letter h +reverse positions 1 through 6 +swap position 3 with position 6 +swap letter e with letter d +swap letter e with letter h +swap position 1 with position 5 +rotate based on position of letter a +reverse positions 4 through 5 +swap position 0 with position 4 +reverse positions 0 through 3 +move position 7 to position 2 +swap letter e with letter c +swap position 3 with position 4 +rotate left 3 steps +rotate left 7 steps +rotate based on position of letter e +reverse positions 5 through 6 +move position 1 to position 5 +move position 1 to position 2 +rotate left 1 step +move position 7 to position 6 +rotate left 0 steps +reverse positions 5 through 6 +reverse positions 3 through 7 +swap letter d with letter e +rotate right 3 steps +swap position 2 with position 1 +swap position 5 with position 7 +swap letter h with letter d +swap letter c with letter d +rotate based on position of letter d +swap letter d with letter g +reverse positions 0 through 1 +rotate right 0 steps +swap position 2 with position 3 +rotate left 4 steps +rotate left 5 steps +move position 7 to position 0 +rotate right 1 step +swap letter g with letter f +rotate based on position of letter a +rotate based on position of letter b +swap letter g with letter e +rotate right 4 steps +rotate based on position of letter h +reverse positions 3 through 5 +swap letter h with letter e +swap letter g with letter a +rotate based on position of letter c +reverse positions 0 through 4 +rotate based on position of letter e +reverse positions 4 through 7 +rotate left 4 steps +swap position 0 with position 6 +reverse positions 1 through 6 +rotate left 2 steps +swap position 5 with position 3 +swap letter b with letter d +swap letter b with letter d +rotate based on position of letter d +rotate based on position of letter c +rotate based on position of letter h +move position 4 to position 7 diff --git a/d21/src/main.rs b/d21/src/main.rs new file mode 100644 index 0000000..34d5599 --- /dev/null +++ b/d21/src/main.rs @@ -0,0 +1,109 @@ +use std::fs; + +use itertools::Itertools; + +fn solve_part1(insts: &Vec<&str>, init: &str) -> String { + let mut chars: Vec<char> = init.chars().collect(); + + for inst in insts { + let mut next = chars.clone(); + + let words: Vec<&str> = inst.split_ascii_whitespace().collect(); + if words[0] == "swap" { + if words[1] == "position" { + // Swap the characters at indices `i' and `j' + let i: usize = words[2].parse().unwrap(); + let j: usize = words[5].parse().unwrap(); + next[i] = chars[j]; + next[j] = chars[i]; + } else if words[1] == "letter" { + // Swap all occurrences of characters `x' and `y' + let x = words[2].chars().nth(0).unwrap(); + let y = words[5].chars().nth(0).unwrap(); + for i in 0..next.len() { + if next[i] == x { + next[i] = y; + } else if next[i] == y { + next[i] = x; + } + } + } + } else if words[0] == "rotate" { + if words[1] == "left" { + let n: usize = words[2].parse().unwrap(); + next.rotate_left(n % chars.len()); + } else if words[1] == "right" { + let n: usize = words[2].parse().unwrap(); + next.rotate_right(n % chars.len()); + } else if words[1] == "based" { + // Get the index `i' of character `x' + let x = words[6].chars().nth(0).unwrap(); + let i = next.iter().position(|&c| c == x).unwrap(); + // Rotate right by an amount determined by `i' + let n = if i < 4 { i + 1 } else { i + 2 }; + next.rotate_right(n % chars.len()); + } + } else if words[0] == "reverse" { + let i: usize = words[2].parse().unwrap(); + let j: usize = words[4].parse().unwrap(); + next[i..j + 1].reverse(); + } else if words[0] == "move" { + let i: usize = words[2].parse().unwrap(); + let j: usize = words[5].parse().unwrap(); + let c = next.remove(i); + next.insert(j, c); + } + + chars = next; + } + + chars.into_iter().collect() +} + +fn solve_part2(insts: &Vec<&str>, target: &str) -> String { + let init = vec!['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']; + + // The "good" approach would be to reverse the operations in `insts'. + // I'm too lazy for that: I just go through all permutations of the + // input characters, run `insts' as in part 1, and see if it's the one. + for perm in init.into_iter().permutations(8) { + let string: String = perm.iter().collect(); + if solve_part1(insts, &string) == target { + return string; + } + } + + String::new() // shouldn't happen +} + +fn main() { + // Read instructions from input text file + let input = fs::read_to_string("input.txt").unwrap(); + let insts = input.lines().collect(); + + // Part 1 gives "gfdhebac" for me + println!("Part 1 solution: {}", solve_part1(&insts, "abcdefgh")); + + // Part 2 gives "dhaegfbc" for me + println!("Part 2 solution: {}", solve_part2(&insts, "fbgdceah")); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn part1_example1() { + let insts = vec![ + "swap position 4 with position 0", + "swap letter d with letter b", + "reverse positions 0 through 4", + "rotate left 1 step", + "move position 1 to position 4", + "move position 3 to position 0", + "rotate based on position of letter b", + "rotate based on position of letter d", + ]; + assert_eq!(solve_part1(&insts, "abcde"), "decab"); + } +} diff --git a/d22/Cargo.toml b/d22/Cargo.toml new file mode 100644 index 0000000..25c0670 --- /dev/null +++ b/d22/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "d22" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/d22/input.txt b/d22/input.txt new file mode 100644 index 0000000..d6c458f --- /dev/null +++ b/d22/input.txt @@ -0,0 +1,902 @@ +root@ebhq-gridcenter# df -h +Filesystem Size Used Avail Use% +/dev/grid/node-x0-y0 94T 67T 27T 71% +/dev/grid/node-x0-y1 89T 67T 22T 75% +/dev/grid/node-x0-y2 93T 69T 24T 74% +/dev/grid/node-x0-y3 91T 66T 25T 72% +/dev/grid/node-x0-y4 85T 69T 16T 81% +/dev/grid/node-x0-y5 89T 64T 25T 71% +/dev/grid/node-x0-y6 88T 70T 18T 79% +/dev/grid/node-x0-y7 89T 65T 24T 73% +/dev/grid/node-x0-y8 86T 66T 20T 76% +/dev/grid/node-x0-y9 87T 66T 21T 75% +/dev/grid/node-x0-y10 94T 73T 21T 77% +/dev/grid/node-x0-y11 94T 71T 23T 75% +/dev/grid/node-x0-y12 86T 64T 22T 74% +/dev/grid/node-x0-y13 90T 67T 23T 74% +/dev/grid/node-x0-y14 92T 69T 23T 75% +/dev/grid/node-x0-y15 92T 68T 24T 73% +/dev/grid/node-x0-y16 92T 72T 20T 78% +/dev/grid/node-x0-y17 94T 64T 30T 68% +/dev/grid/node-x0-y18 87T 73T 14T 83% +/dev/grid/node-x0-y19 87T 68T 19T 78% +/dev/grid/node-x0-y20 87T 67T 20T 77% +/dev/grid/node-x0-y21 86T 71T 15T 82% +/dev/grid/node-x0-y22 93T 65T 28T 69% +/dev/grid/node-x0-y23 94T 71T 23T 75% +/dev/grid/node-x0-y24 85T 65T 20T 76% +/dev/grid/node-x1-y0 88T 65T 23T 73% +/dev/grid/node-x1-y1 89T 65T 24T 73% +/dev/grid/node-x1-y2 86T 69T 17T 80% +/dev/grid/node-x1-y3 91T 65T 26T 71% +/dev/grid/node-x1-y4 85T 65T 20T 76% +/dev/grid/node-x1-y5 89T 64T 25T 71% +/dev/grid/node-x1-y6 94T 66T 28T 70% +/dev/grid/node-x1-y7 87T 67T 20T 77% +/dev/grid/node-x1-y8 92T 73T 19T 79% +/dev/grid/node-x1-y9 89T 64T 25T 71% +/dev/grid/node-x1-y10 86T 69T 17T 80% +/dev/grid/node-x1-y11 91T 68T 23T 74% +/dev/grid/node-x1-y12 89T 65T 24T 73% +/dev/grid/node-x1-y13 85T 73T 12T 85% +/dev/grid/node-x1-y14 88T 67T 21T 76% +/dev/grid/node-x1-y15 93T 71T 22T 76% +/dev/grid/node-x1-y16 92T 64T 28T 69% +/dev/grid/node-x1-y17 93T 64T 29T 68% +/dev/grid/node-x1-y18 93T 72T 21T 77% +/dev/grid/node-x1-y19 92T 68T 24T 73% +/dev/grid/node-x1-y20 86T 72T 14T 83% +/dev/grid/node-x1-y21 501T 499T 2T 99% +/dev/grid/node-x1-y22 90T 69T 21T 76% +/dev/grid/node-x1-y23 94T 73T 21T 77% +/dev/grid/node-x1-y24 91T 73T 18T 80% +/dev/grid/node-x2-y0 92T 73T 19T 79% +/dev/grid/node-x2-y1 92T 66T 26T 71% +/dev/grid/node-x2-y2 88T 65T 23T 73% +/dev/grid/node-x2-y3 92T 69T 23T 75% +/dev/grid/node-x2-y4 86T 70T 16T 81% +/dev/grid/node-x2-y5 94T 67T 27T 71% +/dev/grid/node-x2-y6 86T 68T 18T 79% +/dev/grid/node-x2-y7 94T 64T 30T 68% +/dev/grid/node-x2-y8 92T 71T 21T 77% +/dev/grid/node-x2-y9 86T 73T 13T 84% +/dev/grid/node-x2-y10 94T 70T 24T 74% +/dev/grid/node-x2-y11 90T 73T 17T 81% +/dev/grid/node-x2-y12 92T 68T 24T 73% +/dev/grid/node-x2-y13 89T 71T 18T 79% +/dev/grid/node-x2-y14 88T 67T 21T 76% +/dev/grid/node-x2-y15 87T 70T 17T 80% +/dev/grid/node-x2-y16 90T 72T 18T 80% +/dev/grid/node-x2-y17 86T 70T 16T 81% +/dev/grid/node-x2-y18 88T 66T 22T 75% +/dev/grid/node-x2-y19 89T 71T 18T 79% +/dev/grid/node-x2-y20 93T 69T 24T 74% +/dev/grid/node-x2-y21 509T 498T 11T 97% +/dev/grid/node-x2-y22 90T 64T 26T 71% +/dev/grid/node-x2-y23 90T 66T 24T 73% +/dev/grid/node-x2-y24 87T 68T 19T 78% +/dev/grid/node-x3-y0 87T 69T 18T 79% +/dev/grid/node-x3-y1 86T 64T 22T 74% +/dev/grid/node-x3-y2 91T 73T 18T 80% +/dev/grid/node-x3-y3 88T 67T 21T 76% +/dev/grid/node-x3-y4 90T 69T 21T 76% +/dev/grid/node-x3-y5 94T 72T 22T 76% +/dev/grid/node-x3-y6 91T 68T 23T 74% +/dev/grid/node-x3-y7 92T 64T 28T 69% +/dev/grid/node-x3-y8 91T 64T 27T 70% +/dev/grid/node-x3-y9 89T 65T 24T 73% +/dev/grid/node-x3-y10 89T 66T 23T 74% +/dev/grid/node-x3-y11 89T 65T 24T 73% +/dev/grid/node-x3-y12 92T 70T 22T 76% +/dev/grid/node-x3-y13 88T 64T 24T 72% +/dev/grid/node-x3-y14 89T 64T 25T 71% +/dev/grid/node-x3-y15 88T 65T 23T 73% +/dev/grid/node-x3-y16 91T 65T 26T 71% +/dev/grid/node-x3-y17 91T 66T 25T 72% +/dev/grid/node-x3-y18 89T 69T 20T 77% +/dev/grid/node-x3-y19 93T 70T 23T 75% +/dev/grid/node-x3-y20 94T 71T 23T 75% +/dev/grid/node-x3-y21 508T 496T 12T 97% +/dev/grid/node-x3-y22 88T 72T 16T 81% +/dev/grid/node-x3-y23 92T 65T 27T 70% +/dev/grid/node-x3-y24 87T 68T 19T 78% +/dev/grid/node-x4-y0 87T 70T 17T 80% +/dev/grid/node-x4-y1 89T 66T 23T 74% +/dev/grid/node-x4-y2 92T 67T 25T 72% +/dev/grid/node-x4-y3 85T 72T 13T 84% +/dev/grid/node-x4-y4 93T 68T 25T 73% +/dev/grid/node-x4-y5 89T 68T 21T 76% +/dev/grid/node-x4-y6 93T 68T 25T 73% +/dev/grid/node-x4-y7 89T 72T 17T 80% +/dev/grid/node-x4-y8 86T 70T 16T 81% +/dev/grid/node-x4-y9 89T 71T 18T 79% +/dev/grid/node-x4-y10 88T 70T 18T 79% +/dev/grid/node-x4-y11 87T 71T 16T 81% +/dev/grid/node-x4-y12 86T 71T 15T 82% +/dev/grid/node-x4-y13 85T 73T 12T 85% +/dev/grid/node-x4-y14 89T 65T 24T 73% +/dev/grid/node-x4-y15 94T 69T 25T 73% +/dev/grid/node-x4-y16 92T 72T 20T 78% +/dev/grid/node-x4-y17 89T 64T 25T 71% +/dev/grid/node-x4-y18 88T 69T 19T 78% +/dev/grid/node-x4-y19 87T 71T 16T 81% +/dev/grid/node-x4-y20 91T 67T 24T 73% +/dev/grid/node-x4-y21 507T 495T 12T 97% +/dev/grid/node-x4-y22 86T 66T 20T 76% +/dev/grid/node-x4-y23 85T 71T 14T 83% +/dev/grid/node-x4-y24 90T 73T 17T 81% +/dev/grid/node-x5-y0 91T 68T 23T 74% +/dev/grid/node-x5-y1 86T 64T 22T 74% +/dev/grid/node-x5-y2 88T 71T 17T 80% +/dev/grid/node-x5-y3 90T 66T 24T 73% +/dev/grid/node-x5-y4 85T 67T 18T 78% +/dev/grid/node-x5-y5 86T 67T 19T 77% +/dev/grid/node-x5-y6 87T 69T 18T 79% +/dev/grid/node-x5-y7 90T 68T 22T 75% +/dev/grid/node-x5-y8 88T 70T 18T 79% +/dev/grid/node-x5-y9 85T 68T 17T 80% +/dev/grid/node-x5-y10 90T 70T 20T 77% +/dev/grid/node-x5-y11 86T 73T 13T 84% +/dev/grid/node-x5-y12 86T 65T 21T 75% +/dev/grid/node-x5-y13 86T 71T 15T 82% +/dev/grid/node-x5-y14 92T 73T 19T 79% +/dev/grid/node-x5-y15 93T 66T 27T 70% +/dev/grid/node-x5-y16 86T 70T 16T 81% +/dev/grid/node-x5-y17 92T 64T 28T 69% +/dev/grid/node-x5-y18 85T 72T 13T 84% +/dev/grid/node-x5-y19 85T 65T 20T 76% +/dev/grid/node-x5-y20 93T 67T 26T 72% +/dev/grid/node-x5-y21 510T 497T 13T 97% +/dev/grid/node-x5-y22 86T 68T 18T 79% +/dev/grid/node-x5-y23 91T 72T 19T 79% +/dev/grid/node-x5-y24 93T 73T 20T 78% +/dev/grid/node-x6-y0 87T 70T 17T 80% +/dev/grid/node-x6-y1 92T 66T 26T 71% +/dev/grid/node-x6-y2 92T 64T 28T 69% +/dev/grid/node-x6-y3 87T 72T 15T 82% +/dev/grid/node-x6-y4 85T 72T 13T 84% +/dev/grid/node-x6-y5 85T 70T 15T 82% +/dev/grid/node-x6-y6 94T 71T 23T 75% +/dev/grid/node-x6-y7 86T 71T 15T 82% +/dev/grid/node-x6-y8 90T 68T 22T 75% +/dev/grid/node-x6-y9 93T 72T 21T 77% +/dev/grid/node-x6-y10 92T 68T 24T 73% +/dev/grid/node-x6-y11 86T 64T 22T 74% +/dev/grid/node-x6-y12 88T 69T 19T 78% +/dev/grid/node-x6-y13 93T 71T 22T 76% +/dev/grid/node-x6-y14 94T 64T 30T 68% +/dev/grid/node-x6-y15 94T 65T 29T 69% +/dev/grid/node-x6-y16 91T 73T 18T 80% +/dev/grid/node-x6-y17 87T 64T 23T 73% +/dev/grid/node-x6-y18 87T 70T 17T 80% +/dev/grid/node-x6-y19 91T 72T 19T 79% +/dev/grid/node-x6-y20 87T 67T 20T 77% +/dev/grid/node-x6-y21 507T 497T 10T 98% +/dev/grid/node-x6-y22 90T 72T 18T 80% +/dev/grid/node-x6-y23 94T 68T 26T 72% +/dev/grid/node-x6-y24 87T 64T 23T 73% +/dev/grid/node-x7-y0 86T 72T 14T 83% +/dev/grid/node-x7-y1 91T 69T 22T 75% +/dev/grid/node-x7-y2 85T 66T 19T 77% +/dev/grid/node-x7-y3 91T 70T 21T 76% +/dev/grid/node-x7-y4 89T 64T 25T 71% +/dev/grid/node-x7-y5 90T 67T 23T 74% +/dev/grid/node-x7-y6 92T 70T 22T 76% +/dev/grid/node-x7-y7 94T 73T 21T 77% +/dev/grid/node-x7-y8 91T 69T 22T 75% +/dev/grid/node-x7-y9 90T 66T 24T 73% +/dev/grid/node-x7-y10 92T 65T 27T 70% +/dev/grid/node-x7-y11 89T 71T 18T 79% +/dev/grid/node-x7-y12 86T 64T 22T 74% +/dev/grid/node-x7-y13 91T 73T 18T 80% +/dev/grid/node-x7-y14 92T 70T 22T 76% +/dev/grid/node-x7-y15 89T 70T 19T 78% +/dev/grid/node-x7-y16 88T 73T 15T 82% +/dev/grid/node-x7-y17 93T 65T 28T 69% +/dev/grid/node-x7-y18 90T 72T 18T 80% +/dev/grid/node-x7-y19 91T 71T 20T 78% +/dev/grid/node-x7-y20 91T 73T 18T 80% +/dev/grid/node-x7-y21 508T 499T 9T 98% +/dev/grid/node-x7-y22 88T 73T 15T 82% +/dev/grid/node-x7-y23 94T 68T 26T 72% +/dev/grid/node-x7-y24 88T 72T 16T 81% +/dev/grid/node-x8-y0 88T 73T 15T 82% +/dev/grid/node-x8-y1 90T 66T 24T 73% +/dev/grid/node-x8-y2 91T 66T 25T 72% +/dev/grid/node-x8-y3 87T 73T 14T 83% +/dev/grid/node-x8-y4 87T 64T 23T 73% +/dev/grid/node-x8-y5 94T 72T 22T 76% +/dev/grid/node-x8-y6 87T 67T 20T 77% +/dev/grid/node-x8-y7 91T 66T 25T 72% +/dev/grid/node-x8-y8 86T 69T 17T 80% +/dev/grid/node-x8-y9 92T 69T 23T 75% +/dev/grid/node-x8-y10 88T 71T 17T 80% +/dev/grid/node-x8-y11 91T 68T 23T 74% +/dev/grid/node-x8-y12 93T 66T 27T 70% +/dev/grid/node-x8-y13 91T 73T 18T 80% +/dev/grid/node-x8-y14 87T 70T 17T 80% +/dev/grid/node-x8-y15 86T 70T 16T 81% +/dev/grid/node-x8-y16 93T 72T 21T 77% +/dev/grid/node-x8-y17 92T 64T 28T 69% +/dev/grid/node-x8-y18 91T 70T 21T 76% +/dev/grid/node-x8-y19 85T 68T 17T 80% +/dev/grid/node-x8-y20 90T 68T 22T 75% +/dev/grid/node-x8-y21 507T 492T 15T 97% +/dev/grid/node-x8-y22 92T 70T 22T 76% +/dev/grid/node-x8-y23 91T 72T 19T 79% +/dev/grid/node-x8-y24 93T 64T 29T 68% +/dev/grid/node-x9-y0 89T 69T 20T 77% +/dev/grid/node-x9-y1 87T 68T 19T 78% +/dev/grid/node-x9-y2 85T 68T 17T 80% +/dev/grid/node-x9-y3 89T 67T 22T 75% +/dev/grid/node-x9-y4 92T 66T 26T 71% +/dev/grid/node-x9-y5 90T 65T 25T 72% +/dev/grid/node-x9-y6 89T 65T 24T 73% +/dev/grid/node-x9-y7 94T 68T 26T 72% +/dev/grid/node-x9-y8 86T 68T 18T 79% +/dev/grid/node-x9-y9 86T 64T 22T 74% +/dev/grid/node-x9-y10 91T 67T 24T 73% +/dev/grid/node-x9-y11 93T 64T 29T 68% +/dev/grid/node-x9-y12 85T 72T 13T 84% +/dev/grid/node-x9-y13 87T 70T 17T 80% +/dev/grid/node-x9-y14 87T 72T 15T 82% +/dev/grid/node-x9-y15 89T 70T 19T 78% +/dev/grid/node-x9-y16 89T 72T 17T 80% +/dev/grid/node-x9-y17 85T 68T 17T 80% +/dev/grid/node-x9-y18 87T 71T 16T 81% +/dev/grid/node-x9-y19 94T 73T 21T 77% +/dev/grid/node-x9-y20 90T 67T 23T 74% +/dev/grid/node-x9-y21 504T 490T 14T 97% +/dev/grid/node-x9-y22 86T 72T 14T 83% +/dev/grid/node-x9-y23 85T 71T 14T 83% +/dev/grid/node-x9-y24 85T 67T 18T 78% +/dev/grid/node-x10-y0 86T 70T 16T 81% +/dev/grid/node-x10-y1 85T 69T 16T 81% +/dev/grid/node-x10-y2 94T 67T 27T 71% +/dev/grid/node-x10-y3 87T 73T 14T 83% +/dev/grid/node-x10-y4 94T 72T 22T 76% +/dev/grid/node-x10-y5 92T 71T 21T 77% +/dev/grid/node-x10-y6 89T 64T 25T 71% +/dev/grid/node-x10-y7 90T 67T 23T 74% +/dev/grid/node-x10-y8 89T 71T 18T 79% +/dev/grid/node-x10-y9 88T 68T 20T 77% +/dev/grid/node-x10-y10 94T 72T 22T 76% +/dev/grid/node-x10-y11 89T 70T 19T 78% +/dev/grid/node-x10-y12 89T 68T 21T 76% +/dev/grid/node-x10-y13 86T 65T 21T 75% +/dev/grid/node-x10-y14 94T 70T 24T 74% +/dev/grid/node-x10-y15 88T 67T 21T 76% +/dev/grid/node-x10-y16 89T 71T 18T 79% +/dev/grid/node-x10-y17 92T 70T 22T 76% +/dev/grid/node-x10-y18 91T 69T 22T 75% +/dev/grid/node-x10-y19 89T 67T 22T 75% +/dev/grid/node-x10-y20 92T 66T 26T 71% +/dev/grid/node-x10-y21 503T 497T 6T 98% +/dev/grid/node-x10-y22 90T 71T 19T 78% +/dev/grid/node-x10-y23 85T 71T 14T 83% +/dev/grid/node-x10-y24 89T 66T 23T 74% +/dev/grid/node-x11-y0 91T 73T 18T 80% +/dev/grid/node-x11-y1 86T 68T 18T 79% +/dev/grid/node-x11-y2 92T 64T 28T 69% +/dev/grid/node-x11-y3 90T 68T 22T 75% +/dev/grid/node-x11-y4 90T 73T 17T 81% +/dev/grid/node-x11-y5 86T 69T 17T 80% +/dev/grid/node-x11-y6 86T 68T 18T 79% +/dev/grid/node-x11-y7 90T 67T 23T 74% +/dev/grid/node-x11-y8 88T 73T 15T 82% +/dev/grid/node-x11-y9 87T 66T 21T 75% +/dev/grid/node-x11-y10 91T 70T 21T 76% +/dev/grid/node-x11-y11 86T 69T 17T 80% +/dev/grid/node-x11-y12 90T 73T 17T 81% +/dev/grid/node-x11-y13 85T 72T 13T 84% +/dev/grid/node-x11-y14 91T 67T 24T 73% +/dev/grid/node-x11-y15 86T 67T 19T 77% +/dev/grid/node-x11-y16 90T 70T 20T 77% +/dev/grid/node-x11-y17 92T 67T 25T 72% +/dev/grid/node-x11-y18 91T 64T 27T 70% +/dev/grid/node-x11-y19 88T 65T 23T 73% +/dev/grid/node-x11-y20 93T 68T 25T 73% +/dev/grid/node-x11-y21 507T 493T 14T 97% +/dev/grid/node-x11-y22 86T 73T 13T 84% +/dev/grid/node-x11-y23 94T 66T 28T 70% +/dev/grid/node-x11-y24 90T 68T 22T 75% +/dev/grid/node-x12-y0 93T 72T 21T 77% +/dev/grid/node-x12-y1 89T 69T 20T 77% +/dev/grid/node-x12-y2 92T 64T 28T 69% +/dev/grid/node-x12-y3 85T 67T 18T 78% +/dev/grid/node-x12-y4 87T 67T 20T 77% +/dev/grid/node-x12-y5 86T 73T 13T 84% +/dev/grid/node-x12-y6 91T 65T 26T 71% +/dev/grid/node-x12-y7 91T 66T 25T 72% +/dev/grid/node-x12-y8 86T 66T 20T 76% +/dev/grid/node-x12-y9 89T 65T 24T 73% +/dev/grid/node-x12-y10 88T 69T 19T 78% +/dev/grid/node-x12-y11 87T 70T 17T 80% +/dev/grid/node-x12-y12 86T 73T 13T 84% +/dev/grid/node-x12-y13 87T 70T 17T 80% +/dev/grid/node-x12-y14 93T 67T 26T 72% +/dev/grid/node-x12-y15 94T 68T 26T 72% +/dev/grid/node-x12-y16 90T 67T 23T 74% +/dev/grid/node-x12-y17 86T 65T 21T 75% +/dev/grid/node-x12-y18 88T 67T 21T 76% +/dev/grid/node-x12-y19 91T 72T 19T 79% +/dev/grid/node-x12-y20 93T 72T 21T 77% +/dev/grid/node-x12-y21 504T 494T 10T 98% +/dev/grid/node-x12-y22 92T 70T 22T 76% +/dev/grid/node-x12-y23 91T 67T 24T 73% +/dev/grid/node-x12-y24 88T 65T 23T 73% +/dev/grid/node-x13-y0 90T 66T 24T 73% +/dev/grid/node-x13-y1 87T 67T 20T 77% +/dev/grid/node-x13-y2 85T 71T 14T 83% +/dev/grid/node-x13-y3 86T 73T 13T 84% +/dev/grid/node-x13-y4 87T 72T 15T 82% +/dev/grid/node-x13-y5 93T 67T 26T 72% +/dev/grid/node-x13-y6 92T 68T 24T 73% +/dev/grid/node-x13-y7 90T 71T 19T 78% +/dev/grid/node-x13-y8 94T 72T 22T 76% +/dev/grid/node-x13-y9 86T 71T 15T 82% +/dev/grid/node-x13-y10 85T 71T 14T 83% +/dev/grid/node-x13-y11 91T 65T 26T 71% +/dev/grid/node-x13-y12 87T 69T 18T 79% +/dev/grid/node-x13-y13 92T 65T 27T 70% +/dev/grid/node-x13-y14 86T 72T 14T 83% +/dev/grid/node-x13-y15 85T 71T 14T 83% +/dev/grid/node-x13-y16 94T 68T 26T 72% +/dev/grid/node-x13-y17 91T 71T 20T 78% +/dev/grid/node-x13-y18 93T 66T 27T 70% +/dev/grid/node-x13-y19 94T 68T 26T 72% +/dev/grid/node-x13-y20 88T 73T 15T 82% +/dev/grid/node-x13-y21 507T 499T 8T 98% +/dev/grid/node-x13-y22 85T 70T 15T 82% +/dev/grid/node-x13-y23 90T 71T 19T 78% +/dev/grid/node-x13-y24 86T 71T 15T 82% +/dev/grid/node-x14-y0 94T 66T 28T 70% +/dev/grid/node-x14-y1 87T 73T 14T 83% +/dev/grid/node-x14-y2 91T 66T 25T 72% +/dev/grid/node-x14-y3 90T 68T 22T 75% +/dev/grid/node-x14-y4 90T 71T 19T 78% +/dev/grid/node-x14-y5 87T 71T 16T 81% +/dev/grid/node-x14-y6 88T 66T 22T 75% +/dev/grid/node-x14-y7 88T 72T 16T 81% +/dev/grid/node-x14-y8 90T 64T 26T 71% +/dev/grid/node-x14-y9 91T 66T 25T 72% +/dev/grid/node-x14-y10 88T 73T 15T 82% +/dev/grid/node-x14-y11 91T 71T 20T 78% +/dev/grid/node-x14-y12 87T 72T 15T 82% +/dev/grid/node-x14-y13 89T 70T 19T 78% +/dev/grid/node-x14-y14 91T 67T 24T 73% +/dev/grid/node-x14-y15 94T 69T 25T 73% +/dev/grid/node-x14-y16 85T 66T 19T 77% +/dev/grid/node-x14-y17 92T 71T 21T 77% +/dev/grid/node-x14-y18 86T 73T 13T 84% +/dev/grid/node-x14-y19 89T 64T 25T 71% +/dev/grid/node-x14-y20 86T 64T 22T 74% +/dev/grid/node-x14-y21 507T 498T 9T 98% +/dev/grid/node-x14-y22 93T 69T 24T 74% +/dev/grid/node-x14-y23 93T 72T 21T 77% +/dev/grid/node-x14-y24 88T 72T 16T 81% +/dev/grid/node-x15-y0 92T 69T 23T 75% +/dev/grid/node-x15-y1 90T 71T 19T 78% +/dev/grid/node-x15-y2 93T 71T 22T 76% +/dev/grid/node-x15-y3 88T 65T 23T 73% +/dev/grid/node-x15-y4 85T 72T 13T 84% +/dev/grid/node-x15-y5 94T 73T 21T 77% +/dev/grid/node-x15-y6 88T 71T 17T 80% +/dev/grid/node-x15-y7 94T 68T 26T 72% +/dev/grid/node-x15-y8 92T 69T 23T 75% +/dev/grid/node-x15-y9 92T 66T 26T 71% +/dev/grid/node-x15-y10 90T 66T 24T 73% +/dev/grid/node-x15-y11 91T 67T 24T 73% +/dev/grid/node-x15-y12 92T 66T 26T 71% +/dev/grid/node-x15-y13 88T 65T 23T 73% +/dev/grid/node-x15-y14 90T 67T 23T 74% +/dev/grid/node-x15-y15 94T 71T 23T 75% +/dev/grid/node-x15-y16 92T 72T 20T 78% +/dev/grid/node-x15-y17 91T 66T 25T 72% +/dev/grid/node-x15-y18 85T 68T 17T 80% +/dev/grid/node-x15-y19 85T 66T 19T 77% +/dev/grid/node-x15-y20 91T 70T 21T 76% +/dev/grid/node-x15-y21 505T 493T 12T 97% +/dev/grid/node-x15-y22 88T 68T 20T 77% +/dev/grid/node-x15-y23 88T 68T 20T 77% +/dev/grid/node-x15-y24 90T 64T 26T 71% +/dev/grid/node-x16-y0 88T 65T 23T 73% +/dev/grid/node-x16-y1 87T 73T 14T 83% +/dev/grid/node-x16-y2 94T 66T 28T 70% +/dev/grid/node-x16-y3 91T 72T 19T 79% +/dev/grid/node-x16-y4 92T 70T 22T 76% +/dev/grid/node-x16-y5 94T 68T 26T 72% +/dev/grid/node-x16-y6 92T 64T 28T 69% +/dev/grid/node-x16-y7 92T 69T 23T 75% +/dev/grid/node-x16-y8 93T 67T 26T 72% +/dev/grid/node-x16-y9 87T 70T 17T 80% +/dev/grid/node-x16-y10 93T 71T 22T 76% +/dev/grid/node-x16-y11 94T 69T 25T 73% +/dev/grid/node-x16-y12 94T 71T 23T 75% +/dev/grid/node-x16-y13 85T 72T 13T 84% +/dev/grid/node-x16-y14 87T 73T 14T 83% +/dev/grid/node-x16-y15 93T 65T 28T 69% +/dev/grid/node-x16-y16 91T 64T 27T 70% +/dev/grid/node-x16-y17 87T 70T 17T 80% +/dev/grid/node-x16-y18 85T 70T 15T 82% +/dev/grid/node-x16-y19 90T 66T 24T 73% +/dev/grid/node-x16-y20 85T 71T 14T 83% +/dev/grid/node-x16-y21 501T 499T 2T 99% +/dev/grid/node-x16-y22 85T 66T 19T 77% +/dev/grid/node-x16-y23 88T 70T 18T 79% +/dev/grid/node-x16-y24 86T 65T 21T 75% +/dev/grid/node-x17-y0 85T 73T 12T 85% +/dev/grid/node-x17-y1 88T 65T 23T 73% +/dev/grid/node-x17-y2 88T 73T 15T 82% +/dev/grid/node-x17-y3 94T 67T 27T 71% +/dev/grid/node-x17-y4 89T 67T 22T 75% +/dev/grid/node-x17-y5 86T 66T 20T 76% +/dev/grid/node-x17-y6 93T 64T 29T 68% +/dev/grid/node-x17-y7 89T 70T 19T 78% +/dev/grid/node-x17-y8 86T 67T 19T 77% +/dev/grid/node-x17-y9 86T 65T 21T 75% +/dev/grid/node-x17-y10 93T 65T 28T 69% +/dev/grid/node-x17-y11 94T 70T 24T 74% +/dev/grid/node-x17-y12 86T 72T 14T 83% +/dev/grid/node-x17-y13 87T 67T 20T 77% +/dev/grid/node-x17-y14 85T 68T 17T 80% +/dev/grid/node-x17-y15 87T 66T 21T 75% +/dev/grid/node-x17-y16 85T 64T 21T 75% +/dev/grid/node-x17-y17 91T 64T 27T 70% +/dev/grid/node-x17-y18 86T 66T 20T 76% +/dev/grid/node-x17-y19 93T 64T 29T 68% +/dev/grid/node-x17-y20 93T 66T 27T 70% +/dev/grid/node-x17-y21 510T 498T 12T 97% +/dev/grid/node-x17-y22 85T 0T 85T 0% +/dev/grid/node-x17-y23 93T 67T 26T 72% +/dev/grid/node-x17-y24 85T 65T 20T 76% +/dev/grid/node-x18-y0 93T 67T 26T 72% +/dev/grid/node-x18-y1 90T 66T 24T 73% +/dev/grid/node-x18-y2 87T 69T 18T 79% +/dev/grid/node-x18-y3 87T 71T 16T 81% +/dev/grid/node-x18-y4 94T 69T 25T 73% +/dev/grid/node-x18-y5 93T 68T 25T 73% +/dev/grid/node-x18-y6 94T 68T 26T 72% +/dev/grid/node-x18-y7 89T 69T 20T 77% +/dev/grid/node-x18-y8 93T 70T 23T 75% +/dev/grid/node-x18-y9 87T 64T 23T 73% +/dev/grid/node-x18-y10 88T 65T 23T 73% +/dev/grid/node-x18-y11 94T 73T 21T 77% +/dev/grid/node-x18-y12 87T 73T 14T 83% +/dev/grid/node-x18-y13 92T 72T 20T 78% +/dev/grid/node-x18-y14 87T 66T 21T 75% +/dev/grid/node-x18-y15 90T 69T 21T 76% +/dev/grid/node-x18-y16 87T 64T 23T 73% +/dev/grid/node-x18-y17 92T 64T 28T 69% +/dev/grid/node-x18-y18 86T 69T 17T 80% +/dev/grid/node-x18-y19 85T 72T 13T 84% +/dev/grid/node-x18-y20 91T 70T 21T 76% +/dev/grid/node-x18-y21 505T 491T 14T 97% +/dev/grid/node-x18-y22 85T 73T 12T 85% +/dev/grid/node-x18-y23 86T 64T 22T 74% +/dev/grid/node-x18-y24 88T 70T 18T 79% +/dev/grid/node-x19-y0 90T 65T 25T 72% +/dev/grid/node-x19-y1 91T 64T 27T 70% +/dev/grid/node-x19-y2 92T 68T 24T 73% +/dev/grid/node-x19-y3 87T 71T 16T 81% +/dev/grid/node-x19-y4 92T 65T 27T 70% +/dev/grid/node-x19-y5 94T 71T 23T 75% +/dev/grid/node-x19-y6 93T 64T 29T 68% +/dev/grid/node-x19-y7 94T 73T 21T 77% +/dev/grid/node-x19-y8 94T 73T 21T 77% +/dev/grid/node-x19-y9 92T 72T 20T 78% +/dev/grid/node-x19-y10 93T 72T 21T 77% +/dev/grid/node-x19-y11 90T 71T 19T 78% +/dev/grid/node-x19-y12 93T 70T 23T 75% +/dev/grid/node-x19-y13 89T 72T 17T 80% +/dev/grid/node-x19-y14 93T 64T 29T 68% +/dev/grid/node-x19-y15 87T 65T 22T 74% +/dev/grid/node-x19-y16 91T 65T 26T 71% +/dev/grid/node-x19-y17 85T 70T 15T 82% +/dev/grid/node-x19-y18 87T 73T 14T 83% +/dev/grid/node-x19-y19 87T 72T 15T 82% +/dev/grid/node-x19-y20 91T 73T 18T 80% +/dev/grid/node-x19-y21 503T 499T 4T 99% +/dev/grid/node-x19-y22 93T 67T 26T 72% +/dev/grid/node-x19-y23 85T 73T 12T 85% +/dev/grid/node-x19-y24 87T 68T 19T 78% +/dev/grid/node-x20-y0 93T 66T 27T 70% +/dev/grid/node-x20-y1 93T 64T 29T 68% +/dev/grid/node-x20-y2 85T 71T 14T 83% +/dev/grid/node-x20-y3 94T 66T 28T 70% +/dev/grid/node-x20-y4 89T 64T 25T 71% +/dev/grid/node-x20-y5 91T 71T 20T 78% +/dev/grid/node-x20-y6 94T 64T 30T 68% +/dev/grid/node-x20-y7 93T 72T 21T 77% +/dev/grid/node-x20-y8 87T 70T 17T 80% +/dev/grid/node-x20-y9 93T 71T 22T 76% +/dev/grid/node-x20-y10 87T 66T 21T 75% +/dev/grid/node-x20-y11 85T 64T 21T 75% +/dev/grid/node-x20-y12 93T 66T 27T 70% +/dev/grid/node-x20-y13 91T 72T 19T 79% +/dev/grid/node-x20-y14 86T 66T 20T 76% +/dev/grid/node-x20-y15 93T 68T 25T 73% +/dev/grid/node-x20-y16 85T 67T 18T 78% +/dev/grid/node-x20-y17 86T 65T 21T 75% +/dev/grid/node-x20-y18 91T 65T 26T 71% +/dev/grid/node-x20-y19 86T 71T 15T 82% +/dev/grid/node-x20-y20 92T 71T 21T 77% +/dev/grid/node-x20-y21 502T 493T 9T 98% +/dev/grid/node-x20-y22 93T 66T 27T 70% +/dev/grid/node-x20-y23 88T 69T 19T 78% +/dev/grid/node-x20-y24 85T 70T 15T 82% +/dev/grid/node-x21-y0 86T 71T 15T 82% +/dev/grid/node-x21-y1 88T 70T 18T 79% +/dev/grid/node-x21-y2 93T 70T 23T 75% +/dev/grid/node-x21-y3 87T 70T 17T 80% +/dev/grid/node-x21-y4 89T 70T 19T 78% +/dev/grid/node-x21-y5 93T 71T 22T 76% +/dev/grid/node-x21-y6 93T 67T 26T 72% +/dev/grid/node-x21-y7 86T 66T 20T 76% +/dev/grid/node-x21-y8 85T 69T 16T 81% +/dev/grid/node-x21-y9 85T 73T 12T 85% +/dev/grid/node-x21-y10 87T 73T 14T 83% +/dev/grid/node-x21-y11 88T 67T 21T 76% +/dev/grid/node-x21-y12 90T 64T 26T 71% +/dev/grid/node-x21-y13 87T 70T 17T 80% +/dev/grid/node-x21-y14 90T 65T 25T 72% +/dev/grid/node-x21-y15 92T 64T 28T 69% +/dev/grid/node-x21-y16 90T 67T 23T 74% +/dev/grid/node-x21-y17 87T 67T 20T 77% +/dev/grid/node-x21-y18 94T 71T 23T 75% +/dev/grid/node-x21-y19 90T 69T 21T 76% +/dev/grid/node-x21-y20 93T 66T 27T 70% +/dev/grid/node-x21-y21 501T 497T 4T 99% +/dev/grid/node-x21-y22 85T 66T 19T 77% +/dev/grid/node-x21-y23 94T 64T 30T 68% +/dev/grid/node-x21-y24 86T 64T 22T 74% +/dev/grid/node-x22-y0 91T 64T 27T 70% +/dev/grid/node-x22-y1 86T 65T 21T 75% +/dev/grid/node-x22-y2 90T 71T 19T 78% +/dev/grid/node-x22-y3 91T 72T 19T 79% +/dev/grid/node-x22-y4 87T 66T 21T 75% +/dev/grid/node-x22-y5 91T 65T 26T 71% +/dev/grid/node-x22-y6 89T 71T 18T 79% +/dev/grid/node-x22-y7 85T 64T 21T 75% +/dev/grid/node-x22-y8 90T 64T 26T 71% +/dev/grid/node-x22-y9 94T 65T 29T 69% +/dev/grid/node-x22-y10 88T 71T 17T 80% +/dev/grid/node-x22-y11 85T 72T 13T 84% +/dev/grid/node-x22-y12 89T 65T 24T 73% +/dev/grid/node-x22-y13 92T 65T 27T 70% +/dev/grid/node-x22-y14 91T 66T 25T 72% +/dev/grid/node-x22-y15 85T 71T 14T 83% +/dev/grid/node-x22-y16 89T 68T 21T 76% +/dev/grid/node-x22-y17 90T 65T 25T 72% +/dev/grid/node-x22-y18 90T 66T 24T 73% +/dev/grid/node-x22-y19 87T 67T 20T 77% +/dev/grid/node-x22-y20 94T 72T 22T 76% +/dev/grid/node-x22-y21 506T 491T 15T 97% +/dev/grid/node-x22-y22 88T 72T 16T 81% +/dev/grid/node-x22-y23 94T 73T 21T 77% +/dev/grid/node-x22-y24 94T 73T 21T 77% +/dev/grid/node-x23-y0 93T 70T 23T 75% +/dev/grid/node-x23-y1 93T 64T 29T 68% +/dev/grid/node-x23-y2 94T 71T 23T 75% +/dev/grid/node-x23-y3 93T 65T 28T 69% +/dev/grid/node-x23-y4 86T 68T 18T 79% +/dev/grid/node-x23-y5 89T 71T 18T 79% +/dev/grid/node-x23-y6 90T 66T 24T 73% +/dev/grid/node-x23-y7 90T 67T 23T 74% +/dev/grid/node-x23-y8 94T 73T 21T 77% +/dev/grid/node-x23-y9 85T 70T 15T 82% +/dev/grid/node-x23-y10 94T 70T 24T 74% +/dev/grid/node-x23-y11 90T 71T 19T 78% +/dev/grid/node-x23-y12 86T 70T 16T 81% +/dev/grid/node-x23-y13 92T 69T 23T 75% +/dev/grid/node-x23-y14 88T 73T 15T 82% +/dev/grid/node-x23-y15 89T 64T 25T 71% +/dev/grid/node-x23-y16 92T 64T 28T 69% +/dev/grid/node-x23-y17 87T 71T 16T 81% +/dev/grid/node-x23-y18 87T 71T 16T 81% +/dev/grid/node-x23-y19 94T 65T 29T 69% +/dev/grid/node-x23-y20 90T 65T 25T 72% +/dev/grid/node-x23-y21 504T 490T 14T 97% +/dev/grid/node-x23-y22 89T 67T 22T 75% +/dev/grid/node-x23-y23 90T 68T 22T 75% +/dev/grid/node-x23-y24 85T 69T 16T 81% +/dev/grid/node-x24-y0 87T 67T 20T 77% +/dev/grid/node-x24-y1 87T 68T 19T 78% +/dev/grid/node-x24-y2 86T 71T 15T 82% +/dev/grid/node-x24-y3 86T 70T 16T 81% +/dev/grid/node-x24-y4 88T 64T 24T 72% +/dev/grid/node-x24-y5 94T 68T 26T 72% +/dev/grid/node-x24-y6 92T 72T 20T 78% +/dev/grid/node-x24-y7 94T 69T 25T 73% +/dev/grid/node-x24-y8 86T 73T 13T 84% +/dev/grid/node-x24-y9 87T 66T 21T 75% +/dev/grid/node-x24-y10 87T 66T 21T 75% +/dev/grid/node-x24-y11 90T 64T 26T 71% +/dev/grid/node-x24-y12 88T 68T 20T 77% +/dev/grid/node-x24-y13 92T 72T 20T 78% +/dev/grid/node-x24-y14 93T 64T 29T 68% +/dev/grid/node-x24-y15 90T 67T 23T 74% +/dev/grid/node-x24-y16 87T 73T 14T 83% +/dev/grid/node-x24-y17 85T 72T 13T 84% +/dev/grid/node-x24-y18 86T 67T 19T 77% +/dev/grid/node-x24-y19 88T 69T 19T 78% +/dev/grid/node-x24-y20 93T 69T 24T 74% +/dev/grid/node-x24-y21 504T 496T 8T 98% +/dev/grid/node-x24-y22 85T 71T 14T 83% +/dev/grid/node-x24-y23 87T 66T 21T 75% +/dev/grid/node-x24-y24 89T 65T 24T 73% +/dev/grid/node-x25-y0 92T 73T 19T 79% +/dev/grid/node-x25-y1 88T 69T 19T 78% +/dev/grid/node-x25-y2 85T 64T 21T 75% +/dev/grid/node-x25-y3 85T 68T 17T 80% +/dev/grid/node-x25-y4 94T 64T 30T 68% +/dev/grid/node-x25-y5 94T 66T 28T 70% +/dev/grid/node-x25-y6 92T 64T 28T 69% +/dev/grid/node-x25-y7 88T 67T 21T 76% +/dev/grid/node-x25-y8 91T 70T 21T 76% +/dev/grid/node-x25-y9 85T 71T 14T 83% +/dev/grid/node-x25-y10 93T 71T 22T 76% +/dev/grid/node-x25-y11 85T 68T 17T 80% +/dev/grid/node-x25-y12 86T 73T 13T 84% +/dev/grid/node-x25-y13 89T 69T 20T 77% +/dev/grid/node-x25-y14 91T 71T 20T 78% +/dev/grid/node-x25-y15 85T 65T 20T 76% +/dev/grid/node-x25-y16 87T 70T 17T 80% +/dev/grid/node-x25-y17 94T 66T 28T 70% +/dev/grid/node-x25-y18 93T 65T 28T 69% +/dev/grid/node-x25-y19 89T 70T 19T 78% +/dev/grid/node-x25-y20 92T 72T 20T 78% +/dev/grid/node-x25-y21 506T 495T 11T 97% +/dev/grid/node-x25-y22 94T 65T 29T 69% +/dev/grid/node-x25-y23 86T 66T 20T 76% +/dev/grid/node-x25-y24 91T 71T 20T 78% +/dev/grid/node-x26-y0 91T 71T 20T 78% +/dev/grid/node-x26-y1 90T 69T 21T 76% +/dev/grid/node-x26-y2 87T 66T 21T 75% +/dev/grid/node-x26-y3 93T 73T 20T 78% +/dev/grid/node-x26-y4 85T 66T 19T 77% +/dev/grid/node-x26-y5 87T 67T 20T 77% +/dev/grid/node-x26-y6 85T 73T 12T 85% +/dev/grid/node-x26-y7 93T 73T 20T 78% +/dev/grid/node-x26-y8 89T 68T 21T 76% +/dev/grid/node-x26-y9 89T 71T 18T 79% +/dev/grid/node-x26-y10 86T 66T 20T 76% +/dev/grid/node-x26-y11 94T 72T 22T 76% +/dev/grid/node-x26-y12 86T 72T 14T 83% +/dev/grid/node-x26-y13 93T 68T 25T 73% +/dev/grid/node-x26-y14 86T 68T 18T 79% +/dev/grid/node-x26-y15 91T 69T 22T 75% +/dev/grid/node-x26-y16 93T 73T 20T 78% +/dev/grid/node-x26-y17 89T 70T 19T 78% +/dev/grid/node-x26-y18 87T 66T 21T 75% +/dev/grid/node-x26-y19 90T 67T 23T 74% +/dev/grid/node-x26-y20 94T 69T 25T 73% +/dev/grid/node-x26-y21 510T 497T 13T 97% +/dev/grid/node-x26-y22 86T 71T 15T 82% +/dev/grid/node-x26-y23 92T 65T 27T 70% +/dev/grid/node-x26-y24 85T 73T 12T 85% +/dev/grid/node-x27-y0 89T 66T 23T 74% +/dev/grid/node-x27-y1 89T 70T 19T 78% +/dev/grid/node-x27-y2 86T 66T 20T 76% +/dev/grid/node-x27-y3 91T 66T 25T 72% +/dev/grid/node-x27-y4 90T 70T 20T 77% +/dev/grid/node-x27-y5 92T 70T 22T 76% +/dev/grid/node-x27-y6 86T 67T 19T 77% +/dev/grid/node-x27-y7 88T 65T 23T 73% +/dev/grid/node-x27-y8 93T 72T 21T 77% +/dev/grid/node-x27-y9 91T 64T 27T 70% +/dev/grid/node-x27-y10 93T 71T 22T 76% +/dev/grid/node-x27-y11 94T 69T 25T 73% +/dev/grid/node-x27-y12 86T 67T 19T 77% +/dev/grid/node-x27-y13 93T 73T 20T 78% +/dev/grid/node-x27-y14 93T 72T 21T 77% +/dev/grid/node-x27-y15 88T 65T 23T 73% +/dev/grid/node-x27-y16 88T 70T 18T 79% +/dev/grid/node-x27-y17 94T 65T 29T 69% +/dev/grid/node-x27-y18 90T 73T 17T 81% +/dev/grid/node-x27-y19 87T 64T 23T 73% +/dev/grid/node-x27-y20 85T 68T 17T 80% +/dev/grid/node-x27-y21 503T 498T 5T 99% +/dev/grid/node-x27-y22 91T 73T 18T 80% +/dev/grid/node-x27-y23 94T 68T 26T 72% +/dev/grid/node-x27-y24 91T 65T 26T 71% +/dev/grid/node-x28-y0 86T 71T 15T 82% +/dev/grid/node-x28-y1 92T 67T 25T 72% +/dev/grid/node-x28-y2 94T 71T 23T 75% +/dev/grid/node-x28-y3 92T 68T 24T 73% +/dev/grid/node-x28-y4 86T 73T 13T 84% +/dev/grid/node-x28-y5 88T 68T 20T 77% +/dev/grid/node-x28-y6 93T 70T 23T 75% +/dev/grid/node-x28-y7 90T 67T 23T 74% +/dev/grid/node-x28-y8 92T 72T 20T 78% +/dev/grid/node-x28-y9 85T 66T 19T 77% +/dev/grid/node-x28-y10 88T 72T 16T 81% +/dev/grid/node-x28-y11 90T 72T 18T 80% +/dev/grid/node-x28-y12 87T 73T 14T 83% +/dev/grid/node-x28-y13 87T 64T 23T 73% +/dev/grid/node-x28-y14 94T 70T 24T 74% +/dev/grid/node-x28-y15 85T 67T 18T 78% +/dev/grid/node-x28-y16 88T 73T 15T 82% +/dev/grid/node-x28-y17 86T 68T 18T 79% +/dev/grid/node-x28-y18 91T 70T 21T 76% +/dev/grid/node-x28-y19 86T 64T 22T 74% +/dev/grid/node-x28-y20 91T 70T 21T 76% +/dev/grid/node-x28-y21 506T 493T 13T 97% +/dev/grid/node-x28-y22 92T 70T 22T 76% +/dev/grid/node-x28-y23 88T 70T 18T 79% +/dev/grid/node-x28-y24 90T 71T 19T 78% +/dev/grid/node-x29-y0 85T 73T 12T 85% +/dev/grid/node-x29-y1 87T 68T 19T 78% +/dev/grid/node-x29-y2 94T 67T 27T 71% +/dev/grid/node-x29-y3 89T 68T 21T 76% +/dev/grid/node-x29-y4 91T 65T 26T 71% +/dev/grid/node-x29-y5 93T 64T 29T 68% +/dev/grid/node-x29-y6 94T 72T 22T 76% +/dev/grid/node-x29-y7 89T 66T 23T 74% +/dev/grid/node-x29-y8 91T 65T 26T 71% +/dev/grid/node-x29-y9 90T 67T 23T 74% +/dev/grid/node-x29-y10 92T 66T 26T 71% +/dev/grid/node-x29-y11 89T 69T 20T 77% +/dev/grid/node-x29-y12 86T 65T 21T 75% +/dev/grid/node-x29-y13 88T 66T 22T 75% +/dev/grid/node-x29-y14 85T 65T 20T 76% +/dev/grid/node-x29-y15 94T 73T 21T 77% +/dev/grid/node-x29-y16 90T 73T 17T 81% +/dev/grid/node-x29-y17 87T 67T 20T 77% +/dev/grid/node-x29-y18 91T 64T 27T 70% +/dev/grid/node-x29-y19 90T 73T 17T 81% +/dev/grid/node-x29-y20 88T 73T 15T 82% +/dev/grid/node-x29-y21 502T 499T 3T 99% +/dev/grid/node-x29-y22 91T 65T 26T 71% +/dev/grid/node-x29-y23 90T 72T 18T 80% +/dev/grid/node-x29-y24 90T 69T 21T 76% +/dev/grid/node-x30-y0 91T 67T 24T 73% +/dev/grid/node-x30-y1 87T 67T 20T 77% +/dev/grid/node-x30-y2 89T 66T 23T 74% +/dev/grid/node-x30-y3 86T 64T 22T 74% +/dev/grid/node-x30-y4 87T 71T 16T 81% +/dev/grid/node-x30-y5 92T 68T 24T 73% +/dev/grid/node-x30-y6 91T 67T 24T 73% +/dev/grid/node-x30-y7 85T 71T 14T 83% +/dev/grid/node-x30-y8 91T 66T 25T 72% +/dev/grid/node-x30-y9 85T 70T 15T 82% +/dev/grid/node-x30-y10 89T 71T 18T 79% +/dev/grid/node-x30-y11 87T 69T 18T 79% +/dev/grid/node-x30-y12 89T 73T 16T 82% +/dev/grid/node-x30-y13 88T 71T 17T 80% +/dev/grid/node-x30-y14 94T 68T 26T 72% +/dev/grid/node-x30-y15 87T 72T 15T 82% +/dev/grid/node-x30-y16 91T 71T 20T 78% +/dev/grid/node-x30-y17 92T 70T 22T 76% +/dev/grid/node-x30-y18 88T 66T 22T 75% +/dev/grid/node-x30-y19 85T 68T 17T 80% +/dev/grid/node-x30-y20 94T 66T 28T 70% +/dev/grid/node-x30-y21 503T 498T 5T 99% +/dev/grid/node-x30-y22 93T 69T 24T 74% +/dev/grid/node-x30-y23 87T 70T 17T 80% +/dev/grid/node-x30-y24 92T 67T 25T 72% +/dev/grid/node-x31-y0 94T 64T 30T 68% +/dev/grid/node-x31-y1 91T 70T 21T 76% +/dev/grid/node-x31-y2 91T 70T 21T 76% +/dev/grid/node-x31-y3 89T 69T 20T 77% +/dev/grid/node-x31-y4 89T 68T 21T 76% +/dev/grid/node-x31-y5 89T 70T 19T 78% +/dev/grid/node-x31-y6 90T 65T 25T 72% +/dev/grid/node-x31-y7 93T 66T 27T 70% +/dev/grid/node-x31-y8 86T 71T 15T 82% +/dev/grid/node-x31-y9 86T 72T 14T 83% +/dev/grid/node-x31-y10 94T 67T 27T 71% +/dev/grid/node-x31-y11 86T 72T 14T 83% +/dev/grid/node-x31-y12 91T 65T 26T 71% +/dev/grid/node-x31-y13 85T 64T 21T 75% +/dev/grid/node-x31-y14 90T 71T 19T 78% +/dev/grid/node-x31-y15 92T 72T 20T 78% +/dev/grid/node-x31-y16 87T 72T 15T 82% +/dev/grid/node-x31-y17 89T 66T 23T 74% +/dev/grid/node-x31-y18 91T 73T 18T 80% +/dev/grid/node-x31-y19 90T 66T 24T 73% +/dev/grid/node-x31-y20 90T 68T 22T 75% +/dev/grid/node-x31-y21 510T 498T 12T 97% +/dev/grid/node-x31-y22 86T 69T 17T 80% +/dev/grid/node-x31-y23 86T 69T 17T 80% +/dev/grid/node-x31-y24 94T 70T 24T 74% +/dev/grid/node-x32-y0 85T 65T 20T 76% +/dev/grid/node-x32-y1 91T 70T 21T 76% +/dev/grid/node-x32-y2 90T 65T 25T 72% +/dev/grid/node-x32-y3 86T 67T 19T 77% +/dev/grid/node-x32-y4 93T 71T 22T 76% +/dev/grid/node-x32-y5 90T 69T 21T 76% +/dev/grid/node-x32-y6 85T 73T 12T 85% +/dev/grid/node-x32-y7 92T 67T 25T 72% +/dev/grid/node-x32-y8 87T 65T 22T 74% +/dev/grid/node-x32-y9 89T 64T 25T 71% +/dev/grid/node-x32-y10 88T 64T 24T 72% +/dev/grid/node-x32-y11 89T 69T 20T 77% +/dev/grid/node-x32-y12 91T 66T 25T 72% +/dev/grid/node-x32-y13 90T 66T 24T 73% +/dev/grid/node-x32-y14 90T 72T 18T 80% +/dev/grid/node-x32-y15 94T 73T 21T 77% +/dev/grid/node-x32-y16 86T 66T 20T 76% +/dev/grid/node-x32-y17 93T 70T 23T 75% +/dev/grid/node-x32-y18 85T 71T 14T 83% +/dev/grid/node-x32-y19 86T 67T 19T 77% +/dev/grid/node-x32-y20 86T 65T 21T 75% +/dev/grid/node-x32-y21 509T 499T 10T 98% +/dev/grid/node-x32-y22 90T 72T 18T 80% +/dev/grid/node-x32-y23 86T 70T 16T 81% +/dev/grid/node-x32-y24 92T 73T 19T 79% +/dev/grid/node-x33-y0 93T 65T 28T 69% +/dev/grid/node-x33-y1 91T 65T 26T 71% +/dev/grid/node-x33-y2 85T 71T 14T 83% +/dev/grid/node-x33-y3 90T 68T 22T 75% +/dev/grid/node-x33-y4 91T 65T 26T 71% +/dev/grid/node-x33-y5 93T 71T 22T 76% +/dev/grid/node-x33-y6 87T 69T 18T 79% +/dev/grid/node-x33-y7 87T 65T 22T 74% +/dev/grid/node-x33-y8 85T 73T 12T 85% +/dev/grid/node-x33-y9 87T 70T 17T 80% +/dev/grid/node-x33-y10 90T 70T 20T 77% +/dev/grid/node-x33-y11 87T 72T 15T 82% +/dev/grid/node-x33-y12 89T 70T 19T 78% +/dev/grid/node-x33-y13 88T 73T 15T 82% +/dev/grid/node-x33-y14 94T 65T 29T 69% +/dev/grid/node-x33-y15 94T 71T 23T 75% +/dev/grid/node-x33-y16 87T 65T 22T 74% +/dev/grid/node-x33-y17 91T 69T 22T 75% +/dev/grid/node-x33-y18 88T 65T 23T 73% +/dev/grid/node-x33-y19 90T 73T 17T 81% +/dev/grid/node-x33-y20 90T 71T 19T 78% +/dev/grid/node-x33-y21 502T 498T 4T 99% +/dev/grid/node-x33-y22 93T 65T 28T 69% +/dev/grid/node-x33-y23 86T 64T 22T 74% +/dev/grid/node-x33-y24 89T 72T 17T 80% +/dev/grid/node-x34-y0 88T 68T 20T 77% +/dev/grid/node-x34-y1 92T 70T 22T 76% +/dev/grid/node-x34-y2 88T 65T 23T 73% +/dev/grid/node-x34-y3 93T 68T 25T 73% +/dev/grid/node-x34-y4 91T 68T 23T 74% +/dev/grid/node-x34-y5 93T 72T 21T 77% +/dev/grid/node-x34-y6 85T 73T 12T 85% +/dev/grid/node-x34-y7 89T 67T 22T 75% +/dev/grid/node-x34-y8 93T 71T 22T 76% +/dev/grid/node-x34-y9 94T 73T 21T 77% +/dev/grid/node-x34-y10 89T 71T 18T 79% +/dev/grid/node-x34-y11 88T 71T 17T 80% +/dev/grid/node-x34-y12 93T 68T 25T 73% +/dev/grid/node-x34-y13 90T 65T 25T 72% +/dev/grid/node-x34-y14 90T 66T 24T 73% +/dev/grid/node-x34-y15 93T 65T 28T 69% +/dev/grid/node-x34-y16 86T 65T 21T 75% +/dev/grid/node-x34-y17 93T 70T 23T 75% +/dev/grid/node-x34-y18 85T 70T 15T 82% +/dev/grid/node-x34-y19 91T 73T 18T 80% +/dev/grid/node-x34-y20 90T 70T 20T 77% +/dev/grid/node-x34-y21 509T 498T 11T 97% +/dev/grid/node-x34-y22 86T 68T 18T 79% +/dev/grid/node-x34-y23 91T 72T 19T 79% +/dev/grid/node-x34-y24 90T 70T 20T 77% +/dev/grid/node-x35-y0 94T 72T 22T 76% +/dev/grid/node-x35-y1 86T 72T 14T 83% +/dev/grid/node-x35-y2 89T 73T 16T 82% +/dev/grid/node-x35-y3 92T 68T 24T 73% +/dev/grid/node-x35-y4 94T 70T 24T 74% +/dev/grid/node-x35-y5 94T 69T 25T 73% +/dev/grid/node-x35-y6 89T 72T 17T 80% +/dev/grid/node-x35-y7 87T 68T 19T 78% +/dev/grid/node-x35-y8 89T 73T 16T 82% +/dev/grid/node-x35-y9 93T 67T 26T 72% +/dev/grid/node-x35-y10 89T 71T 18T 79% +/dev/grid/node-x35-y11 91T 70T 21T 76% +/dev/grid/node-x35-y12 90T 64T 26T 71% +/dev/grid/node-x35-y13 86T 70T 16T 81% +/dev/grid/node-x35-y14 85T 67T 18T 78% +/dev/grid/node-x35-y15 88T 70T 18T 79% +/dev/grid/node-x35-y16 88T 69T 19T 78% +/dev/grid/node-x35-y17 89T 65T 24T 73% +/dev/grid/node-x35-y18 89T 72T 17T 80% +/dev/grid/node-x35-y19 89T 68T 21T 76% +/dev/grid/node-x35-y20 89T 72T 17T 80% +/dev/grid/node-x35-y21 510T 491T 19T 96% +/dev/grid/node-x35-y22 89T 68T 21T 76% +/dev/grid/node-x35-y23 88T 65T 23T 73% +/dev/grid/node-x35-y24 85T 67T 18T 78% diff --git a/d22/src/main.rs b/d22/src/main.rs new file mode 100644 index 0000000..71b17c0 --- /dev/null +++ b/d22/src/main.rs @@ -0,0 +1,205 @@ +use std::fs; +use std::collections::{HashSet, VecDeque}; + +#[derive(Clone, Debug)] +struct Node { + goal: bool, + //size: usize, + used: usize, + avail: usize, +} + +fn parse(lines: Vec<&str>) -> Vec<Vec<Node>> { + let mut nodes = Vec::with_capacity(36); + + let mut y = 0; + let mut column = Vec::with_capacity(25); + // Skip the first two lines; see `input.txt' to see why + for i in 2..lines.len() { + let words: Vec<&str> = lines[i].split_ascii_whitespace().collect(); + + // Read the `df -h' data, ignoring the node name + let node = Node { + goal: false, + //size: words[1].trim_end_matches('T').parse().unwrap(), + used: words[2].trim_end_matches('T').parse().unwrap(), + avail: words[3].trim_end_matches('T').parse().unwrap(), + }; + column.push(node); + + y += 1; + // The grid size is hardcoded at 25 rows here + if y > 24 { + nodes.push(column); + + y = 0; + column = Vec::with_capacity(25); + } + } + + // In part 2, we want the data in the top-right corner + nodes.last_mut().unwrap()[0].goal = true; + + nodes +} + +fn solve_part1(state: &Vec<Vec<Node>>) -> usize { + let mut pairs = Vec::new(); + + for x1 in 0..state.len() { + for y1 in 0..state[0].len() { + for x2 in 0..state.len() { + for y2 in 0..state[0].len() { + // Check for a "viable pair" according to puzzle description + if (x1 != x2 || y1 != y2) && state[x1][y1].used > 0 { + if state[x1][y1].used < state[x2][y2].avail { + pairs.push(((x1, y1), (x2, y2))); + } + } + } + } + } + } + + pairs.len() +} + + +fn serialize(state: &Vec<Vec<Node>>) -> String { + let mut result = String::new(); + + // Print grid like the example in part 2's description. + // Some information is deliberately lost in this step. + for y in 0..state[0].len() { + for x in 0..state.len() { + if state[x][y].goal { + result.push('G'); + } else if state[x][y].used > 100 { + result.push('#'); + } else if state[x][y].used == 0 { + result.push('_'); + } else { + result.push('.'); + } + } + result.push('\n'); + } + + result +} + +fn solve_part2(start: &Vec<Vec<Node>>) -> usize { + // We will do a breadth-first search of the state space, with the catch + // that `serialize()' maps several states onto the same representation + let mut visited = HashSet::from([serialize(&start)]); + let mut queue = VecDeque::from([(start.clone(), 0)]); + + loop { + let (state, depth) = queue.pop_front().unwrap(); + + // End condition: did we move the target data to top-left node? + if state[0][0].goal { + return depth; + } + + // There is one empty node; find its coordinates + let mut empty = (36, 25); + for x in 0..state.len() { + for y in 0..state[0].len() { + if state[x][y].used == 0 { + empty = (x, y); + } + } + } + + // Get coordinates of up to four neighbours of `empty' + let mut neighbours = Vec::new(); + if empty.0 > 0 { + neighbours.push((empty.0 - 1, empty.1)); + } + if empty.0 < state.len() - 1 { + neighbours.push((empty.0 + 1, empty.1)); + } + if empty.1 > 0 { + neighbours.push((empty.0, empty.1 - 1)); + } + if empty.1 < state[0].len() - 1 { + neighbours.push((empty.0, empty.1 + 1)); + } + + // Generate new states, one for swapping `empty' with each neighbour + let mut new_states = Vec::new(); + for neigh in neighbours { + // Some nodes are large and full; their data won't fit in `empty', + // so we ignore them. Otherwise, we assume that the data will fit; + // this assumption is justified by the example given for part 2. + if state[neigh.0][neigh.1].used > 100 { + continue; + } + + let mut ns = state.clone(); + + let amount = ns[neigh.0][neigh.1].used; + ns[neigh.0][neigh.1].used -= amount; + ns[neigh.0][neigh.1].avail += amount; + + ns[empty.0][empty.1].used += amount; + ns[empty.0][empty.1].avail -= amount; + + if ns[neigh.0][neigh.1].goal { + ns[empty.0][empty.1].goal = true; + ns[neigh.0][neigh.1].goal = false; + } + + new_states.push(ns); + } + + for ns in new_states { + // Via `serialize()' many uninteresting states are discarded here + let ser = serialize(&ns); + if !visited.contains(&ser) { + visited.insert(ser); + queue.push_back((ns, depth + 1)); + } + } + } +} + +fn main() { + // Read data from input text file + let input = fs::read_to_string("input.txt").unwrap(); + let lines = input.lines().collect(); + let nodes = parse(lines); + + // Part 1 gives 864 for me + println!("Part 1 solution: {}", solve_part1(&nodes)); + + // Part 2 gives 244 for me + println!("Part 2 solution: {}", solve_part2(&nodes)); +} + +// Disabled because I'm too lazy to rewrite `parse()' +// to make it handle different grid sizes properly +/*#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn part2_example1() { + let lines = vec![ + "root@ebhq-gridcenter# df -h", + "Filesystem Size Used Avail Use%", + "/dev/grid/node-x0-y0 10T 8T 2T 80%", + "/dev/grid/node-x0-y1 11T 6T 5T 54%", + "/dev/grid/node-x0-y2 32T 28T 4T 87%", + "/dev/grid/node-x1-y0 9T 7T 2T 77%", + "/dev/grid/node-x1-y1 8T 0T 8T 0%", + "/dev/grid/node-x1-y2 11T 7T 4T 63%", + "/dev/grid/node-x2-y0 10T 6T 4T 60%", + "/dev/grid/node-x2-y1 9T 8T 1T 88%", + "/dev/grid/node-x2-y2 9T 6T 3T 66%", + ]; + let nodes = parse(lines); + assert_eq!(solve_part2(&nodes), 7); + } +}*/ diff --git a/d23/Cargo.toml b/d23/Cargo.toml new file mode 100644 index 0000000..9a8c5ac --- /dev/null +++ b/d23/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "d23" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/d23/input.txt b/d23/input.txt new file mode 100644 index 0000000..74d33e1 --- /dev/null +++ b/d23/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 95 c +jnz 95 d +inc a +inc d +jnz d -2 +inc c +jnz c -5 diff --git a/d23/src/main.rs b/d23/src/main.rs new file mode 100644 index 0000000..234ebb6 --- /dev/null +++ b/d23/src/main.rs @@ -0,0 +1,149 @@ +use std::collections::HashMap; +use std::fs; + +// Compared to day 12, for day 23 it makes more sense to abstract +// over operands in this way; they could be registers or literals. +#[derive(Copy, Clone, Debug)] +enum Arg<'a> { + Reg(&'a str), + Lit(isize), +} + +// It's convenient to use the `From' trait for parsing operands +impl<'a> From<&'a str> for Arg<'a> { + fn from(s: &'a str) -> Self { + if s.chars().all(|c| c.is_ascii_digit() || c == '-') { // yes I know + Self::Lit(s.parse().unwrap()) + } else { + Self::Reg(s) + } + } +} + +#[derive(Copy, Clone, Debug)] +enum Oper<'a> { + Inc(Arg<'a>), + Dec(Arg<'a>), + Tgl(Arg<'a>), + Cpy(Arg<'a>, Arg<'a>), + Jnz(Arg<'a>, Arg<'a>), +} + +fn parse(lines: Vec<&str>) -> Vec<Oper> { + let mut insts = Vec::new(); + + for line in lines { + let words: Vec<&str> = line.split_ascii_whitespace().collect(); + + if words[0] == "inc" { + insts.push(Oper::Inc(Arg::from(words[1]))); + } else if words[0] == "dec" { + insts.push(Oper::Dec(Arg::from(words[1]))); + } else if words[0] == "tgl" { + insts.push(Oper::Tgl(Arg::from(words[1]))); + } else if words[0] == "cpy" { + insts.push(Oper::Cpy(Arg::from(words[1]), Arg::from(words[2]))); + } else if words[0] == "jnz" { + insts.push(Oper::Jnz(Arg::from(words[1]), Arg::from(words[2]))); + } + } + + insts +} + +fn execute(program: &Vec<Oper>, init: Vec<(&str, isize)>) -> isize { + // Make a local mutable copy of the program + let mut insts = program.clone(); + + // `init' contains initial register values + let mut state: HashMap<&str, isize> = init.into_iter().collect(); + + let mut ip = 0; // instruction pointer + while ip < insts.len() { + match insts[ip] { + Oper::Inc(arg) => { + if let Arg::Reg(dst) = arg { + *state.entry(dst).or_insert(0) += 1; + } + }, + Oper::Dec(arg) => { + if let Arg::Reg(dst) = arg { + *state.entry(dst).or_insert(0) -= 1; + } + }, + Oper::Tgl(arg) => { + let off = match arg { + Arg::Reg(reg) => state.get(®).copied().unwrap_or(0), + Arg::Lit(lit) => lit, + }; + // Calculate index of target instruction + let t = ((ip as isize) + off) as usize; + if t < insts.len() { + insts[t] = match insts[t] { + Oper::Inc(a) => Oper::Dec(a), + Oper::Dec(a) => Oper::Inc(a), + Oper::Tgl(a) => Oper::Inc(a), + Oper::Cpy(a1, a2) => Oper::Jnz(a1, a2), + Oper::Jnz(a1, a2) => Oper::Cpy(a1, a2), + }; + } + }, + Oper::Cpy(arg1, arg2) => { + // If destination is a literal (due to `Tgl'), ignore this `Cpy' + if let Arg::Reg(dst) = arg2 { + let val = match arg1 { + Arg::Reg(src) => state.get(&src).copied().unwrap_or(0), + Arg::Lit(lit) => lit, + }; + *state.entry(dst).or_insert(0) = val; + } + }, + Oper::Jnz(arg1, arg2) => { + let val = match arg1 { + Arg::Reg(reg) => state.get(®).copied().unwrap_or(0), + Arg::Lit(lit) => lit, + }; + // Should the branch be taken? If yes: + if val != 0 { + let off = match arg2 { + Arg::Reg(reg) => state.get(®).copied().unwrap_or(0), + Arg::Lit(lit) => lit, + }; + // Subtract 1 to compensate for `ip += 1;' below + ip = ((ip as isize) + off - 1) as usize; + } + }, + }; + + ip += 1; + } + + state.get("a").copied().unwrap() +} + +fn main() { + // Read assembly from input text file and parse it + let input = fs::read_to_string("input.txt").unwrap(); + let lines = input.lines().collect(); + let insts = parse(lines); + + // Part 1 gives 14065 for my input + println!("Part 1 solution: {}", execute(&insts, vec![("a", 7)])); + + // Part 2 gives 479010625 for my input + println!("Part 2 solution: {}", execute(&insts, vec![("a", 12)])); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn part1_example1() { + let lines = vec![ + "cpy 2 a", "tgl a", "tgl a", "tgl a", "cpy 1 a", "dec a", "dec a" + ]; + let insts = parse(lines); + assert_eq!(execute(&insts, vec![]), 3); + } +} diff --git a/d24/Cargo.toml b/d24/Cargo.toml new file mode 100644 index 0000000..800c124 --- /dev/null +++ b/d24/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "d24" +version = "0.1.0" +edition = "2021" + +[dependencies] +itertools = "0.10.5" diff --git a/d24/input.txt b/d24/input.txt new file mode 100644 index 0000000..6fcc4f5 --- /dev/null +++ b/d24/input.txt @@ -0,0 +1,39 @@ +##################################################################################################################################################################################### +#.....#.#.....#.#.#...#.....#.#.#.#.....#3......#...........#.#.....#.....#.............#.#...#...#.....#...#.........#.#...............#.....#.....#.........................#.....# +#.#.#.#.#.#.#.#.#.#.#.#.###.#.#.#.#.#.#####.#.#.#.#####.#.###.#.#.###.#.#####.###.#.#.#.#.#####.#.#.#.#####.#.#.#####.#.#.#####.###.#.#.###.###.###.#.###.#.###.###.#.#######.####### +#.....#...#.#.....#...#.........#...........#.......#...#.#.....#.....#.#.#.......#...#.#...#...#...#.#...#...#.#...#.#.#.#.......#...#...#.....#.....#.....#...#...#.......#.#...#.# +###.#####.#.#######.###.#.#.#.#.#.#####.#.#.#.#####.#.###.#.#####.#.#.#.#.#####.#.#.#.#.#.###.#.###.#.#####.#.#.#.#.###.#.#.#.###.#.#.#.#.###.#.#.###.#.#.#.#.#.#.#.#.#.#####.#.#.#.# +#...#1......#.....#.#.#.#.....#.#.#.....#...#.#...#.......#...........#.............#...#.....#.......#.....#.....#.#.......#.#...#.#.#.#.......#...#.#...........#.#.....#...#.#...# +#.#.###.#.###.#.#.#.#.#.#.#######.#.#.###.#.#.#.###.#####.###.#.#.#.#.#.###.#.#####.#.#.#####.#####.#.#.#.#.#.#.#.###.###.#.#####.#.#.#####.#.#.#.#.#.#.#.###.#####.###.#.#.#.#.###.# +#.....#.#.....#.#...#.#.....#.#.#.#.........#.#.#.......#.#.#.......#...#...#...#.....#.#...#.......#.....#.......#...#.....#...#...#.......#...#.#.....#...#.#.....#.#...#.#...#...# +#.#.#.#.#####.#.###.#.#.#.###.#.###.#.#.#####.#.#####.#.#.#.#.#####.#.#.#.###.#######.#.###.#.###.#.#.#.#.#.#.#####.###.#####.#.#.#.#.#####.#####.#.###.#.#.#.#.#.#.#.#####.###.#.### +#...#.#...#.........#.#...#.#...#.....#.#.....#.......#.........#.....#.....#.........#.....#...#.#.#.#.....#.#.................#.#.#.......#.......#.......#...#...#.......#.#...#.# +#.#.#.#.#.#.#.###.#.###.###.#.#.#.###.###.#.#.#.#.#.#.#########.#.###.#.#.#####.#.#.#.###.#######.#.###.#.#.#.#.#.#.#.###.#.#.###.#######.#.###.#.#.#.#.###.#.#.#.#####.###.#.#.###.# +#...#.#.#.#.#...#...#...#.............#.....#.....#...#...#.#.....#...#...#.....#.#.....#...#...........#.#.#.#.......#...#.............#...#.#...#...........#...#2#...#.....#.#.#.# +###.###.#.#####.#.#.#.#.#.#.#.#.#.#.###.###.#.#.#.###.###.#.#.#.#.#.#.###.###.#.#.#.#.###.#.#.#.###.#####.###.###.#.#.#.###.#######.###.###.#.#.#.#####.#####.###.#.#.#####.#.#.#.### +#.......#...#...........#.......#...#.#.......#.....#.....#...#...#.#.........#.......#...#.#...#...........#.#...#.#...............#.#.#.....#.......#.#.#.#.....#.........#.#.#.#.# +###.#.#.#.#.#.#.#####.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#####.#.###.#.###.#.#.#.#########.###.#.###.#.###.#.#.#.#.#######.#####.###.#.#.#.#.#####.#####.#.#.#.#.#.#######.#.###.#.#.#.# +#...#.....#.#.............#...#.#.....#.#...#.......#.........#...#...#.#...#...........#...#...........#...#...#.................#...#.#.#.....#.......#.#.#.......#...#...#...#...# +###.#.#######.#.#.#.###.#.#.#.###.#.#.#.#.#.###.#####.#.###.#.#.#.###.#.#.#.#.#.#.#.###.#.#.#.#.#.#.#####.#.#####.#.#.#.#.#.#######.#.#.#.###.#.#.#.#.#.###.#.###.#########.###.#.#.# +#.....#...#.....#.....#...#.........#.#...#.....#...#.................#...#.#.#.......#.....#...#.#.................#.#.#.........#.....#...#.#...#.....#.................#.#.....#.# +#.#####.#.#.#####.###.#.#.#.###.###.#.#########.#.#######.###.###.#.#.#.#.#.#.#.###.#.#.#####.#.###.#.#########.#.###.###.#.###.###.#.#.#.#.#.###.#####.#.#.#######.#.###.#.#.###.### +#0#...#.#...#...........#.#.............#.#.......#.....#.#.#.....#.#.#...#.....#.#.#.......#.#...#.................#.#.#.....#...#.#.........#.......#.#...#.......#.......#.....#.# +#####.#.###.#.#.###.#####.###.#######.###.#.#.###.#.#.#.#.#.#.#.#.###.#.#.#.#.#.#.#.#.#####.###.#.#####.#.#.#.###.#.#.#.#########.#.#.#.###.#.#.###.#.#####.#.#.#.#.#.###.###.#.#.#.# +#...#.#.....#.#.#...#.......#.#.#...#.........#.......#...#.#.....#.............#...........#...#.#.......#.#.....#.#...........#...#.........#.#...#.#.....#.......#...#.......#...# +###.###.###.#.###.###.#.###.###.#.#.#.#########.#####.###.#######.#.###.#.#.#.###.#.#.#.#.#.#.#.#####.###.#.#.#.#.#.#.#####.###.#.#.###.#####.#.#.#####.#.#.###.#.#####.#.#.#.#.#.#.# +#.......#...............#.....#...#...#.#...#.........#...........#.....#.....#.......#...#.....#.......#.#.#.#...#...............#.....#.....#...#.#...#...#.#.#.#.#.....#...#.#.#4# +#.#.#.#.#.#####.###.#.#####.#.###.#.###.#.#.#.###.###.#.#####.#.#####.#.#######.#.#####.#.#######.#.###.#.#.#.###.###.###.#####.#.###.#.#.#.#####.#.#.#.###.#.#.###.###.#.#.#.#.#.### +#...#...........#.......#...#.....#.#.......#.....#.........#.#.......#.#...#...#...........#.......#.....#...#...#...#.#...#.....#...#.........#...#...#.....#.....#...#...#...#...# +###.#.###.#############.#.###.###.#.###.#.#.#.#.#.#.#.#.###.#####.#.#.#.#.#.#####.###.#.#.#.#.###.#.#.#.#.#.###.#.#.###.#.#.#.###.###.#.#.###.#.#.#.#.#.#.#####.#.#.#.#.#.#.###.#.### +#...#.....#.#...#.#.#.#...........#.......#...#.....#...#...................#...#...#.#.#.#...#.......#...............#...#...#...#...#.#.#5#...#...#.#...#...#.#...#.#...#...#.#...# +#.###.###.#.#.#.#.#.#.###.#.#######.#.#.#.###.#.#.#.#.#.#.###.#.###.###.#.#.#.#.#.###.#.#.#.#.#.###.#.#.###.#.#.###.#.#.#.#.#.#.#.#.#####.#.#.#######.#.#.#.#.#.#####.#.#######.#.#.# +#.........#.#...#.#...#...#.............#.....#...#.#.#.#.#.#.....#.#...#.....#.#.#.........#.....#.........#.....#...........#...#.........#.....#...#.#.#.#...#...........#...#...# +#.#.#.#######.#.#####.#.#.#.###.#.#######.#####.#.#.###.#.#.#.###.###.#.###.#.#.#.###.#.#.#.#####.#.###.#.#.#.#.#.#.#####.#.#.###.#.#.#.#.#####.###.#####.#.#.#.#.###.#.#.#####.##### +#...#...............#.#.......#.......#.......#.........#.#.#.#...#...#...#.......#.#.....#.#...........#...#.#.#...........#.#...#.......#.........#...#...#.....#...#.#.....#.#...# +###.#.#.#.#.#########.#.#.#.#.#.#####.#.#######.#.###.#.#.#.###.###.#.#.#.#.#.###.#.#.###.#.#####.#.###########.#.#.#####.#####.#####.#####.#.#.#.#.#.#.#####.#.#.#########.#.###.#.# +#.#...#.....#.......#.....#...#.......#.#.#...#...#...#.........#...#...#.#...#.#.........#.#.......#.#.#...#...#.........#.#.........#.....#.#.#...#.......#.#.....#.......#.#.....# +#.#.###.#.###.#.#.#.#.###.#########.#.#.#.#.#.#.###.#.#.#####.#.#.#####.#####.#.#.#########.#.#.#.###.#.#####.#.#.###.###.#.#.#.#.#.#####.###.#.###########.#.#.#.#.#.#######.#####.# +#........7#.....#.#...#.#.#.#.........#...#.#...........#.....#.......#.........#.........#.....#.......#.#.......#.#.#...#...#.#.#....6#.#.........................#...#.#.......#.# +#.###.#.###.###.###.#.#.###.###.#####.###.#.#.###.#####.###.#.###.#.#.#.#.#.#.#.#.#####.#.#.#####.#######.#.###.#.#.#####.#####.#.#.#.###.#.#.#.#.#####.#.#.###.#####.#.#.#.#.#.#.#.# +#.#...#.#...#.#.....#.#.......#...#.....#...#...#...#...#.#.....#...#.#...#...#...#.#.............#.............#.#...#.............#.#.....#.....#.......#.#.#.#.........#...#...#.# +##################################################################################################################################################################################### diff --git a/d24/src/main.rs b/d24/src/main.rs new file mode 100644 index 0000000..a43866b --- /dev/null +++ b/d24/src/main.rs @@ -0,0 +1,146 @@ +use std::collections::VecDeque; +use std::fs; + +use itertools::Itertools; + +fn to_grid(lines: Vec<&str>) -> Vec<Vec<char>> { + let mut grid: Vec<Vec<char>> = Vec::new(); + + for line in lines { + let mut row = Vec::new(); + for ch in line.chars() { + row.push(ch); + } + grid.push(row); + } + + grid +} + +fn find_goals(grid: &Vec<Vec<char>>) -> Vec<(usize, usize)> { + let mut result = Vec::new(); + + // The goal locations are represented by digits in the grid + for (y, row) in grid.iter().enumerate() { + for (x, ch) in row.iter().enumerate() { + if ch.is_ascii_digit() { + result.push((x, y)); + } + } + } + + result +} + +fn goal_distances(grid: &Vec<Vec<char>>, goals: &Vec<(usize, usize)>) -> Vec<Vec<usize>> { + let mut dists = Vec::new(); + for _i in 0..goals.len() { + dists.push([0].repeat(goals.len())); + } + + // For each goal location, find the distance to each other goal + for (i, &g) in goals.iter().enumerate() { + let mut visited = vec![g]; + let mut queue = VecDeque::from([(g, 0)]); + + // Do a breadth-first search to find the shortest paths + while queue.len() > 0 { + let (loc, depth) = queue.pop_front().unwrap(); + + // Have we reached another goal? If so, which one? + let oj = goals.iter().position(|&xy| xy == loc); + if oj.is_some() { + let j = oj.unwrap(); + dists[i][j] = depth; + } + + // Which adjacent locations are accessible? + let mut adjs = Vec::new(); + let u = (loc.0, loc.1 - 1); // up + let d = (loc.0, loc.1 + 1); // down + let l = (loc.0 - 1, loc.1); // left + let r = (loc.0 + 1, loc.1); // right + if grid[u.1][u.0] != '#' { + adjs.push(u); + } + if grid[d.1][d.0] != '#' { + adjs.push(d); + } + if grid[l.1][l.0] != '#' { + adjs.push(l); + } + if grid[r.1][r.0] != '#' { + adjs.push(r); + } + + // Standard breadth-first search stuff + for adj in adjs { + if !visited.contains(&adj) { + visited.push(adj); + queue.push_back((adj, depth + 1)); + } + } + } + } + + dists +} + +fn solve_puzzle(grid: &Vec<Vec<char>>, go_back: bool) -> usize { + let goals = find_goals(&grid); + let dists = goal_distances(&grid, &goals); + + // This is the travelling salesman problem, so we must try all paths. + // We just brute-force the total distance for every order of the goals, + // and only keep the result if the path started at "0" as it should. + let mut shortest = 13371337; + for p in (0..goals.len()).permutations(goals.len()) { + let mut total = 0; + for i in 1..p.len() { + total += dists[p[i - 1]][p[i]]; + } + // Part 2: go back to the start too + if go_back { + total += dists[p[p.len() - 1]][p[0]]; + } + + // Is this the shortest path we've seen that start at "0"? + let first = goals[p[0]]; + if grid[first.1][first.0] == '0' && total < shortest { + shortest = total; + } + } + + shortest +} + +fn main() { + // Read layout from input text file + let input = fs::read_to_string("input.txt").unwrap(); + let lines = input.lines().collect(); + let grid = to_grid(lines); + + // Part 1 gives 430 for me + println!("Part 1 solution: {}", solve_puzzle(&grid, false)); + + // Part 2 gives 700 for me + println!("Part 2 solution: {}", solve_puzzle(&grid, true)); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn part1_example1() { + let lines = vec![ + "###########", + "#0.1.....2#", + "#.#######.#", + "#4.......3#", + "###########", + ]; + let grid = to_grid(lines); + assert_eq!(solve_puzzle(&grid, false), 14); + } +} diff --git a/d25/Cargo.toml b/d25/Cargo.toml new file mode 100644 index 0000000..483f9b6 --- /dev/null +++ b/d25/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "d25" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/d25/input.txt b/d25/input.txt new file mode 100644 index 0000000..b684231 --- /dev/null +++ b/d25/input.txt @@ -0,0 +1,30 @@ +cpy a d +cpy 4 c +cpy 643 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/d25/src/main.rs b/d25/src/main.rs new file mode 100644 index 0000000..ab740d8 --- /dev/null +++ b/d25/src/main.rs @@ -0,0 +1,178 @@ +use std::collections::HashMap; +use std::fs; + +// This implementation is more similar to day 23 than day 12 +#[derive(Copy, Clone, Debug)] +enum Arg<'a> { + Reg(&'a str), + Lit(isize), +} + +impl<'a> From<&'a str> for Arg<'a> { + fn from(s: &'a str) -> Self { + if s.chars().all(|c| c.is_ascii_digit() || c == '-') { // yes I know + Self::Lit(s.parse().unwrap()) + } else { + Self::Reg(s) + } + } +} + +#[derive(Copy, Clone, Debug)] +enum Oper<'a> { + Inc(Arg<'a>), + Dec(Arg<'a>), + Out(Arg<'a>), + Cpy(Arg<'a>, Arg<'a>), + Jnz(Arg<'a>, Arg<'a>), +} + +fn parse(lines: Vec<&str>) -> Vec<Oper> { + let mut insts = Vec::new(); + + for line in lines { + let words: Vec<&str> = line.split_ascii_whitespace().collect(); + + if words[0] == "inc" { + insts.push(Oper::Inc(Arg::from(words[1]))); + } else if words[0] == "dec" { + insts.push(Oper::Dec(Arg::from(words[1]))); + } else if words[0] == "out" { + insts.push(Oper::Out(Arg::from(words[1]))); + } else if words[0] == "cpy" { + insts.push(Oper::Cpy(Arg::from(words[1]), Arg::from(words[2]))); + } else if words[0] == "jnz" { + insts.push(Oper::Jnz(Arg::from(words[1]), Arg::from(words[2]))); + } + } + + insts +} + +// We pause the program at each `Out' and save the state to resume later +#[derive(Clone, Debug, PartialEq)] +struct State<'a> { + regs: HashMap<&'a str, isize>, + ip: usize, +} + +impl<'a> From<Vec<(&'a str, isize)>> for State<'a> { + fn from(init: Vec<(&'a str, isize)>) -> Self { + Self { + regs: init.into_iter().collect(), + ip: 0, + } + } +} + +// Execute the program until the next `Out` instruction, return the transmission +fn transmit_next<'a>(insts: &'a Vec<Oper>, state: &mut State<'a>) -> Option<isize> { + let mut transmit = None; + + while state.ip < insts.len() && transmit.is_none() { + match insts[state.ip] { + Oper::Inc(arg) => { + if let Arg::Reg(dst) = arg { + *state.regs.entry(dst).or_insert(0) += 1; + } + }, + Oper::Dec(arg) => { + if let Arg::Reg(dst) = arg { + *state.regs.entry(dst).or_insert(0) -= 1; + } + }, + Oper::Out(arg) => { + let val = match arg { + Arg::Reg(reg) => state.regs.get(®).copied().unwrap_or(0), + Arg::Lit(lit) => lit, + }; + transmit = Some(val); + }, + Oper::Cpy(arg1, arg2) => { + // This `if let' is actually a leftover from day 23 + if let Arg::Reg(dst) = arg2 { + let val = match arg1 { + Arg::Reg(src) => state.regs.get(&src).copied().unwrap_or(0), + Arg::Lit(lit) => lit, + }; + *state.regs.entry(dst).or_insert(0) = val; + } + }, + Oper::Jnz(arg1, arg2) => { + let val = match arg1 { + Arg::Reg(reg) => state.regs.get(®).copied().unwrap_or(0), + Arg::Lit(lit) => lit, + }; + if val != 0 { + let off = match arg2 { + Arg::Reg(reg) => state.regs.get(®).copied().unwrap_or(0), + Arg::Lit(lit) => lit, + }; + // Subtract 1 to compensate for `state.ip += 1;' below + state.ip = ((state.ip as isize) + off - 1) as usize; + } + }, + }; + + state.ip += 1; + } + + transmit +} + +fn solve_part1(insts: &Vec<Oper>) -> isize { + let mut a = 1; + loop { + // History of (transmission, state) for this value of `a'. + // We're looking for a periodic pattern in these tuples. + let mut history: Vec<(isize, State)> = Vec::new(); + + // Initialize a fresh state with the candidate value of `a' + let mut state: State = State::from(vec![("a", a)]); + + // This puzzle is basically Turing's halting problem, so for practicality + // we arbitrarily assume that the periodicity is at most 100 transmissions + for _i in 0..100 { + let ot = transmit_next(insts, &mut state); + + // Did the program exit? + if ot.is_none() { + break; + } + + // Did we transmit something other than 0 or 1? + let t = ot.unwrap(); + if t != 0 && t != 1 { + break; + } + + // Didn't we transmit 0 after 1, or 1 after 0? + if history.len() > 0 && history.last().unwrap().0 != 1 - t { + break; + } + + let ts = (t, state.clone()); + // Have we seen this state before? If yes, we've found a solution! + if history.contains(&ts) { + return a; + } else { + // But the transmission pattern seems promising so far; store it + history.push(ts); + } + } + + a += 1; + } +} + +fn main() { + // Read assembly from input text file and parse it + let input = fs::read_to_string("input.txt").unwrap(); + let lines = input.lines().collect(); + let insts = parse(lines); + + // Part 1 gives 158 for my input + println!("Part 1 solution: {}", solve_part1(&insts)); + + // There's no part 2, since this is the last day +} |
