summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--2019-worms/.gitignore3
-rw-r--r--2019-worms/Cargo.lock299
-rw-r--r--2019-worms/Cargo.toml23
-rw-r--r--2019-worms/Makefile16
-rw-r--r--2019-worms/README.md81
-rw-r--r--2019-worms/bot.json8
-rw-r--r--2019-worms/src/bin/benchmark.rs22
-rw-r--r--2019-worms/src/bin/explore-config.rs116
-rw-r--r--2019-worms/src/command.rs73
-rw-r--r--2019-worms/src/constants.rs218
-rw-r--r--2019-worms/src/constants/lava.rs6225
-rw-r--r--2019-worms/src/game.rs779
-rw-r--r--2019-worms/src/game/map.rs49
-rw-r--r--2019-worms/src/game/player.rs259
-rw-r--r--2019-worms/src/game/powerup.rs6
-rw-r--r--2019-worms/src/geometry.rs6
-rw-r--r--2019-worms/src/geometry/direction.rs67
-rw-r--r--2019-worms/src/geometry/point.rs37
-rw-r--r--2019-worms/src/geometry/vec.rs62
-rw-r--r--2019-worms/src/json.rs554
-rw-r--r--2019-worms/src/lib.rs8
-rw-r--r--2019-worms/src/main.rs46
-rw-r--r--2019-worms/src/strategy.rs5
-rw-r--r--2019-worms/src/strategy/minimax.rs330
-rw-r--r--2019-worms/tests/example-state.json1
-rwxr-xr-x2019-worms/tests/import-replay.sh12
-rw-r--r--2019-worms/tests/official-runner-matching.rs238
-rw-r--r--2019-worms/tests/replays/2019.08.19.21.15.02/A-init.json1
-rw-r--r--2019-worms/tests/replays/2019.08.19.21.15.02/A-log.csv298
-rw-r--r--2019-worms/tests/replays/2019.08.19.21.15.02/B-init.json1
-rw-r--r--2019-worms/tests/replays/2019.08.19.21.15.02/B-log.csv298
-rw-r--r--2019-worms/tests/replays/2019.08.19.21.31.16/A-init.json1
-rw-r--r--2019-worms/tests/replays/2019.08.19.21.31.16/A-log.csv274
-rw-r--r--2019-worms/tests/replays/2019.08.19.21.31.16/B-init.json1
-rw-r--r--2019-worms/tests/replays/2019.08.19.21.31.16/B-log.csv274
-rw-r--r--2019-worms/tests/replays/2019.08.19.21.57.04/A-init.json1
-rw-r--r--2019-worms/tests/replays/2019.08.19.21.57.04/A-log.csv214
-rw-r--r--2019-worms/tests/replays/2019.08.19.21.57.04/B-init.json1
-rw-r--r--2019-worms/tests/replays/2019.08.19.21.57.04/B-log.csv214
-rw-r--r--2019-worms/tests/strategy.rs27
40 files changed, 11148 insertions, 0 deletions
diff --git a/2019-worms/.gitignore b/2019-worms/.gitignore
new file mode 100644
index 0000000..791452f
--- /dev/null
+++ b/2019-worms/.gitignore
@@ -0,0 +1,3 @@
+target
+**/*.rs.bk
+submission.zip
diff --git a/2019-worms/Cargo.lock b/2019-worms/Cargo.lock
new file mode 100644
index 0000000..f5c96f0
--- /dev/null
+++ b/2019-worms/Cargo.lock
@@ -0,0 +1,299 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "arrayvec"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "cfg-if"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "crossbeam-epoch 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memoffset 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "crossbeam-queue"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "either"
+version = "1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "fnv"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "itoa"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "lazy_static"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "libc"
+version = "0.2.51"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "memoffset"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "nodrop"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "num-traits"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "num_cpus"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "0.4.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "quote"
+version = "0.6.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rayon"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "crossbeam-deque 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rayon-core 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "crossbeam-deque 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.1.54"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "rustc_version"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "ryu"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "scopeguard"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "semver"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "semver-parser"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "serde"
+version = "1.0.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.15.31 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "steam-powered-wyrm"
+version = "1.0.0"
+dependencies = [
+ "arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rayon 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
+ "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "syn"
+version = "0.15.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "time"
+version = "0.1.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)",
+ "redox_syscall 0.1.54 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "unicode-xid"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "92c7fb76bc8826a8b33b4ee5bb07a247a81e76764ab4d55e8f73e3a4d8808c71"
+"checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33"
+"checksum crossbeam-deque 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "05e44b8cf3e1a625844d1750e1f7820da46044ff6d28f4d43e455ba3e5bb2c13"
+"checksum crossbeam-epoch 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "fedcd6772e37f3da2a9af9bf12ebe046c0dfe657992377b4df982a2b54cd37a9"
+"checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b"
+"checksum crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6"
+"checksum either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5527cfe0d098f36e3f8839852688e63c8fff1c90b2b405aef730615f9a7bcf7b"
+"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3"
+"checksum itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b"
+"checksum lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14"
+"checksum libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)" = "bedcc7a809076656486ffe045abeeac163da1b558e963a31e29fbfbeba916917"
+"checksum memoffset 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ce6075db033bbbb7ee5a0bbd3a3186bbae616f57fb001c485c7ff77955f8177f"
+"checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945"
+"checksum num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0b3a5d7cc97d6d30d8b9bc8fa19bf45349ffe46241e8816f50f62f6d6aaabee1"
+"checksum num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bcef43580c035376c0705c42792c294b66974abbfd2789b511784023f71f3273"
+"checksum proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)" = "4d317f9caece796be1980837fd5cb3dfec5613ebdb04ad0956deea83ce168915"
+"checksum quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "faf4799c5d274f3868a4aae320a0a182cbd2baee377b378f080e16a23e9d80db"
+"checksum rayon 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a4b0186e22767d5b9738a05eab7c6ac90b15db17e5b5f9bd87976dd7d89a10a4"
+"checksum rayon-core 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ebbe0df8435ac0c397d467b6cad6d25543d06e8a019ef3f6af3c384597515bd2"
+"checksum redox_syscall 0.1.54 (registry+https://github.com/rust-lang/crates.io-index)" = "12229c14a0f65c4f1cb046a3b52047cdd9da1f4b30f8a39c5063c8bae515e252"
+"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
+"checksum ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "eb9e9b8cde282a9fe6a42dd4681319bfb63f121b8a8ee9439c6f4107e58a46f7"
+"checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d"
+"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
+"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
+"checksum serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)" = "aa5f7c20820475babd2c077c3ab5f8c77a31c15e16ea38687b4c02d3e48680f4"
+"checksum serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)" = "58fc82bec244f168b23d1963b45c8bf5726e9a15a9d146a067f9081aeed2de79"
+"checksum serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)" = "5a23aa71d4a4d43fdbfaac00eff68ba8a06a51759a89ac3304323e800c4dd40d"
+"checksum syn 0.15.31 (registry+https://github.com/rust-lang/crates.io-index)" = "d2b4cfac95805274c6afdb12d8f770fa2d27c045953e7b630a81801953699a9a"
+"checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f"
+"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
+"checksum winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "f10e386af2b13e47c89e7236a7a14a086791a2b88ebad6df9bf42040195cf770"
+"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/2019-worms/Cargo.toml b/2019-worms/Cargo.toml
new file mode 100644
index 0000000..e7e33fc
--- /dev/null
+++ b/2019-worms/Cargo.toml
@@ -0,0 +1,23 @@
+[package]
+name = "steam-powered-wyrm"
+version = "1.0.0"
+edition = "2018"
+
+[dependencies]
+serde = { version = "1.0.90", features = ["derive"] }
+serde_json = "1.0.39"
+time = "0.1.42"
+num-traits = "0.2.6"
+arrayvec = "0.4.10"
+fnv = "1.0.6"
+rayon = "1.1.0"
+
+[profile.release]
+# debug = true
+# debug-assertions = true
+# overflow-checks = true
+
+[features]
+logging = []
+
+default = []
diff --git a/2019-worms/Makefile b/2019-worms/Makefile
new file mode 100644
index 0000000..3f3b532
--- /dev/null
+++ b/2019-worms/Makefile
@@ -0,0 +1,16 @@
+build:
+ cargo build --release
+
+test:
+ cargo test --release
+
+profile:
+ cargo flamegraph --bin benchmark
+
+clean:
+ cargo clean
+
+submission.zip:
+ zip --filesync -r9 submission.zip bot.json Cargo.lock Cargo.toml src
+
+.PHONY: build test profile clean submission.zip
diff --git a/2019-worms/README.md b/2019-worms/README.md
new file mode 100644
index 0000000..a0c3008
--- /dev/null
+++ b/2019-worms/README.md
@@ -0,0 +1,81 @@
+# Steam Powered Wyrm
+
+This is an entry to the 2019 Entelect Challenge.
+
+## Environment Setup
+
+The Rust compiler toolchain can be downloaded from the Rust project
+website.
+
+https://www.rust-lang.org/en-US/install.html
+
+The project requires these versions of the toolchain (or later).
+
+- cargo 1.34.0
+- rustc 1.34.0
+
+## Building
+
+Rust's official build tool is called Cargo. It will download
+dependencies and call the Rust compiler as required. Dependencies are
+configured in [Cargo.toml](./Cargo.toml).
+
+Cargo needs to be called from the root of the bot (the folder with the
+Cargo.toml file).
+
+```sh
+cargo build --release
+```
+
+## Running Tests
+
+Rust has support for unit testing built into the language. Any
+functions marked with the `#[test]` annotation are considered tests.
+
+Tests can be run using Cargo:
+
+```sh
+cargo test
+```
+
+More information on how to write tests is available in
+[The Rust Programming Language](https://doc.rust-lang.org/book/ch11-00-testing.html).
+
+## Exporting the compiled executable
+
+By default, Rust produces statically linked binaries, so you can just
+copy out the executable file from the target directory and put it
+wherever you want.
+
+The name of the binary will match the name of the binary crate in
+Cargo.toml.
+
+Note: This binary has been built for the platform that it was compiled
+on. In other words, if it was compiled on 64 bit Linux, you cannot
+copy the binary to a Windows machine and run it. You WILL be able to
+copy the binary between similar 64 bit Linux machines.
+
+The machine that the compiled binary is run on does not need to have
+the Rust toolchain installed.
+
+```sh
+cp ./target/release/<botFileName> <dest>
+```
+
+## Running
+
+The compiled binary can be executed directly.
+
+```sh
+./target/release/<botFileName>
+```
+
+For convenience in development, you can compile and run through Cargo.
+
+Note: This is not recommended for the tournament servers, since there
+is a small runtime cost in Cargo checking that the compiled binary is
+up to date before running it.
+
+```sh
+cargo run --release
+```
diff --git a/2019-worms/bot.json b/2019-worms/bot.json
new file mode 100644
index 0000000..5578730
--- /dev/null
+++ b/2019-worms/bot.json
@@ -0,0 +1,8 @@
+{
+ "author": "Justin Wernick",
+ "email": "justin@worthe-it.co.za",
+ "nickName": "Steam Powered Wyrm",
+ "botLocation": "/target/release/",
+ "botFileName": "steam-powered-wyrm",
+ "botLanguage": "rust"
+}
diff --git a/2019-worms/src/bin/benchmark.rs b/2019-worms/src/bin/benchmark.rs
new file mode 100644
index 0000000..84e869e
--- /dev/null
+++ b/2019-worms/src/bin/benchmark.rs
@@ -0,0 +1,22 @@
+use std::path::Path;
+
+use time::{Duration, PreciseTime};
+
+use steam_powered_wyrm::game;
+use steam_powered_wyrm::json;
+use steam_powered_wyrm::strategy::{choose_move, ScoreConfig};
+
+fn main() {
+ let max_time = Duration::milliseconds(19950);
+ let start_time = PreciseTime::now();
+
+ match json::read_state_from_json_file(&Path::new(&format!("./tests/example-state.json"))) {
+ Ok(json_state) => {
+ let new_board = game::GameBoard::new(json_state);
+ let _ = choose_move(&new_board, &ScoreConfig::default(), start_time, max_time);
+ }
+ Err(e) => {
+ eprintln!("WARN: State file could not be parsed: {}", e);
+ }
+ };
+}
diff --git a/2019-worms/src/bin/explore-config.rs b/2019-worms/src/bin/explore-config.rs
new file mode 100644
index 0000000..5fb599a
--- /dev/null
+++ b/2019-worms/src/bin/explore-config.rs
@@ -0,0 +1,116 @@
+use std::path::Path;
+
+use rayon::prelude::*;
+
+use steam_powered_wyrm::game;
+use steam_powered_wyrm::json;
+use steam_powered_wyrm::strategy::{choose_move_with_normalized_perf, ScoreConfig};
+
+fn main() {
+ let initial_state = game::GameBoard::new(
+ json::read_state_from_json_file(&Path::new(&format!("./tests/example-state.json")))
+ .unwrap(),
+ );
+ let depth = 1000;
+
+ let configs = ScoreConfigTrials {
+ max_health_weight: vec![50., 150.],
+ total_health_weight: vec![5., 20.],
+ points_weight: vec![1.],
+ victory_weight: vec![3000., 3500., 4000., 4500., 5000., 5500., 6000., 7000.],
+ snowball_weight: vec![10.],
+ bomb_weight: vec![0.],
+ explore_exploit_weight: vec![10., 500.],
+ }
+ .reify();
+
+ eprintln!("{} configs being tested", configs.len());
+
+ let mut victories = vec![0; configs.len()];
+
+ for i in 0..configs.len() {
+ eprintln!("Progress: {} of {}", i, configs.len());
+
+ let outcomes: Vec<(usize, game::SimulationOutcome)> = (i + 1..configs.len())
+ .collect::<Vec<usize>>()
+ .par_iter()
+ .map(|j| {
+ let mut state = initial_state.clone();
+
+ while state.outcome == game::SimulationOutcome::Continue {
+ let commands = [
+ choose_move_with_normalized_perf(&state, &configs[i], 0, depth),
+ choose_move_with_normalized_perf(&state, &configs[*j], 1, depth),
+ ];
+ state.simulate(commands);
+ }
+
+ (*j, state.outcome)
+ })
+ .collect();
+ for (j, outcome) in outcomes {
+ match outcome {
+ game::SimulationOutcome::PlayerWon(0) => victories[i] += 1,
+ game::SimulationOutcome::PlayerWon(1) => victories[j] += 1,
+ _ => {}
+ };
+ }
+ }
+
+ println!("victories, max_health_weight, total_health_weight, points_weight, victory_weight, snowball_weight, bomb_weight, explore_exploit_weight");
+
+ for (config, victories) in configs.into_iter().zip(victories.iter()) {
+ println!(
+ "{}, {}, {}, {}, {}, {}, {}, {}",
+ victories,
+ config.max_health_weight,
+ config.total_health_weight,
+ config.points_weight,
+ config.victory_weight,
+ config.snowball_weight,
+ config.bomb_weight,
+ config.explore_exploit_weight
+ );
+ }
+}
+
+pub struct ScoreConfigTrials {
+ pub max_health_weight: Vec<f32>,
+ pub total_health_weight: Vec<f32>,
+ pub points_weight: Vec<f32>,
+ pub victory_weight: Vec<f32>,
+ pub snowball_weight: Vec<f32>,
+ pub bomb_weight: Vec<f32>,
+ pub explore_exploit_weight: Vec<f32>,
+}
+
+impl ScoreConfigTrials {
+ fn reify(self) -> Vec<ScoreConfig> {
+ let mut result = Vec::new();
+ for max_health_weight in &self.max_health_weight {
+ for total_health_weight in &self.total_health_weight {
+ for points_weight in &self.points_weight {
+ for victory_weight in &self.victory_weight {
+ for snowball_weight in &self.snowball_weight {
+ for bomb_weight in &self.bomb_weight {
+ for explore_exploit_weight in &self.explore_exploit_weight {
+ result.push(ScoreConfig {
+ max_health_weight: *max_health_weight,
+ total_health_weight: *total_health_weight,
+ points_weight: *points_weight,
+ victory_weight: *victory_weight,
+ snowball_weight: *snowball_weight,
+ bomb_weight: *bomb_weight,
+ explore_exploit_weight: *explore_exploit_weight,
+ });
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ result
+ }
+}
diff --git a/2019-worms/src/command.rs b/2019-worms/src/command.rs
new file mode 100644
index 0000000..c6d6695
--- /dev/null
+++ b/2019-worms/src/command.rs
@@ -0,0 +1,73 @@
+use crate::geometry::Direction;
+use crate::geometry::Point2d;
+use std::fmt;
+
+#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
+pub struct Command {
+ pub worm: Option<i32>,
+ pub action: Action,
+}
+
+impl fmt::Display for Command {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ match self.worm {
+ Some(worm) => write!(f, "select {};{}", worm, self.action),
+ None => write!(f, "{}", self.action),
+ }
+ }
+}
+
+impl Command {
+ pub fn with_select(worm: i32, action: Action) -> Command {
+ Command {
+ worm: Some(worm),
+ action,
+ }
+ }
+
+ pub fn new(action: Action) -> Command {
+ Command { worm: None, action }
+ }
+}
+
+#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
+pub enum Action {
+ Move(Point2d),
+ Dig(Point2d),
+ Shoot(Direction),
+ Bomb(Point2d),
+ Snowball(Point2d),
+ DoNothing,
+}
+
+impl fmt::Display for Action {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ use Action::*;
+ match self {
+ Move(p) => write!(f, "move {} {}", p.x, p.y),
+ Dig(p) => write!(f, "dig {} {}", p.x, p.y),
+ Shoot(dir) => write!(f, "shoot {}", dir),
+ Bomb(p) => write!(f, "banana {} {}", p.x, p.y),
+ Snowball(p) => write!(f, "snowball {} {}", p.x, p.y),
+ DoNothing => write!(f, "nothing"),
+ }
+ }
+}
+
+impl Action {
+ pub fn is_attack(&self) -> bool {
+ use Action::*;
+ match self {
+ Shoot(_) | Bomb(_) => true,
+ _ => false,
+ }
+ }
+
+ pub fn is_snowball(&self) -> bool {
+ use Action::*;
+ match self {
+ Snowball(_) => true,
+ _ => false,
+ }
+ }
+}
diff --git a/2019-worms/src/constants.rs b/2019-worms/src/constants.rs
new file mode 100644
index 0000000..3f36db4
--- /dev/null
+++ b/2019-worms/src/constants.rs
@@ -0,0 +1,218 @@
+use crate::geometry::Vec2d;
+
+pub mod lava;
+pub use self::lava::*;
+
+pub const MAP_SIZE: usize = 33;
+pub const MAP_ROW_SIZE: [MapRow; MAP_SIZE] = [
+ MapRow {
+ start_bit: 0,
+ x_offset: 11,
+ },
+ MapRow {
+ start_bit: 11,
+ x_offset: 8,
+ },
+ MapRow {
+ start_bit: 28,
+ x_offset: 7,
+ },
+ MapRow {
+ start_bit: 47,
+ x_offset: 6,
+ },
+ MapRow {
+ start_bit: 68,
+ x_offset: 4,
+ },
+ MapRow {
+ start_bit: 93,
+ x_offset: 4,
+ },
+ MapRow {
+ start_bit: 118,
+ x_offset: 3,
+ },
+ MapRow {
+ start_bit: 145,
+ x_offset: 2,
+ },
+ MapRow {
+ start_bit: 174,
+ x_offset: 1,
+ },
+ MapRow {
+ start_bit: 205,
+ x_offset: 1,
+ },
+ MapRow {
+ start_bit: 236,
+ x_offset: 1,
+ },
+ MapRow {
+ start_bit: 267,
+ x_offset: 0,
+ },
+ MapRow {
+ start_bit: 300,
+ x_offset: 0,
+ },
+ MapRow {
+ start_bit: 333,
+ x_offset: 0,
+ },
+ MapRow {
+ start_bit: 366,
+ x_offset: 0,
+ },
+ MapRow {
+ start_bit: 399,
+ x_offset: 0,
+ },
+ MapRow {
+ start_bit: 432,
+ x_offset: 0,
+ },
+ MapRow {
+ start_bit: 465,
+ x_offset: 0,
+ },
+ MapRow {
+ start_bit: 498,
+ x_offset: 0,
+ },
+ MapRow {
+ start_bit: 531,
+ x_offset: 0,
+ },
+ MapRow {
+ start_bit: 564,
+ x_offset: 0,
+ },
+ MapRow {
+ start_bit: 597,
+ x_offset: 0,
+ },
+ MapRow {
+ start_bit: 630,
+ x_offset: 1,
+ },
+ MapRow {
+ start_bit: 661,
+ x_offset: 1,
+ },
+ MapRow {
+ start_bit: 692,
+ x_offset: 1,
+ },
+ MapRow {
+ start_bit: 723,
+ x_offset: 2,
+ },
+ MapRow {
+ start_bit: 752,
+ x_offset: 3,
+ },
+ MapRow {
+ start_bit: 779,
+ x_offset: 4,
+ },
+ MapRow {
+ start_bit: 804,
+ x_offset: 4,
+ },
+ MapRow {
+ start_bit: 829,
+ x_offset: 6,
+ },
+ MapRow {
+ start_bit: 850,
+ x_offset: 7,
+ },
+ MapRow {
+ start_bit: 869,
+ x_offset: 8,
+ },
+ MapRow {
+ start_bit: 886,
+ x_offset: 11,
+ },
+];
+pub const MAP_BITSIZE: usize = 897;
+pub const MAP_U64S: usize = 15;
+
+pub struct MapRow {
+ pub start_bit: usize,
+ pub x_offset: usize,
+}
+
+impl MapRow {
+ pub fn len(&self) -> usize {
+ MAP_SIZE - 2 * self.x_offset
+ }
+
+ pub fn is_empty(&self) -> bool {
+ self.len() == 0
+ }
+}
+
+pub const HEALTH_PACK_VALUE: i32 = 10;
+
+pub const SHOOT_RANGE: i8 = 4;
+pub const SHOOT_RANGE_DIAGONAL: i8 = 3;
+pub const SHOOT_DAMAGE: i32 = 8;
+
+pub const BOMB_RANGE: i8 = 5;
+pub const BOMB_DAMAGED_SPACES: usize = 13;
+pub const BOMB_DAMAGE_RANGE: i8 = 2;
+pub const BOMB_DAMAGES: [(Vec2d, i32); BOMB_DAMAGED_SPACES] = [
+ (Vec2d::new(0, -2), 7),
+ (Vec2d::new(2, 0), 7),
+ (Vec2d::new(0, 2), 7),
+ (Vec2d::new(-2, 0), 7),
+ (Vec2d::new(1, -1), 11),
+ (Vec2d::new(1, 1), 11),
+ (Vec2d::new(-1, 1), 11),
+ (Vec2d::new(-1, -1), 11),
+ (Vec2d::new(0, -1), 13),
+ (Vec2d::new(1, 0), 13),
+ (Vec2d::new(0, 1), 13),
+ (Vec2d::new(-1, 0), 13),
+ (Vec2d::new(0, 0), 20),
+];
+
+pub const SNOWBALL_RANGE: i8 = 5;
+pub const SNOWBALL_FREEZES_SPACES: usize = 9;
+pub const SNOWBALL_FREEZE_RANGE: i8 = 1;
+pub const SNOWBALL_FREEZES: [Vec2d; SNOWBALL_FREEZES_SPACES] = [
+ Vec2d::new(-1, -1),
+ Vec2d::new(0, -1),
+ Vec2d::new(1, -1),
+ Vec2d::new(-1, 0),
+ Vec2d::new(0, 0),
+ Vec2d::new(1, 0),
+ Vec2d::new(-1, 1),
+ Vec2d::new(0, 1),
+ Vec2d::new(1, 1),
+];
+
+pub const MISSED_ATTACK_SCORE: i32 = 2;
+pub const ATTACK_SCORE_MULTIPLIER: i32 = 2;
+pub const KILL_SCORE: i32 = 40;
+pub const DIG_SCORE: i32 = 7;
+pub const MOVE_SCORE: i32 = 5;
+pub const INVALID_COMMAND_SCORE_PENALTY: i32 = 4;
+
+pub const STARTING_BOMBS: u8 = 3;
+pub const STARTING_SNOWBALLS: u8 = 3;
+
+pub const COLLISION_DAMAGE: i32 = 20;
+
+pub const LAVA_DAMAGE: i32 = 3;
+
+pub const LAVA_ROUND_START: usize = 100;
+pub const LAVA_ROUND_END: usize = 350;
+pub const MAX_ROUNDS: usize = 400;
+
+pub const FREEZE_DURATION: u8 = 5;
+pub const FREEZE_SCORE: i32 = 17;
diff --git a/2019-worms/src/constants/lava.rs b/2019-worms/src/constants/lava.rs
new file mode 100644
index 0000000..238d668
--- /dev/null
+++ b/2019-worms/src/constants/lava.rs
@@ -0,0 +1,6225 @@
+use crate::constants::*;
+use crate::game::map::Map;
+
+#[allow(clippy::all)]
+pub const LAVA_MAP: [Map; MAX_ROUNDS as usize + 1] = [
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ ],
+ },
+ Map {
+ cells: [
+ 0xE0003E003FDF,
+ 0x60000038000038,
+ 0xE00000030000,
+ 0x180000003800,
+ 0x180000000C00,
+ 0x600000003000,
+ 0x80000000C000,
+ 0x6000000020000,
+ 0x180000000C0000,
+ 0x60000000300000,
+ 0x38000000300000,
+ 0x18000000E0000,
+ 0x3800003800000C00,
+ 0xF7F800F8000E0000,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xE0003E003FFF,
+ 0x60000038000038,
+ 0xE00000030000,
+ 0x180000003800,
+ 0x180000000C00,
+ 0x600000003000,
+ 0x180000000C000,
+ 0x6000000030000,
+ 0x180000000C0000,
+ 0x60000000300000,
+ 0x38000000300000,
+ 0x18000000E0000,
+ 0x3800003800000C00,
+ 0xFFF800F8000E0000,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xE0003E003FFF,
+ 0x60000038000038,
+ 0xE00000030000,
+ 0x180000003800,
+ 0x180000000C00,
+ 0x600000003000,
+ 0x180000000C000,
+ 0x6000000030000,
+ 0x180000000C0000,
+ 0x60000000300000,
+ 0x38000000300000,
+ 0x18000000E0000,
+ 0x3800003800000C00,
+ 0xFFF800F8000E0000,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x1E0003F007FFF,
+ 0x6000003800003C,
+ 0xF00000070000,
+ 0x180000003800,
+ 0x1C0000001C00,
+ 0x600000003000,
+ 0x180000000C000,
+ 0x6000000030000,
+ 0x180000000C0000,
+ 0x70000000700000,
+ 0x38000000300000,
+ 0x1C000001E0000,
+ 0x7800003800000C00,
+ 0xFFFC01F8000F0000,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x1E0003F007FFF,
+ 0x6000003800003C,
+ 0xF00000070000,
+ 0x180000003800,
+ 0x1C0000001C00,
+ 0x600000003000,
+ 0x180000000C000,
+ 0x6000000030000,
+ 0x180000000C0000,
+ 0x70000000700000,
+ 0x38000000300000,
+ 0x1C000001E0000,
+ 0x7800003800000C00,
+ 0xFFFC01F8000F0000,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x1E0003F007FFF,
+ 0x6000003800003C,
+ 0xF00000070000,
+ 0x180000003800,
+ 0x1C0000001C00,
+ 0x600000003000,
+ 0x180000000C000,
+ 0x6000000030000,
+ 0x180000000C0000,
+ 0x70000000700000,
+ 0x38000000300000,
+ 0x1C000001E0000,
+ 0x7800003800000C00,
+ 0xFFFC01F8000F0000,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x1F0007F007FFF,
+ 0xE000003C00007C,
+ 0xF00000078000,
+ 0x1C0000007800,
+ 0x1C0000001C00,
+ 0x600000003000,
+ 0x180000000C000,
+ 0x6000000030000,
+ 0x180000000C0000,
+ 0x70000000700000,
+ 0x3C000000700000,
+ 0x3C000001E0000,
+ 0x7C00007800000E00,
+ 0xFFFC01FC001F0000,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x1F0007F007FFF,
+ 0xF000007C00007C,
+ 0xF00000078000,
+ 0x1C0000007800,
+ 0x1C0000001C00,
+ 0x600000003000,
+ 0x180000000C000,
+ 0x6000000030000,
+ 0x180000000C0000,
+ 0x70000000700000,
+ 0x3C000000700000,
+ 0x3C000001E0000,
+ 0x7C00007C00001E00,
+ 0xFFFC01FC001F0000,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x1F0007F80FFFF,
+ 0xF000007C00007C,
+ 0xF00000078000,
+ 0x1C0000007800,
+ 0x3C0000001C00,
+ 0x600000003800,
+ 0x180000000C000,
+ 0x6000000030000,
+ 0x380000000C0000,
+ 0x70000000780000,
+ 0x3C000000700000,
+ 0x3C000001E0000,
+ 0x7C00007C00001E00,
+ 0xFFFE03FC001F0000,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x1F0007F80FFFF,
+ 0xF000007C00007C,
+ 0xF00000078000,
+ 0x1C0000007800,
+ 0x3C0000001C00,
+ 0x600000003800,
+ 0x180000000C000,
+ 0x6000000030000,
+ 0x380000000C0000,
+ 0x70000000780000,
+ 0x3C000000700000,
+ 0x3C000001E0000,
+ 0x7C00007C00001E00,
+ 0xFFFE03FC001F0000,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x1F0007F80FFFF,
+ 0xF000007C00007C,
+ 0xF00000078000,
+ 0x1C0000007800,
+ 0x3C0000001C00,
+ 0x600000003800,
+ 0x180000000C000,
+ 0x6000000030000,
+ 0x380000000C0000,
+ 0x70000000780000,
+ 0x3C000000700000,
+ 0x3C000001E0000,
+ 0x7C00007C00001E00,
+ 0xFFFE03FC001F0000,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x1F0007FC1FFFF,
+ 0xF000007C00007C,
+ 0xF00000078000,
+ 0x1C0000007800,
+ 0x3C0000001C00,
+ 0x700000007800,
+ 0x180000000C000,
+ 0x6000000030000,
+ 0x3C0000001C0000,
+ 0x70000000780000,
+ 0x3C000000700000,
+ 0x3C000001E0000,
+ 0x7C00007C00001E00,
+ 0xFFFF07FC001F0000,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x3F0007FC1FFFF,
+ 0xF000007C00007E,
+ 0x1F00000078000,
+ 0x1C0000007C00,
+ 0x3C0000001C00,
+ 0x700000007800,
+ 0x180000000C000,
+ 0x6000000030000,
+ 0x3C0000001C0000,
+ 0x70000000780000,
+ 0x7C000000700000,
+ 0x3C000001F0000,
+ 0xFC00007C00001E00,
+ 0xFFFF07FC001F8000,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x3F800FFC1FFFF,
+ 0xF000007C00007E,
+ 0x1F00000078000,
+ 0x3C0000007C00,
+ 0x3C0000001E00,
+ 0x700000007800,
+ 0x180000000C000,
+ 0x6000000030000,
+ 0x3C0000001C0000,
+ 0xF0000000780000,
+ 0x7C000000780000,
+ 0x3C000001F0000,
+ 0xFC00007C00001E00,
+ 0xFFFF07FE003F8000,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x3F800FFE3FFFF,
+ 0xF000007C00007E,
+ 0x1F00000078000,
+ 0x3C0000007C00,
+ 0x3C0000001E00,
+ 0xF00000007800,
+ 0x180000000E000,
+ 0xE000000030000,
+ 0x3C0000001E0000,
+ 0xF0000000780000,
+ 0x7C000000780000,
+ 0x3C000001F0000,
+ 0xFC00007C00001E00,
+ 0xFFFF8FFE003F8000,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x3F800FFE3FFFF,
+ 0xF000007C00007E,
+ 0x1F00000078000,
+ 0x3C0000007C00,
+ 0x3C0000001E00,
+ 0xF00000007800,
+ 0x180000000E000,
+ 0xE000000030000,
+ 0x3C0000001E0000,
+ 0xF0000000780000,
+ 0x7C000000780000,
+ 0x3C000001F0000,
+ 0xFC00007C00001E00,
+ 0xFFFF8FFE003F8000,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x3F800FFFFFFFF,
+ 0xF000007E0000FE,
+ 0x1F800000F8000,
+ 0x3C0000007C00,
+ 0x3C0000001E00,
+ 0xF00000007800,
+ 0x3C0000001E000,
+ 0xF000000078000,
+ 0x3C0000001E0000,
+ 0xF0000000780000,
+ 0x7C000000780000,
+ 0x3E000003F0000,
+ 0xFE0000FC00001E00,
+ 0xFFFFFFFE003F8000,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x3F800FFFFFFFF,
+ 0xF000007E0000FE,
+ 0x1F800000F8000,
+ 0x3C0000007C00,
+ 0x3C0000001E00,
+ 0xF00000007800,
+ 0x3C0000001E000,
+ 0xF000000078000,
+ 0x3C0000001E0000,
+ 0xF0000000780000,
+ 0x7C000000780000,
+ 0x3E000003F0000,
+ 0xFE0000FC00001E00,
+ 0xFFFFFFFE003F8000,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x3FC01FFFFFFFF,
+ 0x1F80000FE0000FE,
+ 0x1F800000FC000,
+ 0x3C0000007C00,
+ 0x3E0000003E00,
+ 0xF00000007800,
+ 0x3C0000001E000,
+ 0xF000000078000,
+ 0x3C0000001E0000,
+ 0xF8000000F80000,
+ 0x7C000000780000,
+ 0x7E000003F0000,
+ 0xFE0000FE00003F00,
+ 0xFFFFFFFF007F8000,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x3FC01FFFFFFFF,
+ 0x1F80000FE0000FE,
+ 0x1F800000FC000,
+ 0x3C0000007C00,
+ 0x3E0000003E00,
+ 0xF00000007800,
+ 0x3C0000001E000,
+ 0xF000000078000,
+ 0x3C0000001E0000,
+ 0xF8000000F80000,
+ 0x7C000000780000,
+ 0x7E000003F0000,
+ 0xFE0000FE00003F00,
+ 0xFFFFFFFF007F8000,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x7FC01FFFFFFFF,
+ 0x1F80000FE0000FF,
+ 0x1F800000FC000,
+ 0x3E000000FC00,
+ 0x3E0000003E00,
+ 0xF00000007800,
+ 0x3C0000001E000,
+ 0xF000000078000,
+ 0x3C0000001E0000,
+ 0xF8000000F80000,
+ 0x7E000000F80000,
+ 0x7E000003F0000,
+ 0xFE0000FE00003F00,
+ 0xFFFFFFFF007FC001,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x7FC01FFFFFFFF,
+ 0x1F80000FE0000FF,
+ 0x1F800000FC000,
+ 0x3E000000FC00,
+ 0x3E0000003E00,
+ 0xF00000007800,
+ 0x3C0000001E000,
+ 0xF000000078000,
+ 0x3C0000001E0000,
+ 0xF8000000F80000,
+ 0x7E000000F80000,
+ 0x7E000003F0000,
+ 0xFE0000FE00003F00,
+ 0xFFFFFFFF007FC001,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x7FC01FFFFFFFF,
+ 0x1F80000FE0000FF,
+ 0x1F800000FC000,
+ 0x3E000000FC00,
+ 0x3E0000003E00,
+ 0xF00000007800,
+ 0x3C0000001E000,
+ 0xF000000078000,
+ 0x3C0000001E0000,
+ 0xF8000000F80000,
+ 0x7E000000F80000,
+ 0x7E000003F0000,
+ 0xFE0000FE00003F00,
+ 0xFFFFFFFF007FC001,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x7FE03FFFFFFFF,
+ 0x1F80000FE0000FF,
+ 0x1F800000FC000,
+ 0x3E000000FC00,
+ 0x7E0000003E00,
+ 0xF00000007C00,
+ 0x3C0000001E000,
+ 0xF000000078000,
+ 0x7C0000001E0000,
+ 0xF8000000FC0000,
+ 0x7E000000F80000,
+ 0x7E000003F0000,
+ 0xFE0000FE00003F00,
+ 0xFFFFFFFF80FFC001,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x7FE03FFFFFFFF,
+ 0x1F80000FE0000FF,
+ 0x1F800000FC000,
+ 0x3E000000FC00,
+ 0x7E0000003E00,
+ 0xF00000007C00,
+ 0x3C0000001E000,
+ 0xF000000078000,
+ 0x7C0000001E0000,
+ 0xF8000000FC0000,
+ 0x7E000000F80000,
+ 0x7E000003F0000,
+ 0xFE0000FE00003F00,
+ 0xFFFFFFFF80FFC001,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x7FE03FFFFFFFF,
+ 0x1F80000FF0001FF,
+ 0x3F800000FC000,
+ 0x3E000000FE00,
+ 0x7E0000003E00,
+ 0xF00000007C00,
+ 0x3C0000001E000,
+ 0xF000000078000,
+ 0x7C0000001E0000,
+ 0xF8000000FC0000,
+ 0xFE000000F80000,
+ 0x7E000003F8000,
+ 0xFF0001FE00003F00,
+ 0xFFFFFFFF80FFC001,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x7FE03FFFFFFFF,
+ 0x1F80000FF0001FF,
+ 0x3F800000FC000,
+ 0x3E000000FE00,
+ 0x7E0000003E00,
+ 0xF00000007C00,
+ 0x3C0000001E000,
+ 0xF000000078000,
+ 0x7C0000001E0000,
+ 0xF8000000FC0000,
+ 0xFE000000F80000,
+ 0x7E000003F8000,
+ 0xFF0001FE00003F00,
+ 0xFFFFFFFF80FFC001,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x800FFF07FFFFFFFF,
+ 0x1F80000FF0001FF,
+ 0x3F800000FC000,
+ 0x7E000000FE00,
+ 0x7E0000003F00,
+ 0xF8000000FC00,
+ 0x3C0000001E000,
+ 0xF000000078000,
+ 0x7E0000003E0000,
+ 0x1F8000000FC0000,
+ 0xFE000000FC0000,
+ 0x7E000003F8000,
+ 0xFF0001FE00003F00,
+ 0xFFFFFFFFC1FFE003,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x800FFF07FFFFFFFF,
+ 0x1FC0001FF0001FF,
+ 0x3FC00001FC000,
+ 0x7E000000FE00,
+ 0x7E0000003F00,
+ 0xF8000000FC00,
+ 0x3C0000001E000,
+ 0xF000000078000,
+ 0x7E0000003E0000,
+ 0x1F8000000FC0000,
+ 0xFE000000FC0000,
+ 0x7F000007F8000,
+ 0xFF0001FF00007F00,
+ 0xFFFFFFFFC1FFE003,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x800FFF07FFFFFFFF,
+ 0x1FC0001FF0001FF,
+ 0x3FC00001FC000,
+ 0x7E000000FE00,
+ 0x7E0000003F00,
+ 0xF8000000FC00,
+ 0x3C0000001E000,
+ 0xF000000078000,
+ 0x7E0000003E0000,
+ 0x1F8000000FC0000,
+ 0xFE000000FC0000,
+ 0x7F000007F8000,
+ 0xFF0001FF00007F00,
+ 0xFFFFFFFFC1FFE003,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x800FFF8FFFFFFFFF,
+ 0x3FC0001FF0001FF,
+ 0x3FC00001FE000,
+ 0x7E000000FE00,
+ 0x7E0000003F00,
+ 0x1F8000000FC00,
+ 0x3C0000001F000,
+ 0x1F000000078000,
+ 0x7E0000003F0000,
+ 0x1F8000000FC0000,
+ 0xFE000000FC0000,
+ 0xFF000007F8000,
+ 0xFF0001FF00007F80,
+ 0xFFFFFFFFE3FFE003,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x800FFFDFFFFFFFFF,
+ 0x3FC0001FF0001FF,
+ 0x3FC00001FE000,
+ 0x7E000000FE00,
+ 0x7E0000003F00,
+ 0x1F8000000FC00,
+ 0x3E0000003F000,
+ 0x1F8000000F8000,
+ 0x7E0000003F0000,
+ 0x1F8000000FC0000,
+ 0xFE000000FC0000,
+ 0xFF000007F8000,
+ 0xFF0001FF00007F80,
+ 0xFFFFFFFFF7FFE003,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0x800FFFFFFFFFFFFF,
+ 0x3FC0001FF0001FF,
+ 0x3FC00001FE000,
+ 0x7E000000FE00,
+ 0x7E0000003F00,
+ 0x1F8000000FC00,
+ 0x7E0000003F000,
+ 0x1F8000000FC000,
+ 0x7E0000003F0000,
+ 0x1F8000000FC0000,
+ 0xFE000000FC0000,
+ 0xFF000007F8000,
+ 0xFF0001FF00007F80,
+ 0xFFFFFFFFFFFFE003,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xC01FFFFFFFFFFFFF,
+ 0x3FC0001FF8003FF,
+ 0x3FC00001FE000,
+ 0x7F000001FE00,
+ 0x7F0000007F00,
+ 0x1F8000000FC00,
+ 0x7E0000003F000,
+ 0x1F8000000FC000,
+ 0x7E0000003F0000,
+ 0x1FC000001FC0000,
+ 0xFF000001FC0000,
+ 0xFF000007F8000,
+ 0xFF8003FF00007F80,
+ 0xFFFFFFFFFFFFF007,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xC01FFFFFFFFFFFFF,
+ 0x3FC0001FF8003FF,
+ 0x3FC00001FE000,
+ 0x7F000001FE00,
+ 0x7F0000007F00,
+ 0x1F8000000FC00,
+ 0x7E0000003F000,
+ 0x1F8000000FC000,
+ 0x7E0000003F0000,
+ 0x1FC000001FC0000,
+ 0xFF000001FC0000,
+ 0xFF000007F8000,
+ 0xFF8003FF00007F80,
+ 0xFFFFFFFFFFFFF007,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xC01FFFFFFFFFFFFF,
+ 0x3FC0001FF8003FF,
+ 0x3FC00001FE000,
+ 0x7F000001FE00,
+ 0x7F0000007F00,
+ 0x1F8000000FC00,
+ 0x7E0000003F000,
+ 0x1F8000000FC000,
+ 0x7E0000003F0000,
+ 0x1FC000001FC0000,
+ 0xFF000001FC0000,
+ 0xFF000007F8000,
+ 0xFF8003FF00007F80,
+ 0xFFFFFFFFFFFFF007,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xC01FFFFFFFFFFFFF,
+ 0x3FC0001FF8003FF,
+ 0x3FC00001FE000,
+ 0x7F000001FE00,
+ 0x7F0000007F00,
+ 0x1F8000000FC00,
+ 0x7E0000003F000,
+ 0x1F8000000FC000,
+ 0x7E0000003F0000,
+ 0x1FC000001FC0000,
+ 0xFF000001FC0000,
+ 0xFF000007F8000,
+ 0xFF8003FF00007F80,
+ 0xFFFFFFFFFFFFF007,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xC01FFFFFFFFFFFFF,
+ 0x3FC0001FF8003FF,
+ 0x3FC00001FE000,
+ 0x7F000001FE00,
+ 0x7F0000007F00,
+ 0x1F8000000FC00,
+ 0x7E0000003F000,
+ 0x1F8000000FC000,
+ 0x7E0000003F0000,
+ 0x1FC000001FC0000,
+ 0xFF000001FC0000,
+ 0xFF000007F8000,
+ 0xFF8003FF00007F80,
+ 0xFFFFFFFFFFFFF007,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xE03FFFFFFFFFFFFF,
+ 0x3FE0003FF8003FF,
+ 0x7FC00001FE000,
+ 0x7F000001FF00,
+ 0xFF0000007F00,
+ 0x1F8000000FE00,
+ 0x7E0000003F000,
+ 0x1F8000000FC000,
+ 0xFE0000003F0000,
+ 0x1FC000001FE0000,
+ 0x1FF000001FC0000,
+ 0xFF000007FC000,
+ 0xFF8003FF8000FF80,
+ 0xFFFFFFFFFFFFF80F,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xE03FFFFFFFFFFFFF,
+ 0x3FE0003FF8003FF,
+ 0x7FC00001FE000,
+ 0x7F000001FF00,
+ 0xFF0000007F00,
+ 0x1F8000000FE00,
+ 0x7E0000003F000,
+ 0x1F8000000FC000,
+ 0xFE0000003F0000,
+ 0x1FC000001FE0000,
+ 0x1FF000001FC0000,
+ 0xFF000007FC000,
+ 0xFF8003FF8000FF80,
+ 0xFFFFFFFFFFFFF80F,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xE03FFFFFFFFFFFFF,
+ 0x7FE0003FF8003FF,
+ 0x7FE00003FF000,
+ 0x7F000001FF00,
+ 0xFF0000007F00,
+ 0x1F8000000FE00,
+ 0x7E0000003F000,
+ 0x1F8000000FC000,
+ 0xFE0000003F0000,
+ 0x1FC000001FE0000,
+ 0x1FF000001FC0000,
+ 0x1FF80000FFC000,
+ 0xFF8003FF8000FFC0,
+ 0xFFFFFFFFFFFFF80F,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xE03FFFFFFFFFFFFF,
+ 0x7FE0003FFC007FF,
+ 0x7FE00003FF000,
+ 0xFF000001FF00,
+ 0xFF0000007F80,
+ 0x1F8000000FE00,
+ 0x7E0000003F000,
+ 0x1F8000000FC000,
+ 0xFE0000003F0000,
+ 0x3FC000001FE0000,
+ 0x1FF000001FE0000,
+ 0x1FF80000FFC000,
+ 0xFFC007FF8000FFC0,
+ 0xFFFFFFFFFFFFF80F,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xF07FFFFFFFFFFFFF,
+ 0x7FE0003FFC007FF,
+ 0x7FE00003FF000,
+ 0xFF000001FF00,
+ 0xFF0000007F80,
+ 0x1FC000001FE00,
+ 0x7E0000003F000,
+ 0x1F8000000FC000,
+ 0xFF0000007F0000,
+ 0x3FC000001FE0000,
+ 0x1FF000001FE0000,
+ 0x1FF80000FFC000,
+ 0xFFC007FF8000FFC0,
+ 0xFFFFFFFFFFFFFC1F,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xF07FFFFFFFFFFFFF,
+ 0x7FE0003FFC007FF,
+ 0x7FE00003FF000,
+ 0xFF000001FF00,
+ 0xFF0000007F80,
+ 0x1FC000001FE00,
+ 0x7E0000003F000,
+ 0x1F8000000FC000,
+ 0xFF0000007F0000,
+ 0x3FC000001FE0000,
+ 0x1FF000001FE0000,
+ 0x1FF80000FFC000,
+ 0xFFC007FF8000FFC0,
+ 0xFFFFFFFFFFFFFC1F,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xF07FFFFFFFFFFFFF,
+ 0x7FE0003FFC007FF,
+ 0x7FE00003FF000,
+ 0xFF000001FF00,
+ 0xFF0000007F80,
+ 0x1FC000001FE00,
+ 0x7E0000003F000,
+ 0x1F8000000FC000,
+ 0xFF0000007F0000,
+ 0x3FC000001FE0000,
+ 0x1FF000001FE0000,
+ 0x1FF80000FFC000,
+ 0xFFC007FF8000FFC0,
+ 0xFFFFFFFFFFFFFC1F,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xF8FFFFFFFFFFFFFF,
+ 0x7FE0003FFC007FF,
+ 0x7FE00003FF000,
+ 0xFF000001FF00,
+ 0xFF0000007F80,
+ 0x3FC000001FE00,
+ 0x7E0000003F800,
+ 0x3F8000000FC000,
+ 0xFF0000007F8000,
+ 0x3FC000001FE0000,
+ 0x1FF000001FE0000,
+ 0x1FF80000FFC000,
+ 0xFFC007FF8000FFC0,
+ 0xFFFFFFFFFFFFFE3F,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xF8FFFFFFFFFFFFFF,
+ 0x7FE0003FFC007FF,
+ 0x7FE00003FF000,
+ 0xFF000001FF00,
+ 0xFF0000007F80,
+ 0x3FC000001FE00,
+ 0x7E0000003F800,
+ 0x3F8000000FC000,
+ 0xFF0000007F8000,
+ 0x3FC000001FE0000,
+ 0x1FF000001FE0000,
+ 0x1FF80000FFC000,
+ 0xFFC007FF8000FFC0,
+ 0xFFFFFFFFFFFFFE3F,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FF0007FFE00FFF,
+ 0x7FE00003FF000,
+ 0xFF800003FF00,
+ 0xFF800000FF80,
+ 0x3FC000001FE00,
+ 0xFF0000007F800,
+ 0x3FC000001FE000,
+ 0xFF0000007F8000,
+ 0x3FE000003FE0000,
+ 0x1FF800003FE0000,
+ 0x1FF80000FFC000,
+ 0xFFE00FFFC001FFC0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FF0007FFE00FFF,
+ 0x7FE00003FF000,
+ 0xFF800003FF00,
+ 0xFF800000FF80,
+ 0x3FC000001FE00,
+ 0xFF0000007F800,
+ 0x3FC000001FE000,
+ 0xFF0000007F8000,
+ 0x3FE000003FE0000,
+ 0x1FF800003FE0000,
+ 0x1FF80000FFC000,
+ 0xFFE00FFFC001FFC0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FF0007FFE00FFF,
+ 0x7FE00003FF000,
+ 0xFF800003FF00,
+ 0xFF800000FF80,
+ 0x3FC000001FE00,
+ 0xFF0000007F800,
+ 0x3FC000001FE000,
+ 0xFF0000007F8000,
+ 0x3FE000003FE0000,
+ 0x1FF800003FE0000,
+ 0x1FF80000FFC000,
+ 0xFFE00FFFC001FFC0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFF0007FFE00FFF,
+ 0xFFE00003FF800,
+ 0xFF800003FF80,
+ 0xFF800000FF80,
+ 0x3FC000001FE00,
+ 0xFF0000007F800,
+ 0x3FC000001FE000,
+ 0xFF0000007F8000,
+ 0x3FE000003FE0000,
+ 0x3FF800003FE0000,
+ 0x3FF80000FFE000,
+ 0xFFE00FFFC001FFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFF0007FFE00FFF,
+ 0xFFE00003FF800,
+ 0xFF800003FF80,
+ 0xFF800000FF80,
+ 0x3FC000001FE00,
+ 0xFF0000007F800,
+ 0x3FC000001FE000,
+ 0xFF0000007F8000,
+ 0x3FE000003FE0000,
+ 0x3FF800003FE0000,
+ 0x3FF80000FFE000,
+ 0xFFE00FFFC001FFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFF0007FFE00FFF,
+ 0xFFF00007FF800,
+ 0xFF800003FF80,
+ 0xFF800000FF80,
+ 0x3FC000001FE00,
+ 0xFF0000007F800,
+ 0x3FC000001FE000,
+ 0xFF0000007F8000,
+ 0x3FE000003FE0000,
+ 0x3FF800003FE0000,
+ 0x3FFC0001FFE000,
+ 0xFFE00FFFC001FFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFF0007FFF01FFF,
+ 0xFFF00007FF800,
+ 0xFF800003FF80,
+ 0x1FF800000FF80,
+ 0x3FC000001FF00,
+ 0xFF0000007F800,
+ 0x3FC000001FE000,
+ 0x1FF0000007F8000,
+ 0x3FE000003FF0000,
+ 0x3FF800003FE0000,
+ 0x3FFC0001FFE000,
+ 0xFFF01FFFC001FFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFF0007FFF01FFF,
+ 0xFFF00007FF800,
+ 0xFF800003FF80,
+ 0x1FF800000FF80,
+ 0x3FC000001FF00,
+ 0xFF0000007F800,
+ 0x3FC000001FE000,
+ 0x1FF0000007F8000,
+ 0x3FE000003FF0000,
+ 0x3FF800003FE0000,
+ 0x3FFC0001FFE000,
+ 0xFFF01FFFC001FFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFF800FFFF01FFF,
+ 0xFFF00007FF800,
+ 0x1FF800003FF80,
+ 0x1FF800000FFC0,
+ 0x3FC000001FF00,
+ 0xFF0000007F800,
+ 0x3FC000001FE000,
+ 0x1FF0000007F8000,
+ 0x7FE000003FF0000,
+ 0x3FF800003FF0000,
+ 0x3FFC0001FFE000,
+ 0xFFF01FFFE003FFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFF800FFFF01FFF,
+ 0xFFF00007FF800,
+ 0x1FF800003FF80,
+ 0x1FF800000FFC0,
+ 0x3FC000001FF00,
+ 0xFF0000007F800,
+ 0x3FC000001FE000,
+ 0x1FF0000007F8000,
+ 0x7FE000003FF0000,
+ 0x3FF800003FF0000,
+ 0x3FFC0001FFE000,
+ 0xFFF01FFFE003FFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFF800FFFF83FFF,
+ 0xFFF00007FF800,
+ 0x1FF800003FF80,
+ 0x1FF800000FFC0,
+ 0x3FE000003FF00,
+ 0xFF0000007F800,
+ 0x3FC000001FE000,
+ 0x1FF800000FF8000,
+ 0x7FE000003FF0000,
+ 0x3FF800003FF0000,
+ 0x3FFC0001FFE000,
+ 0xFFF83FFFE003FFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFF800FFFF83FFF,
+ 0xFFF00007FF800,
+ 0x1FF800003FF80,
+ 0x1FF800000FFC0,
+ 0x3FE000003FF00,
+ 0xFF0000007F800,
+ 0x3FC000001FE000,
+ 0x1FF800000FF8000,
+ 0x7FE000003FF0000,
+ 0x3FF800003FF0000,
+ 0x3FFC0001FFE000,
+ 0xFFF83FFFE003FFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFF800FFFF83FFF,
+ 0xFFF00007FF800,
+ 0x1FF800003FF80,
+ 0x1FF800000FFC0,
+ 0x3FE000003FF00,
+ 0xFF0000007F800,
+ 0x3FC000001FE000,
+ 0x1FF800000FF8000,
+ 0x7FE000003FF0000,
+ 0x3FF800003FF0000,
+ 0x3FFC0001FFE000,
+ 0xFFF83FFFE003FFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1FFF800FFFFC7FFF,
+ 0xFFF00007FFC00,
+ 0x1FFC00007FF80,
+ 0x1FF800000FFC0,
+ 0x7FE000003FF00,
+ 0xFF0000007FC00,
+ 0x7FC000001FE000,
+ 0x1FF800000FFC000,
+ 0x7FE000003FF0000,
+ 0x3FFC00007FF0000,
+ 0x7FFC0001FFE000,
+ 0xFFFC7FFFE003FFF0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1FFF800FFFFC7FFF,
+ 0xFFF00007FFC00,
+ 0x1FFC00007FF80,
+ 0x1FF800000FFC0,
+ 0x7FE000003FF00,
+ 0xFF0000007FC00,
+ 0x7FC000001FE000,
+ 0x1FF800000FFC000,
+ 0x7FE000003FF0000,
+ 0x3FFC00007FF0000,
+ 0x7FFC0001FFE000,
+ 0xFFFC7FFFE003FFF0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1FFFC01FFFFEFFFF,
+ 0x1FFF8000FFFC00,
+ 0x1FFC00007FFC0,
+ 0x1FFC00001FFC0,
+ 0x7FE000003FF00,
+ 0xFF800000FFC00,
+ 0x7FE000003FE000,
+ 0x1FF800000FFC000,
+ 0x7FF000007FF0000,
+ 0x7FFC00007FF0000,
+ 0x7FFE0003FFF000,
+ 0xFFFEFFFFF007FFF0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1FFFC01FFFFFFFFF,
+ 0x1FFF8000FFFC00,
+ 0x1FFC00007FFC0,
+ 0x1FFC00001FFC0,
+ 0x7FE000003FF00,
+ 0x1FF800000FFC00,
+ 0x7FE000003FF000,
+ 0x1FF800000FFC000,
+ 0x7FF000007FF0000,
+ 0x7FFC00007FF0000,
+ 0x7FFE0003FFF000,
+ 0xFFFFFFFFF007FFF0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1FFFC01FFFFFFFFF,
+ 0x1FFF8000FFFC00,
+ 0x1FFC00007FFC0,
+ 0x1FFC00001FFC0,
+ 0x7FE000003FF00,
+ 0x1FF800000FFC00,
+ 0x7FE000003FF000,
+ 0x1FF800000FFC000,
+ 0x7FF000007FF0000,
+ 0x7FFC00007FF0000,
+ 0x7FFE0003FFF000,
+ 0xFFFFFFFFF007FFF0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1FFFC01FFFFFFFFF,
+ 0x1FFF8000FFFC00,
+ 0x1FFC00007FFC0,
+ 0x1FFC00001FFC0,
+ 0x7FE000003FF00,
+ 0x1FF800000FFC00,
+ 0x7FE000003FF000,
+ 0x1FF800000FFC000,
+ 0x7FF000007FF0000,
+ 0x7FFC00007FF0000,
+ 0x7FFE0003FFF000,
+ 0xFFFFFFFFF007FFF0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1FFFC01FFFFFFFFF,
+ 0x1FFF8000FFFC00,
+ 0x1FFC00007FFC0,
+ 0x1FFC00001FFC0,
+ 0x7FE000003FF00,
+ 0x1FF800000FFC00,
+ 0x7FE000003FF000,
+ 0x1FF800000FFC000,
+ 0x7FF000007FF0000,
+ 0x7FFC00007FF0000,
+ 0x7FFE0003FFF000,
+ 0xFFFFFFFFF007FFF0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1FFFC01FFFFFFFFF,
+ 0x1FFF8000FFFC00,
+ 0x1FFC00007FFC0,
+ 0x1FFC00001FFC0,
+ 0x7FE000003FF00,
+ 0x1FF800000FFC00,
+ 0x7FE000003FF000,
+ 0x1FF800000FFC000,
+ 0x7FF000007FF0000,
+ 0x7FFC00007FF0000,
+ 0x7FFE0003FFF000,
+ 0xFFFFFFFFF007FFF0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0x3FFFE03FFFFFFFFF,
+ 0x1FFF8000FFFE00,
+ 0x3FFC00007FFC0,
+ 0x3FFC00001FFE0,
+ 0x7FE000003FF80,
+ 0x1FF800000FFC00,
+ 0x7FE000003FF000,
+ 0x3FF800000FFC000,
+ 0xFFF000007FF8000,
+ 0x7FFC00007FF8000,
+ 0xFFFE0003FFF000,
+ 0xFFFFFFFFF80FFFF8,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0x3FFFE03FFFFFFFFF,
+ 0x1FFF8000FFFE00,
+ 0x3FFC00007FFC0,
+ 0x3FFC00001FFE0,
+ 0x7FE000003FF80,
+ 0x1FF800000FFC00,
+ 0x7FE000003FF000,
+ 0x3FF800000FFC000,
+ 0xFFF000007FF8000,
+ 0x7FFC00007FF8000,
+ 0xFFFE0003FFF000,
+ 0xFFFFFFFFF80FFFF8,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0x3FFFE03FFFFFFFFF,
+ 0x1FFF8000FFFE00,
+ 0x3FFC00007FFC0,
+ 0x3FFC00001FFE0,
+ 0x7FE000003FF80,
+ 0x1FF800000FFC00,
+ 0x7FE000003FF000,
+ 0x3FF800000FFC000,
+ 0xFFF000007FF8000,
+ 0x7FFC00007FF8000,
+ 0xFFFE0003FFF000,
+ 0xFFFFFFFFF80FFFF8,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0x3FFFE03FFFFFFFFF,
+ 0x1FFF8000FFFE00,
+ 0x3FFC00007FFC0,
+ 0x3FFC00001FFE0,
+ 0x7FE000003FF80,
+ 0x1FF800000FFC00,
+ 0x7FE000003FF000,
+ 0x3FF800000FFC000,
+ 0xFFF000007FF8000,
+ 0x7FFC00007FF8000,
+ 0xFFFE0003FFF000,
+ 0xFFFFFFFFF80FFFF8,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0x3FFFF07FFFFFFFFF,
+ 0x1FFFC001FFFE00,
+ 0x3FFE0000FFFC0,
+ 0x3FFC00001FFE0,
+ 0x7FF000007FF80,
+ 0x1FF800000FFC00,
+ 0x7FE000003FF000,
+ 0x3FFC00001FFC000,
+ 0xFFF000007FF8000,
+ 0x7FFE0000FFF8000,
+ 0xFFFF0007FFF000,
+ 0xFFFFFFFFFC1FFFF8,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0x3FFFF07FFFFFFFFF,
+ 0x1FFFC001FFFE00,
+ 0x3FFE0000FFFC0,
+ 0x3FFC00001FFE0,
+ 0x7FF000007FF80,
+ 0x1FF800000FFC00,
+ 0x7FE000003FF000,
+ 0x3FFC00001FFC000,
+ 0xFFF000007FF8000,
+ 0x7FFE0000FFF8000,
+ 0xFFFF0007FFF000,
+ 0xFFFFFFFFFC1FFFF8,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0x3FFFF07FFFFFFFFF,
+ 0x3FFFC001FFFE00,
+ 0x3FFE0000FFFE0,
+ 0x3FFC00001FFE0,
+ 0x7FF000007FF80,
+ 0x1FF800000FFC00,
+ 0x7FE000003FF000,
+ 0x3FFC00001FFC000,
+ 0xFFF000007FF8000,
+ 0xFFFE0000FFF8000,
+ 0xFFFF0007FFF800,
+ 0xFFFFFFFFFC1FFFF8,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0x3FFFF07FFFFFFFFF,
+ 0x3FFFC001FFFE00,
+ 0x3FFE0000FFFE0,
+ 0x3FFC00001FFE0,
+ 0x7FF000007FF80,
+ 0x1FF800000FFC00,
+ 0x7FE000003FF000,
+ 0x3FFC00001FFC000,
+ 0xFFF000007FF8000,
+ 0xFFFE0000FFF8000,
+ 0xFFFF0007FFF800,
+ 0xFFFFFFFFFC1FFFF8,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFF8FFFFFFFFFF,
+ 0x3FFFC001FFFF00,
+ 0x3FFE0000FFFE0,
+ 0x3FFE00003FFE0,
+ 0xFFF000007FF80,
+ 0x1FF800000FFE00,
+ 0xFFE000003FF000,
+ 0x3FFC00001FFE000,
+ 0xFFF80000FFF8000,
+ 0xFFFE0000FFF8000,
+ 0x1FFFF0007FFF800,
+ 0xFFFFFFFFFE3FFFFC,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFF8FFFFFFFFFF,
+ 0x3FFFC001FFFF00,
+ 0x3FFE0000FFFE0,
+ 0x3FFE00003FFE0,
+ 0xFFF000007FF80,
+ 0x1FF800000FFE00,
+ 0xFFE000003FF000,
+ 0x3FFC00001FFE000,
+ 0xFFF80000FFF8000,
+ 0xFFFE0000FFF8000,
+ 0x1FFFF0007FFF800,
+ 0xFFFFFFFFFE3FFFFC,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFFDFFFFFFFFFF,
+ 0x3FFFC001FFFF00,
+ 0x3FFE0000FFFE0,
+ 0x3FFE00003FFE0,
+ 0xFFF000007FF80,
+ 0x1FFC00001FFE00,
+ 0xFFF000007FF000,
+ 0x3FFC00001FFE000,
+ 0xFFF80000FFF8000,
+ 0xFFFE0000FFF8000,
+ 0x1FFFF0007FFF800,
+ 0xFFFFFFFFFF7FFFFC,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFFFFFFFFFFFFF,
+ 0x3FFFC001FFFF00,
+ 0x3FFE0000FFFE0,
+ 0x3FFE00003FFE0,
+ 0xFFF000007FF80,
+ 0x3FFC00001FFE00,
+ 0xFFF000007FF800,
+ 0x3FFC00001FFE000,
+ 0xFFF80000FFF8000,
+ 0xFFFE0000FFF8000,
+ 0x1FFFF0007FFF800,
+ 0xFFFFFFFFFFFFFFFC,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFFFFFFFFFFFFF,
+ 0x3FFFC001FFFF00,
+ 0x3FFE0000FFFE0,
+ 0x3FFE00003FFE0,
+ 0xFFF000007FF80,
+ 0x3FFC00001FFE00,
+ 0xFFF000007FF800,
+ 0x3FFC00001FFE000,
+ 0xFFF80000FFF8000,
+ 0xFFFE0000FFF8000,
+ 0x1FFFF0007FFF800,
+ 0xFFFFFFFFFFFFFFFC,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFFFFFFFFFFFFF,
+ 0x3FFFE003FFFF00,
+ 0x7FFE0000FFFE0,
+ 0x3FFE00003FFF0,
+ 0xFFF000007FF80,
+ 0x3FFC00001FFE00,
+ 0xFFF000007FF800,
+ 0x3FFC00001FFE000,
+ 0x1FFF80000FFF8000,
+ 0xFFFE0000FFFC000,
+ 0x1FFFF800FFFF800,
+ 0xFFFFFFFFFFFFFFFC,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x3FFFE003FFFF80,
+ 0x7FFE0000FFFE0,
+ 0x7FFE00003FFF0,
+ 0xFFF000007FFC0,
+ 0x3FFC00001FFE00,
+ 0xFFF000007FF800,
+ 0x7FFC00001FFE000,
+ 0x1FFF80000FFFC000,
+ 0xFFFE0000FFFC000,
+ 0x3FFFF800FFFF800,
+ 0xFFFFFFFFFFFFFFFE,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x3FFFE003FFFF80,
+ 0x7FFE0000FFFE0,
+ 0x7FFE00003FFF0,
+ 0xFFF000007FFC0,
+ 0x3FFC00001FFE00,
+ 0xFFF000007FF800,
+ 0x7FFC00001FFE000,
+ 0x1FFF80000FFFC000,
+ 0xFFFE0000FFFC000,
+ 0x3FFFF800FFFF800,
+ 0xFFFFFFFFFFFFFFFE,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFE003FFFF80,
+ 0x7FFF0001FFFF0,
+ 0x7FFE00003FFF0,
+ 0xFFF000007FFC0,
+ 0x3FFC00001FFE00,
+ 0xFFF000007FF800,
+ 0x7FFC00001FFE000,
+ 0x1FFF80000FFFC000,
+ 0x1FFFF0001FFFC000,
+ 0x3FFFF800FFFFC00,
+ 0xFFFFFFFFFFFFFFFE,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFE003FFFF80,
+ 0x7FFF0001FFFF0,
+ 0x7FFE00003FFF0,
+ 0xFFF000007FFC0,
+ 0x3FFC00001FFE00,
+ 0xFFF000007FF800,
+ 0x7FFC00001FFE000,
+ 0x1FFF80000FFFC000,
+ 0x1FFFF0001FFFC000,
+ 0x3FFFF800FFFFC00,
+ 0xFFFFFFFFFFFFFFFE,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFE003FFFF80,
+ 0x7FFF0001FFFF0,
+ 0x7FFE00003FFF0,
+ 0xFFF000007FFC0,
+ 0x3FFC00001FFE00,
+ 0xFFF000007FF800,
+ 0x7FFC00001FFE000,
+ 0x1FFF80000FFFC000,
+ 0x1FFFF0001FFFC000,
+ 0x3FFFF800FFFFC00,
+ 0xFFFFFFFFFFFFFFFE,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFE003FFFFC1,
+ 0x7FFF0001FFFF0,
+ 0x7FFE00003FFF0,
+ 0xFFF80000FFFC0,
+ 0x3FFC00001FFE00,
+ 0xFFF000007FF800,
+ 0x7FFE00003FFE000,
+ 0x1FFF80000FFFC000,
+ 0x1FFFF0001FFFC000,
+ 0x7FFFF800FFFFC00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFE003FFFFC1,
+ 0x7FFF0001FFFF0,
+ 0x7FFE00003FFF0,
+ 0xFFF80000FFFC0,
+ 0x3FFC00001FFE00,
+ 0xFFF000007FF800,
+ 0x7FFE00003FFE000,
+ 0x1FFF80000FFFC000,
+ 0x1FFFF0001FFFC000,
+ 0x7FFFF800FFFFC00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFE003FFFFC1,
+ 0x7FFF0001FFFF0,
+ 0x7FFE00003FFF0,
+ 0xFFF80000FFFC0,
+ 0x3FFC00001FFE00,
+ 0xFFF000007FF800,
+ 0x7FFE00003FFE000,
+ 0x1FFF80000FFFC000,
+ 0x1FFFF0001FFFC000,
+ 0x7FFFF800FFFFC00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFF007FFFFC1,
+ 0x7FFF0001FFFF0,
+ 0x7FFF00007FFF0,
+ 0xFFF80000FFFC0,
+ 0x3FFC00001FFE00,
+ 0xFFF000007FF800,
+ 0x7FFE00003FFE000,
+ 0x1FFFC0001FFFC000,
+ 0x1FFFF0001FFFC000,
+ 0x7FFFFC01FFFFC00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFF007FFFFE3,
+ 0x7FFF0001FFFF0,
+ 0x7FFF00007FFF0,
+ 0x1FFF80000FFFC0,
+ 0x3FFC00001FFF00,
+ 0x1FFF000007FF800,
+ 0x7FFE00003FFF000,
+ 0x1FFFC0001FFFC000,
+ 0x1FFFF0001FFFC000,
+ 0x8FFFFFC01FFFFC00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFF007FFFFE3,
+ 0x7FFF0001FFFF0,
+ 0x7FFF00007FFF0,
+ 0x1FFF80000FFFC0,
+ 0x3FFC00001FFF00,
+ 0x1FFF000007FF800,
+ 0x7FFE00003FFF000,
+ 0x1FFFC0001FFFC000,
+ 0x1FFFF0001FFFC000,
+ 0x8FFFFFC01FFFFC00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFF007FFFFF7,
+ 0x7FFF0001FFFF0,
+ 0x7FFF00007FFF0,
+ 0x1FFF80000FFFC0,
+ 0x3FFE00003FFF00,
+ 0x1FFF80000FFF800,
+ 0x7FFE00003FFF000,
+ 0x1FFFC0001FFFC000,
+ 0x1FFFF0001FFFC000,
+ 0xDFFFFFC01FFFFC00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFF007FFFFFF,
+ 0xFFFF0001FFFF8,
+ 0x7FFF00007FFF8,
+ 0x1FFF80000FFFC0,
+ 0x7FFE00003FFF00,
+ 0x1FFF80000FFFC00,
+ 0x7FFE00003FFF000,
+ 0x3FFFC0001FFFC000,
+ 0x3FFFF0001FFFE000,
+ 0xFFFFFFC01FFFFE00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFF007FFFFFF,
+ 0xFFFF0001FFFF8,
+ 0x7FFF00007FFF8,
+ 0x1FFF80000FFFC0,
+ 0x7FFE00003FFF00,
+ 0x1FFF80000FFFC00,
+ 0x7FFE00003FFF000,
+ 0x3FFFC0001FFFC000,
+ 0x3FFFF0001FFFE000,
+ 0xFFFFFFC01FFFFE00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFF007FFFFFF,
+ 0xFFFF8003FFFF8,
+ 0x7FFF00007FFF8,
+ 0x1FFF80000FFFC0,
+ 0x7FFE00003FFF00,
+ 0x1FFF80000FFFC00,
+ 0x7FFE00003FFF000,
+ 0x3FFFC0001FFFC000,
+ 0x3FFFF8003FFFE000,
+ 0xFFFFFFC01FFFFE00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFF80FFFFFFF,
+ 0xFFFF8003FFFF8,
+ 0xFFFF00007FFF8,
+ 0x1FFF80000FFFE0,
+ 0x7FFE00003FFF00,
+ 0x1FFF80000FFFC00,
+ 0xFFFE00003FFF000,
+ 0x3FFFC0001FFFE000,
+ 0x3FFFF8003FFFE000,
+ 0xFFFFFFE03FFFFE00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFF80FFFFFFF,
+ 0xFFFF8003FFFF8,
+ 0xFFFF00007FFF8,
+ 0x1FFF80000FFFE0,
+ 0x7FFE00003FFF00,
+ 0x1FFF80000FFFC00,
+ 0xFFFE00003FFF000,
+ 0x3FFFC0001FFFE000,
+ 0x3FFFF8003FFFE000,
+ 0xFFFFFFE03FFFFE00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFF80FFFFFFF,
+ 0xFFFF8003FFFF8,
+ 0xFFFF00007FFF8,
+ 0x1FFF80000FFFE0,
+ 0x7FFE00003FFF00,
+ 0x1FFF80000FFFC00,
+ 0xFFFE00003FFF000,
+ 0x3FFFC0001FFFE000,
+ 0x3FFFF8003FFFE000,
+ 0xFFFFFFE03FFFFE00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFF80FFFFFFF,
+ 0xFFFF8003FFFF8,
+ 0xFFFF00007FFF8,
+ 0x1FFF80000FFFE0,
+ 0x7FFE00003FFF00,
+ 0x1FFF80000FFFC00,
+ 0xFFFE00003FFF000,
+ 0x3FFFC0001FFFE000,
+ 0x3FFFF8003FFFE000,
+ 0xFFFFFFE03FFFFE00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFF80FFFFFFF,
+ 0xFFFF8003FFFF8,
+ 0xFFFF00007FFF8,
+ 0x1FFF80000FFFE0,
+ 0x7FFE00003FFF00,
+ 0x1FFF80000FFFC00,
+ 0xFFFE00003FFF000,
+ 0x3FFFC0001FFFE000,
+ 0x3FFFF8003FFFE000,
+ 0xFFFFFFE03FFFFE00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFC1FFFFFFF,
+ 0xFFFF8003FFFF8,
+ 0xFFFF00007FFF8,
+ 0x1FFFC0001FFFE0,
+ 0x7FFE00003FFF00,
+ 0x1FFF80000FFFC00,
+ 0xFFFF00007FFF000,
+ 0x3FFFC0001FFFE000,
+ 0x3FFFF8003FFFE000,
+ 0xFFFFFFF07FFFFE00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1FFFFFC1FFFFFFF,
+ 0xFFFF8003FFFFC,
+ 0xFFFF8000FFFF8,
+ 0x1FFFC0001FFFE0,
+ 0x7FFE00003FFF00,
+ 0x1FFF80000FFFC00,
+ 0xFFFF00007FFF000,
+ 0x3FFFE0003FFFE000,
+ 0x7FFFF8003FFFE000,
+ 0xFFFFFFF07FFFFF00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1FFFFFC1FFFFFFF,
+ 0xFFFF8003FFFFC,
+ 0xFFFF8000FFFF8,
+ 0x1FFFC0001FFFE0,
+ 0x7FFE00003FFF00,
+ 0x1FFF80000FFFC00,
+ 0xFFFF00007FFF000,
+ 0x3FFFE0003FFFE000,
+ 0x7FFFF8003FFFE000,
+ 0xFFFFFFF07FFFFF00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1FFFFFC1FFFFFFF,
+ 0xFFFF8003FFFFC,
+ 0xFFFF8000FFFF8,
+ 0x1FFFC0001FFFE0,
+ 0x7FFE00003FFF00,
+ 0x1FFF80000FFFC00,
+ 0xFFFF00007FFF000,
+ 0x3FFFE0003FFFE000,
+ 0x7FFFF8003FFFE000,
+ 0xFFFFFFF07FFFFF00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1FFFFFE3FFFFFFF,
+ 0x1FFFFC007FFFFC,
+ 0xFFFF8000FFFFC,
+ 0x3FFFC0001FFFE0,
+ 0x7FFE00003FFF80,
+ 0x3FFF80000FFFC00,
+ 0xFFFF00007FFF800,
+ 0x7FFFE0003FFFE000,
+ 0x7FFFFC007FFFF000,
+ 0xFFFFFFF8FFFFFF00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1FFFFFE3FFFFFFF,
+ 0x1FFFFC007FFFFC,
+ 0xFFFF8000FFFFC,
+ 0x3FFFC0001FFFE0,
+ 0x7FFE00003FFF80,
+ 0x3FFF80000FFFC00,
+ 0xFFFF00007FFF800,
+ 0x7FFFE0003FFFE000,
+ 0x7FFFFC007FFFF000,
+ 0xFFFFFFF8FFFFFF00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1FFFFFE3FFFFFFF,
+ 0x1FFFFC007FFFFC,
+ 0xFFFF8000FFFFC,
+ 0x3FFFC0001FFFE0,
+ 0x7FFE00003FFF80,
+ 0x3FFF80000FFFC00,
+ 0xFFFF00007FFF800,
+ 0x7FFFE0003FFFE000,
+ 0x7FFFFC007FFFF000,
+ 0xFFFFFFF8FFFFFF00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1FFFFFF7FFFFFFF,
+ 0x1FFFFC007FFFFC,
+ 0xFFFF8000FFFFC,
+ 0x3FFFC0001FFFE0,
+ 0x7FFF00007FFF80,
+ 0x3FFFC0001FFFC00,
+ 0xFFFF00007FFF800,
+ 0x7FFFE0003FFFE000,
+ 0x7FFFFC007FFFF000,
+ 0xFFFFFFFDFFFFFF00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1FFFFFFFFFFFFFF,
+ 0x1FFFFC007FFFFC,
+ 0xFFFF8000FFFFC,
+ 0x3FFFC0001FFFE0,
+ 0xFFFF00007FFF80,
+ 0x3FFFC0001FFFE00,
+ 0xFFFF00007FFF800,
+ 0x7FFFE0003FFFE000,
+ 0x7FFFFC007FFFF000,
+ 0xFFFFFFFFFFFFFF00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x3FFFFFFFFFFFFFF,
+ 0x1FFFFC007FFFFE,
+ 0x1FFFF8000FFFFC,
+ 0x3FFFC0001FFFF0,
+ 0xFFFF00007FFF80,
+ 0x3FFFC0001FFFE00,
+ 0x1FFFF00007FFF800,
+ 0x7FFFE0003FFFF000,
+ 0xFFFFFC007FFFF000,
+ 0xFFFFFFFFFFFFFF80,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x3FFFFFFFFFFFFFF,
+ 0x1FFFFC007FFFFE,
+ 0x1FFFF8000FFFFC,
+ 0x3FFFC0001FFFF0,
+ 0xFFFF00007FFF80,
+ 0x3FFFC0001FFFE00,
+ 0x1FFFF00007FFF800,
+ 0x7FFFE0003FFFF000,
+ 0xFFFFFC007FFFF000,
+ 0xFFFFFFFFFFFFFF80,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x3FFFFFFFFFFFFFF,
+ 0x1FFFFC007FFFFE,
+ 0x1FFFF8000FFFFC,
+ 0x3FFFC0001FFFF0,
+ 0xFFFF00007FFF80,
+ 0x3FFFC0001FFFE00,
+ 0x1FFFF00007FFF800,
+ 0x7FFFE0003FFFF000,
+ 0xFFFFFC007FFFF000,
+ 0xFFFFFFFFFFFFFF80,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x3FFFFFFFFFFFFFF,
+ 0x1FFFFC007FFFFE,
+ 0x1FFFF8000FFFFC,
+ 0x3FFFC0001FFFF0,
+ 0xFFFF00007FFF80,
+ 0x3FFFC0001FFFE00,
+ 0x1FFFF00007FFF800,
+ 0x7FFFE0003FFFF000,
+ 0xFFFFFC007FFFF000,
+ 0xFFFFFFFFFFFFFF80,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x3FFFFFFFFFFFFFF,
+ 0x1FFFFC007FFFFE,
+ 0x1FFFF8000FFFFC,
+ 0x3FFFC0001FFFF0,
+ 0xFFFF00007FFF80,
+ 0x3FFFC0001FFFE00,
+ 0x1FFFF00007FFF800,
+ 0x7FFFE0003FFFF000,
+ 0xFFFFFC007FFFF000,
+ 0xFFFFFFFFFFFFFF80,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x3FFFFFFFFFFFFFF,
+ 0x1FFFFE00FFFFFE,
+ 0x1FFFFC001FFFFC,
+ 0x3FFFC0001FFFF0,
+ 0xFFFF00007FFF80,
+ 0x3FFFC0001FFFE00,
+ 0x1FFFF00007FFF800,
+ 0x7FFFF0007FFFF000,
+ 0xFFFFFE00FFFFF000,
+ 0xFFFFFFFFFFFFFF80,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFFFFFFFFFFFF,
+ 0x1FFFFE00FFFFFF,
+ 0x1FFFFC001FFFFC,
+ 0x3FFFE0003FFFF0,
+ 0xFFFF00007FFF80,
+ 0x3FFFC0001FFFE00,
+ 0x1FFFF8000FFFF800,
+ 0x7FFFF0007FFFF000,
+ 0xFFFFFE00FFFFF000,
+ 0xFFFFFFFFFFFFFFC1,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFFFFFFFFFFFF,
+ 0x3FFFFE00FFFFFF,
+ 0x1FFFFC001FFFFE,
+ 0x3FFFE0003FFFF0,
+ 0xFFFF00007FFF80,
+ 0x3FFFC0001FFFE00,
+ 0x1FFFF8000FFFF800,
+ 0xFFFFF0007FFFF000,
+ 0xFFFFFE00FFFFF800,
+ 0xFFFFFFFFFFFFFFC1,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFFFFFFFFFFFF,
+ 0x3FFFFE00FFFFFF,
+ 0x1FFFFC001FFFFE,
+ 0x3FFFE0003FFFF0,
+ 0xFFFF00007FFF80,
+ 0x3FFFC0001FFFE00,
+ 0x1FFFF8000FFFF800,
+ 0xFFFFF0007FFFF000,
+ 0xFFFFFE00FFFFF800,
+ 0xFFFFFFFFFFFFFFC1,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFFFFFFFFFFFF,
+ 0x3FFFFE00FFFFFF,
+ 0x1FFFFC001FFFFE,
+ 0x3FFFE0003FFFF0,
+ 0xFFFF00007FFF80,
+ 0x3FFFC0001FFFE00,
+ 0x1FFFF8000FFFF800,
+ 0xFFFFF0007FFFF000,
+ 0xFFFFFE00FFFFF800,
+ 0xFFFFFFFFFFFFFFC1,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFFFFFFFFFFFF,
+ 0x3FFFFE00FFFFFF,
+ 0x1FFFFC001FFFFE,
+ 0x3FFFE0003FFFF0,
+ 0xFFFF00007FFF80,
+ 0x3FFFC0001FFFE00,
+ 0x1FFFF8000FFFF800,
+ 0xFFFFF0007FFFF000,
+ 0xFFFFFE00FFFFF800,
+ 0xFFFFFFFFFFFFFFC1,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x8FFFFFFFFFFFFFFF,
+ 0x3FFFFE00FFFFFF,
+ 0x1FFFFC001FFFFE,
+ 0x7FFFE0003FFFF0,
+ 0xFFFF00007FFFC0,
+ 0x7FFFC0001FFFE00,
+ 0x1FFFF8000FFFFC00,
+ 0xFFFFF0007FFFF000,
+ 0xFFFFFE00FFFFF800,
+ 0xFFFFFFFFFFFFFFE3,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x8FFFFFFFFFFFFFFF,
+ 0x3FFFFE00FFFFFF,
+ 0x1FFFFC001FFFFE,
+ 0x7FFFE0003FFFF0,
+ 0xFFFF00007FFFC0,
+ 0x7FFFC0001FFFE00,
+ 0x1FFFF8000FFFFC00,
+ 0xFFFFF0007FFFF000,
+ 0xFFFFFE00FFFFF800,
+ 0xFFFFFFFFFFFFFFE3,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x8FFFFFFFFFFFFFFF,
+ 0x3FFFFE00FFFFFF,
+ 0x1FFFFC001FFFFE,
+ 0x7FFFE0003FFFF0,
+ 0xFFFF00007FFFC0,
+ 0x7FFFC0001FFFE00,
+ 0x1FFFF8000FFFFC00,
+ 0xFFFFF0007FFFF000,
+ 0xFFFFFE00FFFFF800,
+ 0xFFFFFFFFFFFFFFE3,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xDFFFFFFFFFFFFFFF,
+ 0x3FFFFF01FFFFFF,
+ 0x3FFFFC001FFFFE,
+ 0x7FFFE0003FFFF8,
+ 0xFFFF8000FFFFC0,
+ 0x7FFFE0003FFFE00,
+ 0x3FFFF8000FFFFC00,
+ 0xFFFFF0007FFFF800,
+ 0xFFFFFF01FFFFF800,
+ 0xFFFFFFFFFFFFFFF7,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x3FFFFF01FFFFFF,
+ 0x3FFFFC001FFFFE,
+ 0x7FFFE0003FFFF8,
+ 0x1FFFF8000FFFFC0,
+ 0x7FFFE0003FFFF00,
+ 0x3FFFF8000FFFFC00,
+ 0xFFFFF0007FFFF800,
+ 0xFFFFFF01FFFFF800,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x3FFFFF01FFFFFF,
+ 0x3FFFFC001FFFFE,
+ 0x7FFFE0003FFFF8,
+ 0x1FFFF8000FFFFC0,
+ 0x7FFFE0003FFFF00,
+ 0x3FFFF8000FFFFC00,
+ 0xFFFFF0007FFFF800,
+ 0xFFFFFF01FFFFF800,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFFF01FFFFFF,
+ 0x3FFFFE003FFFFF,
+ 0x7FFFE0003FFFF8,
+ 0x1FFFF8000FFFFC0,
+ 0x7FFFE0003FFFF00,
+ 0x3FFFF8000FFFFC00,
+ 0xFFFFF800FFFFF800,
+ 0xFFFFFF01FFFFFC01,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFFF01FFFFFF,
+ 0x3FFFFE003FFFFF,
+ 0x7FFFE0003FFFF8,
+ 0x1FFFF8000FFFFC0,
+ 0x7FFFE0003FFFF00,
+ 0x3FFFF8000FFFFC00,
+ 0xFFFFF800FFFFF800,
+ 0xFFFFFF01FFFFFC01,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFFF01FFFFFF,
+ 0x3FFFFE003FFFFF,
+ 0x7FFFE0003FFFF8,
+ 0x1FFFF8000FFFFC0,
+ 0x7FFFE0003FFFF00,
+ 0x3FFFF8000FFFFC00,
+ 0xFFFFF800FFFFF800,
+ 0xFFFFFF01FFFFFC01,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFFF01FFFFFF,
+ 0x3FFFFE003FFFFF,
+ 0x7FFFE0003FFFF8,
+ 0x1FFFF8000FFFFC0,
+ 0x7FFFE0003FFFF00,
+ 0x3FFFF8000FFFFC00,
+ 0xFFFFF800FFFFF800,
+ 0xFFFFFF01FFFFFC01,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFFF83FFFFFF,
+ 0x3FFFFE003FFFFF,
+ 0x7FFFF0007FFFF8,
+ 0x1FFFF8000FFFFC0,
+ 0x7FFFE0003FFFF00,
+ 0x3FFFFC001FFFFC00,
+ 0xFFFFF800FFFFF800,
+ 0xFFFFFF83FFFFFC01,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFFF83FFFFFF,
+ 0x3FFFFE003FFFFF,
+ 0x7FFFF0007FFFF8,
+ 0x1FFFF8000FFFFC0,
+ 0x7FFFE0003FFFF00,
+ 0x3FFFFC001FFFFC00,
+ 0xFFFFF800FFFFF800,
+ 0xFFFFFF83FFFFFC01,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFFF83FFFFFF,
+ 0x3FFFFE003FFFFF,
+ 0x7FFFF0007FFFF8,
+ 0x1FFFF8000FFFFC0,
+ 0x7FFFE0003FFFF00,
+ 0x3FFFFC001FFFFC00,
+ 0xFFFFF800FFFFF800,
+ 0xFFFFFF83FFFFFC01,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFFF83FFFFFF,
+ 0x3FFFFE003FFFFF,
+ 0x7FFFF0007FFFF8,
+ 0x1FFFF8000FFFFC0,
+ 0x7FFFE0003FFFF00,
+ 0x3FFFFC001FFFFC00,
+ 0xFFFFF800FFFFF800,
+ 0xFFFFFF83FFFFFC01,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFFF83FFFFFF,
+ 0x3FFFFE003FFFFF,
+ 0x7FFFF0007FFFF8,
+ 0x1FFFF8000FFFFC0,
+ 0x7FFFE0003FFFF00,
+ 0x3FFFFC001FFFFC00,
+ 0xFFFFF800FFFFF800,
+ 0xFFFFFF83FFFFFC01,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFFFC7FFFFFF,
+ 0x3FFFFE003FFFFF,
+ 0xFFFFF0007FFFF8,
+ 0x1FFFF8000FFFFE0,
+ 0xFFFFE0003FFFF00,
+ 0x3FFFFC001FFFFE00,
+ 0xFFFFF800FFFFF800,
+ 0xFFFFFFC7FFFFFC01,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x80FFFFFFC7FFFFFF,
+ 0x7FFFFE003FFFFF,
+ 0xFFFFF0007FFFFC,
+ 0x1FFFF8000FFFFE0,
+ 0xFFFFE0003FFFF00,
+ 0x7FFFFC001FFFFE00,
+ 0xFFFFF800FFFFFC00,
+ 0xFFFFFFC7FFFFFE03,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x80FFFFFFC7FFFFFF,
+ 0x7FFFFE003FFFFF,
+ 0xFFFFF0007FFFFC,
+ 0x1FFFF8000FFFFE0,
+ 0xFFFFE0003FFFF00,
+ 0x7FFFFC001FFFFE00,
+ 0xFFFFF800FFFFFC00,
+ 0xFFFFFFC7FFFFFE03,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x80FFFFFFEFFFFFFF,
+ 0x7FFFFF007FFFFF,
+ 0xFFFFF0007FFFFC,
+ 0x1FFFFC001FFFFE0,
+ 0xFFFFF0007FFFF00,
+ 0x7FFFFC001FFFFE00,
+ 0xFFFFFC01FFFFFC00,
+ 0xFFFFFFEFFFFFFE03,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x80FFFFFFFFFFFFFF,
+ 0x7FFFFF007FFFFF,
+ 0xFFFFF0007FFFFC,
+ 0x3FFFFC001FFFFE0,
+ 0xFFFFF0007FFFF80,
+ 0x7FFFFC001FFFFE00,
+ 0xFFFFFC01FFFFFC00,
+ 0xFFFFFFFFFFFFFE03,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x80FFFFFFFFFFFFFF,
+ 0x7FFFFF007FFFFF,
+ 0xFFFFF0007FFFFC,
+ 0x3FFFFC001FFFFE0,
+ 0xFFFFF0007FFFF80,
+ 0x7FFFFC001FFFFE00,
+ 0xFFFFFC01FFFFFC00,
+ 0xFFFFFFFFFFFFFE03,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x80FFFFFFFFFFFFFF,
+ 0x7FFFFF007FFFFF,
+ 0xFFFFF0007FFFFC,
+ 0x3FFFFC001FFFFE0,
+ 0xFFFFF0007FFFF80,
+ 0x7FFFFC001FFFFE00,
+ 0xFFFFFC01FFFFFC00,
+ 0xFFFFFFFFFFFFFE03,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x80FFFFFFFFFFFFFF,
+ 0x7FFFFF007FFFFF,
+ 0xFFFFF0007FFFFC,
+ 0x3FFFFC001FFFFE0,
+ 0xFFFFF0007FFFF80,
+ 0x7FFFFC001FFFFE00,
+ 0xFFFFFC01FFFFFC00,
+ 0xFFFFFFFFFFFFFE03,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x80FFFFFFFFFFFFFF,
+ 0x7FFFFF007FFFFF,
+ 0xFFFFF0007FFFFC,
+ 0x3FFFFC001FFFFE0,
+ 0xFFFFF0007FFFF80,
+ 0x7FFFFC001FFFFE00,
+ 0xFFFFFC01FFFFFC00,
+ 0xFFFFFFFFFFFFFE03,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xC1FFFFFFFFFFFFFF,
+ 0x7FFFFF007FFFFF,
+ 0xFFFFF800FFFFFC,
+ 0x3FFFFC001FFFFE0,
+ 0xFFFFF0007FFFF80,
+ 0x7FFFFE003FFFFE00,
+ 0xFFFFFC01FFFFFC00,
+ 0xFFFFFFFFFFFFFF07,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xC1FFFFFFFFFFFFFF,
+ 0x7FFFFF007FFFFF,
+ 0xFFFFF800FFFFFC,
+ 0x3FFFFC001FFFFE0,
+ 0xFFFFF0007FFFF80,
+ 0x7FFFFE003FFFFE00,
+ 0xFFFFFC01FFFFFC00,
+ 0xFFFFFFFFFFFFFF07,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xC1FFFFFFFFFFFFFF,
+ 0x7FFFFF007FFFFF,
+ 0xFFFFF800FFFFFC,
+ 0x3FFFFC001FFFFE0,
+ 0xFFFFF0007FFFF80,
+ 0x7FFFFE003FFFFE00,
+ 0xFFFFFC01FFFFFC00,
+ 0xFFFFFFFFFFFFFF07,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xC1FFFFFFFFFFFFFF,
+ 0x7FFFFF007FFFFF,
+ 0xFFFFF800FFFFFC,
+ 0x3FFFFC001FFFFE0,
+ 0xFFFFF0007FFFF80,
+ 0x7FFFFE003FFFFE00,
+ 0xFFFFFC01FFFFFC00,
+ 0xFFFFFFFFFFFFFF07,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xC1FFFFFFFFFFFFFF,
+ 0xFFFFFF80FFFFFF,
+ 0xFFFFF800FFFFFE,
+ 0x3FFFFC001FFFFE0,
+ 0xFFFFF0007FFFF80,
+ 0xFFFFFE003FFFFE00,
+ 0xFFFFFE03FFFFFE00,
+ 0xFFFFFFFFFFFFFF07,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xC1FFFFFFFFFFFFFF,
+ 0xFFFFFF80FFFFFF,
+ 0xFFFFF800FFFFFE,
+ 0x3FFFFC001FFFFE0,
+ 0xFFFFF0007FFFF80,
+ 0xFFFFFE003FFFFE00,
+ 0xFFFFFE03FFFFFE00,
+ 0xFFFFFFFFFFFFFF07,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xE3FFFFFFFFFFFFFF,
+ 0xFFFFFF80FFFFFF,
+ 0x1FFFFF800FFFFFE,
+ 0x3FFFFC001FFFFF0,
+ 0x1FFFFF0007FFFF80,
+ 0xFFFFFE003FFFFF00,
+ 0xFFFFFE03FFFFFE00,
+ 0xFFFFFFFFFFFFFF8F,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xE3FFFFFFFFFFFFFF,
+ 0xFFFFFF80FFFFFF,
+ 0x1FFFFF800FFFFFE,
+ 0x3FFFFC001FFFFF0,
+ 0x1FFFFF0007FFFF80,
+ 0xFFFFFE003FFFFF00,
+ 0xFFFFFE03FFFFFE00,
+ 0xFFFFFFFFFFFFFF8F,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xE3FFFFFFFFFFFFFF,
+ 0xFFFFFF80FFFFFF,
+ 0x1FFFFF800FFFFFE,
+ 0x3FFFFC001FFFFF0,
+ 0x1FFFFF0007FFFF80,
+ 0xFFFFFE003FFFFF00,
+ 0xFFFFFE03FFFFFE00,
+ 0xFFFFFFFFFFFFFF8F,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xF7FFFFFFFFFFFFFF,
+ 0xFFFFFF80FFFFFF,
+ 0x1FFFFF800FFFFFE,
+ 0x3FFFFE003FFFFF0,
+ 0x1FFFFF800FFFFF80,
+ 0xFFFFFE003FFFFF00,
+ 0xFFFFFE03FFFFFE00,
+ 0xFFFFFFFFFFFFFFDF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xF7FFFFFFFFFFFFFF,
+ 0xFFFFFF80FFFFFF,
+ 0x1FFFFF800FFFFFE,
+ 0x3FFFFE003FFFFF0,
+ 0x1FFFFF800FFFFF80,
+ 0xFFFFFE003FFFFF00,
+ 0xFFFFFE03FFFFFE00,
+ 0xFFFFFFFFFFFFFFDF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFF80FFFFFF,
+ 0x1FFFFF800FFFFFE,
+ 0x7FFFFE003FFFFF0,
+ 0x1FFFFF800FFFFFC0,
+ 0xFFFFFE003FFFFF00,
+ 0xFFFFFE03FFFFFE00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFF80FFFFFF,
+ 0x1FFFFF800FFFFFE,
+ 0x7FFFFE003FFFFF0,
+ 0x1FFFFF800FFFFFC0,
+ 0xFFFFFE003FFFFF00,
+ 0xFFFFFE03FFFFFE00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFC1FFFFFF,
+ 0x1FFFFFC01FFFFFE,
+ 0x7FFFFE003FFFFF0,
+ 0x1FFFFF800FFFFFC0,
+ 0xFFFFFF007FFFFF00,
+ 0xFFFFFF07FFFFFE00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFC1FFFFFF,
+ 0x1FFFFFC01FFFFFE,
+ 0x7FFFFE003FFFFF0,
+ 0x1FFFFF800FFFFFC0,
+ 0xFFFFFF007FFFFF00,
+ 0xFFFFFF07FFFFFE00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFC1FFFFFF,
+ 0x1FFFFFC01FFFFFE,
+ 0x7FFFFE003FFFFF0,
+ 0x1FFFFF800FFFFFC0,
+ 0xFFFFFF007FFFFF00,
+ 0xFFFFFF07FFFFFE00,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1FFFFFFC1FFFFFF,
+ 0x1FFFFFC01FFFFFF,
+ 0x7FFFFE003FFFFF0,
+ 0x1FFFFF800FFFFFC0,
+ 0xFFFFFF007FFFFF00,
+ 0xFFFFFF07FFFFFF01,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1FFFFFFC1FFFFFF,
+ 0x1FFFFFC01FFFFFF,
+ 0x7FFFFE003FFFFF0,
+ 0x1FFFFF800FFFFFC0,
+ 0xFFFFFF007FFFFF00,
+ 0xFFFFFF07FFFFFF01,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1FFFFFFC1FFFFFF,
+ 0x1FFFFFC01FFFFFF,
+ 0x7FFFFE003FFFFF0,
+ 0x1FFFFF800FFFFFC0,
+ 0xFFFFFF007FFFFF00,
+ 0xFFFFFF07FFFFFF01,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1FFFFFFC1FFFFFF,
+ 0x1FFFFFC01FFFFFF,
+ 0x7FFFFE003FFFFF0,
+ 0x1FFFFF800FFFFFC0,
+ 0xFFFFFF007FFFFF00,
+ 0xFFFFFF07FFFFFF01,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1FFFFFFE3FFFFFF,
+ 0x3FFFFFC01FFFFFF,
+ 0x7FFFFE003FFFFF8,
+ 0x3FFFFF800FFFFFC0,
+ 0xFFFFFF007FFFFF80,
+ 0xFFFFFF8FFFFFFF01,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1FFFFFFE3FFFFFF,
+ 0x3FFFFFC01FFFFFF,
+ 0x7FFFFE003FFFFF8,
+ 0x3FFFFF800FFFFFC0,
+ 0xFFFFFF007FFFFF80,
+ 0xFFFFFF8FFFFFFF01,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1FFFFFFE3FFFFFF,
+ 0x3FFFFFC01FFFFFF,
+ 0x7FFFFE003FFFFF8,
+ 0x3FFFFF800FFFFFC0,
+ 0xFFFFFF007FFFFF80,
+ 0xFFFFFF8FFFFFFF01,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1FFFFFFE3FFFFFF,
+ 0x3FFFFFC01FFFFFF,
+ 0x7FFFFE003FFFFF8,
+ 0x3FFFFF800FFFFFC0,
+ 0xFFFFFF007FFFFF80,
+ 0xFFFFFF8FFFFFFF01,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1FFFFFFE3FFFFFF,
+ 0x3FFFFFC01FFFFFF,
+ 0x7FFFFE003FFFFF8,
+ 0x3FFFFF800FFFFFC0,
+ 0xFFFFFF007FFFFF80,
+ 0xFFFFFF8FFFFFFF01,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1FFFFFFF7FFFFFF,
+ 0x3FFFFFC01FFFFFF,
+ 0x7FFFFF007FFFFF8,
+ 0x3FFFFFC01FFFFFC0,
+ 0xFFFFFF007FFFFF80,
+ 0xFFFFFFDFFFFFFF01,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x83FFFFFFFFFFFFFF,
+ 0x3FFFFFE03FFFFFF,
+ 0xFFFFFF007FFFFF8,
+ 0x3FFFFFC01FFFFFE0,
+ 0xFFFFFF80FFFFFF80,
+ 0xFFFFFFFFFFFFFF83,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x83FFFFFFFFFFFFFF,
+ 0x3FFFFFE03FFFFFF,
+ 0xFFFFFF007FFFFF8,
+ 0x3FFFFFC01FFFFFE0,
+ 0xFFFFFF80FFFFFF80,
+ 0xFFFFFFFFFFFFFF83,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x83FFFFFFFFFFFFFF,
+ 0x3FFFFFE03FFFFFF,
+ 0xFFFFFF007FFFFF8,
+ 0x3FFFFFC01FFFFFE0,
+ 0xFFFFFF80FFFFFF80,
+ 0xFFFFFFFFFFFFFF83,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x83FFFFFFFFFFFFFF,
+ 0x3FFFFFE03FFFFFF,
+ 0xFFFFFF007FFFFF8,
+ 0x3FFFFFC01FFFFFE0,
+ 0xFFFFFF80FFFFFF80,
+ 0xFFFFFFFFFFFFFF83,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x83FFFFFFFFFFFFFF,
+ 0x3FFFFFE03FFFFFF,
+ 0xFFFFFF007FFFFF8,
+ 0x3FFFFFC01FFFFFE0,
+ 0xFFFFFF80FFFFFF80,
+ 0xFFFFFFFFFFFFFF83,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x83FFFFFFFFFFFFFF,
+ 0x3FFFFFE03FFFFFF,
+ 0xFFFFFF007FFFFF8,
+ 0x3FFFFFC01FFFFFE0,
+ 0xFFFFFF80FFFFFF80,
+ 0xFFFFFFFFFFFFFF83,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x83FFFFFFFFFFFFFF,
+ 0x3FFFFFE03FFFFFF,
+ 0xFFFFFF007FFFFF8,
+ 0x3FFFFFC01FFFFFE0,
+ 0xFFFFFF80FFFFFF80,
+ 0xFFFFFFFFFFFFFF83,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x83FFFFFFFFFFFFFF,
+ 0x3FFFFFE03FFFFFF,
+ 0xFFFFFF007FFFFF8,
+ 0x3FFFFFC01FFFFFE0,
+ 0xFFFFFF80FFFFFF80,
+ 0xFFFFFFFFFFFFFF83,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x83FFFFFFFFFFFFFF,
+ 0x3FFFFFE03FFFFFF,
+ 0xFFFFFF007FFFFF8,
+ 0x3FFFFFC01FFFFFE0,
+ 0xFFFFFF80FFFFFF80,
+ 0xFFFFFFFFFFFFFF83,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xC7FFFFFFFFFFFFFF,
+ 0x7FFFFFE03FFFFFF,
+ 0xFFFFFF007FFFFFC,
+ 0x7FFFFFC01FFFFFE0,
+ 0xFFFFFF80FFFFFFC0,
+ 0xFFFFFFFFFFFFFFC7,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xC7FFFFFFFFFFFFFF,
+ 0x7FFFFFE03FFFFFF,
+ 0xFFFFFF007FFFFFC,
+ 0x7FFFFFC01FFFFFE0,
+ 0xFFFFFF80FFFFFFC0,
+ 0xFFFFFFFFFFFFFFC7,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xC7FFFFFFFFFFFFFF,
+ 0x7FFFFFE03FFFFFF,
+ 0xFFFFFF007FFFFFC,
+ 0x7FFFFFC01FFFFFE0,
+ 0xFFFFFF80FFFFFFC0,
+ 0xFFFFFFFFFFFFFFC7,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xC7FFFFFFFFFFFFFF,
+ 0x7FFFFFF07FFFFFF,
+ 0xFFFFFF007FFFFFC,
+ 0x7FFFFFC01FFFFFE0,
+ 0xFFFFFFC1FFFFFFC0,
+ 0xFFFFFFFFFFFFFFC7,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xC7FFFFFFFFFFFFFF,
+ 0x7FFFFFF07FFFFFF,
+ 0xFFFFFF007FFFFFC,
+ 0x7FFFFFC01FFFFFE0,
+ 0xFFFFFFC1FFFFFFC0,
+ 0xFFFFFFFFFFFFFFC7,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xEFFFFFFFFFFFFFFF,
+ 0x7FFFFFF07FFFFFF,
+ 0xFFFFFF80FFFFFFC,
+ 0x7FFFFFE03FFFFFE0,
+ 0xFFFFFFC1FFFFFFC0,
+ 0xFFFFFFFFFFFFFFEF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xEFFFFFFFFFFFFFFF,
+ 0x7FFFFFF07FFFFFF,
+ 0xFFFFFF80FFFFFFC,
+ 0x7FFFFFE03FFFFFE0,
+ 0xFFFFFFC1FFFFFFC0,
+ 0xFFFFFFFFFFFFFFEF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFFFF07FFFFFF,
+ 0x1FFFFFF80FFFFFFC,
+ 0x7FFFFFE03FFFFFF0,
+ 0xFFFFFFC1FFFFFFC0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFFFF07FFFFFF,
+ 0x1FFFFFF80FFFFFFC,
+ 0x7FFFFFE03FFFFFF0,
+ 0xFFFFFFC1FFFFFFC0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFFFF07FFFFFF,
+ 0x1FFFFFF80FFFFFFC,
+ 0x7FFFFFE03FFFFFF0,
+ 0xFFFFFFC1FFFFFFC0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFFFF07FFFFFF,
+ 0x1FFFFFF80FFFFFFC,
+ 0x7FFFFFE03FFFFFF0,
+ 0xFFFFFFC1FFFFFFC0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFFFF07FFFFFF,
+ 0x1FFFFFF80FFFFFFC,
+ 0x7FFFFFE03FFFFFF0,
+ 0xFFFFFFC1FFFFFFC0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x7FFFFFF07FFFFFF,
+ 0x1FFFFFF80FFFFFFC,
+ 0x7FFFFFE03FFFFFF0,
+ 0xFFFFFFC1FFFFFFC0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFF8FFFFFFF,
+ 0x1FFFFFF80FFFFFFE,
+ 0xFFFFFFE03FFFFFF0,
+ 0xFFFFFFE3FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFF8FFFFFFF,
+ 0x1FFFFFF80FFFFFFE,
+ 0xFFFFFFE03FFFFFF0,
+ 0xFFFFFFE3FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFF8FFFFFFF,
+ 0x1FFFFFF80FFFFFFE,
+ 0xFFFFFFE03FFFFFF0,
+ 0xFFFFFFE3FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFF8FFFFFFF,
+ 0x1FFFFFF80FFFFFFE,
+ 0xFFFFFFE03FFFFFF0,
+ 0xFFFFFFE3FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFF8FFFFFFF,
+ 0x1FFFFFF80FFFFFFE,
+ 0xFFFFFFE03FFFFFF0,
+ 0xFFFFFFE3FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFF8FFFFFFF,
+ 0x1FFFFFF80FFFFFFE,
+ 0xFFFFFFE03FFFFFF0,
+ 0xFFFFFFE3FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFF8FFFFFFF,
+ 0x1FFFFFF80FFFFFFE,
+ 0xFFFFFFE03FFFFFF0,
+ 0xFFFFFFE3FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+ Map {
+ cells: [
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFDFFFFFFF,
+ 0x1FFFFFFC1FFFFFFE,
+ 0xFFFFFFF07FFFFFF0,
+ 0xFFFFFFF7FFFFFFE0,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0xFFFFFFFFFFFFFFFF,
+ 0x1,
+ ],
+ },
+];
diff --git a/2019-worms/src/game.rs b/2019-worms/src/game.rs
new file mode 100644
index 0000000..00289a0
--- /dev/null
+++ b/2019-worms/src/game.rs
@@ -0,0 +1,779 @@
+use crate::command::{Action, Command};
+use crate::constants::*;
+use crate::geometry::*;
+use crate::json;
+
+mod player;
+use player::*;
+
+mod powerup;
+use powerup::*;
+
+pub mod map;
+use map::*;
+
+use arrayvec::ArrayVec;
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+pub struct GameBoard {
+ pub round: u16,
+ pub max_rounds: u16,
+ pub players: [Player; 2],
+ pub powerups: ArrayVec<[Powerup; 2]>,
+ pub map: Map,
+ pub occupied_cells: ArrayVec<[Point2d; 6]>,
+ pub outcome: SimulationOutcome,
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+pub enum SimulationOutcome {
+ PlayerWon(usize),
+ Draw,
+ Continue,
+}
+
+impl GameBoard {
+ pub fn new(json: json::State) -> GameBoard {
+ let player = Player {
+ active_worm: json.active_worm_index().unwrap(),
+ moves_score: json.my_player.score - json.my_player.health_score(),
+ select_moves: json.my_player.remaining_worm_selections,
+ worms: json
+ .my_player
+ .worms
+ .iter()
+ .map(|w| Worm {
+ id: w.id,
+ health: w.health,
+ position: Point2d::new(w.position.x, w.position.y),
+ rounds_until_unfrozen: w.rounds_until_unfrozen,
+ bombs: w.banana_bombs.as_ref().map(|b| b.count).unwrap_or(0),
+ snowballs: w.snowballs.as_ref().map(|b| b.count).unwrap_or(0),
+ })
+ .collect(),
+ };
+
+ let opponent = Player {
+ active_worm: 0,
+ moves_score: json.opponents[0].score - json.opponents[0].health_score(),
+ select_moves: json.opponents[0].remaining_worm_selections,
+ worms: json
+ .opponents
+ .iter()
+ .flat_map(|o| &o.worms)
+ .map(|w| Worm {
+ id: w.id,
+ health: w.health,
+ position: Point2d::new(w.position.x, w.position.y),
+ rounds_until_unfrozen: w.rounds_until_unfrozen,
+ bombs: if w.profession == json::WormType::Agent {
+ STARTING_BOMBS
+ } else {
+ 0
+ },
+ snowballs: if w.profession == json::WormType::Technologist {
+ STARTING_SNOWBALLS
+ } else {
+ 0
+ },
+ })
+ .collect(),
+ };
+
+ let mut map = Map::default();
+ for cell in json.map.iter().flatten() {
+ if cell.cell_type == json::CellType::Dirt {
+ map.set(Point2d::new(cell.x, cell.y))
+ }
+ }
+
+ let players = [player, opponent];
+ let occupied_cells = players
+ .iter()
+ .flat_map(|p| p.worms.iter())
+ .map(|w| w.position)
+ .collect();
+
+ GameBoard {
+ round: json.current_round,
+ max_rounds: json.max_rounds,
+ players,
+ powerups: json
+ .map
+ .iter()
+ .flatten()
+ .filter_map(|c| {
+ c.powerup.as_ref().map(|_p| Powerup {
+ position: Point2d::new(c.x, c.y),
+ })
+ })
+ .collect(),
+ map,
+ occupied_cells,
+ outcome: SimulationOutcome::Continue,
+ }
+ }
+
+ pub fn update(&mut self, json: json::State) {
+ for w in &json.my_player.worms {
+ if let Some(worm) = self.players[0].find_worm_mut(w.id) {
+ worm.health = w.health;
+ worm.position = Point2d::new(w.position.x, w.position.y);
+ worm.bombs = w.banana_bombs.as_ref().map(|b| b.count).unwrap_or(0);
+ worm.snowballs = w.snowballs.as_ref().map(|b| b.count).unwrap_or(0);
+ }
+ }
+ for w in json.opponents.iter().flat_map(|o| &o.worms) {
+ if let Some(worm) = self.players[1].find_worm_mut(w.id) {
+ worm.health = w.health;
+ worm.position = Point2d::new(w.position.x, w.position.y);
+ }
+ }
+
+ if !self.players[1].active_worm_is_frozen() {
+ if json
+ .opponents
+ .iter()
+ .any(|o| o.previous_command.starts_with("banana"))
+ {
+ for worm in &mut self.players[1].worms {
+ worm.bombs = worm.bombs.saturating_sub(1);
+ }
+ }
+ if json
+ .opponents
+ .iter()
+ .any(|o| o.previous_command.starts_with("snowball"))
+ {
+ for worm in &mut self.players[1].worms {
+ worm.snowballs = worm.snowballs.saturating_sub(1);
+ }
+ }
+ }
+
+ self.players[0].moves_score = json.my_player.score - json.my_player.health_score();
+ self.players[1].moves_score = json.opponents[0].score - json.opponents[0].health_score();
+
+ self.players[0].select_moves = json.my_player.remaining_worm_selections;
+ self.players[1].select_moves = json.opponents[0].remaining_worm_selections;
+
+ self.powerups = json
+ .map
+ .iter()
+ .flatten()
+ .filter_map(|c| {
+ c.powerup.as_ref().map(|_p| Powerup {
+ position: Point2d::new(c.x, c.y),
+ })
+ })
+ .collect();
+
+ for cell in json.map.iter().flatten() {
+ let point = Point2d::new(cell.x, cell.y);
+
+ if cfg!(debug_assertions) {
+ // This checks if my lava map is the same as the game
+ // engine's lava map. It's off by one because the game
+ // engine will update its one at the beginning of
+ // processing the round.
+ let lava = LAVA_MAP[self.round as usize];
+
+ let lava_at = lava.at(point);
+ // NB: Map hasn't been updated yet, so it can be used to tell previous state.
+ match (&cell.cell_type, self.map.at(point)) {
+ (json::CellType::Air, Some(false)) => assert!(
+ lava_at == Some(false),
+ "Lava at {:?} expected Some(false), but found {:?}",
+ point,
+ lava_at
+ ),
+ (json::CellType::Air, _) => assert!(
+ lava_at.is_some(),
+ "Lava at {:?} expected Some(_), but found {:?}",
+ point,
+ lava_at
+ ),
+ (json::CellType::Lava, _) => assert!(
+ lava_at == Some(true),
+ "Lava at {:?} expected Some(true), but found {:?}",
+ point,
+ lava_at
+ ),
+ (json::CellType::DeepSpace, _) => assert!(
+ lava_at == None,
+ "Lava at {:?} expected None, but found {:?}",
+ point,
+ lava_at
+ ),
+ (json::CellType::Dirt, _) => assert!(
+ lava_at.is_some(),
+ "Lava at {:?} expected Some(_), but found {:?}",
+ point,
+ lava_at
+ ),
+ };
+ }
+
+ if cell.cell_type == json::CellType::Air {
+ self.map.clear(point)
+ }
+ }
+
+ self.clear_dead_worms();
+ self.players[0].active_worm = json.active_worm_index().unwrap_or(0);
+ self.players[1].active_worm = json.opponent_active_worm_index().unwrap_or(0);
+
+ self.round += 1;
+ debug_assert_eq!(json.current_round, self.round);
+ }
+
+ pub fn simulate(&mut self, moves: [Command; 2]) {
+ self.simulate_worms_on_lava();
+ self.simulate_tick_frozen_timers();
+
+ self.simulate_select(moves);
+
+ let actions = self.identify_actions(moves);
+
+ self.simulate_moves(actions);
+ self.simulate_digs(actions);
+ self.simulate_bombs(actions);
+ self.simulate_shoots(actions);
+ self.simulate_snowballs(actions);
+
+ self.clear_dead_worms();
+
+ for player in &mut self.players {
+ player.next_active_worm();
+ }
+
+ self.round += 1;
+
+ self.outcome = match (
+ self.players[0].worms.len(),
+ self.players[1].worms.len(),
+ self.round > self.max_rounds,
+ ) {
+ (0, 0, _) => SimulationOutcome::Draw,
+ (_, 0, _) => SimulationOutcome::PlayerWon(0),
+ (0, _, _) => SimulationOutcome::PlayerWon(1),
+ (_, _, true) => SimulationOutcome::Draw,
+ _ => SimulationOutcome::Continue,
+ };
+ }
+
+ fn simulate_worms_on_lava(&mut self) {
+ let lava_map = LAVA_MAP[self.round as usize];
+ self.players
+ .iter_mut()
+ .flat_map(|p| p.worms.iter_mut())
+ .filter(|w| lava_map.at(w.position) == Some(true))
+ .for_each(|ref mut w| w.health -= LAVA_DAMAGE);
+ }
+
+ fn simulate_tick_frozen_timers(&mut self) {
+ self.players
+ .iter_mut()
+ .flat_map(|p| p.worms.iter_mut())
+ .filter(|w| w.health > 0)
+ .for_each(|ref mut w| {
+ w.rounds_until_unfrozen = w.rounds_until_unfrozen.saturating_sub(1)
+ });
+ }
+
+ fn identify_actions(&self, moves: [Command; 2]) -> [Action; 2] {
+ let mut it = self.players.iter().zip(moves.iter()).map(|(p, m)| {
+ if p.active_worm_is_frozen() {
+ Action::DoNothing
+ } else {
+ m.action
+ }
+ });
+ [it.next().unwrap(), it.next().unwrap()]
+ }
+
+ fn simulate_select(&mut self, moves: [Command; 2]) {
+ moves
+ .iter()
+ .zip(self.players.iter_mut())
+ .filter(|(_m, player)| !player.active_worm_is_frozen())
+ .for_each(|(m, player)| {
+ if let Some(worm) = m.worm {
+ debug_assert!(
+ player.select_moves > 0,
+ "Could not make select move, out of select tokens"
+ );
+ player.select_moves = player.select_moves.saturating_sub(1);
+ player.active_worm = player.find_worm_position(worm).unwrap_or(0);
+ }
+ });
+ }
+
+ fn simulate_moves(&mut self, actions: [Action; 2]) {
+ match actions {
+ [Action::Move(p1), Action::Move(p2)] if p1.x == p2.x && p1.y == p2.y => {
+ let damage = COLLISION_DAMAGE;
+
+ debug_assert_eq!(
+ Some(false),
+ self.map.at(Point2d::new(p1.x, p1.y)),
+ "Movement target wasn't empty, ({}, {})",
+ p1.x,
+ p1.y
+ );
+ // Worms have a 50% chance of swapping places
+ // here. I'm treating that as an edge case that I
+ // don't need to handle for now.
+ for player in &mut self.players {
+ if let Some(worm) = player.active_worm_mut() {
+ worm.health -= damage;
+ }
+ // You might expect damage score too here, but nope
+ player.moves_score += MOVE_SCORE;
+ }
+ }
+ _ => {
+ for player_index in 0..actions.len() {
+ if let Action::Move(p) = actions[player_index] {
+ debug_assert_eq!(
+ Some(false),
+ self.map.at(p),
+ "Movement target wasn't empty, ({}, {})",
+ p.x,
+ p.y
+ );
+
+ self.players[player_index].moves_score += MOVE_SCORE;
+
+ if let Some(worm) = self.players[player_index].active_worm_mut() {
+ debug_assert!(
+ (worm.position.x - p.x).abs() <= 1
+ && (worm.position.y - p.y).abs() <= 1,
+ "Tried to move too far away, ({}, {})",
+ p.x,
+ p.y
+ );
+
+ worm.position = p;
+
+ self.powerups.retain(|power| {
+ if power.position == worm.position {
+ worm.health += HEALTH_PACK_VALUE;
+ false
+ } else {
+ true
+ }
+ });
+ }
+ }
+ }
+ }
+ }
+ }
+
+ fn simulate_digs(&mut self, actions: [Action; 2]) {
+ for player_index in 0..actions.len() {
+ if let Action::Dig(p) = actions[player_index] {
+ debug_assert!(
+ Some(true) == self.map.at(p)
+ || (player_index == 1 && actions[0] == Action::Dig(p)),
+ "Tried to dig through air, ({}, {})",
+ p.x,
+ p.y
+ );
+ debug_assert! {
+ (self.players[player_index].active_worm().unwrap().position.x - p.x).abs() <= 1 &&
+ (self.players[player_index].active_worm().unwrap().position.y - p.y).abs() <= 1,
+ "Tried to dig too far away, ({}, {})", p.x, p.y
+ };
+
+ self.players[player_index].moves_score += DIG_SCORE;
+
+ self.map.clear(p);
+ }
+ }
+ }
+
+ fn simulate_bombs(&mut self, actions: [Action; 2]) {
+ // NB: Damage radius has the cell distance rounded UP, throwing range has the cell distance rounded DOWN
+
+ let map_clone: Map = self.map;
+
+ for player_index in 0..actions.len() {
+ if let Action::Bomb(p) = actions[player_index] {
+ if self.map.at(p).is_some() {
+ if let Some(worm) = self.players[player_index].active_worm_mut() {
+ debug_assert!(worm.bombs > 0, "Worm is throwing a bomb it doesn't have");
+ debug_assert!((worm.position - p).magnitude_squared() < 6 * 6); // max range is 5, but it's 5 after rounding down
+
+ worm.bombs = worm.bombs.saturating_sub(1);
+
+ for &(damage_offset, weapon_damage) in BOMB_DAMAGES.iter() {
+ let target = p + damage_offset;
+
+ if map_clone.at(target) == Some(true) {
+ self.map.clear(target);
+ self.players[player_index].moves_score += DIG_SCORE;
+ }
+ self.powerups.retain(|powerup| powerup.position != target);
+
+ let target_own_worm: Option<&mut Worm> = self.players[player_index]
+ .worms
+ .iter_mut()
+ .find(|w| w.position == target);
+
+ if let Some(target_worm) = target_own_worm {
+ target_worm.health -= weapon_damage;
+ self.players[player_index].moves_score -=
+ weapon_damage * ATTACK_SCORE_MULTIPLIER;
+ if target_worm.health <= 0 {
+ self.players[player_index].moves_score -= KILL_SCORE;
+ }
+ }
+
+ let target_opponent_worm: Option<&mut Worm> = self.players
+ [GameBoard::opponent(player_index)]
+ .worms
+ .iter_mut()
+ .find(|w| w.position == target);
+ if let Some(target_worm) = target_opponent_worm {
+ target_worm.health -= weapon_damage;
+ self.players[player_index].moves_score +=
+ weapon_damage * ATTACK_SCORE_MULTIPLIER;
+ if target_worm.health <= 0 {
+ self.players[player_index].moves_score += KILL_SCORE;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ pub fn simulate_snowballs(&mut self, actions: [Action; 2]) {
+ for player_index in 0..actions.len() {
+ if let Action::Snowball(p) = actions[player_index] {
+ if self.map.at(p).is_some() {
+ if let Some(worm) = self.players[player_index].active_worm_mut() {
+ debug_assert!(
+ worm.snowballs > 0,
+ "Worm is throwing a snowball it doesn't have"
+ );
+ debug_assert!((worm.position - p).magnitude_squared() < 6 * 6); // max range is 5, but it's 5 after rounding down
+
+ worm.snowballs = worm.snowballs.saturating_sub(1);
+
+ for &freeze_offset in SNOWBALL_FREEZES.iter() {
+ let target = p + freeze_offset;
+
+ let target_own_worm: Option<&mut Worm> = self.players[player_index]
+ .worms
+ .iter_mut()
+ .find(|w| w.position == target);
+
+ if let Some(target_worm) = target_own_worm {
+ target_worm.rounds_until_unfrozen = FREEZE_DURATION;
+ self.players[player_index].moves_score -= FREEZE_SCORE;
+ }
+
+ let target_opponent_worm: Option<&mut Worm> = self.players
+ [GameBoard::opponent(player_index)]
+ .worms
+ .iter_mut()
+ .find(|w| w.position == target);
+ if let Some(target_worm) = target_opponent_worm {
+ target_worm.rounds_until_unfrozen = FREEZE_DURATION;
+ self.players[player_index].moves_score += FREEZE_SCORE;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ fn simulate_shoots(&mut self, actions: [Action; 2]) {
+ 'players_loop: for player_index in 0..actions.len() {
+ if let Action::Shoot(dir) = actions[player_index] {
+ if let Some(worm) = self.players[player_index].active_worm() {
+ let center = worm.position;
+ let diff = dir.as_vec();
+
+ let range = if dir.is_diagonal() {
+ SHOOT_RANGE_DIAGONAL
+ } else {
+ SHOOT_RANGE
+ };
+
+ for distance in 1..=range {
+ let target = center + diff * distance;
+ match self.map.at(target) {
+ Some(false) => {
+ let target_own_worm: Option<&mut Worm> = self.players[player_index]
+ .worms
+ .iter_mut()
+ .find(|w| w.position == target);
+
+ if let Some(target_worm) = target_own_worm {
+ target_worm.health -= SHOOT_DAMAGE;
+ self.players[player_index].moves_score -=
+ SHOOT_DAMAGE * ATTACK_SCORE_MULTIPLIER;
+ if target_worm.health <= 0 {
+ self.players[player_index].moves_score -= KILL_SCORE;
+ }
+ continue 'players_loop;
+ }
+
+ let target_opponent_worm: Option<&mut Worm> = self.players
+ [GameBoard::opponent(player_index)]
+ .worms
+ .iter_mut()
+ .find(|w| w.position == target);
+
+ if let Some(target_worm) = target_opponent_worm {
+ target_worm.health -= SHOOT_DAMAGE;
+ self.players[player_index].moves_score +=
+ SHOOT_DAMAGE * ATTACK_SCORE_MULTIPLIER;
+ if target_worm.health <= 0 {
+ self.players[player_index].moves_score += KILL_SCORE;
+ }
+
+ continue 'players_loop;
+ }
+ }
+ _ => break,
+ }
+ }
+
+ // You get here if the shot missed. Hits are an early return.
+ self.players[player_index].moves_score += MISSED_ATTACK_SCORE;
+ }
+ }
+ }
+ }
+
+ fn clear_dead_worms(&mut self) {
+ for player in &mut self.players {
+ player.clear_dead_worms();
+ }
+
+ self.occupied_cells = self
+ .players
+ .iter()
+ .flat_map(|p| p.worms.iter())
+ .map(|w| w.position)
+ .collect();
+ }
+
+ pub fn opponent(player_index: usize) -> usize {
+ (player_index + 1) % 2
+ }
+
+ fn selects_iter(&self, player_index: usize) -> impl Iterator<Item = (Option<i32>, &Worm)> {
+ let no_select = self.players[player_index]
+ .active_worm()
+ .into_iter()
+ .map(|w| (None, w));
+
+ let has_select_moves = self.players[player_index].select_moves > 0;
+ let active_worm_index = self.players[player_index].active_worm;
+ let selects = self.players[player_index]
+ .worms
+ .iter()
+ .enumerate()
+ .filter(move |(p, _w)| has_select_moves && active_worm_index != *p)
+ .map(|(_p, w)| (Some(w.id), w));
+
+ no_select.chain(selects)
+ }
+
+ fn pruned_valid_move_commands(&self, player_index: usize) -> ArrayVec<[Command; 8]> {
+ self.players[player_index]
+ .active_worm()
+ .into_iter()
+ .flat_map(|worm| {
+ // TODO: If you aren't on lava, don't step onto the lava
+ Direction::ALL
+ .iter()
+ .map(Direction::as_vec)
+ .map(move |d| worm.position + d)
+ .filter(|p| !self.occupied_cells.contains(p))
+ .filter_map(|p| match self.map.at(p) {
+ Some(false) => Some(Action::Move(p)),
+ Some(true) => Some(Action::Dig(p)),
+ _ => None,
+ })
+ .map(Command::new)
+ })
+ .collect()
+ }
+
+ fn pruned_valid_bomb_commands(&self, player_index: usize) -> Vec<Command> {
+ self.selects_iter(player_index)
+ .filter(|(_, worm)| worm.bombs > 0)
+ .flat_map(|(select, worm)| {
+ let mut result = Vec::with_capacity((BOMB_RANGE * 2 + 1).pow(2) as usize - 12);
+ let own_worm_positions: ArrayVec<[Point2d; 3]> = self.players[player_index]
+ .worms
+ .iter()
+ .map(|w| w.position)
+ .collect();
+ let opponent_worm_positions: ArrayVec<[Point2d; 3]> = self.players
+ [GameBoard::opponent(player_index)]
+ .worms
+ .iter()
+ .map(|w| w.position)
+ .collect();
+
+ for y in worm.position.y - BOMB_RANGE..=worm.position.y + BOMB_RANGE {
+ for x in worm.position.x - BOMB_RANGE..=worm.position.x + BOMB_RANGE {
+ let target = Point2d::new(x, y);
+ if self.map.at(target).is_some()
+ && (worm.position - target).magnitude_squared()
+ < (BOMB_RANGE + 1).pow(2)
+ {
+ let own_affected_worms = own_worm_positions.iter().any(|p| {
+ (target - *p).magnitude_squared()
+ <= BOMB_DAMAGE_RANGE * BOMB_DAMAGE_RANGE
+ });
+ let opponent_affected_worms = opponent_worm_positions.iter().any(|p| {
+ (target - *p).magnitude_squared()
+ <= BOMB_DAMAGE_RANGE * BOMB_DAMAGE_RANGE
+ });
+
+ if !own_affected_worms && opponent_affected_worms {
+ result.push(Command {
+ worm: select,
+ action: Action::Bomb(target),
+ });
+ }
+ }
+ }
+ }
+
+ result
+ })
+ .collect()
+ }
+
+ fn pruned_valid_snowball_commands(&self, player_index: usize) -> Vec<Command> {
+ self.selects_iter(player_index)
+ .filter(|(_, worm)| worm.snowballs > 0)
+ .flat_map(|(select, worm)| {
+ let mut result = Vec::with_capacity((SNOWBALL_RANGE * 2 + 1).pow(2) as usize - 12);
+ let own_worm_positions: ArrayVec<[Point2d; 3]> = self.players[player_index]
+ .worms
+ .iter()
+ .map(|w| w.position)
+ .collect();
+ let opponent_worm_positions: ArrayVec<[Point2d; 3]> = self.players
+ [GameBoard::opponent(player_index)]
+ .worms
+ .iter()
+ .map(|w| w.position)
+ .collect();
+
+ for y in worm.position.y - SNOWBALL_RANGE..=worm.position.y + SNOWBALL_RANGE {
+ for x in worm.position.x - SNOWBALL_RANGE..=worm.position.x + SNOWBALL_RANGE {
+ let target = Point2d::new(x, y);
+ if self.map.at(target).is_some()
+ && (worm.position - target).magnitude_squared()
+ < (SNOWBALL_RANGE + 1).pow(2)
+ {
+ let own_affected_worms = own_worm_positions.iter().any(|p| {
+ (target - *p).magnitude_squared()
+ <= SNOWBALL_FREEZE_RANGE * SNOWBALL_FREEZE_RANGE
+ });
+ let opponent_affected_worms = opponent_worm_positions.iter().any(|p| {
+ (target - *p).magnitude_squared()
+ <= SNOWBALL_FREEZE_RANGE * SNOWBALL_FREEZE_RANGE
+ });
+
+ if !own_affected_worms && opponent_affected_worms {
+ result.push(Command {
+ worm: select,
+ action: Action::Snowball(target),
+ });
+ }
+ }
+ }
+ }
+
+ result
+ })
+ .collect()
+ }
+
+ fn pruned_valid_shoot_commands(&self, player_index: usize) -> Vec<Command> {
+ self.selects_iter(player_index)
+ .flat_map(|(select, worm)| {
+ self.players[GameBoard::opponent(player_index)]
+ .worms
+ .iter()
+ .filter_map(move |w| {
+ let diff = w.position - worm.position;
+ if diff.x == 0 && diff.y.abs() <= SHOOT_RANGE {
+ if diff.y > 0 {
+ Some((Direction::South, diff.y))
+ } else {
+ Some((Direction::North, -diff.y))
+ }
+ } else if diff.y == 0 && diff.x.abs() <= SHOOT_RANGE {
+ if diff.x > 0 {
+ Some((Direction::East, diff.x))
+ } else {
+ Some((Direction::West, -diff.x))
+ }
+ } else if diff.x.abs() == diff.y.abs()
+ && diff.x.abs() <= SHOOT_RANGE_DIAGONAL
+ {
+ match (diff.x > 0, diff.y > 0) {
+ (true, true) => Some((Direction::SouthEast, diff.x)),
+ (false, true) => Some((Direction::SouthWest, -diff.x)),
+ (true, false) => Some((Direction::NorthEast, diff.x)),
+ (false, false) => Some((Direction::NorthWest, -diff.x)),
+ }
+ } else {
+ None
+ }
+ })
+ .filter(move |(dir, range)| {
+ let diff = dir.as_vec();
+ // NB: This is up to range EXCLUSIVE, so if there's
+ // anything in the way, even another good shot, skip.
+ !(1..*range).any(|distance| {
+ self.map.at(worm.position + diff * distance) != Some(false)
+ && !self
+ .players
+ .iter()
+ .flat_map(|p| p.worms.iter())
+ .any(|w| w.position == worm.position + diff * distance)
+ })
+ })
+ .map(move |(dir, _range)| Command {
+ worm: select,
+ action: Action::Shoot(dir),
+ })
+ })
+ .collect()
+ }
+
+ pub fn pruned_valid_moves(&self, player_index: usize) -> Vec<Command> {
+ if self.players[player_index].active_worm_is_frozen_after_tick() {
+ vec![Command::new(Action::DoNothing)]
+ } else {
+ self.pruned_valid_shoot_commands(player_index)
+ .iter()
+ .chain(self.pruned_valid_move_commands(player_index).iter())
+ .chain(self.pruned_valid_bomb_commands(player_index).iter())
+ .chain(self.pruned_valid_snowball_commands(player_index).iter())
+ .chain([Command::new(Action::DoNothing)].iter())
+ .cloned()
+ .collect()
+ }
+ }
+}
+
+#[cfg(test)]
+mod test {}
diff --git a/2019-worms/src/game/map.rs b/2019-worms/src/game/map.rs
new file mode 100644
index 0000000..84ec99a
--- /dev/null
+++ b/2019-worms/src/game/map.rs
@@ -0,0 +1,49 @@
+use crate::constants::*;
+use crate::geometry::*;
+
+#[derive(Default, Debug, PartialEq, Eq, Clone, Copy)]
+pub struct Map {
+ pub cells: [u64; MAP_U64S],
+}
+
+impl Map {
+ fn internal_index(p: Point2d) -> Option<(usize, usize)> {
+ if p.y < 0 || p.y as usize >= MAP_SIZE {
+ None
+ } else {
+ let row_data = &MAP_ROW_SIZE[p.y as usize];
+ if p.x < row_data.x_offset as i8 || p.x as usize >= row_data.x_offset + row_data.len() {
+ None
+ } else {
+ let global_bit = row_data.start_bit + p.x as usize - row_data.x_offset;
+ let integer = global_bit / 64;
+ let bit = global_bit % 64;
+ Some((integer, bit))
+ }
+ }
+ }
+
+ pub fn at(&self, p: Point2d) -> Option<bool> {
+ Map::internal_index(p).map(|(integer, bit)| {
+ let mask = 1 << bit;
+ self.cells[integer] & mask != 0
+ })
+ }
+
+ pub fn set(&mut self, p: Point2d) {
+ if let Some((integer, bit)) = Map::internal_index(p) {
+ let mask = 1 << bit;
+ self.cells[integer] |= mask;
+ } else {
+ panic!("Tried to set an out of bounds bit, {:?}", p);
+ }
+ }
+ pub fn clear(&mut self, p: Point2d) {
+ if let Some((integer, bit)) = Map::internal_index(p) {
+ let mask = !(1 << bit);
+ self.cells[integer] &= mask;
+ } else {
+ panic!("Tried to set an out of bounds bit, {:?}", p);
+ }
+ }
+}
diff --git a/2019-worms/src/game/player.rs b/2019-worms/src/game/player.rs
new file mode 100644
index 0000000..0874c76
--- /dev/null
+++ b/2019-worms/src/game/player.rs
@@ -0,0 +1,259 @@
+use crate::geometry::*;
+use arrayvec::ArrayVec;
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+pub struct Player {
+ pub moves_score: i32,
+ pub active_worm: usize,
+ pub select_moves: u8,
+ pub worms: ArrayVec<[Worm; 3]>,
+}
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+pub struct Worm {
+ pub id: i32,
+ pub health: i32,
+ pub position: Point2d,
+ pub bombs: u8,
+ pub snowballs: u8,
+ pub rounds_until_unfrozen: u8,
+}
+
+impl Player {
+ pub fn find_worm_position(&self, id: i32) -> Option<usize> {
+ self.worms.iter().position(|w| w.id == id)
+ }
+
+ pub fn find_worm(&self, id: i32) -> Option<&Worm> {
+ self.worms.iter().find(|w| w.id == id)
+ }
+
+ pub fn find_worm_mut(&mut self, id: i32) -> Option<&mut Worm> {
+ self.worms.iter_mut().find(|w| w.id == id)
+ }
+
+ pub fn active_worm(&self) -> Option<&Worm> {
+ self.worms.get(self.active_worm)
+ }
+
+ pub fn active_worm_mut(&mut self) -> Option<&mut Worm> {
+ self.worms.get_mut(self.active_worm)
+ }
+
+ pub fn health(&self) -> i32 {
+ self.worms.iter().map(|w| w.health).sum()
+ }
+
+ pub fn max_worm_health(&self) -> i32 {
+ self.worms.iter().map(|w| w.health).max().unwrap_or(0)
+ }
+
+ pub fn clear_dead_worms(&mut self) {
+ for worm_index in (0..self.worms.len()).rev() {
+ if self.worms[worm_index].health <= 0 {
+ self.worms.remove(worm_index);
+ if self.active_worm >= worm_index {
+ self.active_worm = if self.active_worm > 0 {
+ self.active_worm - 1
+ } else if self.worms.len() > 0 {
+ self.worms.len() - 1
+ } else {
+ 0
+ };
+ }
+ }
+ }
+ }
+
+ pub fn next_active_worm(&mut self) {
+ self.active_worm = (self.active_worm + 1)
+ .checked_rem(self.worms.len())
+ .unwrap_or(0);
+ }
+
+ fn health_score(&self) -> i32 {
+ self.health() / 3
+ }
+
+ pub fn score(&self) -> i32 {
+ self.moves_score + self.health_score()
+ }
+
+ pub fn active_worm_is_frozen(&self) -> bool {
+ self.active_worm()
+ .map(|worm| worm.rounds_until_unfrozen > 0)
+ .unwrap_or(false)
+ }
+
+ pub fn active_worm_is_frozen_after_tick(&self) -> bool {
+ self.active_worm()
+ .map(|worm| worm.rounds_until_unfrozen > 1)
+ .unwrap_or(false)
+ }
+
+ pub fn bombs(&self) -> u8 {
+ self.worms.iter().map(|w| w.bombs).sum()
+ }
+
+ pub fn snowballs(&self) -> u8 {
+ self.worms.iter().map(|w| w.snowballs).sum()
+ }
+}
+
+#[cfg(test)]
+mod test {
+ use super::*;
+
+ #[test]
+ fn clear_dead_worms_after_active_worm() {
+ let mut worms = ArrayVec::new();
+ worms.push(Worm {
+ id: 1,
+ health: 50,
+ position: Point2d::new(0, 0),
+ rounds_until_unfrozen: 0,
+ bombs: 0,
+ snowballs: 0,
+ });
+ worms.push(Worm {
+ id: 2,
+ health: 10,
+ position: Point2d::new(0, 0),
+ rounds_until_unfrozen: 0,
+ bombs: 0,
+ snowballs: 0,
+ });
+ worms.push(Worm {
+ id: 3,
+ health: -2,
+ position: Point2d::new(0, 0),
+ rounds_until_unfrozen: 0,
+ bombs: 0,
+ snowballs: 0,
+ });
+ let mut player = Player {
+ active_worm: 1,
+ moves_score: 0,
+ select_moves: 0,
+ worms,
+ };
+
+ player.clear_dead_worms();
+
+ assert_eq!(2, player.worms.len());
+ assert_eq!(1, player.active_worm);
+
+ assert_eq!(1, player.worms[0].id);
+ assert_eq!(2, player.worms[1].id);
+ }
+
+ #[test]
+ fn clear_dead_worms_before_active_worm() {
+ let mut worms = ArrayVec::new();
+ worms.push(Worm {
+ id: 1,
+ health: 0,
+ position: Point2d::new(0, 0),
+ rounds_until_unfrozen: 0,
+ bombs: 0,
+ snowballs: 0,
+ });
+ worms.push(Worm {
+ id: 2,
+ health: 10,
+ position: Point2d::new(0, 0),
+ rounds_until_unfrozen: 0,
+ bombs: 0,
+ snowballs: 0,
+ });
+ worms.push(Worm {
+ id: 3,
+ health: 2,
+ position: Point2d::new(0, 0),
+ rounds_until_unfrozen: 0,
+ bombs: 0,
+ snowballs: 0,
+ });
+ let mut player = Player {
+ active_worm: 1,
+ moves_score: 0,
+ worms,
+ select_moves: 0,
+ };
+
+ player.clear_dead_worms();
+
+ assert_eq!(2, player.worms.len());
+ assert_eq!(0, player.active_worm);
+
+ assert_eq!(2, player.worms[0].id);
+ assert_eq!(3, player.worms[1].id);
+ }
+
+ #[test]
+ fn clear_dead_worms_before_active_worm_wrapping() {
+ let mut worms = ArrayVec::new();
+ worms.push(Worm {
+ id: 1,
+ health: 0,
+ position: Point2d::new(0, 0),
+ rounds_until_unfrozen: 0,
+ bombs: 0,
+ snowballs: 0,
+ });
+ worms.push(Worm {
+ id: 2,
+ health: 10,
+ position: Point2d::new(0, 0),
+ rounds_until_unfrozen: 0,
+ bombs: 0,
+ snowballs: 0,
+ });
+ worms.push(Worm {
+ id: 3,
+ health: 2,
+ position: Point2d::new(0, 0),
+ rounds_until_unfrozen: 0,
+ bombs: 0,
+ snowballs: 0,
+ });
+ let mut player = Player {
+ active_worm: 0,
+ moves_score: 0,
+ worms,
+ select_moves: 0,
+ };
+
+ player.clear_dead_worms();
+
+ assert_eq!(2, player.worms.len());
+ assert_eq!(1, player.active_worm);
+
+ assert_eq!(2, player.worms[0].id);
+ assert_eq!(3, player.worms[1].id);
+ }
+
+ #[test]
+ fn clear_last_dead_worm() {
+ let mut worms = ArrayVec::new();
+ worms.push(Worm {
+ id: 1,
+ health: -10,
+ position: Point2d::new(0, 0),
+ rounds_until_unfrozen: 0,
+ bombs: 0,
+ snowballs: 0,
+ });
+ let mut player = Player {
+ active_worm: 0,
+ moves_score: 0,
+ worms,
+ select_moves: 0,
+ };
+
+ player.clear_dead_worms();
+
+ assert_eq!(0, player.worms.len());
+ // active worm is undefined in this case, but clearing the worms must not panic.
+ }
+}
diff --git a/2019-worms/src/game/powerup.rs b/2019-worms/src/game/powerup.rs
new file mode 100644
index 0000000..47e73a1
--- /dev/null
+++ b/2019-worms/src/game/powerup.rs
@@ -0,0 +1,6 @@
+use crate::geometry::*;
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+pub struct Powerup {
+ pub position: Point2d,
+}
diff --git a/2019-worms/src/geometry.rs b/2019-worms/src/geometry.rs
new file mode 100644
index 0000000..1bcdace
--- /dev/null
+++ b/2019-worms/src/geometry.rs
@@ -0,0 +1,6 @@
+mod vec;
+pub use self::vec::*;
+mod point;
+pub use self::point::*;
+mod direction;
+pub use self::direction::*;
diff --git a/2019-worms/src/geometry/direction.rs b/2019-worms/src/geometry/direction.rs
new file mode 100644
index 0000000..e37f750
--- /dev/null
+++ b/2019-worms/src/geometry/direction.rs
@@ -0,0 +1,67 @@
+use crate::geometry::vec::Vec2d;
+use std::fmt;
+
+#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
+pub enum Direction {
+ North,
+ NorthEast,
+ East,
+ SouthEast,
+ South,
+ SouthWest,
+ West,
+ NorthWest,
+}
+
+impl fmt::Display for Direction {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ use Direction::*;
+ let s = match self {
+ North => "N",
+ NorthEast => "NE",
+ East => "E",
+ SouthEast => "SE",
+ South => "S",
+ SouthWest => "SW",
+ West => "W",
+ NorthWest => "NW",
+ };
+ f.write_str(s)
+ }
+}
+
+impl Direction {
+ pub fn is_diagonal(&self) -> bool {
+ use Direction::*;
+
+ match self {
+ NorthEast | SouthEast | SouthWest | NorthWest => true,
+ _ => false,
+ }
+ }
+
+ pub fn as_vec(&self) -> Vec2d {
+ use Direction::*;
+ match self {
+ North => Vec2d::new(0, -1),
+ NorthEast => Vec2d::new(1, -1),
+ East => Vec2d::new(1, 0),
+ SouthEast => Vec2d::new(1, 1),
+ South => Vec2d::new(0, 1),
+ SouthWest => Vec2d::new(-1, 1),
+ West => Vec2d::new(-1, 0),
+ NorthWest => Vec2d::new(-1, -1),
+ }
+ }
+
+ pub const ALL: [Direction; 8] = [
+ Direction::North,
+ Direction::NorthEast,
+ Direction::East,
+ Direction::SouthEast,
+ Direction::South,
+ Direction::SouthWest,
+ Direction::West,
+ Direction::NorthWest,
+ ];
+}
diff --git a/2019-worms/src/geometry/point.rs b/2019-worms/src/geometry/point.rs
new file mode 100644
index 0000000..1ab9b36
--- /dev/null
+++ b/2019-worms/src/geometry/point.rs
@@ -0,0 +1,37 @@
+use crate::geometry::vec::*;
+
+use std::ops::*;
+
+#[derive(Debug, Default, Clone, Copy, Hash, PartialEq, Eq)]
+pub struct Point2d {
+ pub x: i8,
+ pub y: i8,
+}
+
+impl Point2d {
+ pub fn new(x: i8, y: i8) -> Point2d {
+ Point2d { x, y }
+ }
+}
+
+impl Add<Vec2d> for Point2d {
+ type Output = Self;
+
+ fn add(self, other: Vec2d) -> Self {
+ Point2d {
+ x: self.x.saturating_add(other.x),
+ y: self.y.saturating_add(other.y),
+ }
+ }
+}
+
+impl Sub for Point2d {
+ type Output = Vec2d;
+
+ fn sub(self, other: Self) -> Vec2d {
+ Vec2d {
+ x: self.x.saturating_sub(other.x),
+ y: self.y.saturating_sub(other.y),
+ }
+ }
+}
diff --git a/2019-worms/src/geometry/vec.rs b/2019-worms/src/geometry/vec.rs
new file mode 100644
index 0000000..375a0f9
--- /dev/null
+++ b/2019-worms/src/geometry/vec.rs
@@ -0,0 +1,62 @@
+use std::ops::*;
+
+#[derive(Debug, Default, Clone, Copy, Hash, PartialEq, Eq)]
+pub struct Vec2d {
+ pub x: i8,
+ pub y: i8,
+}
+
+impl Vec2d {
+ pub const fn new(x: i8, y: i8) -> Vec2d {
+ Vec2d { x, y }
+ }
+ pub fn magnitude_squared(&self) -> i8 {
+ self.x
+ .saturating_pow(2)
+ .saturating_add(self.y.saturating_pow(2))
+ }
+}
+
+impl Add for Vec2d {
+ type Output = Self;
+
+ fn add(self, other: Self) -> Self {
+ Vec2d {
+ x: self.x.saturating_add(other.x),
+ y: self.y.saturating_add(other.y),
+ }
+ }
+}
+
+impl Sub for Vec2d {
+ type Output = Self;
+
+ fn sub(self, other: Self) -> Self {
+ Vec2d {
+ x: self.x.saturating_sub(other.x),
+ y: self.y.saturating_sub(other.y),
+ }
+ }
+}
+
+impl Mul<i8> for Vec2d {
+ type Output = Self;
+
+ fn mul(self, other: i8) -> Self {
+ Vec2d {
+ x: self.x.saturating_mul(other),
+ y: self.y.saturating_mul(other),
+ }
+ }
+}
+
+impl Neg for Vec2d {
+ type Output = Self;
+
+ fn neg(self) -> Self {
+ Vec2d {
+ x: -self.x,
+ y: -self.y,
+ }
+ }
+}
diff --git a/2019-worms/src/json.rs b/2019-worms/src/json.rs
new file mode 100644
index 0000000..a83f102
--- /dev/null
+++ b/2019-worms/src/json.rs
@@ -0,0 +1,554 @@
+use std::error::Error;
+use std::fs::File;
+use std::io::prelude::*;
+use std::path::Path;
+
+use serde::{Deserialize, Serialize};
+use serde_json;
+
+pub fn read_state_from_json_file(filename: &Path) -> Result<State, Box<dyn Error>> {
+ let mut file = File::open(filename)?;
+ let mut content = String::new();
+ file.read_to_string(&mut content)?;
+ let state: State = serde_json::from_str(content.as_ref())?;
+
+ Ok(state)
+}
+
+// TODO: Narrow numeric types
+// TODO: comment out stuff I don't want / need
+
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+#[serde(rename_all = "camelCase")]
+pub struct State {
+ pub current_round: u16,
+ pub max_rounds: u16,
+ pub pushback_damage: i32,
+ pub lava_damage: i32,
+ pub map_size: u8,
+ pub current_worm_id: i32,
+ pub consecutive_do_nothing_count: u32,
+ pub my_player: Player,
+ pub opponents: Vec<Opponent>,
+ pub map: Vec<Vec<Cell>>,
+}
+
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+#[serde(rename_all = "camelCase")]
+pub struct Player {
+ pub id: i32,
+ pub score: i32,
+ pub health: i32,
+ pub worms: Vec<PlayerWorm>,
+ pub remaining_worm_selections: u8,
+}
+
+impl Player {
+ pub fn health_score(&self) -> i32 {
+ self.health / 3
+ }
+}
+
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+#[serde(rename_all = "camelCase")]
+pub struct PlayerWorm {
+ pub id: i32,
+ pub health: i32,
+ pub position: Position,
+ pub digging_range: u32,
+ pub movement_range: u32,
+ pub rounds_until_unfrozen: u8,
+ pub weapon: Weapon,
+ pub banana_bombs: Option<Bomb>,
+ pub snowballs: Option<Snowball>,
+ pub profession: WormType,
+}
+
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+#[serde(rename_all = "camelCase")]
+pub struct Opponent {
+ pub id: i32,
+ pub score: i32,
+ pub current_worm_id: i32,
+ pub previous_command: String,
+ pub worms: Vec<OpponentWorm>,
+ pub remaining_worm_selections: u8,
+}
+
+impl Opponent {
+ pub fn health_score(&self) -> i32 {
+ self.worms.iter().map(|w| w.health).sum::<i32>() / 3
+ }
+}
+
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+#[serde(rename_all = "camelCase")]
+pub struct OpponentWorm {
+ pub id: i32,
+ pub health: i32,
+ pub position: Position,
+ pub digging_range: u32,
+ pub movement_range: u32,
+ pub rounds_until_unfrozen: u8,
+ pub profession: WormType,
+}
+
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+#[serde(rename_all = "PascalCase")]
+pub enum WormType {
+ Commando,
+ Agent,
+ Technologist,
+}
+
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+#[serde(rename_all = "camelCase")]
+pub struct Cell {
+ pub x: i8,
+ pub y: i8,
+ #[serde(rename = "type")]
+ pub cell_type: CellType,
+ pub occupier: Option<CellWorm>,
+ pub powerup: Option<Powerup>,
+}
+
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
+pub enum CellType {
+ Air,
+ Dirt,
+ Lava,
+ DeepSpace,
+}
+
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+#[serde(untagged)]
+#[serde(rename_all = "camelCase")]
+pub enum CellWorm {
+ #[serde(rename_all = "camelCase")]
+ PlayerWorm {
+ id: i32,
+ player_id: i32,
+ health: i32,
+ position: Position,
+ digging_range: u32,
+ movement_range: u32,
+ weapon: Weapon,
+ },
+ #[serde(rename_all = "camelCase")]
+ OpponentWorm {
+ id: i32,
+ player_id: i32,
+ health: i32,
+ position: Position,
+ digging_range: u32,
+ movement_range: u32,
+ },
+}
+
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+#[serde(rename_all = "camelCase")]
+pub struct Powerup {
+ #[serde(rename = "type")]
+ pub powerup_type: PowerupType,
+ pub value: i32,
+}
+
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
+pub enum PowerupType {
+ HealthPack,
+}
+
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+#[serde(rename_all = "camelCase")]
+pub struct Position {
+ pub x: i8,
+ pub y: i8,
+}
+
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+#[serde(rename_all = "camelCase")]
+pub struct Weapon {
+ pub damage: i32,
+ pub range: u8,
+}
+
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+#[serde(rename_all = "camelCase")]
+pub struct Bomb {
+ pub damage: i32,
+ pub range: u8,
+ pub count: u8,
+ pub damage_radius: u8,
+}
+
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+#[serde(rename_all = "camelCase")]
+pub struct Snowball {
+ pub freeze_duration: u8,
+ pub range: u8,
+ pub count: u8,
+ pub freeze_radius: u8,
+}
+
+impl State {
+ pub fn active_worm_index(&self) -> Option<usize> {
+ self.my_player
+ .worms
+ .iter()
+ .filter(|w| w.health > 0)
+ .position(|w| w.id == self.current_worm_id)
+ }
+
+ pub fn opponent_active_worm_index(&self) -> Option<usize> {
+ self.opponents[0]
+ .worms
+ .iter()
+ .filter(|w| w.health > 0)
+ .position(|w| w.id == self.opponents[0].current_worm_id)
+ }
+}
+
+#[cfg(test)]
+mod test {
+ use super::*;
+
+ #[test]
+ fn example_parses_correctly() {
+ let example = r#"
+{
+ "currentRound": 0,
+ "maxRounds": 200,
+ "pushbackDamage": 20,
+ "lavaDamage": 3,
+ "mapSize": 33,
+ "currentWormId": 1,
+ "consecutiveDoNothingCount": 0,
+ "myPlayer": {
+ "id": 1,
+ "score": 100,
+ "health": 300,
+ "currentWormId": 1,
+ "remainingWormSelections": 1,
+ "worms": [
+ {
+ "id": 1,
+ "health": 100,
+ "position": {
+ "x": 24,
+ "y": 29
+ },
+ "weapon": {
+ "damage": 1,
+ "range": 3
+ },
+ "bananaBombs": {
+ "damage": 20,
+ "range": 5,
+ "count": 3,
+ "damageRadius": 2
+ },
+ "diggingRange": 1,
+ "movementRange": 1,
+ "roundsUntilUnfrozen": 0,
+ "profession": "Agent"
+ },
+ {
+ "id": 2,
+ "health": 150,
+ "position": {
+ "x": 1,
+ "y": 16
+ },
+ "weapon": {
+ "damage": 1,
+ "range": 3
+ },
+ "diggingRange": 1,
+ "movementRange": 1,
+ "roundsUntilUnfrozen": 0,
+ "profession": "Commando"
+ },
+ {
+ "id": 3,
+ "health": 100,
+ "position": {
+ "x": 24,
+ "y": 4
+ },
+ "weapon": {
+ "damage": 8,
+ "range": 4
+ },
+ "snowballs": {
+ "freezeDuration": 5,
+ "range": 5,
+ "count": 3,
+ "freezeRadius": 1
+ },
+ "diggingRange": 1,
+ "movementRange": 1,
+ "roundsUntilUnfrozen": 3,
+ "profession": "Technologist"
+ }
+ ]
+ },
+ "opponents": [
+ {
+ "id": 2,
+ "score": 100,
+ "currentWormId": 3,
+ "remainingWormSelections": 2,
+ "previousCommand": "nothing",
+ "worms": [
+ {
+ "id": 1,
+ "health": 100,
+ "position": {
+ "x": 31,
+ "y": 16
+ },
+ "diggingRange": 1,
+ "movementRange": 1,
+ "roundsUntilUnfrozen": 0,
+ "profession": "Commando"
+ }
+ ]
+ }
+ ],
+ "map": [
+ [
+ {
+ "x": 0,
+ "y": 0,
+ "type": "DEEP_SPACE"
+ },
+ {
+ "x": 1,
+ "y": 0,
+ "type": "AIR"
+ },
+ {
+ "x": 2,
+ "y": 0,
+ "type": "DIRT"
+ }
+ ],
+ [
+ {
+ "x": 0,
+ "y": 1,
+ "type": "AIR",
+ "powerup": {
+ "type": "HEALTH_PACK",
+ "value": 5
+ }
+ },
+ {
+ "x": 1,
+ "y": 1,
+ "type": "AIR",
+ "occupier": {
+ "id": 1,
+ "playerId": 2,
+ "health": 100,
+ "position": {
+ "x": 1,
+ "y": 1
+ },
+ "diggingRange": 1,
+ "movementRange": 1
+ }
+ },
+ {
+ "x": 2,
+ "y": 1,
+ "type": "AIR",
+ "occupier": {
+ "id": 1,
+ "playerId": 1,
+ "health": 100,
+ "position": {
+ "x": 2,
+ "y": 1
+ },
+ "weapon": {
+ "damage": 1,
+ "range": 3
+ },
+ "diggingRange": 1,
+ "movementRange": 1
+ }
+ }
+ ]
+ ]
+}"#;
+
+ let expected = State {
+ current_round: 0,
+ max_rounds: 200,
+ pushback_damage: 20,
+ lava_damage: 3,
+ map_size: 33,
+ current_worm_id: 1,
+ consecutive_do_nothing_count: 0,
+ my_player: Player {
+ id: 1,
+ score: 100,
+ health: 300,
+ remaining_worm_selections: 1,
+ worms: vec![
+ PlayerWorm {
+ id: 1,
+ health: 100,
+ position: Position { x: 24, y: 29 },
+ weapon: Weapon {
+ damage: 1,
+ range: 3,
+ },
+ digging_range: 1,
+ movement_range: 1,
+ banana_bombs: Some(Bomb {
+ damage: 20,
+ range: 5,
+ count: 3,
+ damage_radius: 2,
+ }),
+ snowballs: None,
+ rounds_until_unfrozen: 0,
+ profession: WormType::Agent,
+ },
+ PlayerWorm {
+ id: 2,
+ health: 150,
+ position: Position { x: 1, y: 16 },
+ weapon: Weapon {
+ damage: 1,
+ range: 3,
+ },
+ digging_range: 1,
+ movement_range: 1,
+ banana_bombs: None,
+ snowballs: None,
+ rounds_until_unfrozen: 0,
+ profession: WormType::Commando,
+ },
+ PlayerWorm {
+ id: 3,
+ health: 100,
+ position: Position { x: 24, y: 4 },
+ weapon: Weapon {
+ damage: 8,
+ range: 4,
+ },
+ digging_range: 1,
+ movement_range: 1,
+ banana_bombs: None,
+ snowballs: Some(Snowball {
+ freeze_duration: 5,
+ range: 5,
+ count: 3,
+ freeze_radius: 1,
+ }),
+ rounds_until_unfrozen: 3,
+ profession: WormType::Technologist,
+ },
+ ],
+ },
+ opponents: vec![Opponent {
+ id: 2,
+ score: 100,
+ remaining_worm_selections: 2,
+ current_worm_id: 3,
+ previous_command: "nothing".into(),
+ worms: vec![OpponentWorm {
+ id: 1,
+ health: 100,
+ position: Position { x: 31, y: 16 },
+ digging_range: 1,
+ movement_range: 1,
+ rounds_until_unfrozen: 0,
+ profession: WormType::Commando,
+ }],
+ }],
+ map: vec![
+ vec![
+ Cell {
+ x: 0,
+ y: 0,
+ cell_type: CellType::DeepSpace,
+ occupier: None,
+ powerup: None,
+ },
+ Cell {
+ x: 1,
+ y: 0,
+ cell_type: CellType::Air,
+ occupier: None,
+ powerup: None,
+ },
+ Cell {
+ x: 2,
+ y: 0,
+ cell_type: CellType::Dirt,
+ occupier: None,
+ powerup: None,
+ },
+ ],
+ vec![
+ Cell {
+ x: 0,
+ y: 1,
+ cell_type: CellType::Air,
+ occupier: None,
+ powerup: Some(Powerup {
+ powerup_type: PowerupType::HealthPack,
+ value: 5,
+ }),
+ },
+ Cell {
+ x: 1,
+ y: 1,
+ cell_type: CellType::Air,
+ occupier: Some(CellWorm::OpponentWorm {
+ id: 1,
+ player_id: 2,
+ health: 100,
+ position: Position { x: 1, y: 1 },
+ digging_range: 1,
+ movement_range: 1,
+ }),
+ powerup: None,
+ },
+ Cell {
+ x: 2,
+ y: 1,
+ cell_type: CellType::Air,
+ occupier: Some(CellWorm::PlayerWorm {
+ id: 1,
+ player_id: 1,
+ health: 100,
+ position: Position { x: 2, y: 1 },
+ digging_range: 1,
+ movement_range: 1,
+ weapon: Weapon {
+ damage: 1,
+ range: 3,
+ },
+ }),
+ powerup: None,
+ },
+ ],
+ ],
+ };
+
+ let parsed: State = serde_json::from_str(example).unwrap();
+
+ assert_eq!(
+ parsed, expected,
+ "Parsed value did not match the expected value.\nParsed = {:#?}\nExpected = {:#?}",
+ parsed, expected
+ );
+ }
+}
diff --git a/2019-worms/src/lib.rs b/2019-worms/src/lib.rs
new file mode 100644
index 0000000..9922cce
--- /dev/null
+++ b/2019-worms/src/lib.rs
@@ -0,0 +1,8 @@
+#![warn(clippy::all)]
+
+pub mod command;
+pub mod json;
+pub mod geometry;
+pub mod game;
+pub mod strategy;
+pub mod constants;
diff --git a/2019-worms/src/main.rs b/2019-worms/src/main.rs
new file mode 100644
index 0000000..4f98e75
--- /dev/null
+++ b/2019-worms/src/main.rs
@@ -0,0 +1,46 @@
+use std::io::prelude::*;
+use std::io::stdin;
+use std::path::Path;
+
+use time::{Duration, PreciseTime};
+
+use steam_powered_wyrm::command::{Action, Command};
+use steam_powered_wyrm::game;
+use steam_powered_wyrm::json;
+use steam_powered_wyrm::strategy::{choose_move, ScoreConfig};
+
+fn main() {
+ let max_time = Duration::milliseconds(900);
+ let config = ScoreConfig::default();
+
+ let mut game_board = None;
+ for line in stdin().lock().lines() {
+ let start_time = PreciseTime::now();
+
+ let round_number = line.expect("Failed to read line from stdin: {}");
+
+ let command = match json::read_state_from_json_file(&Path::new(&format!(
+ "./rounds/{}/state.json",
+ round_number
+ ))) {
+ Ok(json_state) => match &mut game_board {
+ None => {
+ let new_board = game::GameBoard::new(json_state);
+ let command = choose_move(&new_board, &config, start_time, max_time);
+ game_board = Some(new_board);
+ command
+ }
+ Some(game_board) => {
+ game_board.update(json_state);
+ choose_move(&game_board, &config, start_time, max_time)
+ }
+ },
+ Err(e) => {
+ #[cfg(feature = "logging")]
+ eprintln!("WARN: State file could not be parsed: {}", e);
+ Command::new(Action::DoNothing)
+ }
+ };
+ println!("C;{};{}", round_number, command);
+ }
+}
diff --git a/2019-worms/src/strategy.rs b/2019-worms/src/strategy.rs
new file mode 100644
index 0000000..fce842b
--- /dev/null
+++ b/2019-worms/src/strategy.rs
@@ -0,0 +1,5 @@
+//mod mcts;
+//pub use mcts::{choose_move, Node};
+
+mod minimax;
+pub use minimax::{choose_move, choose_move_with_normalized_perf, Node, ScoreConfig};
diff --git a/2019-worms/src/strategy/minimax.rs b/2019-worms/src/strategy/minimax.rs
new file mode 100644
index 0000000..656ee36
--- /dev/null
+++ b/2019-worms/src/strategy/minimax.rs
@@ -0,0 +1,330 @@
+use crate::command::{Action, Command};
+use crate::constants::*;
+use crate::game::{GameBoard, SimulationOutcome};
+
+use fnv::FnvHashMap;
+use std::cmp;
+use std::ops::*;
+use time::{Duration, PreciseTime};
+
+#[derive(Debug, Clone)]
+pub struct ScoreConfig {
+ pub max_health_weight: f32,
+ pub total_health_weight: f32,
+ pub points_weight: f32,
+ pub victory_weight: f32,
+ pub snowball_weight: f32,
+ pub bomb_weight: f32,
+ pub explore_exploit_weight: f32,
+}
+
+impl Default for ScoreConfig {
+ fn default() -> ScoreConfig {
+ ScoreConfig {
+ max_health_weight: 100.,
+ total_health_weight: 10.,
+ points_weight: 1.,
+ victory_weight: 4500.,
+ snowball_weight: 10.,
+ bomb_weight: 10.,
+ explore_exploit_weight: 100.,
+ }
+ }
+}
+
+pub fn choose_move(
+ state: &GameBoard,
+ config: &ScoreConfig,
+ start_time: PreciseTime,
+ max_time: Duration,
+) -> Command {
+ let mut root_node = Node {
+ score_sum: ScoreSum::new(),
+ player_score_sums: [FnvHashMap::default(), FnvHashMap::default()],
+ unexplored: move_combos(state),
+ children: FnvHashMap::default(),
+ };
+
+ #[cfg(feature = "logging")]
+ {
+ let mut max_expand_time = Duration::milliseconds(0);
+ while start_time.to(PreciseTime::now()) < max_time {
+ let expand_start_time = PreciseTime::now();
+ let _ = expand_tree(&mut root_node, state.clone(), config);
+ max_expand_time = max_expand_time.max(expand_start_time.to(PreciseTime::now()));
+ }
+ eprintln!(
+ "Max expand time: {:?} ns",
+ max_expand_time.num_nanoseconds()
+ );
+ }
+ #[cfg(not(feature = "logging"))]
+ {
+ while start_time.to(PreciseTime::now()) < max_time {
+ let _ = expand_tree(&mut root_node, state.clone(), config);
+ }
+ }
+
+ #[cfg(feature = "logging")]
+ {
+ eprintln!("Number of simulations: {}", root_node.score_sum.visit_count);
+ for (command, score_sum) in &root_node.player_score_sums[0] {
+ eprintln!(
+ "{} = {} ({} visits)",
+ command,
+ score_sum.avg().val,
+ score_sum.visit_count
+ );
+ }
+ }
+
+ best_player_move(&root_node, 0)
+}
+
+pub fn choose_move_with_normalized_perf(
+ state: &GameBoard,
+ config: &ScoreConfig,
+ player_index: usize,
+ iterations: usize,
+) -> Command {
+ let mut root_node = Node {
+ score_sum: ScoreSum::new(),
+ player_score_sums: [FnvHashMap::default(), FnvHashMap::default()],
+ unexplored: move_combos(state),
+ children: FnvHashMap::default(),
+ };
+
+ for _ in 0..iterations {
+ let _ = expand_tree(&mut root_node, state.clone(), config);
+ }
+
+ #[cfg(feature = "logging")]
+ {
+ eprintln!("Number of simulations: {}", root_node.score_sum.visit_count);
+ for (command, score_sum) in &root_node.player_score_sums[player_index] {
+ eprintln!(
+ "{} = {} ({} visits)",
+ command,
+ score_sum.avg().val,
+ score_sum.visit_count
+ );
+ }
+ }
+
+ best_player_move(&root_node, player_index)
+}
+
+pub struct Node {
+ score_sum: ScoreSum,
+ player_score_sums: [FnvHashMap<Command, ScoreSum>; 2],
+ unexplored: Vec<[Command; 2]>,
+ children: FnvHashMap<[Command; 2], Node>,
+}
+
+#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
+struct Score {
+ val: f32,
+}
+
+impl AddAssign for Score {
+ fn add_assign(&mut self, other: Self) {
+ self.val = self.val + other.val;
+ }
+}
+
+impl Div<u32> for Score {
+ type Output = Self;
+ fn div(self, other: u32) -> Self {
+ Score {
+ val: self.val / other as f32,
+ }
+ }
+}
+
+impl Mul<f32> for Score {
+ type Output = Self;
+ fn mul(self, other: f32) -> Self {
+ Score {
+ val: self.val * other,
+ }
+ }
+}
+
+impl cmp::Eq for Score {}
+impl cmp::Ord for Score {
+ fn cmp(&self, other: &Score) -> cmp::Ordering {
+ self.val
+ .partial_cmp(&other.val)
+ .unwrap_or(cmp::Ordering::Equal)
+ }
+}
+
+struct ScoreSum {
+ sum: Score,
+ visit_count: u32,
+}
+
+impl ScoreSum {
+ fn new() -> ScoreSum {
+ ScoreSum {
+ sum: Score { val: 0. },
+ visit_count: 0,
+ }
+ }
+ fn with_initial(score: Score) -> ScoreSum {
+ ScoreSum {
+ sum: score,
+ visit_count: 1,
+ }
+ }
+ fn avg(&self) -> Score {
+ self.sum / self.visit_count
+ }
+}
+
+impl AddAssign<Score> for ScoreSum {
+ fn add_assign(&mut self, other: Score) {
+ self.sum += other;
+ self.visit_count = self.visit_count.saturating_add(1);
+ }
+}
+
+fn expand_tree(node: &mut Node, mut state: GameBoard, config: &ScoreConfig) -> Score {
+ if state.outcome != SimulationOutcome::Continue {
+ score(&state, config)
+ } else if let Some(commands) = node.unexplored.pop() {
+ state.simulate(commands);
+ let score = score(&state, config);
+ let unexplored = if state.outcome == SimulationOutcome::Continue {
+ move_combos(&state)
+ } else {
+ Vec::new()
+ };
+
+ let new_node = Node {
+ score_sum: ScoreSum::with_initial(score),
+ player_score_sums: [FnvHashMap::default(), FnvHashMap::default()],
+ unexplored,
+ children: FnvHashMap::default(),
+ };
+ node.children.insert(commands, new_node);
+ update(node, commands, score);
+
+ score
+ } else {
+ let commands = choose_existing(node, config);
+ state.simulate(commands);
+ let score = expand_tree(
+ node.children
+ .get_mut(&commands)
+ .expect("The existing node hasn't been tried yet"),
+ state,
+ config,
+ );
+ update(node, commands, score);
+ score
+ }
+}
+
+fn move_combos(state: &GameBoard) -> Vec<[Command; 2]> {
+ let player_moves = state.pruned_valid_moves(0);
+ let opponent_moves = state.pruned_valid_moves(1);
+ debug_assert!(!player_moves.is_empty(), "No player moves");
+ debug_assert!(!opponent_moves.is_empty(), "No opponent moves");
+
+ let mut result = Vec::with_capacity(player_moves.len() * opponent_moves.len());
+ for p in &player_moves {
+ for o in &opponent_moves {
+ result.push([*p, *o]);
+ }
+ }
+
+ result
+}
+
+fn best_player_move(node: &Node, player_index: usize) -> Command {
+ let multiplier = if player_index == 0 { 1. } else { -1. };
+ node.player_score_sums[player_index]
+ .iter()
+ .max_by_key(|(_command, score_sum)| score_sum.avg() * multiplier)
+ .map(|(command, _score_sum)| *command)
+ .unwrap_or_else(|| Command::new(Action::DoNothing))
+}
+
+fn score(state: &GameBoard, config: &ScoreConfig) -> Score {
+ let max_health =
+ (state.players[0].max_worm_health() - state.players[1].max_worm_health()) as f32;
+ let total_health = (state.players[0].health() - state.players[1].health()) as f32;
+ let points = (state.players[0].score() - state.players[1].score()) as f32;
+ let victory = match state.outcome {
+ SimulationOutcome::PlayerWon(0) => 1.,
+ SimulationOutcome::PlayerWon(1) => -1.,
+ _ => 0.,
+ };
+
+ let time_to_end = MAX_ROUNDS as f32 - state.round as f32 + 1.;
+
+ let snowballs = state.players[0].snowballs() as f32 - state.players[1].snowballs() as f32;
+ let bombs = state.players[0].bombs() as f32 - state.players[1].bombs() as f32;
+
+ Score {
+ val: max_health * config.max_health_weight
+ + total_health * config.total_health_weight
+ + points * config.points_weight
+ + victory * config.victory_weight
+ + snowballs * config.snowball_weight / time_to_end
+ + bombs * config.bomb_weight / time_to_end,
+ }
+}
+
+fn choose_existing(node: &Node, config: &ScoreConfig) -> [Command; 2] {
+ [
+ choose_one_existing(node, 0, config),
+ choose_one_existing(node, 1, config),
+ ]
+}
+
+fn choose_one_existing(node: &Node, player_index: usize, config: &ScoreConfig) -> Command {
+ let ln_n = (node.score_sum.visit_count as f32).ln();
+ let multiplier = if player_index == 0 { 1. } else { -1. };
+ let mut command_confidences =
+ node.player_score_sums[player_index]
+ .iter()
+ .map(|(command, score_sum)| {
+ (
+ command,
+ (score_sum.avg() * multiplier).val
+ + config.explore_exploit_weight
+ * (ln_n / score_sum.visit_count as f32).sqrt(),
+ )
+ });
+
+ command_confidences
+ .next()
+ .map(|first| {
+ command_confidences
+ .fold(
+ first,
+ |(acc_command, acc_confidence), (next_command, next_confidence)| {
+ if acc_confidence > next_confidence {
+ (acc_command, acc_confidence)
+ } else {
+ (next_command, next_confidence)
+ }
+ },
+ )
+ .0
+ .clone()
+ })
+ .unwrap_or_else(|| Command::new(Action::DoNothing))
+}
+
+fn update(node: &mut Node, commands: [Command; 2], score: Score) {
+ *node.player_score_sums[0]
+ .entry(commands[0])
+ .or_insert_with(ScoreSum::new) += score;
+ *node.player_score_sums[1]
+ .entry(commands[1])
+ .or_insert_with(ScoreSum::new) += score;
+ node.score_sum += score;
+}
diff --git a/2019-worms/tests/example-state.json b/2019-worms/tests/example-state.json
new file mode 100644
index 0000000..d7a8fa3
--- /dev/null
+++ b/2019-worms/tests/example-state.json
@@ -0,0 +1 @@
+{"currentRound":1,"maxRounds":400,"pushbackDamage":20,"lavaDamage":3,"mapSize":33,"currentWormId":1,"consecutiveDoNothingCount":0,"myPlayer":{"id":1,"score":116,"health":350,"currentWormId":1,"remainingWormSelections":5,"previousCommand":"nothing","worms":[{"id":1,"health":150,"position":{"x":24,"y":28},"weapon":{"damage":8,"range":4},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Commando"},{"id":2,"health":100,"position":{"x":1,"y":16},"weapon":{"damage":8,"range":4},"bananaBombs":{"damage":20,"range":5,"count":3,"damageRadius":2},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Agent"},{"id":3,"health":100,"position":{"x":24,"y":4},"weapon":{"damage":8,"range":4},"snowballs":{"freezeDuration":5,"range":5,"count":3,"freezeRadius":1},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Technologist"}]},"opponents":[{"id":2,"score":116,"currentWormId":1,"remainingWormSelections":5,"previousCommand":"nothing","worms":[{"id":1,"health":150,"position":{"x":31,"y":16},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Commando"},{"id":2,"health":100,"position":{"x":8,"y":28},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Agent"},{"id":3,"health":100,"position":{"x":8,"y":4},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Technologist"}]}],"map":[[{"x":0,"y":0,"type":"DEEP_SPACE"},{"x":1,"y":0,"type":"DEEP_SPACE"},{"x":2,"y":0,"type":"DEEP_SPACE"},{"x":3,"y":0,"type":"DEEP_SPACE"},{"x":4,"y":0,"type":"DEEP_SPACE"},{"x":5,"y":0,"type":"DEEP_SPACE"},{"x":6,"y":0,"type":"DEEP_SPACE"},{"x":7,"y":0,"type":"DEEP_SPACE"},{"x":8,"y":0,"type":"DEEP_SPACE"},{"x":9,"y":0,"type":"DEEP_SPACE"},{"x":10,"y":0,"type":"DEEP_SPACE"},{"x":11,"y":0,"type":"DIRT"},{"x":12,"y":0,"type":"AIR"},{"x":13,"y":0,"type":"AIR"},{"x":14,"y":0,"type":"AIR"},{"x":15,"y":0,"type":"DIRT"},{"x":16,"y":0,"type":"DIRT"},{"x":17,"y":0,"type":"DIRT"},{"x":18,"y":0,"type":"AIR"},{"x":19,"y":0,"type":"AIR"},{"x":20,"y":0,"type":"AIR"},{"x":21,"y":0,"type":"DIRT"},{"x":22,"y":0,"type":"DEEP_SPACE"},{"x":23,"y":0,"type":"DEEP_SPACE"},{"x":24,"y":0,"type":"DEEP_SPACE"},{"x":25,"y":0,"type":"DEEP_SPACE"},{"x":26,"y":0,"type":"DEEP_SPACE"},{"x":27,"y":0,"type":"DEEP_SPACE"},{"x":28,"y":0,"type":"DEEP_SPACE"},{"x":29,"y":0,"type":"DEEP_SPACE"},{"x":30,"y":0,"type":"DEEP_SPACE"},{"x":31,"y":0,"type":"DEEP_SPACE"},{"x":32,"y":0,"type":"DEEP_SPACE"}],[{"x":0,"y":1,"type":"DEEP_SPACE"},{"x":1,"y":1,"type":"DEEP_SPACE"},{"x":2,"y":1,"type":"DEEP_SPACE"},{"x":3,"y":1,"type":"DEEP_SPACE"},{"x":4,"y":1,"type":"DEEP_SPACE"},{"x":5,"y":1,"type":"DEEP_SPACE"},{"x":6,"y":1,"type":"DEEP_SPACE"},{"x":7,"y":1,"type":"DEEP_SPACE"},{"x":8,"y":1,"type":"DIRT"},{"x":9,"y":1,"type":"DIRT"},{"x":10,"y":1,"type":"DIRT"},{"x":11,"y":1,"type":"DIRT"},{"x":12,"y":1,"type":"AIR"},{"x":13,"y":1,"type":"AIR"},{"x":14,"y":1,"type":"DIRT"},{"x":15,"y":1,"type":"DIRT"},{"x":16,"y":1,"type":"DIRT"},{"x":17,"y":1,"type":"DIRT"},{"x":18,"y":1,"type":"DIRT"},{"x":19,"y":1,"type":"AIR"},{"x":20,"y":1,"type":"AIR"},{"x":21,"y":1,"type":"DIRT"},{"x":22,"y":1,"type":"DIRT"},{"x":23,"y":1,"type":"DIRT"},{"x":24,"y":1,"type":"DIRT"},{"x":25,"y":1,"type":"DEEP_SPACE"},{"x":26,"y":1,"type":"DEEP_SPACE"},{"x":27,"y":1,"type":"DEEP_SPACE"},{"x":28,"y":1,"type":"DEEP_SPACE"},{"x":29,"y":1,"type":"DEEP_SPACE"},{"x":30,"y":1,"type":"DEEP_SPACE"},{"x":31,"y":1,"type":"DEEP_SPACE"},{"x":32,"y":1,"type":"DEEP_SPACE"}],[{"x":0,"y":2,"type":"DEEP_SPACE"},{"x":1,"y":2,"type":"DEEP_SPACE"},{"x":2,"y":2,"type":"DEEP_SPACE"},{"x":3,"y":2,"type":"DEEP_SPACE"},{"x":4,"y":2,"type":"DEEP_SPACE"},{"x":5,"y":2,"type":"DEEP_SPACE"},{"x":6,"y":2,"type":"DEEP_SPACE"},{"x":7,"y":2,"type":"DIRT"},{"x":8,"y":2,"type":"DIRT"},{"x":9,"y":2,"type":"DIRT"},{"x":10,"y":2,"type":"DIRT"},{"x":11,"y":2,"type":"AIR"},{"x":12,"y":2,"type":"AIR"},{"x":13,"y":2,"type":"AIR"},{"x":14,"y":2,"type":"AIR"},{"x":15,"y":2,"type":"DIRT"},{"x":16,"y":2,"type":"AIR"},{"x":17,"y":2,"type":"DIRT"},{"x":18,"y":2,"type":"AIR"},{"x":19,"y":2,"type":"AIR"},{"x":20,"y":2,"type":"AIR"},{"x":21,"y":2,"type":"AIR"},{"x":22,"y":2,"type":"DIRT"},{"x":23,"y":2,"type":"DIRT"},{"x":24,"y":2,"type":"DIRT"},{"x":25,"y":2,"type":"DIRT"},{"x":26,"y":2,"type":"DEEP_SPACE"},{"x":27,"y":2,"type":"DEEP_SPACE"},{"x":28,"y":2,"type":"DEEP_SPACE"},{"x":29,"y":2,"type":"DEEP_SPACE"},{"x":30,"y":2,"type":"DEEP_SPACE"},{"x":31,"y":2,"type":"DEEP_SPACE"},{"x":32,"y":2,"type":"DEEP_SPACE"}],[{"x":0,"y":3,"type":"DEEP_SPACE"},{"x":1,"y":3,"type":"DEEP_SPACE"},{"x":2,"y":3,"type":"DEEP_SPACE"},{"x":3,"y":3,"type":"DEEP_SPACE"},{"x":4,"y":3,"type":"DEEP_SPACE"},{"x":5,"y":3,"type":"DEEP_SPACE"},{"x":6,"y":3,"type":"DIRT"},{"x":7,"y":3,"type":"AIR"},{"x":8,"y":3,"type":"AIR"},{"x":9,"y":3,"type":"AIR"},{"x":10,"y":3,"type":"DIRT"},{"x":11,"y":3,"type":"AIR"},{"x":12,"y":3,"type":"AIR"},{"x":13,"y":3,"type":"AIR"},{"x":14,"y":3,"type":"AIR"},{"x":15,"y":3,"type":"DIRT"},{"x":16,"y":3,"type":"AIR"},{"x":17,"y":3,"type":"DIRT"},{"x":18,"y":3,"type":"AIR"},{"x":19,"y":3,"type":"AIR"},{"x":20,"y":3,"type":"AIR"},{"x":21,"y":3,"type":"AIR"},{"x":22,"y":3,"type":"DIRT"},{"x":23,"y":3,"type":"AIR"},{"x":24,"y":3,"type":"AIR"},{"x":25,"y":3,"type":"AIR"},{"x":26,"y":3,"type":"DIRT"},{"x":27,"y":3,"type":"DEEP_SPACE"},{"x":28,"y":3,"type":"DEEP_SPACE"},{"x":29,"y":3,"type":"DEEP_SPACE"},{"x":30,"y":3,"type":"DEEP_SPACE"},{"x":31,"y":3,"type":"DEEP_SPACE"},{"x":32,"y":3,"type":"DEEP_SPACE"}],[{"x":0,"y":4,"type":"DEEP_SPACE"},{"x":1,"y":4,"type":"DEEP_SPACE"},{"x":2,"y":4,"type":"DEEP_SPACE"},{"x":3,"y":4,"type":"DEEP_SPACE"},{"x":4,"y":4,"type":"AIR"},{"x":5,"y":4,"type":"AIR"},{"x":6,"y":4,"type":"DIRT"},{"x":7,"y":4,"type":"AIR"},{"x":8,"y":4,"type":"AIR","occupier":{"id":3,"playerId":2,"health":100,"position":{"x":8,"y":4},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Technologist"}},{"x":9,"y":4,"type":"AIR"},{"x":10,"y":4,"type":"DIRT"},{"x":11,"y":4,"type":"AIR"},{"x":12,"y":4,"type":"AIR"},{"x":13,"y":4,"type":"DIRT"},{"x":14,"y":4,"type":"DIRT"},{"x":15,"y":4,"type":"DIRT"},{"x":16,"y":4,"type":"AIR"},{"x":17,"y":4,"type":"DIRT"},{"x":18,"y":4,"type":"DIRT"},{"x":19,"y":4,"type":"DIRT"},{"x":20,"y":4,"type":"AIR"},{"x":21,"y":4,"type":"AIR"},{"x":22,"y":4,"type":"DIRT"},{"x":23,"y":4,"type":"AIR"},{"x":24,"y":4,"type":"AIR","occupier":{"id":3,"playerId":1,"health":100,"position":{"x":24,"y":4},"weapon":{"damage":8,"range":4},"snowballs":{"freezeDuration":5,"range":5,"count":3,"freezeRadius":1},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Technologist"}},{"x":25,"y":4,"type":"AIR"},{"x":26,"y":4,"type":"DIRT"},{"x":27,"y":4,"type":"AIR"},{"x":28,"y":4,"type":"AIR"},{"x":29,"y":4,"type":"DEEP_SPACE"},{"x":30,"y":4,"type":"DEEP_SPACE"},{"x":31,"y":4,"type":"DEEP_SPACE"},{"x":32,"y":4,"type":"DEEP_SPACE"}],[{"x":0,"y":5,"type":"DEEP_SPACE"},{"x":1,"y":5,"type":"DEEP_SPACE"},{"x":2,"y":5,"type":"DEEP_SPACE"},{"x":3,"y":5,"type":"DEEP_SPACE"},{"x":4,"y":5,"type":"AIR"},{"x":5,"y":5,"type":"AIR"},{"x":6,"y":5,"type":"DIRT"},{"x":7,"y":5,"type":"AIR"},{"x":8,"y":5,"type":"AIR"},{"x":9,"y":5,"type":"AIR"},{"x":10,"y":5,"type":"DIRT"},{"x":11,"y":5,"type":"DIRT"},{"x":12,"y":5,"type":"AIR"},{"x":13,"y":5,"type":"AIR"},{"x":14,"y":5,"type":"AIR"},{"x":15,"y":5,"type":"AIR"},{"x":16,"y":5,"type":"AIR"},{"x":17,"y":5,"type":"AIR"},{"x":18,"y":5,"type":"AIR"},{"x":19,"y":5,"type":"AIR"},{"x":20,"y":5,"type":"AIR"},{"x":21,"y":5,"type":"DIRT"},{"x":22,"y":5,"type":"DIRT"},{"x":23,"y":5,"type":"AIR"},{"x":24,"y":5,"type":"AIR"},{"x":25,"y":5,"type":"AIR"},{"x":26,"y":5,"type":"DIRT"},{"x":27,"y":5,"type":"AIR"},{"x":28,"y":5,"type":"AIR"},{"x":29,"y":5,"type":"DEEP_SPACE"},{"x":30,"y":5,"type":"DEEP_SPACE"},{"x":31,"y":5,"type":"DEEP_SPACE"},{"x":32,"y":5,"type":"DEEP_SPACE"}],[{"x":0,"y":6,"type":"DEEP_SPACE"},{"x":1,"y":6,"type":"DEEP_SPACE"},{"x":2,"y":6,"type":"DEEP_SPACE"},{"x":3,"y":6,"type":"AIR"},{"x":4,"y":6,"type":"AIR"},{"x":5,"y":6,"type":"AIR"},{"x":6,"y":6,"type":"DIRT"},{"x":7,"y":6,"type":"DIRT"},{"x":8,"y":6,"type":"DIRT"},{"x":9,"y":6,"type":"DIRT"},{"x":10,"y":6,"type":"DIRT"},{"x":11,"y":6,"type":"DIRT"},{"x":12,"y":6,"type":"AIR"},{"x":13,"y":6,"type":"AIR"},{"x":14,"y":6,"type":"AIR"},{"x":15,"y":6,"type":"AIR"},{"x":16,"y":6,"type":"AIR"},{"x":17,"y":6,"type":"AIR"},{"x":18,"y":6,"type":"AIR"},{"x":19,"y":6,"type":"AIR"},{"x":20,"y":6,"type":"AIR"},{"x":21,"y":6,"type":"DIRT"},{"x":22,"y":6,"type":"DIRT"},{"x":23,"y":6,"type":"DIRT"},{"x":24,"y":6,"type":"DIRT"},{"x":25,"y":6,"type":"DIRT"},{"x":26,"y":6,"type":"DIRT"},{"x":27,"y":6,"type":"AIR"},{"x":28,"y":6,"type":"AIR"},{"x":29,"y":6,"type":"AIR"},{"x":30,"y":6,"type":"DEEP_SPACE"},{"x":31,"y":6,"type":"DEEP_SPACE"},{"x":32,"y":6,"type":"DEEP_SPACE"}],[{"x":0,"y":7,"type":"DEEP_SPACE"},{"x":1,"y":7,"type":"DEEP_SPACE"},{"x":2,"y":7,"type":"AIR"},{"x":3,"y":7,"type":"AIR"},{"x":4,"y":7,"type":"AIR"},{"x":5,"y":7,"type":"AIR"},{"x":6,"y":7,"type":"AIR"},{"x":7,"y":7,"type":"AIR"},{"x":8,"y":7,"type":"AIR"},{"x":9,"y":7,"type":"AIR"},{"x":10,"y":7,"type":"AIR"},{"x":11,"y":7,"type":"AIR"},{"x":12,"y":7,"type":"DIRT"},{"x":13,"y":7,"type":"DIRT"},{"x":14,"y":7,"type":"AIR"},{"x":15,"y":7,"type":"AIR"},{"x":16,"y":7,"type":"DIRT"},{"x":17,"y":7,"type":"AIR"},{"x":18,"y":7,"type":"AIR"},{"x":19,"y":7,"type":"DIRT"},{"x":20,"y":7,"type":"DIRT"},{"x":21,"y":7,"type":"AIR"},{"x":22,"y":7,"type":"AIR"},{"x":23,"y":7,"type":"AIR"},{"x":24,"y":7,"type":"AIR"},{"x":25,"y":7,"type":"AIR"},{"x":26,"y":7,"type":"AIR"},{"x":27,"y":7,"type":"AIR"},{"x":28,"y":7,"type":"AIR"},{"x":29,"y":7,"type":"AIR"},{"x":30,"y":7,"type":"AIR"},{"x":31,"y":7,"type":"DEEP_SPACE"},{"x":32,"y":7,"type":"DEEP_SPACE"}],[{"x":0,"y":8,"type":"DEEP_SPACE"},{"x":1,"y":8,"type":"DIRT"},{"x":2,"y":8,"type":"DIRT"},{"x":3,"y":8,"type":"AIR"},{"x":4,"y":8,"type":"AIR"},{"x":5,"y":8,"type":"AIR"},{"x":6,"y":8,"type":"AIR"},{"x":7,"y":8,"type":"DIRT"},{"x":8,"y":8,"type":"DIRT"},{"x":9,"y":8,"type":"AIR"},{"x":10,"y":8,"type":"AIR"},{"x":11,"y":8,"type":"AIR"},{"x":12,"y":8,"type":"DIRT"},{"x":13,"y":8,"type":"DIRT"},{"x":14,"y":8,"type":"DIRT"},{"x":15,"y":8,"type":"AIR"},{"x":16,"y":8,"type":"DIRT"},{"x":17,"y":8,"type":"AIR"},{"x":18,"y":8,"type":"DIRT"},{"x":19,"y":8,"type":"DIRT"},{"x":20,"y":8,"type":"DIRT"},{"x":21,"y":8,"type":"AIR"},{"x":22,"y":8,"type":"AIR"},{"x":23,"y":8,"type":"AIR"},{"x":24,"y":8,"type":"DIRT"},{"x":25,"y":8,"type":"DIRT"},{"x":26,"y":8,"type":"AIR"},{"x":27,"y":8,"type":"AIR"},{"x":28,"y":8,"type":"AIR"},{"x":29,"y":8,"type":"AIR"},{"x":30,"y":8,"type":"DIRT"},{"x":31,"y":8,"type":"DIRT"},{"x":32,"y":8,"type":"DEEP_SPACE"}],[{"x":0,"y":9,"type":"DEEP_SPACE"},{"x":1,"y":9,"type":"DIRT"},{"x":2,"y":9,"type":"DIRT"},{"x":3,"y":9,"type":"AIR"},{"x":4,"y":9,"type":"AIR"},{"x":5,"y":9,"type":"AIR"},{"x":6,"y":9,"type":"DIRT"},{"x":7,"y":9,"type":"AIR"},{"x":8,"y":9,"type":"DIRT"},{"x":9,"y":9,"type":"DIRT"},{"x":10,"y":9,"type":"AIR"},{"x":11,"y":9,"type":"DIRT"},{"x":12,"y":9,"type":"DIRT"},{"x":13,"y":9,"type":"DIRT"},{"x":14,"y":9,"type":"DIRT"},{"x":15,"y":9,"type":"AIR"},{"x":16,"y":9,"type":"DIRT"},{"x":17,"y":9,"type":"AIR"},{"x":18,"y":9,"type":"DIRT"},{"x":19,"y":9,"type":"DIRT"},{"x":20,"y":9,"type":"DIRT"},{"x":21,"y":9,"type":"DIRT"},{"x":22,"y":9,"type":"AIR"},{"x":23,"y":9,"type":"DIRT"},{"x":24,"y":9,"type":"DIRT"},{"x":25,"y":9,"type":"AIR"},{"x":26,"y":9,"type":"DIRT"},{"x":27,"y":9,"type":"AIR"},{"x":28,"y":9,"type":"AIR"},{"x":29,"y":9,"type":"AIR"},{"x":30,"y":9,"type":"DIRT"},{"x":31,"y":9,"type":"DIRT"},{"x":32,"y":9,"type":"DEEP_SPACE"}],[{"x":0,"y":10,"type":"DEEP_SPACE"},{"x":1,"y":10,"type":"AIR"},{"x":2,"y":10,"type":"AIR"},{"x":3,"y":10,"type":"DIRT"},{"x":4,"y":10,"type":"DIRT"},{"x":5,"y":10,"type":"DIRT"},{"x":6,"y":10,"type":"DIRT"},{"x":7,"y":10,"type":"AIR"},{"x":8,"y":10,"type":"AIR"},{"x":9,"y":10,"type":"DIRT"},{"x":10,"y":10,"type":"DIRT"},{"x":11,"y":10,"type":"DIRT"},{"x":12,"y":10,"type":"DIRT"},{"x":13,"y":10,"type":"DIRT"},{"x":14,"y":10,"type":"DIRT"},{"x":15,"y":10,"type":"DIRT"},{"x":16,"y":10,"type":"DIRT"},{"x":17,"y":10,"type":"DIRT"},{"x":18,"y":10,"type":"DIRT"},{"x":19,"y":10,"type":"DIRT"},{"x":20,"y":10,"type":"DIRT"},{"x":21,"y":10,"type":"DIRT"},{"x":22,"y":10,"type":"DIRT"},{"x":23,"y":10,"type":"DIRT"},{"x":24,"y":10,"type":"AIR"},{"x":25,"y":10,"type":"AIR"},{"x":26,"y":10,"type":"DIRT"},{"x":27,"y":10,"type":"DIRT"},{"x":28,"y":10,"type":"DIRT"},{"x":29,"y":10,"type":"DIRT"},{"x":30,"y":10,"type":"AIR"},{"x":31,"y":10,"type":"AIR"},{"x":32,"y":10,"type":"DEEP_SPACE"}],[{"x":0,"y":11,"type":"AIR"},{"x":1,"y":11,"type":"AIR"},{"x":2,"y":11,"type":"DIRT"},{"x":3,"y":11,"type":"DIRT"},{"x":4,"y":11,"type":"DIRT"},{"x":5,"y":11,"type":"AIR"},{"x":6,"y":11,"type":"DIRT"},{"x":7,"y":11,"type":"AIR"},{"x":8,"y":11,"type":"AIR"},{"x":9,"y":11,"type":"AIR"},{"x":10,"y":11,"type":"DIRT"},{"x":11,"y":11,"type":"DIRT"},{"x":12,"y":11,"type":"DIRT"},{"x":13,"y":11,"type":"DIRT"},{"x":14,"y":11,"type":"AIR"},{"x":15,"y":11,"type":"AIR"},{"x":16,"y":11,"type":"AIR"},{"x":17,"y":11,"type":"AIR"},{"x":18,"y":11,"type":"AIR"},{"x":19,"y":11,"type":"DIRT"},{"x":20,"y":11,"type":"DIRT"},{"x":21,"y":11,"type":"DIRT"},{"x":22,"y":11,"type":"DIRT"},{"x":23,"y":11,"type":"AIR"},{"x":24,"y":11,"type":"AIR"},{"x":25,"y":11,"type":"AIR"},{"x":26,"y":11,"type":"DIRT"},{"x":27,"y":11,"type":"AIR"},{"x":28,"y":11,"type":"DIRT"},{"x":29,"y":11,"type":"DIRT"},{"x":30,"y":11,"type":"DIRT"},{"x":31,"y":11,"type":"AIR"},{"x":32,"y":11,"type":"AIR"}],[{"x":0,"y":12,"type":"AIR"},{"x":1,"y":12,"type":"AIR"},{"x":2,"y":12,"type":"DIRT"},{"x":3,"y":12,"type":"AIR"},{"x":4,"y":12,"type":"AIR"},{"x":5,"y":12,"type":"DIRT"},{"x":6,"y":12,"type":"DIRT"},{"x":7,"y":12,"type":"AIR"},{"x":8,"y":12,"type":"AIR"},{"x":9,"y":12,"type":"AIR"},{"x":10,"y":12,"type":"AIR"},{"x":11,"y":12,"type":"DIRT"},{"x":12,"y":12,"type":"DIRT"},{"x":13,"y":12,"type":"AIR"},{"x":14,"y":12,"type":"AIR"},{"x":15,"y":12,"type":"DIRT"},{"x":16,"y":12,"type":"DIRT"},{"x":17,"y":12,"type":"DIRT"},{"x":18,"y":12,"type":"AIR"},{"x":19,"y":12,"type":"AIR"},{"x":20,"y":12,"type":"DIRT"},{"x":21,"y":12,"type":"DIRT"},{"x":22,"y":12,"type":"AIR"},{"x":23,"y":12,"type":"AIR"},{"x":24,"y":12,"type":"AIR"},{"x":25,"y":12,"type":"AIR"},{"x":26,"y":12,"type":"DIRT"},{"x":27,"y":12,"type":"DIRT"},{"x":28,"y":12,"type":"AIR"},{"x":29,"y":12,"type":"AIR"},{"x":30,"y":12,"type":"DIRT"},{"x":31,"y":12,"type":"AIR"},{"x":32,"y":12,"type":"AIR"}],[{"x":0,"y":13,"type":"AIR"},{"x":1,"y":13,"type":"AIR"},{"x":2,"y":13,"type":"DIRT"},{"x":3,"y":13,"type":"DIRT"},{"x":4,"y":13,"type":"AIR"},{"x":5,"y":13,"type":"DIRT"},{"x":6,"y":13,"type":"AIR"},{"x":7,"y":13,"type":"AIR"},{"x":8,"y":13,"type":"DIRT"},{"x":9,"y":13,"type":"DIRT"},{"x":10,"y":13,"type":"DIRT"},{"x":11,"y":13,"type":"DIRT"},{"x":12,"y":13,"type":"AIR"},{"x":13,"y":13,"type":"AIR"},{"x":14,"y":13,"type":"DIRT"},{"x":15,"y":13,"type":"DIRT"},{"x":16,"y":13,"type":"DIRT"},{"x":17,"y":13,"type":"DIRT"},{"x":18,"y":13,"type":"DIRT"},{"x":19,"y":13,"type":"AIR"},{"x":20,"y":13,"type":"AIR"},{"x":21,"y":13,"type":"DIRT"},{"x":22,"y":13,"type":"DIRT"},{"x":23,"y":13,"type":"DIRT"},{"x":24,"y":13,"type":"DIRT"},{"x":25,"y":13,"type":"AIR"},{"x":26,"y":13,"type":"AIR"},{"x":27,"y":13,"type":"DIRT"},{"x":28,"y":13,"type":"AIR"},{"x":29,"y":13,"type":"DIRT"},{"x":30,"y":13,"type":"DIRT"},{"x":31,"y":13,"type":"AIR"},{"x":32,"y":13,"type":"AIR"}],[{"x":0,"y":14,"type":"DIRT"},{"x":1,"y":14,"type":"DIRT"},{"x":2,"y":14,"type":"DIRT"},{"x":3,"y":14,"type":"DIRT"},{"x":4,"y":14,"type":"AIR"},{"x":5,"y":14,"type":"AIR"},{"x":6,"y":14,"type":"AIR"},{"x":7,"y":14,"type":"AIR"},{"x":8,"y":14,"type":"AIR"},{"x":9,"y":14,"type":"AIR"},{"x":10,"y":14,"type":"AIR"},{"x":11,"y":14,"type":"DIRT"},{"x":12,"y":14,"type":"AIR"},{"x":13,"y":14,"type":"AIR"},{"x":14,"y":14,"type":"DIRT"},{"x":15,"y":14,"type":"DIRT"},{"x":16,"y":14,"type":"AIR"},{"x":17,"y":14,"type":"DIRT"},{"x":18,"y":14,"type":"DIRT"},{"x":19,"y":14,"type":"AIR"},{"x":20,"y":14,"type":"AIR"},{"x":21,"y":14,"type":"DIRT"},{"x":22,"y":14,"type":"AIR"},{"x":23,"y":14,"type":"AIR"},{"x":24,"y":14,"type":"AIR"},{"x":25,"y":14,"type":"AIR"},{"x":26,"y":14,"type":"AIR"},{"x":27,"y":14,"type":"AIR"},{"x":28,"y":14,"type":"AIR"},{"x":29,"y":14,"type":"DIRT"},{"x":30,"y":14,"type":"DIRT"},{"x":31,"y":14,"type":"DIRT"},{"x":32,"y":14,"type":"DIRT"}],[{"x":0,"y":15,"type":"AIR"},{"x":1,"y":15,"type":"AIR"},{"x":2,"y":15,"type":"AIR"},{"x":3,"y":15,"type":"DIRT"},{"x":4,"y":15,"type":"AIR"},{"x":5,"y":15,"type":"DIRT"},{"x":6,"y":15,"type":"DIRT"},{"x":7,"y":15,"type":"AIR"},{"x":8,"y":15,"type":"AIR"},{"x":9,"y":15,"type":"AIR"},{"x":10,"y":15,"type":"AIR"},{"x":11,"y":15,"type":"AIR"},{"x":12,"y":15,"type":"AIR"},{"x":13,"y":15,"type":"AIR"},{"x":14,"y":15,"type":"AIR","powerup":{"type":"HEALTH_PACK","value":10}},{"x":15,"y":15,"type":"AIR"},{"x":16,"y":15,"type":"AIR"},{"x":17,"y":15,"type":"AIR"},{"x":18,"y":15,"type":"AIR"},{"x":19,"y":15,"type":"AIR"},{"x":20,"y":15,"type":"AIR"},{"x":21,"y":15,"type":"AIR"},{"x":22,"y":15,"type":"AIR"},{"x":23,"y":15,"type":"AIR"},{"x":24,"y":15,"type":"AIR"},{"x":25,"y":15,"type":"AIR"},{"x":26,"y":15,"type":"DIRT"},{"x":27,"y":15,"type":"DIRT"},{"x":28,"y":15,"type":"AIR"},{"x":29,"y":15,"type":"DIRT"},{"x":30,"y":15,"type":"AIR"},{"x":31,"y":15,"type":"AIR"},{"x":32,"y":15,"type":"AIR"}],[{"x":0,"y":16,"type":"AIR"},{"x":1,"y":16,"type":"AIR","occupier":{"id":2,"playerId":1,"health":100,"position":{"x":1,"y":16},"weapon":{"damage":8,"range":4},"bananaBombs":{"damage":20,"range":5,"count":3,"damageRadius":2},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Agent"}},{"x":2,"y":16,"type":"AIR"},{"x":3,"y":16,"type":"DIRT"},{"x":4,"y":16,"type":"AIR"},{"x":5,"y":16,"type":"DIRT"},{"x":6,"y":16,"type":"DIRT"},{"x":7,"y":16,"type":"AIR"},{"x":8,"y":16,"type":"AIR"},{"x":9,"y":16,"type":"DIRT"},{"x":10,"y":16,"type":"AIR"},{"x":11,"y":16,"type":"AIR"},{"x":12,"y":16,"type":"AIR"},{"x":13,"y":16,"type":"AIR"},{"x":14,"y":16,"type":"AIR"},{"x":15,"y":16,"type":"AIR"},{"x":16,"y":16,"type":"AIR"},{"x":17,"y":16,"type":"AIR"},{"x":18,"y":16,"type":"AIR"},{"x":19,"y":16,"type":"AIR"},{"x":20,"y":16,"type":"AIR"},{"x":21,"y":16,"type":"AIR"},{"x":22,"y":16,"type":"AIR"},{"x":23,"y":16,"type":"DIRT"},{"x":24,"y":16,"type":"AIR"},{"x":25,"y":16,"type":"AIR"},{"x":26,"y":16,"type":"DIRT"},{"x":27,"y":16,"type":"DIRT"},{"x":28,"y":16,"type":"AIR"},{"x":29,"y":16,"type":"DIRT"},{"x":30,"y":16,"type":"AIR"},{"x":31,"y":16,"type":"AIR","occupier":{"id":1,"playerId":2,"health":150,"position":{"x":31,"y":16},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Commando"}},{"x":32,"y":16,"type":"AIR"}],[{"x":0,"y":17,"type":"AIR"},{"x":1,"y":17,"type":"AIR"},{"x":2,"y":17,"type":"AIR"},{"x":3,"y":17,"type":"DIRT"},{"x":4,"y":17,"type":"AIR"},{"x":5,"y":17,"type":"AIR"},{"x":6,"y":17,"type":"AIR"},{"x":7,"y":17,"type":"AIR"},{"x":8,"y":17,"type":"DIRT"},{"x":9,"y":17,"type":"DIRT"},{"x":10,"y":17,"type":"DIRT"},{"x":11,"y":17,"type":"AIR"},{"x":12,"y":17,"type":"DIRT"},{"x":13,"y":17,"type":"DIRT"},{"x":14,"y":17,"type":"DIRT"},{"x":15,"y":17,"type":"DIRT"},{"x":16,"y":17,"type":"AIR"},{"x":17,"y":17,"type":"DIRT"},{"x":18,"y":17,"type":"AIR","powerup":{"type":"HEALTH_PACK","value":10}},{"x":19,"y":17,"type":"DIRT"},{"x":20,"y":17,"type":"DIRT"},{"x":21,"y":17,"type":"AIR"},{"x":22,"y":17,"type":"DIRT"},{"x":23,"y":17,"type":"DIRT"},{"x":24,"y":17,"type":"DIRT"},{"x":25,"y":17,"type":"AIR"},{"x":26,"y":17,"type":"AIR"},{"x":27,"y":17,"type":"AIR"},{"x":28,"y":17,"type":"AIR"},{"x":29,"y":17,"type":"DIRT"},{"x":30,"y":17,"type":"AIR"},{"x":31,"y":17,"type":"AIR"},{"x":32,"y":17,"type":"AIR"}],[{"x":0,"y":18,"type":"DIRT"},{"x":1,"y":18,"type":"DIRT"},{"x":2,"y":18,"type":"DIRT"},{"x":3,"y":18,"type":"DIRT"},{"x":4,"y":18,"type":"AIR"},{"x":5,"y":18,"type":"AIR"},{"x":6,"y":18,"type":"AIR"},{"x":7,"y":18,"type":"AIR"},{"x":8,"y":18,"type":"DIRT"},{"x":9,"y":18,"type":"DIRT"},{"x":10,"y":18,"type":"DIRT"},{"x":11,"y":18,"type":"AIR"},{"x":12,"y":18,"type":"AIR"},{"x":13,"y":18,"type":"AIR"},{"x":14,"y":18,"type":"DIRT"},{"x":15,"y":18,"type":"AIR"},{"x":16,"y":18,"type":"AIR"},{"x":17,"y":18,"type":"AIR"},{"x":18,"y":18,"type":"DIRT"},{"x":19,"y":18,"type":"AIR"},{"x":20,"y":18,"type":"AIR"},{"x":21,"y":18,"type":"AIR"},{"x":22,"y":18,"type":"DIRT"},{"x":23,"y":18,"type":"DIRT"},{"x":24,"y":18,"type":"DIRT"},{"x":25,"y":18,"type":"AIR"},{"x":26,"y":18,"type":"AIR"},{"x":27,"y":18,"type":"AIR"},{"x":28,"y":18,"type":"AIR"},{"x":29,"y":18,"type":"DIRT"},{"x":30,"y":18,"type":"DIRT"},{"x":31,"y":18,"type":"DIRT"},{"x":32,"y":18,"type":"DIRT"}],[{"x":0,"y":19,"type":"DIRT"},{"x":1,"y":19,"type":"AIR"},{"x":2,"y":19,"type":"AIR"},{"x":3,"y":19,"type":"AIR"},{"x":4,"y":19,"type":"AIR"},{"x":5,"y":19,"type":"AIR"},{"x":6,"y":19,"type":"AIR"},{"x":7,"y":19,"type":"AIR"},{"x":8,"y":19,"type":"AIR"},{"x":9,"y":19,"type":"DIRT"},{"x":10,"y":19,"type":"DIRT"},{"x":11,"y":19,"type":"DIRT"},{"x":12,"y":19,"type":"AIR"},{"x":13,"y":19,"type":"AIR"},{"x":14,"y":19,"type":"DIRT"},{"x":15,"y":19,"type":"AIR"},{"x":16,"y":19,"type":"DIRT"},{"x":17,"y":19,"type":"AIR"},{"x":18,"y":19,"type":"DIRT"},{"x":19,"y":19,"type":"AIR"},{"x":20,"y":19,"type":"AIR"},{"x":21,"y":19,"type":"DIRT"},{"x":22,"y":19,"type":"DIRT"},{"x":23,"y":19,"type":"DIRT"},{"x":24,"y":19,"type":"AIR"},{"x":25,"y":19,"type":"AIR"},{"x":26,"y":19,"type":"AIR"},{"x":27,"y":19,"type":"AIR"},{"x":28,"y":19,"type":"AIR"},{"x":29,"y":19,"type":"AIR"},{"x":30,"y":19,"type":"AIR"},{"x":31,"y":19,"type":"AIR"},{"x":32,"y":19,"type":"DIRT"}],[{"x":0,"y":20,"type":"DIRT"},{"x":1,"y":20,"type":"DIRT"},{"x":2,"y":20,"type":"DIRT"},{"x":3,"y":20,"type":"AIR"},{"x":4,"y":20,"type":"AIR"},{"x":5,"y":20,"type":"AIR"},{"x":6,"y":20,"type":"AIR"},{"x":7,"y":20,"type":"AIR"},{"x":8,"y":20,"type":"AIR"},{"x":9,"y":20,"type":"DIRT"},{"x":10,"y":20,"type":"DIRT"},{"x":11,"y":20,"type":"DIRT"},{"x":12,"y":20,"type":"AIR"},{"x":13,"y":20,"type":"DIRT"},{"x":14,"y":20,"type":"DIRT"},{"x":15,"y":20,"type":"DIRT"},{"x":16,"y":20,"type":"DIRT"},{"x":17,"y":20,"type":"DIRT"},{"x":18,"y":20,"type":"DIRT"},{"x":19,"y":20,"type":"DIRT"},{"x":20,"y":20,"type":"AIR"},{"x":21,"y":20,"type":"DIRT"},{"x":22,"y":20,"type":"DIRT"},{"x":23,"y":20,"type":"DIRT"},{"x":24,"y":20,"type":"AIR"},{"x":25,"y":20,"type":"AIR"},{"x":26,"y":20,"type":"AIR"},{"x":27,"y":20,"type":"AIR"},{"x":28,"y":20,"type":"AIR"},{"x":29,"y":20,"type":"AIR"},{"x":30,"y":20,"type":"DIRT"},{"x":31,"y":20,"type":"DIRT"},{"x":32,"y":20,"type":"DIRT"}],[{"x":0,"y":21,"type":"DIRT"},{"x":1,"y":21,"type":"DIRT"},{"x":2,"y":21,"type":"DIRT"},{"x":3,"y":21,"type":"AIR"},{"x":4,"y":21,"type":"AIR"},{"x":5,"y":21,"type":"DIRT"},{"x":6,"y":21,"type":"DIRT"},{"x":7,"y":21,"type":"DIRT"},{"x":8,"y":21,"type":"AIR"},{"x":9,"y":21,"type":"AIR"},{"x":10,"y":21,"type":"DIRT"},{"x":11,"y":21,"type":"DIRT"},{"x":12,"y":21,"type":"DIRT"},{"x":13,"y":21,"type":"DIRT"},{"x":14,"y":21,"type":"DIRT"},{"x":15,"y":21,"type":"DIRT"},{"x":16,"y":21,"type":"AIR"},{"x":17,"y":21,"type":"DIRT"},{"x":18,"y":21,"type":"DIRT"},{"x":19,"y":21,"type":"DIRT"},{"x":20,"y":21,"type":"DIRT"},{"x":21,"y":21,"type":"DIRT"},{"x":22,"y":21,"type":"DIRT"},{"x":23,"y":21,"type":"AIR"},{"x":24,"y":21,"type":"AIR"},{"x":25,"y":21,"type":"DIRT"},{"x":26,"y":21,"type":"DIRT"},{"x":27,"y":21,"type":"DIRT"},{"x":28,"y":21,"type":"AIR"},{"x":29,"y":21,"type":"AIR"},{"x":30,"y":21,"type":"DIRT"},{"x":31,"y":21,"type":"DIRT"},{"x":32,"y":21,"type":"DIRT"}],[{"x":0,"y":22,"type":"DEEP_SPACE"},{"x":1,"y":22,"type":"DIRT"},{"x":2,"y":22,"type":"DIRT"},{"x":3,"y":22,"type":"AIR"},{"x":4,"y":22,"type":"DIRT"},{"x":5,"y":22,"type":"AIR"},{"x":6,"y":22,"type":"DIRT"},{"x":7,"y":22,"type":"DIRT"},{"x":8,"y":22,"type":"AIR"},{"x":9,"y":22,"type":"AIR"},{"x":10,"y":22,"type":"DIRT"},{"x":11,"y":22,"type":"DIRT"},{"x":12,"y":22,"type":"DIRT"},{"x":13,"y":22,"type":"AIR"},{"x":14,"y":22,"type":"AIR"},{"x":15,"y":22,"type":"AIR"},{"x":16,"y":22,"type":"AIR"},{"x":17,"y":22,"type":"AIR"},{"x":18,"y":22,"type":"AIR"},{"x":19,"y":22,"type":"AIR"},{"x":20,"y":22,"type":"DIRT"},{"x":21,"y":22,"type":"DIRT"},{"x":22,"y":22,"type":"DIRT"},{"x":23,"y":22,"type":"AIR"},{"x":24,"y":22,"type":"AIR"},{"x":25,"y":22,"type":"DIRT"},{"x":26,"y":22,"type":"DIRT"},{"x":27,"y":22,"type":"AIR"},{"x":28,"y":22,"type":"DIRT"},{"x":29,"y":22,"type":"AIR"},{"x":30,"y":22,"type":"DIRT"},{"x":31,"y":22,"type":"DIRT"},{"x":32,"y":22,"type":"DEEP_SPACE"}],[{"x":0,"y":23,"type":"DEEP_SPACE"},{"x":1,"y":23,"type":"AIR"},{"x":2,"y":23,"type":"AIR"},{"x":3,"y":23,"type":"AIR"},{"x":4,"y":23,"type":"DIRT"},{"x":5,"y":23,"type":"AIR"},{"x":6,"y":23,"type":"AIR"},{"x":7,"y":23,"type":"DIRT"},{"x":8,"y":23,"type":"AIR"},{"x":9,"y":23,"type":"DIRT"},{"x":10,"y":23,"type":"DIRT"},{"x":11,"y":23,"type":"DIRT"},{"x":12,"y":23,"type":"DIRT"},{"x":13,"y":23,"type":"AIR"},{"x":14,"y":23,"type":"AIR"},{"x":15,"y":23,"type":"AIR"},{"x":16,"y":23,"type":"AIR"},{"x":17,"y":23,"type":"AIR"},{"x":18,"y":23,"type":"AIR"},{"x":19,"y":23,"type":"AIR"},{"x":20,"y":23,"type":"DIRT"},{"x":21,"y":23,"type":"DIRT"},{"x":22,"y":23,"type":"DIRT"},{"x":23,"y":23,"type":"DIRT"},{"x":24,"y":23,"type":"AIR"},{"x":25,"y":23,"type":"DIRT"},{"x":26,"y":23,"type":"AIR"},{"x":27,"y":23,"type":"AIR"},{"x":28,"y":23,"type":"DIRT"},{"x":29,"y":23,"type":"AIR"},{"x":30,"y":23,"type":"AIR"},{"x":31,"y":23,"type":"AIR"},{"x":32,"y":23,"type":"DEEP_SPACE"}],[{"x":0,"y":24,"type":"DEEP_SPACE"},{"x":1,"y":24,"type":"AIR"},{"x":2,"y":24,"type":"AIR"},{"x":3,"y":24,"type":"AIR"},{"x":4,"y":24,"type":"DIRT"},{"x":5,"y":24,"type":"AIR"},{"x":6,"y":24,"type":"AIR"},{"x":7,"y":24,"type":"AIR"},{"x":8,"y":24,"type":"AIR"},{"x":9,"y":24,"type":"DIRT"},{"x":10,"y":24,"type":"DIRT"},{"x":11,"y":24,"type":"AIR"},{"x":12,"y":24,"type":"DIRT"},{"x":13,"y":24,"type":"DIRT"},{"x":14,"y":24,"type":"DIRT"},{"x":15,"y":24,"type":"AIR"},{"x":16,"y":24,"type":"AIR"},{"x":17,"y":24,"type":"AIR"},{"x":18,"y":24,"type":"DIRT"},{"x":19,"y":24,"type":"DIRT"},{"x":20,"y":24,"type":"DIRT"},{"x":21,"y":24,"type":"AIR"},{"x":22,"y":24,"type":"DIRT"},{"x":23,"y":24,"type":"DIRT"},{"x":24,"y":24,"type":"AIR"},{"x":25,"y":24,"type":"AIR"},{"x":26,"y":24,"type":"AIR"},{"x":27,"y":24,"type":"AIR"},{"x":28,"y":24,"type":"DIRT"},{"x":29,"y":24,"type":"AIR"},{"x":30,"y":24,"type":"AIR"},{"x":31,"y":24,"type":"AIR"},{"x":32,"y":24,"type":"DEEP_SPACE"}],[{"x":0,"y":25,"type":"DEEP_SPACE"},{"x":1,"y":25,"type":"DEEP_SPACE"},{"x":2,"y":25,"type":"AIR"},{"x":3,"y":25,"type":"AIR"},{"x":4,"y":25,"type":"AIR"},{"x":5,"y":25,"type":"AIR"},{"x":6,"y":25,"type":"AIR"},{"x":7,"y":25,"type":"AIR"},{"x":8,"y":25,"type":"DIRT"},{"x":9,"y":25,"type":"DIRT"},{"x":10,"y":25,"type":"AIR"},{"x":11,"y":25,"type":"AIR"},{"x":12,"y":25,"type":"AIR"},{"x":13,"y":25,"type":"AIR"},{"x":14,"y":25,"type":"AIR"},{"x":15,"y":25,"type":"AIR"},{"x":16,"y":25,"type":"AIR"},{"x":17,"y":25,"type":"AIR"},{"x":18,"y":25,"type":"AIR"},{"x":19,"y":25,"type":"AIR"},{"x":20,"y":25,"type":"AIR"},{"x":21,"y":25,"type":"AIR"},{"x":22,"y":25,"type":"AIR"},{"x":23,"y":25,"type":"DIRT"},{"x":24,"y":25,"type":"DIRT"},{"x":25,"y":25,"type":"AIR"},{"x":26,"y":25,"type":"AIR"},{"x":27,"y":25,"type":"AIR"},{"x":28,"y":25,"type":"AIR"},{"x":29,"y":25,"type":"AIR"},{"x":30,"y":25,"type":"AIR"},{"x":31,"y":25,"type":"DEEP_SPACE"},{"x":32,"y":25,"type":"DEEP_SPACE"}],[{"x":0,"y":26,"type":"DEEP_SPACE"},{"x":1,"y":26,"type":"DEEP_SPACE"},{"x":2,"y":26,"type":"DEEP_SPACE"},{"x":3,"y":26,"type":"AIR"},{"x":4,"y":26,"type":"AIR"},{"x":5,"y":26,"type":"DIRT"},{"x":6,"y":26,"type":"DIRT"},{"x":7,"y":26,"type":"DIRT"},{"x":8,"y":26,"type":"DIRT"},{"x":9,"y":26,"type":"DIRT"},{"x":10,"y":26,"type":"DIRT"},{"x":11,"y":26,"type":"DIRT"},{"x":12,"y":26,"type":"DIRT"},{"x":13,"y":26,"type":"AIR"},{"x":14,"y":26,"type":"AIR"},{"x":15,"y":26,"type":"AIR"},{"x":16,"y":26,"type":"AIR"},{"x":17,"y":26,"type":"AIR"},{"x":18,"y":26,"type":"AIR"},{"x":19,"y":26,"type":"AIR"},{"x":20,"y":26,"type":"DIRT"},{"x":21,"y":26,"type":"DIRT"},{"x":22,"y":26,"type":"DIRT"},{"x":23,"y":26,"type":"DIRT"},{"x":24,"y":26,"type":"DIRT"},{"x":25,"y":26,"type":"DIRT"},{"x":26,"y":26,"type":"DIRT"},{"x":27,"y":26,"type":"DIRT"},{"x":28,"y":26,"type":"AIR"},{"x":29,"y":26,"type":"AIR"},{"x":30,"y":26,"type":"DEEP_SPACE"},{"x":31,"y":26,"type":"DEEP_SPACE"},{"x":32,"y":26,"type":"DEEP_SPACE"}],[{"x":0,"y":27,"type":"DEEP_SPACE"},{"x":1,"y":27,"type":"DEEP_SPACE"},{"x":2,"y":27,"type":"DEEP_SPACE"},{"x":3,"y":27,"type":"DEEP_SPACE"},{"x":4,"y":27,"type":"AIR"},{"x":5,"y":27,"type":"AIR"},{"x":6,"y":27,"type":"DIRT"},{"x":7,"y":27,"type":"AIR"},{"x":8,"y":27,"type":"AIR"},{"x":9,"y":27,"type":"AIR"},{"x":10,"y":27,"type":"DIRT"},{"x":11,"y":27,"type":"DIRT"},{"x":12,"y":27,"type":"DIRT"},{"x":13,"y":27,"type":"AIR"},{"x":14,"y":27,"type":"AIR"},{"x":15,"y":27,"type":"AIR"},{"x":16,"y":27,"type":"AIR"},{"x":17,"y":27,"type":"AIR"},{"x":18,"y":27,"type":"AIR"},{"x":19,"y":27,"type":"AIR"},{"x":20,"y":27,"type":"DIRT"},{"x":21,"y":27,"type":"DIRT"},{"x":22,"y":27,"type":"DIRT"},{"x":23,"y":27,"type":"AIR"},{"x":24,"y":27,"type":"AIR"},{"x":25,"y":27,"type":"AIR"},{"x":26,"y":27,"type":"DIRT"},{"x":27,"y":27,"type":"AIR"},{"x":28,"y":27,"type":"AIR"},{"x":29,"y":27,"type":"DEEP_SPACE"},{"x":30,"y":27,"type":"DEEP_SPACE"},{"x":31,"y":27,"type":"DEEP_SPACE"},{"x":32,"y":27,"type":"DEEP_SPACE"}],[{"x":0,"y":28,"type":"DEEP_SPACE"},{"x":1,"y":28,"type":"DEEP_SPACE"},{"x":2,"y":28,"type":"DEEP_SPACE"},{"x":3,"y":28,"type":"DEEP_SPACE"},{"x":4,"y":28,"type":"AIR"},{"x":5,"y":28,"type":"AIR"},{"x":6,"y":28,"type":"DIRT"},{"x":7,"y":28,"type":"AIR"},{"x":8,"y":28,"type":"AIR","occupier":{"id":2,"playerId":2,"health":100,"position":{"x":8,"y":28},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Agent"}},{"x":9,"y":28,"type":"AIR"},{"x":10,"y":28,"type":"DIRT"},{"x":11,"y":28,"type":"DIRT"},{"x":12,"y":28,"type":"DIRT"},{"x":13,"y":28,"type":"DIRT"},{"x":14,"y":28,"type":"AIR"},{"x":15,"y":28,"type":"AIR"},{"x":16,"y":28,"type":"AIR"},{"x":17,"y":28,"type":"AIR"},{"x":18,"y":28,"type":"AIR"},{"x":19,"y":28,"type":"DIRT"},{"x":20,"y":28,"type":"DIRT"},{"x":21,"y":28,"type":"DIRT"},{"x":22,"y":28,"type":"DIRT"},{"x":23,"y":28,"type":"AIR"},{"x":24,"y":28,"type":"AIR","occupier":{"id":1,"playerId":1,"health":150,"position":{"x":24,"y":28},"weapon":{"damage":8,"range":4},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Commando"}},{"x":25,"y":28,"type":"AIR"},{"x":26,"y":28,"type":"DIRT"},{"x":27,"y":28,"type":"AIR"},{"x":28,"y":28,"type":"AIR"},{"x":29,"y":28,"type":"DEEP_SPACE"},{"x":30,"y":28,"type":"DEEP_SPACE"},{"x":31,"y":28,"type":"DEEP_SPACE"},{"x":32,"y":28,"type":"DEEP_SPACE"}],[{"x":0,"y":29,"type":"DEEP_SPACE"},{"x":1,"y":29,"type":"DEEP_SPACE"},{"x":2,"y":29,"type":"DEEP_SPACE"},{"x":3,"y":29,"type":"DEEP_SPACE"},{"x":4,"y":29,"type":"DEEP_SPACE"},{"x":5,"y":29,"type":"DEEP_SPACE"},{"x":6,"y":29,"type":"DIRT"},{"x":7,"y":29,"type":"AIR"},{"x":8,"y":29,"type":"AIR"},{"x":9,"y":29,"type":"AIR"},{"x":10,"y":29,"type":"DIRT"},{"x":11,"y":29,"type":"AIR"},{"x":12,"y":29,"type":"AIR"},{"x":13,"y":29,"type":"DIRT"},{"x":14,"y":29,"type":"DIRT"},{"x":15,"y":29,"type":"AIR"},{"x":16,"y":29,"type":"AIR"},{"x":17,"y":29,"type":"AIR"},{"x":18,"y":29,"type":"DIRT"},{"x":19,"y":29,"type":"DIRT"},{"x":20,"y":29,"type":"AIR"},{"x":21,"y":29,"type":"AIR"},{"x":22,"y":29,"type":"DIRT"},{"x":23,"y":29,"type":"AIR"},{"x":24,"y":29,"type":"AIR"},{"x":25,"y":29,"type":"AIR"},{"x":26,"y":29,"type":"DIRT"},{"x":27,"y":29,"type":"DEEP_SPACE"},{"x":28,"y":29,"type":"DEEP_SPACE"},{"x":29,"y":29,"type":"DEEP_SPACE"},{"x":30,"y":29,"type":"DEEP_SPACE"},{"x":31,"y":29,"type":"DEEP_SPACE"},{"x":32,"y":29,"type":"DEEP_SPACE"}],[{"x":0,"y":30,"type":"DEEP_SPACE"},{"x":1,"y":30,"type":"DEEP_SPACE"},{"x":2,"y":30,"type":"DEEP_SPACE"},{"x":3,"y":30,"type":"DEEP_SPACE"},{"x":4,"y":30,"type":"DEEP_SPACE"},{"x":5,"y":30,"type":"DEEP_SPACE"},{"x":6,"y":30,"type":"DEEP_SPACE"},{"x":7,"y":30,"type":"DIRT"},{"x":8,"y":30,"type":"DIRT"},{"x":9,"y":30,"type":"DIRT"},{"x":10,"y":30,"type":"DIRT"},{"x":11,"y":30,"type":"AIR"},{"x":12,"y":30,"type":"AIR"},{"x":13,"y":30,"type":"AIR"},{"x":14,"y":30,"type":"DIRT"},{"x":15,"y":30,"type":"DIRT"},{"x":16,"y":30,"type":"DIRT"},{"x":17,"y":30,"type":"DIRT"},{"x":18,"y":30,"type":"DIRT"},{"x":19,"y":30,"type":"AIR"},{"x":20,"y":30,"type":"AIR"},{"x":21,"y":30,"type":"AIR"},{"x":22,"y":30,"type":"DIRT"},{"x":23,"y":30,"type":"DIRT"},{"x":24,"y":30,"type":"DIRT"},{"x":25,"y":30,"type":"DIRT"},{"x":26,"y":30,"type":"DEEP_SPACE"},{"x":27,"y":30,"type":"DEEP_SPACE"},{"x":28,"y":30,"type":"DEEP_SPACE"},{"x":29,"y":30,"type":"DEEP_SPACE"},{"x":30,"y":30,"type":"DEEP_SPACE"},{"x":31,"y":30,"type":"DEEP_SPACE"},{"x":32,"y":30,"type":"DEEP_SPACE"}],[{"x":0,"y":31,"type":"DEEP_SPACE"},{"x":1,"y":31,"type":"DEEP_SPACE"},{"x":2,"y":31,"type":"DEEP_SPACE"},{"x":3,"y":31,"type":"DEEP_SPACE"},{"x":4,"y":31,"type":"DEEP_SPACE"},{"x":5,"y":31,"type":"DEEP_SPACE"},{"x":6,"y":31,"type":"DEEP_SPACE"},{"x":7,"y":31,"type":"DEEP_SPACE"},{"x":8,"y":31,"type":"AIR"},{"x":9,"y":31,"type":"AIR"},{"x":10,"y":31,"type":"AIR"},{"x":11,"y":31,"type":"DIRT"},{"x":12,"y":31,"type":"DIRT"},{"x":13,"y":31,"type":"AIR"},{"x":14,"y":31,"type":"AIR"},{"x":15,"y":31,"type":"AIR"},{"x":16,"y":31,"type":"DIRT"},{"x":17,"y":31,"type":"AIR"},{"x":18,"y":31,"type":"AIR"},{"x":19,"y":31,"type":"AIR"},{"x":20,"y":31,"type":"DIRT"},{"x":21,"y":31,"type":"DIRT"},{"x":22,"y":31,"type":"AIR"},{"x":23,"y":31,"type":"AIR"},{"x":24,"y":31,"type":"AIR"},{"x":25,"y":31,"type":"DEEP_SPACE"},{"x":26,"y":31,"type":"DEEP_SPACE"},{"x":27,"y":31,"type":"DEEP_SPACE"},{"x":28,"y":31,"type":"DEEP_SPACE"},{"x":29,"y":31,"type":"DEEP_SPACE"},{"x":30,"y":31,"type":"DEEP_SPACE"},{"x":31,"y":31,"type":"DEEP_SPACE"},{"x":32,"y":31,"type":"DEEP_SPACE"}],[{"x":0,"y":32,"type":"DEEP_SPACE"},{"x":1,"y":32,"type":"DEEP_SPACE"},{"x":2,"y":32,"type":"DEEP_SPACE"},{"x":3,"y":32,"type":"DEEP_SPACE"},{"x":4,"y":32,"type":"DEEP_SPACE"},{"x":5,"y":32,"type":"DEEP_SPACE"},{"x":6,"y":32,"type":"DEEP_SPACE"},{"x":7,"y":32,"type":"DEEP_SPACE"},{"x":8,"y":32,"type":"DEEP_SPACE"},{"x":9,"y":32,"type":"DEEP_SPACE"},{"x":10,"y":32,"type":"DEEP_SPACE"},{"x":11,"y":32,"type":"DIRT"},{"x":12,"y":32,"type":"DIRT"},{"x":13,"y":32,"type":"DIRT"},{"x":14,"y":32,"type":"AIR"},{"x":15,"y":32,"type":"AIR"},{"x":16,"y":32,"type":"AIR"},{"x":17,"y":32,"type":"AIR"},{"x":18,"y":32,"type":"AIR"},{"x":19,"y":32,"type":"DIRT"},{"x":20,"y":32,"type":"DIRT"},{"x":21,"y":32,"type":"DIRT"},{"x":22,"y":32,"type":"DEEP_SPACE"},{"x":23,"y":32,"type":"DEEP_SPACE"},{"x":24,"y":32,"type":"DEEP_SPACE"},{"x":25,"y":32,"type":"DEEP_SPACE"},{"x":26,"y":32,"type":"DEEP_SPACE"},{"x":27,"y":32,"type":"DEEP_SPACE"},{"x":28,"y":32,"type":"DEEP_SPACE"},{"x":29,"y":32,"type":"DEEP_SPACE"},{"x":30,"y":32,"type":"DEEP_SPACE"},{"x":31,"y":32,"type":"DEEP_SPACE"},{"x":32,"y":32,"type":"DEEP_SPACE"}]],"visualizerEvents":[]} \ No newline at end of file
diff --git a/2019-worms/tests/import-replay.sh b/2019-worms/tests/import-replay.sh
new file mode 100755
index 0000000..216c235
--- /dev/null
+++ b/2019-worms/tests/import-replay.sh
@@ -0,0 +1,12 @@
+#/bin/sh
+
+# $1: The match-log directory
+# Should be run from the tests directory.
+
+logname=$(basename $1)
+
+mkdir replays/$logname
+cp $1/A*.csv replays/$logname/A-log.csv
+cp $1/B*.csv replays/$logname/B-log.csv
+cp $1/Round\ 001/A*/JsonMap.json replays/$logname/A-init.json
+cp $1/Round\ 001/B*/JsonMap.json replays/$logname/B-init.json
diff --git a/2019-worms/tests/official-runner-matching.rs b/2019-worms/tests/official-runner-matching.rs
new file mode 100644
index 0000000..1b62088
--- /dev/null
+++ b/2019-worms/tests/official-runner-matching.rs
@@ -0,0 +1,238 @@
+use steam_powered_wyrm::command::{Action, Command};
+use steam_powered_wyrm::constants::*;
+use steam_powered_wyrm::game::*;
+use steam_powered_wyrm::geometry::*;
+use steam_powered_wyrm::json;
+
+use std::fs::File;
+use std::io::prelude::*;
+use std::path::Path;
+
+#[test]
+fn simulates_the_same_match() {
+ let replays = Path::new("tests/replays/");
+ for replay in replays.read_dir().expect("read_dir failed") {
+ let replay = replay.expect("error on replay").path();
+
+ let mut game_board = GameBoard::new(
+ json::read_state_from_json_file(&replay.join(Path::new("A-init.json")))
+ .expect("Failed to read initial state"),
+ );
+ let player_csv = read_file_lines(&replay.join(Path::new("A-log.csv")), 1);
+ let opponent_csv = read_file_lines(&replay.join(Path::new("B-log.csv")), 1);
+
+ for round in 0..player_csv.len() {
+ println!("Testing round {}", round);
+
+ let player = split_csv(&player_csv[round]);
+ let opponent = split_csv(&opponent_csv[round]);
+
+ assert_eq!(
+ round + 1,
+ player[0]
+ .parse::<usize>()
+ .expect(&format!("Invalid player input on round {}", round))
+ );
+ assert_eq!(
+ round + 1,
+ opponent[0]
+ .parse::<usize>()
+ .expect(&format!("Invalid opponent input on round {}", round))
+ );
+
+ if round != 0 {
+ let player_move = read_move(
+ &player,
+ game_board.players[0].worms[game_board.players[0].active_worm].id,
+ );
+ let opponent_move = read_move(
+ &opponent,
+ game_board.players[1].worms[game_board.players[1].active_worm].id,
+ );
+ let _ = game_board.simulate([player_move, opponent_move]);
+ if player[1] == "invalid" {
+ game_board.players[0].moves_score -= INVALID_COMMAND_SCORE_PENALTY;
+ }
+ if opponent[1] == "invalid" {
+ game_board.players[1].moves_score -= INVALID_COMMAND_SCORE_PENALTY;
+ }
+ }
+
+ for player_index in 0..2 {
+ let csv_row = match player_index {
+ 0 => &player,
+ _ => &opponent,
+ };
+ assert_eq!(
+ csv_row[4].parse::<i32>().unwrap(),
+ game_board.players[player_index].score(),
+ "Score is incorrect for player {}, Row: {:?}",
+ player_index,
+ csv_row
+ );
+ for worm_index in 0..3 {
+ let worm_id = worm_index as i32 + 1;
+
+ match game_board.players[player_index].find_worm(worm_id) {
+ Some(worm) => {
+ assert_eq!(
+ csv_row[6 + worm_index * 3].parse::<i32>().unwrap(),
+ worm.health,
+ "Worm health is incorrect for worm {} on player {}, Row: {:?}",
+ worm_id,
+ player_index,
+ csv_row
+ );
+ assert_eq!(
+ csv_row[7 + worm_index * 3].parse::<i8>().unwrap(),
+ worm.position.x,
+ "Worm x is incorrect for worm {} on player {}, Row: {:?}",
+ worm_id,
+ player_index,
+ csv_row
+ );
+ assert_eq!(
+ csv_row[8 + worm_index * 3].parse::<i8>().unwrap(),
+ worm.position.y,
+ "Worm y is incorrect for worm {} on player {}, Row: {:?}",
+ worm_id,
+ player_index,
+ csv_row
+ );
+ }
+ None => {
+ // If the worms don't appear in my state, they should be dead
+ assert!(
+ csv_row[6 + worm_index * 3].parse::<i32>().unwrap() <= 0,
+ "Worm is not actually dead"
+ );
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+fn read_file_lines(path: &Path, skip: usize) -> Vec<String> {
+ let mut file = File::open(path).unwrap();
+ let mut contents = String::new();
+ file.read_to_string(&mut contents).unwrap();
+ contents
+ .split("\n")
+ .skip(skip)
+ .map(String::from)
+ .filter(|s| !s.is_empty())
+ .collect()
+}
+
+fn split_csv(input: &str) -> Vec<String> {
+ let mut result = Vec::new();
+ let mut next = Vec::new();
+ let mut quoted = false;
+
+ for c in input.chars() {
+ match c {
+ '"' => {
+ quoted = !quoted;
+ }
+ ',' if !quoted => {
+ result.push(next.iter().collect());
+ next = Vec::new();
+ }
+ c => {
+ next.push(c);
+ }
+ }
+ }
+ result.push(next.iter().collect());
+ result
+}
+
+fn read_move(csv_line: &[String], expected_worm_id: i32) -> Command {
+ let worm_id = csv_line[3].parse::<i32>().unwrap();
+ let select = if worm_id == expected_worm_id {
+ None
+ } else {
+ Some(worm_id)
+ };
+ match csv_line[1].as_ref() {
+ "move" => {
+ let (x, y) = read_xy_pair(&csv_line[2]);
+ Command {
+ worm: select,
+ action: Action::Move(Point2d::new(x, y)),
+ }
+ }
+ "dig" => {
+ let (x, y) = read_xy_pair(&csv_line[2]);
+ Command {
+ worm: select,
+ action: Action::Dig(Point2d::new(x, y)),
+ }
+ }
+ "banana" => {
+ let (x, y) = read_xy_pair(&csv_line[2]);
+ Command {
+ worm: select,
+ action: Action::Bomb(Point2d::new(x, y)),
+ }
+ }
+ "snowball" => {
+ let (x, y) = read_xy_pair(&csv_line[2]);
+ Command {
+ worm: select,
+ action: Action::Snowball(Point2d::new(x, y)),
+ }
+ }
+ "nothing" | "invalid" => Command {
+ worm: select,
+ action: Action::DoNothing,
+ },
+ "shoot" => {
+ use steam_powered_wyrm::geometry::Direction::*;
+
+ let dir = match csv_line[2].as_ref() {
+ "shoot N" => North,
+ "shoot NE" => NorthEast,
+ "shoot E" => East,
+ "shoot SE" => SouthEast,
+ "shoot S" => South,
+ "shoot SW" => SouthWest,
+ "shoot W" => West,
+ "shoot NW" => NorthWest,
+ _ => panic!("Unknown shoot direction: {}", csv_line[2]),
+ };
+ Command {
+ worm: select,
+ action: Action::Shoot(dir),
+ }
+ }
+ x => {
+ panic!("Unknown command {}", x);
+ }
+ }
+}
+
+fn read_xy_pair(input: &str) -> (i8, i8) {
+ let mut char_iter = input.chars();
+ let _ = char_iter
+ .by_ref()
+ .take_while(|c| *c != ' ')
+ .collect::<String>();
+ let x = char_iter
+ .by_ref()
+ .take_while(|c| *c != ' ')
+ .collect::<String>()
+ .trim()
+ .parse::<i8>()
+ .unwrap();
+ let y = char_iter
+ .by_ref()
+ .take_while(|c| *c != ' ')
+ .collect::<String>()
+ .trim()
+ .parse::<i8>()
+ .unwrap();
+ (x, y)
+}
diff --git a/2019-worms/tests/replays/2019.08.19.21.15.02/A-init.json b/2019-worms/tests/replays/2019.08.19.21.15.02/A-init.json
new file mode 100644
index 0000000..ea2e948
--- /dev/null
+++ b/2019-worms/tests/replays/2019.08.19.21.15.02/A-init.json
@@ -0,0 +1 @@
+{"currentRound":1,"maxRounds":400,"pushbackDamage":20,"lavaDamage":3,"mapSize":33,"currentWormId":1,"consecutiveDoNothingCount":0,"myPlayer":{"id":1,"score":116,"health":350,"currentWormId":1,"remainingWormSelections":5,"previousCommand":"nothing","worms":[{"id":1,"health":150,"position":{"x":24,"y":4},"weapon":{"damage":8,"range":4},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Commando"},{"id":2,"health":100,"position":{"x":24,"y":28},"weapon":{"damage":8,"range":4},"bananaBombs":{"damage":20,"range":5,"count":3,"damageRadius":2},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Agent"},{"id":3,"health":100,"position":{"x":1,"y":16},"weapon":{"damage":8,"range":4},"snowballs":{"freezeDuration":5,"range":5,"count":3,"freezeRadius":1},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Technologist"}]},"opponents":[{"id":2,"score":116,"currentWormId":1,"remainingWormSelections":5,"previousCommand":"nothing","worms":[{"id":1,"health":150,"position":{"x":8,"y":28},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Commando"},{"id":2,"health":100,"position":{"x":8,"y":4},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Agent"},{"id":3,"health":100,"position":{"x":31,"y":16},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Technologist"}]}],"map":[[{"x":0,"y":0,"type":"DEEP_SPACE"},{"x":1,"y":0,"type":"DEEP_SPACE"},{"x":2,"y":0,"type":"DEEP_SPACE"},{"x":3,"y":0,"type":"DEEP_SPACE"},{"x":4,"y":0,"type":"DEEP_SPACE"},{"x":5,"y":0,"type":"DEEP_SPACE"},{"x":6,"y":0,"type":"DEEP_SPACE"},{"x":7,"y":0,"type":"DEEP_SPACE"},{"x":8,"y":0,"type":"DEEP_SPACE"},{"x":9,"y":0,"type":"DEEP_SPACE"},{"x":10,"y":0,"type":"DEEP_SPACE"},{"x":11,"y":0,"type":"DIRT"},{"x":12,"y":0,"type":"AIR"},{"x":13,"y":0,"type":"DIRT"},{"x":14,"y":0,"type":"DIRT"},{"x":15,"y":0,"type":"DIRT"},{"x":16,"y":0,"type":"AIR"},{"x":17,"y":0,"type":"DIRT"},{"x":18,"y":0,"type":"DIRT"},{"x":19,"y":0,"type":"DIRT"},{"x":20,"y":0,"type":"AIR"},{"x":21,"y":0,"type":"DIRT"},{"x":22,"y":0,"type":"DEEP_SPACE"},{"x":23,"y":0,"type":"DEEP_SPACE"},{"x":24,"y":0,"type":"DEEP_SPACE"},{"x":25,"y":0,"type":"DEEP_SPACE"},{"x":26,"y":0,"type":"DEEP_SPACE"},{"x":27,"y":0,"type":"DEEP_SPACE"},{"x":28,"y":0,"type":"DEEP_SPACE"},{"x":29,"y":0,"type":"DEEP_SPACE"},{"x":30,"y":0,"type":"DEEP_SPACE"},{"x":31,"y":0,"type":"DEEP_SPACE"},{"x":32,"y":0,"type":"DEEP_SPACE"}],[{"x":0,"y":1,"type":"DEEP_SPACE"},{"x":1,"y":1,"type":"DEEP_SPACE"},{"x":2,"y":1,"type":"DEEP_SPACE"},{"x":3,"y":1,"type":"DEEP_SPACE"},{"x":4,"y":1,"type":"DEEP_SPACE"},{"x":5,"y":1,"type":"DEEP_SPACE"},{"x":6,"y":1,"type":"DEEP_SPACE"},{"x":7,"y":1,"type":"DEEP_SPACE"},{"x":8,"y":1,"type":"DIRT"},{"x":9,"y":1,"type":"AIR"},{"x":10,"y":1,"type":"AIR"},{"x":11,"y":1,"type":"AIR"},{"x":12,"y":1,"type":"AIR"},{"x":13,"y":1,"type":"AIR"},{"x":14,"y":1,"type":"DIRT"},{"x":15,"y":1,"type":"DIRT"},{"x":16,"y":1,"type":"AIR"},{"x":17,"y":1,"type":"DIRT"},{"x":18,"y":1,"type":"DIRT"},{"x":19,"y":1,"type":"AIR"},{"x":20,"y":1,"type":"AIR"},{"x":21,"y":1,"type":"AIR"},{"x":22,"y":1,"type":"AIR"},{"x":23,"y":1,"type":"AIR"},{"x":24,"y":1,"type":"DIRT"},{"x":25,"y":1,"type":"DEEP_SPACE"},{"x":26,"y":1,"type":"DEEP_SPACE"},{"x":27,"y":1,"type":"DEEP_SPACE"},{"x":28,"y":1,"type":"DEEP_SPACE"},{"x":29,"y":1,"type":"DEEP_SPACE"},{"x":30,"y":1,"type":"DEEP_SPACE"},{"x":31,"y":1,"type":"DEEP_SPACE"},{"x":32,"y":1,"type":"DEEP_SPACE"}],[{"x":0,"y":2,"type":"DEEP_SPACE"},{"x":1,"y":2,"type":"DEEP_SPACE"},{"x":2,"y":2,"type":"DEEP_SPACE"},{"x":3,"y":2,"type":"DEEP_SPACE"},{"x":4,"y":2,"type":"DEEP_SPACE"},{"x":5,"y":2,"type":"DEEP_SPACE"},{"x":6,"y":2,"type":"DEEP_SPACE"},{"x":7,"y":2,"type":"DIRT"},{"x":8,"y":2,"type":"DIRT"},{"x":9,"y":2,"type":"DIRT"},{"x":10,"y":2,"type":"DIRT"},{"x":11,"y":2,"type":"DIRT"},{"x":12,"y":2,"type":"DIRT"},{"x":13,"y":2,"type":"AIR"},{"x":14,"y":2,"type":"AIR"},{"x":15,"y":2,"type":"DIRT"},{"x":16,"y":2,"type":"AIR"},{"x":17,"y":2,"type":"DIRT"},{"x":18,"y":2,"type":"AIR"},{"x":19,"y":2,"type":"AIR"},{"x":20,"y":2,"type":"DIRT"},{"x":21,"y":2,"type":"DIRT"},{"x":22,"y":2,"type":"DIRT"},{"x":23,"y":2,"type":"DIRT"},{"x":24,"y":2,"type":"DIRT"},{"x":25,"y":2,"type":"DIRT"},{"x":26,"y":2,"type":"DEEP_SPACE"},{"x":27,"y":2,"type":"DEEP_SPACE"},{"x":28,"y":2,"type":"DEEP_SPACE"},{"x":29,"y":2,"type":"DEEP_SPACE"},{"x":30,"y":2,"type":"DEEP_SPACE"},{"x":31,"y":2,"type":"DEEP_SPACE"},{"x":32,"y":2,"type":"DEEP_SPACE"}],[{"x":0,"y":3,"type":"DEEP_SPACE"},{"x":1,"y":3,"type":"DEEP_SPACE"},{"x":2,"y":3,"type":"DEEP_SPACE"},{"x":3,"y":3,"type":"DEEP_SPACE"},{"x":4,"y":3,"type":"DEEP_SPACE"},{"x":5,"y":3,"type":"DEEP_SPACE"},{"x":6,"y":3,"type":"DIRT"},{"x":7,"y":3,"type":"AIR"},{"x":8,"y":3,"type":"AIR"},{"x":9,"y":3,"type":"AIR"},{"x":10,"y":3,"type":"DIRT"},{"x":11,"y":3,"type":"DIRT"},{"x":12,"y":3,"type":"DIRT"},{"x":13,"y":3,"type":"DIRT"},{"x":14,"y":3,"type":"AIR"},{"x":15,"y":3,"type":"AIR"},{"x":16,"y":3,"type":"AIR"},{"x":17,"y":3,"type":"AIR"},{"x":18,"y":3,"type":"AIR"},{"x":19,"y":3,"type":"DIRT"},{"x":20,"y":3,"type":"DIRT"},{"x":21,"y":3,"type":"DIRT"},{"x":22,"y":3,"type":"DIRT"},{"x":23,"y":3,"type":"AIR"},{"x":24,"y":3,"type":"AIR"},{"x":25,"y":3,"type":"AIR"},{"x":26,"y":3,"type":"DIRT"},{"x":27,"y":3,"type":"DEEP_SPACE"},{"x":28,"y":3,"type":"DEEP_SPACE"},{"x":29,"y":3,"type":"DEEP_SPACE"},{"x":30,"y":3,"type":"DEEP_SPACE"},{"x":31,"y":3,"type":"DEEP_SPACE"},{"x":32,"y":3,"type":"DEEP_SPACE"}],[{"x":0,"y":4,"type":"DEEP_SPACE"},{"x":1,"y":4,"type":"DEEP_SPACE"},{"x":2,"y":4,"type":"DEEP_SPACE"},{"x":3,"y":4,"type":"DEEP_SPACE"},{"x":4,"y":4,"type":"DIRT"},{"x":5,"y":4,"type":"DIRT"},{"x":6,"y":4,"type":"DIRT"},{"x":7,"y":4,"type":"AIR"},{"x":8,"y":4,"type":"AIR","occupier":{"id":2,"playerId":2,"health":100,"position":{"x":8,"y":4},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Agent"}},{"x":9,"y":4,"type":"AIR"},{"x":10,"y":4,"type":"DIRT"},{"x":11,"y":4,"type":"DIRT"},{"x":12,"y":4,"type":"DIRT"},{"x":13,"y":4,"type":"DIRT"},{"x":14,"y":4,"type":"DIRT"},{"x":15,"y":4,"type":"AIR"},{"x":16,"y":4,"type":"DIRT"},{"x":17,"y":4,"type":"AIR"},{"x":18,"y":4,"type":"DIRT"},{"x":19,"y":4,"type":"DIRT"},{"x":20,"y":4,"type":"DIRT"},{"x":21,"y":4,"type":"DIRT"},{"x":22,"y":4,"type":"DIRT"},{"x":23,"y":4,"type":"AIR"},{"x":24,"y":4,"type":"AIR","occupier":{"id":1,"playerId":1,"health":150,"position":{"x":24,"y":4},"weapon":{"damage":8,"range":4},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Commando"}},{"x":25,"y":4,"type":"AIR"},{"x":26,"y":4,"type":"DIRT"},{"x":27,"y":4,"type":"DIRT"},{"x":28,"y":4,"type":"DIRT"},{"x":29,"y":4,"type":"DEEP_SPACE"},{"x":30,"y":4,"type":"DEEP_SPACE"},{"x":31,"y":4,"type":"DEEP_SPACE"},{"x":32,"y":4,"type":"DEEP_SPACE"}],[{"x":0,"y":5,"type":"DEEP_SPACE"},{"x":1,"y":5,"type":"DEEP_SPACE"},{"x":2,"y":5,"type":"DEEP_SPACE"},{"x":3,"y":5,"type":"DEEP_SPACE"},{"x":4,"y":5,"type":"AIR"},{"x":5,"y":5,"type":"AIR"},{"x":6,"y":5,"type":"DIRT"},{"x":7,"y":5,"type":"AIR"},{"x":8,"y":5,"type":"AIR"},{"x":9,"y":5,"type":"AIR"},{"x":10,"y":5,"type":"DIRT"},{"x":11,"y":5,"type":"DIRT"},{"x":12,"y":5,"type":"DIRT"},{"x":13,"y":5,"type":"DIRT"},{"x":14,"y":5,"type":"DIRT"},{"x":15,"y":5,"type":"AIR"},{"x":16,"y":5,"type":"AIR"},{"x":17,"y":5,"type":"AIR"},{"x":18,"y":5,"type":"DIRT"},{"x":19,"y":5,"type":"DIRT"},{"x":20,"y":5,"type":"DIRT"},{"x":21,"y":5,"type":"DIRT"},{"x":22,"y":5,"type":"DIRT"},{"x":23,"y":5,"type":"AIR"},{"x":24,"y":5,"type":"AIR"},{"x":25,"y":5,"type":"AIR"},{"x":26,"y":5,"type":"DIRT"},{"x":27,"y":5,"type":"AIR"},{"x":28,"y":5,"type":"AIR"},{"x":29,"y":5,"type":"DEEP_SPACE"},{"x":30,"y":5,"type":"DEEP_SPACE"},{"x":31,"y":5,"type":"DEEP_SPACE"},{"x":32,"y":5,"type":"DEEP_SPACE"}],[{"x":0,"y":6,"type":"DEEP_SPACE"},{"x":1,"y":6,"type":"DEEP_SPACE"},{"x":2,"y":6,"type":"DEEP_SPACE"},{"x":3,"y":6,"type":"DIRT"},{"x":4,"y":6,"type":"DIRT"},{"x":5,"y":6,"type":"AIR"},{"x":6,"y":6,"type":"DIRT"},{"x":7,"y":6,"type":"DIRT"},{"x":8,"y":6,"type":"DIRT"},{"x":9,"y":6,"type":"DIRT"},{"x":10,"y":6,"type":"DIRT"},{"x":11,"y":6,"type":"DIRT"},{"x":12,"y":6,"type":"DIRT"},{"x":13,"y":6,"type":"DIRT"},{"x":14,"y":6,"type":"DIRT"},{"x":15,"y":6,"type":"AIR"},{"x":16,"y":6,"type":"AIR"},{"x":17,"y":6,"type":"AIR"},{"x":18,"y":6,"type":"DIRT"},{"x":19,"y":6,"type":"DIRT"},{"x":20,"y":6,"type":"DIRT"},{"x":21,"y":6,"type":"DIRT"},{"x":22,"y":6,"type":"DIRT"},{"x":23,"y":6,"type":"DIRT"},{"x":24,"y":6,"type":"DIRT"},{"x":25,"y":6,"type":"DIRT"},{"x":26,"y":6,"type":"DIRT"},{"x":27,"y":6,"type":"AIR"},{"x":28,"y":6,"type":"DIRT"},{"x":29,"y":6,"type":"DIRT"},{"x":30,"y":6,"type":"DEEP_SPACE"},{"x":31,"y":6,"type":"DEEP_SPACE"},{"x":32,"y":6,"type":"DEEP_SPACE"}],[{"x":0,"y":7,"type":"DEEP_SPACE"},{"x":1,"y":7,"type":"DEEP_SPACE"},{"x":2,"y":7,"type":"AIR"},{"x":3,"y":7,"type":"AIR"},{"x":4,"y":7,"type":"DIRT"},{"x":5,"y":7,"type":"AIR"},{"x":6,"y":7,"type":"AIR"},{"x":7,"y":7,"type":"DIRT"},{"x":8,"y":7,"type":"DIRT"},{"x":9,"y":7,"type":"AIR"},{"x":10,"y":7,"type":"AIR"},{"x":11,"y":7,"type":"DIRT"},{"x":12,"y":7,"type":"DIRT"},{"x":13,"y":7,"type":"AIR"},{"x":14,"y":7,"type":"AIR"},{"x":15,"y":7,"type":"AIR"},{"x":16,"y":7,"type":"DIRT"},{"x":17,"y":7,"type":"AIR"},{"x":18,"y":7,"type":"AIR"},{"x":19,"y":7,"type":"AIR"},{"x":20,"y":7,"type":"DIRT"},{"x":21,"y":7,"type":"DIRT"},{"x":22,"y":7,"type":"AIR"},{"x":23,"y":7,"type":"AIR"},{"x":24,"y":7,"type":"DIRT"},{"x":25,"y":7,"type":"DIRT"},{"x":26,"y":7,"type":"AIR"},{"x":27,"y":7,"type":"AIR"},{"x":28,"y":7,"type":"DIRT"},{"x":29,"y":7,"type":"AIR"},{"x":30,"y":7,"type":"AIR"},{"x":31,"y":7,"type":"DEEP_SPACE"},{"x":32,"y":7,"type":"DEEP_SPACE"}],[{"x":0,"y":8,"type":"DEEP_SPACE"},{"x":1,"y":8,"type":"AIR"},{"x":2,"y":8,"type":"AIR"},{"x":3,"y":8,"type":"AIR"},{"x":4,"y":8,"type":"AIR"},{"x":5,"y":8,"type":"DIRT"},{"x":6,"y":8,"type":"DIRT"},{"x":7,"y":8,"type":"DIRT"},{"x":8,"y":8,"type":"DIRT"},{"x":9,"y":8,"type":"DIRT"},{"x":10,"y":8,"type":"DIRT"},{"x":11,"y":8,"type":"DIRT"},{"x":12,"y":8,"type":"DIRT"},{"x":13,"y":8,"type":"AIR"},{"x":14,"y":8,"type":"AIR"},{"x":15,"y":8,"type":"DIRT"},{"x":16,"y":8,"type":"DIRT"},{"x":17,"y":8,"type":"DIRT"},{"x":18,"y":8,"type":"AIR"},{"x":19,"y":8,"type":"AIR"},{"x":20,"y":8,"type":"DIRT"},{"x":21,"y":8,"type":"DIRT"},{"x":22,"y":8,"type":"DIRT"},{"x":23,"y":8,"type":"DIRT"},{"x":24,"y":8,"type":"DIRT"},{"x":25,"y":8,"type":"DIRT"},{"x":26,"y":8,"type":"DIRT"},{"x":27,"y":8,"type":"DIRT"},{"x":28,"y":8,"type":"AIR"},{"x":29,"y":8,"type":"AIR"},{"x":30,"y":8,"type":"AIR"},{"x":31,"y":8,"type":"AIR"},{"x":32,"y":8,"type":"DEEP_SPACE"}],[{"x":0,"y":9,"type":"DEEP_SPACE"},{"x":1,"y":9,"type":"AIR"},{"x":2,"y":9,"type":"AIR"},{"x":3,"y":9,"type":"AIR"},{"x":4,"y":9,"type":"DIRT"},{"x":5,"y":9,"type":"DIRT"},{"x":6,"y":9,"type":"DIRT"},{"x":7,"y":9,"type":"DIRT"},{"x":8,"y":9,"type":"DIRT"},{"x":9,"y":9,"type":"DIRT"},{"x":10,"y":9,"type":"DIRT"},{"x":11,"y":9,"type":"AIR"},{"x":12,"y":9,"type":"DIRT"},{"x":13,"y":9,"type":"AIR"},{"x":14,"y":9,"type":"AIR"},{"x":15,"y":9,"type":"DIRT"},{"x":16,"y":9,"type":"DIRT"},{"x":17,"y":9,"type":"DIRT"},{"x":18,"y":9,"type":"AIR"},{"x":19,"y":9,"type":"AIR"},{"x":20,"y":9,"type":"DIRT"},{"x":21,"y":9,"type":"AIR"},{"x":22,"y":9,"type":"DIRT"},{"x":23,"y":9,"type":"DIRT"},{"x":24,"y":9,"type":"DIRT"},{"x":25,"y":9,"type":"DIRT"},{"x":26,"y":9,"type":"DIRT"},{"x":27,"y":9,"type":"DIRT"},{"x":28,"y":9,"type":"DIRT"},{"x":29,"y":9,"type":"AIR"},{"x":30,"y":9,"type":"AIR"},{"x":31,"y":9,"type":"AIR"},{"x":32,"y":9,"type":"DEEP_SPACE"}],[{"x":0,"y":10,"type":"DEEP_SPACE"},{"x":1,"y":10,"type":"AIR"},{"x":2,"y":10,"type":"AIR"},{"x":3,"y":10,"type":"AIR"},{"x":4,"y":10,"type":"AIR"},{"x":5,"y":10,"type":"DIRT"},{"x":6,"y":10,"type":"DIRT"},{"x":7,"y":10,"type":"DIRT"},{"x":8,"y":10,"type":"AIR"},{"x":9,"y":10,"type":"DIRT"},{"x":10,"y":10,"type":"DIRT"},{"x":11,"y":10,"type":"AIR"},{"x":12,"y":10,"type":"DIRT"},{"x":13,"y":10,"type":"DIRT"},{"x":14,"y":10,"type":"DIRT"},{"x":15,"y":10,"type":"DIRT"},{"x":16,"y":10,"type":"AIR"},{"x":17,"y":10,"type":"DIRT"},{"x":18,"y":10,"type":"DIRT"},{"x":19,"y":10,"type":"DIRT"},{"x":20,"y":10,"type":"DIRT"},{"x":21,"y":10,"type":"AIR"},{"x":22,"y":10,"type":"DIRT"},{"x":23,"y":10,"type":"DIRT"},{"x":24,"y":10,"type":"AIR"},{"x":25,"y":10,"type":"DIRT"},{"x":26,"y":10,"type":"DIRT"},{"x":27,"y":10,"type":"DIRT"},{"x":28,"y":10,"type":"AIR"},{"x":29,"y":10,"type":"AIR"},{"x":30,"y":10,"type":"AIR"},{"x":31,"y":10,"type":"AIR"},{"x":32,"y":10,"type":"DEEP_SPACE"}],[{"x":0,"y":11,"type":"DIRT"},{"x":1,"y":11,"type":"DIRT"},{"x":2,"y":11,"type":"AIR"},{"x":3,"y":11,"type":"AIR"},{"x":4,"y":11,"type":"AIR"},{"x":5,"y":11,"type":"AIR"},{"x":6,"y":11,"type":"DIRT"},{"x":7,"y":11,"type":"DIRT"},{"x":8,"y":11,"type":"AIR"},{"x":9,"y":11,"type":"DIRT"},{"x":10,"y":11,"type":"AIR"},{"x":11,"y":11,"type":"AIR"},{"x":12,"y":11,"type":"DIRT"},{"x":13,"y":11,"type":"DIRT"},{"x":14,"y":11,"type":"DIRT"},{"x":15,"y":11,"type":"AIR"},{"x":16,"y":11,"type":"AIR"},{"x":17,"y":11,"type":"AIR"},{"x":18,"y":11,"type":"DIRT"},{"x":19,"y":11,"type":"DIRT"},{"x":20,"y":11,"type":"DIRT"},{"x":21,"y":11,"type":"AIR"},{"x":22,"y":11,"type":"AIR"},{"x":23,"y":11,"type":"DIRT"},{"x":24,"y":11,"type":"AIR"},{"x":25,"y":11,"type":"DIRT"},{"x":26,"y":11,"type":"DIRT"},{"x":27,"y":11,"type":"AIR"},{"x":28,"y":11,"type":"AIR"},{"x":29,"y":11,"type":"AIR"},{"x":30,"y":11,"type":"AIR"},{"x":31,"y":11,"type":"DIRT"},{"x":32,"y":11,"type":"DIRT"}],[{"x":0,"y":12,"type":"AIR"},{"x":1,"y":12,"type":"AIR"},{"x":2,"y":12,"type":"AIR"},{"x":3,"y":12,"type":"AIR"},{"x":4,"y":12,"type":"AIR"},{"x":5,"y":12,"type":"AIR"},{"x":6,"y":12,"type":"AIR"},{"x":7,"y":12,"type":"DIRT"},{"x":8,"y":12,"type":"DIRT"},{"x":9,"y":12,"type":"DIRT"},{"x":10,"y":12,"type":"AIR"},{"x":11,"y":12,"type":"AIR"},{"x":12,"y":12,"type":"AIR"},{"x":13,"y":12,"type":"DIRT"},{"x":14,"y":12,"type":"DIRT"},{"x":15,"y":12,"type":"AIR"},{"x":16,"y":12,"type":"AIR"},{"x":17,"y":12,"type":"AIR"},{"x":18,"y":12,"type":"DIRT"},{"x":19,"y":12,"type":"DIRT"},{"x":20,"y":12,"type":"AIR"},{"x":21,"y":12,"type":"AIR"},{"x":22,"y":12,"type":"AIR"},{"x":23,"y":12,"type":"DIRT"},{"x":24,"y":12,"type":"DIRT"},{"x":25,"y":12,"type":"DIRT"},{"x":26,"y":12,"type":"AIR"},{"x":27,"y":12,"type":"AIR"},{"x":28,"y":12,"type":"AIR"},{"x":29,"y":12,"type":"AIR"},{"x":30,"y":12,"type":"AIR"},{"x":31,"y":12,"type":"AIR"},{"x":32,"y":12,"type":"AIR"}],[{"x":0,"y":13,"type":"AIR"},{"x":1,"y":13,"type":"AIR"},{"x":2,"y":13,"type":"AIR"},{"x":3,"y":13,"type":"AIR"},{"x":4,"y":13,"type":"DIRT"},{"x":5,"y":13,"type":"DIRT"},{"x":6,"y":13,"type":"AIR"},{"x":7,"y":13,"type":"DIRT"},{"x":8,"y":13,"type":"DIRT"},{"x":9,"y":13,"type":"DIRT"},{"x":10,"y":13,"type":"DIRT"},{"x":11,"y":13,"type":"AIR"},{"x":12,"y":13,"type":"DIRT"},{"x":13,"y":13,"type":"DIRT"},{"x":14,"y":13,"type":"DIRT"},{"x":15,"y":13,"type":"AIR"},{"x":16,"y":13,"type":"AIR"},{"x":17,"y":13,"type":"AIR"},{"x":18,"y":13,"type":"DIRT"},{"x":19,"y":13,"type":"DIRT"},{"x":20,"y":13,"type":"DIRT"},{"x":21,"y":13,"type":"AIR"},{"x":22,"y":13,"type":"DIRT"},{"x":23,"y":13,"type":"DIRT"},{"x":24,"y":13,"type":"DIRT"},{"x":25,"y":13,"type":"DIRT"},{"x":26,"y":13,"type":"AIR"},{"x":27,"y":13,"type":"DIRT"},{"x":28,"y":13,"type":"DIRT"},{"x":29,"y":13,"type":"AIR"},{"x":30,"y":13,"type":"AIR"},{"x":31,"y":13,"type":"AIR"},{"x":32,"y":13,"type":"AIR"}],[{"x":0,"y":14,"type":"DIRT"},{"x":1,"y":14,"type":"DIRT"},{"x":2,"y":14,"type":"DIRT"},{"x":3,"y":14,"type":"DIRT"},{"x":4,"y":14,"type":"DIRT"},{"x":5,"y":14,"type":"DIRT"},{"x":6,"y":14,"type":"AIR"},{"x":7,"y":14,"type":"DIRT"},{"x":8,"y":14,"type":"DIRT"},{"x":9,"y":14,"type":"DIRT"},{"x":10,"y":14,"type":"AIR"},{"x":11,"y":14,"type":"AIR"},{"x":12,"y":14,"type":"AIR"},{"x":13,"y":14,"type":"DIRT"},{"x":14,"y":14,"type":"AIR"},{"x":15,"y":14,"type":"AIR"},{"x":16,"y":14,"type":"AIR"},{"x":17,"y":14,"type":"AIR"},{"x":18,"y":14,"type":"AIR"},{"x":19,"y":14,"type":"DIRT"},{"x":20,"y":14,"type":"AIR"},{"x":21,"y":14,"type":"AIR"},{"x":22,"y":14,"type":"AIR"},{"x":23,"y":14,"type":"DIRT"},{"x":24,"y":14,"type":"DIRT"},{"x":25,"y":14,"type":"DIRT"},{"x":26,"y":14,"type":"AIR"},{"x":27,"y":14,"type":"DIRT"},{"x":28,"y":14,"type":"DIRT"},{"x":29,"y":14,"type":"DIRT"},{"x":30,"y":14,"type":"DIRT"},{"x":31,"y":14,"type":"DIRT"},{"x":32,"y":14,"type":"DIRT"}],[{"x":0,"y":15,"type":"AIR"},{"x":1,"y":15,"type":"AIR"},{"x":2,"y":15,"type":"AIR"},{"x":3,"y":15,"type":"DIRT"},{"x":4,"y":15,"type":"DIRT"},{"x":5,"y":15,"type":"DIRT"},{"x":6,"y":15,"type":"AIR"},{"x":7,"y":15,"type":"AIR"},{"x":8,"y":15,"type":"AIR"},{"x":9,"y":15,"type":"AIR"},{"x":10,"y":15,"type":"AIR"},{"x":11,"y":15,"type":"AIR"},{"x":12,"y":15,"type":"AIR"},{"x":13,"y":15,"type":"AIR"},{"x":14,"y":15,"type":"AIR","powerup":{"type":"HEALTH_PACK","value":10}},{"x":15,"y":15,"type":"AIR"},{"x":16,"y":15,"type":"AIR"},{"x":17,"y":15,"type":"AIR"},{"x":18,"y":15,"type":"AIR"},{"x":19,"y":15,"type":"AIR"},{"x":20,"y":15,"type":"AIR"},{"x":21,"y":15,"type":"AIR"},{"x":22,"y":15,"type":"AIR"},{"x":23,"y":15,"type":"AIR"},{"x":24,"y":15,"type":"AIR"},{"x":25,"y":15,"type":"AIR"},{"x":26,"y":15,"type":"AIR"},{"x":27,"y":15,"type":"DIRT"},{"x":28,"y":15,"type":"DIRT"},{"x":29,"y":15,"type":"DIRT"},{"x":30,"y":15,"type":"AIR"},{"x":31,"y":15,"type":"AIR"},{"x":32,"y":15,"type":"AIR"}],[{"x":0,"y":16,"type":"AIR"},{"x":1,"y":16,"type":"AIR","occupier":{"id":3,"playerId":1,"health":100,"position":{"x":1,"y":16},"weapon":{"damage":8,"range":4},"snowballs":{"freezeDuration":5,"range":5,"count":3,"freezeRadius":1},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Technologist"}},{"x":2,"y":16,"type":"AIR"},{"x":3,"y":16,"type":"DIRT"},{"x":4,"y":16,"type":"DIRT"},{"x":5,"y":16,"type":"DIRT"},{"x":6,"y":16,"type":"AIR"},{"x":7,"y":16,"type":"AIR"},{"x":8,"y":16,"type":"AIR"},{"x":9,"y":16,"type":"AIR"},{"x":10,"y":16,"type":"DIRT"},{"x":11,"y":16,"type":"DIRT"},{"x":12,"y":16,"type":"DIRT"},{"x":13,"y":16,"type":"AIR"},{"x":14,"y":16,"type":"AIR"},{"x":15,"y":16,"type":"AIR"},{"x":16,"y":16,"type":"AIR"},{"x":17,"y":16,"type":"AIR"},{"x":18,"y":16,"type":"AIR"},{"x":19,"y":16,"type":"AIR"},{"x":20,"y":16,"type":"DIRT"},{"x":21,"y":16,"type":"DIRT"},{"x":22,"y":16,"type":"DIRT"},{"x":23,"y":16,"type":"AIR"},{"x":24,"y":16,"type":"AIR"},{"x":25,"y":16,"type":"AIR"},{"x":26,"y":16,"type":"AIR"},{"x":27,"y":16,"type":"DIRT"},{"x":28,"y":16,"type":"DIRT"},{"x":29,"y":16,"type":"DIRT"},{"x":30,"y":16,"type":"AIR"},{"x":31,"y":16,"type":"AIR","occupier":{"id":3,"playerId":2,"health":100,"position":{"x":31,"y":16},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Technologist"}},{"x":32,"y":16,"type":"AIR"}],[{"x":0,"y":17,"type":"AIR"},{"x":1,"y":17,"type":"AIR"},{"x":2,"y":17,"type":"AIR"},{"x":3,"y":17,"type":"DIRT"},{"x":4,"y":17,"type":"DIRT"},{"x":5,"y":17,"type":"DIRT"},{"x":6,"y":17,"type":"AIR"},{"x":7,"y":17,"type":"AIR"},{"x":8,"y":17,"type":"DIRT"},{"x":9,"y":17,"type":"DIRT"},{"x":10,"y":17,"type":"AIR"},{"x":11,"y":17,"type":"AIR"},{"x":12,"y":17,"type":"DIRT"},{"x":13,"y":17,"type":"DIRT"},{"x":14,"y":17,"type":"AIR"},{"x":15,"y":17,"type":"AIR"},{"x":16,"y":17,"type":"DIRT"},{"x":17,"y":17,"type":"AIR"},{"x":18,"y":17,"type":"AIR","powerup":{"type":"HEALTH_PACK","value":10}},{"x":19,"y":17,"type":"DIRT"},{"x":20,"y":17,"type":"DIRT"},{"x":21,"y":17,"type":"AIR"},{"x":22,"y":17,"type":"AIR"},{"x":23,"y":17,"type":"DIRT"},{"x":24,"y":17,"type":"DIRT"},{"x":25,"y":17,"type":"AIR"},{"x":26,"y":17,"type":"AIR"},{"x":27,"y":17,"type":"DIRT"},{"x":28,"y":17,"type":"DIRT"},{"x":29,"y":17,"type":"DIRT"},{"x":30,"y":17,"type":"AIR"},{"x":31,"y":17,"type":"AIR"},{"x":32,"y":17,"type":"AIR"}],[{"x":0,"y":18,"type":"DIRT"},{"x":1,"y":18,"type":"DIRT"},{"x":2,"y":18,"type":"DIRT"},{"x":3,"y":18,"type":"DIRT"},{"x":4,"y":18,"type":"DIRT"},{"x":5,"y":18,"type":"AIR"},{"x":6,"y":18,"type":"AIR"},{"x":7,"y":18,"type":"DIRT"},{"x":8,"y":18,"type":"DIRT"},{"x":9,"y":18,"type":"DIRT"},{"x":10,"y":18,"type":"AIR"},{"x":11,"y":18,"type":"AIR"},{"x":12,"y":18,"type":"AIR"},{"x":13,"y":18,"type":"DIRT"},{"x":14,"y":18,"type":"DIRT"},{"x":15,"y":18,"type":"AIR"},{"x":16,"y":18,"type":"DIRT"},{"x":17,"y":18,"type":"AIR"},{"x":18,"y":18,"type":"DIRT"},{"x":19,"y":18,"type":"DIRT"},{"x":20,"y":18,"type":"AIR"},{"x":21,"y":18,"type":"AIR"},{"x":22,"y":18,"type":"AIR"},{"x":23,"y":18,"type":"DIRT"},{"x":24,"y":18,"type":"DIRT"},{"x":25,"y":18,"type":"DIRT"},{"x":26,"y":18,"type":"AIR"},{"x":27,"y":18,"type":"AIR"},{"x":28,"y":18,"type":"DIRT"},{"x":29,"y":18,"type":"DIRT"},{"x":30,"y":18,"type":"DIRT"},{"x":31,"y":18,"type":"DIRT"},{"x":32,"y":18,"type":"DIRT"}],[{"x":0,"y":19,"type":"AIR"},{"x":1,"y":19,"type":"AIR"},{"x":2,"y":19,"type":"AIR"},{"x":3,"y":19,"type":"AIR"},{"x":4,"y":19,"type":"DIRT"},{"x":5,"y":19,"type":"DIRT"},{"x":6,"y":19,"type":"AIR"},{"x":7,"y":19,"type":"AIR"},{"x":8,"y":19,"type":"DIRT"},{"x":9,"y":19,"type":"AIR"},{"x":10,"y":19,"type":"AIR"},{"x":11,"y":19,"type":"AIR"},{"x":12,"y":19,"type":"DIRT"},{"x":13,"y":19,"type":"DIRT"},{"x":14,"y":19,"type":"AIR"},{"x":15,"y":19,"type":"AIR"},{"x":16,"y":19,"type":"AIR"},{"x":17,"y":19,"type":"AIR"},{"x":18,"y":19,"type":"AIR"},{"x":19,"y":19,"type":"DIRT"},{"x":20,"y":19,"type":"DIRT"},{"x":21,"y":19,"type":"AIR"},{"x":22,"y":19,"type":"AIR"},{"x":23,"y":19,"type":"AIR"},{"x":24,"y":19,"type":"DIRT"},{"x":25,"y":19,"type":"AIR"},{"x":26,"y":19,"type":"AIR"},{"x":27,"y":19,"type":"DIRT"},{"x":28,"y":19,"type":"DIRT"},{"x":29,"y":19,"type":"AIR"},{"x":30,"y":19,"type":"AIR"},{"x":31,"y":19,"type":"AIR"},{"x":32,"y":19,"type":"AIR"}],[{"x":0,"y":20,"type":"DIRT"},{"x":1,"y":20,"type":"AIR"},{"x":2,"y":20,"type":"AIR"},{"x":3,"y":20,"type":"AIR"},{"x":4,"y":20,"type":"AIR"},{"x":5,"y":20,"type":"DIRT"},{"x":6,"y":20,"type":"DIRT"},{"x":7,"y":20,"type":"AIR"},{"x":8,"y":20,"type":"AIR"},{"x":9,"y":20,"type":"AIR"},{"x":10,"y":20,"type":"DIRT"},{"x":11,"y":20,"type":"DIRT"},{"x":12,"y":20,"type":"DIRT"},{"x":13,"y":20,"type":"DIRT"},{"x":14,"y":20,"type":"DIRT"},{"x":15,"y":20,"type":"AIR"},{"x":16,"y":20,"type":"AIR"},{"x":17,"y":20,"type":"AIR"},{"x":18,"y":20,"type":"DIRT"},{"x":19,"y":20,"type":"DIRT"},{"x":20,"y":20,"type":"DIRT"},{"x":21,"y":20,"type":"DIRT"},{"x":22,"y":20,"type":"DIRT"},{"x":23,"y":20,"type":"AIR"},{"x":24,"y":20,"type":"AIR"},{"x":25,"y":20,"type":"AIR"},{"x":26,"y":20,"type":"DIRT"},{"x":27,"y":20,"type":"DIRT"},{"x":28,"y":20,"type":"AIR"},{"x":29,"y":20,"type":"AIR"},{"x":30,"y":20,"type":"AIR"},{"x":31,"y":20,"type":"AIR"},{"x":32,"y":20,"type":"DIRT"}],[{"x":0,"y":21,"type":"DIRT"},{"x":1,"y":21,"type":"AIR"},{"x":2,"y":21,"type":"AIR"},{"x":3,"y":21,"type":"AIR"},{"x":4,"y":21,"type":"AIR"},{"x":5,"y":21,"type":"DIRT"},{"x":6,"y":21,"type":"DIRT"},{"x":7,"y":21,"type":"DIRT"},{"x":8,"y":21,"type":"AIR"},{"x":9,"y":21,"type":"DIRT"},{"x":10,"y":21,"type":"DIRT"},{"x":11,"y":21,"type":"DIRT"},{"x":12,"y":21,"type":"DIRT"},{"x":13,"y":21,"type":"DIRT"},{"x":14,"y":21,"type":"AIR"},{"x":15,"y":21,"type":"AIR"},{"x":16,"y":21,"type":"DIRT"},{"x":17,"y":21,"type":"AIR"},{"x":18,"y":21,"type":"AIR"},{"x":19,"y":21,"type":"DIRT"},{"x":20,"y":21,"type":"DIRT"},{"x":21,"y":21,"type":"DIRT"},{"x":22,"y":21,"type":"DIRT"},{"x":23,"y":21,"type":"DIRT"},{"x":24,"y":21,"type":"AIR"},{"x":25,"y":21,"type":"DIRT"},{"x":26,"y":21,"type":"DIRT"},{"x":27,"y":21,"type":"DIRT"},{"x":28,"y":21,"type":"AIR"},{"x":29,"y":21,"type":"AIR"},{"x":30,"y":21,"type":"AIR"},{"x":31,"y":21,"type":"AIR"},{"x":32,"y":21,"type":"DIRT"}],[{"x":0,"y":22,"type":"DEEP_SPACE"},{"x":1,"y":22,"type":"AIR"},{"x":2,"y":22,"type":"AIR"},{"x":3,"y":22,"type":"DIRT"},{"x":4,"y":22,"type":"DIRT"},{"x":5,"y":22,"type":"DIRT"},{"x":6,"y":22,"type":"DIRT"},{"x":7,"y":22,"type":"DIRT"},{"x":8,"y":22,"type":"DIRT"},{"x":9,"y":22,"type":"DIRT"},{"x":10,"y":22,"type":"DIRT"},{"x":11,"y":22,"type":"DIRT"},{"x":12,"y":22,"type":"DIRT"},{"x":13,"y":22,"type":"DIRT"},{"x":14,"y":22,"type":"AIR"},{"x":15,"y":22,"type":"AIR"},{"x":16,"y":22,"type":"AIR"},{"x":17,"y":22,"type":"AIR"},{"x":18,"y":22,"type":"AIR"},{"x":19,"y":22,"type":"DIRT"},{"x":20,"y":22,"type":"DIRT"},{"x":21,"y":22,"type":"DIRT"},{"x":22,"y":22,"type":"DIRT"},{"x":23,"y":22,"type":"DIRT"},{"x":24,"y":22,"type":"DIRT"},{"x":25,"y":22,"type":"DIRT"},{"x":26,"y":22,"type":"DIRT"},{"x":27,"y":22,"type":"DIRT"},{"x":28,"y":22,"type":"DIRT"},{"x":29,"y":22,"type":"DIRT"},{"x":30,"y":22,"type":"AIR"},{"x":31,"y":22,"type":"AIR"},{"x":32,"y":22,"type":"DEEP_SPACE"}],[{"x":0,"y":23,"type":"DEEP_SPACE"},{"x":1,"y":23,"type":"AIR"},{"x":2,"y":23,"type":"DIRT"},{"x":3,"y":23,"type":"DIRT"},{"x":4,"y":23,"type":"DIRT"},{"x":5,"y":23,"type":"AIR"},{"x":6,"y":23,"type":"AIR"},{"x":7,"y":23,"type":"DIRT"},{"x":8,"y":23,"type":"DIRT"},{"x":9,"y":23,"type":"DIRT"},{"x":10,"y":23,"type":"DIRT"},{"x":11,"y":23,"type":"DIRT"},{"x":12,"y":23,"type":"DIRT"},{"x":13,"y":23,"type":"AIR"},{"x":14,"y":23,"type":"AIR"},{"x":15,"y":23,"type":"DIRT"},{"x":16,"y":23,"type":"DIRT"},{"x":17,"y":23,"type":"DIRT"},{"x":18,"y":23,"type":"AIR"},{"x":19,"y":23,"type":"AIR"},{"x":20,"y":23,"type":"DIRT"},{"x":21,"y":23,"type":"DIRT"},{"x":22,"y":23,"type":"DIRT"},{"x":23,"y":23,"type":"DIRT"},{"x":24,"y":23,"type":"DIRT"},{"x":25,"y":23,"type":"DIRT"},{"x":26,"y":23,"type":"AIR"},{"x":27,"y":23,"type":"AIR"},{"x":28,"y":23,"type":"DIRT"},{"x":29,"y":23,"type":"DIRT"},{"x":30,"y":23,"type":"DIRT"},{"x":31,"y":23,"type":"AIR"},{"x":32,"y":23,"type":"DEEP_SPACE"}],[{"x":0,"y":24,"type":"DEEP_SPACE"},{"x":1,"y":24,"type":"DIRT"},{"x":2,"y":24,"type":"DIRT"},{"x":3,"y":24,"type":"DIRT"},{"x":4,"y":24,"type":"DIRT"},{"x":5,"y":24,"type":"AIR"},{"x":6,"y":24,"type":"AIR"},{"x":7,"y":24,"type":"AIR"},{"x":8,"y":24,"type":"DIRT"},{"x":9,"y":24,"type":"AIR"},{"x":10,"y":24,"type":"DIRT"},{"x":11,"y":24,"type":"DIRT"},{"x":12,"y":24,"type":"DIRT"},{"x":13,"y":24,"type":"AIR"},{"x":14,"y":24,"type":"DIRT"},{"x":15,"y":24,"type":"DIRT"},{"x":16,"y":24,"type":"DIRT"},{"x":17,"y":24,"type":"DIRT"},{"x":18,"y":24,"type":"DIRT"},{"x":19,"y":24,"type":"AIR"},{"x":20,"y":24,"type":"DIRT"},{"x":21,"y":24,"type":"DIRT"},{"x":22,"y":24,"type":"DIRT"},{"x":23,"y":24,"type":"AIR"},{"x":24,"y":24,"type":"DIRT"},{"x":25,"y":24,"type":"AIR"},{"x":26,"y":24,"type":"AIR"},{"x":27,"y":24,"type":"AIR"},{"x":28,"y":24,"type":"DIRT"},{"x":29,"y":24,"type":"DIRT"},{"x":30,"y":24,"type":"DIRT"},{"x":31,"y":24,"type":"DIRT"},{"x":32,"y":24,"type":"DEEP_SPACE"}],[{"x":0,"y":25,"type":"DEEP_SPACE"},{"x":1,"y":25,"type":"DEEP_SPACE"},{"x":2,"y":25,"type":"DIRT"},{"x":3,"y":25,"type":"DIRT"},{"x":4,"y":25,"type":"DIRT"},{"x":5,"y":25,"type":"DIRT"},{"x":6,"y":25,"type":"DIRT"},{"x":7,"y":25,"type":"DIRT"},{"x":8,"y":25,"type":"DIRT"},{"x":9,"y":25,"type":"DIRT"},{"x":10,"y":25,"type":"DIRT"},{"x":11,"y":25,"type":"DIRT"},{"x":12,"y":25,"type":"DIRT"},{"x":13,"y":25,"type":"DIRT"},{"x":14,"y":25,"type":"DIRT"},{"x":15,"y":25,"type":"DIRT"},{"x":16,"y":25,"type":"AIR"},{"x":17,"y":25,"type":"DIRT"},{"x":18,"y":25,"type":"DIRT"},{"x":19,"y":25,"type":"DIRT"},{"x":20,"y":25,"type":"DIRT"},{"x":21,"y":25,"type":"DIRT"},{"x":22,"y":25,"type":"DIRT"},{"x":23,"y":25,"type":"DIRT"},{"x":24,"y":25,"type":"DIRT"},{"x":25,"y":25,"type":"DIRT"},{"x":26,"y":25,"type":"DIRT"},{"x":27,"y":25,"type":"DIRT"},{"x":28,"y":25,"type":"DIRT"},{"x":29,"y":25,"type":"DIRT"},{"x":30,"y":25,"type":"DIRT"},{"x":31,"y":25,"type":"DEEP_SPACE"},{"x":32,"y":25,"type":"DEEP_SPACE"}],[{"x":0,"y":26,"type":"DEEP_SPACE"},{"x":1,"y":26,"type":"DEEP_SPACE"},{"x":2,"y":26,"type":"DEEP_SPACE"},{"x":3,"y":26,"type":"AIR"},{"x":4,"y":26,"type":"DIRT"},{"x":5,"y":26,"type":"DIRT"},{"x":6,"y":26,"type":"DIRT"},{"x":7,"y":26,"type":"DIRT"},{"x":8,"y":26,"type":"DIRT"},{"x":9,"y":26,"type":"DIRT"},{"x":10,"y":26,"type":"DIRT"},{"x":11,"y":26,"type":"AIR"},{"x":12,"y":26,"type":"DIRT"},{"x":13,"y":26,"type":"DIRT"},{"x":14,"y":26,"type":"AIR"},{"x":15,"y":26,"type":"AIR"},{"x":16,"y":26,"type":"AIR"},{"x":17,"y":26,"type":"AIR"},{"x":18,"y":26,"type":"AIR"},{"x":19,"y":26,"type":"DIRT"},{"x":20,"y":26,"type":"DIRT"},{"x":21,"y":26,"type":"AIR"},{"x":22,"y":26,"type":"DIRT"},{"x":23,"y":26,"type":"DIRT"},{"x":24,"y":26,"type":"DIRT"},{"x":25,"y":26,"type":"DIRT"},{"x":26,"y":26,"type":"DIRT"},{"x":27,"y":26,"type":"DIRT"},{"x":28,"y":26,"type":"DIRT"},{"x":29,"y":26,"type":"AIR"},{"x":30,"y":26,"type":"DEEP_SPACE"},{"x":31,"y":26,"type":"DEEP_SPACE"},{"x":32,"y":26,"type":"DEEP_SPACE"}],[{"x":0,"y":27,"type":"DEEP_SPACE"},{"x":1,"y":27,"type":"DEEP_SPACE"},{"x":2,"y":27,"type":"DEEP_SPACE"},{"x":3,"y":27,"type":"DEEP_SPACE"},{"x":4,"y":27,"type":"DIRT"},{"x":5,"y":27,"type":"DIRT"},{"x":6,"y":27,"type":"DIRT"},{"x":7,"y":27,"type":"AIR"},{"x":8,"y":27,"type":"AIR"},{"x":9,"y":27,"type":"AIR"},{"x":10,"y":27,"type":"DIRT"},{"x":11,"y":27,"type":"DIRT"},{"x":12,"y":27,"type":"DIRT"},{"x":13,"y":27,"type":"DIRT"},{"x":14,"y":27,"type":"AIR"},{"x":15,"y":27,"type":"AIR"},{"x":16,"y":27,"type":"DIRT"},{"x":17,"y":27,"type":"AIR"},{"x":18,"y":27,"type":"AIR"},{"x":19,"y":27,"type":"DIRT"},{"x":20,"y":27,"type":"DIRT"},{"x":21,"y":27,"type":"DIRT"},{"x":22,"y":27,"type":"DIRT"},{"x":23,"y":27,"type":"AIR"},{"x":24,"y":27,"type":"AIR"},{"x":25,"y":27,"type":"AIR"},{"x":26,"y":27,"type":"DIRT"},{"x":27,"y":27,"type":"DIRT"},{"x":28,"y":27,"type":"DIRT"},{"x":29,"y":27,"type":"DEEP_SPACE"},{"x":30,"y":27,"type":"DEEP_SPACE"},{"x":31,"y":27,"type":"DEEP_SPACE"},{"x":32,"y":27,"type":"DEEP_SPACE"}],[{"x":0,"y":28,"type":"DEEP_SPACE"},{"x":1,"y":28,"type":"DEEP_SPACE"},{"x":2,"y":28,"type":"DEEP_SPACE"},{"x":3,"y":28,"type":"DEEP_SPACE"},{"x":4,"y":28,"type":"DIRT"},{"x":5,"y":28,"type":"DIRT"},{"x":6,"y":28,"type":"DIRT"},{"x":7,"y":28,"type":"AIR"},{"x":8,"y":28,"type":"AIR","occupier":{"id":1,"playerId":2,"health":150,"position":{"x":8,"y":28},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Commando"}},{"x":9,"y":28,"type":"AIR"},{"x":10,"y":28,"type":"DIRT"},{"x":11,"y":28,"type":"DIRT"},{"x":12,"y":28,"type":"DIRT"},{"x":13,"y":28,"type":"DIRT"},{"x":14,"y":28,"type":"AIR"},{"x":15,"y":28,"type":"DIRT"},{"x":16,"y":28,"type":"DIRT"},{"x":17,"y":28,"type":"DIRT"},{"x":18,"y":28,"type":"AIR"},{"x":19,"y":28,"type":"DIRT"},{"x":20,"y":28,"type":"DIRT"},{"x":21,"y":28,"type":"DIRT"},{"x":22,"y":28,"type":"DIRT"},{"x":23,"y":28,"type":"AIR"},{"x":24,"y":28,"type":"AIR","occupier":{"id":2,"playerId":1,"health":100,"position":{"x":24,"y":28},"weapon":{"damage":8,"range":4},"bananaBombs":{"damage":20,"range":5,"count":3,"damageRadius":2},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Agent"}},{"x":25,"y":28,"type":"AIR"},{"x":26,"y":28,"type":"DIRT"},{"x":27,"y":28,"type":"DIRT"},{"x":28,"y":28,"type":"DIRT"},{"x":29,"y":28,"type":"DEEP_SPACE"},{"x":30,"y":28,"type":"DEEP_SPACE"},{"x":31,"y":28,"type":"DEEP_SPACE"},{"x":32,"y":28,"type":"DEEP_SPACE"}],[{"x":0,"y":29,"type":"DEEP_SPACE"},{"x":1,"y":29,"type":"DEEP_SPACE"},{"x":2,"y":29,"type":"DEEP_SPACE"},{"x":3,"y":29,"type":"DEEP_SPACE"},{"x":4,"y":29,"type":"DEEP_SPACE"},{"x":5,"y":29,"type":"DEEP_SPACE"},{"x":6,"y":29,"type":"DIRT"},{"x":7,"y":29,"type":"AIR"},{"x":8,"y":29,"type":"AIR"},{"x":9,"y":29,"type":"AIR"},{"x":10,"y":29,"type":"DIRT"},{"x":11,"y":29,"type":"AIR"},{"x":12,"y":29,"type":"DIRT"},{"x":13,"y":29,"type":"DIRT"},{"x":14,"y":29,"type":"AIR"},{"x":15,"y":29,"type":"DIRT"},{"x":16,"y":29,"type":"AIR"},{"x":17,"y":29,"type":"DIRT"},{"x":18,"y":29,"type":"AIR"},{"x":19,"y":29,"type":"DIRT"},{"x":20,"y":29,"type":"DIRT"},{"x":21,"y":29,"type":"AIR"},{"x":22,"y":29,"type":"DIRT"},{"x":23,"y":29,"type":"AIR"},{"x":24,"y":29,"type":"AIR"},{"x":25,"y":29,"type":"AIR"},{"x":26,"y":29,"type":"DIRT"},{"x":27,"y":29,"type":"DEEP_SPACE"},{"x":28,"y":29,"type":"DEEP_SPACE"},{"x":29,"y":29,"type":"DEEP_SPACE"},{"x":30,"y":29,"type":"DEEP_SPACE"},{"x":31,"y":29,"type":"DEEP_SPACE"},{"x":32,"y":29,"type":"DEEP_SPACE"}],[{"x":0,"y":30,"type":"DEEP_SPACE"},{"x":1,"y":30,"type":"DEEP_SPACE"},{"x":2,"y":30,"type":"DEEP_SPACE"},{"x":3,"y":30,"type":"DEEP_SPACE"},{"x":4,"y":30,"type":"DEEP_SPACE"},{"x":5,"y":30,"type":"DEEP_SPACE"},{"x":6,"y":30,"type":"DEEP_SPACE"},{"x":7,"y":30,"type":"DIRT"},{"x":8,"y":30,"type":"DIRT"},{"x":9,"y":30,"type":"DIRT"},{"x":10,"y":30,"type":"DIRT"},{"x":11,"y":30,"type":"AIR"},{"x":12,"y":30,"type":"DIRT"},{"x":13,"y":30,"type":"AIR"},{"x":14,"y":30,"type":"AIR"},{"x":15,"y":30,"type":"DIRT"},{"x":16,"y":30,"type":"DIRT"},{"x":17,"y":30,"type":"DIRT"},{"x":18,"y":30,"type":"AIR"},{"x":19,"y":30,"type":"AIR"},{"x":20,"y":30,"type":"DIRT"},{"x":21,"y":30,"type":"AIR"},{"x":22,"y":30,"type":"DIRT"},{"x":23,"y":30,"type":"DIRT"},{"x":24,"y":30,"type":"DIRT"},{"x":25,"y":30,"type":"DIRT"},{"x":26,"y":30,"type":"DEEP_SPACE"},{"x":27,"y":30,"type":"DEEP_SPACE"},{"x":28,"y":30,"type":"DEEP_SPACE"},{"x":29,"y":30,"type":"DEEP_SPACE"},{"x":30,"y":30,"type":"DEEP_SPACE"},{"x":31,"y":30,"type":"DEEP_SPACE"},{"x":32,"y":30,"type":"DEEP_SPACE"}],[{"x":0,"y":31,"type":"DEEP_SPACE"},{"x":1,"y":31,"type":"DEEP_SPACE"},{"x":2,"y":31,"type":"DEEP_SPACE"},{"x":3,"y":31,"type":"DEEP_SPACE"},{"x":4,"y":31,"type":"DEEP_SPACE"},{"x":5,"y":31,"type":"DEEP_SPACE"},{"x":6,"y":31,"type":"DEEP_SPACE"},{"x":7,"y":31,"type":"DEEP_SPACE"},{"x":8,"y":31,"type":"AIR"},{"x":9,"y":31,"type":"DIRT"},{"x":10,"y":31,"type":"AIR"},{"x":11,"y":31,"type":"AIR"},{"x":12,"y":31,"type":"AIR"},{"x":13,"y":31,"type":"AIR"},{"x":14,"y":31,"type":"AIR"},{"x":15,"y":31,"type":"DIRT"},{"x":16,"y":31,"type":"DIRT"},{"x":17,"y":31,"type":"DIRT"},{"x":18,"y":31,"type":"AIR"},{"x":19,"y":31,"type":"AIR"},{"x":20,"y":31,"type":"AIR"},{"x":21,"y":31,"type":"AIR"},{"x":22,"y":31,"type":"AIR"},{"x":23,"y":31,"type":"DIRT"},{"x":24,"y":31,"type":"AIR"},{"x":25,"y":31,"type":"DEEP_SPACE"},{"x":26,"y":31,"type":"DEEP_SPACE"},{"x":27,"y":31,"type":"DEEP_SPACE"},{"x":28,"y":31,"type":"DEEP_SPACE"},{"x":29,"y":31,"type":"DEEP_SPACE"},{"x":30,"y":31,"type":"DEEP_SPACE"},{"x":31,"y":31,"type":"DEEP_SPACE"},{"x":32,"y":31,"type":"DEEP_SPACE"}],[{"x":0,"y":32,"type":"DEEP_SPACE"},{"x":1,"y":32,"type":"DEEP_SPACE"},{"x":2,"y":32,"type":"DEEP_SPACE"},{"x":3,"y":32,"type":"DEEP_SPACE"},{"x":4,"y":32,"type":"DEEP_SPACE"},{"x":5,"y":32,"type":"DEEP_SPACE"},{"x":6,"y":32,"type":"DEEP_SPACE"},{"x":7,"y":32,"type":"DEEP_SPACE"},{"x":8,"y":32,"type":"DEEP_SPACE"},{"x":9,"y":32,"type":"DEEP_SPACE"},{"x":10,"y":32,"type":"DEEP_SPACE"},{"x":11,"y":32,"type":"AIR"},{"x":12,"y":32,"type":"AIR"},{"x":13,"y":32,"type":"AIR"},{"x":14,"y":32,"type":"AIR"},{"x":15,"y":32,"type":"DIRT"},{"x":16,"y":32,"type":"AIR"},{"x":17,"y":32,"type":"DIRT"},{"x":18,"y":32,"type":"AIR"},{"x":19,"y":32,"type":"AIR"},{"x":20,"y":32,"type":"AIR"},{"x":21,"y":32,"type":"AIR"},{"x":22,"y":32,"type":"DEEP_SPACE"},{"x":23,"y":32,"type":"DEEP_SPACE"},{"x":24,"y":32,"type":"DEEP_SPACE"},{"x":25,"y":32,"type":"DEEP_SPACE"},{"x":26,"y":32,"type":"DEEP_SPACE"},{"x":27,"y":32,"type":"DEEP_SPACE"},{"x":28,"y":32,"type":"DEEP_SPACE"},{"x":29,"y":32,"type":"DEEP_SPACE"},{"x":30,"y":32,"type":"DEEP_SPACE"},{"x":31,"y":32,"type":"DEEP_SPACE"},{"x":32,"y":32,"type":"DEEP_SPACE"}]],"visualizerEvents":[]} \ No newline at end of file
diff --git a/2019-worms/tests/replays/2019.08.19.21.15.02/A-log.csv b/2019-worms/tests/replays/2019.08.19.21.15.02/A-log.csv
new file mode 100644
index 0000000..373de29
--- /dev/null
+++ b/2019-worms/tests/replays/2019.08.19.21.15.02/A-log.csv
@@ -0,0 +1,298 @@
+Round,LastCommandType,LastCommand,ActiveWorm,Score,Health,Worm1 Health,Worm1 x,Worm1 y,Worm2 Health,Worm2 x,Worm2 y,Worm3 Health,Worm3 x,Worm3 y
+1,null,"null",1,116,350,150,24,4,100,24,28,100,1,16
+2,move,"move 23 3",1,121,350,150,23,3,100,24,28,100,1,16
+3,move,"move 23 28",2,126,350,150,23,3,100,23,28,100,1,16
+4,move,"move 2 16",3,131,350,150,23,3,100,23,28,100,2,16
+5,dig,"dig 22 3",1,138,350,150,23,3,100,23,28,100,2,16
+6,dig,"dig 22 28",2,145,350,150,23,3,100,23,28,100,2,16
+7,dig,"dig 3 16",3,152,350,150,23,3,100,23,28,100,2,16
+8,move,"move 22 3",1,157,350,150,22,3,100,23,28,100,2,16
+9,move,"move 22 28",2,162,350,150,22,3,100,22,28,100,2,16
+10,move,"move 2 15",3,167,350,150,22,3,100,22,28,100,2,15
+11,move,"move 23 3",1,172,350,150,23,3,100,22,28,100,2,15
+12,move,"move 23 28",2,177,350,150,23,3,100,23,28,100,2,15
+13,move,"move 2 16",3,182,350,150,23,3,100,23,28,100,2,16
+14,move,"move 22 3",1,187,350,150,22,3,100,23,28,100,2,16
+15,move,"move 22 28",2,192,350,150,22,3,100,22,28,100,2,16
+16,move,"move 2 15",3,197,350,150,22,3,100,22,28,100,2,15
+17,move,"move 23 3",1,202,350,150,23,3,100,22,28,100,2,15
+18,move,"move 23 28",2,207,350,150,23,3,100,23,28,100,2,15
+19,move,"move 2 16",3,212,350,150,23,3,100,23,28,100,2,16
+20,move,"move 22 3",1,217,350,150,22,3,100,23,28,100,2,16
+21,move,"move 22 28",2,222,350,150,22,3,100,22,28,100,2,16
+22,move,"move 2 15",3,227,350,150,22,3,100,22,28,100,2,15
+23,move,"move 23 3",1,232,350,150,23,3,100,22,28,100,2,15
+24,move,"move 23 28",2,237,350,150,23,3,100,23,28,100,2,15
+25,move,"move 2 16",3,242,350,150,23,3,100,23,28,100,2,16
+26,move,"move 22 3",1,247,350,150,22,3,100,23,28,100,2,16
+27,move,"move 22 28",2,252,350,150,22,3,100,22,28,100,2,16
+28,move,"move 2 15",3,257,350,150,22,3,100,22,28,100,2,15
+29,move,"move 23 3",1,262,350,150,23,3,100,22,28,100,2,15
+30,move,"move 23 28",2,267,350,150,23,3,100,23,28,100,2,15
+31,move,"move 2 16",3,272,350,150,23,3,100,23,28,100,2,16
+32,move,"move 22 3",1,277,350,150,22,3,100,23,28,100,2,16
+33,move,"move 22 28",2,282,350,150,22,3,100,22,28,100,2,16
+34,move,"move 2 15",3,287,350,150,22,3,100,22,28,100,2,15
+35,move,"move 23 3",1,292,350,150,23,3,100,22,28,100,2,15
+36,move,"move 23 28",2,297,350,150,23,3,100,23,28,100,2,15
+37,move,"move 2 16",3,302,350,150,23,3,100,23,28,100,2,16
+38,move,"move 24 3",1,307,350,150,24,3,100,23,28,100,2,16
+39,move,"move 22 28",2,312,350,150,24,3,100,22,28,100,2,16
+40,move,"move 2 15",3,317,350,150,24,3,100,22,28,100,2,15
+41,move,"move 24 4",1,322,350,150,24,4,100,22,28,100,2,15
+42,dig,"dig 21 27",2,329,350,150,24,4,100,22,28,100,2,15
+43,move,"move 1 16",3,334,350,150,24,4,100,22,28,100,1,16
+44,move,"move 25 3",1,339,350,150,25,3,100,22,28,100,1,16
+45,move,"move 23 28",2,344,350,150,25,3,100,23,28,100,1,16
+46,move,"move 2 16",3,349,350,150,25,3,100,23,28,100,2,16
+47,dig,"dig 25 2",1,356,350,150,25,3,100,23,28,100,2,16
+48,move,"move 22 28",2,361,350,150,25,3,100,22,28,100,2,16
+49,move,"move 2 15",3,366,350,150,25,3,100,22,28,100,2,15
+50,move,"move 24 3",1,371,350,150,24,3,100,22,28,100,2,15
+51,move,"move 23 28",2,376,350,150,24,3,100,23,28,100,2,15
+52,dig,"dig 1 14",3,383,350,150,24,3,100,23,28,100,2,15
+53,dig,"dig 24 2",1,390,350,150,24,3,100,23,28,100,2,15
+54,move,"move 24 27",2,395,350,150,24,3,100,24,27,100,2,15
+55,move,"move 2 16",3,400,350,150,24,3,100,24,27,100,2,16
+56,move,"move 23 3",1,405,350,150,23,3,100,24,27,100,2,16
+57,move,"move 23 28",2,410,350,150,23,3,100,23,28,100,2,16
+58,move,"move 2 15",3,415,350,150,23,3,100,23,28,100,2,15
+59,move,"move 24 2",1,420,350,150,24,2,100,23,28,100,2,15
+60,move,"move 22 28",2,425,350,150,24,2,100,22,28,100,2,15
+61,move,"move 2 16",3,430,350,150,24,2,100,22,28,100,2,16
+62,move,"move 23 3",1,435,350,150,23,3,100,22,28,100,2,16
+63,move,"move 23 28",2,440,350,150,23,3,100,23,28,100,2,16
+64,move,"move 2 15",3,445,350,150,23,3,100,23,28,100,2,15
+65,move,"move 24 2",1,450,350,150,24,2,100,23,28,100,2,15
+66,move,"move 22 28",2,455,350,150,24,2,100,22,28,100,2,15
+67,move,"move 2 16",3,460,350,150,24,2,100,22,28,100,2,16
+68,move,"move 23 3",1,465,350,150,23,3,100,22,28,100,2,16
+69,move,"move 23 28",2,470,350,150,23,3,100,23,28,100,2,16
+70,move,"move 2 15",3,475,350,150,23,3,100,23,28,100,2,15
+71,move,"move 24 2",1,480,350,150,24,2,100,23,28,100,2,15
+72,move,"move 22 28",2,485,350,150,24,2,100,22,28,100,2,15
+73,move,"move 2 16",3,490,350,150,24,2,100,22,28,100,2,16
+74,move,"move 23 3",1,495,350,150,23,3,100,22,28,100,2,16
+75,move,"move 23 28",2,500,350,150,23,3,100,23,28,100,2,16
+76,dig,"dig 3 17",3,507,350,150,23,3,100,23,28,100,2,16
+77,move,"move 24 2",1,512,350,150,24,2,100,23,28,100,2,16
+78,move,"move 22 28",2,517,350,150,24,2,100,22,28,100,2,16
+79,move,"move 2 15",3,522,350,150,24,2,100,22,28,100,2,15
+80,move,"move 25 3",1,527,350,150,25,3,100,22,28,100,2,15
+81,dig,"dig 22 27",2,534,350,150,25,3,100,22,28,100,2,15
+82,dig,"dig 2 14",3,541,350,150,25,3,100,22,28,100,2,15
+83,move,"move 25 2",1,546,350,150,25,2,100,22,28,100,2,15
+84,move,"move 23 28",2,551,350,150,25,2,100,23,28,100,2,15
+85,dig,"dig 3 14",3,558,350,150,25,2,100,23,28,100,2,15
+86,move,"move 25 3",1,563,350,150,25,3,100,23,28,100,2,15
+87,move,"move 24 28",2,568,350,150,25,3,100,24,28,100,2,15
+88,nothing,"nothing "Player chose to do nothing"",3,568,350,150,25,3,100,24,28,100,2,15
+89,move,"move 25 2",1,573,350,150,25,2,100,24,28,100,2,15
+90,move,"move 23 28",2,578,350,150,25,2,100,23,28,100,2,15
+91,move,"move 1 16",3,583,350,150,25,2,100,23,28,100,1,16
+92,move,"move 24 3",1,588,350,150,24,3,100,23,28,100,1,16
+93,move,"move 23 29",2,587,330,130,24,3,100,23,29,100,1,16
+94,move,"move 2 16",3,592,330,130,24,3,100,23,29,100,2,16
+95,move,"move 23 4",1,597,330,130,23,4,100,23,29,100,2,16
+96,move,"move 22 28",2,595,310,110,23,4,100,22,28,100,2,16
+97,move,"move 1 16",3,600,310,110,23,4,100,22,28,100,1,16
+98,move,"move 22 3",1,600,310,110,23,4,100,22,28,100,1,16
+99,shoot,"shoot S",1,593,290,90,23,4,100,22,28,100,1,16
+100,shoot,"shoot S",1,591,282,82,23,4,100,22,28,100,1,16
+101,shoot,"shoot S",1,588,274,74,23,4,100,22,28,100,1,16
+102,shoot,"shoot S",1,601,266,66,23,4,100,22,28,100,1,16
+103,shoot,"shoot S",1,615,258,58,23,4,100,22,28,100,1,16
+104,dig,"dig 21 28",2,619,250,50,23,4,100,22,28,100,1,16
+105,nothing,"nothing "Player chose to do nothing"",3,619,250,50,23,4,100,22,28,100,1,16
+106,move,"move 24 3",1,624,250,50,24,3,100,22,28,100,1,16
+107,nothing,"nothing "Player chose to do nothing"",2,624,250,50,24,3,100,22,28,100,1,16
+108,move,"move 2 17",3,629,250,50,24,3,100,22,28,100,2,17
+109,move,"move 25 4",1,629,250,50,24,3,100,22,28,100,2,17
+110,move,"move 23 28",2,634,250,50,24,3,100,23,28,100,2,17
+111,move,"move 1 17",3,636,242,42,24,3,100,23,28,100,1,17
+112,move,"move 25 4",1,641,242,42,25,4,100,23,28,100,1,17
+113,move,"move 23 27",2,646,242,42,25,4,100,23,27,100,1,17
+114,move,"move 2 16",3,649,234,34,25,4,100,23,27,100,2,16
+115,shoot,"shoot W",1,649,234,34,25,4,100,23,27,100,2,16
+116,move,"move 22 28",2,651,226,26,25,4,100,22,28,100,2,16
+117,move,"move 3 16",3,652,215,15,25,4,100,22,28,100,3,16
+118,shoot,"shoot W",1,667,212,12,25,4,100,22,28,100,3,16
+119,move,"move 23 27",2,669,201,1,25,4,100,23,27,100,3,16
+120,move,"move 2 17",3,673,200,-10,25,4,100,23,27,100,2,17
+121,move,"move 24 27",2,678,200,-10,25,4,100,24,27,100,2,17
+122,move,"move 2 16",3,683,200,-10,25,4,100,24,27,100,2,16
+123,dig,"dig 25 26",2,690,200,-10,25,4,100,24,27,100,2,16
+124,move,"move 3 17",3,695,200,-10,25,4,100,24,27,100,3,17
+125,move,"move 23 28",2,700,200,-10,25,4,100,23,28,100,3,17
+126,move,"move 2 17",3,705,200,-10,25,4,100,23,28,100,2,17
+127,move,"move 22 28",2,710,200,-10,25,4,100,22,28,100,2,17
+128,dig,"dig 3 18",3,717,200,-10,25,4,100,22,28,100,2,17
+129,move,"move 23 28",2,722,200,-10,25,4,100,23,28,100,2,17
+130,move,"move 3 18",3,727,200,-10,25,4,100,23,28,100,3,18
+131,move,"move 22 28",2,732,200,-10,25,4,100,22,28,100,3,18
+132,move,"move 3 19",3,737,200,-10,25,4,100,22,28,100,3,19
+133,move,"move 22 27",2,742,200,-10,25,4,100,22,27,100,3,19
+134,move,"move 4 20",3,747,200,-10,25,4,100,22,27,100,4,20
+135,move,"move 21 26",2,752,200,-10,25,4,100,21,26,100,4,20
+136,move,"move 4 21",3,757,200,-10,25,4,100,21,26,100,4,21
+137,dig,"dig 20 25",2,764,200,-10,25,4,100,21,26,100,4,21
+138,nothing,"nothing "Player chose to do nothing"",3,764,200,-10,25,4,100,21,26,100,4,21
+139,move,"move 22 27",2,769,200,-10,25,4,100,22,27,100,4,21
+140,dig,"dig 5 20",3,776,200,-10,25,4,100,22,27,100,4,21
+141,move,"move 23 27",2,781,200,-10,25,4,100,23,27,100,4,21
+142,move,"move 4 20",3,786,200,-10,25,4,100,23,27,100,4,20
+143,nothing,"nothing "Player chose to do nothing"",2,786,200,-10,25,4,100,23,27,100,4,20
+144,move,"move 5 20",3,791,200,-10,25,4,100,23,27,100,5,20
+145,dig,"dig 23 26",2,798,200,-10,25,4,100,23,27,100,5,20
+146,dig,"dig 6 21",3,805,200,-10,25,4,100,23,27,100,5,20
+147,move,"move 23 26",2,810,200,-10,25,4,100,23,26,100,5,20
+148,dig,"dig 6 20",3,817,200,-10,25,4,100,23,26,100,5,20
+149,dig,"dig 22 25",2,824,200,-10,25,4,100,23,26,100,5,20
+150,dig,"dig 5 21",3,831,200,-10,25,4,100,23,26,100,5,20
+151,dig,"dig 24 25",2,838,200,-10,25,4,100,23,26,100,5,20
+152,move,"move 5 21",3,843,200,-10,25,4,100,23,26,100,5,21
+153,nothing,"nothing "Player chose to do nothing"",2,843,200,-10,25,4,100,23,26,100,5,21
+154,move,"move 5 20",3,848,200,-10,25,4,100,23,26,100,5,20
+155,dig,"dig 24 26",2,855,200,-10,25,4,100,23,26,100,5,20
+156,nothing,"nothing "Player chose to do nothing"",3,855,200,-10,25,4,100,23,26,100,5,20
+157,dig,"dig 22 26",2,862,200,-10,25,4,100,23,26,100,5,20
+158,move,"move 6 19",3,867,200,-10,25,4,100,23,26,100,6,19
+159,move,"move 24 25",2,872,200,-10,25,4,100,24,25,100,6,19
+160,move,"move 5 18",3,877,200,-10,25,4,100,24,25,100,5,18
+161,move,"move 23 24",2,882,200,-10,25,4,100,23,24,100,5,18
+162,dig,"dig 4 19",3,889,200,-10,25,4,100,23,24,100,5,18
+163,dig,"dig 22 24",2,896,200,-10,25,4,100,23,24,100,5,18
+164,dig,"dig 5 19",3,903,200,-10,25,4,100,23,24,100,5,18
+165,banana,"banana 23 19",2,952,200,-10,25,4,100,23,24,100,5,18
+166,move,"move 6 19",3,957,200,-10,25,4,100,23,24,100,6,19
+167,banana,"banana 23 19",2,997,200,-10,25,4,100,23,24,100,6,19
+168,move,"move 7 19",3,1002,200,-10,25,4,100,23,24,100,7,19
+169,banana,"banana 23 19",2,1056,200,-10,25,4,100,23,24,100,7,19
+170,dig,"dig 7 18",3,1063,200,-10,25,4,100,23,24,100,7,19
+171,dig,"dig 23 23",2,1070,200,-10,25,4,100,23,24,100,7,19
+172,move,"move 7 18",3,1075,200,-10,25,4,100,23,24,100,7,18
+173,move,"move 22 24",2,1080,200,-10,25,4,100,22,24,100,7,18
+174,move,"move 7 17",3,1085,200,-10,25,4,100,22,24,100,7,17
+175,dig,"dig 21 25",2,1092,200,-10,25,4,100,22,24,100,7,17
+176,dig,"dig 8 18",3,1099,200,-10,25,4,100,22,24,100,7,17
+177,dig,"dig 21 23",2,1106,200,-10,25,4,100,22,24,100,7,17
+178,dig,"dig 8 17",3,1113,200,-10,25,4,100,22,24,100,7,17
+179,move,"move 21 25",2,1118,200,-10,25,4,100,21,25,100,7,17
+180,nothing,"nothing "Player chose to do nothing"",3,1118,200,-10,25,4,100,21,25,100,7,17
+181,move,"move 20 25",2,1123,200,-10,25,4,100,20,25,100,7,17
+182,nothing,"nothing "Player chose to do nothing"",3,1123,200,-10,25,4,100,20,25,100,7,17
+183,move,"move 19 24",2,1128,200,-10,25,4,100,19,24,100,7,17
+184,move,"move 8 18",3,1133,200,-10,25,4,100,19,24,100,8,18
+185,move,"move 20 25",2,1138,200,-10,25,4,100,20,25,100,8,18
+186,move,"move 8 17",3,1143,200,-10,25,4,100,20,25,100,8,17
+187,move,"move 19 24",2,1148,200,-10,25,4,100,19,24,100,8,17
+188,dig,"dig 9 18",3,1155,200,-10,25,4,100,19,24,100,8,17
+189,shoot,"shoot NE",2,1171,200,-10,25,4,100,19,24,100,8,17
+190,move,"move 8 18",3,1174,192,-10,25,4,92,19,24,100,8,18
+191,shoot,"shoot NE",2,1190,192,-10,25,4,92,19,24,100,8,18
+192,move,"move 9 18",3,1195,192,-10,25,4,92,19,24,100,9,18
+193,shoot,"shoot NE",2,1208,184,-10,25,4,84,19,24,100,9,18
+194,move,"move 9 19",3,1213,184,-10,25,4,84,19,24,100,9,19
+195,move,"move 18 23",2,1218,184,-10,25,4,84,18,23,100,9,19
+196,move,"move 10 19",3,1223,184,-10,25,4,84,18,23,100,10,19
+197,shoot,"shoot NE",2,1236,176,-10,25,4,76,18,23,100,10,19
+198,move,"move 9 20",3,1239,168,-10,25,4,68,18,23,100,9,20
+199,shoot,"shoot E",2,1255,168,-10,25,4,68,18,23,100,9,20
+200,dig,"dig 10 20",3,1259,160,-10,25,4,60,18,23,100,9,20
+201,move,"move 17 22",2,1264,160,-10,25,4,60,17,22,100,9,20
+202,move,"move 10 20",3,1269,160,-10,25,4,60,17,22,100,10,20
+203,shoot,"shoot E",2,1285,160,-10,25,4,60,17,22,100,10,20
+204,move,"move 9 20",3,1290,160,-10,25,4,60,17,22,100,9,20
+205,move,"move 16 22",2,1295,160,-10,25,4,60,16,22,100,9,20
+206,dig,"dig 9 21",3,1299,152,-10,25,4,52,16,22,100,9,20
+207,shoot,"shoot E",2,1315,152,-10,25,4,52,16,22,100,9,20
+208,move,"move 10 19",3,1320,152,-10,25,4,52,16,22,100,10,19
+209,shoot,"shoot E",2,1334,144,-10,25,4,44,16,22,100,10,19
+210,move,"move 11 19",3,1339,144,-10,25,4,44,16,22,100,11,19
+211,shoot,"shoot E",2,1355,144,-10,25,4,44,16,22,100,11,19
+212,move,"move 11 18",3,1360,144,-10,25,4,44,16,22,100,11,18
+213,shoot,"shoot NE",2,1373,136,-10,25,4,36,16,22,100,11,18
+214,snowball,"snowball 16 20",3,1390,136,-10,25,4,36,16,22,100,11,18
+215,shoot,"shoot E",2,1406,136,-10,25,4,36,16,22,100,11,18
+216,dig,"dig 12 17",3,1410,128,-10,25,4,28,16,22,100,11,18
+217,shoot,"shoot E",2,1426,128,-10,25,4,28,16,22,100,11,18
+218,snowball,"snowball 16 20",3,1443,128,-10,25,4,28,16,22,100,11,18
+219,shoot,"shoot E",2,1457,120,-10,25,4,20,16,22,100,11,18
+220,snowball,"snowball 16 20",3,1474,120,-10,25,4,20,16,22,100,11,18
+221,move,"move 15 21",2,1479,120,-10,25,4,20,15,21,100,11,18
+222,invalid,"invalid",3,1475,120,-10,25,4,20,15,21,100,11,18
+223,shoot,"shoot E",2,1491,120,-10,25,4,20,15,21,100,11,18
+224,move,"move 12 17",3,1496,120,-10,25,4,20,15,21,100,12,17
+225,shoot,"shoot E",2,1512,120,-10,25,4,20,15,21,100,12,17
+226,dig,"dig 13 18",3,1519,120,-10,25,4,20,15,21,100,12,17
+227,shoot,"shoot E",2,1535,120,-10,25,4,20,15,21,100,12,17
+228,move,"move 13 18",3,1537,112,-10,25,4,12,15,21,100,13,18
+229,shoot,"shoot E",2,1553,112,-10,25,4,12,15,21,100,13,18
+230,shoot,"shoot SE",3,1569,112,-10,25,4,12,15,21,100,13,18
+231,shoot,"shoot E",2,1582,104,-10,25,4,4,15,21,100,13,18
+232,shoot,"shoot SE",3,1598,104,-10,25,4,4,15,21,100,13,18
+233,shoot,"shoot E",2,1614,104,-10,25,4,4,15,21,100,13,18
+234,move,"move 14 17",3,1618,100,-10,25,4,-4,15,21,100,14,17
+235,invalid,"invalid",3,1614,100,-10,25,4,-4,15,21,100,14,17
+236,move,"move 15 18",3,1619,100,-10,25,4,-4,15,21,100,15,18
+237,move,"move 15 19",3,1624,100,-10,25,4,-4,15,21,100,15,19
+238,shoot,"shoot SE",3,1640,100,-10,25,4,-4,15,21,100,15,19
+239,shoot,"shoot S",3,1653,92,-10,25,4,-4,15,21,92,15,19
+240,shoot,"shoot SE",3,1667,84,-10,25,4,-4,15,21,84,15,19
+241,shoot,"shoot SE",3,1683,84,-10,25,4,-4,15,21,84,15,19
+242,move,"move 16 19",3,1688,84,-10,25,4,-4,15,21,84,16,19
+243,move,"move 17 20",3,1693,84,-10,25,4,-4,15,21,84,17,20
+244,shoot,"shoot S",3,1709,84,-10,25,4,-4,15,21,84,17,20
+245,shoot,"shoot W",3,1722,76,-10,25,4,-4,15,21,76,17,20
+246,shoot,"shoot S",3,1738,76,-10,25,4,-4,15,21,76,17,20
+247,move,"move 18 19",3,1743,76,-10,25,4,-4,15,21,76,18,19
+248,move,"move 17 19",3,1748,76,-10,25,4,-4,15,21,76,17,19
+249,shoot,"shoot SW",3,1764,76,-10,25,4,-4,15,21,76,17,19
+250,move,"move 18 19",3,1769,76,-10,25,4,-4,15,21,76,18,19
+251,move,"move 17 19",3,1774,76,-10,25,4,-4,15,21,76,17,19
+252,shoot,"shoot SE",3,1790,76,-10,25,4,-4,15,21,76,17,19
+253,move,"move 17 18",3,1795,76,-10,25,4,-4,15,21,76,17,18
+254,shoot,"shoot SW",3,1851,76,-10,25,4,-4,15,21,76,17,18
+255,shoot,"shoot S",3,1867,76,-10,25,4,-4,15,21,76,17,18
+256,move,"move 18 17",3,1872,76,-10,25,4,-4,15,21,76,18,17
+257,move,"move 18 16",3,1877,76,-10,25,4,-4,15,21,76,18,16
+258,move,"move 18 17",3,1882,76,-10,25,4,-4,15,21,76,18,17
+259,shoot,"shoot S",3,1938,76,-10,25,4,-4,15,21,76,18,17
+260,move,"move 17 18",3,1943,76,-10,25,4,-4,15,21,76,17,18
+261,move,"move 18 18",3,1948,76,-10,25,4,-4,15,21,76,18,18
+262,move,"move 17 18",3,1953,76,-10,25,4,-4,15,21,76,17,18
+263,move,"move 18 18",3,1958,76,-10,25,4,-4,15,21,76,18,18
+264,move,"move 17 18",3,1963,76,-10,25,4,-4,15,21,76,17,18
+265,move,"move 18 18",3,1968,76,-10,25,4,-4,15,21,76,18,18
+266,move,"move 17 19",3,1973,76,-10,25,4,-4,15,21,76,17,19
+267,move,"move 17 20",3,1978,76,-10,25,4,-4,15,21,76,17,20
+268,move,"move 17 19",3,1983,76,-10,25,4,-4,15,21,76,17,19
+269,move,"move 17 20",3,1988,76,-10,25,4,-4,15,21,76,17,20
+270,move,"move 17 19",3,1993,76,-10,25,4,-4,15,21,76,17,19
+271,move,"move 17 20",3,1998,76,-10,25,4,-4,15,21,76,17,20
+272,move,"move 17 19",3,2003,76,-10,25,4,-4,15,21,76,17,19
+273,move,"move 17 20",3,2008,76,-10,25,4,-4,15,21,76,17,20
+274,move,"move 17 19",3,2013,76,-10,25,4,-4,15,21,76,17,19
+275,move,"move 18 20",3,2018,76,-10,25,4,-4,15,21,76,18,20
+276,move,"move 17 20",3,2023,76,-10,25,4,-4,15,21,76,17,20
+277,move,"move 17 19",3,2028,76,-10,25,4,-4,15,21,76,17,19
+278,move,"move 17 20",3,2033,76,-10,25,4,-4,15,21,76,17,20
+279,move,"move 18 20",3,2038,76,-10,25,4,-4,15,21,76,18,20
+280,move,"move 17 20",3,2043,76,-10,25,4,-4,15,21,76,17,20
+281,move,"move 17 19",3,2048,76,-10,25,4,-4,15,21,76,17,19
+282,move,"move 17 20",3,2053,76,-10,25,4,-4,15,21,76,17,20
+283,move,"move 17 19",3,2058,76,-10,25,4,-4,15,21,76,17,19
+284,move,"move 17 20",3,2063,76,-10,25,4,-4,15,21,76,17,20
+285,move,"move 17 19",3,2068,76,-10,25,4,-4,15,21,76,17,19
+286,move,"move 18 20",3,2073,76,-10,25,4,-4,15,21,76,18,20
+287,move,"move 17 19",3,2077,73,-10,25,4,-4,15,21,73,17,19
+288,move,"move 18 20",3,2082,73,-10,25,4,-4,15,21,73,18,20
+289,move,"move 17 19",3,2086,70,-10,25,4,-4,15,21,70,17,19
+290,move,"move 18 20",3,2091,70,-10,25,4,-4,15,21,70,18,20
+291,move,"move 17 19",3,2095,67,-10,25,4,-4,15,21,67,17,19
+292,move,"move 18 20",3,2100,67,-10,25,4,-4,15,21,67,18,20
+293,move,"move 17 19",3,2104,64,-10,25,4,-4,15,21,64,17,19
+294,move,"move 18 20",3,2109,64,-10,25,4,-4,15,21,64,18,20
+295,move,"move 17 20",3,2113,61,-10,25,4,-4,15,21,61,17,20
+296,move,"move 18 20",3,2117,58,-10,25,4,-4,15,21,58,18,20
+297,move,"move 17 20",3,2121,55,-10,25,4,-4,15,21,55,17,20
diff --git a/2019-worms/tests/replays/2019.08.19.21.15.02/B-init.json b/2019-worms/tests/replays/2019.08.19.21.15.02/B-init.json
new file mode 100644
index 0000000..8889378
--- /dev/null
+++ b/2019-worms/tests/replays/2019.08.19.21.15.02/B-init.json
@@ -0,0 +1 @@
+{"currentRound":1,"maxRounds":400,"pushbackDamage":20,"lavaDamage":3,"mapSize":33,"currentWormId":1,"consecutiveDoNothingCount":0,"myPlayer":{"id":2,"score":116,"health":350,"currentWormId":1,"remainingWormSelections":5,"previousCommand":"nothing","worms":[{"id":1,"health":150,"position":{"x":8,"y":28},"weapon":{"damage":8,"range":4},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Commando"},{"id":2,"health":100,"position":{"x":8,"y":4},"weapon":{"damage":8,"range":4},"bananaBombs":{"damage":20,"range":5,"count":3,"damageRadius":2},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Agent"},{"id":3,"health":100,"position":{"x":31,"y":16},"weapon":{"damage":8,"range":4},"snowballs":{"freezeDuration":5,"range":5,"count":3,"freezeRadius":1},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Technologist"}]},"opponents":[{"id":1,"score":116,"currentWormId":1,"remainingWormSelections":5,"previousCommand":"nothing","worms":[{"id":1,"health":150,"position":{"x":24,"y":4},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Commando"},{"id":2,"health":100,"position":{"x":24,"y":28},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Agent"},{"id":3,"health":100,"position":{"x":1,"y":16},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Technologist"}]}],"map":[[{"x":0,"y":0,"type":"DEEP_SPACE"},{"x":1,"y":0,"type":"DEEP_SPACE"},{"x":2,"y":0,"type":"DEEP_SPACE"},{"x":3,"y":0,"type":"DEEP_SPACE"},{"x":4,"y":0,"type":"DEEP_SPACE"},{"x":5,"y":0,"type":"DEEP_SPACE"},{"x":6,"y":0,"type":"DEEP_SPACE"},{"x":7,"y":0,"type":"DEEP_SPACE"},{"x":8,"y":0,"type":"DEEP_SPACE"},{"x":9,"y":0,"type":"DEEP_SPACE"},{"x":10,"y":0,"type":"DEEP_SPACE"},{"x":11,"y":0,"type":"DIRT"},{"x":12,"y":0,"type":"AIR"},{"x":13,"y":0,"type":"DIRT"},{"x":14,"y":0,"type":"DIRT"},{"x":15,"y":0,"type":"DIRT"},{"x":16,"y":0,"type":"AIR"},{"x":17,"y":0,"type":"DIRT"},{"x":18,"y":0,"type":"DIRT"},{"x":19,"y":0,"type":"DIRT"},{"x":20,"y":0,"type":"AIR"},{"x":21,"y":0,"type":"DIRT"},{"x":22,"y":0,"type":"DEEP_SPACE"},{"x":23,"y":0,"type":"DEEP_SPACE"},{"x":24,"y":0,"type":"DEEP_SPACE"},{"x":25,"y":0,"type":"DEEP_SPACE"},{"x":26,"y":0,"type":"DEEP_SPACE"},{"x":27,"y":0,"type":"DEEP_SPACE"},{"x":28,"y":0,"type":"DEEP_SPACE"},{"x":29,"y":0,"type":"DEEP_SPACE"},{"x":30,"y":0,"type":"DEEP_SPACE"},{"x":31,"y":0,"type":"DEEP_SPACE"},{"x":32,"y":0,"type":"DEEP_SPACE"}],[{"x":0,"y":1,"type":"DEEP_SPACE"},{"x":1,"y":1,"type":"DEEP_SPACE"},{"x":2,"y":1,"type":"DEEP_SPACE"},{"x":3,"y":1,"type":"DEEP_SPACE"},{"x":4,"y":1,"type":"DEEP_SPACE"},{"x":5,"y":1,"type":"DEEP_SPACE"},{"x":6,"y":1,"type":"DEEP_SPACE"},{"x":7,"y":1,"type":"DEEP_SPACE"},{"x":8,"y":1,"type":"DIRT"},{"x":9,"y":1,"type":"AIR"},{"x":10,"y":1,"type":"AIR"},{"x":11,"y":1,"type":"AIR"},{"x":12,"y":1,"type":"AIR"},{"x":13,"y":1,"type":"AIR"},{"x":14,"y":1,"type":"DIRT"},{"x":15,"y":1,"type":"DIRT"},{"x":16,"y":1,"type":"AIR"},{"x":17,"y":1,"type":"DIRT"},{"x":18,"y":1,"type":"DIRT"},{"x":19,"y":1,"type":"AIR"},{"x":20,"y":1,"type":"AIR"},{"x":21,"y":1,"type":"AIR"},{"x":22,"y":1,"type":"AIR"},{"x":23,"y":1,"type":"AIR"},{"x":24,"y":1,"type":"DIRT"},{"x":25,"y":1,"type":"DEEP_SPACE"},{"x":26,"y":1,"type":"DEEP_SPACE"},{"x":27,"y":1,"type":"DEEP_SPACE"},{"x":28,"y":1,"type":"DEEP_SPACE"},{"x":29,"y":1,"type":"DEEP_SPACE"},{"x":30,"y":1,"type":"DEEP_SPACE"},{"x":31,"y":1,"type":"DEEP_SPACE"},{"x":32,"y":1,"type":"DEEP_SPACE"}],[{"x":0,"y":2,"type":"DEEP_SPACE"},{"x":1,"y":2,"type":"DEEP_SPACE"},{"x":2,"y":2,"type":"DEEP_SPACE"},{"x":3,"y":2,"type":"DEEP_SPACE"},{"x":4,"y":2,"type":"DEEP_SPACE"},{"x":5,"y":2,"type":"DEEP_SPACE"},{"x":6,"y":2,"type":"DEEP_SPACE"},{"x":7,"y":2,"type":"DIRT"},{"x":8,"y":2,"type":"DIRT"},{"x":9,"y":2,"type":"DIRT"},{"x":10,"y":2,"type":"DIRT"},{"x":11,"y":2,"type":"DIRT"},{"x":12,"y":2,"type":"DIRT"},{"x":13,"y":2,"type":"AIR"},{"x":14,"y":2,"type":"AIR"},{"x":15,"y":2,"type":"DIRT"},{"x":16,"y":2,"type":"AIR"},{"x":17,"y":2,"type":"DIRT"},{"x":18,"y":2,"type":"AIR"},{"x":19,"y":2,"type":"AIR"},{"x":20,"y":2,"type":"DIRT"},{"x":21,"y":2,"type":"DIRT"},{"x":22,"y":2,"type":"DIRT"},{"x":23,"y":2,"type":"DIRT"},{"x":24,"y":2,"type":"DIRT"},{"x":25,"y":2,"type":"DIRT"},{"x":26,"y":2,"type":"DEEP_SPACE"},{"x":27,"y":2,"type":"DEEP_SPACE"},{"x":28,"y":2,"type":"DEEP_SPACE"},{"x":29,"y":2,"type":"DEEP_SPACE"},{"x":30,"y":2,"type":"DEEP_SPACE"},{"x":31,"y":2,"type":"DEEP_SPACE"},{"x":32,"y":2,"type":"DEEP_SPACE"}],[{"x":0,"y":3,"type":"DEEP_SPACE"},{"x":1,"y":3,"type":"DEEP_SPACE"},{"x":2,"y":3,"type":"DEEP_SPACE"},{"x":3,"y":3,"type":"DEEP_SPACE"},{"x":4,"y":3,"type":"DEEP_SPACE"},{"x":5,"y":3,"type":"DEEP_SPACE"},{"x":6,"y":3,"type":"DIRT"},{"x":7,"y":3,"type":"AIR"},{"x":8,"y":3,"type":"AIR"},{"x":9,"y":3,"type":"AIR"},{"x":10,"y":3,"type":"DIRT"},{"x":11,"y":3,"type":"DIRT"},{"x":12,"y":3,"type":"DIRT"},{"x":13,"y":3,"type":"DIRT"},{"x":14,"y":3,"type":"AIR"},{"x":15,"y":3,"type":"AIR"},{"x":16,"y":3,"type":"AIR"},{"x":17,"y":3,"type":"AIR"},{"x":18,"y":3,"type":"AIR"},{"x":19,"y":3,"type":"DIRT"},{"x":20,"y":3,"type":"DIRT"},{"x":21,"y":3,"type":"DIRT"},{"x":22,"y":3,"type":"DIRT"},{"x":23,"y":3,"type":"AIR"},{"x":24,"y":3,"type":"AIR"},{"x":25,"y":3,"type":"AIR"},{"x":26,"y":3,"type":"DIRT"},{"x":27,"y":3,"type":"DEEP_SPACE"},{"x":28,"y":3,"type":"DEEP_SPACE"},{"x":29,"y":3,"type":"DEEP_SPACE"},{"x":30,"y":3,"type":"DEEP_SPACE"},{"x":31,"y":3,"type":"DEEP_SPACE"},{"x":32,"y":3,"type":"DEEP_SPACE"}],[{"x":0,"y":4,"type":"DEEP_SPACE"},{"x":1,"y":4,"type":"DEEP_SPACE"},{"x":2,"y":4,"type":"DEEP_SPACE"},{"x":3,"y":4,"type":"DEEP_SPACE"},{"x":4,"y":4,"type":"DIRT"},{"x":5,"y":4,"type":"DIRT"},{"x":6,"y":4,"type":"DIRT"},{"x":7,"y":4,"type":"AIR"},{"x":8,"y":4,"type":"AIR","occupier":{"id":2,"playerId":2,"health":100,"position":{"x":8,"y":4},"weapon":{"damage":8,"range":4},"bananaBombs":{"damage":20,"range":5,"count":3,"damageRadius":2},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Agent"}},{"x":9,"y":4,"type":"AIR"},{"x":10,"y":4,"type":"DIRT"},{"x":11,"y":4,"type":"DIRT"},{"x":12,"y":4,"type":"DIRT"},{"x":13,"y":4,"type":"DIRT"},{"x":14,"y":4,"type":"DIRT"},{"x":15,"y":4,"type":"AIR"},{"x":16,"y":4,"type":"DIRT"},{"x":17,"y":4,"type":"AIR"},{"x":18,"y":4,"type":"DIRT"},{"x":19,"y":4,"type":"DIRT"},{"x":20,"y":4,"type":"DIRT"},{"x":21,"y":4,"type":"DIRT"},{"x":22,"y":4,"type":"DIRT"},{"x":23,"y":4,"type":"AIR"},{"x":24,"y":4,"type":"AIR","occupier":{"id":1,"playerId":1,"health":150,"position":{"x":24,"y":4},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Commando"}},{"x":25,"y":4,"type":"AIR"},{"x":26,"y":4,"type":"DIRT"},{"x":27,"y":4,"type":"DIRT"},{"x":28,"y":4,"type":"DIRT"},{"x":29,"y":4,"type":"DEEP_SPACE"},{"x":30,"y":4,"type":"DEEP_SPACE"},{"x":31,"y":4,"type":"DEEP_SPACE"},{"x":32,"y":4,"type":"DEEP_SPACE"}],[{"x":0,"y":5,"type":"DEEP_SPACE"},{"x":1,"y":5,"type":"DEEP_SPACE"},{"x":2,"y":5,"type":"DEEP_SPACE"},{"x":3,"y":5,"type":"DEEP_SPACE"},{"x":4,"y":5,"type":"AIR"},{"x":5,"y":5,"type":"AIR"},{"x":6,"y":5,"type":"DIRT"},{"x":7,"y":5,"type":"AIR"},{"x":8,"y":5,"type":"AIR"},{"x":9,"y":5,"type":"AIR"},{"x":10,"y":5,"type":"DIRT"},{"x":11,"y":5,"type":"DIRT"},{"x":12,"y":5,"type":"DIRT"},{"x":13,"y":5,"type":"DIRT"},{"x":14,"y":5,"type":"DIRT"},{"x":15,"y":5,"type":"AIR"},{"x":16,"y":5,"type":"AIR"},{"x":17,"y":5,"type":"AIR"},{"x":18,"y":5,"type":"DIRT"},{"x":19,"y":5,"type":"DIRT"},{"x":20,"y":5,"type":"DIRT"},{"x":21,"y":5,"type":"DIRT"},{"x":22,"y":5,"type":"DIRT"},{"x":23,"y":5,"type":"AIR"},{"x":24,"y":5,"type":"AIR"},{"x":25,"y":5,"type":"AIR"},{"x":26,"y":5,"type":"DIRT"},{"x":27,"y":5,"type":"AIR"},{"x":28,"y":5,"type":"AIR"},{"x":29,"y":5,"type":"DEEP_SPACE"},{"x":30,"y":5,"type":"DEEP_SPACE"},{"x":31,"y":5,"type":"DEEP_SPACE"},{"x":32,"y":5,"type":"DEEP_SPACE"}],[{"x":0,"y":6,"type":"DEEP_SPACE"},{"x":1,"y":6,"type":"DEEP_SPACE"},{"x":2,"y":6,"type":"DEEP_SPACE"},{"x":3,"y":6,"type":"DIRT"},{"x":4,"y":6,"type":"DIRT"},{"x":5,"y":6,"type":"AIR"},{"x":6,"y":6,"type":"DIRT"},{"x":7,"y":6,"type":"DIRT"},{"x":8,"y":6,"type":"DIRT"},{"x":9,"y":6,"type":"DIRT"},{"x":10,"y":6,"type":"DIRT"},{"x":11,"y":6,"type":"DIRT"},{"x":12,"y":6,"type":"DIRT"},{"x":13,"y":6,"type":"DIRT"},{"x":14,"y":6,"type":"DIRT"},{"x":15,"y":6,"type":"AIR"},{"x":16,"y":6,"type":"AIR"},{"x":17,"y":6,"type":"AIR"},{"x":18,"y":6,"type":"DIRT"},{"x":19,"y":6,"type":"DIRT"},{"x":20,"y":6,"type":"DIRT"},{"x":21,"y":6,"type":"DIRT"},{"x":22,"y":6,"type":"DIRT"},{"x":23,"y":6,"type":"DIRT"},{"x":24,"y":6,"type":"DIRT"},{"x":25,"y":6,"type":"DIRT"},{"x":26,"y":6,"type":"DIRT"},{"x":27,"y":6,"type":"AIR"},{"x":28,"y":6,"type":"DIRT"},{"x":29,"y":6,"type":"DIRT"},{"x":30,"y":6,"type":"DEEP_SPACE"},{"x":31,"y":6,"type":"DEEP_SPACE"},{"x":32,"y":6,"type":"DEEP_SPACE"}],[{"x":0,"y":7,"type":"DEEP_SPACE"},{"x":1,"y":7,"type":"DEEP_SPACE"},{"x":2,"y":7,"type":"AIR"},{"x":3,"y":7,"type":"AIR"},{"x":4,"y":7,"type":"DIRT"},{"x":5,"y":7,"type":"AIR"},{"x":6,"y":7,"type":"AIR"},{"x":7,"y":7,"type":"DIRT"},{"x":8,"y":7,"type":"DIRT"},{"x":9,"y":7,"type":"AIR"},{"x":10,"y":7,"type":"AIR"},{"x":11,"y":7,"type":"DIRT"},{"x":12,"y":7,"type":"DIRT"},{"x":13,"y":7,"type":"AIR"},{"x":14,"y":7,"type":"AIR"},{"x":15,"y":7,"type":"AIR"},{"x":16,"y":7,"type":"DIRT"},{"x":17,"y":7,"type":"AIR"},{"x":18,"y":7,"type":"AIR"},{"x":19,"y":7,"type":"AIR"},{"x":20,"y":7,"type":"DIRT"},{"x":21,"y":7,"type":"DIRT"},{"x":22,"y":7,"type":"AIR"},{"x":23,"y":7,"type":"AIR"},{"x":24,"y":7,"type":"DIRT"},{"x":25,"y":7,"type":"DIRT"},{"x":26,"y":7,"type":"AIR"},{"x":27,"y":7,"type":"AIR"},{"x":28,"y":7,"type":"DIRT"},{"x":29,"y":7,"type":"AIR"},{"x":30,"y":7,"type":"AIR"},{"x":31,"y":7,"type":"DEEP_SPACE"},{"x":32,"y":7,"type":"DEEP_SPACE"}],[{"x":0,"y":8,"type":"DEEP_SPACE"},{"x":1,"y":8,"type":"AIR"},{"x":2,"y":8,"type":"AIR"},{"x":3,"y":8,"type":"AIR"},{"x":4,"y":8,"type":"AIR"},{"x":5,"y":8,"type":"DIRT"},{"x":6,"y":8,"type":"DIRT"},{"x":7,"y":8,"type":"DIRT"},{"x":8,"y":8,"type":"DIRT"},{"x":9,"y":8,"type":"DIRT"},{"x":10,"y":8,"type":"DIRT"},{"x":11,"y":8,"type":"DIRT"},{"x":12,"y":8,"type":"DIRT"},{"x":13,"y":8,"type":"AIR"},{"x":14,"y":8,"type":"AIR"},{"x":15,"y":8,"type":"DIRT"},{"x":16,"y":8,"type":"DIRT"},{"x":17,"y":8,"type":"DIRT"},{"x":18,"y":8,"type":"AIR"},{"x":19,"y":8,"type":"AIR"},{"x":20,"y":8,"type":"DIRT"},{"x":21,"y":8,"type":"DIRT"},{"x":22,"y":8,"type":"DIRT"},{"x":23,"y":8,"type":"DIRT"},{"x":24,"y":8,"type":"DIRT"},{"x":25,"y":8,"type":"DIRT"},{"x":26,"y":8,"type":"DIRT"},{"x":27,"y":8,"type":"DIRT"},{"x":28,"y":8,"type":"AIR"},{"x":29,"y":8,"type":"AIR"},{"x":30,"y":8,"type":"AIR"},{"x":31,"y":8,"type":"AIR"},{"x":32,"y":8,"type":"DEEP_SPACE"}],[{"x":0,"y":9,"type":"DEEP_SPACE"},{"x":1,"y":9,"type":"AIR"},{"x":2,"y":9,"type":"AIR"},{"x":3,"y":9,"type":"AIR"},{"x":4,"y":9,"type":"DIRT"},{"x":5,"y":9,"type":"DIRT"},{"x":6,"y":9,"type":"DIRT"},{"x":7,"y":9,"type":"DIRT"},{"x":8,"y":9,"type":"DIRT"},{"x":9,"y":9,"type":"DIRT"},{"x":10,"y":9,"type":"DIRT"},{"x":11,"y":9,"type":"AIR"},{"x":12,"y":9,"type":"DIRT"},{"x":13,"y":9,"type":"AIR"},{"x":14,"y":9,"type":"AIR"},{"x":15,"y":9,"type":"DIRT"},{"x":16,"y":9,"type":"DIRT"},{"x":17,"y":9,"type":"DIRT"},{"x":18,"y":9,"type":"AIR"},{"x":19,"y":9,"type":"AIR"},{"x":20,"y":9,"type":"DIRT"},{"x":21,"y":9,"type":"AIR"},{"x":22,"y":9,"type":"DIRT"},{"x":23,"y":9,"type":"DIRT"},{"x":24,"y":9,"type":"DIRT"},{"x":25,"y":9,"type":"DIRT"},{"x":26,"y":9,"type":"DIRT"},{"x":27,"y":9,"type":"DIRT"},{"x":28,"y":9,"type":"DIRT"},{"x":29,"y":9,"type":"AIR"},{"x":30,"y":9,"type":"AIR"},{"x":31,"y":9,"type":"AIR"},{"x":32,"y":9,"type":"DEEP_SPACE"}],[{"x":0,"y":10,"type":"DEEP_SPACE"},{"x":1,"y":10,"type":"AIR"},{"x":2,"y":10,"type":"AIR"},{"x":3,"y":10,"type":"AIR"},{"x":4,"y":10,"type":"AIR"},{"x":5,"y":10,"type":"DIRT"},{"x":6,"y":10,"type":"DIRT"},{"x":7,"y":10,"type":"DIRT"},{"x":8,"y":10,"type":"AIR"},{"x":9,"y":10,"type":"DIRT"},{"x":10,"y":10,"type":"DIRT"},{"x":11,"y":10,"type":"AIR"},{"x":12,"y":10,"type":"DIRT"},{"x":13,"y":10,"type":"DIRT"},{"x":14,"y":10,"type":"DIRT"},{"x":15,"y":10,"type":"DIRT"},{"x":16,"y":10,"type":"AIR"},{"x":17,"y":10,"type":"DIRT"},{"x":18,"y":10,"type":"DIRT"},{"x":19,"y":10,"type":"DIRT"},{"x":20,"y":10,"type":"DIRT"},{"x":21,"y":10,"type":"AIR"},{"x":22,"y":10,"type":"DIRT"},{"x":23,"y":10,"type":"DIRT"},{"x":24,"y":10,"type":"AIR"},{"x":25,"y":10,"type":"DIRT"},{"x":26,"y":10,"type":"DIRT"},{"x":27,"y":10,"type":"DIRT"},{"x":28,"y":10,"type":"AIR"},{"x":29,"y":10,"type":"AIR"},{"x":30,"y":10,"type":"AIR"},{"x":31,"y":10,"type":"AIR"},{"x":32,"y":10,"type":"DEEP_SPACE"}],[{"x":0,"y":11,"type":"DIRT"},{"x":1,"y":11,"type":"DIRT"},{"x":2,"y":11,"type":"AIR"},{"x":3,"y":11,"type":"AIR"},{"x":4,"y":11,"type":"AIR"},{"x":5,"y":11,"type":"AIR"},{"x":6,"y":11,"type":"DIRT"},{"x":7,"y":11,"type":"DIRT"},{"x":8,"y":11,"type":"AIR"},{"x":9,"y":11,"type":"DIRT"},{"x":10,"y":11,"type":"AIR"},{"x":11,"y":11,"type":"AIR"},{"x":12,"y":11,"type":"DIRT"},{"x":13,"y":11,"type":"DIRT"},{"x":14,"y":11,"type":"DIRT"},{"x":15,"y":11,"type":"AIR"},{"x":16,"y":11,"type":"AIR"},{"x":17,"y":11,"type":"AIR"},{"x":18,"y":11,"type":"DIRT"},{"x":19,"y":11,"type":"DIRT"},{"x":20,"y":11,"type":"DIRT"},{"x":21,"y":11,"type":"AIR"},{"x":22,"y":11,"type":"AIR"},{"x":23,"y":11,"type":"DIRT"},{"x":24,"y":11,"type":"AIR"},{"x":25,"y":11,"type":"DIRT"},{"x":26,"y":11,"type":"DIRT"},{"x":27,"y":11,"type":"AIR"},{"x":28,"y":11,"type":"AIR"},{"x":29,"y":11,"type":"AIR"},{"x":30,"y":11,"type":"AIR"},{"x":31,"y":11,"type":"DIRT"},{"x":32,"y":11,"type":"DIRT"}],[{"x":0,"y":12,"type":"AIR"},{"x":1,"y":12,"type":"AIR"},{"x":2,"y":12,"type":"AIR"},{"x":3,"y":12,"type":"AIR"},{"x":4,"y":12,"type":"AIR"},{"x":5,"y":12,"type":"AIR"},{"x":6,"y":12,"type":"AIR"},{"x":7,"y":12,"type":"DIRT"},{"x":8,"y":12,"type":"DIRT"},{"x":9,"y":12,"type":"DIRT"},{"x":10,"y":12,"type":"AIR"},{"x":11,"y":12,"type":"AIR"},{"x":12,"y":12,"type":"AIR"},{"x":13,"y":12,"type":"DIRT"},{"x":14,"y":12,"type":"DIRT"},{"x":15,"y":12,"type":"AIR"},{"x":16,"y":12,"type":"AIR"},{"x":17,"y":12,"type":"AIR"},{"x":18,"y":12,"type":"DIRT"},{"x":19,"y":12,"type":"DIRT"},{"x":20,"y":12,"type":"AIR"},{"x":21,"y":12,"type":"AIR"},{"x":22,"y":12,"type":"AIR"},{"x":23,"y":12,"type":"DIRT"},{"x":24,"y":12,"type":"DIRT"},{"x":25,"y":12,"type":"DIRT"},{"x":26,"y":12,"type":"AIR"},{"x":27,"y":12,"type":"AIR"},{"x":28,"y":12,"type":"AIR"},{"x":29,"y":12,"type":"AIR"},{"x":30,"y":12,"type":"AIR"},{"x":31,"y":12,"type":"AIR"},{"x":32,"y":12,"type":"AIR"}],[{"x":0,"y":13,"type":"AIR"},{"x":1,"y":13,"type":"AIR"},{"x":2,"y":13,"type":"AIR"},{"x":3,"y":13,"type":"AIR"},{"x":4,"y":13,"type":"DIRT"},{"x":5,"y":13,"type":"DIRT"},{"x":6,"y":13,"type":"AIR"},{"x":7,"y":13,"type":"DIRT"},{"x":8,"y":13,"type":"DIRT"},{"x":9,"y":13,"type":"DIRT"},{"x":10,"y":13,"type":"DIRT"},{"x":11,"y":13,"type":"AIR"},{"x":12,"y":13,"type":"DIRT"},{"x":13,"y":13,"type":"DIRT"},{"x":14,"y":13,"type":"DIRT"},{"x":15,"y":13,"type":"AIR"},{"x":16,"y":13,"type":"AIR"},{"x":17,"y":13,"type":"AIR"},{"x":18,"y":13,"type":"DIRT"},{"x":19,"y":13,"type":"DIRT"},{"x":20,"y":13,"type":"DIRT"},{"x":21,"y":13,"type":"AIR"},{"x":22,"y":13,"type":"DIRT"},{"x":23,"y":13,"type":"DIRT"},{"x":24,"y":13,"type":"DIRT"},{"x":25,"y":13,"type":"DIRT"},{"x":26,"y":13,"type":"AIR"},{"x":27,"y":13,"type":"DIRT"},{"x":28,"y":13,"type":"DIRT"},{"x":29,"y":13,"type":"AIR"},{"x":30,"y":13,"type":"AIR"},{"x":31,"y":13,"type":"AIR"},{"x":32,"y":13,"type":"AIR"}],[{"x":0,"y":14,"type":"DIRT"},{"x":1,"y":14,"type":"DIRT"},{"x":2,"y":14,"type":"DIRT"},{"x":3,"y":14,"type":"DIRT"},{"x":4,"y":14,"type":"DIRT"},{"x":5,"y":14,"type":"DIRT"},{"x":6,"y":14,"type":"AIR"},{"x":7,"y":14,"type":"DIRT"},{"x":8,"y":14,"type":"DIRT"},{"x":9,"y":14,"type":"DIRT"},{"x":10,"y":14,"type":"AIR"},{"x":11,"y":14,"type":"AIR"},{"x":12,"y":14,"type":"AIR"},{"x":13,"y":14,"type":"DIRT"},{"x":14,"y":14,"type":"AIR"},{"x":15,"y":14,"type":"AIR"},{"x":16,"y":14,"type":"AIR"},{"x":17,"y":14,"type":"AIR"},{"x":18,"y":14,"type":"AIR"},{"x":19,"y":14,"type":"DIRT"},{"x":20,"y":14,"type":"AIR"},{"x":21,"y":14,"type":"AIR"},{"x":22,"y":14,"type":"AIR"},{"x":23,"y":14,"type":"DIRT"},{"x":24,"y":14,"type":"DIRT"},{"x":25,"y":14,"type":"DIRT"},{"x":26,"y":14,"type":"AIR"},{"x":27,"y":14,"type":"DIRT"},{"x":28,"y":14,"type":"DIRT"},{"x":29,"y":14,"type":"DIRT"},{"x":30,"y":14,"type":"DIRT"},{"x":31,"y":14,"type":"DIRT"},{"x":32,"y":14,"type":"DIRT"}],[{"x":0,"y":15,"type":"AIR"},{"x":1,"y":15,"type":"AIR"},{"x":2,"y":15,"type":"AIR"},{"x":3,"y":15,"type":"DIRT"},{"x":4,"y":15,"type":"DIRT"},{"x":5,"y":15,"type":"DIRT"},{"x":6,"y":15,"type":"AIR"},{"x":7,"y":15,"type":"AIR"},{"x":8,"y":15,"type":"AIR"},{"x":9,"y":15,"type":"AIR"},{"x":10,"y":15,"type":"AIR"},{"x":11,"y":15,"type":"AIR"},{"x":12,"y":15,"type":"AIR"},{"x":13,"y":15,"type":"AIR"},{"x":14,"y":15,"type":"AIR","powerup":{"type":"HEALTH_PACK","value":10}},{"x":15,"y":15,"type":"AIR"},{"x":16,"y":15,"type":"AIR"},{"x":17,"y":15,"type":"AIR"},{"x":18,"y":15,"type":"AIR"},{"x":19,"y":15,"type":"AIR"},{"x":20,"y":15,"type":"AIR"},{"x":21,"y":15,"type":"AIR"},{"x":22,"y":15,"type":"AIR"},{"x":23,"y":15,"type":"AIR"},{"x":24,"y":15,"type":"AIR"},{"x":25,"y":15,"type":"AIR"},{"x":26,"y":15,"type":"AIR"},{"x":27,"y":15,"type":"DIRT"},{"x":28,"y":15,"type":"DIRT"},{"x":29,"y":15,"type":"DIRT"},{"x":30,"y":15,"type":"AIR"},{"x":31,"y":15,"type":"AIR"},{"x":32,"y":15,"type":"AIR"}],[{"x":0,"y":16,"type":"AIR"},{"x":1,"y":16,"type":"AIR","occupier":{"id":3,"playerId":1,"health":100,"position":{"x":1,"y":16},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Technologist"}},{"x":2,"y":16,"type":"AIR"},{"x":3,"y":16,"type":"DIRT"},{"x":4,"y":16,"type":"DIRT"},{"x":5,"y":16,"type":"DIRT"},{"x":6,"y":16,"type":"AIR"},{"x":7,"y":16,"type":"AIR"},{"x":8,"y":16,"type":"AIR"},{"x":9,"y":16,"type":"AIR"},{"x":10,"y":16,"type":"DIRT"},{"x":11,"y":16,"type":"DIRT"},{"x":12,"y":16,"type":"DIRT"},{"x":13,"y":16,"type":"AIR"},{"x":14,"y":16,"type":"AIR"},{"x":15,"y":16,"type":"AIR"},{"x":16,"y":16,"type":"AIR"},{"x":17,"y":16,"type":"AIR"},{"x":18,"y":16,"type":"AIR"},{"x":19,"y":16,"type":"AIR"},{"x":20,"y":16,"type":"DIRT"},{"x":21,"y":16,"type":"DIRT"},{"x":22,"y":16,"type":"DIRT"},{"x":23,"y":16,"type":"AIR"},{"x":24,"y":16,"type":"AIR"},{"x":25,"y":16,"type":"AIR"},{"x":26,"y":16,"type":"AIR"},{"x":27,"y":16,"type":"DIRT"},{"x":28,"y":16,"type":"DIRT"},{"x":29,"y":16,"type":"DIRT"},{"x":30,"y":16,"type":"AIR"},{"x":31,"y":16,"type":"AIR","occupier":{"id":3,"playerId":2,"health":100,"position":{"x":31,"y":16},"weapon":{"damage":8,"range":4},"snowballs":{"freezeDuration":5,"range":5,"count":3,"freezeRadius":1},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Technologist"}},{"x":32,"y":16,"type":"AIR"}],[{"x":0,"y":17,"type":"AIR"},{"x":1,"y":17,"type":"AIR"},{"x":2,"y":17,"type":"AIR"},{"x":3,"y":17,"type":"DIRT"},{"x":4,"y":17,"type":"DIRT"},{"x":5,"y":17,"type":"DIRT"},{"x":6,"y":17,"type":"AIR"},{"x":7,"y":17,"type":"AIR"},{"x":8,"y":17,"type":"DIRT"},{"x":9,"y":17,"type":"DIRT"},{"x":10,"y":17,"type":"AIR"},{"x":11,"y":17,"type":"AIR"},{"x":12,"y":17,"type":"DIRT"},{"x":13,"y":17,"type":"DIRT"},{"x":14,"y":17,"type":"AIR"},{"x":15,"y":17,"type":"AIR"},{"x":16,"y":17,"type":"DIRT"},{"x":17,"y":17,"type":"AIR"},{"x":18,"y":17,"type":"AIR","powerup":{"type":"HEALTH_PACK","value":10}},{"x":19,"y":17,"type":"DIRT"},{"x":20,"y":17,"type":"DIRT"},{"x":21,"y":17,"type":"AIR"},{"x":22,"y":17,"type":"AIR"},{"x":23,"y":17,"type":"DIRT"},{"x":24,"y":17,"type":"DIRT"},{"x":25,"y":17,"type":"AIR"},{"x":26,"y":17,"type":"AIR"},{"x":27,"y":17,"type":"DIRT"},{"x":28,"y":17,"type":"DIRT"},{"x":29,"y":17,"type":"DIRT"},{"x":30,"y":17,"type":"AIR"},{"x":31,"y":17,"type":"AIR"},{"x":32,"y":17,"type":"AIR"}],[{"x":0,"y":18,"type":"DIRT"},{"x":1,"y":18,"type":"DIRT"},{"x":2,"y":18,"type":"DIRT"},{"x":3,"y":18,"type":"DIRT"},{"x":4,"y":18,"type":"DIRT"},{"x":5,"y":18,"type":"AIR"},{"x":6,"y":18,"type":"AIR"},{"x":7,"y":18,"type":"DIRT"},{"x":8,"y":18,"type":"DIRT"},{"x":9,"y":18,"type":"DIRT"},{"x":10,"y":18,"type":"AIR"},{"x":11,"y":18,"type":"AIR"},{"x":12,"y":18,"type":"AIR"},{"x":13,"y":18,"type":"DIRT"},{"x":14,"y":18,"type":"DIRT"},{"x":15,"y":18,"type":"AIR"},{"x":16,"y":18,"type":"DIRT"},{"x":17,"y":18,"type":"AIR"},{"x":18,"y":18,"type":"DIRT"},{"x":19,"y":18,"type":"DIRT"},{"x":20,"y":18,"type":"AIR"},{"x":21,"y":18,"type":"AIR"},{"x":22,"y":18,"type":"AIR"},{"x":23,"y":18,"type":"DIRT"},{"x":24,"y":18,"type":"DIRT"},{"x":25,"y":18,"type":"DIRT"},{"x":26,"y":18,"type":"AIR"},{"x":27,"y":18,"type":"AIR"},{"x":28,"y":18,"type":"DIRT"},{"x":29,"y":18,"type":"DIRT"},{"x":30,"y":18,"type":"DIRT"},{"x":31,"y":18,"type":"DIRT"},{"x":32,"y":18,"type":"DIRT"}],[{"x":0,"y":19,"type":"AIR"},{"x":1,"y":19,"type":"AIR"},{"x":2,"y":19,"type":"AIR"},{"x":3,"y":19,"type":"AIR"},{"x":4,"y":19,"type":"DIRT"},{"x":5,"y":19,"type":"DIRT"},{"x":6,"y":19,"type":"AIR"},{"x":7,"y":19,"type":"AIR"},{"x":8,"y":19,"type":"DIRT"},{"x":9,"y":19,"type":"AIR"},{"x":10,"y":19,"type":"AIR"},{"x":11,"y":19,"type":"AIR"},{"x":12,"y":19,"type":"DIRT"},{"x":13,"y":19,"type":"DIRT"},{"x":14,"y":19,"type":"AIR"},{"x":15,"y":19,"type":"AIR"},{"x":16,"y":19,"type":"AIR"},{"x":17,"y":19,"type":"AIR"},{"x":18,"y":19,"type":"AIR"},{"x":19,"y":19,"type":"DIRT"},{"x":20,"y":19,"type":"DIRT"},{"x":21,"y":19,"type":"AIR"},{"x":22,"y":19,"type":"AIR"},{"x":23,"y":19,"type":"AIR"},{"x":24,"y":19,"type":"DIRT"},{"x":25,"y":19,"type":"AIR"},{"x":26,"y":19,"type":"AIR"},{"x":27,"y":19,"type":"DIRT"},{"x":28,"y":19,"type":"DIRT"},{"x":29,"y":19,"type":"AIR"},{"x":30,"y":19,"type":"AIR"},{"x":31,"y":19,"type":"AIR"},{"x":32,"y":19,"type":"AIR"}],[{"x":0,"y":20,"type":"DIRT"},{"x":1,"y":20,"type":"AIR"},{"x":2,"y":20,"type":"AIR"},{"x":3,"y":20,"type":"AIR"},{"x":4,"y":20,"type":"AIR"},{"x":5,"y":20,"type":"DIRT"},{"x":6,"y":20,"type":"DIRT"},{"x":7,"y":20,"type":"AIR"},{"x":8,"y":20,"type":"AIR"},{"x":9,"y":20,"type":"AIR"},{"x":10,"y":20,"type":"DIRT"},{"x":11,"y":20,"type":"DIRT"},{"x":12,"y":20,"type":"DIRT"},{"x":13,"y":20,"type":"DIRT"},{"x":14,"y":20,"type":"DIRT"},{"x":15,"y":20,"type":"AIR"},{"x":16,"y":20,"type":"AIR"},{"x":17,"y":20,"type":"AIR"},{"x":18,"y":20,"type":"DIRT"},{"x":19,"y":20,"type":"DIRT"},{"x":20,"y":20,"type":"DIRT"},{"x":21,"y":20,"type":"DIRT"},{"x":22,"y":20,"type":"DIRT"},{"x":23,"y":20,"type":"AIR"},{"x":24,"y":20,"type":"AIR"},{"x":25,"y":20,"type":"AIR"},{"x":26,"y":20,"type":"DIRT"},{"x":27,"y":20,"type":"DIRT"},{"x":28,"y":20,"type":"AIR"},{"x":29,"y":20,"type":"AIR"},{"x":30,"y":20,"type":"AIR"},{"x":31,"y":20,"type":"AIR"},{"x":32,"y":20,"type":"DIRT"}],[{"x":0,"y":21,"type":"DIRT"},{"x":1,"y":21,"type":"AIR"},{"x":2,"y":21,"type":"AIR"},{"x":3,"y":21,"type":"AIR"},{"x":4,"y":21,"type":"AIR"},{"x":5,"y":21,"type":"DIRT"},{"x":6,"y":21,"type":"DIRT"},{"x":7,"y":21,"type":"DIRT"},{"x":8,"y":21,"type":"AIR"},{"x":9,"y":21,"type":"DIRT"},{"x":10,"y":21,"type":"DIRT"},{"x":11,"y":21,"type":"DIRT"},{"x":12,"y":21,"type":"DIRT"},{"x":13,"y":21,"type":"DIRT"},{"x":14,"y":21,"type":"AIR"},{"x":15,"y":21,"type":"AIR"},{"x":16,"y":21,"type":"DIRT"},{"x":17,"y":21,"type":"AIR"},{"x":18,"y":21,"type":"AIR"},{"x":19,"y":21,"type":"DIRT"},{"x":20,"y":21,"type":"DIRT"},{"x":21,"y":21,"type":"DIRT"},{"x":22,"y":21,"type":"DIRT"},{"x":23,"y":21,"type":"DIRT"},{"x":24,"y":21,"type":"AIR"},{"x":25,"y":21,"type":"DIRT"},{"x":26,"y":21,"type":"DIRT"},{"x":27,"y":21,"type":"DIRT"},{"x":28,"y":21,"type":"AIR"},{"x":29,"y":21,"type":"AIR"},{"x":30,"y":21,"type":"AIR"},{"x":31,"y":21,"type":"AIR"},{"x":32,"y":21,"type":"DIRT"}],[{"x":0,"y":22,"type":"DEEP_SPACE"},{"x":1,"y":22,"type":"AIR"},{"x":2,"y":22,"type":"AIR"},{"x":3,"y":22,"type":"DIRT"},{"x":4,"y":22,"type":"DIRT"},{"x":5,"y":22,"type":"DIRT"},{"x":6,"y":22,"type":"DIRT"},{"x":7,"y":22,"type":"DIRT"},{"x":8,"y":22,"type":"DIRT"},{"x":9,"y":22,"type":"DIRT"},{"x":10,"y":22,"type":"DIRT"},{"x":11,"y":22,"type":"DIRT"},{"x":12,"y":22,"type":"DIRT"},{"x":13,"y":22,"type":"DIRT"},{"x":14,"y":22,"type":"AIR"},{"x":15,"y":22,"type":"AIR"},{"x":16,"y":22,"type":"AIR"},{"x":17,"y":22,"type":"AIR"},{"x":18,"y":22,"type":"AIR"},{"x":19,"y":22,"type":"DIRT"},{"x":20,"y":22,"type":"DIRT"},{"x":21,"y":22,"type":"DIRT"},{"x":22,"y":22,"type":"DIRT"},{"x":23,"y":22,"type":"DIRT"},{"x":24,"y":22,"type":"DIRT"},{"x":25,"y":22,"type":"DIRT"},{"x":26,"y":22,"type":"DIRT"},{"x":27,"y":22,"type":"DIRT"},{"x":28,"y":22,"type":"DIRT"},{"x":29,"y":22,"type":"DIRT"},{"x":30,"y":22,"type":"AIR"},{"x":31,"y":22,"type":"AIR"},{"x":32,"y":22,"type":"DEEP_SPACE"}],[{"x":0,"y":23,"type":"DEEP_SPACE"},{"x":1,"y":23,"type":"AIR"},{"x":2,"y":23,"type":"DIRT"},{"x":3,"y":23,"type":"DIRT"},{"x":4,"y":23,"type":"DIRT"},{"x":5,"y":23,"type":"AIR"},{"x":6,"y":23,"type":"AIR"},{"x":7,"y":23,"type":"DIRT"},{"x":8,"y":23,"type":"DIRT"},{"x":9,"y":23,"type":"DIRT"},{"x":10,"y":23,"type":"DIRT"},{"x":11,"y":23,"type":"DIRT"},{"x":12,"y":23,"type":"DIRT"},{"x":13,"y":23,"type":"AIR"},{"x":14,"y":23,"type":"AIR"},{"x":15,"y":23,"type":"DIRT"},{"x":16,"y":23,"type":"DIRT"},{"x":17,"y":23,"type":"DIRT"},{"x":18,"y":23,"type":"AIR"},{"x":19,"y":23,"type":"AIR"},{"x":20,"y":23,"type":"DIRT"},{"x":21,"y":23,"type":"DIRT"},{"x":22,"y":23,"type":"DIRT"},{"x":23,"y":23,"type":"DIRT"},{"x":24,"y":23,"type":"DIRT"},{"x":25,"y":23,"type":"DIRT"},{"x":26,"y":23,"type":"AIR"},{"x":27,"y":23,"type":"AIR"},{"x":28,"y":23,"type":"DIRT"},{"x":29,"y":23,"type":"DIRT"},{"x":30,"y":23,"type":"DIRT"},{"x":31,"y":23,"type":"AIR"},{"x":32,"y":23,"type":"DEEP_SPACE"}],[{"x":0,"y":24,"type":"DEEP_SPACE"},{"x":1,"y":24,"type":"DIRT"},{"x":2,"y":24,"type":"DIRT"},{"x":3,"y":24,"type":"DIRT"},{"x":4,"y":24,"type":"DIRT"},{"x":5,"y":24,"type":"AIR"},{"x":6,"y":24,"type":"AIR"},{"x":7,"y":24,"type":"AIR"},{"x":8,"y":24,"type":"DIRT"},{"x":9,"y":24,"type":"AIR"},{"x":10,"y":24,"type":"DIRT"},{"x":11,"y":24,"type":"DIRT"},{"x":12,"y":24,"type":"DIRT"},{"x":13,"y":24,"type":"AIR"},{"x":14,"y":24,"type":"DIRT"},{"x":15,"y":24,"type":"DIRT"},{"x":16,"y":24,"type":"DIRT"},{"x":17,"y":24,"type":"DIRT"},{"x":18,"y":24,"type":"DIRT"},{"x":19,"y":24,"type":"AIR"},{"x":20,"y":24,"type":"DIRT"},{"x":21,"y":24,"type":"DIRT"},{"x":22,"y":24,"type":"DIRT"},{"x":23,"y":24,"type":"AIR"},{"x":24,"y":24,"type":"DIRT"},{"x":25,"y":24,"type":"AIR"},{"x":26,"y":24,"type":"AIR"},{"x":27,"y":24,"type":"AIR"},{"x":28,"y":24,"type":"DIRT"},{"x":29,"y":24,"type":"DIRT"},{"x":30,"y":24,"type":"DIRT"},{"x":31,"y":24,"type":"DIRT"},{"x":32,"y":24,"type":"DEEP_SPACE"}],[{"x":0,"y":25,"type":"DEEP_SPACE"},{"x":1,"y":25,"type":"DEEP_SPACE"},{"x":2,"y":25,"type":"DIRT"},{"x":3,"y":25,"type":"DIRT"},{"x":4,"y":25,"type":"DIRT"},{"x":5,"y":25,"type":"DIRT"},{"x":6,"y":25,"type":"DIRT"},{"x":7,"y":25,"type":"DIRT"},{"x":8,"y":25,"type":"DIRT"},{"x":9,"y":25,"type":"DIRT"},{"x":10,"y":25,"type":"DIRT"},{"x":11,"y":25,"type":"DIRT"},{"x":12,"y":25,"type":"DIRT"},{"x":13,"y":25,"type":"DIRT"},{"x":14,"y":25,"type":"DIRT"},{"x":15,"y":25,"type":"DIRT"},{"x":16,"y":25,"type":"AIR"},{"x":17,"y":25,"type":"DIRT"},{"x":18,"y":25,"type":"DIRT"},{"x":19,"y":25,"type":"DIRT"},{"x":20,"y":25,"type":"DIRT"},{"x":21,"y":25,"type":"DIRT"},{"x":22,"y":25,"type":"DIRT"},{"x":23,"y":25,"type":"DIRT"},{"x":24,"y":25,"type":"DIRT"},{"x":25,"y":25,"type":"DIRT"},{"x":26,"y":25,"type":"DIRT"},{"x":27,"y":25,"type":"DIRT"},{"x":28,"y":25,"type":"DIRT"},{"x":29,"y":25,"type":"DIRT"},{"x":30,"y":25,"type":"DIRT"},{"x":31,"y":25,"type":"DEEP_SPACE"},{"x":32,"y":25,"type":"DEEP_SPACE"}],[{"x":0,"y":26,"type":"DEEP_SPACE"},{"x":1,"y":26,"type":"DEEP_SPACE"},{"x":2,"y":26,"type":"DEEP_SPACE"},{"x":3,"y":26,"type":"AIR"},{"x":4,"y":26,"type":"DIRT"},{"x":5,"y":26,"type":"DIRT"},{"x":6,"y":26,"type":"DIRT"},{"x":7,"y":26,"type":"DIRT"},{"x":8,"y":26,"type":"DIRT"},{"x":9,"y":26,"type":"DIRT"},{"x":10,"y":26,"type":"DIRT"},{"x":11,"y":26,"type":"AIR"},{"x":12,"y":26,"type":"DIRT"},{"x":13,"y":26,"type":"DIRT"},{"x":14,"y":26,"type":"AIR"},{"x":15,"y":26,"type":"AIR"},{"x":16,"y":26,"type":"AIR"},{"x":17,"y":26,"type":"AIR"},{"x":18,"y":26,"type":"AIR"},{"x":19,"y":26,"type":"DIRT"},{"x":20,"y":26,"type":"DIRT"},{"x":21,"y":26,"type":"AIR"},{"x":22,"y":26,"type":"DIRT"},{"x":23,"y":26,"type":"DIRT"},{"x":24,"y":26,"type":"DIRT"},{"x":25,"y":26,"type":"DIRT"},{"x":26,"y":26,"type":"DIRT"},{"x":27,"y":26,"type":"DIRT"},{"x":28,"y":26,"type":"DIRT"},{"x":29,"y":26,"type":"AIR"},{"x":30,"y":26,"type":"DEEP_SPACE"},{"x":31,"y":26,"type":"DEEP_SPACE"},{"x":32,"y":26,"type":"DEEP_SPACE"}],[{"x":0,"y":27,"type":"DEEP_SPACE"},{"x":1,"y":27,"type":"DEEP_SPACE"},{"x":2,"y":27,"type":"DEEP_SPACE"},{"x":3,"y":27,"type":"DEEP_SPACE"},{"x":4,"y":27,"type":"DIRT"},{"x":5,"y":27,"type":"DIRT"},{"x":6,"y":27,"type":"DIRT"},{"x":7,"y":27,"type":"AIR"},{"x":8,"y":27,"type":"AIR"},{"x":9,"y":27,"type":"AIR"},{"x":10,"y":27,"type":"DIRT"},{"x":11,"y":27,"type":"DIRT"},{"x":12,"y":27,"type":"DIRT"},{"x":13,"y":27,"type":"DIRT"},{"x":14,"y":27,"type":"AIR"},{"x":15,"y":27,"type":"AIR"},{"x":16,"y":27,"type":"DIRT"},{"x":17,"y":27,"type":"AIR"},{"x":18,"y":27,"type":"AIR"},{"x":19,"y":27,"type":"DIRT"},{"x":20,"y":27,"type":"DIRT"},{"x":21,"y":27,"type":"DIRT"},{"x":22,"y":27,"type":"DIRT"},{"x":23,"y":27,"type":"AIR"},{"x":24,"y":27,"type":"AIR"},{"x":25,"y":27,"type":"AIR"},{"x":26,"y":27,"type":"DIRT"},{"x":27,"y":27,"type":"DIRT"},{"x":28,"y":27,"type":"DIRT"},{"x":29,"y":27,"type":"DEEP_SPACE"},{"x":30,"y":27,"type":"DEEP_SPACE"},{"x":31,"y":27,"type":"DEEP_SPACE"},{"x":32,"y":27,"type":"DEEP_SPACE"}],[{"x":0,"y":28,"type":"DEEP_SPACE"},{"x":1,"y":28,"type":"DEEP_SPACE"},{"x":2,"y":28,"type":"DEEP_SPACE"},{"x":3,"y":28,"type":"DEEP_SPACE"},{"x":4,"y":28,"type":"DIRT"},{"x":5,"y":28,"type":"DIRT"},{"x":6,"y":28,"type":"DIRT"},{"x":7,"y":28,"type":"AIR"},{"x":8,"y":28,"type":"AIR","occupier":{"id":1,"playerId":2,"health":150,"position":{"x":8,"y":28},"weapon":{"damage":8,"range":4},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Commando"}},{"x":9,"y":28,"type":"AIR"},{"x":10,"y":28,"type":"DIRT"},{"x":11,"y":28,"type":"DIRT"},{"x":12,"y":28,"type":"DIRT"},{"x":13,"y":28,"type":"DIRT"},{"x":14,"y":28,"type":"AIR"},{"x":15,"y":28,"type":"DIRT"},{"x":16,"y":28,"type":"DIRT"},{"x":17,"y":28,"type":"DIRT"},{"x":18,"y":28,"type":"AIR"},{"x":19,"y":28,"type":"DIRT"},{"x":20,"y":28,"type":"DIRT"},{"x":21,"y":28,"type":"DIRT"},{"x":22,"y":28,"type":"DIRT"},{"x":23,"y":28,"type":"AIR"},{"x":24,"y":28,"type":"AIR","occupier":{"id":2,"playerId":1,"health":100,"position":{"x":24,"y":28},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Agent"}},{"x":25,"y":28,"type":"AIR"},{"x":26,"y":28,"type":"DIRT"},{"x":27,"y":28,"type":"DIRT"},{"x":28,"y":28,"type":"DIRT"},{"x":29,"y":28,"type":"DEEP_SPACE"},{"x":30,"y":28,"type":"DEEP_SPACE"},{"x":31,"y":28,"type":"DEEP_SPACE"},{"x":32,"y":28,"type":"DEEP_SPACE"}],[{"x":0,"y":29,"type":"DEEP_SPACE"},{"x":1,"y":29,"type":"DEEP_SPACE"},{"x":2,"y":29,"type":"DEEP_SPACE"},{"x":3,"y":29,"type":"DEEP_SPACE"},{"x":4,"y":29,"type":"DEEP_SPACE"},{"x":5,"y":29,"type":"DEEP_SPACE"},{"x":6,"y":29,"type":"DIRT"},{"x":7,"y":29,"type":"AIR"},{"x":8,"y":29,"type":"AIR"},{"x":9,"y":29,"type":"AIR"},{"x":10,"y":29,"type":"DIRT"},{"x":11,"y":29,"type":"AIR"},{"x":12,"y":29,"type":"DIRT"},{"x":13,"y":29,"type":"DIRT"},{"x":14,"y":29,"type":"AIR"},{"x":15,"y":29,"type":"DIRT"},{"x":16,"y":29,"type":"AIR"},{"x":17,"y":29,"type":"DIRT"},{"x":18,"y":29,"type":"AIR"},{"x":19,"y":29,"type":"DIRT"},{"x":20,"y":29,"type":"DIRT"},{"x":21,"y":29,"type":"AIR"},{"x":22,"y":29,"type":"DIRT"},{"x":23,"y":29,"type":"AIR"},{"x":24,"y":29,"type":"AIR"},{"x":25,"y":29,"type":"AIR"},{"x":26,"y":29,"type":"DIRT"},{"x":27,"y":29,"type":"DEEP_SPACE"},{"x":28,"y":29,"type":"DEEP_SPACE"},{"x":29,"y":29,"type":"DEEP_SPACE"},{"x":30,"y":29,"type":"DEEP_SPACE"},{"x":31,"y":29,"type":"DEEP_SPACE"},{"x":32,"y":29,"type":"DEEP_SPACE"}],[{"x":0,"y":30,"type":"DEEP_SPACE"},{"x":1,"y":30,"type":"DEEP_SPACE"},{"x":2,"y":30,"type":"DEEP_SPACE"},{"x":3,"y":30,"type":"DEEP_SPACE"},{"x":4,"y":30,"type":"DEEP_SPACE"},{"x":5,"y":30,"type":"DEEP_SPACE"},{"x":6,"y":30,"type":"DEEP_SPACE"},{"x":7,"y":30,"type":"DIRT"},{"x":8,"y":30,"type":"DIRT"},{"x":9,"y":30,"type":"DIRT"},{"x":10,"y":30,"type":"DIRT"},{"x":11,"y":30,"type":"AIR"},{"x":12,"y":30,"type":"DIRT"},{"x":13,"y":30,"type":"AIR"},{"x":14,"y":30,"type":"AIR"},{"x":15,"y":30,"type":"DIRT"},{"x":16,"y":30,"type":"DIRT"},{"x":17,"y":30,"type":"DIRT"},{"x":18,"y":30,"type":"AIR"},{"x":19,"y":30,"type":"AIR"},{"x":20,"y":30,"type":"DIRT"},{"x":21,"y":30,"type":"AIR"},{"x":22,"y":30,"type":"DIRT"},{"x":23,"y":30,"type":"DIRT"},{"x":24,"y":30,"type":"DIRT"},{"x":25,"y":30,"type":"DIRT"},{"x":26,"y":30,"type":"DEEP_SPACE"},{"x":27,"y":30,"type":"DEEP_SPACE"},{"x":28,"y":30,"type":"DEEP_SPACE"},{"x":29,"y":30,"type":"DEEP_SPACE"},{"x":30,"y":30,"type":"DEEP_SPACE"},{"x":31,"y":30,"type":"DEEP_SPACE"},{"x":32,"y":30,"type":"DEEP_SPACE"}],[{"x":0,"y":31,"type":"DEEP_SPACE"},{"x":1,"y":31,"type":"DEEP_SPACE"},{"x":2,"y":31,"type":"DEEP_SPACE"},{"x":3,"y":31,"type":"DEEP_SPACE"},{"x":4,"y":31,"type":"DEEP_SPACE"},{"x":5,"y":31,"type":"DEEP_SPACE"},{"x":6,"y":31,"type":"DEEP_SPACE"},{"x":7,"y":31,"type":"DEEP_SPACE"},{"x":8,"y":31,"type":"AIR"},{"x":9,"y":31,"type":"DIRT"},{"x":10,"y":31,"type":"AIR"},{"x":11,"y":31,"type":"AIR"},{"x":12,"y":31,"type":"AIR"},{"x":13,"y":31,"type":"AIR"},{"x":14,"y":31,"type":"AIR"},{"x":15,"y":31,"type":"DIRT"},{"x":16,"y":31,"type":"DIRT"},{"x":17,"y":31,"type":"DIRT"},{"x":18,"y":31,"type":"AIR"},{"x":19,"y":31,"type":"AIR"},{"x":20,"y":31,"type":"AIR"},{"x":21,"y":31,"type":"AIR"},{"x":22,"y":31,"type":"AIR"},{"x":23,"y":31,"type":"DIRT"},{"x":24,"y":31,"type":"AIR"},{"x":25,"y":31,"type":"DEEP_SPACE"},{"x":26,"y":31,"type":"DEEP_SPACE"},{"x":27,"y":31,"type":"DEEP_SPACE"},{"x":28,"y":31,"type":"DEEP_SPACE"},{"x":29,"y":31,"type":"DEEP_SPACE"},{"x":30,"y":31,"type":"DEEP_SPACE"},{"x":31,"y":31,"type":"DEEP_SPACE"},{"x":32,"y":31,"type":"DEEP_SPACE"}],[{"x":0,"y":32,"type":"DEEP_SPACE"},{"x":1,"y":32,"type":"DEEP_SPACE"},{"x":2,"y":32,"type":"DEEP_SPACE"},{"x":3,"y":32,"type":"DEEP_SPACE"},{"x":4,"y":32,"type":"DEEP_SPACE"},{"x":5,"y":32,"type":"DEEP_SPACE"},{"x":6,"y":32,"type":"DEEP_SPACE"},{"x":7,"y":32,"type":"DEEP_SPACE"},{"x":8,"y":32,"type":"DEEP_SPACE"},{"x":9,"y":32,"type":"DEEP_SPACE"},{"x":10,"y":32,"type":"DEEP_SPACE"},{"x":11,"y":32,"type":"AIR"},{"x":12,"y":32,"type":"AIR"},{"x":13,"y":32,"type":"AIR"},{"x":14,"y":32,"type":"AIR"},{"x":15,"y":32,"type":"DIRT"},{"x":16,"y":32,"type":"AIR"},{"x":17,"y":32,"type":"DIRT"},{"x":18,"y":32,"type":"AIR"},{"x":19,"y":32,"type":"AIR"},{"x":20,"y":32,"type":"AIR"},{"x":21,"y":32,"type":"AIR"},{"x":22,"y":32,"type":"DEEP_SPACE"},{"x":23,"y":32,"type":"DEEP_SPACE"},{"x":24,"y":32,"type":"DEEP_SPACE"},{"x":25,"y":32,"type":"DEEP_SPACE"},{"x":26,"y":32,"type":"DEEP_SPACE"},{"x":27,"y":32,"type":"DEEP_SPACE"},{"x":28,"y":32,"type":"DEEP_SPACE"},{"x":29,"y":32,"type":"DEEP_SPACE"},{"x":30,"y":32,"type":"DEEP_SPACE"},{"x":31,"y":32,"type":"DEEP_SPACE"},{"x":32,"y":32,"type":"DEEP_SPACE"}]],"visualizerEvents":[]} \ No newline at end of file
diff --git a/2019-worms/tests/replays/2019.08.19.21.15.02/B-log.csv b/2019-worms/tests/replays/2019.08.19.21.15.02/B-log.csv
new file mode 100644
index 0000000..04d9660
--- /dev/null
+++ b/2019-worms/tests/replays/2019.08.19.21.15.02/B-log.csv
@@ -0,0 +1,298 @@
+Round,LastCommandType,LastCommand,ActiveWorm,Score,Health,Worm1 Health,Worm1 x,Worm1 y,Worm2 Health,Worm2 x,Worm2 y,Worm3 Health,Worm3 x,Worm3 y
+1,null,"null",1,116,350,150,8,28,100,8,4,100,31,16
+2,move,"move 9 27",1,121,350,150,9,27,100,8,4,100,31,16
+3,move,"move 9 5",2,126,350,150,9,27,100,9,5,100,31,16
+4,move,"move 30 17",3,131,350,150,9,27,100,9,5,100,30,17
+5,dig,"dig 10 26",1,138,350,150,9,27,100,9,5,100,30,17
+6,dig,"dig 10 6",2,145,350,150,9,27,100,9,5,100,30,17
+7,dig,"dig 29 17",3,152,350,150,9,27,100,9,5,100,30,17
+8,move,"move 10 26",1,157,350,150,10,26,100,9,5,100,30,17
+9,move,"move 10 6",2,162,350,150,10,26,100,10,6,100,30,17
+10,move,"move 29 17",3,167,350,150,10,26,100,10,6,100,29,17
+11,dig,"dig 11 25",1,174,350,150,10,26,100,10,6,100,29,17
+12,dig,"dig 11 7",2,181,350,150,10,26,100,10,6,100,29,17
+13,dig,"dig 28 17",3,188,350,150,10,26,100,10,6,100,29,17
+14,move,"move 11 25",1,193,350,150,11,25,100,10,6,100,29,17
+15,move,"move 11 7",2,198,350,150,11,25,100,11,7,100,29,17
+16,move,"move 28 17",3,203,350,150,11,25,100,11,7,100,28,17
+17,dig,"dig 12 24",1,210,350,150,11,25,100,11,7,100,28,17
+18,dig,"dig 12 8",2,217,350,150,11,25,100,11,7,100,28,17
+19,dig,"dig 27 17",3,224,350,150,11,25,100,11,7,100,28,17
+20,move,"move 12 24",1,229,350,150,12,24,100,11,7,100,28,17
+21,move,"move 12 8",2,234,350,150,12,24,100,12,8,100,28,17
+22,move,"move 27 17",3,239,350,150,12,24,100,12,8,100,27,17
+23,move,"move 13 23",1,244,350,150,13,23,100,12,8,100,27,17
+24,move,"move 13 9",2,249,350,150,13,23,100,13,9,100,27,17
+25,move,"move 26 17",3,254,350,150,13,23,100,13,9,100,26,17
+26,move,"move 14 22",1,259,350,150,14,22,100,13,9,100,26,17
+27,dig,"dig 14 10",2,266,350,150,14,22,100,13,9,100,26,17
+28,move,"move 25 17",3,271,350,150,14,22,100,13,9,100,25,17
+29,move,"move 15 21",1,276,350,150,15,21,100,13,9,100,25,17
+30,move,"move 14 10",2,281,350,150,15,21,100,14,10,100,25,17
+31,dig,"dig 24 17",3,288,350,150,15,21,100,14,10,100,25,17
+32,move,"move 16 20",1,293,350,150,16,20,100,14,10,100,25,17
+33,dig,"dig 14 11",2,300,350,150,16,20,100,14,10,100,25,17
+34,move,"move 24 17",3,305,350,150,16,20,100,14,10,100,24,17
+35,move,"move 17 19",1,310,350,150,17,19,100,14,10,100,24,17
+36,move,"move 14 11",2,315,350,150,17,19,100,14,11,100,24,17
+37,dig,"dig 23 17",3,322,350,150,17,19,100,14,11,100,24,17
+38,dig,"dig 18 18",1,329,350,150,17,19,100,14,11,100,24,17
+39,dig,"dig 14 12",2,336,350,150,17,19,100,14,11,100,24,17
+40,move,"move 23 17",3,341,350,150,17,19,100,14,11,100,23,17
+41,move,"move 18 18",1,346,350,150,18,18,100,14,11,100,23,17
+42,move,"move 14 12",2,351,350,150,18,18,100,14,12,100,23,17
+43,move,"move 22 17",3,356,350,150,18,18,100,14,12,100,22,17
+44,move,"move 18 17",1,365,360,160,18,17,100,14,12,100,22,17
+45,dig,"dig 14 13",2,372,360,160,18,17,100,14,12,100,22,17
+46,dig,"dig 21 16",3,379,360,160,18,17,100,14,12,100,22,17
+47,move,"move 17 16",1,384,360,160,17,16,100,14,12,100,22,17
+48,move,"move 14 13",2,389,360,160,17,16,100,14,13,100,22,17
+49,move,"move 21 16",3,394,360,160,17,16,100,14,13,100,21,16
+50,move,"move 16 15",1,399,360,160,16,15,100,14,13,100,21,16
+51,move,"move 14 14",2,404,360,160,16,15,100,14,14,100,21,16
+52,move,"move 20 15",3,409,360,160,16,15,100,14,14,100,20,15
+53,move,"move 15 15",1,414,360,160,15,15,100,14,14,100,20,15
+54,move,"move 14 15",2,422,370,160,15,15,110,14,15,100,20,15
+55,move,"move 21 14",3,427,370,160,15,15,110,14,15,100,21,14
+56,move,"move 16 14",1,432,370,160,16,14,110,14,15,100,21,14
+57,move,"move 15 14",2,437,370,160,16,14,110,15,14,100,21,14
+58,dig,"dig 22 13",3,444,370,160,16,14,110,15,14,100,21,14
+59,move,"move 17 13",1,449,370,160,17,13,110,15,14,100,21,14
+60,move,"move 16 13",2,454,370,160,17,13,110,16,13,100,21,14
+61,move,"move 22 13",3,459,370,160,17,13,110,16,13,100,22,13
+62,dig,"dig 18 12",1,466,370,160,17,13,110,16,13,100,22,13
+63,move,"move 17 12",2,471,370,160,17,13,110,17,12,100,22,13
+64,dig,"dig 23 12",3,478,370,160,17,13,110,17,12,100,22,13
+65,move,"move 18 12",1,483,370,160,18,12,110,17,12,100,22,13
+66,dig,"dig 18 11",2,490,370,160,18,12,110,17,12,100,22,13
+67,move,"move 23 12",3,495,370,160,18,12,110,17,12,100,23,12
+68,dig,"dig 19 11",1,502,370,160,18,12,110,17,12,100,23,12
+69,move,"move 18 11",2,507,370,160,18,12,110,18,11,100,23,12
+70,dig,"dig 23 11",3,514,370,160,18,12,110,18,11,100,23,12
+71,move,"move 19 11",1,519,370,160,19,11,110,18,11,100,23,12
+72,dig,"dig 19 10",2,526,370,160,19,11,110,18,11,100,23,12
+73,move,"move 24 11",3,531,370,160,19,11,110,18,11,100,24,11
+74,dig,"dig 20 10",1,538,370,160,19,11,110,18,11,100,24,11
+75,move,"move 19 10",2,543,370,160,19,11,110,19,10,100,24,11
+76,dig,"dig 23 10",3,550,370,160,19,11,110,19,10,100,24,11
+77,move,"move 20 10",1,555,370,160,20,10,110,19,10,100,24,11
+78,dig,"dig 20 9",2,562,370,160,20,10,110,19,10,100,24,11
+79,move,"move 24 10",3,567,370,160,20,10,110,19,10,100,24,10
+80,move,"move 21 9",1,572,370,160,21,9,110,19,10,100,24,10
+81,move,"move 20 9",2,577,370,160,21,9,110,20,9,100,24,10
+82,dig,"dig 25 9",3,584,370,160,21,9,110,20,9,100,24,10
+83,dig,"dig 22 8",1,591,370,160,21,9,110,20,9,100,24,10
+84,dig,"dig 21 8",2,598,370,160,21,9,110,20,9,100,24,10
+85,move,"move 25 9",3,603,370,160,21,9,110,20,9,100,25,9
+86,move,"move 22 8",1,608,370,160,22,8,110,20,9,100,25,9
+87,move,"move 21 8",2,613,370,160,22,8,110,21,8,100,25,9
+88,dig,"dig 25 8",3,620,370,160,22,8,110,21,8,100,25,9
+89,move,"move 23 7",1,625,370,160,23,7,110,21,8,100,25,9
+90,move,"move 22 7",2,630,370,160,23,7,110,22,7,100,25,9
+91,move,"move 25 8",3,635,370,160,23,7,110,22,7,100,25,8
+92,dig,"dig 24 6",1,642,370,160,23,7,110,22,7,100,25,8
+93,banana,"banana 24 3",2,703,370,160,23,7,110,22,7,100,25,8
+94,dig,"dig 24 7",3,710,370,160,23,7,110,22,7,100,25,8
+95,move,"move 24 6",1,715,370,160,24,6,110,22,7,100,25,8
+96,banana,"banana 23 4",2,783,370,160,24,6,110,22,7,100,25,8
+97,snowball,"snowball 23 4",3,800,370,160,24,6,110,22,7,100,25,8
+98,move,"move 23 5",1,805,370,160,23,5,110,22,7,100,25,8
+99,banana,"banana 23 4",2,815,357,147,23,5,110,22,7,100,25,8
+100,shoot,"shoot N",1,831,357,147,23,5,110,22,7,100,25,8
+101,shoot,"shoot N",1,847,357,147,23,5,110,22,7,100,25,8
+102,shoot,"shoot N",1,860,349,139,23,5,110,22,7,100,25,8
+103,shoot,"shoot N",1,873,341,131,23,5,110,22,7,100,25,8
+104,shoot,"shoot N",1,889,341,131,23,5,110,22,7,100,25,8
+105,move,"move 23 6",2,894,341,131,23,5,110,23,6,100,25,8
+106,snowball,"snowball 23 4",3,894,341,131,23,5,110,23,6,100,25,8
+107,move,"move 24 4",1,894,341,131,23,5,110,23,6,100,25,8
+108,move,"move 24 5",2,899,341,131,23,5,110,24,5,100,25,8
+109,move,"move 24 7",3,904,341,131,23,5,110,24,5,100,24,7
+110,move,"move 24 4",1,904,341,131,23,5,110,24,5,100,24,7
+111,shoot,"shoot N",2,920,341,131,23,5,110,24,5,100,24,7
+112,snowball,"snowball 24 3",3,937,341,131,23,5,110,24,5,100,24,7
+113,move,"move 24 4",1,942,341,131,24,4,110,24,5,100,24,7
+114,shoot,"shoot NE",2,958,341,131,24,4,110,24,5,100,24,7
+115,dig,"dig 25 6",3,965,341,131,24,4,110,24,5,100,24,7
+116,shoot,"shoot E",1,981,341,131,24,4,110,24,5,100,24,7
+117,shoot,"shoot NE",2,997,341,131,24,4,110,24,5,100,24,7
+118,move,"move 25 6",3,1000,333,123,24,4,110,24,5,100,25,6
+119,shoot,"shoot E",1,1016,333,123,24,4,110,24,5,100,25,6
+120,shoot,"shoot NE",2,1072,333,123,24,4,110,24,5,100,25,6
+121,move,"move 24 7",3,1077,333,123,24,4,110,24,5,100,24,7
+122,nothing,"nothing "Player chose to do nothing"",1,1077,333,123,24,4,110,24,5,100,24,7
+123,move,"move 24 6",2,1082,333,123,24,4,110,24,6,100,24,7
+124,dig,"dig 24 8",3,1089,333,123,24,4,110,24,6,100,24,7
+125,move,"move 24 5",1,1094,333,123,24,5,110,24,6,100,24,7
+126,move,"move 23 7",2,1099,333,123,24,5,110,23,7,100,24,7
+127,dig,"dig 23 8",3,1106,333,123,24,5,110,23,7,100,24,7
+128,move,"move 23 6",1,1111,333,123,23,6,110,23,7,100,24,7
+129,move,"move 22 8",2,1116,333,123,23,6,110,22,8,100,24,7
+130,move,"move 23 8",3,1121,333,123,23,6,110,22,8,100,23,8
+131,move,"move 23 7",1,1126,333,123,23,7,110,22,8,100,23,8
+132,dig,"dig 22 9",2,1133,333,123,23,7,110,22,8,100,23,8
+133,move,"move 22 9",3,1138,333,123,23,7,110,22,8,100,22,9
+134,move,"move 22 7",1,1143,333,123,22,7,110,22,8,100,22,9
+135,move,"move 21 9",2,1148,333,123,22,7,110,21,9,100,22,9
+136,move,"move 21 10",3,1153,333,123,22,7,110,21,9,100,21,10
+137,move,"move 21 8",1,1158,333,123,21,8,110,21,9,100,21,10
+138,invalid,"invalid",2,1154,333,123,21,8,110,21,9,100,21,10
+139,move,"move 21 11",3,1159,333,123,21,8,110,21,9,100,21,11
+140,move,"move 22 9",1,1164,333,123,22,9,110,21,9,100,21,11
+141,dig,"dig 22 10",2,1171,333,123,22,9,110,21,9,100,21,11
+142,move,"move 22 12",3,1176,333,123,22,9,110,21,9,100,22,12
+143,move,"move 23 10",1,1181,333,123,23,10,110,21,9,100,22,12
+144,move,"move 22 10",2,1186,333,123,23,10,110,22,10,100,22,12
+145,dig,"dig 23 13",3,1193,333,123,23,10,110,22,10,100,22,12
+146,move,"move 23 11",1,1198,333,123,23,11,110,22,10,100,22,12
+147,move,"move 21 9",2,1203,333,123,23,11,110,21,9,100,22,12
+148,move,"move 23 13",3,1208,333,123,23,11,110,21,9,100,23,13
+149,move,"move 23 12",1,1213,333,123,23,12,110,21,9,100,23,13
+150,move,"move 22 10",2,1218,333,123,23,12,110,22,10,100,23,13
+151,dig,"dig 23 14",3,1225,333,123,23,12,110,22,10,100,23,13
+152,move,"move 22 13",1,1230,333,123,22,13,110,22,10,100,23,13
+153,move,"move 23 11",2,1235,333,123,22,13,110,23,11,100,23,13
+154,move,"move 23 14",3,1240,333,123,22,13,110,23,11,100,23,14
+155,move,"move 23 13",1,1245,333,123,23,13,110,23,11,100,23,14
+156,move,"move 23 12",2,1250,333,123,23,13,110,23,12,100,23,14
+157,move,"move 23 15",3,1255,333,123,23,13,110,23,12,100,23,15
+158,move,"move 23 14",1,1260,333,123,23,14,110,23,12,100,23,15
+159,move,"move 23 13",2,1265,333,123,23,14,110,23,13,100,23,15
+160,move,"move 24 16",3,1270,333,123,23,14,110,23,13,100,24,16
+161,move,"move 24 15",1,1275,333,123,24,15,110,23,13,100,24,16
+162,move,"move 23 14",2,1280,333,123,24,15,110,23,14,100,24,16
+163,move,"move 23 17",3,1285,333,123,24,15,110,23,14,100,23,17
+164,move,"move 23 16",1,1290,333,123,23,16,110,23,14,100,23,17
+165,move,"move 23 15",2,1292,326,123,23,16,110,23,15,93,23,17
+166,move,"move 23 18",3,1297,326,123,23,16,110,23,15,93,23,18
+167,move,"move 23 17",1,1296,306,116,23,17,110,23,15,80,23,18
+168,move,"move 23 16",2,1301,306,116,23,17,110,23,16,80,23,18
+169,move,"move 23 19",3,1297,279,109,23,17,110,23,16,60,23,19
+170,move,"move 23 18",1,1302,279,109,23,18,110,23,16,60,23,19
+171,move,"move 23 17",2,1307,279,109,23,18,110,23,17,60,23,19
+172,move,"move 23 20",3,1312,279,109,23,18,110,23,17,60,23,20
+173,move,"move 23 19",1,1317,279,109,23,19,110,23,17,60,23,20
+174,move,"move 22 18",2,1322,279,109,23,19,110,22,18,60,23,20
+175,dig,"dig 22 21",3,1329,279,109,23,19,110,22,18,60,23,20
+176,move,"move 22 20",1,1334,279,109,22,20,110,22,18,60,23,20
+177,move,"move 22 19",2,1339,279,109,22,20,110,22,19,60,23,20
+178,move,"move 22 21",3,1344,279,109,22,20,110,22,19,60,22,21
+179,invalid,"invalid",1,1340,279,109,22,20,110,22,19,60,22,21
+180,dig,"dig 21 20",2,1347,279,109,22,20,110,22,19,60,22,21
+181,dig,"dig 21 22",3,1354,279,109,22,20,110,22,19,60,22,21
+182,dig,"dig 21 21",1,1361,279,109,22,20,110,22,19,60,22,21
+183,move,"move 21 20",2,1366,279,109,22,20,110,21,20,60,22,21
+184,move,"move 21 22",3,1371,279,109,22,20,110,21,20,60,21,22
+185,move,"move 21 21",1,1376,279,109,21,21,110,21,20,60,21,22
+186,dig,"dig 20 21",2,1383,279,109,21,21,110,21,20,60,21,22
+187,dig,"dig 20 23",3,1390,279,109,21,21,110,21,20,60,21,22
+188,dig,"dig 20 22",1,1397,279,109,21,21,110,21,20,60,21,22
+189,move,"move 20 21",2,1399,271,109,21,21,110,20,21,52,21,22
+190,shoot,"shoot SW",3,1415,271,109,21,21,110,20,21,52,21,22
+191,move,"move 20 22",1,1417,263,109,20,22,110,20,21,44,21,22
+192,dig,"dig 19 22",2,1424,263,109,20,22,110,20,21,44,21,22
+193,shoot,"shoot SW",3,1438,255,109,20,22,110,20,21,36,21,22
+194,move,"move 19 23",1,1443,255,109,19,23,110,20,21,36,21,22
+195,move,"move 19 22",2,1448,255,109,19,23,110,19,22,36,21,22
+196,move,"move 20 23",3,1453,255,109,19,23,110,19,22,36,20,23
+197,shoot,"shoot W",1,1466,247,109,19,23,102,19,22,36,20,23
+198,shoot,"shoot SW",2,1482,247,109,19,23,102,19,22,36,20,23
+199,invalid,"invalid",3,1475,239,101,19,23,102,19,22,36,20,23
+200,shoot,"shoot W",1,1491,239,101,19,23,102,19,22,36,20,23
+201,shoot,"shoot SW",2,1493,239,101,19,23,102,19,22,36,20,23
+202,move,"move 19 24",3,1498,239,101,19,23,102,19,22,36,19,24
+203,move,"move 18 22",1,1501,231,93,18,22,102,19,22,36,19,24
+204,dig,"dig 19 21",2,1508,231,93,18,22,102,19,22,36,19,24
+205,shoot,"shoot NW",3,1510,231,93,18,22,102,19,22,36,19,24
+206,shoot,"shoot W",1,1526,231,93,18,22,102,19,22,36,19,24
+207,move,"move 18 23",2,1528,223,85,18,22,102,18,23,36,19,24
+208,dig,"dig 18 25",3,1535,223,85,18,22,102,18,23,36,19,24
+209,shoot,"shoot W",1,1548,215,77,18,22,102,18,23,36,19,24
+210,move,"move 17 22",2,1553,215,77,18,22,102,17,22,36,19,24
+211,move,"move 18 23",3,1556,207,77,18,22,94,17,22,36,18,23
+212,move,"move 17 21",1,1561,207,77,17,21,94,17,22,36,18,23
+213,shoot,"shoot W",2,1574,199,69,17,21,94,17,22,36,18,23
+214,move,"move 19 23",3,1579,199,69,17,21,94,17,22,36,19,23
+215,shoot,"shoot SW",1,1576,191,69,17,21,86,17,22,36,19,23
+216,shoot,"shoot W",2,1592,191,69,17,21,86,17,22,36,19,23
+217,move,"move 18 22",3,1595,183,69,17,21,78,17,22,36,18,22
+218,shoot,"shoot SW",1,1595,183,69,17,21,78,17,22,36,18,22
+219,shoot,"shoot W",2,1608,175,69,17,21,70,17,22,36,18,22
+220,invalid,"invalid",3,1604,175,69,17,21,70,17,22,36,18,22
+221,shoot,"shoot SW",1,1604,175,69,17,21,70,17,22,36,18,22
+222,dig,"dig 16 21",2,1611,175,69,17,21,70,17,22,36,18,22
+223,move,"move 18 23",3,1613,167,61,17,21,70,17,22,36,18,23
+224,shoot,"shoot W",1,1613,167,61,17,21,70,17,22,36,18,23
+225,move,"move 16 21",2,1616,159,61,17,21,62,16,21,36,18,23
+226,move,"move 17 22",3,1621,159,61,17,21,62,16,21,36,17,22
+227,move,"move 18 21",1,1623,151,61,18,21,54,16,21,36,17,22
+228,shoot,"shoot W",2,1639,151,61,18,21,54,16,21,36,17,22
+229,dig,"dig 17 23",3,1643,143,61,18,21,46,16,21,36,17,22
+230,move,"move 17 21",1,1646,135,61,17,21,38,16,21,36,17,22
+231,shoot,"shoot W",2,1659,127,61,17,21,30,16,21,36,17,22
+232,invalid,"invalid",3,1652,119,61,17,21,22,16,21,36,17,22
+233,move,"move 18 22",1,1655,111,61,18,22,14,16,21,36,17,22
+234,shoot,"shoot W",2,1711,111,61,18,22,14,16,21,36,17,22
+235,move,"move 17 23",3,1716,111,61,18,22,14,16,21,36,17,23
+236,move,"move 17 21",1,1721,111,61,17,21,14,16,21,36,17,23
+237,move,"move 15 20",2,1726,111,61,17,21,14,15,20,36,17,23
+238,move,"move 16 22",3,1728,103,53,17,21,14,15,20,36,16,22
+239,shoot,"shoot NW",1,1741,95,53,17,21,6,15,20,36,16,22
+240,shoot,"shoot N",2,1755,87,45,17,21,6,15,20,36,16,22
+241,move,"move 15 21",3,1757,79,37,17,21,6,15,20,36,15,21
+242,shoot,"shoot NW",1,1759,79,37,17,21,6,15,20,36,15,21
+243,shoot,"shoot NE",2,1761,79,37,17,21,6,15,20,36,15,21
+244,move,"move 16 20",3,1763,71,29,17,21,6,15,20,36,16,20
+245,shoot,"shoot N",1,1777,63,29,17,21,6,15,20,28,16,20
+246,move,"move 15 21",2,1779,55,21,17,21,6,15,21,28,16,20
+247,shoot,"shoot E",3,1781,55,21,17,21,6,15,21,28,16,20
+248,dig,"dig 18 20",1,1788,55,21,17,21,6,15,21,28,16,20
+249,dig,"dig 14 20",2,1792,47,21,17,21,6,15,21,20,16,20
+250,shoot,"shoot NE",3,1794,47,21,17,21,6,15,21,20,16,20
+251,move,"move 18 20",1,1799,47,21,18,20,6,15,21,20,16,20
+252,move,"move 14 21",2,1802,39,13,18,20,6,14,21,20,16,20
+253,shoot,"shoot NE",3,1804,39,13,18,20,6,14,21,20,16,20
+254,move,"move 17 19",1,1807,33,13,17,19,-2,14,21,20,16,20
+255,move,"move 16 21",3,1809,25,5,17,19,-2,14,21,20,16,21
+256,shoot,"shoot N",1,1811,25,5,17,19,-2,14,21,20,16,21
+257,move,"move 17 20",3,1816,25,5,17,19,-2,14,21,20,17,20
+258,move,"move 18 18",1,1821,25,5,18,18,-2,14,21,20,17,20
+259,move,"move 18 19",3,1824,20,-3,18,18,-2,14,21,20,18,19
+260,shoot,"shoot N",3,1826,20,-3,18,18,-2,14,21,20,18,19
+261,shoot,"shoot NW",3,1828,20,-3,18,18,-2,14,21,20,18,19
+262,shoot,"shoot N",3,1830,20,-3,18,18,-2,14,21,20,18,19
+263,shoot,"shoot NW",3,1832,20,-3,18,18,-2,14,21,20,18,19
+264,shoot,"shoot N",3,1834,20,-3,18,18,-2,14,21,20,18,19
+265,shoot,"shoot NW",3,1836,20,-3,18,18,-2,14,21,20,18,19
+266,shoot,"shoot N",3,1838,20,-3,18,18,-2,14,21,20,18,19
+267,shoot,"shoot W",3,1840,20,-3,18,18,-2,14,21,20,18,19
+268,shoot,"shoot SW",3,1842,20,-3,18,18,-2,14,21,20,18,19
+269,shoot,"shoot W",3,1844,20,-3,18,18,-2,14,21,20,18,19
+270,shoot,"shoot SW",3,1846,20,-3,18,18,-2,14,21,20,18,19
+271,shoot,"shoot W",3,1848,20,-3,18,18,-2,14,21,20,18,19
+272,shoot,"shoot SW",3,1850,20,-3,18,18,-2,14,21,20,18,19
+273,shoot,"shoot W",3,1852,20,-3,18,18,-2,14,21,20,18,19
+274,shoot,"shoot SW",3,1854,20,-3,18,18,-2,14,21,20,18,19
+275,shoot,"shoot W",3,1856,20,-3,18,18,-2,14,21,20,18,19
+276,shoot,"shoot S",3,1858,20,-3,18,18,-2,14,21,20,18,19
+277,shoot,"shoot SW",3,1860,20,-3,18,18,-2,14,21,20,18,19
+278,shoot,"shoot W",3,1862,20,-3,18,18,-2,14,21,20,18,19
+279,shoot,"shoot SW",3,1864,20,-3,18,18,-2,14,21,20,18,19
+280,shoot,"shoot S",3,1866,20,-3,18,18,-2,14,21,20,18,19
+281,shoot,"shoot SW",3,1868,20,-3,18,18,-2,14,21,20,18,19
+282,shoot,"shoot W",3,1870,20,-3,18,18,-2,14,21,20,18,19
+283,shoot,"shoot SW",3,1872,20,-3,18,18,-2,14,21,20,18,19
+284,shoot,"shoot W",3,1874,20,-3,18,18,-2,14,21,20,18,19
+285,shoot,"shoot SW",3,1876,20,-3,18,18,-2,14,21,20,18,19
+286,shoot,"shoot W",3,1878,20,-3,18,18,-2,14,21,20,18,19
+287,shoot,"shoot S",3,1880,20,-3,18,18,-2,14,21,20,18,19
+288,shoot,"shoot W",3,1882,20,-3,18,18,-2,14,21,20,18,19
+289,shoot,"shoot S",3,1884,20,-3,18,18,-2,14,21,20,18,19
+290,shoot,"shoot W",3,1886,20,-3,18,18,-2,14,21,20,18,19
+291,shoot,"shoot S",3,1888,20,-3,18,18,-2,14,21,20,18,19
+292,shoot,"shoot W",3,1890,20,-3,18,18,-2,14,21,20,18,19
+293,shoot,"shoot S",3,1892,20,-3,18,18,-2,14,21,20,18,19
+294,shoot,"shoot W",3,1894,20,-3,18,18,-2,14,21,20,18,19
+295,shoot,"shoot S",3,1895,17,-3,18,18,-2,14,21,17,18,19
+296,shoot,"shoot SW",3,1896,14,-3,18,18,-2,14,21,14,18,19
+297,shoot,"shoot S",3,1897,11,-3,18,18,-2,14,21,11,18,19
diff --git a/2019-worms/tests/replays/2019.08.19.21.31.16/A-init.json b/2019-worms/tests/replays/2019.08.19.21.31.16/A-init.json
new file mode 100644
index 0000000..31546d4
--- /dev/null
+++ b/2019-worms/tests/replays/2019.08.19.21.31.16/A-init.json
@@ -0,0 +1 @@
+{"currentRound":1,"maxRounds":400,"pushbackDamage":20,"lavaDamage":3,"mapSize":33,"currentWormId":1,"consecutiveDoNothingCount":0,"myPlayer":{"id":1,"score":116,"health":350,"currentWormId":1,"remainingWormSelections":5,"previousCommand":"nothing","worms":[{"id":1,"health":150,"position":{"x":24,"y":4},"weapon":{"damage":8,"range":4},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Commando"},{"id":2,"health":100,"position":{"x":24,"y":28},"weapon":{"damage":8,"range":4},"bananaBombs":{"damage":20,"range":5,"count":3,"damageRadius":2},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Agent"},{"id":3,"health":100,"position":{"x":1,"y":16},"weapon":{"damage":8,"range":4},"snowballs":{"freezeDuration":5,"range":5,"count":3,"freezeRadius":1},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Technologist"}]},"opponents":[{"id":2,"score":116,"currentWormId":1,"remainingWormSelections":5,"previousCommand":"nothing","worms":[{"id":1,"health":150,"position":{"x":8,"y":28},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Commando"},{"id":2,"health":100,"position":{"x":8,"y":4},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Agent"},{"id":3,"health":100,"position":{"x":31,"y":16},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Technologist"}]}],"map":[[{"x":0,"y":0,"type":"DEEP_SPACE"},{"x":1,"y":0,"type":"DEEP_SPACE"},{"x":2,"y":0,"type":"DEEP_SPACE"},{"x":3,"y":0,"type":"DEEP_SPACE"},{"x":4,"y":0,"type":"DEEP_SPACE"},{"x":5,"y":0,"type":"DEEP_SPACE"},{"x":6,"y":0,"type":"DEEP_SPACE"},{"x":7,"y":0,"type":"DEEP_SPACE"},{"x":8,"y":0,"type":"DEEP_SPACE"},{"x":9,"y":0,"type":"DEEP_SPACE"},{"x":10,"y":0,"type":"DEEP_SPACE"},{"x":11,"y":0,"type":"DIRT"},{"x":12,"y":0,"type":"DIRT"},{"x":13,"y":0,"type":"DIRT"},{"x":14,"y":0,"type":"AIR"},{"x":15,"y":0,"type":"AIR"},{"x":16,"y":0,"type":"DIRT"},{"x":17,"y":0,"type":"AIR"},{"x":18,"y":0,"type":"AIR"},{"x":19,"y":0,"type":"DIRT"},{"x":20,"y":0,"type":"DIRT"},{"x":21,"y":0,"type":"DIRT"},{"x":22,"y":0,"type":"DEEP_SPACE"},{"x":23,"y":0,"type":"DEEP_SPACE"},{"x":24,"y":0,"type":"DEEP_SPACE"},{"x":25,"y":0,"type":"DEEP_SPACE"},{"x":26,"y":0,"type":"DEEP_SPACE"},{"x":27,"y":0,"type":"DEEP_SPACE"},{"x":28,"y":0,"type":"DEEP_SPACE"},{"x":29,"y":0,"type":"DEEP_SPACE"},{"x":30,"y":0,"type":"DEEP_SPACE"},{"x":31,"y":0,"type":"DEEP_SPACE"},{"x":32,"y":0,"type":"DEEP_SPACE"}],[{"x":0,"y":1,"type":"DEEP_SPACE"},{"x":1,"y":1,"type":"DEEP_SPACE"},{"x":2,"y":1,"type":"DEEP_SPACE"},{"x":3,"y":1,"type":"DEEP_SPACE"},{"x":4,"y":1,"type":"DEEP_SPACE"},{"x":5,"y":1,"type":"DEEP_SPACE"},{"x":6,"y":1,"type":"DEEP_SPACE"},{"x":7,"y":1,"type":"DEEP_SPACE"},{"x":8,"y":1,"type":"DIRT"},{"x":9,"y":1,"type":"DIRT"},{"x":10,"y":1,"type":"DIRT"},{"x":11,"y":1,"type":"DIRT"},{"x":12,"y":1,"type":"DIRT"},{"x":13,"y":1,"type":"AIR"},{"x":14,"y":1,"type":"AIR"},{"x":15,"y":1,"type":"DIRT"},{"x":16,"y":1,"type":"DIRT"},{"x":17,"y":1,"type":"DIRT"},{"x":18,"y":1,"type":"AIR"},{"x":19,"y":1,"type":"AIR"},{"x":20,"y":1,"type":"DIRT"},{"x":21,"y":1,"type":"DIRT"},{"x":22,"y":1,"type":"DIRT"},{"x":23,"y":1,"type":"DIRT"},{"x":24,"y":1,"type":"DIRT"},{"x":25,"y":1,"type":"DEEP_SPACE"},{"x":26,"y":1,"type":"DEEP_SPACE"},{"x":27,"y":1,"type":"DEEP_SPACE"},{"x":28,"y":1,"type":"DEEP_SPACE"},{"x":29,"y":1,"type":"DEEP_SPACE"},{"x":30,"y":1,"type":"DEEP_SPACE"},{"x":31,"y":1,"type":"DEEP_SPACE"},{"x":32,"y":1,"type":"DEEP_SPACE"}],[{"x":0,"y":2,"type":"DEEP_SPACE"},{"x":1,"y":2,"type":"DEEP_SPACE"},{"x":2,"y":2,"type":"DEEP_SPACE"},{"x":3,"y":2,"type":"DEEP_SPACE"},{"x":4,"y":2,"type":"DEEP_SPACE"},{"x":5,"y":2,"type":"DEEP_SPACE"},{"x":6,"y":2,"type":"DEEP_SPACE"},{"x":7,"y":2,"type":"DIRT"},{"x":8,"y":2,"type":"DIRT"},{"x":9,"y":2,"type":"DIRT"},{"x":10,"y":2,"type":"DIRT"},{"x":11,"y":2,"type":"DIRT"},{"x":12,"y":2,"type":"DIRT"},{"x":13,"y":2,"type":"DIRT"},{"x":14,"y":2,"type":"DIRT"},{"x":15,"y":2,"type":"AIR"},{"x":16,"y":2,"type":"AIR"},{"x":17,"y":2,"type":"AIR"},{"x":18,"y":2,"type":"DIRT"},{"x":19,"y":2,"type":"DIRT"},{"x":20,"y":2,"type":"DIRT"},{"x":21,"y":2,"type":"DIRT"},{"x":22,"y":2,"type":"DIRT"},{"x":23,"y":2,"type":"DIRT"},{"x":24,"y":2,"type":"DIRT"},{"x":25,"y":2,"type":"DIRT"},{"x":26,"y":2,"type":"DEEP_SPACE"},{"x":27,"y":2,"type":"DEEP_SPACE"},{"x":28,"y":2,"type":"DEEP_SPACE"},{"x":29,"y":2,"type":"DEEP_SPACE"},{"x":30,"y":2,"type":"DEEP_SPACE"},{"x":31,"y":2,"type":"DEEP_SPACE"},{"x":32,"y":2,"type":"DEEP_SPACE"}],[{"x":0,"y":3,"type":"DEEP_SPACE"},{"x":1,"y":3,"type":"DEEP_SPACE"},{"x":2,"y":3,"type":"DEEP_SPACE"},{"x":3,"y":3,"type":"DEEP_SPACE"},{"x":4,"y":3,"type":"DEEP_SPACE"},{"x":5,"y":3,"type":"DEEP_SPACE"},{"x":6,"y":3,"type":"DIRT"},{"x":7,"y":3,"type":"AIR"},{"x":8,"y":3,"type":"AIR"},{"x":9,"y":3,"type":"AIR"},{"x":10,"y":3,"type":"DIRT"},{"x":11,"y":3,"type":"DIRT"},{"x":12,"y":3,"type":"AIR"},{"x":13,"y":3,"type":"DIRT"},{"x":14,"y":3,"type":"DIRT"},{"x":15,"y":3,"type":"AIR"},{"x":16,"y":3,"type":"AIR"},{"x":17,"y":3,"type":"AIR"},{"x":18,"y":3,"type":"DIRT"},{"x":19,"y":3,"type":"DIRT"},{"x":20,"y":3,"type":"AIR"},{"x":21,"y":3,"type":"DIRT"},{"x":22,"y":3,"type":"DIRT"},{"x":23,"y":3,"type":"AIR"},{"x":24,"y":3,"type":"AIR"},{"x":25,"y":3,"type":"AIR"},{"x":26,"y":3,"type":"DIRT"},{"x":27,"y":3,"type":"DEEP_SPACE"},{"x":28,"y":3,"type":"DEEP_SPACE"},{"x":29,"y":3,"type":"DEEP_SPACE"},{"x":30,"y":3,"type":"DEEP_SPACE"},{"x":31,"y":3,"type":"DEEP_SPACE"},{"x":32,"y":3,"type":"DEEP_SPACE"}],[{"x":0,"y":4,"type":"DEEP_SPACE"},{"x":1,"y":4,"type":"DEEP_SPACE"},{"x":2,"y":4,"type":"DEEP_SPACE"},{"x":3,"y":4,"type":"DEEP_SPACE"},{"x":4,"y":4,"type":"AIR"},{"x":5,"y":4,"type":"AIR"},{"x":6,"y":4,"type":"DIRT"},{"x":7,"y":4,"type":"AIR"},{"x":8,"y":4,"type":"AIR","occupier":{"id":2,"playerId":2,"health":100,"position":{"x":8,"y":4},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Agent"}},{"x":9,"y":4,"type":"AIR"},{"x":10,"y":4,"type":"DIRT"},{"x":11,"y":4,"type":"AIR"},{"x":12,"y":4,"type":"AIR"},{"x":13,"y":4,"type":"AIR"},{"x":14,"y":4,"type":"AIR"},{"x":15,"y":4,"type":"AIR"},{"x":16,"y":4,"type":"AIR"},{"x":17,"y":4,"type":"AIR"},{"x":18,"y":4,"type":"AIR"},{"x":19,"y":4,"type":"AIR"},{"x":20,"y":4,"type":"AIR"},{"x":21,"y":4,"type":"AIR"},{"x":22,"y":4,"type":"DIRT"},{"x":23,"y":4,"type":"AIR"},{"x":24,"y":4,"type":"AIR","occupier":{"id":1,"playerId":1,"health":150,"position":{"x":24,"y":4},"weapon":{"damage":8,"range":4},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Commando"}},{"x":25,"y":4,"type":"AIR"},{"x":26,"y":4,"type":"DIRT"},{"x":27,"y":4,"type":"AIR"},{"x":28,"y":4,"type":"AIR"},{"x":29,"y":4,"type":"DEEP_SPACE"},{"x":30,"y":4,"type":"DEEP_SPACE"},{"x":31,"y":4,"type":"DEEP_SPACE"},{"x":32,"y":4,"type":"DEEP_SPACE"}],[{"x":0,"y":5,"type":"DEEP_SPACE"},{"x":1,"y":5,"type":"DEEP_SPACE"},{"x":2,"y":5,"type":"DEEP_SPACE"},{"x":3,"y":5,"type":"DEEP_SPACE"},{"x":4,"y":5,"type":"AIR"},{"x":5,"y":5,"type":"AIR"},{"x":6,"y":5,"type":"DIRT"},{"x":7,"y":5,"type":"AIR"},{"x":8,"y":5,"type":"AIR"},{"x":9,"y":5,"type":"AIR"},{"x":10,"y":5,"type":"DIRT"},{"x":11,"y":5,"type":"DIRT"},{"x":12,"y":5,"type":"AIR"},{"x":13,"y":5,"type":"AIR"},{"x":14,"y":5,"type":"AIR"},{"x":15,"y":5,"type":"AIR"},{"x":16,"y":5,"type":"AIR"},{"x":17,"y":5,"type":"AIR"},{"x":18,"y":5,"type":"AIR"},{"x":19,"y":5,"type":"AIR"},{"x":20,"y":5,"type":"AIR"},{"x":21,"y":5,"type":"DIRT"},{"x":22,"y":5,"type":"DIRT"},{"x":23,"y":5,"type":"AIR"},{"x":24,"y":5,"type":"AIR"},{"x":25,"y":5,"type":"AIR"},{"x":26,"y":5,"type":"DIRT"},{"x":27,"y":5,"type":"AIR"},{"x":28,"y":5,"type":"AIR"},{"x":29,"y":5,"type":"DEEP_SPACE"},{"x":30,"y":5,"type":"DEEP_SPACE"},{"x":31,"y":5,"type":"DEEP_SPACE"},{"x":32,"y":5,"type":"DEEP_SPACE"}],[{"x":0,"y":6,"type":"DEEP_SPACE"},{"x":1,"y":6,"type":"DEEP_SPACE"},{"x":2,"y":6,"type":"DEEP_SPACE"},{"x":3,"y":6,"type":"AIR"},{"x":4,"y":6,"type":"AIR"},{"x":5,"y":6,"type":"AIR"},{"x":6,"y":6,"type":"DIRT"},{"x":7,"y":6,"type":"DIRT"},{"x":8,"y":6,"type":"DIRT"},{"x":9,"y":6,"type":"DIRT"},{"x":10,"y":6,"type":"DIRT"},{"x":11,"y":6,"type":"DIRT"},{"x":12,"y":6,"type":"AIR"},{"x":13,"y":6,"type":"AIR"},{"x":14,"y":6,"type":"AIR"},{"x":15,"y":6,"type":"AIR"},{"x":16,"y":6,"type":"AIR"},{"x":17,"y":6,"type":"AIR"},{"x":18,"y":6,"type":"AIR"},{"x":19,"y":6,"type":"AIR"},{"x":20,"y":6,"type":"AIR"},{"x":21,"y":6,"type":"DIRT"},{"x":22,"y":6,"type":"DIRT"},{"x":23,"y":6,"type":"DIRT"},{"x":24,"y":6,"type":"DIRT"},{"x":25,"y":6,"type":"DIRT"},{"x":26,"y":6,"type":"DIRT"},{"x":27,"y":6,"type":"AIR"},{"x":28,"y":6,"type":"AIR"},{"x":29,"y":6,"type":"AIR"},{"x":30,"y":6,"type":"DEEP_SPACE"},{"x":31,"y":6,"type":"DEEP_SPACE"},{"x":32,"y":6,"type":"DEEP_SPACE"}],[{"x":0,"y":7,"type":"DEEP_SPACE"},{"x":1,"y":7,"type":"DEEP_SPACE"},{"x":2,"y":7,"type":"AIR"},{"x":3,"y":7,"type":"AIR"},{"x":4,"y":7,"type":"AIR"},{"x":5,"y":7,"type":"DIRT"},{"x":6,"y":7,"type":"AIR"},{"x":7,"y":7,"type":"AIR"},{"x":8,"y":7,"type":"AIR"},{"x":9,"y":7,"type":"AIR"},{"x":10,"y":7,"type":"AIR"},{"x":11,"y":7,"type":"AIR"},{"x":12,"y":7,"type":"AIR"},{"x":13,"y":7,"type":"DIRT"},{"x":14,"y":7,"type":"AIR"},{"x":15,"y":7,"type":"AIR"},{"x":16,"y":7,"type":"AIR"},{"x":17,"y":7,"type":"AIR"},{"x":18,"y":7,"type":"AIR"},{"x":19,"y":7,"type":"DIRT"},{"x":20,"y":7,"type":"AIR"},{"x":21,"y":7,"type":"AIR"},{"x":22,"y":7,"type":"AIR"},{"x":23,"y":7,"type":"AIR"},{"x":24,"y":7,"type":"AIR"},{"x":25,"y":7,"type":"AIR"},{"x":26,"y":7,"type":"AIR"},{"x":27,"y":7,"type":"DIRT"},{"x":28,"y":7,"type":"AIR"},{"x":29,"y":7,"type":"AIR"},{"x":30,"y":7,"type":"AIR"},{"x":31,"y":7,"type":"DEEP_SPACE"},{"x":32,"y":7,"type":"DEEP_SPACE"}],[{"x":0,"y":8,"type":"DEEP_SPACE"},{"x":1,"y":8,"type":"AIR"},{"x":2,"y":8,"type":"AIR"},{"x":3,"y":8,"type":"DIRT"},{"x":4,"y":8,"type":"DIRT"},{"x":5,"y":8,"type":"DIRT"},{"x":6,"y":8,"type":"AIR"},{"x":7,"y":8,"type":"AIR"},{"x":8,"y":8,"type":"AIR"},{"x":9,"y":8,"type":"AIR"},{"x":10,"y":8,"type":"AIR"},{"x":11,"y":8,"type":"AIR"},{"x":12,"y":8,"type":"AIR"},{"x":13,"y":8,"type":"DIRT"},{"x":14,"y":8,"type":"AIR"},{"x":15,"y":8,"type":"AIR"},{"x":16,"y":8,"type":"AIR"},{"x":17,"y":8,"type":"AIR"},{"x":18,"y":8,"type":"AIR"},{"x":19,"y":8,"type":"DIRT"},{"x":20,"y":8,"type":"AIR"},{"x":21,"y":8,"type":"AIR"},{"x":22,"y":8,"type":"AIR"},{"x":23,"y":8,"type":"AIR"},{"x":24,"y":8,"type":"AIR"},{"x":25,"y":8,"type":"AIR"},{"x":26,"y":8,"type":"AIR"},{"x":27,"y":8,"type":"DIRT"},{"x":28,"y":8,"type":"DIRT"},{"x":29,"y":8,"type":"DIRT"},{"x":30,"y":8,"type":"AIR"},{"x":31,"y":8,"type":"AIR"},{"x":32,"y":8,"type":"DEEP_SPACE"}],[{"x":0,"y":9,"type":"DEEP_SPACE"},{"x":1,"y":9,"type":"DIRT"},{"x":2,"y":9,"type":"AIR"},{"x":3,"y":9,"type":"DIRT"},{"x":4,"y":9,"type":"DIRT"},{"x":5,"y":9,"type":"AIR"},{"x":6,"y":9,"type":"AIR"},{"x":7,"y":9,"type":"DIRT"},{"x":8,"y":9,"type":"AIR"},{"x":9,"y":9,"type":"AIR"},{"x":10,"y":9,"type":"DIRT"},{"x":11,"y":9,"type":"AIR"},{"x":12,"y":9,"type":"DIRT"},{"x":13,"y":9,"type":"DIRT"},{"x":14,"y":9,"type":"AIR"},{"x":15,"y":9,"type":"DIRT"},{"x":16,"y":9,"type":"AIR"},{"x":17,"y":9,"type":"DIRT"},{"x":18,"y":9,"type":"AIR"},{"x":19,"y":9,"type":"DIRT"},{"x":20,"y":9,"type":"DIRT"},{"x":21,"y":9,"type":"AIR"},{"x":22,"y":9,"type":"DIRT"},{"x":23,"y":9,"type":"AIR"},{"x":24,"y":9,"type":"AIR"},{"x":25,"y":9,"type":"DIRT"},{"x":26,"y":9,"type":"AIR"},{"x":27,"y":9,"type":"AIR"},{"x":28,"y":9,"type":"DIRT"},{"x":29,"y":9,"type":"DIRT"},{"x":30,"y":9,"type":"AIR"},{"x":31,"y":9,"type":"DIRT"},{"x":32,"y":9,"type":"DEEP_SPACE"}],[{"x":0,"y":10,"type":"DEEP_SPACE"},{"x":1,"y":10,"type":"DIRT"},{"x":2,"y":10,"type":"AIR"},{"x":3,"y":10,"type":"AIR"},{"x":4,"y":10,"type":"DIRT"},{"x":5,"y":10,"type":"DIRT"},{"x":6,"y":10,"type":"DIRT"},{"x":7,"y":10,"type":"DIRT"},{"x":8,"y":10,"type":"AIR"},{"x":9,"y":10,"type":"AIR"},{"x":10,"y":10,"type":"DIRT"},{"x":11,"y":10,"type":"DIRT"},{"x":12,"y":10,"type":"DIRT"},{"x":13,"y":10,"type":"DIRT"},{"x":14,"y":10,"type":"AIR"},{"x":15,"y":10,"type":"AIR"},{"x":16,"y":10,"type":"AIR"},{"x":17,"y":10,"type":"AIR"},{"x":18,"y":10,"type":"AIR"},{"x":19,"y":10,"type":"DIRT"},{"x":20,"y":10,"type":"DIRT"},{"x":21,"y":10,"type":"DIRT"},{"x":22,"y":10,"type":"DIRT"},{"x":23,"y":10,"type":"AIR"},{"x":24,"y":10,"type":"AIR"},{"x":25,"y":10,"type":"DIRT"},{"x":26,"y":10,"type":"DIRT"},{"x":27,"y":10,"type":"DIRT"},{"x":28,"y":10,"type":"DIRT"},{"x":29,"y":10,"type":"AIR"},{"x":30,"y":10,"type":"AIR"},{"x":31,"y":10,"type":"DIRT"},{"x":32,"y":10,"type":"DEEP_SPACE"}],[{"x":0,"y":11,"type":"DIRT"},{"x":1,"y":11,"type":"DIRT"},{"x":2,"y":11,"type":"DIRT"},{"x":3,"y":11,"type":"AIR"},{"x":4,"y":11,"type":"AIR"},{"x":5,"y":11,"type":"AIR"},{"x":6,"y":11,"type":"AIR"},{"x":7,"y":11,"type":"AIR"},{"x":8,"y":11,"type":"AIR"},{"x":9,"y":11,"type":"AIR"},{"x":10,"y":11,"type":"AIR"},{"x":11,"y":11,"type":"AIR"},{"x":12,"y":11,"type":"AIR"},{"x":13,"y":11,"type":"DIRT"},{"x":14,"y":11,"type":"AIR"},{"x":15,"y":11,"type":"DIRT"},{"x":16,"y":11,"type":"DIRT"},{"x":17,"y":11,"type":"DIRT"},{"x":18,"y":11,"type":"AIR"},{"x":19,"y":11,"type":"DIRT"},{"x":20,"y":11,"type":"AIR"},{"x":21,"y":11,"type":"AIR"},{"x":22,"y":11,"type":"AIR"},{"x":23,"y":11,"type":"AIR"},{"x":24,"y":11,"type":"AIR"},{"x":25,"y":11,"type":"AIR"},{"x":26,"y":11,"type":"AIR"},{"x":27,"y":11,"type":"AIR"},{"x":28,"y":11,"type":"AIR"},{"x":29,"y":11,"type":"AIR"},{"x":30,"y":11,"type":"DIRT"},{"x":31,"y":11,"type":"DIRT"},{"x":32,"y":11,"type":"DIRT"}],[{"x":0,"y":12,"type":"DIRT"},{"x":1,"y":12,"type":"DIRT"},{"x":2,"y":12,"type":"DIRT"},{"x":3,"y":12,"type":"DIRT"},{"x":4,"y":12,"type":"DIRT"},{"x":5,"y":12,"type":"AIR"},{"x":6,"y":12,"type":"AIR"},{"x":7,"y":12,"type":"AIR"},{"x":8,"y":12,"type":"DIRT"},{"x":9,"y":12,"type":"DIRT"},{"x":10,"y":12,"type":"AIR"},{"x":11,"y":12,"type":"AIR"},{"x":12,"y":12,"type":"AIR"},{"x":13,"y":12,"type":"AIR"},{"x":14,"y":12,"type":"DIRT"},{"x":15,"y":12,"type":"DIRT"},{"x":16,"y":12,"type":"DIRT"},{"x":17,"y":12,"type":"DIRT"},{"x":18,"y":12,"type":"DIRT"},{"x":19,"y":12,"type":"AIR"},{"x":20,"y":12,"type":"AIR"},{"x":21,"y":12,"type":"AIR"},{"x":22,"y":12,"type":"AIR"},{"x":23,"y":12,"type":"DIRT"},{"x":24,"y":12,"type":"DIRT"},{"x":25,"y":12,"type":"AIR"},{"x":26,"y":12,"type":"AIR"},{"x":27,"y":12,"type":"AIR"},{"x":28,"y":12,"type":"DIRT"},{"x":29,"y":12,"type":"DIRT"},{"x":30,"y":12,"type":"DIRT"},{"x":31,"y":12,"type":"DIRT"},{"x":32,"y":12,"type":"DIRT"}],[{"x":0,"y":13,"type":"DIRT"},{"x":1,"y":13,"type":"DIRT"},{"x":2,"y":13,"type":"AIR"},{"x":3,"y":13,"type":"DIRT"},{"x":4,"y":13,"type":"DIRT"},{"x":5,"y":13,"type":"AIR"},{"x":6,"y":13,"type":"AIR"},{"x":7,"y":13,"type":"AIR"},{"x":8,"y":13,"type":"DIRT"},{"x":9,"y":13,"type":"DIRT"},{"x":10,"y":13,"type":"AIR"},{"x":11,"y":13,"type":"AIR"},{"x":12,"y":13,"type":"AIR"},{"x":13,"y":13,"type":"AIR"},{"x":14,"y":13,"type":"DIRT"},{"x":15,"y":13,"type":"DIRT"},{"x":16,"y":13,"type":"DIRT"},{"x":17,"y":13,"type":"DIRT"},{"x":18,"y":13,"type":"DIRT"},{"x":19,"y":13,"type":"AIR"},{"x":20,"y":13,"type":"AIR"},{"x":21,"y":13,"type":"AIR"},{"x":22,"y":13,"type":"AIR"},{"x":23,"y":13,"type":"DIRT"},{"x":24,"y":13,"type":"DIRT"},{"x":25,"y":13,"type":"AIR"},{"x":26,"y":13,"type":"AIR"},{"x":27,"y":13,"type":"AIR"},{"x":28,"y":13,"type":"DIRT"},{"x":29,"y":13,"type":"DIRT"},{"x":30,"y":13,"type":"AIR"},{"x":31,"y":13,"type":"DIRT"},{"x":32,"y":13,"type":"DIRT"}],[{"x":0,"y":14,"type":"DIRT"},{"x":1,"y":14,"type":"DIRT"},{"x":2,"y":14,"type":"DIRT"},{"x":3,"y":14,"type":"DIRT"},{"x":4,"y":14,"type":"DIRT"},{"x":5,"y":14,"type":"AIR"},{"x":6,"y":14,"type":"AIR"},{"x":7,"y":14,"type":"AIR"},{"x":8,"y":14,"type":"DIRT"},{"x":9,"y":14,"type":"DIRT"},{"x":10,"y":14,"type":"DIRT"},{"x":11,"y":14,"type":"AIR"},{"x":12,"y":14,"type":"AIR"},{"x":13,"y":14,"type":"AIR"},{"x":14,"y":14,"type":"AIR"},{"x":15,"y":14,"type":"AIR"},{"x":16,"y":14,"type":"DIRT"},{"x":17,"y":14,"type":"AIR"},{"x":18,"y":14,"type":"AIR"},{"x":19,"y":14,"type":"AIR"},{"x":20,"y":14,"type":"AIR"},{"x":21,"y":14,"type":"AIR"},{"x":22,"y":14,"type":"DIRT"},{"x":23,"y":14,"type":"DIRT"},{"x":24,"y":14,"type":"DIRT"},{"x":25,"y":14,"type":"AIR"},{"x":26,"y":14,"type":"AIR"},{"x":27,"y":14,"type":"AIR"},{"x":28,"y":14,"type":"DIRT"},{"x":29,"y":14,"type":"DIRT"},{"x":30,"y":14,"type":"DIRT"},{"x":31,"y":14,"type":"DIRT"},{"x":32,"y":14,"type":"DIRT"}],[{"x":0,"y":15,"type":"AIR"},{"x":1,"y":15,"type":"AIR"},{"x":2,"y":15,"type":"AIR"},{"x":3,"y":15,"type":"DIRT"},{"x":4,"y":15,"type":"AIR"},{"x":5,"y":15,"type":"AIR"},{"x":6,"y":15,"type":"AIR"},{"x":7,"y":15,"type":"AIR"},{"x":8,"y":15,"type":"DIRT"},{"x":9,"y":15,"type":"DIRT"},{"x":10,"y":15,"type":"DIRT"},{"x":11,"y":15,"type":"DIRT"},{"x":12,"y":15,"type":"AIR"},{"x":13,"y":15,"type":"AIR"},{"x":14,"y":15,"type":"AIR","powerup":{"type":"HEALTH_PACK","value":10}},{"x":15,"y":15,"type":"DIRT"},{"x":16,"y":15,"type":"DIRT"},{"x":17,"y":15,"type":"DIRT"},{"x":18,"y":15,"type":"AIR"},{"x":19,"y":15,"type":"AIR"},{"x":20,"y":15,"type":"AIR"},{"x":21,"y":15,"type":"DIRT"},{"x":22,"y":15,"type":"DIRT"},{"x":23,"y":15,"type":"DIRT"},{"x":24,"y":15,"type":"DIRT"},{"x":25,"y":15,"type":"AIR"},{"x":26,"y":15,"type":"AIR"},{"x":27,"y":15,"type":"AIR"},{"x":28,"y":15,"type":"AIR"},{"x":29,"y":15,"type":"DIRT"},{"x":30,"y":15,"type":"AIR"},{"x":31,"y":15,"type":"AIR"},{"x":32,"y":15,"type":"AIR"}],[{"x":0,"y":16,"type":"AIR"},{"x":1,"y":16,"type":"AIR","occupier":{"id":3,"playerId":1,"health":100,"position":{"x":1,"y":16},"weapon":{"damage":8,"range":4},"snowballs":{"freezeDuration":5,"range":5,"count":3,"freezeRadius":1},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Technologist"}},{"x":2,"y":16,"type":"AIR"},{"x":3,"y":16,"type":"DIRT"},{"x":4,"y":16,"type":"DIRT"},{"x":5,"y":16,"type":"DIRT"},{"x":6,"y":16,"type":"DIRT"},{"x":7,"y":16,"type":"AIR"},{"x":8,"y":16,"type":"AIR"},{"x":9,"y":16,"type":"AIR"},{"x":10,"y":16,"type":"AIR"},{"x":11,"y":16,"type":"DIRT"},{"x":12,"y":16,"type":"DIRT"},{"x":13,"y":16,"type":"AIR"},{"x":14,"y":16,"type":"AIR"},{"x":15,"y":16,"type":"AIR"},{"x":16,"y":16,"type":"DIRT"},{"x":17,"y":16,"type":"AIR"},{"x":18,"y":16,"type":"AIR"},{"x":19,"y":16,"type":"AIR"},{"x":20,"y":16,"type":"DIRT"},{"x":21,"y":16,"type":"DIRT"},{"x":22,"y":16,"type":"AIR"},{"x":23,"y":16,"type":"AIR"},{"x":24,"y":16,"type":"AIR"},{"x":25,"y":16,"type":"AIR"},{"x":26,"y":16,"type":"DIRT"},{"x":27,"y":16,"type":"DIRT"},{"x":28,"y":16,"type":"DIRT"},{"x":29,"y":16,"type":"DIRT"},{"x":30,"y":16,"type":"AIR"},{"x":31,"y":16,"type":"AIR","occupier":{"id":3,"playerId":2,"health":100,"position":{"x":31,"y":16},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Technologist"}},{"x":32,"y":16,"type":"AIR"}],[{"x":0,"y":17,"type":"AIR"},{"x":1,"y":17,"type":"AIR"},{"x":2,"y":17,"type":"AIR"},{"x":3,"y":17,"type":"DIRT"},{"x":4,"y":17,"type":"DIRT"},{"x":5,"y":17,"type":"DIRT"},{"x":6,"y":17,"type":"DIRT"},{"x":7,"y":17,"type":"AIR"},{"x":8,"y":17,"type":"AIR"},{"x":9,"y":17,"type":"AIR"},{"x":10,"y":17,"type":"AIR"},{"x":11,"y":17,"type":"DIRT"},{"x":12,"y":17,"type":"DIRT"},{"x":13,"y":17,"type":"AIR"},{"x":14,"y":17,"type":"AIR"},{"x":15,"y":17,"type":"AIR"},{"x":16,"y":17,"type":"DIRT"},{"x":17,"y":17,"type":"AIR"},{"x":18,"y":17,"type":"AIR","powerup":{"type":"HEALTH_PACK","value":10}},{"x":19,"y":17,"type":"AIR"},{"x":20,"y":17,"type":"DIRT"},{"x":21,"y":17,"type":"DIRT"},{"x":22,"y":17,"type":"AIR"},{"x":23,"y":17,"type":"AIR"},{"x":24,"y":17,"type":"AIR"},{"x":25,"y":17,"type":"AIR"},{"x":26,"y":17,"type":"DIRT"},{"x":27,"y":17,"type":"DIRT"},{"x":28,"y":17,"type":"DIRT"},{"x":29,"y":17,"type":"DIRT"},{"x":30,"y":17,"type":"AIR"},{"x":31,"y":17,"type":"AIR"},{"x":32,"y":17,"type":"AIR"}],[{"x":0,"y":18,"type":"DIRT"},{"x":1,"y":18,"type":"DIRT"},{"x":2,"y":18,"type":"DIRT"},{"x":3,"y":18,"type":"DIRT"},{"x":4,"y":18,"type":"DIRT"},{"x":5,"y":18,"type":"DIRT"},{"x":6,"y":18,"type":"DIRT"},{"x":7,"y":18,"type":"AIR"},{"x":8,"y":18,"type":"AIR"},{"x":9,"y":18,"type":"AIR"},{"x":10,"y":18,"type":"DIRT"},{"x":11,"y":18,"type":"DIRT"},{"x":12,"y":18,"type":"DIRT"},{"x":13,"y":18,"type":"DIRT"},{"x":14,"y":18,"type":"DIRT"},{"x":15,"y":18,"type":"DIRT"},{"x":16,"y":18,"type":"DIRT"},{"x":17,"y":18,"type":"DIRT"},{"x":18,"y":18,"type":"DIRT"},{"x":19,"y":18,"type":"DIRT"},{"x":20,"y":18,"type":"DIRT"},{"x":21,"y":18,"type":"DIRT"},{"x":22,"y":18,"type":"DIRT"},{"x":23,"y":18,"type":"AIR"},{"x":24,"y":18,"type":"AIR"},{"x":25,"y":18,"type":"AIR"},{"x":26,"y":18,"type":"DIRT"},{"x":27,"y":18,"type":"DIRT"},{"x":28,"y":18,"type":"DIRT"},{"x":29,"y":18,"type":"DIRT"},{"x":30,"y":18,"type":"DIRT"},{"x":31,"y":18,"type":"DIRT"},{"x":32,"y":18,"type":"DIRT"}],[{"x":0,"y":19,"type":"AIR"},{"x":1,"y":19,"type":"AIR"},{"x":2,"y":19,"type":"AIR"},{"x":3,"y":19,"type":"DIRT"},{"x":4,"y":19,"type":"DIRT"},{"x":5,"y":19,"type":"AIR"},{"x":6,"y":19,"type":"AIR"},{"x":7,"y":19,"type":"DIRT"},{"x":8,"y":19,"type":"DIRT"},{"x":9,"y":19,"type":"AIR"},{"x":10,"y":19,"type":"AIR"},{"x":11,"y":19,"type":"DIRT"},{"x":12,"y":19,"type":"DIRT"},{"x":13,"y":19,"type":"AIR"},{"x":14,"y":19,"type":"AIR"},{"x":15,"y":19,"type":"AIR"},{"x":16,"y":19,"type":"DIRT"},{"x":17,"y":19,"type":"AIR"},{"x":18,"y":19,"type":"AIR"},{"x":19,"y":19,"type":"AIR"},{"x":20,"y":19,"type":"DIRT"},{"x":21,"y":19,"type":"DIRT"},{"x":22,"y":19,"type":"AIR"},{"x":23,"y":19,"type":"AIR"},{"x":24,"y":19,"type":"DIRT"},{"x":25,"y":19,"type":"DIRT"},{"x":26,"y":19,"type":"AIR"},{"x":27,"y":19,"type":"AIR"},{"x":28,"y":19,"type":"DIRT"},{"x":29,"y":19,"type":"DIRT"},{"x":30,"y":19,"type":"AIR"},{"x":31,"y":19,"type":"AIR"},{"x":32,"y":19,"type":"AIR"}],[{"x":0,"y":20,"type":"DIRT"},{"x":1,"y":20,"type":"AIR"},{"x":2,"y":20,"type":"AIR"},{"x":3,"y":20,"type":"AIR"},{"x":4,"y":20,"type":"AIR"},{"x":5,"y":20,"type":"AIR"},{"x":6,"y":20,"type":"AIR"},{"x":7,"y":20,"type":"DIRT"},{"x":8,"y":20,"type":"DIRT"},{"x":9,"y":20,"type":"AIR"},{"x":10,"y":20,"type":"AIR"},{"x":11,"y":20,"type":"AIR"},{"x":12,"y":20,"type":"AIR"},{"x":13,"y":20,"type":"AIR"},{"x":14,"y":20,"type":"AIR"},{"x":15,"y":20,"type":"AIR"},{"x":16,"y":20,"type":"DIRT"},{"x":17,"y":20,"type":"AIR"},{"x":18,"y":20,"type":"AIR"},{"x":19,"y":20,"type":"AIR"},{"x":20,"y":20,"type":"AIR"},{"x":21,"y":20,"type":"AIR"},{"x":22,"y":20,"type":"AIR"},{"x":23,"y":20,"type":"AIR"},{"x":24,"y":20,"type":"DIRT"},{"x":25,"y":20,"type":"DIRT"},{"x":26,"y":20,"type":"AIR"},{"x":27,"y":20,"type":"AIR"},{"x":28,"y":20,"type":"AIR"},{"x":29,"y":20,"type":"AIR"},{"x":30,"y":20,"type":"AIR"},{"x":31,"y":20,"type":"AIR"},{"x":32,"y":20,"type":"DIRT"}],[{"x":0,"y":21,"type":"AIR"},{"x":1,"y":21,"type":"AIR"},{"x":2,"y":21,"type":"AIR"},{"x":3,"y":21,"type":"AIR"},{"x":4,"y":21,"type":"AIR"},{"x":5,"y":21,"type":"AIR"},{"x":6,"y":21,"type":"AIR"},{"x":7,"y":21,"type":"AIR"},{"x":8,"y":21,"type":"DIRT"},{"x":9,"y":21,"type":"DIRT"},{"x":10,"y":21,"type":"DIRT"},{"x":11,"y":21,"type":"AIR"},{"x":12,"y":21,"type":"AIR"},{"x":13,"y":21,"type":"DIRT"},{"x":14,"y":21,"type":"DIRT"},{"x":15,"y":21,"type":"AIR"},{"x":16,"y":21,"type":"AIR"},{"x":17,"y":21,"type":"AIR"},{"x":18,"y":21,"type":"DIRT"},{"x":19,"y":21,"type":"DIRT"},{"x":20,"y":21,"type":"AIR"},{"x":21,"y":21,"type":"AIR"},{"x":22,"y":21,"type":"DIRT"},{"x":23,"y":21,"type":"DIRT"},{"x":24,"y":21,"type":"DIRT"},{"x":25,"y":21,"type":"AIR"},{"x":26,"y":21,"type":"AIR"},{"x":27,"y":21,"type":"AIR"},{"x":28,"y":21,"type":"AIR"},{"x":29,"y":21,"type":"AIR"},{"x":30,"y":21,"type":"AIR"},{"x":31,"y":21,"type":"AIR"},{"x":32,"y":21,"type":"AIR"}],[{"x":0,"y":22,"type":"DEEP_SPACE"},{"x":1,"y":22,"type":"AIR"},{"x":2,"y":22,"type":"DIRT"},{"x":3,"y":22,"type":"DIRT"},{"x":4,"y":22,"type":"AIR"},{"x":5,"y":22,"type":"AIR"},{"x":6,"y":22,"type":"AIR"},{"x":7,"y":22,"type":"AIR"},{"x":8,"y":22,"type":"AIR"},{"x":9,"y":22,"type":"DIRT"},{"x":10,"y":22,"type":"DIRT"},{"x":11,"y":22,"type":"DIRT"},{"x":12,"y":22,"type":"AIR"},{"x":13,"y":22,"type":"DIRT"},{"x":14,"y":22,"type":"DIRT"},{"x":15,"y":22,"type":"AIR"},{"x":16,"y":22,"type":"AIR"},{"x":17,"y":22,"type":"AIR"},{"x":18,"y":22,"type":"DIRT"},{"x":19,"y":22,"type":"DIRT"},{"x":20,"y":22,"type":"AIR"},{"x":21,"y":22,"type":"DIRT"},{"x":22,"y":22,"type":"DIRT"},{"x":23,"y":22,"type":"DIRT"},{"x":24,"y":22,"type":"AIR"},{"x":25,"y":22,"type":"AIR"},{"x":26,"y":22,"type":"AIR"},{"x":27,"y":22,"type":"AIR"},{"x":28,"y":22,"type":"AIR"},{"x":29,"y":22,"type":"DIRT"},{"x":30,"y":22,"type":"DIRT"},{"x":31,"y":22,"type":"AIR"},{"x":32,"y":22,"type":"DEEP_SPACE"}],[{"x":0,"y":23,"type":"DEEP_SPACE"},{"x":1,"y":23,"type":"AIR"},{"x":2,"y":23,"type":"DIRT"},{"x":3,"y":23,"type":"DIRT"},{"x":4,"y":23,"type":"AIR"},{"x":5,"y":23,"type":"AIR"},{"x":6,"y":23,"type":"AIR"},{"x":7,"y":23,"type":"AIR"},{"x":8,"y":23,"type":"AIR"},{"x":9,"y":23,"type":"DIRT"},{"x":10,"y":23,"type":"DIRT"},{"x":11,"y":23,"type":"DIRT"},{"x":12,"y":23,"type":"AIR"},{"x":13,"y":23,"type":"DIRT"},{"x":14,"y":23,"type":"DIRT"},{"x":15,"y":23,"type":"AIR"},{"x":16,"y":23,"type":"DIRT"},{"x":17,"y":23,"type":"AIR"},{"x":18,"y":23,"type":"DIRT"},{"x":19,"y":23,"type":"DIRT"},{"x":20,"y":23,"type":"AIR"},{"x":21,"y":23,"type":"DIRT"},{"x":22,"y":23,"type":"DIRT"},{"x":23,"y":23,"type":"DIRT"},{"x":24,"y":23,"type":"AIR"},{"x":25,"y":23,"type":"AIR"},{"x":26,"y":23,"type":"AIR"},{"x":27,"y":23,"type":"AIR"},{"x":28,"y":23,"type":"AIR"},{"x":29,"y":23,"type":"DIRT"},{"x":30,"y":23,"type":"DIRT"},{"x":31,"y":23,"type":"AIR"},{"x":32,"y":23,"type":"DEEP_SPACE"}],[{"x":0,"y":24,"type":"DEEP_SPACE"},{"x":1,"y":24,"type":"AIR"},{"x":2,"y":24,"type":"DIRT"},{"x":3,"y":24,"type":"DIRT"},{"x":4,"y":24,"type":"AIR"},{"x":5,"y":24,"type":"AIR"},{"x":6,"y":24,"type":"DIRT"},{"x":7,"y":24,"type":"AIR"},{"x":8,"y":24,"type":"AIR"},{"x":9,"y":24,"type":"AIR"},{"x":10,"y":24,"type":"AIR"},{"x":11,"y":24,"type":"AIR"},{"x":12,"y":24,"type":"AIR"},{"x":13,"y":24,"type":"AIR"},{"x":14,"y":24,"type":"AIR"},{"x":15,"y":24,"type":"AIR"},{"x":16,"y":24,"type":"DIRT"},{"x":17,"y":24,"type":"AIR"},{"x":18,"y":24,"type":"AIR"},{"x":19,"y":24,"type":"AIR"},{"x":20,"y":24,"type":"AIR"},{"x":21,"y":24,"type":"AIR"},{"x":22,"y":24,"type":"AIR"},{"x":23,"y":24,"type":"AIR"},{"x":24,"y":24,"type":"AIR"},{"x":25,"y":24,"type":"AIR"},{"x":26,"y":24,"type":"DIRT"},{"x":27,"y":24,"type":"AIR"},{"x":28,"y":24,"type":"AIR"},{"x":29,"y":24,"type":"DIRT"},{"x":30,"y":24,"type":"DIRT"},{"x":31,"y":24,"type":"AIR"},{"x":32,"y":24,"type":"DEEP_SPACE"}],[{"x":0,"y":25,"type":"DEEP_SPACE"},{"x":1,"y":25,"type":"DEEP_SPACE"},{"x":2,"y":25,"type":"AIR"},{"x":3,"y":25,"type":"AIR"},{"x":4,"y":25,"type":"DIRT"},{"x":5,"y":25,"type":"AIR"},{"x":6,"y":25,"type":"AIR"},{"x":7,"y":25,"type":"AIR"},{"x":8,"y":25,"type":"AIR"},{"x":9,"y":25,"type":"AIR"},{"x":10,"y":25,"type":"AIR"},{"x":11,"y":25,"type":"AIR"},{"x":12,"y":25,"type":"AIR"},{"x":13,"y":25,"type":"AIR"},{"x":14,"y":25,"type":"AIR"},{"x":15,"y":25,"type":"AIR"},{"x":16,"y":25,"type":"DIRT"},{"x":17,"y":25,"type":"AIR"},{"x":18,"y":25,"type":"AIR"},{"x":19,"y":25,"type":"AIR"},{"x":20,"y":25,"type":"AIR"},{"x":21,"y":25,"type":"AIR"},{"x":22,"y":25,"type":"AIR"},{"x":23,"y":25,"type":"AIR"},{"x":24,"y":25,"type":"AIR"},{"x":25,"y":25,"type":"AIR"},{"x":26,"y":25,"type":"AIR"},{"x":27,"y":25,"type":"AIR"},{"x":28,"y":25,"type":"DIRT"},{"x":29,"y":25,"type":"AIR"},{"x":30,"y":25,"type":"AIR"},{"x":31,"y":25,"type":"DEEP_SPACE"},{"x":32,"y":25,"type":"DEEP_SPACE"}],[{"x":0,"y":26,"type":"DEEP_SPACE"},{"x":1,"y":26,"type":"DEEP_SPACE"},{"x":2,"y":26,"type":"DEEP_SPACE"},{"x":3,"y":26,"type":"AIR"},{"x":4,"y":26,"type":"AIR"},{"x":5,"y":26,"type":"AIR"},{"x":6,"y":26,"type":"DIRT"},{"x":7,"y":26,"type":"DIRT"},{"x":8,"y":26,"type":"DIRT"},{"x":9,"y":26,"type":"DIRT"},{"x":10,"y":26,"type":"DIRT"},{"x":11,"y":26,"type":"AIR"},{"x":12,"y":26,"type":"DIRT"},{"x":13,"y":26,"type":"DIRT"},{"x":14,"y":26,"type":"DIRT"},{"x":15,"y":26,"type":"AIR"},{"x":16,"y":26,"type":"DIRT"},{"x":17,"y":26,"type":"AIR"},{"x":18,"y":26,"type":"DIRT"},{"x":19,"y":26,"type":"DIRT"},{"x":20,"y":26,"type":"DIRT"},{"x":21,"y":26,"type":"AIR"},{"x":22,"y":26,"type":"DIRT"},{"x":23,"y":26,"type":"DIRT"},{"x":24,"y":26,"type":"DIRT"},{"x":25,"y":26,"type":"DIRT"},{"x":26,"y":26,"type":"DIRT"},{"x":27,"y":26,"type":"AIR"},{"x":28,"y":26,"type":"AIR"},{"x":29,"y":26,"type":"AIR"},{"x":30,"y":26,"type":"DEEP_SPACE"},{"x":31,"y":26,"type":"DEEP_SPACE"},{"x":32,"y":26,"type":"DEEP_SPACE"}],[{"x":0,"y":27,"type":"DEEP_SPACE"},{"x":1,"y":27,"type":"DEEP_SPACE"},{"x":2,"y":27,"type":"DEEP_SPACE"},{"x":3,"y":27,"type":"DEEP_SPACE"},{"x":4,"y":27,"type":"AIR"},{"x":5,"y":27,"type":"AIR"},{"x":6,"y":27,"type":"DIRT"},{"x":7,"y":27,"type":"AIR"},{"x":8,"y":27,"type":"AIR"},{"x":9,"y":27,"type":"AIR"},{"x":10,"y":27,"type":"DIRT"},{"x":11,"y":27,"type":"DIRT"},{"x":12,"y":27,"type":"DIRT"},{"x":13,"y":27,"type":"DIRT"},{"x":14,"y":27,"type":"DIRT"},{"x":15,"y":27,"type":"AIR"},{"x":16,"y":27,"type":"AIR"},{"x":17,"y":27,"type":"AIR"},{"x":18,"y":27,"type":"DIRT"},{"x":19,"y":27,"type":"DIRT"},{"x":20,"y":27,"type":"DIRT"},{"x":21,"y":27,"type":"DIRT"},{"x":22,"y":27,"type":"DIRT"},{"x":23,"y":27,"type":"AIR"},{"x":24,"y":27,"type":"AIR"},{"x":25,"y":27,"type":"AIR"},{"x":26,"y":27,"type":"DIRT"},{"x":27,"y":27,"type":"AIR"},{"x":28,"y":27,"type":"AIR"},{"x":29,"y":27,"type":"DEEP_SPACE"},{"x":30,"y":27,"type":"DEEP_SPACE"},{"x":31,"y":27,"type":"DEEP_SPACE"},{"x":32,"y":27,"type":"DEEP_SPACE"}],[{"x":0,"y":28,"type":"DEEP_SPACE"},{"x":1,"y":28,"type":"DEEP_SPACE"},{"x":2,"y":28,"type":"DEEP_SPACE"},{"x":3,"y":28,"type":"DEEP_SPACE"},{"x":4,"y":28,"type":"DIRT"},{"x":5,"y":28,"type":"DIRT"},{"x":6,"y":28,"type":"DIRT"},{"x":7,"y":28,"type":"AIR"},{"x":8,"y":28,"type":"AIR","occupier":{"id":1,"playerId":2,"health":150,"position":{"x":8,"y":28},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Commando"}},{"x":9,"y":28,"type":"AIR"},{"x":10,"y":28,"type":"DIRT"},{"x":11,"y":28,"type":"AIR"},{"x":12,"y":28,"type":"AIR"},{"x":13,"y":28,"type":"DIRT"},{"x":14,"y":28,"type":"AIR"},{"x":15,"y":28,"type":"AIR"},{"x":16,"y":28,"type":"AIR"},{"x":17,"y":28,"type":"AIR"},{"x":18,"y":28,"type":"AIR"},{"x":19,"y":28,"type":"DIRT"},{"x":20,"y":28,"type":"AIR"},{"x":21,"y":28,"type":"AIR"},{"x":22,"y":28,"type":"DIRT"},{"x":23,"y":28,"type":"AIR"},{"x":24,"y":28,"type":"AIR","occupier":{"id":2,"playerId":1,"health":100,"position":{"x":24,"y":28},"weapon":{"damage":8,"range":4},"bananaBombs":{"damage":20,"range":5,"count":3,"damageRadius":2},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Agent"}},{"x":25,"y":28,"type":"AIR"},{"x":26,"y":28,"type":"DIRT"},{"x":27,"y":28,"type":"DIRT"},{"x":28,"y":28,"type":"DIRT"},{"x":29,"y":28,"type":"DEEP_SPACE"},{"x":30,"y":28,"type":"DEEP_SPACE"},{"x":31,"y":28,"type":"DEEP_SPACE"},{"x":32,"y":28,"type":"DEEP_SPACE"}],[{"x":0,"y":29,"type":"DEEP_SPACE"},{"x":1,"y":29,"type":"DEEP_SPACE"},{"x":2,"y":29,"type":"DEEP_SPACE"},{"x":3,"y":29,"type":"DEEP_SPACE"},{"x":4,"y":29,"type":"DEEP_SPACE"},{"x":5,"y":29,"type":"DEEP_SPACE"},{"x":6,"y":29,"type":"DIRT"},{"x":7,"y":29,"type":"AIR"},{"x":8,"y":29,"type":"AIR"},{"x":9,"y":29,"type":"AIR"},{"x":10,"y":29,"type":"DIRT"},{"x":11,"y":29,"type":"AIR"},{"x":12,"y":29,"type":"DIRT"},{"x":13,"y":29,"type":"DIRT"},{"x":14,"y":29,"type":"DIRT"},{"x":15,"y":29,"type":"AIR"},{"x":16,"y":29,"type":"DIRT"},{"x":17,"y":29,"type":"AIR"},{"x":18,"y":29,"type":"DIRT"},{"x":19,"y":29,"type":"DIRT"},{"x":20,"y":29,"type":"DIRT"},{"x":21,"y":29,"type":"AIR"},{"x":22,"y":29,"type":"DIRT"},{"x":23,"y":29,"type":"AIR"},{"x":24,"y":29,"type":"AIR"},{"x":25,"y":29,"type":"AIR"},{"x":26,"y":29,"type":"DIRT"},{"x":27,"y":29,"type":"DEEP_SPACE"},{"x":28,"y":29,"type":"DEEP_SPACE"},{"x":29,"y":29,"type":"DEEP_SPACE"},{"x":30,"y":29,"type":"DEEP_SPACE"},{"x":31,"y":29,"type":"DEEP_SPACE"},{"x":32,"y":29,"type":"DEEP_SPACE"}],[{"x":0,"y":30,"type":"DEEP_SPACE"},{"x":1,"y":30,"type":"DEEP_SPACE"},{"x":2,"y":30,"type":"DEEP_SPACE"},{"x":3,"y":30,"type":"DEEP_SPACE"},{"x":4,"y":30,"type":"DEEP_SPACE"},{"x":5,"y":30,"type":"DEEP_SPACE"},{"x":6,"y":30,"type":"DEEP_SPACE"},{"x":7,"y":30,"type":"DIRT"},{"x":8,"y":30,"type":"DIRT"},{"x":9,"y":30,"type":"DIRT"},{"x":10,"y":30,"type":"DIRT"},{"x":11,"y":30,"type":"DIRT"},{"x":12,"y":30,"type":"DIRT"},{"x":13,"y":30,"type":"DIRT"},{"x":14,"y":30,"type":"AIR"},{"x":15,"y":30,"type":"DIRT"},{"x":16,"y":30,"type":"DIRT"},{"x":17,"y":30,"type":"DIRT"},{"x":18,"y":30,"type":"AIR"},{"x":19,"y":30,"type":"DIRT"},{"x":20,"y":30,"type":"DIRT"},{"x":21,"y":30,"type":"DIRT"},{"x":22,"y":30,"type":"DIRT"},{"x":23,"y":30,"type":"DIRT"},{"x":24,"y":30,"type":"DIRT"},{"x":25,"y":30,"type":"DIRT"},{"x":26,"y":30,"type":"DEEP_SPACE"},{"x":27,"y":30,"type":"DEEP_SPACE"},{"x":28,"y":30,"type":"DEEP_SPACE"},{"x":29,"y":30,"type":"DEEP_SPACE"},{"x":30,"y":30,"type":"DEEP_SPACE"},{"x":31,"y":30,"type":"DEEP_SPACE"},{"x":32,"y":30,"type":"DEEP_SPACE"}],[{"x":0,"y":31,"type":"DEEP_SPACE"},{"x":1,"y":31,"type":"DEEP_SPACE"},{"x":2,"y":31,"type":"DEEP_SPACE"},{"x":3,"y":31,"type":"DEEP_SPACE"},{"x":4,"y":31,"type":"DEEP_SPACE"},{"x":5,"y":31,"type":"DEEP_SPACE"},{"x":6,"y":31,"type":"DEEP_SPACE"},{"x":7,"y":31,"type":"DEEP_SPACE"},{"x":8,"y":31,"type":"AIR"},{"x":9,"y":31,"type":"AIR"},{"x":10,"y":31,"type":"AIR"},{"x":11,"y":31,"type":"AIR"},{"x":12,"y":31,"type":"DIRT"},{"x":13,"y":31,"type":"AIR"},{"x":14,"y":31,"type":"AIR"},{"x":15,"y":31,"type":"DIRT"},{"x":16,"y":31,"type":"DIRT"},{"x":17,"y":31,"type":"DIRT"},{"x":18,"y":31,"type":"AIR"},{"x":19,"y":31,"type":"AIR"},{"x":20,"y":31,"type":"DIRT"},{"x":21,"y":31,"type":"AIR"},{"x":22,"y":31,"type":"AIR"},{"x":23,"y":31,"type":"AIR"},{"x":24,"y":31,"type":"AIR"},{"x":25,"y":31,"type":"DEEP_SPACE"},{"x":26,"y":31,"type":"DEEP_SPACE"},{"x":27,"y":31,"type":"DEEP_SPACE"},{"x":28,"y":31,"type":"DEEP_SPACE"},{"x":29,"y":31,"type":"DEEP_SPACE"},{"x":30,"y":31,"type":"DEEP_SPACE"},{"x":31,"y":31,"type":"DEEP_SPACE"},{"x":32,"y":31,"type":"DEEP_SPACE"}],[{"x":0,"y":32,"type":"DEEP_SPACE"},{"x":1,"y":32,"type":"DEEP_SPACE"},{"x":2,"y":32,"type":"DEEP_SPACE"},{"x":3,"y":32,"type":"DEEP_SPACE"},{"x":4,"y":32,"type":"DEEP_SPACE"},{"x":5,"y":32,"type":"DEEP_SPACE"},{"x":6,"y":32,"type":"DEEP_SPACE"},{"x":7,"y":32,"type":"DEEP_SPACE"},{"x":8,"y":32,"type":"DEEP_SPACE"},{"x":9,"y":32,"type":"DEEP_SPACE"},{"x":10,"y":32,"type":"DEEP_SPACE"},{"x":11,"y":32,"type":"AIR"},{"x":12,"y":32,"type":"DIRT"},{"x":13,"y":32,"type":"DIRT"},{"x":14,"y":32,"type":"DIRT"},{"x":15,"y":32,"type":"DIRT"},{"x":16,"y":32,"type":"DIRT"},{"x":17,"y":32,"type":"DIRT"},{"x":18,"y":32,"type":"DIRT"},{"x":19,"y":32,"type":"DIRT"},{"x":20,"y":32,"type":"DIRT"},{"x":21,"y":32,"type":"AIR"},{"x":22,"y":32,"type":"DEEP_SPACE"},{"x":23,"y":32,"type":"DEEP_SPACE"},{"x":24,"y":32,"type":"DEEP_SPACE"},{"x":25,"y":32,"type":"DEEP_SPACE"},{"x":26,"y":32,"type":"DEEP_SPACE"},{"x":27,"y":32,"type":"DEEP_SPACE"},{"x":28,"y":32,"type":"DEEP_SPACE"},{"x":29,"y":32,"type":"DEEP_SPACE"},{"x":30,"y":32,"type":"DEEP_SPACE"},{"x":31,"y":32,"type":"DEEP_SPACE"},{"x":32,"y":32,"type":"DEEP_SPACE"}]],"visualizerEvents":[]} \ No newline at end of file
diff --git a/2019-worms/tests/replays/2019.08.19.21.31.16/A-log.csv b/2019-worms/tests/replays/2019.08.19.21.31.16/A-log.csv
new file mode 100644
index 0000000..14e4b3c
--- /dev/null
+++ b/2019-worms/tests/replays/2019.08.19.21.31.16/A-log.csv
@@ -0,0 +1,274 @@
+Round,LastCommandType,LastCommand,ActiveWorm,Score,Health,Worm1 Health,Worm1 x,Worm1 y,Worm2 Health,Worm2 x,Worm2 y,Worm3 Health,Worm3 x,Worm3 y
+1,null,"null",1,116,350,150,24,4,100,24,28,100,1,16
+2,move,"move 23 3",1,121,350,150,23,3,100,24,28,100,1,16
+3,move,"move 23 28",2,126,350,150,23,3,100,23,28,100,1,16
+4,move,"move 2 16",3,131,350,150,23,3,100,23,28,100,2,16
+5,dig,"dig 22 3",1,138,350,150,23,3,100,23,28,100,2,16
+6,dig,"dig 22 28",2,145,350,150,23,3,100,23,28,100,2,16
+7,dig,"dig 3 16",3,152,350,150,23,3,100,23,28,100,2,16
+8,move,"move 22 3",1,157,350,150,22,3,100,23,28,100,2,16
+9,move,"move 22 28",2,162,350,150,22,3,100,22,28,100,2,16
+10,move,"move 2 15",3,167,350,150,22,3,100,22,28,100,2,15
+11,move,"move 23 3",1,172,350,150,23,3,100,22,28,100,2,15
+12,move,"move 23 28",2,177,350,150,23,3,100,23,28,100,2,15
+13,move,"move 2 16",3,182,350,150,23,3,100,23,28,100,2,16
+14,move,"move 22 3",1,187,350,150,22,3,100,23,28,100,2,16
+15,move,"move 22 28",2,192,350,150,22,3,100,22,28,100,2,16
+16,move,"move 2 15",3,197,350,150,22,3,100,22,28,100,2,15
+17,move,"move 23 3",1,202,350,150,23,3,100,22,28,100,2,15
+18,move,"move 23 28",2,207,350,150,23,3,100,23,28,100,2,15
+19,move,"move 2 16",3,212,350,150,23,3,100,23,28,100,2,16
+20,move,"move 22 3",1,217,350,150,22,3,100,23,28,100,2,16
+21,move,"move 22 28",2,222,350,150,22,3,100,22,28,100,2,16
+22,move,"move 2 15",3,227,350,150,22,3,100,22,28,100,2,15
+23,move,"move 23 3",1,232,350,150,23,3,100,22,28,100,2,15
+24,move,"move 23 28",2,237,350,150,23,3,100,23,28,100,2,15
+25,move,"move 2 16",3,242,350,150,23,3,100,23,28,100,2,16
+26,move,"move 22 3",1,247,350,150,22,3,100,23,28,100,2,16
+27,move,"move 22 28",2,252,350,150,22,3,100,22,28,100,2,16
+28,move,"move 2 15",3,257,350,150,22,3,100,22,28,100,2,15
+29,move,"move 23 3",1,262,350,150,23,3,100,22,28,100,2,15
+30,move,"move 23 28",2,267,350,150,23,3,100,23,28,100,2,15
+31,move,"move 2 16",3,272,350,150,23,3,100,23,28,100,2,16
+32,move,"move 22 3",1,277,350,150,22,3,100,23,28,100,2,16
+33,move,"move 22 28",2,282,350,150,22,3,100,22,28,100,2,16
+34,move,"move 2 15",3,287,350,150,22,3,100,22,28,100,2,15
+35,move,"move 23 3",1,292,350,150,23,3,100,22,28,100,2,15
+36,move,"move 23 28",2,297,350,150,23,3,100,23,28,100,2,15
+37,move,"move 2 16",3,302,350,150,23,3,100,23,28,100,2,16
+38,move,"move 22 3",1,307,350,150,22,3,100,23,28,100,2,16
+39,move,"move 22 28",2,312,350,150,22,3,100,22,28,100,2,16
+40,move,"move 2 15",3,317,350,150,22,3,100,22,28,100,2,15
+41,move,"move 23 3",1,322,350,150,23,3,100,22,28,100,2,15
+42,move,"move 23 28",2,327,350,150,23,3,100,23,28,100,2,15
+43,move,"move 1 16",3,332,350,150,23,3,100,23,28,100,1,16
+44,dig,"dig 22 2",1,339,350,150,23,3,100,23,28,100,1,16
+45,move,"move 23 27",2,344,350,150,23,3,100,23,27,100,1,16
+46,move,"move 1 15",3,349,350,150,23,3,100,23,27,100,1,15
+47,dig,"dig 22 4",1,356,350,150,23,3,100,23,27,100,1,15
+48,move,"move 22 28",2,361,350,150,23,3,100,22,28,100,1,15
+49,move,"move 2 16",3,366,350,150,23,3,100,22,28,100,2,16
+50,move,"move 22 3",1,371,350,150,22,3,100,22,28,100,2,16
+51,move,"move 23 28",2,376,350,150,22,3,100,23,28,100,2,16
+52,move,"move 2 15",3,381,350,150,22,3,100,23,28,100,2,15
+53,move,"move 23 3",1,386,350,150,23,3,100,23,28,100,2,15
+54,move,"move 22 28",2,391,350,150,23,3,100,22,28,100,2,15
+55,move,"move 2 16",3,396,350,150,23,3,100,22,28,100,2,16
+56,move,"move 22 3",1,401,350,150,22,3,100,22,28,100,2,16
+57,move,"move 23 28",2,406,350,150,22,3,100,23,28,100,2,16
+58,move,"move 2 15",3,411,350,150,22,3,100,23,28,100,2,15
+59,move,"move 23 3",1,416,350,150,23,3,100,23,28,100,2,15
+60,move,"move 22 28",2,421,350,150,23,3,100,22,28,100,2,15
+61,move,"move 2 16",3,426,350,150,23,3,100,22,28,100,2,16
+62,move,"move 22 3",1,431,350,150,22,3,100,22,28,100,2,16
+63,move,"move 23 28",2,436,350,150,22,3,100,23,28,100,2,16
+64,nothing,"nothing "Player chose to do nothing"",3,436,350,150,22,3,100,23,28,100,2,16
+65,move,"move 23 3",1,441,350,150,23,3,100,23,28,100,2,16
+66,move,"move 24 29",2,446,350,150,23,3,100,24,29,100,2,16
+67,move,"move 1 17",3,451,350,150,23,3,100,24,29,100,1,17
+68,move,"move 24 3",1,456,350,150,24,3,100,24,29,100,1,17
+69,dig,"dig 24 30",2,463,350,150,24,3,100,24,29,100,1,17
+70,dig,"dig 1 18",3,470,350,150,24,3,100,24,29,100,1,17
+71,move,"move 23 3",1,475,350,150,23,3,100,24,29,100,1,17
+72,move,"move 25 28",2,480,350,150,23,3,100,25,28,100,1,17
+73,move,"move 1 18",3,485,350,150,23,3,100,25,28,100,1,18
+74,move,"move 22 2",1,490,350,150,22,2,100,25,28,100,1,18
+75,dig,"dig 26 29",2,497,350,150,22,2,100,25,28,100,1,18
+76,move,"move 0 19",3,502,350,150,22,2,100,25,28,100,0,19
+77,nothing,"nothing "Player chose to do nothing"",1,502,350,150,22,2,100,25,28,100,0,19
+78,move,"move 24 29",2,507,350,150,22,2,100,24,29,100,0,19
+79,nothing,"nothing "Player chose to do nothing"",3,507,350,150,22,2,100,24,29,100,0,19
+80,dig,"dig 21 1",1,514,350,150,22,2,100,24,29,100,0,19
+81,move,"move 23 28",2,519,350,150,22,2,100,23,28,100,0,19
+82,dig,"dig 0 20",3,526,350,150,22,2,100,23,28,100,0,19
+83,move,"move 21 1",1,531,350,150,21,1,100,23,28,100,0,19
+84,move,"move 24 27",2,536,350,150,21,1,100,24,27,100,0,19
+85,dig,"dig 0 18",3,543,350,150,21,1,100,24,27,100,0,19
+86,nothing,"nothing "Player chose to do nothing"",1,543,350,150,21,1,100,24,27,100,0,19
+87,dig,"dig 23 26",2,550,350,150,21,1,100,24,27,100,0,19
+88,move,"move 0 20",3,555,350,150,21,1,100,24,27,100,0,20
+89,nothing,"nothing "Player chose to do nothing"",1,555,350,150,21,1,100,24,27,100,0,20
+90,move,"move 24 28",2,560,350,150,21,1,100,24,28,100,0,20
+91,move,"move 1 21",3,565,350,150,21,1,100,24,28,100,1,21
+92,dig,"dig 22 1",1,572,350,150,21,1,100,24,28,100,1,21
+93,move,"move 23 28",2,577,350,150,21,1,100,23,28,100,1,21
+94,move,"move 1 22",3,582,350,150,21,1,100,23,28,100,1,22
+95,dig,"dig 20 2",1,589,350,150,21,1,100,23,28,100,1,22
+96,dig,"dig 22 29",2,596,350,150,21,1,100,23,28,100,1,22
+97,dig,"dig 2 23",3,603,350,150,21,1,100,23,28,100,1,22
+98,dig,"dig 21 2",1,610,350,150,21,1,100,23,28,100,1,22
+99,shoot,"shoot S",1,620,330,130,21,1,100,23,28,100,1,22
+100,shoot,"shoot S",1,633,322,122,21,1,100,23,28,100,1,22
+101,shoot,"shoot S",1,641,299,102,21,1,100,23,28,97,1,22
+102,shoot,"shoot S",1,654,288,94,21,1,100,23,28,94,1,22
+103,shoot,"shoot S",1,662,265,74,21,1,100,23,28,91,1,22
+104,move,"move 22 28",2,662,251,63,21,1,100,22,28,88,1,22
+105,move,"move 2 21",3,663,237,52,21,1,100,22,28,85,2,21
+106,move,"move 22 2",1,667,234,49,22,2,100,22,28,85,2,21
+107,move,"move 23 29",2,672,234,49,22,2,100,23,29,85,2,21
+108,move,"move 3 21",3,677,234,49,22,2,100,23,29,85,3,21
+109,shoot,"shoot S",1,693,234,49,22,2,100,23,29,85,3,21
+110,move,"move 22 28",2,698,234,49,22,2,100,22,28,85,3,21
+111,move,"move 3 20",3,703,234,49,22,2,100,22,28,85,3,20
+112,move,"move 21 2",1,703,234,49,22,2,100,22,28,85,3,20
+113,dig,"dig 22 27",2,710,234,49,22,2,100,22,28,85,3,20
+114,move,"move 4 21",3,714,231,46,22,2,100,22,28,85,4,21
+115,move,"move 21 2",1,713,228,43,22,2,100,22,28,85,4,21
+116,dig,"dig 21 27",2,719,225,40,22,2,100,22,28,85,4,21
+117,move,"move 5 22",3,723,222,37,22,2,100,22,28,85,5,22
+118,shoot,"shoot S",1,722,219,34,22,2,100,22,28,85,5,22
+119,move,"move 21 27",2,726,216,31,22,2,100,21,27,85,5,22
+120,move,"move 6 22",3,730,213,28,22,2,100,21,27,85,6,22
+121,move,"move 21 3",1,729,210,25,22,2,100,21,27,85,6,22
+122,dig,"dig 22 26",2,735,207,22,22,2,100,21,27,85,6,22
+123,move,"move 5 22",3,739,204,19,22,2,100,21,27,85,5,22
+124,move,"move 21 3",1,738,201,16,22,2,100,21,27,85,5,22
+125,nothing,"nothing "Player chose to do nothing"",2,737,198,13,22,2,100,21,27,85,5,22
+126,move,"move 6 21",3,741,195,10,22,2,100,21,27,85,6,21
+127,move,"move 23 3",1,740,192,7,22,2,100,21,27,85,6,21
+128,move,"move 22 26",2,744,189,4,22,2,100,22,26,85,6,21
+129,nothing,"nothing "Player chose to do nothing"",3,743,186,1,22,2,100,22,26,85,6,21
+130,shoot,"shoot S",1,758,185,-10,22,2,100,22,26,85,6,21
+131,move,"move 21 26",2,763,185,-10,22,2,100,21,26,85,6,21
+132,dig,"dig 7 20",3,770,185,-10,22,2,100,21,26,85,6,21
+133,dig,"dig 20 27",2,777,185,-10,22,2,100,21,26,85,6,21
+134,move,"move 5 20",3,782,185,-10,22,2,100,21,26,85,5,20
+135,move,"move 21 25",2,787,185,-10,22,2,100,21,25,85,5,20
+136,move,"move 4 20",3,792,185,-10,22,2,100,21,25,85,4,20
+137,move,"move 20 25",2,797,185,-10,22,2,100,20,25,85,4,20
+138,nothing,"nothing "Player chose to do nothing"",3,797,185,-10,22,2,100,20,25,85,4,20
+139,dig,"dig 19 26",2,804,185,-10,22,2,100,20,25,85,4,20
+140,nothing,"nothing "Player chose to do nothing"",3,804,185,-10,22,2,100,20,25,85,4,20
+141,move,"move 21 25",2,809,185,-10,22,2,100,21,25,85,4,20
+142,nothing,"nothing "Player chose to do nothing"",3,809,185,-10,22,2,100,21,25,85,4,20
+143,move,"move 21 26",2,814,185,-10,22,2,100,21,26,85,4,20
+144,move,"move 5 20",3,819,185,-10,22,2,100,21,26,85,5,20
+145,move,"move 20 27",2,824,185,-10,22,2,100,20,27,85,5,20
+146,move,"move 6 21",3,829,185,-10,22,2,100,20,27,85,6,21
+147,dig,"dig 20 26",2,836,185,-10,22,2,100,20,27,85,6,21
+148,move,"move 5 22",3,841,185,-10,22,2,100,20,27,85,5,22
+149,move,"move 19 26",2,846,185,-10,22,2,100,19,26,85,5,22
+150,move,"move 6 22",3,851,185,-10,22,2,100,19,26,85,6,22
+151,dig,"dig 19 27",2,858,185,-10,22,2,100,19,26,85,6,22
+152,move,"move 7 21",3,863,185,-10,22,2,100,19,26,85,7,21
+153,move,"move 20 25",2,868,185,-10,22,2,100,20,25,85,7,21
+154,move,"move 6 22",3,873,185,-10,22,2,100,20,25,85,6,22
+155,move,"move 19 24",2,878,185,-10,22,2,100,19,24,85,6,22
+156,move,"move 5 21",3,883,185,-10,22,2,100,19,24,85,5,21
+157,nothing,"nothing "Player chose to do nothing"",2,883,185,-10,22,2,100,19,24,85,5,21
+158,move,"move 6 20",3,888,185,-10,22,2,100,19,24,85,6,20
+159,dig,"dig 18 23",2,895,185,-10,22,2,100,19,24,85,6,20
+160,move,"move 5 21",3,900,185,-10,22,2,100,19,24,85,5,21
+161,move,"move 20 23",2,905,185,-10,22,2,100,20,23,85,5,21
+162,move,"move 6 22",3,910,185,-10,22,2,100,20,23,85,6,22
+163,move,"move 20 22",2,915,185,-10,22,2,100,20,22,85,6,22
+164,move,"move 7 21",3,920,185,-10,22,2,100,20,22,85,7,21
+165,move,"move 21 21",2,925,185,-10,22,2,100,21,21,85,7,21
+166,nothing,"nothing "Player chose to do nothing"",3,925,185,-10,22,2,100,21,21,85,7,21
+167,banana,"banana 20 16",2,967,185,-10,22,2,100,21,21,85,7,21
+168,move,"move 6 21",3,972,185,-10,22,2,100,21,21,85,6,21
+169,move,"move 21 20",2,977,185,-10,22,2,100,21,20,85,6,21
+170,nothing,"nothing "Player chose to do nothing"",3,977,185,-10,22,2,100,21,20,85,6,21
+171,banana,"banana 21 15",2,1043,185,-10,22,2,100,21,20,85,6,21
+172,move,"move 6 20",3,1048,185,-10,22,2,100,21,20,85,6,20
+173,banana,"banana 21 16",2,1121,185,-10,22,2,100,21,20,85,6,20
+174,dig,"dig 7 19",3,1128,185,-10,22,2,100,21,20,85,6,20
+175,nothing,"nothing "Player chose to do nothing"",2,1128,185,-10,22,2,100,21,20,85,6,20
+176,move,"move 7 19",3,1133,185,-10,22,2,100,21,20,85,7,19
+177,move,"move 21 21",2,1138,185,-10,22,2,100,21,21,85,7,19
+178,move,"move 8 18",3,1143,185,-10,22,2,100,21,21,85,8,18
+179,move,"move 20 22",2,1148,185,-10,22,2,100,20,22,85,8,18
+180,move,"move 9 17",3,1153,185,-10,22,2,100,20,22,85,9,17
+181,move,"move 20 21",2,1158,185,-10,22,2,100,20,21,85,9,17
+182,move,"move 9 16",3,1163,185,-10,22,2,100,20,21,85,9,16
+183,shoot,"shoot N",2,1179,185,-10,22,2,100,20,21,85,9,16
+184,dig,"dig 10 15",3,1186,185,-10,22,2,100,20,21,85,9,16
+185,shoot,"shoot N",2,1202,185,-10,22,2,100,20,21,85,9,16
+186,move,"move 10 16",3,1207,185,-10,22,2,100,20,21,85,10,16
+187,move,"move 21 21",2,1212,185,-10,22,2,100,21,21,85,10,16
+188,dig,"dig 11 17",3,1219,185,-10,22,2,100,21,21,85,10,16
+189,shoot,"shoot N",2,1235,185,-10,22,2,100,21,21,85,10,16
+190,dig,"dig 11 15",3,1242,185,-10,22,2,100,21,21,85,10,16
+191,shoot,"shoot N",2,1258,185,-10,22,2,100,21,21,85,10,16
+192,dig,"dig 9 15",3,1265,185,-10,22,2,100,21,21,85,10,16
+193,move,"move 22 20",2,1270,185,-10,22,2,100,22,20,85,10,16
+194,dig,"dig 11 16",3,1277,185,-10,22,2,100,22,20,85,10,16
+195,move,"move 23 19",2,1282,185,-10,22,2,100,23,19,85,10,16
+196,move,"move 11 17",3,1287,185,-10,22,2,100,23,19,85,11,17
+197,shoot,"shoot W",2,1303,185,-10,22,2,100,23,19,85,11,17
+198,dig,"dig 12 16",3,1310,185,-10,22,2,100,23,19,85,11,17
+199,move,"move 23 18",2,1315,185,-10,22,2,100,23,18,85,11,17
+200,nothing,"nothing "Player chose to do nothing"",3,1315,185,-10,22,2,100,23,18,85,11,17
+201,move,"move 23 17",2,1320,185,-10,22,2,100,23,17,85,11,17
+202,dig,"dig 12 18",3,1327,185,-10,22,2,100,23,17,85,11,17
+203,shoot,"shoot S",2,1343,185,-10,22,2,100,23,17,85,11,17
+204,dig,"dig 12 17",3,1350,185,-10,22,2,100,23,17,85,11,17
+205,move,"move 24 16",2,1355,185,-10,22,2,100,24,16,85,11,17
+206,move,"move 10 16",3,1360,185,-10,22,2,100,24,16,85,10,16
+207,shoot,"shoot W",2,1376,185,-10,22,2,100,24,16,85,10,16
+208,move,"move 9 15",3,1381,185,-10,22,2,100,24,16,85,9,15
+209,move,"move 23 15",2,1386,185,-10,22,2,100,23,15,85,9,15
+210,dig,"dig 8 15",3,1393,185,-10,22,2,100,23,15,85,9,15
+211,move,"move 22 14",2,1398,185,-10,22,2,100,22,14,85,9,15
+212,move,"move 10 15",3,1403,185,-10,22,2,100,22,14,85,10,15
+213,shoot,"shoot S",2,1419,185,-10,22,2,100,22,14,85,10,15
+214,nothing,"nothing "Player chose to do nothing"",3,1419,185,-10,22,2,100,22,14,85,10,15
+215,move,"move 21 13",2,1424,185,-10,22,2,100,21,13,85,10,15
+216,move,"move 11 15",3,1429,185,-10,22,2,100,21,13,85,11,15
+217,nothing,"nothing "Player chose to do nothing"",2,1429,185,-10,22,2,100,21,13,85,11,15
+218,move,"move 12 15",3,1434,185,-10,22,2,100,21,13,85,12,15
+219,shoot,"shoot S",2,1450,185,-10,22,2,100,21,13,85,12,15
+220,move,"move 12 16",3,1455,185,-10,22,2,100,21,13,85,12,16
+221,move,"move 22 12",2,1460,185,-10,22,2,100,22,12,85,12,16
+222,move,"move 12 17",3,1465,185,-10,22,2,100,22,12,85,12,17
+223,move,"move 22 11",2,1470,185,-10,22,2,100,22,11,85,12,17
+224,dig,"dig 13 18",3,1477,185,-10,22,2,100,22,11,85,12,17
+225,shoot,"shoot S",2,1493,185,-10,22,2,100,22,11,85,12,17
+226,nothing,"nothing "Player chose to do nothing"",3,1493,185,-10,22,2,100,22,11,85,12,17
+227,move,"move 21 11",2,1498,185,-10,22,2,100,21,11,85,12,17
+228,nothing,"nothing "Player chose to do nothing"",3,1498,185,-10,22,2,100,21,11,85,12,17
+229,move,"move 20 10",2,1503,185,-10,22,2,100,20,10,85,12,17
+230,move,"move 11 16",3,1508,185,-10,22,2,100,20,10,85,11,16
+231,nothing,"nothing "Player chose to do nothing"",2,1508,185,-10,22,2,100,20,10,85,11,16
+232,move,"move 10 16",3,1513,185,-10,22,2,100,20,10,85,10,16
+233,move,"move 19 10",2,1518,185,-10,22,2,100,19,10,85,10,16
+234,move,"move 9 17",3,1523,185,-10,22,2,100,19,10,85,9,17
+235,move,"move 18 10",2,1528,185,-10,22,2,100,18,10,85,9,17
+236,move,"move 10 16",3,1533,185,-10,22,2,100,18,10,85,10,16
+237,move,"move 17 10",2,1538,185,-10,22,2,100,17,10,85,10,16
+238,move,"move 9 15",3,1543,185,-10,22,2,100,17,10,85,9,15
+239,shoot,"shoot SE",2,1559,185,-10,22,2,100,17,10,85,9,15
+240,move,"move 10 16",3,1562,177,-10,22,2,92,17,10,85,10,16
+241,shoot,"shoot SE",2,1575,169,-10,22,2,84,17,10,85,10,16
+242,move,"move 11 15",3,1580,169,-10,22,2,84,17,10,85,11,15
+243,shoot,"shoot SE",2,1593,161,-10,22,2,76,17,10,85,11,15
+244,move,"move 11 14",3,1596,153,-10,22,2,68,17,10,85,11,14
+245,shoot,"shoot SE",2,1612,153,-10,22,2,68,17,10,85,11,14
+246,dig,"dig 10 14",3,1616,145,-10,22,2,60,17,10,85,11,14
+247,shoot,"shoot SE",2,1629,137,-10,22,2,52,17,10,85,11,14
+248,move,"move 11 13",3,1634,137,-10,22,2,52,17,10,85,11,13
+249,shoot,"shoot SE",2,1648,129,-10,22,2,44,17,10,85,11,13
+250,move,"move 12 13",3,1650,121,-10,22,2,36,17,10,85,12,13
+251,shoot,"shoot SE",2,1666,121,-10,22,2,36,17,10,85,12,13
+252,move,"move 11 14",3,1668,113,-10,22,2,28,17,10,85,11,14
+253,shoot,"shoot SE",2,1682,105,-10,22,2,20,17,10,85,11,14
+254,move,"move 12 15",3,1687,105,-10,22,2,20,17,10,85,12,15
+255,move,"move 16 10",2,1692,105,-10,22,2,20,16,10,85,12,15
+256,move,"move 13 14",3,1697,105,-10,22,2,20,16,10,85,13,14
+257,dig,"dig 15 11",2,1701,97,-10,22,2,12,16,10,85,13,14
+258,move,"move 12 14",3,1702,86,-10,22,2,1,16,10,85,12,14
+259,shoot,"shoot E",2,1718,85,-10,22,2,-10,16,10,85,12,14
+260,move,"move 13 15",3,1723,85,-10,22,2,-10,16,10,85,13,15
+261,move,"move 13 16",3,1728,85,-10,22,2,-10,16,10,85,13,16
+262,move,"move 12 17",3,1733,85,-10,22,2,-10,16,10,85,12,17
+263,move,"move 12 18",3,1738,85,-10,22,2,-10,16,10,85,12,18
+264,move,"move 13 19",3,1743,85,-10,22,2,-10,16,10,85,13,19
+265,move,"move 14 20",3,1748,85,-10,22,2,-10,16,10,85,14,20
+266,move,"move 15 20",3,1753,85,-10,22,2,-10,16,10,85,15,20
+267,move,"move 16 20",3,1758,85,-10,22,2,-10,16,10,85,16,20
+268,move,"move 15 19",3,1763,85,-10,22,2,-10,16,10,85,15,19
+269,dig,"dig 16 18",3,1770,85,-10,22,2,-10,16,10,85,15,19
+270,move,"move 16 18",3,1775,85,-10,22,2,-10,16,10,85,16,18
+271,move,"move 15 18",3,1780,85,-10,22,2,-10,16,10,85,15,18
+272,move,"move 14 17",3,1785,85,-10,22,2,-10,16,10,85,14,17
+273,shoot,"shoot E",3,1798,77,-10,22,2,-10,16,10,77,14,17
diff --git a/2019-worms/tests/replays/2019.08.19.21.31.16/B-init.json b/2019-worms/tests/replays/2019.08.19.21.31.16/B-init.json
new file mode 100644
index 0000000..373ec6e
--- /dev/null
+++ b/2019-worms/tests/replays/2019.08.19.21.31.16/B-init.json
@@ -0,0 +1 @@
+{"currentRound":1,"maxRounds":400,"pushbackDamage":20,"lavaDamage":3,"mapSize":33,"currentWormId":1,"consecutiveDoNothingCount":0,"myPlayer":{"id":2,"score":116,"health":350,"currentWormId":1,"remainingWormSelections":5,"previousCommand":"nothing","worms":[{"id":1,"health":150,"position":{"x":8,"y":28},"weapon":{"damage":8,"range":4},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Commando"},{"id":2,"health":100,"position":{"x":8,"y":4},"weapon":{"damage":8,"range":4},"bananaBombs":{"damage":20,"range":5,"count":3,"damageRadius":2},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Agent"},{"id":3,"health":100,"position":{"x":31,"y":16},"weapon":{"damage":8,"range":4},"snowballs":{"freezeDuration":5,"range":5,"count":3,"freezeRadius":1},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Technologist"}]},"opponents":[{"id":1,"score":116,"currentWormId":1,"remainingWormSelections":5,"previousCommand":"nothing","worms":[{"id":1,"health":150,"position":{"x":24,"y":4},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Commando"},{"id":2,"health":100,"position":{"x":24,"y":28},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Agent"},{"id":3,"health":100,"position":{"x":1,"y":16},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Technologist"}]}],"map":[[{"x":0,"y":0,"type":"DEEP_SPACE"},{"x":1,"y":0,"type":"DEEP_SPACE"},{"x":2,"y":0,"type":"DEEP_SPACE"},{"x":3,"y":0,"type":"DEEP_SPACE"},{"x":4,"y":0,"type":"DEEP_SPACE"},{"x":5,"y":0,"type":"DEEP_SPACE"},{"x":6,"y":0,"type":"DEEP_SPACE"},{"x":7,"y":0,"type":"DEEP_SPACE"},{"x":8,"y":0,"type":"DEEP_SPACE"},{"x":9,"y":0,"type":"DEEP_SPACE"},{"x":10,"y":0,"type":"DEEP_SPACE"},{"x":11,"y":0,"type":"DIRT"},{"x":12,"y":0,"type":"DIRT"},{"x":13,"y":0,"type":"DIRT"},{"x":14,"y":0,"type":"AIR"},{"x":15,"y":0,"type":"AIR"},{"x":16,"y":0,"type":"DIRT"},{"x":17,"y":0,"type":"AIR"},{"x":18,"y":0,"type":"AIR"},{"x":19,"y":0,"type":"DIRT"},{"x":20,"y":0,"type":"DIRT"},{"x":21,"y":0,"type":"DIRT"},{"x":22,"y":0,"type":"DEEP_SPACE"},{"x":23,"y":0,"type":"DEEP_SPACE"},{"x":24,"y":0,"type":"DEEP_SPACE"},{"x":25,"y":0,"type":"DEEP_SPACE"},{"x":26,"y":0,"type":"DEEP_SPACE"},{"x":27,"y":0,"type":"DEEP_SPACE"},{"x":28,"y":0,"type":"DEEP_SPACE"},{"x":29,"y":0,"type":"DEEP_SPACE"},{"x":30,"y":0,"type":"DEEP_SPACE"},{"x":31,"y":0,"type":"DEEP_SPACE"},{"x":32,"y":0,"type":"DEEP_SPACE"}],[{"x":0,"y":1,"type":"DEEP_SPACE"},{"x":1,"y":1,"type":"DEEP_SPACE"},{"x":2,"y":1,"type":"DEEP_SPACE"},{"x":3,"y":1,"type":"DEEP_SPACE"},{"x":4,"y":1,"type":"DEEP_SPACE"},{"x":5,"y":1,"type":"DEEP_SPACE"},{"x":6,"y":1,"type":"DEEP_SPACE"},{"x":7,"y":1,"type":"DEEP_SPACE"},{"x":8,"y":1,"type":"DIRT"},{"x":9,"y":1,"type":"DIRT"},{"x":10,"y":1,"type":"DIRT"},{"x":11,"y":1,"type":"DIRT"},{"x":12,"y":1,"type":"DIRT"},{"x":13,"y":1,"type":"AIR"},{"x":14,"y":1,"type":"AIR"},{"x":15,"y":1,"type":"DIRT"},{"x":16,"y":1,"type":"DIRT"},{"x":17,"y":1,"type":"DIRT"},{"x":18,"y":1,"type":"AIR"},{"x":19,"y":1,"type":"AIR"},{"x":20,"y":1,"type":"DIRT"},{"x":21,"y":1,"type":"DIRT"},{"x":22,"y":1,"type":"DIRT"},{"x":23,"y":1,"type":"DIRT"},{"x":24,"y":1,"type":"DIRT"},{"x":25,"y":1,"type":"DEEP_SPACE"},{"x":26,"y":1,"type":"DEEP_SPACE"},{"x":27,"y":1,"type":"DEEP_SPACE"},{"x":28,"y":1,"type":"DEEP_SPACE"},{"x":29,"y":1,"type":"DEEP_SPACE"},{"x":30,"y":1,"type":"DEEP_SPACE"},{"x":31,"y":1,"type":"DEEP_SPACE"},{"x":32,"y":1,"type":"DEEP_SPACE"}],[{"x":0,"y":2,"type":"DEEP_SPACE"},{"x":1,"y":2,"type":"DEEP_SPACE"},{"x":2,"y":2,"type":"DEEP_SPACE"},{"x":3,"y":2,"type":"DEEP_SPACE"},{"x":4,"y":2,"type":"DEEP_SPACE"},{"x":5,"y":2,"type":"DEEP_SPACE"},{"x":6,"y":2,"type":"DEEP_SPACE"},{"x":7,"y":2,"type":"DIRT"},{"x":8,"y":2,"type":"DIRT"},{"x":9,"y":2,"type":"DIRT"},{"x":10,"y":2,"type":"DIRT"},{"x":11,"y":2,"type":"DIRT"},{"x":12,"y":2,"type":"DIRT"},{"x":13,"y":2,"type":"DIRT"},{"x":14,"y":2,"type":"DIRT"},{"x":15,"y":2,"type":"AIR"},{"x":16,"y":2,"type":"AIR"},{"x":17,"y":2,"type":"AIR"},{"x":18,"y":2,"type":"DIRT"},{"x":19,"y":2,"type":"DIRT"},{"x":20,"y":2,"type":"DIRT"},{"x":21,"y":2,"type":"DIRT"},{"x":22,"y":2,"type":"DIRT"},{"x":23,"y":2,"type":"DIRT"},{"x":24,"y":2,"type":"DIRT"},{"x":25,"y":2,"type":"DIRT"},{"x":26,"y":2,"type":"DEEP_SPACE"},{"x":27,"y":2,"type":"DEEP_SPACE"},{"x":28,"y":2,"type":"DEEP_SPACE"},{"x":29,"y":2,"type":"DEEP_SPACE"},{"x":30,"y":2,"type":"DEEP_SPACE"},{"x":31,"y":2,"type":"DEEP_SPACE"},{"x":32,"y":2,"type":"DEEP_SPACE"}],[{"x":0,"y":3,"type":"DEEP_SPACE"},{"x":1,"y":3,"type":"DEEP_SPACE"},{"x":2,"y":3,"type":"DEEP_SPACE"},{"x":3,"y":3,"type":"DEEP_SPACE"},{"x":4,"y":3,"type":"DEEP_SPACE"},{"x":5,"y":3,"type":"DEEP_SPACE"},{"x":6,"y":3,"type":"DIRT"},{"x":7,"y":3,"type":"AIR"},{"x":8,"y":3,"type":"AIR"},{"x":9,"y":3,"type":"AIR"},{"x":10,"y":3,"type":"DIRT"},{"x":11,"y":3,"type":"DIRT"},{"x":12,"y":3,"type":"AIR"},{"x":13,"y":3,"type":"DIRT"},{"x":14,"y":3,"type":"DIRT"},{"x":15,"y":3,"type":"AIR"},{"x":16,"y":3,"type":"AIR"},{"x":17,"y":3,"type":"AIR"},{"x":18,"y":3,"type":"DIRT"},{"x":19,"y":3,"type":"DIRT"},{"x":20,"y":3,"type":"AIR"},{"x":21,"y":3,"type":"DIRT"},{"x":22,"y":3,"type":"DIRT"},{"x":23,"y":3,"type":"AIR"},{"x":24,"y":3,"type":"AIR"},{"x":25,"y":3,"type":"AIR"},{"x":26,"y":3,"type":"DIRT"},{"x":27,"y":3,"type":"DEEP_SPACE"},{"x":28,"y":3,"type":"DEEP_SPACE"},{"x":29,"y":3,"type":"DEEP_SPACE"},{"x":30,"y":3,"type":"DEEP_SPACE"},{"x":31,"y":3,"type":"DEEP_SPACE"},{"x":32,"y":3,"type":"DEEP_SPACE"}],[{"x":0,"y":4,"type":"DEEP_SPACE"},{"x":1,"y":4,"type":"DEEP_SPACE"},{"x":2,"y":4,"type":"DEEP_SPACE"},{"x":3,"y":4,"type":"DEEP_SPACE"},{"x":4,"y":4,"type":"AIR"},{"x":5,"y":4,"type":"AIR"},{"x":6,"y":4,"type":"DIRT"},{"x":7,"y":4,"type":"AIR"},{"x":8,"y":4,"type":"AIR","occupier":{"id":2,"playerId":2,"health":100,"position":{"x":8,"y":4},"weapon":{"damage":8,"range":4},"bananaBombs":{"damage":20,"range":5,"count":3,"damageRadius":2},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Agent"}},{"x":9,"y":4,"type":"AIR"},{"x":10,"y":4,"type":"DIRT"},{"x":11,"y":4,"type":"AIR"},{"x":12,"y":4,"type":"AIR"},{"x":13,"y":4,"type":"AIR"},{"x":14,"y":4,"type":"AIR"},{"x":15,"y":4,"type":"AIR"},{"x":16,"y":4,"type":"AIR"},{"x":17,"y":4,"type":"AIR"},{"x":18,"y":4,"type":"AIR"},{"x":19,"y":4,"type":"AIR"},{"x":20,"y":4,"type":"AIR"},{"x":21,"y":4,"type":"AIR"},{"x":22,"y":4,"type":"DIRT"},{"x":23,"y":4,"type":"AIR"},{"x":24,"y":4,"type":"AIR","occupier":{"id":1,"playerId":1,"health":150,"position":{"x":24,"y":4},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Commando"}},{"x":25,"y":4,"type":"AIR"},{"x":26,"y":4,"type":"DIRT"},{"x":27,"y":4,"type":"AIR"},{"x":28,"y":4,"type":"AIR"},{"x":29,"y":4,"type":"DEEP_SPACE"},{"x":30,"y":4,"type":"DEEP_SPACE"},{"x":31,"y":4,"type":"DEEP_SPACE"},{"x":32,"y":4,"type":"DEEP_SPACE"}],[{"x":0,"y":5,"type":"DEEP_SPACE"},{"x":1,"y":5,"type":"DEEP_SPACE"},{"x":2,"y":5,"type":"DEEP_SPACE"},{"x":3,"y":5,"type":"DEEP_SPACE"},{"x":4,"y":5,"type":"AIR"},{"x":5,"y":5,"type":"AIR"},{"x":6,"y":5,"type":"DIRT"},{"x":7,"y":5,"type":"AIR"},{"x":8,"y":5,"type":"AIR"},{"x":9,"y":5,"type":"AIR"},{"x":10,"y":5,"type":"DIRT"},{"x":11,"y":5,"type":"DIRT"},{"x":12,"y":5,"type":"AIR"},{"x":13,"y":5,"type":"AIR"},{"x":14,"y":5,"type":"AIR"},{"x":15,"y":5,"type":"AIR"},{"x":16,"y":5,"type":"AIR"},{"x":17,"y":5,"type":"AIR"},{"x":18,"y":5,"type":"AIR"},{"x":19,"y":5,"type":"AIR"},{"x":20,"y":5,"type":"AIR"},{"x":21,"y":5,"type":"DIRT"},{"x":22,"y":5,"type":"DIRT"},{"x":23,"y":5,"type":"AIR"},{"x":24,"y":5,"type":"AIR"},{"x":25,"y":5,"type":"AIR"},{"x":26,"y":5,"type":"DIRT"},{"x":27,"y":5,"type":"AIR"},{"x":28,"y":5,"type":"AIR"},{"x":29,"y":5,"type":"DEEP_SPACE"},{"x":30,"y":5,"type":"DEEP_SPACE"},{"x":31,"y":5,"type":"DEEP_SPACE"},{"x":32,"y":5,"type":"DEEP_SPACE"}],[{"x":0,"y":6,"type":"DEEP_SPACE"},{"x":1,"y":6,"type":"DEEP_SPACE"},{"x":2,"y":6,"type":"DEEP_SPACE"},{"x":3,"y":6,"type":"AIR"},{"x":4,"y":6,"type":"AIR"},{"x":5,"y":6,"type":"AIR"},{"x":6,"y":6,"type":"DIRT"},{"x":7,"y":6,"type":"DIRT"},{"x":8,"y":6,"type":"DIRT"},{"x":9,"y":6,"type":"DIRT"},{"x":10,"y":6,"type":"DIRT"},{"x":11,"y":6,"type":"DIRT"},{"x":12,"y":6,"type":"AIR"},{"x":13,"y":6,"type":"AIR"},{"x":14,"y":6,"type":"AIR"},{"x":15,"y":6,"type":"AIR"},{"x":16,"y":6,"type":"AIR"},{"x":17,"y":6,"type":"AIR"},{"x":18,"y":6,"type":"AIR"},{"x":19,"y":6,"type":"AIR"},{"x":20,"y":6,"type":"AIR"},{"x":21,"y":6,"type":"DIRT"},{"x":22,"y":6,"type":"DIRT"},{"x":23,"y":6,"type":"DIRT"},{"x":24,"y":6,"type":"DIRT"},{"x":25,"y":6,"type":"DIRT"},{"x":26,"y":6,"type":"DIRT"},{"x":27,"y":6,"type":"AIR"},{"x":28,"y":6,"type":"AIR"},{"x":29,"y":6,"type":"AIR"},{"x":30,"y":6,"type":"DEEP_SPACE"},{"x":31,"y":6,"type":"DEEP_SPACE"},{"x":32,"y":6,"type":"DEEP_SPACE"}],[{"x":0,"y":7,"type":"DEEP_SPACE"},{"x":1,"y":7,"type":"DEEP_SPACE"},{"x":2,"y":7,"type":"AIR"},{"x":3,"y":7,"type":"AIR"},{"x":4,"y":7,"type":"AIR"},{"x":5,"y":7,"type":"DIRT"},{"x":6,"y":7,"type":"AIR"},{"x":7,"y":7,"type":"AIR"},{"x":8,"y":7,"type":"AIR"},{"x":9,"y":7,"type":"AIR"},{"x":10,"y":7,"type":"AIR"},{"x":11,"y":7,"type":"AIR"},{"x":12,"y":7,"type":"AIR"},{"x":13,"y":7,"type":"DIRT"},{"x":14,"y":7,"type":"AIR"},{"x":15,"y":7,"type":"AIR"},{"x":16,"y":7,"type":"AIR"},{"x":17,"y":7,"type":"AIR"},{"x":18,"y":7,"type":"AIR"},{"x":19,"y":7,"type":"DIRT"},{"x":20,"y":7,"type":"AIR"},{"x":21,"y":7,"type":"AIR"},{"x":22,"y":7,"type":"AIR"},{"x":23,"y":7,"type":"AIR"},{"x":24,"y":7,"type":"AIR"},{"x":25,"y":7,"type":"AIR"},{"x":26,"y":7,"type":"AIR"},{"x":27,"y":7,"type":"DIRT"},{"x":28,"y":7,"type":"AIR"},{"x":29,"y":7,"type":"AIR"},{"x":30,"y":7,"type":"AIR"},{"x":31,"y":7,"type":"DEEP_SPACE"},{"x":32,"y":7,"type":"DEEP_SPACE"}],[{"x":0,"y":8,"type":"DEEP_SPACE"},{"x":1,"y":8,"type":"AIR"},{"x":2,"y":8,"type":"AIR"},{"x":3,"y":8,"type":"DIRT"},{"x":4,"y":8,"type":"DIRT"},{"x":5,"y":8,"type":"DIRT"},{"x":6,"y":8,"type":"AIR"},{"x":7,"y":8,"type":"AIR"},{"x":8,"y":8,"type":"AIR"},{"x":9,"y":8,"type":"AIR"},{"x":10,"y":8,"type":"AIR"},{"x":11,"y":8,"type":"AIR"},{"x":12,"y":8,"type":"AIR"},{"x":13,"y":8,"type":"DIRT"},{"x":14,"y":8,"type":"AIR"},{"x":15,"y":8,"type":"AIR"},{"x":16,"y":8,"type":"AIR"},{"x":17,"y":8,"type":"AIR"},{"x":18,"y":8,"type":"AIR"},{"x":19,"y":8,"type":"DIRT"},{"x":20,"y":8,"type":"AIR"},{"x":21,"y":8,"type":"AIR"},{"x":22,"y":8,"type":"AIR"},{"x":23,"y":8,"type":"AIR"},{"x":24,"y":8,"type":"AIR"},{"x":25,"y":8,"type":"AIR"},{"x":26,"y":8,"type":"AIR"},{"x":27,"y":8,"type":"DIRT"},{"x":28,"y":8,"type":"DIRT"},{"x":29,"y":8,"type":"DIRT"},{"x":30,"y":8,"type":"AIR"},{"x":31,"y":8,"type":"AIR"},{"x":32,"y":8,"type":"DEEP_SPACE"}],[{"x":0,"y":9,"type":"DEEP_SPACE"},{"x":1,"y":9,"type":"DIRT"},{"x":2,"y":9,"type":"AIR"},{"x":3,"y":9,"type":"DIRT"},{"x":4,"y":9,"type":"DIRT"},{"x":5,"y":9,"type":"AIR"},{"x":6,"y":9,"type":"AIR"},{"x":7,"y":9,"type":"DIRT"},{"x":8,"y":9,"type":"AIR"},{"x":9,"y":9,"type":"AIR"},{"x":10,"y":9,"type":"DIRT"},{"x":11,"y":9,"type":"AIR"},{"x":12,"y":9,"type":"DIRT"},{"x":13,"y":9,"type":"DIRT"},{"x":14,"y":9,"type":"AIR"},{"x":15,"y":9,"type":"DIRT"},{"x":16,"y":9,"type":"AIR"},{"x":17,"y":9,"type":"DIRT"},{"x":18,"y":9,"type":"AIR"},{"x":19,"y":9,"type":"DIRT"},{"x":20,"y":9,"type":"DIRT"},{"x":21,"y":9,"type":"AIR"},{"x":22,"y":9,"type":"DIRT"},{"x":23,"y":9,"type":"AIR"},{"x":24,"y":9,"type":"AIR"},{"x":25,"y":9,"type":"DIRT"},{"x":26,"y":9,"type":"AIR"},{"x":27,"y":9,"type":"AIR"},{"x":28,"y":9,"type":"DIRT"},{"x":29,"y":9,"type":"DIRT"},{"x":30,"y":9,"type":"AIR"},{"x":31,"y":9,"type":"DIRT"},{"x":32,"y":9,"type":"DEEP_SPACE"}],[{"x":0,"y":10,"type":"DEEP_SPACE"},{"x":1,"y":10,"type":"DIRT"},{"x":2,"y":10,"type":"AIR"},{"x":3,"y":10,"type":"AIR"},{"x":4,"y":10,"type":"DIRT"},{"x":5,"y":10,"type":"DIRT"},{"x":6,"y":10,"type":"DIRT"},{"x":7,"y":10,"type":"DIRT"},{"x":8,"y":10,"type":"AIR"},{"x":9,"y":10,"type":"AIR"},{"x":10,"y":10,"type":"DIRT"},{"x":11,"y":10,"type":"DIRT"},{"x":12,"y":10,"type":"DIRT"},{"x":13,"y":10,"type":"DIRT"},{"x":14,"y":10,"type":"AIR"},{"x":15,"y":10,"type":"AIR"},{"x":16,"y":10,"type":"AIR"},{"x":17,"y":10,"type":"AIR"},{"x":18,"y":10,"type":"AIR"},{"x":19,"y":10,"type":"DIRT"},{"x":20,"y":10,"type":"DIRT"},{"x":21,"y":10,"type":"DIRT"},{"x":22,"y":10,"type":"DIRT"},{"x":23,"y":10,"type":"AIR"},{"x":24,"y":10,"type":"AIR"},{"x":25,"y":10,"type":"DIRT"},{"x":26,"y":10,"type":"DIRT"},{"x":27,"y":10,"type":"DIRT"},{"x":28,"y":10,"type":"DIRT"},{"x":29,"y":10,"type":"AIR"},{"x":30,"y":10,"type":"AIR"},{"x":31,"y":10,"type":"DIRT"},{"x":32,"y":10,"type":"DEEP_SPACE"}],[{"x":0,"y":11,"type":"DIRT"},{"x":1,"y":11,"type":"DIRT"},{"x":2,"y":11,"type":"DIRT"},{"x":3,"y":11,"type":"AIR"},{"x":4,"y":11,"type":"AIR"},{"x":5,"y":11,"type":"AIR"},{"x":6,"y":11,"type":"AIR"},{"x":7,"y":11,"type":"AIR"},{"x":8,"y":11,"type":"AIR"},{"x":9,"y":11,"type":"AIR"},{"x":10,"y":11,"type":"AIR"},{"x":11,"y":11,"type":"AIR"},{"x":12,"y":11,"type":"AIR"},{"x":13,"y":11,"type":"DIRT"},{"x":14,"y":11,"type":"AIR"},{"x":15,"y":11,"type":"DIRT"},{"x":16,"y":11,"type":"DIRT"},{"x":17,"y":11,"type":"DIRT"},{"x":18,"y":11,"type":"AIR"},{"x":19,"y":11,"type":"DIRT"},{"x":20,"y":11,"type":"AIR"},{"x":21,"y":11,"type":"AIR"},{"x":22,"y":11,"type":"AIR"},{"x":23,"y":11,"type":"AIR"},{"x":24,"y":11,"type":"AIR"},{"x":25,"y":11,"type":"AIR"},{"x":26,"y":11,"type":"AIR"},{"x":27,"y":11,"type":"AIR"},{"x":28,"y":11,"type":"AIR"},{"x":29,"y":11,"type":"AIR"},{"x":30,"y":11,"type":"DIRT"},{"x":31,"y":11,"type":"DIRT"},{"x":32,"y":11,"type":"DIRT"}],[{"x":0,"y":12,"type":"DIRT"},{"x":1,"y":12,"type":"DIRT"},{"x":2,"y":12,"type":"DIRT"},{"x":3,"y":12,"type":"DIRT"},{"x":4,"y":12,"type":"DIRT"},{"x":5,"y":12,"type":"AIR"},{"x":6,"y":12,"type":"AIR"},{"x":7,"y":12,"type":"AIR"},{"x":8,"y":12,"type":"DIRT"},{"x":9,"y":12,"type":"DIRT"},{"x":10,"y":12,"type":"AIR"},{"x":11,"y":12,"type":"AIR"},{"x":12,"y":12,"type":"AIR"},{"x":13,"y":12,"type":"AIR"},{"x":14,"y":12,"type":"DIRT"},{"x":15,"y":12,"type":"DIRT"},{"x":16,"y":12,"type":"DIRT"},{"x":17,"y":12,"type":"DIRT"},{"x":18,"y":12,"type":"DIRT"},{"x":19,"y":12,"type":"AIR"},{"x":20,"y":12,"type":"AIR"},{"x":21,"y":12,"type":"AIR"},{"x":22,"y":12,"type":"AIR"},{"x":23,"y":12,"type":"DIRT"},{"x":24,"y":12,"type":"DIRT"},{"x":25,"y":12,"type":"AIR"},{"x":26,"y":12,"type":"AIR"},{"x":27,"y":12,"type":"AIR"},{"x":28,"y":12,"type":"DIRT"},{"x":29,"y":12,"type":"DIRT"},{"x":30,"y":12,"type":"DIRT"},{"x":31,"y":12,"type":"DIRT"},{"x":32,"y":12,"type":"DIRT"}],[{"x":0,"y":13,"type":"DIRT"},{"x":1,"y":13,"type":"DIRT"},{"x":2,"y":13,"type":"AIR"},{"x":3,"y":13,"type":"DIRT"},{"x":4,"y":13,"type":"DIRT"},{"x":5,"y":13,"type":"AIR"},{"x":6,"y":13,"type":"AIR"},{"x":7,"y":13,"type":"AIR"},{"x":8,"y":13,"type":"DIRT"},{"x":9,"y":13,"type":"DIRT"},{"x":10,"y":13,"type":"AIR"},{"x":11,"y":13,"type":"AIR"},{"x":12,"y":13,"type":"AIR"},{"x":13,"y":13,"type":"AIR"},{"x":14,"y":13,"type":"DIRT"},{"x":15,"y":13,"type":"DIRT"},{"x":16,"y":13,"type":"DIRT"},{"x":17,"y":13,"type":"DIRT"},{"x":18,"y":13,"type":"DIRT"},{"x":19,"y":13,"type":"AIR"},{"x":20,"y":13,"type":"AIR"},{"x":21,"y":13,"type":"AIR"},{"x":22,"y":13,"type":"AIR"},{"x":23,"y":13,"type":"DIRT"},{"x":24,"y":13,"type":"DIRT"},{"x":25,"y":13,"type":"AIR"},{"x":26,"y":13,"type":"AIR"},{"x":27,"y":13,"type":"AIR"},{"x":28,"y":13,"type":"DIRT"},{"x":29,"y":13,"type":"DIRT"},{"x":30,"y":13,"type":"AIR"},{"x":31,"y":13,"type":"DIRT"},{"x":32,"y":13,"type":"DIRT"}],[{"x":0,"y":14,"type":"DIRT"},{"x":1,"y":14,"type":"DIRT"},{"x":2,"y":14,"type":"DIRT"},{"x":3,"y":14,"type":"DIRT"},{"x":4,"y":14,"type":"DIRT"},{"x":5,"y":14,"type":"AIR"},{"x":6,"y":14,"type":"AIR"},{"x":7,"y":14,"type":"AIR"},{"x":8,"y":14,"type":"DIRT"},{"x":9,"y":14,"type":"DIRT"},{"x":10,"y":14,"type":"DIRT"},{"x":11,"y":14,"type":"AIR"},{"x":12,"y":14,"type":"AIR"},{"x":13,"y":14,"type":"AIR"},{"x":14,"y":14,"type":"AIR"},{"x":15,"y":14,"type":"AIR"},{"x":16,"y":14,"type":"DIRT"},{"x":17,"y":14,"type":"AIR"},{"x":18,"y":14,"type":"AIR"},{"x":19,"y":14,"type":"AIR"},{"x":20,"y":14,"type":"AIR"},{"x":21,"y":14,"type":"AIR"},{"x":22,"y":14,"type":"DIRT"},{"x":23,"y":14,"type":"DIRT"},{"x":24,"y":14,"type":"DIRT"},{"x":25,"y":14,"type":"AIR"},{"x":26,"y":14,"type":"AIR"},{"x":27,"y":14,"type":"AIR"},{"x":28,"y":14,"type":"DIRT"},{"x":29,"y":14,"type":"DIRT"},{"x":30,"y":14,"type":"DIRT"},{"x":31,"y":14,"type":"DIRT"},{"x":32,"y":14,"type":"DIRT"}],[{"x":0,"y":15,"type":"AIR"},{"x":1,"y":15,"type":"AIR"},{"x":2,"y":15,"type":"AIR"},{"x":3,"y":15,"type":"DIRT"},{"x":4,"y":15,"type":"AIR"},{"x":5,"y":15,"type":"AIR"},{"x":6,"y":15,"type":"AIR"},{"x":7,"y":15,"type":"AIR"},{"x":8,"y":15,"type":"DIRT"},{"x":9,"y":15,"type":"DIRT"},{"x":10,"y":15,"type":"DIRT"},{"x":11,"y":15,"type":"DIRT"},{"x":12,"y":15,"type":"AIR"},{"x":13,"y":15,"type":"AIR"},{"x":14,"y":15,"type":"AIR","powerup":{"type":"HEALTH_PACK","value":10}},{"x":15,"y":15,"type":"DIRT"},{"x":16,"y":15,"type":"DIRT"},{"x":17,"y":15,"type":"DIRT"},{"x":18,"y":15,"type":"AIR"},{"x":19,"y":15,"type":"AIR"},{"x":20,"y":15,"type":"AIR"},{"x":21,"y":15,"type":"DIRT"},{"x":22,"y":15,"type":"DIRT"},{"x":23,"y":15,"type":"DIRT"},{"x":24,"y":15,"type":"DIRT"},{"x":25,"y":15,"type":"AIR"},{"x":26,"y":15,"type":"AIR"},{"x":27,"y":15,"type":"AIR"},{"x":28,"y":15,"type":"AIR"},{"x":29,"y":15,"type":"DIRT"},{"x":30,"y":15,"type":"AIR"},{"x":31,"y":15,"type":"AIR"},{"x":32,"y":15,"type":"AIR"}],[{"x":0,"y":16,"type":"AIR"},{"x":1,"y":16,"type":"AIR","occupier":{"id":3,"playerId":1,"health":100,"position":{"x":1,"y":16},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Technologist"}},{"x":2,"y":16,"type":"AIR"},{"x":3,"y":16,"type":"DIRT"},{"x":4,"y":16,"type":"DIRT"},{"x":5,"y":16,"type":"DIRT"},{"x":6,"y":16,"type":"DIRT"},{"x":7,"y":16,"type":"AIR"},{"x":8,"y":16,"type":"AIR"},{"x":9,"y":16,"type":"AIR"},{"x":10,"y":16,"type":"AIR"},{"x":11,"y":16,"type":"DIRT"},{"x":12,"y":16,"type":"DIRT"},{"x":13,"y":16,"type":"AIR"},{"x":14,"y":16,"type":"AIR"},{"x":15,"y":16,"type":"AIR"},{"x":16,"y":16,"type":"DIRT"},{"x":17,"y":16,"type":"AIR"},{"x":18,"y":16,"type":"AIR"},{"x":19,"y":16,"type":"AIR"},{"x":20,"y":16,"type":"DIRT"},{"x":21,"y":16,"type":"DIRT"},{"x":22,"y":16,"type":"AIR"},{"x":23,"y":16,"type":"AIR"},{"x":24,"y":16,"type":"AIR"},{"x":25,"y":16,"type":"AIR"},{"x":26,"y":16,"type":"DIRT"},{"x":27,"y":16,"type":"DIRT"},{"x":28,"y":16,"type":"DIRT"},{"x":29,"y":16,"type":"DIRT"},{"x":30,"y":16,"type":"AIR"},{"x":31,"y":16,"type":"AIR","occupier":{"id":3,"playerId":2,"health":100,"position":{"x":31,"y":16},"weapon":{"damage":8,"range":4},"snowballs":{"freezeDuration":5,"range":5,"count":3,"freezeRadius":1},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Technologist"}},{"x":32,"y":16,"type":"AIR"}],[{"x":0,"y":17,"type":"AIR"},{"x":1,"y":17,"type":"AIR"},{"x":2,"y":17,"type":"AIR"},{"x":3,"y":17,"type":"DIRT"},{"x":4,"y":17,"type":"DIRT"},{"x":5,"y":17,"type":"DIRT"},{"x":6,"y":17,"type":"DIRT"},{"x":7,"y":17,"type":"AIR"},{"x":8,"y":17,"type":"AIR"},{"x":9,"y":17,"type":"AIR"},{"x":10,"y":17,"type":"AIR"},{"x":11,"y":17,"type":"DIRT"},{"x":12,"y":17,"type":"DIRT"},{"x":13,"y":17,"type":"AIR"},{"x":14,"y":17,"type":"AIR"},{"x":15,"y":17,"type":"AIR"},{"x":16,"y":17,"type":"DIRT"},{"x":17,"y":17,"type":"AIR"},{"x":18,"y":17,"type":"AIR","powerup":{"type":"HEALTH_PACK","value":10}},{"x":19,"y":17,"type":"AIR"},{"x":20,"y":17,"type":"DIRT"},{"x":21,"y":17,"type":"DIRT"},{"x":22,"y":17,"type":"AIR"},{"x":23,"y":17,"type":"AIR"},{"x":24,"y":17,"type":"AIR"},{"x":25,"y":17,"type":"AIR"},{"x":26,"y":17,"type":"DIRT"},{"x":27,"y":17,"type":"DIRT"},{"x":28,"y":17,"type":"DIRT"},{"x":29,"y":17,"type":"DIRT"},{"x":30,"y":17,"type":"AIR"},{"x":31,"y":17,"type":"AIR"},{"x":32,"y":17,"type":"AIR"}],[{"x":0,"y":18,"type":"DIRT"},{"x":1,"y":18,"type":"DIRT"},{"x":2,"y":18,"type":"DIRT"},{"x":3,"y":18,"type":"DIRT"},{"x":4,"y":18,"type":"DIRT"},{"x":5,"y":18,"type":"DIRT"},{"x":6,"y":18,"type":"DIRT"},{"x":7,"y":18,"type":"AIR"},{"x":8,"y":18,"type":"AIR"},{"x":9,"y":18,"type":"AIR"},{"x":10,"y":18,"type":"DIRT"},{"x":11,"y":18,"type":"DIRT"},{"x":12,"y":18,"type":"DIRT"},{"x":13,"y":18,"type":"DIRT"},{"x":14,"y":18,"type":"DIRT"},{"x":15,"y":18,"type":"DIRT"},{"x":16,"y":18,"type":"DIRT"},{"x":17,"y":18,"type":"DIRT"},{"x":18,"y":18,"type":"DIRT"},{"x":19,"y":18,"type":"DIRT"},{"x":20,"y":18,"type":"DIRT"},{"x":21,"y":18,"type":"DIRT"},{"x":22,"y":18,"type":"DIRT"},{"x":23,"y":18,"type":"AIR"},{"x":24,"y":18,"type":"AIR"},{"x":25,"y":18,"type":"AIR"},{"x":26,"y":18,"type":"DIRT"},{"x":27,"y":18,"type":"DIRT"},{"x":28,"y":18,"type":"DIRT"},{"x":29,"y":18,"type":"DIRT"},{"x":30,"y":18,"type":"DIRT"},{"x":31,"y":18,"type":"DIRT"},{"x":32,"y":18,"type":"DIRT"}],[{"x":0,"y":19,"type":"AIR"},{"x":1,"y":19,"type":"AIR"},{"x":2,"y":19,"type":"AIR"},{"x":3,"y":19,"type":"DIRT"},{"x":4,"y":19,"type":"DIRT"},{"x":5,"y":19,"type":"AIR"},{"x":6,"y":19,"type":"AIR"},{"x":7,"y":19,"type":"DIRT"},{"x":8,"y":19,"type":"DIRT"},{"x":9,"y":19,"type":"AIR"},{"x":10,"y":19,"type":"AIR"},{"x":11,"y":19,"type":"DIRT"},{"x":12,"y":19,"type":"DIRT"},{"x":13,"y":19,"type":"AIR"},{"x":14,"y":19,"type":"AIR"},{"x":15,"y":19,"type":"AIR"},{"x":16,"y":19,"type":"DIRT"},{"x":17,"y":19,"type":"AIR"},{"x":18,"y":19,"type":"AIR"},{"x":19,"y":19,"type":"AIR"},{"x":20,"y":19,"type":"DIRT"},{"x":21,"y":19,"type":"DIRT"},{"x":22,"y":19,"type":"AIR"},{"x":23,"y":19,"type":"AIR"},{"x":24,"y":19,"type":"DIRT"},{"x":25,"y":19,"type":"DIRT"},{"x":26,"y":19,"type":"AIR"},{"x":27,"y":19,"type":"AIR"},{"x":28,"y":19,"type":"DIRT"},{"x":29,"y":19,"type":"DIRT"},{"x":30,"y":19,"type":"AIR"},{"x":31,"y":19,"type":"AIR"},{"x":32,"y":19,"type":"AIR"}],[{"x":0,"y":20,"type":"DIRT"},{"x":1,"y":20,"type":"AIR"},{"x":2,"y":20,"type":"AIR"},{"x":3,"y":20,"type":"AIR"},{"x":4,"y":20,"type":"AIR"},{"x":5,"y":20,"type":"AIR"},{"x":6,"y":20,"type":"AIR"},{"x":7,"y":20,"type":"DIRT"},{"x":8,"y":20,"type":"DIRT"},{"x":9,"y":20,"type":"AIR"},{"x":10,"y":20,"type":"AIR"},{"x":11,"y":20,"type":"AIR"},{"x":12,"y":20,"type":"AIR"},{"x":13,"y":20,"type":"AIR"},{"x":14,"y":20,"type":"AIR"},{"x":15,"y":20,"type":"AIR"},{"x":16,"y":20,"type":"DIRT"},{"x":17,"y":20,"type":"AIR"},{"x":18,"y":20,"type":"AIR"},{"x":19,"y":20,"type":"AIR"},{"x":20,"y":20,"type":"AIR"},{"x":21,"y":20,"type":"AIR"},{"x":22,"y":20,"type":"AIR"},{"x":23,"y":20,"type":"AIR"},{"x":24,"y":20,"type":"DIRT"},{"x":25,"y":20,"type":"DIRT"},{"x":26,"y":20,"type":"AIR"},{"x":27,"y":20,"type":"AIR"},{"x":28,"y":20,"type":"AIR"},{"x":29,"y":20,"type":"AIR"},{"x":30,"y":20,"type":"AIR"},{"x":31,"y":20,"type":"AIR"},{"x":32,"y":20,"type":"DIRT"}],[{"x":0,"y":21,"type":"AIR"},{"x":1,"y":21,"type":"AIR"},{"x":2,"y":21,"type":"AIR"},{"x":3,"y":21,"type":"AIR"},{"x":4,"y":21,"type":"AIR"},{"x":5,"y":21,"type":"AIR"},{"x":6,"y":21,"type":"AIR"},{"x":7,"y":21,"type":"AIR"},{"x":8,"y":21,"type":"DIRT"},{"x":9,"y":21,"type":"DIRT"},{"x":10,"y":21,"type":"DIRT"},{"x":11,"y":21,"type":"AIR"},{"x":12,"y":21,"type":"AIR"},{"x":13,"y":21,"type":"DIRT"},{"x":14,"y":21,"type":"DIRT"},{"x":15,"y":21,"type":"AIR"},{"x":16,"y":21,"type":"AIR"},{"x":17,"y":21,"type":"AIR"},{"x":18,"y":21,"type":"DIRT"},{"x":19,"y":21,"type":"DIRT"},{"x":20,"y":21,"type":"AIR"},{"x":21,"y":21,"type":"AIR"},{"x":22,"y":21,"type":"DIRT"},{"x":23,"y":21,"type":"DIRT"},{"x":24,"y":21,"type":"DIRT"},{"x":25,"y":21,"type":"AIR"},{"x":26,"y":21,"type":"AIR"},{"x":27,"y":21,"type":"AIR"},{"x":28,"y":21,"type":"AIR"},{"x":29,"y":21,"type":"AIR"},{"x":30,"y":21,"type":"AIR"},{"x":31,"y":21,"type":"AIR"},{"x":32,"y":21,"type":"AIR"}],[{"x":0,"y":22,"type":"DEEP_SPACE"},{"x":1,"y":22,"type":"AIR"},{"x":2,"y":22,"type":"DIRT"},{"x":3,"y":22,"type":"DIRT"},{"x":4,"y":22,"type":"AIR"},{"x":5,"y":22,"type":"AIR"},{"x":6,"y":22,"type":"AIR"},{"x":7,"y":22,"type":"AIR"},{"x":8,"y":22,"type":"AIR"},{"x":9,"y":22,"type":"DIRT"},{"x":10,"y":22,"type":"DIRT"},{"x":11,"y":22,"type":"DIRT"},{"x":12,"y":22,"type":"AIR"},{"x":13,"y":22,"type":"DIRT"},{"x":14,"y":22,"type":"DIRT"},{"x":15,"y":22,"type":"AIR"},{"x":16,"y":22,"type":"AIR"},{"x":17,"y":22,"type":"AIR"},{"x":18,"y":22,"type":"DIRT"},{"x":19,"y":22,"type":"DIRT"},{"x":20,"y":22,"type":"AIR"},{"x":21,"y":22,"type":"DIRT"},{"x":22,"y":22,"type":"DIRT"},{"x":23,"y":22,"type":"DIRT"},{"x":24,"y":22,"type":"AIR"},{"x":25,"y":22,"type":"AIR"},{"x":26,"y":22,"type":"AIR"},{"x":27,"y":22,"type":"AIR"},{"x":28,"y":22,"type":"AIR"},{"x":29,"y":22,"type":"DIRT"},{"x":30,"y":22,"type":"DIRT"},{"x":31,"y":22,"type":"AIR"},{"x":32,"y":22,"type":"DEEP_SPACE"}],[{"x":0,"y":23,"type":"DEEP_SPACE"},{"x":1,"y":23,"type":"AIR"},{"x":2,"y":23,"type":"DIRT"},{"x":3,"y":23,"type":"DIRT"},{"x":4,"y":23,"type":"AIR"},{"x":5,"y":23,"type":"AIR"},{"x":6,"y":23,"type":"AIR"},{"x":7,"y":23,"type":"AIR"},{"x":8,"y":23,"type":"AIR"},{"x":9,"y":23,"type":"DIRT"},{"x":10,"y":23,"type":"DIRT"},{"x":11,"y":23,"type":"DIRT"},{"x":12,"y":23,"type":"AIR"},{"x":13,"y":23,"type":"DIRT"},{"x":14,"y":23,"type":"DIRT"},{"x":15,"y":23,"type":"AIR"},{"x":16,"y":23,"type":"DIRT"},{"x":17,"y":23,"type":"AIR"},{"x":18,"y":23,"type":"DIRT"},{"x":19,"y":23,"type":"DIRT"},{"x":20,"y":23,"type":"AIR"},{"x":21,"y":23,"type":"DIRT"},{"x":22,"y":23,"type":"DIRT"},{"x":23,"y":23,"type":"DIRT"},{"x":24,"y":23,"type":"AIR"},{"x":25,"y":23,"type":"AIR"},{"x":26,"y":23,"type":"AIR"},{"x":27,"y":23,"type":"AIR"},{"x":28,"y":23,"type":"AIR"},{"x":29,"y":23,"type":"DIRT"},{"x":30,"y":23,"type":"DIRT"},{"x":31,"y":23,"type":"AIR"},{"x":32,"y":23,"type":"DEEP_SPACE"}],[{"x":0,"y":24,"type":"DEEP_SPACE"},{"x":1,"y":24,"type":"AIR"},{"x":2,"y":24,"type":"DIRT"},{"x":3,"y":24,"type":"DIRT"},{"x":4,"y":24,"type":"AIR"},{"x":5,"y":24,"type":"AIR"},{"x":6,"y":24,"type":"DIRT"},{"x":7,"y":24,"type":"AIR"},{"x":8,"y":24,"type":"AIR"},{"x":9,"y":24,"type":"AIR"},{"x":10,"y":24,"type":"AIR"},{"x":11,"y":24,"type":"AIR"},{"x":12,"y":24,"type":"AIR"},{"x":13,"y":24,"type":"AIR"},{"x":14,"y":24,"type":"AIR"},{"x":15,"y":24,"type":"AIR"},{"x":16,"y":24,"type":"DIRT"},{"x":17,"y":24,"type":"AIR"},{"x":18,"y":24,"type":"AIR"},{"x":19,"y":24,"type":"AIR"},{"x":20,"y":24,"type":"AIR"},{"x":21,"y":24,"type":"AIR"},{"x":22,"y":24,"type":"AIR"},{"x":23,"y":24,"type":"AIR"},{"x":24,"y":24,"type":"AIR"},{"x":25,"y":24,"type":"AIR"},{"x":26,"y":24,"type":"DIRT"},{"x":27,"y":24,"type":"AIR"},{"x":28,"y":24,"type":"AIR"},{"x":29,"y":24,"type":"DIRT"},{"x":30,"y":24,"type":"DIRT"},{"x":31,"y":24,"type":"AIR"},{"x":32,"y":24,"type":"DEEP_SPACE"}],[{"x":0,"y":25,"type":"DEEP_SPACE"},{"x":1,"y":25,"type":"DEEP_SPACE"},{"x":2,"y":25,"type":"AIR"},{"x":3,"y":25,"type":"AIR"},{"x":4,"y":25,"type":"DIRT"},{"x":5,"y":25,"type":"AIR"},{"x":6,"y":25,"type":"AIR"},{"x":7,"y":25,"type":"AIR"},{"x":8,"y":25,"type":"AIR"},{"x":9,"y":25,"type":"AIR"},{"x":10,"y":25,"type":"AIR"},{"x":11,"y":25,"type":"AIR"},{"x":12,"y":25,"type":"AIR"},{"x":13,"y":25,"type":"AIR"},{"x":14,"y":25,"type":"AIR"},{"x":15,"y":25,"type":"AIR"},{"x":16,"y":25,"type":"DIRT"},{"x":17,"y":25,"type":"AIR"},{"x":18,"y":25,"type":"AIR"},{"x":19,"y":25,"type":"AIR"},{"x":20,"y":25,"type":"AIR"},{"x":21,"y":25,"type":"AIR"},{"x":22,"y":25,"type":"AIR"},{"x":23,"y":25,"type":"AIR"},{"x":24,"y":25,"type":"AIR"},{"x":25,"y":25,"type":"AIR"},{"x":26,"y":25,"type":"AIR"},{"x":27,"y":25,"type":"AIR"},{"x":28,"y":25,"type":"DIRT"},{"x":29,"y":25,"type":"AIR"},{"x":30,"y":25,"type":"AIR"},{"x":31,"y":25,"type":"DEEP_SPACE"},{"x":32,"y":25,"type":"DEEP_SPACE"}],[{"x":0,"y":26,"type":"DEEP_SPACE"},{"x":1,"y":26,"type":"DEEP_SPACE"},{"x":2,"y":26,"type":"DEEP_SPACE"},{"x":3,"y":26,"type":"AIR"},{"x":4,"y":26,"type":"AIR"},{"x":5,"y":26,"type":"AIR"},{"x":6,"y":26,"type":"DIRT"},{"x":7,"y":26,"type":"DIRT"},{"x":8,"y":26,"type":"DIRT"},{"x":9,"y":26,"type":"DIRT"},{"x":10,"y":26,"type":"DIRT"},{"x":11,"y":26,"type":"AIR"},{"x":12,"y":26,"type":"DIRT"},{"x":13,"y":26,"type":"DIRT"},{"x":14,"y":26,"type":"DIRT"},{"x":15,"y":26,"type":"AIR"},{"x":16,"y":26,"type":"DIRT"},{"x":17,"y":26,"type":"AIR"},{"x":18,"y":26,"type":"DIRT"},{"x":19,"y":26,"type":"DIRT"},{"x":20,"y":26,"type":"DIRT"},{"x":21,"y":26,"type":"AIR"},{"x":22,"y":26,"type":"DIRT"},{"x":23,"y":26,"type":"DIRT"},{"x":24,"y":26,"type":"DIRT"},{"x":25,"y":26,"type":"DIRT"},{"x":26,"y":26,"type":"DIRT"},{"x":27,"y":26,"type":"AIR"},{"x":28,"y":26,"type":"AIR"},{"x":29,"y":26,"type":"AIR"},{"x":30,"y":26,"type":"DEEP_SPACE"},{"x":31,"y":26,"type":"DEEP_SPACE"},{"x":32,"y":26,"type":"DEEP_SPACE"}],[{"x":0,"y":27,"type":"DEEP_SPACE"},{"x":1,"y":27,"type":"DEEP_SPACE"},{"x":2,"y":27,"type":"DEEP_SPACE"},{"x":3,"y":27,"type":"DEEP_SPACE"},{"x":4,"y":27,"type":"AIR"},{"x":5,"y":27,"type":"AIR"},{"x":6,"y":27,"type":"DIRT"},{"x":7,"y":27,"type":"AIR"},{"x":8,"y":27,"type":"AIR"},{"x":9,"y":27,"type":"AIR"},{"x":10,"y":27,"type":"DIRT"},{"x":11,"y":27,"type":"DIRT"},{"x":12,"y":27,"type":"DIRT"},{"x":13,"y":27,"type":"DIRT"},{"x":14,"y":27,"type":"DIRT"},{"x":15,"y":27,"type":"AIR"},{"x":16,"y":27,"type":"AIR"},{"x":17,"y":27,"type":"AIR"},{"x":18,"y":27,"type":"DIRT"},{"x":19,"y":27,"type":"DIRT"},{"x":20,"y":27,"type":"DIRT"},{"x":21,"y":27,"type":"DIRT"},{"x":22,"y":27,"type":"DIRT"},{"x":23,"y":27,"type":"AIR"},{"x":24,"y":27,"type":"AIR"},{"x":25,"y":27,"type":"AIR"},{"x":26,"y":27,"type":"DIRT"},{"x":27,"y":27,"type":"AIR"},{"x":28,"y":27,"type":"AIR"},{"x":29,"y":27,"type":"DEEP_SPACE"},{"x":30,"y":27,"type":"DEEP_SPACE"},{"x":31,"y":27,"type":"DEEP_SPACE"},{"x":32,"y":27,"type":"DEEP_SPACE"}],[{"x":0,"y":28,"type":"DEEP_SPACE"},{"x":1,"y":28,"type":"DEEP_SPACE"},{"x":2,"y":28,"type":"DEEP_SPACE"},{"x":3,"y":28,"type":"DEEP_SPACE"},{"x":4,"y":28,"type":"DIRT"},{"x":5,"y":28,"type":"DIRT"},{"x":6,"y":28,"type":"DIRT"},{"x":7,"y":28,"type":"AIR"},{"x":8,"y":28,"type":"AIR","occupier":{"id":1,"playerId":2,"health":150,"position":{"x":8,"y":28},"weapon":{"damage":8,"range":4},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Commando"}},{"x":9,"y":28,"type":"AIR"},{"x":10,"y":28,"type":"DIRT"},{"x":11,"y":28,"type":"AIR"},{"x":12,"y":28,"type":"AIR"},{"x":13,"y":28,"type":"DIRT"},{"x":14,"y":28,"type":"AIR"},{"x":15,"y":28,"type":"AIR"},{"x":16,"y":28,"type":"AIR"},{"x":17,"y":28,"type":"AIR"},{"x":18,"y":28,"type":"AIR"},{"x":19,"y":28,"type":"DIRT"},{"x":20,"y":28,"type":"AIR"},{"x":21,"y":28,"type":"AIR"},{"x":22,"y":28,"type":"DIRT"},{"x":23,"y":28,"type":"AIR"},{"x":24,"y":28,"type":"AIR","occupier":{"id":2,"playerId":1,"health":100,"position":{"x":24,"y":28},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Agent"}},{"x":25,"y":28,"type":"AIR"},{"x":26,"y":28,"type":"DIRT"},{"x":27,"y":28,"type":"DIRT"},{"x":28,"y":28,"type":"DIRT"},{"x":29,"y":28,"type":"DEEP_SPACE"},{"x":30,"y":28,"type":"DEEP_SPACE"},{"x":31,"y":28,"type":"DEEP_SPACE"},{"x":32,"y":28,"type":"DEEP_SPACE"}],[{"x":0,"y":29,"type":"DEEP_SPACE"},{"x":1,"y":29,"type":"DEEP_SPACE"},{"x":2,"y":29,"type":"DEEP_SPACE"},{"x":3,"y":29,"type":"DEEP_SPACE"},{"x":4,"y":29,"type":"DEEP_SPACE"},{"x":5,"y":29,"type":"DEEP_SPACE"},{"x":6,"y":29,"type":"DIRT"},{"x":7,"y":29,"type":"AIR"},{"x":8,"y":29,"type":"AIR"},{"x":9,"y":29,"type":"AIR"},{"x":10,"y":29,"type":"DIRT"},{"x":11,"y":29,"type":"AIR"},{"x":12,"y":29,"type":"DIRT"},{"x":13,"y":29,"type":"DIRT"},{"x":14,"y":29,"type":"DIRT"},{"x":15,"y":29,"type":"AIR"},{"x":16,"y":29,"type":"DIRT"},{"x":17,"y":29,"type":"AIR"},{"x":18,"y":29,"type":"DIRT"},{"x":19,"y":29,"type":"DIRT"},{"x":20,"y":29,"type":"DIRT"},{"x":21,"y":29,"type":"AIR"},{"x":22,"y":29,"type":"DIRT"},{"x":23,"y":29,"type":"AIR"},{"x":24,"y":29,"type":"AIR"},{"x":25,"y":29,"type":"AIR"},{"x":26,"y":29,"type":"DIRT"},{"x":27,"y":29,"type":"DEEP_SPACE"},{"x":28,"y":29,"type":"DEEP_SPACE"},{"x":29,"y":29,"type":"DEEP_SPACE"},{"x":30,"y":29,"type":"DEEP_SPACE"},{"x":31,"y":29,"type":"DEEP_SPACE"},{"x":32,"y":29,"type":"DEEP_SPACE"}],[{"x":0,"y":30,"type":"DEEP_SPACE"},{"x":1,"y":30,"type":"DEEP_SPACE"},{"x":2,"y":30,"type":"DEEP_SPACE"},{"x":3,"y":30,"type":"DEEP_SPACE"},{"x":4,"y":30,"type":"DEEP_SPACE"},{"x":5,"y":30,"type":"DEEP_SPACE"},{"x":6,"y":30,"type":"DEEP_SPACE"},{"x":7,"y":30,"type":"DIRT"},{"x":8,"y":30,"type":"DIRT"},{"x":9,"y":30,"type":"DIRT"},{"x":10,"y":30,"type":"DIRT"},{"x":11,"y":30,"type":"DIRT"},{"x":12,"y":30,"type":"DIRT"},{"x":13,"y":30,"type":"DIRT"},{"x":14,"y":30,"type":"AIR"},{"x":15,"y":30,"type":"DIRT"},{"x":16,"y":30,"type":"DIRT"},{"x":17,"y":30,"type":"DIRT"},{"x":18,"y":30,"type":"AIR"},{"x":19,"y":30,"type":"DIRT"},{"x":20,"y":30,"type":"DIRT"},{"x":21,"y":30,"type":"DIRT"},{"x":22,"y":30,"type":"DIRT"},{"x":23,"y":30,"type":"DIRT"},{"x":24,"y":30,"type":"DIRT"},{"x":25,"y":30,"type":"DIRT"},{"x":26,"y":30,"type":"DEEP_SPACE"},{"x":27,"y":30,"type":"DEEP_SPACE"},{"x":28,"y":30,"type":"DEEP_SPACE"},{"x":29,"y":30,"type":"DEEP_SPACE"},{"x":30,"y":30,"type":"DEEP_SPACE"},{"x":31,"y":30,"type":"DEEP_SPACE"},{"x":32,"y":30,"type":"DEEP_SPACE"}],[{"x":0,"y":31,"type":"DEEP_SPACE"},{"x":1,"y":31,"type":"DEEP_SPACE"},{"x":2,"y":31,"type":"DEEP_SPACE"},{"x":3,"y":31,"type":"DEEP_SPACE"},{"x":4,"y":31,"type":"DEEP_SPACE"},{"x":5,"y":31,"type":"DEEP_SPACE"},{"x":6,"y":31,"type":"DEEP_SPACE"},{"x":7,"y":31,"type":"DEEP_SPACE"},{"x":8,"y":31,"type":"AIR"},{"x":9,"y":31,"type":"AIR"},{"x":10,"y":31,"type":"AIR"},{"x":11,"y":31,"type":"AIR"},{"x":12,"y":31,"type":"DIRT"},{"x":13,"y":31,"type":"AIR"},{"x":14,"y":31,"type":"AIR"},{"x":15,"y":31,"type":"DIRT"},{"x":16,"y":31,"type":"DIRT"},{"x":17,"y":31,"type":"DIRT"},{"x":18,"y":31,"type":"AIR"},{"x":19,"y":31,"type":"AIR"},{"x":20,"y":31,"type":"DIRT"},{"x":21,"y":31,"type":"AIR"},{"x":22,"y":31,"type":"AIR"},{"x":23,"y":31,"type":"AIR"},{"x":24,"y":31,"type":"AIR"},{"x":25,"y":31,"type":"DEEP_SPACE"},{"x":26,"y":31,"type":"DEEP_SPACE"},{"x":27,"y":31,"type":"DEEP_SPACE"},{"x":28,"y":31,"type":"DEEP_SPACE"},{"x":29,"y":31,"type":"DEEP_SPACE"},{"x":30,"y":31,"type":"DEEP_SPACE"},{"x":31,"y":31,"type":"DEEP_SPACE"},{"x":32,"y":31,"type":"DEEP_SPACE"}],[{"x":0,"y":32,"type":"DEEP_SPACE"},{"x":1,"y":32,"type":"DEEP_SPACE"},{"x":2,"y":32,"type":"DEEP_SPACE"},{"x":3,"y":32,"type":"DEEP_SPACE"},{"x":4,"y":32,"type":"DEEP_SPACE"},{"x":5,"y":32,"type":"DEEP_SPACE"},{"x":6,"y":32,"type":"DEEP_SPACE"},{"x":7,"y":32,"type":"DEEP_SPACE"},{"x":8,"y":32,"type":"DEEP_SPACE"},{"x":9,"y":32,"type":"DEEP_SPACE"},{"x":10,"y":32,"type":"DEEP_SPACE"},{"x":11,"y":32,"type":"AIR"},{"x":12,"y":32,"type":"DIRT"},{"x":13,"y":32,"type":"DIRT"},{"x":14,"y":32,"type":"DIRT"},{"x":15,"y":32,"type":"DIRT"},{"x":16,"y":32,"type":"DIRT"},{"x":17,"y":32,"type":"DIRT"},{"x":18,"y":32,"type":"DIRT"},{"x":19,"y":32,"type":"DIRT"},{"x":20,"y":32,"type":"DIRT"},{"x":21,"y":32,"type":"AIR"},{"x":22,"y":32,"type":"DEEP_SPACE"},{"x":23,"y":32,"type":"DEEP_SPACE"},{"x":24,"y":32,"type":"DEEP_SPACE"},{"x":25,"y":32,"type":"DEEP_SPACE"},{"x":26,"y":32,"type":"DEEP_SPACE"},{"x":27,"y":32,"type":"DEEP_SPACE"},{"x":28,"y":32,"type":"DEEP_SPACE"},{"x":29,"y":32,"type":"DEEP_SPACE"},{"x":30,"y":32,"type":"DEEP_SPACE"},{"x":31,"y":32,"type":"DEEP_SPACE"},{"x":32,"y":32,"type":"DEEP_SPACE"}]],"visualizerEvents":[]} \ No newline at end of file
diff --git a/2019-worms/tests/replays/2019.08.19.21.31.16/B-log.csv b/2019-worms/tests/replays/2019.08.19.21.31.16/B-log.csv
new file mode 100644
index 0000000..57ec18e
--- /dev/null
+++ b/2019-worms/tests/replays/2019.08.19.21.31.16/B-log.csv
@@ -0,0 +1,274 @@
+Round,LastCommandType,LastCommand,ActiveWorm,Score,Health,Worm1 Health,Worm1 x,Worm1 y,Worm2 Health,Worm2 x,Worm2 y,Worm3 Health,Worm3 x,Worm3 y
+1,null,"null",1,116,350,150,8,28,100,8,4,100,31,16
+2,move,"move 9 27",1,121,350,150,9,27,100,8,4,100,31,16
+3,move,"move 9 5",2,126,350,150,9,27,100,9,5,100,31,16
+4,move,"move 30 17",3,131,350,150,9,27,100,9,5,100,30,17
+5,dig,"dig 10 26",1,138,350,150,9,27,100,9,5,100,30,17
+6,dig,"dig 10 6",2,145,350,150,9,27,100,9,5,100,30,17
+7,dig,"dig 29 17",3,152,350,150,9,27,100,9,5,100,30,17
+8,move,"move 10 26",1,157,350,150,10,26,100,9,5,100,30,17
+9,move,"move 10 6",2,162,350,150,10,26,100,10,6,100,30,17
+10,move,"move 29 17",3,167,350,150,10,26,100,10,6,100,29,17
+11,move,"move 11 25",1,172,350,150,11,25,100,10,6,100,29,17
+12,move,"move 11 7",2,177,350,150,11,25,100,11,7,100,29,17
+13,dig,"dig 28 17",3,184,350,150,11,25,100,11,7,100,29,17
+14,move,"move 12 24",1,189,350,150,12,24,100,11,7,100,29,17
+15,move,"move 12 8",2,194,350,150,12,24,100,12,8,100,29,17
+16,move,"move 28 17",3,199,350,150,12,24,100,12,8,100,28,17
+17,dig,"dig 13 23",1,206,350,150,12,24,100,12,8,100,28,17
+18,dig,"dig 13 9",2,213,350,150,12,24,100,12,8,100,28,17
+19,dig,"dig 27 17",3,220,350,150,12,24,100,12,8,100,28,17
+20,move,"move 13 23",1,225,350,150,13,23,100,12,8,100,28,17
+21,move,"move 13 9",2,230,350,150,13,23,100,13,9,100,28,17
+22,move,"move 27 17",3,235,350,150,13,23,100,13,9,100,27,17
+23,dig,"dig 14 22",1,242,350,150,13,23,100,13,9,100,27,17
+24,move,"move 14 10",2,247,350,150,13,23,100,14,10,100,27,17
+25,dig,"dig 26 17",3,254,350,150,13,23,100,14,10,100,27,17
+26,move,"move 14 22",1,259,350,150,14,22,100,14,10,100,27,17
+27,move,"move 14 11",2,264,350,150,14,22,100,14,11,100,27,17
+28,move,"move 26 17",3,269,350,150,14,22,100,14,11,100,26,17
+29,move,"move 15 21",1,274,350,150,15,21,100,14,11,100,26,17
+30,dig,"dig 14 12",2,281,350,150,15,21,100,14,11,100,26,17
+31,move,"move 25 17",3,286,350,150,15,21,100,14,11,100,25,17
+32,dig,"dig 16 20",1,293,350,150,15,21,100,14,11,100,25,17
+33,move,"move 14 12",2,298,350,150,15,21,100,14,12,100,25,17
+34,move,"move 24 17",3,303,350,150,15,21,100,14,12,100,24,17
+35,move,"move 16 20",1,308,350,150,16,20,100,14,12,100,24,17
+36,dig,"dig 14 13",2,315,350,150,16,20,100,14,12,100,24,17
+37,move,"move 23 17",3,320,350,150,16,20,100,14,12,100,23,17
+38,move,"move 17 19",1,325,350,150,17,19,100,14,12,100,23,17
+39,move,"move 14 13",2,330,350,150,17,19,100,14,13,100,23,17
+40,move,"move 22 17",3,335,350,150,17,19,100,14,13,100,22,17
+41,dig,"dig 18 18",1,342,350,150,17,19,100,14,13,100,22,17
+42,move,"move 14 14",2,347,350,150,17,19,100,14,14,100,22,17
+43,dig,"dig 21 17",3,354,350,150,17,19,100,14,14,100,22,17
+44,move,"move 18 18",1,359,350,150,18,18,100,14,14,100,22,17
+45,move,"move 14 15",2,368,360,150,18,18,110,14,15,100,22,17
+46,move,"move 21 17",3,373,360,150,18,18,110,14,15,100,21,17
+47,move,"move 18 17",1,381,370,160,18,17,110,14,15,100,21,17
+48,move,"move 15 14",2,386,370,160,18,17,110,15,14,100,21,17
+49,move,"move 22 16",3,391,370,160,18,17,110,15,14,100,22,16
+50,move,"move 19 16",1,396,370,160,19,16,110,15,14,100,22,16
+51,dig,"dig 16 13",2,403,370,160,19,16,110,15,14,100,22,16
+52,dig,"dig 22 15",3,410,370,160,19,16,110,15,14,100,22,16
+53,move,"move 20 15",1,415,370,160,20,15,110,15,14,100,22,16
+54,move,"move 16 13",2,420,370,160,20,15,110,16,13,100,22,16
+55,dig,"dig 23 15",3,427,370,160,20,15,110,16,13,100,22,16
+56,move,"move 21 14",1,432,370,160,21,14,110,16,13,100,22,16
+57,dig,"dig 17 12",2,439,370,160,21,14,110,16,13,100,22,16
+58,move,"move 22 15",3,444,370,160,21,14,110,16,13,100,22,15
+59,move,"move 22 13",1,449,370,160,22,13,110,16,13,100,22,15
+60,move,"move 17 12",2,454,370,160,22,13,110,17,12,100,22,15
+61,dig,"dig 23 14",3,461,370,160,22,13,110,17,12,100,22,15
+62,dig,"dig 23 12",1,468,370,160,22,13,110,17,12,100,22,15
+63,move,"move 18 11",2,473,370,160,22,13,110,18,11,100,22,15
+64,dig,"dig 22 14",3,480,370,160,22,13,110,18,11,100,22,15
+65,move,"move 22 12",1,485,370,160,22,12,110,18,11,100,22,15
+66,dig,"dig 19 10",2,492,370,160,22,12,110,18,11,100,22,15
+67,move,"move 23 14",3,497,370,160,22,12,110,18,11,100,23,14
+68,move,"move 23 11",1,502,370,160,23,11,110,18,11,100,23,14
+69,move,"move 19 10",2,507,370,160,23,11,110,19,10,100,23,14
+70,dig,"dig 24 13",3,514,370,160,23,11,110,19,10,100,23,14
+71,move,"move 24 10",1,519,370,160,24,10,110,19,10,100,23,14
+72,dig,"dig 20 9",2,526,370,160,24,10,110,19,10,100,23,14
+73,dig,"dig 23 13",3,533,370,160,24,10,110,19,10,100,23,14
+74,move,"move 23 9",1,538,370,160,23,9,110,19,10,100,23,14
+75,move,"move 20 9",2,543,370,160,23,9,110,20,9,100,23,14
+76,move,"move 22 13",3,548,370,160,23,9,110,20,9,100,22,13
+77,move,"move 22 8",1,553,370,160,22,8,110,20,9,100,22,13
+78,move,"move 21 8",2,558,370,160,22,8,110,21,8,100,22,13
+79,move,"move 22 12",3,563,370,160,22,8,110,21,8,100,22,12
+80,move,"move 22 7",1,568,370,160,22,7,110,21,8,100,22,12
+81,move,"move 20 7",2,573,370,160,22,7,110,20,7,100,22,12
+82,move,"move 22 11",3,578,370,160,22,7,110,20,7,100,22,11
+83,dig,"dig 22 6",1,585,370,160,22,7,110,20,7,100,22,11
+84,dig,"dig 21 6",2,592,370,160,22,7,110,20,7,100,22,11
+85,dig,"dig 21 10",3,599,370,160,22,7,110,20,7,100,22,11
+86,move,"move 21 6",1,604,370,160,21,6,110,20,7,100,22,11
+87,dig,"dig 19 8",2,611,370,160,21,6,110,20,7,100,22,11
+88,move,"move 21 10",3,616,370,160,21,6,110,20,7,100,21,10
+89,dig,"dig 21 5",1,623,370,160,21,6,110,20,7,100,21,10
+90,move,"move 21 8",2,628,370,160,21,6,110,21,8,100,21,10
+91,move,"move 21 9",3,633,370,160,21,6,110,21,8,100,21,9
+92,move,"move 21 5",1,638,370,160,21,5,110,21,8,100,21,9
+93,move,"move 21 7",2,643,370,160,21,5,110,21,7,100,21,9
+94,move,"move 21 8",3,648,370,160,21,5,110,21,7,100,21,8
+95,move,"move 21 4",1,653,370,160,21,4,110,21,7,100,21,8
+96,move,"move 21 6",2,658,370,160,21,4,110,21,6,100,21,8
+97,move,"move 21 7",3,663,370,160,21,4,110,21,6,100,21,7
+98,dig,"dig 21 3",1,670,370,160,21,4,110,21,6,100,21,7
+99,banana,"banana 21 1",2,735,362,152,21,4,110,21,6,100,21,7
+100,shoot,"shoot N",1,749,354,144,21,4,110,21,6,100,21,7
+101,banana,"banana 21 1",2,786,346,136,21,4,110,21,6,100,21,7
+102,shoot,"shoot N",1,799,338,128,21,4,110,21,6,100,21,7
+103,banana,"banana 21 1",2,837,330,120,21,4,110,21,6,100,21,7
+104,shoot,"shoot N",1,853,330,120,21,4,110,21,6,100,21,7
+105,shoot,"shoot N",1,869,330,120,21,4,110,21,6,100,21,7
+106,shoot,"shoot N",1,871,330,120,21,4,110,21,6,100,21,7
+107,dig,"dig 22 5",2,878,330,120,21,4,110,21,6,100,21,7
+108,move,"move 22 6",3,883,330,120,21,4,110,21,6,100,22,6
+109,move,"move 22 3",1,885,322,112,22,3,110,21,6,100,22,6
+110,move,"move 22 5",2,890,322,112,22,3,110,22,5,100,22,6
+111,snowball,"snowball 22 2",3,890,322,112,22,3,110,22,5,100,22,6
+112,shoot,"shoot N",1,890,322,112,22,3,110,22,5,100,22,6
+113,move,"move 22 4",2,895,322,112,22,3,110,22,4,100,22,6
+114,move,"move 22 5",3,900,322,112,22,3,110,22,4,100,22,5
+115,shoot,"shoot N",1,900,322,112,22,3,110,22,4,100,22,5
+116,invalid,"invalid",2,896,322,112,22,3,110,22,4,100,22,5
+117,snowball,"snowball 22 2",3,896,322,112,22,3,110,22,4,100,22,5
+118,shoot,"shoot N",1,896,322,112,22,3,110,22,4,100,22,5
+119,move,"move 23 4",2,901,322,112,22,3,110,23,4,100,22,5
+120,move,"move 22 4",3,906,322,112,22,3,110,23,4,100,22,4
+121,shoot,"shoot N",1,906,322,112,22,3,110,23,4,100,22,4
+122,invalid,"invalid",2,902,322,112,22,3,110,23,4,100,22,4
+123,snowball,"snowball 22 2",3,902,322,112,22,3,110,23,4,100,22,4
+124,shoot,"shoot N",1,902,322,112,22,3,110,23,4,100,22,4
+125,move,"move 23 5",2,907,322,112,22,3,110,23,5,100,22,4
+126,move,"move 21 4",3,912,322,112,22,3,110,23,5,100,21,4
+127,shoot,"shoot N",1,912,322,112,22,3,110,23,5,100,21,4
+128,move,"move 22 4",2,916,319,109,22,3,110,22,4,100,21,4
+129,move,"move 20 4",3,920,316,106,22,3,110,22,4,100,20,4
+130,shoot,"shoot N",1,972,305,95,22,3,110,22,4,100,20,4
+131,move,"move 22 5",2,976,302,92,22,3,110,22,5,100,20,4
+132,move,"move 21 5",3,980,299,89,22,3,110,22,5,100,21,5
+133,move,"move 21 4",1,984,296,86,21,4,110,22,5,100,21,5
+134,move,"move 21 6",2,989,296,86,21,4,110,21,6,100,21,5
+135,move,"move 22 4",3,994,296,86,21,4,110,21,6,100,22,4
+136,move,"move 21 5",1,999,296,86,21,5,110,21,6,100,22,4
+137,move,"move 21 7",2,1004,296,86,21,5,110,21,7,100,22,4
+138,move,"move 23 5",3,1009,296,86,21,5,110,21,7,100,23,5
+139,move,"move 20 6",1,1014,296,86,20,6,110,21,7,100,23,5
+140,move,"move 20 8",2,1019,296,86,20,6,110,20,8,100,23,5
+141,move,"move 22 6",3,1024,296,86,20,6,110,20,8,100,22,6
+142,move,"move 21 7",1,1029,296,86,21,7,110,20,8,100,22,6
+143,move,"move 21 9",2,1034,296,86,21,7,110,21,9,100,22,6
+144,move,"move 21 5",3,1039,296,86,21,7,110,21,9,100,21,5
+145,move,"move 21 8",1,1044,296,86,21,8,110,21,9,100,21,5
+146,dig,"dig 20 10",2,1051,296,86,21,8,110,21,9,100,21,5
+147,move,"move 20 6",3,1056,296,86,21,8,110,21,9,100,20,6
+148,move,"move 20 9",1,1061,296,86,20,9,110,21,9,100,20,6
+149,move,"move 20 10",2,1066,296,86,20,9,110,20,10,100,20,6
+150,dig,"dig 19 7",3,1073,296,86,20,9,110,20,10,100,20,6
+151,move,"move 19 10",1,1078,296,86,19,10,110,20,10,100,20,6
+152,dig,"dig 19 11",2,1085,296,86,19,10,110,20,10,100,20,6
+153,move,"move 19 7",3,1090,296,86,19,10,110,20,10,100,19,7
+154,move,"move 20 11",1,1095,296,86,20,11,110,20,10,100,19,7
+155,move,"move 21 11",2,1100,296,86,20,11,110,21,11,100,19,7
+156,move,"move 20 8",3,1105,296,86,20,11,110,21,11,100,20,8
+157,move,"move 19 12",1,1110,296,86,19,12,110,21,11,100,20,8
+158,move,"move 20 12",2,1115,296,86,19,12,110,20,12,100,20,8
+159,dig,"dig 19 9",3,1122,296,86,19,12,110,20,12,100,20,8
+160,move,"move 19 13",1,1127,296,86,19,13,110,20,12,100,20,8
+161,move,"move 20 11",2,1132,296,86,19,13,110,20,11,100,20,8
+162,move,"move 19 9",3,1137,296,86,19,13,110,20,11,100,19,9
+163,move,"move 20 14",1,1142,296,86,20,14,110,20,11,100,19,9
+164,move,"move 20 12",2,1147,296,86,20,14,110,20,12,100,19,9
+165,move,"move 20 10",3,1152,296,86,20,14,110,20,12,100,20,10
+166,dig,"dig 21 15",1,1159,296,86,20,14,110,20,12,100,20,10
+167,move,"move 21 13",2,1162,289,79,20,14,110,21,13,100,20,10
+168,move,"move 20 11",3,1167,289,79,20,14,110,21,13,100,20,11
+169,move,"move 21 15",1,1172,289,79,21,15,110,21,13,100,20,11
+170,move,"move 21 14",2,1177,289,79,21,15,110,21,14,100,20,11
+171,move,"move 21 12",3,1171,256,59,21,15,97,21,14,100,21,12
+172,move,"move 21 16",1,1176,256,59,21,16,97,21,14,100,21,12
+173,move,"move 21 15",2,1170,223,39,21,16,84,21,15,100,21,12
+174,move,"move 21 13",3,1175,223,39,21,16,84,21,15,100,21,13
+175,move,"move 21 17",1,1180,223,39,21,17,84,21,15,100,21,13
+176,move,"move 21 16",2,1185,223,39,21,17,84,21,16,100,21,13
+177,move,"move 21 14",3,1190,223,39,21,17,84,21,16,100,21,14
+178,move,"move 21 18",1,1195,223,39,21,18,84,21,16,100,21,14
+179,move,"move 21 17",2,1200,223,39,21,18,84,21,17,100,21,14
+180,move,"move 21 15",3,1205,223,39,21,18,84,21,17,100,21,15
+181,dig,"dig 20 19",1,1212,223,39,21,18,84,21,17,100,21,15
+182,move,"move 20 18",2,1217,223,39,21,18,84,20,18,100,21,15
+183,move,"move 20 16",3,1219,215,39,21,18,76,20,18,100,20,16
+184,move,"move 20 19",1,1224,215,39,20,19,76,20,18,100,20,16
+185,dig,"dig 21 19",2,1229,207,31,20,19,76,20,18,100,20,16
+186,move,"move 20 17",3,1234,207,31,20,19,76,20,18,100,20,17
+187,shoot,"shoot S",1,1236,207,31,20,19,76,20,18,100,20,17
+188,move,"move 21 19",2,1241,207,31,20,19,76,21,19,100,20,17
+189,move,"move 21 18",3,1243,199,31,20,19,68,21,19,100,21,18
+190,move,"move 21 20",1,1248,199,31,21,20,68,21,19,100,21,18
+191,move,"move 20 18",2,1250,191,23,21,20,68,20,18,100,21,18
+192,move,"move 21 19",3,1255,191,23,21,20,68,20,18,100,21,19
+193,shoot,"shoot S",1,1257,191,23,21,20,68,20,18,100,21,19
+194,invalid,"invalid",2,1253,191,23,21,20,68,20,18,100,21,19
+195,shoot,"shoot SE",3,1255,191,23,21,20,68,20,18,100,21,19
+196,move,"move 22 19",1,1260,191,23,22,19,68,20,18,100,21,19
+197,move,"move 20 17",2,1263,183,15,22,19,68,20,17,100,21,19
+198,move,"move 22 20",3,1268,183,15,22,19,68,20,17,100,22,20
+199,shoot,"shoot E",1,1270,183,15,22,19,68,20,17,100,22,20
+200,move,"move 21 18",2,1275,183,15,22,19,68,21,18,100,22,20
+201,move,"move 23 19",3,1280,183,15,22,19,68,21,18,100,23,19
+202,move,"move 23 18",1,1285,183,15,23,18,68,21,18,100,23,19
+203,move,"move 22 17",2,1287,175,7,23,18,68,22,17,100,23,19
+204,move,"move 22 19",3,1292,175,7,23,18,68,22,17,100,22,19
+205,shoot,"shoot N",1,1294,175,7,23,18,68,22,17,100,22,19
+206,move,"move 23 16",2,1299,175,7,23,18,68,23,16,100,22,19
+207,move,"move 23 20",3,1301,167,7,23,18,60,23,16,100,23,20
+208,move,"move 24 17",1,1306,167,7,24,17,60,23,16,100,23,20
+209,shoot,"shoot E",2,1308,167,7,24,17,60,23,16,100,23,20
+210,dig,"dig 24 19",3,1315,167,7,24,17,60,23,16,100,23,20
+211,move,"move 23 17",1,1320,167,7,23,17,60,23,16,100,23,20
+212,move,"move 22 15",2,1325,167,7,23,17,60,22,15,100,23,20
+213,move,"move 22 19",3,1328,159,7,23,17,52,22,15,100,22,19
+214,move,"move 22 16",1,1333,159,7,22,16,52,22,15,100,22,19
+215,shoot,"shoot N",2,1335,159,7,22,16,52,22,15,100,22,19
+216,move,"move 21 18",3,1340,159,7,22,16,52,22,15,100,21,18
+217,move,"move 21 15",1,1345,159,7,21,15,52,22,15,100,21,18
+218,move,"move 21 14",2,1350,159,7,21,15,52,21,14,100,21,18
+219,move,"move 21 17",3,1352,151,7,21,15,44,21,14,100,21,17
+220,move,"move 20 14",1,1357,151,7,20,14,44,21,14,100,21,17
+221,shoot,"shoot N",2,1359,151,7,20,14,44,21,14,100,21,17
+222,move,"move 20 16",3,1364,151,7,20,14,44,21,14,100,20,16
+223,shoot,"shoot NE",1,1366,151,7,20,14,44,21,14,100,20,16
+224,move,"move 22 13",2,1371,151,7,20,14,44,22,13,100,20,16
+225,move,"move 21 15",3,1373,143,7,20,14,36,22,13,100,21,15
+226,move,"move 21 13",1,1378,143,7,21,13,36,22,13,100,21,15
+227,shoot,"shoot N",2,1380,143,7,21,13,36,22,13,100,21,15
+228,move,"move 21 14",3,1385,143,7,21,13,36,22,13,100,21,14
+229,shoot,"shoot N",1,1387,143,7,21,13,36,22,13,100,21,14
+230,move,"move 21 12",2,1392,143,7,21,13,36,21,12,100,21,14
+231,move,"move 20 13",3,1397,143,7,21,13,36,21,12,100,20,13
+232,move,"move 20 12",1,1402,143,7,20,12,36,21,12,100,20,13
+233,move,"move 20 11",2,1407,143,7,20,12,36,20,11,100,20,13
+234,move,"move 19 12",3,1412,143,7,20,12,36,20,11,100,19,12
+235,move,"move 19 11",1,1417,143,7,19,11,36,20,11,100,19,12
+236,move,"move 19 10",2,1422,143,7,19,11,36,19,10,100,19,12
+237,move,"move 18 11",3,1427,143,7,19,11,36,19,10,100,18,11
+238,move,"move 18 10",1,1432,143,7,18,10,36,19,10,100,18,11
+239,move,"move 20 10",2,1435,135,7,18,10,36,20,10,92,18,11
+240,shoot,"shoot NW",3,1450,132,7,18,10,33,20,10,92,18,11
+241,shoot,"shoot W",1,1462,121,7,18,10,30,20,10,84,18,11
+242,move,"move 19 10",2,1466,118,7,18,10,27,19,10,84,18,11
+243,shoot,"shoot NW",3,1479,110,7,18,10,27,19,10,76,18,11
+244,shoot,"shoot W",1,1495,110,7,18,10,27,19,10,76,18,11
+245,invalid,"invalid",2,1489,102,7,18,10,27,19,10,68,18,11
+246,shoot,"shoot NW",3,1505,102,7,18,10,27,19,10,68,18,11
+247,shoot,"shoot W",1,1517,91,7,18,10,24,19,10,60,18,11
+248,nothing,"nothing "Player chose to do nothing"",2,1516,88,7,18,10,21,19,10,60,18,11
+249,shoot,"shoot NW",3,1528,77,7,18,10,18,19,10,52,18,11
+250,shoot,"shoot W",1,1543,74,7,18,10,15,19,10,52,18,11
+251,nothing,"nothing "Player chose to do nothing"",2,1540,63,7,18,10,12,19,10,44,18,11
+252,shoot,"shoot NW",3,1555,60,7,18,10,9,19,10,44,18,11
+253,shoot,"shoot W",1,1566,46,4,18,10,6,19,10,36,18,11
+254,nothing,"nothing "Player chose to do nothing"",2,1564,40,1,18,10,3,19,10,36,18,11
+255,shoot,"shoot NW",3,1565,36,-2,18,10,0,19,10,36,18,11
+256,move,"move 17 10",3,1570,36,-2,18,10,0,19,10,36,17,10
+257,shoot,"shoot W",3,1585,33,-2,18,10,0,19,10,33,17,10
+258,shoot,"shoot W",3,1600,30,-2,18,10,0,19,10,30,17,10
+259,shoot,"shoot W",3,1652,19,-2,18,10,0,19,10,19,17,10
+260,dig,"dig 16 11",3,1658,16,-2,18,10,0,19,10,16,17,10
+261,move,"move 16 11",3,1662,13,-2,18,10,0,19,10,13,16,11
+262,dig,"dig 15 12",3,1669,13,-2,18,10,0,19,10,13,16,11
+263,move,"move 15 12",3,1674,13,-2,18,10,0,19,10,13,15,12
+264,move,"move 14 13",3,1679,13,-2,18,10,0,19,10,13,14,13
+265,move,"move 13 14",3,1684,13,-2,18,10,0,19,10,13,13,14
+266,move,"move 14 15",3,1689,13,-2,18,10,0,19,10,13,14,15
+267,move,"move 15 16",3,1694,13,-2,18,10,0,19,10,13,15,16
+268,dig,"dig 16 17",3,1701,13,-2,18,10,0,19,10,13,15,16
+269,move,"move 15 17",3,1706,13,-2,18,10,0,19,10,13,15,17
+270,dig,"dig 15 18",3,1713,13,-2,18,10,0,19,10,13,15,17
+271,shoot,"shoot SE",3,1715,13,-2,18,10,0,19,10,13,15,17
+272,shoot,"shoot S",3,1717,13,-2,18,10,0,19,10,13,15,17
+273,shoot,"shoot W",3,1730,5,-2,18,10,0,19,10,5,15,17
diff --git a/2019-worms/tests/replays/2019.08.19.21.57.04/A-init.json b/2019-worms/tests/replays/2019.08.19.21.57.04/A-init.json
new file mode 100644
index 0000000..b8ed313
--- /dev/null
+++ b/2019-worms/tests/replays/2019.08.19.21.57.04/A-init.json
@@ -0,0 +1 @@
+{"currentRound":1,"maxRounds":400,"pushbackDamage":20,"lavaDamage":3,"mapSize":33,"currentWormId":1,"consecutiveDoNothingCount":0,"myPlayer":{"id":1,"score":116,"health":350,"currentWormId":1,"remainingWormSelections":5,"previousCommand":"nothing","worms":[{"id":1,"health":150,"position":{"x":24,"y":4},"weapon":{"damage":8,"range":4},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Commando"},{"id":2,"health":100,"position":{"x":24,"y":28},"weapon":{"damage":8,"range":4},"bananaBombs":{"damage":20,"range":5,"count":3,"damageRadius":2},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Agent"},{"id":3,"health":100,"position":{"x":1,"y":16},"weapon":{"damage":8,"range":4},"snowballs":{"freezeDuration":5,"range":5,"count":3,"freezeRadius":1},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Technologist"}]},"opponents":[{"id":2,"score":116,"currentWormId":1,"remainingWormSelections":5,"previousCommand":"nothing","worms":[{"id":1,"health":150,"position":{"x":8,"y":28},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Commando"},{"id":2,"health":100,"position":{"x":8,"y":4},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Agent"},{"id":3,"health":100,"position":{"x":31,"y":16},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Technologist"}]}],"map":[[{"x":0,"y":0,"type":"DEEP_SPACE"},{"x":1,"y":0,"type":"DEEP_SPACE"},{"x":2,"y":0,"type":"DEEP_SPACE"},{"x":3,"y":0,"type":"DEEP_SPACE"},{"x":4,"y":0,"type":"DEEP_SPACE"},{"x":5,"y":0,"type":"DEEP_SPACE"},{"x":6,"y":0,"type":"DEEP_SPACE"},{"x":7,"y":0,"type":"DEEP_SPACE"},{"x":8,"y":0,"type":"DEEP_SPACE"},{"x":9,"y":0,"type":"DEEP_SPACE"},{"x":10,"y":0,"type":"DEEP_SPACE"},{"x":11,"y":0,"type":"DIRT"},{"x":12,"y":0,"type":"DIRT"},{"x":13,"y":0,"type":"DIRT"},{"x":14,"y":0,"type":"AIR"},{"x":15,"y":0,"type":"AIR"},{"x":16,"y":0,"type":"DIRT"},{"x":17,"y":0,"type":"AIR"},{"x":18,"y":0,"type":"AIR"},{"x":19,"y":0,"type":"DIRT"},{"x":20,"y":0,"type":"DIRT"},{"x":21,"y":0,"type":"DIRT"},{"x":22,"y":0,"type":"DEEP_SPACE"},{"x":23,"y":0,"type":"DEEP_SPACE"},{"x":24,"y":0,"type":"DEEP_SPACE"},{"x":25,"y":0,"type":"DEEP_SPACE"},{"x":26,"y":0,"type":"DEEP_SPACE"},{"x":27,"y":0,"type":"DEEP_SPACE"},{"x":28,"y":0,"type":"DEEP_SPACE"},{"x":29,"y":0,"type":"DEEP_SPACE"},{"x":30,"y":0,"type":"DEEP_SPACE"},{"x":31,"y":0,"type":"DEEP_SPACE"},{"x":32,"y":0,"type":"DEEP_SPACE"}],[{"x":0,"y":1,"type":"DEEP_SPACE"},{"x":1,"y":1,"type":"DEEP_SPACE"},{"x":2,"y":1,"type":"DEEP_SPACE"},{"x":3,"y":1,"type":"DEEP_SPACE"},{"x":4,"y":1,"type":"DEEP_SPACE"},{"x":5,"y":1,"type":"DEEP_SPACE"},{"x":6,"y":1,"type":"DEEP_SPACE"},{"x":7,"y":1,"type":"DEEP_SPACE"},{"x":8,"y":1,"type":"DIRT"},{"x":9,"y":1,"type":"DIRT"},{"x":10,"y":1,"type":"AIR"},{"x":11,"y":1,"type":"DIRT"},{"x":12,"y":1,"type":"DIRT"},{"x":13,"y":1,"type":"AIR"},{"x":14,"y":1,"type":"AIR"},{"x":15,"y":1,"type":"DIRT"},{"x":16,"y":1,"type":"DIRT"},{"x":17,"y":1,"type":"DIRT"},{"x":18,"y":1,"type":"AIR"},{"x":19,"y":1,"type":"AIR"},{"x":20,"y":1,"type":"DIRT"},{"x":21,"y":1,"type":"DIRT"},{"x":22,"y":1,"type":"AIR"},{"x":23,"y":1,"type":"DIRT"},{"x":24,"y":1,"type":"DIRT"},{"x":25,"y":1,"type":"DEEP_SPACE"},{"x":26,"y":1,"type":"DEEP_SPACE"},{"x":27,"y":1,"type":"DEEP_SPACE"},{"x":28,"y":1,"type":"DEEP_SPACE"},{"x":29,"y":1,"type":"DEEP_SPACE"},{"x":30,"y":1,"type":"DEEP_SPACE"},{"x":31,"y":1,"type":"DEEP_SPACE"},{"x":32,"y":1,"type":"DEEP_SPACE"}],[{"x":0,"y":2,"type":"DEEP_SPACE"},{"x":1,"y":2,"type":"DEEP_SPACE"},{"x":2,"y":2,"type":"DEEP_SPACE"},{"x":3,"y":2,"type":"DEEP_SPACE"},{"x":4,"y":2,"type":"DEEP_SPACE"},{"x":5,"y":2,"type":"DEEP_SPACE"},{"x":6,"y":2,"type":"DEEP_SPACE"},{"x":7,"y":2,"type":"DIRT"},{"x":8,"y":2,"type":"DIRT"},{"x":9,"y":2,"type":"DIRT"},{"x":10,"y":2,"type":"DIRT"},{"x":11,"y":2,"type":"DIRT"},{"x":12,"y":2,"type":"DIRT"},{"x":13,"y":2,"type":"DIRT"},{"x":14,"y":2,"type":"DIRT"},{"x":15,"y":2,"type":"AIR"},{"x":16,"y":2,"type":"AIR"},{"x":17,"y":2,"type":"AIR"},{"x":18,"y":2,"type":"DIRT"},{"x":19,"y":2,"type":"DIRT"},{"x":20,"y":2,"type":"DIRT"},{"x":21,"y":2,"type":"DIRT"},{"x":22,"y":2,"type":"DIRT"},{"x":23,"y":2,"type":"DIRT"},{"x":24,"y":2,"type":"DIRT"},{"x":25,"y":2,"type":"DIRT"},{"x":26,"y":2,"type":"DEEP_SPACE"},{"x":27,"y":2,"type":"DEEP_SPACE"},{"x":28,"y":2,"type":"DEEP_SPACE"},{"x":29,"y":2,"type":"DEEP_SPACE"},{"x":30,"y":2,"type":"DEEP_SPACE"},{"x":31,"y":2,"type":"DEEP_SPACE"},{"x":32,"y":2,"type":"DEEP_SPACE"}],[{"x":0,"y":3,"type":"DEEP_SPACE"},{"x":1,"y":3,"type":"DEEP_SPACE"},{"x":2,"y":3,"type":"DEEP_SPACE"},{"x":3,"y":3,"type":"DEEP_SPACE"},{"x":4,"y":3,"type":"DEEP_SPACE"},{"x":5,"y":3,"type":"DEEP_SPACE"},{"x":6,"y":3,"type":"DIRT"},{"x":7,"y":3,"type":"AIR"},{"x":8,"y":3,"type":"AIR"},{"x":9,"y":3,"type":"AIR"},{"x":10,"y":3,"type":"DIRT"},{"x":11,"y":3,"type":"DIRT"},{"x":12,"y":3,"type":"DIRT"},{"x":13,"y":3,"type":"DIRT"},{"x":14,"y":3,"type":"AIR"},{"x":15,"y":3,"type":"AIR"},{"x":16,"y":3,"type":"AIR"},{"x":17,"y":3,"type":"AIR"},{"x":18,"y":3,"type":"AIR"},{"x":19,"y":3,"type":"DIRT"},{"x":20,"y":3,"type":"DIRT"},{"x":21,"y":3,"type":"DIRT"},{"x":22,"y":3,"type":"DIRT"},{"x":23,"y":3,"type":"AIR"},{"x":24,"y":3,"type":"AIR"},{"x":25,"y":3,"type":"AIR"},{"x":26,"y":3,"type":"DIRT"},{"x":27,"y":3,"type":"DEEP_SPACE"},{"x":28,"y":3,"type":"DEEP_SPACE"},{"x":29,"y":3,"type":"DEEP_SPACE"},{"x":30,"y":3,"type":"DEEP_SPACE"},{"x":31,"y":3,"type":"DEEP_SPACE"},{"x":32,"y":3,"type":"DEEP_SPACE"}],[{"x":0,"y":4,"type":"DEEP_SPACE"},{"x":1,"y":4,"type":"DEEP_SPACE"},{"x":2,"y":4,"type":"DEEP_SPACE"},{"x":3,"y":4,"type":"DEEP_SPACE"},{"x":4,"y":4,"type":"DIRT"},{"x":5,"y":4,"type":"DIRT"},{"x":6,"y":4,"type":"DIRT"},{"x":7,"y":4,"type":"AIR"},{"x":8,"y":4,"type":"AIR","occupier":{"id":2,"playerId":2,"health":100,"position":{"x":8,"y":4},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Agent"}},{"x":9,"y":4,"type":"AIR"},{"x":10,"y":4,"type":"DIRT"},{"x":11,"y":4,"type":"DIRT"},{"x":12,"y":4,"type":"AIR"},{"x":13,"y":4,"type":"AIR"},{"x":14,"y":4,"type":"AIR"},{"x":15,"y":4,"type":"AIR"},{"x":16,"y":4,"type":"AIR"},{"x":17,"y":4,"type":"AIR"},{"x":18,"y":4,"type":"AIR"},{"x":19,"y":4,"type":"AIR"},{"x":20,"y":4,"type":"AIR"},{"x":21,"y":4,"type":"DIRT"},{"x":22,"y":4,"type":"DIRT"},{"x":23,"y":4,"type":"AIR"},{"x":24,"y":4,"type":"AIR","occupier":{"id":1,"playerId":1,"health":150,"position":{"x":24,"y":4},"weapon":{"damage":8,"range":4},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Commando"}},{"x":25,"y":4,"type":"AIR"},{"x":26,"y":4,"type":"DIRT"},{"x":27,"y":4,"type":"DIRT"},{"x":28,"y":4,"type":"DIRT"},{"x":29,"y":4,"type":"DEEP_SPACE"},{"x":30,"y":4,"type":"DEEP_SPACE"},{"x":31,"y":4,"type":"DEEP_SPACE"},{"x":32,"y":4,"type":"DEEP_SPACE"}],[{"x":0,"y":5,"type":"DEEP_SPACE"},{"x":1,"y":5,"type":"DEEP_SPACE"},{"x":2,"y":5,"type":"DEEP_SPACE"},{"x":3,"y":5,"type":"DEEP_SPACE"},{"x":4,"y":5,"type":"DIRT"},{"x":5,"y":5,"type":"DIRT"},{"x":6,"y":5,"type":"DIRT"},{"x":7,"y":5,"type":"AIR"},{"x":8,"y":5,"type":"AIR"},{"x":9,"y":5,"type":"AIR"},{"x":10,"y":5,"type":"DIRT"},{"x":11,"y":5,"type":"DIRT"},{"x":12,"y":5,"type":"DIRT"},{"x":13,"y":5,"type":"DIRT"},{"x":14,"y":5,"type":"AIR"},{"x":15,"y":5,"type":"AIR"},{"x":16,"y":5,"type":"AIR"},{"x":17,"y":5,"type":"AIR"},{"x":18,"y":5,"type":"AIR"},{"x":19,"y":5,"type":"DIRT"},{"x":20,"y":5,"type":"DIRT"},{"x":21,"y":5,"type":"DIRT"},{"x":22,"y":5,"type":"DIRT"},{"x":23,"y":5,"type":"AIR"},{"x":24,"y":5,"type":"AIR"},{"x":25,"y":5,"type":"AIR"},{"x":26,"y":5,"type":"DIRT"},{"x":27,"y":5,"type":"DIRT"},{"x":28,"y":5,"type":"DIRT"},{"x":29,"y":5,"type":"DEEP_SPACE"},{"x":30,"y":5,"type":"DEEP_SPACE"},{"x":31,"y":5,"type":"DEEP_SPACE"},{"x":32,"y":5,"type":"DEEP_SPACE"}],[{"x":0,"y":6,"type":"DEEP_SPACE"},{"x":1,"y":6,"type":"DEEP_SPACE"},{"x":2,"y":6,"type":"DEEP_SPACE"},{"x":3,"y":6,"type":"AIR"},{"x":4,"y":6,"type":"DIRT"},{"x":5,"y":6,"type":"DIRT"},{"x":6,"y":6,"type":"DIRT"},{"x":7,"y":6,"type":"DIRT"},{"x":8,"y":6,"type":"DIRT"},{"x":9,"y":6,"type":"DIRT"},{"x":10,"y":6,"type":"DIRT"},{"x":11,"y":6,"type":"AIR"},{"x":12,"y":6,"type":"AIR"},{"x":13,"y":6,"type":"DIRT"},{"x":14,"y":6,"type":"DIRT"},{"x":15,"y":6,"type":"AIR"},{"x":16,"y":6,"type":"AIR"},{"x":17,"y":6,"type":"AIR"},{"x":18,"y":6,"type":"DIRT"},{"x":19,"y":6,"type":"DIRT"},{"x":20,"y":6,"type":"AIR"},{"x":21,"y":6,"type":"AIR"},{"x":22,"y":6,"type":"DIRT"},{"x":23,"y":6,"type":"DIRT"},{"x":24,"y":6,"type":"DIRT"},{"x":25,"y":6,"type":"DIRT"},{"x":26,"y":6,"type":"DIRT"},{"x":27,"y":6,"type":"DIRT"},{"x":28,"y":6,"type":"DIRT"},{"x":29,"y":6,"type":"AIR"},{"x":30,"y":6,"type":"DEEP_SPACE"},{"x":31,"y":6,"type":"DEEP_SPACE"},{"x":32,"y":6,"type":"DEEP_SPACE"}],[{"x":0,"y":7,"type":"DEEP_SPACE"},{"x":1,"y":7,"type":"DEEP_SPACE"},{"x":2,"y":7,"type":"DIRT"},{"x":3,"y":7,"type":"AIR"},{"x":4,"y":7,"type":"DIRT"},{"x":5,"y":7,"type":"DIRT"},{"x":6,"y":7,"type":"DIRT"},{"x":7,"y":7,"type":"AIR"},{"x":8,"y":7,"type":"AIR"},{"x":9,"y":7,"type":"AIR"},{"x":10,"y":7,"type":"AIR"},{"x":11,"y":7,"type":"DIRT"},{"x":12,"y":7,"type":"DIRT"},{"x":13,"y":7,"type":"DIRT"},{"x":14,"y":7,"type":"DIRT"},{"x":15,"y":7,"type":"DIRT"},{"x":16,"y":7,"type":"AIR"},{"x":17,"y":7,"type":"DIRT"},{"x":18,"y":7,"type":"DIRT"},{"x":19,"y":7,"type":"DIRT"},{"x":20,"y":7,"type":"DIRT"},{"x":21,"y":7,"type":"DIRT"},{"x":22,"y":7,"type":"AIR"},{"x":23,"y":7,"type":"AIR"},{"x":24,"y":7,"type":"AIR"},{"x":25,"y":7,"type":"AIR"},{"x":26,"y":7,"type":"DIRT"},{"x":27,"y":7,"type":"DIRT"},{"x":28,"y":7,"type":"DIRT"},{"x":29,"y":7,"type":"AIR"},{"x":30,"y":7,"type":"DIRT"},{"x":31,"y":7,"type":"DEEP_SPACE"},{"x":32,"y":7,"type":"DEEP_SPACE"}],[{"x":0,"y":8,"type":"DEEP_SPACE"},{"x":1,"y":8,"type":"DIRT"},{"x":2,"y":8,"type":"DIRT"},{"x":3,"y":8,"type":"AIR"},{"x":4,"y":8,"type":"AIR"},{"x":5,"y":8,"type":"DIRT"},{"x":6,"y":8,"type":"DIRT"},{"x":7,"y":8,"type":"AIR"},{"x":8,"y":8,"type":"AIR"},{"x":9,"y":8,"type":"AIR"},{"x":10,"y":8,"type":"AIR"},{"x":11,"y":8,"type":"DIRT"},{"x":12,"y":8,"type":"DIRT"},{"x":13,"y":8,"type":"AIR"},{"x":14,"y":8,"type":"AIR"},{"x":15,"y":8,"type":"AIR"},{"x":16,"y":8,"type":"DIRT"},{"x":17,"y":8,"type":"AIR"},{"x":18,"y":8,"type":"AIR"},{"x":19,"y":8,"type":"AIR"},{"x":20,"y":8,"type":"DIRT"},{"x":21,"y":8,"type":"DIRT"},{"x":22,"y":8,"type":"AIR"},{"x":23,"y":8,"type":"AIR"},{"x":24,"y":8,"type":"AIR"},{"x":25,"y":8,"type":"AIR"},{"x":26,"y":8,"type":"DIRT"},{"x":27,"y":8,"type":"DIRT"},{"x":28,"y":8,"type":"AIR"},{"x":29,"y":8,"type":"AIR"},{"x":30,"y":8,"type":"DIRT"},{"x":31,"y":8,"type":"DIRT"},{"x":32,"y":8,"type":"DEEP_SPACE"}],[{"x":0,"y":9,"type":"DEEP_SPACE"},{"x":1,"y":9,"type":"DIRT"},{"x":2,"y":9,"type":"DIRT"},{"x":3,"y":9,"type":"AIR"},{"x":4,"y":9,"type":"AIR"},{"x":5,"y":9,"type":"DIRT"},{"x":6,"y":9,"type":"DIRT"},{"x":7,"y":9,"type":"AIR"},{"x":8,"y":9,"type":"AIR"},{"x":9,"y":9,"type":"AIR"},{"x":10,"y":9,"type":"DIRT"},{"x":11,"y":9,"type":"DIRT"},{"x":12,"y":9,"type":"AIR"},{"x":13,"y":9,"type":"AIR"},{"x":14,"y":9,"type":"DIRT"},{"x":15,"y":9,"type":"AIR"},{"x":16,"y":9,"type":"DIRT"},{"x":17,"y":9,"type":"AIR"},{"x":18,"y":9,"type":"DIRT"},{"x":19,"y":9,"type":"AIR"},{"x":20,"y":9,"type":"AIR"},{"x":21,"y":9,"type":"DIRT"},{"x":22,"y":9,"type":"DIRT"},{"x":23,"y":9,"type":"AIR"},{"x":24,"y":9,"type":"AIR"},{"x":25,"y":9,"type":"AIR"},{"x":26,"y":9,"type":"DIRT"},{"x":27,"y":9,"type":"DIRT"},{"x":28,"y":9,"type":"AIR"},{"x":29,"y":9,"type":"AIR"},{"x":30,"y":9,"type":"DIRT"},{"x":31,"y":9,"type":"DIRT"},{"x":32,"y":9,"type":"DEEP_SPACE"}],[{"x":0,"y":10,"type":"DEEP_SPACE"},{"x":1,"y":10,"type":"DIRT"},{"x":2,"y":10,"type":"DIRT"},{"x":3,"y":10,"type":"DIRT"},{"x":4,"y":10,"type":"DIRT"},{"x":5,"y":10,"type":"DIRT"},{"x":6,"y":10,"type":"AIR"},{"x":7,"y":10,"type":"AIR"},{"x":8,"y":10,"type":"AIR"},{"x":9,"y":10,"type":"AIR"},{"x":10,"y":10,"type":"DIRT"},{"x":11,"y":10,"type":"AIR"},{"x":12,"y":10,"type":"AIR"},{"x":13,"y":10,"type":"AIR"},{"x":14,"y":10,"type":"DIRT"},{"x":15,"y":10,"type":"AIR"},{"x":16,"y":10,"type":"AIR"},{"x":17,"y":10,"type":"AIR"},{"x":18,"y":10,"type":"DIRT"},{"x":19,"y":10,"type":"AIR"},{"x":20,"y":10,"type":"AIR"},{"x":21,"y":10,"type":"AIR"},{"x":22,"y":10,"type":"DIRT"},{"x":23,"y":10,"type":"AIR"},{"x":24,"y":10,"type":"AIR"},{"x":25,"y":10,"type":"AIR"},{"x":26,"y":10,"type":"AIR"},{"x":27,"y":10,"type":"DIRT"},{"x":28,"y":10,"type":"DIRT"},{"x":29,"y":10,"type":"DIRT"},{"x":30,"y":10,"type":"DIRT"},{"x":31,"y":10,"type":"DIRT"},{"x":32,"y":10,"type":"DEEP_SPACE"}],[{"x":0,"y":11,"type":"DIRT"},{"x":1,"y":11,"type":"DIRT"},{"x":2,"y":11,"type":"DIRT"},{"x":3,"y":11,"type":"DIRT"},{"x":4,"y":11,"type":"DIRT"},{"x":5,"y":11,"type":"DIRT"},{"x":6,"y":11,"type":"AIR"},{"x":7,"y":11,"type":"AIR"},{"x":8,"y":11,"type":"AIR"},{"x":9,"y":11,"type":"AIR"},{"x":10,"y":11,"type":"AIR"},{"x":11,"y":11,"type":"AIR"},{"x":12,"y":11,"type":"AIR"},{"x":13,"y":11,"type":"AIR"},{"x":14,"y":11,"type":"DIRT"},{"x":15,"y":11,"type":"DIRT"},{"x":16,"y":11,"type":"DIRT"},{"x":17,"y":11,"type":"DIRT"},{"x":18,"y":11,"type":"DIRT"},{"x":19,"y":11,"type":"AIR"},{"x":20,"y":11,"type":"AIR"},{"x":21,"y":11,"type":"AIR"},{"x":22,"y":11,"type":"AIR"},{"x":23,"y":11,"type":"AIR"},{"x":24,"y":11,"type":"AIR"},{"x":25,"y":11,"type":"AIR"},{"x":26,"y":11,"type":"AIR"},{"x":27,"y":11,"type":"DIRT"},{"x":28,"y":11,"type":"DIRT"},{"x":29,"y":11,"type":"DIRT"},{"x":30,"y":11,"type":"DIRT"},{"x":31,"y":11,"type":"DIRT"},{"x":32,"y":11,"type":"DIRT"}],[{"x":0,"y":12,"type":"DIRT"},{"x":1,"y":12,"type":"DIRT"},{"x":2,"y":12,"type":"AIR"},{"x":3,"y":12,"type":"DIRT"},{"x":4,"y":12,"type":"DIRT"},{"x":5,"y":12,"type":"DIRT"},{"x":6,"y":12,"type":"DIRT"},{"x":7,"y":12,"type":"AIR"},{"x":8,"y":12,"type":"AIR"},{"x":9,"y":12,"type":"AIR"},{"x":10,"y":12,"type":"AIR"},{"x":11,"y":12,"type":"AIR"},{"x":12,"y":12,"type":"DIRT"},{"x":13,"y":12,"type":"DIRT"},{"x":14,"y":12,"type":"AIR"},{"x":15,"y":12,"type":"AIR"},{"x":16,"y":12,"type":"DIRT"},{"x":17,"y":12,"type":"AIR"},{"x":18,"y":12,"type":"AIR"},{"x":19,"y":12,"type":"DIRT"},{"x":20,"y":12,"type":"DIRT"},{"x":21,"y":12,"type":"AIR"},{"x":22,"y":12,"type":"AIR"},{"x":23,"y":12,"type":"AIR"},{"x":24,"y":12,"type":"AIR"},{"x":25,"y":12,"type":"AIR"},{"x":26,"y":12,"type":"DIRT"},{"x":27,"y":12,"type":"DIRT"},{"x":28,"y":12,"type":"DIRT"},{"x":29,"y":12,"type":"DIRT"},{"x":30,"y":12,"type":"AIR"},{"x":31,"y":12,"type":"DIRT"},{"x":32,"y":12,"type":"DIRT"}],[{"x":0,"y":13,"type":"DIRT"},{"x":1,"y":13,"type":"AIR"},{"x":2,"y":13,"type":"AIR"},{"x":3,"y":13,"type":"DIRT"},{"x":4,"y":13,"type":"DIRT"},{"x":5,"y":13,"type":"DIRT"},{"x":6,"y":13,"type":"AIR"},{"x":7,"y":13,"type":"AIR"},{"x":8,"y":13,"type":"AIR"},{"x":9,"y":13,"type":"AIR"},{"x":10,"y":13,"type":"AIR"},{"x":11,"y":13,"type":"AIR"},{"x":12,"y":13,"type":"DIRT"},{"x":13,"y":13,"type":"DIRT"},{"x":14,"y":13,"type":"AIR"},{"x":15,"y":13,"type":"AIR"},{"x":16,"y":13,"type":"AIR"},{"x":17,"y":13,"type":"AIR"},{"x":18,"y":13,"type":"AIR"},{"x":19,"y":13,"type":"DIRT"},{"x":20,"y":13,"type":"DIRT"},{"x":21,"y":13,"type":"AIR"},{"x":22,"y":13,"type":"AIR"},{"x":23,"y":13,"type":"AIR"},{"x":24,"y":13,"type":"AIR"},{"x":25,"y":13,"type":"AIR"},{"x":26,"y":13,"type":"AIR"},{"x":27,"y":13,"type":"DIRT"},{"x":28,"y":13,"type":"DIRT"},{"x":29,"y":13,"type":"DIRT"},{"x":30,"y":13,"type":"AIR"},{"x":31,"y":13,"type":"AIR"},{"x":32,"y":13,"type":"DIRT"}],[{"x":0,"y":14,"type":"DIRT"},{"x":1,"y":14,"type":"DIRT"},{"x":2,"y":14,"type":"DIRT"},{"x":3,"y":14,"type":"DIRT"},{"x":4,"y":14,"type":"DIRT"},{"x":5,"y":14,"type":"DIRT"},{"x":6,"y":14,"type":"AIR"},{"x":7,"y":14,"type":"AIR"},{"x":8,"y":14,"type":"AIR"},{"x":9,"y":14,"type":"DIRT"},{"x":10,"y":14,"type":"DIRT"},{"x":11,"y":14,"type":"DIRT"},{"x":12,"y":14,"type":"DIRT"},{"x":13,"y":14,"type":"DIRT"},{"x":14,"y":14,"type":"DIRT"},{"x":15,"y":14,"type":"AIR"},{"x":16,"y":14,"type":"AIR"},{"x":17,"y":14,"type":"AIR"},{"x":18,"y":14,"type":"DIRT"},{"x":19,"y":14,"type":"DIRT"},{"x":20,"y":14,"type":"DIRT"},{"x":21,"y":14,"type":"DIRT"},{"x":22,"y":14,"type":"DIRT"},{"x":23,"y":14,"type":"DIRT"},{"x":24,"y":14,"type":"AIR"},{"x":25,"y":14,"type":"AIR"},{"x":26,"y":14,"type":"AIR"},{"x":27,"y":14,"type":"DIRT"},{"x":28,"y":14,"type":"DIRT"},{"x":29,"y":14,"type":"DIRT"},{"x":30,"y":14,"type":"DIRT"},{"x":31,"y":14,"type":"DIRT"},{"x":32,"y":14,"type":"DIRT"}],[{"x":0,"y":15,"type":"AIR"},{"x":1,"y":15,"type":"AIR"},{"x":2,"y":15,"type":"AIR"},{"x":3,"y":15,"type":"DIRT"},{"x":4,"y":15,"type":"DIRT"},{"x":5,"y":15,"type":"AIR"},{"x":6,"y":15,"type":"AIR"},{"x":7,"y":15,"type":"AIR"},{"x":8,"y":15,"type":"DIRT"},{"x":9,"y":15,"type":"AIR"},{"x":10,"y":15,"type":"DIRT"},{"x":11,"y":15,"type":"DIRT"},{"x":12,"y":15,"type":"DIRT"},{"x":13,"y":15,"type":"DIRT"},{"x":14,"y":15,"type":"AIR","powerup":{"type":"HEALTH_PACK","value":10}},{"x":15,"y":15,"type":"AIR"},{"x":16,"y":15,"type":"DIRT"},{"x":17,"y":15,"type":"AIR"},{"x":18,"y":15,"type":"AIR"},{"x":19,"y":15,"type":"DIRT"},{"x":20,"y":15,"type":"DIRT"},{"x":21,"y":15,"type":"DIRT"},{"x":22,"y":15,"type":"DIRT"},{"x":23,"y":15,"type":"AIR"},{"x":24,"y":15,"type":"DIRT"},{"x":25,"y":15,"type":"AIR"},{"x":26,"y":15,"type":"AIR"},{"x":27,"y":15,"type":"AIR"},{"x":28,"y":15,"type":"DIRT"},{"x":29,"y":15,"type":"DIRT"},{"x":30,"y":15,"type":"AIR"},{"x":31,"y":15,"type":"AIR"},{"x":32,"y":15,"type":"AIR"}],[{"x":0,"y":16,"type":"AIR"},{"x":1,"y":16,"type":"AIR","occupier":{"id":3,"playerId":1,"health":100,"position":{"x":1,"y":16},"weapon":{"damage":8,"range":4},"snowballs":{"freezeDuration":5,"range":5,"count":3,"freezeRadius":1},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Technologist"}},{"x":2,"y":16,"type":"AIR"},{"x":3,"y":16,"type":"DIRT"},{"x":4,"y":16,"type":"AIR"},{"x":5,"y":16,"type":"DIRT"},{"x":6,"y":16,"type":"DIRT"},{"x":7,"y":16,"type":"AIR"},{"x":8,"y":16,"type":"AIR"},{"x":9,"y":16,"type":"DIRT"},{"x":10,"y":16,"type":"DIRT"},{"x":11,"y":16,"type":"DIRT"},{"x":12,"y":16,"type":"DIRT"},{"x":13,"y":16,"type":"DIRT"},{"x":14,"y":16,"type":"DIRT"},{"x":15,"y":16,"type":"AIR"},{"x":16,"y":16,"type":"DIRT"},{"x":17,"y":16,"type":"AIR"},{"x":18,"y":16,"type":"DIRT"},{"x":19,"y":16,"type":"DIRT"},{"x":20,"y":16,"type":"DIRT"},{"x":21,"y":16,"type":"DIRT"},{"x":22,"y":16,"type":"DIRT"},{"x":23,"y":16,"type":"DIRT"},{"x":24,"y":16,"type":"AIR"},{"x":25,"y":16,"type":"AIR"},{"x":26,"y":16,"type":"DIRT"},{"x":27,"y":16,"type":"DIRT"},{"x":28,"y":16,"type":"AIR"},{"x":29,"y":16,"type":"DIRT"},{"x":30,"y":16,"type":"AIR"},{"x":31,"y":16,"type":"AIR","occupier":{"id":3,"playerId":2,"health":100,"position":{"x":31,"y":16},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Technologist"}},{"x":32,"y":16,"type":"AIR"}],[{"x":0,"y":17,"type":"AIR"},{"x":1,"y":17,"type":"AIR"},{"x":2,"y":17,"type":"AIR"},{"x":3,"y":17,"type":"DIRT"},{"x":4,"y":17,"type":"DIRT"},{"x":5,"y":17,"type":"DIRT"},{"x":6,"y":17,"type":"DIRT"},{"x":7,"y":17,"type":"DIRT"},{"x":8,"y":17,"type":"AIR"},{"x":9,"y":17,"type":"DIRT"},{"x":10,"y":17,"type":"DIRT"},{"x":11,"y":17,"type":"AIR"},{"x":12,"y":17,"type":"DIRT"},{"x":13,"y":17,"type":"DIRT"},{"x":14,"y":17,"type":"DIRT"},{"x":15,"y":17,"type":"AIR"},{"x":16,"y":17,"type":"AIR"},{"x":17,"y":17,"type":"AIR"},{"x":18,"y":17,"type":"AIR","powerup":{"type":"HEALTH_PACK","value":10}},{"x":19,"y":17,"type":"DIRT"},{"x":20,"y":17,"type":"DIRT"},{"x":21,"y":17,"type":"AIR"},{"x":22,"y":17,"type":"DIRT"},{"x":23,"y":17,"type":"DIRT"},{"x":24,"y":17,"type":"AIR"},{"x":25,"y":17,"type":"DIRT"},{"x":26,"y":17,"type":"DIRT"},{"x":27,"y":17,"type":"DIRT"},{"x":28,"y":17,"type":"DIRT"},{"x":29,"y":17,"type":"DIRT"},{"x":30,"y":17,"type":"AIR"},{"x":31,"y":17,"type":"AIR"},{"x":32,"y":17,"type":"AIR"}],[{"x":0,"y":18,"type":"DIRT"},{"x":1,"y":18,"type":"DIRT"},{"x":2,"y":18,"type":"DIRT"},{"x":3,"y":18,"type":"DIRT"},{"x":4,"y":18,"type":"DIRT"},{"x":5,"y":18,"type":"DIRT"},{"x":6,"y":18,"type":"DIRT"},{"x":7,"y":18,"type":"DIRT"},{"x":8,"y":18,"type":"DIRT"},{"x":9,"y":18,"type":"AIR"},{"x":10,"y":18,"type":"AIR"},{"x":11,"y":18,"type":"DIRT"},{"x":12,"y":18,"type":"DIRT"},{"x":13,"y":18,"type":"DIRT"},{"x":14,"y":18,"type":"AIR"},{"x":15,"y":18,"type":"AIR"},{"x":16,"y":18,"type":"AIR"},{"x":17,"y":18,"type":"AIR"},{"x":18,"y":18,"type":"AIR"},{"x":19,"y":18,"type":"DIRT"},{"x":20,"y":18,"type":"DIRT"},{"x":21,"y":18,"type":"DIRT"},{"x":22,"y":18,"type":"AIR"},{"x":23,"y":18,"type":"AIR"},{"x":24,"y":18,"type":"DIRT"},{"x":25,"y":18,"type":"DIRT"},{"x":26,"y":18,"type":"DIRT"},{"x":27,"y":18,"type":"DIRT"},{"x":28,"y":18,"type":"DIRT"},{"x":29,"y":18,"type":"DIRT"},{"x":30,"y":18,"type":"DIRT"},{"x":31,"y":18,"type":"DIRT"},{"x":32,"y":18,"type":"DIRT"}],[{"x":0,"y":19,"type":"AIR"},{"x":1,"y":19,"type":"AIR"},{"x":2,"y":19,"type":"DIRT"},{"x":3,"y":19,"type":"AIR"},{"x":4,"y":19,"type":"AIR"},{"x":5,"y":19,"type":"AIR"},{"x":6,"y":19,"type":"AIR"},{"x":7,"y":19,"type":"AIR"},{"x":8,"y":19,"type":"DIRT"},{"x":9,"y":19,"type":"AIR"},{"x":10,"y":19,"type":"AIR"},{"x":11,"y":19,"type":"DIRT"},{"x":12,"y":19,"type":"DIRT"},{"x":13,"y":19,"type":"AIR"},{"x":14,"y":19,"type":"AIR"},{"x":15,"y":19,"type":"AIR"},{"x":16,"y":19,"type":"AIR"},{"x":17,"y":19,"type":"AIR"},{"x":18,"y":19,"type":"AIR"},{"x":19,"y":19,"type":"AIR"},{"x":20,"y":19,"type":"DIRT"},{"x":21,"y":19,"type":"DIRT"},{"x":22,"y":19,"type":"AIR"},{"x":23,"y":19,"type":"AIR"},{"x":24,"y":19,"type":"DIRT"},{"x":25,"y":19,"type":"AIR"},{"x":26,"y":19,"type":"AIR"},{"x":27,"y":19,"type":"AIR"},{"x":28,"y":19,"type":"AIR"},{"x":29,"y":19,"type":"AIR"},{"x":30,"y":19,"type":"DIRT"},{"x":31,"y":19,"type":"AIR"},{"x":32,"y":19,"type":"AIR"}],[{"x":0,"y":20,"type":"AIR"},{"x":1,"y":20,"type":"AIR"},{"x":2,"y":20,"type":"DIRT"},{"x":3,"y":20,"type":"DIRT"},{"x":4,"y":20,"type":"AIR"},{"x":5,"y":20,"type":"AIR"},{"x":6,"y":20,"type":"AIR"},{"x":7,"y":20,"type":"AIR"},{"x":8,"y":20,"type":"AIR"},{"x":9,"y":20,"type":"AIR"},{"x":10,"y":20,"type":"AIR"},{"x":11,"y":20,"type":"DIRT"},{"x":12,"y":20,"type":"DIRT"},{"x":13,"y":20,"type":"DIRT"},{"x":14,"y":20,"type":"AIR"},{"x":15,"y":20,"type":"AIR"},{"x":16,"y":20,"type":"AIR"},{"x":17,"y":20,"type":"AIR"},{"x":18,"y":20,"type":"AIR"},{"x":19,"y":20,"type":"DIRT"},{"x":20,"y":20,"type":"DIRT"},{"x":21,"y":20,"type":"DIRT"},{"x":22,"y":20,"type":"AIR"},{"x":23,"y":20,"type":"AIR"},{"x":24,"y":20,"type":"AIR"},{"x":25,"y":20,"type":"AIR"},{"x":26,"y":20,"type":"AIR"},{"x":27,"y":20,"type":"AIR"},{"x":28,"y":20,"type":"AIR"},{"x":29,"y":20,"type":"DIRT"},{"x":30,"y":20,"type":"DIRT"},{"x":31,"y":20,"type":"AIR"},{"x":32,"y":20,"type":"AIR"}],[{"x":0,"y":21,"type":"AIR"},{"x":1,"y":21,"type":"DIRT"},{"x":2,"y":21,"type":"DIRT"},{"x":3,"y":21,"type":"DIRT"},{"x":4,"y":21,"type":"DIRT"},{"x":5,"y":21,"type":"AIR"},{"x":6,"y":21,"type":"AIR"},{"x":7,"y":21,"type":"AIR"},{"x":8,"y":21,"type":"AIR"},{"x":9,"y":21,"type":"AIR"},{"x":10,"y":21,"type":"DIRT"},{"x":11,"y":21,"type":"DIRT"},{"x":12,"y":21,"type":"DIRT"},{"x":13,"y":21,"type":"DIRT"},{"x":14,"y":21,"type":"DIRT"},{"x":15,"y":21,"type":"AIR"},{"x":16,"y":21,"type":"AIR"},{"x":17,"y":21,"type":"AIR"},{"x":18,"y":21,"type":"DIRT"},{"x":19,"y":21,"type":"DIRT"},{"x":20,"y":21,"type":"DIRT"},{"x":21,"y":21,"type":"DIRT"},{"x":22,"y":21,"type":"DIRT"},{"x":23,"y":21,"type":"AIR"},{"x":24,"y":21,"type":"AIR"},{"x":25,"y":21,"type":"AIR"},{"x":26,"y":21,"type":"AIR"},{"x":27,"y":21,"type":"AIR"},{"x":28,"y":21,"type":"DIRT"},{"x":29,"y":21,"type":"DIRT"},{"x":30,"y":21,"type":"DIRT"},{"x":31,"y":21,"type":"DIRT"},{"x":32,"y":21,"type":"AIR"}],[{"x":0,"y":22,"type":"DEEP_SPACE"},{"x":1,"y":22,"type":"DIRT"},{"x":2,"y":22,"type":"AIR"},{"x":3,"y":22,"type":"DIRT"},{"x":4,"y":22,"type":"DIRT"},{"x":5,"y":22,"type":"AIR"},{"x":6,"y":22,"type":"AIR"},{"x":7,"y":22,"type":"AIR"},{"x":8,"y":22,"type":"AIR"},{"x":9,"y":22,"type":"AIR"},{"x":10,"y":22,"type":"DIRT"},{"x":11,"y":22,"type":"DIRT"},{"x":12,"y":22,"type":"AIR"},{"x":13,"y":22,"type":"AIR"},{"x":14,"y":22,"type":"DIRT"},{"x":15,"y":22,"type":"AIR"},{"x":16,"y":22,"type":"AIR"},{"x":17,"y":22,"type":"AIR"},{"x":18,"y":22,"type":"DIRT"},{"x":19,"y":22,"type":"AIR"},{"x":20,"y":22,"type":"AIR"},{"x":21,"y":22,"type":"DIRT"},{"x":22,"y":22,"type":"DIRT"},{"x":23,"y":22,"type":"AIR"},{"x":24,"y":22,"type":"AIR"},{"x":25,"y":22,"type":"AIR"},{"x":26,"y":22,"type":"AIR"},{"x":27,"y":22,"type":"AIR"},{"x":28,"y":22,"type":"DIRT"},{"x":29,"y":22,"type":"DIRT"},{"x":30,"y":22,"type":"AIR"},{"x":31,"y":22,"type":"DIRT"},{"x":32,"y":22,"type":"DEEP_SPACE"}],[{"x":0,"y":23,"type":"DEEP_SPACE"},{"x":1,"y":23,"type":"DIRT"},{"x":2,"y":23,"type":"AIR"},{"x":3,"y":23,"type":"DIRT"},{"x":4,"y":23,"type":"DIRT"},{"x":5,"y":23,"type":"DIRT"},{"x":6,"y":23,"type":"AIR"},{"x":7,"y":23,"type":"AIR"},{"x":8,"y":23,"type":"DIRT"},{"x":9,"y":23,"type":"DIRT"},{"x":10,"y":23,"type":"DIRT"},{"x":11,"y":23,"type":"DIRT"},{"x":12,"y":23,"type":"AIR"},{"x":13,"y":23,"type":"AIR"},{"x":14,"y":23,"type":"DIRT"},{"x":15,"y":23,"type":"AIR"},{"x":16,"y":23,"type":"AIR"},{"x":17,"y":23,"type":"AIR"},{"x":18,"y":23,"type":"DIRT"},{"x":19,"y":23,"type":"AIR"},{"x":20,"y":23,"type":"AIR"},{"x":21,"y":23,"type":"DIRT"},{"x":22,"y":23,"type":"DIRT"},{"x":23,"y":23,"type":"DIRT"},{"x":24,"y":23,"type":"DIRT"},{"x":25,"y":23,"type":"AIR"},{"x":26,"y":23,"type":"AIR"},{"x":27,"y":23,"type":"DIRT"},{"x":28,"y":23,"type":"DIRT"},{"x":29,"y":23,"type":"DIRT"},{"x":30,"y":23,"type":"AIR"},{"x":31,"y":23,"type":"DIRT"},{"x":32,"y":23,"type":"DEEP_SPACE"}],[{"x":0,"y":24,"type":"DEEP_SPACE"},{"x":1,"y":24,"type":"DIRT"},{"x":2,"y":24,"type":"DIRT"},{"x":3,"y":24,"type":"DIRT"},{"x":4,"y":24,"type":"DIRT"},{"x":5,"y":24,"type":"DIRT"},{"x":6,"y":24,"type":"AIR"},{"x":7,"y":24,"type":"AIR"},{"x":8,"y":24,"type":"DIRT"},{"x":9,"y":24,"type":"AIR"},{"x":10,"y":24,"type":"AIR"},{"x":11,"y":24,"type":"AIR"},{"x":12,"y":24,"type":"AIR"},{"x":13,"y":24,"type":"AIR"},{"x":14,"y":24,"type":"DIRT"},{"x":15,"y":24,"type":"DIRT"},{"x":16,"y":24,"type":"DIRT"},{"x":17,"y":24,"type":"DIRT"},{"x":18,"y":24,"type":"DIRT"},{"x":19,"y":24,"type":"AIR"},{"x":20,"y":24,"type":"AIR"},{"x":21,"y":24,"type":"AIR"},{"x":22,"y":24,"type":"AIR"},{"x":23,"y":24,"type":"AIR"},{"x":24,"y":24,"type":"DIRT"},{"x":25,"y":24,"type":"AIR"},{"x":26,"y":24,"type":"AIR"},{"x":27,"y":24,"type":"DIRT"},{"x":28,"y":24,"type":"DIRT"},{"x":29,"y":24,"type":"DIRT"},{"x":30,"y":24,"type":"DIRT"},{"x":31,"y":24,"type":"DIRT"},{"x":32,"y":24,"type":"DEEP_SPACE"}],[{"x":0,"y":25,"type":"DEEP_SPACE"},{"x":1,"y":25,"type":"DEEP_SPACE"},{"x":2,"y":25,"type":"DIRT"},{"x":3,"y":25,"type":"AIR"},{"x":4,"y":25,"type":"DIRT"},{"x":5,"y":25,"type":"DIRT"},{"x":6,"y":25,"type":"AIR"},{"x":7,"y":25,"type":"AIR"},{"x":8,"y":25,"type":"DIRT"},{"x":9,"y":25,"type":"DIRT"},{"x":10,"y":25,"type":"AIR"},{"x":11,"y":25,"type":"AIR"},{"x":12,"y":25,"type":"AIR"},{"x":13,"y":25,"type":"AIR"},{"x":14,"y":25,"type":"DIRT"},{"x":15,"y":25,"type":"AIR"},{"x":16,"y":25,"type":"DIRT"},{"x":17,"y":25,"type":"AIR"},{"x":18,"y":25,"type":"DIRT"},{"x":19,"y":25,"type":"AIR"},{"x":20,"y":25,"type":"AIR"},{"x":21,"y":25,"type":"AIR"},{"x":22,"y":25,"type":"AIR"},{"x":23,"y":25,"type":"DIRT"},{"x":24,"y":25,"type":"DIRT"},{"x":25,"y":25,"type":"AIR"},{"x":26,"y":25,"type":"AIR"},{"x":27,"y":25,"type":"DIRT"},{"x":28,"y":25,"type":"DIRT"},{"x":29,"y":25,"type":"AIR"},{"x":30,"y":25,"type":"DIRT"},{"x":31,"y":25,"type":"DEEP_SPACE"},{"x":32,"y":25,"type":"DEEP_SPACE"}],[{"x":0,"y":26,"type":"DEEP_SPACE"},{"x":1,"y":26,"type":"DEEP_SPACE"},{"x":2,"y":26,"type":"DEEP_SPACE"},{"x":3,"y":26,"type":"AIR"},{"x":4,"y":26,"type":"AIR"},{"x":5,"y":26,"type":"AIR"},{"x":6,"y":26,"type":"DIRT"},{"x":7,"y":26,"type":"DIRT"},{"x":8,"y":26,"type":"DIRT"},{"x":9,"y":26,"type":"DIRT"},{"x":10,"y":26,"type":"DIRT"},{"x":11,"y":26,"type":"AIR"},{"x":12,"y":26,"type":"DIRT"},{"x":13,"y":26,"type":"AIR"},{"x":14,"y":26,"type":"AIR"},{"x":15,"y":26,"type":"DIRT"},{"x":16,"y":26,"type":"DIRT"},{"x":17,"y":26,"type":"DIRT"},{"x":18,"y":26,"type":"AIR"},{"x":19,"y":26,"type":"AIR"},{"x":20,"y":26,"type":"DIRT"},{"x":21,"y":26,"type":"AIR"},{"x":22,"y":26,"type":"DIRT"},{"x":23,"y":26,"type":"DIRT"},{"x":24,"y":26,"type":"DIRT"},{"x":25,"y":26,"type":"DIRT"},{"x":26,"y":26,"type":"DIRT"},{"x":27,"y":26,"type":"AIR"},{"x":28,"y":26,"type":"AIR"},{"x":29,"y":26,"type":"AIR"},{"x":30,"y":26,"type":"DEEP_SPACE"},{"x":31,"y":26,"type":"DEEP_SPACE"},{"x":32,"y":26,"type":"DEEP_SPACE"}],[{"x":0,"y":27,"type":"DEEP_SPACE"},{"x":1,"y":27,"type":"DEEP_SPACE"},{"x":2,"y":27,"type":"DEEP_SPACE"},{"x":3,"y":27,"type":"DEEP_SPACE"},{"x":4,"y":27,"type":"AIR"},{"x":5,"y":27,"type":"AIR"},{"x":6,"y":27,"type":"DIRT"},{"x":7,"y":27,"type":"AIR"},{"x":8,"y":27,"type":"AIR"},{"x":9,"y":27,"type":"AIR"},{"x":10,"y":27,"type":"DIRT"},{"x":11,"y":27,"type":"DIRT"},{"x":12,"y":27,"type":"DIRT"},{"x":13,"y":27,"type":"AIR"},{"x":14,"y":27,"type":"AIR"},{"x":15,"y":27,"type":"DIRT"},{"x":16,"y":27,"type":"DIRT"},{"x":17,"y":27,"type":"DIRT"},{"x":18,"y":27,"type":"AIR"},{"x":19,"y":27,"type":"AIR"},{"x":20,"y":27,"type":"DIRT"},{"x":21,"y":27,"type":"DIRT"},{"x":22,"y":27,"type":"DIRT"},{"x":23,"y":27,"type":"AIR"},{"x":24,"y":27,"type":"AIR"},{"x":25,"y":27,"type":"AIR"},{"x":26,"y":27,"type":"DIRT"},{"x":27,"y":27,"type":"AIR"},{"x":28,"y":27,"type":"AIR"},{"x":29,"y":27,"type":"DEEP_SPACE"},{"x":30,"y":27,"type":"DEEP_SPACE"},{"x":31,"y":27,"type":"DEEP_SPACE"},{"x":32,"y":27,"type":"DEEP_SPACE"}],[{"x":0,"y":28,"type":"DEEP_SPACE"},{"x":1,"y":28,"type":"DEEP_SPACE"},{"x":2,"y":28,"type":"DEEP_SPACE"},{"x":3,"y":28,"type":"DEEP_SPACE"},{"x":4,"y":28,"type":"AIR"},{"x":5,"y":28,"type":"AIR"},{"x":6,"y":28,"type":"DIRT"},{"x":7,"y":28,"type":"AIR"},{"x":8,"y":28,"type":"AIR","occupier":{"id":1,"playerId":2,"health":150,"position":{"x":8,"y":28},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Commando"}},{"x":9,"y":28,"type":"AIR"},{"x":10,"y":28,"type":"DIRT"},{"x":11,"y":28,"type":"DIRT"},{"x":12,"y":28,"type":"AIR"},{"x":13,"y":28,"type":"AIR"},{"x":14,"y":28,"type":"AIR"},{"x":15,"y":28,"type":"DIRT"},{"x":16,"y":28,"type":"DIRT"},{"x":17,"y":28,"type":"DIRT"},{"x":18,"y":28,"type":"AIR"},{"x":19,"y":28,"type":"AIR"},{"x":20,"y":28,"type":"AIR"},{"x":21,"y":28,"type":"DIRT"},{"x":22,"y":28,"type":"DIRT"},{"x":23,"y":28,"type":"AIR"},{"x":24,"y":28,"type":"AIR","occupier":{"id":2,"playerId":1,"health":100,"position":{"x":24,"y":28},"weapon":{"damage":8,"range":4},"bananaBombs":{"damage":20,"range":5,"count":3,"damageRadius":2},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Agent"}},{"x":25,"y":28,"type":"AIR"},{"x":26,"y":28,"type":"DIRT"},{"x":27,"y":28,"type":"AIR"},{"x":28,"y":28,"type":"AIR"},{"x":29,"y":28,"type":"DEEP_SPACE"},{"x":30,"y":28,"type":"DEEP_SPACE"},{"x":31,"y":28,"type":"DEEP_SPACE"},{"x":32,"y":28,"type":"DEEP_SPACE"}],[{"x":0,"y":29,"type":"DEEP_SPACE"},{"x":1,"y":29,"type":"DEEP_SPACE"},{"x":2,"y":29,"type":"DEEP_SPACE"},{"x":3,"y":29,"type":"DEEP_SPACE"},{"x":4,"y":29,"type":"DEEP_SPACE"},{"x":5,"y":29,"type":"DEEP_SPACE"},{"x":6,"y":29,"type":"DIRT"},{"x":7,"y":29,"type":"AIR"},{"x":8,"y":29,"type":"AIR"},{"x":9,"y":29,"type":"AIR"},{"x":10,"y":29,"type":"DIRT"},{"x":11,"y":29,"type":"DIRT"},{"x":12,"y":29,"type":"AIR"},{"x":13,"y":29,"type":"DIRT"},{"x":14,"y":29,"type":"DIRT"},{"x":15,"y":29,"type":"DIRT"},{"x":16,"y":29,"type":"DIRT"},{"x":17,"y":29,"type":"DIRT"},{"x":18,"y":29,"type":"DIRT"},{"x":19,"y":29,"type":"DIRT"},{"x":20,"y":29,"type":"AIR"},{"x":21,"y":29,"type":"DIRT"},{"x":22,"y":29,"type":"DIRT"},{"x":23,"y":29,"type":"AIR"},{"x":24,"y":29,"type":"AIR"},{"x":25,"y":29,"type":"AIR"},{"x":26,"y":29,"type":"DIRT"},{"x":27,"y":29,"type":"DEEP_SPACE"},{"x":28,"y":29,"type":"DEEP_SPACE"},{"x":29,"y":29,"type":"DEEP_SPACE"},{"x":30,"y":29,"type":"DEEP_SPACE"},{"x":31,"y":29,"type":"DEEP_SPACE"},{"x":32,"y":29,"type":"DEEP_SPACE"}],[{"x":0,"y":30,"type":"DEEP_SPACE"},{"x":1,"y":30,"type":"DEEP_SPACE"},{"x":2,"y":30,"type":"DEEP_SPACE"},{"x":3,"y":30,"type":"DEEP_SPACE"},{"x":4,"y":30,"type":"DEEP_SPACE"},{"x":5,"y":30,"type":"DEEP_SPACE"},{"x":6,"y":30,"type":"DEEP_SPACE"},{"x":7,"y":30,"type":"DIRT"},{"x":8,"y":30,"type":"DIRT"},{"x":9,"y":30,"type":"DIRT"},{"x":10,"y":30,"type":"DIRT"},{"x":11,"y":30,"type":"DIRT"},{"x":12,"y":30,"type":"AIR"},{"x":13,"y":30,"type":"AIR"},{"x":14,"y":30,"type":"DIRT"},{"x":15,"y":30,"type":"DIRT"},{"x":16,"y":30,"type":"AIR"},{"x":17,"y":30,"type":"DIRT"},{"x":18,"y":30,"type":"DIRT"},{"x":19,"y":30,"type":"AIR"},{"x":20,"y":30,"type":"AIR"},{"x":21,"y":30,"type":"DIRT"},{"x":22,"y":30,"type":"DIRT"},{"x":23,"y":30,"type":"DIRT"},{"x":24,"y":30,"type":"DIRT"},{"x":25,"y":30,"type":"DIRT"},{"x":26,"y":30,"type":"DEEP_SPACE"},{"x":27,"y":30,"type":"DEEP_SPACE"},{"x":28,"y":30,"type":"DEEP_SPACE"},{"x":29,"y":30,"type":"DEEP_SPACE"},{"x":30,"y":30,"type":"DEEP_SPACE"},{"x":31,"y":30,"type":"DEEP_SPACE"},{"x":32,"y":30,"type":"DEEP_SPACE"}],[{"x":0,"y":31,"type":"DEEP_SPACE"},{"x":1,"y":31,"type":"DEEP_SPACE"},{"x":2,"y":31,"type":"DEEP_SPACE"},{"x":3,"y":31,"type":"DEEP_SPACE"},{"x":4,"y":31,"type":"DEEP_SPACE"},{"x":5,"y":31,"type":"DEEP_SPACE"},{"x":6,"y":31,"type":"DEEP_SPACE"},{"x":7,"y":31,"type":"DEEP_SPACE"},{"x":8,"y":31,"type":"DIRT"},{"x":9,"y":31,"type":"DIRT"},{"x":10,"y":31,"type":"DIRT"},{"x":11,"y":31,"type":"DIRT"},{"x":12,"y":31,"type":"AIR"},{"x":13,"y":31,"type":"AIR"},{"x":14,"y":31,"type":"AIR"},{"x":15,"y":31,"type":"AIR"},{"x":16,"y":31,"type":"AIR"},{"x":17,"y":31,"type":"AIR"},{"x":18,"y":31,"type":"AIR"},{"x":19,"y":31,"type":"AIR"},{"x":20,"y":31,"type":"AIR"},{"x":21,"y":31,"type":"DIRT"},{"x":22,"y":31,"type":"DIRT"},{"x":23,"y":31,"type":"DIRT"},{"x":24,"y":31,"type":"DIRT"},{"x":25,"y":31,"type":"DEEP_SPACE"},{"x":26,"y":31,"type":"DEEP_SPACE"},{"x":27,"y":31,"type":"DEEP_SPACE"},{"x":28,"y":31,"type":"DEEP_SPACE"},{"x":29,"y":31,"type":"DEEP_SPACE"},{"x":30,"y":31,"type":"DEEP_SPACE"},{"x":31,"y":31,"type":"DEEP_SPACE"},{"x":32,"y":31,"type":"DEEP_SPACE"}],[{"x":0,"y":32,"type":"DEEP_SPACE"},{"x":1,"y":32,"type":"DEEP_SPACE"},{"x":2,"y":32,"type":"DEEP_SPACE"},{"x":3,"y":32,"type":"DEEP_SPACE"},{"x":4,"y":32,"type":"DEEP_SPACE"},{"x":5,"y":32,"type":"DEEP_SPACE"},{"x":6,"y":32,"type":"DEEP_SPACE"},{"x":7,"y":32,"type":"DEEP_SPACE"},{"x":8,"y":32,"type":"DEEP_SPACE"},{"x":9,"y":32,"type":"DEEP_SPACE"},{"x":10,"y":32,"type":"DEEP_SPACE"},{"x":11,"y":32,"type":"DIRT"},{"x":12,"y":32,"type":"DIRT"},{"x":13,"y":32,"type":"DIRT"},{"x":14,"y":32,"type":"AIR"},{"x":15,"y":32,"type":"AIR"},{"x":16,"y":32,"type":"DIRT"},{"x":17,"y":32,"type":"AIR"},{"x":18,"y":32,"type":"AIR"},{"x":19,"y":32,"type":"DIRT"},{"x":20,"y":32,"type":"DIRT"},{"x":21,"y":32,"type":"DIRT"},{"x":22,"y":32,"type":"DEEP_SPACE"},{"x":23,"y":32,"type":"DEEP_SPACE"},{"x":24,"y":32,"type":"DEEP_SPACE"},{"x":25,"y":32,"type":"DEEP_SPACE"},{"x":26,"y":32,"type":"DEEP_SPACE"},{"x":27,"y":32,"type":"DEEP_SPACE"},{"x":28,"y":32,"type":"DEEP_SPACE"},{"x":29,"y":32,"type":"DEEP_SPACE"},{"x":30,"y":32,"type":"DEEP_SPACE"},{"x":31,"y":32,"type":"DEEP_SPACE"},{"x":32,"y":32,"type":"DEEP_SPACE"}]],"visualizerEvents":[]} \ No newline at end of file
diff --git a/2019-worms/tests/replays/2019.08.19.21.57.04/A-log.csv b/2019-worms/tests/replays/2019.08.19.21.57.04/A-log.csv
new file mode 100644
index 0000000..f620e90
--- /dev/null
+++ b/2019-worms/tests/replays/2019.08.19.21.57.04/A-log.csv
@@ -0,0 +1,214 @@
+Round,LastCommandType,LastCommand,ActiveWorm,Score,Health,Worm1 Health,Worm1 x,Worm1 y,Worm2 Health,Worm2 x,Worm2 y,Worm3 Health,Worm3 x,Worm3 y
+1,null,"null",1,116,350,150,24,4,100,24,28,100,1,16
+2,move,"move 23 3",1,121,350,150,23,3,100,24,28,100,1,16
+3,move,"move 23 28",2,126,350,150,23,3,100,23,28,100,1,16
+4,move,"move 2 16",3,131,350,150,23,3,100,23,28,100,2,16
+5,dig,"dig 22 3",1,138,350,150,23,3,100,23,28,100,2,16
+6,dig,"dig 22 28",2,145,350,150,23,3,100,23,28,100,2,16
+7,dig,"dig 3 16",3,152,350,150,23,3,100,23,28,100,2,16
+8,move,"move 22 3",1,157,350,150,22,3,100,23,28,100,2,16
+9,move,"move 22 28",2,162,350,150,22,3,100,22,28,100,2,16
+10,move,"move 2 15",3,167,350,150,22,3,100,22,28,100,2,15
+11,move,"move 23 3",1,172,350,150,23,3,100,22,28,100,2,15
+12,move,"move 23 28",2,177,350,150,23,3,100,23,28,100,2,15
+13,move,"move 2 16",3,182,350,150,23,3,100,23,28,100,2,16
+14,move,"move 22 3",1,187,350,150,22,3,100,23,28,100,2,16
+15,move,"move 22 28",2,192,350,150,22,3,100,22,28,100,2,16
+16,move,"move 2 15",3,197,350,150,22,3,100,22,28,100,2,15
+17,move,"move 23 3",1,202,350,150,23,3,100,22,28,100,2,15
+18,move,"move 23 28",2,207,350,150,23,3,100,23,28,100,2,15
+19,move,"move 2 16",3,212,350,150,23,3,100,23,28,100,2,16
+20,move,"move 22 3",1,217,350,150,22,3,100,23,28,100,2,16
+21,move,"move 22 28",2,222,350,150,22,3,100,22,28,100,2,16
+22,move,"move 2 15",3,227,350,150,22,3,100,22,28,100,2,15
+23,move,"move 23 3",1,232,350,150,23,3,100,22,28,100,2,15
+24,move,"move 23 28",2,237,350,150,23,3,100,23,28,100,2,15
+25,move,"move 2 16",3,242,350,150,23,3,100,23,28,100,2,16
+26,move,"move 22 3",1,247,350,150,22,3,100,23,28,100,2,16
+27,move,"move 22 28",2,252,350,150,22,3,100,22,28,100,2,16
+28,move,"move 2 15",3,257,350,150,22,3,100,22,28,100,2,15
+29,move,"move 23 3",1,262,350,150,23,3,100,22,28,100,2,15
+30,move,"move 23 28",2,267,350,150,23,3,100,23,28,100,2,15
+31,move,"move 2 16",3,272,350,150,23,3,100,23,28,100,2,16
+32,move,"move 22 3",1,277,350,150,22,3,100,23,28,100,2,16
+33,move,"move 22 28",2,282,350,150,22,3,100,22,28,100,2,16
+34,move,"move 2 15",3,287,350,150,22,3,100,22,28,100,2,15
+35,dig,"dig 22 2",1,294,350,150,22,3,100,22,28,100,2,15
+36,move,"move 23 27",2,299,350,150,22,3,100,23,27,100,2,15
+37,move,"move 1 16",3,304,350,150,22,3,100,23,27,100,1,16
+38,move,"move 22 2",1,309,350,150,22,2,100,23,27,100,1,16
+39,move,"move 22 28",2,314,350,150,22,2,100,22,28,100,1,16
+40,move,"move 2 16",3,319,350,150,22,2,100,22,28,100,2,16
+41,move,"move 23 3",1,324,350,150,23,3,100,22,28,100,2,16
+42,move,"move 23 28",2,329,350,150,23,3,100,23,28,100,2,16
+43,move,"move 2 15",3,334,350,150,23,3,100,23,28,100,2,15
+44,move,"move 22 3",1,339,350,150,22,3,100,23,28,100,2,15
+45,move,"move 22 28",2,344,350,150,22,3,100,22,28,100,2,15
+46,move,"move 2 16",3,349,350,150,22,3,100,22,28,100,2,16
+47,move,"move 23 3",1,354,350,150,23,3,100,22,28,100,2,16
+48,move,"move 23 28",2,359,350,150,23,3,100,23,28,100,2,16
+49,move,"move 3 16",3,364,350,150,23,3,100,23,28,100,3,16
+50,move,"move 23 4",1,369,350,150,23,4,100,23,28,100,3,16
+51,move,"move 24 27",2,374,350,150,23,4,100,24,27,100,3,16
+52,move,"move 2 16",3,379,350,150,23,4,100,24,27,100,2,16
+53,move,"move 23 3",1,384,350,150,23,3,100,24,27,100,2,16
+54,move,"move 23 28",2,389,350,150,23,3,100,23,28,100,2,16
+55,move,"move 2 15",3,394,350,150,23,3,100,23,28,100,2,15
+56,move,"move 22 3",1,399,350,150,22,3,100,23,28,100,2,15
+57,move,"move 22 28",2,404,350,150,22,3,100,22,28,100,2,15
+58,move,"move 2 16",3,409,350,150,22,3,100,22,28,100,2,16
+59,move,"move 23 3",1,414,350,150,23,3,100,22,28,100,2,16
+60,move,"move 23 28",2,419,350,150,23,3,100,23,28,100,2,16
+61,move,"move 2 15",3,424,350,150,23,3,100,23,28,100,2,15
+62,move,"move 22 3",1,429,350,150,22,3,100,23,28,100,2,15
+63,move,"move 22 28",2,434,350,150,22,3,100,22,28,100,2,15
+64,move,"move 2 16",3,439,350,150,22,3,100,22,28,100,2,16
+65,move,"move 23 4",1,444,350,150,23,4,100,22,28,100,2,16
+66,dig,"dig 22 29",2,451,350,150,23,4,100,22,28,100,2,16
+67,dig,"dig 3 15",3,458,350,150,23,4,100,22,28,100,2,16
+68,move,"move 24 4",1,463,350,150,24,4,100,22,28,100,2,16
+69,move,"move 23 28",2,468,350,150,24,4,100,23,28,100,2,16
+70,nothing,"nothing "Player chose to do nothing"",3,468,350,150,24,4,100,23,28,100,2,16
+71,move,"move 25 3",1,473,350,150,25,3,100,23,28,100,2,16
+72,move,"move 23 29",2,478,350,150,25,3,100,23,29,100,2,16
+73,move,"move 1 15",3,483,350,150,25,3,100,23,29,100,1,15
+74,dig,"dig 24 2",1,490,350,150,25,3,100,23,29,100,1,15
+75,move,"move 22 29",2,495,350,150,25,3,100,22,29,100,1,15
+76,dig,"dig 2 14",3,502,350,150,25,3,100,22,29,100,1,15
+77,nothing,"nothing "Player chose to do nothing"",1,502,350,150,25,3,100,22,29,100,1,15
+78,move,"move 23 28",2,507,350,150,25,3,100,23,28,100,1,15
+79,move,"move 2 16",3,512,350,150,25,3,100,23,28,100,2,16
+80,dig,"dig 25 2",1,512,350,150,25,3,100,23,28,100,2,16
+81,move,"move 22 29",2,517,350,150,25,3,100,22,29,100,2,16
+82,move,"move 3 15",3,522,350,150,25,3,100,22,29,100,3,15
+83,move,"move 25 4",1,522,350,150,25,3,100,22,29,100,3,15
+84,move,"move 23 29",2,521,330,130,25,3,100,23,29,100,3,15
+85,dig,"dig 4 14",3,528,330,130,25,3,100,23,29,100,3,15
+86,move,"move 24 4",1,525,322,122,25,3,100,23,29,100,3,15
+87,shoot,"shoot S",1,538,314,114,25,3,100,23,29,100,3,15
+88,shoot,"shoot S",1,552,306,106,25,3,100,23,29,100,3,15
+89,shoot,"shoot S",1,565,298,98,25,3,100,23,29,100,3,15
+90,shoot,"shoot S",1,578,290,90,25,3,100,23,29,100,3,15
+91,move,"move 24 29",2,583,290,90,25,3,100,24,29,100,3,15
+92,shoot,"shoot S",1,593,270,70,25,3,100,24,29,100,3,15
+93,move,"move 25 29",2,598,270,70,25,3,100,25,29,100,3,15
+94,move,"move 2 16",3,600,262,62,25,3,100,25,29,100,2,16
+95,move,"move 24 2",1,593,242,42,25,3,100,25,29,100,2,16
+96,move,"move 24 29",2,598,242,42,25,3,100,24,29,100,2,16
+97,move,"move 2 15",3,601,234,34,25,3,100,24,29,100,2,15
+98,shoot,"shoot S",1,617,234,34,25,3,100,24,29,100,2,15
+99,dig,"dig 24 30",2,624,234,34,25,3,100,24,29,100,2,15
+100,move,"move 2 16",3,626,226,26,25,3,100,24,29,100,2,16
+101,shoot,"shoot S",1,642,226,26,25,3,100,24,29,100,2,16
+102,move,"move 24 28",2,647,226,26,25,3,100,24,28,100,2,16
+103,move,"move 2 15",3,649,218,18,25,3,100,24,28,100,2,15
+104,shoot,"shoot S",1,664,215,15,25,3,100,24,28,100,2,15
+105,move,"move 25 28",2,668,212,12,25,3,100,25,28,100,2,15
+106,move,"move 2 16",3,670,201,1,25,3,100,25,28,100,2,16
+107,shoot,"shoot S",1,685,200,-2,25,3,100,25,28,100,2,16
+108,move,"move 25 27",2,690,200,-2,25,3,100,25,27,100,2,16
+109,dig,"dig 3 17",3,697,200,-2,25,3,100,25,27,100,2,16
+110,move,"move 24 27",2,702,200,-2,25,3,100,24,27,100,2,16
+111,nothing,"nothing "Player chose to do nothing"",3,702,200,-2,25,3,100,24,27,100,2,16
+112,move,"move 25 28",2,707,200,-2,25,3,100,25,28,100,2,16
+113,move,"move 1 17",3,712,200,-2,25,3,100,25,28,100,1,17
+114,move,"move 25 27",2,717,200,-2,25,3,100,25,27,100,1,17
+115,move,"move 2 17",3,722,200,-2,25,3,100,25,27,100,2,17
+116,dig,"dig 24 26",2,729,200,-2,25,3,100,25,27,100,2,17
+117,move,"move 3 17",3,734,200,-2,25,3,100,25,27,100,3,17
+118,move,"move 24 26",2,739,200,-2,25,3,100,24,26,100,3,17
+119,move,"move 3 16",3,744,200,-2,25,3,100,24,26,100,3,16
+120,move,"move 25 25",2,749,200,-2,25,3,100,25,25,100,3,16
+121,move,"move 4 16",3,754,200,-2,25,3,100,25,25,100,4,16
+122,move,"move 26 25",2,759,200,-2,25,3,100,26,25,100,4,16
+123,move,"move 3 17",3,764,200,-2,25,3,100,26,25,100,3,17
+124,move,"move 25 24",2,769,200,-2,25,3,100,25,24,100,3,17
+125,move,"move 2 16",3,774,200,-2,25,3,100,25,24,100,2,16
+126,move,"move 26 24",2,779,200,-2,25,3,100,26,24,100,2,16
+127,move,"move 3 17",3,784,200,-2,25,3,100,26,24,100,3,17
+128,dig,"dig 27 24",2,791,200,-2,25,3,100,26,24,100,3,17
+129,dig,"dig 3 18",3,798,200,-2,25,3,100,26,24,100,3,17
+130,move,"move 25 23",2,803,200,-2,25,3,100,25,23,100,3,17
+131,move,"move 4 16",3,808,200,-2,25,3,100,25,23,100,4,16
+132,move,"move 26 24",2,813,200,-2,25,3,100,26,24,100,4,16
+133,dig,"dig 4 15",3,820,200,-2,25,3,100,26,24,100,4,16
+134,move,"move 26 23",2,825,200,-2,25,3,100,26,23,100,4,16
+135,move,"move 5 15",3,830,200,-2,25,3,100,26,23,100,5,15
+136,move,"move 26 22",2,835,200,-2,25,3,100,26,22,100,5,15
+137,dig,"dig 5 16",3,842,200,-2,25,3,100,26,22,100,5,15
+138,move,"move 25 21",2,847,200,-2,25,3,100,25,21,100,5,15
+139,dig,"dig 5 14",3,854,200,-2,25,3,100,25,21,100,5,15
+140,banana,"banana 25 16",2,937,200,-2,25,3,100,25,21,100,5,15
+141,move,"move 5 14",3,942,200,-2,25,3,100,25,21,100,5,14
+142,banana,"banana 25 16",2,1022,200,-2,25,3,100,25,21,100,5,14
+143,dig,"dig 4 13",3,1029,200,-2,25,3,100,25,21,100,5,14
+144,banana,"banana 26 16",2,1094,200,-2,25,3,100,25,21,100,5,14
+145,nothing,"nothing "Player chose to do nothing"",3,1094,200,-2,25,3,100,25,21,100,5,14
+146,shoot,"shoot N",2,1110,200,-2,25,3,100,25,21,100,5,14
+147,move,"move 5 15",3,1113,192,-2,25,3,92,25,21,100,5,15
+148,shoot,"shoot N",2,1129,192,-2,25,3,92,25,21,100,5,15
+149,move,"move 6 14",3,1134,192,-2,25,3,92,25,21,100,6,14
+150,shoot,"shoot N",2,1147,184,-2,25,3,84,25,21,100,6,14
+151,move,"move 7 14",3,1152,184,-2,25,3,84,25,21,100,7,14
+152,shoot,"shoot N",2,1208,184,-2,25,3,84,25,21,100,7,14
+153,invalid,"invalid",3,1204,184,-2,25,3,84,25,21,100,7,14
+154,shoot,"shoot N",2,1220,184,-2,25,3,84,25,21,100,7,14
+155,move,"move 7 13",3,1222,176,-2,25,3,76,25,21,100,7,13
+156,shoot,"shoot N",2,1238,176,-2,25,3,76,25,21,100,7,13
+157,move,"move 6 14",3,1241,168,-2,25,3,68,25,21,100,6,14
+158,shoot,"shoot N",2,1257,168,-2,25,3,68,25,21,100,6,14
+159,move,"move 5 15",3,1259,160,-2,25,3,60,25,21,100,5,15
+160,shoot,"shoot N",2,1275,160,-2,25,3,60,25,21,100,5,15
+161,move,"move 4 16",3,1277,152,-2,25,3,52,25,21,100,4,16
+162,shoot,"shoot N",2,1293,152,-2,25,3,52,25,21,100,4,16
+163,move,"move 5 15",3,1296,144,-2,25,3,44,25,21,100,5,15
+164,shoot,"shoot N",2,1312,144,-2,25,3,44,25,21,100,5,15
+165,move,"move 5 14",3,1314,136,-2,25,3,36,25,21,100,5,14
+166,shoot,"shoot N",2,1330,136,-2,25,3,36,25,21,100,5,14
+167,move,"move 6 15",3,1335,136,-2,25,3,36,25,21,100,6,15
+168,shoot,"shoot N",2,1348,128,-2,25,3,28,25,21,100,6,15
+169,dig,"dig 6 16",3,1355,128,-2,25,3,28,25,21,100,6,15
+170,shoot,"shoot N",2,1371,128,-2,25,3,28,25,21,100,6,15
+171,move,"move 6 16",3,1374,120,-2,25,3,20,25,21,100,6,16
+172,shoot,"shoot N",2,1390,120,-2,25,3,20,25,21,100,6,16
+173,move,"move 7 16",3,1392,112,-2,25,3,12,25,21,100,7,16
+174,shoot,"shoot N",2,1408,112,-2,25,3,12,25,21,100,7,16
+175,move,"move 8 16",3,1410,104,-2,25,3,4,25,21,100,8,16
+176,shoot,"shoot N",2,1466,104,-2,25,3,4,25,21,100,8,16
+177,nothing,"nothing "Player chose to do nothing"",3,1466,104,-2,25,3,4,25,21,100,8,16
+178,shoot,"shoot N",2,1481,100,-2,25,3,-4,25,21,100,8,16
+179,dig,"dig 7 17",3,1488,100,-2,25,3,-4,25,21,100,8,16
+180,dig,"dig 8 15",3,1495,100,-2,25,3,-4,25,21,100,8,16
+181,move,"move 8 15",3,1500,100,-2,25,3,-4,25,21,100,8,15
+182,move,"move 9 15",3,1505,100,-2,25,3,-4,25,21,100,9,15
+183,dig,"dig 10 15",3,1512,100,-2,25,3,-4,25,21,100,9,15
+184,move,"move 10 15",3,1517,100,-2,25,3,-4,25,21,100,10,15
+185,nothing,"nothing "Player chose to do nothing"",3,1517,100,-2,25,3,-4,25,21,100,10,15
+186,dig,"dig 10 16",3,1524,100,-2,25,3,-4,25,21,100,10,15
+187,dig,"dig 10 14",3,1531,100,-2,25,3,-4,25,21,100,10,15
+188,dig,"dig 11 16",3,1538,100,-2,25,3,-4,25,21,100,10,15
+189,move,"move 9 15",3,1543,100,-2,25,3,-4,25,21,100,9,15
+190,nothing,"nothing "Player chose to do nothing"",3,1543,100,-2,25,3,-4,25,21,100,9,15
+191,move,"move 8 15",3,1548,100,-2,25,3,-4,25,21,100,8,15
+192,move,"move 8 16",3,1553,100,-2,25,3,-4,25,21,100,8,16
+193,move,"move 8 17",3,1558,100,-2,25,3,-4,25,21,100,8,17
+194,move,"move 7 17",3,1563,100,-2,25,3,-4,25,21,100,7,17
+195,dig,"dig 7 18",3,1570,100,-2,25,3,-4,25,21,100,7,17
+196,move,"move 7 18",3,1575,100,-2,25,3,-4,25,21,100,7,18
+197,nothing,"nothing "Player chose to do nothing"",3,1575,100,-2,25,3,-4,25,21,100,7,18
+198,nothing,"nothing "Player chose to do nothing"",3,1575,100,-2,25,3,-4,25,21,100,7,18
+199,move,"move 7 17",3,1580,100,-2,25,3,-4,25,21,100,7,17
+200,move,"move 8 17",3,1585,100,-2,25,3,-4,25,21,100,8,17
+201,move,"move 8 16",3,1590,100,-2,25,3,-4,25,21,100,8,16
+202,snowball,"snowball 11 17",3,1607,100,-2,25,3,-4,25,21,100,8,16
+203,snowball,"snowball 10 16",3,1624,100,-2,25,3,-4,25,21,100,8,16
+204,snowball,"snowball 10 16",3,1641,100,-2,25,3,-4,25,21,100,8,16
+205,move,"move 8 17",3,1646,100,-2,25,3,-4,25,21,100,8,17
+206,dig,"dig 8 18",3,1653,100,-2,25,3,-4,25,21,100,8,17
+207,move,"move 9 18",3,1658,100,-2,25,3,-4,25,21,100,9,18
+208,move,"move 9 19",3,1663,100,-2,25,3,-4,25,21,100,9,19
+209,move,"move 10 19",3,1668,100,-2,25,3,-4,25,21,100,10,19
+210,shoot,"shoot N",3,1681,92,-2,25,3,-4,25,21,92,10,19
+211,shoot,"shoot N",3,1695,84,-2,25,3,-4,25,21,84,10,19
+212,shoot,"shoot N",3,1708,76,-2,25,3,-4,25,21,76,10,19
+213,move,"move 11 18",3,1713,76,-2,25,3,-4,25,21,76,11,18
diff --git a/2019-worms/tests/replays/2019.08.19.21.57.04/B-init.json b/2019-worms/tests/replays/2019.08.19.21.57.04/B-init.json
new file mode 100644
index 0000000..2d71d9a
--- /dev/null
+++ b/2019-worms/tests/replays/2019.08.19.21.57.04/B-init.json
@@ -0,0 +1 @@
+{"currentRound":1,"maxRounds":400,"pushbackDamage":20,"lavaDamage":3,"mapSize":33,"currentWormId":1,"consecutiveDoNothingCount":0,"myPlayer":{"id":2,"score":116,"health":350,"currentWormId":1,"remainingWormSelections":5,"previousCommand":"nothing","worms":[{"id":1,"health":150,"position":{"x":8,"y":28},"weapon":{"damage":8,"range":4},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Commando"},{"id":2,"health":100,"position":{"x":8,"y":4},"weapon":{"damage":8,"range":4},"bananaBombs":{"damage":20,"range":5,"count":3,"damageRadius":2},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Agent"},{"id":3,"health":100,"position":{"x":31,"y":16},"weapon":{"damage":8,"range":4},"snowballs":{"freezeDuration":5,"range":5,"count":3,"freezeRadius":1},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Technologist"}]},"opponents":[{"id":1,"score":116,"currentWormId":1,"remainingWormSelections":5,"previousCommand":"nothing","worms":[{"id":1,"health":150,"position":{"x":24,"y":4},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Commando"},{"id":2,"health":100,"position":{"x":24,"y":28},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Agent"},{"id":3,"health":100,"position":{"x":1,"y":16},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Technologist"}]}],"map":[[{"x":0,"y":0,"type":"DEEP_SPACE"},{"x":1,"y":0,"type":"DEEP_SPACE"},{"x":2,"y":0,"type":"DEEP_SPACE"},{"x":3,"y":0,"type":"DEEP_SPACE"},{"x":4,"y":0,"type":"DEEP_SPACE"},{"x":5,"y":0,"type":"DEEP_SPACE"},{"x":6,"y":0,"type":"DEEP_SPACE"},{"x":7,"y":0,"type":"DEEP_SPACE"},{"x":8,"y":0,"type":"DEEP_SPACE"},{"x":9,"y":0,"type":"DEEP_SPACE"},{"x":10,"y":0,"type":"DEEP_SPACE"},{"x":11,"y":0,"type":"DIRT"},{"x":12,"y":0,"type":"DIRT"},{"x":13,"y":0,"type":"DIRT"},{"x":14,"y":0,"type":"AIR"},{"x":15,"y":0,"type":"AIR"},{"x":16,"y":0,"type":"DIRT"},{"x":17,"y":0,"type":"AIR"},{"x":18,"y":0,"type":"AIR"},{"x":19,"y":0,"type":"DIRT"},{"x":20,"y":0,"type":"DIRT"},{"x":21,"y":0,"type":"DIRT"},{"x":22,"y":0,"type":"DEEP_SPACE"},{"x":23,"y":0,"type":"DEEP_SPACE"},{"x":24,"y":0,"type":"DEEP_SPACE"},{"x":25,"y":0,"type":"DEEP_SPACE"},{"x":26,"y":0,"type":"DEEP_SPACE"},{"x":27,"y":0,"type":"DEEP_SPACE"},{"x":28,"y":0,"type":"DEEP_SPACE"},{"x":29,"y":0,"type":"DEEP_SPACE"},{"x":30,"y":0,"type":"DEEP_SPACE"},{"x":31,"y":0,"type":"DEEP_SPACE"},{"x":32,"y":0,"type":"DEEP_SPACE"}],[{"x":0,"y":1,"type":"DEEP_SPACE"},{"x":1,"y":1,"type":"DEEP_SPACE"},{"x":2,"y":1,"type":"DEEP_SPACE"},{"x":3,"y":1,"type":"DEEP_SPACE"},{"x":4,"y":1,"type":"DEEP_SPACE"},{"x":5,"y":1,"type":"DEEP_SPACE"},{"x":6,"y":1,"type":"DEEP_SPACE"},{"x":7,"y":1,"type":"DEEP_SPACE"},{"x":8,"y":1,"type":"DIRT"},{"x":9,"y":1,"type":"DIRT"},{"x":10,"y":1,"type":"AIR"},{"x":11,"y":1,"type":"DIRT"},{"x":12,"y":1,"type":"DIRT"},{"x":13,"y":1,"type":"AIR"},{"x":14,"y":1,"type":"AIR"},{"x":15,"y":1,"type":"DIRT"},{"x":16,"y":1,"type":"DIRT"},{"x":17,"y":1,"type":"DIRT"},{"x":18,"y":1,"type":"AIR"},{"x":19,"y":1,"type":"AIR"},{"x":20,"y":1,"type":"DIRT"},{"x":21,"y":1,"type":"DIRT"},{"x":22,"y":1,"type":"AIR"},{"x":23,"y":1,"type":"DIRT"},{"x":24,"y":1,"type":"DIRT"},{"x":25,"y":1,"type":"DEEP_SPACE"},{"x":26,"y":1,"type":"DEEP_SPACE"},{"x":27,"y":1,"type":"DEEP_SPACE"},{"x":28,"y":1,"type":"DEEP_SPACE"},{"x":29,"y":1,"type":"DEEP_SPACE"},{"x":30,"y":1,"type":"DEEP_SPACE"},{"x":31,"y":1,"type":"DEEP_SPACE"},{"x":32,"y":1,"type":"DEEP_SPACE"}],[{"x":0,"y":2,"type":"DEEP_SPACE"},{"x":1,"y":2,"type":"DEEP_SPACE"},{"x":2,"y":2,"type":"DEEP_SPACE"},{"x":3,"y":2,"type":"DEEP_SPACE"},{"x":4,"y":2,"type":"DEEP_SPACE"},{"x":5,"y":2,"type":"DEEP_SPACE"},{"x":6,"y":2,"type":"DEEP_SPACE"},{"x":7,"y":2,"type":"DIRT"},{"x":8,"y":2,"type":"DIRT"},{"x":9,"y":2,"type":"DIRT"},{"x":10,"y":2,"type":"DIRT"},{"x":11,"y":2,"type":"DIRT"},{"x":12,"y":2,"type":"DIRT"},{"x":13,"y":2,"type":"DIRT"},{"x":14,"y":2,"type":"DIRT"},{"x":15,"y":2,"type":"AIR"},{"x":16,"y":2,"type":"AIR"},{"x":17,"y":2,"type":"AIR"},{"x":18,"y":2,"type":"DIRT"},{"x":19,"y":2,"type":"DIRT"},{"x":20,"y":2,"type":"DIRT"},{"x":21,"y":2,"type":"DIRT"},{"x":22,"y":2,"type":"DIRT"},{"x":23,"y":2,"type":"DIRT"},{"x":24,"y":2,"type":"DIRT"},{"x":25,"y":2,"type":"DIRT"},{"x":26,"y":2,"type":"DEEP_SPACE"},{"x":27,"y":2,"type":"DEEP_SPACE"},{"x":28,"y":2,"type":"DEEP_SPACE"},{"x":29,"y":2,"type":"DEEP_SPACE"},{"x":30,"y":2,"type":"DEEP_SPACE"},{"x":31,"y":2,"type":"DEEP_SPACE"},{"x":32,"y":2,"type":"DEEP_SPACE"}],[{"x":0,"y":3,"type":"DEEP_SPACE"},{"x":1,"y":3,"type":"DEEP_SPACE"},{"x":2,"y":3,"type":"DEEP_SPACE"},{"x":3,"y":3,"type":"DEEP_SPACE"},{"x":4,"y":3,"type":"DEEP_SPACE"},{"x":5,"y":3,"type":"DEEP_SPACE"},{"x":6,"y":3,"type":"DIRT"},{"x":7,"y":3,"type":"AIR"},{"x":8,"y":3,"type":"AIR"},{"x":9,"y":3,"type":"AIR"},{"x":10,"y":3,"type":"DIRT"},{"x":11,"y":3,"type":"DIRT"},{"x":12,"y":3,"type":"DIRT"},{"x":13,"y":3,"type":"DIRT"},{"x":14,"y":3,"type":"AIR"},{"x":15,"y":3,"type":"AIR"},{"x":16,"y":3,"type":"AIR"},{"x":17,"y":3,"type":"AIR"},{"x":18,"y":3,"type":"AIR"},{"x":19,"y":3,"type":"DIRT"},{"x":20,"y":3,"type":"DIRT"},{"x":21,"y":3,"type":"DIRT"},{"x":22,"y":3,"type":"DIRT"},{"x":23,"y":3,"type":"AIR"},{"x":24,"y":3,"type":"AIR"},{"x":25,"y":3,"type":"AIR"},{"x":26,"y":3,"type":"DIRT"},{"x":27,"y":3,"type":"DEEP_SPACE"},{"x":28,"y":3,"type":"DEEP_SPACE"},{"x":29,"y":3,"type":"DEEP_SPACE"},{"x":30,"y":3,"type":"DEEP_SPACE"},{"x":31,"y":3,"type":"DEEP_SPACE"},{"x":32,"y":3,"type":"DEEP_SPACE"}],[{"x":0,"y":4,"type":"DEEP_SPACE"},{"x":1,"y":4,"type":"DEEP_SPACE"},{"x":2,"y":4,"type":"DEEP_SPACE"},{"x":3,"y":4,"type":"DEEP_SPACE"},{"x":4,"y":4,"type":"DIRT"},{"x":5,"y":4,"type":"DIRT"},{"x":6,"y":4,"type":"DIRT"},{"x":7,"y":4,"type":"AIR"},{"x":8,"y":4,"type":"AIR","occupier":{"id":2,"playerId":2,"health":100,"position":{"x":8,"y":4},"weapon":{"damage":8,"range":4},"bananaBombs":{"damage":20,"range":5,"count":3,"damageRadius":2},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Agent"}},{"x":9,"y":4,"type":"AIR"},{"x":10,"y":4,"type":"DIRT"},{"x":11,"y":4,"type":"DIRT"},{"x":12,"y":4,"type":"AIR"},{"x":13,"y":4,"type":"AIR"},{"x":14,"y":4,"type":"AIR"},{"x":15,"y":4,"type":"AIR"},{"x":16,"y":4,"type":"AIR"},{"x":17,"y":4,"type":"AIR"},{"x":18,"y":4,"type":"AIR"},{"x":19,"y":4,"type":"AIR"},{"x":20,"y":4,"type":"AIR"},{"x":21,"y":4,"type":"DIRT"},{"x":22,"y":4,"type":"DIRT"},{"x":23,"y":4,"type":"AIR"},{"x":24,"y":4,"type":"AIR","occupier":{"id":1,"playerId":1,"health":150,"position":{"x":24,"y":4},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Commando"}},{"x":25,"y":4,"type":"AIR"},{"x":26,"y":4,"type":"DIRT"},{"x":27,"y":4,"type":"DIRT"},{"x":28,"y":4,"type":"DIRT"},{"x":29,"y":4,"type":"DEEP_SPACE"},{"x":30,"y":4,"type":"DEEP_SPACE"},{"x":31,"y":4,"type":"DEEP_SPACE"},{"x":32,"y":4,"type":"DEEP_SPACE"}],[{"x":0,"y":5,"type":"DEEP_SPACE"},{"x":1,"y":5,"type":"DEEP_SPACE"},{"x":2,"y":5,"type":"DEEP_SPACE"},{"x":3,"y":5,"type":"DEEP_SPACE"},{"x":4,"y":5,"type":"DIRT"},{"x":5,"y":5,"type":"DIRT"},{"x":6,"y":5,"type":"DIRT"},{"x":7,"y":5,"type":"AIR"},{"x":8,"y":5,"type":"AIR"},{"x":9,"y":5,"type":"AIR"},{"x":10,"y":5,"type":"DIRT"},{"x":11,"y":5,"type":"DIRT"},{"x":12,"y":5,"type":"DIRT"},{"x":13,"y":5,"type":"DIRT"},{"x":14,"y":5,"type":"AIR"},{"x":15,"y":5,"type":"AIR"},{"x":16,"y":5,"type":"AIR"},{"x":17,"y":5,"type":"AIR"},{"x":18,"y":5,"type":"AIR"},{"x":19,"y":5,"type":"DIRT"},{"x":20,"y":5,"type":"DIRT"},{"x":21,"y":5,"type":"DIRT"},{"x":22,"y":5,"type":"DIRT"},{"x":23,"y":5,"type":"AIR"},{"x":24,"y":5,"type":"AIR"},{"x":25,"y":5,"type":"AIR"},{"x":26,"y":5,"type":"DIRT"},{"x":27,"y":5,"type":"DIRT"},{"x":28,"y":5,"type":"DIRT"},{"x":29,"y":5,"type":"DEEP_SPACE"},{"x":30,"y":5,"type":"DEEP_SPACE"},{"x":31,"y":5,"type":"DEEP_SPACE"},{"x":32,"y":5,"type":"DEEP_SPACE"}],[{"x":0,"y":6,"type":"DEEP_SPACE"},{"x":1,"y":6,"type":"DEEP_SPACE"},{"x":2,"y":6,"type":"DEEP_SPACE"},{"x":3,"y":6,"type":"AIR"},{"x":4,"y":6,"type":"DIRT"},{"x":5,"y":6,"type":"DIRT"},{"x":6,"y":6,"type":"DIRT"},{"x":7,"y":6,"type":"DIRT"},{"x":8,"y":6,"type":"DIRT"},{"x":9,"y":6,"type":"DIRT"},{"x":10,"y":6,"type":"DIRT"},{"x":11,"y":6,"type":"AIR"},{"x":12,"y":6,"type":"AIR"},{"x":13,"y":6,"type":"DIRT"},{"x":14,"y":6,"type":"DIRT"},{"x":15,"y":6,"type":"AIR"},{"x":16,"y":6,"type":"AIR"},{"x":17,"y":6,"type":"AIR"},{"x":18,"y":6,"type":"DIRT"},{"x":19,"y":6,"type":"DIRT"},{"x":20,"y":6,"type":"AIR"},{"x":21,"y":6,"type":"AIR"},{"x":22,"y":6,"type":"DIRT"},{"x":23,"y":6,"type":"DIRT"},{"x":24,"y":6,"type":"DIRT"},{"x":25,"y":6,"type":"DIRT"},{"x":26,"y":6,"type":"DIRT"},{"x":27,"y":6,"type":"DIRT"},{"x":28,"y":6,"type":"DIRT"},{"x":29,"y":6,"type":"AIR"},{"x":30,"y":6,"type":"DEEP_SPACE"},{"x":31,"y":6,"type":"DEEP_SPACE"},{"x":32,"y":6,"type":"DEEP_SPACE"}],[{"x":0,"y":7,"type":"DEEP_SPACE"},{"x":1,"y":7,"type":"DEEP_SPACE"},{"x":2,"y":7,"type":"DIRT"},{"x":3,"y":7,"type":"AIR"},{"x":4,"y":7,"type":"DIRT"},{"x":5,"y":7,"type":"DIRT"},{"x":6,"y":7,"type":"DIRT"},{"x":7,"y":7,"type":"AIR"},{"x":8,"y":7,"type":"AIR"},{"x":9,"y":7,"type":"AIR"},{"x":10,"y":7,"type":"AIR"},{"x":11,"y":7,"type":"DIRT"},{"x":12,"y":7,"type":"DIRT"},{"x":13,"y":7,"type":"DIRT"},{"x":14,"y":7,"type":"DIRT"},{"x":15,"y":7,"type":"DIRT"},{"x":16,"y":7,"type":"AIR"},{"x":17,"y":7,"type":"DIRT"},{"x":18,"y":7,"type":"DIRT"},{"x":19,"y":7,"type":"DIRT"},{"x":20,"y":7,"type":"DIRT"},{"x":21,"y":7,"type":"DIRT"},{"x":22,"y":7,"type":"AIR"},{"x":23,"y":7,"type":"AIR"},{"x":24,"y":7,"type":"AIR"},{"x":25,"y":7,"type":"AIR"},{"x":26,"y":7,"type":"DIRT"},{"x":27,"y":7,"type":"DIRT"},{"x":28,"y":7,"type":"DIRT"},{"x":29,"y":7,"type":"AIR"},{"x":30,"y":7,"type":"DIRT"},{"x":31,"y":7,"type":"DEEP_SPACE"},{"x":32,"y":7,"type":"DEEP_SPACE"}],[{"x":0,"y":8,"type":"DEEP_SPACE"},{"x":1,"y":8,"type":"DIRT"},{"x":2,"y":8,"type":"DIRT"},{"x":3,"y":8,"type":"AIR"},{"x":4,"y":8,"type":"AIR"},{"x":5,"y":8,"type":"DIRT"},{"x":6,"y":8,"type":"DIRT"},{"x":7,"y":8,"type":"AIR"},{"x":8,"y":8,"type":"AIR"},{"x":9,"y":8,"type":"AIR"},{"x":10,"y":8,"type":"AIR"},{"x":11,"y":8,"type":"DIRT"},{"x":12,"y":8,"type":"DIRT"},{"x":13,"y":8,"type":"AIR"},{"x":14,"y":8,"type":"AIR"},{"x":15,"y":8,"type":"AIR"},{"x":16,"y":8,"type":"DIRT"},{"x":17,"y":8,"type":"AIR"},{"x":18,"y":8,"type":"AIR"},{"x":19,"y":8,"type":"AIR"},{"x":20,"y":8,"type":"DIRT"},{"x":21,"y":8,"type":"DIRT"},{"x":22,"y":8,"type":"AIR"},{"x":23,"y":8,"type":"AIR"},{"x":24,"y":8,"type":"AIR"},{"x":25,"y":8,"type":"AIR"},{"x":26,"y":8,"type":"DIRT"},{"x":27,"y":8,"type":"DIRT"},{"x":28,"y":8,"type":"AIR"},{"x":29,"y":8,"type":"AIR"},{"x":30,"y":8,"type":"DIRT"},{"x":31,"y":8,"type":"DIRT"},{"x":32,"y":8,"type":"DEEP_SPACE"}],[{"x":0,"y":9,"type":"DEEP_SPACE"},{"x":1,"y":9,"type":"DIRT"},{"x":2,"y":9,"type":"DIRT"},{"x":3,"y":9,"type":"AIR"},{"x":4,"y":9,"type":"AIR"},{"x":5,"y":9,"type":"DIRT"},{"x":6,"y":9,"type":"DIRT"},{"x":7,"y":9,"type":"AIR"},{"x":8,"y":9,"type":"AIR"},{"x":9,"y":9,"type":"AIR"},{"x":10,"y":9,"type":"DIRT"},{"x":11,"y":9,"type":"DIRT"},{"x":12,"y":9,"type":"AIR"},{"x":13,"y":9,"type":"AIR"},{"x":14,"y":9,"type":"DIRT"},{"x":15,"y":9,"type":"AIR"},{"x":16,"y":9,"type":"DIRT"},{"x":17,"y":9,"type":"AIR"},{"x":18,"y":9,"type":"DIRT"},{"x":19,"y":9,"type":"AIR"},{"x":20,"y":9,"type":"AIR"},{"x":21,"y":9,"type":"DIRT"},{"x":22,"y":9,"type":"DIRT"},{"x":23,"y":9,"type":"AIR"},{"x":24,"y":9,"type":"AIR"},{"x":25,"y":9,"type":"AIR"},{"x":26,"y":9,"type":"DIRT"},{"x":27,"y":9,"type":"DIRT"},{"x":28,"y":9,"type":"AIR"},{"x":29,"y":9,"type":"AIR"},{"x":30,"y":9,"type":"DIRT"},{"x":31,"y":9,"type":"DIRT"},{"x":32,"y":9,"type":"DEEP_SPACE"}],[{"x":0,"y":10,"type":"DEEP_SPACE"},{"x":1,"y":10,"type":"DIRT"},{"x":2,"y":10,"type":"DIRT"},{"x":3,"y":10,"type":"DIRT"},{"x":4,"y":10,"type":"DIRT"},{"x":5,"y":10,"type":"DIRT"},{"x":6,"y":10,"type":"AIR"},{"x":7,"y":10,"type":"AIR"},{"x":8,"y":10,"type":"AIR"},{"x":9,"y":10,"type":"AIR"},{"x":10,"y":10,"type":"DIRT"},{"x":11,"y":10,"type":"AIR"},{"x":12,"y":10,"type":"AIR"},{"x":13,"y":10,"type":"AIR"},{"x":14,"y":10,"type":"DIRT"},{"x":15,"y":10,"type":"AIR"},{"x":16,"y":10,"type":"AIR"},{"x":17,"y":10,"type":"AIR"},{"x":18,"y":10,"type":"DIRT"},{"x":19,"y":10,"type":"AIR"},{"x":20,"y":10,"type":"AIR"},{"x":21,"y":10,"type":"AIR"},{"x":22,"y":10,"type":"DIRT"},{"x":23,"y":10,"type":"AIR"},{"x":24,"y":10,"type":"AIR"},{"x":25,"y":10,"type":"AIR"},{"x":26,"y":10,"type":"AIR"},{"x":27,"y":10,"type":"DIRT"},{"x":28,"y":10,"type":"DIRT"},{"x":29,"y":10,"type":"DIRT"},{"x":30,"y":10,"type":"DIRT"},{"x":31,"y":10,"type":"DIRT"},{"x":32,"y":10,"type":"DEEP_SPACE"}],[{"x":0,"y":11,"type":"DIRT"},{"x":1,"y":11,"type":"DIRT"},{"x":2,"y":11,"type":"DIRT"},{"x":3,"y":11,"type":"DIRT"},{"x":4,"y":11,"type":"DIRT"},{"x":5,"y":11,"type":"DIRT"},{"x":6,"y":11,"type":"AIR"},{"x":7,"y":11,"type":"AIR"},{"x":8,"y":11,"type":"AIR"},{"x":9,"y":11,"type":"AIR"},{"x":10,"y":11,"type":"AIR"},{"x":11,"y":11,"type":"AIR"},{"x":12,"y":11,"type":"AIR"},{"x":13,"y":11,"type":"AIR"},{"x":14,"y":11,"type":"DIRT"},{"x":15,"y":11,"type":"DIRT"},{"x":16,"y":11,"type":"DIRT"},{"x":17,"y":11,"type":"DIRT"},{"x":18,"y":11,"type":"DIRT"},{"x":19,"y":11,"type":"AIR"},{"x":20,"y":11,"type":"AIR"},{"x":21,"y":11,"type":"AIR"},{"x":22,"y":11,"type":"AIR"},{"x":23,"y":11,"type":"AIR"},{"x":24,"y":11,"type":"AIR"},{"x":25,"y":11,"type":"AIR"},{"x":26,"y":11,"type":"AIR"},{"x":27,"y":11,"type":"DIRT"},{"x":28,"y":11,"type":"DIRT"},{"x":29,"y":11,"type":"DIRT"},{"x":30,"y":11,"type":"DIRT"},{"x":31,"y":11,"type":"DIRT"},{"x":32,"y":11,"type":"DIRT"}],[{"x":0,"y":12,"type":"DIRT"},{"x":1,"y":12,"type":"DIRT"},{"x":2,"y":12,"type":"AIR"},{"x":3,"y":12,"type":"DIRT"},{"x":4,"y":12,"type":"DIRT"},{"x":5,"y":12,"type":"DIRT"},{"x":6,"y":12,"type":"DIRT"},{"x":7,"y":12,"type":"AIR"},{"x":8,"y":12,"type":"AIR"},{"x":9,"y":12,"type":"AIR"},{"x":10,"y":12,"type":"AIR"},{"x":11,"y":12,"type":"AIR"},{"x":12,"y":12,"type":"DIRT"},{"x":13,"y":12,"type":"DIRT"},{"x":14,"y":12,"type":"AIR"},{"x":15,"y":12,"type":"AIR"},{"x":16,"y":12,"type":"DIRT"},{"x":17,"y":12,"type":"AIR"},{"x":18,"y":12,"type":"AIR"},{"x":19,"y":12,"type":"DIRT"},{"x":20,"y":12,"type":"DIRT"},{"x":21,"y":12,"type":"AIR"},{"x":22,"y":12,"type":"AIR"},{"x":23,"y":12,"type":"AIR"},{"x":24,"y":12,"type":"AIR"},{"x":25,"y":12,"type":"AIR"},{"x":26,"y":12,"type":"DIRT"},{"x":27,"y":12,"type":"DIRT"},{"x":28,"y":12,"type":"DIRT"},{"x":29,"y":12,"type":"DIRT"},{"x":30,"y":12,"type":"AIR"},{"x":31,"y":12,"type":"DIRT"},{"x":32,"y":12,"type":"DIRT"}],[{"x":0,"y":13,"type":"DIRT"},{"x":1,"y":13,"type":"AIR"},{"x":2,"y":13,"type":"AIR"},{"x":3,"y":13,"type":"DIRT"},{"x":4,"y":13,"type":"DIRT"},{"x":5,"y":13,"type":"DIRT"},{"x":6,"y":13,"type":"AIR"},{"x":7,"y":13,"type":"AIR"},{"x":8,"y":13,"type":"AIR"},{"x":9,"y":13,"type":"AIR"},{"x":10,"y":13,"type":"AIR"},{"x":11,"y":13,"type":"AIR"},{"x":12,"y":13,"type":"DIRT"},{"x":13,"y":13,"type":"DIRT"},{"x":14,"y":13,"type":"AIR"},{"x":15,"y":13,"type":"AIR"},{"x":16,"y":13,"type":"AIR"},{"x":17,"y":13,"type":"AIR"},{"x":18,"y":13,"type":"AIR"},{"x":19,"y":13,"type":"DIRT"},{"x":20,"y":13,"type":"DIRT"},{"x":21,"y":13,"type":"AIR"},{"x":22,"y":13,"type":"AIR"},{"x":23,"y":13,"type":"AIR"},{"x":24,"y":13,"type":"AIR"},{"x":25,"y":13,"type":"AIR"},{"x":26,"y":13,"type":"AIR"},{"x":27,"y":13,"type":"DIRT"},{"x":28,"y":13,"type":"DIRT"},{"x":29,"y":13,"type":"DIRT"},{"x":30,"y":13,"type":"AIR"},{"x":31,"y":13,"type":"AIR"},{"x":32,"y":13,"type":"DIRT"}],[{"x":0,"y":14,"type":"DIRT"},{"x":1,"y":14,"type":"DIRT"},{"x":2,"y":14,"type":"DIRT"},{"x":3,"y":14,"type":"DIRT"},{"x":4,"y":14,"type":"DIRT"},{"x":5,"y":14,"type":"DIRT"},{"x":6,"y":14,"type":"AIR"},{"x":7,"y":14,"type":"AIR"},{"x":8,"y":14,"type":"AIR"},{"x":9,"y":14,"type":"DIRT"},{"x":10,"y":14,"type":"DIRT"},{"x":11,"y":14,"type":"DIRT"},{"x":12,"y":14,"type":"DIRT"},{"x":13,"y":14,"type":"DIRT"},{"x":14,"y":14,"type":"DIRT"},{"x":15,"y":14,"type":"AIR"},{"x":16,"y":14,"type":"AIR"},{"x":17,"y":14,"type":"AIR"},{"x":18,"y":14,"type":"DIRT"},{"x":19,"y":14,"type":"DIRT"},{"x":20,"y":14,"type":"DIRT"},{"x":21,"y":14,"type":"DIRT"},{"x":22,"y":14,"type":"DIRT"},{"x":23,"y":14,"type":"DIRT"},{"x":24,"y":14,"type":"AIR"},{"x":25,"y":14,"type":"AIR"},{"x":26,"y":14,"type":"AIR"},{"x":27,"y":14,"type":"DIRT"},{"x":28,"y":14,"type":"DIRT"},{"x":29,"y":14,"type":"DIRT"},{"x":30,"y":14,"type":"DIRT"},{"x":31,"y":14,"type":"DIRT"},{"x":32,"y":14,"type":"DIRT"}],[{"x":0,"y":15,"type":"AIR"},{"x":1,"y":15,"type":"AIR"},{"x":2,"y":15,"type":"AIR"},{"x":3,"y":15,"type":"DIRT"},{"x":4,"y":15,"type":"DIRT"},{"x":5,"y":15,"type":"AIR"},{"x":6,"y":15,"type":"AIR"},{"x":7,"y":15,"type":"AIR"},{"x":8,"y":15,"type":"DIRT"},{"x":9,"y":15,"type":"AIR"},{"x":10,"y":15,"type":"DIRT"},{"x":11,"y":15,"type":"DIRT"},{"x":12,"y":15,"type":"DIRT"},{"x":13,"y":15,"type":"DIRT"},{"x":14,"y":15,"type":"AIR","powerup":{"type":"HEALTH_PACK","value":10}},{"x":15,"y":15,"type":"AIR"},{"x":16,"y":15,"type":"DIRT"},{"x":17,"y":15,"type":"AIR"},{"x":18,"y":15,"type":"AIR"},{"x":19,"y":15,"type":"DIRT"},{"x":20,"y":15,"type":"DIRT"},{"x":21,"y":15,"type":"DIRT"},{"x":22,"y":15,"type":"DIRT"},{"x":23,"y":15,"type":"AIR"},{"x":24,"y":15,"type":"DIRT"},{"x":25,"y":15,"type":"AIR"},{"x":26,"y":15,"type":"AIR"},{"x":27,"y":15,"type":"AIR"},{"x":28,"y":15,"type":"DIRT"},{"x":29,"y":15,"type":"DIRT"},{"x":30,"y":15,"type":"AIR"},{"x":31,"y":15,"type":"AIR"},{"x":32,"y":15,"type":"AIR"}],[{"x":0,"y":16,"type":"AIR"},{"x":1,"y":16,"type":"AIR","occupier":{"id":3,"playerId":1,"health":100,"position":{"x":1,"y":16},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Technologist"}},{"x":2,"y":16,"type":"AIR"},{"x":3,"y":16,"type":"DIRT"},{"x":4,"y":16,"type":"AIR"},{"x":5,"y":16,"type":"DIRT"},{"x":6,"y":16,"type":"DIRT"},{"x":7,"y":16,"type":"AIR"},{"x":8,"y":16,"type":"AIR"},{"x":9,"y":16,"type":"DIRT"},{"x":10,"y":16,"type":"DIRT"},{"x":11,"y":16,"type":"DIRT"},{"x":12,"y":16,"type":"DIRT"},{"x":13,"y":16,"type":"DIRT"},{"x":14,"y":16,"type":"DIRT"},{"x":15,"y":16,"type":"AIR"},{"x":16,"y":16,"type":"DIRT"},{"x":17,"y":16,"type":"AIR"},{"x":18,"y":16,"type":"DIRT"},{"x":19,"y":16,"type":"DIRT"},{"x":20,"y":16,"type":"DIRT"},{"x":21,"y":16,"type":"DIRT"},{"x":22,"y":16,"type":"DIRT"},{"x":23,"y":16,"type":"DIRT"},{"x":24,"y":16,"type":"AIR"},{"x":25,"y":16,"type":"AIR"},{"x":26,"y":16,"type":"DIRT"},{"x":27,"y":16,"type":"DIRT"},{"x":28,"y":16,"type":"AIR"},{"x":29,"y":16,"type":"DIRT"},{"x":30,"y":16,"type":"AIR"},{"x":31,"y":16,"type":"AIR","occupier":{"id":3,"playerId":2,"health":100,"position":{"x":31,"y":16},"weapon":{"damage":8,"range":4},"snowballs":{"freezeDuration":5,"range":5,"count":3,"freezeRadius":1},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Technologist"}},{"x":32,"y":16,"type":"AIR"}],[{"x":0,"y":17,"type":"AIR"},{"x":1,"y":17,"type":"AIR"},{"x":2,"y":17,"type":"AIR"},{"x":3,"y":17,"type":"DIRT"},{"x":4,"y":17,"type":"DIRT"},{"x":5,"y":17,"type":"DIRT"},{"x":6,"y":17,"type":"DIRT"},{"x":7,"y":17,"type":"DIRT"},{"x":8,"y":17,"type":"AIR"},{"x":9,"y":17,"type":"DIRT"},{"x":10,"y":17,"type":"DIRT"},{"x":11,"y":17,"type":"AIR"},{"x":12,"y":17,"type":"DIRT"},{"x":13,"y":17,"type":"DIRT"},{"x":14,"y":17,"type":"DIRT"},{"x":15,"y":17,"type":"AIR"},{"x":16,"y":17,"type":"AIR"},{"x":17,"y":17,"type":"AIR"},{"x":18,"y":17,"type":"AIR","powerup":{"type":"HEALTH_PACK","value":10}},{"x":19,"y":17,"type":"DIRT"},{"x":20,"y":17,"type":"DIRT"},{"x":21,"y":17,"type":"AIR"},{"x":22,"y":17,"type":"DIRT"},{"x":23,"y":17,"type":"DIRT"},{"x":24,"y":17,"type":"AIR"},{"x":25,"y":17,"type":"DIRT"},{"x":26,"y":17,"type":"DIRT"},{"x":27,"y":17,"type":"DIRT"},{"x":28,"y":17,"type":"DIRT"},{"x":29,"y":17,"type":"DIRT"},{"x":30,"y":17,"type":"AIR"},{"x":31,"y":17,"type":"AIR"},{"x":32,"y":17,"type":"AIR"}],[{"x":0,"y":18,"type":"DIRT"},{"x":1,"y":18,"type":"DIRT"},{"x":2,"y":18,"type":"DIRT"},{"x":3,"y":18,"type":"DIRT"},{"x":4,"y":18,"type":"DIRT"},{"x":5,"y":18,"type":"DIRT"},{"x":6,"y":18,"type":"DIRT"},{"x":7,"y":18,"type":"DIRT"},{"x":8,"y":18,"type":"DIRT"},{"x":9,"y":18,"type":"AIR"},{"x":10,"y":18,"type":"AIR"},{"x":11,"y":18,"type":"DIRT"},{"x":12,"y":18,"type":"DIRT"},{"x":13,"y":18,"type":"DIRT"},{"x":14,"y":18,"type":"AIR"},{"x":15,"y":18,"type":"AIR"},{"x":16,"y":18,"type":"AIR"},{"x":17,"y":18,"type":"AIR"},{"x":18,"y":18,"type":"AIR"},{"x":19,"y":18,"type":"DIRT"},{"x":20,"y":18,"type":"DIRT"},{"x":21,"y":18,"type":"DIRT"},{"x":22,"y":18,"type":"AIR"},{"x":23,"y":18,"type":"AIR"},{"x":24,"y":18,"type":"DIRT"},{"x":25,"y":18,"type":"DIRT"},{"x":26,"y":18,"type":"DIRT"},{"x":27,"y":18,"type":"DIRT"},{"x":28,"y":18,"type":"DIRT"},{"x":29,"y":18,"type":"DIRT"},{"x":30,"y":18,"type":"DIRT"},{"x":31,"y":18,"type":"DIRT"},{"x":32,"y":18,"type":"DIRT"}],[{"x":0,"y":19,"type":"AIR"},{"x":1,"y":19,"type":"AIR"},{"x":2,"y":19,"type":"DIRT"},{"x":3,"y":19,"type":"AIR"},{"x":4,"y":19,"type":"AIR"},{"x":5,"y":19,"type":"AIR"},{"x":6,"y":19,"type":"AIR"},{"x":7,"y":19,"type":"AIR"},{"x":8,"y":19,"type":"DIRT"},{"x":9,"y":19,"type":"AIR"},{"x":10,"y":19,"type":"AIR"},{"x":11,"y":19,"type":"DIRT"},{"x":12,"y":19,"type":"DIRT"},{"x":13,"y":19,"type":"AIR"},{"x":14,"y":19,"type":"AIR"},{"x":15,"y":19,"type":"AIR"},{"x":16,"y":19,"type":"AIR"},{"x":17,"y":19,"type":"AIR"},{"x":18,"y":19,"type":"AIR"},{"x":19,"y":19,"type":"AIR"},{"x":20,"y":19,"type":"DIRT"},{"x":21,"y":19,"type":"DIRT"},{"x":22,"y":19,"type":"AIR"},{"x":23,"y":19,"type":"AIR"},{"x":24,"y":19,"type":"DIRT"},{"x":25,"y":19,"type":"AIR"},{"x":26,"y":19,"type":"AIR"},{"x":27,"y":19,"type":"AIR"},{"x":28,"y":19,"type":"AIR"},{"x":29,"y":19,"type":"AIR"},{"x":30,"y":19,"type":"DIRT"},{"x":31,"y":19,"type":"AIR"},{"x":32,"y":19,"type":"AIR"}],[{"x":0,"y":20,"type":"AIR"},{"x":1,"y":20,"type":"AIR"},{"x":2,"y":20,"type":"DIRT"},{"x":3,"y":20,"type":"DIRT"},{"x":4,"y":20,"type":"AIR"},{"x":5,"y":20,"type":"AIR"},{"x":6,"y":20,"type":"AIR"},{"x":7,"y":20,"type":"AIR"},{"x":8,"y":20,"type":"AIR"},{"x":9,"y":20,"type":"AIR"},{"x":10,"y":20,"type":"AIR"},{"x":11,"y":20,"type":"DIRT"},{"x":12,"y":20,"type":"DIRT"},{"x":13,"y":20,"type":"DIRT"},{"x":14,"y":20,"type":"AIR"},{"x":15,"y":20,"type":"AIR"},{"x":16,"y":20,"type":"AIR"},{"x":17,"y":20,"type":"AIR"},{"x":18,"y":20,"type":"AIR"},{"x":19,"y":20,"type":"DIRT"},{"x":20,"y":20,"type":"DIRT"},{"x":21,"y":20,"type":"DIRT"},{"x":22,"y":20,"type":"AIR"},{"x":23,"y":20,"type":"AIR"},{"x":24,"y":20,"type":"AIR"},{"x":25,"y":20,"type":"AIR"},{"x":26,"y":20,"type":"AIR"},{"x":27,"y":20,"type":"AIR"},{"x":28,"y":20,"type":"AIR"},{"x":29,"y":20,"type":"DIRT"},{"x":30,"y":20,"type":"DIRT"},{"x":31,"y":20,"type":"AIR"},{"x":32,"y":20,"type":"AIR"}],[{"x":0,"y":21,"type":"AIR"},{"x":1,"y":21,"type":"DIRT"},{"x":2,"y":21,"type":"DIRT"},{"x":3,"y":21,"type":"DIRT"},{"x":4,"y":21,"type":"DIRT"},{"x":5,"y":21,"type":"AIR"},{"x":6,"y":21,"type":"AIR"},{"x":7,"y":21,"type":"AIR"},{"x":8,"y":21,"type":"AIR"},{"x":9,"y":21,"type":"AIR"},{"x":10,"y":21,"type":"DIRT"},{"x":11,"y":21,"type":"DIRT"},{"x":12,"y":21,"type":"DIRT"},{"x":13,"y":21,"type":"DIRT"},{"x":14,"y":21,"type":"DIRT"},{"x":15,"y":21,"type":"AIR"},{"x":16,"y":21,"type":"AIR"},{"x":17,"y":21,"type":"AIR"},{"x":18,"y":21,"type":"DIRT"},{"x":19,"y":21,"type":"DIRT"},{"x":20,"y":21,"type":"DIRT"},{"x":21,"y":21,"type":"DIRT"},{"x":22,"y":21,"type":"DIRT"},{"x":23,"y":21,"type":"AIR"},{"x":24,"y":21,"type":"AIR"},{"x":25,"y":21,"type":"AIR"},{"x":26,"y":21,"type":"AIR"},{"x":27,"y":21,"type":"AIR"},{"x":28,"y":21,"type":"DIRT"},{"x":29,"y":21,"type":"DIRT"},{"x":30,"y":21,"type":"DIRT"},{"x":31,"y":21,"type":"DIRT"},{"x":32,"y":21,"type":"AIR"}],[{"x":0,"y":22,"type":"DEEP_SPACE"},{"x":1,"y":22,"type":"DIRT"},{"x":2,"y":22,"type":"AIR"},{"x":3,"y":22,"type":"DIRT"},{"x":4,"y":22,"type":"DIRT"},{"x":5,"y":22,"type":"AIR"},{"x":6,"y":22,"type":"AIR"},{"x":7,"y":22,"type":"AIR"},{"x":8,"y":22,"type":"AIR"},{"x":9,"y":22,"type":"AIR"},{"x":10,"y":22,"type":"DIRT"},{"x":11,"y":22,"type":"DIRT"},{"x":12,"y":22,"type":"AIR"},{"x":13,"y":22,"type":"AIR"},{"x":14,"y":22,"type":"DIRT"},{"x":15,"y":22,"type":"AIR"},{"x":16,"y":22,"type":"AIR"},{"x":17,"y":22,"type":"AIR"},{"x":18,"y":22,"type":"DIRT"},{"x":19,"y":22,"type":"AIR"},{"x":20,"y":22,"type":"AIR"},{"x":21,"y":22,"type":"DIRT"},{"x":22,"y":22,"type":"DIRT"},{"x":23,"y":22,"type":"AIR"},{"x":24,"y":22,"type":"AIR"},{"x":25,"y":22,"type":"AIR"},{"x":26,"y":22,"type":"AIR"},{"x":27,"y":22,"type":"AIR"},{"x":28,"y":22,"type":"DIRT"},{"x":29,"y":22,"type":"DIRT"},{"x":30,"y":22,"type":"AIR"},{"x":31,"y":22,"type":"DIRT"},{"x":32,"y":22,"type":"DEEP_SPACE"}],[{"x":0,"y":23,"type":"DEEP_SPACE"},{"x":1,"y":23,"type":"DIRT"},{"x":2,"y":23,"type":"AIR"},{"x":3,"y":23,"type":"DIRT"},{"x":4,"y":23,"type":"DIRT"},{"x":5,"y":23,"type":"DIRT"},{"x":6,"y":23,"type":"AIR"},{"x":7,"y":23,"type":"AIR"},{"x":8,"y":23,"type":"DIRT"},{"x":9,"y":23,"type":"DIRT"},{"x":10,"y":23,"type":"DIRT"},{"x":11,"y":23,"type":"DIRT"},{"x":12,"y":23,"type":"AIR"},{"x":13,"y":23,"type":"AIR"},{"x":14,"y":23,"type":"DIRT"},{"x":15,"y":23,"type":"AIR"},{"x":16,"y":23,"type":"AIR"},{"x":17,"y":23,"type":"AIR"},{"x":18,"y":23,"type":"DIRT"},{"x":19,"y":23,"type":"AIR"},{"x":20,"y":23,"type":"AIR"},{"x":21,"y":23,"type":"DIRT"},{"x":22,"y":23,"type":"DIRT"},{"x":23,"y":23,"type":"DIRT"},{"x":24,"y":23,"type":"DIRT"},{"x":25,"y":23,"type":"AIR"},{"x":26,"y":23,"type":"AIR"},{"x":27,"y":23,"type":"DIRT"},{"x":28,"y":23,"type":"DIRT"},{"x":29,"y":23,"type":"DIRT"},{"x":30,"y":23,"type":"AIR"},{"x":31,"y":23,"type":"DIRT"},{"x":32,"y":23,"type":"DEEP_SPACE"}],[{"x":0,"y":24,"type":"DEEP_SPACE"},{"x":1,"y":24,"type":"DIRT"},{"x":2,"y":24,"type":"DIRT"},{"x":3,"y":24,"type":"DIRT"},{"x":4,"y":24,"type":"DIRT"},{"x":5,"y":24,"type":"DIRT"},{"x":6,"y":24,"type":"AIR"},{"x":7,"y":24,"type":"AIR"},{"x":8,"y":24,"type":"DIRT"},{"x":9,"y":24,"type":"AIR"},{"x":10,"y":24,"type":"AIR"},{"x":11,"y":24,"type":"AIR"},{"x":12,"y":24,"type":"AIR"},{"x":13,"y":24,"type":"AIR"},{"x":14,"y":24,"type":"DIRT"},{"x":15,"y":24,"type":"DIRT"},{"x":16,"y":24,"type":"DIRT"},{"x":17,"y":24,"type":"DIRT"},{"x":18,"y":24,"type":"DIRT"},{"x":19,"y":24,"type":"AIR"},{"x":20,"y":24,"type":"AIR"},{"x":21,"y":24,"type":"AIR"},{"x":22,"y":24,"type":"AIR"},{"x":23,"y":24,"type":"AIR"},{"x":24,"y":24,"type":"DIRT"},{"x":25,"y":24,"type":"AIR"},{"x":26,"y":24,"type":"AIR"},{"x":27,"y":24,"type":"DIRT"},{"x":28,"y":24,"type":"DIRT"},{"x":29,"y":24,"type":"DIRT"},{"x":30,"y":24,"type":"DIRT"},{"x":31,"y":24,"type":"DIRT"},{"x":32,"y":24,"type":"DEEP_SPACE"}],[{"x":0,"y":25,"type":"DEEP_SPACE"},{"x":1,"y":25,"type":"DEEP_SPACE"},{"x":2,"y":25,"type":"DIRT"},{"x":3,"y":25,"type":"AIR"},{"x":4,"y":25,"type":"DIRT"},{"x":5,"y":25,"type":"DIRT"},{"x":6,"y":25,"type":"AIR"},{"x":7,"y":25,"type":"AIR"},{"x":8,"y":25,"type":"DIRT"},{"x":9,"y":25,"type":"DIRT"},{"x":10,"y":25,"type":"AIR"},{"x":11,"y":25,"type":"AIR"},{"x":12,"y":25,"type":"AIR"},{"x":13,"y":25,"type":"AIR"},{"x":14,"y":25,"type":"DIRT"},{"x":15,"y":25,"type":"AIR"},{"x":16,"y":25,"type":"DIRT"},{"x":17,"y":25,"type":"AIR"},{"x":18,"y":25,"type":"DIRT"},{"x":19,"y":25,"type":"AIR"},{"x":20,"y":25,"type":"AIR"},{"x":21,"y":25,"type":"AIR"},{"x":22,"y":25,"type":"AIR"},{"x":23,"y":25,"type":"DIRT"},{"x":24,"y":25,"type":"DIRT"},{"x":25,"y":25,"type":"AIR"},{"x":26,"y":25,"type":"AIR"},{"x":27,"y":25,"type":"DIRT"},{"x":28,"y":25,"type":"DIRT"},{"x":29,"y":25,"type":"AIR"},{"x":30,"y":25,"type":"DIRT"},{"x":31,"y":25,"type":"DEEP_SPACE"},{"x":32,"y":25,"type":"DEEP_SPACE"}],[{"x":0,"y":26,"type":"DEEP_SPACE"},{"x":1,"y":26,"type":"DEEP_SPACE"},{"x":2,"y":26,"type":"DEEP_SPACE"},{"x":3,"y":26,"type":"AIR"},{"x":4,"y":26,"type":"AIR"},{"x":5,"y":26,"type":"AIR"},{"x":6,"y":26,"type":"DIRT"},{"x":7,"y":26,"type":"DIRT"},{"x":8,"y":26,"type":"DIRT"},{"x":9,"y":26,"type":"DIRT"},{"x":10,"y":26,"type":"DIRT"},{"x":11,"y":26,"type":"AIR"},{"x":12,"y":26,"type":"DIRT"},{"x":13,"y":26,"type":"AIR"},{"x":14,"y":26,"type":"AIR"},{"x":15,"y":26,"type":"DIRT"},{"x":16,"y":26,"type":"DIRT"},{"x":17,"y":26,"type":"DIRT"},{"x":18,"y":26,"type":"AIR"},{"x":19,"y":26,"type":"AIR"},{"x":20,"y":26,"type":"DIRT"},{"x":21,"y":26,"type":"AIR"},{"x":22,"y":26,"type":"DIRT"},{"x":23,"y":26,"type":"DIRT"},{"x":24,"y":26,"type":"DIRT"},{"x":25,"y":26,"type":"DIRT"},{"x":26,"y":26,"type":"DIRT"},{"x":27,"y":26,"type":"AIR"},{"x":28,"y":26,"type":"AIR"},{"x":29,"y":26,"type":"AIR"},{"x":30,"y":26,"type":"DEEP_SPACE"},{"x":31,"y":26,"type":"DEEP_SPACE"},{"x":32,"y":26,"type":"DEEP_SPACE"}],[{"x":0,"y":27,"type":"DEEP_SPACE"},{"x":1,"y":27,"type":"DEEP_SPACE"},{"x":2,"y":27,"type":"DEEP_SPACE"},{"x":3,"y":27,"type":"DEEP_SPACE"},{"x":4,"y":27,"type":"AIR"},{"x":5,"y":27,"type":"AIR"},{"x":6,"y":27,"type":"DIRT"},{"x":7,"y":27,"type":"AIR"},{"x":8,"y":27,"type":"AIR"},{"x":9,"y":27,"type":"AIR"},{"x":10,"y":27,"type":"DIRT"},{"x":11,"y":27,"type":"DIRT"},{"x":12,"y":27,"type":"DIRT"},{"x":13,"y":27,"type":"AIR"},{"x":14,"y":27,"type":"AIR"},{"x":15,"y":27,"type":"DIRT"},{"x":16,"y":27,"type":"DIRT"},{"x":17,"y":27,"type":"DIRT"},{"x":18,"y":27,"type":"AIR"},{"x":19,"y":27,"type":"AIR"},{"x":20,"y":27,"type":"DIRT"},{"x":21,"y":27,"type":"DIRT"},{"x":22,"y":27,"type":"DIRT"},{"x":23,"y":27,"type":"AIR"},{"x":24,"y":27,"type":"AIR"},{"x":25,"y":27,"type":"AIR"},{"x":26,"y":27,"type":"DIRT"},{"x":27,"y":27,"type":"AIR"},{"x":28,"y":27,"type":"AIR"},{"x":29,"y":27,"type":"DEEP_SPACE"},{"x":30,"y":27,"type":"DEEP_SPACE"},{"x":31,"y":27,"type":"DEEP_SPACE"},{"x":32,"y":27,"type":"DEEP_SPACE"}],[{"x":0,"y":28,"type":"DEEP_SPACE"},{"x":1,"y":28,"type":"DEEP_SPACE"},{"x":2,"y":28,"type":"DEEP_SPACE"},{"x":3,"y":28,"type":"DEEP_SPACE"},{"x":4,"y":28,"type":"AIR"},{"x":5,"y":28,"type":"AIR"},{"x":6,"y":28,"type":"DIRT"},{"x":7,"y":28,"type":"AIR"},{"x":8,"y":28,"type":"AIR","occupier":{"id":1,"playerId":2,"health":150,"position":{"x":8,"y":28},"weapon":{"damage":8,"range":4},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Commando"}},{"x":9,"y":28,"type":"AIR"},{"x":10,"y":28,"type":"DIRT"},{"x":11,"y":28,"type":"DIRT"},{"x":12,"y":28,"type":"AIR"},{"x":13,"y":28,"type":"AIR"},{"x":14,"y":28,"type":"AIR"},{"x":15,"y":28,"type":"DIRT"},{"x":16,"y":28,"type":"DIRT"},{"x":17,"y":28,"type":"DIRT"},{"x":18,"y":28,"type":"AIR"},{"x":19,"y":28,"type":"AIR"},{"x":20,"y":28,"type":"AIR"},{"x":21,"y":28,"type":"DIRT"},{"x":22,"y":28,"type":"DIRT"},{"x":23,"y":28,"type":"AIR"},{"x":24,"y":28,"type":"AIR","occupier":{"id":2,"playerId":1,"health":100,"position":{"x":24,"y":28},"diggingRange":1,"movementRange":1,"roundsUntilUnfrozen":0,"profession":"Agent"}},{"x":25,"y":28,"type":"AIR"},{"x":26,"y":28,"type":"DIRT"},{"x":27,"y":28,"type":"AIR"},{"x":28,"y":28,"type":"AIR"},{"x":29,"y":28,"type":"DEEP_SPACE"},{"x":30,"y":28,"type":"DEEP_SPACE"},{"x":31,"y":28,"type":"DEEP_SPACE"},{"x":32,"y":28,"type":"DEEP_SPACE"}],[{"x":0,"y":29,"type":"DEEP_SPACE"},{"x":1,"y":29,"type":"DEEP_SPACE"},{"x":2,"y":29,"type":"DEEP_SPACE"},{"x":3,"y":29,"type":"DEEP_SPACE"},{"x":4,"y":29,"type":"DEEP_SPACE"},{"x":5,"y":29,"type":"DEEP_SPACE"},{"x":6,"y":29,"type":"DIRT"},{"x":7,"y":29,"type":"AIR"},{"x":8,"y":29,"type":"AIR"},{"x":9,"y":29,"type":"AIR"},{"x":10,"y":29,"type":"DIRT"},{"x":11,"y":29,"type":"DIRT"},{"x":12,"y":29,"type":"AIR"},{"x":13,"y":29,"type":"DIRT"},{"x":14,"y":29,"type":"DIRT"},{"x":15,"y":29,"type":"DIRT"},{"x":16,"y":29,"type":"DIRT"},{"x":17,"y":29,"type":"DIRT"},{"x":18,"y":29,"type":"DIRT"},{"x":19,"y":29,"type":"DIRT"},{"x":20,"y":29,"type":"AIR"},{"x":21,"y":29,"type":"DIRT"},{"x":22,"y":29,"type":"DIRT"},{"x":23,"y":29,"type":"AIR"},{"x":24,"y":29,"type":"AIR"},{"x":25,"y":29,"type":"AIR"},{"x":26,"y":29,"type":"DIRT"},{"x":27,"y":29,"type":"DEEP_SPACE"},{"x":28,"y":29,"type":"DEEP_SPACE"},{"x":29,"y":29,"type":"DEEP_SPACE"},{"x":30,"y":29,"type":"DEEP_SPACE"},{"x":31,"y":29,"type":"DEEP_SPACE"},{"x":32,"y":29,"type":"DEEP_SPACE"}],[{"x":0,"y":30,"type":"DEEP_SPACE"},{"x":1,"y":30,"type":"DEEP_SPACE"},{"x":2,"y":30,"type":"DEEP_SPACE"},{"x":3,"y":30,"type":"DEEP_SPACE"},{"x":4,"y":30,"type":"DEEP_SPACE"},{"x":5,"y":30,"type":"DEEP_SPACE"},{"x":6,"y":30,"type":"DEEP_SPACE"},{"x":7,"y":30,"type":"DIRT"},{"x":8,"y":30,"type":"DIRT"},{"x":9,"y":30,"type":"DIRT"},{"x":10,"y":30,"type":"DIRT"},{"x":11,"y":30,"type":"DIRT"},{"x":12,"y":30,"type":"AIR"},{"x":13,"y":30,"type":"AIR"},{"x":14,"y":30,"type":"DIRT"},{"x":15,"y":30,"type":"DIRT"},{"x":16,"y":30,"type":"AIR"},{"x":17,"y":30,"type":"DIRT"},{"x":18,"y":30,"type":"DIRT"},{"x":19,"y":30,"type":"AIR"},{"x":20,"y":30,"type":"AIR"},{"x":21,"y":30,"type":"DIRT"},{"x":22,"y":30,"type":"DIRT"},{"x":23,"y":30,"type":"DIRT"},{"x":24,"y":30,"type":"DIRT"},{"x":25,"y":30,"type":"DIRT"},{"x":26,"y":30,"type":"DEEP_SPACE"},{"x":27,"y":30,"type":"DEEP_SPACE"},{"x":28,"y":30,"type":"DEEP_SPACE"},{"x":29,"y":30,"type":"DEEP_SPACE"},{"x":30,"y":30,"type":"DEEP_SPACE"},{"x":31,"y":30,"type":"DEEP_SPACE"},{"x":32,"y":30,"type":"DEEP_SPACE"}],[{"x":0,"y":31,"type":"DEEP_SPACE"},{"x":1,"y":31,"type":"DEEP_SPACE"},{"x":2,"y":31,"type":"DEEP_SPACE"},{"x":3,"y":31,"type":"DEEP_SPACE"},{"x":4,"y":31,"type":"DEEP_SPACE"},{"x":5,"y":31,"type":"DEEP_SPACE"},{"x":6,"y":31,"type":"DEEP_SPACE"},{"x":7,"y":31,"type":"DEEP_SPACE"},{"x":8,"y":31,"type":"DIRT"},{"x":9,"y":31,"type":"DIRT"},{"x":10,"y":31,"type":"DIRT"},{"x":11,"y":31,"type":"DIRT"},{"x":12,"y":31,"type":"AIR"},{"x":13,"y":31,"type":"AIR"},{"x":14,"y":31,"type":"AIR"},{"x":15,"y":31,"type":"AIR"},{"x":16,"y":31,"type":"AIR"},{"x":17,"y":31,"type":"AIR"},{"x":18,"y":31,"type":"AIR"},{"x":19,"y":31,"type":"AIR"},{"x":20,"y":31,"type":"AIR"},{"x":21,"y":31,"type":"DIRT"},{"x":22,"y":31,"type":"DIRT"},{"x":23,"y":31,"type":"DIRT"},{"x":24,"y":31,"type":"DIRT"},{"x":25,"y":31,"type":"DEEP_SPACE"},{"x":26,"y":31,"type":"DEEP_SPACE"},{"x":27,"y":31,"type":"DEEP_SPACE"},{"x":28,"y":31,"type":"DEEP_SPACE"},{"x":29,"y":31,"type":"DEEP_SPACE"},{"x":30,"y":31,"type":"DEEP_SPACE"},{"x":31,"y":31,"type":"DEEP_SPACE"},{"x":32,"y":31,"type":"DEEP_SPACE"}],[{"x":0,"y":32,"type":"DEEP_SPACE"},{"x":1,"y":32,"type":"DEEP_SPACE"},{"x":2,"y":32,"type":"DEEP_SPACE"},{"x":3,"y":32,"type":"DEEP_SPACE"},{"x":4,"y":32,"type":"DEEP_SPACE"},{"x":5,"y":32,"type":"DEEP_SPACE"},{"x":6,"y":32,"type":"DEEP_SPACE"},{"x":7,"y":32,"type":"DEEP_SPACE"},{"x":8,"y":32,"type":"DEEP_SPACE"},{"x":9,"y":32,"type":"DEEP_SPACE"},{"x":10,"y":32,"type":"DEEP_SPACE"},{"x":11,"y":32,"type":"DIRT"},{"x":12,"y":32,"type":"DIRT"},{"x":13,"y":32,"type":"DIRT"},{"x":14,"y":32,"type":"AIR"},{"x":15,"y":32,"type":"AIR"},{"x":16,"y":32,"type":"DIRT"},{"x":17,"y":32,"type":"AIR"},{"x":18,"y":32,"type":"AIR"},{"x":19,"y":32,"type":"DIRT"},{"x":20,"y":32,"type":"DIRT"},{"x":21,"y":32,"type":"DIRT"},{"x":22,"y":32,"type":"DEEP_SPACE"},{"x":23,"y":32,"type":"DEEP_SPACE"},{"x":24,"y":32,"type":"DEEP_SPACE"},{"x":25,"y":32,"type":"DEEP_SPACE"},{"x":26,"y":32,"type":"DEEP_SPACE"},{"x":27,"y":32,"type":"DEEP_SPACE"},{"x":28,"y":32,"type":"DEEP_SPACE"},{"x":29,"y":32,"type":"DEEP_SPACE"},{"x":30,"y":32,"type":"DEEP_SPACE"},{"x":31,"y":32,"type":"DEEP_SPACE"},{"x":32,"y":32,"type":"DEEP_SPACE"}]],"visualizerEvents":[]} \ No newline at end of file
diff --git a/2019-worms/tests/replays/2019.08.19.21.57.04/B-log.csv b/2019-worms/tests/replays/2019.08.19.21.57.04/B-log.csv
new file mode 100644
index 0000000..cc2bfa5
--- /dev/null
+++ b/2019-worms/tests/replays/2019.08.19.21.57.04/B-log.csv
@@ -0,0 +1,214 @@
+Round,LastCommandType,LastCommand,ActiveWorm,Score,Health,Worm1 Health,Worm1 x,Worm1 y,Worm2 Health,Worm2 x,Worm2 y,Worm3 Health,Worm3 x,Worm3 y
+1,null,"null",1,116,350,150,8,28,100,8,4,100,31,16
+2,move,"move 9 27",1,121,350,150,9,27,100,8,4,100,31,16
+3,move,"move 9 5",2,126,350,150,9,27,100,9,5,100,31,16
+4,move,"move 30 17",3,131,350,150,9,27,100,9,5,100,30,17
+5,dig,"dig 10 26",1,138,350,150,9,27,100,9,5,100,30,17
+6,dig,"dig 10 6",2,145,350,150,9,27,100,9,5,100,30,17
+7,dig,"dig 29 17",3,152,350,150,9,27,100,9,5,100,30,17
+8,move,"move 10 26",1,157,350,150,10,26,100,9,5,100,30,17
+9,move,"move 10 6",2,162,350,150,10,26,100,10,6,100,30,17
+10,move,"move 29 17",3,167,350,150,10,26,100,10,6,100,29,17
+11,move,"move 11 25",1,172,350,150,11,25,100,10,6,100,29,17
+12,dig,"dig 11 7",2,179,350,150,11,25,100,10,6,100,29,17
+13,dig,"dig 28 17",3,186,350,150,11,25,100,10,6,100,29,17
+14,move,"move 12 24",1,191,350,150,12,24,100,10,6,100,29,17
+15,move,"move 11 7",2,196,350,150,12,24,100,11,7,100,29,17
+16,move,"move 28 17",3,201,350,150,12,24,100,11,7,100,28,17
+17,move,"move 13 23",1,206,350,150,13,23,100,11,7,100,28,17
+18,dig,"dig 12 8",2,213,350,150,13,23,100,11,7,100,28,17
+19,dig,"dig 27 17",3,220,350,150,13,23,100,11,7,100,28,17
+20,dig,"dig 14 22",1,227,350,150,13,23,100,11,7,100,28,17
+21,move,"move 12 8",2,232,350,150,13,23,100,12,8,100,28,17
+22,move,"move 27 17",3,237,350,150,13,23,100,12,8,100,27,17
+23,move,"move 14 22",1,242,350,150,14,22,100,12,8,100,27,17
+24,move,"move 13 9",2,247,350,150,14,22,100,13,9,100,27,17
+25,dig,"dig 26 17",3,254,350,150,14,22,100,13,9,100,27,17
+26,move,"move 15 21",1,259,350,150,15,21,100,13,9,100,27,17
+27,dig,"dig 14 10",2,266,350,150,15,21,100,13,9,100,27,17
+28,move,"move 26 17",3,271,350,150,15,21,100,13,9,100,26,17
+29,move,"move 16 20",1,276,350,150,16,20,100,13,9,100,26,17
+30,move,"move 14 10",2,281,350,150,16,20,100,14,10,100,26,17
+31,dig,"dig 25 17",3,288,350,150,16,20,100,14,10,100,26,17
+32,move,"move 17 19",1,293,350,150,17,19,100,14,10,100,26,17
+33,dig,"dig 14 11",2,300,350,150,17,19,100,14,10,100,26,17
+34,move,"move 25 17",3,305,350,150,17,19,100,14,10,100,25,17
+35,move,"move 18 18",1,310,350,150,18,18,100,14,10,100,25,17
+36,move,"move 14 11",2,315,350,150,18,18,100,14,11,100,25,17
+37,move,"move 24 17",3,320,350,150,18,18,100,14,11,100,24,17
+38,move,"move 18 17",1,329,360,160,18,17,100,14,11,100,24,17
+39,move,"move 14 12",2,334,360,160,18,17,100,14,12,100,24,17
+40,dig,"dig 23 16",3,341,360,160,18,17,100,14,12,100,24,17
+41,move,"move 17 16",1,346,360,160,17,16,100,14,12,100,24,17
+42,move,"move 14 13",2,351,360,160,17,16,100,14,13,100,24,17
+43,move,"move 23 16",3,356,360,160,17,16,100,14,13,100,23,16
+44,dig,"dig 16 15",1,363,360,160,17,16,100,14,13,100,23,16
+45,dig,"dig 14 14",2,370,360,160,17,16,100,14,13,100,23,16
+46,dig,"dig 22 15",3,377,360,160,17,16,100,14,13,100,23,16
+47,move,"move 16 15",1,382,360,160,16,15,100,14,13,100,23,16
+48,move,"move 14 14",2,387,360,160,16,15,100,14,14,100,23,16
+49,move,"move 22 15",3,392,360,160,16,15,100,14,14,100,22,15
+50,move,"move 15 15",1,397,360,160,15,15,100,14,14,100,22,15
+51,move,"move 14 15",2,405,370,160,15,15,110,14,15,100,22,15
+52,dig,"dig 23 14",3,412,370,160,15,15,110,14,15,100,22,15
+53,move,"move 16 14",1,417,370,160,16,14,110,14,15,100,22,15
+54,move,"move 15 14",2,422,370,160,16,14,110,15,14,100,22,15
+55,move,"move 23 14",3,427,370,160,16,14,110,15,14,100,23,14
+56,move,"move 17 13",1,432,370,160,17,13,110,15,14,100,23,14
+57,move,"move 16 13",2,437,370,160,17,13,110,16,13,100,23,14
+58,move,"move 22 13",3,442,370,160,17,13,110,16,13,100,22,13
+59,move,"move 18 12",1,447,370,160,18,12,110,16,13,100,22,13
+60,move,"move 17 12",2,452,370,160,18,12,110,17,12,100,22,13
+61,move,"move 23 12",3,457,370,160,18,12,110,17,12,100,23,12
+62,move,"move 19 11",1,462,370,160,19,11,110,17,12,100,23,12
+63,dig,"dig 18 11",2,469,370,160,19,11,110,17,12,100,23,12
+64,move,"move 22 11",3,474,370,160,19,11,110,17,12,100,22,11
+65,move,"move 20 10",1,479,370,160,20,10,110,17,12,100,22,11
+66,move,"move 18 11",2,484,370,160,20,10,110,18,11,100,22,11
+67,move,"move 23 10",3,489,370,160,20,10,110,18,11,100,23,10
+68,dig,"dig 21 9",1,496,370,160,20,10,110,18,11,100,23,10
+69,move,"move 19 10",2,501,370,160,20,10,110,19,10,100,23,10
+70,move,"move 24 9",3,506,370,160,20,10,110,19,10,100,24,9
+71,move,"move 21 9",1,511,370,160,21,9,110,19,10,100,24,9
+72,move,"move 20 9",2,516,370,160,21,9,110,20,9,100,24,9
+73,move,"move 25 8",3,521,370,160,21,9,110,20,9,100,25,8
+74,move,"move 22 8",1,526,370,160,22,8,110,20,9,100,25,8
+75,dig,"dig 21 8",2,533,370,160,22,8,110,20,9,100,25,8
+76,snowball,"snowball 25 3",3,550,370,160,22,8,110,20,9,100,25,8
+77,move,"move 23 7",1,555,370,160,23,7,110,20,9,100,25,8
+78,move,"move 21 8",2,560,370,160,23,7,110,21,8,100,25,8
+79,move,"move 25 7",3,565,370,160,23,7,110,21,8,100,25,7
+80,dig,"dig 24 6",1,572,370,160,23,7,110,21,8,100,25,7
+81,move,"move 22 7",2,577,370,160,23,7,110,22,7,100,25,7
+82,snowball,"snowball 25 3",3,594,370,160,23,7,110,22,7,100,25,7
+83,move,"move 24 6",1,599,370,160,24,6,110,22,7,100,25,7
+84,banana,"banana 25 3",2,660,370,160,24,6,110,22,7,100,25,7
+85,dig,"dig 25 6",3,667,370,160,24,6,110,22,7,100,25,7
+86,shoot,"shoot N",3,683,370,160,24,6,110,22,7,100,25,7
+87,shoot,"shoot N",3,696,362,160,24,6,110,22,7,92,25,7
+88,shoot,"shoot N",3,710,354,160,24,6,110,22,7,84,25,7
+89,shoot,"shoot N",3,723,346,160,24,6,110,22,7,76,25,7
+90,shoot,"shoot N",3,736,338,160,24,6,110,22,7,68,25,7
+91,move,"move 25 5",1,741,338,160,25,5,110,22,7,68,25,7
+92,banana,"banana 25 3",2,762,323,145,25,5,110,22,7,68,25,7
+93,snowball,"snowball 25 3",3,779,323,145,25,5,110,22,7,68,25,7
+94,shoot,"shoot N",1,795,323,145,25,5,110,22,7,68,25,7
+95,banana,"banana 25 3",2,819,316,138,25,5,110,22,7,68,25,7
+96,move,"move 25 6",3,824,316,138,25,5,110,22,7,68,25,6
+97,shoot,"shoot N",1,840,316,138,25,5,110,22,7,68,25,6
+98,dig,"dig 23 6",2,844,308,130,25,5,110,22,7,68,25,6
+99,move,"move 25 7",3,849,308,130,25,5,110,22,7,68,25,7
+100,shoot,"shoot N",1,865,308,130,25,5,110,22,7,68,25,7
+101,move,"move 23 6",2,868,300,122,25,5,110,23,6,68,25,7
+102,move,"move 25 6",3,873,300,122,25,5,110,23,6,68,25,6
+103,shoot,"shoot N",1,889,300,122,25,5,110,23,6,68,25,6
+104,move,"move 24 5",2,891,292,114,25,5,110,24,5,68,25,6
+105,move,"move 24 7",3,896,292,114,25,5,110,24,5,68,24,7
+106,shoot,"shoot N",1,912,292,114,25,5,110,24,5,68,24,7
+107,move,"move 25 4",2,914,284,114,25,5,102,25,4,68,24,7
+108,move,"move 25 8",3,919,284,114,25,5,102,25,4,68,25,8
+109,move,"move 25 6",1,924,284,114,25,6,102,25,4,68,25,8
+110,move,"move 25 5",2,929,284,114,25,6,102,25,5,68,25,8
+111,move,"move 24 9",3,934,284,114,25,6,102,25,5,68,24,9
+112,move,"move 24 7",1,939,284,114,24,7,102,25,5,68,24,9
+113,move,"move 25 6",2,944,284,114,24,7,102,25,6,68,24,9
+114,move,"move 25 10",3,949,284,114,24,7,102,25,6,68,25,10
+115,move,"move 25 8",1,954,284,114,25,8,102,25,6,68,25,10
+116,move,"move 25 7",2,959,284,114,25,8,102,25,7,68,25,10
+117,move,"move 25 11",3,964,284,114,25,8,102,25,7,68,25,11
+118,move,"move 25 9",1,969,284,114,25,9,102,25,7,68,25,11
+119,move,"move 24 8",2,974,284,114,25,9,102,24,8,68,25,11
+120,move,"move 24 12",3,979,284,114,25,9,102,24,8,68,24,12
+121,move,"move 25 10",1,984,284,114,25,10,102,24,8,68,24,12
+122,move,"move 25 9",2,989,284,114,25,10,102,25,9,68,24,12
+123,move,"move 25 13",3,994,284,114,25,10,102,25,9,68,25,13
+124,move,"move 26 11",1,999,284,114,26,11,102,25,9,68,25,13
+125,move,"move 25 10",2,1004,284,114,26,11,102,25,10,68,25,13
+126,move,"move 25 14",3,1009,284,114,26,11,102,25,10,68,25,14
+127,dig,"dig 26 12",1,1016,284,114,26,11,102,25,10,68,25,14
+128,move,"move 24 10",2,1021,284,114,26,11,102,24,10,68,25,14
+129,move,"move 26 13",3,1026,284,114,26,11,102,24,10,68,26,13
+130,move,"move 26 12",1,1031,284,114,26,12,102,24,10,68,26,13
+131,move,"move 25 11",2,1036,284,114,26,12,102,25,11,68,26,13
+132,move,"move 25 14",3,1041,284,114,26,12,102,25,11,68,25,14
+133,move,"move 26 13",1,1046,284,114,26,13,102,25,11,68,25,14
+134,move,"move 26 12",2,1051,284,114,26,13,102,26,12,68,25,14
+135,move,"move 26 15",3,1056,284,114,26,13,102,26,12,68,26,15
+136,move,"move 26 14",1,1061,284,114,26,14,102,26,12,68,26,15
+137,move,"move 26 13",2,1066,284,114,26,14,102,26,13,68,26,15
+138,dig,"dig 26 16",3,1073,284,114,26,14,102,26,13,68,26,15
+139,move,"move 25 15",1,1078,284,114,25,15,102,26,13,68,26,15
+140,move,"move 25 14",2,1073,253,101,25,15,95,25,14,57,26,15
+141,move,"move 25 16",3,1078,253,101,25,15,95,25,14,57,25,16
+142,invalid,"invalid",1,1061,213,88,25,15,88,25,14,37,25,16
+143,move,"move 26 14",2,1066,213,88,25,15,88,26,14,37,25,16
+144,move,"move 25 17",3,1061,184,77,25,15,81,26,14,26,25,17
+145,move,"move 25 16",1,1066,184,77,25,16,81,26,14,26,25,17
+146,move,"move 25 15",2,1068,176,77,25,16,81,25,15,18,25,17
+147,shoot,"shoot S",3,1084,176,77,25,16,81,25,15,18,25,17
+148,move,"move 24 15",1,1087,168,77,24,15,81,25,15,10,25,17
+149,move,"move 25 16",2,1092,168,77,24,15,81,25,16,10,25,17
+150,shoot,"shoot S",3,1105,160,77,24,15,81,25,16,2,25,17
+151,move,"move 24 16",1,1110,160,77,24,16,81,25,16,2,25,17
+152,move,"move 24 15",2,1114,158,77,24,16,81,24,15,-6,25,17
+153,move,"move 25 17",1,1119,158,77,25,17,81,24,15,-6,25,17
+154,move,"move 25 16",2,1122,150,69,25,17,81,25,16,-6,25,17
+155,shoot,"shoot S",1,1138,150,69,25,17,81,25,16,-6,25,17
+156,move,"move 24 15",2,1140,142,61,25,17,81,24,15,-6,25,17
+157,shoot,"shoot S",1,1156,142,61,25,17,81,24,15,-6,25,17
+158,move,"move 25 16",2,1158,134,53,25,17,81,25,16,-6,25,17
+159,shoot,"shoot S",1,1174,134,53,25,17,81,25,16,-6,25,17
+160,move,"move 24 15",2,1177,126,45,25,17,81,24,15,-6,25,17
+161,shoot,"shoot S",1,1193,126,45,25,17,81,24,15,-6,25,17
+162,move,"move 25 16",2,1195,118,37,25,17,81,25,16,-6,25,17
+163,shoot,"shoot S",1,1211,118,37,25,17,81,25,16,-6,25,17
+164,move,"move 24 17",2,1213,110,29,25,17,81,24,17,-6,25,17
+165,shoot,"shoot S",1,1229,110,29,25,17,81,24,17,-6,25,17
+166,move,"move 25 18",2,1232,102,29,25,17,73,25,18,-6,25,17
+167,move,"move 26 18",1,1237,102,29,26,18,73,25,18,-6,25,17
+168,shoot,"shoot S",2,1250,94,29,26,18,65,25,18,-6,25,17
+169,move,"move 25 19",1,1255,94,29,25,19,65,25,18,-6,25,17
+170,dig,"dig 24 18",2,1259,86,21,25,19,65,25,18,-6,25,17
+171,shoot,"shoot S",1,1275,86,21,25,19,65,25,18,-6,25,17
+172,move,"move 25 17",2,1278,78,13,25,19,65,25,17,-6,25,17
+173,shoot,"shoot S",1,1294,78,13,25,19,65,25,17,-6,25,17
+174,move,"move 25 18",2,1296,70,5,25,19,65,25,18,-6,25,17
+175,shoot,"shoot S",1,1312,70,5,25,19,65,25,18,-6,25,17
+176,move,"move 24 17",2,1315,65,-3,25,19,65,24,17,-6,25,17
+177,move,"move 25 18",2,1320,65,-3,25,19,65,25,18,-6,25,17
+178,shoot,"shoot S",2,1374,57,-3,25,19,57,25,18,-6,25,17
+179,move,"move 24 17",2,1379,57,-3,25,19,57,24,17,-6,25,17
+180,move,"move 23 16",2,1384,57,-3,25,19,57,23,16,-6,25,17
+181,dig,"dig 22 16",2,1391,57,-3,25,19,57,23,16,-6,25,17
+182,move,"move 22 15",2,1396,57,-3,25,19,57,22,15,-6,25,17
+183,dig,"dig 21 15",2,1403,57,-3,25,19,57,22,15,-6,25,17
+184,move,"move 21 15",2,1408,57,-3,25,19,57,21,15,-6,25,17
+185,dig,"dig 20 15",2,1415,57,-3,25,19,57,21,15,-6,25,17
+186,move,"move 20 15",2,1420,57,-3,25,19,57,20,15,-6,25,17
+187,dig,"dig 19 15",2,1427,57,-3,25,19,57,20,15,-6,25,17
+188,move,"move 19 15",2,1432,57,-3,25,19,57,19,15,-6,25,17
+189,move,"move 18 15",2,1437,57,-3,25,19,57,18,15,-6,25,17
+190,move,"move 17 15",2,1442,57,-3,25,19,57,17,15,-6,25,17
+191,move,"move 16 15",2,1447,57,-3,25,19,57,16,15,-6,25,17
+192,move,"move 15 15",2,1452,57,-3,25,19,57,15,15,-6,25,17
+193,dig,"dig 14 16",2,1459,57,-3,25,19,57,15,15,-6,25,17
+194,move,"move 14 16",2,1464,57,-3,25,19,57,14,16,-6,25,17
+195,dig,"dig 13 17",2,1471,57,-3,25,19,57,14,16,-6,25,17
+196,move,"move 13 17",2,1476,57,-3,25,19,57,13,17,-6,25,17
+197,dig,"dig 12 18",2,1483,57,-3,25,19,57,13,17,-6,25,17
+198,move,"move 12 18",2,1488,57,-3,25,19,57,12,18,-6,25,17
+199,dig,"dig 11 18",2,1495,57,-3,25,19,57,12,18,-6,25,17
+200,move,"move 11 17",2,1500,57,-3,25,19,57,11,17,-6,25,17
+201,dig,"dig 10 17",2,1507,57,-3,25,19,57,11,17,-6,25,17
+202,move,"move 10 16",2,1512,57,-3,25,19,57,10,16,-6,25,17
+203,dig,"dig 9 16",2,1512,57,-3,25,19,57,10,16,-6,25,17
+204,dig,"dig 9 16",2,1512,57,-3,25,19,57,10,16,-6,25,17
+205,dig,"dig 9 16",2,1512,57,-3,25,19,57,10,16,-6,25,17
+206,dig,"dig 9 17",2,1512,57,-3,25,19,57,10,16,-6,25,17
+207,dig,"dig 9 17",2,1512,57,-3,25,19,57,10,16,-6,25,17
+208,dig,"dig 9 17",2,1512,57,-3,25,19,57,10,16,-6,25,17
+209,dig,"dig 9 17",2,1519,57,-3,25,19,57,10,16,-6,25,17
+210,shoot,"shoot S",2,1532,49,-3,25,19,49,10,16,-6,25,17
+211,shoot,"shoot S",2,1545,41,-3,25,19,41,10,16,-6,25,17
+212,shoot,"shoot S",2,1559,33,-3,25,19,33,10,16,-6,25,17
+213,shoot,"shoot S",2,1561,33,-3,25,19,33,10,16,-6,25,17
diff --git a/2019-worms/tests/strategy.rs b/2019-worms/tests/strategy.rs
new file mode 100644
index 0000000..7088099
--- /dev/null
+++ b/2019-worms/tests/strategy.rs
@@ -0,0 +1,27 @@
+use std::path::Path;
+
+use steam_powered_wyrm::game;
+use steam_powered_wyrm::json;
+use steam_powered_wyrm::strategy::{choose_move_with_normalized_perf, ScoreConfig};
+
+#[test]
+fn strategy_is_implemented_symetrically() {
+ let state = game::GameBoard::new(
+ json::read_state_from_json_file(&Path::new(&format!("./tests/example-state.json")))
+ .unwrap(),
+ );
+ let depth = 100;
+
+ let config = ScoreConfig::default();
+ let flipped_state = {
+ let mut flipped_state = state.clone();
+ flipped_state.players[0] = state.players[1].clone();
+ flipped_state.players[1] = state.players[0].clone();
+ flipped_state
+ };
+
+ let position_one_move = choose_move_with_normalized_perf(&state, &config, 0, depth);
+ let position_two_move = choose_move_with_normalized_perf(&flipped_state, &config, 1, depth);
+
+ assert_eq!(position_one_move, position_two_move);
+}