From ebff280dc02bb57a0673a0477e16ded16fa30a8c Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Sun, 1 Dec 2024 22:32:47 +0100 Subject: [PATCH 01/63] New map file, new folder, new class Added: - New map folder with a copy of the map - Added a new layer for the water in tiled map - Extracted water tiles and added to a new folder in images - Extracted coast animation tiles and added to images - Added a new class AnimatedSpites and began testing animations --- data/new_maps/100x100_map.tmx | 560 +++++++++++++++++++ data/new_tilesets/Fort Tiles.tsx | 4 + data/new_tilesets/Ships tiles.tsx | 4 + data/new_tilesets/Water and Island tiles.tsx | 4 + data/new_tilesets/Water+.tsx | 4 + images/tilesets/coast.png | Bin 0 -> 1132 bytes images/tilesets/water/0.png | Bin 0 -> 414 bytes images/tilesets/water/1.png | Bin 0 -> 400 bytes images/tilesets/water/2.png | Bin 0 -> 403 bytes images/tilesets/water/3.png | Bin 0 -> 390 bytes images/tilesets/water/4.png | Bin 0 -> 401 bytes src/GUI/gameloop.py | 29 +- src/sprites.py | 22 +- src/support.py | 50 ++ 14 files changed, 669 insertions(+), 8 deletions(-) create mode 100644 data/new_maps/100x100_map.tmx create mode 100644 data/new_tilesets/Fort Tiles.tsx create mode 100644 data/new_tilesets/Ships tiles.tsx create mode 100644 data/new_tilesets/Water and Island tiles.tsx create mode 100644 data/new_tilesets/Water+.tsx create mode 100644 images/tilesets/coast.png create mode 100644 images/tilesets/water/0.png create mode 100644 images/tilesets/water/1.png create mode 100644 images/tilesets/water/2.png create mode 100644 images/tilesets/water/3.png create mode 100644 images/tilesets/water/4.png create mode 100644 src/support.py diff --git a/data/new_maps/100x100_map.tmx b/data/new_maps/100x100_map.tmx new file mode 100644 index 0000000..f5b635a --- /dev/null +++ b/data/new_maps/100x100_map.tmx @@ -0,0 +1,560 @@ + + + + + + + + +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, +2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120 + + + + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,11,11,11,11,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,10,11,11,11,11,11,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,11,11,11,38,35,35,35,35,37,11,11,11,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,11,11,11,11,11,12,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,59,35,35,35,35,35,35,35,35,35,13,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,58,59,59,59,59,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,59,59,59,59,59,60,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,13,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,59,59,59,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,11,11,11,11,11,11,11,11,11,11,11,11,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,13,14,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,37,38,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,13,14,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,37,38,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,3221225483,3221225483,3221225483,3221225483,3221225483,3221225483,3221225483,3221225483,3221225483,3221225483,3221225483,3221225483,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,10,11,11,11,11,11,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,11,11,11,11,11,11,11,11,11,11,11,11,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,37,11,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,13,14,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,37,38,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,13,14,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,37,38,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,59,59,59,59,59,59,59,59,59,59,59,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,58,59,59,59,59,59,59,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,11,11,11,11,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,59,59,59,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,11,11,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,59,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,10,11,11,11,11,11,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,11,11,11,11,11,12,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,11,11,11,11,11,11,11,11,11,11,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,11,11,11,11,12,0,34,35,35,35,35,35,35,35,35,35,35,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,36,0,34,35,35,35,35,35,35,35,35,35,35,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,36,0,34,35,35,35,35,35,35,35,35,35,35,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,36,0,34,35,35,35,35,13,59,59,59,59,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,58,59,59,59,59,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,59,14,35,35,36,0,58,59,59,59,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,59,59,59,59,59,60,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,37,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,59,35,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,26,27,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49,50,51,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,26,26,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,2,3,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,3,1610612815,26,26,79,2,2,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,3,4,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,49,26,27,26,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,26,27,26,26,26,27,26,26,26,27,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,26,26,27,28,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,49,50,51,26,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49,50,51,26,26,50,51,26,26,50,51,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49,26,50,51,52,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,49,50,26,50,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,73,74,75,75,3221225551,26,26,27,26,2684354639,75,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,51,26,51,52,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,73,75,75,75,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49,26,26,26,2684354639,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,73,75,74,75,76,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,26,27,2684354639,54,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49,50,51,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,73,74,75,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,6,6,6,6,6,6,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,100,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,100,30,30,30,30,30,30,30,100,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,100,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,2684354660,54,54,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,54,54,54,54,54,54,54,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,5,6,6,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,29,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,6,6,6,6,6,6,6,6,6,6,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,29,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,29,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,29,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,29,30,30,99,6,6,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,29,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,29,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,29,30,30,2684354659,54,54,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,29,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,29,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,29,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,29,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,54,54,54,54,54,54,54,54,54,54,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,53,54,54,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,26,27,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49,50,51,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,73,74,75,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,2,2,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,3,4,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,25,26,26,26,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,0,0,0,5,6,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,26,27,26,52,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,49,26,27,26,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,6,6,7,0,0,0,25,26,27,28,0,0,0,29,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,26,26,27,28,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,49,50,51,26,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,31,0,0,0,49,50,51,52,0,0,0,53,54,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49,26,50,51,52,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,73,75,75,75,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,54,3221225571,31,0,0,0,73,74,75,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,73,74,74,74,76,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,99,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,54,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2443,2444,2545,2545,2545,2545,2545,2545,2443,2444,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2470,2471,2572,2572,2572,2572,2572,2572,2470,2471,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1610615281,1610615308,0,0,0,0,0,0,1610615281,1610615308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1610615281,1610615308,0,0,0,0,0,0,1610615281,1610615308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2684357024,2684356997,2277,2277,2277,2277,2277,2277,2443,2444,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2684357025,2684356998,0,0,0,0,0,0,2470,2471,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1610615281,1610615308,0,0,0,0,0,0,1610615281,1610615308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1610615281,1610615308,0,0,0,0,0,0,1610615281,1610615308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2443,2444,2547,2548,3221228059,3221228058,3221228047,3221228046,2443,2444,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2470,2471,2574,2575,2586,2587,3221228020,3221228019,2470,2471,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2612,2613,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2612,2613,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2612,2613,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3221228081,3221228080,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + diff --git a/data/new_tilesets/Fort Tiles.tsx b/data/new_tilesets/Fort Tiles.tsx new file mode 100644 index 0000000..158eb48 --- /dev/null +++ b/data/new_tilesets/Fort Tiles.tsx @@ -0,0 +1,4 @@ + + + + diff --git a/data/new_tilesets/Ships tiles.tsx b/data/new_tilesets/Ships tiles.tsx new file mode 100644 index 0000000..47517a7 --- /dev/null +++ b/data/new_tilesets/Ships tiles.tsx @@ -0,0 +1,4 @@ + + + + diff --git a/data/new_tilesets/Water and Island tiles.tsx b/data/new_tilesets/Water and Island tiles.tsx new file mode 100644 index 0000000..bba4afb --- /dev/null +++ b/data/new_tilesets/Water and Island tiles.tsx @@ -0,0 +1,4 @@ + + + + diff --git a/data/new_tilesets/Water+.tsx b/data/new_tilesets/Water+.tsx new file mode 100644 index 0000000..1bffb9e --- /dev/null +++ b/data/new_tilesets/Water+.tsx @@ -0,0 +1,4 @@ + + + + diff --git a/images/tilesets/coast.png b/images/tilesets/coast.png new file mode 100644 index 0000000000000000000000000000000000000000..2ec36be9add885274fa24266692c11a83959716f GIT binary patch literal 1132 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U@`V|aSW-L^LCDP(PIOiHbvh% zKX~#k{otBslKD;S=HZl>9ru}2rOhSf9rYdsAL->@_Q8q!;1Zv`JPytIYQo-|G#cy^ zCr#=|+Pa#_AkLh7pEv98!>kPJzCBFmy7l+pr#q|veEsz6e}$jCbI|>Vzh71!H$L#~ zb4dPsesPTehNzddvNNPi?9`6DP7Az!R@-~lXleYUa#u zdMvp>kzt!mFW;Tbo}1swWIYak)nK~jR@}Y+U3y#o?<-H-Yoc}_Mr;1BM6ZTzem8_( z9QIXzVb;~`g^H0^7bh;Q4uD^S6)*?G% zt8~L%?n`y*8{azirR}zSar~^ti6-GY$8H=h3KovXOdyn; zCvqfriv?HKT=ooc$KTp-ELHCFK4sr}G3?~5x6fwO$_Z>f|H#0^Qn*a6-;!~Qd#3oG zy$Y-=zUMA%jc0hfEpwA~`&Xd_cjWap{I$8dm~-EOnU|Nk_5~`I zycMrow)$-Hwrr&^_AC99p0{SK{xRo!e#X)J!p769^PLxPSWf)(Lc`P5z-*BagOqM( z-)d&XZTf6`E%q14@3?4loykdAu_fENGuGbRE9oDP;?z|OBHpfQ@YHWhlb$IxE0blx z%q`3dEtLZ%*nRKLXzE?~;ne@H&m+{OG&6Qd>9v^cTDIEp;4Tx5d2wvtzs@bZ{HgAL z?y^;k4cVLeURj&`Teigi=NFlID;E1Ny-@Tk^!0zEU-RM*8}})EaVn|Sh&}Da*%TS~ z>z08VYhRH5$` z(v36WKIi2XFMFyIuI6>QHyHeLaFYPWKQ=T&C_yf`YBexklE1}Wh*@+^*+F76Q$)`# zi8R(3+22WQ%mvv4FO#qeo0rLO= literal 0 HcmV?d00001 diff --git a/images/tilesets/water/0.png b/images/tilesets/water/0.png new file mode 100644 index 0000000000000000000000000000000000000000..2e567d271b0a68bd4a4d5bbb8f5fcedcf147d7a4 GIT binary patch literal 414 zcmV;P0b%}$P)pcZaj{T~K#V*8Y-K)85JQ*cJk)NIOmE13f7cN`FB`n!3ADRD?+SB_?o+MR#HXn-;)I zmDdM6Gi}=YOMLUDb0j9;4P;})`h9)v zV;M|i&+c$0%VXy!l6TYIU$$?KRrc}ukc*Q2T%$lm+A&Y?1)F}?*JBv#J^%m!07*qo IM6N<$f|s(tUH||9 literal 0 HcmV?d00001 diff --git a/images/tilesets/water/1.png b/images/tilesets/water/1.png new file mode 100644 index 0000000000000000000000000000000000000000..8f6f8ef616fe6802fce30fc1554abad6987e2af0 GIT binary patch literal 400 zcmV;B0dM|^P)(B1KTy+2$67##1T{JE@#e_Ie_X~g0DP!7JfRIjJ+ zg_yv0_R5I}n{pwA0GC^<`qXD2uHwX_$m_|0PPp9Kg}Mmp#Q;TKlcf=XZ%q#LOR*Ry z9+%rZOuZ#(rO0cH>~|btNeYy(z0f2}%npg)EI0QLTrliwOFz!LYACP)d-m`1}IE^850ZON)-|xCVG@ zxR4Le54hZ)Mw{mc41H^+*+hZ+mu}rOJFedh9{Sdp>v-8?5^Z_|oq(2Q`{j7qW76c^ zb_p;uR1ha2z^rbzf#@9ib|ypTZcA~>pJ{@ZyZ_ySB%oyoTzje%iw{Cfi;lV(jf^sn zDD&tQqg+^=geEr8YD1dHg}OuEnnxkj&B%VUnl;j!X*luqd(z!)?b;jdMcs@HeTys8 xbTk5e!s3y>NY4*&b$kLHV_I~^IPppk`vuQJYxP?aqJeh~4vUpekKoG(3f^F-=#zvB4jHUOlFr{Lp$ zCCg)~vef|qSsqUY04xMtua>&$2hn8xs}@-vV~UWE&#$*lGHAV8Vv3M7@f34klzOFZ zH`h%!p>JOza$GS?G>d*|7W2dpsh8v)hwW*Q!&x2!P&ZGdS(WYV3&6{G$2YgZegPZ& z&z@`3`3;JGrCn^aPZ+uYyF-U5LN!xlz!)Uk7m*B%L3&4V4wGc=4&4}}caMbpn9sQ}xx*yo-^K(d4c!(Sk}g3Rlqw3A>S zbLZZfJG0?@f4H8{Yeb=g(i3Cf0^oW+QRq+>HFo|EFi8M$5^y|x0iblZNIo9ED5)9y z*1Yd-*AoEWKflCDfYK96cSeN(t7cfK1lVxCKZIH7X_YYcEpZZ17Bv7iq3ii<-0bfm z{k{W#DlY1_A~Cz{i9(05Z_Q^j+H(?&($hS|su>J}$hD=~?-ErrE7-ltR(c{%0t1BE zLc6F-lqmvZzghtghI2 vyPl|;VReP`!41z_5EhYZ_xkBhqR` None: """main loop of the game""" while self.running: @@ -94,8 +108,9 @@ def handle_events(self) -> None: def render(self) -> None: """draw sprites to the canvas""" + dt = self.clock.tick() / 1000 self.screen.fill("#000000") - self.all_sprites.update() + self.all_sprites.update(dt) self.all_sprites.draw(self.player.rect.center, self.player.player_preview, self.player.player_preview_rect) '''No need to loop through the players because it is now in the sprite group AllSprites''' diff --git a/src/sprites.py b/src/sprites.py index 54827d9..7b67a96 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -124,7 +124,7 @@ def input(self) -> None: return None - def update(self) -> None: + def update(self, dt) -> None: """blit player image and gost preview to a given surface""" self.input() @@ -171,3 +171,23 @@ def draw( """Could be useful for a camera?""" offset_rect = self.rect.move(offset) display_surface.blit(self.image, offset_rect) + + +class Sprite(pygame.sprite.Sprite): + def __init__(self, pos, surf, groups): + super().__init__(groups) + self.image = surf + self.rect = self.image.get_frect(topleft=pos) + + +class AnimatedSprites(Sprite): + def __init__(self, pos, frames, groups): + self.frame_index, self.frames = 0, frames + super().__init__(pos, frames[self.frame_index], groups) + + def animate(self, dt): + self.frame_index += 4 * dt + self.image = self.frames[int(self.frame_index % len(self.frames))] + + def update(self, dt): + self.animate(dt) diff --git a/src/support.py b/src/support.py new file mode 100644 index 0000000..bf6325b --- /dev/null +++ b/src/support.py @@ -0,0 +1,50 @@ +from src.settings import * +from os.path import join +from os import walk +from pytmx.util_pygame import load_pygame + +# imports +def import_image(*path, alpha = True, format = 'png'): + full_path = join(*path) + f'.{format}' + surf = pygame.image.load(full_path).convert_alpha() if alpha else pygame.image.load(full_path).convert() + return surf + +def import_folder(*path): + frames = [] + for folder_path, sub_folders, image_names in walk(join(*path)): + for image_name in sorted(image_names, key = lambda name: int(name.split('.')[0])): + full_path = join(folder_path, image_name) + surf = pygame.image.load(full_path).convert_alpha() + frames.append(surf) + return frames + +def import_folder_dict(*path): + frames = {} + for folder_path, sub_folders, image_names in walk(join(*path)): + for image_name in image_names: + full_path = join(folder_path, image_name) + surf = pygame.image.load(full_path).convert_alpha() + frames[image_name.split('.')[0]] = surf + return frames + +def import_sub_folders(*path): + frames = {} + for _, sub_folders, __ in walk(join(*path)): + if sub_folders: + for sub_folder in sub_folders: + frames[sub_folder] = import_folder(*path, sub_folder) + return frames + +def import_tilemap(cols, rows, *path): + frames = {} + surf = import_image(*path) + cell_width, cell_height = surf.get_width() / cols, surf.get_height() / rows + for col in range(cols): + for row in range(rows): + cutout_rect = pygame.Rect(col * cell_width, row * cell_height,cell_width,cell_height) + cutout_surf = pygame.Surface((cell_width, cell_height)) + cutout_surf.fill('green') + cutout_surf.set_colorkey('green') + cutout_surf.blit(surf, (0,0), cutout_rect) + frames[(col, row)] = cutout_surf + return frames \ No newline at end of file From d13edbc4f14a0344e350192c965260ebd82a74ad Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Thu, 26 Dec 2024 20:23:30 +0100 Subject: [PATCH 02/63] Animation speed Added: - Animation speed to the settings file --- src/settings.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/settings.py b/src/settings.py index e157871..6773bcb 100644 --- a/src/settings.py +++ b/src/settings.py @@ -5,6 +5,7 @@ SCREEN_WIDTH, SCREEN_HEIGHT = 1280, 720 TILE_SIZE = 16 +ANIMATION_SPEED = 6 if not getattr(pygame, "IS_CE", False): From d76400415ec0e352cf55509ba054341a6f9f2d87 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Thu, 26 Dec 2024 20:25:10 +0100 Subject: [PATCH 03/63] Adding to sprites Added: - Animation speed in the sprites file - Replaced the digit with the variabel Animation speed --- src/sprites.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sprites.py b/src/sprites.py index 7b67a96..1c7b265 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -2,7 +2,7 @@ import pygame from pygame import FRect -from src.settings import TILE_SIZE, SCREEN_HEIGHT, SCREEN_WIDTH +from src.settings import TILE_SIZE, SCREEN_HEIGHT, SCREEN_WIDTH, ANIMATION_SPEED from src.GUI.inventory import Inventory @@ -186,7 +186,7 @@ def __init__(self, pos, frames, groups): super().__init__(pos, frames[self.frame_index], groups) def animate(self, dt): - self.frame_index += 4 * dt + self.frame_index += ANIMATION_SPEED * dt self.image = self.frames[int(self.frame_index % len(self.frames))] def update(self, dt): From cee9473358bf4c40ed75e9cfe1be9b1c9e70a511 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Thu, 26 Dec 2024 20:40:38 +0100 Subject: [PATCH 04/63] Adding coast Added: - Coast object layer to the tiled map --- data/new_maps/100x100_map.tmx | 75 ++++++++++++++++++++++++++++++++++- 1 file changed, 74 insertions(+), 1 deletion(-) diff --git a/data/new_maps/100x100_map.tmx b/data/new_maps/100x100_map.tmx index f5b635a..4c6c755 100644 --- a/data/new_maps/100x100_map.tmx +++ b/data/new_maps/100x100_map.tmx @@ -1,5 +1,5 @@ - + @@ -319,6 +319,79 @@ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, From c575674c25e5a161eed0d4807b53c5f6c8cec165 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Thu, 26 Dec 2024 20:42:30 +0100 Subject: [PATCH 05/63] Adding function Added: - new coast_importer method into the support file --- src/support.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/support.py b/src/support.py index bf6325b..75bfa33 100644 --- a/src/support.py +++ b/src/support.py @@ -47,4 +47,7 @@ def import_tilemap(cols, rows, *path): cutout_surf.set_colorkey('green') cutout_surf.blit(surf, (0,0), cutout_rect) frames[(col, row)] = cutout_surf - return frames \ No newline at end of file + return frames + +def coast_importer(cols, rows, *path): + pass \ No newline at end of file From b87c3b376dbf42b611cb0e7924fa9b2987c79a98 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Thu, 26 Dec 2024 20:44:39 +0100 Subject: [PATCH 06/63] Adding logic Added: - logic in the method - print statement to check if everything works correctly --- src/support.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/support.py b/src/support.py index 75bfa33..3b7519f 100644 --- a/src/support.py +++ b/src/support.py @@ -50,4 +50,5 @@ def import_tilemap(cols, rows, *path): return frames def coast_importer(cols, rows, *path): - pass \ No newline at end of file + frame_dict = import_tilemap(cols, rows, path) + print(frame_dict) \ No newline at end of file From cefb8910525aefffeac97e312512d616ecd0c322 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Thu, 26 Dec 2024 20:49:35 +0100 Subject: [PATCH 07/63] Adding coast to world frames Added: - coast variabel into the world_frames - using the new method, reaching the coast image --- src/GUI/gameloop.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/GUI/gameloop.py b/src/GUI/gameloop.py index 4352e3a..968c103 100644 --- a/src/GUI/gameloop.py +++ b/src/GUI/gameloop.py @@ -50,7 +50,8 @@ def import_assets(self): } self.world_frames = { - "water": import_folder(".", "images", "tilesets", "water") + "water": import_folder(".", "images", "tilesets", "water"), + "cost": coast_importer(6, 6, ".", "images", "tilesets", "coast") } # # Define the path to the TMX file From 65c5725b2575e47566575a22a6880af5f091e694 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Thu, 26 Dec 2024 20:57:28 +0100 Subject: [PATCH 08/63] Fixed small bug Fixed: - small bug in coast_importer --- src/support.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/support.py b/src/support.py index 3b7519f..21d6537 100644 --- a/src/support.py +++ b/src/support.py @@ -50,5 +50,5 @@ def import_tilemap(cols, rows, *path): return frames def coast_importer(cols, rows, *path): - frame_dict = import_tilemap(cols, rows, path) + frame_dict = import_tilemap(cols, rows, *path) print(frame_dict) \ No newline at end of file From 8fd4185fd039bf15afbc6d62186dd5b285dfb77b Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Thu, 26 Dec 2024 21:07:07 +0100 Subject: [PATCH 09/63] Expanding logic Finished: - logic for drawing the coast animation onto the islands --- src/support.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/support.py b/src/support.py index 21d6537..358c6b0 100644 --- a/src/support.py +++ b/src/support.py @@ -51,4 +51,14 @@ def import_tilemap(cols, rows, *path): def coast_importer(cols, rows, *path): frame_dict = import_tilemap(cols, rows, *path) - print(frame_dict) \ No newline at end of file + new_dict = {} + terrains = ["sand"] + sides = { + 'topleft': (0,0), 'top': (1,0), 'topright': (2,0), + 'left': (0,1), 'right': (2,1), 'bottomleft': (0,2), + 'bottom': (1,2), 'bottomright': (2,2)} + for index, terrain in enumerate(terrains): + new_dict[terrain] = {} + for key, pos in sides.items(): + new_dict[terrain][key] = [frame_dict[(pos[0] + index * 3, pos[1] + row)] for row in range(0, rows, 3)] + return new_dict \ No newline at end of file From 0a5149993355f66536b5544f72133fb1118917ae Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Thu, 26 Dec 2024 21:27:44 +0100 Subject: [PATCH 10/63] Adding coast Added: - Coast in the setup method - Made coast animated - Fixed bug with the coast in tiled map --- data/new_maps/100x100_map.tmx | 29 ++++++----------------------- src/GUI/gameloop.py | 8 +++++++- 2 files changed, 13 insertions(+), 24 deletions(-) diff --git a/data/new_maps/100x100_map.tmx b/data/new_maps/100x100_map.tmx index 4c6c755..2ec492e 100644 --- a/data/new_maps/100x100_map.tmx +++ b/data/new_maps/100x100_map.tmx @@ -322,18 +322,16 @@ - - + + - - + + - - @@ -346,19 +344,6 @@ - - - - - - - - - - - - - @@ -371,18 +356,16 @@ - - - - + + diff --git a/src/GUI/gameloop.py b/src/GUI/gameloop.py index 968c103..8d369f5 100644 --- a/src/GUI/gameloop.py +++ b/src/GUI/gameloop.py @@ -51,7 +51,7 @@ def import_assets(self): self.world_frames = { "water": import_folder(".", "images", "tilesets", "water"), - "cost": coast_importer(6, 6, ".", "images", "tilesets", "coast") + "coast": coast_importer(6, 6, ".", "images", "tilesets", "coast") } # # Define the path to the TMX file @@ -92,6 +92,12 @@ def setup(self, tmx_maps, player_start_pos): for y in range(int(obj.y), int(obj.y + obj.height), TILE_SIZE): AnimatedSprites((x, y), self.world_frames["water"], self.all_sprites) + # coast + for obj in tmx_maps.get_layer_by_name("Coast"): + terrain = obj.properties["terrain"] + side = obj.properties["side"] + AnimatedSprites((obj.x, obj.y), self.world_frames["coast"][terrain][side], self.all_sprites) + def run(self) -> None: """main loop of the game""" From f6b5a8cae45499f68680a8641ef0322a3db205d4 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Thu, 26 Dec 2024 21:53:06 +0100 Subject: [PATCH 11/63] Small fix Fixed: - the direction of the coast facing the islands --- data/new_maps/100x100_map.tmx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/data/new_maps/100x100_map.tmx b/data/new_maps/100x100_map.tmx index 2ec492e..4968bf0 100644 --- a/data/new_maps/100x100_map.tmx +++ b/data/new_maps/100x100_map.tmx @@ -322,19 +322,19 @@ - + - + - + @@ -352,25 +352,25 @@ - + - + - + - + From 2fe476bec38792e3feb1b94d8f9804cd407c1efd Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Thu, 26 Dec 2024 22:02:10 +0100 Subject: [PATCH 12/63] Changing sea Changed: - sea from the whole see animated to chunks of the sea animated - fixed the coast being drawn outside the island instead of on top of the island - changed the animation speed to 4 --- data/new_maps/100x100_map.tmx | 81 +++++++++++++++++++++++++---------- src/settings.py | 2 +- 2 files changed, 60 insertions(+), 23 deletions(-) diff --git a/data/new_maps/100x100_map.tmx b/data/new_maps/100x100_map.tmx index 4968bf0..efd3cc8 100644 --- a/data/new_maps/100x100_map.tmx +++ b/data/new_maps/100x100_map.tmx @@ -1,10 +1,10 @@ - + - + 2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, 2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, @@ -109,7 +109,56 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -320,55 +369,43 @@ - + - - - - - - - - - - - - - + - + - + - + - + - + diff --git a/src/settings.py b/src/settings.py index 6773bcb..e56d52e 100644 --- a/src/settings.py +++ b/src/settings.py @@ -5,7 +5,7 @@ SCREEN_WIDTH, SCREEN_HEIGHT = 1280, 720 TILE_SIZE = 16 -ANIMATION_SPEED = 6 +ANIMATION_SPEED = 4 if not getattr(pygame, "IS_CE", False): From a9e941a21632e84be0ac180617886f04f7540a54 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Thu, 26 Dec 2024 22:12:06 +0100 Subject: [PATCH 13/63] Adding sea Added: - the sea into the setup/drawing the sea --- src/GUI/gameloop.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/GUI/gameloop.py b/src/GUI/gameloop.py index 8d369f5..5c78903 100644 --- a/src/GUI/gameloop.py +++ b/src/GUI/gameloop.py @@ -70,6 +70,10 @@ def import_assets(self): def setup(self, tmx_maps, player_start_pos): """create tiles""" + # # sea + for x, y, surface in tmx_maps.get_layer_by_name("Sea").tiles(): + src.sprites.Sprite((x * TILE_SIZE, y * TILE_SIZE), surface, self.all_sprites) + # Islands islands = tmx_maps.get_layer_by_name("Islands") for x, y, surface in islands.tiles(): @@ -81,12 +85,13 @@ def setup(self, tmx_maps, player_start_pos): # ) src.sprites.Sprite((x * TILE_SIZE, y * TILE_SIZE), surface, self.all_sprites) + # Objects for obj in tmx_maps.get_layer_by_name("Ships"): if obj.name == "Player" and obj.properties["pos"] == player_start_pos: self.player = src.sprites.Player((obj.x, obj.y), self.all_sprites) - # Water + # water_animated for obj in tmx_maps.get_layer_by_name("Water"): for x in range(int(obj.x), int(obj.x + obj.width), TILE_SIZE): for y in range(int(obj.y), int(obj.y + obj.height), TILE_SIZE): From 9ba4044af16902788cfe5c1de26f18ca4b7959f0 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Fri, 27 Dec 2024 13:41:01 +0100 Subject: [PATCH 14/63] Changes in map Changed: - the color of the sea - the tiles that are used for animation --- data/new_maps/100x100_map.tmx | 200 +++++++++++++++++----------------- images/tilesets/water/0.png | Bin 414 -> 232 bytes images/tilesets/water/1.png | Bin 400 -> 220 bytes images/tilesets/water/2.png | Bin 403 -> 221 bytes images/tilesets/water/3.png | Bin 390 -> 0 bytes images/tilesets/water/4.png | Bin 401 -> 0 bytes 6 files changed, 100 insertions(+), 100 deletions(-) delete mode 100644 images/tilesets/water/3.png delete mode 100644 images/tilesets/water/4.png diff --git a/data/new_maps/100x100_map.tmx b/data/new_maps/100x100_map.tmx index efd3cc8..2278232 100644 --- a/data/new_maps/100x100_map.tmx +++ b/data/new_maps/100x100_map.tmx @@ -6,106 +6,106 @@ -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120, -2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120,2120 +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131 diff --git a/images/tilesets/water/0.png b/images/tilesets/water/0.png index 2e567d271b0a68bd4a4d5bbb8f5fcedcf147d7a4..7e597c63a26b74b737231336b013be3c033ec592 100644 GIT binary patch delta 205 zcmV;;05boc1Ly&eBYyy|Nkl_b+q;AYtuI3n#LC8r96Py$O6u zM8v6H%K<(bT`sNAj-<~FoXkD@cPhCMOurG>Z7pnK7TM%514d`3*C>P9+kbnIDLJn( zl14S`2{Xv{fIVI%`WJYGwBTgv9z^dyGoZu_oMu4TS^4=348Ep|Gp80300000NkvXX Hu0mjf%Me=f delta 388 zcmV-~0ek-F0iFYpBYy#9NklpcYlYo^IcGPPuBjDR@2_e z^4Jyvs7O0a=L0<{5=wtTMVh+1QB;HDhcEhy>PJ`I-B6Kc8hccv|849^k(g9egELj| z8^dYr@rr67%VRrPBqb(ribZ!~0-F}VN|o0KJTqsWDI_KU6O(R2 zn}W!gFWWTsq<#A>7su6z8j*ZbItr=6GWnOk>aPa3;%R=O>bP)81dUZ;n;=@%fO8 ilKotxKtcs#>UX!H}fp1L?^h>cACmxsEJWRbMX{E?(jO=$DVM;+RbwP3Re7z~F zK?zC=DupbK7H?6lhp3AP`mVvSuRr6ODAv~^TW6+BTTeiT{_3`1#)+p2rN1roT|;<^ z2wfJfnDU|96LMM2vBrs~1`YGeotMe?RQ@_yhP&RvY2n^;3Q`Ds#I@cNLEu~b0V diff --git a/images/tilesets/water/2.png b/images/tilesets/water/2.png index 790bb472b49fc7dbd9439fa47146a57ef59fe0bf..07c4660bc7913d5505fca6ed4788f99aec49f983 100644 GIT binary patch delta 194 zcmV;z06qVc1Kk0TBYyy-Nkl*jU4<0lfUf;gK3oT!2^kDU>!bB1}O z!-bf3#BqN~_{WEcOAnOREL`bC2i2M14sCJX85`iAV`PoYhC8JV+znvn!E204pGwT+ wd8I$HQAU35f?~t_(0EYkkHvwPyHNS_0KhSmaNOTz6aWAK07*qoM6N<$f+H|rzW@LL delta 377 zcmV-<0fzqF0h0reBYy!}Nkld-m`1}IE z^8YxP?aqJeh~4vUpekKoG(3f^F-=#zvB4jHUOlFr{Lp$ zCCg)~vef|qSsqUY04xMtua>&$2hn8xs}@-vV~UWE&#$*lGHAV8Vv3M7@f34klzOFZ zH`h%!p>JOza$GS?G>d*|7W2dpsh8v)hwW*Q!&x2!P&ZGdS(WYV3&6{G$2YgZegPZ& z&z@`3`3;JGrCn^aPZ+uYyF-U5LN!xlz!)Uk7m*B%L3&4V4wGc=4&4}}caMbpn9sQ}xx*yo-^K(d4c!(Sk}g3Rlqw3A>S zbLZZfJG0?@f4H8{Yeb=g(i3Cf0^oW+QRq+>HFo|EFi8M$5^y|x0iblZNIo9ED5)9y z*1Yd-*AoEWKflCDfYK96cSeN(t7cfK1lVxCKZIH7X_YYcEpZZ17Bv7iq3ii<-0bfm z{k{W#DlY1_A~Cz{i9(05Z_Q^j+H(?&($hS|su>J}$hD=~?-ErrE7-ltR(c{%0t1BE zLc6F-lqmvZzghtghI2 vyPl|;VReP`!41z_5EhYZ_xkBhqR` Date: Fri, 27 Dec 2024 13:48:00 +0100 Subject: [PATCH 15/63] Scaling of map - experimenting with scaling of the map --- src/sprites.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/sprites.py b/src/sprites.py index 1c7b265..ae042f0 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -24,15 +24,29 @@ def __init__(self): if not self.display_surface: raise ValueError("Display surface is not initialized") self.offset = pygame.math.Vector2() + self.scale = 1.0 def draw(self, player_center, player_preview, player_preview_rect): - self.offset.x = -(player_center[0] - SCREEN_WIDTH / 2) - self.offset.y = -(player_center[1] - SCREEN_HEIGHT / 2) + self.offset.x = -(player_center[0] - SCREEN_WIDTH / 2) * self.scale + self.offset.y = -(player_center[1] - SCREEN_HEIGHT / 2) * self.scale for sprite in self: - self.display_surface.blit(sprite.image, sprite.rect.topleft + self.offset) + scaled_image = pygame.transform.scale(sprite.image, + (int(sprite.rect.width * self.scale), int(sprite.rect.height * self.scale))) + scaled_rect = scaled_image.get_rect(center=(sprite.rect.center[0] * self.scale, sprite.rect.center[1] * self.scale)) + scaled_rect.topleft += self.offset - self.display_surface.blit(player_preview, player_preview_rect.topleft + self.offset) + self.display_surface.blit(scaled_image, scaled_rect.topleft) + + scaled_preview = pygame.transform.scale(player_preview, + (int(player_preview_rect.width * self.scale), int(player_preview_rect.height * self.scale))) + scaled_preview_rect = scaled_preview.get_rect(center=(player_preview_rect.center[0] * self.scale, player_preview_rect.center[1] * self.scale)) + scaled_preview_rect.topleft += self.offset + + self.display_surface.blit(scaled_preview, scaled_preview_rect.topleft) + + def set_scale(self, scale): + self.scale = max(scale, 0.1) class Player(pygame.sprite.Sprite): From f2cb5f3f741ce0522f897a612b47a6805f087869 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Fri, 27 Dec 2024 13:56:47 +0100 Subject: [PATCH 16/63] Fixed scale bug Fixed: - offest not scaling correctly - camera not centering on the player --- src/sprites.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/sprites.py b/src/sprites.py index ae042f0..4c5c3ec 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -24,11 +24,11 @@ def __init__(self): if not self.display_surface: raise ValueError("Display surface is not initialized") self.offset = pygame.math.Vector2() - self.scale = 1.0 + self.scale = 2.0 def draw(self, player_center, player_preview, player_preview_rect): - self.offset.x = -(player_center[0] - SCREEN_WIDTH / 2) * self.scale - self.offset.y = -(player_center[1] - SCREEN_HEIGHT / 2) * self.scale + self.offset.x = -(player_center[0] * self.scale - SCREEN_WIDTH / 2) + self.offset.y = -(player_center[1] * self.scale - SCREEN_HEIGHT / 2) for sprite in self: scaled_image = pygame.transform.scale(sprite.image, @@ -45,8 +45,9 @@ def draw(self, player_center, player_preview, player_preview_rect): self.display_surface.blit(scaled_preview, scaled_preview_rect.topleft) - def set_scale(self, scale): - self.scale = max(scale, 0.1) + # method for zooming (might be usefull later?) + # def set_scale(self, scale): + # self.scale = max(scale, 0.1) class Player(pygame.sprite.Sprite): From 0a69b02b4c8ebad489396044c58087748bf61689 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Fri, 27 Dec 2024 14:22:58 +0100 Subject: [PATCH 17/63] Adding coasts Added: - coasts to two more islands --- data/new_maps/100x100_map.tmx | 437 ++++++++++++++++++++++++++++++---- 1 file changed, 386 insertions(+), 51 deletions(-) diff --git a/data/new_maps/100x100_map.tmx b/data/new_maps/100x100_map.tmx index 2278232..15c8858 100644 --- a/data/new_maps/100x100_map.tmx +++ b/data/new_maps/100x100_map.tmx @@ -1,5 +1,5 @@ - + @@ -109,56 +109,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -381,18 +332,402 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 3dc47f8eada566c4b2ce3531265e910faa01211b Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Fri, 27 Dec 2024 14:35:10 +0100 Subject: [PATCH 18/63] World layers Added: - dictionary named world layers in settings.py --- src/settings.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/settings.py b/src/settings.py index e56d52e..abea47b 100644 --- a/src/settings.py +++ b/src/settings.py @@ -7,6 +7,13 @@ TILE_SIZE = 16 ANIMATION_SPEED = 4 +WORLD_LAYERS = { + "water": 0, + "bg": 1, + "main": 2, + "top": 3 +} + if not getattr(pygame, "IS_CE", False): raise ImportError( From bd0a7eb4a99bd25164ec12a366123952793bd56f Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Fri, 27 Dec 2024 16:14:57 +0100 Subject: [PATCH 19/63] Adding new things Added: - player ship sprite with animation for the water - new method in support - new dict in world frames --- images/tilesets/ships/player_ship.png | Bin 0 -> 10949 bytes src/GUI/gameloop.py | 3 ++- src/support.py | 5 ++++- 3 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 images/tilesets/ships/player_ship.png diff --git a/images/tilesets/ships/player_ship.png b/images/tilesets/ships/player_ship.png new file mode 100644 index 0000000000000000000000000000000000000000..a724970b8cadd7d7f00c7e98d74f305e05e9f79f GIT binary patch literal 10949 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 literal 0 HcmV?d00001 diff --git a/src/GUI/gameloop.py b/src/GUI/gameloop.py index 5c78903..3a172fb 100644 --- a/src/GUI/gameloop.py +++ b/src/GUI/gameloop.py @@ -51,7 +51,8 @@ def import_assets(self): self.world_frames = { "water": import_folder(".", "images", "tilesets", "water"), - "coast": coast_importer(6, 6, ".", "images", "tilesets", "coast") + "coast": coast_importer(6, 6, ".", "images", "tilesets", "coast"), + "ships": all_character_import(".", "images", "ships") } # # Define the path to the TMX file diff --git a/src/support.py b/src/support.py index 358c6b0..1384b34 100644 --- a/src/support.py +++ b/src/support.py @@ -61,4 +61,7 @@ def coast_importer(cols, rows, *path): new_dict[terrain] = {} for key, pos in sides.items(): new_dict[terrain][key] = [frame_dict[(pos[0] + index * 3, pos[1] + row)] for row in range(0, rows, 3)] - return new_dict \ No newline at end of file + return new_dict + +def all_character_import(*path): + new_dict = {} \ No newline at end of file From 02566d027d158516a5e85ac36a038ea4f45d14d4 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Fri, 27 Dec 2024 16:32:13 +0100 Subject: [PATCH 20/63] New method logic Adding: - more logic into the new method for extracting the images for the characters - temporary print statement to check if everything works --- src/GUI/gameloop.py | 3 ++- src/support.py | 7 ++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/GUI/gameloop.py b/src/GUI/gameloop.py index 3a172fb..4877036 100644 --- a/src/GUI/gameloop.py +++ b/src/GUI/gameloop.py @@ -52,8 +52,9 @@ def import_assets(self): self.world_frames = { "water": import_folder(".", "images", "tilesets", "water"), "coast": coast_importer(6, 6, ".", "images", "tilesets", "coast"), - "ships": all_character_import(".", "images", "ships") + "ships": all_character_import(".", "images", "tilesets", "ships") } + print(self.world_frames["ships"]) # # Define the path to the TMX file # tmx_path = os.path.join('data', 'maps', '100x100_map.tmx') diff --git a/src/support.py b/src/support.py index 1384b34..6e80506 100644 --- a/src/support.py +++ b/src/support.py @@ -64,4 +64,9 @@ def coast_importer(cols, rows, *path): return new_dict def all_character_import(*path): - new_dict = {} \ No newline at end of file + new_dict = {} + for _, _, image_names in walk(join(*path)): + for image in image_names: + image_name = image.split(".")[0] + new_dict[image_name] = import_tilemap(7, 4, *path, image_name) + return new_dict \ No newline at end of file From ee33577ebb1b62b7d98ac26698fd9f564ea58ffb Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Fri, 27 Dec 2024 16:35:17 +0100 Subject: [PATCH 21/63] New method in support Added: - new method in support for importing the single ship image --- src/support.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/support.py b/src/support.py index 6e80506..e736d89 100644 --- a/src/support.py +++ b/src/support.py @@ -63,10 +63,14 @@ def coast_importer(cols, rows, *path): new_dict[terrain][key] = [frame_dict[(pos[0] + index * 3, pos[1] + row)] for row in range(0, rows, 3)] return new_dict +def character_importer(cols, rows, *path): + frame_dict = import_tilemap(cols, rows, *path) + new_dict = {} + def all_character_import(*path): new_dict = {} for _, _, image_names in walk(join(*path)): for image in image_names: image_name = image.split(".")[0] - new_dict[image_name] = import_tilemap(7, 4, *path, image_name) + new_dict[image_name] = character_importer(7, 4, *path) return new_dict \ No newline at end of file From 7d3e56bff85f6580ac77614d43c98f856f8fdaa4 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Fri, 27 Dec 2024 16:42:18 +0100 Subject: [PATCH 22/63] Finishing method Finished: - the method for extracting information on each individual image in the sprite sheet --- src/support.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/support.py b/src/support.py index e736d89..f355190 100644 --- a/src/support.py +++ b/src/support.py @@ -66,11 +66,15 @@ def coast_importer(cols, rows, *path): def character_importer(cols, rows, *path): frame_dict = import_tilemap(cols, rows, *path) new_dict = {} + for row, direction in enumerate(("down", "left", "right", "up")): + new_dict[direction] = [frame_dict[(col, row)] for col in range(cols)] + new_dict[f"{direction}_idle"] = [frame_dict[(0, row)]] + return new_dict def all_character_import(*path): new_dict = {} for _, _, image_names in walk(join(*path)): for image in image_names: image_name = image.split(".")[0] - new_dict[image_name] = character_importer(7, 4, *path) + new_dict[image_name] = character_importer(7, 4, *path, image_name) return new_dict \ No newline at end of file From 30655c87e0b030545cc358f58df058012bd8fa81 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Fri, 27 Dec 2024 17:03:35 +0100 Subject: [PATCH 23/63] Added simple image Added: - simple image of the ship into the game - this image has no animations yet - the image has no sense of direction yet --- data/new_maps/100x100_map.tmx | 4 ++-- src/GUI/gameloop.py | 7 +++++-- src/sprites.py | 27 +++++++++++++++------------ 3 files changed, 22 insertions(+), 16 deletions(-) diff --git a/data/new_maps/100x100_map.tmx b/data/new_maps/100x100_map.tmx index 15c8858..65c8d0c 100644 --- a/data/new_maps/100x100_map.tmx +++ b/data/new_maps/100x100_map.tmx @@ -1,5 +1,5 @@ - + @@ -109,7 +109,7 @@ - + diff --git a/src/GUI/gameloop.py b/src/GUI/gameloop.py index 4877036..67f9b27 100644 --- a/src/GUI/gameloop.py +++ b/src/GUI/gameloop.py @@ -54,7 +54,7 @@ def import_assets(self): "coast": coast_importer(6, 6, ".", "images", "tilesets", "coast"), "ships": all_character_import(".", "images", "tilesets", "ships") } - print(self.world_frames["ships"]) + # print(self.world_frames["ships"]) # # Define the path to the TMX file # tmx_path = os.path.join('data', 'maps', '100x100_map.tmx') @@ -91,7 +91,10 @@ def setup(self, tmx_maps, player_start_pos): # Objects for obj in tmx_maps.get_layer_by_name("Ships"): if obj.name == "Player" and obj.properties["pos"] == player_start_pos: - self.player = src.sprites.Player((obj.x, obj.y), self.all_sprites) + self.player = src.sprites.Player( + pos = (obj.x, obj.y), + frames = self.world_frames["ships"]["player_ship"], + groups = self.all_sprites) # water_animated for obj in tmx_maps.get_layer_by_name("Water"): diff --git a/src/sprites.py b/src/sprites.py index 4c5c3ec..0cc11d1 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -6,13 +6,16 @@ from src.GUI.inventory import Inventory -# class Entity(pygame.sprite.Sprite): -'''Will be later used on all entities, classes as Player will inherit from this class''' -# def __init__(self, pos, surf, groups): -# super().__init__(groups) +class Entity(pygame.sprite.Sprite): + def __init__(self, pos, frames, groups): + super().__init__(groups) + + # graphics + self.frame_index, self.frames = 0, frames -# self.image = surf -# self.rect = self.image.get_frect(center=pos) + # sprite setup + self.image = self.frames["down"][self.frame_index] + self.rect = self.image.get_frect(center = pos) class AllSprites(pygame.sprite.Group): @@ -50,18 +53,18 @@ def draw(self, player_center, player_preview, player_preview_rect): # self.scale = max(scale, 0.1) -class Player(pygame.sprite.Sprite): +class Player(Entity): """move tile by tile""" rect: FRect - def __init__(self, pos, groups): - super().__init__(groups) + def __init__(self, pos, frames, groups): + super().__init__(pos, frames, groups) # TODO: replace with actual images - self.image = pygame.Surface((TILE_SIZE, TILE_SIZE)) - self.image.fill("red") - self.rect = self.image.get_frect(center=pos) + # self.image = pygame.Surface((TILE_SIZE, TILE_SIZE)) + # self.image.fill("red") + # self.rect = self.image.get_frect(center=pos) # ghost preview self.player_preview = self.image.copy() From f93cd8ebaefc0885a481ff99bd93dfc7ef2003f1 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Fri, 27 Dec 2024 17:05:27 +0100 Subject: [PATCH 24/63] Adding animation method Added: - method for animating the player --- src/sprites.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/sprites.py b/src/sprites.py index 0cc11d1..393ea01 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -17,6 +17,9 @@ def __init__(self, pos, frames, groups): self.image = self.frames["down"][self.frame_index] self.rect = self.image.get_frect(center = pos) + def animate(self, dt): + pass + class AllSprites(pygame.sprite.Group): '''A sprite group that handles every sprite and handles the camera logic''' From 91a49d092edaec76571d0e226de0b79bd19f852c Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Fri, 27 Dec 2024 17:07:23 +0100 Subject: [PATCH 25/63] Logic and update Added: - logic to the method - update method --- src/sprites.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/sprites.py b/src/sprites.py index 393ea01..ea4f01c 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -18,7 +18,11 @@ def __init__(self, pos, frames, groups): self.rect = self.image.get_frect(center = pos) def animate(self, dt): - pass + self.frame_index += ANIMATION_SPEED * dt + self.image = self.frames["down"][int(self.frame_index % len(self.frames["down"]))] + + def update(self, dt): + self.animate(dt) class AllSprites(pygame.sprite.Group): From 57b34ca04d50915a736edfd15c7409131d6440ed Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Fri, 27 Dec 2024 17:14:12 +0100 Subject: [PATCH 26/63] Updating animation Added: - calling the animation method in the update method for the player --- src/sprites.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/sprites.py b/src/sprites.py index ea4f01c..fa32968 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -21,9 +21,6 @@ def animate(self, dt): self.frame_index += ANIMATION_SPEED * dt self.image = self.frames["down"][int(self.frame_index % len(self.frames["down"]))] - def update(self, dt): - self.animate(dt) - class AllSprites(pygame.sprite.Group): '''A sprite group that handles every sprite and handles the camera logic''' @@ -152,6 +149,7 @@ def input(self) -> None: def update(self, dt) -> None: """blit player image and gost preview to a given surface""" self.input() + self.animate(dt) class Tile(pygame.sprite.Sprite): From cae070345a6ec9ae64fce6d35e875c14ec9a82ea Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Fri, 27 Dec 2024 17:18:52 +0100 Subject: [PATCH 27/63] Adding new method Added: - adding a new method in Entity class for getting the state of the player. For example right or left --- src/sprites.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/sprites.py b/src/sprites.py index fa32968..a56857b 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -14,12 +14,15 @@ def __init__(self, pos, frames, groups): self.frame_index, self.frames = 0, frames # sprite setup - self.image = self.frames["down"][self.frame_index] + self.image = self.frames[self.get_state()][self.frame_index] self.rect = self.image.get_frect(center = pos) def animate(self, dt): self.frame_index += ANIMATION_SPEED * dt - self.image = self.frames["down"][int(self.frame_index % len(self.frames["down"]))] + self.image = self.frames[self.get_state()][int(self.frame_index % len(self.frames[self.get_state()]))] + + def get_state(self): + return "left_idle" class AllSprites(pygame.sprite.Group): From 56cbd4c6a425ef92d4970e74146dfb97f9bcd5a2 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Fri, 27 Dec 2024 23:58:02 +0100 Subject: [PATCH 28/63] Replacing old images Replaced: - player ship.png because it had not all the rows it needed - added player_sloop.png --- images/tilesets/ships/player_sloop.png | Bin 0 -> 12211 bytes src/GUI/gameloop.py | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 images/tilesets/ships/player_sloop.png diff --git a/images/tilesets/ships/player_sloop.png b/images/tilesets/ships/player_sloop.png new file mode 100644 index 0000000000000000000000000000000000000000..29131f71f68eaca9ad98dbc8cce77121ce3756b4 GIT binary patch literal 12211 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 Mnz|b0YR^Oe4;svnVE_OC literal 0 HcmV?d00001 diff --git a/src/GUI/gameloop.py b/src/GUI/gameloop.py index 67f9b27..0479a39 100644 --- a/src/GUI/gameloop.py +++ b/src/GUI/gameloop.py @@ -93,7 +93,7 @@ def setup(self, tmx_maps, player_start_pos): if obj.name == "Player" and obj.properties["pos"] == player_start_pos: self.player = src.sprites.Player( pos = (obj.x, obj.y), - frames = self.world_frames["ships"]["player_ship"], + frames = self.world_frames["ships"]["player_sloop"], groups = self.all_sprites) # water_animated From bf914f52c164b740749d99fac6997776c7931357 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Sat, 28 Dec 2024 00:03:49 +0100 Subject: [PATCH 29/63] Logic for movement Added: - when going a direction the animation will be applied for that direction --- src/sprites.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/sprites.py b/src/sprites.py index a56857b..ce89194 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -12,6 +12,11 @@ def __init__(self, pos, frames, groups): # graphics self.frame_index, self.frames = 0, frames + self.facing_direction = "down" + + # movement + self.direction = pygame.math.Vector2() + # self.speed = 250 # sprite setup self.image = self.frames[self.get_state()][self.frame_index] @@ -22,7 +27,8 @@ def animate(self, dt): self.image = self.frames[self.get_state()][int(self.frame_index % len(self.frames[self.get_state()]))] def get_state(self): - return "left_idle" + moving = bool(self.direction) + return f"{self.facing_direction}{"" if moving else "_idle"}" class AllSprites(pygame.sprite.Group): From ee62280e0147e3d436a4433c2d39b2adbf972dd4 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Sat, 28 Dec 2024 00:07:18 +0100 Subject: [PATCH 30/63] Finishing logic Finished: - the logic for getting the state of the player --- src/sprites.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/sprites.py b/src/sprites.py index ce89194..4a62cf5 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -28,6 +28,11 @@ def animate(self, dt): def get_state(self): moving = bool(self.direction) + if moving: + if self.direction.x != 0: + self.facing_direction = "right" if self.direction.x > 0 else "left" + if self.direction.y != 0: + self.facing_direction = "down" if self.direction.x > 0 else "up" return f"{self.facing_direction}{"" if moving else "_idle"}" From 9a5520b0622552a56fcbfb6b02b2a06356fd9583 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Sat, 28 Dec 2024 13:45:46 +0100 Subject: [PATCH 31/63] Old code Removed: - old commented out code from gameloop that didn't serve much purpose --- src/GUI/gameloop.py | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/src/GUI/gameloop.py b/src/GUI/gameloop.py index 0479a39..0f477e1 100644 --- a/src/GUI/gameloop.py +++ b/src/GUI/gameloop.py @@ -56,19 +56,6 @@ def import_assets(self): } # print(self.world_frames["ships"]) - # # Define the path to the TMX file - # tmx_path = os.path.join('data', 'maps', '100x100_map.tmx') - # sprite_group = pygame.sprite.Group() - - # # Check if the file exists - # if not os.path.exists(self.tmx_maps): - # print(f"Error: The file at {self.tmx_maps} does not exist.") - # return None - - # # Load the TMX file using load_pygame - # tmx_data = load_pygame(tmx_path) - # print(tmx_data.layers) - def setup(self, tmx_maps, player_start_pos): """create tiles""" @@ -79,12 +66,6 @@ def setup(self, tmx_maps, player_start_pos): # Islands islands = tmx_maps.get_layer_by_name("Islands") for x, y, surface in islands.tiles(): - # print(x * TILE_SIZE, y * TILE_SIZE, surface) - # src.sprites.Sprite( - # self.all_sprites, - # pos=(x * TILE_SIZE, y * TILE_SIZE), - # surf=surface, - # ) src.sprites.Sprite((x * TILE_SIZE, y * TILE_SIZE), surface, self.all_sprites) From 95dfbc5260ee2cadc5abb18dd07fa4956fe3fdb0 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Sat, 28 Dec 2024 13:54:41 +0100 Subject: [PATCH 32/63] Adding layers Added: - world layers variabel into sprite and animated sprite clases --- src/sprites.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/sprites.py b/src/sprites.py index 4a62cf5..8056c06 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -2,7 +2,7 @@ import pygame from pygame import FRect -from src.settings import TILE_SIZE, SCREEN_HEIGHT, SCREEN_WIDTH, ANIMATION_SPEED +from src.settings import TILE_SIZE, SCREEN_HEIGHT, SCREEN_WIDTH, ANIMATION_SPEED, WORLD_LAYERS from src.GUI.inventory import Inventory @@ -211,16 +211,17 @@ def draw( class Sprite(pygame.sprite.Sprite): - def __init__(self, pos, surf, groups): + def __init__(self, pos, surf, groups, z = WORLD_LAYERS["main"]): super().__init__(groups) self.image = surf self.rect = self.image.get_frect(topleft=pos) + self.z = z class AnimatedSprites(Sprite): - def __init__(self, pos, frames, groups): + def __init__(self, pos, frames, groups, z = WORLD_LAYERS["main"]): self.frame_index, self.frames = 0, frames - super().__init__(pos, frames[self.frame_index], groups) + super().__init__(pos, frames[self.frame_index], groups, z) def animate(self, dt): self.frame_index += ANIMATION_SPEED * dt From 6fa995950c3568cbe6a0fde99ba539a27ef8aee9 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Sat, 28 Dec 2024 14:02:02 +0100 Subject: [PATCH 33/63] Layers in gameloop Added: - world layers as a parameter in setup method --- src/GUI/gameloop.py | 16 ++++++++-------- src/sprites.py | 1 + 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/GUI/gameloop.py b/src/GUI/gameloop.py index 0f477e1..11101bb 100644 --- a/src/GUI/gameloop.py +++ b/src/GUI/gameloop.py @@ -59,17 +59,17 @@ def import_assets(self): def setup(self, tmx_maps, player_start_pos): """create tiles""" - # # sea + # Sea for x, y, surface in tmx_maps.get_layer_by_name("Sea").tiles(): - src.sprites.Sprite((x * TILE_SIZE, y * TILE_SIZE), surface, self.all_sprites) + src.sprites.Sprite((x * TILE_SIZE, y * TILE_SIZE), surface, self.all_sprites, WORLD_LAYERS["bg"]) # Islands islands = tmx_maps.get_layer_by_name("Islands") for x, y, surface in islands.tiles(): - src.sprites.Sprite((x * TILE_SIZE, y * TILE_SIZE), surface, self.all_sprites) + src.sprites.Sprite((x * TILE_SIZE, y * TILE_SIZE), surface, self.all_sprites, WORLD_LAYERS["bg"]) - # Objects + # Enitites for obj in tmx_maps.get_layer_by_name("Ships"): if obj.name == "Player" and obj.properties["pos"] == player_start_pos: self.player = src.sprites.Player( @@ -77,17 +77,17 @@ def setup(self, tmx_maps, player_start_pos): frames = self.world_frames["ships"]["player_sloop"], groups = self.all_sprites) - # water_animated + # Water animated for obj in tmx_maps.get_layer_by_name("Water"): for x in range(int(obj.x), int(obj.x + obj.width), TILE_SIZE): for y in range(int(obj.y), int(obj.y + obj.height), TILE_SIZE): - AnimatedSprites((x, y), self.world_frames["water"], self.all_sprites) + AnimatedSprites((x, y), self.world_frames["water"], self.all_sprites, WORLD_LAYERS["water"]) - # coast + # Coast for obj in tmx_maps.get_layer_by_name("Coast"): terrain = obj.properties["terrain"] side = obj.properties["side"] - AnimatedSprites((obj.x, obj.y), self.world_frames["coast"][terrain][side], self.all_sprites) + AnimatedSprites((obj.x, obj.y), self.world_frames["coast"][terrain][side], self.all_sprites, WORLD_LAYERS["bg"]) def run(self) -> None: diff --git a/src/sprites.py b/src/sprites.py index 8056c06..513bded 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -9,6 +9,7 @@ class Entity(pygame.sprite.Sprite): def __init__(self, pos, frames, groups): super().__init__(groups) + self.z = WORLD_LAYERS["main"] # graphics self.frame_index, self.frames = 0, frames From 619a6bf5efbaf30e2dc902a651be3fcb9889417e Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Sat, 28 Dec 2024 14:14:37 +0100 Subject: [PATCH 34/63] Water fix Fixed: - animated water doesnt spawn on top of the player anymore --- data/new_maps/100x100_map.tmx | 2 +- src/sprites.py | 27 ++++++++++++++++----------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/data/new_maps/100x100_map.tmx b/data/new_maps/100x100_map.tmx index 65c8d0c..589ae88 100644 --- a/data/new_maps/100x100_map.tmx +++ b/data/new_maps/100x100_map.tmx @@ -1,5 +1,5 @@ - + diff --git a/src/sprites.py b/src/sprites.py index 513bded..8319760 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -52,20 +52,25 @@ def draw(self, player_center, player_preview, player_preview_rect): self.offset.x = -(player_center[0] * self.scale - SCREEN_WIDTH / 2) self.offset.y = -(player_center[1] * self.scale - SCREEN_HEIGHT / 2) - for sprite in self: - scaled_image = pygame.transform.scale(sprite.image, - (int(sprite.rect.width * self.scale), int(sprite.rect.height * self.scale))) - scaled_rect = scaled_image.get_rect(center=(sprite.rect.center[0] * self.scale, sprite.rect.center[1] * self.scale)) - scaled_rect.topleft += self.offset + background_sprites = [sprite for sprite in self if sprite.z < WORLD_LAYERS["main"]] + main_sprites = [sprite for sprite in self if sprite.z == WORLD_LAYERS["main"]] + foreground_sprites = [sprite for sprite in self if sprite.z > WORLD_LAYERS["main"]] - self.display_surface.blit(scaled_image, scaled_rect.topleft) + for layer in (background_sprites, main_sprites, foreground_sprites): + for sprite in layer: + scaled_image = pygame.transform.scale(sprite.image, + (int(sprite.rect.width * self.scale), int(sprite.rect.height * self.scale))) + scaled_rect = scaled_image.get_rect(center=(sprite.rect.center[0] * self.scale, sprite.rect.center[1] * self.scale)) + scaled_rect.topleft += self.offset - scaled_preview = pygame.transform.scale(player_preview, - (int(player_preview_rect.width * self.scale), int(player_preview_rect.height * self.scale))) - scaled_preview_rect = scaled_preview.get_rect(center=(player_preview_rect.center[0] * self.scale, player_preview_rect.center[1] * self.scale)) - scaled_preview_rect.topleft += self.offset + self.display_surface.blit(scaled_image, scaled_rect.topleft) - self.display_surface.blit(scaled_preview, scaled_preview_rect.topleft) + scaled_preview = pygame.transform.scale(player_preview, + (int(player_preview_rect.width * self.scale), int(player_preview_rect.height * self.scale))) + scaled_preview_rect = scaled_preview.get_rect(center=(player_preview_rect.center[0] * self.scale, player_preview_rect.center[1] * self.scale)) + scaled_preview_rect.topleft += self.offset + + self.display_surface.blit(scaled_preview, scaled_preview_rect.topleft) # method for zooming (might be usefull later?) # def set_scale(self, scale): From 9bea1c6831907c1a0c7e1214f2952e58bf65c235 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Sat, 28 Dec 2024 14:27:52 +0100 Subject: [PATCH 35/63] Adding shallow water Added: - shallow water into the game - refurbishing the position where the animated water will spawn --- data/new_maps/100x100_map.tmx | 70 ++++++++++++++++++++++++++++++++++- src/GUI/gameloop.py | 5 ++- 2 files changed, 72 insertions(+), 3 deletions(-) diff --git a/data/new_maps/100x100_map.tmx b/data/new_maps/100x100_map.tmx index 589ae88..fb55ac4 100644 --- a/data/new_maps/100x100_map.tmx +++ b/data/new_maps/100x100_map.tmx @@ -1,5 +1,5 @@ - + @@ -109,7 +109,73 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/GUI/gameloop.py b/src/GUI/gameloop.py index 11101bb..daebf7f 100644 --- a/src/GUI/gameloop.py +++ b/src/GUI/gameloop.py @@ -63,12 +63,15 @@ def setup(self, tmx_maps, player_start_pos): for x, y, surface in tmx_maps.get_layer_by_name("Sea").tiles(): src.sprites.Sprite((x * TILE_SIZE, y * TILE_SIZE), surface, self.all_sprites, WORLD_LAYERS["bg"]) + # Shallow water + for x, y, surface in tmx_maps.get_layer_by_name("Shallow Sea").tiles(): + src.sprites.Sprite((x * TILE_SIZE, y * TILE_SIZE), surface, self.all_sprites, WORLD_LAYERS["bg"]) + # Islands islands = tmx_maps.get_layer_by_name("Islands") for x, y, surface in islands.tiles(): src.sprites.Sprite((x * TILE_SIZE, y * TILE_SIZE), surface, self.all_sprites, WORLD_LAYERS["bg"]) - # Enitites for obj in tmx_maps.get_layer_by_name("Ships"): if obj.name == "Player" and obj.properties["pos"] == player_start_pos: From 402d4d94744da5b9004126fddbf6d7e59a49bbcc Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Sat, 28 Dec 2024 14:39:04 +0100 Subject: [PATCH 36/63] Fixing islands Fixed: - islands drawing beneath the water animation --- data/new_maps/100x100_map.tmx | 3 ++- src/GUI/gameloop.py | 12 ++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/data/new_maps/100x100_map.tmx b/data/new_maps/100x100_map.tmx index fb55ac4..78454f4 100644 --- a/data/new_maps/100x100_map.tmx +++ b/data/new_maps/100x100_map.tmx @@ -1,5 +1,5 @@ - + @@ -176,6 +176,7 @@ + diff --git a/src/GUI/gameloop.py b/src/GUI/gameloop.py index daebf7f..a182da0 100644 --- a/src/GUI/gameloop.py +++ b/src/GUI/gameloop.py @@ -63,6 +63,12 @@ def setup(self, tmx_maps, player_start_pos): for x, y, surface in tmx_maps.get_layer_by_name("Sea").tiles(): src.sprites.Sprite((x * TILE_SIZE, y * TILE_SIZE), surface, self.all_sprites, WORLD_LAYERS["bg"]) + # Water animated + for obj in tmx_maps.get_layer_by_name("Water"): + for x in range(int(obj.x), int(obj.x + obj.width), TILE_SIZE): + for y in range(int(obj.y), int(obj.y + obj.height), TILE_SIZE): + AnimatedSprites((x, y), self.world_frames["water"], self.all_sprites, WORLD_LAYERS["water"]) + # Shallow water for x, y, surface in tmx_maps.get_layer_by_name("Shallow Sea").tiles(): src.sprites.Sprite((x * TILE_SIZE, y * TILE_SIZE), surface, self.all_sprites, WORLD_LAYERS["bg"]) @@ -80,12 +86,6 @@ def setup(self, tmx_maps, player_start_pos): frames = self.world_frames["ships"]["player_sloop"], groups = self.all_sprites) - # Water animated - for obj in tmx_maps.get_layer_by_name("Water"): - for x in range(int(obj.x), int(obj.x + obj.width), TILE_SIZE): - for y in range(int(obj.y), int(obj.y + obj.height), TILE_SIZE): - AnimatedSprites((x, y), self.world_frames["water"], self.all_sprites, WORLD_LAYERS["water"]) - # Coast for obj in tmx_maps.get_layer_by_name("Coast"): terrain = obj.properties["terrain"] From 406540da9cf38d785ad9b730237631058ad9240e Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Sat, 28 Dec 2024 19:48:45 +0100 Subject: [PATCH 37/63] Old code Removing: - old code --- src/sprites.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/sprites.py b/src/sprites.py index 8319760..09debbf 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -84,11 +84,6 @@ class Player(Entity): def __init__(self, pos, frames, groups): super().__init__(pos, frames, groups) - # TODO: replace with actual images - - # self.image = pygame.Surface((TILE_SIZE, TILE_SIZE)) - # self.image.fill("red") - # self.rect = self.image.get_frect(center=pos) # ghost preview self.player_preview = self.image.copy() From 3a727cf2bfeac2ce49e5342757932d08f95046ae Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Sat, 28 Dec 2024 19:52:55 +0100 Subject: [PATCH 38/63] Camera drag method Added: - camera drag method in AllSprites class --- src/sprites.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/sprites.py b/src/sprites.py index 09debbf..4936110 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -47,6 +47,26 @@ def __init__(self): raise ValueError("Display surface is not initialized") self.offset = pygame.math.Vector2() self.scale = 2.0 + self.dragging = False + self.last_mouse_pos = None + + def camera_drag(self): + mouse_pressed = pygame.mouse.get_pressed() + mouse_pos = pygame.mouse.get_pos() + + if mouse_pos[0]: + if not self.dragging: + self.dragging = True + self.last_mouse_pos = mouse_pos + else: + delta_x = mouse_pos[0] - self.last_mouse_pos[0] + delta_y = mouse_pos[1] - self.last_mouse_pos[1] + self.offset.x += delta_x + self.offset.y += delta_y + self.last_mouse_pos = mouse_pos + else: + self.dragging = False + self.last_mouse_pos = None def draw(self, player_center, player_preview, player_preview_rect): self.offset.x = -(player_center[0] * self.scale - SCREEN_WIDTH / 2) From 5ea3bab4e78594370c4f2ced4bb19c71bd2b9861 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Sat, 28 Dec 2024 20:00:07 +0100 Subject: [PATCH 39/63] Handling camera drag Using: - the camera drag method is now used in gameloop --- src/GUI/gameloop.py | 1 + src/sprites.py | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/GUI/gameloop.py b/src/GUI/gameloop.py index a182da0..5c55fa5 100644 --- a/src/GUI/gameloop.py +++ b/src/GUI/gameloop.py @@ -111,6 +111,7 @@ def render(self) -> None: """draw sprites to the canvas""" dt = self.clock.tick() / 1000 self.screen.fill("#000000") + self.all_sprites.camera_drag() self.all_sprites.update(dt) self.all_sprites.draw(self.player.rect.center, self.player.player_preview, self.player.player_preview_rect) diff --git a/src/sprites.py b/src/sprites.py index 4936110..8f3c367 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -54,7 +54,7 @@ def camera_drag(self): mouse_pressed = pygame.mouse.get_pressed() mouse_pos = pygame.mouse.get_pos() - if mouse_pos[0]: + if mouse_pressed[0]: if not self.dragging: self.dragging = True self.last_mouse_pos = mouse_pos @@ -69,8 +69,11 @@ def camera_drag(self): self.last_mouse_pos = None def draw(self, player_center, player_preview, player_preview_rect): - self.offset.x = -(player_center[0] * self.scale - SCREEN_WIDTH / 2) - self.offset.y = -(player_center[1] * self.scale - SCREEN_HEIGHT / 2) + player_offset_x = -(player_center[0] * self.scale - SCREEN_WIDTH / 2) + player_offset_y = -(player_center[1] * self.scale - SCREEN_HEIGHT / 2) + + self.offset.x += player_offset_x + self.offset.y += player_offset_y background_sprites = [sprite for sprite in self if sprite.z < WORLD_LAYERS["main"]] main_sprites = [sprite for sprite in self if sprite.z == WORLD_LAYERS["main"]] From a36a959c219e50c9e158c2cc1c01854271a1878a Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Sat, 28 Dec 2024 23:01:00 +0100 Subject: [PATCH 40/63] Introducing drag for player Added: - drag system for the player's ship --- src/GUI/gameloop.py | 12 ++- src/sprites.py | 180 ++++++++++++++++++++++++++------------------ 2 files changed, 118 insertions(+), 74 deletions(-) diff --git a/src/GUI/gameloop.py b/src/GUI/gameloop.py index 5c55fa5..68333d9 100644 --- a/src/GUI/gameloop.py +++ b/src/GUI/gameloop.py @@ -41,6 +41,7 @@ def __post_init__(self): self.setup( tmx_maps=self.tmx_map["map"], player_start_pos="top_left_island" ) # The start positions will be one of the 4 islands in the corners of the board + self.camera_mode = "drag" def import_assets(self): """load the map""" @@ -111,7 +112,16 @@ def render(self) -> None: """draw sprites to the canvas""" dt = self.clock.tick() / 1000 self.screen.fill("#000000") - self.all_sprites.camera_drag() + + self.all_sprites.dragging_camera = False + self.all_sprites.moving_player = False + + if self.camera_mode == "drag": + self.all_sprites.start_drag() + self.all_sprites.camera_drag() + else: + self.all_sprites.center_on_player(self.player.rect.center) + self.all_sprites.update(dt) self.all_sprites.draw(self.player.rect.center, self.player.player_preview, self.player.player_preview_rect) diff --git a/src/sprites.py b/src/sprites.py index 8f3c367..eeb2648 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -45,35 +45,46 @@ def __init__(self): self.display_surface = pygame.display.get_surface() if not self.display_surface: raise ValueError("Display surface is not initialized") + self.offset = pygame.math.Vector2() self.scale = 2.0 - self.dragging = False + + self.moving_player = False + self.dragging_camera = False self.last_mouse_pos = None + self.dragging = False + + def start_drag(self): + if pygame.mouse.get_pressed()[0]: + self.dragging = True + self.last_mouse_pos = pygame.mouse.get_pos() def camera_drag(self): mouse_pressed = pygame.mouse.get_pressed() mouse_pos = pygame.mouse.get_pos() - if mouse_pressed[0]: - if not self.dragging: - self.dragging = True - self.last_mouse_pos = mouse_pos - else: + if not self.moving_player: + if self.dragging and mouse_pressed[0]: delta_x = mouse_pos[0] - self.last_mouse_pos[0] delta_y = mouse_pos[1] - self.last_mouse_pos[1] + self.offset.x += delta_x self.offset.y += delta_y + self.last_mouse_pos = mouse_pos - else: - self.dragging = False - self.last_mouse_pos = None + else: + self.dragging = False + + def center_on_player(self, player_center): + self.offset.x = -(player_center[0] * self.scale - SCREEN_WIDTH / 2) + self.offset.y = -(player_center[1] * self.scale - SCREEN_HEIGHT / 2) def draw(self, player_center, player_preview, player_preview_rect): - player_offset_x = -(player_center[0] * self.scale - SCREEN_WIDTH / 2) - player_offset_y = -(player_center[1] * self.scale - SCREEN_HEIGHT / 2) + # player_offset_x = -(player_center[0] * self.scale - SCREEN_WIDTH / 2) + # player_offset_y = -(player_center[1] * self.scale - SCREEN_HEIGHT / 2) - self.offset.x += player_offset_x - self.offset.y += player_offset_y + # self.offset.x += player_offset_x + # self.offset.y += player_offset_y background_sprites = [sprite for sprite in self if sprite.z < WORLD_LAYERS["main"]] main_sprites = [sprite for sprite in self if sprite.z == WORLD_LAYERS["main"]] @@ -115,74 +126,97 @@ def __init__(self, pos, frames, groups): self.inventory = Inventory() self.mouse_have_been_pressed: bool = False + self.draggin = False + self.offset_x = 0 + self.offset_y = 0 + def input(self) -> None: """move the player and show a ghost to preview the move""" # gost preview - mouse_pos = pygame.mouse.get_pos() + # mouse_pos = pygame.mouse.get_pos() - # get the relative pos of the player from the mouse - # to know on wich axis the player will move - delta_x = abs(self.rect.centerx - mouse_pos[0]) - delta_y = abs(self.rect.centery - mouse_pos[1]) + # # get the relative pos of the player from the mouse + # # to know on wich axis the player will move + # delta_x = abs(self.rect.centerx - mouse_pos[0]) + # delta_y = abs(self.rect.centery - mouse_pos[1]) - # move the gost on the x axis + # # move the gost on the x axis self.player_preview_rect = self.rect.copy() - if delta_x > delta_y: - if delta_x < (TILE_SIZE / 2): - # don't move the gost if the mouse is on the player hitbox - self.player_preview_rect.x = self.rect.x - elif mouse_pos[0] > self.rect.centerx: - # go right - self.player_preview_rect.x = self.rect.x + TILE_SIZE - else: - # go left - self.player_preview_rect.x = self.rect.x - TILE_SIZE - # move the gost on the y axis - else: - if delta_y < (TILE_SIZE / 2): - # don't move if the mouse is on the player hitbox - self.player_preview_rect.y = self.rect.y - elif mouse_pos[1] > self.rect.centery: - # go down - self.player_preview_rect.y = self.rect.y + TILE_SIZE - else: - # go up - self.player_preview_rect.y = self.rect.y - TILE_SIZE - - # move the player - if not pygame.mouse.get_pressed()[0]: - self.mouse_have_been_pressed = False - return None - if self.mouse_have_been_pressed: - return None - - self.mouse_have_been_pressed = True - - # move on the x axis - if delta_x > delta_y: - if delta_x < (TILE_SIZE / 2): - # don't move if the mouse is on the player hitbox - return None - if mouse_pos[0] > self.rect.centerx: - # go right - self.rect.x += TILE_SIZE - else: - # go left - self.rect.x -= TILE_SIZE - # move on the y axis - else: - if delta_y < (TILE_SIZE / 2): - # don't move if the mouse is on the player hitbox - return None - if mouse_pos[1] > self.rect.centery: - # go down - self.rect.y += TILE_SIZE - else: - # go up - self.rect.y -= TILE_SIZE + # if delta_x > delta_y: + # if delta_x < (TILE_SIZE / 2): + # # don't move the gost if the mouse is on the player hitbox + # self.player_preview_rect.x = self.rect.x + # elif mouse_pos[0] > self.rect.centerx: + # # go right + # self.player_preview_rect.x = self.rect.x + TILE_SIZE + # else: + # # go left + # self.player_preview_rect.x = self.rect.x - TILE_SIZE + # # move the gost on the y axis + # else: + # if delta_y < (TILE_SIZE / 2): + # # don't move if the mouse is on the player hitbox + # self.player_preview_rect.y = self.rect.y + # elif mouse_pos[1] > self.rect.centery: + # # go down + # self.player_preview_rect.y = self.rect.y + TILE_SIZE + # else: + # # go up + # self.player_preview_rect.y = self.rect.y - TILE_SIZE + + # # move the player + # if not pygame.mouse.get_pressed()[0]: + # self.mouse_have_been_pressed = False + # return None + # if self.mouse_have_been_pressed: + # return None + + # self.mouse_have_been_pressed = True + + # # move on the x axis + # if delta_x > delta_y: + # if delta_x < (TILE_SIZE / 2): + # # don't move if the mouse is on the player hitbox + # return None + # if mouse_pos[0] > self.rect.centerx: + # # go right + # self.rect.x += TILE_SIZE + # else: + # # go left + # self.rect.x -= TILE_SIZE + # # move on the y axis + # else: + # if delta_y < (TILE_SIZE / 2): + # # don't move if the mouse is on the player hitbox + # return None + # if mouse_pos[1] > self.rect.centery: + # # go down + # self.rect.y += TILE_SIZE + # else: + # # go up + # self.rect.y -= TILE_SIZE + + # return None + + mouse_pos = pygame.mouse.get_pos() + mouse_pressed = pygame.mouse.get_pressed() + camera = AllSprites() + + if not camera.dragging_camera: + if mouse_pressed[0]: + if not self.draggin and self.rect.collidepoint(mouse_pos): + self.draggin = True + + self.offset_x = self.rect.x - mouse_pos[0] + self.offset_y = self.rect.y - mouse_pos[1] + + if self.draggin: + self.rect.x = mouse_pos[0] + self.offset_x + self.rect.y = mouse_pos[1] + self.offset_y - return None + if not mouse_pressed[0]: + self.draggin = False def update(self, dt) -> None: """blit player image and gost preview to a given surface""" From c6412f4d61dba1c1549a0defc9f161be6fd73761 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Fri, 10 Jan 2025 16:44:28 +0100 Subject: [PATCH 41/63] Commenting out code Commented out: - code for dragging the camera --- src/GUI/gameloop.py | 16 ++-- src/sprites.py | 202 ++++++++++++++++++++++---------------------- 2 files changed, 107 insertions(+), 111 deletions(-) diff --git a/src/GUI/gameloop.py b/src/GUI/gameloop.py index 68333d9..b931097 100644 --- a/src/GUI/gameloop.py +++ b/src/GUI/gameloop.py @@ -113,14 +113,14 @@ def render(self) -> None: dt = self.clock.tick() / 1000 self.screen.fill("#000000") - self.all_sprites.dragging_camera = False - self.all_sprites.moving_player = False - - if self.camera_mode == "drag": - self.all_sprites.start_drag() - self.all_sprites.camera_drag() - else: - self.all_sprites.center_on_player(self.player.rect.center) + # self.all_sprites.dragging_camera = False + # self.all_sprites.moving_player = False + + # if self.camera_mode == "drag": + # self.all_sprites.start_drag() + # self.all_sprites.camera_drag() + # else: + # self.all_sprites.center_on_player(self.player.rect.center) self.all_sprites.update(dt) self.all_sprites.draw(self.player.rect.center, self.player.player_preview, self.player.player_preview_rect) diff --git a/src/sprites.py b/src/sprites.py index eeb2648..b7d5bc4 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -49,42 +49,38 @@ def __init__(self): self.offset = pygame.math.Vector2() self.scale = 2.0 - self.moving_player = False - self.dragging_camera = False - self.last_mouse_pos = None - self.dragging = False - - def start_drag(self): - if pygame.mouse.get_pressed()[0]: - self.dragging = True - self.last_mouse_pos = pygame.mouse.get_pos() - - def camera_drag(self): - mouse_pressed = pygame.mouse.get_pressed() - mouse_pos = pygame.mouse.get_pos() - if not self.moving_player: - if self.dragging and mouse_pressed[0]: - delta_x = mouse_pos[0] - self.last_mouse_pos[0] - delta_y = mouse_pos[1] - self.last_mouse_pos[1] + # def start_drag(self): + # if pygame.mouse.get_pressed()[0]: + # self.dragging = True + # self.last_mouse_pos = pygame.mouse.get_pos() - self.offset.x += delta_x - self.offset.y += delta_y + # def camera_drag(self): + # mouse_pressed = pygame.mouse.get_pressed() + # mouse_pos = pygame.mouse.get_pos() - self.last_mouse_pos = mouse_pos - else: - self.dragging = False + # if not self.moving_player: + # if self.dragging and mouse_pressed[0]: + # delta_x = mouse_pos[0] - self.last_mouse_pos[0] + # delta_y = mouse_pos[1] - self.last_mouse_pos[1] + + # self.offset.x += delta_x + # self.offset.y += delta_y + + # self.last_mouse_pos = mouse_pos + # else: + # self.dragging = False - def center_on_player(self, player_center): - self.offset.x = -(player_center[0] * self.scale - SCREEN_WIDTH / 2) - self.offset.y = -(player_center[1] * self.scale - SCREEN_HEIGHT / 2) + # def center_on_player(self, player_center): + # self.offset.x = -(player_center[0] * self.scale - SCREEN_WIDTH / 2) + # self.offset.y = -(player_center[1] * self.scale - SCREEN_HEIGHT / 2) def draw(self, player_center, player_preview, player_preview_rect): - # player_offset_x = -(player_center[0] * self.scale - SCREEN_WIDTH / 2) - # player_offset_y = -(player_center[1] * self.scale - SCREEN_HEIGHT / 2) + player_offset_x = -(player_center[0] * self.scale - SCREEN_WIDTH / 2) + player_offset_y = -(player_center[1] * self.scale - SCREEN_HEIGHT / 2) - # self.offset.x += player_offset_x - # self.offset.y += player_offset_y + self.offset.x += player_offset_x + self.offset.y += player_offset_y background_sprites = [sprite for sprite in self if sprite.z < WORLD_LAYERS["main"]] main_sprites = [sprite for sprite in self if sprite.z == WORLD_LAYERS["main"]] @@ -134,89 +130,89 @@ def input(self) -> None: """move the player and show a ghost to preview the move""" # gost preview - # mouse_pos = pygame.mouse.get_pos() + mouse_pos = pygame.mouse.get_pos() - # # get the relative pos of the player from the mouse - # # to know on wich axis the player will move - # delta_x = abs(self.rect.centerx - mouse_pos[0]) - # delta_y = abs(self.rect.centery - mouse_pos[1]) + # get the relative pos of the player from the mouse + # to know on wich axis the player will move + delta_x = abs(self.rect.centerx - mouse_pos[0]) + delta_y = abs(self.rect.centery - mouse_pos[1]) # # move the gost on the x axis self.player_preview_rect = self.rect.copy() - # if delta_x > delta_y: - # if delta_x < (TILE_SIZE / 2): - # # don't move the gost if the mouse is on the player hitbox - # self.player_preview_rect.x = self.rect.x - # elif mouse_pos[0] > self.rect.centerx: - # # go right - # self.player_preview_rect.x = self.rect.x + TILE_SIZE - # else: - # # go left - # self.player_preview_rect.x = self.rect.x - TILE_SIZE - # # move the gost on the y axis - # else: - # if delta_y < (TILE_SIZE / 2): - # # don't move if the mouse is on the player hitbox - # self.player_preview_rect.y = self.rect.y - # elif mouse_pos[1] > self.rect.centery: - # # go down - # self.player_preview_rect.y = self.rect.y + TILE_SIZE - # else: - # # go up - # self.player_preview_rect.y = self.rect.y - TILE_SIZE - - # # move the player - # if not pygame.mouse.get_pressed()[0]: - # self.mouse_have_been_pressed = False - # return None - # if self.mouse_have_been_pressed: - # return None - - # self.mouse_have_been_pressed = True - - # # move on the x axis - # if delta_x > delta_y: - # if delta_x < (TILE_SIZE / 2): - # # don't move if the mouse is on the player hitbox - # return None - # if mouse_pos[0] > self.rect.centerx: - # # go right - # self.rect.x += TILE_SIZE - # else: - # # go left - # self.rect.x -= TILE_SIZE - # # move on the y axis - # else: - # if delta_y < (TILE_SIZE / 2): - # # don't move if the mouse is on the player hitbox - # return None - # if mouse_pos[1] > self.rect.centery: - # # go down - # self.rect.y += TILE_SIZE - # else: - # # go up - # self.rect.y -= TILE_SIZE - - # return None + if delta_x > delta_y: + if delta_x < (TILE_SIZE / 2): + # don't move the gost if the mouse is on the player hitbox + self.player_preview_rect.x = self.rect.x + elif mouse_pos[0] > self.rect.centerx: + # go right + self.player_preview_rect.x = self.rect.x + TILE_SIZE + else: + # go left + self.player_preview_rect.x = self.rect.x - TILE_SIZE + # move the gost on the y axis + else: + if delta_y < (TILE_SIZE / 2): + # don't move if the mouse is on the player hitbox + self.player_preview_rect.y = self.rect.y + elif mouse_pos[1] > self.rect.centery: + # go down + self.player_preview_rect.y = self.rect.y + TILE_SIZE + else: + # go up + self.player_preview_rect.y = self.rect.y - TILE_SIZE + + # move the player + if not pygame.mouse.get_pressed()[0]: + self.mouse_have_been_pressed = False + return None + if self.mouse_have_been_pressed: + return None + + self.mouse_have_been_pressed = True + + # move on the x axis + if delta_x > delta_y: + if delta_x < (TILE_SIZE / 2): + # don't move if the mouse is on the player hitbox + return None + if mouse_pos[0] > self.rect.centerx: + # go right + self.rect.x += TILE_SIZE + else: + # go left + self.rect.x -= TILE_SIZE + # move on the y axis + else: + if delta_y < (TILE_SIZE / 2): + # don't move if the mouse is on the player hitbox + return None + if mouse_pos[1] > self.rect.centery: + # go down + self.rect.y += TILE_SIZE + else: + # go up + self.rect.y -= TILE_SIZE - mouse_pos = pygame.mouse.get_pos() - mouse_pressed = pygame.mouse.get_pressed() - camera = AllSprites() + return None + + # mouse_pos = pygame.mouse.get_pos() + # mouse_pressed = pygame.mouse.get_pressed() + # camera = AllSprites() - if not camera.dragging_camera: - if mouse_pressed[0]: - if not self.draggin and self.rect.collidepoint(mouse_pos): - self.draggin = True + # if not camera.dragging_camera: + # if mouse_pressed[0]: + # if not self.draggin and self.rect.collidepoint(mouse_pos): + # self.draggin = True - self.offset_x = self.rect.x - mouse_pos[0] - self.offset_y = self.rect.y - mouse_pos[1] + # self.offset_x = self.rect.x - mouse_pos[0] + # self.offset_y = self.rect.y - mouse_pos[1] - if self.draggin: - self.rect.x = mouse_pos[0] + self.offset_x - self.rect.y = mouse_pos[1] + self.offset_y + # if self.draggin: + # self.rect.x = mouse_pos[0] + self.offset_x + # self.rect.y = mouse_pos[1] + self.offset_y - if not mouse_pressed[0]: - self.draggin = False + # if not mouse_pressed[0]: + # self.draggin = False def update(self, dt) -> None: """blit player image and gost preview to a given surface""" From e8ad6072f51c2986ebdc30cdd2eddf67b6a17a89 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Fri, 10 Jan 2025 16:44:52 +0100 Subject: [PATCH 42/63] Removed 1 Removed: - start drag method --- src/sprites.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/sprites.py b/src/sprites.py index b7d5bc4..e9cf938 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -49,12 +49,6 @@ def __init__(self): self.offset = pygame.math.Vector2() self.scale = 2.0 - - # def start_drag(self): - # if pygame.mouse.get_pressed()[0]: - # self.dragging = True - # self.last_mouse_pos = pygame.mouse.get_pos() - # def camera_drag(self): # mouse_pressed = pygame.mouse.get_pressed() # mouse_pos = pygame.mouse.get_pos() From a78b58e4984113e7aedd8732b19b6e09e12c1fe0 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Fri, 10 Jan 2025 16:45:19 +0100 Subject: [PATCH 43/63] Remove 2 Removed: - camera drag method --- src/sprites.py | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/sprites.py b/src/sprites.py index e9cf938..4e72d59 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -49,22 +49,6 @@ def __init__(self): self.offset = pygame.math.Vector2() self.scale = 2.0 - # def camera_drag(self): - # mouse_pressed = pygame.mouse.get_pressed() - # mouse_pos = pygame.mouse.get_pos() - - # if not self.moving_player: - # if self.dragging and mouse_pressed[0]: - # delta_x = mouse_pos[0] - self.last_mouse_pos[0] - # delta_y = mouse_pos[1] - self.last_mouse_pos[1] - - # self.offset.x += delta_x - # self.offset.y += delta_y - - # self.last_mouse_pos = mouse_pos - # else: - # self.dragging = False - # def center_on_player(self, player_center): # self.offset.x = -(player_center[0] * self.scale - SCREEN_WIDTH / 2) # self.offset.y = -(player_center[1] * self.scale - SCREEN_HEIGHT / 2) From f1bca83337f83860595d07bf2c1f8d27870afd37 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Fri, 10 Jan 2025 16:45:42 +0100 Subject: [PATCH 44/63] Remove 3 Removed: - cemter on player method --- src/sprites.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/sprites.py b/src/sprites.py index 4e72d59..589099b 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -49,10 +49,6 @@ def __init__(self): self.offset = pygame.math.Vector2() self.scale = 2.0 - # def center_on_player(self, player_center): - # self.offset.x = -(player_center[0] * self.scale - SCREEN_WIDTH / 2) - # self.offset.y = -(player_center[1] * self.scale - SCREEN_HEIGHT / 2) - def draw(self, player_center, player_preview, player_preview_rect): player_offset_x = -(player_center[0] * self.scale - SCREEN_WIDTH / 2) player_offset_y = -(player_center[1] * self.scale - SCREEN_HEIGHT / 2) From 605ed6a9c19d48a36b1b3e01756f2a46560bcfd0 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Fri, 10 Jan 2025 16:46:12 +0100 Subject: [PATCH 45/63] Remove 4 Removed: - dragging method for player --- src/sprites.py | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/src/sprites.py b/src/sprites.py index 589099b..6ff459d 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -169,25 +169,6 @@ def input(self) -> None: return None - # mouse_pos = pygame.mouse.get_pos() - # mouse_pressed = pygame.mouse.get_pressed() - # camera = AllSprites() - - # if not camera.dragging_camera: - # if mouse_pressed[0]: - # if not self.draggin and self.rect.collidepoint(mouse_pos): - # self.draggin = True - - # self.offset_x = self.rect.x - mouse_pos[0] - # self.offset_y = self.rect.y - mouse_pos[1] - - # if self.draggin: - # self.rect.x = mouse_pos[0] + self.offset_x - # self.rect.y = mouse_pos[1] + self.offset_y - - # if not mouse_pressed[0]: - # self.draggin = False - def update(self, dt) -> None: """blit player image and gost preview to a given surface""" self.input() From c70ecb791aecef0b1215800dcc6ae5802def6aaf Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Fri, 10 Jan 2025 16:46:45 +0100 Subject: [PATCH 46/63] Remove 5 Removed: - all drag logic in the gameloop --- src/GUI/gameloop.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/GUI/gameloop.py b/src/GUI/gameloop.py index b931097..6b1574f 100644 --- a/src/GUI/gameloop.py +++ b/src/GUI/gameloop.py @@ -113,15 +113,6 @@ def render(self) -> None: dt = self.clock.tick() / 1000 self.screen.fill("#000000") - # self.all_sprites.dragging_camera = False - # self.all_sprites.moving_player = False - - # if self.camera_mode == "drag": - # self.all_sprites.start_drag() - # self.all_sprites.camera_drag() - # else: - # self.all_sprites.center_on_player(self.player.rect.center) - self.all_sprites.update(dt) self.all_sprites.draw(self.player.rect.center, self.player.player_preview, self.player.player_preview_rect) From eb5d68e877740c31e888aa7fbb779b90bbc9d00a Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Fri, 10 Jan 2025 16:56:01 +0100 Subject: [PATCH 47/63] Fixed small issue Fixed: - camera not focusing on the player --- src/sprites.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/sprites.py b/src/sprites.py index 6ff459d..559df00 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -50,11 +50,11 @@ def __init__(self): self.scale = 2.0 def draw(self, player_center, player_preview, player_preview_rect): - player_offset_x = -(player_center[0] * self.scale - SCREEN_WIDTH / 2) - player_offset_y = -(player_center[1] * self.scale - SCREEN_HEIGHT / 2) + # player_offset_x = -(player_center[0] * self.scale - SCREEN_WIDTH / 2) + # player_offset_y = -(player_center[1] * self.scale - SCREEN_HEIGHT / 2) - self.offset.x += player_offset_x - self.offset.y += player_offset_y + self.offset.x = -(player_center[0] * self.scale - SCREEN_WIDTH / 2) + self.offset.y = -(player_center[1] * self.scale - SCREEN_HEIGHT / 2) background_sprites = [sprite for sprite in self if sprite.z < WORLD_LAYERS["main"]] main_sprites = [sprite for sprite in self if sprite.z == WORLD_LAYERS["main"]] From 065448cca34fa8f26ca8dfd23aab4e06292d9b96 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Fri, 10 Jan 2025 16:56:31 +0100 Subject: [PATCH 48/63] Removing old code Removed: - old offset code --- src/sprites.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/sprites.py b/src/sprites.py index 559df00..18d14b1 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -50,9 +50,6 @@ def __init__(self): self.scale = 2.0 def draw(self, player_center, player_preview, player_preview_rect): - # player_offset_x = -(player_center[0] * self.scale - SCREEN_WIDTH / 2) - # player_offset_y = -(player_center[1] * self.scale - SCREEN_HEIGHT / 2) - self.offset.x = -(player_center[0] * self.scale - SCREEN_WIDTH / 2) self.offset.y = -(player_center[1] * self.scale - SCREEN_HEIGHT / 2) From b034513dbe65f9ee6248caa833a2129b1b2313bf Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Fri, 10 Jan 2025 17:05:01 +0100 Subject: [PATCH 49/63] Add direction vector Added: - direction vector to player class --- src/sprites.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/sprites.py b/src/sprites.py index 18d14b1..5e65c30 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -86,6 +86,9 @@ class Player(Entity): def __init__(self, pos, frames, groups): super().__init__(pos, frames, groups) + # Reset direction + self.direction = pygame.math.Vector2(0, 0) + # ghost preview self.player_preview = self.image.copy() self.player_preview.set_alpha(128) From f0eb57e5e69330ae3bc1379ee767225c7850462a Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Fri, 10 Jan 2025 17:18:54 +0100 Subject: [PATCH 50/63] Refactored movement Refactored: - movement to use direction vector so that the state updates it correctly and shows the correct direction of the ship --- src/sprites.py | 43 ++++++++++++++++++------------------------- 1 file changed, 18 insertions(+), 25 deletions(-) diff --git a/src/sprites.py b/src/sprites.py index 5e65c30..8d821fc 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -86,9 +86,6 @@ class Player(Entity): def __init__(self, pos, frames, groups): super().__init__(pos, frames, groups) - # Reset direction - self.direction = pygame.math.Vector2(0, 0) - # ghost preview self.player_preview = self.image.copy() self.player_preview.set_alpha(128) @@ -102,6 +99,8 @@ def __init__(self, pos, frames, groups): def input(self) -> None: """move the player and show a ghost to preview the move""" + # Reset direction + self.direction = pygame.math.Vector2(0, 0) # gost preview mouse_pos = pygame.mouse.get_pos() @@ -138,36 +137,30 @@ def input(self) -> None: # move the player if not pygame.mouse.get_pressed()[0]: self.mouse_have_been_pressed = False - return None + return if self.mouse_have_been_pressed: - return None + return self.mouse_have_been_pressed = True # move on the x axis if delta_x > delta_y: - if delta_x < (TILE_SIZE / 2): - # don't move if the mouse is on the player hitbox - return None - if mouse_pos[0] > self.rect.centerx: - # go right - self.rect.x += TILE_SIZE - else: - # go left - self.rect.x -= TILE_SIZE - # move on the y axis + if delta_x >= (TILE_SIZE / 2): + if mouse_pos[0] > self.rect.centerx: + self.direction.x = 1 + else: + self.direction.x = -1 else: - if delta_y < (TILE_SIZE / 2): - # don't move if the mouse is on the player hitbox - return None - if mouse_pos[1] > self.rect.centery: - # go down - self.rect.y += TILE_SIZE - else: - # go up - self.rect.y -= TILE_SIZE + if delta_y >= (TILE_SIZE / 2): + if mouse_pos[1] > self.rect.centery: + self.direction.y = 1 + else: + self.direction.y = -1 + + self.rect.x += self.direction.x * TILE_SIZE + self.rect.y += self.direction.y * TILE_SIZE - return None + # return None def update(self, dt) -> None: """blit player image and gost preview to a given surface""" From f8288d57029ca7d213c1c4b46bfb840f83ef2308 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Sun, 9 Feb 2025 11:08:25 +0100 Subject: [PATCH 51/63] Fixed ship texture Fixed: - Ship texture issue, where the top of the ship was cut off --- images/tilesets/ships/player_test_ship.png | Bin 0 -> 12173 bytes src/GUI/gameloop.py | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 images/tilesets/ships/player_test_ship.png diff --git a/images/tilesets/ships/player_test_ship.png b/images/tilesets/ships/player_test_ship.png new file mode 100644 index 0000000000000000000000000000000000000000..5d3e9b87e13e0fa27eeb3b9bf87a56067d726200 GIT binary patch literal 12173 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 Date: Sun, 9 Feb 2025 11:44:22 +0100 Subject: [PATCH 52/63] Merge conflicts Resovled: - some merge conflicts and fixed some issues after the merge --- src/sprites.py | 2 +- src/states/game_running.py | 54 +++++++++++++++++++++++++++++--------- 2 files changed, 42 insertions(+), 14 deletions(-) diff --git a/src/sprites.py b/src/sprites.py index 31417a0..ad2e743 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -3,7 +3,7 @@ import pygame from pygame import FRect from src.settings import TILE_SIZE, SCREEN_HEIGHT, SCREEN_WIDTH, ANIMATION_SPEED, WORLD_LAYERS -from src.GUI.inventory import Inventory +from src.inventory import Inventory class Entity(pygame.sprite.Sprite): diff --git a/src/states/game_running.py b/src/states/game_running.py index 33cf9a4..e65c732 100644 --- a/src/states/game_running.py +++ b/src/states/game_running.py @@ -9,6 +9,8 @@ from src.states.base_state import BaseState from src.states.paused import Paused from src.inventory import Inventory +from src.support import * +from src.sprites import AnimatedSprites from src.settings import TILE_SIZE import src.sprites @@ -29,6 +31,7 @@ def __init__(self, game_state_manager) -> None: # Initialize player inventory + self.clock = pygame.Clock() self.player_inventory = Inventory() self.load_inventory_from_json("data/inventory.json") @@ -42,22 +45,47 @@ def setup(self, player_start_pos): setup the map and player from the tiled file """ self.tmx_map = { - "map": load_pygame(os.path.join(".", "data", "maps", "100x100_map.tmx")) + "map": load_pygame(os.path.join(".", "data", "new_maps", "100x100_map.tmx")) } + self.world_frames = { + "water": import_folder(".", "images", "tilesets", "water"), + "coast": coast_importer(6, 6, ".", "images", "tilesets", "coast"), + "ships": all_character_import(".", "images", "tilesets", "ships") + } + + # Sea + for x, y, surface in self.tmx_map["map"].get_layer_by_name("Sea").tiles(): + src.sprites.Sprite((x * TILE_SIZE, y * TILE_SIZE), surface, self.all_sprites, WORLD_LAYERS["bg"]) + + # Water animated + for obj in self.tmx_map["map"].get_layer_by_name("Water"): + for x in range(int(obj.x), int(obj.x + obj.width), TILE_SIZE): + for y in range(int(obj.y), int(obj.y + obj.height), TILE_SIZE): + AnimatedSprites((x, y), self.world_frames["water"], self.all_sprites, WORLD_LAYERS["water"]) + + # Shallow water + for x, y, surface in self.tmx_map["map"].get_layer_by_name("Shallow Sea").tiles(): + src.sprites.Sprite((x * TILE_SIZE, y * TILE_SIZE), surface, self.all_sprites, WORLD_LAYERS["bg"]) + # Islands - islands = self.tmx_map['map'].get_layer_by_name("Islands") + islands = self.tmx_map["map"].get_layer_by_name("Islands") for x, y, surface in islands.tiles(): - src.sprites.Tile( - self.all_sprites, - pos=(x * TILE_SIZE, y * TILE_SIZE), - surf=surface, - ) - - # Objects - for obj in self.tmx_map['map'].get_layer_by_name("Ships"): + src.sprites.Sprite((x * TILE_SIZE, y * TILE_SIZE), surface, self.all_sprites, WORLD_LAYERS["bg"]) + + # Enitites + for obj in self.tmx_map["map"].get_layer_by_name("Ships"): if obj.name == "Player" and obj.properties["pos"] == player_start_pos: - self.player = src.sprites.Player((obj.x, obj.y), self.all_sprites) + self.player = src.sprites.Player( + pos = (obj.x, obj.y), + frames = self.world_frames["ships"]["player_test_ship"], + groups = self.all_sprites) + + # Coast + for obj in self.tmx_map["map"].get_layer_by_name("Coast"): + terrain = obj.properties["terrain"] + side = obj.properties["side"] + AnimatedSprites((obj.x, obj.y), self.world_frames["coast"][terrain][side], self.all_sprites, WORLD_LAYERS["bg"]) def load_inventory_from_json(self, file_path: str): """Load initial inventory items from JSON file.""" @@ -74,8 +102,8 @@ def update(self, events) -> None: """ update each sprites and handle events """ - - self.all_sprites.update() + dt = self.clock.tick() / 1000 + self.all_sprites.update(dt) # get events like keypress or mouse clicks for event in events: From c4921f2bf567e0344c9bf7fb4da3fcb35ffb1edf Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Sun, 9 Feb 2025 11:56:36 +0100 Subject: [PATCH 53/63] Fixed issue Fixed: - type lint issue --- src/GUI/gameloop.py | 4 ++-- src/states/game_running.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/GUI/gameloop.py b/src/GUI/gameloop.py index f6a47a2..5828ec4 100644 --- a/src/GUI/gameloop.py +++ b/src/GUI/gameloop.py @@ -9,8 +9,8 @@ from pytmx.util_pygame import load_pygame # type: ignore # import Pygame specific objects, functions and functionality -from src.settings import SCREEN_WIDTH, SCREEN_HEIGHT, TILE_SIZE -from src.support import * +from src.settings import SCREEN_WIDTH, SCREEN_HEIGHT, TILE_SIZE, WORLD_LAYERS +from src.support import import_folder, coast_importer, all_character_import import src.sprites from src.sprites import AnimatedSprites diff --git a/src/states/game_running.py b/src/states/game_running.py index e65c732..290444a 100644 --- a/src/states/game_running.py +++ b/src/states/game_running.py @@ -9,10 +9,10 @@ from src.states.base_state import BaseState from src.states.paused import Paused from src.inventory import Inventory -from src.support import * +from src.support import import_folder, coast_importer, all_character_import from src.sprites import AnimatedSprites -from src.settings import TILE_SIZE +from src.settings import TILE_SIZE, WORLD_LAYERS import src.sprites From 48fce93d3502d6ec1c5184d0c265b71f2403e428 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Sun, 9 Feb 2025 13:07:38 +0100 Subject: [PATCH 54/63] Fixed lint Fixed: - small lint issue --- src/support.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/support.py b/src/support.py index f355190..3b56490 100644 --- a/src/support.py +++ b/src/support.py @@ -1,7 +1,7 @@ -from src.settings import * +import pygame from os.path import join from os import walk -from pytmx.util_pygame import load_pygame +# from pytmx.util_pygame import load_pygame # imports def import_image(*path, alpha = True, format = 'png'): From 81bbfb0c69f3d2058a2d6aafe455435fdab76117 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Sun, 9 Feb 2025 13:37:28 +0100 Subject: [PATCH 55/63] Small fixes Fixed: - issues after merge --- src/states/game_running.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/states/game_running.py b/src/states/game_running.py index 3dc5fcd..bde7448 100644 --- a/src/states/game_running.py +++ b/src/states/game_running.py @@ -71,7 +71,6 @@ def setup(self, player_start_pos): # Islands islands = self.tmx_map["map"].get_layer_by_name("Islands") - islands = self.tmx_map["map"].get_layer_by_name("Islands") for x, y, surface in islands.tiles(): src.sprites.Sprite((x * TILE_SIZE, y * TILE_SIZE), surface, self.all_sprites, WORLD_LAYERS["bg"]) From 54c77a7d2dfc7153e4a6653ea08fe5c7eec6dc96 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Mon, 17 Feb 2025 12:00:21 +0100 Subject: [PATCH 56/63] Update credits Added: - myself to the credits because danilo did not bother to do so smh --- CREDITS.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CREDITS.md b/CREDITS.md index 0756603..1cb2871 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -74,6 +74,10 @@ This file provides credits for all assets, tools, and contributions that have be ## Contributors +- **Davidek523** + - **Role**: Programmer + - **Github**: [davidek523](https://github.com/Davidek523) + - **Danilo Saiu** - **Role**: Project overseer/programmer - **Github**: [ultimateownsz](https://www.github.com/ultimateownsz) From 20c24de4c4e56729e591da0e568069e0fae195c2 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Mon, 17 Feb 2025 22:05:09 +0100 Subject: [PATCH 57/63] Removing ghost preview Changed: - commented out the ghost preview due to new movement methods and problems with ghost preview --- src/sprites.py | 57 +++++++++++++++++++------------------- src/states/game_running.py | 4 +-- 2 files changed, 30 insertions(+), 31 deletions(-) diff --git a/src/sprites.py b/src/sprites.py index faef17f..a1d7d7e 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -50,7 +50,7 @@ def __init__(self): self.offset = pygame.math.Vector2() self.scale = 2.0 - def draw(self, player_center, player_preview, player_preview_rect): + def draw(self, player_center): self.offset.x = -(player_center[0] * self.scale - SCREEN_WIDTH / 2) self.offset.y = -(player_center[1] * self.scale - SCREEN_HEIGHT / 2) @@ -67,12 +67,13 @@ def draw(self, player_center, player_preview, player_preview_rect): self.display_surface.blit(scaled_image, scaled_rect.topleft) - scaled_preview = pygame.transform.scale(player_preview, - (int(player_preview_rect.width * self.scale), int(player_preview_rect.height * self.scale))) - scaled_preview_rect = scaled_preview.get_rect(center=(player_preview_rect.center[0] * self.scale, player_preview_rect.center[1] * self.scale)) - scaled_preview_rect.topleft += self.offset + # scaling of the ghost preview + # scaled_preview = pygame.transform.scale(player_preview, + # (int(player_preview_rect.width * self.scale), int(player_preview_rect.height * self.scale))) + # scaled_preview_rect = scaled_preview.get_rect(center=(player_preview_rect.center[0] * self.scale, player_preview_rect.center[1] * self.scale)) + # scaled_preview_rect.topleft += self.offset - self.display_surface.blit(scaled_preview, scaled_preview_rect.topleft) + # self.display_surface.blit(scaled_preview, scaled_preview_rect.topleft) # method for zooming (might be usefull later?) # def set_scale(self, scale): @@ -112,28 +113,28 @@ def input(self) -> None: delta_y = abs(self.rect.centery - mouse_pos[1]) # # move the gost on the x axis - self.player_preview_rect = self.rect.copy() - if delta_x > delta_y: - if delta_x < (TILE_SIZE / 2): - # don't move the gost if the mouse is on the player hitbox - self.player_preview_rect.x = self.rect.x - elif mouse_pos[0] > self.rect.centerx: - # go right - self.player_preview_rect.x = self.rect.x + TILE_SIZE - else: - # go left - self.player_preview_rect.x = self.rect.x - TILE_SIZE - # move the gost on the y axis - else: - if delta_y < (TILE_SIZE / 2): - # don't move if the mouse is on the player hitbox - self.player_preview_rect.y = self.rect.y - elif mouse_pos[1] > self.rect.centery: - # go down - self.player_preview_rect.y = self.rect.y + TILE_SIZE - else: - # go up - self.player_preview_rect.y = self.rect.y - TILE_SIZE + # self.player_preview_rect = self.rect.copy() + # if delta_x > delta_y: + # if delta_x < (TILE_SIZE / 2): + # # don't move the gost if the mouse is on the player hitbox + # self.player_preview_rect.x = self.rect.x + # elif mouse_pos[0] > self.rect.centerx: + # # go right + # self.player_preview_rect.x = self.rect.x + TILE_SIZE + # else: + # # go left + # self.player_preview_rect.x = self.rect.x - TILE_SIZE + # # move the gost on the y axis + # else: + # if delta_y < (TILE_SIZE / 2): + # # don't move if the mouse is on the player hitbox + # self.player_preview_rect.y = self.rect.y + # elif mouse_pos[1] > self.rect.centery: + # # go down + # self.player_preview_rect.y = self.rect.y + TILE_SIZE + # else: + # # go up + # self.player_preview_rect.y = self.rect.y - TILE_SIZE # move the player if not pygame.mouse.get_pressed()[0]: diff --git a/src/states/game_running.py b/src/states/game_running.py index bde7448..2c33736 100644 --- a/src/states/game_running.py +++ b/src/states/game_running.py @@ -118,9 +118,7 @@ def render(self, screen) -> None: """draw sprites to the canvas""" screen.fill("#000000") self.all_sprites.draw( - self.player.rect.center, - self.player.player_preview, - self.player.player_preview_rect, + self.player.rect.center ) pygame.display.update() From 6e1df77df3d7550d368091a1316f2fa4a49b3e83 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Tue, 18 Feb 2025 11:05:01 +0100 Subject: [PATCH 58/63] Reverting sprite Reverting: - Ship sprite to red rectangle because I dont know why but it must happen for some extrordinary reason smh --- src/sprites.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/sprites.py b/src/sprites.py index a1d7d7e..6592fce 100644 --- a/src/sprites.py +++ b/src/sprites.py @@ -20,12 +20,14 @@ def __init__(self, pos, frames, groups): # self.speed = 250 # sprite setup - self.image = self.frames[self.get_state()][self.frame_index] + self.image = pygame.Surface((TILE_SIZE, TILE_SIZE)) + self.image.fill("red") + # self.image = self.frames[self.get_state()][self.frame_index] self.rect = self.image.get_frect(center = pos) def animate(self, dt): self.frame_index += ANIMATION_SPEED * dt - self.image = self.frames[self.get_state()][int(self.frame_index % len(self.frames[self.get_state()]))] + # self.image = self.frames[self.get_state()][int(self.frame_index % len(self.frames[self.get_state()]))] def get_state(self): moving = bool(self.direction) From 3aeb897002c4b88600ce01352cb8d7ffa2649a6c Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Tue, 18 Feb 2025 11:11:39 +0100 Subject: [PATCH 59/63] Added new texture Added: - a temporary replacement for our water animations because current water animation tileset sucks ass apparently --- images/tilesets/temporary_water/temp_water.png | Bin 0 -> 86 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/tilesets/temporary_water/temp_water.png diff --git a/images/tilesets/temporary_water/temp_water.png b/images/tilesets/temporary_water/temp_water.png new file mode 100644 index 0000000000000000000000000000000000000000..96ebba033be1a73cdd7acee95af5e1f597406ed5 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`vYsxEAr`&KF*RQf)w6Li2&>L= i=an!`xYBSig@M6m6?3?D) literal 0 HcmV?d00001 From 1e7ceb8fc995e6781e6497e92022734220f67cd2 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Tue, 18 Feb 2025 11:13:18 +0100 Subject: [PATCH 60/63] Replaced the texture Replaced: - the texture of the old water animation --- .../temporary_water/{temp_water.png => 0.png} | Bin src/states/game_running.py | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename images/tilesets/temporary_water/{temp_water.png => 0.png} (100%) diff --git a/images/tilesets/temporary_water/temp_water.png b/images/tilesets/temporary_water/0.png similarity index 100% rename from images/tilesets/temporary_water/temp_water.png rename to images/tilesets/temporary_water/0.png diff --git a/src/states/game_running.py b/src/states/game_running.py index 2c33736..3edaa62 100644 --- a/src/states/game_running.py +++ b/src/states/game_running.py @@ -50,7 +50,7 @@ def setup(self, player_start_pos): } self.world_frames = { - "water": import_folder(".", "images", "tilesets", "water"), + "water": import_folder(".", "images", "tilesets", "temporary_water"), "coast": coast_importer(6, 6, ".", "images", "tilesets", "coast"), "ships": all_character_import(".", "images", "tilesets", "ships") } From 3be11854641bc5b8f0929b9d43d15b7de075394a Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Tue, 18 Feb 2025 11:15:55 +0100 Subject: [PATCH 61/63] Added new texture Added: - new temporary water texture because the other one maaay blended in with the shallow water texture --- images/tilesets/temporary_water/1.png | Bin 0 -> 86 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/tilesets/temporary_water/1.png diff --git a/images/tilesets/temporary_water/1.png b/images/tilesets/temporary_water/1.png new file mode 100644 index 0000000000000000000000000000000000000000..df02529d1d553cc90381727b4340b532b9960071 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`vYsxEAr`&KU*b1Cwr6H-=oC7; in5{?3AnQPa5m4zYrc=q6w6%Z=89ZJ6T-G@yGywoOzZNL~ literal 0 HcmV?d00001 From 13d54c2950c2dbe6dc8d7d9e451d3ba7c583b8f5 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Tue, 18 Feb 2025 11:16:24 +0100 Subject: [PATCH 62/63] Removed the old texture Removed: - the old texture --- images/tilesets/temporary_water/0.png | Bin 86 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 images/tilesets/temporary_water/0.png diff --git a/images/tilesets/temporary_water/0.png b/images/tilesets/temporary_water/0.png deleted file mode 100644 index 96ebba033be1a73cdd7acee95af5e1f597406ed5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`vYsxEAr`&KF*RQf)w6Li2&>L= i=an!`xYBSig@M6m6?3?D) From 6b3d80a6a09a5cf1e2ac76abc1755564ecb1b3df Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Tue, 18 Feb 2025 11:17:06 +0100 Subject: [PATCH 63/63] Renamed the image Renamed the image for clarity --- images/tilesets/temporary_water/{1.png => 0.png} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename images/tilesets/temporary_water/{1.png => 0.png} (100%) diff --git a/images/tilesets/temporary_water/1.png b/images/tilesets/temporary_water/0.png similarity index 100% rename from images/tilesets/temporary_water/1.png rename to images/tilesets/temporary_water/0.png