From 3f7b40930297705955aea3a7dc67b70686ee6bc9 Mon Sep 17 00:00:00 2001 From: James Whiteman Date: Fri, 30 Jan 2026 21:16:42 -0800 Subject: [PATCH] Python code --- py/README.md | 60 + py/assets/fonts/Roboto.ttf | Bin 0 -> 146004 bytes py/assets/fonts/RobotoMono.ttf | Bin 0 -> 87540 bytes py/assets/fonts/Tiny5.ttf | Bin 0 -> 131452 bytes py/assets/gamecontrollerdb.txt | 2212 +++++++ py/assets/levels/collecting.ldtk | 5571 +++++++++++++++++ py/assets/levels/fighting.ldtk | 1622 +++++ py/assets/levels/top_down.ldtk | 2651 ++++++++ py/assets/pixel_platformer/backgrounds.png | Bin 0 -> 521 bytes py/assets/pixel_platformer/characters.png | Bin 0 -> 1990 bytes .../pixel_platformer/characters/blue_1.png | Bin 0 -> 252 bytes .../pixel_platformer/characters/blue_2.png | Bin 0 -> 252 bytes .../pixel_platformer/characters/green_1.png | Bin 0 -> 254 bytes .../pixel_platformer/characters/green_2.png | Bin 0 -> 249 bytes .../pixel_platformer/characters/pink_1.png | Bin 0 -> 258 bytes .../pixel_platformer/characters/pink_2.png | Bin 0 -> 255 bytes .../pixel_platformer/characters/yellow_1.png | Bin 0 -> 254 bytes .../pixel_platformer/characters/yellow_2.png | Bin 0 -> 249 bytes py/assets/pixel_platformer/enemies/bat_1.png | Bin 0 -> 242 bytes py/assets/pixel_platformer/enemies/bat_2.png | Bin 0 -> 218 bytes py/assets/pixel_platformer/enemies/bat_3.png | Bin 0 -> 234 bytes .../pixel_platformer/enemies/block_head_1.png | Bin 0 -> 199 bytes .../pixel_platformer/enemies/block_head_2.png | Bin 0 -> 197 bytes .../pixel_platformer/enemies/drill_head_1.png | Bin 0 -> 222 bytes .../pixel_platformer/enemies/drill_head_2.png | Bin 0 -> 224 bytes py/assets/pixel_platformer/items/coin_1.png | Bin 0 -> 161 bytes py/assets/pixel_platformer/items/coin_2.png | Bin 0 -> 146 bytes py/assets/pixel_platformer/tilemap.png | Bin 0 -> 5913 bytes py/assets/sounds/coin.wav | Bin 0 -> 31822 bytes py/assets/sounds/die.wav | Bin 0 -> 107302 bytes py/assets/sounds/hit.wav | Bin 0 -> 21190 bytes py/assets/sounds/jump.wav | Bin 0 -> 30034 bytes py/assets/sounds/shoot.wav | Bin 0 -> 3306 bytes py/assets/sunnyland/back.png | Bin 0 -> 8230 bytes py/assets/sunnyland/bunny/idle-1.png | Bin 0 -> 1570 bytes py/assets/sunnyland/bunny/idle-2.png | Bin 0 -> 1520 bytes py/assets/sunnyland/bunny/idle-3.png | Bin 0 -> 1532 bytes py/assets/sunnyland/bunny/idle-4.png | Bin 0 -> 1533 bytes py/assets/sunnyland/bunny/jump-1.png | Bin 0 -> 5079 bytes py/assets/sunnyland/bunny/jump-2.png | Bin 0 -> 5149 bytes py/assets/sunnyland/bunny/run-1.png | Bin 0 -> 1633 bytes py/assets/sunnyland/bunny/run-2.png | Bin 0 -> 1479 bytes py/assets/sunnyland/bunny/run-3.png | Bin 0 -> 1502 bytes py/assets/sunnyland/bunny/run-4.png | Bin 0 -> 1481 bytes py/assets/sunnyland/bunny/run-5.png | Bin 0 -> 1455 bytes py/assets/sunnyland/bunny/run-6.png | Bin 0 -> 1450 bytes py/assets/sunnyland/fireball/fireball-1.png | Bin 0 -> 1191 bytes py/assets/sunnyland/fireball/fireball-2.png | Bin 0 -> 1187 bytes py/assets/sunnyland/fireball/fireball-3.png | Bin 0 -> 1197 bytes py/assets/sunnyland/fireball/fireball-4.png | Bin 0 -> 1209 bytes py/assets/sunnyland/fireball/fireball-5.png | Bin 0 -> 1225 bytes .../sunnyland/fireball/fireball-hit-1.png | Bin 0 -> 1163 bytes .../sunnyland/fireball/fireball-hit-2.png | Bin 0 -> 1282 bytes .../sunnyland/fireball/fireball-hit-3.png | Bin 0 -> 1393 bytes .../sunnyland/fireball/fireball-hit-4.png | Bin 0 -> 1381 bytes .../sunnyland/fireball/fireball-hit-5.png | Bin 0 -> 1302 bytes .../sunnyland/fireball/fireball-hit-6.png | Bin 0 -> 1188 bytes py/assets/sunnyland/fox/hurt-1.png | Bin 0 -> 1332 bytes py/assets/sunnyland/fox/hurt-2.png | Bin 0 -> 1325 bytes py/assets/sunnyland/fox/idle-1.png | Bin 0 -> 1312 bytes py/assets/sunnyland/fox/idle-2.png | Bin 0 -> 1297 bytes py/assets/sunnyland/fox/idle-3.png | Bin 0 -> 1294 bytes py/assets/sunnyland/fox/idle-4.png | Bin 0 -> 1297 bytes py/assets/sunnyland/fox/jump-1.png | Bin 0 -> 1266 bytes py/assets/sunnyland/fox/jump-2.png | Bin 0 -> 1276 bytes py/assets/sunnyland/fox/roll-1.png | Bin 0 -> 253 bytes py/assets/sunnyland/fox/roll-2.png | Bin 0 -> 255 bytes py/assets/sunnyland/fox/roll-3.png | Bin 0 -> 244 bytes py/assets/sunnyland/fox/roll-4.png | Bin 0 -> 258 bytes py/assets/sunnyland/fox/run-1.png | Bin 0 -> 1312 bytes py/assets/sunnyland/fox/run-2.png | Bin 0 -> 1271 bytes py/assets/sunnyland/fox/run-3.png | Bin 0 -> 1298 bytes py/assets/sunnyland/fox/run-4.png | Bin 0 -> 1241 bytes py/assets/sunnyland/fox/run-5.png | Bin 0 -> 1231 bytes py/assets/sunnyland/fox/run-6.png | Bin 0 -> 1260 bytes py/assets/sunnyland/imp/hurt-1.png | Bin 0 -> 1548 bytes py/assets/sunnyland/imp/hurt-2.png | Bin 0 -> 1496 bytes py/assets/sunnyland/imp/idle-1.png | Bin 0 -> 1534 bytes py/assets/sunnyland/imp/idle-2.png | Bin 0 -> 1495 bytes py/assets/sunnyland/imp/idle-3.png | Bin 0 -> 1494 bytes py/assets/sunnyland/imp/idle-4.png | Bin 0 -> 1492 bytes py/assets/sunnyland/imp/jump-1.png | Bin 0 -> 1502 bytes py/assets/sunnyland/imp/jump-2.png | Bin 0 -> 1461 bytes py/assets/sunnyland/imp/jump-3.png | Bin 0 -> 1466 bytes py/assets/sunnyland/imp/jump-4.png | Bin 0 -> 1492 bytes py/assets/sunnyland/imp/jump-5.png | Bin 0 -> 1487 bytes py/assets/sunnyland/imp/run-1.png | Bin 0 -> 1498 bytes py/assets/sunnyland/imp/run-2.png | Bin 0 -> 1476 bytes py/assets/sunnyland/imp/run-3.png | Bin 0 -> 1452 bytes py/assets/sunnyland/imp/run-4.png | Bin 0 -> 1441 bytes py/assets/sunnyland/imp/run-5.png | Bin 0 -> 1445 bytes py/assets/sunnyland/imp/run-6.png | Bin 0 -> 1407 bytes py/assets/sunnyland/imp/run-7.png | Bin 0 -> 1437 bytes py/assets/sunnyland/imp/run-8.png | Bin 0 -> 1470 bytes py/assets/sunnyland/imp/shot-1.png | Bin 0 -> 1446 bytes py/assets/sunnyland/imp/shot-2.png | Bin 0 -> 1538 bytes py/assets/sunnyland/imp/shot-3.png | Bin 0 -> 1537 bytes py/assets/sunnyland/imp/shot-4.png | Bin 0 -> 1546 bytes py/assets/sunnyland/middle.png | Bin 0 -> 6903 bytes py/assets/sunnyland/squirrel/hurt-1.png | Bin 0 -> 1729 bytes py/assets/sunnyland/squirrel/hurt-2.png | Bin 0 -> 1691 bytes py/assets/sunnyland/squirrel/idle-1.png | Bin 0 -> 1639 bytes py/assets/sunnyland/squirrel/idle-2.png | Bin 0 -> 1583 bytes py/assets/sunnyland/squirrel/idle-3.png | Bin 0 -> 1544 bytes py/assets/sunnyland/squirrel/idle-4.png | Bin 0 -> 1543 bytes py/assets/sunnyland/squirrel/idle-5.png | Bin 0 -> 1534 bytes py/assets/sunnyland/squirrel/idle-6.png | Bin 0 -> 1533 bytes py/assets/sunnyland/squirrel/idle-7.png | Bin 0 -> 1570 bytes py/assets/sunnyland/squirrel/idle-8.png | Bin 0 -> 1660 bytes py/assets/sunnyland/squirrel/jump-1.png | Bin 0 -> 1560 bytes py/assets/sunnyland/squirrel/jump-2.png | Bin 0 -> 1549 bytes py/assets/sunnyland/squirrel/jump-3.png | Bin 0 -> 1523 bytes py/assets/sunnyland/squirrel/jump-4.png | Bin 0 -> 1536 bytes py/assets/sunnyland/squirrel/run-1.png | Bin 0 -> 1617 bytes py/assets/sunnyland/squirrel/run-2.png | Bin 0 -> 1617 bytes py/assets/sunnyland/squirrel/run-3.png | Bin 0 -> 1583 bytes py/assets/sunnyland/squirrel/run-4.png | Bin 0 -> 1577 bytes py/assets/sunnyland/squirrel/run-5.png | Bin 0 -> 1578 bytes py/assets/sunnyland/squirrel/run-6.png | Bin 0 -> 1597 bytes py/assets/sunnyland/tileset.png | Bin 0 -> 20258 bytes py/assets/zombie_shooter/bullet.png | Bin 0 -> 14842 bytes py/assets/zombie_shooter/light.png | Bin 0 -> 254687 bytes py/assets/zombie_shooter/player_1.png | Bin 0 -> 1617 bytes py/assets/zombie_shooter/player_2.png | Bin 0 -> 1588 bytes py/assets/zombie_shooter/player_3.png | Bin 0 -> 1543 bytes py/assets/zombie_shooter/player_4.png | Bin 0 -> 1587 bytes py/assets/zombie_shooter/tilemap.png | Bin 0 -> 167126 bytes py/assets/zombie_shooter/zombie.png | Bin 0 -> 1623 bytes py/engine/LdtkJson.py | 2831 +++++++++ py/engine/__init__.py | 1 + .../__pycache__/LdtkJson.cpython-313.pyc | Bin 0 -> 165704 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 178 bytes .../__pycache__/framework.cpython-313.pyc | Bin 0 -> 22161 bytes .../math_extensions.cpython-313.pyc | Bin 0 -> 3145 bytes .../__pycache__/physics_debug.cpython-313.pyc | Bin 0 -> 8853 bytes .../__pycache__/raycasts.cpython-313.pyc | Bin 0 -> 9311 bytes py/engine/framework.py | 629 ++ py/engine/math_extensions.py | 49 + py/engine/physics_debug.py | 94 + py/engine/prefabs/__init__.py | 1 + .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 186 bytes .../__pycache__/components.cpython-313.pyc | Bin 0 -> 50117 bytes .../__pycache__/game_objects.cpython-313.pyc | Bin 0 -> 26536 bytes .../__pycache__/includes.cpython-313.pyc | Bin 0 -> 351 bytes .../__pycache__/managers.cpython-313.pyc | Bin 0 -> 7886 bytes .../__pycache__/services.cpython-313.pyc | Bin 0 -> 37698 bytes py/engine/prefabs/components.h | 1392 ++++ py/engine/prefabs/components.py | 1214 ++++ py/engine/prefabs/game_objects.h | 619 ++ py/engine/prefabs/game_objects.py | 518 ++ py/engine/prefabs/includes.h | 6 + py/engine/prefabs/includes.py | 4 + py/engine/prefabs/managers.h | 217 + py/engine/prefabs/managers.py | 174 + py/engine/prefabs/services.h | 1159 ++++ py/engine/prefabs/services.py | 798 +++ py/engine/raycasts.py | 189 + py/main.py | 39 + py/requirements.txt | 2 + py/samples/__init__.py | 1 + .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 179 bytes .../collecting_game.cpython-313.pyc | Bin 0 -> 30485 bytes .../__pycache__/fighting_game.cpython-313.pyc | Bin 0 -> 28540 bytes .../__pycache__/title_screen.cpython-313.pyc | Bin 0 -> 3102 bytes .../__pycache__/zombie_game.cpython-313.pyc | Bin 0 -> 28550 bytes py/samples/collecting_game.py | 495 ++ py/samples/fighting_game.py | 452 ++ py/samples/title_screen.py | 47 + py/samples/zombie_game.py | 467 ++ 169 files changed, 23514 insertions(+) create mode 100644 py/README.md create mode 100644 py/assets/fonts/Roboto.ttf create mode 100644 py/assets/fonts/RobotoMono.ttf create mode 100644 py/assets/fonts/Tiny5.ttf create mode 100644 py/assets/gamecontrollerdb.txt create mode 100644 py/assets/levels/collecting.ldtk create mode 100644 py/assets/levels/fighting.ldtk create mode 100644 py/assets/levels/top_down.ldtk create mode 100644 py/assets/pixel_platformer/backgrounds.png create mode 100644 py/assets/pixel_platformer/characters.png create mode 100644 py/assets/pixel_platformer/characters/blue_1.png create mode 100644 py/assets/pixel_platformer/characters/blue_2.png create mode 100644 py/assets/pixel_platformer/characters/green_1.png create mode 100644 py/assets/pixel_platformer/characters/green_2.png create mode 100644 py/assets/pixel_platformer/characters/pink_1.png create mode 100644 py/assets/pixel_platformer/characters/pink_2.png create mode 100644 py/assets/pixel_platformer/characters/yellow_1.png create mode 100644 py/assets/pixel_platformer/characters/yellow_2.png create mode 100644 py/assets/pixel_platformer/enemies/bat_1.png create mode 100644 py/assets/pixel_platformer/enemies/bat_2.png create mode 100644 py/assets/pixel_platformer/enemies/bat_3.png create mode 100644 py/assets/pixel_platformer/enemies/block_head_1.png create mode 100644 py/assets/pixel_platformer/enemies/block_head_2.png create mode 100644 py/assets/pixel_platformer/enemies/drill_head_1.png create mode 100644 py/assets/pixel_platformer/enemies/drill_head_2.png create mode 100644 py/assets/pixel_platformer/items/coin_1.png create mode 100644 py/assets/pixel_platformer/items/coin_2.png create mode 100644 py/assets/pixel_platformer/tilemap.png create mode 100644 py/assets/sounds/coin.wav create mode 100644 py/assets/sounds/die.wav create mode 100644 py/assets/sounds/hit.wav create mode 100644 py/assets/sounds/jump.wav create mode 100644 py/assets/sounds/shoot.wav create mode 100644 py/assets/sunnyland/back.png create mode 100644 py/assets/sunnyland/bunny/idle-1.png create mode 100644 py/assets/sunnyland/bunny/idle-2.png create mode 100644 py/assets/sunnyland/bunny/idle-3.png create mode 100644 py/assets/sunnyland/bunny/idle-4.png create mode 100644 py/assets/sunnyland/bunny/jump-1.png create mode 100644 py/assets/sunnyland/bunny/jump-2.png create mode 100644 py/assets/sunnyland/bunny/run-1.png create mode 100644 py/assets/sunnyland/bunny/run-2.png create mode 100644 py/assets/sunnyland/bunny/run-3.png create mode 100644 py/assets/sunnyland/bunny/run-4.png create mode 100644 py/assets/sunnyland/bunny/run-5.png create mode 100644 py/assets/sunnyland/bunny/run-6.png create mode 100644 py/assets/sunnyland/fireball/fireball-1.png create mode 100644 py/assets/sunnyland/fireball/fireball-2.png create mode 100644 py/assets/sunnyland/fireball/fireball-3.png create mode 100644 py/assets/sunnyland/fireball/fireball-4.png create mode 100644 py/assets/sunnyland/fireball/fireball-5.png create mode 100644 py/assets/sunnyland/fireball/fireball-hit-1.png create mode 100644 py/assets/sunnyland/fireball/fireball-hit-2.png create mode 100644 py/assets/sunnyland/fireball/fireball-hit-3.png create mode 100644 py/assets/sunnyland/fireball/fireball-hit-4.png create mode 100644 py/assets/sunnyland/fireball/fireball-hit-5.png create mode 100644 py/assets/sunnyland/fireball/fireball-hit-6.png create mode 100644 py/assets/sunnyland/fox/hurt-1.png create mode 100644 py/assets/sunnyland/fox/hurt-2.png create mode 100644 py/assets/sunnyland/fox/idle-1.png create mode 100644 py/assets/sunnyland/fox/idle-2.png create mode 100644 py/assets/sunnyland/fox/idle-3.png create mode 100644 py/assets/sunnyland/fox/idle-4.png create mode 100644 py/assets/sunnyland/fox/jump-1.png create mode 100644 py/assets/sunnyland/fox/jump-2.png create mode 100644 py/assets/sunnyland/fox/roll-1.png create mode 100644 py/assets/sunnyland/fox/roll-2.png create mode 100644 py/assets/sunnyland/fox/roll-3.png create mode 100644 py/assets/sunnyland/fox/roll-4.png create mode 100644 py/assets/sunnyland/fox/run-1.png create mode 100644 py/assets/sunnyland/fox/run-2.png create mode 100644 py/assets/sunnyland/fox/run-3.png create mode 100644 py/assets/sunnyland/fox/run-4.png create mode 100644 py/assets/sunnyland/fox/run-5.png create mode 100644 py/assets/sunnyland/fox/run-6.png create mode 100644 py/assets/sunnyland/imp/hurt-1.png create mode 100644 py/assets/sunnyland/imp/hurt-2.png create mode 100644 py/assets/sunnyland/imp/idle-1.png create mode 100644 py/assets/sunnyland/imp/idle-2.png create mode 100644 py/assets/sunnyland/imp/idle-3.png create mode 100644 py/assets/sunnyland/imp/idle-4.png create mode 100644 py/assets/sunnyland/imp/jump-1.png create mode 100644 py/assets/sunnyland/imp/jump-2.png create mode 100644 py/assets/sunnyland/imp/jump-3.png create mode 100644 py/assets/sunnyland/imp/jump-4.png create mode 100644 py/assets/sunnyland/imp/jump-5.png create mode 100644 py/assets/sunnyland/imp/run-1.png create mode 100644 py/assets/sunnyland/imp/run-2.png create mode 100644 py/assets/sunnyland/imp/run-3.png create mode 100644 py/assets/sunnyland/imp/run-4.png create mode 100644 py/assets/sunnyland/imp/run-5.png create mode 100644 py/assets/sunnyland/imp/run-6.png create mode 100644 py/assets/sunnyland/imp/run-7.png create mode 100644 py/assets/sunnyland/imp/run-8.png create mode 100644 py/assets/sunnyland/imp/shot-1.png create mode 100644 py/assets/sunnyland/imp/shot-2.png create mode 100644 py/assets/sunnyland/imp/shot-3.png create mode 100644 py/assets/sunnyland/imp/shot-4.png create mode 100644 py/assets/sunnyland/middle.png create mode 100644 py/assets/sunnyland/squirrel/hurt-1.png create mode 100644 py/assets/sunnyland/squirrel/hurt-2.png create mode 100644 py/assets/sunnyland/squirrel/idle-1.png create mode 100644 py/assets/sunnyland/squirrel/idle-2.png create mode 100644 py/assets/sunnyland/squirrel/idle-3.png create mode 100644 py/assets/sunnyland/squirrel/idle-4.png create mode 100644 py/assets/sunnyland/squirrel/idle-5.png create mode 100644 py/assets/sunnyland/squirrel/idle-6.png create mode 100644 py/assets/sunnyland/squirrel/idle-7.png create mode 100644 py/assets/sunnyland/squirrel/idle-8.png create mode 100644 py/assets/sunnyland/squirrel/jump-1.png create mode 100644 py/assets/sunnyland/squirrel/jump-2.png create mode 100644 py/assets/sunnyland/squirrel/jump-3.png create mode 100644 py/assets/sunnyland/squirrel/jump-4.png create mode 100644 py/assets/sunnyland/squirrel/run-1.png create mode 100644 py/assets/sunnyland/squirrel/run-2.png create mode 100644 py/assets/sunnyland/squirrel/run-3.png create mode 100644 py/assets/sunnyland/squirrel/run-4.png create mode 100644 py/assets/sunnyland/squirrel/run-5.png create mode 100644 py/assets/sunnyland/squirrel/run-6.png create mode 100644 py/assets/sunnyland/tileset.png create mode 100644 py/assets/zombie_shooter/bullet.png create mode 100644 py/assets/zombie_shooter/light.png create mode 100644 py/assets/zombie_shooter/player_1.png create mode 100644 py/assets/zombie_shooter/player_2.png create mode 100644 py/assets/zombie_shooter/player_3.png create mode 100644 py/assets/zombie_shooter/player_4.png create mode 100644 py/assets/zombie_shooter/tilemap.png create mode 100644 py/assets/zombie_shooter/zombie.png create mode 100644 py/engine/LdtkJson.py create mode 100644 py/engine/__init__.py create mode 100644 py/engine/__pycache__/LdtkJson.cpython-313.pyc create mode 100644 py/engine/__pycache__/__init__.cpython-313.pyc create mode 100644 py/engine/__pycache__/framework.cpython-313.pyc create mode 100644 py/engine/__pycache__/math_extensions.cpython-313.pyc create mode 100644 py/engine/__pycache__/physics_debug.cpython-313.pyc create mode 100644 py/engine/__pycache__/raycasts.cpython-313.pyc create mode 100644 py/engine/framework.py create mode 100644 py/engine/math_extensions.py create mode 100644 py/engine/physics_debug.py create mode 100644 py/engine/prefabs/__init__.py create mode 100644 py/engine/prefabs/__pycache__/__init__.cpython-313.pyc create mode 100644 py/engine/prefabs/__pycache__/components.cpython-313.pyc create mode 100644 py/engine/prefabs/__pycache__/game_objects.cpython-313.pyc create mode 100644 py/engine/prefabs/__pycache__/includes.cpython-313.pyc create mode 100644 py/engine/prefabs/__pycache__/managers.cpython-313.pyc create mode 100644 py/engine/prefabs/__pycache__/services.cpython-313.pyc create mode 100644 py/engine/prefabs/components.h create mode 100644 py/engine/prefabs/components.py create mode 100644 py/engine/prefabs/game_objects.h create mode 100644 py/engine/prefabs/game_objects.py create mode 100644 py/engine/prefabs/includes.h create mode 100644 py/engine/prefabs/includes.py create mode 100644 py/engine/prefabs/managers.h create mode 100644 py/engine/prefabs/managers.py create mode 100644 py/engine/prefabs/services.h create mode 100644 py/engine/prefabs/services.py create mode 100644 py/engine/raycasts.py create mode 100644 py/main.py create mode 100644 py/requirements.txt create mode 100644 py/samples/__init__.py create mode 100644 py/samples/__pycache__/__init__.cpython-313.pyc create mode 100644 py/samples/__pycache__/collecting_game.cpython-313.pyc create mode 100644 py/samples/__pycache__/fighting_game.cpython-313.pyc create mode 100644 py/samples/__pycache__/title_screen.cpython-313.pyc create mode 100644 py/samples/__pycache__/zombie_game.cpython-313.pyc create mode 100644 py/samples/collecting_game.py create mode 100644 py/samples/fighting_game.py create mode 100644 py/samples/title_screen.py create mode 100644 py/samples/zombie_game.py diff --git a/py/README.md b/py/README.md new file mode 100644 index 0000000..2ff91f4 --- /dev/null +++ b/py/README.md @@ -0,0 +1,60 @@ +# Game Jam Kit +A simple framework for making small games with [raylib](https://www.raylib.com/), [box2d](https://box2d.org/), and [LDtk](https://ldtk.io/). + +Python version of the [C++ Game Jam Kit](https://github.com/davabase/game_jam_kit). + +## Introduction +The framework in setup as a series of classes that manage the lifecycle of each other. + +`Game` manages `Manager`s and `Scene`s. + +A `Manager` holds resources that are used across scenes. The resources are loaded at `Game::init()`. + +`Scene` manages `Service`s and `GameObject`s. + +`Scene`s also perform game logic for each level. + +A `Service` holds resources that are used in a single scene. The resources are loaded during init and disposed when the scene is disposed. + +`GameObject` manages `Component`s + +`GameObject`s also perform game logic for individual game entities. + +A `Component` is a reusable tool for creating `GameObject` behavior. + +Each of these pieces has lifecycle functions for `init()`, `update()`, and `draw()` that can be overridden when creating your own subclasses. These functions are called by the containing manager. If you do not wish for your class to be managed you shouldn't inherit from these base classes. + +The managers also have larger overridable functions, `init_*()`, `update_*()`, and `draw_*()` that give you increased control over how the manager is used. + +See `engine/prefabs` for prebuilt managers, services, game objects, and components. + +See `samples` for examples on how to build a `Scene`. + +See `main.py` for how to build a `Game`. + +## Running +Create a python 3 venv: +``` +python -m venv venv +``` + +Initialize it: + +on Windows: +``` +venv\Scripts\activate +``` +on the other ones: +``` +source venv/bin/activate +``` + +Install requirements: +``` +pip install -r requirements.txt +``` + +Run the main file: +``` +python main.py +``` diff --git a/py/assets/fonts/Roboto.ttf b/py/assets/fonts/Roboto.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7e3bb2f8ce7ae5b69e9f32c1481a06f16ebcfe71 GIT binary patch literal 146004 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�egE!tu*v~K}gWeK5h%eT<6pQ9}X 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�PJ}HG?Q&#wR5zLv9qnRi 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 H^|Jhb<`UPU literal 0 HcmV?d00001 diff --git a/py/assets/fonts/Tiny5.ttf b/py/assets/fonts/Tiny5.ttf new file mode 100644 index 0000000000000000000000000000000000000000..635fe079f77dc82fbe2628a62ef16da64412aafd GIT binary patch literal 131452 zcmdRX2Yg(`)$h!`ce|=(xyhDSmgOqjT4~k5*sHQGxOd4mNU|hLvSmrAxKKqg#gx!P z4b_+chL!221VS$%1qdMtNpMU^LP8280Rrg#&y>4YvJ52ed*AQ(cC|Zm=gyoqXU?2C zcV@*nV=NV47E7658J(A~F`<+(eltpE&tJZ5)w5STR?OJQOBoByp1*2M`P}Jwr!i)} zf%_jWTQw{Hp1Chwj{3jEb#48&x{iBG-uww;zE;LuW9zqf2XnThPGroOjr&h+?r7S! zX_k2gV-sFwEGeO>uB!v(DQG_yskfCC`HB1iQf_uCf_lufQ z;5j>B;JOmm6Pven@7y=>PrZ!g{fx0;{?_*Tx{8K-ZUgM|L4$W&-Odizzmjl|g9a9C ztJ~JN^SW!?VD?#j?(Asq>fV`|^b%v`hZ&o6MMr02NAR!bl!M;SQU9lmGv43Nl94j& zY?jNsEX@4OU`4EjU5pynCnYeGYC$5s{U~tZ`%C76FbBS@v#1U}XBXY-F0V%9BS=eJPZLrYHl0&RO;fPqUlu*erjE=lDlB5xYW##DTVj6!CbXPReg3P7E~4BX8G z{UIX^xmrdMzZB$v9>QkWDeL9Ebgf^vFazWVPtn(l%G;K+r&#drRhlo}8)W<@x(_71 zNP>>$RQz?XUMAk0u?V#%-2J`roV*LV^!;8(4VC{!bw)Gsrq+T#eGTly^OuBE<=CP} z*o!Nx`Z&L&I>sOMLW1=jeaut-(1~n*VYZ7+ql-wwYR_Wp82=RiD4)x(iZ-~G8OC6qsz9!ZNNJ>`$MBM^81)l$o!WD&fd5^pMd6kWwC`zG@9S5(C!=U35nLuKC- zx_-pVWC5$J&gh#=MF+jTj9ZcO>sO1KxIwQ-!dll-V~#u5J=Wz)n)V3q-yO3q?lV~B z{jLT#tE>d$5F+$+BDB@0oVR#2OKPp_Zi5zCC}+@Uy3gzDw{?JHDJBk5&SIIk=Fl6C z)>OV3rGMkknY)?WQM#Nh#t4`spbcmA<|0qyK#T>n)SAeJCXx=DXtfykm*8#i_xO7# zp$;OCpQ*fytv2pZc{j>0Qh6_1YZR%xkBv3PsC68tYEG+3@p3P%sy1UlkhQv3fVP+TB^4lxvgm53CYDFccH}D8?%6yxa@+wI*_YJ>n`A2 zg|bG}tP^rvh4N-l)`I@&#;Bno^(RB)G^8Nl?}D@z4WjHwy;zMlQWs|o z(#4^AHIL=7e0D4#lb#ZtJxJR@B|+&%`4mWi`o098Fh0d>2K2lEpG|Bk^g&}AtohVN zLtn(o0c|<(#On{HZs53y*Q)?E9pJqan3{yP1VJ%T9R_tYQb@|bw;(Z!Kj6O+-$TO?MA23W1McB zZCqqrZd_$tW87%OjE9YE<5uBJ&pW zPV>9w_splvADVAjHCDZ~)#|ZswDwweTlZU!Sx;GSTfescV14Qumo#@=)wm7gP8oOF zxW~r5Fz)5dt1`cnc}wR0%ttey$b2F52bphYzL)t?a71uYusC>3urjzSct-Go;4Q&B zg7*dw1Ro3@41O;wEo(&9gse$fGqYA_T|2>;;GU2?Vc3K*6EY`EpRjO3?S#ghTXOEs zc_HVOoFC@=Zt@>;H|K84?bmTFi@=N&D{C3Ff z9^S{F;y>UY^H2EaMy4^rm;{*}W0XN=tBkd_%o>emC9~5Yv-2UdD{YxQW;}1aWV{8L zG1G1O&1A?d+srX%2$^+5X6Ha=mzcLfW_LkmPeW$R+GK69I;~5so2|R7d##5cvmaW& zv<_Jxy2cEU*|U%tgUoKuyeIRK%*QjI&wM%aXPJjH{~k;Wjtb@lOChsv$m~oZvpa)* z!3Tnm1Rrst z{{{W$_n+5)ZvXE7GyBizKfV97{!{vQ_3!BK=x^p z0{d|9&fB3-Rp2OP?Z#`Uec;?|5hqDilK0NYp z^5Mk8=5Ig!?Vk_5cIXF(o;~!;p@WAmJaq1%-G|x^Z8_9(sOiw=Lk)-O52YMRI%K|U zz5B_#Z@hc$yPU}Rym zUTC~(d}NL>3(du5mwCVWx;5Ln(E6z>)pdgFX1D2H=|0(gz{5OKJYAj#J^kKN@2TFG zy`TD~_?GxC@jd8!+4qHig}=kU-~a1CFt9psZ{QCJr3vd2b|*ZT@bARAiS3C$O#Ew7 zT2fI`d(y>8k0$*tc}(*19C$*dxw3HR+!eA_U!QB@WSC&3_pPPTj?Xyo73-0|NDsHBX*5AbHw8#{y6fOk=sTd z82QgpGe>P3_1vf*jQacNk)!iRA2Ygo^mU{EIHqFEPcq6f&d#_hW8YZ+*s)_f#-26y znXzwx>FW!#jhQwpb?J>{w?{Zmt?wog5C>J?M>PJMXlOVh?p zn>DR-+MUx5PJ4CQucrNVx-otD^x*XH^m)@aOuusa52wF7{i9r0?#SFFxiz^b<({2; zRqidh`*R=7eJ=Nt8Cf$5W<+PKo6$1k@fokp`1#E7Ggr^Neda^6(q~PcRXS_Ytn+96 zV%DE$_2;GLW#{$gU7mM)-b0~Tp|a4bP-EyPp~Inn=6mzUe{n9^hFj=B4o509O4?8V0( zJoeMslV)Ev`}N}j$89+7jXAUD+&0%Yw|(w8b8nsd_S`QcYa`8(lOq>JK8So#c6`~! zvWLokRCcKB^YX^>Gs-V3zq|aMib%!!itdU_DsHYgQ1Mx1LFHwYw?#)rr$!5-WzlP* z_e7tJ{wR7V`tdyXyixO}&6_=M>Ac!`o%7C__x`+3=LhDGo4vpfZf88Id)>nPI>c#53>K)Yw*ZbBlS-*4ro$H@le`tOG zhOrw;H=MQMu?-(>9JVpCv328x8=u*D=!8ipRGv_O!W}2Pdcr3sPCBvX#M4i_@x(Vz z{J18wW>d}Hns;hGtDRH3yY|W2U(}7SJFad+-LAT;>Rztv-!yL1v76R!+O_G!`o#M4 z>hG%mc|&qTNke_Z#SI4=e&3kbIKDB|Skbtqv8i!a<13BtH2!OI>gMdtg`4MZuHJn0 z<~uhZ-27@&c2i-~{HD65uBMBde%thqW>53z=8on)%{MgP+x%rqO3Q?naLc@ws+JpC z?rnLhv8)vcRbced_ny`lA&tsib%uxx0=Lel%bR~CXbrp0)yViBJ zbe+<5ao0^Yu9WU>Af2XlCxU+QU%AHL+dw1Tt z^Vyw;c3Hco?W)^#%C75n_3e87WPWnf$#0$f*Hea_GUt?ar|ddq?N$1hsja6z zeOlIO4X533+OJMGPoHr5&eMN*hX0J3GafzTv)-A#=l8yK=BP7!&wTr=DQ9(@_1xJb z&#pZCjI%#HXYo1Do%8YTqTOA)_n(`1Zri!PJNL8m)}43VdGDWp>IG9TsJq~<3x2yN zwCD6aA6&Td!pAR~a?zC+y?gPBi!Zr2cFCAa3NNX-?6D{E5pyz2cZF&b#9AEB<`txGPs*x$DY%ul&tb zW3F0z)w5UUU%lh%+pm7=>W{xY`P+@(zTw-iT;soH?KO8^^RH_sUE6c*v)BIny29%& zz3%nv{(XJ+^`+OJaQ*q$|MG^>H>|ng^c(ix@a~N{H=c3ho8Kw<&eh*}@21?Fx^KGt zrpIsk%T0f|dHBtx4n1UpKtre?UQbwd3(|AZMSc~{i@q<+-vOh?;Wl9&3C`^-Jjnz z?5@1KPQ2^(yZ&_dq`SA?ecIjMy8D*9@4x%Gdvfn-z323MUfA#5KW6{N{SEtD_n*H1 z-2FeeH{ss7_pZ3N{@#!78++fx`!?KHf8Xi%J$T;}u}JJ&v8VgS_D$?t-M6u?p|7>C zyYJM#bNVjo`%~Y?eV-r5IM2F```C)d>L0uCvF9GQ z9$)tO^^d>zMD7y}Pu%##Yft>;$uUpPfAZWXU-{me@7?>9`BcqQ4?Oj!r}Lg}dir}$ zfBOCG?=SlP&hOv${g0lR^-S?IP0!r*%!kjGJiGhZ`=0&9b6L+VdT#r3H$Qjhb5A@! z_W7C5pY{Be&)@L;?a%-Fg~S(Dy>Q_RH@z4FpKFa71^!k6d2T>tVJFTefr2d_k5>3QX`S7rRnkH}XZg4`6l^NQG- z9ktt5*SS?h?PwJ#;%e?r*F&lnr}&*~r+F75VSi!?{C4x2LGR14X1PXuoOg8DMYwa3 z|BZnk^IVi(?tjhyhJ2gnqQ>PSugc6`@jlr+87aZl*WD()+fYJx=uLIv_nVR5B;Fg% zjpio8VPChQU7Pu)o6F6$ z0wZB1sxL>{2JWvxyJo=!$)*|iAP;=xo22Qa0Q{p?oCc!pHPj#}oGVgIr>2FVkt8kx zK5FM|8;5){>X01dH&L_+?Q}27ex)njhnfnV5+9&nzd_5nqEBD5d-g8SEo&1rz*g7J zbQ9=v+!5HoA8JZkNRx;L`lb@+wWe+@m7>J}O%qxr=yOsDYDvdHqk^v?9}poPu3~nrTzkq$g zA4Yt-pMMY05R*TLw~N2Vf5_eZ=XiVhFY)&AU-RE^KmRS>3H*2beV)kwh<7so6W%HO zZ-_jl8c9YHA7Q|i=Oc~f#tJ^l*l29zV~kD4CZ2)F(>6ZVxYW3eXCi)bEe{%Z8F%vu z#t)3w_(bE!#v6PRA}Me2X~x^e&-rvjqJG6^m`!FApJjHMojlLnVea4|^HlRRo^S3p zck{4$g?Se*G!K|B@g?S4=3BhceAoN~-)w$h`FOh(u!8&&mW3y7hwyn>eJKA+$Mug? zUZ+$~-={L&)|uC^bUo)a>a%lYJCVvd=w(j5=|L263;NeE+>9Gu!_VACf|1C4;+b4P zJPFA#FEID8@xrDHYt8OL4|DW+0?WeM_<8e>;(gdWEUtcKmr%JZ{iFFSk*AWU#C=`s zSAdiSotlJb@Dw&3Pb_C4rdWh1YzcI19wOWe5EEXExc*8+?bop?=+b=X%X83*pW~U# z-;CFdH}JHF<`z72G*{!v;pwEgc$3oa#EQHyPP=ug8DZS~5;M(CbLOD;6mtSf=;M6r zvI)53d`~gQ;+on_5v?ZRdaSypdIX7TIAP5+N7&a>P?z2V@5iqsggC~T0-C(mZR2+b z=7^H9f&!vqgd;Ecb5bSo46H|O4`3 zW7XI4P8=4=nc&Ejv_VorrTX3ka6i^eQT#~=qz8V~p{s#!ja_PrtVcDd2Qh%{yY1> zOxS<2{Quxvc`Igtc07ChL|J~=d076}_-pJ-vh%S2WapW%^PHZ%VlMa_-WLA|Z1L7eQLPp|Sl=R9HnsLe9rJDH0^JM-RQf7=dCNq!N2aytExxpA) zQx&Za2JvV=X~m+Ld)4}?SU4j#rMh-=aL<~mn2}Q_AN1E}Z_3EZim~b#tH`cA0Js&k zMWtgS8YGlo}`_vM%sF{5Jj&R{Gd z8<~o_hM2W{=K;eo04A2zI5vw)4p@ig4aj9O>RD#8~VQBk2PWCR<6v8R^DtV!z+OyP+Y(fVl29j(fWnK{)fH&mf=#-6HRZ258& zMXED`u@cIaR96T4WNlD11x4yA7|Wykc~tYMyKa)Z%e%*v?)Po9e9RWVO?dCZ$#jvhdh+8Hso5H}Vkx;`AsCD$ zR~%2AA%h-@rO?$%T&0NqN(G=4A(S9wP!GamsTH-sJ+;ADD#SJ;HY|71>Z(4gp|W~n zEU__r=Zsid?xGb{i&n|Pj4YI=iSpsOeQa38nyS8G!zyCDt~{1HorWA#tGq9nzEbcN z<0H@)X3lbK#z6-`T;+Sv!$6xdEh`(%bRPOZ_o)d+GTp5PC-Xu7e3TCCtfO>cA7g3R z5OPI~%{jn17y6K%%leoRU0oF$mR%l<#*(0ZiP=!O@?h=5qegL-3WHZ(UQQAij(fbW zZ@71Q?85086QJHBz+?LK8L^SMeVo!!kT<2HbNft6$K>`|lxF1ixhNf*+vlcqTyCF- z(#+gGFQwyi`+Ss6&xJIk{A2D~NIE+>GsaJ#(J~{J>$o|>zIl?oIm2;tl6|vN-VEll zSn~9v@(HFMl&lh;PX4mMUl4Rn0DqKbgFi|qf)Fdjn~3iF|{Lk`I7x{_=% z>|a>}>Nq2oue-P}$sHw)i-o53xp;cC3PzE7vA`joqtyxL1`7q{g@7jEM2|ERus%al zOXY0D1DLk3=9`mU(ii6G#A^}c0S1O_Q;We;S2813oI7*m>>06=ud52hu1ED!bP*eo z6Py{GPbLAPUASk@{OtKKK~xa<>eo&A- zuQujJZx0-<7+HL}oRzGK+6D|hOsX(;Rz+O~^0n2l4};s(fi&3v?0I!18QH)v4}2mK zSO9MbBp`%LvKvMOo#BGQVFnpQ2_V+dY(+$v_*RxQjtj~%TgxH{3S5(vEV5@qOvl-` zVtyEtU~pdcd_qdSI7i|ch!=EGni%F#Sz$#nIy$|v5^&3%QG;i24`2#?91cBF>cES++CTm ze8AoE0e5v$^u*+J3Wi~jO3!Yu|=>DB1o6R9^MH?c-qWZ5k~p(M=4(faC~@LtQd6` z=f+BrEFmdIA@1NjOu|}POLIw~V@n|BWw{3!n}^JDWH@D3l&PmW3y^7`I+SUoI+WQ=btuy$=&D4nSSTtcSt1h1&^ESrJiOYBD34I3Ei}nlJ1l6KNquhK)snIJx z;vVv}Y8U0Wr}O%rF8{jpsPz>tjdQ3}()B$W~O8Ft{X*j6wglqGI`!>I-?$KaT`CyzHrly~0uzC@fMM@vh2G=$| zM_$nDxYl(jQX}C~s!k>hQBTWVw;PZ$2TsZl@fk{9g1^D|hiE$#yrY)&I^;mG{)1~< zM*m?uLCe?R!BY`Ii`|EUZz*%x2Rbix#3?VkUx+UC(R!p)UH*+|As9r@SEPhr%R}fJ z>c`Xg36`V6L3>f(fkU_dD!hZ?*>n(`ulZ>Bnr@vEOlRJ{20T%Y)RrUa+IUnuUB}r@ z(24t+$D!cc?Es%(+BkF`?Pa-R>``4+{ob8V2`!{2Dq6 z{=_G4N3=ar@OiJSulvaubYIYcy7BuC+Is&3xlmogsXjvPM{AFAAuqa5^#`S*4^JRSQ?Wl~d^*xmm4dSEjX}DC6_|jf3$07n{SjSdcGk|x=)Wb#7DsqJfh6PN9zcc4an0y^%)G$d9C}zS$0GoaL7-w=)>ek@PKQ< z56YZ;Y5oKpT?eUdLv&iW7QPSiF8a_lQs;+oIj?noD7bk*LbLo{^&9k*)LtD=@TjL z3f#RCmrWDOMII^jiS2iyo|9HV1C`+;X#I-&0>8R%!(ftT0Uvn*Po=Z({dWzZt%6uGuo3(1uw{Jn3NvTM&GCU`o7BRYic7t zxUXRisVAzQO@{-HrbXbV@}qnP-`BV`ExO&{dV($oOf5f3wfyWly>a{k4z8VeG_7`h zf=g{2A8ki8J$7BHgZdh-E+2etw?o|ldDULG)2ZY~(Lilfy&>tw{UPb2HqH;~X*ge- zQeAuo%aZVm7v01QURtln4EnOpMuFH%3({Q7%{%)1q0Cr_1VkcBGPQRz(1X~); zYo@aiY$O|nUl|y~GT2x)4tsUSvmnc26IeF(bL6PqS5t9GLu}X2C`B*j^`~T*!xh%rUaO$-JyR@QA?$cU`{eQGqYYBErEW;kL71*=23MW|C zsGVEY*jcfGZN#3z6Il(bWp&(Ox3P2BZuSIrll>n1(=K5bVi)0e+3jo(JDXj>{?0za zuU34UozI?OzhZx5-@)Fqf3T0)KiREpKYNM2fK!y4a0>QPoY#E?=V4!DFS8%ASJ@BP zYwQo$yYV{v5&JQ_59ezC$}YpNW4yuM#M#&n*q_-2*!R|gbI;qb3#5(RjB{Kk;S?^N zpQZD`+i^1K_z`hk9 zb|eOP0`{&j>_<$(ZbXi~h^c%SPvgURIv>GD@=<&=AHy@)C+t%`mXG6^d^`{GEIxr} z^NBo%PvVpL6h4(t@A+lXYiSP7SH1$oVP9DVP43Kcrh>GrTiFni2ary%V+cB z_#8f$M|c@_TvqT(9_90}M{WW3UB*}+Kb|k*i}@1TfytNi6?`RM#s1AcXNTE)*pIn} zuf=}MDqhXk^9_6>KY{jT@>*WUH}QJfoyj-zCf>|j*kgPP?cCwp*zef;ybb$zI`~Pv zlXvlM-ov-^9egL>#qQuIV^7bi{4{<#KZEz;T<}@^Y<>>kjkB)j(GE|X6TXmN#4pCl z*KhGl`DOfaeg#erUxjn9-{#lwYx#BjdVT}Hk$(rLiErk&@LTz9I3c^2-@*6sJ8@F> zE`B#o%kIZ1LH-bSjy{5u#|Qai{BiySe^TrreVTtCXOW-9e!=JY z3;ad?5`US$!e7NnTiR9nBmQIl6aG4XgTKjt%HQHY<8NdC(J!#~=pFtmvHR#Ru=^?3m|@H`X0e~KciGR4JnYlVXTM;-Wbd%wu(#Q- zao##?6dFZ1L0n>#;uP_*#%$v_oWP!IL~x?G+^8@rji@otm~SjF78=JJi;Ts_5@RWL z?_Q5n+Sn~?ti-9~)y5i}Wn5=e;q>u(oY~%JoM4=2)EKo!9d^;y8x2My&Tu#3L~@I< z#n?)FYK=CWPVO*H!l~{qqZ=o?w;MZ*oyIQXWaAX$RO2+9^ghGrHO@57!s+F6jNQh$ z#(6l!e1WkCXC^N)E;cSPzGYxnF3vSyfs@Tw8CM(Mrv16bb;k9^4LBSA9pfhBX5$v) zR^v9~c4Mz`hq2GN)A%m!-Zkzq_8a#a_u>3_pK-vr-*~`y(0B-E$saKuH4Yk&8IK!J z7*87CGoCV@Hok8>V?1j-hZEB;7%$?~^vgJH{wnSMHGXLP2>XA3Lc7b1H;tcS7x2$$ z53unIa8{=K$knvmNu<@SpJL7%h_r@QLKN=qxe=`1Td}#c|_^a_Zd7#jDH&cGCnarH9j-`ZG3Kgf!&e)IGxQ+!!+3ec0YC^y0ByVVfL))W)H9j*>k1` zziRS*b{`%FK(n>}v^%mkc(Pr`Zb6f>1Q$-c)PH;3VD_i!^Edpk#(qs-AbYnp*Q zf8)$dbG#Wev&;!*HqOiEn3K%O*j+i*oMuipb8!-Ura8;Z!zucFvjC^U3(X?4m|bL+ zn5E`1=CL@{dYn1OoNGqRGPB&QFe}+LW|ZB@u4C7-zp%aRa&`mT$G*j`WLKH<%=zX5 zbD?>>xd^9RmzYb&*?=fq#N|qFKWpHEYc}oC2sf z8_Y&?Gxk$An=R%RbF0~EZo_$lcC*7g3Hz(NaAKjy+>SlgJI!4tY_g7#);8o_;=C`qz{#x@o^Lq0J z^G5SK=1u0!_|1S@aRUB!bFX=axljClz+L9u<~`%Kt z{M7u+{I~hJ`GxtV*^l%3+%hcFvMiV7wmg>C@>zcDZ%nWftt2biO0iO{VOE+o+)B4b zSR<`b)@W;tm0^vw##x!xcq?dSSre>mYoe87O|m9iQ>>}hG;6w*Yt67`TC=P?D`e$c z1yDTCtrM&h@e2*LRvmtEpx$b*8m-M%lhtgs;P(f% zTCLVLtIcY+I;@lMYXn_ZH-5)qyS2mGY3;I3wob85wNA56x6ZJ7tuw8&th23itlieR z)_IbgBqg|JZ}j7o%!BJoG<*8WC2 z>xn8d8fEH^N{Edj3CxcZ5@?F&{qt=A{w6z{Fu%Ti+qODMY(kUcBCsIdHqac;TMIVT zbz05%axd&|X>Dk9w}`~EP;t_tI9Vt;X_2B^sAz7Hsj={Qqh(9r_&D6amUup4k%N$g ztphHaIvX3?TI<>xTI$`4>*{;D8{MrUNm%Tx*Xp=%FO~vo6^XSN+*_^qaxazb+hqHt zjwT6hjtlov*}hE*xUG(UKCQF8qq)(Hwl$fJZB3qKiurcM{4&XWyGRn3HTSeN)pho4 zYpv_)PHcBxxmQXWIwcJ&9cU9e9T)DEl7>#1tdgy|L=spP7hRw$o=;fq0Fcn_xNxtQ zV7f(Ot)?#RrY>D0yR=7k=^DjVkK$^Lx;rD|8H+EuD{m8xB(qN7sLQK{&tRCH7-Iw}<%l}cWfN?w(U?@EQgQsJ*u_@fGc zRN;>*{85EJs_;h@{;0wqRrsR{e^lX*D*RD}KdSIY75=EgA65A0Dfsgg{CNuAyi!kD zROqUwu2GK9WnHaxUClDz9?y$@%g>X1D z^CaH-9g+HY5hZO#h!XHxjLkfRL;SVYN zA%#Dr@P`!skis8Q_(BR_zQUKU@Z>8z`3i2nf}5}4<}0}Q3U0oFo3HrFSA69wJoySw zfx=Uu_$pBN3KYHqg{MHlEl_X^6x;#@w?M%SD>z{VC#>Lvm3+cVK4Ha2Siuh~KEjHR zu)-Hs_`(WbSm6t6e2R}kg||@QD^&Oj6`n$cr%=H!RB($F|3#`@k)p3iwJTC|6{&Vb zimoEvUeQ&g=qOfv7b`f$ir!*HZ;8TFqTrS&xFrg1iGo|A;Fcw1cgaz(GQYxxxle}!tN>`#6)>TBw(+un$2ag$GsP0EQeS&*0S z6EmQrL{eFxMqhy%eFbXt6{t~HphjJR8g&I~)D@`FR-i^(ff{WEYLpe^OYRHQC@4^) zpg@g+0yPQ>l(rWrEiX`7UZAwRpg_@CD0?AVAfyqhl-Edw6hf7<_d=CYnxV=H(GIDg z1F6swq(Zxp3Mq!7(pn)ET8UKjB2v-&NF|)8v{ty5aH3LPxE6FF721JR!b%;g@p6wZbp06|NP2X{~Ur@JnljYlUB0D_je$LaOjf>xFBD zUs|tFG+*&Atr)Hq|M?2P>`#;{{IWlBt?DXjL%EW_w0^i&{7dVHYsG(9jK)w@T0^8t{?Z!a zTJbNfA+8mEX$^6$@JnlmYsJ5`hPYPzOKXU0#eZ1gFI4!YRSZQ76@FOWgnu_x&zKU_c~!N-8*EmPMA#h4w3lQHMBH#HsVKhd^>bb(o>@Fmni&l zb_hk~?0{6^m$L(|75);%e~IG1M9E)z<)Ntb%8@GhOYa=lihntq;99lE+Fr<~Ovz1p z)uE{LszXuf6(d!0k+Tb~6&=bRMwLB`YI`VWl~A-o(Jj5@P*i%iNEJNkjfSGpLU*+k z;4YE)>Nd9^^q{;rIDtipC-t;HMNDU5RMgZn}|kd|A~p3ZiOTy_}>Mc2a5 zRY2rI2-k`Txd6ho0xG)}*9xfYVqA+ZMylb>6P;2N$}cHZxq`xcUt?D{LL1$xOG47% zUXYItDR3_cl@x|$0#n%C*;3ck(;>hW%7tKlp^`(P zl0%_f2%=neMxl~RA><<3cXq4xpQSE%GusN_>99jyF9>0lw1@-LJNM_d=k_N|*G zJn2%PT(VhMQS7GGeQTp&qM*Rv-qF~$sRs;70*d9zEWcQ;%aDw& zONe%KwIHG*ioMZpb$=m(nxZIS*|rvnlFExUj>`UJ+Zvl>rPLNwAArjxa9QPz-F2?{ zb%;8WdgK+rVk>;sdfYOB&$YT4Ig1dw7S(lh)FINhZBs*?v82aX+GA9;Al@b@FqXHN zE1TP0t6G}2)tRg7dOV66b9r-%S%J^;u9gIXqbW&N74)^g&K5vIqk|JK2#{hSK16PK zkG!v&ib9uYZ*4+#R}(SiYG`cjuJb5Z*2%bG(#>wc5&?5<6)d$1mZS{ID~z@tV`qz} zUGimiHn+RGh^dfEBxW~wQ~1pe@Kuiw$Z@rkz!M0pCM$UmnF$J}>@9UuT=+#}k(Feq z&`yC`B8Btvg#8O)ek#zp!jPTIw{!8ku!fk>(4w%=&K23YVmnu2=cJ8Aiy|AF9O!xB zyh>fGNaG5HZMY#DTF8bLvZ3YM(DH4H^EDJqpc-<%4KLrOGv9`sZ$r+vAs5(?3v9>* zHsk_Z76mqr0vktxjibQEQDEaJuyKTK9AO(r*v1jIafEFgak+$T9AO(r*v1jIaTM89 z71=F{>=s3Kiz2&4u}xL6O-r#&OR-H$u?@M{hFokzF18`Vu~6DlVnZ&m`7N<=l-M{* zY#b#vjuIP3iH)Pg#-ZkL=vS$YqtwPxYU3!iag^FPN^KmaHVzf;4Hw$bisR5UKftCq z3+3s%Ap{j9x1l_ZE0m{kg)qtMyBb$0PxBMX)BJ=~m@izY$3`e*<+77 zcUT3p!z!2^o+p+^dEt3V;`5Zm=P8M+V0TyryTkK@%YypCWkD)@Y@||Rg(?VKsDi+S zGOUtU7^;+;@UX)Td)rLxHyg>W7Qe3&3FAk@OvByD0xru6bmG4PaKp`vCNDRA+!Zig zO@3^Z;?_DO7Ozb}mM_nU6v<}T0f%<3fYtlW8dgW}&w@sdz!BkLsVT`xi3tI}&+Bo! zED&X;Cb~yX52a?Mn%U_EW8UMVTQ@zZm%(@7E}56FRJ zA!P!&WT!$lT+n~?FWeWskMj`3l@B`%)7Y{I{cjxR=Gal^W-g!G)dV@sSwg*xtsbUX zwj{uPK5q^4dgm@-9#4g5X%c>-4L@5hx{i7dpnODS0_4HdvkD7RiLz9X>A_caA&Eqj zMMRRIsDwWBAE&6ln9|1p_B^IRD^HAUNa7ymhEhQByeWZX)93ZoCt?!~PG;9oU!X@x zehkvHmJT1Dl9G^MS@_QuBZotHDQPL7FCjSr%0;?G-R*V>?Mn5HoSq8dfzWgh5ec!H z>RQm&D_)=ynx$Wo1N^TrP>aqTL@o7kSEK{Hc)V^85j;GQX8IDmzNQrPEA~kexx-wk zrfC|`LBl9plEf1d5^IuqB7O;8kni~`o-Y}w`lgr&iB$u9bFHIc zA`D`nqqhfP!ll3@$A#2Dj984)1Yf}PxIOiL7wz;CT31F|CuL(TC7r|nk#p!8w(bUK zETks-GDyp)Luh~s4WlcG8{c}kYR!UR8Bu_Lc*iD3CPK|E&Rm=|xxt)K1F@F5=(o!> z0uK-rV{~a0Hekv?MX~D`Ac->%%ZIzBes=o11+N~M&C zppkYkvW9?`8OgvE$FDdNL<2eeC>+BL{C5{Iva-@iOJpnDfL7t==*S3NpUj-2K}ZUP zC?+gwWI+N%tQt8`Cn15k*xkr%1#*!BL3c=jK&8}9`d@aS(-P36K6@auWEP1W=Z!<8 zF=*D15XzSLxX0tJVQ%+a_fqQ5xYe*x`5n4S=HAp=M2yM-C6pGZzr-~$qPg*~@sY7$ z0OpEw*^f(bZ*F`J$%6T&Zj`V{FXUErNZhtFsqC^vG2im4NQhy(nAg+k=lG{49+%bR zi!&7;dI9eBx@#p%8IgQyV|l#2-@H+EB$$vugEk>GLCnyD25*Au>XFKT!tTTBOAgTc z5Q1%Fpx`KHE+LUPM`Y*MMOFtiA5c@bPgwhSw^JVpQ<7lML0$|xqDv0CxMj4vDseDn zg2F7!LJ%x;gpz(}8xne{;V1ixs7qwcQqnn?s|^FcZwSqF8<-zmF7%;k3PV%2#Dhs3 z3X>6;MDd zH2t$dvp>0hUpw=sDPwfBnO`Zjl%>3|)m;lSu34t=xHd$pplxoKN$!^2w*jb>_E(_( zIy-PQTF@6c8nJWL;meCDfktDRnowZkgg=-D*GthT#)daV(tX4JVjg9apMhF+gHPUzPUb3M`Y{B)0UIcAS+DL z<)A~mu_WmbMwA>tAO$ZiT_IW}TPU=W#Z;It1Jj^k*2iVchjI&2X~fb;3`#j7zJk}d zy*R?G2Ow%S5gtvGv>G{F6KU5A($f`>n1O}sF1d8@Nd*IJn6#aXA`7sPWfsZb;Rray z?sj`>{LuKh9wql7WgdXcNfvtMBZbrQwq-5U4%$Pitmg1Uoa9;>S>)$1HHO>OJb2!w zl__-5^;|ubryAgQfd+=U~i&VERyYM&S^xUhN)TbFtgH?2?aeENTl%EgyK@r zgl@NKN@g^lSg`1p$0-u&6_H&R{+8|w8?_t(%6`*wFFQ3Wju@B)TJ?>IRoEIK2kBeG z6C>^L(QM+Q6K~$8_$&sW#Zv<*KorWL!(GGxP_Gm}R>H-Y$Y?U7cMjBm+$Rt~lLgIa zG_%Q<3KoEKH74!ekd)B8<^iKvgAX)&E|&}ylr0&kp#5eV+Vyl{mf5#8qjHY<{g{;*so zj1Zig8W9YbUb>>0pFp zV_t{gX&|68)bKz?lziFi=`&0*77;0FN`N-VrQ#e!rPR_0!_n_&HA(bO z(9xU2httd?J(Yp86OGiAWZBOY2+F4UNsk7yl|&MWU+O-Ii>~N}92H8r32C^*+KJ=_ z|Jq=+kdjnU;jCG3)<{1KQe_W9l3!|TLsIn!&xT~_^>Y{+Uz104B-uBkhU{CJ?$neN z>A^@VlM;ZDq25U+`t|Be(=LrXWJ_90BaFUDzH$8}%rhd>7A3a87Fa8g#Yo#eC6Jk2d72%FsD`Hfz8RwEBh=o{O9x>u+Y2*@t zIknRD`~8XjL}A2JXyFsL0Xagdw%uleTfz+44d#^ebz`L3w%CY4>i|I_bXHqzf097~ zO9WiSEJ~3vV&qgdss$f6j@W@{$Vw(Evks6XVFN@lHMyu z6+v-GlvV-(27lENhhIW7S3K}X-m$PhA~ptfwpE(MhZlNLO=31|hto%d@BC16X z4C1iyNJIsZ;fj0IGlK!KCqSnVnH(mh7P?=c(cnT`+}V-RfXi=U7{kP30tOlxexhdr z2q(~@gA8gsut6>``Tq{2u&b%W8hwZ@yl7~We#U7aTBLf~v^aRB=*zK@5<4K|6zU*? zoa6}U24LOOZ0TkfV*b;lIEDx$E>uDc9XZW|5HUg=bo^h-+(tr@cfzL_K{7j2MhRv> z-k85TncKvK*6HQ&QQQ{hJX;lsX;&?}9J6aiWR|RN!3>$0gFU@p)1o>u((iY>{mFje zExUbgA4COb6;DK<(}h_SFyu5>Vf{qiBDxEmMj5g#_&|2R3cbOXn7w4&Fg{d-w+3&R ztOPxKDwZ)F5#<+xhfz?okbpp1M=$`eMmityFsg<@{YW2>ffscdTo*ub(m_wrY&ij% z{S*y({QFygqNiwx+U``t8_#YbcouvH=6EVh|*+}1h%h?RujMwYz}n;qoEJt)p#uyt#dKuN?Ms9 zRrsG`y}Zn_aBpDfoWPNfLu*uNzzD9CB`go@7x~|~#&DxGj|wFMs0;px&^^f1>3<_Q zh{3KUOI-xvVn`u@uOsGSAzwWgyD;}Mms>u>(}6I#ma0W3LVE_!#X^gOr$hEkY9sJ~ ze0-zSb>B#B3b2Am9?i!F*1WdFL^K(A)H-`WjMO9C5rndU z2xu_I#Y^}d=ys`9;z=%pm1~t&ZYqA0z|BmGSRX%GDA1NDF3%T-8uqzFBzgoFxbYO<=Q#sRkPt7!11aqR0JvUL z5x@4-MiSMIc7H!uV5}FaH`(w}4($F7ske{uSZ}OwI^uk&L%+A+`xhoaWgkeLUuec?^RcS==K6XuY<@R9xqS#$vz zJdDDC3>Y8P?h1vCI|o(22y&|aE-DUMYhnTuUI2vk7y03;s^*;ZM4b3;AdM01+F{p4Aa-;K4O z{dfqn0GULzN@#fFrS*uZaUF`xjIV1UZ|!N2SHBbqL@e&yhxun_srXn_y5_C(&n! zHHY3gt%gM3!0h=+W|lbm9vQ(4oyN zMk$4TNma4Gh(b&8(7Q0TewbPsP&6$NZWDA!v;q~7OG8KM3MGx(Iu9&Fhkl-G;HSRu zpwNZrLBpS6J$Fb ze#l4p`hq}6E3TbDBUUP>NGjoQ;)kZNQt_BBmq)HtJhW1=qqXFh)XMRkfzcZW++mYZRYYqaY@mO&g&&xin-A@h7^KW_5W%qJ{d9wqfS|26LGn zf11Oy)mqF8-yh}*9bsY3)rq`}N88pzm@J#cS*kwv7@~pY^7MXni|WW|gesX{i^U)A z`e`3iA+1qDus_%;k@-nhfJYQDS;73~NqXVbak->1jxb8rljbUqUSULQu+>w8Avx zwUtR@3nTMjeMIzYNXzGw!4|n;Fdn}iWc2hCM^KfXg$GU{$c%Q`5n^)dXgq)zZTOH? z@)G?;)ZkyYMdrG>74R7zY`|&q4+<~IZIxaT_3@^89l{wR>H`re!KfW<6!XE0x=fl~ zp}r`Q_RrS8ZxREreOH1Oe|jM}Nn@ADk&B0g+-+JIxXk0jz{Pe4AE}=TD~NcW@>LOV z_jzk+)2J6FwS*dS%T1QRgML9+<(oCFjtqnTr?E8QSJ4-R=CSP!%P(PLX-1+&2nI5B z3%y7Rj;vS_V2wi-%WcpuG}38EO;|AUpqx<&leX5tIMLD;X31r()2mv`g~$ZVz1W9o zhmGl}i;PMPv9Kj|rJkXVLZYz_83kBN>pxPDPjj43fbF-XVEQH3Q18@%=nHAY z(#VjDGa?G?(vTq8>X+0=%{%Owi_Md|G!jpAV6jf3d-#8{axUg_8-7(G`d;_ac za2bE_Q%JjXgbWB7tqkM+Dx>d9L;n{{q1;F%DbHJuw+I%3@ZQ#aViCAFQln@<|u$nz+odEC4 zJLE>zxc4QtKIk2g7#ecnPu>?MC$LRsnY=F*^FUAQz7{$j?*X!Y$!vb4k{Ld30&9Fx z2u*jnst~%z1Ke8LZ?Vp!_u3?j1vbpEBd!(*$o&=+Q`068au>!=@v5{ej$N*ccFB_s zQ)zL8cyFiFdZ?P9K)C)@an?Zvq9UrU)%&%Tt0SWZZWaZ{VmTF{H9Smk^c^ z6WIbSFZ396maHvS5N?BJF^mLzU5lsBj)f1orWC%Z5SvEjbM%q0f#RJ-dPiN4$Dim9 zvIk^q02}(}V-&r$_fdj*!M8Bg&ZqKN1Ixn&S&~5M$n+8<`~fTm&DZYy6;H~bcREhP z$l_)xdU{1<)x*X`#y~G|L59{uS1@cPmND%BR^>zoG);{xO3-(L0>@~oh(xem#^*v1 z&>3z3Fj__^osxT};tL5sc9*)K2kKy_pi2}7U8&_|Wx+9Z~x!-fzEIVQABB~LM3 zbfDH|Qf4><_!f3ch=a#HH ztp~3Q4<+3gP<9j%#)^hDCTdJi^6Ah~Cr2@=)!3nD)PxY|i4r-isQ^XfFQ5dbWipPr zfdTw-??e>&@L!4_;UbhgppI+kI!vuT07vtZ!8S+gv2D+u=f$>PG0*#1qSv3;l&Uw? z%n@g+XpfojlS$z$KysY_8nErtF)0p%AD|z_lZg-;Gtn<(FW|~&k)EMj>~#udAqSIq zrx*1IZRVnH$VN#6E9}We0!b?_4g4B66M=OQMiN6E$>~V8CbANilfJZrEm{fED)=ZY(fo#v6pRr!$PH%2<^|+VHvHhl(X*E7 zS+GpJko8Gth+Jbii`|%hi({vb+MFTQ>2&suc0G|VAom@mGuTCYEs}t>2yH;3*gM6> zXr#zDO~vAcf3ZaZW<;}8K~YQ+r~feo3MLy_xJ6V>0#VRE{z(6k`loetimdaMIy$J1 zm_Mbi>z=EPoB$`!*3cwZqA4GK;GYi!e13GLSB$qgOOnO99^+4(jgk79Ffu{gLyW^C zI#KVW(bHEdB&6j6DJZ=JL9#b(orE2swM1{P^yK5ZCQd1$55!X5MVf{g%;&+bQMJuz zj@YHCW4Y@2@e#{u70Pt3>Iab~hJ>Pu5hXTB{rz~R1TRErm7BaY^cO;PN7@T6Z3^td z&~*ros$&d8{))Av|1nSUejN_7{QF!)3f5@|^=cI^tkkxc7#+A`Tpc^P_;QGnE z1Ejv8%ws+fngg5a!`{1e zwp)6VAw1gm&^azx4V=%VNV-X<%H}M=qkd-LF_mRWORrB|(1|&;vABoa({I?QIx>9N zuwm)L91{dKZPBr9v9ij-0c|l$V60(&6CR+Lp9LEvYMP>jbOk$FX9kQX?3_8$;tU#3 zgX(C#0vzXfS|7pr%^_xhxK>Hq|6gd;0KWt*JG4p<8`W`+Aw$Rb#qM$lL26ap{>#1k z@DZJJ0QH*OZ6d9|4yC4~ShiM?;t$d(r}Zbo9K?yCDilh)7EYpMe{eYiXxlY=V1IyQ zylktC{dJJO$D$Cag=bxeC#q1r3YZGZEF24>)DE}MzJg*rAcY?!-pJ7NV;YY_N7OWl zyo~%wjLzOYA+jDjx8=4^3 zJMa)J!G<%6l^_DG9+rOPsc9OJ08dem?2+mEha-CNB123_fX42xUPoV40rinuJ+Lp1 zTF22Bs?Lyop+_0j88FIZ9C?84+&GXPl8vw)y_j{98TACF3m1;x!#h$F1Y9J!MPtxL zsw3tqxsysf9I*FNK`?Tzf>{;41AJo5JIKxwT@KnYVDPe|3~B86$b3A?S37Xs%xAfM zP4@ZGIoRh#znz2iJ8j*t)F>Qc+Sfl!0?b86 z%ph#2C=kvT!t9gE(TY{C&Qu5pzilIba^i>((BR+?#Tl_)OU6Dw@&o8sU9vDWh|LDV zMNk2sUd$5ENa-YyW=ajUkdvAkXDQAT&1T+#vzb%V>X&Dx0BH9h=`h+kF-Tna~2{Raux+W3XapGp;Duu#W5wSTJ|Atie|!a?0a%O|{!upN#uuO#B^36h8y&pvuE6PK)B zJ;t>Z()XcPNcsfFVWY8-Ihtf!BAbWMRV~((xL8viVjXsbSdS)9rNe1Q(cu9?98!-- zUKWI>G}$Ran{(1-SP$Wu4U!-mJU%I+fb*pTd8UUrICU>PGnhcXKTyL00r=?g;Ij%G zD5p&1qZ#98p zHA8I6mlTPZ9`qRoW$}|4es>8<%kjh(MiYl8vA+q%Q~sWZj3eJwI+11!==+FvwKcf>inBZ8+11A?bIY)X$<=#`R) z=zvpwxHC}dR39-NL0Le)1@avX4A6dU$%%eg-LJGCQ)Hd5v>$`yK)8;W5dcS)3qLD9 zBT(D_U*x8(2GQ)08`KZ40g=cI@hfjbMIrGIdjsBtfb-dodhmt`2(~1#h60lKr8l|P z#)528GEy9q{eKdR6k|&tXJ_`LBbE;sR+u12N$4eJ9GZ-2Wq}j!y01*Kmas6wS|0xm z_{Q(?4b*rMYgSA_n2YQ*PLl9OXT6}SM0EVmI9w#AMAy)1MHD{y-?E8viI|6Fv98~g)dq*<>|ZXhAIU(RWR#szIWR{)rPvTC zkK@< zrw41p|4(^u7Hrvh-S_P?Pj~E#Mg!~t-D)&I3IM?-1X0!i91xT&l>|bA#YR)Mx)sO) z6%V4}M2=mFd}I@dt;(EKB`GJVRH@39msE*)aG1R0DGzzgTi#ujDWU+T4i zTxDNWNr}ePNp`+yM-_i(IZ#y4l&C@e_@`B9+Gtb1u<=3(oWRiKT_X_!yP`n!)Tz>lU}>kEQZz9q1T0iSbj~ih%SiCYPl1V~`R(-WXx>AkC;68E?M^FGYbesSYU^ZBM}KdoU3o$hjj zT{L zC5$w`WWr4c-{n_apPqNjw9#xN%1K0NPMorqwxWcAg;g|KBr4%=FFY_a%B*u5Y$N<2 zcJ;Kb^q`Q`Pylxmp=FsFHz3^V5XHtYY4Z{cn^>GgyS1ZqokB>}K*d$#Bq{ztTi1BY<07fJyX z#;YR}KNlPVY-bx^4?J(%Mr#}9h$T&_NV zeGZNf5Be$X)?oEB+FeSaOTa2qS+~|aRz_QiST)UdgPr72U<|C3k(+|qKgO`sj=JUkxK7lVi*2OA6FL7cBZRt=Y7gG7hw0d*MEIizcyQ_?WMI_)b_L5 zLhX4-O|`o(tG$CrmeQ(TMHm$($Bj_eLu2tId%nV6EZWO`LG^!h>X(B1TKt$A;&A+l za*d|8!^Qn;q_?fX<(Ei<=bfNfOASf8{1QCg4fmMF{CB?N9sK@Slevhy7z3i(vQ zRpg-$1z~Y}K8H>a+KXSg<5l@)#-Y>lTv+eLp4S`lBIYEe$M+8Z=+DW=e6v; z&z9G+=RU0_D>YK?qx-kotJFw&Z$1}U!>-`#I>P<&c8#^H0e@a2Z|UppHMT1SSB76& zRx+EtXtm4=2IHY<;_L$G<5So0tfwt+?R`o;wtH4(3x6u$+44N%J`-s-V5Y-7?PU*U zKZ^>bugUvt<;n1=c~+@n>ONapSFO0Gukt?i+I3A&e+2j>y7?xBP%9C-G!tO(MiV873hN7@N?6 z!d4eq#$-`8l(AQT{6YViAq8f!Gkd$!x;}BJgLJFqwCslvEv3nO9oAUGtx@J|pel3KZ4=vB=3@{U^`$M)w4GR}Qy?PHY;Z(Hp-w<0UBzY& z%K3#j4PI+A>!q`$8v^jD?K{Y)iBifnFj2SW;@qjzTOoB*7=x8{ zE7EknESW1+Y(>si-k>ygm+&E)l$QcXO@OQSR z4>Q%Lu)pkc^C4Rv{T@Bctril^vICb+LP@Cl$%A5@mzm2$61-Y8Tv=t!^H-a1tp6(V zP)@BnT`_QK>(q*4cG;pi*hZ=G^xKD4#BQ~EYpW715pA>}m)&X_nQzw^XG}*`sS{Go zOaKp*mRUa+uilktj9?|Y6NKKr@B|@iDVXsx>(9sM>P#*c7%EE7mpj3l^b*IE`Vtn{ne={rX%kmElJVqs^o$y}+iZNi zN7|*A9hc8*-sOqL8o(G&(vhZKSU>Gw`kU*&=3SxgY=N0pYByRnOH!k3*qzNrl&$0; zoRp)EEN#OFr-#TN{VvZuqhPdYy8K@q-)F<|n5T|TL*BwsF^J%-Se+^e3giL0Xsyzh zP}%UkxiBOF%VAGSoEU4-R59gX%Q}3Fg8yk z`pD_KsV}2y@YCxrH%v+#O*N6;=O?!F2FFWAHf7a-x(G#sAX>?qqlGlvVx?(>p}*AW zi#o@$A_HEZK1pGiowP#!^P@zeL_?|>#5{^j<+5H^Pe%_xGRM(b!rD_JTz5~&(&8`? z@;^G7#o0x_u>Lu;vrjRp&Ms0Bxa@NIBnMON7+0+b;?-WII8v_y)5bC{A6yor!OE9D zwqdW2t@6M#$S9mtoq}5G#%RGbS#rX8TAk!9q8nfoOow;Y@9Kt++dev#ZXdI&TQ0_) zu5O;2V-P!P$R?aMzaP8qUd1*+6^79=*LgPoQ1(+DmJ%rwABDkGtl9Koq(QE(@8&zk z8@**RpULyR@ICj}*F1vd>_7?zUX>P1R`tB}*P{?{7Z#P1B*7FPNws-DO$elM2NA_v zd_os!C3u@8vgsIcM|?YI9yHn*Y)!SaG?3eunw6CE0c*&h^9qi2Hmma|x-Q3dOGy`@ z$%R&vPj4PiPsi6M5?*F~m0k}4WF^6#T9>mC`_`q!#NcMF5QpiUb?Nrvf2~b7mYkPJ zkLNX$v<_FAkAwa%`Lx>^WBynNYIDWj0`0f#P8R7hN>|q}m#b%+M_+z_ee0>G>V0ZO zOO;dHj@m(gcK2?}j~M7fjxvE`UX+=vveq+op;h`cLN8@8v{|;S zHVVx;B*}$liQ~C$iR!I#flUgdAO?ActN@Sz3-$^`1Tstu;DZ*yX))dFO7mX?r@aPK zL5UBWe(3FJG|~+glY!N$ji^qNUM}Yk$)$Mo-pjgruvl&$=Ww}&EwX}ELYHa_tq_;I4k=5ueWJVwNJr}Mf`~@j&iM&!eqKu@7uW%kq z(ht&i@?OkoUW>Fq$X42LC=;`2lQ0?;m5!TwPbX4+SdUC6wrimQWGoDsn2&tV{q!)Px-*`vQ))P)xxC#R@)eKA+qai9|SDQb7y*dR` zTfI8XbngoPtkwPs^jT|b>oo;>Np?T`^gWtm;bb`CN!(DmEN%~Lqzt4yt%;(8Dimy8 z(rhcTSW}r619pXQ| z!CaksGvz1fj~MMiX&_P-Nm%UTcCwT%{Nw*ypZ8-|m0q}}!$ODMQDR}V54%(8)JI?! zuIui50d}pUu?XlCa{cN}SN8BdoM!TYIy_u%b9*kH$8&chW_2VUv3&%no&TW~2Uq!v zSi%~rlYsBrtht^nWU)wsq1=EHPC>Jle84+y3h-Kj5;ywH749C+`YlSkClg;`ffvZc zSp3e7O_8z__IciONpckYKFDJ7-siZcoHnF>PPTBQ>}_15<~goWf6V=NIzgP9H!PO9 zf66sgjan=NrNUyLHOfzscO&h|R?1=j^mHXj({Cp|Q@R@a$+tFNT9tk>X>Y%Q`bj7w zlYwuI>-^)Qr;b_RZTrbW3wcBk{k}dvkfW zLsBW)J?E~YD049Xu_TJN`zSK9X7)?G<>MS$m(NWy41OjrG5>cRKN(n>m_W z^vrc%h(D6OkHjDLC$9-^M<4dMJ$5+!_4RLY;9}S*ocq(sNjEw7aW*-`Y|h?R2iK5y z`twWAjFQJ0fmT&Om6l;2C6DcL)g{3VdM{tStq*&pAy<7N_I|9z%tm{>a|cCVyDI7o zeX<{WkxltCJ#}&~esWzke$=ElR3vg!E-#wkM`P{u)O+o^4{jD-xUP{S#WmTzzjKZ6 zlh<_p`}KYDS-L0p>H7Br&$~J~&RDDRdFg+8Hn+-D?cjh%O|wzH>HNIQbTt!@BXb2Nw*WRg>UbT@#r0UK3Ec=f7uq36DDooxdo zwC!v|M(fVDaHky~M~p;#B(70}R==9mHt`BaI#K4oGHR0oanxq5(#?CmS)n?3P${Eg&a*uyQ~tBQ{;A;^cN=oZ|+ zfwR*iDLYf*nv|k)P1^2qO`-j`izI#!Hf~>Xq!f~Nk|RRqPId%&D5c+?3?bdU{D^E_ zowq2tz2u%PJp4=R2kjJ*W_TEb7C-F?(ivT4PN-V8IVriRzi2U7UEu9UnPttMG?`IW zz2<(drm;^}crpE?3wcpEta!0V-VX|QoPF5LT%#AJjdqXJm~&Ri*|<_`v-Z{@MJGc_cUPirCRLACa|Vhp6LL_OtJ*Ic zVZO;P=c5Uuxm7n?k&Al6$3rP&>b5j(w~e;6t7KNuo*zB_JE$)ggg(r)E5r` z675a@tNf{w&pe|lhu%&#=&vk6UzL82EGCYZEsuI8SW~UDqtg@IxLddEC~%?fh}CGU zcDJ42ggj8}t9s|Oq=DYnz>Lf8C3t)X;z>gUVUOKoS$O1uVE z!i!9-zUVK0DX6QgvO3tP3-a4ikXJ_}ltQ7<5Lp#}S5;kJeG!BfZd%_iW*e)LBzzMW37~dg#U(bTI?GeJD<#;l#UPpnMt19gzY0)(8f+Aingk zzT?xT^qL6M!O3UMA4G2k8}aGhn|@gJ0ma+}bpvVGLbrK`Q$J}0cv$*Q7=2C?-*mQl z(zoWxOJg|lpl$5ymRg++P$pVU@KMG1l3>UiL6P_>GT~Zc5S?$ViNHO0@V=xg-tEtz zK{aTid4QG)Rn^GB!$JV9R#R@ECmeTj5=YqtHMkXXHT*i#oFM=~iIlcYG<-}64MuEZ zH6ZjWd@QjJKuetnNZ^aE-7l}-6x)+4AY;FpEl1)Gp&x&_n?bFkDW&2x;UlKr^LDlD zst=O$GJz(Xc?pE~T<~afYdEC-NmUx*tzgMsdT<2YkkyE0b%6yCKE<}zm^jn^6dtDL zlkA*`Cq>IyG5nH%)ShR}ZwI&iFfuV1${Lipk7ceC^@xUsatUOy1E1sKq3pmTuf4xM z0yX)f5$`$A9|?w0CBy&dVHP?98*Y~gO$j#YZlBo6bGc!{zIXDx2P&E&gCf2`@|pv- zp*>uFe$Zgz%;qdJt^@EbEZ%bQcqBlkiUiG@&Rjy@; z5Z`S=N^%!UuM<$28S*lRgW;HVxap>$^^fy3@tq&INk-h7b*{zHP*gcyqN`vf&7n9M z92{VBHN``espoj~=>w}xU?TYpcnr5rb!1M_vQj@jpi;CkevBv+NBMC5Dt@m8>1CYp z3Dn8jsy9D(^wAf_hOF89WdS-temZrL5Ri?)ZgUuK&M_l8r}U1tgYm&X=r#zRNl17m z->Gj`%p*psbz$rq^}N0zg1+qOz|!Fb{d61_-nLZW&W_Pru_GWQDt3&5BA&$BgJ)Y+ z7eKip40^QG4VYLox7Rm8N$kAIcJ)XJR3~4?bMTsj8@ZM5mfSDR9^J^CzY#rM;(9qR z>euCNrFV78WTIfj>1t{n#v38A&I$J}4)cCUB5O!r#b5P6X|nK};6{0ak>jG;OEs0A zESma0IM6hv0XusJ10Gz|H3}i!KB`zcucs~QS%2q*CR-Bdcp0&qNQ0xpC4xGJ+J0Ti zApiwhQ!p!h?mcN3K*~wOyE_`&xxMfaHx{$-U&Mn}fng#CeJ765K2+^;7^`(`2IJBM zC)wb#pMC@dEJ2_pZoQj;d36fK2>j!JGCZ&EtQd3Z^U-ij&@31}-)>*R8s`f;)Zc8kC z{~oHrlpf&m7zgik>+ylvN~ zx!Z~EYtoH66&+xC323m{Vi-YcP<)Q}iu82(d3bwkFDC~qe0qC1HSkTHyt0`3FogaD zn1(Xo6#3g1EYQNc(yRsxos@ejvuH&26i)kj-lZub`XA=7+$s`n+LmTtDRr54Hfpz2 zyC+9+I`>Sk0XnurMKADOO?i?f_<>7pGu?oG$gn6`TLPJ@xay}L{DIgTr08YS6n zAB$y#XXM?&C{kAYZP66ME-2MYiV`M?HQE9nHoYB`Z+(&-lqC_%R}ck}EaRvdX9?ul zcIr(r`-p}vHh{w`Zl7ZRH~w5N$u!5CP$-zY=!6fJpj9aP#*jxuw5fHg`0;yoUJYtS zvac^%m2lR!^@}-Fd>L~*n5AhtEqhv~K~XKlVr$lxR{*00PwR_paXm`~T4pnkdAarX zcV?-GoR$ycJmpeRjO;oSpYW$-?If2%cx%_0yL*mZR}dwU)E1n=G({G@eXZa@oV;r8 zu0J0s@%~Uw?mn=c%XULU-<~bXDJ(K32RW<|l|%Xd-84q7QzC`J-?M>>&;zewGea zS!{s3Y>7wmm)0oHgVVs9*`#44L)jT8AFT84l|g;teRx7D50()U9n(s*Pp>zkW_Tqe|ko?2Y1-cn3pD+~Na4xe@Yo7k2ls7-1>!1j1@k1+A*g(Q)(c`WLFH z88M|M@`p^;?1ukzgo`GLE+0{~^hFD7xDHp44GFjbFgy_!VH=>H5Nzxsj0mPRlQ@UT zz&p^W{S|qaLeFnIV8$?CF~JoeW&f?Beq{m_K^P-jfOzO+kDle)9K`dn=U>6&UhA&H(EQB4#CFB@JA4XRuRTg4K3M9B7YZE4s*W0Wevm$c3ng zF5tN_=y_Ch0W99@1ietiMXDpMBM_jM<`p1hq7_lK^zqB<&uI!P{PaG0`8}!q7?E*r zgtk<;&SlDQ&Q@eN(J<1*;!odEH`O8qu zpLfC`qH86CzhXR*J3tbNmC$UX$#BFZfAa5>*-(A*ZDzWK5o04^vpjwZ z_txU2dhJ0=FfDVYDvNre70WmL!O$nQ#$!Xva)m})H3-=8?{V{0)9CG1q9jU_1$l6i zkVw#se0XI0r?V#!Ch?b!-cE)VSGP&Ot$g$NI1i!)yF z9n;`5IM)37p8RW%4Uz%Kh`5-5%n*q4Bnx&`J{_6cm5Wd3zGtnX>GaI5R{P%T(a>w3 zlxzNUTJZ;>!#}Z(fbOjYm^EKCZ@!3h$O!O-ssu3wHRZv1>buyNO_BM1dgm8>-?yX* zxYq~c`EazLjbTa_zEV3(qD1e6XO#_}BV7owl4aK7?*kBI!Sswmhvey4IFKG&n~T%vbOaa40;rkAK{3dxGcKE#jn> zfyyk?9Z#%Q-Aeux_1zh-vd7B+?b!V9i}w1Y6vW0hqG5}<@0;X>6b20?=e%U|AKS~i z3n_Rv;QwIXD;3q02(9yl0c%i2XhaWqJF>~*593_lDI$Htx{h%}`=W#y0gQtLTrkGv zEEjF6bDkcBrW-0grQ#)gM2MhozMoGr4fwQq68g#O0?c^t6VjgdYKgoTJj20{|6Io- zyeHm`ISc*u*uG-xEl)&8cZ>ubPnlZ!A4HDr^Q2?hZ9D()pp-3Ne&?_oc>C%*M=Sn3 zqm(+Ey`srOulfyCJ2#K_4!YScT~dO&jEjmg>=uh0&)b>4uMOb9nd{(~Kq|z@yy~%; zm(=&MeV`-|<&z6Zd<9v&T>j#F48$Z~Jo+X#9yEUo{mkgn;p7|0!;+>6tbD_)Ee79kV9A^VOBB-2 z?@{F(&?iD&^WCfKpX3Idz6f+5Kl$75ubd~(FAhL5xRX}hu!d)3uamPZl+(8v+QaKyskS2Vsb*BfnO@D{im!+trsS3W*Bbngl^ zj4G3WQ#k24g)SE8#^F$G-8H>i9E_a|g?NulN2`rhc#^Lv@AfWy!@~2Xx@Q$re$uRm z)K;{DZ4$}G!KZNN((fveTZcF~7=kpD=4E5|mLB*qm4Km>kQ6Bgv`Q-7pdhMzHc$`IovzBqhNe8{ex=Xsa+_5JZC_WlK@gDPFa^<49n-D?CvZ)e7x zxTfA;AZ*7q4KQ$@pWeNu?6n*Ho`ivG+WTznwFBnS?`a|Red3yCjPw8x>nhbT&C{mx z?9s&wCTcI}T3T|($#V66DOb9MsmK#gKYP zVh!oU7U>rwC@!FSw-fjoYwwfvlU)k>$qVy2tj&}I zf2QdNA^y#n(FG< zlLV(u8|nkSNmjl6OL<>-`jPk5HIH#$30CUAq9=ZB{T{a6#aB)*Y3XphItn^u-^3f< z2;r`3`eFn9r7B)eLv3y533D{rBv3TQW!a2E1bJiHC=k{k1yLvf-dnpWt~36H+k$`L z3mL8PU*vE2Lh8oP78%`=Ki#KXllLimm90O)Am|D2=Bg&cl0w2E7`tx4Y$FY`=bV|< z_Bnsk2M6lLd*_JVO>ZB56@k2Z(E4-H=!%cBbIKo{U20S7RFJ^xLyH1QB8Oj$8-Bm} zf6bx#E;!TGOzm!)qYAV#%VlyDS~7QYe|uDE$sLXNxq_+Q31Df};7@7jpX*;EKQQkj zOr16N)_=*f@?ABdUa5l{s&h*#okg1snDTj&QR~`0x*@A8y;Do&0m~hwKyS2|Ltq%7 zYlJYHmk1y@!J)MVwKQmMOtq^|*X-cpC4TiN?f>(;*A(t+t#^B$E$-V?*1Nq=r~P|4 z{qp)vc#o02aSC@cZ5HF{g1*zqLUsaq^l1RRv^qs6gyTcu{2bJzmF-_k_%vZECy^f%M)GNsE! z`@nUgAufv?a~&7p=DR(c`qigYmPv>8ZO)duom+rnwJf!huWreqZF;(X^bb?lC&YbS z<7$rdNMrvcr*IZMV(tT*2uWUpgmN-G+#1tVyvx^A|8^cC&$DAk|_#r;3ewQzm`CQ-&+66{BpEVQ4hbB9*7T`12&Ex9KNr8 z-DS4Ac9^;yk){o8*f?2%11wW)E1l2xZ!1+!!c(3vVV%q~iboL>StiAe5*s^Bk_|XV z>O~4hVDi0qi5K7L5B@-xAU|H|5TD3gv9;3Vias{j;~V;>))TVy##r1(@r-p+eT_Wb z@F1l3BO-vibU)7sG=sohF{(qHBKfvVD@Pvh>F&SxJ$u%)18>~d-1?%vhnx1myW>IS zeLAW76LeBa)${tkyH9rwYl8s6mCCSj4TGDvxl-47on=1PFSge-C9-R;Df{X3K7FsB z`+%pRb^+;Gy3dyVfOC^p8MU?dscGe&U1*foBs@g|ibNXb0#D8_>%+r}4NnsiuK8uV z@BoqcA)nRWr-lbU4f+SYbf1d9q_$d#RJXi35NVHMn=3glCamL^&#Z_`Orri{i`~gd zIDt-=sM_TXh{{{t#sW#OA{LSKNDmj8;;V#e(BR)}S~<~Li!5!!h_*|+QFbGFesKrq z5tHBmQ!8fhd z(ixw^#||E12JvuTgq4xo-~iOv((Rc+JQdce$n6~b7MbqoIGSE~-^o_w_K5rTEHibQ zZ51sdZr3gQ9ctKDEyAeZ)`Yj8ffaOXmn9J>8Wv$m;tjI_c>yP2<|S z&yF|I-lwO#cv@u}b)Q;yfpFaic*_3eXJdBXVRu524+~u#4GvZZ?-Q6fnM_(Ghx^-; z7?RSb`F_Y|*|Je~d$7iYkrB=4^w?guS+|!Jlcv)V7*YtRS;x561F)`q?%u$%US`aA zg1~5b*>%=~9BZBO8vjskb8FUJXHLAuc?Or8zqtMifQ{!mkYTYJEEmi7%dQ6&+3lO7 zRKxx;tL;mdVwZNPZKBkJ+&S)$G}C-Vb@x{jK9Luu{$DMm_!{;`i%+mcry?IczG
yui#>{O+WYkQX4A8Ix=+P71s=;Q@?gD-OxnlL{p=rw_dQ5AxuFpoM?i zC)9gtpThhGvnKp|_^qrt=$313r@8g$mO8hfar2X9MydRUzta5b`j_|R6Kf=Bv`Rrj zWE9Ib@j9c}#%#(c*2t(cir^vfky=U!QR@x+9mC-ua1|2iHo zo)~!B&F<4{syHezE?RRozUEKx+<)hvQp=~x59{&PMx901#g6?LGUp%+_T(hI`LsDDK z(cY)0IiP)|(R80(jUUk@o}V>6`(kxXKM#`8q^^->{Cay$?McOb6mf32=A!$QsPvrs z7(Y+vv%35Ao@M-SjiXZC2mF))dC9kd=i=Grefl2RR&<;9DQp?KV=KCC?^EM>E4tNv zcJQ2Z$C??3KT)pPL-*oo{#vZ7hR3`i{t?fK7I~jEu9oYTf4Ii@$@}#2vjxw&GvRnv zfoE$bT;N$bGI$?GqhoE_{8X$9qbxVAgGchAYh=OyN_$O9(;Z8g_bIwHXaUdH{G9jM zxkmUYR_=oPwAXCir@?|b#@X;)@hShq=pka*&6x2_AFf!&WbSkTvoLf-bM{NPIH~bb z%jF0U+M_Uh03G9Mn(5|=-p4e%OP7|*^i1>2ESL6}0CtVT*PxyT=Gj@3rT$MV-FZpR2VHjXS>yaG{cB|Nbf0ml7ah|}^jz~h>%Yyg z{^-x34d~M3G)sloBl@%v{bd8reH7YpIdV=S(5)@Nw*YtLQdJcPE2 zM6XEa8T5MjFQeB>(}eT=8BEJfQ1gSD+ChhckrGw=TVrG-Ea@dbLLP)Z7hhg0l(ZBM zE*cdU5H_%ab&W|ZotmSOFV*IuE~v(}T70V-7ZR4SWwE^NefDUMVli}|%3{FBeJZKr z>znJpu`?Td7Rlx)?Hyclvbl^md4s8it5qBvG9|rSC=_|4gDVGFjnIhe9jkk`MI9ZF zSc-mq%7A=aOu*fM@_ey_d+2Y))z&HJQba31mm)+criieC?%Z3mKw}2K3uDrK=ujyA zM|@Q@5I$p7vk1)gD6K5jmj1VXtK~@9jp`cuQu-7s*{J85e{=o!_RG@Il#@rbe4J*B-_&_?O*Npv>7B_BYu(n<37dK@=N|_ zpZ1OQRem~m&z<{Q!4T~0cjX?{=hoNMImiwozIdV>8;E#{(kj}jH$Z#o7(yXc597b~ zdGPngcpg{kd7y&#iSreeJn`9wyj>D8YMwc7uWRme)#D7~lfUCnHjVzp+!F5b08G9; z$jP!&-{P20a&JHpz6`%7m=JVwpS}CFvp>`zehB|Xt1sT?@|K-K~zy(8l%DszS`J3y% z)=VjBsN3vdIh;Rrc(%GUQDN&i2hJa{=r`V>_>q&5CN3#Qj%LiNcI!pwm=Sws37$YK zAM(-y53m+SBK{lru=ZsU@fD9oYa!a$UdwaM-(CMsGsT(IYK{(;qxqHNrw=c$o|`4yx7mnqVJD~sA3UD6{WNp~ zkCRRHQ^kEhw0=(065zgjo|?cYMIyJ@*ovZ>5_uF=S*gofWm;|i3$_~2lR712l+OIA z#y)x;A7fA1ZTvo$6a^z`?VMoE>ZQZIglO`cij0Oo~B`JbK9{7wTr!vX_KK#|ogW{RlrLl$~^PvZhVmzR=k zdc?K&*H<*^e0#|GV#TZ+Vwl_gIXU8eAt`_@Gz~0iqU6T`DO-!i1B?WajuEti{jV_! zUz;$16@XQalS_Y32Zw*b?_iTV06*4Sd~SF>>8D_J1!hrOY^N#EC#xjX@JoR|c&5Yj zdr4;o=QJqd4Vbwr-J8*TTDFe1jkrrTuf)2sJG5e`h7e?8!LjBr zLG`Lf(2OZU4dVnx8ZN-0p5qxaOgg49sfNQCk^`y67?S-%a@hW3(TAf+*2wlTx6!80 zU^wd#00D=jRjh=3iO1#dYX`R`f{^JJoRsfSh_Cb+K*&}lbCnOgy5tfz?KwL!s;u5^%0leUy}eSELIIDS}vdUuv3pYbxICMfzQw; zXG0Z1oOBUp7tJpRq*vL=1FaA&lqNOoZ$NB_G#b4txw@vmVw$1K?w|YG6Joxey0bfK zp1N2~&(NJ8#*<%YFlG#ogTs6d1p1M|aVW>H(rB9le&3w{1esM`INm(s%JcN*QZwR| z{ZTiR&aP-B-soX*k@sEg;(SGy55`mQ zJ(jAy`1=u0q-NsCJ z)4Vb79Dt;0mrU0i@%Qm&{{`Fn5)6`00Da^&Uo-bx(j^KF#Ni_#kgnW2SyCj;u2HzY zzj0>CmJ!*8(2=*V#A3a;SZJY6_Z;cSjyA*TTv`Fg=$_`~Pv@iQ2ZAVg$+UThX)ClD zPMPEm-X7z6Xv2;{rW^Z(QzhESsTx)Kv{ej%Y=&|qZJrWM%C6V&;uH-rvCe(_o;f+2 z4u+^N8uurY5i`U`oaEh3W@7@Hj^!X5=Mr@{v#!-s>eoM0ED8n{=9tC#8Nvu{!7j>| z>*v&5`U8L#$~jhBu^)(8n9KQaxZ;QkX=~LI+`W=>YUL=<=DVi_Jd}6@wg3Wt@ZfL= zlUX-KU-GklC9dH=V6fR8C=hG=bUL}`+2(q4OWi}K%=(xO#s{?2&^6SoP7YR#h6)9t z<6@*BRLXygGvhff;ZT;Za|}3H*Vd0u095FdAfvzQOP)4-0%?%*=S=iW0M0= zi?T)}Is)7oN#IW4ng=6GAAhL=M(8bcZV<+h1#*m<=KY+`9X_JXAthj3ht|Zgev_Ost)1WTTNP27 zhuPDlBYKX`bR5RXad-aw0r0-&9XG*hgSnR!LhF7E5-lrD}0dQKl;6AbD~nGs@$HChib&%;y8~fVa2EFB7wZ zJe=#-Zy7K8WML5`W>x_xhDDwQ6!ab8=0$EpC+@WSJvnlHwHVR^oAw@Sk)^KW+!^tNv6pbk}+gfjtG_I=8JC4z(^zl5O#*nsPoVar@gj#KN{m8vP~%wxf) z8z5AxRY(vJ;-}?4?}LM(M9F=4N>$W3m+F|4lic>LZT=zc=pLbvFC#t#Pw$mzG$%?_ z)G&jJ7B=m19ygy`zkn*FVOYASJygTMA=XJbqS_n9XQUWuhEFwPTv!Tuu=oZ#g&dwX ze_{QjP>upBhM{dfTri!6E$4DO=s&db*fPZ3vr3yGOYl9-YZBNd%`H!N4 zOG_n-`X zI~-b0Q#$^ufS;B#oFwRjjIQRRD6AjA6>lJ~(`gK=ev3VZrSqpfB1RHpA)Tlp6^r zC7pe1@^I4@IBaf=Nj;udN``T(yjf%I5;ouq`25=y4uyG~Dm4X4^jD=jbwt#y411A9 z$I!Nn@f<%>3k}60Go+7dwX!16KhwFAv<83H^H8hQPwA@kO7({bO$Ih(P9C{+@_}10&4xEfd31q zCe#DoJJLqJXMigS79)udV0@`}#q8`h21=g)ef zURe3*`iP$gAMuOdVc_tTQwO-e-^9XsjT^4(_60qs-N`W7r1^NRcw)gMxDO7O!{Ncn zDmrsckB3u|Huv-uU!Gpe>EzvO*PeQ+Yrtt6D~t8N#9$sh7ivjtEUg+K>O+zFDFbD% zK{5JR3KO7BQ9q-7n_D^_pTlbk}Bc$?GC=w}YHM3!9%t0lb z7aF9&L?nAdsn$Yl_+<)^zKcpB%nqg^&KItpYi>6$Hvem2OY5Z9>_ZOcnlD%PPLGg; zXO2h9vxDU~E`z5S4E4r4R~ECUCr@Fb$DHe>6U(0+oSj{I&|JFo<|WYe)4I)Sez5sd z-RJ)L%g;aGb?7|*;`1-QaOd_9-MabAbI)Ytxr@JE^V?_e5rjVqCZ0z`L7KU(eZ8<@2gvaO9%bUf`#EKf!W29+V0PQOJoiYzlz zo3BjS=W*(4=`7X)S=*xfJ$t$1tFl6z0^2y_m#t2r*a{c^{62 z0aiK#XjB!MJb|QyUQt&3x{m>B_KI<>KvA0-o@Wb?m;f32&U&%M!EXf)Ld~Gd9Y=jA zoLeiE))r~a26ZI81#R-WAkLl(?{i+zHguwo5(DNWcuB-bkUBc?6kg6(Ty4I({(0Q2 z>FguU44zCsIy$7<$KhD88drU5H6NmeCinD}-RlP=L?@n0ezj>+E1|0Se2i%kdZZil z58EkUutk+sfbo={TCOb^6lC}ZD0q4u|J}ga>+t6cI?2*~lkIRyrmKeaEj(k+-Jr(9 z$(|lk7K1woJD5_Y_TBQn=|}mtpz?+9JI5W!X?DUc|GY2^DBQ+BWL826ns@lFTP((f zmt`V+{j=uZiS>OEQcyK;O@>k{4)=009MC|*G9K^)%<(08UTYs zyc%aA$S-2TW)mPp)i86DEbW4Y+*6<~&w4RuIf~PH*F?*C?6E<2N(Iv9dV5iJ^rAe`MdLgyd62f0PS-!$VJhXi_&zwYA3sM7d4K&i zJWIBK(;y(|#-bMD5yP$zW-E@ccl&=|oOBFPjH3y;7_Y{eN94_;Q(^oJ_)djw<2s~6 z&;@LQ)Ij=E;UuJ;C`mcj|0MAJ<9H)z_A!y@0EhmYaQu8ZZwYyhV$~rVPk(+$C%Se14`UH{-+O5^32v}iYUP8*t zx=bgwkTpOOFr5%WW-17_gc4^9@xv!e;ZIK+-7;=zI58p4ooIv1N*1 zF=PIaRuSSPpP>%{Qg8yUzP7LUqc|fc2L$YIuh(z@-AV8pe$a68yTo&$^wc~yp4{V$ zJ1r+;4()*Xw+2h6W>bsI2$(EJJXDSlyvPScaEBx~=NWyBc}LEW21xZn;u~uI``PT$ z$Wt*fpL7`=GGFNO@l&J2gM-6+{^sz2G{C{(0cn6PIH_ACOJcio0eV5n(*hY#OTVYk zcZS|8HFTlY(v%3T5L>%UF4!l2C5P00stEsRz)?f5VTgfxUd;bP_F6-MO2icUAN zQ58N^uc>Tu-CHU>*6S2JL1ZKL?T%r)0_q0vVa;gLp@FA@p^G5bG^vI%Sa=&4pMuE! z5mD6Oclf=m=ZL$%uIjpO@W;qeb^XjabuDB=r!_sQO83%Dv>KxDll!e!mxM9;y@ag4`9JpxN{y}e)rhPMBH zf9(!RdUeSw$qkaqhYA`5U5p{rfXx9Gh#>~}J#KzGtk)fz;Nb*kZm$J?s1zwcyznSf z9TyS?5n3wI%Lud9Q?s=OrYi}al&i%r0F;`I7XWI};)+@GPC)n>enkxr=~sAtPhSVa zhYEE8>sej@(Z0XkU&F!NMb)>74Wk?t`@6*<0T1PAp+VJy3j~t*G3P7cfZWqpCRlR_ zfTF|QPTxv?rTRj*@VOOUJ%X2nfIObgJcUI+BJ>)5G{qL+C^sAa{w<8Cj@#A=t)jQg zW;=)*GgZ#PQ|h2#E5yo@QSN`-tk*vkPiV;h^0z!FiUOzt!qzRPIaX&T1+m&EEvhF; zUE9IgbFAh0ebB~!O5C3k`;p5B5wIvqpdh3P3gk0BH44Pj2(54ViE?A>r-}?( z8&pABR?Yp8mK#b2;VOLyb4|WgsYW|d!~@Ue1(VJGD>#3Ai}mhcKkXMOYt^nAphBm# z5F9suHDI_+>Zh5iu@M?#gGO|VbSITzwK?(S>iYS-YKlHO_cC%-{f;%~_3%hA3l9us;5lE^|1euER*e z_B04MvuP;l*T5AjxVryw^9EHh!2C#I%E#PXQ89ISm>jK0jd$jn%nbc88_v#2^rGJ* z#W0Uhv@(H#zhcP*&o%$*8UbaRfHFilcmSief=i3j z(TrT~633Nrj}2_2)zOl+#3Kq?_b6x`KfvucZiBz3Q7z@X0I=trTt@g5@Tu{kxUq^> zN)RZ444jD-tn?iR+5q@B`Yo^cGw5n~8K?i^t!>QG(5V&OerEl)T}ROiDZcQGxY9zu z74EK}Kx(slEM8& zK7HoizOxt{%kk)(NF5VM8|i(8r+)q#V?3TD@Yi{)Mmx0MZWMr(MT# z;dt6%!}&gF9Ml|#{AiQG8}Cr-pEeJHCsx17$I7ZQ zt+1h!nu;DqwR8=66Bz22W)*kb(0NPOOxJ$AYY&ogpGW%%E;q`+H>=FNmjs17$RZ2u&iwg&;#MRz z0eTP^y_#cIDA4w9!cvF6)cC;cr)r0|o-?>qcoQ7)DZmqKO0R)8gII6}sHNXnr*^c} zi)?0n3;xedX_`_$n;B(qcAGBVp7y5JZxsnNwO%@p4@ri0#r?$4@Kw@*4-HIFqKRE{ z8-ByfT)S%Su4yiF;HaKEMCSo6F0>pDaUMku+t5IJFkOv6KHcc?vo7aub{PF|(0_z+KSgk3Hy? z%MQ9|{-or#V2=W$mS{@@IEE|%+5`ZlAO#>GAzqO}Z=o}c`l$jAqVQu<=D3j+$oc-| zY#R)e8jvkwKGLfn;?UryMk`DUIm?`76i*CE5(;SQ$UbgK5W{dFW} zveJ1WoFE6m>2sgWMtF--qsMfi(eaH1QO7sg#Rn(3YvdXF91jk{Ra26=%hU@j(g&v? zg$w($l4z4)~y>*e+5qHl)ZSzt$W z(0Gp67}=^qL>;|eI{dk-mZ-aiec{KvAD#TFI1rw^-`#ibU`=WVsFBe#=AhE4b=9CUkq zQ!?buNN@OnOxr^`&qJSRsD(PtRT2`GxQPu8kcD6cMJk;tuZ<_DmPT%NG`_c(%ty&7 zu%WvHtZ2|9YjJM*uwQ15EL2F-Ehi&y$+i%&H%dN29k#fIQ}Yoi!RC zkE@~v{1JoDl`Z0cYT$N5HH5##l8Mm9+kU6 zDG6}4T%I1DjIw-lORZ&{qrgk*cLTMk~Gbj!&rAUcyBSU_GZf zQsn~R3q$mvFB}q_9U6CI+mQW&ouvKJ8e5gUNz#2`ie(hi8+dbTcd*oN=dBza_Sm|_ z9>sqgpl~h+mcgqPj(A(x4Y$g!m2fV6mZ&YJ`V+IYLnv$thj$Y565jG&OE!aky1Rg8w(|Bf?pwXleA84fMnHlmW>({_-ID+vZigPmWX>4 z1r%oNmAwzD7(f&)ib~6ugyiQmo7MsRI<=E^eS_b@njZ7a=({|Fdxp2v$YdY=swCiTyGOetint8L-RI?Q|>2pc#rZcvH&4QclX|pdW2p1LUitC z-p}lt{2{u;N`pu9YTQrBCvGjBs8HsvLYeUxpJ``aT7o=kAL9o}Cluldui^(|qnshH z->EMw3n@6h^Eg?zIKNu1AO(+`QSj2L`6<)=i_qP*pNR;+lkN-BS6X=vjOEy3p`%O4 z#cq{|8q8yDJbva=FY*V8xFr--@ihA4i*Sm#F9c6E^MNG*+R28BKqfT^<_CNSSY+9scHoD2bw^ z9;kkTmwlpBoTKiTb3XS5fi?)I}%@k5lL6=PYI9URqRuAM9*JQq%t1&{j4PR!4|QNHYlE0 z5+pX29kuzn*n4|dEV8Um(6OtPd4-aJ2X4t=ooOatk>c<9q6=tNRJ>9P$>ZiK0N_c* zJnO5T>Ygk(rhejOe2f1kcJ%xNIp^_wzSQQ$!2_I&#B=-ou_io3^6ORnjUjE;57lP< z%7TqNKk0XmmveO26Tkib`m;|zt=|9qY~k#iEssj_Ptp*nMYzI3|{nI z+l4J?mqsecm&}X1Ocf}@*ZSwR6T3{ap3o5;);=)*W1__30b)lMvlj;c7$dRq4+DFy5q}7G_60* z_4KMo=XAG6tZ1cj5-PewSswc-$P0Qz!KI8Ys4&|Q;7c0?mRz^cx10W&Kigk(!+iK2 zPIQ8&HLJ6A>WVt^oQoX%RV_xljlz&^%Uf{)i^JU}I}U7oYSsGsEp_Aqe@9n+UtF$Y zloCeSBa^Wb z*n9aM&-G#R7FGFq!RWyDVfZ<3s|91v9h>1`8rw7bFaS?i2rGl zOPFyzF8RLkbBj#!eCAWbUU+prTUL5jGFZ<7FEGY6zPg?%-kx*8U*sLWIQqwW2>SZJ zjr;V^CE2>>pY2}b-sJi|-`Tx}-|(!Vo(1%1@3alu&l>BR-_L9Qr?^kCAH0#5Bo8Uj z)CxH^%6Vln&F*&?RpgmV+gvR6Jt|60sRgN_aZ;EB9hT+^vNJC;@uOsCUhT3o`23?0 zfyCovXRLfbS#}1CU|6LWqz}kQvk?fy*!KbnQN17Em0w*fm&*5P@r!;9CKHnNUCTu(r6L%S*>}@m+i^=Zbi)6;tj` zj!QbAp-p80w1nHR8ZHEbKq&14`tAS;wphHXVgJ12F#%s4ex z%nqGi9@PrGby|(!yBfawN?tzMJkIrHPR{9plWyV%o~}f^<14H0K(JLgvSB|Pn85>| z1$!ibW#eG87zJn@0;R78}P&Aj$K@opkq zrQJ_*zcoG(H6o8jYm8u9N=Gm0m#8h3Wx2KlGqRGXvlb1Dg`YP65AW$@rsV7Bb8e>{ zy-Zc4lJDkRn2&x{))T_th?t%)_7}W0zaT1e9>E$YmcNa%R4Y_yKnQ|Lk zLib`=1Fc4f5z?dZF9%*)tt+Tiot;j`(|awIUxmuqY4HkF&i;!`EXn=eYON5F&j2Sg z^ryFiyMoAKODPTQj00^&a|BfmGea>{%a)Q8k=tlB|10EGrqjEMbICeodqeB^FA^n^ z$dviOLJ@gAQAuh9zC<6&rfbzq@Wdk{gEVPA5R)ZY)K}sL9lXqbv%vg%?8ZzDaE7y` zrSYNF={vpzA4_*z05<1eM{RFNfL0>u$h&bp zO(Z{XLvmkQ@%j$%`t-Qs@!|ZV8ee}+=?9(^FD*weLjVI9LHts2cPBx?3!=(db56cn zEGf#g?9e6Jx@086Te2^54W2mP4N?@jgw|{{?`l4qe;lZHcgw2`5@$cQr(xqAZ27?U zdABeURfj-A!9$^j@<4ySEc)8)*?wkRLAMI-ZT-V6A-FHppM>ojvq~a)iaO^xM^4`46 z;TtLAXkncvce*;F#*89nkLCkT=Q_N5=xU#i;wnK{JEf_b%&=Uf|8a&tdRKCQ$E0kE z7*COz44=Li;l=uV)n_F%`7f&-zlgtB?)7VE9#a6cLx5>#jF6&(5Xoh8;Zl|1#oTAk zcb*Ck^2tdsLx|_e3h9)Q7fdjM!^BhyL4Q5ko0Z{0zEzWYSPGvyrxTnIS|TzsI~kGr zi#H_<6MvUv1GpF6lVVXPZo4`(;rHX@7SY~*ci)U_H5 zDH6j5%fiBH^GN~PASJwjZ9`0QS$mnO(~!JiUW>=*Hp_+fXpccOP&|}g1qwS|#jLI1 zftZrW!&~E~Zd;yOo+F0jC5DLVg#S=IT@)r)C*(AFY-j zBHbsWV>Tzbyc+9im{m>VAyd#8Yv&zGvulhzJ32ai&>S9KKP0yMsd)R*<`cdD{`w1_ zVRpQk&*zeYI|pu=C~zMfOg7hkGy|PM_XHmm|~(^P!D=~K3Di7 zA~q*wb6VE6Fj0B;fhG zt$wxaJa6Rtlb;YCY4QuS(aT{5e}@Ol z18W?yPE=Ve@vmjW%y}}JJsUCaEpP@_P7Awci7uT=C&=WNwU3-T~A~4hgZgf4q z56|UhALKjP3}!U(eJH7T0AvyFRg|XsxdpQ<5%w6BBbtQws#8&KH!n6XHGhBoZy;p| z_wiu-0mH{n21jSdM;|=1q9QeXu)M-ZXvlZ)H2dnB2h1yPZoKoE%g>I^&L$6@y2R+L z>yxj3_Os7FuUP_3^Vyd^`_d18uA3NF29?+Q^nsvE3cWhJ?)b;*0v|x4JizOc?H5&K ze)W}J=hvmiSf*d#^Se^NddWM}&q9PS03O7Ue8-P^MQE?@8hpc~Tqn6qqNGdYoPJAa zssyeLOFMV}dbC^CWtDKHTLW`wsk)WTjj;zJnj8g2fF_5 z9X!C%lOr&lUXL9E?VvOQh&{^XWRG&G{VE|MBu;P!w5eCV3mRImi&nP$OJmoVS~=ce zf&>XPe5< zJ@wC{Kj{D5P`#=D-n>wLmImSe)IhLyUKErUU&AXrlbFQ zYkjJapfxhuaBixy2-3`zK{%N}p3WX1Ax_YUI<^J6Q_9FHa*yDpZo`IA$7393>-v)^ z)G#n3YD+xg8n1$QwAFvhZ!dmHm zsp$`unRftu%_)KAAve124O=&-x@ospOLov^FkPopX>#AYclW~k0quU6_|&U1w9R5KbrfL z$|sEU@Q>x}Gsc&eoF>(3xFb8c6)f># zy~L9lHpSK*s#mr>9>s&&$HdyKZ=;7eA`1^e??)CBnduvuNFhK&`}OTZNhN&GMpm$?$$~BUCsBWBpfx&Fo6^1!9 z+fz>+9P~r%OlTZ|hC4WM;f%lj+Fe7X1Xn;LL+Tc2+@oZV|XA*A|So82}Z*=E-kyB821K(;m@B=DEd;c3z0Pp~1t zc!kH6=0Z4vDuzqiL0wy(vId7{4j8oX=UM`-k-nrJ8z$2sgN!bbF4fI-cOF*Vv*%s< zUgvn1ybH5nog+wk-sO!?)4PmpWS>4i%Nk7|tXav8UTyx;`j^71WXIbF$BQEpaBNai zR_;djhff|5(ptI3IJADkC~`8Dt9S{178AK@&!%Xxw$dGP7c18g;-EJ12ZKsxF3=lP z42c(Cp+TfoIBQIm!50_~L(-#n)>!hj(xwxMKSn@jjrqdyh84G`lI^+jytBq;<)o}= zYS+|*U@e%yKqj03C;{Y)JVDL;X|q}Ex=}hyE@A5kb_FD^S6y#`9rrjMyse3xYOp32 zOHKm;1u?Bhn0YDnmRxOqbNw5AkC0<`6^<)>o$IKj`RSnb4O@>;X}>Y7P`tvfd8*4a zXHDi(LRwl4 zKrn628Z091MD(1Mtm%lXsg68?JWKjMu8%N>b#H6ZXa$Y%BQ7iV=^O?$vP}#<6Fe)8 z6AA)@(bqTB_*m;iU7~VTT4v}xAH@Vw`1Fb8pbn^ozby?*j=9F-Fg@I;b)kXTQC$DM z`5Ca>X}*4yrc+Z4Rl??%?2Kp#i%TkXulC+L!yZ(ozoZ;AR+yQ_2RIq3(JMUe8h&nI z2#3Qs3J14wxxC3yIG>3WM^#feA{CVt7PG!_44$PlRBHf;?j@8U7)1?-1a4vI*J8z4 z{aZ9IuAdK_V++%#)26VS@_dTNGiCLiM^_996p)E!|8j@Hb9NMh$~31v-*fMdLW7TB z#9gh4J74z36Z*1-(2juVoOY%2WyNaky45!EM80f$cW}_js;riF_hHkgQZ!TQi6lc? zXQO9I`}IXRI2^-03(RN`9BtOo%8ao$yvpnpvyjeYtkJg(NBk>^?GFO?{ zxk_6dJyrEn`~)^}z};Yv1#6YDz=z?=E|=W_X>+_Mdkj_;T3tMW2bIULGGnrR2B$~i>$;{kPZ`sCQBXE_g7_XfS<%jFPP*Ma-)Y+q%WW&5SuZoP(hE536eZ-nUS`|wl+VK$*^gTAJ!4T`?Vp%}PGisw5iJD$;WIZ(zi5y~-3b;xF& z_bir1-sb?!6@c~CJWC5059`4_ktpHrh>{iDf{7LJHdD6cIT&eAmlgc2{FN9Fl}f%KVmxKMV`CM<<32PFi(VSZmeG z5SU-OcyVKGrf!Qm(pem=F1PeC(VKcDL19qx=%^M55@A8u3HG%+%ugLup<@LVyPNPrXNy_0*l>tpHW`DH*=!)FMDoMc0sBzO zj{{EbJUOY$9ie?sWl|N%PWQK|DY9-s3V? zXO6!vU*e3^jE5Xm5i{Jfk+h=k6eq;$9iK-Y0nb$jg~parx!Zc4rkhxNCh2Hl5pw7- z0#0-DoOA%`3!X=eZa;=6I29|h`+NVaCyGA-f`!hSH^aN5@QC^UW>@my3KB$D*O&Rj z@T2YD-~VUQ6^hA-3q|Z(x;ZO?-&F6&CqU6z^Bm`dmZI$g1m5N$Do%Uvpxfjfz>4%3 z5fULWfibYiugZ*JfS4koOl|lh%GAoNndu|W=3D>N!Xa@`yX zidoVe7r~BSg;d*$Z1U-vdZt;L%~Ueg?K}nj=wta#O1Ijvo0I*W&u`9wgCmt)#_8gP zmEr|KqtL`-lA@C;mn{u!g;N08s5bm3vUt0-;oo2XTam>(a&7qNuBaMfpyO3s4nr)cEqCcZNqZhQzZ?4Or78AMa<*f|tfNO=Ue5SDUb;%HR*TGJEzQp0sx{IL z$w!nJmAoUw?Tr$Xc`{OgPpH((HM4}5--&-~3`b|IGAlqi14`{%Z*7yjswz<2-V>c* zNRNC85mU?^57l!Uf9r0O)*cpr?q@lPaLh~~pDjZf%SX;hjb&R7*q}ocg=UMTTAC81 zu|c^_b{+8em?r*; zE_g&ccUIVFG*=#x?o5;&cNVjAYd%@tD(N;(BOX8pRdIlP{}Ju}j@=YT<+p0TN7k)D zt&+$LU37F=RT8zkNNg~WBt#}#Fxh+xF2Iub@n6UlpQV0}ZkCv((ch^8p>i+Ab?;OG znEg9dDli_gQ>EkpkjU8U+J|F%mt+S4Y5V>z$?SqTg9*D?CqZJZx$KhU{?;~Hu{yfh zfk7Lc_FFT*q@Fos|IKG@Q-)TJY`2kH>aTh%mmC;=hldle_nWn5j`sp-^CpQ<53kPmhLIP>6OY}wDUQnT*LmO`SAD&;iXEK}`2XYkD^{%PH z98l_HayD!VS14ndJ-I?7kfE>o;E5Ise-NnHFS1rWh4luI$kTiTB%!B)~F=`&eAgVW(9|f z*kMlg%Go#NynW01rdnEApS&gSXw3tuGW2S_h3=lA|6`|vVT87PwKpa*=Ut(O;^_iw z&jZr@p!7oe_m$iyj|))UHFRvrV_U;%$G@J_Gwyj(etvZBdxvEA~S=q0!pgJpyh-!sxAH$XASJ%JH`VL12+1JVm;?wzx znZIdyLJzg=3(>q#T=FjDsYLy_T9YS%>|Ia07QhdU*)648OI_{JTB>SKW~!kpmh5A! zsj@2#KdB$;pYm<4l`o;!uE_7~t+n(&Ow-ietZh5q%Jeednd>6G=>(IcHCQh_7;&Rso#YC;huY^!-9iUn4K*r~ zjYo8MBt-ThoJoWx+oKE@<>9ow!SOO)W_F$t4-ei*{ERlPT|6zz%6`574JvQdCBy-s zNj1Was#D_`*X(eOY8O#Q^nL#KefM!5v8^?Z$^Y!$C+j5R1}Xzj?t$sg>fjo|!!?FS zwUnx&R=5;+#HGjN)0yT{xOAdjG3?bCQ{-PEktnVlnXe`fH$IHVG2pZ~1zW5c83^kW zD;5VvsCqdp!J1&&sNR4#ecx*;Z>5Me6!?B+{fj;Lh~TC~aLtrC;RVnZyuQAeAA6t} zFrKF`2o-i)oCKj^i$J#D+XQ}iRXQ#9ZbZL+tJf-hrf#*^WP9Tsj(Ch*!}TRur~tO> z6y2-d>VEyA-lVdf&TQ3n;uKwNz^$r5a|QvGyw@5|`&f5)Rq{^9_&+HcPS%p2|NHXu z77zZP+yj}Yc~HK9tGciXoEo*dng@3=s3`pp!i)J4wp<=8=Gv)sG&;L`sJ9))-+w1Uy>eMtXi; zt!E9DZ!pyDaAg|ge2O%cxqyhg9f~o;J4eRVn5zT_8Z=~_q(J991PZoSFF&!wf~haz z4fG|0q3U(Bh=@~_$=Tk=<&=c?ab0m{UrY}|VR?I9>4Wy(hcRfHbKZw^J3}i~lloBg z_-B<>E?hL0MkM`zpvo_emNObHmuN!JL|pQ4am z7k~2aH~dg?6o>ofNI}ctFx;ffINL>!+>aVi#D?nqQ3rQCsGw6j(UR6^vl=IO5~~TB zK{zN*BnbyJW;5W9Nk9LY5qToi_m)j literal 0 HcmV?d00001 diff --git a/py/assets/gamecontrollerdb.txt b/py/assets/gamecontrollerdb.txt new file mode 100644 index 0000000..394156d --- /dev/null +++ b/py/assets/gamecontrollerdb.txt @@ -0,0 +1,2212 @@ +# Game Controller DB for SDL in 2.0.16 format +# Source: https://github.com/mdqinc/SDL_GameControllerDB + +# Windows +03000000300f00000a01000000000000,3 In 1 Conversion Box,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b8,x:b3,y:b0,platform:Windows, +03000000fa190000918d000000000000,3 In 1 Conversion Box,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b8,x:b3,y:b0,platform:Windows, +03000000fa2d00000100000000000000,3dRudder Foot Motion Controller,leftx:a0,lefty:a1,rightx:a5,righty:a2,platform:Windows, +03000000d0160000040d000000000000,4Play Adapter,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows, +03000000d0160000050d000000000000,4Play Adapter,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows, +03000000d0160000060d000000000000,4Play Adapter,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows, +03000000d0160000070d000000000000,4Play Adapter,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows, +03000000d0160000600a000000000000,4Play Adapter,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows, +03000000c82d00001930000000000000,8BitDo 64,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a4,start:b11,platform:Windows, +03000000c82d00000031000000000000,8BitDo Adapter,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00000531000000000000,8BitDo Adapter 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00000951000000000000,8BitDo Dogbone,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a2,rightx:a3,righty:a5,start:b11,platform:Windows, +03000000008000000210000000000000,8BitDo F30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +030000003512000011ab000000000000,8BitDo F30 Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000c82d00001028000000000000,8BitDo F30 Arcade Joystick,a:b0,b:b1,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d000011ab000000000000,8BitDo F30 Arcade Joystick,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000801000000900000000000000,8BitDo F30 Arcade Stick,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00001038000000000000,8BitDo F30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000090000000000000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00006a28000000000000,8BitDo GameCube,a:b0,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b9,paddle2:b8,rightshoulder:b10,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b1,y:b4,platform:Windows, +03000000c82d00001251000000000000,8BitDo Lite 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00001151000000000000,8BitDo Lite SE,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000150000000000000,8BitDo M30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a3,righty:a5,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000151000000000000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a2,rightshoulder:b6,righttrigger:b7,rightx:a3,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00000650000000000000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00005106000000000000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,guide:b2,leftshoulder:b8,lefttrigger:b9,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00002090000000000000,8BitDo Micro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000310000000000000,8BitDo N30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00000451000000000000,8BitDo N30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a2,rightx:a3,righty:a5,start:b11,platform:Windows, +03000000c82d00002028000000000000,8BitDo N30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00008010000000000000,8BitDo N30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d0000e002000000000000,8BitDo N30,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,start:b6,platform:Windows, +03000000c82d00000190000000000000,8BitDo N30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00001590000000000000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00006528000000000000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000290000000000000,8BitDo N64,+rightx:b9,+righty:b3,-rightx:b4,-righty:b8,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,platform:Windows, +03000000c82d00003038000000000000,8BitDo N64,+rightx:b9,+righty:b3,-rightx:b4,-righty:b8,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,platform:Windows, +03000000c82d00006928000000000000,8BitDo N64,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a4,start:b11,platform:Windows, +03000000c82d00002590000000000000,8BitDo NEOGEO,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +030000003512000012ab000000000000,8BitDo NES30,a:b2,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b0,platform:Windows, +03000000c82d000012ab000000000000,8BitDo NES30,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows, +03000000022000000090000000000000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000203800000900000000000000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00002038000000000000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000751000000000000,8BitDo P30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a2,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00000851000000000000,8BitDo P30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a2,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00000360000000000000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000361000000000000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000660000000000000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000960000000000000,8BitDo Pro 3,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b17,paddle2:b16,paddle3:b2,paddle4:b5,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000131000000000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000231000000000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000331000000000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000431000000000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00002867000000000000,8BitDo S30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a2,rightshoulder:b6,righttrigger:b7,rightx:a3,righty:a5,start:b10,x:b3,y:b4,platform:Windows, +03000000c82d00000130000000000000,8BitDo SF30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000060000000000000,8BitDo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000061000000000000,8BitDo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows, +03000000102800000900000000000000,8BitDo SFC30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d000021ab000000000000,8BitDo SFC30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00003028000000000000,8BitDo SFC30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows, +030000003512000020ab000000000000,8BitDo SN30,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000030000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000351000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a2,rightshoulder:b7,rightx:a3,righty:a5,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00001290000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d000020ab000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00004028000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00006228000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000021000000000000,8BitDo SN30 Pro,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00000160000000000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000161000000000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000260000000000000,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000261000000000000,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00001230000000000000,8BitDo Ultimate,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b2,paddle2:b5,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00001260000000000000,8BitDo Ultimate 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b17,paddle2:b16,paddle3:b2,paddle4:b5,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00001b30000000000000,8BitDo Ultimate 2C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b5,paddle2:b2,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00001c30000000000000,8BitDo Ultimate 2C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b2,paddle2:b5,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00001d30000000000000,8BitDo Ultimate 2C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b5,paddle2:b2,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00001530000000000000,8BitDo Ultimate C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00001630000000000000,8BitDo Ultimate C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00001730000000000000,8BitDo Ultimate C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00001130000000000000,8BitDo Ultimate Wired,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,misc1:b26,paddle1:b24,paddle2:b25,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00001330000000000000,8BitDo Ultimate Wireless,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b26,paddle1:b23,paddle2:b19,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00000121000000000000,8BitDo Xbox One SN30 Pro,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000a00500003232000000000000,8BitDo Zero,a:b0,b:b1,back:b10,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00001890000000000000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00003032000000000000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows, +030000008f0e00001200000000000000,Acme GA02,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Windows, +03000000c01100000355000000000000,Acrux,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000fa190000f0ff000000000000,Acteck AGJ 3200,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000d1180000402c000000000000,ADT1,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a3,rightx:a2,righty:a5,x:b3,y:b4,platform:Windows, +030000006f0e00008801000000000000,Afterglow Deluxe Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000341a00003608000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00000263000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00001101000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00001401000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00001402000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00001901000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00001a01000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00001301000000000000,Afterglow Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000006f0e00001302000000000000,Afterglow Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000006f0e00001304000000000000,Afterglow Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000006f0e00001413000000000000,Afterglow Xbox Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00003901000000000000,Afterglow Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000ab1200000103000000000000,Afterglow Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000ad1b000000f9000000000000,Afterglow Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000100000008200000000000000,Akishop Customs PS360,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +030000007c1800000006000000000000,Alienware Dual Compatible PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows, +03000000491900001904000000000000,Amazon Luna Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Windows, +03000000710100001904000000000000,Amazon Luna Controller,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b5,leftstick:b8,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b4,rightstick:b7,rightx:a3,righty:a4,start:b6,x:b3,y:b2,platform:Windows, +0300000008100000e501000000000000,Anbernic Game Pad,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000020500000913000000000000,Anbernic RG P01,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +03000000373500000710000000000000,Anbernic RG P01,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000373500004610000000000000,Anbernic RG P01,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000190e00000110000000000000,Aquaplus Piece,a:b1,b:b0,back:b3,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b2,platform:Windows, +03000000830500000160000000000000,Arcade,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b3,x:b4,y:b4,platform:Windows, +03000000120c0000100e000000000000,Armor 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000490b00004406000000000000,ASCII Seamic Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows, +03000000869800002500000000000000,Astro C40 TR PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000a30c00002700000000000000,Astro City Mini,a:b2,b:b1,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows, +03000000a30c00002800000000000000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a3,lefty:a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows, +03000000050b00000579000000000000,ASUS ROG Kunai 3,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000050b00000679000000000000,ASUS ROG Kunai 3,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000503200000110000000000000,Atari VCS Classic Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,start:b3,platform:Windows, +03000000503200000210000000000000,Atari VCS Modern Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:Windows, +03000000380800001889000000000000,AtGames Legends Gamer Pro,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b13,lefttrigger:b14,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +030000008a3500000102000000000000,Backbone One,a:b4,b:b5,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b10,leftstick:b17,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b18,righttrigger:b13,rightx:a3,righty:a4,start:b15,x:b7,y:b8,platform:Windows, +030000008a3500000201000000000000,Backbone One,a:b4,b:b5,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b10,leftstick:b17,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b18,righttrigger:b13,rightx:a3,righty:a4,start:b15,x:b7,y:b8,platform:Windows, +030000008a3500000302000000000000,Backbone One,a:b4,b:b5,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b10,leftstick:b17,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b18,righttrigger:b13,rightx:a3,righty:a4,start:b15,x:b7,y:b8,platform:Windows, +030000008a3500000402000000000000,Backbone One,a:b4,b:b5,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b10,leftstick:b17,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b18,righttrigger:b13,rightx:a3,righty:a4,start:b15,x:b7,y:b8,platform:Windows, +03000000e4150000103f000000000000,Batarang,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000d6200000e557000000000000,Batarang PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000c01100001352000000000000,Battalife Joystick,a:b6,b:b7,back:b2,leftshoulder:b0,leftx:a0,lefty:a1,rightshoulder:b1,start:b3,x:b4,y:b5,platform:Windows, +030000006f0e00003201000000000000,Battlefield 4 PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000ad1b000001f9000000000000,BB 070,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000d62000002a79000000000000,BDA PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000bc2000005250000000000000,Beitong G3,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b5,righttrigger:b9,rightx:a3,righty:a4,start:b15,x:b3,y:b4,platform:Windows, +030000000d0500000208000000000000,Belkin Nostromo N40,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows, +03000000bc2000006012000000000000,Betop 2126F,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000bc2000000055000000000000,Betop BFM,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000790000000700000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows, +03000000808300000300000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows, +03000000bc2000006312000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000bc2000006321000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000bc2000006412000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000c01100000555000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000c01100000655000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +030000006f0e00006401000000000000,BF One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Windows, +03000000300f00000202000000000000,Bigben,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a5,righty:a2,start:b7,x:b2,y:b3,platform:Windows, +030000006b1400000209000000000000,Bigben,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006b1400000055000000000000,Bigben PS3 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000006b1400000103000000000000,Bigben PS3 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows, +03000000120c0000200e000000000000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000120c0000210e000000000000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000120c0000f10e000000000000,Brook PS2 Adapter,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000120c0000310c000000000000,Brook Super Converter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows, +03000000d81d00000b00000000000000,Buffalo BSGP1601 Series,a:b5,b:b3,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b13,x:b4,y:b2,platform:Windows, +030000005a1c00002400000000000000,Capcom Home Arcade Controller,a:b3,b:b4,back:b7,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b6,x:b0,y:b1,platform:Windows, +030000005b1c00002400000000000000,Capcom Home Arcade Controller,a:b3,b:b4,back:b7,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b6,x:b0,y:b1,platform:Windows, +030000005b1c00002500000000000000,Capcom Home Arcade Controller,a:b3,b:b4,back:b7,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b6,x:b0,y:b1,platform:Windows, +030000006d04000042c2000000000000,ChillStream,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000e82000006058000000000000,Cideko AK08b,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000457500000401000000000000,Cobra,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000b0400003365000000000000,Competition Pro,a:b0,b:b1,back:b2,leftx:a0,lefty:a1,start:b3,platform:Windows, +030000004c050000c505000000000000,CronusMax Adapter,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000d814000007cd000000000000,Cthulhu,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000d8140000cefa000000000000,Cthulhu,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000260900008888000000000000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a4,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Windows, +030000003807000002cb000000000000,Cyborg,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000a306000022f6000000000000,Cyborg V.3 Rumble,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows, +03000000f806000000a3000000000000,DA Leader,a:b7,b:b6,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b0,leftstick:b8,lefttrigger:b1,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:b3,rightx:a2,righty:a3,start:b12,x:b4,y:b5,platform:Windows, +030000001a1c00000001000000000000,Datel Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000451300000830000000000000,Defender Game Racer X7,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000791d00000103000000000000,Dual Box Wii,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +030000004f040000070f000000000000,Dual Power,a:b8,b:b9,back:b4,dpdown:b1,dpleft:b2,dpright:b3,dpup:b0,leftshoulder:b13,leftstick:b6,lefttrigger:b14,leftx:a0,lefty:a1,rightshoulder:b12,rightstick:b7,righttrigger:b15,start:b5,x:b10,y:b11,platform:Windows, +030000004f04000012b3000000000000,Dual Power 3,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows, +030000004f04000020b3000000000000,Dual Trigger,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows, +03000000bd12000002e0000000000000,Dual Vibration Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a2,start:b11,x:b3,y:b0,platform:Windows, +03000000ff1100003133000000000000,DualForce,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b1,platform:Windows, +030000006f0e00003001000000000000,EA Sports PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000fc0400000250000000000000,Easy Grip,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows, +03000000bc2000000091000000000000,EasySMX Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +030000006e0500000a20000000000000,Elecom DUX60 MMO,a:b2,b:b3,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b14,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b15,righttrigger:b13,rightx:a3,righty:a4,start:b20,x:b0,y:b1,platform:Windows, +03000000b80500000410000000000000,Elecom Gamepad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows, +03000000b80500000610000000000000,Elecom Gamepad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows, +03000095090000010000000000000000,Elecom JC-U609,a:b0,b:b1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,start:b8,x:b3,y:b4,platform:Windows, +0300004112000000e500000000000000,Elecom JC-U909Z,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b7,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,start:b8,x:b3,y:b4,platform:Windows, +03000041120000001050000000000000,Elecom JC-U911,a:b1,b:b2,back:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,start:b0,x:b4,y:b5,platform:Windows, +030000006e0500000520000000000000,Elecom P301U PlayStation Controller Adapter,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows, +03000000250900000218000000000000,Elecom PlayStation Adapter,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +03000000411200004450000000000000,Elecom U1012,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows, +030000006e0500000320000000000000,Elecom U3613M,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows, +030000006e0500000e20000000000000,Elecom U3912T,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows, +030000006e0500000f20000000000000,Elecom U4013S,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows, +030000006e0500001320000000000000,Elecom U4113,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006e0500001020000000000000,Elecom U4113S,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Windows, +030000006e0500000720000000000000,Elecom W01U,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows, +030000007d0400000640000000000000,Eliminator AfterShock,a:b1,b:b2,back:b9,dpdown:+a3,dpleft:-a5,dpright:+a5,dpup:-a3,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a4,righty:a2,start:b8,x:b0,y:b3,platform:Windows, +03000000120c0000f61c000000000000,Elite,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000430b00000300000000000000,EMS Production PS2 Adapter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +03000000062000001801000000000000,EMS TrioLinker Plus II,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b2,y:b3,platform:Windows, +03000000242f000000b7000000000000,ESM 9110,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Windows, +03000000101c0000181c000000000000,Essential,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b4,leftx:a1,lefty:a0,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +030000008f0e00000f31000000000000,EXEQ,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows, +03000000341a00000108000000000000,EXEQ RF Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000006f0e00008401000000000000,Faceoff Deluxe Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00008101000000000000,Faceoff Deluxe Pro Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00008001000000000000,Faceoff Pro Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000021000000090000000000000,FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b13,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b14,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +0300000011040000c600000000000000,FC801,a:b0,b:b1,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows, +03000000852100000201000000000000,FF GP1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000ad1b000028f0000000000000,Fightpad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000ad1b00002ef0000000000000,Fightpad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000ad1b000038f0000000000000,Fightpad TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,rightshoulder:b5,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows, +03005036852100000000000000000000,Final Fantasy XIV Online Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000f806000001a3000000000000,Firestorm,a:b9,b:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b0,leftstick:b10,lefttrigger:b1,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b11,righttrigger:b3,start:b12,x:b8,y:b4,platform:Windows, +03000000b50700000399000000000000,Firestorm 2,a:b2,b:b4,back:b10,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b8,righttrigger:b9,start:b11,x:b3,y:b5,platform:Windows, +03000000b50700001302000000000000,Firestorm D3,a:b0,b:b2,leftshoulder:b4,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,x:b1,y:b3,platform:Windows, +03000000b40400001024000000000000,Flydigi Apex,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +03000000151900004000000000000000,Flydigi Vader 2,a:b27,b:b26,back:b19,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b23,leftstick:b17,lefttrigger:b21,leftx:a0,lefty:a1,rightshoulder:b22,rightstick:b16,righttrigger:b20,rightx:a3,righty:a4,start:b18,x:b25,y:b24,platform:Windows, +03000000b40400001124000000000000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b12,lefttrigger:b8,leftx:a0,lefty:a1,misc1:b14,paddle1:b4,paddle2:b5,paddle3:b16,paddle4:b17,rightshoulder:b7,rightstick:b13,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b2,y:b3,platform:Windows, +03000000b40400001224000000000000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b12,lefttrigger:b8,leftx:a0,lefty:a1,misc1:b2,paddle1:b16,paddle2:b17,paddle3:b14,paddle4:b15,rightshoulder:b7,rightstick:b13,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +030000008305000000a0000000000000,G08XU,a:b0,b:b1,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b5,x:b2,y:b3,platform:Windows, +0300000066f700000100000000000000,Game VIB Joystick,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Windows, +03000000260900002625000000000000,GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,lefttrigger:a4,leftx:a0,lefty:a1,righttrigger:a5,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Windows, +03000000341a000005f7000000000000,GameCube Controller,a:b2,b:b3,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b1,y:b0,platform:Windows, +03000000430b00000500000000000000,GameCube Controller,a:b0,b:b2,dpdown:b10,dpleft:b8,dpright:b9,dpup:b11,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a3,rightx:a5,righty:a2,start:b7,x:b1,y:b3,platform:Windows, +03000000790000004718000000000000,GameCube Controller,a:b1,b:b0,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows, +03000000790000004618000000000000,GameCube Controller Adapter,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows, +030000008f0e00000d31000000000000,Gamepad 3 Turbo,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000ac0500003d03000000000000,GameSir G3,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000ac0500005b05000000000000,GameSir G3w,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000ac0500002d02000000000000,GameSir G4,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +03000000ac0500004d04000000000000,GameSir G4,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000ac0500001a06000000000000,GameSir T3 2.02,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000373500009410000000000000,GameSir Tegenaria Lite,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +030000004c0e00001035000000000000,Gamester,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, +030000000d0f00001110000000000000,GameStick Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +0300000047530000616d000000000000,GameStop,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000c01100000140000000000000,GameStop PS4 Fun Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000b62500000100000000000000,Gametel GT004 01,a:b3,b:b0,dpdown:b10,dpleft:b9,dpright:b8,dpup:b11,leftshoulder:b4,rightshoulder:b5,start:b7,x:b1,y:b2,platform:Windows, +030000008f0e00001411000000000000,Gamo2 Divaller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000120c0000a857000000000000,Gator Claw,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000c21100000791000000000000,Be1 GC101 Controller 1.03,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000c9110000f055000000000000,Be1 GC100XF Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000008305000009a0000000000000,Genius,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000008305000031b0000000000000,Genius Maxfire Blaze 3,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000451300000010000000000000,Genius Maxfire Grandias 12,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000005c1a00003330000000000000,Genius MaxFire Grandias 12V,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Windows, +03000000300f00000b01000000000000,GGE909 Recoil,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +03000000f0250000c283000000000000,Gioteck PlayStation Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000f025000021c1000000000000,Gioteck PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000f025000031c1000000000000,Gioteck PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000f0250000c383000000000000,Gioteck VX2 PlayStation Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000f0250000c483000000000000,Gioteck VX2 PlayStation Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000d11800000094000000000000,Google Stadia Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:b11,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:Windows, +030000004f04000026b3000000000000,GP XID,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +0300000079000000d418000000000000,GPD Win,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000c6240000025b000000000000,GPX,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000007d0400000840000000000000,Gravis Destroyer Tilt,+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b1,b:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,x:b0,y:b3,platform:Windows, +030000007d0400000540000000000000,Gravis Eliminator Pro,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +03000000280400000140000000000000,Gravis GamePad Pro,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a3,dpup:-a4,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +030000008f0e00000610000000000000,GreenAsia,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a5,righty:a2,start:b11,x:b3,y:b0,platform:Windows, +03000000ac0500006b05000000000000,GT2a,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +03000000341a00000302000000000000,Hama Scorpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000008a2e0000dd10000000000000,Hand Held Legend GC Ultimate,a:b0,b:b2,back:b17,dpdown:b5,dpleft:b6,dpright:b7,dpup:b4,guide:b18,leftshoulder:b10,leftstick:b8,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b19,misc2:b24,paddle1:b13,paddle2:b12,rightshoulder:b11,rightstick:b9,righttrigger:a4,rightx:a2,righty:a5,start:b16,x:b1,y:b3,platform:Windows, +030000008a2e0000df10000000000000,Hand Held Legend ProGCC,a:b1,b:b0,back:b17,dpdown:b5,dpleft:b6,dpright:b7,dpup:b4,guide:b18,leftshoulder:b10,leftstick:b8,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b19,paddle1:b13,paddle2:b12,rightshoulder:b11,rightstick:b9,righttrigger:a4,rightx:a2,righty:a5,start:b16,x:b3,y:b2,platform:Windows, +030000000d0f00004900000000000000,Hatsune Miku Sho PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000001008000001e1000000000000,Havit HV G60,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b0,platform:Windows, +030000000d0f00000c00000000000000,HEXT,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000d81400000862000000000000,HitBox Edition Cthulhu,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b4,rightshoulder:b7,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows, +03000000632500002605000000000000,HJD X,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +030000000d0f00000a00000000000000,Hori DOA,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000000d0f00008500000000000000,Hori Fighting Commander 2016 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00002500000000000000,Hori Fighting Commander 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00002d00000000000000,Hori Fighting Commander 3 Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00005f00000000000000,Hori Fighting Commander 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00005e00000000000000,Hori Fighting Commander 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +030000000d0f00008400000000000000,Hori Fighting Commander 5,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00006201000000000000,Hori Fighting Commander Octa,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00006401000000000000,Hori Fighting Commander Octa,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,start:b7,x:b2,y:b3,platform:Windows, +030000000d0f00005100000000000000,Hori Fighting Commander PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00008600000000000000,Hori Fighting Commander Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000000d0f0000ba00000000000000,Hori Fighting Commander Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000000d0f00008800000000000000,Hori Fighting Stick mini 4 PS3,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b8,x:b0,y:b3,platform:Windows, +030000000d0f00008700000000000000,Hori Fighting Stick mini 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +030000000d0f00001000000000000000,Hori Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00003200000000000000,Hori Fightstick 3W,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f0000c000000000000000,Hori Fightstick 4,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000000d0f00000d00000000000000,Hori Fightstick EX2,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, +030000000d0f00003701000000000000,Hori Fightstick Mini,a:b1,b:b0,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Windows, +030000000d0f00004000000000000000,Hori Fightstick Mini 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b4,rightshoulder:b7,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00002100000000000000,Hori Fightstick V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00002700000000000000,Hori Fightstick V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f0000a000000000000000,Hori Grip TAC4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b13,x:b0,y:b3,platform:Windows, +030000000d0f0000a500000000000000,Hori Miku Project Diva X HD PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +030000000d0f0000a600000000000000,Hori Miku Project Diva X HD PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +030000000d0f00000101000000000000,Hori Mini Hatsune Miku FT,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00005400000000000000,Hori Pad 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00000900000000000000,Hori Pad 3 Turbo,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00004d00000000000000,Hori Pad A,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00003801000000000000,Hori PC Engine Mini Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,platform:Windows, +030000000d0f00009200000000000000,Hori Pokken Tournament DX Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00002301000000000000,Hori PS4 Controller Light,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +030000000d0f00001100000000000000,Hori Real Arcade Pro 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00002600000000000000,Hori Real Arcade Pro 3P,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00004b00000000000000,Hori Real Arcade Pro 3W,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00006a00000000000000,Hori Real Arcade Pro 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00006b00000000000000,Hori Real Arcade Pro 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00008a00000000000000,Hori Real Arcade Pro 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00008b00000000000000,Hori Real Arcade Pro 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00006f00000000000000,Hori Real Arcade Pro 4 VLX,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00007000000000000000,Hori Real Arcade Pro 4 VLX,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00003d00000000000000,Hori Real Arcade Pro N3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b10,leftstick:b4,lefttrigger:b11,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b6,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f0000ae00000000000000,Hori Real Arcade Pro N4,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000000d0f00008c00000000000000,Hori Real Arcade Pro P4,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000000d0f0000aa00000000000000,Hori Real Arcade Pro S,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f0000d800000000000000,Hori Real Arcade Pro S,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Windows, +030000000d0f00002200000000000000,Hori Real Arcade Pro V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00005b00000000000000,Hori Real Arcade Pro V4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00005c00000000000000,Hori Real Arcade Pro V4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f0000af00000000000000,Hori Real Arcade Pro VHS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00001b00000000000000,Hori Real Arcade Pro VX,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000ad1b000002f5000000000000,Hori Real Arcade Pro VX,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b11,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Windows, +030000000d0f00009c00000000000000,Hori TAC Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f0000c900000000000000,Hori Taiko Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00006400000000000000,Horipad 3TP,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00001300000000000000,Horipad 3W,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00005500000000000000,Horipad 4 FPS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00006e00000000000000,Horipad 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00006600000000000000,Horipad 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +030000000d0f00004200000000000000,Horipad A,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000ad1b000001f5000000000000,Horipad EXT2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000000d0f0000ee00000000000000,Horipad Mini 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f0000c100000000000000,Horipad Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f0000f600000000000000,Horipad Nintendo Switch Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000000d0f00000202000000000000,Horipad O Nintendo Switch 2 Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,misc2:b14,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows, +030000000d0f00006700000000000000,Horipad One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000000d0f00009601000000000000,Horipad Steam,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,misc2:b2,paddle1:b5,paddle2:b15,paddle3:b18,paddle4:b19,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +030000000d0f0000dc00000000000000,Horipad Switch,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000242e00000b20000000000000,Hyperkin Admiral N64 Controller,+rightx:b11,+righty:b13,-rightx:b8,-righty:b12,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b14,leftx:a0,lefty:a1,rightshoulder:b5,start:b9,platform:Windows, +03000000242e0000ff0b000000000000,Hyperkin N64 Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a2,righty:a3,start:b9,platform:Windows, +03000000790000004e95000000000000,Hyperkin N64 Controller Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b7,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a5,righty:a2,start:b9,platform:Windows, +03000000242e00006a48000000000000,Hyperkin RetroN Sq,a:b3,b:b7,back:b5,dpdown:+a4,dpleft:-a0,dpright:+a0,dpup:-a4,leftshoulder:b0,rightshoulder:b1,start:b4,x:b2,y:b6,platform:Windows, +03000000242f00000a20000000000000,Hyperkin Scout,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Windows, +03000000242e00000a20000000000000,Hyperkin Scout Premium SNES Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Windows, +03000000242e00006a38000000000000,Hyperkin Trooper 2,a:b0,b:b1,back:b4,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b3,start:b5,platform:Windows, +03000000f00300008d04000000000000,HyperX Clutch,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:-a2,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:+a5,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000d81d00000e00000000000000,iBuffalo AC02 Arcade Joystick,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b11,righttrigger:b3,rightx:a2,righty:a5,start:b8,x:b4,y:b5,platform:Windows, +03000000d81d00000f00000000000000,iBuffalo BSGP1204 Series,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000d81d00001000000000000000,iBuffalo BSGP1204P Series,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +030000005c0a00000285000000000000,iDroidCon,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b6,platform:Windows, +03000000696400006964000000000000,iDroidCon Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000511d00000230000000000000,iGUGU Gamecore,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b1,leftstick:b4,lefttrigger:b3,leftx:a0,lefty:a1,rightshoulder:b0,righttrigger:b2,platform:Windows, +03000000b50700001403000000000000,Impact Black,a:b2,b:b3,back:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows, +030000006f0e00002401000000000000,Injustice Fightstick PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +03000000830500005130000000000000,InterAct ActionPad,a:b0,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows, +03000000ef0500000300000000000000,InterAct AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Windows, +03000000fd0500000230000000000000,InterAct AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a5,start:b11,x:b0,y:b1,platform:Windows, +03000000fd0500000030000000000000,Interact GoPad,a:b3,b:b4,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,x:b0,y:b1,platform:Windows, +03000000fd0500003902000000000000,InterAct Hammerhead,a:b3,b:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b2,lefttrigger:b8,rightshoulder:b7,rightstick:b5,righttrigger:b9,start:b10,x:b0,y:b1,platform:Windows, +03000000fd0500002a26000000000000,InterAct Hammerhead FX,a:b3,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b0,y:b1,platform:Windows, +03000000fd0500002f26000000000000,InterAct Hammerhead FX,a:b4,b:b5,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b1,y:b2,platform:Windows, +03000000fd0500005302000000000000,InterAct ProPad,a:b3,b:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,x:b0,y:b1,platform:Windows, +03000000ac0500002c02000000000000,Ipega Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b13,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b14,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000491900000204000000000000,Ipega PG9023,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000491900000304000000000000,Ipega PG9087,+righty:+a5,-righty:-a4,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,start:b11,x:b3,y:b4,platform:Windows, +030000007e0500000620000000000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Windows, +030000007e0500000720000000000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Windows, +03000000250900000017000000000000,Joypad Adapter,a:b2,b:b1,back:b9,leftshoulder:b5,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b6,start:b8,x:b3,y:b0,platform:Windows, +03000000bd12000003c0000000000000,Joypad Alpha Shock,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000ff1100004033000000000000,JPD FFB,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a2,start:b15,x:b3,y:b0,platform:Windows, +03000000242f00002d00000000000000,JYS Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000242f00008a00000000000000,JYS Adapter,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b0,y:b3,platform:Windows, +03000000c4100000c082000000000000,KADE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000828200000180000000000000,Keio,a:b4,b:b5,back:b8,leftshoulder:b2,lefttrigger:b3,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b9,x:b0,y:b1,platform:Windows, +03000000790000000200000000000000,King PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows, +03000000bd12000001e0000000000000,Leadership,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +030000006f0e00000103000000000000,Logic3,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000006f0e00000104000000000000,Logic3,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000008f0e00001300000000000000,Logic3,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +030000006d040000d1ca000000000000,Logitech ChillStream,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006d040000d2ca000000000000,Logitech Cordless Precision,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006d04000011c2000000000000,Logitech Cordless Wingman,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b5,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b2,righttrigger:b7,rightx:a3,righty:a4,x:b4,platform:Windows, +030000006d04000016c2000000000000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006d0400001dc2000000000000,Logitech F310,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000006d04000018c2000000000000,Logitech F510,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006d0400001ec2000000000000,Logitech F510,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000006d04000019c2000000000000,Logitech F710,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006d0400001fc2000000000000,Logitech F710,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000006d0400001ac2000000000000,Logitech Precision,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +030000006d04000009c2000000000000,Logitech WingMan,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows, +030000006d0400000bc2000000000000,Logitech WingMan Action Pad,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b8,lefttrigger:a5~,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b5,righttrigger:a2~,start:b8,x:b3,y:b4,platform:Windows, +030000006d0400000ac2000000000000,Logitech WingMan RumblePad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,rightx:a3,righty:a4,x:b3,y:b4,platform:Windows, +03000000380700005645000000000000,Lynx,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000222200006000000000000000,Macally,a:b1,b:b2,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b33,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000380700003888000000000000,Mad Catz Arcade Fightstick TE S Plus PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000380700008532000000000000,Mad Catz Arcade Fightstick TE S PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000380700006352000000000000,Mad Catz CTRLR,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000380700006652000000000000,Mad Catz CTRLR,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows, +03000000380700005032000000000000,Mad Catz Fightpad Pro PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000380700005082000000000000,Mad Catz Fightpad Pro PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000380700008031000000000000,Mad Catz FightStick Alpha PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000003807000038b7000000000000,Mad Catz Fightstick TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,rightshoulder:b5,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows, +03000000380700008433000000000000,Mad Catz Fightstick TE S PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000380700008483000000000000,Mad Catz Fightstick TE S PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000380700008134000000000000,Mad Catz Fightstick TE2 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b7,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b4,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000380700008184000000000000,Mad Catz Fightstick TE2 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,leftstick:b10,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000380700006252000000000000,Mad Catz Micro CTRLR,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows, +03000000380700008232000000000000,Mad Catz PlayStation Brawlpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000380700008731000000000000,Mad Catz PlayStation Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000003807000056a8000000000000,Mad Catz PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000380700001888000000000000,Mad Catz SFIV Fightstick PS3,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b6,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000380700008081000000000000,Mad Catz SFV Arcade Fightstick Alpha PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000380700001847000000000000,Mad Catz Street Fighter 4 Xbox 360 FightStick,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,rightshoulder:b5,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows, +03000000380700008034000000000000,Mad Catz TE2 PS3 Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000380700008084000000000000,Mad Catz TE2 PS4 Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +030000002a0600001024000000000000,Matricom,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:Windows, +030000009f000000adbb000000000000,MaxJoypad Virtual Controller,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +03000000250900000128000000000000,Mayflash Arcade Stick,a:b1,b:b2,back:b8,leftshoulder:b0,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b3,righttrigger:b7,start:b9,x:b5,y:b6,platform:Windows, +030000008f0e00001330000000000000,Mayflash Controller Adapter,a:b1,b:b2,back:b8,dpdown:h0.8,dpleft:h0.2,dpright:h0.1,dpup:h0.4,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a3~,righty:a2,start:b9,x:b0,y:b3,platform:Windows, +03000000242f00003700000000000000,Mayflash F101,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +03000000790000003018000000000000,Mayflash F300 Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +03000000242f00003900000000000000,Mayflash F300 Elite Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000790000004418000000000000,Mayflash GameCube Controller,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Windows, +03000000790000004318000000000000,Mayflash GameCube Controller Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Windows, +03000000242f00007300000000000000,Mayflash Magic NS,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b0,y:b3,platform:Windows, +0300000079000000d218000000000000,Mayflash Magic NS,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000d620000010a7000000000000,Mayflash Magic NS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000242f0000f500000000000000,Mayflash N64 Adapter,a:b2,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a2,righty:a5,start:b9,platform:Windows, +03000000242f0000f400000000000000,Mayflash N64 Controller Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a2,righty:a5,start:b9,platform:Windows, +03000000790000007918000000000000,Mayflash N64 Controller Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b9,leftx:a0,lefty:a1,righttrigger:b7,rightx:a3,righty:a2,start:b8,platform:Windows, +030000008f0e00001030000000000000,Mayflash Saturn Adapter,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,lefttrigger:b7,rightshoulder:b6,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows, +0300000025090000e803000000000000,Mayflash Wii Classic Adapter,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:a4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:a5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows, +03000000790000000318000000000000,Mayflash Wii DolphinBar,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows, +03000000790000000018000000000000,Mayflash Wii U Pro Adapter,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000790000002418000000000000,Mega Drive Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,rightshoulder:b2,start:b9,x:b3,y:b4,platform:Windows, +0300000079000000ae18000000000000,Mega Drive Controller,a:b0,b:b1,back:b7,dpdown:b14,dpleft:b15,dpright:b13,dpup:b2,rightshoulder:b6,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows, +03000000c0160000990a000000000000,Mega Drive Controller,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,righttrigger:b2,start:b3,platform:Windows, +030000005e0400002800000000000000,Microsoft Dual Strike,a:b3,b:b2,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,rightshoulder:b7,rightx:a0,righty:a1~,start:b5,x:b1,y:b0,platform:Windows, +030000005e0400000300000000000000,Microsoft SideWinder,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows, +030000005e0400000700000000000000,Microsoft SideWinder,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows, +030000005e0400000e00000000000000,Microsoft SideWinder Freestyle Pro,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,start:b8,x:b3,y:b4,platform:Windows, +030000005e0400002700000000000000,Microsoft SideWinder Plug and Play,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,lefttrigger:b4,righttrigger:b5,x:b2,y:b3,platform:Windows, +03000000280d00000202000000000000,Miller Lite Cantroller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,start:b5,x:b2,y:b3,platform:Windows, +03000000ad1b000023f0000000000000,MLG,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a6,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, +03000000ad1b00003ef0000000000000,MLG Fightstick TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,rightshoulder:b5,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows, +03000000380700006382000000000000,MLG PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000004523000015e0000000000000,Mobapad Chitu HD,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000491900000904000000000000,Mobapad Chitu HD,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000ffff00000000000000000000,Mocute M053,a:b3,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b11,leftstick:b7,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b6,righttrigger:b4,rightx:a3,righty:a4,start:b8,x:b1,y:b0,platform:Windows, +03000000d6200000e589000000000000,Moga 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Windows, +03000000d62000007162000000000000,Moga Pro,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Windows, +03000000d6200000ad0d000000000000,Moga Pro,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000c62400002a89000000000000,Moga XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000c62400002b89000000000000,Moga XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000c62400001a89000000000000,Moga XP5X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000c62400001b89000000000000,Moga XP5X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000250900006688000000000000,MP-8866 Super Dual Box,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +03000000091200004488000000000000,MUSIA PlayStation 2 Input Display,a:b0,b:b2,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b6,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b7,righttrigger:b11,rightx:a2,righty:a3,start:b5,x:b1,y:b3,platform:Windows, +03000000f70600000100000000000000,N64 Adaptoid,+rightx:b2,+righty:b1,-rightx:b4,-righty:b5,a:b0,b:b3,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b7,start:b8,platform:Windows, +030000006b140000010c000000000000,Nacon GC 400ES,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000006b1400001106000000000000,Nacon Revolution 3 PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +0300000085320000170d000000000000,Nacon Revolution 5 Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +0300000085320000190d000000000000,Nacon Revolution 5 Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +030000006b140000100d000000000000,Nacon Revolution Infinity PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +030000006b140000080d000000000000,Nacon Revolution Unlimited Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000bd12000001c0000000000000,Nebular,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a5,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +03000000eb0300000000000000000000,NeGcon Adapter,a:a2,b:b13,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,lefttrigger:a4,leftx:a1,righttrigger:b11,start:b3,x:a3,y:b12,platform:Windows, +0300000038070000efbe000000000000,NEO SE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +0300000092120000474e000000000000,NeoGeo X Arcade Stick,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,x:b3,y:b2,platform:Windows, +03000000921200004b46000000000000,NES 2 port Adapter,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b11,platform:Windows, +03000000000f00000100000000000000,NES Controller,a:b1,b:b0,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b3,platform:Windows, +03000000921200004346000000000000,NES Controller,a:b0,b:b1,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b3,platform:Windows, +03000000790000004518000000000000,NEXILUX GameCube Controller Adapter,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows, +030000001008000001e5000000000000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Windows, +03000000050b00000045000000000000,Nexus,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,platform:Windows, +03000000152000000182000000000000,NGDS,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Windows, +03000000ec110000e1a7000000000000,Nintendo Switch,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000007e0500006920000000000000,Nintendo Switch 2 Pro Controller,a:b0,b:b1,back:b14,dpdown:b8,dpleft:b10,dpright:b9,dpup:b11,guide:b16,leftshoulder:b12,leftstick:b15,lefttrigger:b13,leftx:a0,lefty:a1~,misc1:b17,misc2:b20,paddle1:b18,paddle2:b19,rightshoulder:b4,rightstick:b7,righttrigger:b5,rightx:a2,righty:a3~,start:b6,x:b2,y:b3,platform:Windows, +030000007e0500000920000000000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000000d0500000308000000000000,Nostromo N45,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b12,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b2,y:b3,platform:Windows, +030000007e0500007320000000000000,NSO GameCube Controller,a:b1,b:b3,dpdown:b8,dpleft:b10,dpright:b9,dpup:b11,guide:b16,leftshoulder:b13,lefttrigger:b12,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b4,rightx:a2,righty:a3~,start:b6,x:b0,y:b2,platform:Windows, +030000007e0500001920000000000000,NSO N64 Controller,+rightx:b8,+righty:b2,-rightx:b3,-righty:b7,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,righttrigger:b10,start:b9,platform:Windows, +030000007e0500001720000000000000,NSO SNES Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b15,start:b9,x:b2,y:b3,platform:Windows, +03000000550900001472000000000000,NVIDIA Controller,a:b11,b:b10,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b7,leftstick:b5,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b4,righttrigger:a5,rightx:a3,righty:a6,start:b3,x:b9,y:b8,platform:Windows, +03000000550900001072000000000000,NVIDIA Shield,a:b9,b:b8,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b3,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b2,righttrigger:a4,rightx:a2,righty:a5,start:b0,x:b7,y:b6,platform:Windows, +030000005509000000b4000000000000,NVIDIA Virtual,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000120c00000288000000000000,Nyko Air Flo Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, +030000004b120000014d000000000000,NYKO Airflo EX,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Windows, +03000000d62000001d57000000000000,Nyko Airflo PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000791d00000900000000000000,Nyko Playpad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +03000000782300000a10000000000000,Onlive Controller,a:b15,b:b14,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b11,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b13,y:b12,platform:Windows, +030000000d0f00000401000000000000,Onyx,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000008916000001fd000000000000,Onza CE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a3,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000008916000000fd000000000000,Onza TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000d62000006d57000000000000,OPP PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006b14000001a1000000000000,Orange Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows, +0300000009120000072f000000000000,OrangeFox86 DreamPicoPort,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:-a2,leftx:a0,lefty:a1,righttrigger:-a5,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000362800000100000000000000,OUYA Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,platform:Windows, +03000000120c0000f60e000000000000,P4 Gamepad,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b7,rightshoulder:b4,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows, +03000000790000002201000000000000,PC Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +030000006f0e00008501000000000000,PDP Fightpad Pro GameCube Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000006f0e00000901000000000000,PDP PS3 Versus Fighting,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00008901000000000000,PDP Realmz Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000008f0e00004100000000000000,PlaySega,a:b1,b:b0,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b2,start:b8,x:b4,y:b3,platform:Windows, +03000000d620000011a7000000000000,PowerA Core Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000dd62000015a7000000000000,PowerA Fusion Nintendo Switch Arcade Stick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000d620000012a7000000000000,PowerA Fusion Nintendo Switch Fight Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000dd62000016a7000000000000,PowerA Fusion Pro Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000d620000013a7000000000000,PowerA Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000d62000003340000000000000,PowerA OPS Pro Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000d62000002640000000000000,PowerA OPS Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000d62000006dca000000000000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +0300000062060000d570000000000000,PowerA PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000d620000014a7000000000000,PowerA Spectra Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006d04000084ca000000000000,Precision,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, +03000000d62000009557000000000000,Pro Elite PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000c62400001a53000000000000,Pro Ex Mini,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000d62000009f31000000000000,Pro Ex mini PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000d6200000c757000000000000,Pro Ex mini PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000120c0000110e000000000000,Pro5,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000100800000100000000000000,PS1 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +030000008f0e00007530000000000000,PS1 Controller,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b1,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000100800000300000000000000,PS2 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a4,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +03000000250900000088000000000000,PS2 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +03000000250900006888000000000000,PS2 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b6,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +03000000250900008888000000000000,PS2 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +030000006b1400000303000000000000,PS2 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000009d0d00001330000000000000,PS2 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000151a00006222000000000000,PS2 Dual Plus Adapter,a:b2,b:b1,back:b9,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +03000000120a00000100000000000000,PS3 Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +03000000120c00001307000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000120c00001cf1000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000120c0000f90e000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000250900000118000000000000,PS3 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +03000000250900000500000000000000,PS3 Controller,a:b2,b:b1,back:b9,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b0,y:b3,platform:Windows, +030000004c0500006802000000000000,PS3 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b10,lefttrigger:a3~,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:a4~,rightx:a2,righty:a5,start:b8,x:b3,y:b0,platform:Windows, +030000004f1f00000800000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +03000000632500007505000000000000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000888800000803000000000000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b9,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b0,platform:Windows, +03000000888800000804000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Windows, +030000008f0e00000300000000000000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows, +030000008f0e00001431000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000ba2200002010000000000000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a5,righty:a2,start:b9,x:b3,y:b2,platform:Windows, +03000000120c00000807000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000120c0000111e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000120c0000121e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000120c0000130e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000120c0000150e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000120c0000180e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000120c0000181e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000120c0000191e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000120c00001e0e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000120c0000a957000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000120c0000aa57000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000120c0000f21c000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000120c0000f31c000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000120c0000f41c000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000120c0000f51c000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000120c0000f70e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000120e0000120c000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000160e0000120c000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +030000001a1e0000120c000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +030000004c050000a00b000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +030000004c050000c405000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +030000004c050000cc09000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +030000004c0500005f0e000000000000,PS5 Access Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b14,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +030000004c050000e60c000000000000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b14,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +030000004c050000f20d000000000000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b14,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000830500005020000000000000,PSX,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b2,y:b3,platform:Windows, +03000000300f00000111000000000000,Qanba 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000300f00000211000000000000,Qanba 2P,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000300f00000011000000000000,Qanba Arcade Stick 1008,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b10,x:b0,y:b3,platform:Windows, +03000000300f00001611000000000000,Qanba Arcade Stick 4018,a:b1,b:b2,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b8,x:b0,y:b3,platform:Windows, +03000000222c00000025000000000000,Qanba Dragon Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000222c00000020000000000000,Qanba Drone Arcade Stick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,rightshoulder:b5,righttrigger:a4,start:b9,x:b0,y:b3,platform:Windows, +03000000300f00001211000000000000,Qanba Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000300f00001210000000000000,Qanba Joystick Plus,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Windows, +03000000341a00000104000000000000,Qanba Joystick Q4RAF,a:b5,b:b6,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b0,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b3,righttrigger:b7,start:b9,x:b1,y:b2,platform:Windows, +03000000222c00000223000000000000,Qanba Obsidian Arcade Stick PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000222c00000023000000000000,Qanba Obsidian Arcade Stick PS4,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +030000008a2400006682000000000000,R1 Mobile Controller,a:b3,b:b1,back:b7,leftx:a0,lefty:a1,start:b6,x:b4,y:b0,platform:Windows, +03000000086700006626000000000000,RadioShack,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows, +03000000ff1100004733000000000000,Ramox FPS Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b0,platform:Windows, +030000009b2800002300000000000000,Raphnet 3DO Adapter,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b2,start:b3,platform:Windows, +030000009b2800006900000000000000,Raphnet 3DO Adapter,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b2,start:b3,platform:Windows, +030000009b2800000800000000000000,Raphnet Dreamcast Adapter,a:b2,b:b1,dpdown:b5,dpleft:b6,dpright:b7,dpup:b4,lefttrigger:a2,leftx:a0,righttrigger:a3,righty:a1,start:b3,x:b10,y:b9,platform:Windows, +030000009b280000d000000000000000,Raphnet Dreamcast Adapter,a:b1,b:b0,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,lefttrigger:+a5,leftx:a0,lefty:a1,righttrigger:+a2,start:b3,x:b5,y:b4,platform:Windows, +030000009b2800006200000000000000,Raphnet GameCube Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Windows, +030000009b2800003200000000000000,Raphnet GC and N64 Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:+a2,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Windows, +030000009b2800006000000000000000,Raphnet GC and N64 Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:+a2,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Windows, +030000009b2800001800000000000000,Raphnet Jaguar Adapter,a:b2,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b0,righttrigger:b10,start:b3,x:b11,y:b12,platform:Windows, +030000009b2800003c00000000000000,Raphnet N64 Adapter,+rightx:b9,+righty:b7,-rightx:b8,-righty:b6,a:b0,b:b1,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Windows, +030000009b2800006100000000000000,Raphnet N64 Adapter,+rightx:b9,+righty:b7,-rightx:b8,-righty:b6,a:b0,b:b1,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Windows, +030000009b2800006300000000000000,Raphnet N64 Adapter,+rightx:b9,+righty:b7,-rightx:b8,-righty:b6,a:b0,b:b1,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Windows, +030000009b2800006400000000000000,Raphnet N64 Adapter,+rightx:b9,+righty:b7,-rightx:b8,-righty:b6,a:b0,b:b1,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Windows, +030000009b2800000200000000000000,Raphnet NES Adapter,a:b7,b:b6,back:b5,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,start:b4,platform:Windows, +030000009b2800004400000000000000,Raphnet PS1 and PS2 Adapter,a:b1,b:b2,back:b5,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b9,rightx:a3,righty:a4,start:b4,x:b0,y:b3,platform:Windows, +030000009b2800004300000000000000,Raphnet Saturn,a:b0,b:b1,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows, +030000009b2800000500000000000000,Raphnet Saturn Adapter 2.0,a:b1,b:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows, +030000009b2800000300000000000000,Raphnet SNES Adapter,a:b0,b:b4,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows, +030000009b2800002600000000000000,Raphnet SNES Adapter,a:b1,b:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Windows, +030000009b2800002e00000000000000,Raphnet SNES Adapter,a:b1,b:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Windows, +030000009b2800002f00000000000000,Raphnet SNES Adapter,a:b1,b:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Windows, +030000009b2800005600000000000000,Raphnet SNES Adapter,a:b1,b:b4,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Windows, +030000009b2800005700000000000000,Raphnet SNES Adapter,a:b1,b:b4,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Windows, +030000009b2800001e00000000000000,Raphnet Vectrex Adapter,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a1,lefty:a2,x:b2,y:b3,platform:Windows, +030000009b2800002b00000000000000,Raphnet Wii Classic Adapter,a:b1,b:b4,back:b2,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,guide:b10,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a4,start:b3,x:b0,y:b5,platform:Windows, +030000009b2800002c00000000000000,Raphnet Wii Classic Adapter,a:b1,b:b4,back:b2,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,guide:b10,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a4,start:b3,x:b0,y:b5,platform:Windows, +030000009b2800008000000000000000,Raphnet Wii Classic Adapter,a:b1,b:b4,back:b2,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,guide:b10,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a4,start:b3,x:b0,y:b5,platform:Windows, +03000000790000008f18000000000000,Rapoo Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows, +0300000032150000a602000000000000,Razer Huntsman V3 Pro,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b12,dpright:b13,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000321500000003000000000000,Razer Hydra,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000f8270000bf0b000000000000,Razer Kishi,a:b6,b:b7,back:b16,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b18,leftshoulder:b12,leftstick:b19,lefttrigger:b14,leftx:a0,lefty:a1,rightshoulder:b13,rightstick:b20,righttrigger:b15,rightx:a3,righty:a4,start:b17,x:b9,y:b10,platform:Windows, +03000000321500000204000000000000,Razer Panthera PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000321500000104000000000000,Razer Panthera PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000321500000010000000000000,Razer Raiju,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000321500000507000000000000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000321500000707000000000000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000321500000710000000000000,Razer Raiju TE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000321500000a10000000000000,Razer Raiju TE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000321500000410000000000000,Razer Raiju UE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000321500000910000000000000,Razer Raiju UE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000321500000011000000000000,Razer Raion PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000321500000009000000000000,Razer Serval,+lefty:+a2,-lefty:-a1,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,leftx:a0,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000921200004547000000000000,Retro Bit Sega Genesis Controller Adapter,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,lefttrigger:b7,rightshoulder:b5,righttrigger:b2,start:b6,x:b3,y:b4,platform:Windows, +03000000790000001100000000000000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows, +03000000830500006020000000000000,Retro Controller,a:b0,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b8,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows, +03000000632500007805000000000000,Retro Fighters Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +0300000003040000c197000000000000,Retrode Adapter,a:b0,b:b4,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows, +03000000bd12000013d0000000000000,Retrolink Sega Saturn Classic Controller,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b5,lefttrigger:b6,rightshoulder:b2,righttrigger:b7,start:b8,x:b3,y:b4,platform:Windows, +03000000bd12000015d0000000000000,Retrolink SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Windows, +03000000341200000400000000000000,RetroUSB N64 RetroPort,+rightx:b8,+righty:b10,-rightx:b9,-righty:b11,a:b7,b:b6,dpdown:b2,dpleft:b1,dpright:b0,dpup:b3,leftshoulder:b13,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b12,start:b4,platform:Windows, +0300000000f000000300000000000000,RetroUSB RetroPad,a:b1,b:b5,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Windows, +0300000000f00000f100000000000000,RetroUSB Super RetroPort,a:b1,b:b5,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Windows, +03000000830500000960000000000000,Revenger,a:b0,b:b1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b3,x:b4,y:b5,platform:Windows, +030000006b140000010d000000000000,Revolution Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000006b140000020d000000000000,Revolution Pro Controller 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000006b140000130d000000000000,Revolution Pro Controller 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00001f01000000000000,Rock Candy,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000006f0e00004601000000000000,Rock Candy,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000c6240000fefa000000000000,Rock Candy Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000006f0e00008701000000000000,Rock Candy Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00001e01000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00002801000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00002f01000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000830500007030000000000000,Rockfire Space Ranger,a:b0,b:b1,back:b5,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b9,righttrigger:b8,start:b2,x:b3,y:b4,platform:Windows, +03000000050b0000e318000000000000,ROG Chakram,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows, +03000000050b0000e518000000000000,ROG Chakram,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows, +03000000050b00005819000000000000,ROG Chakram Core,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows, +03000000050b0000181a000000000000,ROG Chakram X,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows, +03000000050b00001a1a000000000000,ROG Chakram X,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows, +03000000050b00001c1a000000000000,ROG Chakram X,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows, +030000004f04000001d0000000000000,Rumble Force,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows, +030000000d0f0000ad00000000000000,RX Gamepad,a:b0,b:b4,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,rightshoulder:b6,start:b9,x:b2,y:b1,platform:Windows, +030000008916000000fe000000000000,Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000c6240000045d000000000000,Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000006f0e00001311000000000000,Saffun Controller,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b0,platform:Windows, +03000000a30600001af5000000000000,Saitek Cyborg,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows, +03000000a306000023f6000000000000,Saitek Cyborg,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows, +03000000300f00001201000000000000,Saitek Dual Analog,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows, +03000000a30600000701000000000000,Saitek P220,a:b2,b:b3,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,x:b0,y:b1,platform:Windows, +03000000a30600000cff000000000000,Saitek P2500 Force Rumble,a:b2,b:b3,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b0,y:b1,platform:Windows, +03000000a30600000d5f000000000000,Saitek P2600,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b8,x:b0,y:b3,platform:Windows, +03000000a30600000dff000000000000,Saitek P2600,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a5,righty:a2,start:b8,x:b0,y:b3,platform:Windows, +03000000a30600000c04000000000000,Saitek P2900,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows, +03000000a306000018f5000000000000,Saitek P3200,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows, +03000000300f00001001000000000000,Saitek P480 Rumble,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows, +03000000a30600000901000000000000,Saitek P880,a:b2,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b8,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b5,rightx:a3,righty:a2,x:b0,y:b1,platform:Windows, +03000000a30600000b04000000000000,Saitek P990,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows, +03000000a30600002106000000000000,Saitek PS1000 PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows, +03000000a306000020f6000000000000,Saitek PS2700 PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows, +03000000300f00001101000000000000,Saitek Rumble,a:b2,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows, +03000000e804000000a0000000000000,Samsung EIGP20,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000c01100000252000000000000,Sanwa Easy Grip,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows, +03000000c01100004350000000000000,Sanwa Micro Grip P3,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,x:b3,y:b2,platform:Windows, +03000000411200004550000000000000,Sanwa Micro Grip Pro,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a1,righty:a2,start:b9,x:b1,y:b3,platform:Windows, +03000000c01100004150000000000000,Sanwa Micro Grip Pro,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows, +03000000c01100004450000000000000,Sanwa Online Grip,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b8,rightstick:b11,righttrigger:b9,rightx:a3,righty:a2,start:b14,x:b3,y:b4,platform:Windows, +03000000730700000401000000000000,Sanwa PlayOnline Mobile,a:b0,b:b1,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b3,platform:Windows, +030000009d0d00001130000000000000,Sanwa PlayStation Adapter,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000830500006120000000000000,Sanwa Smart Grip II,a:b0,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,x:b1,y:b3,platform:Windows, +03000000c01100000051000000000000,Satechi Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +030000004f04000028b3000000000000,Score A,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000952e00002577000000000000,Scuf PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000a30c00002500000000000000,Sega Genesis Mini 3B Controller,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,righttrigger:b5,start:b9,platform:Windows, +03000000a30c00002400000000000000,Sega Mega Drive Mini 6B Controller,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows, +03000000d804000086e6000000000000,Sega Multi Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:a2,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows, +0300000000050000289b000000000000,Sega Saturn Adapter,a:b1,b:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows, +0300000000f000000800000000000000,Sega Saturn Controller,a:b1,b:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,rightshoulder:b7,righttrigger:b3,start:b0,x:b5,y:b6,platform:Windows, +03000000730700000601000000000000,Sega Saturn Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows, +03000000b40400000a01000000000000,Sega Saturn Controller,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows, +030000003b07000004a1000000000000,SFX,a:b0,b:b2,back:b7,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b5,start:b8,x:b1,y:b3,platform:Windows, +03000000632500002705000000000000,ShanWan Q36,a:b0,b:b1,x:b3,y:b4,leftshoulder:b6,rightshoulder:b7,lefttrigger:b8,righttrigger:b9,back:b10,start:b11,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,platform:Windows, +03000000f82100001900000000000000,Shogun Bros Chameleon X1,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +03000000120c00001c1e000000000000,SnakeByte 4S PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000140300000918000000000000,SNES Controller,a:b0,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows, +0300000081170000960a000000000000,SNES Controller,a:b4,b:b0,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b5,y:b1,platform:Windows, +03000000811700009d0a000000000000,SNES Controller,a:b0,b:b4,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows, +030000008b2800000300000000000000,SNES Controller,a:b0,b:b4,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows, +03000000921200004653000000000000,SNES Controller,a:b0,b:b4,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows, +030000008f0e00000910000000000000,Sony DualShock 2,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a2,start:b11,x:b3,y:b0,platform:Windows, +03000000317300000100000000000000,Sony DualShock 3,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +03000000666600006706000000000000,Sony PlayStation Adapter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a2,righty:a3,start:b11,x:b3,y:b0,platform:Windows, +03000000e30500009605000000000000,Sony PlayStation Adapter,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +03000000fe1400002a23000000000000,Sony PlayStation Adapter,a:b0,b:b1,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,x:b2,y:b3,platform:Windows, +030000004c050000da0c000000000000,Sony PlayStation Classic Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows, +03000000632500002306000000000000,Sony PlayStation Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Windows, +03000000f0250000c183000000000000,Sony PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000d9040000160f000000000000,Sony PlayStation Controller Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +03000000ff000000cb01000000000000,Sony PlayStation Portable,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows, +030000004c0500003713000000000000,Sony PlayStation Vita,a:b1,b:b2,back:b8,dpdown:b13,dpleft:b15,dpright:b14,dpup:b12,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows, +03000000341a00000208000000000000,Speedlink 6555,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:-a4,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a3,righty:a2,start:b7,x:b2,y:b3,platform:Windows, +03000000341a00000908000000000000,Speedlink 6566,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000380700001722000000000000,Speedlink Competition Pro,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,x:b2,y:b3,platform:Windows, +030000008f0e00000800000000000000,Speedlink Strike FX,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000c01100000591000000000000,Speedlink Torid,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000de280000fc11000000000000,Steam Virtual Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000de280000ff11000000000000,Steam Virtual Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000120c0000160e000000000000,Steel Play Metaltech PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000110100001914000000000000,SteelSeries,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftstick:b13,lefttrigger:b6,leftx:a0,lefty:a1,rightstick:b14,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000381000001214000000000000,SteelSeries Free,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Windows, +03000000110100003114000000000000,SteelSeries Stratus Duo,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000381000003014000000000000,SteelSeries Stratus Duo,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000381000003114000000000000,SteelSeries Stratus Duo,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000381000001814000000000000,SteelSeries Stratus XL,a:b0,b:b1,back:b18,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,guide:b19,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b2,y:b3,platform:Windows, +03000000380700003847000000000000,Street Fighter Fightstick TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b11,start:b7,x:b2,y:b3,platform:Windows, +030000001f08000001e4000000000000,Super Famicom Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Windows, +03000000790000000418000000000000,Super Famicom Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b33,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows, +03000000341200001300000000000000,Super Racer,a:b2,b:b3,back:b8,leftshoulder:b5,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b7,x:b0,y:b1,platform:Windows, +03000000457500002211000000000000,Szmy Power PC Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000004f0400000ab1000000000000,T16000M,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b4,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b10,x:b2,y:b3,platform:Windows, +030000000d0f00007b00000000000000,TAC GEAR,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000e40a00000307000000000000,Taito Egret II Mini Control Panel,a:b4,b:b2,back:b6,guide:b9,leftx:a0,lefty:a1,rightshoulder:b0,righttrigger:b1,start:b7,x:b8,y:b3,platform:Windows, +03000000e40a00000207000000000000,Taito Egret II Mini Controller,a:b4,b:b2,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,guide:b9,rightshoulder:b0,righttrigger:b1,start:b7,x:b8,y:b3,platform:Windows, +03000000d814000001a0000000000000,TE Kitty,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000fa1900000706000000000000,Team 5,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000b50700001203000000000000,Techmobility X6-38V,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows, +03000000ba2200000701000000000000,Technology Innovation PS2 Adapter,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b2,platform:Windows, +03000000c61100001000000000000000,Tencent Xianyou Gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,x:b3,y:b4,platform:Windows, +03000000790000001c18000000000000,TGZ Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000790000002601000000000000,TGZ Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows, +03000000591c00002400000000000000,THEC64 Joystick,a:b0,b:b1,back:b6,leftshoulder:b4,leftx:a0,lefty:a4,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows, +03000000591c00002600000000000000,THEGamepad,a:b2,b:b1,back:b6,leftx:a0,lefty:a1,start:b7,x:b3,y:b0,platform:Windows, +030000004f04000015b3000000000000,Thrustmaster Dual Analog 4,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows, +030000004f04000023b3000000000000,Thrustmaster Dual Trigger PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000004f0400000ed0000000000000,Thrustmaster eSwap Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000004f04000008d0000000000000,Thrustmaster Ferrari 150 PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000004f04000000b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b11,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b1,y:b3,platform:Windows, +030000004f04000004b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows, +030000004f04000003d0000000000000,Thrustmaster Run N Drive PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b7,leftshoulder:a3,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:a4,rightstick:b11,righttrigger:b5,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000004f04000009d0000000000000,Thrustmaster Run N Drive PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006d04000088ca000000000000,Thunderpad,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, +03000000666600000288000000000000,TigerGame PlayStation Adapter,a:b2,b:b1,back:b9,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +03000000666600000488000000000000,TigerGame PlayStation Adapter,a:b2,b:b1,back:b9,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +030000004f04000007d0000000000000,TMini,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000571d00002100000000000000,Tomee NES Controller Adapter,a:b1,b:b0,back:b2,dpdown:+a4,dpleft:-a0,dpright:+a0,dpup:-a4,start:b3,platform:Windows, +03000000571d00002000000000000000,Tomee SNES Controller Adapter,a:b0,b:b1,back:b6,dpdown:+a4,dpleft:-a0,dpright:+a0,dpup:-a4,leftshoulder:b4,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows, +03000000d62000006000000000000000,Tournament PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000c01100000055000000000000,Tronsmart,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +030000005f140000c501000000000000,Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000b80500000210000000000000,Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +030000004f04000087b6000000000000,TWCS Throttle,dpdown:b8,dpleft:b9,dpright:b7,dpup:b6,leftstick:b5,lefttrigger:-a5,leftx:a0,lefty:a1,righttrigger:+a5,platform:Windows, +03000000411200000450000000000000,Twin Shock,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a4,start:b11,x:b3,y:b0,platform:Windows, +03000000d90400000200000000000000,TwinShock PS2 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +03000000151900005678000000000000,Uniplay U6,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000101c0000171c000000000000,uRage Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +030000000b0400003065000000000000,USB Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows, +03000000242f00006e00000000000000,USB Controller,a:b1,b:b4,back:b10,leftshoulder:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b7,rightx:a2,righty:a5,start:b11,x:b0,y:b3,platform:Windows, +03000000300f00000701000000000000,USB Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +03000000341a00002308000000000000,USB Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000666600000188000000000000,USB Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +030000006b1400000203000000000000,USB Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000790000000a00000000000000,USB Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows, +03000000b404000081c6000000000000,USB Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows, +03000000b50700001503000000000000,USB Controller,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a5,righty:a2,start:b9,x:b0,y:b1,platform:Windows, +03000000bd12000012d0000000000000,USB Controller,a:b0,b:b1,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows, +03000000ff1100004133000000000000,USB Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a4,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +03000000632500002305000000000000,USB Vibration Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000882800000305000000000000,V5 Game Pad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,x:b2,y:b3,platform:Windows, +03000000790000001a18000000000000,Venom PS4 Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000790000001b18000000000000,Venom PS4 Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00000302000000000000,Victrix PS4 Pro Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +030000006f0e00000702000000000000,Victrix PS4 Pro Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +0300000034120000adbe000000000000,vJoy Device,a:b0,b:b1,back:b15,dpdown:b6,dpleft:b7,dpright:b8,dpup:b5,guide:b16,leftshoulder:b9,leftstick:b13,lefttrigger:b11,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b14,righttrigger:b12,rightx:a3,righty:a4,start:b4,x:b2,y:b3,platform:Windows, +03000000120c0000ab57000000000000,Warrior Joypad JS083,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000007e0500003003000000000000,Wii U Pro,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,leftshoulder:b6,leftstick:b11,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b12,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows, +0300000032150000030a000000000000,Wildcat,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +0300000032150000140a000000000000,Wolverine,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000002e160000efbe000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b10,rightshoulder:b5,righttrigger:b11,start:b7,x:b2,y:b3,platform:Windows, +03000000380700001647000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000380700002045000000000000,Xbox 360 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000380700002644000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a2,righty:a5,start:b8,x:b2,y:b3,platform:Windows, +03000000380700002647000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000003807000026b7000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000380700003647000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a7,righty:a5,start:b7,x:b2,y:b3,platform:Windows, +030000005e0400001907000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e0400008e02000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e0400009102000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000ad1b000000fd000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000ad1b000001fd000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000ad1b000016f0000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000ad1b00008e02000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000c62400000053000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000c6240000fdfa000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000380700002847000000000000,Xbox 360 Fightpad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e040000a102000000000000,Xbox 360 Wireless Receiver,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e0400000a0b000000000000,Xbox Adaptive Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000120c00000a88000000000000,Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a2,righty:a4,start:b6,x:b2,y:b3,platform:Windows, +03000000120c00001088000000000000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2~,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5~,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000002a0600002000000000000000,Xbox Controller,a:b0,b:b1,back:b13,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,leftshoulder:b5,leftstick:b14,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b15,righttrigger:b7,rightx:a2,righty:a5,start:b12,x:b2,y:b3,platform:Windows, +03000000380700001645000000000000,Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, +03000000380700002645000000000000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000380700003645000000000000,Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, +03000000380700008645000000000000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e0400000202000000000000,Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, +030000005e0400008502000000000000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e0400008702000000000000,Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b7,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, +030000005e0400008902000000000000,Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b10,leftstick:b8,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b9,righttrigger:b4,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, +030000005e0400000c0b000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e040000d102000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e040000dd02000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e040000e002000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e040000e302000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e040000ea02000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e040000fd02000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e040000ff02000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000006f0e0000a802000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000006f0e0000c802000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000c62400003a54000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e040000130b000000000000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000341a00000608000000000000,Xeox,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000450c00002043000000000000,Xeox SL6556BK,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000006f0e00000300000000000000,XGear,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a5,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +03000000e0ff00000201000000000000,Xiaomi Black Shark (L),back:b0,dpdown:b11,dpleft:b9,dpright:b10,dpup:b8,leftshoulder:b5,lefttrigger:b7,leftx:a0,lefty:a1,platform:Windows, +03000000172700004431000000000000,Xiaomi Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a7,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +03000000172700003350000000000000,Xiaomi XMGP01YM,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000bc2000005060000000000000,Xiaomi XMGP01YM,+lefty:+a2,+righty:+a5,-lefty:-a1,-righty:-a4,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,start:b11,x:b3,y:b4,platform:Windows, +03000000c0160000e105000000000000,XinMo Dual Arcade,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000007d0400000340000000000000,Xterminator Digital Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:-a4,lefttrigger:+a4,leftx:a0,lefty:a1,paddle1:b7,paddle2:b6,rightshoulder:b5,rightstick:b9,righttrigger:b2,rightx:a3,righty:a5,start:b8,x:b3,y:b4,platform:Windows, +030000002c3600000100000000000000,Yawman Arrow,+rightx:h0.2,+righty:h0.4,-rightx:h0.8,-righty:h0.1,a:b4,b:b5,back:b6,dpdown:b15,dpleft:b14,dpright:b16,dpup:b13,leftshoulder:b10,leftstick:b0,lefttrigger:-a4,leftx:a0,lefty:a1,paddle1:b11,paddle2:b12,rightshoulder:b8,rightstick:b9,righttrigger:+a4,start:b3,x:b1,y:b2,platform:Windows, +03000000790000004f18000000000000,ZDT Android Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000073500000400000000000000,Zenaim Arcade Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +03000000120c00000500000000000000,Zeroplus Adapter,a:b2,b:b1,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b0,righttrigger:b5,rightx:a3,righty:a2,start:b8,x:b3,y:b0,platform:Windows, +03000000120c0000101e000000000000,Zeroplus P4 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, + +# Mac OS X +030000008f0e00000300000009010000,2 In 1 Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, +03000000c82d00001930000000000000,8BitDo 64,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,platform:Mac OS X, +03000000c82d00001930000000020000,8BitDo 64,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,platform:Mac OS X, +03000000c82d00001930000001000000,8BitDo 64,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,platform:Mac OS X, +03000000c82d00000031000001000000,8BitDo Adapter,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00000531000000020000,8BitDo Adapter 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00000951000000010000,8BitDo Dogbone,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b11,platform:Mac OS X, +03000000c82d00000090000001000000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00001038000000010000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00006a28000000010000,8BitDo GameCube,a:b0,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b9,paddle2:b8,rightshoulder:b10,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b1,y:b4,platform:Mac OS X, +03000000c82d00001251000000010000,8BitDo Lite 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00001251000000020000,8BitDo Lite 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00001151000000010000,8BitDo Lite SE,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00001151000000020000,8BitDo Lite SE,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000a30c00002400000006020000,8BitDo M30,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,guide:b9,leftshoulder:b6,lefttrigger:b5,rightshoulder:b4,righttrigger:b7,start:b8,x:b3,y:b0,platform:Mac OS X, +03000000c82d00000151000000010000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00000650000001000000,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00005106000000010000,8BitDo M30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,guide:b2,leftshoulder:b6,lefttrigger:a5,rightshoulder:b7,righttrigger:a4,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00002090000000010000,8BitDo Micro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00000451000000010000,8BitDo N30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b11,platform:Mac OS X, +03000000c82d00001590000001000000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00006528000000010000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00006928000000010000,8BitDo N64,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,platform:Mac OS X, +03000000c82d00002590000000010000,8BitDo NEOGEO,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00002590000001000000,8BitDo NEOGEO,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00002690000000010000,8BitDo NEOGEO,+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b10,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X, +030000003512000012ab000001000000,8BitDo NES30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d000012ab000001000000,8BitDo NES30,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00002028000000010000,8BitDo NES30,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000022000000090000001000000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000203800000900000000010000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00000190000001000000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00000751000000010000,8BitDo P30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00000851000000010000,8BitDo P30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00000660000000010000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00000660000000020000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00000131000001000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00000231000001000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00000331000001000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00000431000001000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00002867000000010000,8BitDo S30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b3,y:b4,platform:Mac OS X, +03000000c82d00003028000000010000,8Bitdo SFC30 Gamepad,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000102800000900000000000000,8BitDo SFC30 Joystick,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00000351000000010000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00001290000001000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00004028000000010000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00000160000001000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00000161000000010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00000260000001000000,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00000261000000010000,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00001230000000010000,8BitDo Ultimate,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b2,paddle2:b5,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00001b30000001000000,8BitDo Ultimate 2C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b5,paddle2:b2,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00001d30000001000000,8BitDo Ultimate 2C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b5,paddle2:b2,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00001c30000001000000,8BitDo Ultimate 2C Wireless Controller,a:b0,b:b1,x:b3,y:b4,back:b10,guide:b12,start:b11,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4,platform:Mac OS X, +03000000c82d00001530000001000000,8BitDo Ultimate C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00001630000001000000,8BitDo Ultimate C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00001730000001000000,8BitDo Ultimate C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00001130000000020000,8BitDo Ultimate Wired,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b26,paddle1:b24,paddle2:b25,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00001330000000020000,8BitDo Ultimate Wireless,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b26,paddle1:b23,paddle2:b19,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00001330000001000000,8BitDo Ultimate Wireless,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b26,paddle1:b23,paddle2:b19,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000a00500003232000008010000,8BitDo Zero,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000a00500003232000009010000,8BitDo Zero,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00001890000001000000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00003032000000010000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a31,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000491900001904000001010000,Amazon Luna Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Mac OS X, +03000000710100001904000000010000,Amazon Luna Controller,a:b0,b:b1,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Mac OS X, +0300000008100000e501000019040000,Anbernic Handheld,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a4,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000373500004610000001000000,Anbernic RG P01,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000a30c00002700000003030000,Astro City Mini,a:b2,b:b1,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Mac OS X, +03000000a30c00002800000003030000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a3,lefty:a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Mac OS X, +03000000050b00000045000031000000,ASUS Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X, +03000000050b00000579000000010000,ASUS ROG Kunai 3,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b14,leftshoulder:b6,leftstick:b15,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b42,paddle1:b9,paddle2:b11,rightshoulder:b7,rightstick:b16,righttrigger:a4,rightx:a2,righty:a3,start:b13,x:b3,y:b4,platform:Mac OS X, +03000000050b00000679000000010000,ASUS ROG Kunai 3,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b14,leftshoulder:b6,leftstick:b15,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b23,rightshoulder:b7,rightstick:b16,righttrigger:a4,rightx:a2,righty:a3,start:b13,x:b3,y:b4,platform:Mac OS X, +03000000503200000110000045010000,Atari VCS Classic,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b3,start:b2,platform:Mac OS X, +03000000503200000110000047010000,Atari VCS Classic Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b3,start:b2,platform:Mac OS X, +03000000503200000210000047010000,Atari VCS Modern Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a4,rightx:a2,righty:a3,start:b8,x:b2,y:b3,platform:Mac OS X, +030000008a3500000102000000010000,Backbone One,a:b0,b:b1,back:b16,dpdown:b11,dpleft:b13,dpright:b12,dpup:b10,guide:b17,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3~,start:b15,x:b2,y:b3,platform:Mac OS X, +030000008a3500000201000000010000,Backbone One,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000008a3500000202000000010000,Backbone One,a:b0,b:b1,back:b16,dpdown:b11,dpleft:b13,dpright:b12,dpup:b10,guide:b17,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3~,start:b15,x:b2,y:b3,platform:Mac OS X, +030000008a3500000402000000010000,Backbone One,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000008a3500000302000000010000,Backbone One PlayStation Edition,a:b0,b:b1,back:b16,dpdown:b11,dpleft:b13,dpright:b12,dpup:b10,guide:b17,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3~,start:b15,x:b2,y:b3,platform:Mac OS X, +03000000c62400001a89000000010000,BDA MOGA XP5-X Plus,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b14,leftshoulder:b6,leftstick:b15,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b16,righttrigger:a4,rightx:a2,righty:a3,start:b13,x:b3,y:b4,platform:Mac OS X, +03000000c62400001b89000000010000,BDA MOGA XP5-X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000d62000002a79000000010000,BDA PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +03000000120c0000200e000000010000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +03000000120c0000210e000000010000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +030000008305000031b0000000000000,Cideko AK08b,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000d8140000cecf000000000000,Cthulhu,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000260900008888000088020000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a5,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Mac OS X, +03000000a306000022f6000001030000,Cyborg V3 Rumble Pad PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000791d00000103000009010000,Dual Box Wii Classic Adapter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b10,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, +030000006e0500000720000010020000,Elecom JC-W01U,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Mac OS X, +030000006f0e00008401000003010000,Faceoff Deluxe Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b13,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000151900004000000001000000,Flydigi Vader 2,a:b14,b:b15,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b12,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b2,paddle2:b5,paddle3:b16,paddle4:b17,rightshoulder:b7,rightstick:b13,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Mac OS X, +03000000b40400001124000001040000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b12,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b14,paddle1:b2,paddle2:b5,paddle3:b16,paddle4:b17,rightshoulder:b7,rightstick:b13,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000b40400001224000003030000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b12,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b2,paddle1:b16,paddle2:b17,paddle3:b14,paddle4:b15,rightshoulder:b7,rightstick:b13,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000790000004618000000010000,GameCube Controller Adapter,a:b4,b:b0,dpdown:b56,dpleft:b60,dpright:b52,dpup:b48,lefttrigger:a12,leftx:a0,lefty:a4,rightshoulder:b28,righttrigger:a16,rightx:a20,righty:a8,start:b36,x:b8,y:b12,platform:Mac OS X, +03000000ac0500001a06000002020000,GameSir T3 2.02,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000373500000411000023000000,GameSir X4A Xbox Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000ad1b000001f9000000000000,Gamestop BB070 X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X, +03000000c01100000140000000010000,GameStop PS4 Fun Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +030000006f0e00000102000000000000,GameStop Xbox 360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +03000000ff1100003133000007010000,GameWare PC Control Pad,a:b2,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b0,platform:Mac OS X, +03000000d11800000094000000010000,Google Stadia Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Mac OS X, +030000007d0400000540000001010000,Gravis Eliminator Pro,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000280400000140000000020000,Gravis GamePad Pro,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X, +030000008f0e00000300000007010000,GreenAsia Joystick,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Mac OS X, +030000000d0f00002d00000000100000,Hori Fighting Commander 3 Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00005f00000000000000,Hori Fighting Commander 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00005f00000000010000,Hori Fighting Commander 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00005e00000000000000,Hori Fighting Commander 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +030000000d0f00005e00000000010000,Hori Fighting Commander 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +030000000d0f00008400000000010000,Hori Fighting Commander PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00008500000000010000,Hori Fighting Commander PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000341a00000302000014010000,Hori Fighting Stick Mini,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00008800000000010000,Hori Fighting Stick mini 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00008700000000010000,Hori Fighting Stick mini 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +030000000d0f00004d00000000000000,Hori Gem Pad 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00003801000008010000,Hori PC Engine Mini Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,platform:Mac OS X, +030000000d0f00009200000000010000,Hori Pokken Tournament DX Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f0000aa00000072050000,Hori Real Arcade Pro for Nintendo Switch,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, +030000000d0f00000002000017010000,Hori Split Pad Fit,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00000002000015010000,Hori Switch Split Pad Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00006e00000000010000,Horipad 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00006600000000010000,Horipad 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +030000000d0f00006600000000000000,Horipad FPS Plus 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f0000ee00000000010000,Horipad Mini 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f0000c100000072050000,Horipad Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000242e0000ff0b000000010000,Hyperkin N64 Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a2,righty:a3,start:b9,platform:Mac OS X, +03000000790000004e95000000010000,Hyperkin N64 Controller Adapter,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a5,righty:a2,start:b9,platform:Mac OS X, +03000000830500006020000000000000,iBuffalo Super Famicom Controller,a:b1,b:b0,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Mac OS X, +03000000ef0500000300000000020000,InterAct AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Mac OS X, +03000000fd0500000030000010010000,Interact GoPad,a:b3,b:b4,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,x:b0,y:b1,platform:Mac OS X, +030000007e0500000620000001000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Mac OS X, +030000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Mac OS X, +03000000242f00002d00000007010000,JYS Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, +030000006d04000019c2000000000000,Logitech Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000006d04000019c2000000020000,Logitech Cordless RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3~,start:b9,x:b0,y:b3,platform:Mac OS X, +030000006d04000016c2000000020000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000006d04000016c2000000030000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000006d04000016c2000014040000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000006d04000016c2000000000000,Logitech F310,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000006d04000018c2000000000000,Logitech F510,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000006d04000019c2000005030000,Logitech F710,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000006d0400001fc2000000000000,Logitech F710,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +030000006d04000018c2000000010000,Logitech RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3~,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000380700005032000000010000,Mad Catz PS3 Fightpad Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000380700008433000000010000,Mad Catz PS3 Fightstick TE S Plus,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000380700005082000000010000,Mad Catz PS4 Fightpad Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +03000000380700008483000000010000,Mad Catz PS4 Fightstick TE S Plus,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +0300000049190000020400001b010000,Manba One,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b22,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000790000000600000007010000,Marvo GT-004,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, +030000008f0e00001330000011010000,Mayflash Controller Adapter,a:b2,b:b4,back:b16,dpdown:h0.8,dpleft:h0.2,dpright:h0.1,dpup:h0.4,leftshoulder:b12,lefttrigger:b16,leftx:a0,lefty:a2,rightshoulder:b14,rightx:a6~,righty:a4,start:b18,x:b0,y:b6,platform:Mac OS X, +03000000790000004318000000010000,Mayflash GameCube Adapter,a:b4,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a12,leftx:a0,lefty:a4,rightshoulder:b28,righttrigger:a16,rightx:a20,righty:a8,start:b36,x:b8,y:b12,platform:Mac OS X, +03000000790000004418000000010000,Mayflash GameCube Controller,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000242f00007300000000020000,Mayflash Magic NS,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b0,y:b3,platform:Mac OS X, +0300000079000000d218000026010000,Mayflash Magic NS,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, +03000000d620000010a7000003010000,Mayflash Magic NS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000008f0e00001030000011010000,Mayflash Saturn Adapter,a:b0,b:b2,dpdown:b28,dpleft:b30,dpright:b26,dpup:b24,leftshoulder:b10,lefttrigger:b14,rightshoulder:b12,righttrigger:b4,start:b18,x:b6,y:b8,platform:Mac OS X, +0300000025090000e803000000000000,Mayflash Wii Classic Adapter,a:b1,b:b0,back:b8,dpdown:b13,dpleft:b12,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Mac OS X, +03000000790000000318000000010000,Mayflash Wii DolphinBar,a:b8,b:b12,back:b32,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b44,leftshoulder:b16,lefttrigger:b24,leftx:a0,lefty:a4,rightshoulder:b20,righttrigger:b28,rightx:a8,righty:a12,start:b36,x:b0,y:b4,platform:Mac OS X, +03000000790000000018000000000000,Mayflash Wii U Pro Adapter,a:b4,b:b8,back:b32,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b16,leftstick:b40,lefttrigger:b24,leftx:a0,lefty:a4,rightshoulder:b20,rightstick:b44,righttrigger:b28,rightx:a8,righty:a12,start:b36,x:b0,y:b12,platform:Mac OS X, +03000000790000000018000000010000,Mayflash Wii U Pro Adapter,a:b4,b:b8,back:b32,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b16,leftstick:b40,lefttrigger:b24,leftx:a0,lefty:a4,rightshoulder:b20,rightstick:b44,righttrigger:b28,rightx:a8,righty:a12,start:b36,x:b0,y:b12,platform:Mac OS X, +030000005e0400002800000002010000,Microsoft Dual Strike,a:b3,b:b2,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,rightshoulder:b7,rightx:a0,righty:a1~,start:b5,x:b1,y:b0,platform:Mac OS X, +030000005e0400000300000006010000,Microsoft SideWinder,a:b0,b:b1,back:b9,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Mac OS X, +030000005e0400000700000006010000,Microsoft SideWinder,a:b0,b:b1,back:b8,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Mac OS X, +030000005e0400002700000001010000,Microsoft SideWinder Plug and Play,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,lefttrigger:b4,righttrigger:b5,x:b2,y:b3,platform:Mac OS X, +030000004523000015e0000072050000,Mobapad Chitu HD,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X, +03000000d62000007162000001000000,Moga Pro 2,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Mac OS X, +03000000c62400002a89000000010000,MOGA XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c62400002b89000000010000,MOGA XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000853200008906000000010000,Nacon Revolution X Unlimited,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000632500007505000000020000,NeoGeo mini PAD Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,x:b2,y:b3,platform:Mac OS X, +03000000921200004b46000003020000,NES 2-port Adapter,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b11,platform:Mac OS X, +030000001008000001e5000006010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Mac OS X, +03000000ec110000e1a7000001010000,Nintendo Switch,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X, +030000007e0500006920000001010000,Nintendo Switch 2 Pro Controller,a:b0,b:b1,back:b14,dpdown:b8,dpleft:b10,dpright:b9,dpup:b11,guide:b16,leftshoulder:b12,leftstick:b15,lefttrigger:b13,leftx:a0,lefty:a1~,misc1:b17,misc2:b20,paddle1:b18,paddle2:b19,rightshoulder:b4,rightstick:b7,righttrigger:b5,rightx:a2,righty:a3~,start:b6,x:b2,y:b3,platform:Mac OS X, +030000007e0500000920000000000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X, +030000007e0500000920000001000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X, +030000007e0500000920000010020000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:Mac OS X, +050000007e05000009200000ff070000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:Mac OS X, +030000007e0500007320000001010000,NSO GameCube Controller,a:b1,b:b3,dpdown:b8,dpleft:b10,dpright:b9,dpup:b11,guide:b16,leftshoulder:b13,lefttrigger:b12,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b4,rightx:a2,righty:a3~,start:b6,x:b0,y:b2,platform:Mac OS X, +030000007e0500001920000001000000,NSO N64 Controller,+rightx:b8,+righty:b7,-rightx:b3,-righty:b2,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,righttrigger:b10,start:b9,platform:Mac OS X, +030000007e0500001720000001000000,NSO SNES Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b15,start:b9,x:b2,y:b3,platform:Mac OS X, +03000000550900001472000025050000,NVIDIA Controller,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Mac OS X, +030000004b120000014d000000010000,Nyko Airflo EX,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Mac OS X, +0300000009120000072f000000010000,OrangeFox86 DreamPicoPort,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a2,leftx:a0,lefty:a1,righttrigger:a5,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Mac OS X, +030000006f0e00000901000002010000,PDP PS3 Versus Fighting,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X, +030000008f0e00000300000000000000,Piranha Xtreme PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Mac OS X, +03000000d620000011a7000000020000,PowerA Core Plus Gamecube Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X, +03000000d620000011a7000010050000,PowerA Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000d62000006dca000000010000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000100800000300000006010000,PS2 Adapter,a:b2,b:b1,back:b8,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a4,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, +030000004c0500006802000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Mac OS X, +030000004c0500006802000000010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Mac OS X, +030000004c0500006802000072050000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Mac OS X, +030000004c050000a00b000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +030000004c050000c405000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +030000004c050000c405000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +030000004c050000cc09000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +0300004b4c0500005f0e000000010000,PS5 Access Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b14,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +030000004c050000e60c000000010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b14,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +030000004c050000f20d000000010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b14,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +050000004c050000e60c000000010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +050000004c050000f20d000000010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +030000005e040000e002000001000000,PXN P30 Pro Mobile,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Mac OS X, +03000000222c00000225000000010000,Qanba Dragon Arcade Joystick PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000222c00000020000000010000,Qanba Drone Arcade Stick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000009b2800005600000020020000,Raphnet SNES Adapter,a:b1,b:b4,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Mac OS X, +030000009b2800008000000022020000,Raphnet Wii Classic Adapter,a:b1,b:b4,back:b2,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,guide:b10,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a4,start:b3,x:b0,y:b5,platform:Mac OS X, +030000008916000000fd000000000000,Razer Onza TE,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +03000000321500000204000000010000,Razer Panthera PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000321500000104000000010000,Razer Panthera PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +03000000321500000010000000010000,Razer Raiju,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000321500000507000001010000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000321500000011000000010000,Razer Raion PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +03000000321500000009000000020000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Mac OS X, +030000003215000000090000163a0000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Mac OS X, +0300000032150000030a000000000000,Razer Wildcat,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +03000000632500008005000000010000,Redgear,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, +03000000632500002305000000010000,Redragon Saturn,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, +03000000921200004547000000020000,Retro Bit Sega Genesis Controller Adapter,a:b0,b:b2,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,lefttrigger:b14,rightshoulder:b10,righttrigger:b4,start:b12,x:b6,y:b8,platform:Mac OS X, +03000000790000001100000000000000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000790000001100000005010000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b4,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000830500006020000000010000,Retro Controller,a:b0,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b8,righttrigger:b9,start:b7,x:b2,y:b3,platform:Mac OS X, +0300000003040000c197000000000000,Retrode Adapter,a:b0,b:b4,back:b2,dpdown:+a4,dpleft:-a0,dpright:+a0,dpup:-a4,leftshoulder:b6,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Mac OS X, +03000000790000001100000006010000,Retrolink SNES Controller,a:b2,b:b1,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X, +03000000341200000400000000000000,RetroUSB N64 RetroPort,+rightx:b8,+righty:b10,-rightx:b9,-righty:b11,a:b7,b:b6,dpdown:b2,dpleft:b1,dpright:b0,dpup:b3,leftshoulder:b13,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b12,start:b4,platform:Mac OS X, +030000006b140000010d000000010000,Revolution Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000006b140000130d000000010000,Revolution Pro Controller 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000004c0500006802000002100000,Rii RK707,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b2,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b3,righttrigger:b9,rightx:a2,righty:a3,start:b1,x:b15,y:b12,platform:Mac OS X, +030000006f0e00008701000005010000,Rock Candy Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000c6240000fefa000000000000,Rock Candy PS3,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +03000000e804000000a000001b010000,Samsung EIGP20,a:b1,b:b3,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b11,leftx:a1,lefty:a3,rightshoulder:b12,rightx:a4,righty:a5,start:b16,x:b7,y:b9,platform:Mac OS X, +03000000730700000401000000010000,Sanwa PlayOnline Mobile,a:b0,b:b1,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b3,platform:Mac OS X, +03000000a30c00002500000006020000,Sega Genesis Mini 3B Controller,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,righttrigger:b5,start:b9,platform:Mac OS X, +03000000811700007e05000000000000,Sega Saturn,a:b2,b:b4,dpdown:b16,dpleft:b15,dpright:b14,dpup:b17,leftshoulder:b8,lefttrigger:a5,leftx:a0,lefty:a2,rightshoulder:b9,righttrigger:a4,start:b13,x:b0,y:b6,platform:Mac OS X, +03000000b40400000a01000000000000,Sega Saturn,a:b0,b:b1,back:b5,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,guide:b2,leftshoulder:b6,rightshoulder:b7,start:b8,x:b3,y:b4,platform:Mac OS X, +030000003512000021ab000000000000,SFC30 Joystick,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X, +0300000000f00000f100000000000000,SNES RetroPort,a:b2,b:b3,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b5,rightshoulder:b7,start:b6,x:b0,y:b1,platform:Mac OS X, +030000004c050000a00b000000000000,Sony DualShock 4 Adapter,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +030000004c050000cc09000000000000,Sony DualShock 4 V2,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +03000000666600006706000088020000,Sony PlayStation Adapter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b11,x:b3,y:b0,platform:Mac OS X, +030000004c050000da0c000000010000,Sony PlayStation Classic Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Mac OS X, +030000004c0500003713000000010000,Sony PlayStation Vita,a:b1,b:b2,back:b8,dpdown:b13,dpleft:b15,dpright:b14,dpup:b12,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Mac OS X, +030000005e0400008e02000001000000,Steam Virtual Gamepad,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +03000000110100002014000000000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,x:b2,y:b3,platform:Mac OS X, +03000000110100002014000001000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,x:b2,y:b3,platform:Mac OS X, +03000000381000002014000001000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,x:b2,y:b3,platform:Mac OS X, +05000000484944204465766963650000,SteelSeries Nimbus Plus,a:b0,b:b1,back:b15,dpdown:b11,dpleft:b13,dpright:b12,dpup:b10,guide:b16,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3~,start:b14,x:b2,y:b3,platform:Mac OS X, +050000004e696d6275732b0000000000,SteelSeries Nimbus Plus,a:b0,b:b1,back:b15,dpdown:b11,dpleft:b13,dpright:b12,dpup:b10,guide:b16,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3~,start:b14,x:b2,y:b3,platform:Mac OS X, +03000000381000003014000000000000,SteelSeries Stratus Duo,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +03000000381000003114000000000000,SteelSeries Stratus Duo,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +03000000110100001714000000000000,SteelSeries Stratus XL,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,start:b12,x:b2,y:b3,platform:Mac OS X, +03000000110100001714000020010000,SteelSeries Stratus XL,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,start:b12,x:b2,y:b3,platform:Mac OS X, +030000000d0f0000f600000000010000,Switch Hori Pad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X, +03000000457500002211000000010000,SZMY Power PC Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000e40a00000307000001000000,Taito Egret II Mini Control Panel,a:b4,b:b2,back:b6,guide:b9,leftx:a0,lefty:a1,rightshoulder:b0,righttrigger:b1,start:b7,x:b8,y:b3,platform:Mac OS X, +03000000e40a00000207000001000000,Taito Egret II Mini Controller,a:b4,b:b2,back:b6,guide:b9,leftx:a0,lefty:a1,rightshoulder:b0,righttrigger:b1,start:b7,x:b8,y:b3,platform:Mac OS X, +03000000790000001c18000000010000,TGZ Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000790000001c18000003100000,TGZ Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000591c00002400000021000000,THEC64 Joystick,a:b0,b:b1,back:b6,leftshoulder:b4,leftx:a0,lefty:a4,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Mac OS X, +03000000591c00002600000021000000,THEGamepad,a:b2,b:b1,back:b6,dpdown:+a4,dpleft:-a0,dpright:+a0,dpup:-a4,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b0,platform:Mac OS X, +030000004f04000015b3000000000000,Thrustmaster Dual Analog 3.2,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Mac OS X, +030000004f0400000ed0000000020000,Thrustmaster eSwap Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000004f04000000b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b11,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b1,y:b3,platform:Mac OS X, +03000000571d00002100000021000000,Tomee NES Controller Adapter,a:b1,b:b0,back:b2,dpdown:+a4,dpleft:-a0,dpright:+a0,dpup:-a4,start:b3,platform:Mac OS X, +03000000bd12000015d0000000010000,Tomee Retro Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X, +03000000bd12000015d0000000000000,Tomee SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X, +03000000571d00002000000021000000,Tomee SNES Controller Adapter,a:b0,b:b1,back:b6,dpdown:+a4,dpleft:-a0,dpright:+a0,dpup:-a4,leftshoulder:b4,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Mac OS X, +030000005f140000c501000000020000,Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, +03000000100800000100000000000000,Twin USB Joystick,a:b4,b:b2,back:b16,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b12,leftstick:b20,lefttrigger:b8,leftx:a0,lefty:a2,rightshoulder:b14,rightstick:b22,righttrigger:b10,rightx:a6,righty:a4,start:b18,x:b6,y:b0,platform:Mac OS X, +03000000632500002605000000010000,Uberwith Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c0160000e105000000040000,Ultimate Atari Fight Stick,a:b2,b:b4,back:b18,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,rightshoulder:b8,righttrigger:b10,start:b16,x:b0,y:b6,platform:Mac OS X, +03000000151900005678000010010000,Uniplay U6,a:b3,b:b6,back:b25,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b17,leftstick:b31,lefttrigger:b21,leftx:a1,lefty:a3,rightshoulder:b19,rightstick:b33,righttrigger:b23,rightx:a4,righty:a5,start:b27,x:b11,y:b13,platform:Mac OS X, +030000006f0e00000302000025040000,Victrix PS4 Pro Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +030000006f0e00000702000003060000,Victrix PS4 Pro Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +050000005769696d6f74652028303000,Wii Remote,a:b4,b:b5,back:b7,dpdown:b3,dpleft:b0,dpright:b1,dpup:b2,guide:b8,leftshoulder:b11,lefttrigger:b12,leftx:a0,lefty:a1,start:b6,x:b10,y:b9,platform:Mac OS X, +050000005769696d6f74652028313800,Wii U Pro Controller,a:b16,b:b15,back:b7,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b8,leftshoulder:b19,leftstick:b23,lefttrigger:b21,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b24,righttrigger:b22,rightx:a2,righty:a3,start:b6,x:b18,y:b17,platform:Mac OS X, +030000005e0400008e02000000000000,Xbox 360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +030000005e0400008e02000010010000,Xbox 360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4~,start:b8,x:b2,y:b3,platform:Mac OS X, +030000006f0e00000104000000000000,Xbox 360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +03000000c6240000045d000000000000,Xbox 360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +030000005e0400000a0b000000000000,Xbox Adaptive Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +030000005e040000050b000003090000,Xbox Elite Controller Series 2,a:b0,b:b1,back:b31,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b53,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000005e040000130b000011050000,Xbox One Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000005e040000200b000011050000,Xbox One Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000005e040000200b000013050000,Xbox One Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000005e040000200b000015050000,Xbox One Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000005e040000d102000000000000,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +030000005e040000dd02000000000000,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +030000005e040000e002000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Mac OS X, +030000005e040000e002000003090000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Mac OS X, +030000005e040000e302000000000000,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +030000005e040000ea02000000000000,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +030000005e040000fd02000003090000,Xbox One Controller,a:b0,b:b1,back:b16,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000005e040000220b000013050000,Xbox One Elite 2 Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,paddle1:b11,paddle2:b13,paddle3:b12,paddle4:b14,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Mac OS X, +03000000c62400003a54000000000000,Xbox One PowerA Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +030000005e040000130b000001050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000005e040000130b000005050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000005e040000130b000009050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000005e040000130b000013050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000005e040000130b000015050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000005e040000130b000007050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000005e040000130b000017050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000005e040000130b000022050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000005e040000220b000017050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000005e040000220b000021050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000172700004431000029010000,XiaoMi Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000120c0000100e000000010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000120c0000101e000000010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, + +# Linux +03000000c82d00001930000011010000,8BitDo 64,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,platform:Linux, +05000000c82d00001930000001000000,8BitDo 64,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,platform:Linux, +03000000c82d00000031000011010000,8BitDo Adapter,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000c82d00000631000000010000,8BitDo Adapter 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000c82d00000951000000010000,8BitDo Dogbone,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b11,platform:Linux, +03000000021000000090000011010000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00000090000011010000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00001038000000010000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00006a28000000010000,8BitDo GameCube,a:b0,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b9,paddle2:b8,rightshoulder:b10,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b1,y:b4,platform:Linux, +03000000c82d00001251000011010000,8BitDo Lite 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00001251000000010000,8BitDo Lite 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00001151000011010000,8BitDo Lite SE,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00001151000000010000,8BitDo Lite SE,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00000151000000010000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000c82d00000650000011010000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000c82d00005106000000010000,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Linux, +03000000c82d00000a20000000020000,8BitDo M30 Xbox,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,start:b7,x:b2,y:b3,platform:Linux, +03000000c82d00002090000011010000,8BitDo Micro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00002090000000010000,8BitDo Micro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00000451000000010000,8BitDo N30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b11,platform:Linux, +03000000c82d00001590000011010000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00006528000000010000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00006928000011010000,8BitDo N64,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,platform:Linux, +05000000c82d00006928000000010000,8BitDo N64,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,platform:Linux, +05000000c82d00002590000001000000,8BitDo NEOGEO,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000008000000210000011010000,8BitDo NES30,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +03000000c82d00000310000011010000,8BitDo NES30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b7,lefttrigger:b6,rightshoulder:b9,righttrigger:b8,start:b11,x:b3,y:b4,platform:Linux, +05000000c82d00008010000000010000,8BitDo NES30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b7,lefttrigger:b6,rightshoulder:b9,righttrigger:b8,start:b11,x:b3,y:b4,platform:Linux, +03000000022000000090000011010000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00000190000011010000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000203800000900000000010000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00002038000000010000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00000751000000010000,8BitDo P30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:a8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000c82d00000851000000010000,8BitDo P30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:a8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000c82d00000660000011010000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00001030000011010000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00000660000000010000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00000020000000000000,8BitDo Pro 2 for Xbox,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +06000000c82d00000020000006010000,8BitDo Pro 2 for Xbox,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000c82d00000960000011010000,8BitDo Pro 3,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b17,paddle2:b16,paddle3:b2,paddle4:b5,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00000131000011010000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00000231000011010000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00000331000011010000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00000431000011010000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00002867000000010000,8BitDo S30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b3,y:b4,platform:Linux, +03000000c82d00000060000011010000,8BitDo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00000060000000010000,8BitDo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00000061000000010000,8BitDo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +030000003512000012ab000010010000,8BitDo SFC30,a:b2,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b0,platform:Linux, +030000003512000021ab000010010000,8BitDo SFC30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d000021ab000010010000,8BitDo SFC30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux, +05000000102800000900000000010000,8BitDo SFC30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00003028000000010000,8BitDo SFC30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00000351000000010000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00000160000000000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00000160000011010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00000161000000000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00001290000011010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00000161000000010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00006228000000010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00000260000011010000,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00000261000000010000,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000202800000900000000010000,8BitDo SNES30,a:b1,b:b0,back:b10,dpdown:b122,dpleft:b119,dpright:b120,dpup:b117,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00001230000000010000,8BitDo Ultimate,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000c82d00000a31000014010000,8BitDo Ultimate 2C,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000c82d00001d30000011010000,8BitDo Ultimate 2C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b5,paddle2:b2,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000c82d00001b30000001000000,8BitDo Ultimate 2C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b5,paddle2:b2,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000c82d00001530000011010000,8BitDo Ultimate C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000c82d00001630000011010000,8BitDo Ultimate C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000c82d00001730000011010000,8BitDo Ultimate C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000c82d00001130000011010000,8BitDo Ultimate Wired,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b26,paddle1:b24,paddle2:b25,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000c82d00000631000010010000,8BitDo Ultimate Wireless,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000c82d00000631000014010000,8BitDo Ultimate Wireless,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000c82d00000760000011010000,8BitDo Ultimate Wireless,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00001230000011010000,8BitDo Ultimate Wireless,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b2,paddle2:b5,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000c82d00001330000011010000,8BitDo Ultimate Wireless,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b26,paddle1:b23,paddle2:b19,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000c82d00000121000011010000,8BitDo Xbox One SN30 Pro,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000c82d00000121000000010000,8BitDo Xbox One SN30 Pro,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000a00500003232000001000000,8BitDo Zero,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Linux, +05000000a00500003232000008010000,8BitDo Zero,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Linux, +03000000c82d00001890000011010000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00003032000000010000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c01100000355000011010000,Acrux Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006f0e00008801000011010000,Afterglow Deluxe Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006f0e00003901000000430000,Afterglow Prismatic Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e00003901000013020000,Afterglow Prismatic Controller 048-007-NA,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e00001302000000010000,Afterglow Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e00003901000020060000,Afterglow Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000100000008200000011010000,Akishop Customs PS360,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +030000007c1800000006000010010000,Alienware Dual Compatible Game PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Linux, +05000000491900000204000021000000,Amazon Fire Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b17,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b12,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000491900001904000011010000,Amazon Luna Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Linux, +05000000710100001904000000010000,Amazon Luna Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux, +0300000008100000e501000001010000,Anbernic Handheld,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a4,start:b11,x:b3,y:b4,platform:Linux, +03000000020500000913000010010000,Anbernic RG P01,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000373500000710000010010000,Anbernic RG P01,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000373500004610000001000000,Anbernic RG P01,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000190e00000110000010010000,Aquaplus Piece,a:b1,b:b0,back:b3,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b2,platform:Linux, +03000000790000003018000011010000,Arcade Fightstick F300,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +03000000a30c00002700000011010000,Astro City Mini,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux, +03000000a30c00002800000011010000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux, +05000000050b00000045000031000000,ASUS Gamepad,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,platform:Linux, +05000000050b00000045000040000000,ASUS Gamepad,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,platform:Linux, +03000000050b00000579000011010000,ASUS ROG Kunai 3,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b36,paddle1:b52,paddle2:b53,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000050b00000679000000010000,ASUS ROG Kunai 3,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b21,paddle1:b22,paddle2:b23,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000503200000110000000000000,Atari VCS Classic Controller,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b4,start:b3,platform:Linux, +03000000503200000110000011010000,Atari VCS Classic Controller,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b4,start:b3,platform:Linux, +05000000503200000110000000000000,Atari VCS Classic Controller,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b4,start:b3,platform:Linux, +05000000503200000110000044010000,Atari VCS Classic Controller,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b4,start:b3,platform:Linux, +05000000503200000110000046010000,Atari VCS Classic Controller,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b4,start:b3,platform:Linux, +03000000503200000210000000000000,Atari VCS Modern Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a4,rightx:a2,righty:a3,start:b8,x:b2,y:b3,platform:Linux, +03000000503200000210000011010000,Atari VCS Modern Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Linux, +05000000503200000210000000000000,Atari VCS Modern Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Linux, +05000000503200000210000045010000,Atari VCS Modern Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Linux, +05000000503200000210000046010000,Atari VCS Modern Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Linux, +05000000503200000210000047010000,Atari VCS Modern Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:-a4,rightx:a2,righty:a3,start:b8,x:b2,y:b3,platform:Linux, +030000008a3500000201000011010000,Backbone One,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +030000008a3500000202000011010000,Backbone One,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +030000008a3500000302000011010000,Backbone One,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +030000008a3500000402000011010000,Backbone One,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000c62400001b89000011010000,BDA MOGA XP5X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000d62000002a79000011010000,BDA PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +03000000c21100000791000011010000,Be1 GC101 Controller 1.03,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +03000000c31100000791000011010000,Be1 GC101 Controller 1.03,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +030000005e0400008e02000003030000,Be1 GC101 Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000bc2000004d50000011010000,Beitong A1T2 BFM,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000bc2000000055000001000000,Betop AX1 BFM,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000bc2000006412000011010000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b30,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +030000006b1400000209000011010000,Bigben,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000120c0000300e000011010000,Brook Audio Fighting Board PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000120c0000310e000011010000,Brook Audio Fighting Board PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +03000000120c0000200e000011010000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +03000000120c0000210e000011010000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +03000000120c0000f70e000011010000,Brook Universal Fighting Board,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +03000000d81d00000b00000010010000,Buffalo BSGP1601,a:b5,b:b3,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b8,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b14,rightshoulder:b9,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b13,x:b4,y:b2,platform:Linux, +03000000e82000006058000001010000,Cideko AK08b,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +03000000af1e00002400000010010000,Clockwork Pi DevTerm,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b9,x:b3,y:b0,platform:Linux, +030000000b0400003365000000010000,Competition Pro,a:b0,b:b1,back:b2,leftx:a0,lefty:a1,start:b3,platform:Linux, +03000000632500007a05000001020000,Cosmic Byte Ares Wired Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +03000000260900008888000000010000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a5,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Linux, +03000000a306000022f6000011010000,Cyborg V3 Rumble,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux, +030000005e0400008e02000002010000,Data Frog S80,a:b1,b:b0,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Linux, +03000000791d00000103000010010000,Dual Box Wii Classic Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +030000006f0e00003001000001010000,EA Sports PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000c11100000191000011010000,EasySMX,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +03000000242f00009100000000010000,EasySMX ESM-9101,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006e0500000320000010010000,Elecom U3613M,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Linux, +030000006e0500000720000010010000,Elecom W01U,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Linux, +030000007d0400000640000010010000,Eliminator AfterShock,a:b1,b:b2,back:b9,dpdown:+a3,dpleft:-a5,dpright:+a5,dpup:-a3,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a4,righty:a2,start:b8,x:b0,y:b3,platform:Linux, +03000000430b00000300000000010000,EMS Production PS2 Adapter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a5,righty:a2,start:b9,x:b3,y:b0,platform:Linux, +030000006f0e00008401000011010000,Faceoff Deluxe Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006f0e00008101000011010000,Faceoff Deluxe Pro Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006f0e00008001000011010000,Faceoff Pro Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000852100000201000010010000,FF GP1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +05000000b40400001224000001010000,Flydigi APEX 4,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b14,leftshoulder:b4,leftstick:b10,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b20,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +03000000b40400001124000011010000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b12,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b14,paddle1:b2,paddle2:b5,paddle3:b16,paddle4:b17,rightshoulder:b7,rightstick:b13,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000b40400001224000011010000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b12,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b2,paddle1:b16,paddle2:b17,paddle3:b14,paddle4:b15,rightshoulder:b7,rightstick:b13,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000151900004000000001000000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b12,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b14,paddle1:b2,paddle2:b5,paddle3:b16,paddle4:b17,rightshoulder:b7,rightstick:b13,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +030000007e0500003703000000000000,GameCube Adapter,a:b0,b:b1,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Linux, +19000000030000000300000002030000,GameForce Controller,a:b1,b:b0,back:b8,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,guide:b16,leftshoulder:b4,leftstick:b14,lefttrigger:b6,leftx:a1,lefty:a0,rightshoulder:b5,rightstick:b15,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux, +03000000373500000b10000019010000,GameSir Cyclone 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000ac0500005b05000010010000,GameSir G3w,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +03000000bc2000000055000011010000,GameSir G3w,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000558500001b06000010010000,GameSir G4 Pro,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000ac0500002d0200001b010000,GameSir G4s,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b33,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000ac0500007a05000011010000,GameSir G5,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b16,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000373500009710000001020000,GameSir Kaleid Flux,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000ac0500001a06000011010000,GameSir T3 2.02,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000bc2000005656000011010000,GameSir T4w,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000373500009410000010010000,GameSir Tegenaria Lite,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +030000006f0e00000104000000010000,Gamestop Logic3 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000008f0e00000800000010010000,Gasia PlayStation Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +03000000451300000010000010010000,Genius Maxfire Grandias 12,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +03000000f025000021c1000010010000,Gioteck PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +03000000f0250000c283000010010000,Gioteck VX2 PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +190000004b4800000010000000010000,GO-Advance Controller,a:b1,b:b0,back:b10,dpdown:b7,dpleft:b8,dpright:b9,dpup:b6,leftshoulder:b4,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b13,start:b15,x:b2,y:b3,platform:Linux, +190000004b4800000010000001010000,GO-Advance Controller,a:b1,b:b0,back:b12,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,leftshoulder:b4,leftstick:b13,lefttrigger:b14,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b16,righttrigger:b15,start:b17,x:b2,y:b3,platform:Linux, +190000004b4800000011000000010000,GO-Super Gamepad,a:b0,b:b1,back:b12,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b16,leftshoulder:b4,leftstick:b14,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b15,righttrigger:b7,rightx:a2,righty:a3,start:b13,x:b3,y:b2,platform:Linux, +03000000f0250000c183000010010000,Goodbetterbest Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000d11800000094000011010000,Google Stadia Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux, +05000000d11800000094000000010000,Google Stadia Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux, +0300000079000000d418000000010000,GPD Win 2 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e0400008e02000001010000,GPD Win Max 2 6800U Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000007d0400000540000000010000,Gravis Eliminator Pro,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +03000000280400000140000000010000,Gravis GamePad Pro,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +030000008f0e00000610000000010000,GreenAsia Electronics Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a2,start:b11,x:b3,y:b0,platform:Linux, +030000008f0e00001200000010010000,GreenAsia Joystick,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux, +0500000047532067616d657061640000,GS gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +03000000f0250000c383000010010000,GT VX2,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +030000008a2e0000dd10000011010000,Hand Held Legend GC Ultimate,a:b0,b:b2,back:b17,dpdown:b5,dpleft:b6,dpright:b7,dpup:b4,guide:b18,leftshoulder:b10,leftstick:b8,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b19,misc2:b24,paddle1:b13,paddle2:b12,rightshoulder:b11,rightstick:b9,righttrigger:a4,rightx:a2,righty:a5,start:b16,x:b1,y:b3,platform:Linux, +030000008a2e0000df10000011010000,Hand Held Legend ProGCC,a:b1,b:b0,back:b17,dpdown:b5,dpleft:b6,dpright:b7,dpup:b4,guide:b18,leftshoulder:b10,leftstick:b8,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b19,paddle1:b13,paddle2:b12,rightshoulder:b11,rightstick:b9,righttrigger:a4,rightx:a2,righty:a5,start:b16,x:b3,y:b2,platform:Linux, +06000000adde0000efbe000002010000,Hidromancer Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000d81400000862000011010000,HitBox PS3 PC Analog Mode,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,guide:b9,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b12,x:b0,y:b3,platform:Linux, +03000000c9110000f055000011010000,HJC Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +030000000d0f00006d00000020010000,Hori EDGE 301,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:+a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000000d0f00008400000011010000,Hori Fighting Commander,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00005f00000011010000,Hori Fighting Commander 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00005e00000011010000,Hori Fighting Commander 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +030000000d0f00005001000009040000,Hori Fighting Commander Octa Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000000d0f00008500000010010000,Hori Fighting Commander PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00008600000002010000,Hori Fighting Commander Xbox 360,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +030000000d0f00003701000013010000,Hori Fighting Stick Mini,a:b1,b:b0,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,start:b7,x:b3,y:b2,platform:Linux, +030000000d0f00008800000011010000,Hori Fighting Stick mini 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00008700000011010000,Hori Fighting Stick mini 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,rightshoulder:b5,rightstick:b11,righttrigger:a4,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +030000000d0f00001000000011010000,Hori Fightstick 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +03000000ad1b000003f5000033050000,Hori Fightstick VX,+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b8,guide:b10,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b2,y:b3,platform:Linux, +030000000d0f00004d00000011010000,Hori Gem Pad 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000ad1b000001f5000033050000,Hori Pad EX Turbo 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000000d0f00003801000011010000,Hori PC Engine Mini Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,platform:Linux, +030000000d0f00009200000011010000,Hori Pokken Tournament DX Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00001100000011010000,Hori Real Arcade Pro 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00002200000011010000,Hori Real Arcade Pro 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00006a00000011010000,Hori Real Arcade Pro 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00006b00000011010000,Hori Real Arcade Pro 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00001600000000010000,Hori Real Arcade Pro EXSE,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b2,y:b3,platform:Linux, +030000000d0f0000aa00000011010000,Hori Real Arcade Pro for Nintendo Switch,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +030000000d0f00008501000017010000,Hori Split Pad Fit,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000000d0f00008501000015010000,Hori Switch Split Pad Pro,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000000d0f00006e00000011010000,Horipad 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00006600000011010000,Horipad 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +030000000d0f0000ee00000011010000,Horipad Mini 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f0000c100000011010000,Horipad Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00006700000001010000,Horipad One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000000d0f0000ab01000011010000,Horipad Steam,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc2:b2,paddle1:b19,paddle2:b18,paddle3:b15,paddle4:b5,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000000d0f00009601000091000000,Horipad Steam,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc2:b2,paddle1:b19,paddle2:b18,paddle3:b15,paddle4:b5,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000000d0f0000f600000001000000,Horipad Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +03000000341a000005f7000010010000,HuiJia GameCube Controller Adapter,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Linux, +05000000242e00000b20000001000000,Hyperkin Admiral N64 Controller,+rightx:b11,+righty:b13,-rightx:b8,-righty:b12,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b14,leftx:a0,lefty:a1,rightshoulder:b5,start:b9,platform:Linux, +03000000242e0000ff0b000011010000,Hyperkin N64 Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a2,righty:a3,start:b9,platform:Linux, +03000000242e00006a38000010010000,Hyperkin Trooper 2,a:b0,b:b1,back:b4,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b3,start:b5,platform:Linux, +03000000242e00008816000001010000,Hyperkin X91,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000f00300008d03000011010000,HyperX Clutch,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000830500006020000010010000,iBuffalo Super Famicom Controller,a:b1,b:b0,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Linux, +03000000d80400004bea000011010000,icedragon.io STAC Dance Pad,a:b0,b:b1,x:b2,y:b3,back:b4,platform:Linux, +03000000d80400004aea000011010000,icedragon.io STAC Dance Pad,a:b0,b:b1,x:b2,y:b3,back:b4,platform:Linux, +030000008a2e0000d910000011010000,icedragon.io STAC2 Dance Pad,a:b0,b:b1,x:b2,y:b3,back:b4,platform:Linux, +030000008a2e0000e910000011010000,icedragon.io STAC2 Dance Pad,a:b8,b:b9,x:b10,y:b11,back:b12,platform:Linux, +030000008f0e00001330000001010000,iCode Retro Adapter,b:b3,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b9,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b1,start:b7,x:b2,y:b0,platform:Linux, +050000006964726f69643a636f6e0000,idroidcon Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000b50700001503000010010000,Impact,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux, +03000000d80400008200000003000000,IMS PCU0,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b5,x:b3,y:b2,platform:Linux, +03000000120c00000500000010010000,InterAct AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Linux, +03000000ef0500000300000000010000,InterAct AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Linux, +03000000fd0500000030000000010000,InterAct GoPad,a:b3,b:b4,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,x:b0,y:b1,platform:Linux, +03000000fd0500002a26000000010000,InterAct HammerHead FX,a:b3,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b2,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b5,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Linux, +0500000049190000020400001b010000,Ipega PG 9069,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b161,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000632500007505000011010000,Ipega PG 9099,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +0500000049190000030400001b010000,Ipega PG9099,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000491900000204000000000000,Ipega PG9118,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000300f00001101000010010000,Jess Tech Colour Rumble Pad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux, +03000000300f00001001000010010000,Jess Tech Dual Analog Rumble,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux, +03000000300f00000b01000010010000,Jess Tech GGE909 PC Recoil,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux, +03000000ba2200002010000001010000,Jess Technology Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux, +030000007e0500000620000001000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Linux, +050000007e0500000620000001000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Linux, +030000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Linux, +050000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Linux, +03000000bd12000003c0000010010000,Joypad Alpha Shock,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000242f00002d00000011010000,JYS Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +03000000242f00008a00000011010000,JYS Adapter,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b0,y:b3,platform:Linux, +030000006f0e00000103000000020000,Logic3 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006d040000d1ca000000000000,Logitech Chillstream,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006d040000d1ca000011010000,Logitech Chillstream,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006d04000019c2000010010000,Logitech Cordless RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006d04000016c2000010010000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006d04000016c2000011010000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006d0400001dc2000014400000,Logitech F310,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006d0400001ec2000019200000,Logitech F510,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006d0400001ec2000020200000,Logitech F510,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006d04000019c2000011010000,Logitech F710,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006d0400001fc2000005030000,Logitech F710,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006d04000018c2000010010000,Logitech RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006d04000011c2000010010000,Logitech WingMan Cordless RumblePad,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b6,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b10,rightx:a3,righty:a4,start:b8,x:b3,y:b4,platform:Linux, +030000006d0400000ac2000010010000,Logitech WingMan RumblePad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,rightx:a3,righty:a4,x:b3,y:b4,platform:Linux, +05000000380700006652000025010000,Mad Catz CTRLR,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000380700008532000010010000,Mad Catz Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +03000000380700005032000011010000,Mad Catz Fightpad Pro PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000380700005082000011010000,Mad Catz Fightpad Pro PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +03000000ad1b00002ef0000090040000,Mad Catz Fightpad SFxT,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,start:b7,x:b2,y:b3,platform:Linux, +03000000380700008031000011010000,Mad Catz FightStick Alpha PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000380700008081000011010000,Mad Catz FightStick Alpha PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000380700008034000011010000,Mad Catz Fightstick PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000380700008084000011010000,Mad Catz Fightstick PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +03000000380700008433000011010000,Mad Catz Fightstick TE S PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000380700008483000011010000,Mad Catz Fightstick TE S PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +03000000380700001888000010010000,Mad Catz Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000380700003888000010010000,Mad Catz Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:a0,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000380700001647000010040000,Mad Catz Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000380700003847000090040000,Mad Catz Xbox 360 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +03000000ad1b000016f0000090040000,Mad Catz Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000120c00000500000000010000,Manta DualShock 2,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux, +030000008f0e00001330000010010000,Mayflash Controller Adapter,a:b1,b:b2,back:b8,dpdown:h0.8,dpleft:h0.2,dpright:h0.1,dpup:h0.4,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a3~,righty:a2,start:b9,x:b0,y:b3,platform:Linux, +03000000790000004318000010010000,Mayflash GameCube Adapter,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Linux, +03000000790000004418000010010000,Mayflash GameCube Controller,a:b1,b:b0,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Linux, +03000000242f00007300000011010000,Mayflash Magic NS,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b0,y:b3,platform:Linux, +0300000079000000d218000011010000,Mayflash Magic NS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000d620000010a7000011010000,Mayflash Magic NS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000242f0000f700000001010000,Mayflash Magic S Pro,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000008f0e00001030000010010000,Mayflash Saturn Adapter,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,lefttrigger:b7,rightshoulder:b6,righttrigger:b2,start:b9,x:b3,y:b4,platform:Linux, +0300000025090000e803000001010000,Mayflash Wii Classic Adapter,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:a4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:a5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux, +03000000790000000318000011010000,Mayflash Wii DolphinBar,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Linux, +03000000790000000018000011010000,Mayflash Wii U Pro Adapter,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000b50700001203000010010000,Mega World Logic 3 Controller,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux, +03000000b50700004f00000000010000,Mega World Logic 3 Controller,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Linux, +03000000780000000600000010010000,Microntek Joystick,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux, +030000005e0400002800000000010000,Microsoft Dual Strike,a:b3,b:b2,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,rightshoulder:b7,rightx:a0,righty:a1~,start:b5,x:b1,y:b0,platform:Linux, +030000005e0400000300000000010000,Microsoft SideWinder,a:b0,b:b1,back:b9,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Linux, +030000005e0400000700000000010000,Microsoft SideWinder,a:b0,b:b1,back:b8,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Linux, +030000005e0400000e00000000010000,Microsoft SideWinder Freestyle Pro,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,rightshoulder:b7,start:b8,x:b3,y:b4,platform:Linux, +030000005e0400002700000000010000,Microsoft SideWinder Plug and Play,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,lefttrigger:b4,righttrigger:b5,x:b2,y:b3,platform:Linux, +030000005e0400008502000000010000,Microsoft Xbox,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux, +030000005e0400008902000021010000,Microsoft Xbox,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux, +030000005e0400008e02000001000000,Microsoft Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.1,dpleft:h0.2,dpright:h0.8,dpup:h0.4,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e0400008e02000004010000,Microsoft Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e0400008e02000056210000,Microsoft Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e0400008e02000062230000,Microsoft Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000d102000001010000,Microsoft Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000d102000003020000,Microsoft Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000dd02000003020000,Microsoft Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000ea02000008040000,Microsoft Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000ea0200000f050000,Microsoft Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +060000005e040000120b000009050000,Microsoft Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000e302000003020000,Microsoft Xbox One Elite,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000000b000007040000,Microsoft Xbox One Elite 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b12,paddle2:b14,paddle3:b13,paddle4:b15,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000000b000008040000,Microsoft Xbox One Elite 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b12,paddle2:b14,paddle3:b13,paddle4:b15,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +050000005e040000050b000003090000,Microsoft Xbox One Elite 2,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e0400008e02000030110000,Microsoft Xbox One Elite 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b13,paddle3:b12,paddle4:b14,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000120b00000b050000,Microsoft Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000120b000016050000,Microsoft Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000120b000017050000,Microsoft Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +060000005e040000120b000001050000,Microsoft Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000030000000300000002000000,Miroof,a:b1,b:b0,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Linux, +03000000790000001c18000010010000,Mobapad Chitu HD,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000004d4f435554452d3035335800,Mocute 053X,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +05000000e80400006e0400001b010000,Mocute 053X M59,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000004d4f435554452d3035305800,Mocute 054X,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000d6200000e589000001000000,Moga 2,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux, +05000000d6200000ad0d000001000000,Moga Pro,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux, +05000000d62000007162000001000000,Moga Pro 2,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux, +03000000c82d00000960000000000000,8BitDo Pro 3,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b17,paddle2:b16,paddle3:b2,paddle4:b5,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c62400002b89000011010000,MOGA XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000c62400002a89000000010000,MOGA XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b22,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000c62400001a89000000010000,MOGA XP5X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000250900006688000000010000,MP8866 Super Dual Box,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux, +030000005e0400008e02000010020000,MSI GC20 V2,a:b0,b:b1,back:b6,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000f70600000100000000010000,N64 Adaptoid,+rightx:b2,+righty:b1,-rightx:b4,-righty:b5,a:b0,b:b3,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b7,start:b8,platform:Linux, +030000006b1400000906000014010000,Nacon Asymmetric Wireless PS4 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006b140000010c000010010000,Nacon GC 400ES,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +03000000853200000706000012010000,Nacon GC-100,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +05000000853200000503000000010000,Nacon MG-X Pro,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +0300000085320000170d000011010000,Nacon Revolution 5 Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +0300000085320000190d000011010000,Nacon Revolution 5 Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +030000000d0f00000900000010010000,Natec Genesis P44,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000004f1f00000800000011010000,NeoGeo PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +0300000092120000474e000000010000,NeoGeo X Arcade Stick,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,x:b3,y:b2,platform:Linux, +03000000790000004518000010010000,Nexilux GameCube Controller Adapter,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Linux, +030000001008000001e5000010010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Linux, +060000007e0500003713000000000000,Nintendo 3DS,a:b0,b:b1,back:b8,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux, +03000000790000004618000010010000,Nintendo GameCube Controller Adapter,a:b1,b:b0,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a5~,righty:a2~,start:b9,x:b2,y:b3,platform:Linux, +03000000ec110000e1a7000010010000,Nintendo Switch,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +030000007e0500006920000011010000,Nintendo Switch 2 Pro Controller,a:b0,b:b1,back:b14,dpdown:b8,dpleft:b10,dpright:b9,dpup:b11,guide:b16,leftshoulder:b12,leftstick:b15,lefttrigger:b13,leftx:a0,lefty:a1~,misc1:b17,misc2:b20,paddle1:b18,paddle2:b19,rightshoulder:b4,rightstick:b7,righttrigger:b5,rightx:a2,righty:a3~,start:b6,x:b2,y:b3,platform:Linux, +060000004e696e74656e646f20537700,Nintendo Switch Combined Joy-Cons,a:b0,b:b1,back:b9,dpdown:b15,dpleft:b16,dpright:b17,dpup:b14,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,misc1:b4,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux, +060000007e0500000620000000000000,Nintendo Switch Combined Joy-Cons,a:b0,b:b1,back:b9,dpdown:b15,dpleft:b16,dpright:b17,dpup:b14,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,misc1:b4,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux, +060000007e0500000820000000000000,Nintendo Switch Combined Joy-Cons,a:b0,b:b1,back:b9,dpdown:b15,dpleft:b16,dpright:b17,dpup:b14,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,misc1:b4,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux, +050000004c69632050726f20436f6e00,Nintendo Switch Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +050000007e0500000620000001800000,Nintendo Switch Left Joy-Con,a:b16,b:b15,back:b4,leftshoulder:b6,leftstick:b12,leftx:a1,lefty:a0~,rightshoulder:b8,start:b9,x:b14,y:b17,platform:Linux, +030000007e0500000920000000026803,Nintendo Switch Pro Controller,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Linux, +030000007e0500000920000011810000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,misc1:b4,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux, +050000007e0500000920000001000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +050000007e0500000920000001800000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,misc1:b4,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux, +050000007e0500000720000001800000,Nintendo Switch Right Joy-Con,a:b1,b:b2,back:b9,leftshoulder:b4,leftstick:b10,leftx:a1~,lefty:a0,rightshoulder:b6,start:b8,x:b0,y:b3,platform:Linux, +05000000010000000100000003000000,Nintendo Wii Remote,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +050000007e0500003003000001000000,Nintendo Wii U Pro Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux, +050000005a1d00000218000003000000,Nokia GC 5000,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +030000000d0500000308000010010000,Nostromo n45 Dual Analog,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b12,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b2,y:b3,platform:Linux, +030000007e0500007320000011010000,NSO GameCube Controller,a:b1,b:b3,dpdown:b8,dpleft:b10,dpright:b9,dpup:b11,guide:b16,leftshoulder:b13,lefttrigger:b12,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b4,rightx:a2,righty:a3~,start:b6,x:b0,y:b2,platform:Linux, +030000007e0500001920000011810000,NSO N64 Controller,+rightx:b2,+righty:b3,-rightx:b4,-righty:b10,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,misc1:b5,rightshoulder:b7,righttrigger:b9,start:b11,platform:Linux, +050000007e0500001920000001000000,NSO N64 Controller,+rightx:b8,+righty:b7,-rightx:b3,-righty:b2,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,righttrigger:b10,start:b9,platform:Linux, +050000007e0500001920000001800000,NSO N64 Controller,+rightx:b2,+righty:b3,-rightx:b4,-righty:b10,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,misc1:b5,rightshoulder:b7,righttrigger:b9,start:b11,platform:Linux, +030000007e0500001e20000011810000,NSO Sega Genesis Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,misc1:b3,rightshoulder:b2,righttrigger:b4,start:b5,platform:Linux, +030000007e0500001720000011810000,NSO SNES Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux, +050000007e0500001720000001000000,NSO SNES Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,lefttrigger:b7,rightshoulder:b6,righttrigger:b8,start:b10,x:b3,y:b2,platform:Linux, +050000007e0500001720000001800000,NSO SNES Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux, +03000000550900001072000011010000,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b8,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux, +03000000550900001472000011010000,NVIDIA Controller,a:b0,b:b1,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b8,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Linux, +05000000550900001472000001000000,NVIDIA Controller,a:b0,b:b1,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b8,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Linux, +030000004b120000014d000000010000,NYKO Airflo EX,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux, +03000000451300000830000010010000,NYKO CORE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +19000000010000000100000001010000,ODROID Go 2,a:b1,b:b0,dpdown:b7,dpleft:b8,dpright:b9,dpup:b6,guide:b10,leftshoulder:b4,leftstick:b12,lefttrigger:b11,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b13,righttrigger:b14,start:b15,x:b2,y:b3,platform:Linux, +19000000010000000200000011000000,ODROID Go 2,a:b1,b:b0,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b12,leftshoulder:b4,leftstick:b14,lefttrigger:b13,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b15,righttrigger:b16,start:b17,x:b2,y:b3,platform:Linux, +05000000362800000100000002010000,OUYA Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,platform:Linux, +05000000362800000100000003010000,OUYA Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,platform:Linux, +05000000362800000100000004010000,OUYA Controller,a:b0,b:b3,back:b14,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,leftshoulder:b4,leftstick:b6,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:b13,rightx:a3,righty:a4,start:b16,x:b1,y:b2,platform:Linux, +03000000830500005020000010010000,Padix Rockfire PlayStation Bridge,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b2,y:b3,platform:Linux, +03000000ff1100003133000010010000,PC Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +030000006f0e0000b802000001010000,PDP Afterglow Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e0000b802000013020000,PDP Afterglow Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e00006401000001010000,PDP Battlefield One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e0000d702000006640000,PDP Black Camo Wired Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:b13,dpleft:b14,dpright:b13,dpup:b14,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e00003101000000010000,PDP EA Sports Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e00008501000011010000,PDP Fightpad Pro Gamecube Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +030000006f0e0000c802000012010000,PDP Kingdom Hearts Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e00002801000011010000,PDP PS3 Rock Candy Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006f0e00000901000011010000,PDP PS3 Versus Fighting,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +030000006f0e00002f01000011010000,PDP Wired PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000ad1b000004f9000000010000,PDP Xbox 360 Versus Fighting,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e0000f102000000000000,PDP Xbox Atomic,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e0000a802000023020000,PDP Xbox One Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +030000006f0e0000a702000023020000,PDP Xbox One Raven Black,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e0000d802000006640000,PDP Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e0000ef02000007640000,PDP Xbox Series Kinetic Wired Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000c62400000053000000010000,PowerA,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000c62400003a54000001010000,PowerA 1428124-01,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000d62000000540000001010000,PowerA Advantage Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000d620000011a7000011010000,PowerA Core Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000dd62000015a7000011010000,PowerA Fusion Nintendo Switch Arcade Stick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000d620000012a7000011010000,PowerA Fusion Nintendo Switch Fight Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000d62000000140000001010000,PowerA Fusion Pro 2 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000dd62000016a7000000000000,PowerA Fusion Pro Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000c62400001a53000000010000,PowerA Mini Pro Ex,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000d620000013a7000011010000,PowerA Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000d62000006dca000011010000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000d620000014a7000011010000,PowerA Spectra Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000c62400001a58000001010000,PowerA Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000d62000000220000001010000,PowerA Xbox One Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Linux, +03000000d62000000228000001010000,PowerA Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000c62400001a54000001010000,PowerA Xbox One Mini Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000d62000000240000001010000,PowerA Xbox One Spectra Infinity,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000d62000000520000050010000,PowerA Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000d62000000b20000001010000,PowerA Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000d62000000f20000001010000,PowerA Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b7,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006d040000d2ca000011010000,Precision Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000250900000017000010010000,PS/SS/N64 Adapter,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b5,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2~,righty:a3,start:b8,platform:Linux, +03000000ff1100004133000010010000,PS2 Controller,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux, +03000000120c0000160e000011010000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000341a00003608000011010000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000004c0500006802000010010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux, +030000004c0500006802000010810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +030000004c0500006802000011010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux, +030000004c0500006802000011810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +030000005f1400003102000010010000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +030000006f0e00001402000011010000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000008f0e00000300000010010000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +050000004c0500006802000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux, +050000004c0500006802000000010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:a12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:a13,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux, +050000004c0500006802000000800000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +050000004c0500006802000000810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +05000000504c415953544154494f4e00,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux, +060000004c0500006802000000010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux, +030000004c050000a00b000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +030000004c050000a00b000011810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +030000004c050000c405000000810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +030000004c050000c405000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +030000004c050000c405000011810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +030000004c050000cc09000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +030000004c050000cc09000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +030000004c050000cc09000011810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +03000000c01100000140000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +050000004c050000c405000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +050000004c050000c405000000810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +050000004c050000c405000001800000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +050000004c050000cc09000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +050000004c050000cc09000000810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +050000004c050000cc09000001800000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +0300004b4c0500005f0e000011010000,PS5 Access Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b14,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +030000004c050000e60c000011010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b14,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +030000004c050000e60c000011810000,PS5 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +030000004c050000f20d000011010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b14,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +030000004c050000f20d000011810000,PS5 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +050000004c050000e60c000000010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +050000004c050000e60c000000810000,PS5 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +050000004c050000f20d000000010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +050000004c050000f20d000000810000,PS5 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +03000000300f00001211000011010000,Qanba Arcade Joystick,a:b2,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b6,start:b9,x:b1,y:b3,platform:Linux, +03000000222c00000225000011010000,Qanba Dragon Arcade Joystick PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000222c00000025000011010000,Qanba Dragon Arcade Joystick PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +03000000222c00001220000011010000,Qanba Drone 2 Arcade Joystick PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000222c00001020000011010000,Qanba Drone 2 Arcade Joystick PS5,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000222c00000020000011010000,Qanba Drone Arcade PS4 Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,rightshoulder:b5,righttrigger:a4,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +03000000300f00001210000010010000,Qanba Joystick Plus,a:b0,b:b1,back:b8,leftshoulder:b5,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b6,start:b9,x:b2,y:b3,platform:Linux, +03000000222c00000223000011010000,Qanba Obsidian Arcade Joystick PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000222c00000023000011010000,Qanba Obsidian Arcade Joystick PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +030000009b2800000300000001010000,Raphnet 4nes4snes,a:b0,b:b4,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Linux, +030000009b2800004200000001010000,Raphnet Dual NES Adapter,a:b0,b:b1,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b3,platform:Linux, +0300132d9b2800006500000000000000,Raphnet GameCube Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Linux, +0300132d9b2800006500000001010000,Raphnet GameCube Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Linux, +030000009b2800003200000001010000,Raphnet GC and N64 Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Linux, +030000009b2800006000000001010000,Raphnet GC and N64 Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Linux, +030000009b2800003c00000001010000,Raphnet N64 Adapter,+rightx:b9,+righty:b7,-rightx:b8,-righty:b6,a:b0,b:b1,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Linux, +030000009b2800006100000001010000,Raphnet N64 Adapter,+rightx:b9,+righty:b7,-rightx:b8,-righty:b6,a:b0,b:b1,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Linux, +030000009b2800006300000001010000,Raphnet N64 Adapter,+rightx:b9,+righty:b7,-rightx:b8,-righty:b6,a:b0,b:b1,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Linux, +030000009b2800006400000001010000,Raphnet N64 Adapter,+rightx:b9,+righty:b7,-rightx:b8,-righty:b6,a:b0,b:b1,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Linux, +030000009b2800008000000020020000,Raphnet Wii Classic Adapter,a:b1,b:b4,back:b2,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Linux, +030000009b2800008000000001010000,Raphnet Wii Classic Adapter V3,a:b1,b:b4,back:b2,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Linux, +03000000f8270000bf0b000011010000,Razer Kishi,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +030000008916000001fd000024010000,Razer Onza Classic Edition,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000321500000204000011010000,Razer Panthera PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000321500000104000011010000,Razer Panthera PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +03000000321500000810000011010000,Razer Panthera PS4 Evo Arcade Stick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +03000000321500000010000011010000,Razer Raiju,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000321500000507000000010000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000321500000a10000001000000,Razer Raiju Tournament Edition,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000321500000011000011010000,Razer Raion PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +030000008916000000fe000024010000,Razer Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000c6240000045d000024010000,Razer Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000c6240000045d000025010000,Razer Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000321500000009000011010000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux, +050000003215000000090000163a0000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux, +0300000032150000030a000001010000,Razer Wildcat,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000321500000b10000011010000,Razer Wolverine PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +0300000032150000140a000001010000,Razer Wolverine Ultimate Xbox,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000000d0f0000c100000010010000,Retro Bit Legacy16,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,guide:b12,leftshoulder:b4,lefttrigger:b6,misc1:b13,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +03000000790000001100000010010000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,start:b9,x:b0,y:b3,platform:Linux, +0300000003040000c197000011010000,Retrode Adapter,a:b0,b:b4,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Linux, +190000004b4800000111000000010000,RetroGame Joypad,a:b1,b:b0,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +0300000081170000990a000001010000,Retronic Adapter,a:b0,leftx:a0,lefty:a1,platform:Linux, +0300000000f000000300000000010000,RetroPad,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Linux, +00000000526574726f53746f6e653200,RetroStone 2 Controller,a:b1,b:b0,back:b10,dpdown:b15,dpleft:b16,dpright:b17,dpup:b14,leftshoulder:b6,lefttrigger:b8,rightshoulder:b7,righttrigger:b9,start:b11,x:b4,y:b3,platform:Linux, +03000000341200000400000000010000,RetroUSB N64 RetroPort,+rightx:b8,+righty:b10,-rightx:b9,-righty:b11,a:b7,b:b6,dpdown:b2,dpleft:b1,dpright:b0,dpup:b3,leftshoulder:b13,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b12,start:b4,platform:Linux, +030000006b140000010d000011010000,Revolution Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000006b140000130d000011010000,Revolution Pro Controller 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000006f0e00001f01000000010000,Rock Candy,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e00008701000011010000,Rock Candy Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006f0e00001e01000011010000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000c6240000fefa000000010000,Rock Candy Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e00004601000001010000,Rock Candy Xbox One Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e00001311000011010000,Saffun Controller,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b0,platform:Linux, +03000000a306000023f6000011010000,Saitek Cyborg PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux, +03000000a30600001005000000010000,Saitek P150,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b7,lefttrigger:b6,rightshoulder:b2,righttrigger:b5,x:b3,y:b4,platform:Linux, +03000000a30600000701000000010000,Saitek P220,a:b2,b:b3,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,x:b0,y:b1,platform:Linux, +03000000a30600000cff000010010000,Saitek P2500 Force Rumble,a:b2,b:b3,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b0,y:b1,platform:Linux, +03000000a30600000d5f000010010000,Saitek P2600,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b8,x:b0,y:b3,platform:Linux, +03000000a30600000c04000011010000,Saitek P2900,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b12,x:b0,y:b3,platform:Linux, +03000000a306000018f5000010010000,Saitek P3200 Rumble,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Linux, +03000000300f00001201000010010000,Saitek P380,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux, +03000000a30600000901000000010000,Saitek P880,a:b2,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,x:b0,y:b1,platform:Linux, +03000000a30600000b04000000010000,Saitek P990 Dual Analog,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b8,x:b0,y:b3,platform:Linux, +03000000a306000020f6000011010000,Saitek PS2700 Rumble,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux, +05000000e804000000a000001b010000,Samsung EIGP20,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000d81d00000e00000010010000,Savior,a:b0,b:b1,back:b8,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b11,righttrigger:b3,start:b9,x:b4,y:b5,platform:Linux, +03000000952e00004b43000011010000,Scuf Envision,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Linux, +03000000952e00004d43000011010000,Scuf Envision,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Linux, +03000000952e00004e43000011010000,Scuf Envision,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Linux, +03000000a30c00002500000011010000,Sega Genesis Mini 3B Controller,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,righttrigger:b5,start:b9,platform:Linux, +03000000790000001100000011010000,Sega Saturn,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b4,start:b9,x:b0,y:b3,platform:Linux, +03000000b40400000a01000000010000,Sega Saturn,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Linux, +03000000632500002305000010010000,ShanWan Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +03000000632500002605000010010000,ShanWan Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000632500007505000010010000,ShanWan Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +03000000bc2000000055000010010000,ShanWan Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000341a00000908000010010000,SL6566,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +030000004b2900000430000011000000,Snakebyte Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +050000004c050000cc09000001000000,Sony DualShock 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +03000000666600006706000000010000,Sony PlayStation Adapter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a2,righty:a3,start:b11,x:b3,y:b0,platform:Linux, +030000004c050000da0c000011010000,Sony PlayStation Controller,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux, +03000000d9040000160f000000010000,Sony PlayStation Controller Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux, +03000000ff000000cb01000010010000,Sony PlayStation Portable,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Linux, +030000004c0500003713000011010000,Sony PlayStation Vita,a:b1,b:b2,back:b8,dpdown:b13,dpleft:b15,dpright:b14,dpup:b12,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Linux, +03000000250900000500000000010000,Sony PS2 pad with SmartJoy Adapter,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux, +030000005e0400008e02000073050000,Speedlink Torid,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e0400008e02000020200000,SpeedLink Xeox Pro Analog,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000de2800000112000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux, +03000000de2800000112000011010000,Steam Controller,a:b2,b:b3,back:b10,dpdown:+a5,dpleft:-a4,dpright:+a4,dpup:-a5,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a7,leftx:a0,lefty:a1,paddle1:b15,paddle2:b16,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a3,start:b11,x:b4,y:b5,platform:Linux, +03000000de2800000211000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux, +03000000de2800000211000011010000,Steam Controller,a:b2,b:b3,back:b10,dpdown:b18,dpleft:b19,dpright:b20,dpup:b17,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b16,paddle2:b15,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b5,platform:Linux, +03000000de2800004211000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux, +03000000de2800004211000011010000,Steam Controller,a:b2,b:b3,back:b10,dpdown:b18,dpleft:b19,dpright:b20,dpup:b17,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a7,leftx:a0,lefty:a1,paddle1:b16,paddle2:b15,rightshoulder:b7,righttrigger:a6,rightx:a2,righty:a3,start:b11,x:b4,y:b5,platform:Linux, +03000000de280000fc11000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +05000000de2800000212000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux, +05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux, +05000000de2800000611000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux, +03000000de2800000512000010010000,Steam Deck,a:b3,b:b4,back:b11,dpdown:b17,dpleft:b18,dpright:b19,dpup:b16,guide:b13,leftshoulder:b7,leftstick:b14,lefttrigger:a9,leftx:a0,lefty:a1,rightshoulder:b8,rightstick:b15,righttrigger:a8,rightx:a2,righty:a3,start:b12,x:b5,y:b6,platform:Linux, +03000000de2800000512000011010000,Steam Deck,a:b3,b:b4,back:b11,dpdown:b17,dpleft:b18,dpright:b19,dpup:b16,guide:b13,leftshoulder:b7,leftstick:b14,lefttrigger:a9,leftx:a0,lefty:a1,misc1:b2,paddle1:b21,paddle2:b20,paddle3:b23,paddle4:b22,rightshoulder:b8,rightstick:b15,righttrigger:a8,rightx:a2,righty:a3,start:b12,x:b5,y:b6,platform:Linux, +03000000de280000ff11000001000000,Steam Virtual Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +050000004e696d6275732b0000000000,SteelSeries Nimbus Plus,a:b0,b:b1,back:b10,guide:b11,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b12,x:b2,y:b3,platform:Linux, +03000000381000003014000075010000,SteelSeries Stratus Duo,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000381000003114000075010000,SteelSeries Stratus Duo,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +0500000011010000311400001b010000,SteelSeries Stratus Duo,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b32,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000110100001914000009010000,SteelSeries Stratus XL,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000ad1b000038f0000090040000,Street Fighter IV Fightstick TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000003b07000004a1000000010000,Suncom SFX Plus,a:b0,b:b2,back:b7,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b9,righttrigger:b5,start:b8,x:b1,y:b3,platform:Linux, +030000001f08000001e4000010010000,Super Famicom Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Linux, +03000000666600000488000000010000,Super Joy Box 5 Pro,a:b2,b:b1,back:b9,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux, +0300000000f00000f100000000010000,Super RetroPort,a:b1,b:b5,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Linux, +030000008f0e00000d31000010010000,SZMY Power 3 Turbo,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000457500000401000011010000,SZMY Power DS4 Wired Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000457500002211000010010000,SZMY Power Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +030000008f0e00001431000010010000,SZMY Power PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000e40a00000307000011010000,Taito Egret II Mini Control Panel,a:b4,b:b2,back:b6,guide:b9,leftx:a0,lefty:a1,rightshoulder:b0,righttrigger:b1,start:b7,x:b8,y:b3,platform:Linux, +03000000e40a00000207000011010000,Taito Egret II Mini Controller,a:b4,b:b2,back:b6,guide:b9,leftx:a0,lefty:a1,rightshoulder:b0,righttrigger:b1,start:b7,x:b8,y:b3,platform:Linux, +03000000ba2200000701000001010000,Technology Innovation PS2 Adapter,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a5,righty:a2,start:b9,x:b3,y:b2,platform:Linux, +03000000790000001c18000011010000,TGZ Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000591c00002400000010010000,THEC64 Joystick,a:b0,b:b1,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Linux, +03000000591c00002600000010010000,THEGamepad,a:b2,b:b1,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b3,y:b0,platform:Linux, +030000004f04000015b3000001010000,Thrustmaster Dual Analog 3.2,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux, +030000004f04000015b3000010010000,Thrustmaster Dual Analog 4,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux, +030000004f04000020b3000010010000,Thrustmaster Dual Trigger,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux, +030000004f04000023b3000000010000,Thrustmaster Dual Trigger PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000004f0400000ed0000011010000,Thrustmaster eSwap Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000b50700000399000000010000,Thrustmaster Firestorm Digital 2,a:b2,b:b4,back:b11,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b8,rightstick:b0,righttrigger:b9,start:b1,x:b3,y:b5,platform:Linux, +030000004f04000003b3000010010000,Thrustmaster Firestorm Dual Analog 2,a:b0,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b9,rightx:a2,righty:a3,x:b1,y:b3,platform:Linux, +030000004f04000000b3000010010000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b11,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b1,y:b3,platform:Linux, +030000004f04000004b3000010010000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux, +030000004f04000026b3000002040000,Thrustmaster GP XID,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000c6240000025b000002020000,Thrustmaster GPX,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000004f04000008d0000000010000,Thrustmaster Run N Drive PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000004f04000009d0000000010000,Thrustmaster Run N Drive PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000004f04000007d0000000010000,Thrustmaster T Mini,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000004f04000012b3000010010000,Thrustmaster Vibrating Gamepad,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux, +03000000571d00002000000010010000,Tomee SNES Adapter,a:b0,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Linux, +03000000bd12000015d0000010010000,Tomee SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Linux, +03000000d814000007cd000011010000,Toodles 2008 Chimp PC PS3,a:b0,b:b1,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux, +030000005e0400008e02000070050000,Torid,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000c01100000591000011010000,Torid,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +03000000680a00000300000003000000,TRBot Virtual Joypad,a:b11,b:b12,back:b15,dpdown:b6,dpleft:b3,dpright:b4,dpup:b5,leftshoulder:b17,leftstick:b21,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b22,righttrigger:a2,rightx:a3,righty:a4,start:b16,x:b13,y:b14,platform:Linux, +03000000780300000300000003000000,TRBot Virtual Joypad,a:b11,b:b12,back:b15,dpdown:b6,dpleft:b3,dpright:b4,dpup:b5,leftshoulder:b17,leftstick:b21,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b22,righttrigger:a2,rightx:a3,righty:a4,start:b16,x:b13,y:b14,platform:Linux, +03000000e00d00000300000003000000,TRBot Virtual Joypad,a:b11,b:b12,back:b15,dpdown:b6,dpleft:b3,dpright:b4,dpup:b5,leftshoulder:b17,leftstick:b21,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b22,righttrigger:a2,rightx:a3,righty:a4,start:b16,x:b13,y:b14,platform:Linux, +03000000f00600000300000003000000,TRBot Virtual Joypad,a:b11,b:b12,back:b15,dpdown:b6,dpleft:b3,dpright:b4,dpup:b5,leftshoulder:b17,leftstick:b21,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b22,righttrigger:a2,rightx:a3,righty:a4,start:b16,x:b13,y:b14,platform:Linux, +030000005f140000c501000010010000,Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +06000000f51000000870000003010000,Turtle Beach Recon,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000100800000100000010010000,Twin PS2 Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux, +03000000c0160000e105000010010000,Ultimate Atari Fight Stick,a:b1,b:b2,back:b9,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,rightshoulder:b4,righttrigger:b5,start:b8,x:b0,y:b3,platform:Linux, +03000000151900005678000010010000,Uniplay U6,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000100800000300000010010000,USB Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux, +03000000790000000600000007010000,USB gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Linux, +03000000790000001100000000010000,USB Gamepad,a:b2,b:b1,back:b8,dpdown:a0,dpleft:a1,dpright:a2,dpup:a4,start:b9,platform:Linux, +03000000790000001a18000011010000,Venom PS4 Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000790000001b18000011010000,Venom PS4 Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000006f0e00000302000011010000,Victrix Pro Fightstick PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +030000006f0e00000702000011010000,Victrix Pro Fightstick PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +05000000ac0500003232000001000000,VR Box Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux, +05000000434f4d4d414e440000000000,VX Gaming Command Series,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +0000000058626f782033363020576900,Xbox 360 Controller,a:b0,b:b1,back:b14,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,guide:b7,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Linux, +030000005e0400001907000000010000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e0400008e02000010010000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e0400008e02000014010000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e0400009102000007010000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000a102000000010000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000a102000007010000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000a102000030060000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e00001503000000020000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e0400008e02000000010000,Xbox 360 EasySMX,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000a102000014010000,Xbox 360 Receiver,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +0000000058626f782047616d65706100,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux, +030000005e0400000202000000010000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux, +030000005e0400008e02000072050000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e00001304000000010000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000ffff0000ffff000000010000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux, +030000005e0400000a0b000005040000,Xbox One Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux, +030000005e040000d102000002010000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000ea02000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000ea02000001030000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +050000005e040000e002000003090000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +050000005e040000fd02000003090000,Xbox One Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e040000fd02000030110000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +060000005e040000dd02000003020000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +050000005e040000e302000002090000,Xbox One Elite,a:b0,b:b1,back:b136,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e040000220b000013050000,Xbox One Elite 2 Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e040000050b000002090000,Xbox One Elite Series 2,a:b0,b:b1,back:b136,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +030000005e040000ea02000011050000,Xbox One S Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000ea02000015050000,Xbox One S Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000ea02000017050000,Xbox One S Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +060000005e040000ea0200000b050000,Xbox One S Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +060000005e040000ea0200000d050000,Xbox One S Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +060000005e040000ea02000016050000,Xbox One S Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000120b000001050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000120b000005050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000120b000007050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000120b000009050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000120b00000d050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000120b00000f050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000120b000011050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000120b000014050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000120b000015050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000130b000005050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e040000130b000001050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e040000130b000005050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e040000130b000007050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e040000130b000009050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e040000130b000011050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e040000130b000013050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e040000130b000015050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e040000130b000017050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +060000005e040000120b000007050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +060000005e040000120b00000b050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +060000005e040000120b00000d050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +060000005e040000120b00000f050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +050000005e040000130b000022050000,Xbox Series X Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +060000005e040000120b000011050000,Xbox Series X Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +050000005e040000200b000013050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e040000200b000017050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e040000200b000023050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e040000220b000017050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000450c00002043000010010000,XEOX SL6556 BK,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +05000000172700004431000029010000,XiaoMi Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b6,leftstick:b13,lefttrigger:a7,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Linux, +03000000c0160000e105000001010000,XinMo Dual Arcade,a:b4,b:b3,back:b6,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b9,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b1,y:b0,platform:Linux, +030000005e0400008e02000020010000,XInput Adapter,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000120c0000100e000011010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000120c0000101e000011010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000120c0000182e000011010000,Zeroplus PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000790000002201000011010000,ZhiXu GuliKit D,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, + +# Android +38653964633230666463343334313533,8BitDo Adapter,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +36666264316630653965636634386234,8BitDo Adapter 2,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b19,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +38426974446f20417263616465205374,8BitDo Arcade Stick,a:b0,b:b1,back:b15,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,guide:b5,leftshoulder:b9,lefttrigger:a4,rightshoulder:b10,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +61393962646434393836356631636132,8BitDo Arcade Stick,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b19,y:b2,platform:Android, +64323139346131306233636562663738,8BitDo Arcade Stick,a:b0,b:b1,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b19,y:b2,platform:Android, +64643565386136613265663236636564,8BitDo Arcade Stick,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b19,y:b2,platform:Android, +33313433353539306634656436353432,8BitDo Dogbone,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +38426974446f20446f67626f6e65204d,8BitDo Dogbone,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b6,platform:Android, +34343439373236623466343934376233,8BitDo FC30 Pro,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b28,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b29,righttrigger:b7,start:b5,x:b30,y:b2,platform:Android, +38426974446f204e4743204d6f646b69,8BitDo GameCube,a:b0,b:b2,back:b4,dpdown:b12,dpleft:b13,dpright:b14,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,paddle1:b18,paddle2:b17,rightshoulder:b15,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b1,y:b3,platform:Android, +38426974446f2038426974446f204c69,8BitDo Lite,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +30643332373663313263316637356631,8BitDo Lite 2,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +38426974446f204c6974652032000000,8BitDo Lite 2,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +62656331626461363634633735353032,8BitDo Lite 2,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +38393936616436383062666232653338,8BitDo Lite SE,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +38426974446f204c6974652053450000,8BitDo Lite SE,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +39356430616562366466646636643435,8BitDo Lite SE,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +05000000c82d000006500000ffff3f00,8BitDo M30,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,guide:b17,leftshoulder:b9,lefttrigger:a5,rightshoulder:b10,righttrigger:a4,start:b6,x:b3,y:b2,platform:Android, +05000000c82d000051060000ffff3f00,8BitDo M30,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,guide:b17,leftshoulder:b9,lefttrigger:a4,rightshoulder:b10,righttrigger:a5,start:b6,x:b3,y:b2,platform:Android, +32323161363037623637326438643634,8BitDo M30,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b10,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +33656266353630643966653238646264,8BitDo M30,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:a5,start:b10,x:b19,y:b2,platform:Android, +38426974446f204d3330204d6f646b69,8BitDo M30,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b10,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +39366630663062373237616566353437,8BitDo M30,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b18,start:b6,x:b2,y:b3,platform:Android, +64653533313537373934323436343563,8BitDo M30,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:a4,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b10,start:b6,x:b2,y:b3,platform:Android, +66356438346136366337386437653934,8BitDo M30,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:b10,start:b18,x:b19,y:b2,platform:Android, +66393064393162303732356665666366,8BitDo M30,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:a5,start:b6,x:b2,y:b3,platform:Android, +38426974446f204d6963726f2067616d,8BitDo Micro,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,lefttrigger:a4,leftx:b0,lefty:b1,rightshoulder:b10,righttrigger:a5,rightx:b2,righty:b3,start:b6,x:b3,y:b2,platform:Android, +61653365323561356263373333643266,8BitDo Micro,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,lefttrigger:a4,leftx:b0,lefty:b1,rightshoulder:b10,righttrigger:a5,rightx:b2,righty:b3,start:b6,x:b3,y:b2,platform:Android, +62613137616239666338343866326336,8BitDo Micro,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,lefttrigger:a4,leftx:b0,lefty:b1,rightshoulder:b10,righttrigger:a5,rightx:b2,righty:b3,start:b6,x:b3,y:b2,platform:Android, +33663431326134333366393233616633,8BitDo N30,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b6,platform:Android, +38426974446f204e3330204d6f646b69,8BitDo N30,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b6,platform:Android, +05000000c82d000015900000ffff3f00,8BitDo N30 Pro 2,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +05000000c82d000065280000ffff3f00,8BitDo N30 Pro 2,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b17,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +38323035343766666239373834336637,8BitDo N64,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b18,rightx:a2,righty:a3,start:b6,platform:Android, +38426974446f204e3634204d6f646b69,8BitDo N64,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b18,rightx:a2,righty:a3,start:b6,platform:Android, +32363135613966656338666638666237,8BitDo NEOGEO,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +35363534633333373639386466346631,8BitDo NEOGEO,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +38426974446f204e454f47454f204750,8BitDo NEOGEO,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +39383963623932353561633733306334,8BitDo NEOGEO,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000000220000000900000ffff3f00,8BitDo NES30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +050000002038000009000000ffff3f00,8BitDo NES30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +38313433643131656262306631373166,8BitDo P30,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +38326536643339353865323063616339,8BitDo P30,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +38426974446f2050333020636c617373,8BitDo P30,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +35376664343164386333616535333434,8BitDo Pro 2,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b17,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b18,righttrigger:a5,rightx:a3,start:b10,x:b19,y:b2,platform:Android, +38426974446f2038426974446f205072,8BitDo Pro 2,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +38426974446f2050726f203200000000,8BitDo Pro 2,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +61333362366131643730353063616330,8BitDo Pro 2,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +62373739366537363166326238653463,8BitDo Pro 2,a:b1,b:b0,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b3,y:b2,platform:Android, +38386464613034326435626130396565,8BitDo Receiver,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b19,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +38426974446f2038426974446f205265,8BitDo Receiver,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b19,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +66303230343038613365623964393766,8BitDo Receiver,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b19,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +38426974446f20533330204d6f646b69,8BitDo S30,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:a4,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b10,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +66316462353561376330346462316137,8BitDo S30,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:a4,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b10,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +05000000c82d000000600000ffff3f00,8BitDo SF30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b15,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b16,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +05000000c82d000000610000ffff3f00,8BitDo SF30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +38426974646f20534633302050726f00,8BitDo SF30 Pro,a:b1,b:b0,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b16,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b17,platform:Android, +61623334636338643233383735326439,8BitDo SFC30,a:b0,b:b1,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b3,rightshoulder:b31,start:b5,x:b30,y:b2,platform:Android, +05000000c82d000012900000ffff3f00,8BitDo SN30,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android, +05000000c82d000062280000ffff3f00,8BitDo SN30,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android, +38316230613931613964356666353839,8BitDo SN30,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +38426974446f20534e3330204d6f646b,8BitDo SN30,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +65323563303231646531383162646335,8BitDo SN30,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +35383531346263653330306238353131,8BitDo SN30 PP,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +05000000c82d000001600000ffff3f00,8BitDo SN30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +05000000c82d000002600000ffff0f00,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b17,leftshoulder:b9,leftstick:b7,lefttrigger:b15,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b16,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +36653638656632326235346264663661,8BitDo SN30 Pro Plus,a:b0,b:b1,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b19,y:b2,platform:Android, +38303232393133383836366330346462,8BitDo SN30 Pro Plus,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b17,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b18,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b19,y:b2,platform:Android, +38346630346135363335366265656666,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +38426974446f20534e33302050726f2b,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b19,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +536f6e7920436f6d707574657220456e,8BitDo SN30 Pro Plus,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +66306331643531333230306437353936,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +050000002028000009000000ffff3f00,8BitDo SNES30,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +050000003512000020ab000000780f00,8BitDo SNES30,a:b21,b:b20,back:b30,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b26,rightshoulder:b27,start:b31,x:b24,y:b23,platform:Android, +33666663316164653937326237613331,8BitDo Zero,a:b0,b:b1,back:b15,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,rightshoulder:b10,start:b6,x:b2,y:b3,platform:Android, +38426974646f205a65726f2047616d65,8BitDo Zero,a:b0,b:b1,back:b15,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,rightshoulder:b10,start:b6,x:b2,y:b3,platform:Android, +05000000c82d000018900000ffff0f00,8BitDo Zero 2,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android, +05000000c82d000030320000ffff0f00,8BitDo Zero 2,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android, +33663434393362303033616630346337,8BitDo Zero 2,a:b0,b:b1,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftx:a0,lefty:a1,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android, +34656330626361666438323266633963,8BitDo Zero 2,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b20,start:b10,x:b19,y:b2,platform:Android, +63396666386564393334393236386630,8BitDo Zero 2,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android, +63633435623263373466343461646430,8BitDo Zero 2,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b2,y:b3,platform:Android, +32333634613735616163326165323731,Amazon Luna Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b2,y:b3,platform:Android, +4c696e757820342e31392e3137322077,Anbernic Handheld,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a4,start:b6,x:b2,y:b3,platform:Android, +417374726f2063697479206d696e6920,Astro City Mini,a:b23,b:b22,back:b29,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,rightshoulder:b25,righttrigger:b26,start:b30,x:b24,y:b21,platform:Android, +35643263313264386134376362363435,Atari VCS Classic Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,start:b6,platform:Android, +32353831643566306563643065356239,Atari VCS Modern Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +4f64696e20436f6e74726f6c6c657200,AYN Odin,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b14,dpright:b13,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:+a4,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +32303165626138343962363666346165,Brook Mars PS4 Controller,a:b1,b:b19,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, +38383337343564366131323064613561,Brook Mars PS4 Controller,a:b1,b:b19,back:b17,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, +34313430343161653665353737323365,Elecom JC-W01U,a:b23,b:b24,back:b29,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b25,lefttrigger:b27,leftx:a0,lefty:a1,rightshoulder:b26,righttrigger:b28,rightx:a2,righty:a3,start:b30,x:b21,y:b22,platform:Android, +4875694a6961204a432d573031550000,Elecom JC-W01U,a:b23,b:b24,back:b29,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b25,lefttrigger:b27,leftx:a0,lefty:a1,rightshoulder:b26,righttrigger:b28,rightx:a2,righty:a3,start:b30,x:b21,y:b22,platform:Android, +30363230653635633863366338623265,Evo VR,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftx:a0,lefty:a1,x:b2,y:b3,platform:Android, +05000000b404000011240000dfff3f00,Flydigi Vader 2,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,paddle1:b17,paddle2:b18,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +05000000bc20000000550000ffff3f00,GameSir G3w,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +34323662653333636330306631326233,Google Nexus,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +35383633353935396534393230616564,Google Stadia Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +476f6f676c65204c4c43205374616469,Google Stadia Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +5374616469614e3848532d6532633400,Google Stadia Controller,a:b0,b:b1,back:b15,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +05000000d6020000e5890000dfff3f00,GPD XD Plus,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Android, +05000000d6020000e5890000dfff3f80,GPD XD Plus,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a3,rightx:a4,righty:a5,start:b6,x:b2,y:b3,platform:Android, +66633030656131663837396562323935,Hori Battle,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android, +35623466343433653739346434636330,Hori Fighting Commander 3 Pro,a:b1,b:b19,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, +484f524920434f2e2c4c54442e203130,Hori Fighting Commander 3 Pro,a:b1,b:b19,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b20,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b3,righttrigger:b9,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, +484f524920434f2e2c4c544420205041,Hori Gem Pad 3,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b4,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b16,x:b0,y:b2,platform:Android, +65656436646661313232656661616130,Hori PC Engine Mini Controller,a:b1,b:b19,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,start:b18,platform:Android, +31303433326562636431653534636633,Hori Real Arcade Pro 3,a:b1,b:b19,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, +32656664353964393561366362333636,Hori Switch Split Pad Pro,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android, +30306539356238653637313730656134,HORIPAD Switch Pro Controller,a:b0,b:b1,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b19,y:b2,platform:Android, +48797065726b696e2050616400000000,Hyperkin Admiral N64 Controller,+rightx:b6,+righty:b7,-rightx:b17,-righty:b5,a:b1,b:b0,leftshoulder:b3,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b20,start:b18,platform:Android, +62333331353131353034386136626636,Hyperkin Admiral N64 Controller,+rightx:b6,+righty:b7,-rightx:b17,-righty:b5,a:b1,b:b0,leftshoulder:b3,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b20,start:b18,platform:Android, +31306635363562663834633739396333,Hyperkin N64 Adapter,a:b1,b:b19,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightx:a2,righty:a3,start:b18,platform:Android, +5368616e57616e202020202048797065,Hyperkin N64 Adapter,a:b1,b:b19,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightx:a2,righty:a3,start:b18,platform:Android, +0500000083050000602000000ffe0000,iBuffalo SNES Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b15,rightshoulder:b16,start:b10,x:b2,y:b3,platform:Android, +5553422c322d6178697320382d627574,iBuffalo Super Famicom Controller,a:b1,b:b0,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b17,rightshoulder:b18,start:b10,x:b3,y:b2,platform:Android, +64306137363261396266353433303531,InterAct GoPad,a:b24,b:b25,leftshoulder:b23,lefttrigger:b27,leftx:a0,lefty:a1,rightshoulder:b26,righttrigger:b28,x:b21,y:b22,platform:Android, +532e542e442e20496e74657261637420,InterAct HammerHead FX,a:b23,b:b24,back:b30,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b26,leftstick:b22,lefttrigger:b28,leftx:a0,lefty:a1,rightshoulder:b27,rightstick:b25,righttrigger:b29,rightx:a2,righty:a3,start:b31,x:b20,y:b21,platform:Android, +65346535636333663931613264643164,Joy-Con,a:b21,b:b22,back:b29,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b25,lefttrigger:b27,leftx:a0,lefty:a1,rightshoulder:b26,righttrigger:b28,rightx:a2,righty:a3,start:b30,x:b23,y:b24,platform:Android, +33346566643039343630376565326335,Joy-Con (L),a:b0,b:b1,back:b7,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,rightshoulder:b20,start:b17,x:b19,y:b2,platform:Android, +35313531613435623366313835326238,Joy-Con (L),a:b0,b:b1,back:b7,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,rightshoulder:b20,start:b17,x:b19,y:b2,platform:Android, +4a6f792d436f6e20284c290000000000,Joy-Con (L),a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,rightshoulder:b20,start:b17,x:b19,y:b2,platform:Android, +38383665633039363066383334653465,Joy-Con (R),a:b0,b:b1,back:b5,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android, +39363561613936303237333537383931,Joy-Con (R),a:b0,b:b1,back:b5,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android, +39373064396565646338333134303131,Joy-Con (R),a:b1,b:b2,back:b5,leftstick:b8,leftx:a1~,lefty:a0,start:b6,x:b0,y:b3,platform:Android, +4a6f792d436f6e202852290000000000,Joy-Con (R),a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android, +39656136363638323036303865326464,JYS Aapter,a:b1,b:b19,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, +63316564383539663166353034616434,JYS Adapter,a:b1,b:b3,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b0,y:b2,platform:Android, +64623163333561643339623235373232,Logitech F310,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +35623364393661626231343866613337,Logitech F710,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +4c6f6769746563682047616d65706164,Logitech F710,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +64396331333230326333313330336533,Logitech F710,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +39653365373864633935383236363438,Logitech G Cloud,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +416d617a6f6e2047616d6520436f6e74,Luna Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android, +4c756e612047616d6570616400000000,Luna Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +30363066623539323534363639323363,Magic NS,a:b1,b:b19,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, +31353762393935386662336365626334,Magic NS,a:b1,b:b19,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, +39623565346366623931666633323530,Magic NS,a:b1,b:b3,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b0,y:b2,platform:Android, +6d6179666c617368206c696d69746564,Mayflash GameCube Adapter,a:b22,b:b21,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,lefttrigger:b25,leftx:a0,lefty:a1,rightshoulder:b28,righttrigger:b26,rightx:a5,righty:a2,start:b30,x:b23,y:b24,platform:Android, +436f6e74726f6c6c6572000000000000,Mayflash N64 Adapter,a:b1,b:b19,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightx:a2,righty:a3,start:b18,platform:Android, +65666330633838383061313633326461,Mayflash N64 Adapter,a:b1,b:b19,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightx:a2,righty:a3,start:b18,platform:Android, +37316565396364386635383230353365,Mayflash Saturn Adapter,a:b21,b:b22,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b26,lefttrigger:b28,rightshoulder:b27,righttrigger:b23,start:b30,x:b24,y:b25,platform:Android, +4875694a696120205553422047616d65,Mayflash Saturn Adapter,a:b21,b:b22,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b26,lefttrigger:b28,rightshoulder:b27,righttrigger:b23,start:b30,x:b24,y:b25,platform:Android, +535a4d792d706f776572204c54442043,Mayflash Wii Classic Adapter,a:b23,b:b22,back:b29,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b31,leftshoulder:b27,lefttrigger:b25,leftx:a0,lefty:a1,rightshoulder:b28,righttrigger:b26,rightx:a2,righty:a3,start:b30,x:b24,y:b21,platform:Android, +30653962643666303631376438373532,Mayflash Wii DolphinBar,a:b23,b:b24,back:b29,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b0,leftshoulder:b25,lefttrigger:b27,leftx:a0,lefty:a1,rightshoulder:b26,righttrigger:b28,rightx:a2,righty:a3,start:b30,x:b21,y:b22,platform:Android, +39346131396233376535393665363161,Mayflash Wii U Pro Adapter,a:b22,b:b23,back:b29,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b25,leftstick:b31,lefttrigger:b27,rightshoulder:b26,rightstick:b0,righttrigger:b28,rightx:a0,righty:a1,start:b30,x:b21,y:b24,platform:Android, +31323564663862633234646330373138,Mega Drive,a:b23,b:b22,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,rightshoulder:b25,righttrigger:b26,start:b30,x:b24,y:b21,platform:Android, +37333564393261653735306132613061,Mega Drive,a:b21,b:b22,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b26,lefttrigger:b28,rightshoulder:b27,righttrigger:b23,start:b30,x:b24,y:b25,platform:Android, +64363363336633363736393038313464,Mega Drive,a:b1,b:b0,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,start:b9,x:b2,y:b3,platform:Android, +33323763323132376537376266393366,Microsoft Dual Strike,a:b24,b:b23,back:b25,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b27,lefttrigger:b29,rightshoulder:b78,rightx:a0,righty:a1~,start:b26,x:b22,y:b21,platform:Android, +30306461613834333439303734316539,Microsoft SideWinder Pro,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b20,lefttrigger:b9,rightshoulder:b19,righttrigger:b10,start:b17,x:b2,y:b3,platform:Android, +32386235353630393033393135613831,Microsoft Xbox Series Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +4d4f42415041442050726f2d48440000,Mobapad Chitu HD,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +4d4f435554452d303533582d4d35312d,Mocute 053X,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +33343361376163623438613466616531,Mocute M053,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +39306635663061636563316166303966,Mocute M053,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +7573622067616d657061642020202020,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Android, +050000007e05000009200000ffff0f00,Nintendo Switch Pro Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b16,x:b17,y:b2,platform:Android, +31316661666466633938376335383661,Nintendo Switch Pro Controller,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,misc1:b5,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,start:b6,x:b3,y:b2,platform:Android, +34323437396534643531326161633738,Nintendo Switch Pro Controller,a:b0,b:b1,back:b15,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,misc1:b5,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +50726f20436f6e74726f6c6c65720000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b2,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b10,rightx:a2,righty:a3,start:b18,y:b3,platform:Android, +36326533353166323965623661303933,NSO N64 Controller,+rightx:b17,+righty:b10,-rightx:b2,-righty:b19,a:b1,b:b0,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,misc1:b7,rightshoulder:b20,righttrigger:b15,start:b18,platform:Android, +4e363420436f6e74726f6c6c65720000,NSO N64 Controller,+rightx:b17,+righty:b10,-rightx:b2,-righty:b19,a:b1,b:b0,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,misc1:b7,rightshoulder:b20,righttrigger:b15,start:b18,platform:Android, +534e455320436f6e74726f6c6c657200,NSO SNES Controller,a:b0,b:b1,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android, +64623863346133633561626136366634,NSO SNES Controller,a:b0,b:b1,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android, +050000005509000003720000cf7f3f00,NVIDIA Controller,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000005509000010720000ffff3f00,NVIDIA Controller,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000005509000014720000df7f3f00,NVIDIA Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Android, +050000005509000014720000df7f3f80,NVIDIA Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a3,rightx:a4,righty:a5,start:b6,x:b2,y:b3,platform:Android, +37336435666338653565313731303834,NVIDIA Controller,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +4e564944494120436f72706f72617469,NVIDIA Controller,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +61363931656135336130663561616264,NVIDIA Controller,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +39383335313438623439373538343266,OUYA Controller,a:b0,b:b2,dpdown:b18,dpleft:b15,dpright:b16,dpup:b17,leftshoulder:b3,leftstick:b9,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b10,righttrigger:b7,rightx:a3,righty:a4,x:b1,y:b19,platform:Android, +4f5559412047616d6520436f6e74726f,OUYA Controller,a:b0,b:b2,dpdown:b18,dpleft:b15,dpright:b6,dpup:b17,leftshoulder:b3,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b19,platform:Android, +506572666f726d616e63652044657369,PDP PS3 Rock Candy Controller,a:b1,b:b17,back:h0.2,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b4,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b16,x:b0,y:b2,platform:Android, +61653962353232366130326530363061,Pokken,a:b1,b:b19,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,lefttrigger:b9,rightshoulder:b20,righttrigger:b10,start:b18,x:b0,y:b2,platform:Android, +32666633663735353234363064386132,PS2,a:b23,b:b22,back:b29,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b27,lefttrigger:b25,leftx:a0,lefty:a1,rightshoulder:b28,righttrigger:b26,rightx:a3,righty:a2,start:b30,x:b24,y:b21,platform:Android, +050000004c05000068020000dfff3f00,PS3 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +536f6e7920504c415953544154494f4e,PS3 Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +61363034663839376638653463633865,PS3 Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +66366539656564653432353139356536,PS3 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +66383132326164626636313737373037,PS3 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000004c050000c405000000783f00,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000004c050000c4050000fffe3f00,PS4 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:+a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android, +050000004c050000c4050000fffe3f80,PS4 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:+a3,rightx:a4,righty:a5,start:b16,x:b0,y:b2,platform:Android, +050000004c050000c4050000ffff3f00,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000004c050000cc090000fffe3f00,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000004c050000cc090000ffff3f00,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +30303839663330346632363232623138,PS4 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android, +31326235383662333266633463653332,PS4 Controller,a:b1,b:b16,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a4,rightx:a2,righty:a5,start:b17,x:b0,y:b2,platform:Android, +31373231336561636235613666323035,PS4 Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +31663838336334393132303338353963,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +34613139376634626133336530386430,PS4 Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +35643031303033326130316330353564,PS4 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:+a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android, +37626233336235343937333961353732,PS4 Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +37626464343430636562316661643863,PS4 Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +38393161636261653636653532386639,PS4 Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +63313733393535663339656564343962,PS4 Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +63393662363836383439353064663939,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +65366465656364636137653363376531,PS4 Controller,a:b1,b:b19,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, +66613532303965383534396638613230,PS4 Controller,a:b1,b:b19,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a5,start:b18,x:b0,y:b2,platform:Android, +050000004c050000e60c0000fffe3f00,PS5 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android, +050000004c050000e60c0000fffe3f80,PS5 Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a3,rightx:a4,righty:a5,start:b16,x:b2,y:b17,platform:Android, +050000004c050000e60c0000ffff3f00,PS5 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +32346465346533616263386539323932,PS5 Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +32633532643734376632656664383733,PS5 Controller,a:b1,b:b19,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a5,start:b18,x:b0,y:b2,platform:Android, +37363764353731323963323639666565,PS5 Controller,a:b1,b:b19,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a5,start:b18,x:b0,y:b2,platform:Android, +61303162353165316365336436343139,PS5 Controller,a:b1,b:b19,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,misc1:b8,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a5,start:b18,x:b0,y:b2,platform:Android, +64336263393933626535303339616332,Qanba 4RAF,a:b0,b:b1,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b20,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b3,righttrigger:b9,rightx:a2,righty:a3,start:b18,x:b19,y:b2,platform:Android, +36626666353861663864336130363137,Razer Junglecat,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +05000000f8270000bf0b0000ffff3f00,Razer Kishi,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +62653861643333663663383332396665,Razer Kishi,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000003215000005070000ffff3f00,Razer Raiju Mobile,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000003215000007070000ffff3f00,Razer Raiju Mobile,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000003215000000090000bf7f3f00,Razer Serval,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b2,y:b3,platform:Android, +5a6869587520526574726f2042697420,Retro Bit Saturn Controller,a:b21,b:b22,back:b29,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b25,lefttrigger:b26,rightshoulder:b27,righttrigger:b28,start:b30,x:b23,y:b24,platform:Android, +32417865732031314b6579732047616d,Retro Bit SNES Controller,a:b0,b:b1,back:b15,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,rightshoulder:b10,start:b6,x:b2,y:b3,platform:Android, +36313938306539326233393732613361,Retro Bit SNES Controller,a:b0,b:b1,back:b15,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,rightshoulder:b10,start:b6,x:b2,y:b3,platform:Android, +526574726f466c616720576972656420,Retro Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b17,rightshoulder:b18,start:b10,x:b2,y:b3,platform:Android, +61343739353764363165343237303336,Retro Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b17,lefttrigger:b18,leftx:a0,lefty:a1,start:b10,x:b2,y:b3,platform:Android, +526574726f696420506f636b65742043,Retroid Pocket,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b17,paddle2:b18,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +582d426f7820436f6e74726f6c6c6572,Retroid Pocket,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b17,paddle2:b18,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +64633735616665613536653363336132,Retroid Pocket,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,paddle1:b19,paddle2:b20,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +38653130373365613538333235303036,Retroid Pocket 2,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +64363363336633363736393038313463,Retrolink,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,start:b6,platform:Android, +37393234373533633333323633646531,RetroUSB N64 RetroPort,+rightx:b17,+righty:b15,-rightx:b18,-righty:b6,a:b10,b:b9,dpdown:b19,dpleft:b1,dpright:b0,dpup:b2,leftshoulder:b7,lefttrigger:b20,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Android, +5365616c6965436f6d707574696e6720,RetroUSB N64 RetroPort,+rightx:b17,+righty:b15,-rightx:b18,-righty:b6,a:b10,b:b9,dpdown:b19,dpleft:b1,dpright:b0,dpup:b2,leftshoulder:b7,lefttrigger:b20,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Android, +526574726f5553422e636f6d20534e45,RetroUSB SNES RetroPort,a:b1,b:b20,back:b19,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,rightshoulder:b10,start:b2,x:b0,y:b3,platform:Android, +64643037633038386238303966376137,RetroUSB SNES RetroPort,a:b1,b:b20,back:b19,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,rightshoulder:b10,start:b2,x:b0,y:b3,platform:Android, +37656564346533643138636436356230,Rock Candy Switch Controller,a:b1,b:b19,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,misc1:b7,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, +33373336396634316434323337666361,RumblePad 2,a:b22,b:b23,back:b29,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b25,lefttrigger:b27,leftx:a0,lefty:a1,rightshoulder:b26,righttrigger:b28,rightx:a2,righty:a3,start:b30,x:b21,y:b24,platform:Android, +36363537303435333566386638366333,Samsung EIGP20,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +53616d73756e672047616d6520506164,Samsung EIGP20,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +66386565396238363534313863353065,Sanwa PlayOnline Mobile,a:b21,b:b22,back:b23,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b24,platform:Android, +32383165316333383766336338373261,Saturn,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:a4,righttrigger:a5,x:b2,y:b3,platform:Android, +38613865396530353338373763623431,Saturn,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,lefttrigger:b10,rightshoulder:b20,righttrigger:b19,start:b17,x:b2,y:b3,platform:Android, +61316232336262373631343137633631,Saturn,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:a4,righttrigger:a5,x:b2,y:b3,platform:Android, +30353835333338613130373363646337,SG H510,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b17,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b18,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b19,y:b2,platform:Android, +66386262366536653765333235343634,SG H510,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b2,y:b3,platform:Android, +66633132393363353531373465633064,SG H510,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b17,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b18,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b19,y:b2,platform:Android, +62653761636366393366613135366338,SN30 PP,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +38376662666661636265313264613039,SNES,a:b0,b:b1,back:b9,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b3,rightshoulder:b20,start:b10,x:b19,y:b2,platform:Android, +5346432f555342205061640000000000,SNES Adapter,a:b0,b:b1,back:b9,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b3,rightshoulder:b20,start:b10,x:b19,y:b2,platform:Android, +5553422047616d657061642000000000,SNES Controller,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android, +62653335326261303663356263626339,Sony PlayStation Classic Controller,a:b19,b:b1,back:b17,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,lefttrigger:b3,rightshoulder:b10,righttrigger:b20,start:b18,x:b2,y:b0,platform:Android, +536f6e7920496e746572616374697665,Sony PlayStation Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,misc1:b8,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +576972656c65737320436f6e74726f6c,Sony PlayStation Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +63303964303462366136616266653561,Sony PSP,a:b21,b:b22,back:b27,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b25,leftx:a0,lefty:a1,rightshoulder:b26,start:b28,x:b23,y:b24,platform:Android, +63376637643462343766333462383235,Sony Vita,a:b1,b:b19,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftx:a0,lefty:a1,rightshoulder:b20,rightx:a3,righty:a4,start:b18,x:b0,y:b2,platform:Android, +05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Android, +05000000de2800000611000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Android, +0500000011010000201400000f7e0f00,SteelSeries Nimbus,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:b10,rightx:a2,righty:a3,x:b19,y:b2,platform:Android, +35306436396437373135383665646464,SteelSeries Nimbus Plus,a:b0,b:b1,leftshoulder:b3,leftstick:b17,lefttrigger:b9,leftx:a0,rightshoulder:b20,rightstick:b18,righttrigger:b10,rightx:a2,x:b19,y:b2,platform:Android, +33313930373536613937326534303931,Taito Egret II Mini Control Panel,a:b25,b:b23,back:b27,guide:b30,leftx:a0,lefty:a1,rightshoulder:b21,righttrigger:b22,start:b28,x:b29,y:b24,platform:Android, +54475a20436f6e74726f6c6c65720000,TGZ Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +62363434353532386238336663643836,TGZ Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +37323236633763666465316365313236,THEC64 Joystick,a:b21,b:b22,back:b27,leftshoulder:b25,leftx:a0,lefty:a1,rightshoulder:b26,start:b27,x:b23,y:b24,platform:Android, +38346162326232346533316164363336,THEGamepad,a:b23,b:b22,back:b27,leftshoulder:b25,leftx:a0,lefty:a1,rightshoulder:b26,start:b28,x:b24,y:b21,platform:Android, +050000004f0400000ed00000fffe3f00,Thrustmaster eSwap Pro Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +5477696e20555342204a6f7973746963,Twin Joystick,a:b22,b:b21,back:b28,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b26,leftstick:b30,lefttrigger:b24,leftx:a0,lefty:a1,rightshoulder:b27,rightstick:b31,righttrigger:b25,rightx:a3,righty:a2,start:b29,x:b23,y:b20,platform:Android, +30623739343039643830333266346439,Valve Steam Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,leftx:a0,lefty:a1,paddle1:b24,paddle2:b23,rightshoulder:b10,rightstick:b8,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +31643365666432386133346639383937,Valve Steam Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,leftx:a0,lefty:a1,paddle1:b24,paddle2:b23,rightshoulder:b10,rightstick:b8,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +30386438313564306161393537333663,Wii Classic Adapter,a:b23,b:b22,back:b29,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b27,lefttrigger:b25,leftx:a0,lefty:a1,rightshoulder:b28,righttrigger:b26,rightx:a2,righty:a3,start:b30,x:b24,y:b21,platform:Android, +33333034646336346339646538643633,Wii Classic Adapter,a:b23,b:b22,back:b29,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b27,lefttrigger:b25,leftx:a0,lefty:a1,rightshoulder:b28,righttrigger:b26,rightx:a2,righty:a3,start:b30,x:b24,y:b21,platform:Android, +050000005e0400008e02000000783f00,Xbox 360 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +30396232393162346330326334636566,Xbox 360 Controller,a:b0,b:b1,back:b4,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +38313038323730383864666463383533,Xbox 360 Controller,a:b0,b:b1,back:b4,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +58626f782033363020576972656c6573,Xbox 360 Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +65353331386662343338643939643636,Xbox 360 Controller,a:b0,b:b1,back:b4,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +65613532386633373963616462363038,Xbox 360 Controller,a:b0,b:b1,back:b4,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +47656e6572696320582d426f78207061,Xbox Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +4d6963726f736f667420582d426f7820,Xbox Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +64633436313965656664373634323364,Xbox Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b19,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000005e04000091020000ff073f00,Xbox One Controller,a:b0,b:b1,back:b4,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android, +050000005e04000091020000ff073f80,Xbox One Controller,a:b0,b:b1,back:b4,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000005e040000e00200000ffe3f00,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b16,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b17,y:b2,platform:Android, +050000005e040000e00200000ffe3f80,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b16,righttrigger:a5,rightx:a2,righty:a3,start:b10,x:b17,y:b2,platform:Android, +050000005e040000e0020000ffff3f00,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b4,leftshoulder:b3,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b17,y:b2,platform:Android, +050000005e040000e0020000ffff3f80,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b4,leftshoulder:b3,leftstick:b8,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b7,righttrigger:a5,rightx:a2,righty:a3,start:b10,x:b17,y:b2,platform:Android, +050000005e040000fd020000ffff3f00,Xbox One Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +33356661323266333733373865656366,Xbox One Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +34356136633366613530316338376136,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b3,leftstick:b15,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b16,righttrigger:a5,rightx:a3,righty:a4,x:b17,y:b2,platform:Android, +35623965373264386238353433656138,Xbox One Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +36616131643361333337396261666433,Xbox One Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +58626f7820576972656c65737320436f,Xbox One Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +65316262316265373335666131623538,Xbox One Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000005e040000000b000000783f00,Xbox One Elite 2 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android, +050000005e040000000b000000783f80,Xbox One Elite 2 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000005e040000050b0000ffff3f00,Xbox One Elite 2 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a6,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000005e040000e002000000783f00,Xbox One S Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000005e040000ea02000000783f00,Xbox One S Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000005e040000fd020000ff7f3f00,Xbox One S Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000005e040000120b000000783f00,Xbox Series Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android, +050000005e040000120b000000783f80,Xbox Series Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000005e040000130b0000ffff3f00,Xbox Series Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +65633038363832353634653836396239,Xbox Series Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000001727000044310000ffff3f00,XiaoMi Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a7,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a6,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Android, + +# iOS +05000000ac0500000100000000006d01,*,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,x:b2,y:b3,platform:iOS, +05000000ac050000010000004f066d01,*,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,x:b2,y:b3,platform:iOS, +05000000ac05000001000000cf076d01,*,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b2,y:b3,platform:iOS, +05000000ac05000001000000df076d01,*,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS, +05000000ac05000001000000ff076d01,*,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, +05000000ac0500000200000000006d02,*,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,rightshoulder:b5,x:b2,y:b3,platform:iOS, +05000000ac050000020000004f066d02,*,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,rightshoulder:b5,x:b2,y:b3,platform:iOS, +05000000ac05000004000000a8986d04,8BitDo Micro,a:b1,b:b0,back:b4,dpdown:b7,dpleft:b8,dpright:b9,dpup:b10,guide:b2,leftshoulder:b11,lefttrigger:b12,rightshoulder:b13,righttrigger:b14,start:b3,x:b6,y:b5,platform:iOS, +05000000ac05000004000000fd216d04,8BitDo Pro 2,a:b3,b:b2,back:b6,dpdown:b9,dpleft:b10,dpright:b11,dpup:b12,guide:b4,leftshoulder:b13,leftstick:b14,lefttrigger:+a2,leftx:a0,lefty:a1~,paddle1:b1,paddle2:b0,rightshoulder:b16,rightstick:b17,righttrigger:+a5,rightx:a3,righty:a4~,start:b5,x:b8,y:b7,platform:iOS, +05000000ac05000004000000209f6d04,8Bitdo SN30 Pro,a:b1,b:b0,back:b4,dpdown:b7,dpleft:b8,dpright:b9,dpup:b10,guide:b2,leftshoulder:b11,leftstick:b12,lefttrigger:b13,leftx:a0,lefty:a1~,rightshoulder:b14,rightstick:b15,righttrigger:b16,rightx:a2,righty:a3~,start:b3,x:b6,y:b5,platform:iOS, +05000000ac050000040000003b8a6d04,8BitDo SN30 Pro+,a:b1,b:b0,back:b4,dpdown:b7,dpleft:b8,dpright:b9,dpup:b10,guide:b2,leftshoulder:b11,leftstick:b12,lefttrigger:b13,leftx:a0,lefty:a1~,rightshoulder:b14,rightstick:b15,righttrigger:b16,rightx:a2,righty:a3~,start:b3,x:b6,y:b5,platform:iOS, +050000008a35000003010000ff070000,Backbone One,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, +050000008a35000004010000ff070000,Backbone One,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, +4d466947616d65706164010000000000,MFi Extended Gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:iOS, +4d466947616d65706164020000000000,MFi Gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,rightshoulder:b5,start:b6,x:b2,y:b3,platform:iOS, +050000007e050000062000000f060000,Nintendo Switch Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b2,leftshoulder:b4,rightshoulder:b5,x:b1,y:b3,platform:iOS, +050000007e050000062000004f060000,Nintendo Switch Joy-Con (L),+leftx:h0.1,+lefty:h0.2,-leftx:h0.4,-lefty:h0.8,dpdown:b2,dpleft:b0,dpright:b3,dpup:b1,leftshoulder:b4,misc1:b6,rightshoulder:b5,platform:iOS, +050000007e05000008200000df070000,Nintendo Switch Joy-Con (L/R),a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:iOS, +050000007e0500000e200000df070000,Nintendo Switch Joy-Con (L/R),a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:iOS, +050000007e050000072000000f060000,Nintendo Switch Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b2,leftshoulder:b4,rightshoulder:b5,x:b1,y:b3,platform:iOS, +050000007e050000072000004f060000,Nintendo Switch Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b2,guide:b6,leftshoulder:b4,rightshoulder:b5,x:b1,y:b3,platform:iOS, +050000007e05000009200000df870000,Nintendo Switch Pro Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b10,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:iOS, +050000007e05000009200000ff870000,Nintendo Switch Pro Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b3,y:b2,platform:iOS, +05000000ac050000040000008e586d04,PlayStation VR2 Sense Controller (L),+leftx:+a3,+lefty:+a1,-leftx:+a2,-lefty:+a4,back:b2,leftstick:b4,lefttrigger:+a7,paddle2:b3,x:b0,y:b1,platform:iOS, +05000000ac050000040000000eb86d04,PlayStation VR2 Sense Controller (R),+rightx:+a3,+righty:+a1,-rightx:+a2,-righty:+a4,a:b0,b:b1,paddle1:b3,rightstick:b4,righttrigger:+a7,start:b2,platform:iOS, +050000004c050000cc090000df070000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS, +050000004c050000cc090000df870001,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS, +050000004c050000cc090000ff070000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, +050000004c050000cc090000ff870001,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,touchpad:b11,x:b2,y:b3,platform:iOS, +050000004c050000cc090000ff876d01,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, +050000004c050000e60c0000df870000,PS5 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,touchpad:b10,x:b2,y:b3,platform:iOS, +050000004c050000e60c0000ff870000,PS5 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,touchpad:b11,x:b2,y:b3,platform:iOS, +05000000ac0500000300000000006d03,Remote,a:b0,b:b2,leftx:a0,lefty:a1,platform:iOS, +05000000ac0500000300000043006d03,Remote,a:b0,b:b2,leftx:a0,lefty:a1,platform:iOS, +05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:iOS, +05000000de2800000611000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:iOS, +050000005e040000050b0000df070001,Xbox Elite Wireless Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b10,paddle2:b12,paddle3:b11,paddle4:b13,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS, +050000005e040000050b0000ff070001,Xbox Elite Wireless Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b13,paddle3:b12,paddle4:b14,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, +050000005e040000130b0000df870001,Xbox Series X Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b10,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS, +050000005e040000130b0000ff870001,Xbox Series X Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, +050000005e040000e0020000df070000,Xbox Wireless Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS, +050000005e040000e0020000ff070000,Xbox Wireless Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, diff --git a/py/assets/levels/collecting.ldtk b/py/assets/levels/collecting.ldtk new file mode 100644 index 0000000..926052a --- /dev/null +++ b/py/assets/levels/collecting.ldtk @@ -0,0 +1,5571 @@ +{ + "__header__": { + "fileType": "LDtk Project JSON", + "app": "LDtk", + "doc": "https://ldtk.io/json", + "schema": "https://ldtk.io/files/JSON_SCHEMA.json", + "appAuthor": "Sebastien 'deepnight' Benard", + "appVersion": "1.5.3", + "url": "https://ldtk.io" + }, + "iid": "d73f3980-d380-11f0-87cf-5fab6ff1ccf3", + "jsonVersion": "1.5.3", + "appBuildId": 473703, + "nextUid": 193, + "identifierStyle": "Capitalize", + "toc": [], + "worldLayout": "Free", + "worldGridWidth": 256, + "worldGridHeight": 256, + "defaultLevelWidth": 256, + "defaultLevelHeight": 256, + "defaultPivotX": 0, + "defaultPivotY": 0, + "defaultGridSize": 18, + "defaultEntityWidth": 18, + "defaultEntityHeight": 18, + "bgColor": "#40465B", + "defaultLevelBgColor": "#696A79", + "minifyJson": false, + "externalLevels": false, + "exportTiled": false, + "simplifiedExport": false, + "imageExportMode": "None", + "exportLevelBg": true, + "pngFilePattern": null, + "backupOnSave": false, + "backupLimit": 10, + "backupRelPath": null, + "levelNamePattern": "Level_%idx", + "tutorialDesc": null, + "customCommands": [], + "flags": [], + "defs": { "layers": [ + { + "__type": "Entities", + "identifier": "Entities", + "type": "Entities", + "uid": 191, + "doc": null, + "uiColor": null, + "gridSize": 4, + "guideGridWid": 0, + "guideGridHei": 0, + "displayOpacity": 1, + "inactiveOpacity": 0.6, + "hideInList": false, + "hideFieldsWhenInactive": true, + "canSelectWhenInactive": true, + "renderInWorldView": true, + "pxOffsetX": 0, + "pxOffsetY": 0, + "parallaxFactorX": 0, + "parallaxFactorY": 0, + "parallaxScaling": true, + "requiredTags": [], + "excludedTags": [], + "autoTilesKilledByOtherLayerUid": null, + "uiFilterTags": [], + "useAsyncRender": false, + "intGridValues": [], + "intGridValuesGroups": [], + "autoRuleGroups": [], + "autoSourceLayerDefUid": null, + "tilesetDefUid": null, + "tilePivotX": 0, + "tilePivotY": 0, + "biomeFieldUid": null + }, + { + "__type": "IntGrid", + "identifier": "IntGrid", + "type": "IntGrid", + "uid": 3, + "doc": null, + "uiColor": null, + "gridSize": 18, + "guideGridWid": 0, + "guideGridHei": 0, + "displayOpacity": 1, + "inactiveOpacity": 1, + "hideInList": false, + "hideFieldsWhenInactive": false, + "canSelectWhenInactive": true, + "renderInWorldView": true, + "pxOffsetX": 0, + "pxOffsetY": 0, + "parallaxFactorX": 0, + "parallaxFactorY": 0, + "parallaxScaling": true, + "requiredTags": [], + "excludedTags": [], + "autoTilesKilledByOtherLayerUid": null, + "uiFilterTags": [], + "useAsyncRender": false, + "intGridValues": [ + { "value": 1, "identifier": "walls", "color": "#C28569", "tile": null, "groupUid": 0 }, + { "value": 2, "identifier": "clouds", "color": "#F7F5F5", "tile": null, "groupUid": 0 }, + { "value": 3, "identifier": "trees", "color": "#63C74D", "tile": null, "groupUid": 0 }, + { "value": 4, "identifier": "trunks", "color": "#BE4A2F", "tile": null, "groupUid": 0 } + ], + "intGridValuesGroups": [], + "autoRuleGroups": [ + { + "uid": 116, + "name": "trunks", + "color": null, + "icon": null, + "active": true, + "isOptional": false, + "rules": [ + { + "uid": 167, + "active": true, + "size": 3, + "tileRectsIds": [[58]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,3,0,3,3,4,0,-3,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": null, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 3116739, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 172, + "active": true, + "size": 3, + "tileRectsIds": [[57]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,3,0,-3,3,4,0,-3,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": null, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 3116739, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 168, + "active": true, + "size": 3, + "tileRectsIds": [[38]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,3,0,3,3,4,0,3,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": null, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 3116739, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 169, + "active": true, + "size": 3, + "tileRectsIds": [[38]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,3,0,4,3,3,0,3,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": null, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 3116739, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 170, + "active": true, + "size": 3, + "tileRectsIds": [[58]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,3,0,4,3,3,0,-3,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": null, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 3116739, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 171, + "active": true, + "size": 3, + "tileRectsIds": [[59]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,3,0,4,3,-3,0,-3,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": null, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 3116739, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 173, + "active": true, + "size": 3, + "tileRectsIds": [[38]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,3,0,3,3,3,0,4,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": null, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 3116739, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 174, + "active": true, + "size": 3, + "tileRectsIds": [[18]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-3,0,3,3,3,0,4,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": null, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 3116739, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 117, + "active": true, + "size": 3, + "tileRectsIds": [[97]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,3,0,3,4,3,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": null, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 4416921, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 166, + "active": true, + "size": 3, + "tileRectsIds": [ [96], [116] ], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,0,4,0,0,-1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": null, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 3675461, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 175, + "active": true, + "size": 3, + "tileRectsIds": [[137]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,4,0,0,4,0,0,1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": null, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 3675461, + "perlinScale": 0.2, + "perlinOctaves": 2 + } + ], + "usesWizard": false, + "requiredBiomeValues": [], + "biomeRequirementMode": 0 + }, + { + "uid": 99, + "name": "trees", + "color": null, + "icon": null, + "active": true, + "isOptional": false, + "rules": [ + { + "uid": 150, + "active": true, + "size": 3, + "tileRectsIds": [[16]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-3,0,-3,3,-3,0,-3,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 3, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 8361328, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 151, + "active": true, + "size": 3, + "tileRectsIds": [[77]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-3,0,-3,3,0,0,-3,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 3, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 2633089, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 152, + "active": true, + "size": 3, + "tileRectsIds": [[79]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-3,0,0,3,-3,0,-3,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 3, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 5051035, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 153, + "active": true, + "size": 3, + "tileRectsIds": [[78]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-3,0,0,3,0,0,-3,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 3, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 1854154, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 154, + "active": true, + "size": 3, + "tileRectsIds": [[36]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-3,0,-3,3,-3,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 3, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 579623, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 155, + "active": true, + "size": 3, + "tileRectsIds": [[76]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,-3,3,-3,0,-3,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 3, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 7616645, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 156, + "active": true, + "size": 3, + "tileRectsIds": [[56]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,-3,3,-3,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 3, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 9052676, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 157, + "active": true, + "size": 3, + "tileRectsIds": [[17]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-3,0,-3,3,0,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 3, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 1665955, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 158, + "active": true, + "size": 3, + "tileRectsIds": [[19]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-3,0,0,3,-3,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 3, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 6836908, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 159, + "active": true, + "size": 3, + "tileRectsIds": [[59]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,0,3,-3,0,-3,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 3, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 9407960, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 160, + "active": true, + "size": 3, + "tileRectsIds": [[57]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,-3,3,0,0,-3,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 3, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 2177855, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 161, + "active": true, + "size": 3, + "tileRectsIds": [[18]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-3,0,0,3,0,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 3, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 1611404, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 162, + "active": true, + "size": 3, + "tileRectsIds": [[39]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,0,3,-3,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 3, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 7076077, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 163, + "active": true, + "size": 3, + "tileRectsIds": [[58]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,0,3,0,0,-3,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 3, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 4450915, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 164, + "active": true, + "size": 3, + "tileRectsIds": [[37]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,-3,3,0,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 3, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 5393818, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 165, + "active": true, + "size": 1, + "tileRectsIds": [[38]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [3], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 3, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 1014530, + "perlinScale": 0.2, + "perlinOctaves": 2 + } + ], + "usesWizard": false, + "requiredBiomeValues": [], + "biomeRequirementMode": 0 + }, + { + "uid": 39, + "name": "clouds", + "color": null, + "icon": null, + "active": true, + "isOptional": false, + "rules": [ + { + "uid": 40, + "active": true, + "size": 3, + "tileRectsIds": [[156]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-2,0,-2,2,-2,0,-2,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 2, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 1447730, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 41, + "active": true, + "size": 3, + "tileRectsIds": [[153]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-2,0,-2,2,0,0,-2,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 2, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 3308547, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 42, + "active": true, + "size": 3, + "tileRectsIds": [[155]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-2,0,0,2,-2,0,-2,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 2, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 2061711, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 43, + "active": true, + "size": 3, + "tileRectsIds": [[154]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-2,0,0,2,0,0,-2,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 2, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 6319210, + "perlinScale": 0.2, + "perlinOctaves": 2 + } + ], + "usesWizard": true, + "requiredBiomeValues": [], + "biomeRequirementMode": 0 + }, + { + "uid": 4, + "name": "walls", + "color": null, + "icon": null, + "active": true, + "isOptional": false, + "rules": [ + { + "uid": 47, + "active": true, + "size": 3, + "tileRectsIds": [[0]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,-1,1,-1,0,-1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 2573424, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 48, + "active": true, + "size": 3, + "tileRectsIds": [[4]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,-1,1,1,0,1,-1], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 5728887, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 49, + "active": true, + "size": 3, + "tileRectsIds": [[5]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,1,1,-1,-1,1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 3731684, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 50, + "active": true, + "size": 3, + "tileRectsIds": [[25]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [-1,1,0,1,1,-1,0,-1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 5393657, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 51, + "active": true, + "size": 3, + "tileRectsIds": [[24]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,1,-1,-1,1,1,0,-1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 2759139, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 52, + "active": true, + "size": 3, + "tileRectsIds": [[1]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,-1,1,0,0,-1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 3628070, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 53, + "active": true, + "size": 3, + "tileRectsIds": [[3]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,0,1,-1,0,-1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 329268, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 54, + "active": true, + "size": 3, + "tileRectsIds": [[2]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,0,1,0,0,-1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 3230151, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 55, + "active": true, + "size": 3, + "tileRectsIds": [[21]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,-1,1,0,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 5032169, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 56, + "active": true, + "size": 3, + "tileRectsIds": [[23]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,0,1,-1,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 3560916, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 57, + "active": true, + "size": 3, + "tileRectsIds": [[143]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,0,1,-1,0,-1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 2981275, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 58, + "active": true, + "size": 3, + "tileRectsIds": [[141]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,-1,1,0,0,-1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 2125068, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 59, + "active": true, + "size": 3, + "tileRectsIds": [[22]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,0,1,0,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 4206024, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 60, + "active": true, + "size": 3, + "tileRectsIds": [[123]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,0,1,-1,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 6801093, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 61, + "active": true, + "size": 3, + "tileRectsIds": [[142]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,0,1,0,0,-1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 256579, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 62, + "active": true, + "size": 3, + "tileRectsIds": [[121]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,-1,1,0,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 6625497, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 63, + "active": true, + "size": 1, + "tileRectsIds": [[122]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [1], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 58927, + "perlinScale": 0.2, + "perlinOctaves": 2 + } + ], + "usesWizard": true, + "requiredBiomeValues": [], + "biomeRequirementMode": 0 + }, + { + "uid": 21, + "name": "plants", + "color": null, + "icon": null, + "active": true, + "isOptional": false, + "rules": [ + { + "uid": 22, + "active": true, + "size": 3, + "tileRectsIds": [ [124], [125], [128], [144] ], + "alpha": 1, + "chance": 0.2, + "breakOnMatch": true, + "pattern": [0,0,0,0,0,0,0,1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": null, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 467680, + "perlinScale": 0.2, + "perlinOctaves": 2 + } + ], + "usesWizard": false, + "requiredBiomeValues": [], + "biomeRequirementMode": 0 + } + ], + "autoSourceLayerDefUid": null, + "tilesetDefUid": 1, + "tilePivotX": 0, + "tilePivotY": 0, + "biomeFieldUid": null + }, + { + "__type": "Tiles", + "identifier": "Background", + "type": "Tiles", + "uid": 180, + "doc": null, + "uiColor": null, + "gridSize": 24, + "guideGridWid": 0, + "guideGridHei": 0, + "displayOpacity": 1, + "inactiveOpacity": 1, + "hideInList": false, + "hideFieldsWhenInactive": false, + "canSelectWhenInactive": true, + "renderInWorldView": true, + "pxOffsetX": 0, + "pxOffsetY": 0, + "parallaxFactorX": 0, + "parallaxFactorY": 0, + "parallaxScaling": true, + "requiredTags": [], + "excludedTags": [], + "autoTilesKilledByOtherLayerUid": null, + "uiFilterTags": [], + "useAsyncRender": false, + "intGridValues": [], + "intGridValuesGroups": [], + "autoRuleGroups": [], + "autoSourceLayerDefUid": null, + "tilesetDefUid": 2, + "tilePivotX": 0, + "tilePivotY": 0, + "biomeFieldUid": null + } + ], "entities": [ + { + "identifier": "Start", + "uid": 181, + "tags": [], + "exportToToc": false, + "allowOutOfBounds": false, + "doc": null, + "width": 24, + "height": 24, + "resizableX": false, + "resizableY": false, + "minWidth": null, + "maxWidth": null, + "minHeight": null, + "maxHeight": null, + "keepAspectRatio": false, + "tileOpacity": 1, + "fillOpacity": 0.08, + "lineOpacity": 0, + "hollow": false, + "color": "#4CBE2F", + "renderMode": "Tile", + "showName": true, + "tilesetId": 183, + "tileRenderMode": "FitInside", + "tileRect": { "tilesetUid": 183, "x": 24, "y": 0, "w": 24, "h": 24 }, + "uiTileRect": { "tilesetUid": 183, "x": 24, "y": 0, "w": 24, "h": 24 }, + "nineSliceBorders": [], + "maxCount": 0, + "limitScope": "PerLevel", + "limitBehavior": "MoveLastOne", + "pivotX": 0.5, + "pivotY": 0.5, + "fieldDefs": [] + }, + { + "identifier": "Bat", + "uid": 182, + "tags": [], + "exportToToc": false, + "allowOutOfBounds": false, + "doc": null, + "width": 24, + "height": 24, + "resizableX": false, + "resizableY": false, + "minWidth": null, + "maxWidth": null, + "minHeight": null, + "maxHeight": null, + "keepAspectRatio": false, + "tileOpacity": 1, + "fillOpacity": 0.08, + "lineOpacity": 0, + "hollow": false, + "color": "#F03307", + "renderMode": "Tile", + "showName": true, + "tilesetId": 183, + "tileRenderMode": "FitInside", + "tileRect": { "tilesetUid": 183, "x": 144, "y": 48, "w": 24, "h": 24 }, + "uiTileRect": { "tilesetUid": 183, "x": 144, "y": 48, "w": 24, "h": 24 }, + "nineSliceBorders": [], + "maxCount": 0, + "limitScope": "PerLevel", + "limitBehavior": "MoveLastOne", + "pivotX": 0.5, + "pivotY": 0.5, + "fieldDefs": [ + { + "identifier": "end", + "doc": null, + "__type": "Point", + "uid": 185, + "type": "F_Point", + "isArray": false, + "canBeNull": false, + "arrayMinLength": null, + "arrayMaxLength": null, + "editorDisplayMode": "PointPath", + "editorDisplayScale": 1, + "editorDisplayPos": "Above", + "editorLinkStyle": "StraightArrow", + "editorDisplayColor": null, + "editorAlwaysShow": false, + "editorShowInWorld": true, + "editorCutLongValues": true, + "editorTextSuffix": null, + "editorTextPrefix": null, + "useForSmartColor": false, + "exportToToc": false, + "searchable": false, + "min": null, + "max": null, + "regex": null, + "acceptFileTypes": null, + "defaultOverride": null, + "textLanguageMode": null, + "symmetricalRef": false, + "autoChainRef": true, + "allowOutOfLevelRef": true, + "allowedRefs": "OnlySame", + "allowedRefsEntityUid": null, + "allowedRefTags": [], + "tilesetUid": null + } + ] + }, + { + "identifier": "DrillHead", + "uid": 186, + "tags": [], + "exportToToc": false, + "allowOutOfBounds": false, + "doc": null, + "width": 24, + "height": 24, + "resizableX": false, + "resizableY": false, + "minWidth": null, + "maxWidth": null, + "minHeight": null, + "maxHeight": null, + "keepAspectRatio": false, + "tileOpacity": 1, + "fillOpacity": 0.08, + "lineOpacity": 0, + "hollow": false, + "color": "#F52F01", + "renderMode": "Tile", + "showName": true, + "tilesetId": 183, + "tileRenderMode": "FitInside", + "tileRect": { "tilesetUid": 183, "x": 144, "y": 24, "w": 24, "h": 24 }, + "uiTileRect": { "tilesetUid": 183, "x": 144, "y": 24, "w": 24, "h": 24 }, + "nineSliceBorders": [], + "maxCount": 0, + "limitScope": "PerLevel", + "limitBehavior": "MoveLastOne", + "pivotX": 0.5, + "pivotY": 0.5, + "fieldDefs": [ + { + "identifier": "end", + "doc": null, + "__type": "Point", + "uid": 188, + "type": "F_Point", + "isArray": false, + "canBeNull": false, + "arrayMinLength": null, + "arrayMaxLength": null, + "editorDisplayMode": "PointPath", + "editorDisplayScale": 1, + "editorDisplayPos": "Above", + "editorLinkStyle": "StraightArrow", + "editorDisplayColor": null, + "editorAlwaysShow": false, + "editorShowInWorld": true, + "editorCutLongValues": true, + "editorTextSuffix": null, + "editorTextPrefix": null, + "useForSmartColor": false, + "exportToToc": false, + "searchable": false, + "min": null, + "max": null, + "regex": null, + "acceptFileTypes": null, + "defaultOverride": null, + "textLanguageMode": null, + "symmetricalRef": false, + "autoChainRef": true, + "allowOutOfLevelRef": true, + "allowedRefs": "OnlySame", + "allowedRefsEntityUid": null, + "allowedRefTags": [], + "tilesetUid": null + } + ] + }, + { + "identifier": "BlockHead", + "uid": 189, + "tags": [], + "exportToToc": false, + "allowOutOfBounds": false, + "doc": null, + "width": 24, + "height": 24, + "resizableX": false, + "resizableY": false, + "minWidth": null, + "maxWidth": null, + "minHeight": null, + "maxHeight": null, + "keepAspectRatio": false, + "tileOpacity": 1, + "fillOpacity": 0.08, + "lineOpacity": 0, + "hollow": false, + "color": "#EB350B", + "renderMode": "Tile", + "showName": true, + "tilesetId": 183, + "tileRenderMode": "FitInside", + "tileRect": { "tilesetUid": 183, "x": 0, "y": 48, "w": 24, "h": 24 }, + "uiTileRect": { "tilesetUid": 183, "x": 0, "y": 48, "w": 24, "h": 24 }, + "nineSliceBorders": [], + "maxCount": 0, + "limitScope": "PerLevel", + "limitBehavior": "MoveLastOne", + "pivotX": 0.5, + "pivotY": 0.5, + "fieldDefs": [ + { + "identifier": "end", + "doc": null, + "__type": "Point", + "uid": 190, + "type": "F_Point", + "isArray": false, + "canBeNull": false, + "arrayMinLength": null, + "arrayMaxLength": null, + "editorDisplayMode": "PointPath", + "editorDisplayScale": 1, + "editorDisplayPos": "Above", + "editorLinkStyle": "StraightArrow", + "editorDisplayColor": null, + "editorAlwaysShow": false, + "editorShowInWorld": true, + "editorCutLongValues": true, + "editorTextSuffix": null, + "editorTextPrefix": null, + "useForSmartColor": false, + "exportToToc": false, + "searchable": false, + "min": null, + "max": null, + "regex": null, + "acceptFileTypes": null, + "defaultOverride": null, + "textLanguageMode": null, + "symmetricalRef": false, + "autoChainRef": true, + "allowOutOfLevelRef": true, + "allowedRefs": "OnlySame", + "allowedRefsEntityUid": null, + "allowedRefTags": [], + "tilesetUid": null + } + ] + }, + { + "identifier": "Coin", + "uid": 192, + "tags": [], + "exportToToc": false, + "allowOutOfBounds": false, + "doc": null, + "width": 18, + "height": 18, + "resizableX": false, + "resizableY": false, + "minWidth": null, + "maxWidth": null, + "minHeight": null, + "maxHeight": null, + "keepAspectRatio": false, + "tileOpacity": 1, + "fillOpacity": 0.08, + "lineOpacity": 0, + "hollow": false, + "color": "#E5EB08", + "renderMode": "Tile", + "showName": true, + "tilesetId": 1, + "tileRenderMode": "FitInside", + "tileRect": { "tilesetUid": 1, "x": 198, "y": 126, "w": 18, "h": 18 }, + "uiTileRect": null, + "nineSliceBorders": [], + "maxCount": 0, + "limitScope": "PerLevel", + "limitBehavior": "MoveLastOne", + "pivotX": 0.5, + "pivotY": 0.5, + "fieldDefs": [] + } + ], "tilesets": [ + { + "__cWid": 20, + "__cHei": 9, + "identifier": "Tilemap", + "uid": 1, + "relPath": "../pixel_platformer/tilemap.png", + "embedAtlas": null, + "pxWid": 360, + "pxHei": 162, + "tileGridSize": 18, + "spacing": 0, + "padding": 0, + "tags": [], + "tagsSourceEnumUid": null, + "enumTags": [], + "customData": [], + "savedSelections": [], + "cachedPixelData": { + "opaqueTiles": "001011000000000000000010110000000000001000100000010000110000001000000001011100000010000000000000000000101000000000000000111100000010000000000010000000100000000000000000000000000000", + "averageColors": "f786f886f886f886fc85fc85fa756a653965fc94fc95fc96fd75fc65fc65fc65c396e3a7e3a7e3a7f886f886f996f886fc85fc85fa659a73fb84fa75fa75fa759c96f3bef6bdf6bdd397e3a7f3a8e3a7fa76fb86fb86fb866b4359444446fa65fb75fb75fb75c9659c96f3bef4bdf4bde397e3a7e3a7e3a7fb86fb86fc86fb867977797779776379688978665889f965ac96f3cef6bdf6bdd397d397e3a7d397fa99fba9fbaafba9ca65ca65ca65b955b9555854786658547866c3acc3ace39bb786f59765868675fb99fba9fcaafba9fc85c96589657977997878664b75ca55ca55c3acc3ace39c9a65ba6538545954fb75fb76fc85fb7563869386748693866b657a75fa765778e39be39ce39be39baa65aa65aa653854fa76fb75fb75fb754899a9998a658976589a489afa656b854a74abcccccdabcc7aaa167769996889599a5999599a599a5999599a599a5899599a599a799a5999799a799a7999899a699a699979aa699a" + } + }, + { + "__cWid": 8, + "__cHei": 3, + "identifier": "Backgrounds", + "uid": 2, + "relPath": "../pixel_platformer/backgrounds.png", + "embedAtlas": null, + "pxWid": 192, + "pxHei": 72, + "tileGridSize": 24, + "spacing": 0, + "padding": 0, + "tags": [], + "tagsSourceEnumUid": null, + "enumTags": [], + "customData": [], + "savedSelections": [], + "cachedPixelData": { + "opaqueTiles": "111111111111111111111111", + "averageColors": "fdeefdeefdeefdeeffc7ffc7f7eaf7eafefffeeefffffefffea6fea6f4d7f4d8fbdefbdefbdefbdefc85fc85f3a8f3a8" + } + }, + { + "__cWid": 9, + "__cHei": 3, + "identifier": "Characters", + "uid": 183, + "relPath": "../pixel_platformer/characters.png", + "embedAtlas": null, + "pxWid": 216, + "pxHei": 72, + "tileGridSize": 24, + "spacing": 0, + "padding": 0, + "tags": [], + "tagsSourceEnumUid": null, + "enumTags": [], + "customData": [], + "savedSelections": [], + "cachedPixelData": { + "opaqueTiles": "000000000000000000000000000", + "averageColors": "a9cba9cbaacdaabdacbcacbcacbbacbb9889accbaccb8c948c954a744a74597769775977568a568a568ac68ad68ac69a587758775877" + } + } + ], "enums": [], "externalEnums": [], "levelFields": [] }, + "levels": [ + { + "identifier": "Level", + "iid": "d7407200-d380-11f0-87cf-077db831fe53", + "uid": 0, + "worldX": 0, + "worldY": 0, + "worldDepth": 0, + "pxWid": 1024, + "pxHei": 1024, + "__bgColor": "#696A79", + "bgColor": null, + "useAutoIdentifier": false, + "bgRelPath": null, + "bgPos": null, + "bgPivotX": 0.5, + "bgPivotY": 0.5, + "__smartColor": "#ADADB5", + "__bgPos": null, + "externalRelPath": null, + "fieldInstances": [], + "layerInstances": [ + { + "__identifier": "Entities", + "__type": "Entities", + "__cWid": 256, + "__cHei": 256, + "__gridSize": 4, + "__opacity": 1, + "__pxTotalOffsetX": 0, + "__pxTotalOffsetY": 0, + "__tilesetDefUid": null, + "__tilesetRelPath": null, + "iid": "a2f8aa20-d380-11f0-8c50-9763fc783dba", + "levelId": 0, + "layerDefUid": 191, + "pxOffsetX": 0, + "pxOffsetY": 0, + "visible": true, + "optionalRules": [], + "intGridCsv": [], + "autoLayerTiles": [], + "seed": 2769432, + "overrideTilesetUid": null, + "gridTiles": [], + "entityInstances": [ + { + "__identifier": "Start", + "__grid": [14,15], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 183, "x": 24, "y": 0, "w": 24, "h": 24 }, + "__smartColor": "#4CBE2F", + "iid": "00a25df0-d380-11f0-8c50-739061d740f3", + "width": 24, + "height": 24, + "defUid": 181, + "px": [58,62], + "fieldInstances": [], + "__worldX": 58, + "__worldY": 62 + }, + { + "__identifier": "Start", + "__grid": [221,46], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 183, "x": 24, "y": 0, "w": 24, "h": 24 }, + "__smartColor": "#4CBE2F", + "iid": "045d4310-d380-11f0-8c50-710bd1478e02", + "width": 24, + "height": 24, + "defUid": 181, + "px": [886,186], + "fieldInstances": [], + "__worldX": 886, + "__worldY": 186 + }, + { + "__identifier": "Bat", + "__grid": [98,160], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 183, "x": 144, "y": 48, "w": 24, "h": 24 }, + "__smartColor": "#F03307", + "iid": "0ae13340-d380-11f0-8c50-65300abf4c46", + "width": 24, + "height": 24, + "defUid": 182, + "px": [394,642], + "fieldInstances": [{ "__identifier": "end", "__type": "Point", "__value": { "cx": 157, "cy": 160 }, "__tile": null, "defUid": 185, "realEditorValues": [{ + "id": "V_String", + "params": ["157,160"] + }] }], + "__worldX": 394, + "__worldY": 642 + }, + { + "__identifier": "Bat", + "__grid": [224,82], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 183, "x": 144, "y": 48, "w": 24, "h": 24 }, + "__smartColor": "#F03307", + "iid": "177d0b60-d380-11f0-8c50-ffbb9eac13b3", + "width": 24, + "height": 24, + "defUid": 182, + "px": [898,330], + "fieldInstances": [{ "__identifier": "end", "__type": "Point", "__value": { "cx": 241, "cy": 82 }, "__tile": null, "defUid": 185, "realEditorValues": [{ + "id": "V_String", + "params": ["241,82"] + }] }], + "__worldX": 898, + "__worldY": 330 + }, + { + "__identifier": "Bat", + "__grid": [98,34], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 183, "x": 144, "y": 48, "w": 24, "h": 24 }, + "__smartColor": "#F03307", + "iid": "19da8360-d380-11f0-8c50-bf21d35bf7f8", + "width": 24, + "height": 24, + "defUid": 182, + "px": [394,138], + "fieldInstances": [{ "__identifier": "end", "__type": "Point", "__value": { "cx": 166, "cy": 34 }, "__tile": null, "defUid": 185, "realEditorValues": [{ + "id": "V_String", + "params": ["166,34"] + }] }], + "__worldX": 394, + "__worldY": 138 + }, + { + "__identifier": "DrillHead", + "__grid": [51,123], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 183, "x": 144, "y": 24, "w": 24, "h": 24 }, + "__smartColor": "#F52F01", + "iid": "201a65b0-d380-11f0-8c50-5d44b9b521d7", + "width": 24, + "height": 24, + "defUid": 186, + "px": [206,494], + "fieldInstances": [{ "__identifier": "end", "__type": "Point", "__value": { "cx": 10, "cy": 123 }, "__tile": null, "defUid": 188, "realEditorValues": [{ + "id": "V_String", + "params": ["10,123"] + }] }], + "__worldX": 206, + "__worldY": 494 + }, + { + "__identifier": "DrillHead", + "__grid": [160,132], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 183, "x": 144, "y": 24, "w": 24, "h": 24 }, + "__smartColor": "#F52F01", + "iid": "2a8e06a0-d380-11f0-8c50-75c2c285118f", + "width": 24, + "height": 24, + "defUid": 186, + "px": [642,530], + "fieldInstances": [{ "__identifier": "end", "__type": "Point", "__value": { "cx": 204, "cy": 132 }, "__tile": null, "defUid": 188, "realEditorValues": [{ + "id": "V_String", + "params": ["204,132"] + }] }], + "__worldX": 642, + "__worldY": 530 + }, + { + "__identifier": "BlockHead", + "__grid": [32,235], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 183, "x": 0, "y": 48, "w": 24, "h": 24 }, + "__smartColor": "#EB350B", + "iid": "3119bf00-d380-11f0-8c50-576bc1ad5a31", + "width": 24, + "height": 24, + "defUid": 189, + "px": [130,942], + "fieldInstances": [{ "__identifier": "end", "__type": "Point", "__value": { "cx": 90, "cy": 235 }, "__tile": null, "defUid": 190, "realEditorValues": [{ + "id": "V_String", + "params": ["90,235"] + }] }], + "__worldX": 130, + "__worldY": 942 + }, + { + "__identifier": "BlockHead", + "__grid": [145,235], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 183, "x": 0, "y": 48, "w": 24, "h": 24 }, + "__smartColor": "#EB350B", + "iid": "3868a050-d380-11f0-8c50-85188ffcff08", + "width": 24, + "height": 24, + "defUid": 189, + "px": [582,942], + "fieldInstances": [{ "__identifier": "end", "__type": "Point", "__value": { "cx": 191, "cy": 235 }, "__tile": null, "defUid": 190, "realEditorValues": [{ + "id": "V_String", + "params": ["191,235"] + }] }], + "__worldX": 582, + "__worldY": 942 + }, + { + "__identifier": "BlockHead", + "__grid": [182,82], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 183, "x": 0, "y": 48, "w": 24, "h": 24 }, + "__smartColor": "#EB350B", + "iid": "41315060-d380-11f0-8c50-1b8e3004102a", + "width": 24, + "height": 24, + "defUid": 189, + "px": [730,330], + "fieldInstances": [{ "__identifier": "end", "__type": "Point", "__value": { "cx": 200, "cy": 82 }, "__tile": null, "defUid": 190, "realEditorValues": [{ + "id": "V_String", + "params": ["200,82"] + }] }], + "__worldX": 730, + "__worldY": 330 + }, + { + "__identifier": "Coin", + "__grid": [89,74], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 198, "y": 126, "w": 18, "h": 18 }, + "__smartColor": "#E5EB08", + "iid": "4972f620-d380-11f0-8c50-5d5d153784fc", + "width": 18, + "height": 18, + "defUid": 192, + "px": [358,298], + "fieldInstances": [], + "__worldX": 358, + "__worldY": 298 + }, + { + "__identifier": "Coin", + "__grid": [127,168], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 198, "y": 126, "w": 18, "h": 18 }, + "__smartColor": "#E5EB08", + "iid": "4bc76d70-d380-11f0-8c50-e5748b4866b3", + "width": 18, + "height": 18, + "defUid": 192, + "px": [510,674], + "fieldInstances": [], + "__worldX": 510, + "__worldY": 674 + }, + { + "__identifier": "Coin", + "__grid": [111,167], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 198, "y": 126, "w": 18, "h": 18 }, + "__smartColor": "#E5EB08", + "iid": "4ccfdcc0-d380-11f0-8c50-c39270d8de5b", + "width": 18, + "height": 18, + "defUid": 192, + "px": [446,670], + "fieldInstances": [], + "__worldX": 446, + "__worldY": 670 + }, + { + "__identifier": "Coin", + "__grid": [145,166], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 198, "y": 126, "w": 18, "h": 18 }, + "__smartColor": "#E5EB08", + "iid": "4d9eec90-d380-11f0-8c50-57a6decc2b9e", + "width": 18, + "height": 18, + "defUid": 192, + "px": [582,666], + "fieldInstances": [], + "__worldX": 582, + "__worldY": 666 + }, + { + "__identifier": "Coin", + "__grid": [200,183], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 198, "y": 126, "w": 18, "h": 18 }, + "__smartColor": "#E5EB08", + "iid": "4f3d0c30-d380-11f0-8c50-fbf31ff006f5", + "width": 18, + "height": 18, + "defUid": 192, + "px": [802,734], + "fieldInstances": [], + "__worldX": 802, + "__worldY": 734 + }, + { + "__identifier": "Coin", + "__grid": [247,235], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 198, "y": 126, "w": 18, "h": 18 }, + "__smartColor": "#E5EB08", + "iid": "5093c290-d380-11f0-8c50-6bd5819aa46f", + "width": 18, + "height": 18, + "defUid": 192, + "px": [990,942], + "fieldInstances": [], + "__worldX": 990, + "__worldY": 942 + }, + { + "__identifier": "Coin", + "__grid": [225,234], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 198, "y": 126, "w": 18, "h": 18 }, + "__smartColor": "#E5EB08", + "iid": "516ac1a0-d380-11f0-8c50-6f45c2705899", + "width": 18, + "height": 18, + "defUid": 192, + "px": [902,938], + "fieldInstances": [], + "__worldX": 902, + "__worldY": 938 + }, + { + "__identifier": "Coin", + "__grid": [54,204], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 198, "y": 126, "w": 18, "h": 18 }, + "__smartColor": "#E5EB08", + "iid": "5312f360-d380-11f0-8c50-c96e13577028", + "width": 18, + "height": 18, + "defUid": 192, + "px": [218,818], + "fieldInstances": [], + "__worldX": 218, + "__worldY": 818 + }, + { + "__identifier": "Coin", + "__grid": [20,123], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 198, "y": 126, "w": 18, "h": 18 }, + "__smartColor": "#E5EB08", + "iid": "54a88780-d380-11f0-8c50-ab7ce626f220", + "width": 18, + "height": 18, + "defUid": 192, + "px": [82,494], + "fieldInstances": [], + "__worldX": 82, + "__worldY": 494 + }, + { + "__identifier": "Coin", + "__grid": [43,123], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 198, "y": 126, "w": 18, "h": 18 }, + "__smartColor": "#E5EB08", + "iid": "559a6190-d380-11f0-8c50-cb4213af8bca", + "width": 18, + "height": 18, + "defUid": 192, + "px": [174,494], + "fieldInstances": [], + "__worldX": 174, + "__worldY": 494 + }, + { + "__identifier": "Coin", + "__grid": [103,87], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 198, "y": 126, "w": 18, "h": 18 }, + "__smartColor": "#E5EB08", + "iid": "5757f010-d380-11f0-8c50-874c95593ff2", + "width": 18, + "height": 18, + "defUid": 192, + "px": [414,350], + "fieldInstances": [], + "__worldX": 414, + "__worldY": 350 + }, + { + "__identifier": "Coin", + "__grid": [58,56], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 198, "y": 126, "w": 18, "h": 18 }, + "__smartColor": "#E5EB08", + "iid": "596bb4e0-d380-11f0-8c50-5f2f941b5561", + "width": 18, + "height": 18, + "defUid": 192, + "px": [234,226], + "fieldInstances": [], + "__worldX": 234, + "__worldY": 226 + }, + { + "__identifier": "Coin", + "__grid": [91,56], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 198, "y": 126, "w": 18, "h": 18 }, + "__smartColor": "#E5EB08", + "iid": "5a79a270-d380-11f0-8c50-479af5647ebf", + "width": 18, + "height": 18, + "defUid": 192, + "px": [366,226], + "fieldInstances": [], + "__worldX": 366, + "__worldY": 226 + }, + { + "__identifier": "Coin", + "__grid": [142,60], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 198, "y": 126, "w": 18, "h": 18 }, + "__smartColor": "#E5EB08", + "iid": "5b745620-d380-11f0-8c50-4ff429a23456", + "width": 18, + "height": 18, + "defUid": 192, + "px": [570,242], + "fieldInstances": [], + "__worldX": 570, + "__worldY": 242 + }, + { + "__identifier": "Coin", + "__grid": [159,60], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 198, "y": 126, "w": 18, "h": 18 }, + "__smartColor": "#E5EB08", + "iid": "5c31d9c0-d380-11f0-8c50-192cafdb0960", + "width": 18, + "height": 18, + "defUid": 192, + "px": [638,242], + "fieldInstances": [], + "__worldX": 638, + "__worldY": 242 + }, + { + "__identifier": "Coin", + "__grid": [231,15], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 198, "y": 126, "w": 18, "h": 18 }, + "__smartColor": "#E5EB08", + "iid": "5db67df0-d380-11f0-8c50-bd6a51eabfa2", + "width": 18, + "height": 18, + "defUid": 192, + "px": [926,62], + "fieldInstances": [], + "__worldX": 926, + "__worldY": 62 + }, + { + "__identifier": "Coin", + "__grid": [239,46], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 198, "y": 126, "w": 18, "h": 18 }, + "__smartColor": "#E5EB08", + "iid": "5f078f00-d380-11f0-8c50-9bfe2de7aee6", + "width": 18, + "height": 18, + "defUid": 192, + "px": [958,186], + "fieldInstances": [], + "__worldX": 958, + "__worldY": 186 + }, + { + "__identifier": "Coin", + "__grid": [188,32], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 198, "y": 126, "w": 18, "h": 18 }, + "__smartColor": "#E5EB08", + "iid": "5fedf760-d380-11f0-8c50-59f5dad6cb06", + "width": 18, + "height": 18, + "defUid": 192, + "px": [754,130], + "fieldInstances": [], + "__worldX": 754, + "__worldY": 130 + }, + { + "__identifier": "Coin", + "__grid": [223,110], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 198, "y": 126, "w": 18, "h": 18 }, + "__smartColor": "#E5EB08", + "iid": "60b65070-d380-11f0-8c50-3b7861f4afae", + "width": 18, + "height": 18, + "defUid": 192, + "px": [894,442], + "fieldInstances": [], + "__worldX": 894, + "__worldY": 442 + }, + { + "__identifier": "Coin", + "__grid": [191,82], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 198, "y": 126, "w": 18, "h": 18 }, + "__smartColor": "#E5EB08", + "iid": "620a47b0-d380-11f0-8c50-d35c233a202e", + "width": 18, + "height": 18, + "defUid": 192, + "px": [766,330], + "fieldInstances": [], + "__worldX": 766, + "__worldY": 330 + }, + { + "__identifier": "Coin", + "__grid": [232,165], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 198, "y": 126, "w": 18, "h": 18 }, + "__smartColor": "#E5EB08", + "iid": "63760cb0-d380-11f0-8c50-412f99fa06fb", + "width": 18, + "height": 18, + "defUid": 192, + "px": [930,662], + "fieldInstances": [], + "__worldX": 930, + "__worldY": 662 + }, + { + "__identifier": "Coin", + "__grid": [10,236], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 198, "y": 126, "w": 18, "h": 18 }, + "__smartColor": "#E5EB08", + "iid": "661e7060-d380-11f0-8c50-2b6841643e82", + "width": 18, + "height": 18, + "defUid": 192, + "px": [42,946], + "fieldInstances": [], + "__worldX": 42, + "__worldY": 946 + }, + { + "__identifier": "Coin", + "__grid": [61,235], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 198, "y": 126, "w": 18, "h": 18 }, + "__smartColor": "#E5EB08", + "iid": "672a3b10-d380-11f0-8c50-5b5a32b08555", + "width": 18, + "height": 18, + "defUid": 192, + "px": [246,942], + "fieldInstances": [], + "__worldX": 246, + "__worldY": 942 + }, + { + "__identifier": "Coin", + "__grid": [112,235], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 198, "y": 126, "w": 18, "h": 18 }, + "__smartColor": "#E5EB08", + "iid": "69c7f060-d380-11f0-8c50-7f9a3ec5a2a9", + "width": 18, + "height": 18, + "defUid": 192, + "px": [450,942], + "fieldInstances": [], + "__worldX": 450, + "__worldY": 942 + }, + { + "__identifier": "Coin", + "__grid": [208,204], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 198, "y": 126, "w": 18, "h": 18 }, + "__smartColor": "#E5EB08", + "iid": "6cf49f40-d380-11f0-8c50-dd815cc55c9d", + "width": 18, + "height": 18, + "defUid": 192, + "px": [834,818], + "fieldInstances": [], + "__worldX": 834, + "__worldY": 818 + }, + { + "__identifier": "Start", + "__grid": [44,203], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 183, "x": 24, "y": 0, "w": 24, "h": 24 }, + "__smartColor": "#4CBE2F", + "iid": "d3d65b90-d380-11f0-99ec-6ba27ee57174", + "width": 24, + "height": 24, + "defUid": 181, + "px": [178,814], + "fieldInstances": [], + "__worldX": 178, + "__worldY": 814 + }, + { + "__identifier": "Start", + "__grid": [205,235], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": { "tilesetUid": 183, "x": 24, "y": 0, "w": 24, "h": 24 }, + "__smartColor": "#4CBE2F", + "iid": "d5b61810-d380-11f0-99ec-55871e1edc52", + "width": 24, + "height": 24, + "defUid": 181, + "px": [822,942], + "fieldInstances": [], + "__worldX": 822, + "__worldY": 942 + } + ] + }, + { + "__identifier": "IntGrid", + "__type": "IntGrid", + "__cWid": 57, + "__cHei": 57, + "__gridSize": 18, + "__opacity": 1, + "__pxTotalOffsetX": 0, + "__pxTotalOffsetY": 0, + "__tilesetDefUid": 1, + "__tilesetRelPath": "../pixel_platformer/tilemap.png", + "iid": "546900d0-d380-11f0-87cf-9d65a3c66d96", + "levelId": 0, + "layerDefUid": 3, + "pxOffsetX": 0, + "pxOffsetY": 0, + "visible": true, + "optionalRules": [], + "intGridCsv": [ + 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3, + 3,3,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,0,0,1,1,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,3,3,4,3,3,0,0,1,1,0,0,0,0,0,0,0,0,3,3,3,3,3,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0, + 1,1,0,0,0,0,0,0,0,0,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,2,2,2,2,0,0,0,0,0,0,0,4,0,0,0,0,1,1,0,0,0,0,0,0,0,0,3,3,4, + 3,3,0,0,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,4,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,3,4,3,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,1,1,0,0, + 0,0,0,0,0,0,0,0,4,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0, + 0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0, + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0, + 0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0, + 0,0,0,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1, + 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,3,3,3,3,3,3,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0, + 0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1, + 1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, + 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,2,2,2,2, + 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,0,0,1,1,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 2,2,2,2,2,0,0,3,3,3,3,3,3,3,3,3,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3, + 3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0, + 3,3,3,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0, + 0,0,0,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0,0, + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,4,3,3,3,3,0, + 0,0,0,0,1,1,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0, + 0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0, + 0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0, + 0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1, + 0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 4,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + ], + "autoLayerTiles": [ + { "px": [18,54], "src": [144,108], "f": 0, "t": 128, "d": [22,172], "a": 1 }, + { "px": [72,54], "src": [90,108], "f": 0, "t": 125, "d": [22,175], "a": 1 }, + { "px": [900,180], "src": [72,126], "f": 0, "t": 144, "d": [22,620], "a": 1 }, + { "px": [972,180], "src": [72,108], "f": 0, "t": 124, "d": [22,624], "a": 1 }, + { "px": [990,180], "src": [72,126], "f": 0, "t": 144, "d": [22,625], "a": 1 }, + { "px": [450,216], "src": [144,108], "f": 0, "t": 128, "d": [22,709], "a": 1 }, + { "px": [432,324], "src": [72,108], "f": 0, "t": 124, "d": [22,1050], "a": 1 }, + { "px": [18,486], "src": [72,126], "f": 0, "t": 144, "d": [22,1540], "a": 1 }, + { "px": [108,486], "src": [72,126], "f": 0, "t": 144, "d": [22,1545], "a": 1 }, + { "px": [144,486], "src": [144,108], "f": 0, "t": 128, "d": [22,1547], "a": 1 }, + { "px": [792,522], "src": [90,108], "f": 0, "t": 125, "d": [22,1697], "a": 1 }, + { "px": [810,522], "src": [90,108], "f": 0, "t": 125, "d": [22,1698], "a": 1 }, + { "px": [612,684], "src": [72,126], "f": 0, "t": 144, "d": [22,2200], "a": 1 }, + { "px": [630,684], "src": [144,108], "f": 0, "t": 128, "d": [22,2201], "a": 1 }, + { "px": [684,756], "src": [90,108], "f": 0, "t": 125, "d": [22,2432], "a": 1 }, + { "px": [90,810], "src": [90,108], "f": 0, "t": 125, "d": [22,2570], "a": 1 }, + { "px": [126,810], "src": [144,108], "f": 0, "t": 128, "d": [22,2572], "a": 1 }, + { "px": [774,810], "src": [72,108], "f": 0, "t": 124, "d": [22,2608], "a": 1 }, + { "px": [810,810], "src": [90,108], "f": 0, "t": 125, "d": [22,2610], "a": 1 }, + { "px": [918,864], "src": [144,108], "f": 0, "t": 128, "d": [22,2787], "a": 1 }, + { "px": [54,936], "src": [144,108], "f": 0, "t": 128, "d": [22,2967], "a": 1 }, + { "px": [108,936], "src": [144,108], "f": 0, "t": 128, "d": [22,2970], "a": 1 }, + { "px": [144,936], "src": [72,108], "f": 0, "t": 124, "d": [22,2972], "a": 1 }, + { "px": [288,936], "src": [72,126], "f": 0, "t": 144, "d": [22,2980], "a": 1 }, + { "px": [378,936], "src": [144,108], "f": 0, "t": 128, "d": [22,2985], "a": 1 }, + { "px": [468,936], "src": [72,126], "f": 0, "t": 144, "d": [22,2990], "a": 1 }, + { "px": [486,936], "src": [144,108], "f": 0, "t": 128, "d": [22,2991], "a": 1 }, + { "px": [558,936], "src": [90,108], "f": 0, "t": 125, "d": [22,2995], "a": 1 }, + { "px": [594,936], "src": [72,126], "f": 0, "t": 144, "d": [22,2997], "a": 1 }, + { "px": [630,936], "src": [72,108], "f": 0, "t": 124, "d": [22,2999], "a": 1 }, + { "px": [648,936], "src": [90,108], "f": 0, "t": 125, "d": [22,3000], "a": 1 }, + { "px": [666,936], "src": [144,108], "f": 0, "t": 128, "d": [22,3001], "a": 1 }, + { "px": [702,936], "src": [72,108], "f": 0, "t": 124, "d": [22,3003], "a": 1 }, + { "px": [864,936], "src": [72,126], "f": 0, "t": 144, "d": [22,3012], "a": 1 }, + { "px": [918,936], "src": [72,108], "f": 0, "t": 124, "d": [22,3015], "a": 1 }, + { "px": [0,72], "src": [36,108], "f": 0, "t": 122, "d": [63,228], "a": 1 }, + { "px": [0,90], "src": [36,108], "f": 0, "t": 122, "d": [63,285], "a": 1 }, + { "px": [1008,198], "src": [36,108], "f": 0, "t": 122, "d": [63,683], "a": 1 }, + { "px": [324,252], "src": [36,108], "f": 0, "t": 122, "d": [63,816], "a": 1 }, + { "px": [432,252], "src": [36,108], "f": 0, "t": 122, "d": [63,822], "a": 1 }, + { "px": [450,252], "src": [36,108], "f": 0, "t": 122, "d": [63,823], "a": 1 }, + { "px": [468,252], "src": [36,108], "f": 0, "t": 122, "d": [63,824], "a": 1 }, + { "px": [486,252], "src": [36,108], "f": 0, "t": 122, "d": [63,825], "a": 1 }, + { "px": [504,252], "src": [36,108], "f": 0, "t": 122, "d": [63,826], "a": 1 }, + { "px": [486,270], "src": [36,108], "f": 0, "t": 122, "d": [63,882], "a": 1 }, + { "px": [504,270], "src": [36,108], "f": 0, "t": 122, "d": [63,883], "a": 1 }, + { "px": [522,270], "src": [36,108], "f": 0, "t": 122, "d": [63,884], "a": 1 }, + { "px": [540,270], "src": [36,108], "f": 0, "t": 122, "d": [63,885], "a": 1 }, + { "px": [504,288], "src": [36,108], "f": 0, "t": 122, "d": [63,940], "a": 1 }, + { "px": [522,288], "src": [36,108], "f": 0, "t": 122, "d": [63,941], "a": 1 }, + { "px": [540,288], "src": [36,108], "f": 0, "t": 122, "d": [63,942], "a": 1 }, + { "px": [504,306], "src": [36,108], "f": 0, "t": 122, "d": [63,997], "a": 1 }, + { "px": [486,324], "src": [36,108], "f": 0, "t": 122, "d": [63,1053], "a": 1 }, + { "px": [468,342], "src": [36,108], "f": 0, "t": 122, "d": [63,1109], "a": 1 }, + { "px": [486,342], "src": [36,108], "f": 0, "t": 122, "d": [63,1110], "a": 1 }, + { "px": [432,360], "src": [36,108], "f": 0, "t": 122, "d": [63,1164], "a": 1 }, + { "px": [450,360], "src": [36,108], "f": 0, "t": 122, "d": [63,1165], "a": 1 }, + { "px": [468,360], "src": [36,108], "f": 0, "t": 122, "d": [63,1166], "a": 1 }, + { "px": [486,360], "src": [36,108], "f": 0, "t": 122, "d": [63,1167], "a": 1 }, + { "px": [396,378], "src": [36,108], "f": 0, "t": 122, "d": [63,1219], "a": 1 }, + { "px": [414,378], "src": [36,108], "f": 0, "t": 122, "d": [63,1220], "a": 1 }, + { "px": [432,378], "src": [36,108], "f": 0, "t": 122, "d": [63,1221], "a": 1 }, + { "px": [450,378], "src": [36,108], "f": 0, "t": 122, "d": [63,1222], "a": 1 }, + { "px": [468,378], "src": [36,108], "f": 0, "t": 122, "d": [63,1223], "a": 1 }, + { "px": [486,378], "src": [36,108], "f": 0, "t": 122, "d": [63,1224], "a": 1 }, + { "px": [0,504], "src": [36,108], "f": 0, "t": 122, "d": [63,1596], "a": 1 }, + { "px": [0,522], "src": [36,108], "f": 0, "t": 122, "d": [63,1653], "a": 1 }, + { "px": [648,558], "src": [36,108], "f": 0, "t": 122, "d": [63,1803], "a": 1 }, + { "px": [666,558], "src": [36,108], "f": 0, "t": 122, "d": [63,1804], "a": 1 }, + { "px": [684,558], "src": [36,108], "f": 0, "t": 122, "d": [63,1805], "a": 1 }, + { "px": [702,558], "src": [36,108], "f": 0, "t": 122, "d": [63,1806], "a": 1 }, + { "px": [720,558], "src": [36,108], "f": 0, "t": 122, "d": [63,1807], "a": 1 }, + { "px": [738,558], "src": [36,108], "f": 0, "t": 122, "d": [63,1808], "a": 1 }, + { "px": [756,558], "src": [36,108], "f": 0, "t": 122, "d": [63,1809], "a": 1 }, + { "px": [774,558], "src": [36,108], "f": 0, "t": 122, "d": [63,1810], "a": 1 }, + { "px": [792,558], "src": [36,108], "f": 0, "t": 122, "d": [63,1811], "a": 1 }, + { "px": [648,576], "src": [36,108], "f": 0, "t": 122, "d": [63,1860], "a": 1 }, + { "px": [666,576], "src": [36,108], "f": 0, "t": 122, "d": [63,1861], "a": 1 }, + { "px": [684,576], "src": [36,108], "f": 0, "t": 122, "d": [63,1862], "a": 1 }, + { "px": [702,576], "src": [36,108], "f": 0, "t": 122, "d": [63,1863], "a": 1 }, + { "px": [720,576], "src": [36,108], "f": 0, "t": 122, "d": [63,1864], "a": 1 }, + { "px": [738,576], "src": [36,108], "f": 0, "t": 122, "d": [63,1865], "a": 1 }, + { "px": [756,576], "src": [36,108], "f": 0, "t": 122, "d": [63,1866], "a": 1 }, + { "px": [774,576], "src": [36,108], "f": 0, "t": 122, "d": [63,1867], "a": 1 }, + { "px": [792,576], "src": [36,108], "f": 0, "t": 122, "d": [63,1868], "a": 1 }, + { "px": [0,954], "src": [36,108], "f": 0, "t": 122, "d": [63,3021], "a": 1 }, + { "px": [1008,954], "src": [36,108], "f": 0, "t": 122, "d": [63,3077], "a": 1 }, + { "px": [0,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3078], "a": 1 }, + { "px": [18,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3079], "a": 1 }, + { "px": [36,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3080], "a": 1 }, + { "px": [54,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3081], "a": 1 }, + { "px": [72,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3082], "a": 1 }, + { "px": [90,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3083], "a": 1 }, + { "px": [108,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3084], "a": 1 }, + { "px": [126,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3085], "a": 1 }, + { "px": [144,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3086], "a": 1 }, + { "px": [162,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3087], "a": 1 }, + { "px": [180,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3088], "a": 1 }, + { "px": [198,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3089], "a": 1 }, + { "px": [216,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3090], "a": 1 }, + { "px": [234,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3091], "a": 1 }, + { "px": [252,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3092], "a": 1 }, + { "px": [270,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3093], "a": 1 }, + { "px": [288,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3094], "a": 1 }, + { "px": [306,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3095], "a": 1 }, + { "px": [324,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3096], "a": 1 }, + { "px": [342,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3097], "a": 1 }, + { "px": [360,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3098], "a": 1 }, + { "px": [378,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3099], "a": 1 }, + { "px": [396,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3100], "a": 1 }, + { "px": [414,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3101], "a": 1 }, + { "px": [432,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3102], "a": 1 }, + { "px": [450,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3103], "a": 1 }, + { "px": [468,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3104], "a": 1 }, + { "px": [486,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3105], "a": 1 }, + { "px": [504,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3106], "a": 1 }, + { "px": [522,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3107], "a": 1 }, + { "px": [540,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3108], "a": 1 }, + { "px": [558,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3109], "a": 1 }, + { "px": [576,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3110], "a": 1 }, + { "px": [594,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3111], "a": 1 }, + { "px": [612,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3112], "a": 1 }, + { "px": [630,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3113], "a": 1 }, + { "px": [648,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3114], "a": 1 }, + { "px": [666,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3115], "a": 1 }, + { "px": [684,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3116], "a": 1 }, + { "px": [702,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3117], "a": 1 }, + { "px": [720,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3118], "a": 1 }, + { "px": [738,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3119], "a": 1 }, + { "px": [756,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3120], "a": 1 }, + { "px": [774,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3121], "a": 1 }, + { "px": [792,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3122], "a": 1 }, + { "px": [810,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3123], "a": 1 }, + { "px": [828,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3124], "a": 1 }, + { "px": [846,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3125], "a": 1 }, + { "px": [864,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3126], "a": 1 }, + { "px": [882,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3127], "a": 1 }, + { "px": [900,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3128], "a": 1 }, + { "px": [918,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3129], "a": 1 }, + { "px": [936,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3130], "a": 1 }, + { "px": [954,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3131], "a": 1 }, + { "px": [972,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3132], "a": 1 }, + { "px": [990,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3133], "a": 1 }, + { "px": [1008,972], "src": [36,108], "f": 0, "t": 122, "d": [63,3134], "a": 1 }, + { "px": [0,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3135], "a": 1 }, + { "px": [18,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3136], "a": 1 }, + { "px": [36,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3137], "a": 1 }, + { "px": [54,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3138], "a": 1 }, + { "px": [72,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3139], "a": 1 }, + { "px": [90,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3140], "a": 1 }, + { "px": [108,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3141], "a": 1 }, + { "px": [126,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3142], "a": 1 }, + { "px": [144,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3143], "a": 1 }, + { "px": [162,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3144], "a": 1 }, + { "px": [180,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3145], "a": 1 }, + { "px": [198,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3146], "a": 1 }, + { "px": [216,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3147], "a": 1 }, + { "px": [234,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3148], "a": 1 }, + { "px": [252,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3149], "a": 1 }, + { "px": [270,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3150], "a": 1 }, + { "px": [288,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3151], "a": 1 }, + { "px": [306,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3152], "a": 1 }, + { "px": [324,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3153], "a": 1 }, + { "px": [342,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3154], "a": 1 }, + { "px": [360,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3155], "a": 1 }, + { "px": [378,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3156], "a": 1 }, + { "px": [396,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3157], "a": 1 }, + { "px": [414,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3158], "a": 1 }, + { "px": [432,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3159], "a": 1 }, + { "px": [450,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3160], "a": 1 }, + { "px": [468,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3161], "a": 1 }, + { "px": [486,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3162], "a": 1 }, + { "px": [504,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3163], "a": 1 }, + { "px": [522,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3164], "a": 1 }, + { "px": [540,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3165], "a": 1 }, + { "px": [558,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3166], "a": 1 }, + { "px": [576,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3167], "a": 1 }, + { "px": [594,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3168], "a": 1 }, + { "px": [612,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3169], "a": 1 }, + { "px": [630,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3170], "a": 1 }, + { "px": [648,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3171], "a": 1 }, + { "px": [666,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3172], "a": 1 }, + { "px": [684,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3173], "a": 1 }, + { "px": [702,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3174], "a": 1 }, + { "px": [720,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3175], "a": 1 }, + { "px": [738,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3176], "a": 1 }, + { "px": [756,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3177], "a": 1 }, + { "px": [774,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3178], "a": 1 }, + { "px": [792,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3179], "a": 1 }, + { "px": [810,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3180], "a": 1 }, + { "px": [828,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3181], "a": 1 }, + { "px": [846,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3182], "a": 1 }, + { "px": [864,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3183], "a": 1 }, + { "px": [882,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3184], "a": 1 }, + { "px": [900,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3185], "a": 1 }, + { "px": [918,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3186], "a": 1 }, + { "px": [936,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3187], "a": 1 }, + { "px": [954,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3188], "a": 1 }, + { "px": [972,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3189], "a": 1 }, + { "px": [990,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3190], "a": 1 }, + { "px": [1008,990], "src": [36,108], "f": 0, "t": 122, "d": [63,3191], "a": 1 }, + { "px": [0,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3192], "a": 1 }, + { "px": [18,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3193], "a": 1 }, + { "px": [36,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3194], "a": 1 }, + { "px": [54,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3195], "a": 1 }, + { "px": [72,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3196], "a": 1 }, + { "px": [90,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3197], "a": 1 }, + { "px": [108,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3198], "a": 1 }, + { "px": [126,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3199], "a": 1 }, + { "px": [144,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3200], "a": 1 }, + { "px": [162,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3201], "a": 1 }, + { "px": [180,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3202], "a": 1 }, + { "px": [198,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3203], "a": 1 }, + { "px": [216,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3204], "a": 1 }, + { "px": [234,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3205], "a": 1 }, + { "px": [252,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3206], "a": 1 }, + { "px": [270,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3207], "a": 1 }, + { "px": [288,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3208], "a": 1 }, + { "px": [306,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3209], "a": 1 }, + { "px": [324,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3210], "a": 1 }, + { "px": [342,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3211], "a": 1 }, + { "px": [360,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3212], "a": 1 }, + { "px": [378,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3213], "a": 1 }, + { "px": [396,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3214], "a": 1 }, + { "px": [414,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3215], "a": 1 }, + { "px": [432,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3216], "a": 1 }, + { "px": [450,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3217], "a": 1 }, + { "px": [468,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3218], "a": 1 }, + { "px": [486,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3219], "a": 1 }, + { "px": [504,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3220], "a": 1 }, + { "px": [522,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3221], "a": 1 }, + { "px": [540,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3222], "a": 1 }, + { "px": [558,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3223], "a": 1 }, + { "px": [576,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3224], "a": 1 }, + { "px": [594,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3225], "a": 1 }, + { "px": [612,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3226], "a": 1 }, + { "px": [630,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3227], "a": 1 }, + { "px": [648,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3228], "a": 1 }, + { "px": [666,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3229], "a": 1 }, + { "px": [684,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3230], "a": 1 }, + { "px": [702,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3231], "a": 1 }, + { "px": [720,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3232], "a": 1 }, + { "px": [738,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3233], "a": 1 }, + { "px": [756,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3234], "a": 1 }, + { "px": [774,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3235], "a": 1 }, + { "px": [792,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3236], "a": 1 }, + { "px": [810,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3237], "a": 1 }, + { "px": [828,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3238], "a": 1 }, + { "px": [846,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3239], "a": 1 }, + { "px": [864,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3240], "a": 1 }, + { "px": [882,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3241], "a": 1 }, + { "px": [900,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3242], "a": 1 }, + { "px": [918,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3243], "a": 1 }, + { "px": [936,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3244], "a": 1 }, + { "px": [954,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3245], "a": 1 }, + { "px": [972,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3246], "a": 1 }, + { "px": [990,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3247], "a": 1 }, + { "px": [1008,1008], "src": [36,108], "f": 0, "t": 122, "d": [63,3248], "a": 1 }, + { "px": [1008,0], "src": [18,108], "f": 0, "t": 121, "d": [62,56], "a": 1 }, + { "px": [1008,18], "src": [18,108], "f": 0, "t": 121, "d": [62,113], "a": 1 }, + { "px": [1008,36], "src": [18,108], "f": 0, "t": 121, "d": [62,170], "a": 1 }, + { "px": [1008,54], "src": [18,108], "f": 0, "t": 121, "d": [62,227], "a": 1 }, + { "px": [1008,72], "src": [18,108], "f": 0, "t": 121, "d": [62,284], "a": 1 }, + { "px": [1008,90], "src": [18,108], "f": 0, "t": 121, "d": [62,341], "a": 1 }, + { "px": [1008,108], "src": [18,108], "f": 0, "t": 121, "d": [62,398], "a": 1 }, + { "px": [1008,126], "src": [18,108], "f": 0, "t": 121, "d": [62,455], "a": 1 }, + { "px": [1008,144], "src": [18,108], "f": 0, "t": 121, "d": [62,512], "a": 1 }, + { "px": [1008,162], "src": [18,108], "f": 0, "t": 121, "d": [62,569], "a": 1 }, + { "px": [1008,180], "src": [18,108], "f": 0, "t": 121, "d": [62,626], "a": 1 }, + { "px": [1008,216], "src": [18,108], "f": 0, "t": 121, "d": [62,740], "a": 1 }, + { "px": [1008,234], "src": [18,108], "f": 0, "t": 121, "d": [62,797], "a": 1 }, + { "px": [306,252], "src": [18,108], "f": 0, "t": 121, "d": [62,815], "a": 1 }, + { "px": [1008,252], "src": [18,108], "f": 0, "t": 121, "d": [62,854], "a": 1 }, + { "px": [306,270], "src": [18,108], "f": 0, "t": 121, "d": [62,872], "a": 1 }, + { "px": [1008,270], "src": [18,108], "f": 0, "t": 121, "d": [62,911], "a": 1 }, + { "px": [306,288], "src": [18,108], "f": 0, "t": 121, "d": [62,929], "a": 1 }, + { "px": [486,288], "src": [18,108], "f": 0, "t": 121, "d": [62,939], "a": 1 }, + { "px": [1008,288], "src": [18,108], "f": 0, "t": 121, "d": [62,968], "a": 1 }, + { "px": [486,306], "src": [18,108], "f": 0, "t": 121, "d": [62,996], "a": 1 }, + { "px": [1008,306], "src": [18,108], "f": 0, "t": 121, "d": [62,1025], "a": 1 }, + { "px": [1008,324], "src": [18,108], "f": 0, "t": 121, "d": [62,1082], "a": 1 }, + { "px": [1008,342], "src": [18,108], "f": 0, "t": 121, "d": [62,1139], "a": 1 }, + { "px": [1008,360], "src": [18,108], "f": 0, "t": 121, "d": [62,1196], "a": 1 }, + { "px": [1008,378], "src": [18,108], "f": 0, "t": 121, "d": [62,1253], "a": 1 }, + { "px": [1008,396], "src": [18,108], "f": 0, "t": 121, "d": [62,1310], "a": 1 }, + { "px": [1008,414], "src": [18,108], "f": 0, "t": 121, "d": [62,1367], "a": 1 }, + { "px": [1008,432], "src": [18,108], "f": 0, "t": 121, "d": [62,1424], "a": 1 }, + { "px": [1008,450], "src": [18,108], "f": 0, "t": 121, "d": [62,1481], "a": 1 }, + { "px": [1008,468], "src": [18,108], "f": 0, "t": 121, "d": [62,1538], "a": 1 }, + { "px": [1008,486], "src": [18,108], "f": 0, "t": 121, "d": [62,1595], "a": 1 }, + { "px": [1008,504], "src": [18,108], "f": 0, "t": 121, "d": [62,1652], "a": 1 }, + { "px": [1008,522], "src": [18,108], "f": 0, "t": 121, "d": [62,1709], "a": 1 }, + { "px": [1008,540], "src": [18,108], "f": 0, "t": 121, "d": [62,1766], "a": 1 }, + { "px": [630,558], "src": [18,108], "f": 0, "t": 121, "d": [62,1802], "a": 1 }, + { "px": [1008,558], "src": [18,108], "f": 0, "t": 121, "d": [62,1823], "a": 1 }, + { "px": [630,576], "src": [18,108], "f": 0, "t": 121, "d": [62,1859], "a": 1 }, + { "px": [1008,576], "src": [18,108], "f": 0, "t": 121, "d": [62,1880], "a": 1 }, + { "px": [1008,594], "src": [18,108], "f": 0, "t": 121, "d": [62,1937], "a": 1 }, + { "px": [1008,612], "src": [18,108], "f": 0, "t": 121, "d": [62,1994], "a": 1 }, + { "px": [1008,630], "src": [18,108], "f": 0, "t": 121, "d": [62,2051], "a": 1 }, + { "px": [1008,648], "src": [18,108], "f": 0, "t": 121, "d": [62,2108], "a": 1 }, + { "px": [1008,666], "src": [18,108], "f": 0, "t": 121, "d": [62,2165], "a": 1 }, + { "px": [1008,684], "src": [18,108], "f": 0, "t": 121, "d": [62,2222], "a": 1 }, + { "px": [1008,702], "src": [18,108], "f": 0, "t": 121, "d": [62,2279], "a": 1 }, + { "px": [1008,720], "src": [18,108], "f": 0, "t": 121, "d": [62,2336], "a": 1 }, + { "px": [1008,738], "src": [18,108], "f": 0, "t": 121, "d": [62,2393], "a": 1 }, + { "px": [1008,756], "src": [18,108], "f": 0, "t": 121, "d": [62,2450], "a": 1 }, + { "px": [1008,774], "src": [18,108], "f": 0, "t": 121, "d": [62,2507], "a": 1 }, + { "px": [1008,792], "src": [18,108], "f": 0, "t": 121, "d": [62,2564], "a": 1 }, + { "px": [1008,810], "src": [18,108], "f": 0, "t": 121, "d": [62,2621], "a": 1 }, + { "px": [1008,828], "src": [18,108], "f": 0, "t": 121, "d": [62,2678], "a": 1 }, + { "px": [1008,846], "src": [18,108], "f": 0, "t": 121, "d": [62,2735], "a": 1 }, + { "px": [1008,864], "src": [18,108], "f": 0, "t": 121, "d": [62,2792], "a": 1 }, + { "px": [1008,882], "src": [18,108], "f": 0, "t": 121, "d": [62,2849], "a": 1 }, + { "px": [1008,900], "src": [18,108], "f": 0, "t": 121, "d": [62,2906], "a": 1 }, + { "px": [1008,918], "src": [18,108], "f": 0, "t": 121, "d": [62,2963], "a": 1 }, + { "px": [1008,936], "src": [18,108], "f": 0, "t": 121, "d": [62,3020], "a": 1 }, + { "px": [18,90], "src": [36,126], "f": 0, "t": 142, "d": [61,286], "a": 1 }, + { "px": [36,90], "src": [36,126], "f": 0, "t": 142, "d": [61,287], "a": 1 }, + { "px": [54,90], "src": [36,126], "f": 0, "t": 142, "d": [61,288], "a": 1 }, + { "px": [72,90], "src": [36,126], "f": 0, "t": 142, "d": [61,289], "a": 1 }, + { "px": [342,252], "src": [36,126], "f": 0, "t": 142, "d": [61,817], "a": 1 }, + { "px": [360,252], "src": [36,126], "f": 0, "t": 142, "d": [61,818], "a": 1 }, + { "px": [378,252], "src": [36,126], "f": 0, "t": 142, "d": [61,819], "a": 1 }, + { "px": [396,252], "src": [36,126], "f": 0, "t": 142, "d": [61,820], "a": 1 }, + { "px": [414,252], "src": [36,126], "f": 0, "t": 142, "d": [61,821], "a": 1 }, + { "px": [450,270], "src": [36,126], "f": 0, "t": 142, "d": [61,880], "a": 1 }, + { "px": [468,270], "src": [36,126], "f": 0, "t": 142, "d": [61,881], "a": 1 }, + { "px": [324,306], "src": [36,126], "f": 0, "t": 142, "d": [61,987], "a": 1 }, + { "px": [522,306], "src": [36,126], "f": 0, "t": 142, "d": [61,998], "a": 1 }, + { "px": [540,306], "src": [36,126], "f": 0, "t": 142, "d": [61,999], "a": 1 }, + { "px": [342,396], "src": [36,126], "f": 0, "t": 142, "d": [61,1273], "a": 1 }, + { "px": [360,396], "src": [36,126], "f": 0, "t": 142, "d": [61,1274], "a": 1 }, + { "px": [378,396], "src": [36,126], "f": 0, "t": 142, "d": [61,1275], "a": 1 }, + { "px": [396,396], "src": [36,126], "f": 0, "t": 142, "d": [61,1276], "a": 1 }, + { "px": [414,396], "src": [36,126], "f": 0, "t": 142, "d": [61,1277], "a": 1 }, + { "px": [432,396], "src": [36,126], "f": 0, "t": 142, "d": [61,1278], "a": 1 }, + { "px": [450,396], "src": [36,126], "f": 0, "t": 142, "d": [61,1279], "a": 1 }, + { "px": [468,396], "src": [36,126], "f": 0, "t": 142, "d": [61,1280], "a": 1 }, + { "px": [486,396], "src": [36,126], "f": 0, "t": 142, "d": [61,1281], "a": 1 }, + { "px": [18,522], "src": [36,126], "f": 0, "t": 142, "d": [61,1654], "a": 1 }, + { "px": [36,522], "src": [36,126], "f": 0, "t": 142, "d": [61,1655], "a": 1 }, + { "px": [54,522], "src": [36,126], "f": 0, "t": 142, "d": [61,1656], "a": 1 }, + { "px": [72,522], "src": [36,126], "f": 0, "t": 142, "d": [61,1657], "a": 1 }, + { "px": [648,594], "src": [36,126], "f": 0, "t": 142, "d": [61,1917], "a": 1 }, + { "px": [666,594], "src": [36,126], "f": 0, "t": 142, "d": [61,1918], "a": 1 }, + { "px": [684,594], "src": [36,126], "f": 0, "t": 142, "d": [61,1919], "a": 1 }, + { "px": [702,594], "src": [36,126], "f": 0, "t": 142, "d": [61,1920], "a": 1 }, + { "px": [720,594], "src": [36,126], "f": 0, "t": 142, "d": [61,1921], "a": 1 }, + { "px": [738,594], "src": [36,126], "f": 0, "t": 142, "d": [61,1922], "a": 1 }, + { "px": [756,594], "src": [36,126], "f": 0, "t": 142, "d": [61,1923], "a": 1 }, + { "px": [774,594], "src": [36,126], "f": 0, "t": 142, "d": [61,1924], "a": 1 }, + { "px": [792,594], "src": [36,126], "f": 0, "t": 142, "d": [61,1925], "a": 1 }, + { "px": [108,846], "src": [36,126], "f": 0, "t": 142, "d": [61,2685], "a": 1 }, + { "px": [126,846], "src": [36,126], "f": 0, "t": 142, "d": [61,2686], "a": 1 }, + { "px": [144,846], "src": [36,126], "f": 0, "t": 142, "d": [61,2687], "a": 1 }, + { "px": [162,846], "src": [36,126], "f": 0, "t": 142, "d": [61,2688], "a": 1 }, + { "px": [180,846], "src": [36,126], "f": 0, "t": 142, "d": [61,2689], "a": 1 }, + { "px": [198,846], "src": [36,126], "f": 0, "t": 142, "d": [61,2690], "a": 1 }, + { "px": [774,846], "src": [36,126], "f": 0, "t": 142, "d": [61,2722], "a": 1 }, + { "px": [792,846], "src": [36,126], "f": 0, "t": 142, "d": [61,2723], "a": 1 }, + { "px": [810,846], "src": [36,126], "f": 0, "t": 142, "d": [61,2724], "a": 1 }, + { "px": [0,0], "src": [54,108], "f": 0, "t": 123, "d": [60,0], "a": 1 }, + { "px": [0,18], "src": [54,108], "f": 0, "t": 123, "d": [60,57], "a": 1 }, + { "px": [0,36], "src": [54,108], "f": 0, "t": 123, "d": [60,114], "a": 1 }, + { "px": [0,54], "src": [54,108], "f": 0, "t": 123, "d": [60,171], "a": 1 }, + { "px": [0,108], "src": [54,108], "f": 0, "t": 123, "d": [60,342], "a": 1 }, + { "px": [0,126], "src": [54,108], "f": 0, "t": 123, "d": [60,399], "a": 1 }, + { "px": [0,144], "src": [54,108], "f": 0, "t": 123, "d": [60,456], "a": 1 }, + { "px": [0,162], "src": [54,108], "f": 0, "t": 123, "d": [60,513], "a": 1 }, + { "px": [0,180], "src": [54,108], "f": 0, "t": 123, "d": [60,570], "a": 1 }, + { "px": [0,198], "src": [54,108], "f": 0, "t": 123, "d": [60,627], "a": 1 }, + { "px": [0,216], "src": [54,108], "f": 0, "t": 123, "d": [60,684], "a": 1 }, + { "px": [0,234], "src": [54,108], "f": 0, "t": 123, "d": [60,741], "a": 1 }, + { "px": [0,252], "src": [54,108], "f": 0, "t": 123, "d": [60,798], "a": 1 }, + { "px": [0,270], "src": [54,108], "f": 0, "t": 123, "d": [60,855], "a": 1 }, + { "px": [324,270], "src": [54,108], "f": 0, "t": 123, "d": [60,873], "a": 1 }, + { "px": [558,270], "src": [54,108], "f": 0, "t": 123, "d": [60,886], "a": 1 }, + { "px": [0,288], "src": [54,108], "f": 0, "t": 123, "d": [60,912], "a": 1 }, + { "px": [324,288], "src": [54,108], "f": 0, "t": 123, "d": [60,930], "a": 1 }, + { "px": [558,288], "src": [54,108], "f": 0, "t": 123, "d": [60,943], "a": 1 }, + { "px": [0,306], "src": [54,108], "f": 0, "t": 123, "d": [60,969], "a": 1 }, + { "px": [0,324], "src": [54,108], "f": 0, "t": 123, "d": [60,1026], "a": 1 }, + { "px": [504,324], "src": [54,108], "f": 0, "t": 123, "d": [60,1054], "a": 1 }, + { "px": [0,342], "src": [54,108], "f": 0, "t": 123, "d": [60,1083], "a": 1 }, + { "px": [504,342], "src": [54,108], "f": 0, "t": 123, "d": [60,1111], "a": 1 }, + { "px": [0,360], "src": [54,108], "f": 0, "t": 123, "d": [60,1140], "a": 1 }, + { "px": [504,360], "src": [54,108], "f": 0, "t": 123, "d": [60,1168], "a": 1 }, + { "px": [0,378], "src": [54,108], "f": 0, "t": 123, "d": [60,1197], "a": 1 }, + { "px": [504,378], "src": [54,108], "f": 0, "t": 123, "d": [60,1225], "a": 1 }, + { "px": [0,396], "src": [54,108], "f": 0, "t": 123, "d": [60,1254], "a": 1 }, + { "px": [0,414], "src": [54,108], "f": 0, "t": 123, "d": [60,1311], "a": 1 }, + { "px": [0,432], "src": [54,108], "f": 0, "t": 123, "d": [60,1368], "a": 1 }, + { "px": [0,450], "src": [54,108], "f": 0, "t": 123, "d": [60,1425], "a": 1 }, + { "px": [0,468], "src": [54,108], "f": 0, "t": 123, "d": [60,1482], "a": 1 }, + { "px": [0,486], "src": [54,108], "f": 0, "t": 123, "d": [60,1539], "a": 1 }, + { "px": [0,540], "src": [54,108], "f": 0, "t": 123, "d": [60,1710], "a": 1 }, + { "px": [0,558], "src": [54,108], "f": 0, "t": 123, "d": [60,1767], "a": 1 }, + { "px": [810,558], "src": [54,108], "f": 0, "t": 123, "d": [60,1812], "a": 1 }, + { "px": [0,576], "src": [54,108], "f": 0, "t": 123, "d": [60,1824], "a": 1 }, + { "px": [810,576], "src": [54,108], "f": 0, "t": 123, "d": [60,1869], "a": 1 }, + { "px": [0,594], "src": [54,108], "f": 0, "t": 123, "d": [60,1881], "a": 1 }, + { "px": [0,612], "src": [54,108], "f": 0, "t": 123, "d": [60,1938], "a": 1 }, + { "px": [0,630], "src": [54,108], "f": 0, "t": 123, "d": [60,1995], "a": 1 }, + { "px": [0,648], "src": [54,108], "f": 0, "t": 123, "d": [60,2052], "a": 1 }, + { "px": [0,666], "src": [54,108], "f": 0, "t": 123, "d": [60,2109], "a": 1 }, + { "px": [0,684], "src": [54,108], "f": 0, "t": 123, "d": [60,2166], "a": 1 }, + { "px": [0,702], "src": [54,108], "f": 0, "t": 123, "d": [60,2223], "a": 1 }, + { "px": [0,720], "src": [54,108], "f": 0, "t": 123, "d": [60,2280], "a": 1 }, + { "px": [0,738], "src": [54,108], "f": 0, "t": 123, "d": [60,2337], "a": 1 }, + { "px": [0,756], "src": [54,108], "f": 0, "t": 123, "d": [60,2394], "a": 1 }, + { "px": [0,774], "src": [54,108], "f": 0, "t": 123, "d": [60,2451], "a": 1 }, + { "px": [0,792], "src": [54,108], "f": 0, "t": 123, "d": [60,2508], "a": 1 }, + { "px": [0,810], "src": [54,108], "f": 0, "t": 123, "d": [60,2565], "a": 1 }, + { "px": [0,828], "src": [54,108], "f": 0, "t": 123, "d": [60,2622], "a": 1 }, + { "px": [0,846], "src": [54,108], "f": 0, "t": 123, "d": [60,2679], "a": 1 }, + { "px": [0,864], "src": [54,108], "f": 0, "t": 123, "d": [60,2736], "a": 1 }, + { "px": [0,882], "src": [54,108], "f": 0, "t": 123, "d": [60,2793], "a": 1 }, + { "px": [0,900], "src": [54,108], "f": 0, "t": 123, "d": [60,2850], "a": 1 }, + { "px": [0,918], "src": [54,108], "f": 0, "t": 123, "d": [60,2907], "a": 1 }, + { "px": [0,936], "src": [54,108], "f": 0, "t": 123, "d": [60,2964], "a": 1 }, + { "px": [18,72], "src": [36,18], "f": 0, "t": 22, "d": [59,229], "a": 1 }, + { "px": [36,72], "src": [36,18], "f": 0, "t": 22, "d": [59,230], "a": 1 }, + { "px": [54,72], "src": [36,18], "f": 0, "t": 22, "d": [59,231], "a": 1 }, + { "px": [72,72], "src": [36,18], "f": 0, "t": 22, "d": [59,232], "a": 1 }, + { "px": [306,234], "src": [36,18], "f": 0, "t": 22, "d": [59,758], "a": 1 }, + { "px": [324,234], "src": [36,18], "f": 0, "t": 22, "d": [59,759], "a": 1 }, + { "px": [342,234], "src": [36,18], "f": 0, "t": 22, "d": [59,760], "a": 1 }, + { "px": [360,234], "src": [36,18], "f": 0, "t": 22, "d": [59,761], "a": 1 }, + { "px": [378,234], "src": [36,18], "f": 0, "t": 22, "d": [59,762], "a": 1 }, + { "px": [396,234], "src": [36,18], "f": 0, "t": 22, "d": [59,763], "a": 1 }, + { "px": [414,234], "src": [36,18], "f": 0, "t": 22, "d": [59,764], "a": 1 }, + { "px": [432,234], "src": [36,18], "f": 0, "t": 22, "d": [59,765], "a": 1 }, + { "px": [450,234], "src": [36,18], "f": 0, "t": 22, "d": [59,766], "a": 1 }, + { "px": [468,234], "src": [36,18], "f": 0, "t": 22, "d": [59,767], "a": 1 }, + { "px": [486,234], "src": [36,18], "f": 0, "t": 22, "d": [59,768], "a": 1 }, + { "px": [522,252], "src": [36,18], "f": 0, "t": 22, "d": [59,827], "a": 1 }, + { "px": [540,252], "src": [36,18], "f": 0, "t": 22, "d": [59,828], "a": 1 }, + { "px": [558,252], "src": [36,18], "f": 0, "t": 22, "d": [59,829], "a": 1 }, + { "px": [450,342], "src": [36,18], "f": 0, "t": 22, "d": [59,1108], "a": 1 }, + { "px": [414,360], "src": [36,18], "f": 0, "t": 22, "d": [59,1163], "a": 1 }, + { "px": [360,378], "src": [36,18], "f": 0, "t": 22, "d": [59,1217], "a": 1 }, + { "px": [378,378], "src": [36,18], "f": 0, "t": 22, "d": [59,1218], "a": 1 }, + { "px": [18,504], "src": [36,18], "f": 0, "t": 22, "d": [59,1597], "a": 1 }, + { "px": [36,504], "src": [36,18], "f": 0, "t": 22, "d": [59,1598], "a": 1 }, + { "px": [54,504], "src": [36,18], "f": 0, "t": 22, "d": [59,1599], "a": 1 }, + { "px": [72,504], "src": [36,18], "f": 0, "t": 22, "d": [59,1600], "a": 1 }, + { "px": [90,504], "src": [36,18], "f": 0, "t": 22, "d": [59,1601], "a": 1 }, + { "px": [630,540], "src": [36,18], "f": 0, "t": 22, "d": [59,1745], "a": 1 }, + { "px": [648,540], "src": [36,18], "f": 0, "t": 22, "d": [59,1746], "a": 1 }, + { "px": [666,540], "src": [36,18], "f": 0, "t": 22, "d": [59,1747], "a": 1 }, + { "px": [684,540], "src": [36,18], "f": 0, "t": 22, "d": [59,1748], "a": 1 }, + { "px": [702,540], "src": [36,18], "f": 0, "t": 22, "d": [59,1749], "a": 1 }, + { "px": [720,540], "src": [36,18], "f": 0, "t": 22, "d": [59,1750], "a": 1 }, + { "px": [738,540], "src": [36,18], "f": 0, "t": 22, "d": [59,1751], "a": 1 }, + { "px": [756,540], "src": [36,18], "f": 0, "t": 22, "d": [59,1752], "a": 1 }, + { "px": [774,540], "src": [36,18], "f": 0, "t": 22, "d": [59,1753], "a": 1 }, + { "px": [792,540], "src": [36,18], "f": 0, "t": 22, "d": [59,1754], "a": 1 }, + { "px": [108,828], "src": [36,18], "f": 0, "t": 22, "d": [59,2628], "a": 1 }, + { "px": [126,828], "src": [36,18], "f": 0, "t": 22, "d": [59,2629], "a": 1 }, + { "px": [144,828], "src": [36,18], "f": 0, "t": 22, "d": [59,2630], "a": 1 }, + { "px": [162,828], "src": [36,18], "f": 0, "t": 22, "d": [59,2631], "a": 1 }, + { "px": [180,828], "src": [36,18], "f": 0, "t": 22, "d": [59,2632], "a": 1 }, + { "px": [198,828], "src": [36,18], "f": 0, "t": 22, "d": [59,2633], "a": 1 }, + { "px": [774,828], "src": [36,18], "f": 0, "t": 22, "d": [59,2665], "a": 1 }, + { "px": [792,828], "src": [36,18], "f": 0, "t": 22, "d": [59,2666], "a": 1 }, + { "px": [810,828], "src": [36,18], "f": 0, "t": 22, "d": [59,2667], "a": 1 }, + { "px": [18,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3022], "a": 1 }, + { "px": [36,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3023], "a": 1 }, + { "px": [54,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3024], "a": 1 }, + { "px": [72,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3025], "a": 1 }, + { "px": [90,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3026], "a": 1 }, + { "px": [108,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3027], "a": 1 }, + { "px": [126,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3028], "a": 1 }, + { "px": [144,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3029], "a": 1 }, + { "px": [162,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3030], "a": 1 }, + { "px": [180,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3031], "a": 1 }, + { "px": [198,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3032], "a": 1 }, + { "px": [216,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3033], "a": 1 }, + { "px": [234,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3034], "a": 1 }, + { "px": [252,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3035], "a": 1 }, + { "px": [270,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3036], "a": 1 }, + { "px": [288,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3037], "a": 1 }, + { "px": [306,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3038], "a": 1 }, + { "px": [324,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3039], "a": 1 }, + { "px": [342,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3040], "a": 1 }, + { "px": [360,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3041], "a": 1 }, + { "px": [378,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3042], "a": 1 }, + { "px": [396,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3043], "a": 1 }, + { "px": [414,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3044], "a": 1 }, + { "px": [432,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3045], "a": 1 }, + { "px": [450,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3046], "a": 1 }, + { "px": [468,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3047], "a": 1 }, + { "px": [486,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3048], "a": 1 }, + { "px": [504,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3049], "a": 1 }, + { "px": [522,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3050], "a": 1 }, + { "px": [540,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3051], "a": 1 }, + { "px": [558,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3052], "a": 1 }, + { "px": [576,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3053], "a": 1 }, + { "px": [594,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3054], "a": 1 }, + { "px": [612,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3055], "a": 1 }, + { "px": [630,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3056], "a": 1 }, + { "px": [648,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3057], "a": 1 }, + { "px": [666,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3058], "a": 1 }, + { "px": [684,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3059], "a": 1 }, + { "px": [702,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3060], "a": 1 }, + { "px": [720,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3061], "a": 1 }, + { "px": [738,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3062], "a": 1 }, + { "px": [756,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3063], "a": 1 }, + { "px": [774,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3064], "a": 1 }, + { "px": [792,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3065], "a": 1 }, + { "px": [810,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3066], "a": 1 }, + { "px": [828,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3067], "a": 1 }, + { "px": [846,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3068], "a": 1 }, + { "px": [864,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3069], "a": 1 }, + { "px": [882,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3070], "a": 1 }, + { "px": [900,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3071], "a": 1 }, + { "px": [918,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3072], "a": 1 }, + { "px": [936,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3073], "a": 1 }, + { "px": [954,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3074], "a": 1 }, + { "px": [972,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3075], "a": 1 }, + { "px": [990,954], "src": [36,18], "f": 0, "t": 22, "d": [59,3076], "a": 1 }, + { "px": [432,270], "src": [18,126], "f": 0, "t": 141, "d": [58,879], "a": 1 }, + { "px": [306,306], "src": [18,126], "f": 0, "t": 141, "d": [58,986], "a": 1 }, + { "px": [630,594], "src": [18,126], "f": 0, "t": 141, "d": [58,1916], "a": 1 }, + { "px": [90,846], "src": [18,126], "f": 0, "t": 141, "d": [58,2684], "a": 1 }, + { "px": [756,846], "src": [18,126], "f": 0, "t": 141, "d": [58,2721], "a": 1 }, + { "px": [90,90], "src": [54,126], "f": 0, "t": 143, "d": [57,290], "a": 1 }, + { "px": [558,306], "src": [54,126], "f": 0, "t": 143, "d": [57,1000], "a": 1 }, + { "px": [504,396], "src": [54,126], "f": 0, "t": 143, "d": [57,1282], "a": 1 }, + { "px": [90,522], "src": [54,126], "f": 0, "t": 143, "d": [57,1658], "a": 1 }, + { "px": [810,594], "src": [54,126], "f": 0, "t": 143, "d": [57,1926], "a": 1 }, + { "px": [216,846], "src": [54,126], "f": 0, "t": 143, "d": [57,2691], "a": 1 }, + { "px": [828,846], "src": [54,126], "f": 0, "t": 143, "d": [57,2725], "a": 1 }, + { "px": [90,72], "src": [54,18], "f": 0, "t": 23, "d": [56,233], "a": 1 }, + { "px": [504,234], "src": [54,18], "f": 0, "t": 23, "d": [56,769], "a": 1 }, + { "px": [810,540], "src": [54,18], "f": 0, "t": 23, "d": [56,1755], "a": 1 }, + { "px": [216,828], "src": [54,18], "f": 0, "t": 23, "d": [56,2634], "a": 1 }, + { "px": [828,828], "src": [54,18], "f": 0, "t": 23, "d": [56,2668], "a": 1 }, + { "px": [468,324], "src": [18,18], "f": 0, "t": 21, "d": [55,1052], "a": 1 }, + { "px": [432,342], "src": [18,18], "f": 0, "t": 21, "d": [55,1107], "a": 1 }, + { "px": [396,360], "src": [18,18], "f": 0, "t": 21, "d": [55,1162], "a": 1 }, + { "px": [342,378], "src": [18,18], "f": 0, "t": 21, "d": [55,1216], "a": 1 }, + { "px": [90,828], "src": [18,18], "f": 0, "t": 21, "d": [55,2627], "a": 1 }, + { "px": [756,828], "src": [18,18], "f": 0, "t": 21, "d": [55,2664], "a": 1 }, + { "px": [864,198], "src": [36,0], "f": 0, "t": 2, "d": [54,675], "a": 1 }, + { "px": [882,198], "src": [36,0], "f": 0, "t": 2, "d": [54,676], "a": 1 }, + { "px": [900,198], "src": [36,0], "f": 0, "t": 2, "d": [54,677], "a": 1 }, + { "px": [918,198], "src": [36,0], "f": 0, "t": 2, "d": [54,678], "a": 1 }, + { "px": [936,198], "src": [36,0], "f": 0, "t": 2, "d": [54,679], "a": 1 }, + { "px": [954,198], "src": [36,0], "f": 0, "t": 2, "d": [54,680], "a": 1 }, + { "px": [972,198], "src": [36,0], "f": 0, "t": 2, "d": [54,681], "a": 1 }, + { "px": [990,198], "src": [36,0], "f": 0, "t": 2, "d": [54,682], "a": 1 }, + { "px": [198,234], "src": [36,0], "f": 0, "t": 2, "d": [54,752], "a": 1 }, + { "px": [216,234], "src": [36,0], "f": 0, "t": 2, "d": [54,753], "a": 1 }, + { "px": [234,234], "src": [36,0], "f": 0, "t": 2, "d": [54,754], "a": 1 }, + { "px": [252,234], "src": [36,0], "f": 0, "t": 2, "d": [54,755], "a": 1 }, + { "px": [270,234], "src": [36,0], "f": 0, "t": 2, "d": [54,756], "a": 1 }, + { "px": [288,234], "src": [36,0], "f": 0, "t": 2, "d": [54,757], "a": 1 }, + { "px": [576,252], "src": [36,0], "f": 0, "t": 2, "d": [54,830], "a": 1 }, + { "px": [594,252], "src": [36,0], "f": 0, "t": 2, "d": [54,831], "a": 1 }, + { "px": [612,252], "src": [36,0], "f": 0, "t": 2, "d": [54,832], "a": 1 }, + { "px": [630,252], "src": [36,0], "f": 0, "t": 2, "d": [54,833], "a": 1 }, + { "px": [342,306], "src": [36,0], "f": 0, "t": 2, "d": [54,988], "a": 1 }, + { "px": [306,396], "src": [36,0], "f": 0, "t": 2, "d": [54,1271], "a": 1 }, + { "px": [324,396], "src": [36,0], "f": 0, "t": 2, "d": [54,1272], "a": 1 }, + { "px": [108,504], "src": [36,0], "f": 0, "t": 2, "d": [54,1602], "a": 1 }, + { "px": [126,504], "src": [36,0], "f": 0, "t": 2, "d": [54,1603], "a": 1 }, + { "px": [144,504], "src": [36,0], "f": 0, "t": 2, "d": [54,1604], "a": 1 }, + { "px": [162,504], "src": [36,0], "f": 0, "t": 2, "d": [54,1605], "a": 1 }, + { "px": [180,504], "src": [36,0], "f": 0, "t": 2, "d": [54,1606], "a": 1 }, + { "px": [558,540], "src": [36,0], "f": 0, "t": 2, "d": [54,1741], "a": 1 }, + { "px": [576,540], "src": [36,0], "f": 0, "t": 2, "d": [54,1742], "a": 1 }, + { "px": [594,540], "src": [36,0], "f": 0, "t": 2, "d": [54,1743], "a": 1 }, + { "px": [612,540], "src": [36,0], "f": 0, "t": 2, "d": [54,1744], "a": 1 }, + { "px": [630,702], "src": [36,0], "f": 0, "t": 2, "d": [54,2258], "a": 1 }, + { "px": [648,702], "src": [36,0], "f": 0, "t": 2, "d": [54,2259], "a": 1 }, + { "px": [702,774], "src": [36,0], "f": 0, "t": 2, "d": [54,2490], "a": 1 }, + { "px": [918,882], "src": [36,0], "f": 0, "t": 2, "d": [54,2844], "a": 1 }, + { "px": [936,882], "src": [36,0], "f": 0, "t": 2, "d": [54,2845], "a": 1 }, + { "px": [306,900], "src": [36,0], "f": 0, "t": 2, "d": [54,2867], "a": 1 }, + { "px": [324,900], "src": [36,0], "f": 0, "t": 2, "d": [54,2868], "a": 1 }, + { "px": [648,252], "src": [54,0], "f": 0, "t": 3, "d": [53,834], "a": 1 }, + { "px": [360,306], "src": [54,0], "f": 0, "t": 3, "d": [53,989], "a": 1 }, + { "px": [198,504], "src": [54,0], "f": 0, "t": 3, "d": [53,1607], "a": 1 }, + { "px": [666,702], "src": [54,0], "f": 0, "t": 3, "d": [53,2260], "a": 1 }, + { "px": [720,774], "src": [54,0], "f": 0, "t": 3, "d": [53,2491], "a": 1 }, + { "px": [954,882], "src": [54,0], "f": 0, "t": 3, "d": [53,2846], "a": 1 }, + { "px": [342,900], "src": [54,0], "f": 0, "t": 3, "d": [53,2869], "a": 1 }, + { "px": [846,198], "src": [18,0], "f": 0, "t": 1, "d": [52,674], "a": 1 }, + { "px": [180,234], "src": [18,0], "f": 0, "t": 1, "d": [52,751], "a": 1 }, + { "px": [288,396], "src": [18,0], "f": 0, "t": 1, "d": [52,1270], "a": 1 }, + { "px": [540,540], "src": [18,0], "f": 0, "t": 1, "d": [52,1740], "a": 1 }, + { "px": [612,702], "src": [18,0], "f": 0, "t": 1, "d": [52,2257], "a": 1 }, + { "px": [684,774], "src": [18,0], "f": 0, "t": 1, "d": [52,2489], "a": 1 }, + { "px": [900,882], "src": [18,0], "f": 0, "t": 1, "d": [52,2843], "a": 1 }, + { "px": [288,900], "src": [18,0], "f": 0, "t": 1, "d": [52,2866], "a": 1 }, + { "px": [738,144], "src": [252,126], "f": 0, "t": 154, "d": [43,497], "a": 1 }, + { "px": [756,144], "src": [252,126], "f": 0, "t": 154, "d": [43,498], "a": 1 }, + { "px": [360,540], "src": [252,126], "f": 0, "t": 154, "d": [43,1730], "a": 1 }, + { "px": [378,540], "src": [252,126], "f": 0, "t": 154, "d": [43,1731], "a": 1 }, + { "px": [396,540], "src": [252,126], "f": 0, "t": 154, "d": [43,1732], "a": 1 }, + { "px": [414,540], "src": [252,126], "f": 0, "t": 154, "d": [43,1733], "a": 1 }, + { "px": [270,576], "src": [252,126], "f": 0, "t": 154, "d": [43,1839], "a": 1 }, + { "px": [180,648], "src": [252,126], "f": 0, "t": 154, "d": [43,2062], "a": 1 }, + { "px": [198,648], "src": [252,126], "f": 0, "t": 154, "d": [43,2063], "a": 1 }, + { "px": [216,648], "src": [252,126], "f": 0, "t": 154, "d": [43,2064], "a": 1 }, + { "px": [900,666], "src": [252,126], "f": 0, "t": 154, "d": [43,2159], "a": 1 }, + { "px": [918,666], "src": [252,126], "f": 0, "t": 154, "d": [43,2160], "a": 1 }, + { "px": [936,666], "src": [252,126], "f": 0, "t": 154, "d": [43,2161], "a": 1 }, + { "px": [324,702], "src": [252,126], "f": 0, "t": 154, "d": [43,2241], "a": 1 }, + { "px": [342,702], "src": [252,126], "f": 0, "t": 154, "d": [43,2242], "a": 1 }, + { "px": [360,702], "src": [252,126], "f": 0, "t": 154, "d": [43,2243], "a": 1 }, + { "px": [774,144], "src": [270,126], "f": 0, "t": 155, "d": [42,499], "a": 1 }, + { "px": [432,540], "src": [270,126], "f": 0, "t": 155, "d": [42,1734], "a": 1 }, + { "px": [288,576], "src": [270,126], "f": 0, "t": 155, "d": [42,1840], "a": 1 }, + { "px": [234,648], "src": [270,126], "f": 0, "t": 155, "d": [42,2065], "a": 1 }, + { "px": [954,666], "src": [270,126], "f": 0, "t": 155, "d": [42,2162], "a": 1 }, + { "px": [378,702], "src": [270,126], "f": 0, "t": 155, "d": [42,2244], "a": 1 }, + { "px": [720,144], "src": [234,126], "f": 0, "t": 153, "d": [41,496], "a": 1 }, + { "px": [342,540], "src": [234,126], "f": 0, "t": 153, "d": [41,1729], "a": 1 }, + { "px": [252,576], "src": [234,126], "f": 0, "t": 153, "d": [41,1838], "a": 1 }, + { "px": [162,648], "src": [234,126], "f": 0, "t": 153, "d": [41,2061], "a": 1 }, + { "px": [882,666], "src": [234,126], "f": 0, "t": 153, "d": [41,2158], "a": 1 }, + { "px": [306,702], "src": [234,126], "f": 0, "t": 153, "d": [41,2240], "a": 1 }, + { "px": [684,198], "src": [288,126], "f": 0, "t": 156, "d": [40,665], "a": 1 }, + { "px": [252,414], "src": [288,126], "f": 0, "t": 156, "d": [40,1325], "a": 1 }, + { "px": [198,450], "src": [288,126], "f": 0, "t": 156, "d": [40,1436], "a": 1 }, + { "px": [252,756], "src": [288,126], "f": 0, "t": 156, "d": [40,2408], "a": 1 }, + { "px": [900,90], "src": [324,18], "f": 0, "t": 38, "d": [165,335], "a": 1 }, + { "px": [936,90], "src": [324,18], "f": 0, "t": 38, "d": [165,337], "a": 1 }, + { "px": [180,144], "src": [324,18], "f": 0, "t": 38, "d": [165,466], "a": 1 }, + { "px": [216,144], "src": [324,18], "f": 0, "t": 38, "d": [165,468], "a": 1 }, + { "px": [450,702], "src": [324,18], "f": 0, "t": 38, "d": [165,2248], "a": 1 }, + { "px": [468,702], "src": [324,18], "f": 0, "t": 38, "d": [165,2249], "a": 1 }, + { "px": [486,702], "src": [324,18], "f": 0, "t": 38, "d": [165,2250], "a": 1 }, + { "px": [504,702], "src": [324,18], "f": 0, "t": 38, "d": [165,2251], "a": 1 }, + { "px": [522,702], "src": [324,18], "f": 0, "t": 38, "d": [165,2252], "a": 1 }, + { "px": [540,702], "src": [324,18], "f": 0, "t": 38, "d": [165,2253], "a": 1 }, + { "px": [558,702], "src": [324,18], "f": 0, "t": 38, "d": [165,2254], "a": 1 }, + { "px": [450,720], "src": [324,18], "f": 0, "t": 38, "d": [165,2305], "a": 1 }, + { "px": [468,720], "src": [324,18], "f": 0, "t": 38, "d": [165,2306], "a": 1 }, + { "px": [486,720], "src": [324,18], "f": 0, "t": 38, "d": [165,2307], "a": 1 }, + { "px": [504,720], "src": [324,18], "f": 0, "t": 38, "d": [165,2308], "a": 1 }, + { "px": [522,720], "src": [324,18], "f": 0, "t": 38, "d": [165,2309], "a": 1 }, + { "px": [540,720], "src": [324,18], "f": 0, "t": 38, "d": [165,2310], "a": 1 }, + { "px": [558,720], "src": [324,18], "f": 0, "t": 38, "d": [165,2311], "a": 1 }, + { "px": [450,738], "src": [324,18], "f": 0, "t": 38, "d": [165,2362], "a": 1 }, + { "px": [468,738], "src": [324,18], "f": 0, "t": 38, "d": [165,2363], "a": 1 }, + { "px": [486,738], "src": [324,18], "f": 0, "t": 38, "d": [165,2364], "a": 1 }, + { "px": [504,738], "src": [324,18], "f": 0, "t": 38, "d": [165,2365], "a": 1 }, + { "px": [522,738], "src": [324,18], "f": 0, "t": 38, "d": [165,2366], "a": 1 }, + { "px": [540,738], "src": [324,18], "f": 0, "t": 38, "d": [165,2367], "a": 1 }, + { "px": [558,738], "src": [324,18], "f": 0, "t": 38, "d": [165,2368], "a": 1 }, + { "px": [450,756], "src": [324,18], "f": 0, "t": 38, "d": [165,2419], "a": 1 }, + { "px": [468,756], "src": [324,18], "f": 0, "t": 38, "d": [165,2420], "a": 1 }, + { "px": [486,756], "src": [324,18], "f": 0, "t": 38, "d": [165,2421], "a": 1 }, + { "px": [522,756], "src": [324,18], "f": 0, "t": 38, "d": [165,2423], "a": 1 }, + { "px": [540,756], "src": [324,18], "f": 0, "t": 38, "d": [165,2424], "a": 1 }, + { "px": [558,756], "src": [324,18], "f": 0, "t": 38, "d": [165,2425], "a": 1 }, + { "px": [882,90], "src": [306,18], "f": 0, "t": 37, "d": [164,334], "a": 1 }, + { "px": [162,144], "src": [306,18], "f": 0, "t": 37, "d": [164,465], "a": 1 }, + { "px": [432,702], "src": [306,18], "f": 0, "t": 37, "d": [164,2247], "a": 1 }, + { "px": [432,720], "src": [306,18], "f": 0, "t": 37, "d": [164,2304], "a": 1 }, + { "px": [432,738], "src": [306,18], "f": 0, "t": 37, "d": [164,2361], "a": 1 }, + { "px": [432,756], "src": [306,18], "f": 0, "t": 37, "d": [164,2418], "a": 1 }, + { "px": [450,774], "src": [324,36], "f": 0, "t": 58, "d": [163,2476], "a": 1 }, + { "px": [468,774], "src": [324,36], "f": 0, "t": 58, "d": [163,2477], "a": 1 }, + { "px": [540,774], "src": [324,36], "f": 0, "t": 58, "d": [163,2481], "a": 1 }, + { "px": [558,774], "src": [324,36], "f": 0, "t": 58, "d": [163,2482], "a": 1 }, + { "px": [954,90], "src": [342,18], "f": 0, "t": 39, "d": [162,338], "a": 1 }, + { "px": [234,144], "src": [342,18], "f": 0, "t": 39, "d": [162,469], "a": 1 }, + { "px": [576,702], "src": [342,18], "f": 0, "t": 39, "d": [162,2255], "a": 1 }, + { "px": [576,720], "src": [342,18], "f": 0, "t": 39, "d": [162,2312], "a": 1 }, + { "px": [576,738], "src": [342,18], "f": 0, "t": 39, "d": [162,2369], "a": 1 }, + { "px": [576,756], "src": [342,18], "f": 0, "t": 39, "d": [162,2426], "a": 1 }, + { "px": [900,72], "src": [324,0], "f": 0, "t": 18, "d": [161,278], "a": 1 }, + { "px": [918,72], "src": [324,0], "f": 0, "t": 18, "d": [161,279], "a": 1 }, + { "px": [936,72], "src": [324,0], "f": 0, "t": 18, "d": [161,280], "a": 1 }, + { "px": [180,126], "src": [324,0], "f": 0, "t": 18, "d": [161,409], "a": 1 }, + { "px": [198,126], "src": [324,0], "f": 0, "t": 18, "d": [161,410], "a": 1 }, + { "px": [216,126], "src": [324,0], "f": 0, "t": 18, "d": [161,411], "a": 1 }, + { "px": [450,684], "src": [324,0], "f": 0, "t": 18, "d": [161,2191], "a": 1 }, + { "px": [468,684], "src": [324,0], "f": 0, "t": 18, "d": [161,2192], "a": 1 }, + { "px": [486,684], "src": [324,0], "f": 0, "t": 18, "d": [161,2193], "a": 1 }, + { "px": [504,684], "src": [324,0], "f": 0, "t": 18, "d": [161,2194], "a": 1 }, + { "px": [522,684], "src": [324,0], "f": 0, "t": 18, "d": [161,2195], "a": 1 }, + { "px": [540,684], "src": [324,0], "f": 0, "t": 18, "d": [161,2196], "a": 1 }, + { "px": [558,684], "src": [324,0], "f": 0, "t": 18, "d": [161,2197], "a": 1 }, + { "px": [792,738], "src": [324,0], "f": 0, "t": 18, "d": [161,2381], "a": 1 }, + { "px": [882,108], "src": [306,36], "f": 0, "t": 57, "d": [160,391], "a": 1 }, + { "px": [162,162], "src": [306,36], "f": 0, "t": 57, "d": [160,522], "a": 1 }, + { "px": [774,756], "src": [306,36], "f": 0, "t": 57, "d": [160,2437], "a": 1 }, + { "px": [432,774], "src": [306,36], "f": 0, "t": 57, "d": [160,2475], "a": 1 }, + { "px": [954,108], "src": [342,36], "f": 0, "t": 59, "d": [159,395], "a": 1 }, + { "px": [234,162], "src": [342,36], "f": 0, "t": 59, "d": [159,526], "a": 1 }, + { "px": [810,756], "src": [342,36], "f": 0, "t": 59, "d": [159,2439], "a": 1 }, + { "px": [576,774], "src": [342,36], "f": 0, "t": 59, "d": [159,2483], "a": 1 }, + { "px": [954,72], "src": [342,0], "f": 0, "t": 19, "d": [158,281], "a": 1 }, + { "px": [234,126], "src": [342,0], "f": 0, "t": 19, "d": [158,412], "a": 1 }, + { "px": [324,162], "src": [342,0], "f": 0, "t": 19, "d": [158,531], "a": 1 }, + { "px": [576,684], "src": [342,0], "f": 0, "t": 19, "d": [158,2198], "a": 1 }, + { "px": [810,738], "src": [342,0], "f": 0, "t": 19, "d": [158,2382], "a": 1 }, + { "px": [882,72], "src": [306,0], "f": 0, "t": 17, "d": [157,277], "a": 1 }, + { "px": [162,126], "src": [306,0], "f": 0, "t": 17, "d": [157,408], "a": 1 }, + { "px": [288,162], "src": [306,0], "f": 0, "t": 17, "d": [157,529], "a": 1 }, + { "px": [432,684], "src": [306,0], "f": 0, "t": 17, "d": [157,2190], "a": 1 }, + { "px": [774,738], "src": [306,0], "f": 0, "t": 17, "d": [157,2380], "a": 1 }, + { "px": [738,342], "src": [324,54], "f": 0, "t": 78, "d": [153,1124], "a": 1 }, + { "px": [756,342], "src": [324,54], "f": 0, "t": 78, "d": [153,1125], "a": 1 }, + { "px": [774,342], "src": [324,54], "f": 0, "t": 78, "d": [153,1126], "a": 1 }, + { "px": [864,450], "src": [324,54], "f": 0, "t": 78, "d": [153,1473], "a": 1 }, + { "px": [882,450], "src": [324,54], "f": 0, "t": 78, "d": [153,1474], "a": 1 }, + { "px": [900,450], "src": [324,54], "f": 0, "t": 78, "d": [153,1475], "a": 1 }, + { "px": [918,450], "src": [324,54], "f": 0, "t": 78, "d": [153,1476], "a": 1 }, + { "px": [792,342], "src": [342,54], "f": 0, "t": 79, "d": [152,1127], "a": 1 }, + { "px": [936,450], "src": [342,54], "f": 0, "t": 79, "d": [152,1477], "a": 1 }, + { "px": [720,342], "src": [306,54], "f": 0, "t": 77, "d": [151,1123], "a": 1 }, + { "px": [846,450], "src": [306,54], "f": 0, "t": 77, "d": [151,1472], "a": 1 }, + { "px": [684,288], "src": [288,0], "f": 0, "t": 16, "d": [150,950], "a": 1 }, + { "px": [846,378], "src": [288,0], "f": 0, "t": 16, "d": [150,1244], "a": 1 }, + { "px": [774,486], "src": [288,0], "f": 0, "t": 16, "d": [150,1582], "a": 1 }, + { "px": [918,180], "src": [306,108], "f": 0, "t": 137, "d": [175,621], "a": 1 }, + { "px": [198,216], "src": [306,108], "f": 0, "t": 137, "d": [175,695], "a": 1 }, + { "px": [306,216], "src": [306,108], "f": 0, "t": 137, "d": [175,701], "a": 1 }, + { "px": [792,810], "src": [306,108], "f": 0, "t": 137, "d": [175,2609], "a": 1 }, + { "px": [504,936], "src": [306,108], "f": 0, "t": 137, "d": [175,2992], "a": 1 }, + { "px": [918,126], "src": [288,72], "f": 0, "t": 96, "d": [166,450], "a": 1 }, + { "px": [918,144], "src": [288,90], "f": 0, "t": 116, "d": [166,507], "a": 1 }, + { "px": [918,162], "src": [288,90], "f": 0, "t": 116, "d": [166,564], "a": 1 }, + { "px": [198,180], "src": [288,72], "f": 0, "t": 96, "d": [166,581], "a": 1 }, + { "px": [198,198], "src": [288,90], "f": 0, "t": 116, "d": [166,638], "a": 1 }, + { "px": [306,198], "src": [288,90], "f": 0, "t": 116, "d": [166,644], "a": 1 }, + { "px": [792,774], "src": [288,90], "f": 0, "t": 116, "d": [166,2495], "a": 1 }, + { "px": [504,792], "src": [288,90], "f": 0, "t": 116, "d": [166,2536], "a": 1 }, + { "px": [792,792], "src": [288,72], "f": 0, "t": 96, "d": [166,2552], "a": 1 }, + { "px": [504,810], "src": [288,72], "f": 0, "t": 96, "d": [166,2593], "a": 1 }, + { "px": [504,828], "src": [288,72], "f": 0, "t": 96, "d": [166,2650], "a": 1 }, + { "px": [504,846], "src": [288,90], "f": 0, "t": 116, "d": [166,2707], "a": 1 }, + { "px": [504,864], "src": [288,72], "f": 0, "t": 96, "d": [166,2764], "a": 1 }, + { "px": [504,882], "src": [288,72], "f": 0, "t": 96, "d": [166,2821], "a": 1 }, + { "px": [504,900], "src": [288,72], "f": 0, "t": 96, "d": [166,2878], "a": 1 }, + { "px": [504,918], "src": [288,72], "f": 0, "t": 96, "d": [166,2935], "a": 1 }, + { "px": [918,108], "src": [306,72], "f": 0, "t": 97, "d": [117,393], "a": 1 }, + { "px": [198,162], "src": [306,72], "f": 0, "t": 97, "d": [117,524], "a": 1 }, + { "px": [306,180], "src": [306,72], "f": 0, "t": 97, "d": [117,587], "a": 1 }, + { "px": [504,774], "src": [306,72], "f": 0, "t": 97, "d": [117,2479], "a": 1 }, + { "px": [306,162], "src": [324,0], "f": 0, "t": 18, "d": [174,530], "a": 1 }, + { "px": [918,90], "src": [324,18], "f": 0, "t": 38, "d": [173,336], "a": 1 }, + { "px": [198,144], "src": [324,18], "f": 0, "t": 38, "d": [173,467], "a": 1 }, + { "px": [504,756], "src": [324,18], "f": 0, "t": 38, "d": [173,2422], "a": 1 }, + { "px": [792,756], "src": [324,18], "f": 0, "t": 38, "d": [173,2438], "a": 1 }, + { "px": [324,180], "src": [342,36], "f": 0, "t": 59, "d": [171,588], "a": 1 }, + { "px": [936,108], "src": [324,36], "f": 0, "t": 58, "d": [170,394], "a": 1 }, + { "px": [216,162], "src": [324,36], "f": 0, "t": 58, "d": [170,525], "a": 1 }, + { "px": [522,774], "src": [324,36], "f": 0, "t": 58, "d": [170,2480], "a": 1 }, + { "px": [288,180], "src": [306,36], "f": 0, "t": 57, "d": [172,586], "a": 1 }, + { "px": [900,108], "src": [324,36], "f": 0, "t": 58, "d": [167,392], "a": 1 }, + { "px": [180,162], "src": [324,36], "f": 0, "t": 58, "d": [167,523], "a": 1 }, + { "px": [486,774], "src": [324,36], "f": 0, "t": 58, "d": [167,2478], "a": 1 } + ], + "seed": 2107805, + "overrideTilesetUid": null, + "gridTiles": [], + "entityInstances": [] + }, + { + "__identifier": "Background", + "__type": "Tiles", + "__cWid": 43, + "__cHei": 43, + "__gridSize": 24, + "__opacity": 1, + "__pxTotalOffsetX": 0, + "__pxTotalOffsetY": 0, + "__tilesetDefUid": 2, + "__tilesetRelPath": "../pixel_platformer/backgrounds.png", + "iid": "1196c220-d380-11f0-8c50-6362bd330b3b", + "levelId": 0, + "layerDefUid": 180, + "pxOffsetX": 0, + "pxOffsetY": 0, + "visible": true, + "optionalRules": [], + "intGridCsv": [], + "autoLayerTiles": [], + "seed": 4198490, + "overrideTilesetUid": null, + "gridTiles": [ + { "px": [0,0], "src": [0,0], "f": 0, "t": 0, "d": [0], "a": 1 }, + { "px": [24,0], "src": [24,0], "f": 0, "t": 1, "d": [1], "a": 1 }, + { "px": [48,0], "src": [48,0], "f": 0, "t": 2, "d": [2], "a": 1 }, + { "px": [72,0], "src": [72,0], "f": 0, "t": 3, "d": [3], "a": 1 }, + { "px": [96,0], "src": [0,0], "f": 0, "t": 0, "d": [4], "a": 1 }, + { "px": [120,0], "src": [24,0], "f": 0, "t": 1, "d": [5], "a": 1 }, + { "px": [144,0], "src": [48,0], "f": 0, "t": 2, "d": [6], "a": 1 }, + { "px": [168,0], "src": [72,0], "f": 0, "t": 3, "d": [7], "a": 1 }, + { "px": [192,0], "src": [0,0], "f": 0, "t": 0, "d": [8], "a": 1 }, + { "px": [216,0], "src": [24,0], "f": 0, "t": 1, "d": [9], "a": 1 }, + { "px": [240,0], "src": [48,0], "f": 0, "t": 2, "d": [10], "a": 1 }, + { "px": [264,0], "src": [72,0], "f": 0, "t": 3, "d": [11], "a": 1 }, + { "px": [288,0], "src": [0,0], "f": 0, "t": 0, "d": [12], "a": 1 }, + { "px": [312,0], "src": [24,0], "f": 0, "t": 1, "d": [13], "a": 1 }, + { "px": [336,0], "src": [48,0], "f": 0, "t": 2, "d": [14], "a": 1 }, + { "px": [360,0], "src": [72,0], "f": 0, "t": 3, "d": [15], "a": 1 }, + { "px": [384,0], "src": [0,0], "f": 0, "t": 0, "d": [16], "a": 1 }, + { "px": [408,0], "src": [24,0], "f": 0, "t": 1, "d": [17], "a": 1 }, + { "px": [432,0], "src": [48,0], "f": 0, "t": 2, "d": [18], "a": 1 }, + { "px": [456,0], "src": [72,0], "f": 0, "t": 3, "d": [19], "a": 1 }, + { "px": [480,0], "src": [0,0], "f": 0, "t": 0, "d": [20], "a": 1 }, + { "px": [504,0], "src": [24,0], "f": 0, "t": 1, "d": [21], "a": 1 }, + { "px": [528,0], "src": [48,0], "f": 0, "t": 2, "d": [22], "a": 1 }, + { "px": [552,0], "src": [72,0], "f": 0, "t": 3, "d": [23], "a": 1 }, + { "px": [576,0], "src": [0,0], "f": 0, "t": 0, "d": [24], "a": 1 }, + { "px": [600,0], "src": [24,0], "f": 0, "t": 1, "d": [25], "a": 1 }, + { "px": [624,0], "src": [48,0], "f": 0, "t": 2, "d": [26], "a": 1 }, + { "px": [648,0], "src": [72,0], "f": 0, "t": 3, "d": [27], "a": 1 }, + { "px": [672,0], "src": [0,0], "f": 0, "t": 0, "d": [28], "a": 1 }, + { "px": [696,0], "src": [24,0], "f": 0, "t": 1, "d": [29], "a": 1 }, + { "px": [720,0], "src": [48,0], "f": 0, "t": 2, "d": [30], "a": 1 }, + { "px": [744,0], "src": [72,0], "f": 0, "t": 3, "d": [31], "a": 1 }, + { "px": [768,0], "src": [0,0], "f": 0, "t": 0, "d": [32], "a": 1 }, + { "px": [792,0], "src": [24,0], "f": 0, "t": 1, "d": [33], "a": 1 }, + { "px": [816,0], "src": [48,0], "f": 0, "t": 2, "d": [34], "a": 1 }, + { "px": [840,0], "src": [72,0], "f": 0, "t": 3, "d": [35], "a": 1 }, + { "px": [864,0], "src": [0,0], "f": 0, "t": 0, "d": [36], "a": 1 }, + { "px": [888,0], "src": [24,0], "f": 0, "t": 1, "d": [37], "a": 1 }, + { "px": [912,0], "src": [48,0], "f": 0, "t": 2, "d": [38], "a": 1 }, + { "px": [936,0], "src": [72,0], "f": 0, "t": 3, "d": [39], "a": 1 }, + { "px": [960,0], "src": [0,0], "f": 0, "t": 0, "d": [40], "a": 1 }, + { "px": [984,0], "src": [24,0], "f": 0, "t": 1, "d": [41], "a": 1 }, + { "px": [1008,0], "src": [48,0], "f": 0, "t": 2, "d": [42], "a": 1 }, + { "px": [0,24], "src": [0,0], "f": 0, "t": 0, "d": [43], "a": 1 }, + { "px": [24,24], "src": [24,0], "f": 0, "t": 1, "d": [44], "a": 1 }, + { "px": [48,24], "src": [48,0], "f": 0, "t": 2, "d": [45], "a": 1 }, + { "px": [72,24], "src": [72,0], "f": 0, "t": 3, "d": [46], "a": 1 }, + { "px": [96,24], "src": [0,0], "f": 0, "t": 0, "d": [47], "a": 1 }, + { "px": [120,24], "src": [24,0], "f": 0, "t": 1, "d": [48], "a": 1 }, + { "px": [144,24], "src": [48,0], "f": 0, "t": 2, "d": [49], "a": 1 }, + { "px": [168,24], "src": [72,0], "f": 0, "t": 3, "d": [50], "a": 1 }, + { "px": [192,24], "src": [0,0], "f": 0, "t": 0, "d": [51], "a": 1 }, + { "px": [216,24], "src": [24,0], "f": 0, "t": 1, "d": [52], "a": 1 }, + { "px": [240,24], "src": [48,0], "f": 0, "t": 2, "d": [53], "a": 1 }, + { "px": [264,24], "src": [72,0], "f": 0, "t": 3, "d": [54], "a": 1 }, + { "px": [288,24], "src": [0,0], "f": 0, "t": 0, "d": [55], "a": 1 }, + { "px": [312,24], "src": [24,0], "f": 0, "t": 1, "d": [56], "a": 1 }, + { "px": [336,24], "src": [48,0], "f": 0, "t": 2, "d": [57], "a": 1 }, + { "px": [360,24], "src": [72,0], "f": 0, "t": 3, "d": [58], "a": 1 }, + { "px": [384,24], "src": [0,0], "f": 0, "t": 0, "d": [59], "a": 1 }, + { "px": [408,24], "src": [24,0], "f": 0, "t": 1, "d": [60], "a": 1 }, + { "px": [432,24], "src": [48,0], "f": 0, "t": 2, "d": [61], "a": 1 }, + { "px": [456,24], "src": [72,0], "f": 0, "t": 3, "d": [62], "a": 1 }, + { "px": [480,24], "src": [0,0], "f": 0, "t": 0, "d": [63], "a": 1 }, + { "px": [504,24], "src": [24,0], "f": 0, "t": 1, "d": [64], "a": 1 }, + { "px": [528,24], "src": [48,0], "f": 0, "t": 2, "d": [65], "a": 1 }, + { "px": [552,24], "src": [72,0], "f": 0, "t": 3, "d": [66], "a": 1 }, + { "px": [576,24], "src": [0,0], "f": 0, "t": 0, "d": [67], "a": 1 }, + { "px": [600,24], "src": [24,0], "f": 0, "t": 1, "d": [68], "a": 1 }, + { "px": [624,24], "src": [48,0], "f": 0, "t": 2, "d": [69], "a": 1 }, + { "px": [648,24], "src": [72,0], "f": 0, "t": 3, "d": [70], "a": 1 }, + { "px": [672,24], "src": [0,0], "f": 0, "t": 0, "d": [71], "a": 1 }, + { "px": [696,24], "src": [24,0], "f": 0, "t": 1, "d": [72], "a": 1 }, + { "px": [720,24], "src": [48,0], "f": 0, "t": 2, "d": [73], "a": 1 }, + { "px": [744,24], "src": [72,0], "f": 0, "t": 3, "d": [74], "a": 1 }, + { "px": [768,24], "src": [0,0], "f": 0, "t": 0, "d": [75], "a": 1 }, + { "px": [792,24], "src": [24,0], "f": 0, "t": 1, "d": [76], "a": 1 }, + { "px": [816,24], "src": [48,0], "f": 0, "t": 2, "d": [77], "a": 1 }, + { "px": [840,24], "src": [72,0], "f": 0, "t": 3, "d": [78], "a": 1 }, + { "px": [864,24], "src": [0,0], "f": 0, "t": 0, "d": [79], "a": 1 }, + { "px": [888,24], "src": [24,0], "f": 0, "t": 1, "d": [80], "a": 1 }, + { "px": [912,24], "src": [48,0], "f": 0, "t": 2, "d": [81], "a": 1 }, + { "px": [936,24], "src": [72,0], "f": 0, "t": 3, "d": [82], "a": 1 }, + { "px": [960,24], "src": [0,0], "f": 0, "t": 0, "d": [83], "a": 1 }, + { "px": [984,24], "src": [24,0], "f": 0, "t": 1, "d": [84], "a": 1 }, + { "px": [1008,24], "src": [48,0], "f": 0, "t": 2, "d": [85], "a": 1 }, + { "px": [0,48], "src": [0,0], "f": 0, "t": 0, "d": [86], "a": 1 }, + { "px": [24,48], "src": [24,0], "f": 0, "t": 1, "d": [87], "a": 1 }, + { "px": [48,48], "src": [48,0], "f": 0, "t": 2, "d": [88], "a": 1 }, + { "px": [72,48], "src": [72,0], "f": 0, "t": 3, "d": [89], "a": 1 }, + { "px": [96,48], "src": [0,0], "f": 0, "t": 0, "d": [90], "a": 1 }, + { "px": [120,48], "src": [24,0], "f": 0, "t": 1, "d": [91], "a": 1 }, + { "px": [144,48], "src": [48,0], "f": 0, "t": 2, "d": [92], "a": 1 }, + { "px": [168,48], "src": [72,0], "f": 0, "t": 3, "d": [93], "a": 1 }, + { "px": [192,48], "src": [0,0], "f": 0, "t": 0, "d": [94], "a": 1 }, + { "px": [216,48], "src": [24,0], "f": 0, "t": 1, "d": [95], "a": 1 }, + { "px": [240,48], "src": [48,0], "f": 0, "t": 2, "d": [96], "a": 1 }, + { "px": [264,48], "src": [72,0], "f": 0, "t": 3, "d": [97], "a": 1 }, + { "px": [288,48], "src": [0,0], "f": 0, "t": 0, "d": [98], "a": 1 }, + { "px": [312,48], "src": [24,0], "f": 0, "t": 1, "d": [99], "a": 1 }, + { "px": [336,48], "src": [48,0], "f": 0, "t": 2, "d": [100], "a": 1 }, + { "px": [360,48], "src": [72,0], "f": 0, "t": 3, "d": [101], "a": 1 }, + { "px": [384,48], "src": [0,0], "f": 0, "t": 0, "d": [102], "a": 1 }, + { "px": [408,48], "src": [24,0], "f": 0, "t": 1, "d": [103], "a": 1 }, + { "px": [432,48], "src": [48,0], "f": 0, "t": 2, "d": [104], "a": 1 }, + { "px": [456,48], "src": [72,0], "f": 0, "t": 3, "d": [105], "a": 1 }, + { "px": [480,48], "src": [0,0], "f": 0, "t": 0, "d": [106], "a": 1 }, + { "px": [504,48], "src": [24,0], "f": 0, "t": 1, "d": [107], "a": 1 }, + { "px": [528,48], "src": [48,0], "f": 0, "t": 2, "d": [108], "a": 1 }, + { "px": [552,48], "src": [72,0], "f": 0, "t": 3, "d": [109], "a": 1 }, + { "px": [576,48], "src": [0,0], "f": 0, "t": 0, "d": [110], "a": 1 }, + { "px": [600,48], "src": [24,0], "f": 0, "t": 1, "d": [111], "a": 1 }, + { "px": [624,48], "src": [48,0], "f": 0, "t": 2, "d": [112], "a": 1 }, + { "px": [648,48], "src": [72,0], "f": 0, "t": 3, "d": [113], "a": 1 }, + { "px": [672,48], "src": [0,0], "f": 0, "t": 0, "d": [114], "a": 1 }, + { "px": [696,48], "src": [24,0], "f": 0, "t": 1, "d": [115], "a": 1 }, + { "px": [720,48], "src": [48,0], "f": 0, "t": 2, "d": [116], "a": 1 }, + { "px": [744,48], "src": [72,0], "f": 0, "t": 3, "d": [117], "a": 1 }, + { "px": [768,48], "src": [0,0], "f": 0, "t": 0, "d": [118], "a": 1 }, + { "px": [792,48], "src": [24,0], "f": 0, "t": 1, "d": [119], "a": 1 }, + { "px": [816,48], "src": [48,0], "f": 0, "t": 2, "d": [120], "a": 1 }, + { "px": [840,48], "src": [72,0], "f": 0, "t": 3, "d": [121], "a": 1 }, + { "px": [864,48], "src": [0,0], "f": 0, "t": 0, "d": [122], "a": 1 }, + { "px": [888,48], "src": [24,0], "f": 0, "t": 1, "d": [123], "a": 1 }, + { "px": [912,48], "src": [48,0], "f": 0, "t": 2, "d": [124], "a": 1 }, + { "px": [936,48], "src": [72,0], "f": 0, "t": 3, "d": [125], "a": 1 }, + { "px": [960,48], "src": [0,0], "f": 0, "t": 0, "d": [126], "a": 1 }, + { "px": [984,48], "src": [24,0], "f": 0, "t": 1, "d": [127], "a": 1 }, + { "px": [1008,48], "src": [48,0], "f": 0, "t": 2, "d": [128], "a": 1 }, + { "px": [0,72], "src": [0,0], "f": 0, "t": 0, "d": [129], "a": 1 }, + { "px": [24,72], "src": [24,0], "f": 0, "t": 1, "d": [130], "a": 1 }, + { "px": [48,72], "src": [48,0], "f": 0, "t": 2, "d": [131], "a": 1 }, + { "px": [72,72], "src": [72,0], "f": 0, "t": 3, "d": [132], "a": 1 }, + { "px": [96,72], "src": [0,0], "f": 0, "t": 0, "d": [133], "a": 1 }, + { "px": [120,72], "src": [24,0], "f": 0, "t": 1, "d": [134], "a": 1 }, + { "px": [144,72], "src": [48,0], "f": 0, "t": 2, "d": [135], "a": 1 }, + { "px": [168,72], "src": [72,0], "f": 0, "t": 3, "d": [136], "a": 1 }, + { "px": [192,72], "src": [0,0], "f": 0, "t": 0, "d": [137], "a": 1 }, + { "px": [216,72], "src": [24,0], "f": 0, "t": 1, "d": [138], "a": 1 }, + { "px": [240,72], "src": [48,0], "f": 0, "t": 2, "d": [139], "a": 1 }, + { "px": [264,72], "src": [72,0], "f": 0, "t": 3, "d": [140], "a": 1 }, + { "px": [288,72], "src": [0,0], "f": 0, "t": 0, "d": [141], "a": 1 }, + { "px": [312,72], "src": [24,0], "f": 0, "t": 1, "d": [142], "a": 1 }, + { "px": [336,72], "src": [48,0], "f": 0, "t": 2, "d": [143], "a": 1 }, + { "px": [360,72], "src": [72,0], "f": 0, "t": 3, "d": [144], "a": 1 }, + { "px": [384,72], "src": [0,0], "f": 0, "t": 0, "d": [145], "a": 1 }, + { "px": [408,72], "src": [24,0], "f": 0, "t": 1, "d": [146], "a": 1 }, + { "px": [432,72], "src": [48,0], "f": 0, "t": 2, "d": [147], "a": 1 }, + { "px": [456,72], "src": [72,0], "f": 0, "t": 3, "d": [148], "a": 1 }, + { "px": [480,72], "src": [0,0], "f": 0, "t": 0, "d": [149], "a": 1 }, + { "px": [504,72], "src": [24,0], "f": 0, "t": 1, "d": [150], "a": 1 }, + { "px": [528,72], "src": [48,0], "f": 0, "t": 2, "d": [151], "a": 1 }, + { "px": [552,72], "src": [72,0], "f": 0, "t": 3, "d": [152], "a": 1 }, + { "px": [576,72], "src": [0,0], "f": 0, "t": 0, "d": [153], "a": 1 }, + { "px": [600,72], "src": [24,0], "f": 0, "t": 1, "d": [154], "a": 1 }, + { "px": [624,72], "src": [48,0], "f": 0, "t": 2, "d": [155], "a": 1 }, + { "px": [648,72], "src": [72,0], "f": 0, "t": 3, "d": [156], "a": 1 }, + { "px": [672,72], "src": [0,0], "f": 0, "t": 0, "d": [157], "a": 1 }, + { "px": [696,72], "src": [24,0], "f": 0, "t": 1, "d": [158], "a": 1 }, + { "px": [720,72], "src": [48,0], "f": 0, "t": 2, "d": [159], "a": 1 }, + { "px": [744,72], "src": [72,0], "f": 0, "t": 3, "d": [160], "a": 1 }, + { "px": [768,72], "src": [0,0], "f": 0, "t": 0, "d": [161], "a": 1 }, + { "px": [792,72], "src": [24,0], "f": 0, "t": 1, "d": [162], "a": 1 }, + { "px": [816,72], "src": [48,0], "f": 0, "t": 2, "d": [163], "a": 1 }, + { "px": [840,72], "src": [72,0], "f": 0, "t": 3, "d": [164], "a": 1 }, + { "px": [864,72], "src": [0,0], "f": 0, "t": 0, "d": [165], "a": 1 }, + { "px": [888,72], "src": [24,0], "f": 0, "t": 1, "d": [166], "a": 1 }, + { "px": [912,72], "src": [48,0], "f": 0, "t": 2, "d": [167], "a": 1 }, + { "px": [936,72], "src": [72,0], "f": 0, "t": 3, "d": [168], "a": 1 }, + { "px": [960,72], "src": [0,0], "f": 0, "t": 0, "d": [169], "a": 1 }, + { "px": [984,72], "src": [24,0], "f": 0, "t": 1, "d": [170], "a": 1 }, + { "px": [1008,72], "src": [48,0], "f": 0, "t": 2, "d": [171], "a": 1 }, + { "px": [0,96], "src": [0,0], "f": 0, "t": 0, "d": [172], "a": 1 }, + { "px": [24,96], "src": [24,0], "f": 0, "t": 1, "d": [173], "a": 1 }, + { "px": [48,96], "src": [48,0], "f": 0, "t": 2, "d": [174], "a": 1 }, + { "px": [72,96], "src": [72,0], "f": 0, "t": 3, "d": [175], "a": 1 }, + { "px": [96,96], "src": [0,0], "f": 0, "t": 0, "d": [176], "a": 1 }, + { "px": [120,96], "src": [24,0], "f": 0, "t": 1, "d": [177], "a": 1 }, + { "px": [144,96], "src": [48,0], "f": 0, "t": 2, "d": [178], "a": 1 }, + { "px": [168,96], "src": [72,0], "f": 0, "t": 3, "d": [179], "a": 1 }, + { "px": [192,96], "src": [0,0], "f": 0, "t": 0, "d": [180], "a": 1 }, + { "px": [216,96], "src": [24,0], "f": 0, "t": 1, "d": [181], "a": 1 }, + { "px": [240,96], "src": [48,0], "f": 0, "t": 2, "d": [182], "a": 1 }, + { "px": [264,96], "src": [72,0], "f": 0, "t": 3, "d": [183], "a": 1 }, + { "px": [288,96], "src": [0,0], "f": 0, "t": 0, "d": [184], "a": 1 }, + { "px": [312,96], "src": [24,0], "f": 0, "t": 1, "d": [185], "a": 1 }, + { "px": [336,96], "src": [48,0], "f": 0, "t": 2, "d": [186], "a": 1 }, + { "px": [360,96], "src": [72,0], "f": 0, "t": 3, "d": [187], "a": 1 }, + { "px": [384,96], "src": [0,0], "f": 0, "t": 0, "d": [188], "a": 1 }, + { "px": [408,96], "src": [24,0], "f": 0, "t": 1, "d": [189], "a": 1 }, + { "px": [432,96], "src": [48,0], "f": 0, "t": 2, "d": [190], "a": 1 }, + { "px": [456,96], "src": [72,0], "f": 0, "t": 3, "d": [191], "a": 1 }, + { "px": [480,96], "src": [0,0], "f": 0, "t": 0, "d": [192], "a": 1 }, + { "px": [504,96], "src": [24,0], "f": 0, "t": 1, "d": [193], "a": 1 }, + { "px": [528,96], "src": [48,0], "f": 0, "t": 2, "d": [194], "a": 1 }, + { "px": [552,96], "src": [72,0], "f": 0, "t": 3, "d": [195], "a": 1 }, + { "px": [576,96], "src": [0,0], "f": 0, "t": 0, "d": [196], "a": 1 }, + { "px": [600,96], "src": [24,0], "f": 0, "t": 1, "d": [197], "a": 1 }, + { "px": [624,96], "src": [48,0], "f": 0, "t": 2, "d": [198], "a": 1 }, + { "px": [648,96], "src": [72,0], "f": 0, "t": 3, "d": [199], "a": 1 }, + { "px": [672,96], "src": [0,0], "f": 0, "t": 0, "d": [200], "a": 1 }, + { "px": [696,96], "src": [24,0], "f": 0, "t": 1, "d": [201], "a": 1 }, + { "px": [720,96], "src": [48,0], "f": 0, "t": 2, "d": [202], "a": 1 }, + { "px": [744,96], "src": [72,0], "f": 0, "t": 3, "d": [203], "a": 1 }, + { "px": [768,96], "src": [0,0], "f": 0, "t": 0, "d": [204], "a": 1 }, + { "px": [792,96], "src": [24,0], "f": 0, "t": 1, "d": [205], "a": 1 }, + { "px": [816,96], "src": [48,0], "f": 0, "t": 2, "d": [206], "a": 1 }, + { "px": [840,96], "src": [72,0], "f": 0, "t": 3, "d": [207], "a": 1 }, + { "px": [864,96], "src": [0,0], "f": 0, "t": 0, "d": [208], "a": 1 }, + { "px": [888,96], "src": [24,0], "f": 0, "t": 1, "d": [209], "a": 1 }, + { "px": [912,96], "src": [48,0], "f": 0, "t": 2, "d": [210], "a": 1 }, + { "px": [936,96], "src": [72,0], "f": 0, "t": 3, "d": [211], "a": 1 }, + { "px": [960,96], "src": [0,0], "f": 0, "t": 0, "d": [212], "a": 1 }, + { "px": [984,96], "src": [24,0], "f": 0, "t": 1, "d": [213], "a": 1 }, + { "px": [1008,96], "src": [48,0], "f": 0, "t": 2, "d": [214], "a": 1 }, + { "px": [0,120], "src": [0,0], "f": 0, "t": 0, "d": [215], "a": 1 }, + { "px": [24,120], "src": [24,0], "f": 0, "t": 1, "d": [216], "a": 1 }, + { "px": [48,120], "src": [48,0], "f": 0, "t": 2, "d": [217], "a": 1 }, + { "px": [72,120], "src": [72,0], "f": 0, "t": 3, "d": [218], "a": 1 }, + { "px": [96,120], "src": [0,0], "f": 0, "t": 0, "d": [219], "a": 1 }, + { "px": [120,120], "src": [24,0], "f": 0, "t": 1, "d": [220], "a": 1 }, + { "px": [144,120], "src": [48,0], "f": 0, "t": 2, "d": [221], "a": 1 }, + { "px": [168,120], "src": [72,0], "f": 0, "t": 3, "d": [222], "a": 1 }, + { "px": [192,120], "src": [0,0], "f": 0, "t": 0, "d": [223], "a": 1 }, + { "px": [216,120], "src": [24,0], "f": 0, "t": 1, "d": [224], "a": 1 }, + { "px": [240,120], "src": [48,0], "f": 0, "t": 2, "d": [225], "a": 1 }, + { "px": [264,120], "src": [72,0], "f": 0, "t": 3, "d": [226], "a": 1 }, + { "px": [288,120], "src": [0,0], "f": 0, "t": 0, "d": [227], "a": 1 }, + { "px": [312,120], "src": [24,0], "f": 0, "t": 1, "d": [228], "a": 1 }, + { "px": [336,120], "src": [48,0], "f": 0, "t": 2, "d": [229], "a": 1 }, + { "px": [360,120], "src": [72,0], "f": 0, "t": 3, "d": [230], "a": 1 }, + { "px": [384,120], "src": [0,0], "f": 0, "t": 0, "d": [231], "a": 1 }, + { "px": [408,120], "src": [24,0], "f": 0, "t": 1, "d": [232], "a": 1 }, + { "px": [432,120], "src": [48,0], "f": 0, "t": 2, "d": [233], "a": 1 }, + { "px": [456,120], "src": [72,0], "f": 0, "t": 3, "d": [234], "a": 1 }, + { "px": [480,120], "src": [0,0], "f": 0, "t": 0, "d": [235], "a": 1 }, + { "px": [504,120], "src": [24,0], "f": 0, "t": 1, "d": [236], "a": 1 }, + { "px": [528,120], "src": [48,0], "f": 0, "t": 2, "d": [237], "a": 1 }, + { "px": [552,120], "src": [72,0], "f": 0, "t": 3, "d": [238], "a": 1 }, + { "px": [576,120], "src": [0,0], "f": 0, "t": 0, "d": [239], "a": 1 }, + { "px": [600,120], "src": [24,0], "f": 0, "t": 1, "d": [240], "a": 1 }, + { "px": [624,120], "src": [48,0], "f": 0, "t": 2, "d": [241], "a": 1 }, + { "px": [648,120], "src": [72,0], "f": 0, "t": 3, "d": [242], "a": 1 }, + { "px": [672,120], "src": [0,0], "f": 0, "t": 0, "d": [243], "a": 1 }, + { "px": [696,120], "src": [24,0], "f": 0, "t": 1, "d": [244], "a": 1 }, + { "px": [720,120], "src": [48,0], "f": 0, "t": 2, "d": [245], "a": 1 }, + { "px": [744,120], "src": [72,0], "f": 0, "t": 3, "d": [246], "a": 1 }, + { "px": [768,120], "src": [0,0], "f": 0, "t": 0, "d": [247], "a": 1 }, + { "px": [792,120], "src": [24,0], "f": 0, "t": 1, "d": [248], "a": 1 }, + { "px": [816,120], "src": [48,0], "f": 0, "t": 2, "d": [249], "a": 1 }, + { "px": [840,120], "src": [72,0], "f": 0, "t": 3, "d": [250], "a": 1 }, + { "px": [864,120], "src": [0,0], "f": 0, "t": 0, "d": [251], "a": 1 }, + { "px": [888,120], "src": [24,0], "f": 0, "t": 1, "d": [252], "a": 1 }, + { "px": [912,120], "src": [48,0], "f": 0, "t": 2, "d": [253], "a": 1 }, + { "px": [936,120], "src": [72,0], "f": 0, "t": 3, "d": [254], "a": 1 }, + { "px": [960,120], "src": [0,0], "f": 0, "t": 0, "d": [255], "a": 1 }, + { "px": [984,120], "src": [24,0], "f": 0, "t": 1, "d": [256], "a": 1 }, + { "px": [1008,120], "src": [48,0], "f": 0, "t": 2, "d": [257], "a": 1 }, + { "px": [0,144], "src": [0,0], "f": 0, "t": 0, "d": [258], "a": 1 }, + { "px": [24,144], "src": [24,0], "f": 0, "t": 1, "d": [259], "a": 1 }, + { "px": [48,144], "src": [48,0], "f": 0, "t": 2, "d": [260], "a": 1 }, + { "px": [72,144], "src": [72,0], "f": 0, "t": 3, "d": [261], "a": 1 }, + { "px": [96,144], "src": [0,0], "f": 0, "t": 0, "d": [262], "a": 1 }, + { "px": [120,144], "src": [24,0], "f": 0, "t": 1, "d": [263], "a": 1 }, + { "px": [144,144], "src": [48,0], "f": 0, "t": 2, "d": [264], "a": 1 }, + { "px": [168,144], "src": [72,0], "f": 0, "t": 3, "d": [265], "a": 1 }, + { "px": [192,144], "src": [0,0], "f": 0, "t": 0, "d": [266], "a": 1 }, + { "px": [216,144], "src": [24,0], "f": 0, "t": 1, "d": [267], "a": 1 }, + { "px": [240,144], "src": [48,0], "f": 0, "t": 2, "d": [268], "a": 1 }, + { "px": [264,144], "src": [72,0], "f": 0, "t": 3, "d": [269], "a": 1 }, + { "px": [288,144], "src": [0,0], "f": 0, "t": 0, "d": [270], "a": 1 }, + { "px": [312,144], "src": [24,0], "f": 0, "t": 1, "d": [271], "a": 1 }, + { "px": [336,144], "src": [48,0], "f": 0, "t": 2, "d": [272], "a": 1 }, + { "px": [360,144], "src": [72,0], "f": 0, "t": 3, "d": [273], "a": 1 }, + { "px": [384,144], "src": [0,0], "f": 0, "t": 0, "d": [274], "a": 1 }, + { "px": [408,144], "src": [24,0], "f": 0, "t": 1, "d": [275], "a": 1 }, + { "px": [432,144], "src": [48,0], "f": 0, "t": 2, "d": [276], "a": 1 }, + { "px": [456,144], "src": [72,0], "f": 0, "t": 3, "d": [277], "a": 1 }, + { "px": [480,144], "src": [0,0], "f": 0, "t": 0, "d": [278], "a": 1 }, + { "px": [504,144], "src": [24,0], "f": 0, "t": 1, "d": [279], "a": 1 }, + { "px": [528,144], "src": [48,0], "f": 0, "t": 2, "d": [280], "a": 1 }, + { "px": [552,144], "src": [72,0], "f": 0, "t": 3, "d": [281], "a": 1 }, + { "px": [576,144], "src": [0,0], "f": 0, "t": 0, "d": [282], "a": 1 }, + { "px": [600,144], "src": [24,0], "f": 0, "t": 1, "d": [283], "a": 1 }, + { "px": [624,144], "src": [48,0], "f": 0, "t": 2, "d": [284], "a": 1 }, + { "px": [648,144], "src": [72,0], "f": 0, "t": 3, "d": [285], "a": 1 }, + { "px": [672,144], "src": [0,0], "f": 0, "t": 0, "d": [286], "a": 1 }, + { "px": [696,144], "src": [24,0], "f": 0, "t": 1, "d": [287], "a": 1 }, + { "px": [720,144], "src": [48,0], "f": 0, "t": 2, "d": [288], "a": 1 }, + { "px": [744,144], "src": [72,0], "f": 0, "t": 3, "d": [289], "a": 1 }, + { "px": [768,144], "src": [0,0], "f": 0, "t": 0, "d": [290], "a": 1 }, + { "px": [792,144], "src": [24,0], "f": 0, "t": 1, "d": [291], "a": 1 }, + { "px": [816,144], "src": [48,0], "f": 0, "t": 2, "d": [292], "a": 1 }, + { "px": [840,144], "src": [72,0], "f": 0, "t": 3, "d": [293], "a": 1 }, + { "px": [864,144], "src": [0,0], "f": 0, "t": 0, "d": [294], "a": 1 }, + { "px": [888,144], "src": [24,0], "f": 0, "t": 1, "d": [295], "a": 1 }, + { "px": [912,144], "src": [48,0], "f": 0, "t": 2, "d": [296], "a": 1 }, + { "px": [936,144], "src": [72,0], "f": 0, "t": 3, "d": [297], "a": 1 }, + { "px": [960,144], "src": [0,0], "f": 0, "t": 0, "d": [298], "a": 1 }, + { "px": [984,144], "src": [24,0], "f": 0, "t": 1, "d": [299], "a": 1 }, + { "px": [1008,144], "src": [48,0], "f": 0, "t": 2, "d": [300], "a": 1 }, + { "px": [0,168], "src": [0,0], "f": 0, "t": 0, "d": [301], "a": 1 }, + { "px": [24,168], "src": [24,0], "f": 0, "t": 1, "d": [302], "a": 1 }, + { "px": [48,168], "src": [48,0], "f": 0, "t": 2, "d": [303], "a": 1 }, + { "px": [72,168], "src": [72,0], "f": 0, "t": 3, "d": [304], "a": 1 }, + { "px": [96,168], "src": [0,0], "f": 0, "t": 0, "d": [305], "a": 1 }, + { "px": [120,168], "src": [24,0], "f": 0, "t": 1, "d": [306], "a": 1 }, + { "px": [144,168], "src": [48,0], "f": 0, "t": 2, "d": [307], "a": 1 }, + { "px": [168,168], "src": [72,0], "f": 0, "t": 3, "d": [308], "a": 1 }, + { "px": [192,168], "src": [0,0], "f": 0, "t": 0, "d": [309], "a": 1 }, + { "px": [216,168], "src": [24,0], "f": 0, "t": 1, "d": [310], "a": 1 }, + { "px": [240,168], "src": [48,0], "f": 0, "t": 2, "d": [311], "a": 1 }, + { "px": [264,168], "src": [72,0], "f": 0, "t": 3, "d": [312], "a": 1 }, + { "px": [288,168], "src": [0,0], "f": 0, "t": 0, "d": [313], "a": 1 }, + { "px": [312,168], "src": [24,0], "f": 0, "t": 1, "d": [314], "a": 1 }, + { "px": [336,168], "src": [48,0], "f": 0, "t": 2, "d": [315], "a": 1 }, + { "px": [360,168], "src": [72,0], "f": 0, "t": 3, "d": [316], "a": 1 }, + { "px": [384,168], "src": [0,0], "f": 0, "t": 0, "d": [317], "a": 1 }, + { "px": [408,168], "src": [24,0], "f": 0, "t": 1, "d": [318], "a": 1 }, + { "px": [432,168], "src": [48,0], "f": 0, "t": 2, "d": [319], "a": 1 }, + { "px": [456,168], "src": [72,0], "f": 0, "t": 3, "d": [320], "a": 1 }, + { "px": [480,168], "src": [0,0], "f": 0, "t": 0, "d": [321], "a": 1 }, + { "px": [504,168], "src": [24,0], "f": 0, "t": 1, "d": [322], "a": 1 }, + { "px": [528,168], "src": [48,0], "f": 0, "t": 2, "d": [323], "a": 1 }, + { "px": [552,168], "src": [72,0], "f": 0, "t": 3, "d": [324], "a": 1 }, + { "px": [576,168], "src": [0,0], "f": 0, "t": 0, "d": [325], "a": 1 }, + { "px": [600,168], "src": [24,0], "f": 0, "t": 1, "d": [326], "a": 1 }, + { "px": [624,168], "src": [48,0], "f": 0, "t": 2, "d": [327], "a": 1 }, + { "px": [648,168], "src": [72,0], "f": 0, "t": 3, "d": [328], "a": 1 }, + { "px": [672,168], "src": [0,0], "f": 0, "t": 0, "d": [329], "a": 1 }, + { "px": [696,168], "src": [24,0], "f": 0, "t": 1, "d": [330], "a": 1 }, + { "px": [720,168], "src": [48,0], "f": 0, "t": 2, "d": [331], "a": 1 }, + { "px": [744,168], "src": [72,0], "f": 0, "t": 3, "d": [332], "a": 1 }, + { "px": [768,168], "src": [0,0], "f": 0, "t": 0, "d": [333], "a": 1 }, + { "px": [792,168], "src": [24,0], "f": 0, "t": 1, "d": [334], "a": 1 }, + { "px": [816,168], "src": [48,0], "f": 0, "t": 2, "d": [335], "a": 1 }, + { "px": [840,168], "src": [72,0], "f": 0, "t": 3, "d": [336], "a": 1 }, + { "px": [864,168], "src": [0,0], "f": 0, "t": 0, "d": [337], "a": 1 }, + { "px": [888,168], "src": [24,0], "f": 0, "t": 1, "d": [338], "a": 1 }, + { "px": [912,168], "src": [48,0], "f": 0, "t": 2, "d": [339], "a": 1 }, + { "px": [936,168], "src": [72,0], "f": 0, "t": 3, "d": [340], "a": 1 }, + { "px": [960,168], "src": [0,0], "f": 0, "t": 0, "d": [341], "a": 1 }, + { "px": [984,168], "src": [24,0], "f": 0, "t": 1, "d": [342], "a": 1 }, + { "px": [1008,168], "src": [48,0], "f": 0, "t": 2, "d": [343], "a": 1 }, + { "px": [0,192], "src": [0,0], "f": 0, "t": 0, "d": [344], "a": 1 }, + { "px": [24,192], "src": [24,0], "f": 0, "t": 1, "d": [345], "a": 1 }, + { "px": [48,192], "src": [48,0], "f": 0, "t": 2, "d": [346], "a": 1 }, + { "px": [72,192], "src": [72,0], "f": 0, "t": 3, "d": [347], "a": 1 }, + { "px": [96,192], "src": [0,0], "f": 0, "t": 0, "d": [348], "a": 1 }, + { "px": [120,192], "src": [24,0], "f": 0, "t": 1, "d": [349], "a": 1 }, + { "px": [144,192], "src": [48,0], "f": 0, "t": 2, "d": [350], "a": 1 }, + { "px": [168,192], "src": [72,0], "f": 0, "t": 3, "d": [351], "a": 1 }, + { "px": [192,192], "src": [0,0], "f": 0, "t": 0, "d": [352], "a": 1 }, + { "px": [216,192], "src": [24,0], "f": 0, "t": 1, "d": [353], "a": 1 }, + { "px": [240,192], "src": [48,0], "f": 0, "t": 2, "d": [354], "a": 1 }, + { "px": [264,192], "src": [72,0], "f": 0, "t": 3, "d": [355], "a": 1 }, + { "px": [288,192], "src": [0,0], "f": 0, "t": 0, "d": [356], "a": 1 }, + { "px": [312,192], "src": [24,0], "f": 0, "t": 1, "d": [357], "a": 1 }, + { "px": [336,192], "src": [48,0], "f": 0, "t": 2, "d": [358], "a": 1 }, + { "px": [360,192], "src": [72,0], "f": 0, "t": 3, "d": [359], "a": 1 }, + { "px": [384,192], "src": [0,0], "f": 0, "t": 0, "d": [360], "a": 1 }, + { "px": [408,192], "src": [24,0], "f": 0, "t": 1, "d": [361], "a": 1 }, + { "px": [432,192], "src": [48,0], "f": 0, "t": 2, "d": [362], "a": 1 }, + { "px": [456,192], "src": [72,0], "f": 0, "t": 3, "d": [363], "a": 1 }, + { "px": [480,192], "src": [0,0], "f": 0, "t": 0, "d": [364], "a": 1 }, + { "px": [504,192], "src": [24,0], "f": 0, "t": 1, "d": [365], "a": 1 }, + { "px": [528,192], "src": [48,0], "f": 0, "t": 2, "d": [366], "a": 1 }, + { "px": [552,192], "src": [72,0], "f": 0, "t": 3, "d": [367], "a": 1 }, + { "px": [576,192], "src": [0,0], "f": 0, "t": 0, "d": [368], "a": 1 }, + { "px": [600,192], "src": [24,0], "f": 0, "t": 1, "d": [369], "a": 1 }, + { "px": [624,192], "src": [48,0], "f": 0, "t": 2, "d": [370], "a": 1 }, + { "px": [648,192], "src": [72,0], "f": 0, "t": 3, "d": [371], "a": 1 }, + { "px": [672,192], "src": [0,0], "f": 0, "t": 0, "d": [372], "a": 1 }, + { "px": [696,192], "src": [24,0], "f": 0, "t": 1, "d": [373], "a": 1 }, + { "px": [720,192], "src": [48,0], "f": 0, "t": 2, "d": [374], "a": 1 }, + { "px": [744,192], "src": [72,0], "f": 0, "t": 3, "d": [375], "a": 1 }, + { "px": [768,192], "src": [0,0], "f": 0, "t": 0, "d": [376], "a": 1 }, + { "px": [792,192], "src": [24,0], "f": 0, "t": 1, "d": [377], "a": 1 }, + { "px": [816,192], "src": [48,0], "f": 0, "t": 2, "d": [378], "a": 1 }, + { "px": [840,192], "src": [72,0], "f": 0, "t": 3, "d": [379], "a": 1 }, + { "px": [864,192], "src": [0,0], "f": 0, "t": 0, "d": [380], "a": 1 }, + { "px": [888,192], "src": [24,0], "f": 0, "t": 1, "d": [381], "a": 1 }, + { "px": [912,192], "src": [48,0], "f": 0, "t": 2, "d": [382], "a": 1 }, + { "px": [936,192], "src": [72,0], "f": 0, "t": 3, "d": [383], "a": 1 }, + { "px": [960,192], "src": [0,0], "f": 0, "t": 0, "d": [384], "a": 1 }, + { "px": [984,192], "src": [24,0], "f": 0, "t": 1, "d": [385], "a": 1 }, + { "px": [1008,192], "src": [48,0], "f": 0, "t": 2, "d": [386], "a": 1 }, + { "px": [0,216], "src": [0,0], "f": 0, "t": 0, "d": [387], "a": 1 }, + { "px": [24,216], "src": [24,0], "f": 0, "t": 1, "d": [388], "a": 1 }, + { "px": [48,216], "src": [48,0], "f": 0, "t": 2, "d": [389], "a": 1 }, + { "px": [72,216], "src": [72,0], "f": 0, "t": 3, "d": [390], "a": 1 }, + { "px": [96,216], "src": [0,0], "f": 0, "t": 0, "d": [391], "a": 1 }, + { "px": [120,216], "src": [24,0], "f": 0, "t": 1, "d": [392], "a": 1 }, + { "px": [144,216], "src": [48,0], "f": 0, "t": 2, "d": [393], "a": 1 }, + { "px": [168,216], "src": [72,0], "f": 0, "t": 3, "d": [394], "a": 1 }, + { "px": [192,216], "src": [0,0], "f": 0, "t": 0, "d": [395], "a": 1 }, + { "px": [216,216], "src": [24,0], "f": 0, "t": 1, "d": [396], "a": 1 }, + { "px": [240,216], "src": [48,0], "f": 0, "t": 2, "d": [397], "a": 1 }, + { "px": [264,216], "src": [72,0], "f": 0, "t": 3, "d": [398], "a": 1 }, + { "px": [288,216], "src": [0,0], "f": 0, "t": 0, "d": [399], "a": 1 }, + { "px": [312,216], "src": [24,0], "f": 0, "t": 1, "d": [400], "a": 1 }, + { "px": [336,216], "src": [48,0], "f": 0, "t": 2, "d": [401], "a": 1 }, + { "px": [360,216], "src": [72,0], "f": 0, "t": 3, "d": [402], "a": 1 }, + { "px": [384,216], "src": [0,0], "f": 0, "t": 0, "d": [403], "a": 1 }, + { "px": [408,216], "src": [24,0], "f": 0, "t": 1, "d": [404], "a": 1 }, + { "px": [432,216], "src": [48,0], "f": 0, "t": 2, "d": [405], "a": 1 }, + { "px": [456,216], "src": [72,0], "f": 0, "t": 3, "d": [406], "a": 1 }, + { "px": [480,216], "src": [0,0], "f": 0, "t": 0, "d": [407], "a": 1 }, + { "px": [504,216], "src": [24,0], "f": 0, "t": 1, "d": [408], "a": 1 }, + { "px": [528,216], "src": [48,0], "f": 0, "t": 2, "d": [409], "a": 1 }, + { "px": [552,216], "src": [72,0], "f": 0, "t": 3, "d": [410], "a": 1 }, + { "px": [576,216], "src": [0,0], "f": 0, "t": 0, "d": [411], "a": 1 }, + { "px": [600,216], "src": [24,0], "f": 0, "t": 1, "d": [412], "a": 1 }, + { "px": [624,216], "src": [48,0], "f": 0, "t": 2, "d": [413], "a": 1 }, + { "px": [648,216], "src": [72,0], "f": 0, "t": 3, "d": [414], "a": 1 }, + { "px": [672,216], "src": [0,0], "f": 0, "t": 0, "d": [415], "a": 1 }, + { "px": [696,216], "src": [24,0], "f": 0, "t": 1, "d": [416], "a": 1 }, + { "px": [720,216], "src": [48,0], "f": 0, "t": 2, "d": [417], "a": 1 }, + { "px": [744,216], "src": [72,0], "f": 0, "t": 3, "d": [418], "a": 1 }, + { "px": [768,216], "src": [0,0], "f": 0, "t": 0, "d": [419], "a": 1 }, + { "px": [792,216], "src": [24,0], "f": 0, "t": 1, "d": [420], "a": 1 }, + { "px": [816,216], "src": [48,0], "f": 0, "t": 2, "d": [421], "a": 1 }, + { "px": [840,216], "src": [72,0], "f": 0, "t": 3, "d": [422], "a": 1 }, + { "px": [864,216], "src": [0,0], "f": 0, "t": 0, "d": [423], "a": 1 }, + { "px": [888,216], "src": [24,0], "f": 0, "t": 1, "d": [424], "a": 1 }, + { "px": [912,216], "src": [48,0], "f": 0, "t": 2, "d": [425], "a": 1 }, + { "px": [936,216], "src": [72,0], "f": 0, "t": 3, "d": [426], "a": 1 }, + { "px": [960,216], "src": [0,0], "f": 0, "t": 0, "d": [427], "a": 1 }, + { "px": [984,216], "src": [24,0], "f": 0, "t": 1, "d": [428], "a": 1 }, + { "px": [1008,216], "src": [48,0], "f": 0, "t": 2, "d": [429], "a": 1 }, + { "px": [0,240], "src": [0,0], "f": 0, "t": 0, "d": [430], "a": 1 }, + { "px": [24,240], "src": [24,0], "f": 0, "t": 1, "d": [431], "a": 1 }, + { "px": [48,240], "src": [48,0], "f": 0, "t": 2, "d": [432], "a": 1 }, + { "px": [72,240], "src": [72,0], "f": 0, "t": 3, "d": [433], "a": 1 }, + { "px": [96,240], "src": [0,0], "f": 0, "t": 0, "d": [434], "a": 1 }, + { "px": [120,240], "src": [24,0], "f": 0, "t": 1, "d": [435], "a": 1 }, + { "px": [144,240], "src": [48,0], "f": 0, "t": 2, "d": [436], "a": 1 }, + { "px": [168,240], "src": [72,0], "f": 0, "t": 3, "d": [437], "a": 1 }, + { "px": [192,240], "src": [0,0], "f": 0, "t": 0, "d": [438], "a": 1 }, + { "px": [216,240], "src": [24,0], "f": 0, "t": 1, "d": [439], "a": 1 }, + { "px": [240,240], "src": [48,0], "f": 0, "t": 2, "d": [440], "a": 1 }, + { "px": [264,240], "src": [72,0], "f": 0, "t": 3, "d": [441], "a": 1 }, + { "px": [288,240], "src": [0,0], "f": 0, "t": 0, "d": [442], "a": 1 }, + { "px": [312,240], "src": [24,0], "f": 0, "t": 1, "d": [443], "a": 1 }, + { "px": [336,240], "src": [48,0], "f": 0, "t": 2, "d": [444], "a": 1 }, + { "px": [360,240], "src": [72,0], "f": 0, "t": 3, "d": [445], "a": 1 }, + { "px": [384,240], "src": [0,0], "f": 0, "t": 0, "d": [446], "a": 1 }, + { "px": [408,240], "src": [24,0], "f": 0, "t": 1, "d": [447], "a": 1 }, + { "px": [432,240], "src": [48,0], "f": 0, "t": 2, "d": [448], "a": 1 }, + { "px": [456,240], "src": [72,0], "f": 0, "t": 3, "d": [449], "a": 1 }, + { "px": [480,240], "src": [0,0], "f": 0, "t": 0, "d": [450], "a": 1 }, + { "px": [504,240], "src": [24,0], "f": 0, "t": 1, "d": [451], "a": 1 }, + { "px": [528,240], "src": [48,0], "f": 0, "t": 2, "d": [452], "a": 1 }, + { "px": [552,240], "src": [72,0], "f": 0, "t": 3, "d": [453], "a": 1 }, + { "px": [576,240], "src": [0,0], "f": 0, "t": 0, "d": [454], "a": 1 }, + { "px": [600,240], "src": [24,0], "f": 0, "t": 1, "d": [455], "a": 1 }, + { "px": [624,240], "src": [48,0], "f": 0, "t": 2, "d": [456], "a": 1 }, + { "px": [648,240], "src": [72,0], "f": 0, "t": 3, "d": [457], "a": 1 }, + { "px": [672,240], "src": [0,0], "f": 0, "t": 0, "d": [458], "a": 1 }, + { "px": [696,240], "src": [24,0], "f": 0, "t": 1, "d": [459], "a": 1 }, + { "px": [720,240], "src": [48,0], "f": 0, "t": 2, "d": [460], "a": 1 }, + { "px": [744,240], "src": [72,0], "f": 0, "t": 3, "d": [461], "a": 1 }, + { "px": [768,240], "src": [0,0], "f": 0, "t": 0, "d": [462], "a": 1 }, + { "px": [792,240], "src": [24,0], "f": 0, "t": 1, "d": [463], "a": 1 }, + { "px": [816,240], "src": [48,0], "f": 0, "t": 2, "d": [464], "a": 1 }, + { "px": [840,240], "src": [72,0], "f": 0, "t": 3, "d": [465], "a": 1 }, + { "px": [864,240], "src": [0,0], "f": 0, "t": 0, "d": [466], "a": 1 }, + { "px": [888,240], "src": [24,0], "f": 0, "t": 1, "d": [467], "a": 1 }, + { "px": [912,240], "src": [48,0], "f": 0, "t": 2, "d": [468], "a": 1 }, + { "px": [936,240], "src": [72,0], "f": 0, "t": 3, "d": [469], "a": 1 }, + { "px": [960,240], "src": [0,0], "f": 0, "t": 0, "d": [470], "a": 1 }, + { "px": [984,240], "src": [24,0], "f": 0, "t": 1, "d": [471], "a": 1 }, + { "px": [1008,240], "src": [48,0], "f": 0, "t": 2, "d": [472], "a": 1 }, + { "px": [0,264], "src": [0,0], "f": 0, "t": 0, "d": [473], "a": 1 }, + { "px": [24,264], "src": [24,0], "f": 0, "t": 1, "d": [474], "a": 1 }, + { "px": [48,264], "src": [48,0], "f": 0, "t": 2, "d": [475], "a": 1 }, + { "px": [72,264], "src": [72,0], "f": 0, "t": 3, "d": [476], "a": 1 }, + { "px": [96,264], "src": [0,0], "f": 0, "t": 0, "d": [477], "a": 1 }, + { "px": [120,264], "src": [24,0], "f": 0, "t": 1, "d": [478], "a": 1 }, + { "px": [144,264], "src": [48,0], "f": 0, "t": 2, "d": [479], "a": 1 }, + { "px": [168,264], "src": [72,0], "f": 0, "t": 3, "d": [480], "a": 1 }, + { "px": [192,264], "src": [0,0], "f": 0, "t": 0, "d": [481], "a": 1 }, + { "px": [216,264], "src": [24,0], "f": 0, "t": 1, "d": [482], "a": 1 }, + { "px": [240,264], "src": [48,0], "f": 0, "t": 2, "d": [483], "a": 1 }, + { "px": [264,264], "src": [72,0], "f": 0, "t": 3, "d": [484], "a": 1 }, + { "px": [288,264], "src": [0,0], "f": 0, "t": 0, "d": [485], "a": 1 }, + { "px": [312,264], "src": [24,0], "f": 0, "t": 1, "d": [486], "a": 1 }, + { "px": [336,264], "src": [48,0], "f": 0, "t": 2, "d": [487], "a": 1 }, + { "px": [360,264], "src": [72,0], "f": 0, "t": 3, "d": [488], "a": 1 }, + { "px": [384,264], "src": [0,0], "f": 0, "t": 0, "d": [489], "a": 1 }, + { "px": [408,264], "src": [24,0], "f": 0, "t": 1, "d": [490], "a": 1 }, + { "px": [432,264], "src": [48,0], "f": 0, "t": 2, "d": [491], "a": 1 }, + { "px": [456,264], "src": [72,0], "f": 0, "t": 3, "d": [492], "a": 1 }, + { "px": [480,264], "src": [0,0], "f": 0, "t": 0, "d": [493], "a": 1 }, + { "px": [504,264], "src": [24,0], "f": 0, "t": 1, "d": [494], "a": 1 }, + { "px": [528,264], "src": [48,0], "f": 0, "t": 2, "d": [495], "a": 1 }, + { "px": [552,264], "src": [72,0], "f": 0, "t": 3, "d": [496], "a": 1 }, + { "px": [576,264], "src": [0,0], "f": 0, "t": 0, "d": [497], "a": 1 }, + { "px": [600,264], "src": [24,0], "f": 0, "t": 1, "d": [498], "a": 1 }, + { "px": [624,264], "src": [48,0], "f": 0, "t": 2, "d": [499], "a": 1 }, + { "px": [648,264], "src": [72,0], "f": 0, "t": 3, "d": [500], "a": 1 }, + { "px": [672,264], "src": [0,0], "f": 0, "t": 0, "d": [501], "a": 1 }, + { "px": [696,264], "src": [24,0], "f": 0, "t": 1, "d": [502], "a": 1 }, + { "px": [720,264], "src": [48,0], "f": 0, "t": 2, "d": [503], "a": 1 }, + { "px": [744,264], "src": [72,0], "f": 0, "t": 3, "d": [504], "a": 1 }, + { "px": [768,264], "src": [0,0], "f": 0, "t": 0, "d": [505], "a": 1 }, + { "px": [792,264], "src": [24,0], "f": 0, "t": 1, "d": [506], "a": 1 }, + { "px": [816,264], "src": [48,0], "f": 0, "t": 2, "d": [507], "a": 1 }, + { "px": [840,264], "src": [72,0], "f": 0, "t": 3, "d": [508], "a": 1 }, + { "px": [864,264], "src": [0,0], "f": 0, "t": 0, "d": [509], "a": 1 }, + { "px": [888,264], "src": [24,0], "f": 0, "t": 1, "d": [510], "a": 1 }, + { "px": [912,264], "src": [48,0], "f": 0, "t": 2, "d": [511], "a": 1 }, + { "px": [936,264], "src": [72,0], "f": 0, "t": 3, "d": [512], "a": 1 }, + { "px": [960,264], "src": [0,0], "f": 0, "t": 0, "d": [513], "a": 1 }, + { "px": [984,264], "src": [24,0], "f": 0, "t": 1, "d": [514], "a": 1 }, + { "px": [1008,264], "src": [48,0], "f": 0, "t": 2, "d": [515], "a": 1 }, + { "px": [0,288], "src": [0,0], "f": 0, "t": 0, "d": [516], "a": 1 }, + { "px": [24,288], "src": [24,0], "f": 0, "t": 1, "d": [517], "a": 1 }, + { "px": [48,288], "src": [48,0], "f": 0, "t": 2, "d": [518], "a": 1 }, + { "px": [72,288], "src": [72,0], "f": 0, "t": 3, "d": [519], "a": 1 }, + { "px": [96,288], "src": [0,0], "f": 0, "t": 0, "d": [520], "a": 1 }, + { "px": [120,288], "src": [24,0], "f": 0, "t": 1, "d": [521], "a": 1 }, + { "px": [144,288], "src": [48,0], "f": 0, "t": 2, "d": [522], "a": 1 }, + { "px": [168,288], "src": [72,0], "f": 0, "t": 3, "d": [523], "a": 1 }, + { "px": [192,288], "src": [0,0], "f": 0, "t": 0, "d": [524], "a": 1 }, + { "px": [216,288], "src": [24,0], "f": 0, "t": 1, "d": [525], "a": 1 }, + { "px": [240,288], "src": [48,0], "f": 0, "t": 2, "d": [526], "a": 1 }, + { "px": [264,288], "src": [72,0], "f": 0, "t": 3, "d": [527], "a": 1 }, + { "px": [288,288], "src": [0,0], "f": 0, "t": 0, "d": [528], "a": 1 }, + { "px": [312,288], "src": [24,0], "f": 0, "t": 1, "d": [529], "a": 1 }, + { "px": [336,288], "src": [48,0], "f": 0, "t": 2, "d": [530], "a": 1 }, + { "px": [360,288], "src": [72,0], "f": 0, "t": 3, "d": [531], "a": 1 }, + { "px": [384,288], "src": [0,0], "f": 0, "t": 0, "d": [532], "a": 1 }, + { "px": [408,288], "src": [24,0], "f": 0, "t": 1, "d": [533], "a": 1 }, + { "px": [432,288], "src": [48,0], "f": 0, "t": 2, "d": [534], "a": 1 }, + { "px": [456,288], "src": [72,0], "f": 0, "t": 3, "d": [535], "a": 1 }, + { "px": [480,288], "src": [0,0], "f": 0, "t": 0, "d": [536], "a": 1 }, + { "px": [504,288], "src": [24,0], "f": 0, "t": 1, "d": [537], "a": 1 }, + { "px": [528,288], "src": [48,0], "f": 0, "t": 2, "d": [538], "a": 1 }, + { "px": [552,288], "src": [72,0], "f": 0, "t": 3, "d": [539], "a": 1 }, + { "px": [576,288], "src": [0,0], "f": 0, "t": 0, "d": [540], "a": 1 }, + { "px": [600,288], "src": [24,0], "f": 0, "t": 1, "d": [541], "a": 1 }, + { "px": [624,288], "src": [48,0], "f": 0, "t": 2, "d": [542], "a": 1 }, + { "px": [648,288], "src": [72,0], "f": 0, "t": 3, "d": [543], "a": 1 }, + { "px": [672,288], "src": [0,0], "f": 0, "t": 0, "d": [544], "a": 1 }, + { "px": [696,288], "src": [24,0], "f": 0, "t": 1, "d": [545], "a": 1 }, + { "px": [720,288], "src": [48,0], "f": 0, "t": 2, "d": [546], "a": 1 }, + { "px": [744,288], "src": [72,0], "f": 0, "t": 3, "d": [547], "a": 1 }, + { "px": [768,288], "src": [0,0], "f": 0, "t": 0, "d": [548], "a": 1 }, + { "px": [792,288], "src": [24,0], "f": 0, "t": 1, "d": [549], "a": 1 }, + { "px": [816,288], "src": [48,0], "f": 0, "t": 2, "d": [550], "a": 1 }, + { "px": [840,288], "src": [72,0], "f": 0, "t": 3, "d": [551], "a": 1 }, + { "px": [864,288], "src": [0,0], "f": 0, "t": 0, "d": [552], "a": 1 }, + { "px": [888,288], "src": [24,0], "f": 0, "t": 1, "d": [553], "a": 1 }, + { "px": [912,288], "src": [48,0], "f": 0, "t": 2, "d": [554], "a": 1 }, + { "px": [936,288], "src": [72,0], "f": 0, "t": 3, "d": [555], "a": 1 }, + { "px": [960,288], "src": [0,0], "f": 0, "t": 0, "d": [556], "a": 1 }, + { "px": [984,288], "src": [24,0], "f": 0, "t": 1, "d": [557], "a": 1 }, + { "px": [1008,288], "src": [48,0], "f": 0, "t": 2, "d": [558], "a": 1 }, + { "px": [0,312], "src": [0,0], "f": 0, "t": 0, "d": [559], "a": 1 }, + { "px": [24,312], "src": [24,0], "f": 0, "t": 1, "d": [560], "a": 1 }, + { "px": [48,312], "src": [48,0], "f": 0, "t": 2, "d": [561], "a": 1 }, + { "px": [72,312], "src": [72,0], "f": 0, "t": 3, "d": [562], "a": 1 }, + { "px": [96,312], "src": [0,0], "f": 0, "t": 0, "d": [563], "a": 1 }, + { "px": [120,312], "src": [24,0], "f": 0, "t": 1, "d": [564], "a": 1 }, + { "px": [144,312], "src": [48,0], "f": 0, "t": 2, "d": [565], "a": 1 }, + { "px": [168,312], "src": [72,0], "f": 0, "t": 3, "d": [566], "a": 1 }, + { "px": [192,312], "src": [0,0], "f": 0, "t": 0, "d": [567], "a": 1 }, + { "px": [216,312], "src": [24,0], "f": 0, "t": 1, "d": [568], "a": 1 }, + { "px": [240,312], "src": [48,0], "f": 0, "t": 2, "d": [569], "a": 1 }, + { "px": [264,312], "src": [72,0], "f": 0, "t": 3, "d": [570], "a": 1 }, + { "px": [288,312], "src": [0,0], "f": 0, "t": 0, "d": [571], "a": 1 }, + { "px": [312,312], "src": [24,0], "f": 0, "t": 1, "d": [572], "a": 1 }, + { "px": [336,312], "src": [48,0], "f": 0, "t": 2, "d": [573], "a": 1 }, + { "px": [360,312], "src": [72,0], "f": 0, "t": 3, "d": [574], "a": 1 }, + { "px": [384,312], "src": [0,0], "f": 0, "t": 0, "d": [575], "a": 1 }, + { "px": [408,312], "src": [24,0], "f": 0, "t": 1, "d": [576], "a": 1 }, + { "px": [432,312], "src": [48,0], "f": 0, "t": 2, "d": [577], "a": 1 }, + { "px": [456,312], "src": [72,0], "f": 0, "t": 3, "d": [578], "a": 1 }, + { "px": [480,312], "src": [0,0], "f": 0, "t": 0, "d": [579], "a": 1 }, + { "px": [504,312], "src": [24,0], "f": 0, "t": 1, "d": [580], "a": 1 }, + { "px": [528,312], "src": [48,0], "f": 0, "t": 2, "d": [581], "a": 1 }, + { "px": [552,312], "src": [72,0], "f": 0, "t": 3, "d": [582], "a": 1 }, + { "px": [576,312], "src": [0,0], "f": 0, "t": 0, "d": [583], "a": 1 }, + { "px": [600,312], "src": [24,0], "f": 0, "t": 1, "d": [584], "a": 1 }, + { "px": [624,312], "src": [48,0], "f": 0, "t": 2, "d": [585], "a": 1 }, + { "px": [648,312], "src": [72,0], "f": 0, "t": 3, "d": [586], "a": 1 }, + { "px": [672,312], "src": [0,0], "f": 0, "t": 0, "d": [587], "a": 1 }, + { "px": [696,312], "src": [24,0], "f": 0, "t": 1, "d": [588], "a": 1 }, + { "px": [720,312], "src": [48,0], "f": 0, "t": 2, "d": [589], "a": 1 }, + { "px": [744,312], "src": [72,0], "f": 0, "t": 3, "d": [590], "a": 1 }, + { "px": [768,312], "src": [0,0], "f": 0, "t": 0, "d": [591], "a": 1 }, + { "px": [792,312], "src": [24,0], "f": 0, "t": 1, "d": [592], "a": 1 }, + { "px": [816,312], "src": [48,0], "f": 0, "t": 2, "d": [593], "a": 1 }, + { "px": [840,312], "src": [72,0], "f": 0, "t": 3, "d": [594], "a": 1 }, + { "px": [864,312], "src": [0,0], "f": 0, "t": 0, "d": [595], "a": 1 }, + { "px": [888,312], "src": [24,0], "f": 0, "t": 1, "d": [596], "a": 1 }, + { "px": [912,312], "src": [48,0], "f": 0, "t": 2, "d": [597], "a": 1 }, + { "px": [936,312], "src": [72,0], "f": 0, "t": 3, "d": [598], "a": 1 }, + { "px": [960,312], "src": [0,0], "f": 0, "t": 0, "d": [599], "a": 1 }, + { "px": [984,312], "src": [24,0], "f": 0, "t": 1, "d": [600], "a": 1 }, + { "px": [1008,312], "src": [48,0], "f": 0, "t": 2, "d": [601], "a": 1 }, + { "px": [0,336], "src": [0,0], "f": 0, "t": 0, "d": [602], "a": 1 }, + { "px": [24,336], "src": [0,0], "f": 0, "t": 0, "d": [603], "a": 1 }, + { "px": [48,336], "src": [0,0], "f": 0, "t": 0, "d": [604], "a": 1 }, + { "px": [72,336], "src": [0,0], "f": 0, "t": 0, "d": [605], "a": 1 }, + { "px": [96,336], "src": [0,0], "f": 0, "t": 0, "d": [606], "a": 1 }, + { "px": [120,336], "src": [0,0], "f": 0, "t": 0, "d": [607], "a": 1 }, + { "px": [144,336], "src": [0,0], "f": 0, "t": 0, "d": [608], "a": 1 }, + { "px": [168,336], "src": [0,0], "f": 0, "t": 0, "d": [609], "a": 1 }, + { "px": [192,336], "src": [0,0], "f": 0, "t": 0, "d": [610], "a": 1 }, + { "px": [216,336], "src": [0,0], "f": 0, "t": 0, "d": [611], "a": 1 }, + { "px": [240,336], "src": [0,0], "f": 0, "t": 0, "d": [612], "a": 1 }, + { "px": [264,336], "src": [72,0], "f": 0, "t": 3, "d": [613], "a": 1 }, + { "px": [288,336], "src": [0,0], "f": 0, "t": 0, "d": [614], "a": 1 }, + { "px": [312,336], "src": [24,0], "f": 0, "t": 1, "d": [615], "a": 1 }, + { "px": [336,336], "src": [48,0], "f": 0, "t": 2, "d": [616], "a": 1 }, + { "px": [360,336], "src": [72,0], "f": 0, "t": 3, "d": [617], "a": 1 }, + { "px": [384,336], "src": [0,0], "f": 0, "t": 0, "d": [618], "a": 1 }, + { "px": [408,336], "src": [24,0], "f": 0, "t": 1, "d": [619], "a": 1 }, + { "px": [432,336], "src": [48,0], "f": 0, "t": 2, "d": [620], "a": 1 }, + { "px": [456,336], "src": [72,0], "f": 0, "t": 3, "d": [621], "a": 1 }, + { "px": [480,336], "src": [0,0], "f": 0, "t": 0, "d": [622], "a": 1 }, + { "px": [504,336], "src": [24,0], "f": 0, "t": 1, "d": [623], "a": 1 }, + { "px": [528,336], "src": [48,0], "f": 0, "t": 2, "d": [624], "a": 1 }, + { "px": [552,336], "src": [72,0], "f": 0, "t": 3, "d": [625], "a": 1 }, + { "px": [576,336], "src": [0,0], "f": 0, "t": 0, "d": [626], "a": 1 }, + { "px": [600,336], "src": [24,0], "f": 0, "t": 1, "d": [627], "a": 1 }, + { "px": [624,336], "src": [48,0], "f": 0, "t": 2, "d": [628], "a": 1 }, + { "px": [648,336], "src": [72,0], "f": 0, "t": 3, "d": [629], "a": 1 }, + { "px": [672,336], "src": [0,0], "f": 0, "t": 0, "d": [630], "a": 1 }, + { "px": [696,336], "src": [24,0], "f": 0, "t": 1, "d": [631], "a": 1 }, + { "px": [720,336], "src": [48,0], "f": 0, "t": 2, "d": [632], "a": 1 }, + { "px": [744,336], "src": [72,0], "f": 0, "t": 3, "d": [633], "a": 1 }, + { "px": [768,336], "src": [0,0], "f": 0, "t": 0, "d": [634], "a": 1 }, + { "px": [792,336], "src": [24,0], "f": 0, "t": 1, "d": [635], "a": 1 }, + { "px": [816,336], "src": [48,0], "f": 0, "t": 2, "d": [636], "a": 1 }, + { "px": [840,336], "src": [72,0], "f": 0, "t": 3, "d": [637], "a": 1 }, + { "px": [864,336], "src": [0,0], "f": 0, "t": 0, "d": [638], "a": 1 }, + { "px": [888,336], "src": [24,0], "f": 0, "t": 1, "d": [639], "a": 1 }, + { "px": [912,336], "src": [48,0], "f": 0, "t": 2, "d": [640], "a": 1 }, + { "px": [936,336], "src": [72,0], "f": 0, "t": 3, "d": [641], "a": 1 }, + { "px": [960,336], "src": [0,0], "f": 0, "t": 0, "d": [642], "a": 1 }, + { "px": [984,336], "src": [24,0], "f": 0, "t": 1, "d": [643], "a": 1 }, + { "px": [1008,336], "src": [48,0], "f": 0, "t": 2, "d": [644], "a": 1 }, + { "px": [0,360], "src": [0,0], "f": 0, "t": 0, "d": [645], "a": 1 }, + { "px": [24,360], "src": [0,0], "f": 0, "t": 0, "d": [646], "a": 1 }, + { "px": [48,360], "src": [0,0], "f": 0, "t": 0, "d": [647], "a": 1 }, + { "px": [72,360], "src": [0,0], "f": 0, "t": 0, "d": [648], "a": 1 }, + { "px": [96,360], "src": [0,0], "f": 0, "t": 0, "d": [649], "a": 1 }, + { "px": [120,360], "src": [0,0], "f": 0, "t": 0, "d": [650], "a": 1 }, + { "px": [144,360], "src": [0,0], "f": 0, "t": 0, "d": [651], "a": 1 }, + { "px": [168,360], "src": [0,0], "f": 0, "t": 0, "d": [652], "a": 1 }, + { "px": [192,360], "src": [0,0], "f": 0, "t": 0, "d": [653], "a": 1 }, + { "px": [216,360], "src": [0,0], "f": 0, "t": 0, "d": [654], "a": 1 }, + { "px": [240,360], "src": [0,0], "f": 0, "t": 0, "d": [655], "a": 1 }, + { "px": [264,360], "src": [0,0], "f": 0, "t": 0, "d": [656], "a": 1 }, + { "px": [288,360], "src": [0,0], "f": 0, "t": 0, "d": [657], "a": 1 }, + { "px": [312,360], "src": [0,0], "f": 0, "t": 0, "d": [658], "a": 1 }, + { "px": [336,360], "src": [0,0], "f": 0, "t": 0, "d": [659], "a": 1 }, + { "px": [360,360], "src": [0,0], "f": 0, "t": 0, "d": [660], "a": 1 }, + { "px": [384,360], "src": [0,0], "f": 0, "t": 0, "d": [661], "a": 1 }, + { "px": [408,360], "src": [0,0], "f": 0, "t": 0, "d": [662], "a": 1 }, + { "px": [432,360], "src": [0,0], "f": 0, "t": 0, "d": [663], "a": 1 }, + { "px": [456,360], "src": [0,0], "f": 0, "t": 0, "d": [664], "a": 1 }, + { "px": [480,360], "src": [0,0], "f": 0, "t": 0, "d": [665], "a": 1 }, + { "px": [504,360], "src": [0,0], "f": 0, "t": 0, "d": [666], "a": 1 }, + { "px": [528,360], "src": [0,0], "f": 0, "t": 0, "d": [667], "a": 1 }, + { "px": [552,360], "src": [0,0], "f": 0, "t": 0, "d": [668], "a": 1 }, + { "px": [576,360], "src": [0,0], "f": 0, "t": 0, "d": [669], "a": 1 }, + { "px": [600,360], "src": [0,0], "f": 0, "t": 0, "d": [670], "a": 1 }, + { "px": [624,360], "src": [0,0], "f": 0, "t": 0, "d": [671], "a": 1 }, + { "px": [648,360], "src": [0,0], "f": 0, "t": 0, "d": [672], "a": 1 }, + { "px": [672,360], "src": [0,0], "f": 0, "t": 0, "d": [673], "a": 1 }, + { "px": [696,360], "src": [0,0], "f": 0, "t": 0, "d": [674], "a": 1 }, + { "px": [720,360], "src": [0,0], "f": 0, "t": 0, "d": [675], "a": 1 }, + { "px": [744,360], "src": [0,0], "f": 0, "t": 0, "d": [676], "a": 1 }, + { "px": [768,360], "src": [0,0], "f": 0, "t": 0, "d": [677], "a": 1 }, + { "px": [792,360], "src": [0,0], "f": 0, "t": 0, "d": [678], "a": 1 }, + { "px": [816,360], "src": [0,0], "f": 0, "t": 0, "d": [679], "a": 1 }, + { "px": [840,360], "src": [0,0], "f": 0, "t": 0, "d": [680], "a": 1 }, + { "px": [864,360], "src": [0,0], "f": 0, "t": 0, "d": [681], "a": 1 }, + { "px": [888,360], "src": [0,0], "f": 0, "t": 0, "d": [682], "a": 1 }, + { "px": [912,360], "src": [0,0], "f": 0, "t": 0, "d": [683], "a": 1 }, + { "px": [936,360], "src": [0,0], "f": 0, "t": 0, "d": [684], "a": 1 }, + { "px": [960,360], "src": [0,0], "f": 0, "t": 0, "d": [685], "a": 1 }, + { "px": [984,360], "src": [0,0], "f": 0, "t": 0, "d": [686], "a": 1 }, + { "px": [1008,360], "src": [0,0], "f": 0, "t": 0, "d": [687], "a": 1 }, + { "px": [0,384], "src": [0,0], "f": 0, "t": 0, "d": [688], "a": 1 }, + { "px": [24,384], "src": [24,0], "f": 0, "t": 1, "d": [689], "a": 1 }, + { "px": [48,384], "src": [48,0], "f": 0, "t": 2, "d": [690], "a": 1 }, + { "px": [72,384], "src": [72,0], "f": 0, "t": 3, "d": [691], "a": 1 }, + { "px": [96,384], "src": [0,0], "f": 0, "t": 0, "d": [692], "a": 1 }, + { "px": [120,384], "src": [24,0], "f": 0, "t": 1, "d": [693], "a": 1 }, + { "px": [144,384], "src": [48,0], "f": 0, "t": 2, "d": [694], "a": 1 }, + { "px": [168,384], "src": [72,0], "f": 0, "t": 3, "d": [695], "a": 1 }, + { "px": [192,384], "src": [0,0], "f": 0, "t": 0, "d": [696], "a": 1 }, + { "px": [216,384], "src": [24,0], "f": 0, "t": 1, "d": [697], "a": 1 }, + { "px": [240,384], "src": [48,0], "f": 0, "t": 2, "d": [698], "a": 1 }, + { "px": [264,384], "src": [72,0], "f": 0, "t": 3, "d": [699], "a": 1 }, + { "px": [288,384], "src": [0,0], "f": 0, "t": 0, "d": [700], "a": 1 }, + { "px": [312,384], "src": [24,0], "f": 0, "t": 1, "d": [701], "a": 1 }, + { "px": [336,384], "src": [48,0], "f": 0, "t": 2, "d": [702], "a": 1 }, + { "px": [360,384], "src": [72,0], "f": 0, "t": 3, "d": [703], "a": 1 }, + { "px": [384,384], "src": [0,0], "f": 0, "t": 0, "d": [704], "a": 1 }, + { "px": [408,384], "src": [24,0], "f": 0, "t": 1, "d": [705], "a": 1 }, + { "px": [432,384], "src": [48,0], "f": 0, "t": 2, "d": [706], "a": 1 }, + { "px": [456,384], "src": [72,0], "f": 0, "t": 3, "d": [707], "a": 1 }, + { "px": [480,384], "src": [0,0], "f": 0, "t": 0, "d": [708], "a": 1 }, + { "px": [504,384], "src": [24,0], "f": 0, "t": 1, "d": [709], "a": 1 }, + { "px": [528,384], "src": [48,0], "f": 0, "t": 2, "d": [710], "a": 1 }, + { "px": [552,384], "src": [72,0], "f": 0, "t": 3, "d": [711], "a": 1 }, + { "px": [576,384], "src": [0,0], "f": 0, "t": 0, "d": [712], "a": 1 }, + { "px": [600,384], "src": [24,0], "f": 0, "t": 1, "d": [713], "a": 1 }, + { "px": [624,384], "src": [48,0], "f": 0, "t": 2, "d": [714], "a": 1 }, + { "px": [648,384], "src": [72,0], "f": 0, "t": 3, "d": [715], "a": 1 }, + { "px": [672,384], "src": [0,0], "f": 0, "t": 0, "d": [716], "a": 1 }, + { "px": [696,384], "src": [24,0], "f": 0, "t": 1, "d": [717], "a": 1 }, + { "px": [720,384], "src": [48,0], "f": 0, "t": 2, "d": [718], "a": 1 }, + { "px": [744,384], "src": [72,0], "f": 0, "t": 3, "d": [719], "a": 1 }, + { "px": [768,384], "src": [0,0], "f": 0, "t": 0, "d": [720], "a": 1 }, + { "px": [792,384], "src": [24,0], "f": 0, "t": 1, "d": [721], "a": 1 }, + { "px": [816,384], "src": [48,0], "f": 0, "t": 2, "d": [722], "a": 1 }, + { "px": [840,384], "src": [72,0], "f": 0, "t": 3, "d": [723], "a": 1 }, + { "px": [864,384], "src": [0,0], "f": 0, "t": 0, "d": [724], "a": 1 }, + { "px": [888,384], "src": [24,0], "f": 0, "t": 1, "d": [725], "a": 1 }, + { "px": [912,384], "src": [48,0], "f": 0, "t": 2, "d": [726], "a": 1 }, + { "px": [936,384], "src": [72,0], "f": 0, "t": 3, "d": [727], "a": 1 }, + { "px": [960,384], "src": [0,0], "f": 0, "t": 0, "d": [728], "a": 1 }, + { "px": [984,384], "src": [24,0], "f": 0, "t": 1, "d": [729], "a": 1 }, + { "px": [1008,384], "src": [48,0], "f": 0, "t": 2, "d": [730], "a": 1 }, + { "px": [0,408], "src": [0,0], "f": 0, "t": 0, "d": [731], "a": 1 }, + { "px": [24,408], "src": [24,0], "f": 0, "t": 1, "d": [732], "a": 1 }, + { "px": [48,408], "src": [48,0], "f": 0, "t": 2, "d": [733], "a": 1 }, + { "px": [72,408], "src": [72,0], "f": 0, "t": 3, "d": [734], "a": 1 }, + { "px": [96,408], "src": [0,0], "f": 0, "t": 0, "d": [735], "a": 1 }, + { "px": [120,408], "src": [24,0], "f": 0, "t": 1, "d": [736], "a": 1 }, + { "px": [144,408], "src": [48,0], "f": 0, "t": 2, "d": [737], "a": 1 }, + { "px": [168,408], "src": [72,0], "f": 0, "t": 3, "d": [738], "a": 1 }, + { "px": [192,408], "src": [0,0], "f": 0, "t": 0, "d": [739], "a": 1 }, + { "px": [216,408], "src": [24,0], "f": 0, "t": 1, "d": [740], "a": 1 }, + { "px": [240,408], "src": [48,0], "f": 0, "t": 2, "d": [741], "a": 1 }, + { "px": [264,408], "src": [72,0], "f": 0, "t": 3, "d": [742], "a": 1 }, + { "px": [288,408], "src": [0,0], "f": 0, "t": 0, "d": [743], "a": 1 }, + { "px": [312,408], "src": [24,0], "f": 0, "t": 1, "d": [744], "a": 1 }, + { "px": [336,408], "src": [48,0], "f": 0, "t": 2, "d": [745], "a": 1 }, + { "px": [360,408], "src": [72,0], "f": 0, "t": 3, "d": [746], "a": 1 }, + { "px": [384,408], "src": [0,0], "f": 0, "t": 0, "d": [747], "a": 1 }, + { "px": [408,408], "src": [24,0], "f": 0, "t": 1, "d": [748], "a": 1 }, + { "px": [432,408], "src": [48,0], "f": 0, "t": 2, "d": [749], "a": 1 }, + { "px": [456,408], "src": [72,0], "f": 0, "t": 3, "d": [750], "a": 1 }, + { "px": [480,408], "src": [0,0], "f": 0, "t": 0, "d": [751], "a": 1 }, + { "px": [504,408], "src": [24,0], "f": 0, "t": 1, "d": [752], "a": 1 }, + { "px": [528,408], "src": [48,0], "f": 0, "t": 2, "d": [753], "a": 1 }, + { "px": [552,408], "src": [72,0], "f": 0, "t": 3, "d": [754], "a": 1 }, + { "px": [576,408], "src": [0,0], "f": 0, "t": 0, "d": [755], "a": 1 }, + { "px": [600,408], "src": [24,0], "f": 0, "t": 1, "d": [756], "a": 1 }, + { "px": [624,408], "src": [48,0], "f": 0, "t": 2, "d": [757], "a": 1 }, + { "px": [648,408], "src": [72,0], "f": 0, "t": 3, "d": [758], "a": 1 }, + { "px": [672,408], "src": [0,0], "f": 0, "t": 0, "d": [759], "a": 1 }, + { "px": [696,408], "src": [24,0], "f": 0, "t": 1, "d": [760], "a": 1 }, + { "px": [720,408], "src": [48,0], "f": 0, "t": 2, "d": [761], "a": 1 }, + { "px": [744,408], "src": [72,0], "f": 0, "t": 3, "d": [762], "a": 1 }, + { "px": [768,408], "src": [0,0], "f": 0, "t": 0, "d": [763], "a": 1 }, + { "px": [792,408], "src": [24,0], "f": 0, "t": 1, "d": [764], "a": 1 }, + { "px": [816,408], "src": [48,0], "f": 0, "t": 2, "d": [765], "a": 1 }, + { "px": [840,408], "src": [72,0], "f": 0, "t": 3, "d": [766], "a": 1 }, + { "px": [864,408], "src": [0,0], "f": 0, "t": 0, "d": [767], "a": 1 }, + { "px": [888,408], "src": [24,0], "f": 0, "t": 1, "d": [768], "a": 1 }, + { "px": [912,408], "src": [48,0], "f": 0, "t": 2, "d": [769], "a": 1 }, + { "px": [936,408], "src": [72,0], "f": 0, "t": 3, "d": [770], "a": 1 }, + { "px": [960,408], "src": [0,0], "f": 0, "t": 0, "d": [771], "a": 1 }, + { "px": [984,408], "src": [24,0], "f": 0, "t": 1, "d": [772], "a": 1 }, + { "px": [1008,408], "src": [48,0], "f": 0, "t": 2, "d": [773], "a": 1 }, + { "px": [0,432], "src": [0,0], "f": 0, "t": 0, "d": [774], "a": 1 }, + { "px": [24,432], "src": [24,0], "f": 0, "t": 1, "d": [775], "a": 1 }, + { "px": [48,432], "src": [48,0], "f": 0, "t": 2, "d": [776], "a": 1 }, + { "px": [72,432], "src": [72,0], "f": 0, "t": 3, "d": [777], "a": 1 }, + { "px": [96,432], "src": [0,0], "f": 0, "t": 0, "d": [778], "a": 1 }, + { "px": [120,432], "src": [24,0], "f": 0, "t": 1, "d": [779], "a": 1 }, + { "px": [144,432], "src": [48,0], "f": 0, "t": 2, "d": [780], "a": 1 }, + { "px": [168,432], "src": [72,0], "f": 0, "t": 3, "d": [781], "a": 1 }, + { "px": [192,432], "src": [0,0], "f": 0, "t": 0, "d": [782], "a": 1 }, + { "px": [216,432], "src": [24,0], "f": 0, "t": 1, "d": [783], "a": 1 }, + { "px": [240,432], "src": [48,0], "f": 0, "t": 2, "d": [784], "a": 1 }, + { "px": [264,432], "src": [72,0], "f": 0, "t": 3, "d": [785], "a": 1 }, + { "px": [288,432], "src": [0,0], "f": 0, "t": 0, "d": [786], "a": 1 }, + { "px": [312,432], "src": [24,0], "f": 0, "t": 1, "d": [787], "a": 1 }, + { "px": [336,432], "src": [48,0], "f": 0, "t": 2, "d": [788], "a": 1 }, + { "px": [360,432], "src": [72,0], "f": 0, "t": 3, "d": [789], "a": 1 }, + { "px": [384,432], "src": [0,0], "f": 0, "t": 0, "d": [790], "a": 1 }, + { "px": [408,432], "src": [24,0], "f": 0, "t": 1, "d": [791], "a": 1 }, + { "px": [432,432], "src": [48,0], "f": 0, "t": 2, "d": [792], "a": 1 }, + { "px": [456,432], "src": [72,0], "f": 0, "t": 3, "d": [793], "a": 1 }, + { "px": [480,432], "src": [0,0], "f": 0, "t": 0, "d": [794], "a": 1 }, + { "px": [504,432], "src": [24,0], "f": 0, "t": 1, "d": [795], "a": 1 }, + { "px": [528,432], "src": [48,0], "f": 0, "t": 2, "d": [796], "a": 1 }, + { "px": [552,432], "src": [72,0], "f": 0, "t": 3, "d": [797], "a": 1 }, + { "px": [576,432], "src": [0,0], "f": 0, "t": 0, "d": [798], "a": 1 }, + { "px": [600,432], "src": [24,0], "f": 0, "t": 1, "d": [799], "a": 1 }, + { "px": [624,432], "src": [48,0], "f": 0, "t": 2, "d": [800], "a": 1 }, + { "px": [648,432], "src": [72,0], "f": 0, "t": 3, "d": [801], "a": 1 }, + { "px": [672,432], "src": [0,0], "f": 0, "t": 0, "d": [802], "a": 1 }, + { "px": [696,432], "src": [24,0], "f": 0, "t": 1, "d": [803], "a": 1 }, + { "px": [720,432], "src": [48,0], "f": 0, "t": 2, "d": [804], "a": 1 }, + { "px": [744,432], "src": [72,0], "f": 0, "t": 3, "d": [805], "a": 1 }, + { "px": [768,432], "src": [0,0], "f": 0, "t": 0, "d": [806], "a": 1 }, + { "px": [792,432], "src": [24,0], "f": 0, "t": 1, "d": [807], "a": 1 }, + { "px": [816,432], "src": [48,0], "f": 0, "t": 2, "d": [808], "a": 1 }, + { "px": [840,432], "src": [72,0], "f": 0, "t": 3, "d": [809], "a": 1 }, + { "px": [864,432], "src": [0,0], "f": 0, "t": 0, "d": [810], "a": 1 }, + { "px": [888,432], "src": [24,0], "f": 0, "t": 1, "d": [811], "a": 1 }, + { "px": [912,432], "src": [48,0], "f": 0, "t": 2, "d": [812], "a": 1 }, + { "px": [936,432], "src": [72,0], "f": 0, "t": 3, "d": [813], "a": 1 }, + { "px": [960,432], "src": [0,0], "f": 0, "t": 0, "d": [814], "a": 1 }, + { "px": [984,432], "src": [24,0], "f": 0, "t": 1, "d": [815], "a": 1 }, + { "px": [1008,432], "src": [48,0], "f": 0, "t": 2, "d": [816], "a": 1 }, + { "px": [0,456], "src": [0,0], "f": 0, "t": 0, "d": [817], "a": 1 }, + { "px": [24,456], "src": [24,0], "f": 0, "t": 1, "d": [818], "a": 1 }, + { "px": [48,456], "src": [48,0], "f": 0, "t": 2, "d": [819], "a": 1 }, + { "px": [72,456], "src": [72,0], "f": 0, "t": 3, "d": [820], "a": 1 }, + { "px": [96,456], "src": [0,0], "f": 0, "t": 0, "d": [821], "a": 1 }, + { "px": [120,456], "src": [24,0], "f": 0, "t": 1, "d": [822], "a": 1 }, + { "px": [144,456], "src": [48,0], "f": 0, "t": 2, "d": [823], "a": 1 }, + { "px": [168,456], "src": [72,0], "f": 0, "t": 3, "d": [824], "a": 1 }, + { "px": [192,456], "src": [0,0], "f": 0, "t": 0, "d": [825], "a": 1 }, + { "px": [216,456], "src": [24,0], "f": 0, "t": 1, "d": [826], "a": 1 }, + { "px": [240,456], "src": [48,0], "f": 0, "t": 2, "d": [827], "a": 1 }, + { "px": [264,456], "src": [72,0], "f": 0, "t": 3, "d": [828], "a": 1 }, + { "px": [288,456], "src": [0,0], "f": 0, "t": 0, "d": [829], "a": 1 }, + { "px": [312,456], "src": [24,0], "f": 0, "t": 1, "d": [830], "a": 1 }, + { "px": [336,456], "src": [48,0], "f": 0, "t": 2, "d": [831], "a": 1 }, + { "px": [360,456], "src": [72,0], "f": 0, "t": 3, "d": [832], "a": 1 }, + { "px": [384,456], "src": [0,0], "f": 0, "t": 0, "d": [833], "a": 1 }, + { "px": [408,456], "src": [24,0], "f": 0, "t": 1, "d": [834], "a": 1 }, + { "px": [432,456], "src": [48,0], "f": 0, "t": 2, "d": [835], "a": 1 }, + { "px": [456,456], "src": [72,0], "f": 0, "t": 3, "d": [836], "a": 1 }, + { "px": [480,456], "src": [0,0], "f": 0, "t": 0, "d": [837], "a": 1 }, + { "px": [504,456], "src": [24,0], "f": 0, "t": 1, "d": [838], "a": 1 }, + { "px": [528,456], "src": [48,0], "f": 0, "t": 2, "d": [839], "a": 1 }, + { "px": [552,456], "src": [72,0], "f": 0, "t": 3, "d": [840], "a": 1 }, + { "px": [576,456], "src": [0,0], "f": 0, "t": 0, "d": [841], "a": 1 }, + { "px": [600,456], "src": [24,0], "f": 0, "t": 1, "d": [842], "a": 1 }, + { "px": [624,456], "src": [48,0], "f": 0, "t": 2, "d": [843], "a": 1 }, + { "px": [648,456], "src": [72,0], "f": 0, "t": 3, "d": [844], "a": 1 }, + { "px": [672,456], "src": [0,0], "f": 0, "t": 0, "d": [845], "a": 1 }, + { "px": [696,456], "src": [24,0], "f": 0, "t": 1, "d": [846], "a": 1 }, + { "px": [720,456], "src": [48,0], "f": 0, "t": 2, "d": [847], "a": 1 }, + { "px": [744,456], "src": [72,0], "f": 0, "t": 3, "d": [848], "a": 1 }, + { "px": [768,456], "src": [0,0], "f": 0, "t": 0, "d": [849], "a": 1 }, + { "px": [792,456], "src": [24,0], "f": 0, "t": 1, "d": [850], "a": 1 }, + { "px": [816,456], "src": [48,0], "f": 0, "t": 2, "d": [851], "a": 1 }, + { "px": [840,456], "src": [72,0], "f": 0, "t": 3, "d": [852], "a": 1 }, + { "px": [864,456], "src": [0,0], "f": 0, "t": 0, "d": [853], "a": 1 }, + { "px": [888,456], "src": [24,0], "f": 0, "t": 1, "d": [854], "a": 1 }, + { "px": [912,456], "src": [48,0], "f": 0, "t": 2, "d": [855], "a": 1 }, + { "px": [936,456], "src": [72,0], "f": 0, "t": 3, "d": [856], "a": 1 }, + { "px": [960,456], "src": [0,0], "f": 0, "t": 0, "d": [857], "a": 1 }, + { "px": [984,456], "src": [24,0], "f": 0, "t": 1, "d": [858], "a": 1 }, + { "px": [1008,456], "src": [48,0], "f": 0, "t": 2, "d": [859], "a": 1 }, + { "px": [0,480], "src": [0,0], "f": 0, "t": 0, "d": [860], "a": 1 }, + { "px": [24,480], "src": [24,0], "f": 0, "t": 1, "d": [861], "a": 1 }, + { "px": [48,480], "src": [48,0], "f": 0, "t": 2, "d": [862], "a": 1 }, + { "px": [72,480], "src": [72,0], "f": 0, "t": 3, "d": [863], "a": 1 }, + { "px": [96,480], "src": [0,0], "f": 0, "t": 0, "d": [864], "a": 1 }, + { "px": [120,480], "src": [24,0], "f": 0, "t": 1, "d": [865], "a": 1 }, + { "px": [144,480], "src": [48,0], "f": 0, "t": 2, "d": [866], "a": 1 }, + { "px": [168,480], "src": [72,0], "f": 0, "t": 3, "d": [867], "a": 1 }, + { "px": [192,480], "src": [0,0], "f": 0, "t": 0, "d": [868], "a": 1 }, + { "px": [216,480], "src": [24,0], "f": 0, "t": 1, "d": [869], "a": 1 }, + { "px": [240,480], "src": [48,0], "f": 0, "t": 2, "d": [870], "a": 1 }, + { "px": [264,480], "src": [72,0], "f": 0, "t": 3, "d": [871], "a": 1 }, + { "px": [288,480], "src": [0,0], "f": 0, "t": 0, "d": [872], "a": 1 }, + { "px": [312,480], "src": [24,0], "f": 0, "t": 1, "d": [873], "a": 1 }, + { "px": [336,480], "src": [48,0], "f": 0, "t": 2, "d": [874], "a": 1 }, + { "px": [360,480], "src": [72,0], "f": 0, "t": 3, "d": [875], "a": 1 }, + { "px": [384,480], "src": [0,0], "f": 0, "t": 0, "d": [876], "a": 1 }, + { "px": [408,480], "src": [24,0], "f": 0, "t": 1, "d": [877], "a": 1 }, + { "px": [432,480], "src": [48,0], "f": 0, "t": 2, "d": [878], "a": 1 }, + { "px": [456,480], "src": [72,0], "f": 0, "t": 3, "d": [879], "a": 1 }, + { "px": [480,480], "src": [0,0], "f": 0, "t": 0, "d": [880], "a": 1 }, + { "px": [504,480], "src": [24,0], "f": 0, "t": 1, "d": [881], "a": 1 }, + { "px": [528,480], "src": [48,0], "f": 0, "t": 2, "d": [882], "a": 1 }, + { "px": [552,480], "src": [72,0], "f": 0, "t": 3, "d": [883], "a": 1 }, + { "px": [576,480], "src": [0,0], "f": 0, "t": 0, "d": [884], "a": 1 }, + { "px": [600,480], "src": [24,0], "f": 0, "t": 1, "d": [885], "a": 1 }, + { "px": [624,480], "src": [48,0], "f": 0, "t": 2, "d": [886], "a": 1 }, + { "px": [648,480], "src": [72,0], "f": 0, "t": 3, "d": [887], "a": 1 }, + { "px": [672,480], "src": [0,0], "f": 0, "t": 0, "d": [888], "a": 1 }, + { "px": [696,480], "src": [24,0], "f": 0, "t": 1, "d": [889], "a": 1 }, + { "px": [720,480], "src": [48,0], "f": 0, "t": 2, "d": [890], "a": 1 }, + { "px": [744,480], "src": [72,0], "f": 0, "t": 3, "d": [891], "a": 1 }, + { "px": [768,480], "src": [0,0], "f": 0, "t": 0, "d": [892], "a": 1 }, + { "px": [792,480], "src": [24,0], "f": 0, "t": 1, "d": [893], "a": 1 }, + { "px": [816,480], "src": [48,0], "f": 0, "t": 2, "d": [894], "a": 1 }, + { "px": [840,480], "src": [72,0], "f": 0, "t": 3, "d": [895], "a": 1 }, + { "px": [864,480], "src": [0,0], "f": 0, "t": 0, "d": [896], "a": 1 }, + { "px": [888,480], "src": [24,0], "f": 0, "t": 1, "d": [897], "a": 1 }, + { "px": [912,480], "src": [48,0], "f": 0, "t": 2, "d": [898], "a": 1 }, + { "px": [936,480], "src": [72,0], "f": 0, "t": 3, "d": [899], "a": 1 }, + { "px": [960,480], "src": [0,0], "f": 0, "t": 0, "d": [900], "a": 1 }, + { "px": [984,480], "src": [24,0], "f": 0, "t": 1, "d": [901], "a": 1 }, + { "px": [1008,480], "src": [48,0], "f": 0, "t": 2, "d": [902], "a": 1 }, + { "px": [0,504], "src": [0,0], "f": 0, "t": 0, "d": [903], "a": 1 }, + { "px": [24,504], "src": [24,0], "f": 0, "t": 1, "d": [904], "a": 1 }, + { "px": [48,504], "src": [48,0], "f": 0, "t": 2, "d": [905], "a": 1 }, + { "px": [72,504], "src": [72,0], "f": 0, "t": 3, "d": [906], "a": 1 }, + { "px": [96,504], "src": [0,0], "f": 0, "t": 0, "d": [907], "a": 1 }, + { "px": [120,504], "src": [24,0], "f": 0, "t": 1, "d": [908], "a": 1 }, + { "px": [144,504], "src": [48,0], "f": 0, "t": 2, "d": [909], "a": 1 }, + { "px": [168,504], "src": [72,0], "f": 0, "t": 3, "d": [910], "a": 1 }, + { "px": [192,504], "src": [0,0], "f": 0, "t": 0, "d": [911], "a": 1 }, + { "px": [216,504], "src": [24,0], "f": 0, "t": 1, "d": [912], "a": 1 }, + { "px": [240,504], "src": [48,0], "f": 0, "t": 2, "d": [913], "a": 1 }, + { "px": [264,504], "src": [72,0], "f": 0, "t": 3, "d": [914], "a": 1 }, + { "px": [288,504], "src": [0,0], "f": 0, "t": 0, "d": [915], "a": 1 }, + { "px": [312,504], "src": [24,0], "f": 0, "t": 1, "d": [916], "a": 1 }, + { "px": [336,504], "src": [48,0], "f": 0, "t": 2, "d": [917], "a": 1 }, + { "px": [360,504], "src": [72,0], "f": 0, "t": 3, "d": [918], "a": 1 }, + { "px": [384,504], "src": [0,0], "f": 0, "t": 0, "d": [919], "a": 1 }, + { "px": [408,504], "src": [24,0], "f": 0, "t": 1, "d": [920], "a": 1 }, + { "px": [432,504], "src": [48,0], "f": 0, "t": 2, "d": [921], "a": 1 }, + { "px": [456,504], "src": [72,0], "f": 0, "t": 3, "d": [922], "a": 1 }, + { "px": [480,504], "src": [0,0], "f": 0, "t": 0, "d": [923], "a": 1 }, + { "px": [504,504], "src": [24,0], "f": 0, "t": 1, "d": [924], "a": 1 }, + { "px": [528,504], "src": [48,0], "f": 0, "t": 2, "d": [925], "a": 1 }, + { "px": [552,504], "src": [72,0], "f": 0, "t": 3, "d": [926], "a": 1 }, + { "px": [576,504], "src": [0,0], "f": 0, "t": 0, "d": [927], "a": 1 }, + { "px": [600,504], "src": [24,0], "f": 0, "t": 1, "d": [928], "a": 1 }, + { "px": [624,504], "src": [48,0], "f": 0, "t": 2, "d": [929], "a": 1 }, + { "px": [648,504], "src": [72,0], "f": 0, "t": 3, "d": [930], "a": 1 }, + { "px": [672,504], "src": [0,0], "f": 0, "t": 0, "d": [931], "a": 1 }, + { "px": [696,504], "src": [24,0], "f": 0, "t": 1, "d": [932], "a": 1 }, + { "px": [720,504], "src": [48,0], "f": 0, "t": 2, "d": [933], "a": 1 }, + { "px": [744,504], "src": [72,0], "f": 0, "t": 3, "d": [934], "a": 1 }, + { "px": [768,504], "src": [0,0], "f": 0, "t": 0, "d": [935], "a": 1 }, + { "px": [792,504], "src": [24,0], "f": 0, "t": 1, "d": [936], "a": 1 }, + { "px": [816,504], "src": [48,0], "f": 0, "t": 2, "d": [937], "a": 1 }, + { "px": [840,504], "src": [72,0], "f": 0, "t": 3, "d": [938], "a": 1 }, + { "px": [864,504], "src": [0,0], "f": 0, "t": 0, "d": [939], "a": 1 }, + { "px": [888,504], "src": [24,0], "f": 0, "t": 1, "d": [940], "a": 1 }, + { "px": [912,504], "src": [48,0], "f": 0, "t": 2, "d": [941], "a": 1 }, + { "px": [936,504], "src": [72,0], "f": 0, "t": 3, "d": [942], "a": 1 }, + { "px": [960,504], "src": [0,0], "f": 0, "t": 0, "d": [943], "a": 1 }, + { "px": [984,504], "src": [24,0], "f": 0, "t": 1, "d": [944], "a": 1 }, + { "px": [1008,504], "src": [48,0], "f": 0, "t": 2, "d": [945], "a": 1 }, + { "px": [0,528], "src": [0,0], "f": 0, "t": 0, "d": [946], "a": 1 }, + { "px": [24,528], "src": [24,0], "f": 0, "t": 1, "d": [947], "a": 1 }, + { "px": [48,528], "src": [48,0], "f": 0, "t": 2, "d": [948], "a": 1 }, + { "px": [72,528], "src": [72,0], "f": 0, "t": 3, "d": [949], "a": 1 }, + { "px": [96,528], "src": [0,0], "f": 0, "t": 0, "d": [950], "a": 1 }, + { "px": [120,528], "src": [24,0], "f": 0, "t": 1, "d": [951], "a": 1 }, + { "px": [144,528], "src": [48,0], "f": 0, "t": 2, "d": [952], "a": 1 }, + { "px": [168,528], "src": [72,0], "f": 0, "t": 3, "d": [953], "a": 1 }, + { "px": [192,528], "src": [0,0], "f": 0, "t": 0, "d": [954], "a": 1 }, + { "px": [216,528], "src": [24,0], "f": 0, "t": 1, "d": [955], "a": 1 }, + { "px": [240,528], "src": [48,0], "f": 0, "t": 2, "d": [956], "a": 1 }, + { "px": [264,528], "src": [72,0], "f": 0, "t": 3, "d": [957], "a": 1 }, + { "px": [288,528], "src": [0,0], "f": 0, "t": 0, "d": [958], "a": 1 }, + { "px": [312,528], "src": [24,0], "f": 0, "t": 1, "d": [959], "a": 1 }, + { "px": [336,528], "src": [48,0], "f": 0, "t": 2, "d": [960], "a": 1 }, + { "px": [360,528], "src": [72,0], "f": 0, "t": 3, "d": [961], "a": 1 }, + { "px": [384,528], "src": [0,0], "f": 0, "t": 0, "d": [962], "a": 1 }, + { "px": [408,528], "src": [24,0], "f": 0, "t": 1, "d": [963], "a": 1 }, + { "px": [432,528], "src": [48,0], "f": 0, "t": 2, "d": [964], "a": 1 }, + { "px": [456,528], "src": [72,0], "f": 0, "t": 3, "d": [965], "a": 1 }, + { "px": [480,528], "src": [0,0], "f": 0, "t": 0, "d": [966], "a": 1 }, + { "px": [504,528], "src": [24,0], "f": 0, "t": 1, "d": [967], "a": 1 }, + { "px": [528,528], "src": [48,0], "f": 0, "t": 2, "d": [968], "a": 1 }, + { "px": [552,528], "src": [72,0], "f": 0, "t": 3, "d": [969], "a": 1 }, + { "px": [576,528], "src": [0,0], "f": 0, "t": 0, "d": [970], "a": 1 }, + { "px": [600,528], "src": [24,0], "f": 0, "t": 1, "d": [971], "a": 1 }, + { "px": [624,528], "src": [48,0], "f": 0, "t": 2, "d": [972], "a": 1 }, + { "px": [648,528], "src": [72,0], "f": 0, "t": 3, "d": [973], "a": 1 }, + { "px": [672,528], "src": [0,0], "f": 0, "t": 0, "d": [974], "a": 1 }, + { "px": [696,528], "src": [24,0], "f": 0, "t": 1, "d": [975], "a": 1 }, + { "px": [720,528], "src": [48,0], "f": 0, "t": 2, "d": [976], "a": 1 }, + { "px": [744,528], "src": [72,0], "f": 0, "t": 3, "d": [977], "a": 1 }, + { "px": [768,528], "src": [0,0], "f": 0, "t": 0, "d": [978], "a": 1 }, + { "px": [792,528], "src": [24,0], "f": 0, "t": 1, "d": [979], "a": 1 }, + { "px": [816,528], "src": [48,0], "f": 0, "t": 2, "d": [980], "a": 1 }, + { "px": [840,528], "src": [72,0], "f": 0, "t": 3, "d": [981], "a": 1 }, + { "px": [864,528], "src": [0,0], "f": 0, "t": 0, "d": [982], "a": 1 }, + { "px": [888,528], "src": [24,0], "f": 0, "t": 1, "d": [983], "a": 1 }, + { "px": [912,528], "src": [48,0], "f": 0, "t": 2, "d": [984], "a": 1 }, + { "px": [936,528], "src": [72,0], "f": 0, "t": 3, "d": [985], "a": 1 }, + { "px": [960,528], "src": [0,0], "f": 0, "t": 0, "d": [986], "a": 1 }, + { "px": [984,528], "src": [24,0], "f": 0, "t": 1, "d": [987], "a": 1 }, + { "px": [1008,528], "src": [48,0], "f": 0, "t": 2, "d": [988], "a": 1 }, + { "px": [0,552], "src": [0,0], "f": 0, "t": 0, "d": [989], "a": 1 }, + { "px": [24,552], "src": [24,0], "f": 0, "t": 1, "d": [990], "a": 1 }, + { "px": [48,552], "src": [48,0], "f": 0, "t": 2, "d": [991], "a": 1 }, + { "px": [72,552], "src": [72,0], "f": 0, "t": 3, "d": [992], "a": 1 }, + { "px": [96,552], "src": [0,0], "f": 0, "t": 0, "d": [993], "a": 1 }, + { "px": [120,552], "src": [24,0], "f": 0, "t": 1, "d": [994], "a": 1 }, + { "px": [144,552], "src": [48,0], "f": 0, "t": 2, "d": [995], "a": 1 }, + { "px": [168,552], "src": [72,0], "f": 0, "t": 3, "d": [996], "a": 1 }, + { "px": [192,552], "src": [0,0], "f": 0, "t": 0, "d": [997], "a": 1 }, + { "px": [216,552], "src": [24,0], "f": 0, "t": 1, "d": [998], "a": 1 }, + { "px": [240,552], "src": [48,0], "f": 0, "t": 2, "d": [999], "a": 1 }, + { "px": [264,552], "src": [72,0], "f": 0, "t": 3, "d": [1000], "a": 1 }, + { "px": [288,552], "src": [0,0], "f": 0, "t": 0, "d": [1001], "a": 1 }, + { "px": [312,552], "src": [24,0], "f": 0, "t": 1, "d": [1002], "a": 1 }, + { "px": [336,552], "src": [48,0], "f": 0, "t": 2, "d": [1003], "a": 1 }, + { "px": [360,552], "src": [72,0], "f": 0, "t": 3, "d": [1004], "a": 1 }, + { "px": [384,552], "src": [0,0], "f": 0, "t": 0, "d": [1005], "a": 1 }, + { "px": [408,552], "src": [24,0], "f": 0, "t": 1, "d": [1006], "a": 1 }, + { "px": [432,552], "src": [48,0], "f": 0, "t": 2, "d": [1007], "a": 1 }, + { "px": [456,552], "src": [72,0], "f": 0, "t": 3, "d": [1008], "a": 1 }, + { "px": [480,552], "src": [0,0], "f": 0, "t": 0, "d": [1009], "a": 1 }, + { "px": [504,552], "src": [24,0], "f": 0, "t": 1, "d": [1010], "a": 1 }, + { "px": [528,552], "src": [48,0], "f": 0, "t": 2, "d": [1011], "a": 1 }, + { "px": [552,552], "src": [72,0], "f": 0, "t": 3, "d": [1012], "a": 1 }, + { "px": [576,552], "src": [0,0], "f": 0, "t": 0, "d": [1013], "a": 1 }, + { "px": [600,552], "src": [24,0], "f": 0, "t": 1, "d": [1014], "a": 1 }, + { "px": [624,552], "src": [48,0], "f": 0, "t": 2, "d": [1015], "a": 1 }, + { "px": [648,552], "src": [72,0], "f": 0, "t": 3, "d": [1016], "a": 1 }, + { "px": [672,552], "src": [0,0], "f": 0, "t": 0, "d": [1017], "a": 1 }, + { "px": [696,552], "src": [24,0], "f": 0, "t": 1, "d": [1018], "a": 1 }, + { "px": [720,552], "src": [48,0], "f": 0, "t": 2, "d": [1019], "a": 1 }, + { "px": [744,552], "src": [72,0], "f": 0, "t": 3, "d": [1020], "a": 1 }, + { "px": [768,552], "src": [0,0], "f": 0, "t": 0, "d": [1021], "a": 1 }, + { "px": [792,552], "src": [24,0], "f": 0, "t": 1, "d": [1022], "a": 1 }, + { "px": [816,552], "src": [48,0], "f": 0, "t": 2, "d": [1023], "a": 1 }, + { "px": [840,552], "src": [72,0], "f": 0, "t": 3, "d": [1024], "a": 1 }, + { "px": [864,552], "src": [0,0], "f": 0, "t": 0, "d": [1025], "a": 1 }, + { "px": [888,552], "src": [24,0], "f": 0, "t": 1, "d": [1026], "a": 1 }, + { "px": [912,552], "src": [48,0], "f": 0, "t": 2, "d": [1027], "a": 1 }, + { "px": [936,552], "src": [72,0], "f": 0, "t": 3, "d": [1028], "a": 1 }, + { "px": [960,552], "src": [0,0], "f": 0, "t": 0, "d": [1029], "a": 1 }, + { "px": [984,552], "src": [24,0], "f": 0, "t": 1, "d": [1030], "a": 1 }, + { "px": [1008,552], "src": [48,0], "f": 0, "t": 2, "d": [1031], "a": 1 }, + { "px": [0,576], "src": [0,0], "f": 0, "t": 0, "d": [1032], "a": 1 }, + { "px": [24,576], "src": [24,0], "f": 0, "t": 1, "d": [1033], "a": 1 }, + { "px": [48,576], "src": [48,0], "f": 0, "t": 2, "d": [1034], "a": 1 }, + { "px": [72,576], "src": [72,0], "f": 0, "t": 3, "d": [1035], "a": 1 }, + { "px": [96,576], "src": [0,0], "f": 0, "t": 0, "d": [1036], "a": 1 }, + { "px": [120,576], "src": [24,0], "f": 0, "t": 1, "d": [1037], "a": 1 }, + { "px": [144,576], "src": [48,0], "f": 0, "t": 2, "d": [1038], "a": 1 }, + { "px": [168,576], "src": [72,0], "f": 0, "t": 3, "d": [1039], "a": 1 }, + { "px": [192,576], "src": [0,0], "f": 0, "t": 0, "d": [1040], "a": 1 }, + { "px": [216,576], "src": [24,0], "f": 0, "t": 1, "d": [1041], "a": 1 }, + { "px": [240,576], "src": [48,0], "f": 0, "t": 2, "d": [1042], "a": 1 }, + { "px": [264,576], "src": [72,0], "f": 0, "t": 3, "d": [1043], "a": 1 }, + { "px": [288,576], "src": [0,0], "f": 0, "t": 0, "d": [1044], "a": 1 }, + { "px": [312,576], "src": [24,0], "f": 0, "t": 1, "d": [1045], "a": 1 }, + { "px": [336,576], "src": [48,0], "f": 0, "t": 2, "d": [1046], "a": 1 }, + { "px": [360,576], "src": [72,0], "f": 0, "t": 3, "d": [1047], "a": 1 }, + { "px": [384,576], "src": [0,0], "f": 0, "t": 0, "d": [1048], "a": 1 }, + { "px": [408,576], "src": [24,0], "f": 0, "t": 1, "d": [1049], "a": 1 }, + { "px": [432,576], "src": [48,0], "f": 0, "t": 2, "d": [1050], "a": 1 }, + { "px": [456,576], "src": [72,0], "f": 0, "t": 3, "d": [1051], "a": 1 }, + { "px": [480,576], "src": [0,0], "f": 0, "t": 0, "d": [1052], "a": 1 }, + { "px": [504,576], "src": [24,0], "f": 0, "t": 1, "d": [1053], "a": 1 }, + { "px": [528,576], "src": [48,0], "f": 0, "t": 2, "d": [1054], "a": 1 }, + { "px": [552,576], "src": [72,0], "f": 0, "t": 3, "d": [1055], "a": 1 }, + { "px": [576,576], "src": [0,0], "f": 0, "t": 0, "d": [1056], "a": 1 }, + { "px": [600,576], "src": [24,0], "f": 0, "t": 1, "d": [1057], "a": 1 }, + { "px": [624,576], "src": [48,0], "f": 0, "t": 2, "d": [1058], "a": 1 }, + { "px": [648,576], "src": [72,0], "f": 0, "t": 3, "d": [1059], "a": 1 }, + { "px": [672,576], "src": [0,0], "f": 0, "t": 0, "d": [1060], "a": 1 }, + { "px": [696,576], "src": [24,0], "f": 0, "t": 1, "d": [1061], "a": 1 }, + { "px": [720,576], "src": [48,0], "f": 0, "t": 2, "d": [1062], "a": 1 }, + { "px": [744,576], "src": [72,0], "f": 0, "t": 3, "d": [1063], "a": 1 }, + { "px": [768,576], "src": [0,0], "f": 0, "t": 0, "d": [1064], "a": 1 }, + { "px": [792,576], "src": [24,0], "f": 0, "t": 1, "d": [1065], "a": 1 }, + { "px": [816,576], "src": [48,0], "f": 0, "t": 2, "d": [1066], "a": 1 }, + { "px": [840,576], "src": [72,0], "f": 0, "t": 3, "d": [1067], "a": 1 }, + { "px": [864,576], "src": [0,0], "f": 0, "t": 0, "d": [1068], "a": 1 }, + { "px": [888,576], "src": [24,0], "f": 0, "t": 1, "d": [1069], "a": 1 }, + { "px": [912,576], "src": [48,0], "f": 0, "t": 2, "d": [1070], "a": 1 }, + { "px": [936,576], "src": [72,0], "f": 0, "t": 3, "d": [1071], "a": 1 }, + { "px": [960,576], "src": [0,0], "f": 0, "t": 0, "d": [1072], "a": 1 }, + { "px": [984,576], "src": [24,0], "f": 0, "t": 1, "d": [1073], "a": 1 }, + { "px": [1008,576], "src": [48,0], "f": 0, "t": 2, "d": [1074], "a": 1 }, + { "px": [0,600], "src": [0,0], "f": 0, "t": 0, "d": [1075], "a": 1 }, + { "px": [24,600], "src": [24,0], "f": 0, "t": 1, "d": [1076], "a": 1 }, + { "px": [48,600], "src": [48,0], "f": 0, "t": 2, "d": [1077], "a": 1 }, + { "px": [72,600], "src": [72,0], "f": 0, "t": 3, "d": [1078], "a": 1 }, + { "px": [96,600], "src": [0,0], "f": 0, "t": 0, "d": [1079], "a": 1 }, + { "px": [120,600], "src": [24,0], "f": 0, "t": 1, "d": [1080], "a": 1 }, + { "px": [144,600], "src": [48,0], "f": 0, "t": 2, "d": [1081], "a": 1 }, + { "px": [168,600], "src": [72,0], "f": 0, "t": 3, "d": [1082], "a": 1 }, + { "px": [192,600], "src": [0,0], "f": 0, "t": 0, "d": [1083], "a": 1 }, + { "px": [216,600], "src": [24,0], "f": 0, "t": 1, "d": [1084], "a": 1 }, + { "px": [240,600], "src": [48,0], "f": 0, "t": 2, "d": [1085], "a": 1 }, + { "px": [264,600], "src": [72,0], "f": 0, "t": 3, "d": [1086], "a": 1 }, + { "px": [288,600], "src": [0,0], "f": 0, "t": 0, "d": [1087], "a": 1 }, + { "px": [312,600], "src": [24,0], "f": 0, "t": 1, "d": [1088], "a": 1 }, + { "px": [336,600], "src": [48,0], "f": 0, "t": 2, "d": [1089], "a": 1 }, + { "px": [360,600], "src": [72,0], "f": 0, "t": 3, "d": [1090], "a": 1 }, + { "px": [384,600], "src": [0,0], "f": 0, "t": 0, "d": [1091], "a": 1 }, + { "px": [408,600], "src": [24,0], "f": 0, "t": 1, "d": [1092], "a": 1 }, + { "px": [432,600], "src": [48,0], "f": 0, "t": 2, "d": [1093], "a": 1 }, + { "px": [456,600], "src": [72,0], "f": 0, "t": 3, "d": [1094], "a": 1 }, + { "px": [480,600], "src": [0,0], "f": 0, "t": 0, "d": [1095], "a": 1 }, + { "px": [504,600], "src": [24,0], "f": 0, "t": 1, "d": [1096], "a": 1 }, + { "px": [528,600], "src": [48,0], "f": 0, "t": 2, "d": [1097], "a": 1 }, + { "px": [552,600], "src": [72,0], "f": 0, "t": 3, "d": [1098], "a": 1 }, + { "px": [576,600], "src": [0,0], "f": 0, "t": 0, "d": [1099], "a": 1 }, + { "px": [600,600], "src": [24,0], "f": 0, "t": 1, "d": [1100], "a": 1 }, + { "px": [624,600], "src": [48,0], "f": 0, "t": 2, "d": [1101], "a": 1 }, + { "px": [648,600], "src": [72,0], "f": 0, "t": 3, "d": [1102], "a": 1 }, + { "px": [672,600], "src": [0,0], "f": 0, "t": 0, "d": [1103], "a": 1 }, + { "px": [696,600], "src": [24,0], "f": 0, "t": 1, "d": [1104], "a": 1 }, + { "px": [720,600], "src": [48,0], "f": 0, "t": 2, "d": [1105], "a": 1 }, + { "px": [744,600], "src": [72,0], "f": 0, "t": 3, "d": [1106], "a": 1 }, + { "px": [768,600], "src": [0,0], "f": 0, "t": 0, "d": [1107], "a": 1 }, + { "px": [792,600], "src": [24,0], "f": 0, "t": 1, "d": [1108], "a": 1 }, + { "px": [816,600], "src": [48,0], "f": 0, "t": 2, "d": [1109], "a": 1 }, + { "px": [840,600], "src": [72,0], "f": 0, "t": 3, "d": [1110], "a": 1 }, + { "px": [864,600], "src": [0,0], "f": 0, "t": 0, "d": [1111], "a": 1 }, + { "px": [888,600], "src": [24,0], "f": 0, "t": 1, "d": [1112], "a": 1 }, + { "px": [912,600], "src": [48,0], "f": 0, "t": 2, "d": [1113], "a": 1 }, + { "px": [936,600], "src": [72,0], "f": 0, "t": 3, "d": [1114], "a": 1 }, + { "px": [960,600], "src": [0,0], "f": 0, "t": 0, "d": [1115], "a": 1 }, + { "px": [984,600], "src": [24,0], "f": 0, "t": 1, "d": [1116], "a": 1 }, + { "px": [1008,600], "src": [48,0], "f": 0, "t": 2, "d": [1117], "a": 1 }, + { "px": [0,624], "src": [0,0], "f": 0, "t": 0, "d": [1118], "a": 1 }, + { "px": [24,624], "src": [24,0], "f": 0, "t": 1, "d": [1119], "a": 1 }, + { "px": [48,624], "src": [48,0], "f": 0, "t": 2, "d": [1120], "a": 1 }, + { "px": [72,624], "src": [72,0], "f": 0, "t": 3, "d": [1121], "a": 1 }, + { "px": [96,624], "src": [0,0], "f": 0, "t": 0, "d": [1122], "a": 1 }, + { "px": [120,624], "src": [24,0], "f": 0, "t": 1, "d": [1123], "a": 1 }, + { "px": [144,624], "src": [48,0], "f": 0, "t": 2, "d": [1124], "a": 1 }, + { "px": [168,624], "src": [72,0], "f": 0, "t": 3, "d": [1125], "a": 1 }, + { "px": [192,624], "src": [0,0], "f": 0, "t": 0, "d": [1126], "a": 1 }, + { "px": [216,624], "src": [24,0], "f": 0, "t": 1, "d": [1127], "a": 1 }, + { "px": [240,624], "src": [48,0], "f": 0, "t": 2, "d": [1128], "a": 1 }, + { "px": [264,624], "src": [72,0], "f": 0, "t": 3, "d": [1129], "a": 1 }, + { "px": [288,624], "src": [0,0], "f": 0, "t": 0, "d": [1130], "a": 1 }, + { "px": [312,624], "src": [24,0], "f": 0, "t": 1, "d": [1131], "a": 1 }, + { "px": [336,624], "src": [48,0], "f": 0, "t": 2, "d": [1132], "a": 1 }, + { "px": [360,624], "src": [72,0], "f": 0, "t": 3, "d": [1133], "a": 1 }, + { "px": [384,624], "src": [0,0], "f": 0, "t": 0, "d": [1134], "a": 1 }, + { "px": [408,624], "src": [24,0], "f": 0, "t": 1, "d": [1135], "a": 1 }, + { "px": [432,624], "src": [48,0], "f": 0, "t": 2, "d": [1136], "a": 1 }, + { "px": [456,624], "src": [72,0], "f": 0, "t": 3, "d": [1137], "a": 1 }, + { "px": [480,624], "src": [0,0], "f": 0, "t": 0, "d": [1138], "a": 1 }, + { "px": [504,624], "src": [24,0], "f": 0, "t": 1, "d": [1139], "a": 1 }, + { "px": [528,624], "src": [48,0], "f": 0, "t": 2, "d": [1140], "a": 1 }, + { "px": [552,624], "src": [72,0], "f": 0, "t": 3, "d": [1141], "a": 1 }, + { "px": [576,624], "src": [0,0], "f": 0, "t": 0, "d": [1142], "a": 1 }, + { "px": [600,624], "src": [24,0], "f": 0, "t": 1, "d": [1143], "a": 1 }, + { "px": [624,624], "src": [48,0], "f": 0, "t": 2, "d": [1144], "a": 1 }, + { "px": [648,624], "src": [72,0], "f": 0, "t": 3, "d": [1145], "a": 1 }, + { "px": [672,624], "src": [0,0], "f": 0, "t": 0, "d": [1146], "a": 1 }, + { "px": [696,624], "src": [24,0], "f": 0, "t": 1, "d": [1147], "a": 1 }, + { "px": [720,624], "src": [48,0], "f": 0, "t": 2, "d": [1148], "a": 1 }, + { "px": [744,624], "src": [72,0], "f": 0, "t": 3, "d": [1149], "a": 1 }, + { "px": [768,624], "src": [0,0], "f": 0, "t": 0, "d": [1150], "a": 1 }, + { "px": [792,624], "src": [24,0], "f": 0, "t": 1, "d": [1151], "a": 1 }, + { "px": [816,624], "src": [48,0], "f": 0, "t": 2, "d": [1152], "a": 1 }, + { "px": [840,624], "src": [72,0], "f": 0, "t": 3, "d": [1153], "a": 1 }, + { "px": [864,624], "src": [0,0], "f": 0, "t": 0, "d": [1154], "a": 1 }, + { "px": [888,624], "src": [24,0], "f": 0, "t": 1, "d": [1155], "a": 1 }, + { "px": [912,624], "src": [48,0], "f": 0, "t": 2, "d": [1156], "a": 1 }, + { "px": [936,624], "src": [72,0], "f": 0, "t": 3, "d": [1157], "a": 1 }, + { "px": [960,624], "src": [0,0], "f": 0, "t": 0, "d": [1158], "a": 1 }, + { "px": [984,624], "src": [24,0], "f": 0, "t": 1, "d": [1159], "a": 1 }, + { "px": [1008,624], "src": [48,0], "f": 0, "t": 2, "d": [1160], "a": 1 }, + { "px": [0,648], "src": [0,0], "f": 0, "t": 0, "d": [1161], "a": 1 }, + { "px": [24,648], "src": [24,0], "f": 0, "t": 1, "d": [1162], "a": 1 }, + { "px": [48,648], "src": [48,0], "f": 0, "t": 2, "d": [1163], "a": 1 }, + { "px": [72,648], "src": [72,0], "f": 0, "t": 3, "d": [1164], "a": 1 }, + { "px": [96,648], "src": [0,0], "f": 0, "t": 0, "d": [1165], "a": 1 }, + { "px": [120,648], "src": [24,0], "f": 0, "t": 1, "d": [1166], "a": 1 }, + { "px": [144,648], "src": [48,0], "f": 0, "t": 2, "d": [1167], "a": 1 }, + { "px": [168,648], "src": [72,0], "f": 0, "t": 3, "d": [1168], "a": 1 }, + { "px": [192,648], "src": [0,0], "f": 0, "t": 0, "d": [1169], "a": 1 }, + { "px": [216,648], "src": [24,0], "f": 0, "t": 1, "d": [1170], "a": 1 }, + { "px": [240,648], "src": [48,0], "f": 0, "t": 2, "d": [1171], "a": 1 }, + { "px": [264,648], "src": [72,0], "f": 0, "t": 3, "d": [1172], "a": 1 }, + { "px": [288,648], "src": [0,0], "f": 0, "t": 0, "d": [1173], "a": 1 }, + { "px": [312,648], "src": [24,0], "f": 0, "t": 1, "d": [1174], "a": 1 }, + { "px": [336,648], "src": [48,0], "f": 0, "t": 2, "d": [1175], "a": 1 }, + { "px": [360,648], "src": [72,0], "f": 0, "t": 3, "d": [1176], "a": 1 }, + { "px": [384,648], "src": [0,0], "f": 0, "t": 0, "d": [1177], "a": 1 }, + { "px": [408,648], "src": [24,0], "f": 0, "t": 1, "d": [1178], "a": 1 }, + { "px": [432,648], "src": [48,0], "f": 0, "t": 2, "d": [1179], "a": 1 }, + { "px": [456,648], "src": [72,0], "f": 0, "t": 3, "d": [1180], "a": 1 }, + { "px": [480,648], "src": [0,0], "f": 0, "t": 0, "d": [1181], "a": 1 }, + { "px": [504,648], "src": [24,0], "f": 0, "t": 1, "d": [1182], "a": 1 }, + { "px": [528,648], "src": [48,0], "f": 0, "t": 2, "d": [1183], "a": 1 }, + { "px": [552,648], "src": [72,0], "f": 0, "t": 3, "d": [1184], "a": 1 }, + { "px": [576,648], "src": [0,0], "f": 0, "t": 0, "d": [1185], "a": 1 }, + { "px": [600,648], "src": [24,0], "f": 0, "t": 1, "d": [1186], "a": 1 }, + { "px": [624,648], "src": [48,0], "f": 0, "t": 2, "d": [1187], "a": 1 }, + { "px": [648,648], "src": [72,0], "f": 0, "t": 3, "d": [1188], "a": 1 }, + { "px": [672,648], "src": [0,0], "f": 0, "t": 0, "d": [1189], "a": 1 }, + { "px": [696,648], "src": [24,0], "f": 0, "t": 1, "d": [1190], "a": 1 }, + { "px": [720,648], "src": [48,0], "f": 0, "t": 2, "d": [1191], "a": 1 }, + { "px": [744,648], "src": [72,0], "f": 0, "t": 3, "d": [1192], "a": 1 }, + { "px": [768,648], "src": [0,0], "f": 0, "t": 0, "d": [1193], "a": 1 }, + { "px": [792,648], "src": [24,0], "f": 0, "t": 1, "d": [1194], "a": 1 }, + { "px": [816,648], "src": [48,0], "f": 0, "t": 2, "d": [1195], "a": 1 }, + { "px": [840,648], "src": [72,0], "f": 0, "t": 3, "d": [1196], "a": 1 }, + { "px": [864,648], "src": [0,0], "f": 0, "t": 0, "d": [1197], "a": 1 }, + { "px": [888,648], "src": [24,0], "f": 0, "t": 1, "d": [1198], "a": 1 }, + { "px": [912,648], "src": [48,0], "f": 0, "t": 2, "d": [1199], "a": 1 }, + { "px": [936,648], "src": [72,0], "f": 0, "t": 3, "d": [1200], "a": 1 }, + { "px": [960,648], "src": [0,0], "f": 0, "t": 0, "d": [1201], "a": 1 }, + { "px": [984,648], "src": [24,0], "f": 0, "t": 1, "d": [1202], "a": 1 }, + { "px": [1008,648], "src": [48,0], "f": 0, "t": 2, "d": [1203], "a": 1 }, + { "px": [0,672], "src": [0,0], "f": 0, "t": 0, "d": [1204], "a": 1 }, + { "px": [24,672], "src": [24,0], "f": 0, "t": 1, "d": [1205], "a": 1 }, + { "px": [48,672], "src": [48,0], "f": 0, "t": 2, "d": [1206], "a": 1 }, + { "px": [72,672], "src": [72,0], "f": 0, "t": 3, "d": [1207], "a": 1 }, + { "px": [96,672], "src": [0,0], "f": 0, "t": 0, "d": [1208], "a": 1 }, + { "px": [120,672], "src": [24,0], "f": 0, "t": 1, "d": [1209], "a": 1 }, + { "px": [144,672], "src": [48,0], "f": 0, "t": 2, "d": [1210], "a": 1 }, + { "px": [168,672], "src": [72,0], "f": 0, "t": 3, "d": [1211], "a": 1 }, + { "px": [192,672], "src": [0,0], "f": 0, "t": 0, "d": [1212], "a": 1 }, + { "px": [216,672], "src": [24,0], "f": 0, "t": 1, "d": [1213], "a": 1 }, + { "px": [240,672], "src": [48,0], "f": 0, "t": 2, "d": [1214], "a": 1 }, + { "px": [264,672], "src": [72,0], "f": 0, "t": 3, "d": [1215], "a": 1 }, + { "px": [288,672], "src": [0,0], "f": 0, "t": 0, "d": [1216], "a": 1 }, + { "px": [312,672], "src": [24,0], "f": 0, "t": 1, "d": [1217], "a": 1 }, + { "px": [336,672], "src": [48,0], "f": 0, "t": 2, "d": [1218], "a": 1 }, + { "px": [360,672], "src": [72,0], "f": 0, "t": 3, "d": [1219], "a": 1 }, + { "px": [384,672], "src": [0,0], "f": 0, "t": 0, "d": [1220], "a": 1 }, + { "px": [408,672], "src": [24,0], "f": 0, "t": 1, "d": [1221], "a": 1 }, + { "px": [432,672], "src": [48,0], "f": 0, "t": 2, "d": [1222], "a": 1 }, + { "px": [456,672], "src": [72,0], "f": 0, "t": 3, "d": [1223], "a": 1 }, + { "px": [480,672], "src": [0,0], "f": 0, "t": 0, "d": [1224], "a": 1 }, + { "px": [504,672], "src": [24,0], "f": 0, "t": 1, "d": [1225], "a": 1 }, + { "px": [528,672], "src": [48,0], "f": 0, "t": 2, "d": [1226], "a": 1 }, + { "px": [552,672], "src": [72,0], "f": 0, "t": 3, "d": [1227], "a": 1 }, + { "px": [576,672], "src": [0,0], "f": 0, "t": 0, "d": [1228], "a": 1 }, + { "px": [600,672], "src": [24,0], "f": 0, "t": 1, "d": [1229], "a": 1 }, + { "px": [624,672], "src": [48,0], "f": 0, "t": 2, "d": [1230], "a": 1 }, + { "px": [648,672], "src": [72,0], "f": 0, "t": 3, "d": [1231], "a": 1 }, + { "px": [672,672], "src": [0,0], "f": 0, "t": 0, "d": [1232], "a": 1 }, + { "px": [696,672], "src": [24,0], "f": 0, "t": 1, "d": [1233], "a": 1 }, + { "px": [720,672], "src": [48,0], "f": 0, "t": 2, "d": [1234], "a": 1 }, + { "px": [744,672], "src": [72,0], "f": 0, "t": 3, "d": [1235], "a": 1 }, + { "px": [768,672], "src": [0,0], "f": 0, "t": 0, "d": [1236], "a": 1 }, + { "px": [792,672], "src": [24,0], "f": 0, "t": 1, "d": [1237], "a": 1 }, + { "px": [816,672], "src": [48,0], "f": 0, "t": 2, "d": [1238], "a": 1 }, + { "px": [840,672], "src": [72,0], "f": 0, "t": 3, "d": [1239], "a": 1 }, + { "px": [864,672], "src": [0,0], "f": 0, "t": 0, "d": [1240], "a": 1 }, + { "px": [888,672], "src": [24,0], "f": 0, "t": 1, "d": [1241], "a": 1 }, + { "px": [912,672], "src": [48,0], "f": 0, "t": 2, "d": [1242], "a": 1 }, + { "px": [936,672], "src": [72,0], "f": 0, "t": 3, "d": [1243], "a": 1 }, + { "px": [960,672], "src": [0,0], "f": 0, "t": 0, "d": [1244], "a": 1 }, + { "px": [984,672], "src": [24,0], "f": 0, "t": 1, "d": [1245], "a": 1 }, + { "px": [1008,672], "src": [48,0], "f": 0, "t": 2, "d": [1246], "a": 1 }, + { "px": [0,696], "src": [0,0], "f": 0, "t": 0, "d": [1247], "a": 1 }, + { "px": [24,696], "src": [24,0], "f": 0, "t": 1, "d": [1248], "a": 1 }, + { "px": [48,696], "src": [48,0], "f": 0, "t": 2, "d": [1249], "a": 1 }, + { "px": [72,696], "src": [72,0], "f": 0, "t": 3, "d": [1250], "a": 1 }, + { "px": [96,696], "src": [0,0], "f": 0, "t": 0, "d": [1251], "a": 1 }, + { "px": [120,696], "src": [24,0], "f": 0, "t": 1, "d": [1252], "a": 1 }, + { "px": [144,696], "src": [48,0], "f": 0, "t": 2, "d": [1253], "a": 1 }, + { "px": [168,696], "src": [72,0], "f": 0, "t": 3, "d": [1254], "a": 1 }, + { "px": [192,696], "src": [0,0], "f": 0, "t": 0, "d": [1255], "a": 1 }, + { "px": [216,696], "src": [24,0], "f": 0, "t": 1, "d": [1256], "a": 1 }, + { "px": [240,696], "src": [48,0], "f": 0, "t": 2, "d": [1257], "a": 1 }, + { "px": [264,696], "src": [72,0], "f": 0, "t": 3, "d": [1258], "a": 1 }, + { "px": [288,696], "src": [0,0], "f": 0, "t": 0, "d": [1259], "a": 1 }, + { "px": [312,696], "src": [24,0], "f": 0, "t": 1, "d": [1260], "a": 1 }, + { "px": [336,696], "src": [48,0], "f": 0, "t": 2, "d": [1261], "a": 1 }, + { "px": [360,696], "src": [72,0], "f": 0, "t": 3, "d": [1262], "a": 1 }, + { "px": [384,696], "src": [0,0], "f": 0, "t": 0, "d": [1263], "a": 1 }, + { "px": [408,696], "src": [24,0], "f": 0, "t": 1, "d": [1264], "a": 1 }, + { "px": [432,696], "src": [48,0], "f": 0, "t": 2, "d": [1265], "a": 1 }, + { "px": [456,696], "src": [72,0], "f": 0, "t": 3, "d": [1266], "a": 1 }, + { "px": [480,696], "src": [0,0], "f": 0, "t": 0, "d": [1267], "a": 1 }, + { "px": [504,696], "src": [24,0], "f": 0, "t": 1, "d": [1268], "a": 1 }, + { "px": [528,696], "src": [48,0], "f": 0, "t": 2, "d": [1269], "a": 1 }, + { "px": [552,696], "src": [72,0], "f": 0, "t": 3, "d": [1270], "a": 1 }, + { "px": [576,696], "src": [0,0], "f": 0, "t": 0, "d": [1271], "a": 1 }, + { "px": [600,696], "src": [24,0], "f": 0, "t": 1, "d": [1272], "a": 1 }, + { "px": [624,696], "src": [48,0], "f": 0, "t": 2, "d": [1273], "a": 1 }, + { "px": [648,696], "src": [72,0], "f": 0, "t": 3, "d": [1274], "a": 1 }, + { "px": [672,696], "src": [0,0], "f": 0, "t": 0, "d": [1275], "a": 1 }, + { "px": [696,696], "src": [24,0], "f": 0, "t": 1, "d": [1276], "a": 1 }, + { "px": [720,696], "src": [48,0], "f": 0, "t": 2, "d": [1277], "a": 1 }, + { "px": [744,696], "src": [72,0], "f": 0, "t": 3, "d": [1278], "a": 1 }, + { "px": [768,696], "src": [0,0], "f": 0, "t": 0, "d": [1279], "a": 1 }, + { "px": [792,696], "src": [24,0], "f": 0, "t": 1, "d": [1280], "a": 1 }, + { "px": [816,696], "src": [48,0], "f": 0, "t": 2, "d": [1281], "a": 1 }, + { "px": [840,696], "src": [72,0], "f": 0, "t": 3, "d": [1282], "a": 1 }, + { "px": [864,696], "src": [0,0], "f": 0, "t": 0, "d": [1283], "a": 1 }, + { "px": [888,696], "src": [24,0], "f": 0, "t": 1, "d": [1284], "a": 1 }, + { "px": [912,696], "src": [48,0], "f": 0, "t": 2, "d": [1285], "a": 1 }, + { "px": [936,696], "src": [72,0], "f": 0, "t": 3, "d": [1286], "a": 1 }, + { "px": [960,696], "src": [0,0], "f": 0, "t": 0, "d": [1287], "a": 1 }, + { "px": [984,696], "src": [24,0], "f": 0, "t": 1, "d": [1288], "a": 1 }, + { "px": [1008,696], "src": [48,0], "f": 0, "t": 2, "d": [1289], "a": 1 }, + { "px": [0,720], "src": [0,0], "f": 0, "t": 0, "d": [1290], "a": 1 }, + { "px": [24,720], "src": [24,0], "f": 0, "t": 1, "d": [1291], "a": 1 }, + { "px": [48,720], "src": [48,0], "f": 0, "t": 2, "d": [1292], "a": 1 }, + { "px": [72,720], "src": [72,0], "f": 0, "t": 3, "d": [1293], "a": 1 }, + { "px": [96,720], "src": [0,0], "f": 0, "t": 0, "d": [1294], "a": 1 }, + { "px": [120,720], "src": [24,0], "f": 0, "t": 1, "d": [1295], "a": 1 }, + { "px": [144,720], "src": [48,0], "f": 0, "t": 2, "d": [1296], "a": 1 }, + { "px": [168,720], "src": [72,0], "f": 0, "t": 3, "d": [1297], "a": 1 }, + { "px": [192,720], "src": [0,0], "f": 0, "t": 0, "d": [1298], "a": 1 }, + { "px": [216,720], "src": [24,0], "f": 0, "t": 1, "d": [1299], "a": 1 }, + { "px": [240,720], "src": [48,0], "f": 0, "t": 2, "d": [1300], "a": 1 }, + { "px": [264,720], "src": [72,0], "f": 0, "t": 3, "d": [1301], "a": 1 }, + { "px": [288,720], "src": [0,0], "f": 0, "t": 0, "d": [1302], "a": 1 }, + { "px": [312,720], "src": [24,0], "f": 0, "t": 1, "d": [1303], "a": 1 }, + { "px": [336,720], "src": [48,0], "f": 0, "t": 2, "d": [1304], "a": 1 }, + { "px": [360,720], "src": [72,0], "f": 0, "t": 3, "d": [1305], "a": 1 }, + { "px": [384,720], "src": [0,0], "f": 0, "t": 0, "d": [1306], "a": 1 }, + { "px": [408,720], "src": [24,0], "f": 0, "t": 1, "d": [1307], "a": 1 }, + { "px": [432,720], "src": [48,0], "f": 0, "t": 2, "d": [1308], "a": 1 }, + { "px": [456,720], "src": [72,0], "f": 0, "t": 3, "d": [1309], "a": 1 }, + { "px": [480,720], "src": [0,0], "f": 0, "t": 0, "d": [1310], "a": 1 }, + { "px": [504,720], "src": [24,0], "f": 0, "t": 1, "d": [1311], "a": 1 }, + { "px": [528,720], "src": [48,0], "f": 0, "t": 2, "d": [1312], "a": 1 }, + { "px": [552,720], "src": [72,0], "f": 0, "t": 3, "d": [1313], "a": 1 }, + { "px": [576,720], "src": [0,0], "f": 0, "t": 0, "d": [1314], "a": 1 }, + { "px": [600,720], "src": [24,0], "f": 0, "t": 1, "d": [1315], "a": 1 }, + { "px": [624,720], "src": [48,0], "f": 0, "t": 2, "d": [1316], "a": 1 }, + { "px": [648,720], "src": [72,0], "f": 0, "t": 3, "d": [1317], "a": 1 }, + { "px": [672,720], "src": [0,0], "f": 0, "t": 0, "d": [1318], "a": 1 }, + { "px": [696,720], "src": [24,0], "f": 0, "t": 1, "d": [1319], "a": 1 }, + { "px": [720,720], "src": [48,0], "f": 0, "t": 2, "d": [1320], "a": 1 }, + { "px": [744,720], "src": [72,0], "f": 0, "t": 3, "d": [1321], "a": 1 }, + { "px": [768,720], "src": [0,0], "f": 0, "t": 0, "d": [1322], "a": 1 }, + { "px": [792,720], "src": [24,0], "f": 0, "t": 1, "d": [1323], "a": 1 }, + { "px": [816,720], "src": [48,0], "f": 0, "t": 2, "d": [1324], "a": 1 }, + { "px": [840,720], "src": [72,0], "f": 0, "t": 3, "d": [1325], "a": 1 }, + { "px": [864,720], "src": [0,0], "f": 0, "t": 0, "d": [1326], "a": 1 }, + { "px": [888,720], "src": [24,0], "f": 0, "t": 1, "d": [1327], "a": 1 }, + { "px": [912,720], "src": [48,0], "f": 0, "t": 2, "d": [1328], "a": 1 }, + { "px": [936,720], "src": [72,0], "f": 0, "t": 3, "d": [1329], "a": 1 }, + { "px": [960,720], "src": [0,0], "f": 0, "t": 0, "d": [1330], "a": 1 }, + { "px": [984,720], "src": [24,0], "f": 0, "t": 1, "d": [1331], "a": 1 }, + { "px": [1008,720], "src": [48,0], "f": 0, "t": 2, "d": [1332], "a": 1 }, + { "px": [0,744], "src": [0,0], "f": 0, "t": 0, "d": [1333], "a": 1 }, + { "px": [24,744], "src": [24,0], "f": 0, "t": 1, "d": [1334], "a": 1 }, + { "px": [48,744], "src": [48,0], "f": 0, "t": 2, "d": [1335], "a": 1 }, + { "px": [72,744], "src": [72,0], "f": 0, "t": 3, "d": [1336], "a": 1 }, + { "px": [96,744], "src": [0,0], "f": 0, "t": 0, "d": [1337], "a": 1 }, + { "px": [120,744], "src": [24,0], "f": 0, "t": 1, "d": [1338], "a": 1 }, + { "px": [144,744], "src": [48,0], "f": 0, "t": 2, "d": [1339], "a": 1 }, + { "px": [168,744], "src": [72,0], "f": 0, "t": 3, "d": [1340], "a": 1 }, + { "px": [192,744], "src": [0,0], "f": 0, "t": 0, "d": [1341], "a": 1 }, + { "px": [216,744], "src": [24,0], "f": 0, "t": 1, "d": [1342], "a": 1 }, + { "px": [240,744], "src": [48,0], "f": 0, "t": 2, "d": [1343], "a": 1 }, + { "px": [264,744], "src": [72,0], "f": 0, "t": 3, "d": [1344], "a": 1 }, + { "px": [288,744], "src": [0,0], "f": 0, "t": 0, "d": [1345], "a": 1 }, + { "px": [312,744], "src": [24,0], "f": 0, "t": 1, "d": [1346], "a": 1 }, + { "px": [336,744], "src": [48,0], "f": 0, "t": 2, "d": [1347], "a": 1 }, + { "px": [360,744], "src": [72,0], "f": 0, "t": 3, "d": [1348], "a": 1 }, + { "px": [384,744], "src": [0,0], "f": 0, "t": 0, "d": [1349], "a": 1 }, + { "px": [408,744], "src": [24,0], "f": 0, "t": 1, "d": [1350], "a": 1 }, + { "px": [432,744], "src": [48,0], "f": 0, "t": 2, "d": [1351], "a": 1 }, + { "px": [456,744], "src": [72,0], "f": 0, "t": 3, "d": [1352], "a": 1 }, + { "px": [480,744], "src": [0,0], "f": 0, "t": 0, "d": [1353], "a": 1 }, + { "px": [504,744], "src": [24,0], "f": 0, "t": 1, "d": [1354], "a": 1 }, + { "px": [528,744], "src": [48,0], "f": 0, "t": 2, "d": [1355], "a": 1 }, + { "px": [552,744], "src": [72,0], "f": 0, "t": 3, "d": [1356], "a": 1 }, + { "px": [576,744], "src": [0,0], "f": 0, "t": 0, "d": [1357], "a": 1 }, + { "px": [600,744], "src": [24,0], "f": 0, "t": 1, "d": [1358], "a": 1 }, + { "px": [624,744], "src": [48,0], "f": 0, "t": 2, "d": [1359], "a": 1 }, + { "px": [648,744], "src": [72,0], "f": 0, "t": 3, "d": [1360], "a": 1 }, + { "px": [672,744], "src": [0,0], "f": 0, "t": 0, "d": [1361], "a": 1 }, + { "px": [696,744], "src": [24,0], "f": 0, "t": 1, "d": [1362], "a": 1 }, + { "px": [720,744], "src": [48,0], "f": 0, "t": 2, "d": [1363], "a": 1 }, + { "px": [744,744], "src": [72,0], "f": 0, "t": 3, "d": [1364], "a": 1 }, + { "px": [768,744], "src": [0,0], "f": 0, "t": 0, "d": [1365], "a": 1 }, + { "px": [792,744], "src": [24,0], "f": 0, "t": 1, "d": [1366], "a": 1 }, + { "px": [816,744], "src": [48,0], "f": 0, "t": 2, "d": [1367], "a": 1 }, + { "px": [840,744], "src": [72,0], "f": 0, "t": 3, "d": [1368], "a": 1 }, + { "px": [864,744], "src": [0,0], "f": 0, "t": 0, "d": [1369], "a": 1 }, + { "px": [888,744], "src": [24,0], "f": 0, "t": 1, "d": [1370], "a": 1 }, + { "px": [912,744], "src": [48,0], "f": 0, "t": 2, "d": [1371], "a": 1 }, + { "px": [936,744], "src": [72,0], "f": 0, "t": 3, "d": [1372], "a": 1 }, + { "px": [960,744], "src": [0,0], "f": 0, "t": 0, "d": [1373], "a": 1 }, + { "px": [984,744], "src": [24,0], "f": 0, "t": 1, "d": [1374], "a": 1 }, + { "px": [1008,744], "src": [48,0], "f": 0, "t": 2, "d": [1375], "a": 1 }, + { "px": [0,768], "src": [0,0], "f": 0, "t": 0, "d": [1376], "a": 1 }, + { "px": [24,768], "src": [24,0], "f": 0, "t": 1, "d": [1377], "a": 1 }, + { "px": [48,768], "src": [48,0], "f": 0, "t": 2, "d": [1378], "a": 1 }, + { "px": [72,768], "src": [72,0], "f": 0, "t": 3, "d": [1379], "a": 1 }, + { "px": [96,768], "src": [0,0], "f": 0, "t": 0, "d": [1380], "a": 1 }, + { "px": [120,768], "src": [24,0], "f": 0, "t": 1, "d": [1381], "a": 1 }, + { "px": [144,768], "src": [48,0], "f": 0, "t": 2, "d": [1382], "a": 1 }, + { "px": [168,768], "src": [72,0], "f": 0, "t": 3, "d": [1383], "a": 1 }, + { "px": [192,768], "src": [0,0], "f": 0, "t": 0, "d": [1384], "a": 1 }, + { "px": [216,768], "src": [24,0], "f": 0, "t": 1, "d": [1385], "a": 1 }, + { "px": [240,768], "src": [48,0], "f": 0, "t": 2, "d": [1386], "a": 1 }, + { "px": [264,768], "src": [72,0], "f": 0, "t": 3, "d": [1387], "a": 1 }, + { "px": [288,768], "src": [0,0], "f": 0, "t": 0, "d": [1388], "a": 1 }, + { "px": [312,768], "src": [24,0], "f": 0, "t": 1, "d": [1389], "a": 1 }, + { "px": [336,768], "src": [48,0], "f": 0, "t": 2, "d": [1390], "a": 1 }, + { "px": [360,768], "src": [72,0], "f": 0, "t": 3, "d": [1391], "a": 1 }, + { "px": [384,768], "src": [0,0], "f": 0, "t": 0, "d": [1392], "a": 1 }, + { "px": [408,768], "src": [24,0], "f": 0, "t": 1, "d": [1393], "a": 1 }, + { "px": [432,768], "src": [48,0], "f": 0, "t": 2, "d": [1394], "a": 1 }, + { "px": [456,768], "src": [72,0], "f": 0, "t": 3, "d": [1395], "a": 1 }, + { "px": [480,768], "src": [0,0], "f": 0, "t": 0, "d": [1396], "a": 1 }, + { "px": [504,768], "src": [24,0], "f": 0, "t": 1, "d": [1397], "a": 1 }, + { "px": [528,768], "src": [48,0], "f": 0, "t": 2, "d": [1398], "a": 1 }, + { "px": [552,768], "src": [72,0], "f": 0, "t": 3, "d": [1399], "a": 1 }, + { "px": [576,768], "src": [0,0], "f": 0, "t": 0, "d": [1400], "a": 1 }, + { "px": [600,768], "src": [24,0], "f": 0, "t": 1, "d": [1401], "a": 1 }, + { "px": [624,768], "src": [48,0], "f": 0, "t": 2, "d": [1402], "a": 1 }, + { "px": [648,768], "src": [72,0], "f": 0, "t": 3, "d": [1403], "a": 1 }, + { "px": [672,768], "src": [0,0], "f": 0, "t": 0, "d": [1404], "a": 1 }, + { "px": [696,768], "src": [24,0], "f": 0, "t": 1, "d": [1405], "a": 1 }, + { "px": [720,768], "src": [48,0], "f": 0, "t": 2, "d": [1406], "a": 1 }, + { "px": [744,768], "src": [72,0], "f": 0, "t": 3, "d": [1407], "a": 1 }, + { "px": [768,768], "src": [0,0], "f": 0, "t": 0, "d": [1408], "a": 1 }, + { "px": [792,768], "src": [24,0], "f": 0, "t": 1, "d": [1409], "a": 1 }, + { "px": [816,768], "src": [48,0], "f": 0, "t": 2, "d": [1410], "a": 1 }, + { "px": [840,768], "src": [72,0], "f": 0, "t": 3, "d": [1411], "a": 1 }, + { "px": [864,768], "src": [0,0], "f": 0, "t": 0, "d": [1412], "a": 1 }, + { "px": [888,768], "src": [24,0], "f": 0, "t": 1, "d": [1413], "a": 1 }, + { "px": [912,768], "src": [48,0], "f": 0, "t": 2, "d": [1414], "a": 1 }, + { "px": [936,768], "src": [72,0], "f": 0, "t": 3, "d": [1415], "a": 1 }, + { "px": [960,768], "src": [0,0], "f": 0, "t": 0, "d": [1416], "a": 1 }, + { "px": [984,768], "src": [24,0], "f": 0, "t": 1, "d": [1417], "a": 1 }, + { "px": [1008,768], "src": [48,0], "f": 0, "t": 2, "d": [1418], "a": 1 }, + { "px": [0,792], "src": [0,0], "f": 0, "t": 0, "d": [1419], "a": 1 }, + { "px": [24,792], "src": [24,0], "f": 0, "t": 1, "d": [1420], "a": 1 }, + { "px": [48,792], "src": [48,0], "f": 0, "t": 2, "d": [1421], "a": 1 }, + { "px": [72,792], "src": [72,0], "f": 0, "t": 3, "d": [1422], "a": 1 }, + { "px": [96,792], "src": [0,0], "f": 0, "t": 0, "d": [1423], "a": 1 }, + { "px": [120,792], "src": [24,0], "f": 0, "t": 1, "d": [1424], "a": 1 }, + { "px": [144,792], "src": [48,0], "f": 0, "t": 2, "d": [1425], "a": 1 }, + { "px": [168,792], "src": [72,0], "f": 0, "t": 3, "d": [1426], "a": 1 }, + { "px": [192,792], "src": [0,0], "f": 0, "t": 0, "d": [1427], "a": 1 }, + { "px": [216,792], "src": [24,0], "f": 0, "t": 1, "d": [1428], "a": 1 }, + { "px": [240,792], "src": [48,0], "f": 0, "t": 2, "d": [1429], "a": 1 }, + { "px": [264,792], "src": [72,0], "f": 0, "t": 3, "d": [1430], "a": 1 }, + { "px": [288,792], "src": [0,0], "f": 0, "t": 0, "d": [1431], "a": 1 }, + { "px": [312,792], "src": [24,0], "f": 0, "t": 1, "d": [1432], "a": 1 }, + { "px": [336,792], "src": [48,0], "f": 0, "t": 2, "d": [1433], "a": 1 }, + { "px": [360,792], "src": [72,0], "f": 0, "t": 3, "d": [1434], "a": 1 }, + { "px": [384,792], "src": [0,0], "f": 0, "t": 0, "d": [1435], "a": 1 }, + { "px": [408,792], "src": [24,0], "f": 0, "t": 1, "d": [1436], "a": 1 }, + { "px": [432,792], "src": [48,0], "f": 0, "t": 2, "d": [1437], "a": 1 }, + { "px": [456,792], "src": [72,0], "f": 0, "t": 3, "d": [1438], "a": 1 }, + { "px": [480,792], "src": [0,0], "f": 0, "t": 0, "d": [1439], "a": 1 }, + { "px": [504,792], "src": [24,0], "f": 0, "t": 1, "d": [1440], "a": 1 }, + { "px": [528,792], "src": [48,0], "f": 0, "t": 2, "d": [1441], "a": 1 }, + { "px": [552,792], "src": [72,0], "f": 0, "t": 3, "d": [1442], "a": 1 }, + { "px": [576,792], "src": [0,0], "f": 0, "t": 0, "d": [1443], "a": 1 }, + { "px": [600,792], "src": [24,0], "f": 0, "t": 1, "d": [1444], "a": 1 }, + { "px": [624,792], "src": [48,0], "f": 0, "t": 2, "d": [1445], "a": 1 }, + { "px": [648,792], "src": [72,0], "f": 0, "t": 3, "d": [1446], "a": 1 }, + { "px": [672,792], "src": [0,0], "f": 0, "t": 0, "d": [1447], "a": 1 }, + { "px": [696,792], "src": [24,0], "f": 0, "t": 1, "d": [1448], "a": 1 }, + { "px": [720,792], "src": [48,0], "f": 0, "t": 2, "d": [1449], "a": 1 }, + { "px": [744,792], "src": [72,0], "f": 0, "t": 3, "d": [1450], "a": 1 }, + { "px": [768,792], "src": [0,0], "f": 0, "t": 0, "d": [1451], "a": 1 }, + { "px": [792,792], "src": [24,0], "f": 0, "t": 1, "d": [1452], "a": 1 }, + { "px": [816,792], "src": [48,0], "f": 0, "t": 2, "d": [1453], "a": 1 }, + { "px": [840,792], "src": [72,0], "f": 0, "t": 3, "d": [1454], "a": 1 }, + { "px": [864,792], "src": [0,0], "f": 0, "t": 0, "d": [1455], "a": 1 }, + { "px": [888,792], "src": [24,0], "f": 0, "t": 1, "d": [1456], "a": 1 }, + { "px": [912,792], "src": [48,0], "f": 0, "t": 2, "d": [1457], "a": 1 }, + { "px": [936,792], "src": [72,0], "f": 0, "t": 3, "d": [1458], "a": 1 }, + { "px": [960,792], "src": [0,0], "f": 0, "t": 0, "d": [1459], "a": 1 }, + { "px": [984,792], "src": [24,0], "f": 0, "t": 1, "d": [1460], "a": 1 }, + { "px": [1008,792], "src": [48,0], "f": 0, "t": 2, "d": [1461], "a": 1 }, + { "px": [0,816], "src": [0,0], "f": 0, "t": 0, "d": [1462], "a": 1 }, + { "px": [24,816], "src": [24,0], "f": 0, "t": 1, "d": [1463], "a": 1 }, + { "px": [48,816], "src": [48,0], "f": 0, "t": 2, "d": [1464], "a": 1 }, + { "px": [72,816], "src": [72,0], "f": 0, "t": 3, "d": [1465], "a": 1 }, + { "px": [96,816], "src": [0,0], "f": 0, "t": 0, "d": [1466], "a": 1 }, + { "px": [120,816], "src": [24,0], "f": 0, "t": 1, "d": [1467], "a": 1 }, + { "px": [144,816], "src": [48,0], "f": 0, "t": 2, "d": [1468], "a": 1 }, + { "px": [168,816], "src": [72,0], "f": 0, "t": 3, "d": [1469], "a": 1 }, + { "px": [192,816], "src": [0,0], "f": 0, "t": 0, "d": [1470], "a": 1 }, + { "px": [216,816], "src": [24,0], "f": 0, "t": 1, "d": [1471], "a": 1 }, + { "px": [240,816], "src": [48,0], "f": 0, "t": 2, "d": [1472], "a": 1 }, + { "px": [264,816], "src": [72,0], "f": 0, "t": 3, "d": [1473], "a": 1 }, + { "px": [288,816], "src": [0,0], "f": 0, "t": 0, "d": [1474], "a": 1 }, + { "px": [312,816], "src": [24,0], "f": 0, "t": 1, "d": [1475], "a": 1 }, + { "px": [336,816], "src": [48,0], "f": 0, "t": 2, "d": [1476], "a": 1 }, + { "px": [360,816], "src": [72,0], "f": 0, "t": 3, "d": [1477], "a": 1 }, + { "px": [384,816], "src": [0,0], "f": 0, "t": 0, "d": [1478], "a": 1 }, + { "px": [408,816], "src": [24,0], "f": 0, "t": 1, "d": [1479], "a": 1 }, + { "px": [432,816], "src": [48,0], "f": 0, "t": 2, "d": [1480], "a": 1 }, + { "px": [456,816], "src": [72,0], "f": 0, "t": 3, "d": [1481], "a": 1 }, + { "px": [480,816], "src": [0,0], "f": 0, "t": 0, "d": [1482], "a": 1 }, + { "px": [504,816], "src": [24,0], "f": 0, "t": 1, "d": [1483], "a": 1 }, + { "px": [528,816], "src": [48,0], "f": 0, "t": 2, "d": [1484], "a": 1 }, + { "px": [552,816], "src": [72,0], "f": 0, "t": 3, "d": [1485], "a": 1 }, + { "px": [576,816], "src": [0,0], "f": 0, "t": 0, "d": [1486], "a": 1 }, + { "px": [600,816], "src": [24,0], "f": 0, "t": 1, "d": [1487], "a": 1 }, + { "px": [624,816], "src": [48,0], "f": 0, "t": 2, "d": [1488], "a": 1 }, + { "px": [648,816], "src": [72,0], "f": 0, "t": 3, "d": [1489], "a": 1 }, + { "px": [672,816], "src": [0,0], "f": 0, "t": 0, "d": [1490], "a": 1 }, + { "px": [696,816], "src": [24,0], "f": 0, "t": 1, "d": [1491], "a": 1 }, + { "px": [720,816], "src": [48,0], "f": 0, "t": 2, "d": [1492], "a": 1 }, + { "px": [744,816], "src": [72,0], "f": 0, "t": 3, "d": [1493], "a": 1 }, + { "px": [768,816], "src": [0,0], "f": 0, "t": 0, "d": [1494], "a": 1 }, + { "px": [792,816], "src": [24,0], "f": 0, "t": 1, "d": [1495], "a": 1 }, + { "px": [816,816], "src": [48,0], "f": 0, "t": 2, "d": [1496], "a": 1 }, + { "px": [840,816], "src": [72,0], "f": 0, "t": 3, "d": [1497], "a": 1 }, + { "px": [864,816], "src": [0,0], "f": 0, "t": 0, "d": [1498], "a": 1 }, + { "px": [888,816], "src": [24,0], "f": 0, "t": 1, "d": [1499], "a": 1 }, + { "px": [912,816], "src": [48,0], "f": 0, "t": 2, "d": [1500], "a": 1 }, + { "px": [936,816], "src": [72,0], "f": 0, "t": 3, "d": [1501], "a": 1 }, + { "px": [960,816], "src": [0,0], "f": 0, "t": 0, "d": [1502], "a": 1 }, + { "px": [984,816], "src": [24,0], "f": 0, "t": 1, "d": [1503], "a": 1 }, + { "px": [1008,816], "src": [48,0], "f": 0, "t": 2, "d": [1504], "a": 1 }, + { "px": [0,840], "src": [0,24], "f": 0, "t": 8, "d": [1505], "a": 1 }, + { "px": [24,840], "src": [24,24], "f": 0, "t": 9, "d": [1506], "a": 1 }, + { "px": [48,840], "src": [48,24], "f": 0, "t": 10, "d": [1507], "a": 1 }, + { "px": [72,840], "src": [72,24], "f": 0, "t": 11, "d": [1508], "a": 1 }, + { "px": [96,840], "src": [0,24], "f": 0, "t": 8, "d": [1509], "a": 1 }, + { "px": [120,840], "src": [24,24], "f": 0, "t": 9, "d": [1510], "a": 1 }, + { "px": [144,840], "src": [48,24], "f": 0, "t": 10, "d": [1511], "a": 1 }, + { "px": [168,840], "src": [72,24], "f": 0, "t": 11, "d": [1512], "a": 1 }, + { "px": [192,840], "src": [0,24], "f": 0, "t": 8, "d": [1513], "a": 1 }, + { "px": [216,840], "src": [24,24], "f": 0, "t": 9, "d": [1514], "a": 1 }, + { "px": [240,840], "src": [48,24], "f": 0, "t": 10, "d": [1515], "a": 1 }, + { "px": [264,840], "src": [72,24], "f": 0, "t": 11, "d": [1516], "a": 1 }, + { "px": [288,840], "src": [0,24], "f": 0, "t": 8, "d": [1517], "a": 1 }, + { "px": [312,840], "src": [24,24], "f": 0, "t": 9, "d": [1518], "a": 1 }, + { "px": [336,840], "src": [48,24], "f": 0, "t": 10, "d": [1519], "a": 1 }, + { "px": [360,840], "src": [72,24], "f": 0, "t": 11, "d": [1520], "a": 1 }, + { "px": [384,840], "src": [0,24], "f": 0, "t": 8, "d": [1521], "a": 1 }, + { "px": [408,840], "src": [24,24], "f": 0, "t": 9, "d": [1522], "a": 1 }, + { "px": [432,840], "src": [48,24], "f": 0, "t": 10, "d": [1523], "a": 1 }, + { "px": [456,840], "src": [72,24], "f": 0, "t": 11, "d": [1524], "a": 1 }, + { "px": [480,840], "src": [0,24], "f": 0, "t": 8, "d": [1525], "a": 1 }, + { "px": [504,840], "src": [24,24], "f": 0, "t": 9, "d": [1526], "a": 1 }, + { "px": [528,840], "src": [48,24], "f": 0, "t": 10, "d": [1527], "a": 1 }, + { "px": [552,840], "src": [72,24], "f": 0, "t": 11, "d": [1528], "a": 1 }, + { "px": [576,840], "src": [0,24], "f": 0, "t": 8, "d": [1529], "a": 1 }, + { "px": [600,840], "src": [24,24], "f": 0, "t": 9, "d": [1530], "a": 1 }, + { "px": [624,840], "src": [48,24], "f": 0, "t": 10, "d": [1531], "a": 1 }, + { "px": [648,840], "src": [72,24], "f": 0, "t": 11, "d": [1532], "a": 1 }, + { "px": [672,840], "src": [0,24], "f": 0, "t": 8, "d": [1533], "a": 1 }, + { "px": [696,840], "src": [24,24], "f": 0, "t": 9, "d": [1534], "a": 1 }, + { "px": [720,840], "src": [48,24], "f": 0, "t": 10, "d": [1535], "a": 1 }, + { "px": [744,840], "src": [72,24], "f": 0, "t": 11, "d": [1536], "a": 1 }, + { "px": [768,840], "src": [0,24], "f": 0, "t": 8, "d": [1537], "a": 1 }, + { "px": [792,840], "src": [24,24], "f": 0, "t": 9, "d": [1538], "a": 1 }, + { "px": [816,840], "src": [48,24], "f": 0, "t": 10, "d": [1539], "a": 1 }, + { "px": [840,840], "src": [72,24], "f": 0, "t": 11, "d": [1540], "a": 1 }, + { "px": [864,840], "src": [0,24], "f": 0, "t": 8, "d": [1541], "a": 1 }, + { "px": [888,840], "src": [24,24], "f": 0, "t": 9, "d": [1542], "a": 1 }, + { "px": [912,840], "src": [48,24], "f": 0, "t": 10, "d": [1543], "a": 1 }, + { "px": [936,840], "src": [72,24], "f": 0, "t": 11, "d": [1544], "a": 1 }, + { "px": [960,840], "src": [0,24], "f": 0, "t": 8, "d": [1545], "a": 1 }, + { "px": [984,840], "src": [24,24], "f": 0, "t": 9, "d": [1546], "a": 1 }, + { "px": [1008,840], "src": [48,24], "f": 0, "t": 10, "d": [1547], "a": 1 }, + { "px": [0,864], "src": [0,48], "f": 0, "t": 16, "d": [1548], "a": 1 }, + { "px": [24,864], "src": [24,48], "f": 0, "t": 17, "d": [1549], "a": 1 }, + { "px": [48,864], "src": [48,48], "f": 0, "t": 18, "d": [1550], "a": 1 }, + { "px": [72,864], "src": [72,48], "f": 0, "t": 19, "d": [1551], "a": 1 }, + { "px": [96,864], "src": [72,48], "f": 0, "t": 19, "d": [1552], "a": 1 }, + { "px": [120,864], "src": [72,48], "f": 0, "t": 19, "d": [1553], "a": 1 }, + { "px": [144,864], "src": [72,48], "f": 0, "t": 19, "d": [1554], "a": 1 }, + { "px": [168,864], "src": [72,48], "f": 0, "t": 19, "d": [1555], "a": 1 }, + { "px": [192,864], "src": [72,48], "f": 0, "t": 19, "d": [1556], "a": 1 }, + { "px": [216,864], "src": [72,48], "f": 0, "t": 19, "d": [1557], "a": 1 }, + { "px": [240,864], "src": [72,48], "f": 0, "t": 19, "d": [1558], "a": 1 }, + { "px": [264,864], "src": [72,48], "f": 0, "t": 19, "d": [1559], "a": 1 }, + { "px": [288,864], "src": [72,48], "f": 0, "t": 19, "d": [1560], "a": 1 }, + { "px": [312,864], "src": [72,48], "f": 0, "t": 19, "d": [1561], "a": 1 }, + { "px": [336,864], "src": [72,48], "f": 0, "t": 19, "d": [1562], "a": 1 }, + { "px": [360,864], "src": [72,48], "f": 0, "t": 19, "d": [1563], "a": 1 }, + { "px": [384,864], "src": [72,48], "f": 0, "t": 19, "d": [1564], "a": 1 }, + { "px": [408,864], "src": [72,48], "f": 0, "t": 19, "d": [1565], "a": 1 }, + { "px": [432,864], "src": [72,48], "f": 0, "t": 19, "d": [1566], "a": 1 }, + { "px": [456,864], "src": [72,48], "f": 0, "t": 19, "d": [1567], "a": 1 }, + { "px": [480,864], "src": [72,48], "f": 0, "t": 19, "d": [1568], "a": 1 }, + { "px": [504,864], "src": [72,48], "f": 0, "t": 19, "d": [1569], "a": 1 }, + { "px": [528,864], "src": [72,48], "f": 0, "t": 19, "d": [1570], "a": 1 }, + { "px": [552,864], "src": [72,48], "f": 0, "t": 19, "d": [1571], "a": 1 }, + { "px": [576,864], "src": [72,48], "f": 0, "t": 19, "d": [1572], "a": 1 }, + { "px": [600,864], "src": [72,48], "f": 0, "t": 19, "d": [1573], "a": 1 }, + { "px": [624,864], "src": [72,48], "f": 0, "t": 19, "d": [1574], "a": 1 }, + { "px": [648,864], "src": [72,48], "f": 0, "t": 19, "d": [1575], "a": 1 }, + { "px": [672,864], "src": [72,48], "f": 0, "t": 19, "d": [1576], "a": 1 }, + { "px": [696,864], "src": [72,48], "f": 0, "t": 19, "d": [1577], "a": 1 }, + { "px": [720,864], "src": [72,48], "f": 0, "t": 19, "d": [1578], "a": 1 }, + { "px": [744,864], "src": [72,48], "f": 0, "t": 19, "d": [1579], "a": 1 }, + { "px": [768,864], "src": [72,48], "f": 0, "t": 19, "d": [1580], "a": 1 }, + { "px": [792,864], "src": [72,48], "f": 0, "t": 19, "d": [1581], "a": 1 }, + { "px": [816,864], "src": [72,48], "f": 0, "t": 19, "d": [1582], "a": 1 }, + { "px": [840,864], "src": [72,48], "f": 0, "t": 19, "d": [1583], "a": 1 }, + { "px": [864,864], "src": [72,48], "f": 0, "t": 19, "d": [1584], "a": 1 }, + { "px": [888,864], "src": [72,48], "f": 0, "t": 19, "d": [1585], "a": 1 }, + { "px": [912,864], "src": [72,48], "f": 0, "t": 19, "d": [1586], "a": 1 }, + { "px": [936,864], "src": [72,48], "f": 0, "t": 19, "d": [1587], "a": 1 }, + { "px": [960,864], "src": [72,48], "f": 0, "t": 19, "d": [1588], "a": 1 }, + { "px": [984,864], "src": [72,48], "f": 0, "t": 19, "d": [1589], "a": 1 }, + { "px": [1008,864], "src": [72,48], "f": 0, "t": 19, "d": [1590], "a": 1 }, + { "px": [0,888], "src": [0,48], "f": 0, "t": 16, "d": [1591], "a": 1 }, + { "px": [24,888], "src": [24,48], "f": 0, "t": 17, "d": [1592], "a": 1 }, + { "px": [48,888], "src": [48,48], "f": 0, "t": 18, "d": [1593], "a": 1 }, + { "px": [72,888], "src": [72,48], "f": 0, "t": 19, "d": [1594], "a": 1 }, + { "px": [96,888], "src": [72,48], "f": 0, "t": 19, "d": [1595], "a": 1 }, + { "px": [120,888], "src": [72,48], "f": 0, "t": 19, "d": [1596], "a": 1 }, + { "px": [144,888], "src": [72,48], "f": 0, "t": 19, "d": [1597], "a": 1 }, + { "px": [168,888], "src": [72,48], "f": 0, "t": 19, "d": [1598], "a": 1 }, + { "px": [192,888], "src": [72,48], "f": 0, "t": 19, "d": [1599], "a": 1 }, + { "px": [216,888], "src": [72,48], "f": 0, "t": 19, "d": [1600], "a": 1 }, + { "px": [240,888], "src": [72,48], "f": 0, "t": 19, "d": [1601], "a": 1 }, + { "px": [264,888], "src": [72,48], "f": 0, "t": 19, "d": [1602], "a": 1 }, + { "px": [288,888], "src": [72,48], "f": 0, "t": 19, "d": [1603], "a": 1 }, + { "px": [312,888], "src": [72,48], "f": 0, "t": 19, "d": [1604], "a": 1 }, + { "px": [336,888], "src": [72,48], "f": 0, "t": 19, "d": [1605], "a": 1 }, + { "px": [360,888], "src": [72,48], "f": 0, "t": 19, "d": [1606], "a": 1 }, + { "px": [384,888], "src": [0,48], "f": 0, "t": 16, "d": [1607], "a": 1 }, + { "px": [408,888], "src": [0,48], "f": 0, "t": 16, "d": [1608], "a": 1 }, + { "px": [432,888], "src": [24,48], "f": 0, "t": 17, "d": [1609], "a": 1 }, + { "px": [456,888], "src": [48,48], "f": 0, "t": 18, "d": [1610], "a": 1 }, + { "px": [480,888], "src": [72,48], "f": 0, "t": 19, "d": [1611], "a": 1 }, + { "px": [504,888], "src": [72,48], "f": 0, "t": 19, "d": [1612], "a": 1 }, + { "px": [528,888], "src": [72,48], "f": 0, "t": 19, "d": [1613], "a": 1 }, + { "px": [552,888], "src": [72,48], "f": 0, "t": 19, "d": [1614], "a": 1 }, + { "px": [576,888], "src": [72,48], "f": 0, "t": 19, "d": [1615], "a": 1 }, + { "px": [600,888], "src": [72,48], "f": 0, "t": 19, "d": [1616], "a": 1 }, + { "px": [624,888], "src": [0,48], "f": 0, "t": 16, "d": [1617], "a": 1 }, + { "px": [648,888], "src": [0,48], "f": 0, "t": 16, "d": [1618], "a": 1 }, + { "px": [672,888], "src": [0,48], "f": 0, "t": 16, "d": [1619], "a": 1 }, + { "px": [696,888], "src": [0,48], "f": 0, "t": 16, "d": [1620], "a": 1 }, + { "px": [720,888], "src": [0,48], "f": 0, "t": 16, "d": [1621], "a": 1 }, + { "px": [744,888], "src": [0,48], "f": 0, "t": 16, "d": [1622], "a": 1 }, + { "px": [768,888], "src": [0,48], "f": 0, "t": 16, "d": [1623], "a": 1 }, + { "px": [792,888], "src": [0,48], "f": 0, "t": 16, "d": [1624], "a": 1 }, + { "px": [816,888], "src": [0,48], "f": 0, "t": 16, "d": [1625], "a": 1 }, + { "px": [840,888], "src": [0,48], "f": 0, "t": 16, "d": [1626], "a": 1 }, + { "px": [864,888], "src": [0,48], "f": 0, "t": 16, "d": [1627], "a": 1 }, + { "px": [888,888], "src": [24,48], "f": 0, "t": 17, "d": [1628], "a": 1 }, + { "px": [912,888], "src": [48,48], "f": 0, "t": 18, "d": [1629], "a": 1 }, + { "px": [936,888], "src": [0,48], "f": 0, "t": 16, "d": [1630], "a": 1 }, + { "px": [960,888], "src": [24,48], "f": 0, "t": 17, "d": [1631], "a": 1 }, + { "px": [984,888], "src": [48,48], "f": 0, "t": 18, "d": [1632], "a": 1 }, + { "px": [1008,888], "src": [72,48], "f": 0, "t": 19, "d": [1633], "a": 1 }, + { "px": [0,912], "src": [0,48], "f": 0, "t": 16, "d": [1634], "a": 1 }, + { "px": [24,912], "src": [0,48], "f": 0, "t": 16, "d": [1635], "a": 1 }, + { "px": [48,912], "src": [24,48], "f": 0, "t": 17, "d": [1636], "a": 1 }, + { "px": [72,912], "src": [48,48], "f": 0, "t": 18, "d": [1637], "a": 1 }, + { "px": [96,912], "src": [72,48], "f": 0, "t": 19, "d": [1638], "a": 1 }, + { "px": [120,912], "src": [0,48], "f": 0, "t": 16, "d": [1639], "a": 1 }, + { "px": [144,912], "src": [0,48], "f": 0, "t": 16, "d": [1640], "a": 1 }, + { "px": [168,912], "src": [0,48], "f": 0, "t": 16, "d": [1641], "a": 1 }, + { "px": [192,912], "src": [24,48], "f": 0, "t": 17, "d": [1642], "a": 1 }, + { "px": [216,912], "src": [48,48], "f": 0, "t": 18, "d": [1643], "a": 1 }, + { "px": [240,912], "src": [72,48], "f": 0, "t": 19, "d": [1644], "a": 1 }, + { "px": [264,912], "src": [72,48], "f": 0, "t": 19, "d": [1645], "a": 1 }, + { "px": [288,912], "src": [72,48], "f": 0, "t": 19, "d": [1646], "a": 1 }, + { "px": [312,912], "src": [0,48], "f": 0, "t": 16, "d": [1647], "a": 1 }, + { "px": [336,912], "src": [24,48], "f": 0, "t": 17, "d": [1648], "a": 1 }, + { "px": [360,912], "src": [48,48], "f": 0, "t": 18, "d": [1649], "a": 1 }, + { "px": [384,912], "src": [72,48], "f": 0, "t": 19, "d": [1650], "a": 1 }, + { "px": [408,912], "src": [72,48], "f": 0, "t": 19, "d": [1651], "a": 1 }, + { "px": [432,912], "src": [72,48], "f": 0, "t": 19, "d": [1652], "a": 1 }, + { "px": [456,912], "src": [72,48], "f": 0, "t": 19, "d": [1653], "a": 1 }, + { "px": [480,912], "src": [72,48], "f": 0, "t": 19, "d": [1654], "a": 1 }, + { "px": [504,912], "src": [72,48], "f": 0, "t": 19, "d": [1655], "a": 1 }, + { "px": [528,912], "src": [72,48], "f": 0, "t": 19, "d": [1656], "a": 1 }, + { "px": [552,912], "src": [72,48], "f": 0, "t": 19, "d": [1657], "a": 1 }, + { "px": [576,912], "src": [72,48], "f": 0, "t": 19, "d": [1658], "a": 1 }, + { "px": [600,912], "src": [72,48], "f": 0, "t": 19, "d": [1659], "a": 1 }, + { "px": [624,912], "src": [72,48], "f": 0, "t": 19, "d": [1660], "a": 1 }, + { "px": [648,912], "src": [72,48], "f": 0, "t": 19, "d": [1661], "a": 1 }, + { "px": [672,912], "src": [72,48], "f": 0, "t": 19, "d": [1662], "a": 1 }, + { "px": [696,912], "src": [72,48], "f": 0, "t": 19, "d": [1663], "a": 1 }, + { "px": [720,912], "src": [72,48], "f": 0, "t": 19, "d": [1664], "a": 1 }, + { "px": [744,912], "src": [72,48], "f": 0, "t": 19, "d": [1665], "a": 1 }, + { "px": [768,912], "src": [72,48], "f": 0, "t": 19, "d": [1666], "a": 1 }, + { "px": [792,912], "src": [72,48], "f": 0, "t": 19, "d": [1667], "a": 1 }, + { "px": [816,912], "src": [72,48], "f": 0, "t": 19, "d": [1668], "a": 1 }, + { "px": [840,912], "src": [72,48], "f": 0, "t": 19, "d": [1669], "a": 1 }, + { "px": [864,912], "src": [72,48], "f": 0, "t": 19, "d": [1670], "a": 1 }, + { "px": [888,912], "src": [72,48], "f": 0, "t": 19, "d": [1671], "a": 1 }, + { "px": [912,912], "src": [72,48], "f": 0, "t": 19, "d": [1672], "a": 1 }, + { "px": [936,912], "src": [0,48], "f": 0, "t": 16, "d": [1673], "a": 1 }, + { "px": [960,912], "src": [24,48], "f": 0, "t": 17, "d": [1674], "a": 1 }, + { "px": [984,912], "src": [48,48], "f": 0, "t": 18, "d": [1675], "a": 1 }, + { "px": [1008,912], "src": [72,48], "f": 0, "t": 19, "d": [1676], "a": 1 }, + { "px": [0,936], "src": [0,48], "f": 0, "t": 16, "d": [1677], "a": 1 }, + { "px": [24,936], "src": [24,48], "f": 0, "t": 17, "d": [1678], "a": 1 }, + { "px": [48,936], "src": [48,48], "f": 0, "t": 18, "d": [1679], "a": 1 }, + { "px": [72,936], "src": [72,48], "f": 0, "t": 19, "d": [1680], "a": 1 }, + { "px": [96,936], "src": [72,48], "f": 0, "t": 19, "d": [1681], "a": 1 }, + { "px": [120,936], "src": [24,48], "f": 0, "t": 17, "d": [1682], "a": 1 }, + { "px": [144,936], "src": [48,48], "f": 0, "t": 18, "d": [1683], "a": 1 }, + { "px": [168,936], "src": [72,48], "f": 0, "t": 19, "d": [1684], "a": 1 }, + { "px": [192,936], "src": [0,48], "f": 0, "t": 16, "d": [1685], "a": 1 }, + { "px": [216,936], "src": [0,48], "f": 0, "t": 16, "d": [1686], "a": 1 }, + { "px": [240,936], "src": [0,48], "f": 0, "t": 16, "d": [1687], "a": 1 }, + { "px": [264,936], "src": [24,48], "f": 0, "t": 17, "d": [1688], "a": 1 }, + { "px": [288,936], "src": [0,48], "f": 0, "t": 16, "d": [1689], "a": 1 }, + { "px": [312,936], "src": [24,48], "f": 0, "t": 17, "d": [1690], "a": 1 }, + { "px": [336,936], "src": [48,48], "f": 0, "t": 18, "d": [1691], "a": 1 }, + { "px": [360,936], "src": [72,48], "f": 0, "t": 19, "d": [1692], "a": 1 }, + { "px": [384,936], "src": [0,48], "f": 0, "t": 16, "d": [1693], "a": 1 }, + { "px": [408,936], "src": [24,48], "f": 0, "t": 17, "d": [1694], "a": 1 }, + { "px": [432,936], "src": [48,48], "f": 0, "t": 18, "d": [1695], "a": 1 }, + { "px": [456,936], "src": [72,48], "f": 0, "t": 19, "d": [1696], "a": 1 }, + { "px": [480,936], "src": [72,48], "f": 0, "t": 19, "d": [1697], "a": 1 }, + { "px": [504,936], "src": [72,48], "f": 0, "t": 19, "d": [1698], "a": 1 }, + { "px": [528,936], "src": [72,48], "f": 0, "t": 19, "d": [1699], "a": 1 }, + { "px": [552,936], "src": [72,48], "f": 0, "t": 19, "d": [1700], "a": 1 }, + { "px": [576,936], "src": [72,48], "f": 0, "t": 19, "d": [1701], "a": 1 }, + { "px": [600,936], "src": [72,48], "f": 0, "t": 19, "d": [1702], "a": 1 }, + { "px": [624,936], "src": [72,48], "f": 0, "t": 19, "d": [1703], "a": 1 }, + { "px": [648,936], "src": [72,48], "f": 0, "t": 19, "d": [1704], "a": 1 }, + { "px": [672,936], "src": [72,48], "f": 0, "t": 19, "d": [1705], "a": 1 }, + { "px": [696,936], "src": [0,48], "f": 0, "t": 16, "d": [1706], "a": 1 }, + { "px": [720,936], "src": [0,48], "f": 0, "t": 16, "d": [1707], "a": 1 }, + { "px": [744,936], "src": [0,48], "f": 0, "t": 16, "d": [1708], "a": 1 }, + { "px": [768,936], "src": [0,48], "f": 0, "t": 16, "d": [1709], "a": 1 }, + { "px": [792,936], "src": [0,48], "f": 0, "t": 16, "d": [1710], "a": 1 }, + { "px": [816,936], "src": [0,48], "f": 0, "t": 16, "d": [1711], "a": 1 }, + { "px": [840,936], "src": [0,48], "f": 0, "t": 16, "d": [1712], "a": 1 }, + { "px": [864,936], "src": [0,48], "f": 0, "t": 16, "d": [1713], "a": 1 }, + { "px": [888,936], "src": [24,48], "f": 0, "t": 17, "d": [1714], "a": 1 }, + { "px": [912,936], "src": [48,48], "f": 0, "t": 18, "d": [1715], "a": 1 }, + { "px": [936,936], "src": [0,48], "f": 0, "t": 16, "d": [1716], "a": 1 }, + { "px": [960,936], "src": [24,48], "f": 0, "t": 17, "d": [1717], "a": 1 }, + { "px": [984,936], "src": [48,48], "f": 0, "t": 18, "d": [1718], "a": 1 }, + { "px": [1008,936], "src": [72,48], "f": 0, "t": 19, "d": [1719], "a": 1 }, + { "px": [0,960], "src": [0,48], "f": 0, "t": 16, "d": [1720], "a": 1 }, + { "px": [24,960], "src": [24,48], "f": 0, "t": 17, "d": [1721], "a": 1 }, + { "px": [48,960], "src": [48,48], "f": 0, "t": 18, "d": [1722], "a": 1 }, + { "px": [72,960], "src": [72,48], "f": 0, "t": 19, "d": [1723], "a": 1 }, + { "px": [96,960], "src": [0,48], "f": 0, "t": 16, "d": [1724], "a": 1 }, + { "px": [120,960], "src": [0,48], "f": 0, "t": 16, "d": [1725], "a": 1 }, + { "px": [144,960], "src": [0,48], "f": 0, "t": 16, "d": [1726], "a": 1 }, + { "px": [168,960], "src": [24,48], "f": 0, "t": 17, "d": [1727], "a": 1 }, + { "px": [192,960], "src": [48,48], "f": 0, "t": 18, "d": [1728], "a": 1 }, + { "px": [216,960], "src": [72,48], "f": 0, "t": 19, "d": [1729], "a": 1 }, + { "px": [240,960], "src": [72,48], "f": 0, "t": 19, "d": [1730], "a": 1 }, + { "px": [264,960], "src": [72,48], "f": 0, "t": 19, "d": [1731], "a": 1 }, + { "px": [288,960], "src": [72,48], "f": 0, "t": 19, "d": [1732], "a": 1 }, + { "px": [312,960], "src": [72,48], "f": 0, "t": 19, "d": [1733], "a": 1 }, + { "px": [336,960], "src": [72,48], "f": 0, "t": 19, "d": [1734], "a": 1 }, + { "px": [360,960], "src": [72,48], "f": 0, "t": 19, "d": [1735], "a": 1 }, + { "px": [384,960], "src": [72,48], "f": 0, "t": 19, "d": [1736], "a": 1 }, + { "px": [408,960], "src": [72,48], "f": 0, "t": 19, "d": [1737], "a": 1 }, + { "px": [432,960], "src": [72,48], "f": 0, "t": 19, "d": [1738], "a": 1 }, + { "px": [456,960], "src": [72,48], "f": 0, "t": 19, "d": [1739], "a": 1 }, + { "px": [480,960], "src": [72,48], "f": 0, "t": 19, "d": [1740], "a": 1 }, + { "px": [504,960], "src": [72,48], "f": 0, "t": 19, "d": [1741], "a": 1 }, + { "px": [528,960], "src": [72,48], "f": 0, "t": 19, "d": [1742], "a": 1 }, + { "px": [552,960], "src": [72,48], "f": 0, "t": 19, "d": [1743], "a": 1 }, + { "px": [576,960], "src": [0,48], "f": 0, "t": 16, "d": [1744], "a": 1 }, + { "px": [600,960], "src": [24,48], "f": 0, "t": 17, "d": [1745], "a": 1 }, + { "px": [624,960], "src": [0,48], "f": 0, "t": 16, "d": [1746], "a": 1 }, + { "px": [648,960], "src": [24,48], "f": 0, "t": 17, "d": [1747], "a": 1 }, + { "px": [672,960], "src": [48,48], "f": 0, "t": 18, "d": [1748], "a": 1 }, + { "px": [696,960], "src": [72,48], "f": 0, "t": 19, "d": [1749], "a": 1 }, + { "px": [720,960], "src": [72,48], "f": 0, "t": 19, "d": [1750], "a": 1 }, + { "px": [744,960], "src": [72,48], "f": 0, "t": 19, "d": [1751], "a": 1 }, + { "px": [768,960], "src": [72,48], "f": 0, "t": 19, "d": [1752], "a": 1 }, + { "px": [792,960], "src": [72,48], "f": 0, "t": 19, "d": [1753], "a": 1 }, + { "px": [816,960], "src": [72,48], "f": 0, "t": 19, "d": [1754], "a": 1 }, + { "px": [840,960], "src": [72,48], "f": 0, "t": 19, "d": [1755], "a": 1 }, + { "px": [864,960], "src": [72,48], "f": 0, "t": 19, "d": [1756], "a": 1 }, + { "px": [888,960], "src": [72,48], "f": 0, "t": 19, "d": [1757], "a": 1 }, + { "px": [912,960], "src": [72,48], "f": 0, "t": 19, "d": [1758], "a": 1 }, + { "px": [936,960], "src": [0,48], "f": 0, "t": 16, "d": [1759], "a": 1 }, + { "px": [960,960], "src": [24,48], "f": 0, "t": 17, "d": [1760], "a": 1 }, + { "px": [984,960], "src": [48,48], "f": 0, "t": 18, "d": [1761], "a": 1 }, + { "px": [1008,960], "src": [72,48], "f": 0, "t": 19, "d": [1762], "a": 1 }, + { "px": [0,984], "src": [0,48], "f": 0, "t": 16, "d": [1763], "a": 1 }, + { "px": [24,984], "src": [0,48], "f": 0, "t": 16, "d": [1764], "a": 1 }, + { "px": [48,984], "src": [0,48], "f": 0, "t": 16, "d": [1765], "a": 1 }, + { "px": [72,984], "src": [0,48], "f": 0, "t": 16, "d": [1766], "a": 1 }, + { "px": [96,984], "src": [0,48], "f": 0, "t": 16, "d": [1767], "a": 1 }, + { "px": [120,984], "src": [0,48], "f": 0, "t": 16, "d": [1768], "a": 1 }, + { "px": [144,984], "src": [0,48], "f": 0, "t": 16, "d": [1769], "a": 1 }, + { "px": [168,984], "src": [0,48], "f": 0, "t": 16, "d": [1770], "a": 1 }, + { "px": [192,984], "src": [0,48], "f": 0, "t": 16, "d": [1771], "a": 1 }, + { "px": [216,984], "src": [0,48], "f": 0, "t": 16, "d": [1772], "a": 1 }, + { "px": [240,984], "src": [0,48], "f": 0, "t": 16, "d": [1773], "a": 1 }, + { "px": [264,984], "src": [0,48], "f": 0, "t": 16, "d": [1774], "a": 1 }, + { "px": [288,984], "src": [0,48], "f": 0, "t": 16, "d": [1775], "a": 1 }, + { "px": [312,984], "src": [24,48], "f": 0, "t": 17, "d": [1776], "a": 1 }, + { "px": [336,984], "src": [0,48], "f": 0, "t": 16, "d": [1777], "a": 1 }, + { "px": [360,984], "src": [0,48], "f": 0, "t": 16, "d": [1778], "a": 1 }, + { "px": [384,984], "src": [24,48], "f": 0, "t": 17, "d": [1779], "a": 1 }, + { "px": [408,984], "src": [48,48], "f": 0, "t": 18, "d": [1780], "a": 1 }, + { "px": [432,984], "src": [72,48], "f": 0, "t": 19, "d": [1781], "a": 1 }, + { "px": [456,984], "src": [0,48], "f": 0, "t": 16, "d": [1782], "a": 1 }, + { "px": [480,984], "src": [0,48], "f": 0, "t": 16, "d": [1783], "a": 1 }, + { "px": [504,984], "src": [0,48], "f": 0, "t": 16, "d": [1784], "a": 1 }, + { "px": [528,984], "src": [0,48], "f": 0, "t": 16, "d": [1785], "a": 1 }, + { "px": [552,984], "src": [0,48], "f": 0, "t": 16, "d": [1786], "a": 1 }, + { "px": [576,984], "src": [24,48], "f": 0, "t": 17, "d": [1787], "a": 1 }, + { "px": [600,984], "src": [48,48], "f": 0, "t": 18, "d": [1788], "a": 1 }, + { "px": [624,984], "src": [72,48], "f": 0, "t": 19, "d": [1789], "a": 1 }, + { "px": [648,984], "src": [48,48], "f": 0, "t": 18, "d": [1790], "a": 1 }, + { "px": [672,984], "src": [72,48], "f": 0, "t": 19, "d": [1791], "a": 1 }, + { "px": [696,984], "src": [72,48], "f": 0, "t": 19, "d": [1792], "a": 1 }, + { "px": [720,984], "src": [72,48], "f": 0, "t": 19, "d": [1793], "a": 1 }, + { "px": [744,984], "src": [72,48], "f": 0, "t": 19, "d": [1794], "a": 1 }, + { "px": [768,984], "src": [72,48], "f": 0, "t": 19, "d": [1795], "a": 1 }, + { "px": [792,984], "src": [72,48], "f": 0, "t": 19, "d": [1796], "a": 1 }, + { "px": [816,984], "src": [72,48], "f": 0, "t": 19, "d": [1797], "a": 1 }, + { "px": [840,984], "src": [72,48], "f": 0, "t": 19, "d": [1798], "a": 1 }, + { "px": [864,984], "src": [72,48], "f": 0, "t": 19, "d": [1799], "a": 1 }, + { "px": [888,984], "src": [72,48], "f": 0, "t": 19, "d": [1800], "a": 1 }, + { "px": [912,984], "src": [72,48], "f": 0, "t": 19, "d": [1801], "a": 1 }, + { "px": [936,984], "src": [0,48], "f": 0, "t": 16, "d": [1802], "a": 1 }, + { "px": [960,984], "src": [24,48], "f": 0, "t": 17, "d": [1803], "a": 1 }, + { "px": [984,984], "src": [48,48], "f": 0, "t": 18, "d": [1804], "a": 1 }, + { "px": [1008,984], "src": [72,48], "f": 0, "t": 19, "d": [1805], "a": 1 }, + { "px": [0,1008], "src": [0,48], "f": 0, "t": 16, "d": [1806], "a": 1 }, + { "px": [24,1008], "src": [0,48], "f": 0, "t": 16, "d": [1807], "a": 1 }, + { "px": [48,1008], "src": [24,48], "f": 0, "t": 17, "d": [1808], "a": 1 }, + { "px": [72,1008], "src": [48,48], "f": 0, "t": 18, "d": [1809], "a": 1 }, + { "px": [96,1008], "src": [72,48], "f": 0, "t": 19, "d": [1810], "a": 1 }, + { "px": [120,1008], "src": [72,48], "f": 0, "t": 19, "d": [1811], "a": 1 }, + { "px": [144,1008], "src": [72,48], "f": 0, "t": 19, "d": [1812], "a": 1 }, + { "px": [168,1008], "src": [72,48], "f": 0, "t": 19, "d": [1813], "a": 1 }, + { "px": [192,1008], "src": [72,48], "f": 0, "t": 19, "d": [1814], "a": 1 }, + { "px": [216,1008], "src": [72,48], "f": 0, "t": 19, "d": [1815], "a": 1 }, + { "px": [240,1008], "src": [72,48], "f": 0, "t": 19, "d": [1816], "a": 1 }, + { "px": [264,1008], "src": [72,48], "f": 0, "t": 19, "d": [1817], "a": 1 }, + { "px": [288,1008], "src": [72,48], "f": 0, "t": 19, "d": [1818], "a": 1 }, + { "px": [312,1008], "src": [72,48], "f": 0, "t": 19, "d": [1819], "a": 1 }, + { "px": [336,1008], "src": [72,48], "f": 0, "t": 19, "d": [1820], "a": 1 }, + { "px": [360,1008], "src": [72,48], "f": 0, "t": 19, "d": [1821], "a": 1 }, + { "px": [384,1008], "src": [0,48], "f": 0, "t": 16, "d": [1822], "a": 1 }, + { "px": [408,1008], "src": [0,48], "f": 0, "t": 16, "d": [1823], "a": 1 }, + { "px": [432,1008], "src": [0,48], "f": 0, "t": 16, "d": [1824], "a": 1 }, + { "px": [456,1008], "src": [0,48], "f": 0, "t": 16, "d": [1825], "a": 1 }, + { "px": [480,1008], "src": [0,48], "f": 0, "t": 16, "d": [1826], "a": 1 }, + { "px": [504,1008], "src": [0,48], "f": 0, "t": 16, "d": [1827], "a": 1 }, + { "px": [528,1008], "src": [0,48], "f": 0, "t": 16, "d": [1828], "a": 1 }, + { "px": [552,1008], "src": [0,48], "f": 0, "t": 16, "d": [1829], "a": 1 }, + { "px": [576,1008], "src": [0,48], "f": 0, "t": 16, "d": [1830], "a": 1 }, + { "px": [600,1008], "src": [0,48], "f": 0, "t": 16, "d": [1831], "a": 1 }, + { "px": [624,1008], "src": [0,48], "f": 0, "t": 16, "d": [1832], "a": 1 }, + { "px": [648,1008], "src": [0,48], "f": 0, "t": 16, "d": [1833], "a": 1 }, + { "px": [672,1008], "src": [0,48], "f": 0, "t": 16, "d": [1834], "a": 1 }, + { "px": [696,1008], "src": [0,48], "f": 0, "t": 16, "d": [1835], "a": 1 }, + { "px": [720,1008], "src": [0,48], "f": 0, "t": 16, "d": [1836], "a": 1 }, + { "px": [744,1008], "src": [0,48], "f": 0, "t": 16, "d": [1837], "a": 1 }, + { "px": [768,1008], "src": [0,48], "f": 0, "t": 16, "d": [1838], "a": 1 }, + { "px": [792,1008], "src": [0,48], "f": 0, "t": 16, "d": [1839], "a": 1 }, + { "px": [816,1008], "src": [0,48], "f": 0, "t": 16, "d": [1840], "a": 1 }, + { "px": [840,1008], "src": [0,48], "f": 0, "t": 16, "d": [1841], "a": 1 }, + { "px": [864,1008], "src": [0,48], "f": 0, "t": 16, "d": [1842], "a": 1 }, + { "px": [888,1008], "src": [0,48], "f": 0, "t": 16, "d": [1843], "a": 1 }, + { "px": [912,1008], "src": [0,48], "f": 0, "t": 16, "d": [1844], "a": 1 }, + { "px": [936,1008], "src": [0,48], "f": 0, "t": 16, "d": [1845], "a": 1 }, + { "px": [960,1008], "src": [24,48], "f": 0, "t": 17, "d": [1846], "a": 1 }, + { "px": [984,1008], "src": [48,48], "f": 0, "t": 18, "d": [1847], "a": 1 }, + { "px": [1008,1008], "src": [72,48], "f": 0, "t": 19, "d": [1848], "a": 1 } + ], + "entityInstances": [] + } + ], + "__neighbours": [] + } + ], + "worlds": [], + "dummyWorldIid": "d73f6090-d380-11f0-87cf-3b8d37e1b2e8" +} \ No newline at end of file diff --git a/py/assets/levels/fighting.ldtk b/py/assets/levels/fighting.ldtk new file mode 100644 index 0000000..3925af0 --- /dev/null +++ b/py/assets/levels/fighting.ldtk @@ -0,0 +1,1622 @@ +{ + "__header__": { + "fileType": "LDtk Project JSON", + "app": "LDtk", + "doc": "https://ldtk.io/json", + "schema": "https://ldtk.io/files/JSON_SCHEMA.json", + "appAuthor": "Sebastien 'deepnight' Benard", + "appVersion": "1.5.3", + "url": "https://ldtk.io" + }, + "iid": "a48de660-d380-11f0-a69c-f18cbbf0556b", + "jsonVersion": "1.5.3", + "appBuildId": 473703, + "nextUid": 109, + "identifierStyle": "Capitalize", + "toc": [], + "worldLayout": "Free", + "worldGridWidth": 256, + "worldGridHeight": 256, + "defaultLevelWidth": 256, + "defaultLevelHeight": 256, + "defaultPivotX": 0, + "defaultPivotY": 0, + "defaultGridSize": 16, + "defaultEntityWidth": 16, + "defaultEntityHeight": 16, + "bgColor": "#40465B", + "defaultLevelBgColor": "#696A79", + "minifyJson": false, + "externalLevels": false, + "exportTiled": false, + "simplifiedExport": false, + "imageExportMode": "None", + "exportLevelBg": true, + "pngFilePattern": null, + "backupOnSave": false, + "backupLimit": 10, + "backupRelPath": null, + "levelNamePattern": "Level_%idx", + "tutorialDesc": null, + "customCommands": [], + "flags": [], + "defs": { "layers": [ + { + "__type": "Entities", + "identifier": "Entities", + "type": "Entities", + "uid": 93, + "doc": null, + "uiColor": null, + "gridSize": 16, + "guideGridWid": 0, + "guideGridHei": 0, + "displayOpacity": 1, + "inactiveOpacity": 0.6, + "hideInList": false, + "hideFieldsWhenInactive": true, + "canSelectWhenInactive": true, + "renderInWorldView": true, + "pxOffsetX": 0, + "pxOffsetY": 0, + "parallaxFactorX": 0, + "parallaxFactorY": 0, + "parallaxScaling": true, + "requiredTags": [], + "excludedTags": [], + "autoTilesKilledByOtherLayerUid": null, + "uiFilterTags": [], + "useAsyncRender": false, + "intGridValues": [], + "intGridValuesGroups": [], + "autoRuleGroups": [], + "autoSourceLayerDefUid": null, + "tilesetDefUid": null, + "tilePivotX": 0, + "tilePivotY": 0, + "biomeFieldUid": null + }, + { + "__type": "IntGrid", + "identifier": "IntGrid", + "type": "IntGrid", + "uid": 2, + "doc": null, + "uiColor": null, + "gridSize": 16, + "guideGridWid": 0, + "guideGridHei": 0, + "displayOpacity": 1, + "inactiveOpacity": 1, + "hideInList": false, + "hideFieldsWhenInactive": false, + "canSelectWhenInactive": true, + "renderInWorldView": true, + "pxOffsetX": 0, + "pxOffsetY": 0, + "parallaxFactorX": 0, + "parallaxFactorY": 0, + "parallaxScaling": true, + "requiredTags": [], + "excludedTags": [], + "autoTilesKilledByOtherLayerUid": null, + "uiFilterTags": [], + "useAsyncRender": false, + "intGridValues": [ + { "value": 1, "identifier": "walls", "color": "#C28569", "tile": null, "groupUid": 0 }, + { "value": 2, "identifier": "platforms", "color": "#BE4A2F", "tile": null, "groupUid": 0 } + ], + "intGridValuesGroups": [], + "autoRuleGroups": [ + { + "uid": 88, + "name": "platforms", + "color": null, + "icon": null, + "active": true, + "isOptional": false, + "rules": [ + { + "uid": 89, + "active": true, + "size": 3, + "tileRectsIds": [[365]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-2,0,-2,2,0,0,-2,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 2, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 7012128, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 90, + "active": true, + "size": 3, + "tileRectsIds": [[369]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-2,0,0,2,-2,0,-2,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 2, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 5815173, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 91, + "active": true, + "size": 3, + "tileRectsIds": [[367]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-2,0,0,2,0,0,-2,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 2, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 8201440, + "perlinScale": 0.2, + "perlinOctaves": 2 + } + ], + "usesWizard": true, + "requiredBiomeValues": [], + "biomeRequirementMode": 0 + }, + { + "uid": 40, + "name": "walls", + "color": null, + "icon": null, + "active": true, + "isOptional": false, + "rules": [ + { + "uid": 77, + "active": true, + "size": 3, + "tileRectsIds": [[26]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,-1,1,0,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 3759126, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 78, + "active": true, + "size": 3, + "tileRectsIds": [[30]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,0,1,-1,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 2791386, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 79, + "active": true, + "size": 3, + "tileRectsIds": [[130]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,0,1,-1,0,-1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 4294934, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 80, + "active": true, + "size": 3, + "tileRectsIds": [[126]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,-1,1,0,0,-1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 6333830, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 81, + "active": true, + "size": 3, + "tileRectsIds": [[28]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,0,1,0,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 7873880, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 82, + "active": true, + "size": 3, + "tileRectsIds": [[80]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,0,1,-1,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 4660485, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 83, + "active": true, + "size": 3, + "tileRectsIds": [[128]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,0,1,0,0,-1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 9006622, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 84, + "active": true, + "size": 3, + "tileRectsIds": [[76]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,-1,1,0,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 1488742, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 85, + "active": true, + "size": 1, + "tileRectsIds": [[78]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [1], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 6147733, + "perlinScale": 0.2, + "perlinOctaves": 2 + } + ], + "usesWizard": true, + "requiredBiomeValues": [], + "biomeRequirementMode": 0 + }, + { + "uid": 21, + "name": "plants", + "color": null, + "icon": null, + "active": true, + "isOptional": false, + "rules": [ + { + "uid": 87, + "active": true, + "size": 3, + "tileRectsIds": [[186]], + "alpha": 1, + "chance": 0.2, + "breakOnMatch": true, + "pattern": [0,0,0,0,0,1,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": null, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 765260, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 86, + "active": true, + "size": 3, + "tileRectsIds": [[184]], + "alpha": 1, + "chance": 0.2, + "breakOnMatch": true, + "pattern": [0,0,0,1,0,0,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": null, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 6199610, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 22, + "active": true, + "size": 3, + "tileRectsIds": [ [176], [178] ], + "alpha": 1, + "chance": 0.3, + "breakOnMatch": true, + "pattern": [0,0,0,0,0,0,0,1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": null, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 6681065, + "perlinScale": 0.2, + "perlinOctaves": 2 + } + ], + "usesWizard": false, + "requiredBiomeValues": [], + "biomeRequirementMode": 0 + } + ], + "autoSourceLayerDefUid": null, + "tilesetDefUid": 1, + "tilePivotX": 0, + "tilePivotY": 0, + "biomeFieldUid": null + }, + { + "__type": "Tiles", + "identifier": "Background", + "type": "Tiles", + "uid": 108, + "doc": null, + "uiColor": null, + "gridSize": 16, + "guideGridWid": 0, + "guideGridHei": 0, + "displayOpacity": 1, + "inactiveOpacity": 1, + "hideInList": false, + "hideFieldsWhenInactive": false, + "canSelectWhenInactive": true, + "renderInWorldView": true, + "pxOffsetX": 0, + "pxOffsetY": 0, + "parallaxFactorX": 0, + "parallaxFactorY": 0, + "parallaxScaling": true, + "requiredTags": [], + "excludedTags": [], + "autoTilesKilledByOtherLayerUid": null, + "uiFilterTags": [], + "useAsyncRender": false, + "intGridValues": [], + "intGridValuesGroups": [], + "autoRuleGroups": [], + "autoSourceLayerDefUid": null, + "tilesetDefUid": 107, + "tilePivotX": 0, + "tilePivotY": 0, + "biomeFieldUid": null + } + ], "entities": [ + { + "identifier": "One_way_platform", + "uid": 92, + "tags": [], + "exportToToc": false, + "allowOutOfBounds": false, + "doc": null, + "width": 16, + "height": 16, + "resizableX": true, + "resizableY": true, + "minWidth": 16, + "maxWidth": null, + "minHeight": 4, + "maxHeight": null, + "keepAspectRatio": false, + "tileOpacity": 1, + "fillOpacity": 1, + "lineOpacity": 1, + "hollow": false, + "color": "#BE4A2F", + "renderMode": "Rectangle", + "showName": true, + "tilesetId": null, + "tileRenderMode": "FitInside", + "tileRect": null, + "uiTileRect": null, + "nineSliceBorders": [], + "maxCount": 0, + "limitScope": "PerLevel", + "limitBehavior": "MoveLastOne", + "pivotX": 0, + "pivotY": 0, + "fieldDefs": [] + }, + { + "identifier": "Start", + "uid": 94, + "tags": [], + "exportToToc": false, + "allowOutOfBounds": false, + "doc": null, + "width": 16, + "height": 16, + "resizableX": false, + "resizableY": false, + "minWidth": null, + "maxWidth": null, + "minHeight": null, + "maxHeight": null, + "keepAspectRatio": false, + "tileOpacity": 1, + "fillOpacity": 1, + "lineOpacity": 1, + "hollow": false, + "color": "#6543D7", + "renderMode": "Rectangle", + "showName": true, + "tilesetId": null, + "tileRenderMode": "FitInside", + "tileRect": null, + "uiTileRect": null, + "nineSliceBorders": [], + "maxCount": 0, + "limitScope": "PerLevel", + "limitBehavior": "MoveLastOne", + "pivotX": 0, + "pivotY": 0, + "fieldDefs": [] + } + ], "tilesets": [ + { + "__cWid": 25, + "__cHei": 23, + "identifier": "Sunnyland", + "uid": 1, + "relPath": "../sunnyland/tileset.png", + "embedAtlas": null, + "pxWid": 400, + "pxHei": 368, + "tileGridSize": 16, + "spacing": 0, + "padding": 0, + "tags": [], + "tagsSourceEnumUid": null, + "enumTags": [], + "customData": [], + "savedSelections": [], + "cachedPixelData": { + "opaqueTiles": "00000000000000000000000000101010100010110110000000000000000000011011011011001010101000100000000000000000000000000010100000000010101010000001010001010000000000000000000000000000000010100000001010100000000000000000000000000000000000000000000010101000000010100100000000000000000000000000000000101010000000000000000000000000000000000000101010100000000000000000010101000001000000000101000010000000000000000010100000010011011100000001010000001001100000000001101100001110110101010000000000000000000000000000010110000111011101000000000011000011101110000000000000000000000000000000000", + "averageColors": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f9850000f9850000f9850000fa65000069557a65f8450000f644f9650000f965f644000049b5c9950000c99549b500000000000000000000000000000000000000000000000000000000f955f7450000f745f9550000f865f7450000f745f86500000000f9550000f6450000f9550000f845695500006955f845000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f8550000f85500000000000079a5000079a5000000000000f9550000f8550000f9550000f8457a6569550000000000000000f8550000f855000000000000f7550000f755000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000077a5000078b50000f8450000f7450000947400009474000000000000fa650000f9550000fa65000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f9550000f6450000f955000000000000000000000000a955f8450000f845a9550000f85500000000ca65b965000000000000000000000000000000000000000000000000000000000000a9550000a9550000000000000000000000000000000000000000fa650000f9550000fa650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f7450000f8550000f8550000f855000000000000000000000000000000000000000000000000000000000000000000000000f3440000f3450000f534000000000000e9950000f9950000e995000000000000000000000000b855f5340000f534b855000000000000f33400000000000000000000000000000000000000000000000000000000000000000000f7440000f744000000000000000000000000f43500000000f435f4350000f334f436f335000000000000000000000000b955f5340000f534b95500000000000000000000f34500000000f335f3350000000000000000000000000000000000000000f744f3340000f334f7440000000000000000f344f345f3440000f335f3350000f5340000f4350000f33400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fa650000f955f9550000000000000000f334f335f3450000f345f335f3340000f7550000000000000000000000000000000000000000f955f9550000000000000000f335f344f3440000f344f344f3350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + }, + { + "__cWid": 24, + "__cHei": 15, + "identifier": "Back", + "uid": 107, + "relPath": "../sunnyland/back.png", + "embedAtlas": null, + "pxWid": 384, + "pxHei": 240, + "tileGridSize": 16, + "spacing": 0, + "padding": 0, + "tags": [], + "tagsSourceEnumUid": null, + "enumTags": [], + "customData": [], + "savedSelections": [], + "cachedPixelData": { + "opaqueTiles": "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", + "averageColors": "f4eff4eff4eff4eff5eff7eff5eff5eff5eff6eff6eff6eff6eff5eff6eff6eff6eff6eff6eff7eff7eff6eff5eff4eff5eff7eff7eff6eff6eff7eff8eff7eff5eff6eff7eff7eff5eff6eff7eff7eff6eff7eff9eff7eff7eff7eff5eff4eff5eff8eff9eff9eff8eff7eff6eff8eff9eff7eff6eff9eff8eff8eff8effceffbeff8eff6eff8eff9eff9eff7eff4eff6eff8eff8eff8eff7eff8eff8eff9eff9eff7eff8eff7eff8effaeffceffceffceffceff9eff8eff7eff8eff6eff4eff5eff8effbeffbeff8eff7effceffceffceffbeff9effaeffbeffceffceffceffceffbeffbeffceffbeffceff9eff4eff8effceffceffceffceffbeffceffceffceffceffceffceffceffdeffceffbeffbeffceffceffceffbeffbeffbeff6effbeffceffceffceffbeffceffceffbeffceffbeffceffceffceffbeffbeffbeffbeffbeffbeffbeffbeffbeffbeffbeff6eef6eef6eef5eef6eef6eef6eef5eef6eef6eef6eef5eef6eef6eef6eef5eef6eef6eef6eef5eef6eef6eef6eef5eef3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3cff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bff3bf" + } + } + ], "enums": [], "externalEnums": [], "levelFields": [] }, + "levels": [ + { + "identifier": "Stage", + "iid": "a48ed0c0-d380-11f0-a69c-6511375700bf", + "uid": 0, + "worldX": 0, + "worldY": 0, + "worldDepth": 0, + "pxWid": 512, + "pxHei": 256, + "__bgColor": "#696A79", + "bgColor": null, + "useAutoIdentifier": false, + "bgRelPath": null, + "bgPos": null, + "bgPivotX": 0.5, + "bgPivotY": 0.5, + "__smartColor": "#ADADB5", + "__bgPos": null, + "externalRelPath": null, + "fieldInstances": [], + "layerInstances": [ + { + "__identifier": "Entities", + "__type": "Entities", + "__cWid": 32, + "__cHei": 16, + "__gridSize": 16, + "__opacity": 1, + "__pxTotalOffsetX": 0, + "__pxTotalOffsetY": 0, + "__tilesetDefUid": null, + "__tilesetRelPath": null, + "iid": "d12b1320-d380-11f0-a69c-459639b72f2e", + "levelId": 0, + "layerDefUid": 93, + "pxOffsetX": 0, + "pxOffsetY": 0, + "visible": true, + "optionalRules": [], + "intGridCsv": [], + "autoLayerTiles": [], + "seed": 2696159, + "overrideTilesetUid": null, + "gridTiles": [], + "entityInstances": [ + { + "__identifier": "One_way_platform", + "__grid": [5,8], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#BE4A2F", + "iid": "dc0257e0-d380-11f0-a69c-f3c92a38b57d", + "width": 64, + "height": 4, + "defUid": 92, + "px": [80,128], + "fieldInstances": [], + "__worldX": 80, + "__worldY": 128 + }, + { + "__identifier": "One_way_platform", + "__grid": [13,5], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#BE4A2F", + "iid": "e68cb520-d380-11f0-a69c-a57b52b096e9", + "width": 80, + "height": 4, + "defUid": 92, + "px": [208,80], + "fieldInstances": [], + "__worldX": 208, + "__worldY": 80 + }, + { + "__identifier": "One_way_platform", + "__grid": [22,8], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#BE4A2F", + "iid": "e8d14df0-d380-11f0-a69c-834d5fa3ce5c", + "width": 64, + "height": 4, + "defUid": 92, + "px": [352,128], + "fieldInstances": [], + "__worldX": 352, + "__worldY": 128 + }, + { + "__identifier": "Start", + "__grid": [6,6], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#6543D7", + "iid": "10f18570-d380-11f0-a69c-13ebff49b291", + "width": 16, + "height": 16, + "defUid": 94, + "px": [96,96], + "fieldInstances": [], + "__worldX": 96, + "__worldY": 96 + }, + { + "__identifier": "Start", + "__grid": [24,6], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#6543D7", + "iid": "119343b0-d380-11f0-a69c-5573405ca8e2", + "width": 16, + "height": 16, + "defUid": 94, + "px": [384,96], + "fieldInstances": [], + "__worldX": 384, + "__worldY": 96 + }, + { + "__identifier": "Start", + "__grid": [15,3], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#6543D7", + "iid": "12817440-d380-11f0-a69c-43651210f778", + "width": 16, + "height": 16, + "defUid": 94, + "px": [240,48], + "fieldInstances": [], + "__worldX": 240, + "__worldY": 48 + }, + { + "__identifier": "Start", + "__grid": [15,10], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#6543D7", + "iid": "133f4600-d380-11f0-a69c-0fe2575c3095", + "width": 16, + "height": 16, + "defUid": 94, + "px": [240,160], + "fieldInstances": [], + "__worldX": 240, + "__worldY": 160 + } + ] + }, + { + "__identifier": "IntGrid", + "__type": "IntGrid", + "__cWid": 32, + "__cHei": 16, + "__gridSize": 16, + "__opacity": 1, + "__pxTotalOffsetX": 0, + "__pxTotalOffsetY": 0, + "__tilesetDefUid": 1, + "__tilesetRelPath": "../sunnyland/tileset.png", + "iid": "c461a2b0-d380-11f0-a69c-bd8e7588af77", + "levelId": 0, + "layerDefUid": 2, + "pxOffsetX": 0, + "pxOffsetY": 0, + "visible": true, + "optionalRules": [], + "intGridCsv": [ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2, + 2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2, + 2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0 + ], + "autoLayerTiles": [ + { "px": [128,176], "src": [48,112], "f": 0, "t": 178, "d": [22,360], "a": 1 }, + { "px": [192,176], "src": [48,112], "f": 0, "t": 178, "d": [22,364], "a": 1 }, + { "px": [240,176], "src": [16,112], "f": 0, "t": 176, "d": [22,367], "a": 1 }, + { "px": [288,176], "src": [16,112], "f": 0, "t": 176, "d": [22,370], "a": 1 }, + { "px": [304,176], "src": [16,112], "f": 0, "t": 176, "d": [22,371], "a": 1 }, + { "px": [320,176], "src": [16,112], "f": 0, "t": 176, "d": [22,372], "a": 1 }, + { "px": [368,176], "src": [16,112], "f": 0, "t": 176, "d": [22,375], "a": 1 }, + { "px": [384,224], "src": [144,112], "f": 0, "t": 184, "d": [86,472], "a": 1 }, + { "px": [112,208], "src": [176,112], "f": 0, "t": 186, "d": [87,423], "a": 1 }, + { "px": [112,240], "src": [176,112], "f": 0, "t": 186, "d": [87,487], "a": 1 }, + { "px": [144,208], "src": [48,48], "f": 0, "t": 78, "d": [85,425], "a": 1 }, + { "px": [160,208], "src": [48,48], "f": 0, "t": 78, "d": [85,426], "a": 1 }, + { "px": [176,208], "src": [48,48], "f": 0, "t": 78, "d": [85,427], "a": 1 }, + { "px": [192,208], "src": [48,48], "f": 0, "t": 78, "d": [85,428], "a": 1 }, + { "px": [208,208], "src": [48,48], "f": 0, "t": 78, "d": [85,429], "a": 1 }, + { "px": [224,208], "src": [48,48], "f": 0, "t": 78, "d": [85,430], "a": 1 }, + { "px": [240,208], "src": [48,48], "f": 0, "t": 78, "d": [85,431], "a": 1 }, + { "px": [256,208], "src": [48,48], "f": 0, "t": 78, "d": [85,432], "a": 1 }, + { "px": [272,208], "src": [48,48], "f": 0, "t": 78, "d": [85,433], "a": 1 }, + { "px": [288,208], "src": [48,48], "f": 0, "t": 78, "d": [85,434], "a": 1 }, + { "px": [304,208], "src": [48,48], "f": 0, "t": 78, "d": [85,435], "a": 1 }, + { "px": [320,208], "src": [48,48], "f": 0, "t": 78, "d": [85,436], "a": 1 }, + { "px": [336,208], "src": [48,48], "f": 0, "t": 78, "d": [85,437], "a": 1 }, + { "px": [352,208], "src": [48,48], "f": 0, "t": 78, "d": [85,438], "a": 1 }, + { "px": [144,224], "src": [48,48], "f": 0, "t": 78, "d": [85,457], "a": 1 }, + { "px": [160,224], "src": [48,48], "f": 0, "t": 78, "d": [85,458], "a": 1 }, + { "px": [176,224], "src": [48,48], "f": 0, "t": 78, "d": [85,459], "a": 1 }, + { "px": [192,224], "src": [48,48], "f": 0, "t": 78, "d": [85,460], "a": 1 }, + { "px": [208,224], "src": [48,48], "f": 0, "t": 78, "d": [85,461], "a": 1 }, + { "px": [224,224], "src": [48,48], "f": 0, "t": 78, "d": [85,462], "a": 1 }, + { "px": [240,224], "src": [48,48], "f": 0, "t": 78, "d": [85,463], "a": 1 }, + { "px": [256,224], "src": [48,48], "f": 0, "t": 78, "d": [85,464], "a": 1 }, + { "px": [272,224], "src": [48,48], "f": 0, "t": 78, "d": [85,465], "a": 1 }, + { "px": [288,224], "src": [48,48], "f": 0, "t": 78, "d": [85,466], "a": 1 }, + { "px": [304,224], "src": [48,48], "f": 0, "t": 78, "d": [85,467], "a": 1 }, + { "px": [320,224], "src": [48,48], "f": 0, "t": 78, "d": [85,468], "a": 1 }, + { "px": [336,224], "src": [48,48], "f": 0, "t": 78, "d": [85,469], "a": 1 }, + { "px": [352,224], "src": [48,48], "f": 0, "t": 78, "d": [85,470], "a": 1 }, + { "px": [144,240], "src": [48,48], "f": 0, "t": 78, "d": [85,489], "a": 1 }, + { "px": [160,240], "src": [48,48], "f": 0, "t": 78, "d": [85,490], "a": 1 }, + { "px": [176,240], "src": [48,48], "f": 0, "t": 78, "d": [85,491], "a": 1 }, + { "px": [192,240], "src": [48,48], "f": 0, "t": 78, "d": [85,492], "a": 1 }, + { "px": [208,240], "src": [48,48], "f": 0, "t": 78, "d": [85,493], "a": 1 }, + { "px": [224,240], "src": [48,48], "f": 0, "t": 78, "d": [85,494], "a": 1 }, + { "px": [240,240], "src": [48,48], "f": 0, "t": 78, "d": [85,495], "a": 1 }, + { "px": [256,240], "src": [48,48], "f": 0, "t": 78, "d": [85,496], "a": 1 }, + { "px": [272,240], "src": [48,48], "f": 0, "t": 78, "d": [85,497], "a": 1 }, + { "px": [288,240], "src": [48,48], "f": 0, "t": 78, "d": [85,498], "a": 1 }, + { "px": [304,240], "src": [48,48], "f": 0, "t": 78, "d": [85,499], "a": 1 }, + { "px": [320,240], "src": [48,48], "f": 0, "t": 78, "d": [85,500], "a": 1 }, + { "px": [336,240], "src": [48,48], "f": 0, "t": 78, "d": [85,501], "a": 1 }, + { "px": [352,240], "src": [48,48], "f": 0, "t": 78, "d": [85,502], "a": 1 }, + { "px": [128,208], "src": [16,48], "f": 0, "t": 76, "d": [84,424], "a": 1 }, + { "px": [128,224], "src": [16,48], "f": 0, "t": 76, "d": [84,456], "a": 1 }, + { "px": [128,240], "src": [16,48], "f": 0, "t": 76, "d": [84,488], "a": 1 }, + { "px": [368,208], "src": [80,48], "f": 0, "t": 80, "d": [82,439], "a": 1 }, + { "px": [368,224], "src": [80,48], "f": 0, "t": 80, "d": [82,471], "a": 1 }, + { "px": [368,240], "src": [80,48], "f": 0, "t": 80, "d": [82,503], "a": 1 }, + { "px": [144,192], "src": [48,16], "f": 0, "t": 28, "d": [81,393], "a": 1 }, + { "px": [160,192], "src": [48,16], "f": 0, "t": 28, "d": [81,394], "a": 1 }, + { "px": [176,192], "src": [48,16], "f": 0, "t": 28, "d": [81,395], "a": 1 }, + { "px": [192,192], "src": [48,16], "f": 0, "t": 28, "d": [81,396], "a": 1 }, + { "px": [208,192], "src": [48,16], "f": 0, "t": 28, "d": [81,397], "a": 1 }, + { "px": [224,192], "src": [48,16], "f": 0, "t": 28, "d": [81,398], "a": 1 }, + { "px": [240,192], "src": [48,16], "f": 0, "t": 28, "d": [81,399], "a": 1 }, + { "px": [256,192], "src": [48,16], "f": 0, "t": 28, "d": [81,400], "a": 1 }, + { "px": [272,192], "src": [48,16], "f": 0, "t": 28, "d": [81,401], "a": 1 }, + { "px": [288,192], "src": [48,16], "f": 0, "t": 28, "d": [81,402], "a": 1 }, + { "px": [304,192], "src": [48,16], "f": 0, "t": 28, "d": [81,403], "a": 1 }, + { "px": [320,192], "src": [48,16], "f": 0, "t": 28, "d": [81,404], "a": 1 }, + { "px": [336,192], "src": [48,16], "f": 0, "t": 28, "d": [81,405], "a": 1 }, + { "px": [352,192], "src": [48,16], "f": 0, "t": 28, "d": [81,406], "a": 1 }, + { "px": [368,192], "src": [80,16], "f": 0, "t": 30, "d": [78,407], "a": 1 }, + { "px": [128,192], "src": [16,16], "f": 0, "t": 26, "d": [77,392], "a": 1 }, + { "px": [224,80], "src": [272,224], "f": 0, "t": 367, "d": [91,174], "a": 1 }, + { "px": [240,80], "src": [272,224], "f": 0, "t": 367, "d": [91,175], "a": 1 }, + { "px": [256,80], "src": [272,224], "f": 0, "t": 367, "d": [91,176], "a": 1 }, + { "px": [96,128], "src": [272,224], "f": 0, "t": 367, "d": [91,262], "a": 1 }, + { "px": [112,128], "src": [272,224], "f": 0, "t": 367, "d": [91,263], "a": 1 }, + { "px": [368,128], "src": [272,224], "f": 0, "t": 367, "d": [91,279], "a": 1 }, + { "px": [384,128], "src": [272,224], "f": 0, "t": 367, "d": [91,280], "a": 1 }, + { "px": [272,80], "src": [304,224], "f": 0, "t": 369, "d": [90,177], "a": 1 }, + { "px": [128,128], "src": [304,224], "f": 0, "t": 369, "d": [90,264], "a": 1 }, + { "px": [400,128], "src": [304,224], "f": 0, "t": 369, "d": [90,281], "a": 1 }, + { "px": [208,80], "src": [240,224], "f": 0, "t": 365, "d": [89,173], "a": 1 }, + { "px": [80,128], "src": [240,224], "f": 0, "t": 365, "d": [89,261], "a": 1 }, + { "px": [352,128], "src": [240,224], "f": 0, "t": 365, "d": [89,278], "a": 1 } + ], + "seed": 7598100, + "overrideTilesetUid": null, + "gridTiles": [], + "entityInstances": [] + }, + { + "__identifier": "Background", + "__type": "Tiles", + "__cWid": 32, + "__cHei": 16, + "__gridSize": 16, + "__opacity": 1, + "__pxTotalOffsetX": 0, + "__pxTotalOffsetY": 0, + "__tilesetDefUid": 107, + "__tilesetRelPath": "../sunnyland/back.png", + "iid": "40fafac0-d380-11f0-a69c-b185e3ad3620", + "levelId": 0, + "layerDefUid": 108, + "pxOffsetX": 0, + "pxOffsetY": 0, + "visible": true, + "optionalRules": [], + "intGridCsv": [], + "autoLayerTiles": [], + "seed": 8728425, + "overrideTilesetUid": null, + "gridTiles": [ + { "px": [0,0], "src": [0,0], "f": 0, "t": 0, "d": [0], "a": 1 }, + { "px": [16,0], "src": [16,0], "f": 0, "t": 1, "d": [1], "a": 1 }, + { "px": [32,0], "src": [32,0], "f": 0, "t": 2, "d": [2], "a": 1 }, + { "px": [48,0], "src": [48,0], "f": 0, "t": 3, "d": [3], "a": 1 }, + { "px": [64,0], "src": [64,0], "f": 0, "t": 4, "d": [4], "a": 1 }, + { "px": [80,0], "src": [80,0], "f": 0, "t": 5, "d": [5], "a": 1 }, + { "px": [96,0], "src": [96,0], "f": 0, "t": 6, "d": [6], "a": 1 }, + { "px": [112,0], "src": [112,0], "f": 0, "t": 7, "d": [7], "a": 1 }, + { "px": [128,0], "src": [128,0], "f": 0, "t": 8, "d": [8], "a": 1 }, + { "px": [144,0], "src": [144,0], "f": 0, "t": 9, "d": [9], "a": 1 }, + { "px": [160,0], "src": [160,0], "f": 0, "t": 10, "d": [10], "a": 1 }, + { "px": [176,0], "src": [176,0], "f": 0, "t": 11, "d": [11], "a": 1 }, + { "px": [192,0], "src": [192,0], "f": 0, "t": 12, "d": [12], "a": 1 }, + { "px": [208,0], "src": [208,0], "f": 0, "t": 13, "d": [13], "a": 1 }, + { "px": [224,0], "src": [224,0], "f": 0, "t": 14, "d": [14], "a": 1 }, + { "px": [240,0], "src": [240,0], "f": 0, "t": 15, "d": [15], "a": 1 }, + { "px": [256,0], "src": [256,0], "f": 0, "t": 16, "d": [16], "a": 1 }, + { "px": [272,0], "src": [272,0], "f": 0, "t": 17, "d": [17], "a": 1 }, + { "px": [288,0], "src": [288,0], "f": 0, "t": 18, "d": [18], "a": 1 }, + { "px": [304,0], "src": [304,0], "f": 0, "t": 19, "d": [19], "a": 1 }, + { "px": [320,0], "src": [320,0], "f": 0, "t": 20, "d": [20], "a": 1 }, + { "px": [336,0], "src": [336,0], "f": 0, "t": 21, "d": [21], "a": 1 }, + { "px": [352,0], "src": [352,0], "f": 0, "t": 22, "d": [22], "a": 1 }, + { "px": [368,0], "src": [368,0], "f": 0, "t": 23, "d": [23], "a": 1 }, + { "px": [384,0], "src": [0,0], "f": 0, "t": 0, "d": [24], "a": 1 }, + { "px": [400,0], "src": [16,0], "f": 0, "t": 1, "d": [25], "a": 1 }, + { "px": [416,0], "src": [32,0], "f": 0, "t": 2, "d": [26], "a": 1 }, + { "px": [432,0], "src": [48,0], "f": 0, "t": 3, "d": [27], "a": 1 }, + { "px": [448,0], "src": [64,0], "f": 0, "t": 4, "d": [28], "a": 1 }, + { "px": [464,0], "src": [80,0], "f": 0, "t": 5, "d": [29], "a": 1 }, + { "px": [480,0], "src": [96,0], "f": 0, "t": 6, "d": [30], "a": 1 }, + { "px": [496,0], "src": [112,0], "f": 0, "t": 7, "d": [31], "a": 1 }, + { "px": [0,16], "src": [0,16], "f": 0, "t": 24, "d": [32], "a": 1 }, + { "px": [16,16], "src": [16,16], "f": 0, "t": 25, "d": [33], "a": 1 }, + { "px": [32,16], "src": [32,16], "f": 0, "t": 26, "d": [34], "a": 1 }, + { "px": [48,16], "src": [48,16], "f": 0, "t": 27, "d": [35], "a": 1 }, + { "px": [64,16], "src": [64,16], "f": 0, "t": 28, "d": [36], "a": 1 }, + { "px": [80,16], "src": [80,16], "f": 0, "t": 29, "d": [37], "a": 1 }, + { "px": [96,16], "src": [96,16], "f": 0, "t": 30, "d": [38], "a": 1 }, + { "px": [112,16], "src": [112,16], "f": 0, "t": 31, "d": [39], "a": 1 }, + { "px": [128,16], "src": [128,16], "f": 0, "t": 32, "d": [40], "a": 1 }, + { "px": [144,16], "src": [144,16], "f": 0, "t": 33, "d": [41], "a": 1 }, + { "px": [160,16], "src": [160,16], "f": 0, "t": 34, "d": [42], "a": 1 }, + { "px": [176,16], "src": [176,16], "f": 0, "t": 35, "d": [43], "a": 1 }, + { "px": [192,16], "src": [192,16], "f": 0, "t": 36, "d": [44], "a": 1 }, + { "px": [208,16], "src": [208,16], "f": 0, "t": 37, "d": [45], "a": 1 }, + { "px": [224,16], "src": [224,16], "f": 0, "t": 38, "d": [46], "a": 1 }, + { "px": [240,16], "src": [240,16], "f": 0, "t": 39, "d": [47], "a": 1 }, + { "px": [256,16], "src": [256,16], "f": 0, "t": 40, "d": [48], "a": 1 }, + { "px": [272,16], "src": [272,16], "f": 0, "t": 41, "d": [49], "a": 1 }, + { "px": [288,16], "src": [288,16], "f": 0, "t": 42, "d": [50], "a": 1 }, + { "px": [304,16], "src": [304,16], "f": 0, "t": 43, "d": [51], "a": 1 }, + { "px": [320,16], "src": [320,16], "f": 0, "t": 44, "d": [52], "a": 1 }, + { "px": [336,16], "src": [336,16], "f": 0, "t": 45, "d": [53], "a": 1 }, + { "px": [352,16], "src": [352,16], "f": 0, "t": 46, "d": [54], "a": 1 }, + { "px": [368,16], "src": [368,16], "f": 0, "t": 47, "d": [55], "a": 1 }, + { "px": [384,16], "src": [0,16], "f": 0, "t": 24, "d": [56], "a": 1 }, + { "px": [400,16], "src": [16,16], "f": 0, "t": 25, "d": [57], "a": 1 }, + { "px": [416,16], "src": [32,16], "f": 0, "t": 26, "d": [58], "a": 1 }, + { "px": [432,16], "src": [48,16], "f": 0, "t": 27, "d": [59], "a": 1 }, + { "px": [448,16], "src": [64,16], "f": 0, "t": 28, "d": [60], "a": 1 }, + { "px": [464,16], "src": [80,16], "f": 0, "t": 29, "d": [61], "a": 1 }, + { "px": [480,16], "src": [96,16], "f": 0, "t": 30, "d": [62], "a": 1 }, + { "px": [496,16], "src": [112,16], "f": 0, "t": 31, "d": [63], "a": 1 }, + { "px": [0,32], "src": [0,32], "f": 0, "t": 48, "d": [64], "a": 1 }, + { "px": [16,32], "src": [16,32], "f": 0, "t": 49, "d": [65], "a": 1 }, + { "px": [32,32], "src": [32,32], "f": 0, "t": 50, "d": [66], "a": 1 }, + { "px": [48,32], "src": [48,32], "f": 0, "t": 51, "d": [67], "a": 1 }, + { "px": [64,32], "src": [64,32], "f": 0, "t": 52, "d": [68], "a": 1 }, + { "px": [80,32], "src": [80,32], "f": 0, "t": 53, "d": [69], "a": 1 }, + { "px": [96,32], "src": [96,32], "f": 0, "t": 54, "d": [70], "a": 1 }, + { "px": [112,32], "src": [112,32], "f": 0, "t": 55, "d": [71], "a": 1 }, + { "px": [128,32], "src": [128,32], "f": 0, "t": 56, "d": [72], "a": 1 }, + { "px": [144,32], "src": [144,32], "f": 0, "t": 57, "d": [73], "a": 1 }, + { "px": [160,32], "src": [160,32], "f": 0, "t": 58, "d": [74], "a": 1 }, + { "px": [176,32], "src": [176,32], "f": 0, "t": 59, "d": [75], "a": 1 }, + { "px": [192,32], "src": [192,32], "f": 0, "t": 60, "d": [76], "a": 1 }, + { "px": [208,32], "src": [208,32], "f": 0, "t": 61, "d": [77], "a": 1 }, + { "px": [224,32], "src": [224,32], "f": 0, "t": 62, "d": [78], "a": 1 }, + { "px": [240,32], "src": [240,32], "f": 0, "t": 63, "d": [79], "a": 1 }, + { "px": [256,32], "src": [256,32], "f": 0, "t": 64, "d": [80], "a": 1 }, + { "px": [272,32], "src": [272,32], "f": 0, "t": 65, "d": [81], "a": 1 }, + { "px": [288,32], "src": [288,32], "f": 0, "t": 66, "d": [82], "a": 1 }, + { "px": [304,32], "src": [304,32], "f": 0, "t": 67, "d": [83], "a": 1 }, + { "px": [320,32], "src": [320,32], "f": 0, "t": 68, "d": [84], "a": 1 }, + { "px": [336,32], "src": [336,32], "f": 0, "t": 69, "d": [85], "a": 1 }, + { "px": [352,32], "src": [352,32], "f": 0, "t": 70, "d": [86], "a": 1 }, + { "px": [368,32], "src": [368,32], "f": 0, "t": 71, "d": [87], "a": 1 }, + { "px": [384,32], "src": [0,32], "f": 0, "t": 48, "d": [88], "a": 1 }, + { "px": [400,32], "src": [16,32], "f": 0, "t": 49, "d": [89], "a": 1 }, + { "px": [416,32], "src": [32,32], "f": 0, "t": 50, "d": [90], "a": 1 }, + { "px": [432,32], "src": [48,32], "f": 0, "t": 51, "d": [91], "a": 1 }, + { "px": [448,32], "src": [64,32], "f": 0, "t": 52, "d": [92], "a": 1 }, + { "px": [464,32], "src": [80,32], "f": 0, "t": 53, "d": [93], "a": 1 }, + { "px": [480,32], "src": [96,32], "f": 0, "t": 54, "d": [94], "a": 1 }, + { "px": [496,32], "src": [112,32], "f": 0, "t": 55, "d": [95], "a": 1 }, + { "px": [0,48], "src": [0,48], "f": 0, "t": 72, "d": [96], "a": 1 }, + { "px": [16,48], "src": [16,48], "f": 0, "t": 73, "d": [97], "a": 1 }, + { "px": [32,48], "src": [32,48], "f": 0, "t": 74, "d": [98], "a": 1 }, + { "px": [48,48], "src": [48,48], "f": 0, "t": 75, "d": [99], "a": 1 }, + { "px": [64,48], "src": [64,48], "f": 0, "t": 76, "d": [100], "a": 1 }, + { "px": [80,48], "src": [80,48], "f": 0, "t": 77, "d": [101], "a": 1 }, + { "px": [96,48], "src": [96,48], "f": 0, "t": 78, "d": [102], "a": 1 }, + { "px": [112,48], "src": [112,48], "f": 0, "t": 79, "d": [103], "a": 1 }, + { "px": [128,48], "src": [128,48], "f": 0, "t": 80, "d": [104], "a": 1 }, + { "px": [144,48], "src": [144,48], "f": 0, "t": 81, "d": [105], "a": 1 }, + { "px": [160,48], "src": [160,48], "f": 0, "t": 82, "d": [106], "a": 1 }, + { "px": [176,48], "src": [176,48], "f": 0, "t": 83, "d": [107], "a": 1 }, + { "px": [192,48], "src": [192,48], "f": 0, "t": 84, "d": [108], "a": 1 }, + { "px": [208,48], "src": [208,48], "f": 0, "t": 85, "d": [109], "a": 1 }, + { "px": [224,48], "src": [224,48], "f": 0, "t": 86, "d": [110], "a": 1 }, + { "px": [240,48], "src": [240,48], "f": 0, "t": 87, "d": [111], "a": 1 }, + { "px": [256,48], "src": [256,48], "f": 0, "t": 88, "d": [112], "a": 1 }, + { "px": [272,48], "src": [272,48], "f": 0, "t": 89, "d": [113], "a": 1 }, + { "px": [288,48], "src": [288,48], "f": 0, "t": 90, "d": [114], "a": 1 }, + { "px": [304,48], "src": [304,48], "f": 0, "t": 91, "d": [115], "a": 1 }, + { "px": [320,48], "src": [320,48], "f": 0, "t": 92, "d": [116], "a": 1 }, + { "px": [336,48], "src": [336,48], "f": 0, "t": 93, "d": [117], "a": 1 }, + { "px": [352,48], "src": [352,48], "f": 0, "t": 94, "d": [118], "a": 1 }, + { "px": [368,48], "src": [368,48], "f": 0, "t": 95, "d": [119], "a": 1 }, + { "px": [384,48], "src": [0,48], "f": 0, "t": 72, "d": [120], "a": 1 }, + { "px": [400,48], "src": [16,48], "f": 0, "t": 73, "d": [121], "a": 1 }, + { "px": [416,48], "src": [32,48], "f": 0, "t": 74, "d": [122], "a": 1 }, + { "px": [432,48], "src": [48,48], "f": 0, "t": 75, "d": [123], "a": 1 }, + { "px": [448,48], "src": [64,48], "f": 0, "t": 76, "d": [124], "a": 1 }, + { "px": [464,48], "src": [80,48], "f": 0, "t": 77, "d": [125], "a": 1 }, + { "px": [480,48], "src": [96,48], "f": 0, "t": 78, "d": [126], "a": 1 }, + { "px": [496,48], "src": [112,48], "f": 0, "t": 79, "d": [127], "a": 1 }, + { "px": [0,64], "src": [0,64], "f": 0, "t": 96, "d": [128], "a": 1 }, + { "px": [16,64], "src": [16,64], "f": 0, "t": 97, "d": [129], "a": 1 }, + { "px": [32,64], "src": [32,64], "f": 0, "t": 98, "d": [130], "a": 1 }, + { "px": [48,64], "src": [48,64], "f": 0, "t": 99, "d": [131], "a": 1 }, + { "px": [64,64], "src": [64,64], "f": 0, "t": 100, "d": [132], "a": 1 }, + { "px": [80,64], "src": [80,64], "f": 0, "t": 101, "d": [133], "a": 1 }, + { "px": [96,64], "src": [96,64], "f": 0, "t": 102, "d": [134], "a": 1 }, + { "px": [112,64], "src": [112,64], "f": 0, "t": 103, "d": [135], "a": 1 }, + { "px": [128,64], "src": [128,64], "f": 0, "t": 104, "d": [136], "a": 1 }, + { "px": [144,64], "src": [144,64], "f": 0, "t": 105, "d": [137], "a": 1 }, + { "px": [160,64], "src": [160,64], "f": 0, "t": 106, "d": [138], "a": 1 }, + { "px": [176,64], "src": [176,64], "f": 0, "t": 107, "d": [139], "a": 1 }, + { "px": [192,64], "src": [192,64], "f": 0, "t": 108, "d": [140], "a": 1 }, + { "px": [208,64], "src": [208,64], "f": 0, "t": 109, "d": [141], "a": 1 }, + { "px": [224,64], "src": [224,64], "f": 0, "t": 110, "d": [142], "a": 1 }, + { "px": [240,64], "src": [240,64], "f": 0, "t": 111, "d": [143], "a": 1 }, + { "px": [256,64], "src": [256,64], "f": 0, "t": 112, "d": [144], "a": 1 }, + { "px": [272,64], "src": [272,64], "f": 0, "t": 113, "d": [145], "a": 1 }, + { "px": [288,64], "src": [288,64], "f": 0, "t": 114, "d": [146], "a": 1 }, + { "px": [304,64], "src": [304,64], "f": 0, "t": 115, "d": [147], "a": 1 }, + { "px": [320,64], "src": [320,64], "f": 0, "t": 116, "d": [148], "a": 1 }, + { "px": [336,64], "src": [336,64], "f": 0, "t": 117, "d": [149], "a": 1 }, + { "px": [352,64], "src": [352,64], "f": 0, "t": 118, "d": [150], "a": 1 }, + { "px": [368,64], "src": [368,64], "f": 0, "t": 119, "d": [151], "a": 1 }, + { "px": [384,64], "src": [0,64], "f": 0, "t": 96, "d": [152], "a": 1 }, + { "px": [400,64], "src": [16,64], "f": 0, "t": 97, "d": [153], "a": 1 }, + { "px": [416,64], "src": [32,64], "f": 0, "t": 98, "d": [154], "a": 1 }, + { "px": [432,64], "src": [48,64], "f": 0, "t": 99, "d": [155], "a": 1 }, + { "px": [448,64], "src": [64,64], "f": 0, "t": 100, "d": [156], "a": 1 }, + { "px": [464,64], "src": [80,64], "f": 0, "t": 101, "d": [157], "a": 1 }, + { "px": [480,64], "src": [96,64], "f": 0, "t": 102, "d": [158], "a": 1 }, + { "px": [496,64], "src": [112,64], "f": 0, "t": 103, "d": [159], "a": 1 }, + { "px": [0,80], "src": [0,80], "f": 0, "t": 120, "d": [160], "a": 1 }, + { "px": [16,80], "src": [16,80], "f": 0, "t": 121, "d": [161], "a": 1 }, + { "px": [32,80], "src": [32,80], "f": 0, "t": 122, "d": [162], "a": 1 }, + { "px": [48,80], "src": [48,80], "f": 0, "t": 123, "d": [163], "a": 1 }, + { "px": [64,80], "src": [64,80], "f": 0, "t": 124, "d": [164], "a": 1 }, + { "px": [80,80], "src": [80,80], "f": 0, "t": 125, "d": [165], "a": 1 }, + { "px": [96,80], "src": [96,80], "f": 0, "t": 126, "d": [166], "a": 1 }, + { "px": [112,80], "src": [112,80], "f": 0, "t": 127, "d": [167], "a": 1 }, + { "px": [128,80], "src": [128,80], "f": 0, "t": 128, "d": [168], "a": 1 }, + { "px": [144,80], "src": [144,80], "f": 0, "t": 129, "d": [169], "a": 1 }, + { "px": [160,80], "src": [160,80], "f": 0, "t": 130, "d": [170], "a": 1 }, + { "px": [176,80], "src": [176,80], "f": 0, "t": 131, "d": [171], "a": 1 }, + { "px": [192,80], "src": [192,80], "f": 0, "t": 132, "d": [172], "a": 1 }, + { "px": [208,80], "src": [208,80], "f": 0, "t": 133, "d": [173], "a": 1 }, + { "px": [224,80], "src": [224,80], "f": 0, "t": 134, "d": [174], "a": 1 }, + { "px": [240,80], "src": [240,80], "f": 0, "t": 135, "d": [175], "a": 1 }, + { "px": [256,80], "src": [256,80], "f": 0, "t": 136, "d": [176], "a": 1 }, + { "px": [272,80], "src": [272,80], "f": 0, "t": 137, "d": [177], "a": 1 }, + { "px": [288,80], "src": [288,80], "f": 0, "t": 138, "d": [178], "a": 1 }, + { "px": [304,80], "src": [304,80], "f": 0, "t": 139, "d": [179], "a": 1 }, + { "px": [320,80], "src": [320,80], "f": 0, "t": 140, "d": [180], "a": 1 }, + { "px": [336,80], "src": [336,80], "f": 0, "t": 141, "d": [181], "a": 1 }, + { "px": [352,80], "src": [352,80], "f": 0, "t": 142, "d": [182], "a": 1 }, + { "px": [368,80], "src": [368,80], "f": 0, "t": 143, "d": [183], "a": 1 }, + { "px": [384,80], "src": [0,80], "f": 0, "t": 120, "d": [184], "a": 1 }, + { "px": [400,80], "src": [16,80], "f": 0, "t": 121, "d": [185], "a": 1 }, + { "px": [416,80], "src": [32,80], "f": 0, "t": 122, "d": [186], "a": 1 }, + { "px": [432,80], "src": [48,80], "f": 0, "t": 123, "d": [187], "a": 1 }, + { "px": [448,80], "src": [64,80], "f": 0, "t": 124, "d": [188], "a": 1 }, + { "px": [464,80], "src": [80,80], "f": 0, "t": 125, "d": [189], "a": 1 }, + { "px": [480,80], "src": [96,80], "f": 0, "t": 126, "d": [190], "a": 1 }, + { "px": [496,80], "src": [112,80], "f": 0, "t": 127, "d": [191], "a": 1 }, + { "px": [0,96], "src": [0,96], "f": 0, "t": 144, "d": [192], "a": 1 }, + { "px": [16,96], "src": [16,96], "f": 0, "t": 145, "d": [193], "a": 1 }, + { "px": [32,96], "src": [32,96], "f": 0, "t": 146, "d": [194], "a": 1 }, + { "px": [48,96], "src": [48,96], "f": 0, "t": 147, "d": [195], "a": 1 }, + { "px": [64,96], "src": [64,96], "f": 0, "t": 148, "d": [196], "a": 1 }, + { "px": [80,96], "src": [80,96], "f": 0, "t": 149, "d": [197], "a": 1 }, + { "px": [96,96], "src": [96,96], "f": 0, "t": 150, "d": [198], "a": 1 }, + { "px": [112,96], "src": [112,96], "f": 0, "t": 151, "d": [199], "a": 1 }, + { "px": [128,96], "src": [128,96], "f": 0, "t": 152, "d": [200], "a": 1 }, + { "px": [144,96], "src": [144,96], "f": 0, "t": 153, "d": [201], "a": 1 }, + { "px": [160,96], "src": [160,96], "f": 0, "t": 154, "d": [202], "a": 1 }, + { "px": [176,96], "src": [176,96], "f": 0, "t": 155, "d": [203], "a": 1 }, + { "px": [192,96], "src": [192,96], "f": 0, "t": 156, "d": [204], "a": 1 }, + { "px": [208,96], "src": [208,96], "f": 0, "t": 157, "d": [205], "a": 1 }, + { "px": [224,96], "src": [224,96], "f": 0, "t": 158, "d": [206], "a": 1 }, + { "px": [240,96], "src": [240,96], "f": 0, "t": 159, "d": [207], "a": 1 }, + { "px": [256,96], "src": [256,96], "f": 0, "t": 160, "d": [208], "a": 1 }, + { "px": [272,96], "src": [272,96], "f": 0, "t": 161, "d": [209], "a": 1 }, + { "px": [288,96], "src": [288,96], "f": 0, "t": 162, "d": [210], "a": 1 }, + { "px": [304,96], "src": [304,96], "f": 0, "t": 163, "d": [211], "a": 1 }, + { "px": [320,96], "src": [320,96], "f": 0, "t": 164, "d": [212], "a": 1 }, + { "px": [336,96], "src": [336,96], "f": 0, "t": 165, "d": [213], "a": 1 }, + { "px": [352,96], "src": [352,96], "f": 0, "t": 166, "d": [214], "a": 1 }, + { "px": [368,96], "src": [368,96], "f": 0, "t": 167, "d": [215], "a": 1 }, + { "px": [384,96], "src": [0,96], "f": 0, "t": 144, "d": [216], "a": 1 }, + { "px": [400,96], "src": [16,96], "f": 0, "t": 145, "d": [217], "a": 1 }, + { "px": [416,96], "src": [32,96], "f": 0, "t": 146, "d": [218], "a": 1 }, + { "px": [432,96], "src": [48,96], "f": 0, "t": 147, "d": [219], "a": 1 }, + { "px": [448,96], "src": [64,96], "f": 0, "t": 148, "d": [220], "a": 1 }, + { "px": [464,96], "src": [80,96], "f": 0, "t": 149, "d": [221], "a": 1 }, + { "px": [480,96], "src": [96,96], "f": 0, "t": 150, "d": [222], "a": 1 }, + { "px": [496,96], "src": [112,96], "f": 0, "t": 151, "d": [223], "a": 1 }, + { "px": [0,112], "src": [0,112], "f": 0, "t": 168, "d": [224], "a": 1 }, + { "px": [16,112], "src": [16,112], "f": 0, "t": 169, "d": [225], "a": 1 }, + { "px": [32,112], "src": [32,112], "f": 0, "t": 170, "d": [226], "a": 1 }, + { "px": [48,112], "src": [48,112], "f": 0, "t": 171, "d": [227], "a": 1 }, + { "px": [64,112], "src": [64,112], "f": 0, "t": 172, "d": [228], "a": 1 }, + { "px": [80,112], "src": [80,112], "f": 0, "t": 173, "d": [229], "a": 1 }, + { "px": [96,112], "src": [96,112], "f": 0, "t": 174, "d": [230], "a": 1 }, + { "px": [112,112], "src": [112,112], "f": 0, "t": 175, "d": [231], "a": 1 }, + { "px": [128,112], "src": [128,112], "f": 0, "t": 176, "d": [232], "a": 1 }, + { "px": [144,112], "src": [144,112], "f": 0, "t": 177, "d": [233], "a": 1 }, + { "px": [160,112], "src": [160,112], "f": 0, "t": 178, "d": [234], "a": 1 }, + { "px": [176,112], "src": [176,112], "f": 0, "t": 179, "d": [235], "a": 1 }, + { "px": [192,112], "src": [192,112], "f": 0, "t": 180, "d": [236], "a": 1 }, + { "px": [208,112], "src": [208,112], "f": 0, "t": 181, "d": [237], "a": 1 }, + { "px": [224,112], "src": [224,112], "f": 0, "t": 182, "d": [238], "a": 1 }, + { "px": [240,112], "src": [240,112], "f": 0, "t": 183, "d": [239], "a": 1 }, + { "px": [256,112], "src": [256,112], "f": 0, "t": 184, "d": [240], "a": 1 }, + { "px": [272,112], "src": [272,112], "f": 0, "t": 185, "d": [241], "a": 1 }, + { "px": [288,112], "src": [288,112], "f": 0, "t": 186, "d": [242], "a": 1 }, + { "px": [304,112], "src": [304,112], "f": 0, "t": 187, "d": [243], "a": 1 }, + { "px": [320,112], "src": [320,112], "f": 0, "t": 188, "d": [244], "a": 1 }, + { "px": [336,112], "src": [336,112], "f": 0, "t": 189, "d": [245], "a": 1 }, + { "px": [352,112], "src": [352,112], "f": 0, "t": 190, "d": [246], "a": 1 }, + { "px": [368,112], "src": [368,112], "f": 0, "t": 191, "d": [247], "a": 1 }, + { "px": [384,112], "src": [0,112], "f": 0, "t": 168, "d": [248], "a": 1 }, + { "px": [400,112], "src": [16,112], "f": 0, "t": 169, "d": [249], "a": 1 }, + { "px": [416,112], "src": [32,112], "f": 0, "t": 170, "d": [250], "a": 1 }, + { "px": [432,112], "src": [48,112], "f": 0, "t": 171, "d": [251], "a": 1 }, + { "px": [448,112], "src": [64,112], "f": 0, "t": 172, "d": [252], "a": 1 }, + { "px": [464,112], "src": [80,112], "f": 0, "t": 173, "d": [253], "a": 1 }, + { "px": [480,112], "src": [96,112], "f": 0, "t": 174, "d": [254], "a": 1 }, + { "px": [496,112], "src": [112,112], "f": 0, "t": 175, "d": [255], "a": 1 }, + { "px": [0,128], "src": [0,128], "f": 0, "t": 192, "d": [256], "a": 1 }, + { "px": [16,128], "src": [16,128], "f": 0, "t": 193, "d": [257], "a": 1 }, + { "px": [32,128], "src": [32,128], "f": 0, "t": 194, "d": [258], "a": 1 }, + { "px": [48,128], "src": [48,128], "f": 0, "t": 195, "d": [259], "a": 1 }, + { "px": [64,128], "src": [64,128], "f": 0, "t": 196, "d": [260], "a": 1 }, + { "px": [80,128], "src": [80,128], "f": 0, "t": 197, "d": [261], "a": 1 }, + { "px": [96,128], "src": [96,128], "f": 0, "t": 198, "d": [262], "a": 1 }, + { "px": [112,128], "src": [112,128], "f": 0, "t": 199, "d": [263], "a": 1 }, + { "px": [128,128], "src": [128,128], "f": 0, "t": 200, "d": [264], "a": 1 }, + { "px": [144,128], "src": [144,128], "f": 0, "t": 201, "d": [265], "a": 1 }, + { "px": [160,128], "src": [160,128], "f": 0, "t": 202, "d": [266], "a": 1 }, + { "px": [176,128], "src": [176,128], "f": 0, "t": 203, "d": [267], "a": 1 }, + { "px": [192,128], "src": [192,128], "f": 0, "t": 204, "d": [268], "a": 1 }, + { "px": [208,128], "src": [208,128], "f": 0, "t": 205, "d": [269], "a": 1 }, + { "px": [224,128], "src": [224,128], "f": 0, "t": 206, "d": [270], "a": 1 }, + { "px": [240,128], "src": [240,128], "f": 0, "t": 207, "d": [271], "a": 1 }, + { "px": [256,128], "src": [256,128], "f": 0, "t": 208, "d": [272], "a": 1 }, + { "px": [272,128], "src": [272,128], "f": 0, "t": 209, "d": [273], "a": 1 }, + { "px": [288,128], "src": [288,128], "f": 0, "t": 210, "d": [274], "a": 1 }, + { "px": [304,128], "src": [304,128], "f": 0, "t": 211, "d": [275], "a": 1 }, + { "px": [320,128], "src": [320,128], "f": 0, "t": 212, "d": [276], "a": 1 }, + { "px": [336,128], "src": [336,128], "f": 0, "t": 213, "d": [277], "a": 1 }, + { "px": [352,128], "src": [352,128], "f": 0, "t": 214, "d": [278], "a": 1 }, + { "px": [368,128], "src": [368,128], "f": 0, "t": 215, "d": [279], "a": 1 }, + { "px": [384,128], "src": [0,128], "f": 0, "t": 192, "d": [280], "a": 1 }, + { "px": [400,128], "src": [16,128], "f": 0, "t": 193, "d": [281], "a": 1 }, + { "px": [416,128], "src": [32,128], "f": 0, "t": 194, "d": [282], "a": 1 }, + { "px": [432,128], "src": [48,128], "f": 0, "t": 195, "d": [283], "a": 1 }, + { "px": [448,128], "src": [64,128], "f": 0, "t": 196, "d": [284], "a": 1 }, + { "px": [464,128], "src": [80,128], "f": 0, "t": 197, "d": [285], "a": 1 }, + { "px": [480,128], "src": [96,128], "f": 0, "t": 198, "d": [286], "a": 1 }, + { "px": [496,128], "src": [112,128], "f": 0, "t": 199, "d": [287], "a": 1 }, + { "px": [0,144], "src": [0,144], "f": 0, "t": 216, "d": [288], "a": 1 }, + { "px": [16,144], "src": [16,144], "f": 0, "t": 217, "d": [289], "a": 1 }, + { "px": [32,144], "src": [32,144], "f": 0, "t": 218, "d": [290], "a": 1 }, + { "px": [48,144], "src": [48,144], "f": 0, "t": 219, "d": [291], "a": 1 }, + { "px": [64,144], "src": [64,144], "f": 0, "t": 220, "d": [292], "a": 1 }, + { "px": [80,144], "src": [80,144], "f": 0, "t": 221, "d": [293], "a": 1 }, + { "px": [96,144], "src": [96,144], "f": 0, "t": 222, "d": [294], "a": 1 }, + { "px": [112,144], "src": [112,144], "f": 0, "t": 223, "d": [295], "a": 1 }, + { "px": [128,144], "src": [128,144], "f": 0, "t": 224, "d": [296], "a": 1 }, + { "px": [144,144], "src": [144,144], "f": 0, "t": 225, "d": [297], "a": 1 }, + { "px": [160,144], "src": [160,144], "f": 0, "t": 226, "d": [298], "a": 1 }, + { "px": [176,144], "src": [176,144], "f": 0, "t": 227, "d": [299], "a": 1 }, + { "px": [192,144], "src": [192,144], "f": 0, "t": 228, "d": [300], "a": 1 }, + { "px": [208,144], "src": [208,144], "f": 0, "t": 229, "d": [301], "a": 1 }, + { "px": [224,144], "src": [224,144], "f": 0, "t": 230, "d": [302], "a": 1 }, + { "px": [240,144], "src": [240,144], "f": 0, "t": 231, "d": [303], "a": 1 }, + { "px": [256,144], "src": [256,144], "f": 0, "t": 232, "d": [304], "a": 1 }, + { "px": [272,144], "src": [272,144], "f": 0, "t": 233, "d": [305], "a": 1 }, + { "px": [288,144], "src": [288,144], "f": 0, "t": 234, "d": [306], "a": 1 }, + { "px": [304,144], "src": [304,144], "f": 0, "t": 235, "d": [307], "a": 1 }, + { "px": [320,144], "src": [320,144], "f": 0, "t": 236, "d": [308], "a": 1 }, + { "px": [336,144], "src": [336,144], "f": 0, "t": 237, "d": [309], "a": 1 }, + { "px": [352,144], "src": [352,144], "f": 0, "t": 238, "d": [310], "a": 1 }, + { "px": [368,144], "src": [368,144], "f": 0, "t": 239, "d": [311], "a": 1 }, + { "px": [384,144], "src": [0,144], "f": 0, "t": 216, "d": [312], "a": 1 }, + { "px": [400,144], "src": [16,144], "f": 0, "t": 217, "d": [313], "a": 1 }, + { "px": [416,144], "src": [32,144], "f": 0, "t": 218, "d": [314], "a": 1 }, + { "px": [432,144], "src": [48,144], "f": 0, "t": 219, "d": [315], "a": 1 }, + { "px": [448,144], "src": [64,144], "f": 0, "t": 220, "d": [316], "a": 1 }, + { "px": [464,144], "src": [80,144], "f": 0, "t": 221, "d": [317], "a": 1 }, + { "px": [480,144], "src": [96,144], "f": 0, "t": 222, "d": [318], "a": 1 }, + { "px": [496,144], "src": [112,144], "f": 0, "t": 223, "d": [319], "a": 1 }, + { "px": [0,160], "src": [0,160], "f": 0, "t": 240, "d": [320], "a": 1 }, + { "px": [16,160], "src": [16,160], "f": 0, "t": 241, "d": [321], "a": 1 }, + { "px": [32,160], "src": [32,160], "f": 0, "t": 242, "d": [322], "a": 1 }, + { "px": [48,160], "src": [48,160], "f": 0, "t": 243, "d": [323], "a": 1 }, + { "px": [64,160], "src": [64,160], "f": 0, "t": 244, "d": [324], "a": 1 }, + { "px": [80,160], "src": [80,160], "f": 0, "t": 245, "d": [325], "a": 1 }, + { "px": [96,160], "src": [96,160], "f": 0, "t": 246, "d": [326], "a": 1 }, + { "px": [112,160], "src": [112,160], "f": 0, "t": 247, "d": [327], "a": 1 }, + { "px": [128,160], "src": [128,160], "f": 0, "t": 248, "d": [328], "a": 1 }, + { "px": [144,160], "src": [144,160], "f": 0, "t": 249, "d": [329], "a": 1 }, + { "px": [160,160], "src": [160,160], "f": 0, "t": 250, "d": [330], "a": 1 }, + { "px": [176,160], "src": [176,160], "f": 0, "t": 251, "d": [331], "a": 1 }, + { "px": [192,160], "src": [192,160], "f": 0, "t": 252, "d": [332], "a": 1 }, + { "px": [208,160], "src": [208,160], "f": 0, "t": 253, "d": [333], "a": 1 }, + { "px": [224,160], "src": [224,160], "f": 0, "t": 254, "d": [334], "a": 1 }, + { "px": [240,160], "src": [240,160], "f": 0, "t": 255, "d": [335], "a": 1 }, + { "px": [256,160], "src": [256,160], "f": 0, "t": 256, "d": [336], "a": 1 }, + { "px": [272,160], "src": [272,160], "f": 0, "t": 257, "d": [337], "a": 1 }, + { "px": [288,160], "src": [288,160], "f": 0, "t": 258, "d": [338], "a": 1 }, + { "px": [304,160], "src": [304,160], "f": 0, "t": 259, "d": [339], "a": 1 }, + { "px": [320,160], "src": [320,160], "f": 0, "t": 260, "d": [340], "a": 1 }, + { "px": [336,160], "src": [336,160], "f": 0, "t": 261, "d": [341], "a": 1 }, + { "px": [352,160], "src": [352,160], "f": 0, "t": 262, "d": [342], "a": 1 }, + { "px": [368,160], "src": [368,160], "f": 0, "t": 263, "d": [343], "a": 1 }, + { "px": [384,160], "src": [0,160], "f": 0, "t": 240, "d": [344], "a": 1 }, + { "px": [400,160], "src": [16,160], "f": 0, "t": 241, "d": [345], "a": 1 }, + { "px": [416,160], "src": [32,160], "f": 0, "t": 242, "d": [346], "a": 1 }, + { "px": [432,160], "src": [48,160], "f": 0, "t": 243, "d": [347], "a": 1 }, + { "px": [448,160], "src": [64,160], "f": 0, "t": 244, "d": [348], "a": 1 }, + { "px": [464,160], "src": [80,160], "f": 0, "t": 245, "d": [349], "a": 1 }, + { "px": [480,160], "src": [96,160], "f": 0, "t": 246, "d": [350], "a": 1 }, + { "px": [496,160], "src": [112,160], "f": 0, "t": 247, "d": [351], "a": 1 }, + { "px": [0,176], "src": [0,176], "f": 0, "t": 264, "d": [352], "a": 1 }, + { "px": [16,176], "src": [16,176], "f": 0, "t": 265, "d": [353], "a": 1 }, + { "px": [32,176], "src": [32,176], "f": 0, "t": 266, "d": [354], "a": 1 }, + { "px": [48,176], "src": [48,176], "f": 0, "t": 267, "d": [355], "a": 1 }, + { "px": [64,176], "src": [64,176], "f": 0, "t": 268, "d": [356], "a": 1 }, + { "px": [80,176], "src": [80,176], "f": 0, "t": 269, "d": [357], "a": 1 }, + { "px": [96,176], "src": [96,176], "f": 0, "t": 270, "d": [358], "a": 1 }, + { "px": [112,176], "src": [112,176], "f": 0, "t": 271, "d": [359], "a": 1 }, + { "px": [128,176], "src": [128,176], "f": 0, "t": 272, "d": [360], "a": 1 }, + { "px": [144,176], "src": [144,176], "f": 0, "t": 273, "d": [361], "a": 1 }, + { "px": [160,176], "src": [160,176], "f": 0, "t": 274, "d": [362], "a": 1 }, + { "px": [176,176], "src": [176,176], "f": 0, "t": 275, "d": [363], "a": 1 }, + { "px": [192,176], "src": [192,176], "f": 0, "t": 276, "d": [364], "a": 1 }, + { "px": [208,176], "src": [208,176], "f": 0, "t": 277, "d": [365], "a": 1 }, + { "px": [224,176], "src": [224,176], "f": 0, "t": 278, "d": [366], "a": 1 }, + { "px": [240,176], "src": [240,176], "f": 0, "t": 279, "d": [367], "a": 1 }, + { "px": [256,176], "src": [256,176], "f": 0, "t": 280, "d": [368], "a": 1 }, + { "px": [272,176], "src": [272,176], "f": 0, "t": 281, "d": [369], "a": 1 }, + { "px": [288,176], "src": [288,176], "f": 0, "t": 282, "d": [370], "a": 1 }, + { "px": [304,176], "src": [304,176], "f": 0, "t": 283, "d": [371], "a": 1 }, + { "px": [320,176], "src": [320,176], "f": 0, "t": 284, "d": [372], "a": 1 }, + { "px": [336,176], "src": [336,176], "f": 0, "t": 285, "d": [373], "a": 1 }, + { "px": [352,176], "src": [352,176], "f": 0, "t": 286, "d": [374], "a": 1 }, + { "px": [368,176], "src": [368,176], "f": 0, "t": 287, "d": [375], "a": 1 }, + { "px": [384,176], "src": [0,176], "f": 0, "t": 264, "d": [376], "a": 1 }, + { "px": [400,176], "src": [16,176], "f": 0, "t": 265, "d": [377], "a": 1 }, + { "px": [416,176], "src": [32,176], "f": 0, "t": 266, "d": [378], "a": 1 }, + { "px": [432,176], "src": [48,176], "f": 0, "t": 267, "d": [379], "a": 1 }, + { "px": [448,176], "src": [64,176], "f": 0, "t": 268, "d": [380], "a": 1 }, + { "px": [464,176], "src": [80,176], "f": 0, "t": 269, "d": [381], "a": 1 }, + { "px": [480,176], "src": [96,176], "f": 0, "t": 270, "d": [382], "a": 1 }, + { "px": [496,176], "src": [112,176], "f": 0, "t": 271, "d": [383], "a": 1 }, + { "px": [0,192], "src": [0,192], "f": 0, "t": 288, "d": [384], "a": 1 }, + { "px": [16,192], "src": [16,192], "f": 0, "t": 289, "d": [385], "a": 1 }, + { "px": [32,192], "src": [32,192], "f": 0, "t": 290, "d": [386], "a": 1 }, + { "px": [48,192], "src": [48,192], "f": 0, "t": 291, "d": [387], "a": 1 }, + { "px": [64,192], "src": [64,192], "f": 0, "t": 292, "d": [388], "a": 1 }, + { "px": [80,192], "src": [80,192], "f": 0, "t": 293, "d": [389], "a": 1 }, + { "px": [96,192], "src": [96,192], "f": 0, "t": 294, "d": [390], "a": 1 }, + { "px": [112,192], "src": [112,192], "f": 0, "t": 295, "d": [391], "a": 1 }, + { "px": [128,192], "src": [128,192], "f": 0, "t": 296, "d": [392], "a": 1 }, + { "px": [144,192], "src": [144,192], "f": 0, "t": 297, "d": [393], "a": 1 }, + { "px": [160,192], "src": [160,192], "f": 0, "t": 298, "d": [394], "a": 1 }, + { "px": [176,192], "src": [176,192], "f": 0, "t": 299, "d": [395], "a": 1 }, + { "px": [192,192], "src": [192,192], "f": 0, "t": 300, "d": [396], "a": 1 }, + { "px": [208,192], "src": [208,192], "f": 0, "t": 301, "d": [397], "a": 1 }, + { "px": [224,192], "src": [224,192], "f": 0, "t": 302, "d": [398], "a": 1 }, + { "px": [240,192], "src": [240,192], "f": 0, "t": 303, "d": [399], "a": 1 }, + { "px": [256,192], "src": [256,192], "f": 0, "t": 304, "d": [400], "a": 1 }, + { "px": [272,192], "src": [272,192], "f": 0, "t": 305, "d": [401], "a": 1 }, + { "px": [288,192], "src": [288,192], "f": 0, "t": 306, "d": [402], "a": 1 }, + { "px": [304,192], "src": [304,192], "f": 0, "t": 307, "d": [403], "a": 1 }, + { "px": [320,192], "src": [320,192], "f": 0, "t": 308, "d": [404], "a": 1 }, + { "px": [336,192], "src": [336,192], "f": 0, "t": 309, "d": [405], "a": 1 }, + { "px": [352,192], "src": [352,192], "f": 0, "t": 310, "d": [406], "a": 1 }, + { "px": [368,192], "src": [368,192], "f": 0, "t": 311, "d": [407], "a": 1 }, + { "px": [384,192], "src": [0,192], "f": 0, "t": 288, "d": [408], "a": 1 }, + { "px": [400,192], "src": [16,192], "f": 0, "t": 289, "d": [409], "a": 1 }, + { "px": [416,192], "src": [32,192], "f": 0, "t": 290, "d": [410], "a": 1 }, + { "px": [432,192], "src": [48,192], "f": 0, "t": 291, "d": [411], "a": 1 }, + { "px": [448,192], "src": [64,192], "f": 0, "t": 292, "d": [412], "a": 1 }, + { "px": [464,192], "src": [80,192], "f": 0, "t": 293, "d": [413], "a": 1 }, + { "px": [480,192], "src": [96,192], "f": 0, "t": 294, "d": [414], "a": 1 }, + { "px": [496,192], "src": [112,192], "f": 0, "t": 295, "d": [415], "a": 1 }, + { "px": [0,208], "src": [0,208], "f": 0, "t": 312, "d": [416], "a": 1 }, + { "px": [16,208], "src": [16,208], "f": 0, "t": 313, "d": [417], "a": 1 }, + { "px": [32,208], "src": [32,208], "f": 0, "t": 314, "d": [418], "a": 1 }, + { "px": [48,208], "src": [48,208], "f": 0, "t": 315, "d": [419], "a": 1 }, + { "px": [64,208], "src": [64,208], "f": 0, "t": 316, "d": [420], "a": 1 }, + { "px": [80,208], "src": [80,208], "f": 0, "t": 317, "d": [421], "a": 1 }, + { "px": [96,208], "src": [96,208], "f": 0, "t": 318, "d": [422], "a": 1 }, + { "px": [112,208], "src": [112,208], "f": 0, "t": 319, "d": [423], "a": 1 }, + { "px": [128,208], "src": [128,208], "f": 0, "t": 320, "d": [424], "a": 1 }, + { "px": [144,208], "src": [144,208], "f": 0, "t": 321, "d": [425], "a": 1 }, + { "px": [160,208], "src": [160,208], "f": 0, "t": 322, "d": [426], "a": 1 }, + { "px": [176,208], "src": [176,208], "f": 0, "t": 323, "d": [427], "a": 1 }, + { "px": [192,208], "src": [192,208], "f": 0, "t": 324, "d": [428], "a": 1 }, + { "px": [208,208], "src": [208,208], "f": 0, "t": 325, "d": [429], "a": 1 }, + { "px": [224,208], "src": [224,208], "f": 0, "t": 326, "d": [430], "a": 1 }, + { "px": [240,208], "src": [240,208], "f": 0, "t": 327, "d": [431], "a": 1 }, + { "px": [256,208], "src": [256,208], "f": 0, "t": 328, "d": [432], "a": 1 }, + { "px": [272,208], "src": [272,208], "f": 0, "t": 329, "d": [433], "a": 1 }, + { "px": [288,208], "src": [288,208], "f": 0, "t": 330, "d": [434], "a": 1 }, + { "px": [304,208], "src": [304,208], "f": 0, "t": 331, "d": [435], "a": 1 }, + { "px": [320,208], "src": [320,208], "f": 0, "t": 332, "d": [436], "a": 1 }, + { "px": [336,208], "src": [336,208], "f": 0, "t": 333, "d": [437], "a": 1 }, + { "px": [352,208], "src": [352,208], "f": 0, "t": 334, "d": [438], "a": 1 }, + { "px": [368,208], "src": [368,208], "f": 0, "t": 335, "d": [439], "a": 1 }, + { "px": [384,208], "src": [0,208], "f": 0, "t": 312, "d": [440], "a": 1 }, + { "px": [400,208], "src": [16,208], "f": 0, "t": 313, "d": [441], "a": 1 }, + { "px": [416,208], "src": [32,208], "f": 0, "t": 314, "d": [442], "a": 1 }, + { "px": [432,208], "src": [48,208], "f": 0, "t": 315, "d": [443], "a": 1 }, + { "px": [448,208], "src": [64,208], "f": 0, "t": 316, "d": [444], "a": 1 }, + { "px": [464,208], "src": [80,208], "f": 0, "t": 317, "d": [445], "a": 1 }, + { "px": [480,208], "src": [96,208], "f": 0, "t": 318, "d": [446], "a": 1 }, + { "px": [496,208], "src": [112,208], "f": 0, "t": 319, "d": [447], "a": 1 }, + { "px": [0,224], "src": [0,224], "f": 0, "t": 336, "d": [448], "a": 1 }, + { "px": [16,224], "src": [16,224], "f": 0, "t": 337, "d": [449], "a": 1 }, + { "px": [32,224], "src": [32,224], "f": 0, "t": 338, "d": [450], "a": 1 }, + { "px": [48,224], "src": [48,224], "f": 0, "t": 339, "d": [451], "a": 1 }, + { "px": [64,224], "src": [64,224], "f": 0, "t": 340, "d": [452], "a": 1 }, + { "px": [80,224], "src": [80,224], "f": 0, "t": 341, "d": [453], "a": 1 }, + { "px": [96,224], "src": [96,224], "f": 0, "t": 342, "d": [454], "a": 1 }, + { "px": [112,224], "src": [112,224], "f": 0, "t": 343, "d": [455], "a": 1 }, + { "px": [128,224], "src": [128,224], "f": 0, "t": 344, "d": [456], "a": 1 }, + { "px": [144,224], "src": [144,224], "f": 0, "t": 345, "d": [457], "a": 1 }, + { "px": [160,224], "src": [160,224], "f": 0, "t": 346, "d": [458], "a": 1 }, + { "px": [176,224], "src": [176,224], "f": 0, "t": 347, "d": [459], "a": 1 }, + { "px": [192,224], "src": [192,224], "f": 0, "t": 348, "d": [460], "a": 1 }, + { "px": [208,224], "src": [208,224], "f": 0, "t": 349, "d": [461], "a": 1 }, + { "px": [224,224], "src": [224,224], "f": 0, "t": 350, "d": [462], "a": 1 }, + { "px": [240,224], "src": [240,224], "f": 0, "t": 351, "d": [463], "a": 1 }, + { "px": [256,224], "src": [256,224], "f": 0, "t": 352, "d": [464], "a": 1 }, + { "px": [272,224], "src": [272,224], "f": 0, "t": 353, "d": [465], "a": 1 }, + { "px": [288,224], "src": [288,224], "f": 0, "t": 354, "d": [466], "a": 1 }, + { "px": [304,224], "src": [304,224], "f": 0, "t": 355, "d": [467], "a": 1 }, + { "px": [320,224], "src": [320,224], "f": 0, "t": 356, "d": [468], "a": 1 }, + { "px": [336,224], "src": [336,224], "f": 0, "t": 357, "d": [469], "a": 1 }, + { "px": [352,224], "src": [352,224], "f": 0, "t": 358, "d": [470], "a": 1 }, + { "px": [368,224], "src": [368,224], "f": 0, "t": 359, "d": [471], "a": 1 }, + { "px": [384,224], "src": [0,224], "f": 0, "t": 336, "d": [472], "a": 1 }, + { "px": [400,224], "src": [16,224], "f": 0, "t": 337, "d": [473], "a": 1 }, + { "px": [416,224], "src": [32,224], "f": 0, "t": 338, "d": [474], "a": 1 }, + { "px": [432,224], "src": [48,224], "f": 0, "t": 339, "d": [475], "a": 1 }, + { "px": [448,224], "src": [64,224], "f": 0, "t": 340, "d": [476], "a": 1 }, + { "px": [464,224], "src": [80,224], "f": 0, "t": 341, "d": [477], "a": 1 }, + { "px": [480,224], "src": [96,224], "f": 0, "t": 342, "d": [478], "a": 1 }, + { "px": [496,224], "src": [112,224], "f": 0, "t": 343, "d": [479], "a": 1 }, + { "px": [0,240], "src": [0,224], "f": 0, "t": 336, "d": [480], "a": 1 }, + { "px": [16,240], "src": [16,224], "f": 0, "t": 337, "d": [481], "a": 1 }, + { "px": [32,240], "src": [32,224], "f": 0, "t": 338, "d": [482], "a": 1 }, + { "px": [48,240], "src": [48,224], "f": 0, "t": 339, "d": [483], "a": 1 }, + { "px": [64,240], "src": [64,224], "f": 0, "t": 340, "d": [484], "a": 1 }, + { "px": [80,240], "src": [80,224], "f": 0, "t": 341, "d": [485], "a": 1 }, + { "px": [96,240], "src": [96,224], "f": 0, "t": 342, "d": [486], "a": 1 }, + { "px": [112,240], "src": [112,224], "f": 0, "t": 343, "d": [487], "a": 1 }, + { "px": [128,240], "src": [128,224], "f": 0, "t": 344, "d": [488], "a": 1 }, + { "px": [144,240], "src": [144,224], "f": 0, "t": 345, "d": [489], "a": 1 }, + { "px": [160,240], "src": [160,224], "f": 0, "t": 346, "d": [490], "a": 1 }, + { "px": [176,240], "src": [176,224], "f": 0, "t": 347, "d": [491], "a": 1 }, + { "px": [192,240], "src": [192,224], "f": 0, "t": 348, "d": [492], "a": 1 }, + { "px": [208,240], "src": [208,224], "f": 0, "t": 349, "d": [493], "a": 1 }, + { "px": [224,240], "src": [224,224], "f": 0, "t": 350, "d": [494], "a": 1 }, + { "px": [240,240], "src": [240,224], "f": 0, "t": 351, "d": [495], "a": 1 }, + { "px": [256,240], "src": [256,224], "f": 0, "t": 352, "d": [496], "a": 1 }, + { "px": [272,240], "src": [272,224], "f": 0, "t": 353, "d": [497], "a": 1 }, + { "px": [288,240], "src": [288,224], "f": 0, "t": 354, "d": [498], "a": 1 }, + { "px": [304,240], "src": [304,224], "f": 0, "t": 355, "d": [499], "a": 1 }, + { "px": [320,240], "src": [320,224], "f": 0, "t": 356, "d": [500], "a": 1 }, + { "px": [336,240], "src": [336,224], "f": 0, "t": 357, "d": [501], "a": 1 }, + { "px": [352,240], "src": [352,224], "f": 0, "t": 358, "d": [502], "a": 1 }, + { "px": [368,240], "src": [368,224], "f": 0, "t": 359, "d": [503], "a": 1 }, + { "px": [384,240], "src": [0,224], "f": 0, "t": 336, "d": [504], "a": 1 }, + { "px": [400,240], "src": [16,224], "f": 0, "t": 337, "d": [505], "a": 1 }, + { "px": [416,240], "src": [32,224], "f": 0, "t": 338, "d": [506], "a": 1 }, + { "px": [432,240], "src": [48,224], "f": 0, "t": 339, "d": [507], "a": 1 }, + { "px": [448,240], "src": [64,224], "f": 0, "t": 340, "d": [508], "a": 1 }, + { "px": [464,240], "src": [80,224], "f": 0, "t": 341, "d": [509], "a": 1 }, + { "px": [480,240], "src": [96,224], "f": 0, "t": 342, "d": [510], "a": 1 }, + { "px": [496,240], "src": [112,224], "f": 0, "t": 343, "d": [511], "a": 1 } + ], + "entityInstances": [] + } + ], + "__neighbours": [] + } + ], + "worlds": [], + "dummyWorldIid": "a48e5b90-d380-11f0-a69c-55e16c4c7713" +} \ No newline at end of file diff --git a/py/assets/levels/top_down.ldtk b/py/assets/levels/top_down.ldtk new file mode 100644 index 0000000..0ea98bf --- /dev/null +++ b/py/assets/levels/top_down.ldtk @@ -0,0 +1,2651 @@ +{ + "__header__": { + "fileType": "LDtk Project JSON", + "app": "LDtk", + "doc": "https://ldtk.io/json", + "schema": "https://ldtk.io/files/JSON_SCHEMA.json", + "appAuthor": "Sebastien 'deepnight' Benard", + "appVersion": "1.5.3", + "url": "https://ldtk.io" + }, + "iid": "2451b2d0-d380-11f0-9ae1-7f8ef9aafb88", + "jsonVersion": "1.5.3", + "appBuildId": 473703, + "nextUid": 79, + "identifierStyle": "Capitalize", + "toc": [], + "worldLayout": "Free", + "worldGridWidth": 256, + "worldGridHeight": 256, + "defaultLevelWidth": 256, + "defaultLevelHeight": 256, + "defaultPivotX": 0, + "defaultPivotY": 0, + "defaultGridSize": 16, + "defaultEntityWidth": 16, + "defaultEntityHeight": 16, + "bgColor": "#40465B", + "defaultLevelBgColor": "#696A79", + "minifyJson": false, + "externalLevels": false, + "exportTiled": false, + "simplifiedExport": false, + "imageExportMode": "None", + "exportLevelBg": true, + "pngFilePattern": null, + "backupOnSave": false, + "backupLimit": 10, + "backupRelPath": null, + "levelNamePattern": "Level_%idx", + "tutorialDesc": null, + "customCommands": [], + "flags": [], + "defs": { "layers": [ + { + "__type": "Entities", + "identifier": "Entities", + "type": "Entities", + "uid": 77, + "doc": null, + "uiColor": null, + "gridSize": 64, + "guideGridWid": 0, + "guideGridHei": 0, + "displayOpacity": 1, + "inactiveOpacity": 0.6, + "hideInList": false, + "hideFieldsWhenInactive": true, + "canSelectWhenInactive": true, + "renderInWorldView": true, + "pxOffsetX": 0, + "pxOffsetY": 0, + "parallaxFactorX": 0, + "parallaxFactorY": 0, + "parallaxScaling": true, + "requiredTags": [], + "excludedTags": [], + "autoTilesKilledByOtherLayerUid": null, + "uiFilterTags": [], + "useAsyncRender": false, + "intGridValues": [], + "intGridValuesGroups": [], + "autoRuleGroups": [], + "autoSourceLayerDefUid": null, + "tilesetDefUid": null, + "tilePivotX": 0, + "tilePivotY": 0, + "biomeFieldUid": null + }, + { + "__type": "Tiles", + "identifier": "Foreground", + "type": "Tiles", + "uid": 61, + "doc": null, + "uiColor": null, + "gridSize": 64, + "guideGridWid": 0, + "guideGridHei": 0, + "displayOpacity": 1, + "inactiveOpacity": 1, + "hideInList": false, + "hideFieldsWhenInactive": false, + "canSelectWhenInactive": true, + "renderInWorldView": true, + "pxOffsetX": 0, + "pxOffsetY": 0, + "parallaxFactorX": 0, + "parallaxFactorY": 0, + "parallaxScaling": true, + "requiredTags": [], + "excludedTags": [], + "autoTilesKilledByOtherLayerUid": null, + "uiFilterTags": [], + "useAsyncRender": false, + "intGridValues": [], + "intGridValuesGroups": [], + "autoRuleGroups": [], + "autoSourceLayerDefUid": null, + "tilesetDefUid": 1, + "tilePivotX": 0, + "tilePivotY": 0, + "biomeFieldUid": null + }, + { + "__type": "IntGrid", + "identifier": "IntGrid", + "type": "IntGrid", + "uid": 2, + "doc": null, + "uiColor": null, + "gridSize": 64, + "guideGridWid": 0, + "guideGridHei": 0, + "displayOpacity": 1, + "inactiveOpacity": 1, + "hideInList": false, + "hideFieldsWhenInactive": false, + "canSelectWhenInactive": true, + "renderInWorldView": true, + "pxOffsetX": 0, + "pxOffsetY": 0, + "parallaxFactorX": 0, + "parallaxFactorY": 0, + "parallaxScaling": true, + "requiredTags": [], + "excludedTags": [], + "autoTilesKilledByOtherLayerUid": null, + "uiFilterTags": [], + "useAsyncRender": false, + "intGridValues": [ + { "value": 1, "identifier": "walls", "color": "#B86F50", "tile": null, "groupUid": 0 }, + { "value": 3, "identifier": "obstacles", "color": "#A22633", "tile": null, "groupUid": 0 }, + { "value": 2, "identifier": "grass", "color": "#63C74D", "tile": null, "groupUid": 0 }, + { "value": 4, "identifier": "tile", "color": "#3A4466", "tile": null, "groupUid": 0 } + ], + "intGridValuesGroups": [], + "autoRuleGroups": [ + { + "uid": 69, + "name": "obstacles", + "color": null, + "icon": null, + "active": true, + "isOptional": false, + "rules": [ + { + "uid": 75, + "active": true, + "size": 3, + "tileRectsIds": [ [0], [1], [2], [3] ], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,2,0,0,3,0,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": null, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 791835, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 74, + "active": true, + "size": 3, + "tileRectsIds": [[10]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,0,3,0,0,4,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": null, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 6879243, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 73, + "active": true, + "size": 3, + "tileRectsIds": [[10]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,4,0,0,3,0,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": null, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 5479555, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 71, + "active": true, + "size": 3, + "tileRectsIds": [[10]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,0,3,4,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": null, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 8857465, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 70, + "active": true, + "size": 3, + "tileRectsIds": [[10]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,4,3,0,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": null, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 4405542, + "perlinScale": 0.2, + "perlinOctaves": 2 + } + ], + "usesWizard": false, + "requiredBiomeValues": [], + "biomeRequirementMode": 0 + }, + { + "uid": 66, + "name": "tile", + "color": null, + "icon": null, + "active": true, + "isOptional": false, + "rules": [ + { + "uid": 67, + "active": true, + "size": 1, + "tileRectsIds": [[10]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [4], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": null, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 1675224, + "perlinScale": 0.2, + "perlinOctaves": 2 + } + ], + "usesWizard": false, + "requiredBiomeValues": [], + "biomeRequirementMode": 0 + }, + { + "uid": 62, + "name": "grass", + "color": null, + "icon": null, + "active": true, + "isOptional": false, + "rules": [ + { + "uid": 63, + "active": true, + "size": 1, + "tileRectsIds": [ [0], [1], [2], [3] ], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [2], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": null, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 8915025, + "perlinScale": 0.2, + "perlinOctaves": 2 + } + ], + "usesWizard": false, + "requiredBiomeValues": [], + "biomeRequirementMode": 0 + }, + { + "uid": 3, + "name": "walls", + "color": null, + "icon": null, + "active": true, + "isOptional": false, + "rules": [ + { + "uid": 31, + "active": true, + "size": 3, + "tileRectsIds": [[204]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,-1,1,-1,0,-1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 7774931, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 32, + "active": true, + "size": 3, + "tileRectsIds": [[178]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [-1,1,-1,1,1,1,-1,1,-1], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 9893420, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 33, + "active": true, + "size": 3, + "tileRectsIds": [[117]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,-1,1,1,0,1,-1], + "flipX": true, + "flipY": true, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 4908586, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 34, + "active": true, + "size": 3, + "tileRectsIds": [[258]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [-1,1,1,1,1,1,1,1,-1], + "flipX": true, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 4749804, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 35, + "active": true, + "size": 3, + "tileRectsIds": [[227]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,1,-1,-1,1,1,0,1,1], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 233522, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 36, + "active": true, + "size": 3, + "tileRectsIds": [[229]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,1,1,1,-1,1,1], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 7354597, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 37, + "active": true, + "size": 3, + "tileRectsIds": [[225]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [-1,1,-1,1,1,1,-1,1,1], + "flipX": true, + "flipY": true, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 6862161, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 38, + "active": true, + "size": 3, + "tileRectsIds": [[228]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [-1,1,0,1,1,-1,1,1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 4839941, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 39, + "active": true, + "size": 3, + "tileRectsIds": [[230]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,1,1,1,1,1,-1], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 4662796, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 40, + "active": true, + "size": 3, + "tileRectsIds": [[257]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [1,1,-1,1,1,1,0,-1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 1840180, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 41, + "active": true, + "size": 3, + "tileRectsIds": [[255]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [1,1,0,1,1,-1,-1,1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 1641611, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 42, + "active": true, + "size": 3, + "tileRectsIds": [[254]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,1,1,-1,1,1,0,1,-1], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 6451097, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 43, + "active": true, + "size": 3, + "tileRectsIds": [[256]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [-1,1,1,1,1,1,0,-1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 9176901, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 44, + "active": true, + "size": 3, + "tileRectsIds": [[121]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [-1,1,-1,1,1,1,0,-1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 9846746, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 45, + "active": true, + "size": 3, + "tileRectsIds": [[147]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,1,-1,-1,1,1,0,1,-1], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 2534625, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 46, + "active": true, + "size": 3, + "tileRectsIds": [[120]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,1,1,1,-1,1,-1], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 4742475, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 47, + "active": true, + "size": 3, + "tileRectsIds": [[148]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [-1,1,0,1,1,-1,-1,1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 9160564, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 48, + "active": true, + "size": 3, + "tileRectsIds": [[201]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [-1,1,1,1,1,1,-1,1,1], + "flipX": true, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 8571935, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 49, + "active": true, + "size": 3, + "tileRectsIds": [[173]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [1,1,1,1,1,1,-1,1,-1], + "flipX": false, + "flipY": true, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 9554225, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 50, + "active": true, + "size": 3, + "tileRectsIds": [[150]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,-1,1,0,0,-1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 3700162, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 51, + "active": true, + "size": 3, + "tileRectsIds": [[122]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,0,1,-1,0,-1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 5775500, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 52, + "active": true, + "size": 3, + "tileRectsIds": [[119]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,0,1,0,0,-1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 4962963, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 53, + "active": true, + "size": 3, + "tileRectsIds": [[149]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,-1,1,-1,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 9922820, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 54, + "active": true, + "size": 3, + "tileRectsIds": [[123]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,-1,1,-1,0,-1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 2544830, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 55, + "active": true, + "size": 3, + "tileRectsIds": [[146]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,-1,1,-1,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 4037627, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 56, + "active": true, + "size": 3, + "tileRectsIds": [[124]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,-1,1,0,0,0,0], + "flipX": true, + "flipY": true, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 1124818, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 57, + "active": true, + "size": 3, + "tileRectsIds": [[202]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,0,1,0,0,0,0], + "flipX": false, + "flipY": true, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 8849226, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 58, + "active": true, + "size": 3, + "tileRectsIds": [[175]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,-1,1,0,0,0,0], + "flipX": true, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 6643923, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 59, + "active": true, + "size": 3, + "tileRectsIds": [[171]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,0,1,1,0,1,-1], + "flipX": true, + "flipY": true, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 2745302, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 60, + "active": true, + "size": 1, + "tileRectsIds": [[177]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [1], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 4687117, + "perlinScale": 0.2, + "perlinOctaves": 2 + } + ], + "usesWizard": true, + "requiredBiomeValues": [], + "biomeRequirementMode": 0 + } + ], + "autoSourceLayerDefUid": null, + "tilesetDefUid": 1, + "tilePivotX": 0, + "tilePivotY": 0, + "biomeFieldUid": null + } + ], "entities": [ + { + "identifier": "Start", + "uid": 76, + "tags": [], + "exportToToc": false, + "allowOutOfBounds": false, + "doc": null, + "width": 64, + "height": 64, + "resizableX": false, + "resizableY": false, + "minWidth": null, + "maxWidth": null, + "minHeight": null, + "maxHeight": null, + "keepAspectRatio": false, + "tileOpacity": 1, + "fillOpacity": 1, + "lineOpacity": 1, + "hollow": false, + "color": "#2F48BE", + "renderMode": "Rectangle", + "showName": true, + "tilesetId": null, + "tileRenderMode": "FitInside", + "tileRect": null, + "uiTileRect": null, + "nineSliceBorders": [], + "maxCount": 0, + "limitScope": "PerLevel", + "limitBehavior": "MoveLastOne", + "pivotX": 0.5, + "pivotY": 0.5, + "fieldDefs": [] + }, + { + "identifier": "Spawn", + "uid": 78, + "tags": [], + "exportToToc": false, + "allowOutOfBounds": false, + "doc": null, + "width": 64, + "height": 64, + "resizableX": true, + "resizableY": true, + "minWidth": 64, + "maxWidth": null, + "minHeight": 64, + "maxHeight": null, + "keepAspectRatio": false, + "tileOpacity": 1, + "fillOpacity": 1, + "lineOpacity": 1, + "hollow": false, + "color": "#E43B44", + "renderMode": "Rectangle", + "showName": true, + "tilesetId": null, + "tileRenderMode": "FitInside", + "tileRect": null, + "uiTileRect": null, + "nineSliceBorders": [], + "maxCount": 0, + "limitScope": "PerLevel", + "limitBehavior": "MoveLastOne", + "pivotX": 0.5, + "pivotY": 0.5, + "fieldDefs": [] + } + ], "tilesets": [ + { + "__cWid": 27, + "__cHei": 20, + "identifier": "Tilemap", + "uid": 1, + "relPath": "../zombie_shooter/tilemap.png", + "embedAtlas": null, + "pxWid": 1728, + "pxHei": 1280, + "tileGridSize": 64, + "spacing": 0, + "padding": 0, + "tags": [], + "tagsSourceEnumUid": null, + "enumTags": [], + "customData": [], + "savedSelections": [], + "cachedPixelData": { + "opaqueTiles": "111111111111111111110000000111111111111111111110000000111111111111111111110000000111111111111111111110000000111111111111111111000000000111111111111111111000000000111111110111111110000000000111111100111111100000000000111111100111111100000000000111111100111111100000000000111111111111111111000000000111111111111111111000000000111111110111111110111111000111111100111111100111111010111111100111111100111111000111111100111111100111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "averageColors": "f2a6f2a6f2a6f2a6fb74fb74f9bbf9bbf9bbf9bbf9bbfeeefc74fc74fd74fd74f2a6f2a6f28bf28b4995499549954c734c734c730000f654f654f654f544f544f664f664f666f666f666f555f555f666f666fb84fb84fb84fb84fb84fb84c695d6a5d6a5cd72dd72dd720000f654f654f654f544f544f664f664f666f666f666f555f555f666f666fd74fd74fd74fd74fd74fd74e4a5f3a6f3a6ed62fd62fd620000f554f554f554f554f444f444f554f555f555f555f555f444f444f555fc96fc96fc96fc96fc96fc96eacafacafacaedb9fdb9fdb90000f854f854f854f754f754f954f954f854f854f864f864f864f864f864f974f974f864f86410001000ba745a74b58a5edb5edb44a60000f854f854f854f754f754f954f954f854f854f864f864f864f864f864f974f974f864f86410001000ba745a74b5a57bde7bde1a740000f544f544f544f544f754f754f444f654aa53f554f554f654f654f754f754f444f754aa7483b783b7c3b68d748d84cd741aaa1aaa0000f544f544f544f544f754f754fa53ca536b63f554f554f654f654f754f754fa74ca746b7483b683b643a68d748d7433a53ddd4ddd0000f654f654f754f754f754f754f5447a537a53f654f654f764f764f764f764f6547a747a7433b63c7438aa28aa38aa15951baa3c748555f654f654f754f754f754f754f5447a537a53f654f654f764f764f764f764f6547a747a7438aa18aa2acd4b742a743b853b853bcc8deef9bbf9bbf9bbf9bbf9bbf9bbf9bbf9bbf9bbf788f788f788f677f677f799f799f788f7883c611c611acd59983a99fcb9fc97fabafcdcf9bbf9bbf9bbf9bbf9bbf9bbf9bbf9bbf9bbf788f788f788f677f677f799f799f788f7883c6138aa3a8878656555fdeefdeefdedfaaaf9bbf9bbf9bbf9bbf9bbf9bbf9bbf9bba9bbf555f555f556f556f677f677f444f666a8aafd95fd94fd95f7b9f6b8f7b9eb84fb84eb84f9bbf9bbf9bbf9bbf9bbf9bbf9bbc9bb69bbf555f555f556f556f677f677f8aac89a69aafd84fe83fd84f6b8f5b7f6b8fb84fb84fb84f9bbf9bbf9bbf9bbf9bbf9bbf9bb79bb79bbf566f566f677f677f677f677f55678aa78aafd73fe61fe83f5b7f2a6f5b7eb84fb84eb84f9bbf9bbf9bbf9bbf9bbf9bbf9bb79bb79bbf566f566f677f677f677f677f55678aa78aafd84fe83fd84f6b8f5b7f6b8ecb9ecb9ecb95bde5bde5bde5bde7dee7dee7a747a747a747a744b744b744b744b74a295c295a2958295727a6a74eb84eb84eb84db847b84000000005bde5bde4bde4bde7dee7dee7a747a747a747a744b744b744b744b74dc73dc73dc73ac737c734b847ca87ca97ca88c97ab84000000004bde4bde7dee7dee7dee6dee79bb79bb79bb79bb49bb49bb49bb49bb9655a555965596558765ab849b849b849b849b84ac73000000004bde4bde7dee7dee7dee6dee79bb79bb79bb79bb49bb49bb49bb49bb8b846b846c846b84377737776b868ca886664666dcb900000000" + } + } + ], "enums": [], "externalEnums": [], "levelFields": [] }, + "levels": [ + { + "identifier": "Level", + "iid": "2452eb50-d380-11f0-9ae1-d7a25c5a0db0", + "uid": 0, + "worldX": 0, + "worldY": 0, + "worldDepth": 0, + "pxWid": 2560, + "pxHei": 1440, + "__bgColor": "#696A79", + "bgColor": null, + "useAutoIdentifier": false, + "bgRelPath": null, + "bgPos": null, + "bgPivotX": 0.5, + "bgPivotY": 0.5, + "__smartColor": "#ADADB5", + "__bgPos": null, + "externalRelPath": null, + "fieldInstances": [], + "layerInstances": [ + { + "__identifier": "Entities", + "__type": "Entities", + "__cWid": 40, + "__cHei": 23, + "__gridSize": 64, + "__opacity": 1, + "__pxTotalOffsetX": 0, + "__pxTotalOffsetY": 0, + "__tilesetDefUid": null, + "__tilesetRelPath": null, + "iid": "18a082a0-d380-11f0-9ae1-03f5d4b03633", + "levelId": 0, + "layerDefUid": 77, + "pxOffsetX": 0, + "pxOffsetY": 0, + "visible": true, + "optionalRules": [], + "intGridCsv": [], + "autoLayerTiles": [], + "seed": 2737745, + "overrideTilesetUid": null, + "gridTiles": [], + "entityInstances": [ + { + "__identifier": "Start", + "__grid": [2,20], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": null, + "__smartColor": "#2F48BE", + "iid": "312e8560-d380-11f0-9ae1-a1382736c5df", + "width": 64, + "height": 64, + "defUid": 76, + "px": [160,1312], + "fieldInstances": [], + "__worldX": 160, + "__worldY": 1312 + }, + { + "__identifier": "Start", + "__grid": [13,18], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": null, + "__smartColor": "#2F48BE", + "iid": "34ffd8b0-d380-11f0-9ae1-35d6329f3b27", + "width": 64, + "height": 64, + "defUid": 76, + "px": [864,1184], + "fieldInstances": [], + "__worldX": 864, + "__worldY": 1184 + }, + { + "__identifier": "Start", + "__grid": [25,20], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": null, + "__smartColor": "#2F48BE", + "iid": "35c79580-d380-11f0-9ae1-17680d06aecf", + "width": 64, + "height": 64, + "defUid": 76, + "px": [1632,1312], + "fieldInstances": [], + "__worldX": 1632, + "__worldY": 1312 + }, + { + "__identifier": "Start", + "__grid": [33,18], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": null, + "__smartColor": "#2F48BE", + "iid": "36d86940-d380-11f0-9ae1-5725e8e8d983", + "width": 64, + "height": 64, + "defUid": 76, + "px": [2144,1184], + "fieldInstances": [], + "__worldX": 2144, + "__worldY": 1184 + }, + { + "__identifier": "Spawn", + "__grid": [17,1], + "__pivot": [0.5,0.5], + "__tags": [], + "__tile": null, + "__smartColor": "#E43B44", + "iid": "03544b20-d380-11f0-9ae1-a375bc6f6eb9", + "width": 1664, + "height": 64, + "defUid": 78, + "px": [1120,96], + "fieldInstances": [], + "__worldX": 1120, + "__worldY": 96 + } + ] + }, + { + "__identifier": "Foreground", + "__type": "Tiles", + "__cWid": 40, + "__cHei": 23, + "__gridSize": 64, + "__opacity": 1, + "__pxTotalOffsetX": 0, + "__pxTotalOffsetY": 0, + "__tilesetDefUid": 1, + "__tilesetRelPath": "../zombie_shooter/tilemap.png", + "iid": "7e07a4f0-d380-11f0-9ae1-c1407425fd82", + "levelId": 0, + "layerDefUid": 61, + "pxOffsetX": 0, + "pxOffsetY": 0, + "visible": true, + "optionalRules": [], + "intGridCsv": [], + "autoLayerTiles": [], + "seed": 3361326, + "overrideTilesetUid": null, + "gridTiles": [ + { "px": [192,128], "src": [1216,704], "f": 0, "t": 316, "d": [83], "a": 1 }, + { "px": [960,128], "src": [1280,320], "f": 0, "t": 155, "d": [95], "a": 1 }, + { "px": [1856,128], "src": [1472,384], "f": 0, "t": 185, "d": [109], "a": 1 }, + { "px": [448,384], "src": [1280,256], "f": 0, "t": 128, "d": [247], "a": 1 }, + { "px": [512,384], "src": [1280,256], "f": 0, "t": 128, "d": [248], "a": 1 }, + { "px": [64,448], "src": [1472,384], "f": 0, "t": 185, "d": [281], "a": 1 }, + { "px": [1728,512], "src": [1280,320], "f": 0, "t": 155, "d": [347], "a": 1 }, + { "px": [2304,640], "src": [1472,384], "f": 0, "t": 185, "d": [436], "a": 1 }, + { "px": [768,704], "src": [1344,384], "f": 0, "t": 183, "d": [452], "a": 1 }, + { "px": [832,704], "src": [1408,384], "f": 0, "t": 184, "d": [453], "a": 1 }, + { "px": [768,768], "src": [1344,448], "f": 0, "t": 210, "d": [492], "a": 1 }, + { "px": [832,768], "src": [1408,448], "f": 0, "t": 211, "d": [493], "a": 1 }, + { "px": [1408,768], "src": [1216,704], "f": 0, "t": 316, "d": [502], "a": 1 }, + { "px": [64,1088], "src": [1472,512], "f": 0, "t": 239, "d": [681], "a": 1 }, + { "px": [576,1088], "src": [1472,512], "f": 0, "t": 239, "d": [689], "a": 1 }, + { "px": [64,1152], "src": [1408,1216], "f": 0, "t": 535, "d": [721], "a": 1 }, + { "px": [384,1216], "src": [896,1088], "f": 0, "t": 473, "d": [766], "a": 1 }, + { "px": [448,1216], "src": [960,1088], "f": 0, "t": 474, "d": [767], "a": 1 }, + { "px": [512,1216], "src": [1024,1088], "f": 0, "t": 475, "d": [768], "a": 1 }, + { "px": [1088,1216], "src": [1472,64], "f": 0, "t": 50, "d": [777], "a": 1 }, + { "px": [1344,1216], "src": [1280,64], "f": 0, "t": 47, "d": [781], "a": 1 }, + { "px": [2432,1216], "src": [1472,512], "f": 0, "t": 239, "d": [798], "a": 1 }, + { "px": [256,1280], "src": [1536,64], "f": 0, "t": 51, "d": [804], "a": 1 }, + { "px": [320,1280], "src": [1600,64], "f": 0, "t": 52, "d": [805], "a": 1 }, + { "px": [1088,1280], "src": [1472,128], "f": 0, "t": 77, "d": [817], "a": 1 }, + { "px": [1344,1280], "src": [1280,128], "f": 0, "t": 74, "d": [821], "a": 1 }, + { "px": [1856,1280], "src": [1216,1152], "f": 0, "t": 505, "d": [829], "a": 1 }, + { "px": [256,1344], "src": [1536,192], "f": 0, "t": 105, "d": [844], "a": 1 }, + { "px": [320,1344], "src": [1600,192], "f": 0, "t": 106, "d": [845], "a": 1 }, + { "px": [1088,1344], "src": [1472,192], "f": 0, "t": 104, "d": [857], "a": 1 }, + { "px": [1344,1344], "src": [1280,192], "f": 0, "t": 101, "d": [861], "a": 1 }, + { "px": [1856,1344], "src": [960,1216], "f": 0, "t": 528, "d": [869], "a": 1 } + ], + "entityInstances": [] + }, + { + "__identifier": "IntGrid", + "__type": "IntGrid", + "__cWid": 40, + "__cHei": 23, + "__gridSize": 64, + "__opacity": 1, + "__pxTotalOffsetX": 0, + "__pxTotalOffsetY": 0, + "__tilesetDefUid": 1, + "__tilesetRelPath": "../zombie_shooter/tilemap.png", + "iid": "49e5c130-d380-11f0-9ae1-4121d35fc153", + "levelId": 0, + "layerDefUid": 2, + "pxOffsetX": 0, + "pxOffsetY": 0, + "visible": true, + "optionalRules": [], + "intGridCsv": [ + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,1,1,1,1,1,2,2,3,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2, + 2,2,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, + 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2, + 2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,1,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,1,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, + 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,1,1,1,1,3,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,1,1,1,1,4,4,4,4,4,3,3,3,4, + 4,4,4,4,4,4,4,3,1,1,1,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,1,4,4,4,3, + 3,1,1,1,4,4,4,4,4,4,4,4,3,1,1,1,3,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,1, + 1,4,4,4,3,3,1,4,1,4,4,4,4,4,4,4,4,3,1,1,1,3,4,4,4,4,4,4,4,3,4,4,4,4,4, + 4,4,4,4,1,1,1,1,1,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1 + ], + "autoLayerTiles": [ + { "px": [2368,0], "src": [960,384], "f": 0, "t": 177, "d": [60,37], "a": 1 }, + { "px": [2432,0], "src": [960,384], "f": 0, "t": 177, "d": [60,38], "a": 1 }, + { "px": [2496,0], "src": [960,384], "f": 0, "t": 177, "d": [60,39], "a": 1 }, + { "px": [2368,64], "src": [960,384], "f": 0, "t": 177, "d": [60,77], "a": 1 }, + { "px": [2432,64], "src": [960,384], "f": 0, "t": 177, "d": [60,78], "a": 1 }, + { "px": [2496,64], "src": [960,384], "f": 0, "t": 177, "d": [60,79], "a": 1 }, + { "px": [2368,128], "src": [960,384], "f": 0, "t": 177, "d": [60,117], "a": 1 }, + { "px": [2432,128], "src": [960,384], "f": 0, "t": 177, "d": [60,118], "a": 1 }, + { "px": [2496,128], "src": [960,384], "f": 0, "t": 177, "d": [60,119], "a": 1 }, + { "px": [2368,192], "src": [960,384], "f": 0, "t": 177, "d": [60,157], "a": 1 }, + { "px": [2432,192], "src": [960,384], "f": 0, "t": 177, "d": [60,158], "a": 1 }, + { "px": [2496,192], "src": [960,384], "f": 0, "t": 177, "d": [60,159], "a": 1 }, + { "px": [1216,320], "src": [960,384], "f": 0, "t": 177, "d": [60,219], "a": 1 }, + { "px": [1152,384], "src": [960,384], "f": 0, "t": 177, "d": [60,258], "a": 1 }, + { "px": [1216,384], "src": [960,384], "f": 0, "t": 177, "d": [60,259], "a": 1 }, + { "px": [1280,384], "src": [960,384], "f": 0, "t": 177, "d": [60,260], "a": 1 }, + { "px": [2368,1088], "src": [960,384], "f": 0, "t": 177, "d": [60,717], "a": 1 }, + { "px": [2432,1088], "src": [960,384], "f": 0, "t": 177, "d": [60,718], "a": 1 }, + { "px": [2496,1088], "src": [960,384], "f": 0, "t": 177, "d": [60,719], "a": 1 }, + { "px": [1216,1280], "src": [960,384], "f": 0, "t": 177, "d": [60,819], "a": 1 }, + { "px": [1216,1344], "src": [960,384], "f": 0, "t": 177, "d": [60,859], "a": 1 }, + { "px": [1216,1408], "src": [960,384], "f": 0, "t": 177, "d": [60,899], "a": 1 }, + { "px": [0,0], "src": [576,384], "f": 0, "t": 171, "d": [59,0], "a": 1 }, + { "px": [2304,0], "src": [576,384], "f": 1, "t": 171, "d": [59,36], "a": 1 }, + { "px": [2304,192], "src": [576,384], "f": 3, "t": 171, "d": [59,156], "a": 1 }, + { "px": [2496,256], "src": [576,384], "f": 1, "t": 171, "d": [59,199], "a": 1 }, + { "px": [1152,320], "src": [576,384], "f": 3, "t": 171, "d": [59,218], "a": 1 }, + { "px": [1280,320], "src": [576,384], "f": 2, "t": 171, "d": [59,220], "a": 1 }, + { "px": [2496,1024], "src": [576,384], "f": 3, "t": 171, "d": [59,679], "a": 1 }, + { "px": [2496,1152], "src": [576,384], "f": 1, "t": 171, "d": [59,759], "a": 1 }, + { "px": [0,1408], "src": [576,384], "f": 2, "t": 171, "d": [59,880], "a": 1 }, + { "px": [1152,1408], "src": [576,384], "f": 3, "t": 171, "d": [59,898], "a": 1 }, + { "px": [1280,1408], "src": [576,384], "f": 2, "t": 171, "d": [59,900], "a": 1 }, + { "px": [2496,1408], "src": [576,384], "f": 3, "t": 171, "d": [59,919], "a": 1 }, + { "px": [0,64], "src": [832,384], "f": 1, "t": 175, "d": [58,40], "a": 1 }, + { "px": [2304,64], "src": [832,384], "f": 0, "t": 175, "d": [58,76], "a": 1 }, + { "px": [0,128], "src": [832,384], "f": 1, "t": 175, "d": [58,80], "a": 1 }, + { "px": [2304,128], "src": [832,384], "f": 0, "t": 175, "d": [58,116], "a": 1 }, + { "px": [0,192], "src": [832,384], "f": 1, "t": 175, "d": [58,120], "a": 1 }, + { "px": [0,256], "src": [832,384], "f": 1, "t": 175, "d": [58,160], "a": 1 }, + { "px": [0,320], "src": [832,384], "f": 1, "t": 175, "d": [58,200], "a": 1 }, + { "px": [2496,320], "src": [832,384], "f": 0, "t": 175, "d": [58,239], "a": 1 }, + { "px": [0,384], "src": [832,384], "f": 1, "t": 175, "d": [58,240], "a": 1 }, + { "px": [1088,384], "src": [832,384], "f": 0, "t": 175, "d": [58,257], "a": 1 }, + { "px": [1344,384], "src": [832,384], "f": 1, "t": 175, "d": [58,261], "a": 1 }, + { "px": [2496,384], "src": [832,384], "f": 0, "t": 175, "d": [58,279], "a": 1 }, + { "px": [0,448], "src": [832,384], "f": 1, "t": 175, "d": [58,280], "a": 1 }, + { "px": [2496,448], "src": [832,384], "f": 0, "t": 175, "d": [58,319], "a": 1 }, + { "px": [0,512], "src": [832,384], "f": 1, "t": 175, "d": [58,320], "a": 1 }, + { "px": [2496,512], "src": [832,384], "f": 0, "t": 175, "d": [58,359], "a": 1 }, + { "px": [0,576], "src": [832,384], "f": 1, "t": 175, "d": [58,360], "a": 1 }, + { "px": [2496,576], "src": [832,384], "f": 0, "t": 175, "d": [58,399], "a": 1 }, + { "px": [0,640], "src": [832,384], "f": 1, "t": 175, "d": [58,400], "a": 1 }, + { "px": [2496,640], "src": [832,384], "f": 0, "t": 175, "d": [58,439], "a": 1 }, + { "px": [0,704], "src": [832,384], "f": 1, "t": 175, "d": [58,440], "a": 1 }, + { "px": [2496,704], "src": [832,384], "f": 0, "t": 175, "d": [58,479], "a": 1 }, + { "px": [0,768], "src": [832,384], "f": 1, "t": 175, "d": [58,480], "a": 1 }, + { "px": [2496,768], "src": [832,384], "f": 0, "t": 175, "d": [58,519], "a": 1 }, + { "px": [0,832], "src": [832,384], "f": 1, "t": 175, "d": [58,520], "a": 1 }, + { "px": [2496,832], "src": [832,384], "f": 0, "t": 175, "d": [58,559], "a": 1 }, + { "px": [0,896], "src": [832,384], "f": 1, "t": 175, "d": [58,560], "a": 1 }, + { "px": [2496,896], "src": [832,384], "f": 0, "t": 175, "d": [58,599], "a": 1 }, + { "px": [0,960], "src": [832,384], "f": 1, "t": 175, "d": [58,600], "a": 1 }, + { "px": [2496,960], "src": [832,384], "f": 0, "t": 175, "d": [58,639], "a": 1 }, + { "px": [0,1088], "src": [832,384], "f": 1, "t": 175, "d": [58,680], "a": 1 }, + { "px": [2304,1088], "src": [832,384], "f": 0, "t": 175, "d": [58,716], "a": 1 }, + { "px": [0,1152], "src": [832,384], "f": 1, "t": 175, "d": [58,720], "a": 1 }, + { "px": [0,1216], "src": [832,384], "f": 1, "t": 175, "d": [58,760], "a": 1 }, + { "px": [2496,1216], "src": [832,384], "f": 0, "t": 175, "d": [58,799], "a": 1 }, + { "px": [0,1280], "src": [832,384], "f": 1, "t": 175, "d": [58,800], "a": 1 }, + { "px": [1152,1280], "src": [832,384], "f": 0, "t": 175, "d": [58,818], "a": 1 }, + { "px": [1280,1280], "src": [832,384], "f": 1, "t": 175, "d": [58,820], "a": 1 }, + { "px": [2496,1280], "src": [832,384], "f": 0, "t": 175, "d": [58,839], "a": 1 }, + { "px": [0,1344], "src": [832,384], "f": 1, "t": 175, "d": [58,840], "a": 1 }, + { "px": [1152,1344], "src": [832,384], "f": 0, "t": 175, "d": [58,858], "a": 1 }, + { "px": [1280,1344], "src": [832,384], "f": 1, "t": 175, "d": [58,860], "a": 1 }, + { "px": [2496,1344], "src": [832,384], "f": 0, "t": 175, "d": [58,879], "a": 1 }, + { "px": [64,0], "src": [832,448], "f": 2, "t": 202, "d": [57,1], "a": 1 }, + { "px": [128,0], "src": [832,448], "f": 2, "t": 202, "d": [57,2], "a": 1 }, + { "px": [192,0], "src": [832,448], "f": 2, "t": 202, "d": [57,3], "a": 1 }, + { "px": [256,0], "src": [832,448], "f": 2, "t": 202, "d": [57,4], "a": 1 }, + { "px": [320,0], "src": [832,448], "f": 2, "t": 202, "d": [57,5], "a": 1 }, + { "px": [384,0], "src": [832,448], "f": 2, "t": 202, "d": [57,6], "a": 1 }, + { "px": [448,0], "src": [832,448], "f": 2, "t": 202, "d": [57,7], "a": 1 }, + { "px": [512,0], "src": [832,448], "f": 2, "t": 202, "d": [57,8], "a": 1 }, + { "px": [576,0], "src": [832,448], "f": 2, "t": 202, "d": [57,9], "a": 1 }, + { "px": [640,0], "src": [832,448], "f": 2, "t": 202, "d": [57,10], "a": 1 }, + { "px": [704,0], "src": [832,448], "f": 2, "t": 202, "d": [57,11], "a": 1 }, + { "px": [768,0], "src": [832,448], "f": 2, "t": 202, "d": [57,12], "a": 1 }, + { "px": [832,0], "src": [832,448], "f": 2, "t": 202, "d": [57,13], "a": 1 }, + { "px": [896,0], "src": [832,448], "f": 2, "t": 202, "d": [57,14], "a": 1 }, + { "px": [960,0], "src": [832,448], "f": 2, "t": 202, "d": [57,15], "a": 1 }, + { "px": [1024,0], "src": [832,448], "f": 2, "t": 202, "d": [57,16], "a": 1 }, + { "px": [1088,0], "src": [832,448], "f": 2, "t": 202, "d": [57,17], "a": 1 }, + { "px": [1152,0], "src": [832,448], "f": 2, "t": 202, "d": [57,18], "a": 1 }, + { "px": [1216,0], "src": [832,448], "f": 2, "t": 202, "d": [57,19], "a": 1 }, + { "px": [1280,0], "src": [832,448], "f": 2, "t": 202, "d": [57,20], "a": 1 }, + { "px": [1344,0], "src": [832,448], "f": 2, "t": 202, "d": [57,21], "a": 1 }, + { "px": [1408,0], "src": [832,448], "f": 2, "t": 202, "d": [57,22], "a": 1 }, + { "px": [1472,0], "src": [832,448], "f": 2, "t": 202, "d": [57,23], "a": 1 }, + { "px": [1536,0], "src": [832,448], "f": 2, "t": 202, "d": [57,24], "a": 1 }, + { "px": [1600,0], "src": [832,448], "f": 2, "t": 202, "d": [57,25], "a": 1 }, + { "px": [1664,0], "src": [832,448], "f": 2, "t": 202, "d": [57,26], "a": 1 }, + { "px": [1728,0], "src": [832,448], "f": 2, "t": 202, "d": [57,27], "a": 1 }, + { "px": [1792,0], "src": [832,448], "f": 2, "t": 202, "d": [57,28], "a": 1 }, + { "px": [1856,0], "src": [832,448], "f": 2, "t": 202, "d": [57,29], "a": 1 }, + { "px": [1920,0], "src": [832,448], "f": 2, "t": 202, "d": [57,30], "a": 1 }, + { "px": [1984,0], "src": [832,448], "f": 2, "t": 202, "d": [57,31], "a": 1 }, + { "px": [2048,0], "src": [832,448], "f": 2, "t": 202, "d": [57,32], "a": 1 }, + { "px": [2112,0], "src": [832,448], "f": 2, "t": 202, "d": [57,33], "a": 1 }, + { "px": [2176,0], "src": [832,448], "f": 2, "t": 202, "d": [57,34], "a": 1 }, + { "px": [2240,0], "src": [832,448], "f": 2, "t": 202, "d": [57,35], "a": 1 }, + { "px": [2240,192], "src": [832,448], "f": 0, "t": 202, "d": [57,155], "a": 1 }, + { "px": [1216,256], "src": [832,448], "f": 0, "t": 202, "d": [57,179], "a": 1 }, + { "px": [2240,256], "src": [832,448], "f": 2, "t": 202, "d": [57,195], "a": 1 }, + { "px": [2304,256], "src": [832,448], "f": 2, "t": 202, "d": [57,196], "a": 1 }, + { "px": [2368,256], "src": [832,448], "f": 2, "t": 202, "d": [57,197], "a": 1 }, + { "px": [2432,256], "src": [832,448], "f": 2, "t": 202, "d": [57,198], "a": 1 }, + { "px": [1152,448], "src": [832,448], "f": 2, "t": 202, "d": [57,298], "a": 1 }, + { "px": [1216,448], "src": [832,448], "f": 2, "t": 202, "d": [57,299], "a": 1 }, + { "px": [1280,448], "src": [832,448], "f": 2, "t": 202, "d": [57,300], "a": 1 }, + { "px": [2368,1024], "src": [832,448], "f": 0, "t": 202, "d": [57,677], "a": 1 }, + { "px": [2432,1024], "src": [832,448], "f": 0, "t": 202, "d": [57,678], "a": 1 }, + { "px": [2368,1152], "src": [832,448], "f": 2, "t": 202, "d": [57,757], "a": 1 }, + { "px": [2432,1152], "src": [832,448], "f": 2, "t": 202, "d": [57,758], "a": 1 }, + { "px": [1216,1216], "src": [832,448], "f": 0, "t": 202, "d": [57,779], "a": 1 }, + { "px": [64,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,881], "a": 1 }, + { "px": [128,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,882], "a": 1 }, + { "px": [192,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,883], "a": 1 }, + { "px": [256,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,884], "a": 1 }, + { "px": [320,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,885], "a": 1 }, + { "px": [576,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,889], "a": 1 }, + { "px": [640,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,890], "a": 1 }, + { "px": [704,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,891], "a": 1 }, + { "px": [768,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,892], "a": 1 }, + { "px": [832,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,893], "a": 1 }, + { "px": [896,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,894], "a": 1 }, + { "px": [960,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,895], "a": 1 }, + { "px": [1024,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,896], "a": 1 }, + { "px": [1088,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,897], "a": 1 }, + { "px": [1344,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,901], "a": 1 }, + { "px": [1408,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,902], "a": 1 }, + { "px": [1472,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,903], "a": 1 }, + { "px": [1536,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,904], "a": 1 }, + { "px": [1600,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,905], "a": 1 }, + { "px": [1664,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,906], "a": 1 }, + { "px": [1728,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,907], "a": 1 }, + { "px": [1792,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,908], "a": 1 }, + { "px": [1856,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,909], "a": 1 }, + { "px": [1920,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,910], "a": 1 }, + { "px": [1984,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,911], "a": 1 }, + { "px": [2048,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,912], "a": 1 }, + { "px": [2112,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,913], "a": 1 }, + { "px": [2176,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,914], "a": 1 }, + { "px": [2240,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,915], "a": 1 }, + { "px": [2304,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,916], "a": 1 }, + { "px": [2368,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,917], "a": 1 }, + { "px": [2432,1408], "src": [832,448], "f": 0, "t": 202, "d": [57,918], "a": 1 }, + { "px": [2176,192], "src": [1024,256], "f": 0, "t": 124, "d": [56,154], "a": 1 }, + { "px": [1152,256], "src": [1024,256], "f": 0, "t": 124, "d": [56,178], "a": 1 }, + { "px": [1280,256], "src": [1024,256], "f": 1, "t": 124, "d": [56,180], "a": 1 }, + { "px": [2176,256], "src": [1024,256], "f": 2, "t": 124, "d": [56,194], "a": 1 }, + { "px": [1088,320], "src": [1024,256], "f": 0, "t": 124, "d": [56,217], "a": 1 }, + { "px": [1344,320], "src": [1024,256], "f": 1, "t": 124, "d": [56,221], "a": 1 }, + { "px": [1088,448], "src": [1024,256], "f": 2, "t": 124, "d": [56,297], "a": 1 }, + { "px": [1344,448], "src": [1024,256], "f": 3, "t": 124, "d": [56,301], "a": 1 }, + { "px": [2304,1152], "src": [1024,256], "f": 2, "t": 124, "d": [56,756], "a": 1 }, + { "px": [1152,1216], "src": [1024,256], "f": 0, "t": 124, "d": [56,778], "a": 1 }, + { "px": [1280,1216], "src": [1024,256], "f": 1, "t": 124, "d": [56,780], "a": 1 }, + { "px": [384,1344], "src": [704,320], "f": 0, "t": 146, "d": [55,846], "a": 1 }, + { "px": [512,1344], "src": [704,320], "f": 0, "t": 146, "d": [55,848], "a": 1 }, + { "px": [64,1024], "src": [704,256], "f": 0, "t": 119, "d": [52,641], "a": 1 }, + { "px": [128,1024], "src": [704,256], "f": 0, "t": 119, "d": [52,642], "a": 1 }, + { "px": [192,1024], "src": [704,256], "f": 0, "t": 119, "d": [52,643], "a": 1 }, + { "px": [640,1024], "src": [704,256], "f": 0, "t": 119, "d": [52,650], "a": 1 }, + { "px": [704,1024], "src": [704,256], "f": 0, "t": 119, "d": [52,651], "a": 1 }, + { "px": [768,1024], "src": [704,256], "f": 0, "t": 119, "d": [52,652], "a": 1 }, + { "px": [832,1024], "src": [704,256], "f": 0, "t": 119, "d": [52,653], "a": 1 }, + { "px": [896,1024], "src": [704,256], "f": 0, "t": 119, "d": [52,654], "a": 1 }, + { "px": [960,1024], "src": [704,256], "f": 0, "t": 119, "d": [52,655], "a": 1 }, + { "px": [1024,1024], "src": [704,256], "f": 0, "t": 119, "d": [52,656], "a": 1 }, + { "px": [1088,1024], "src": [704,256], "f": 0, "t": 119, "d": [52,657], "a": 1 }, + { "px": [1152,1024], "src": [704,256], "f": 0, "t": 119, "d": [52,658], "a": 1 }, + { "px": [1216,1024], "src": [704,256], "f": 0, "t": 119, "d": [52,659], "a": 1 }, + { "px": [1280,1024], "src": [704,256], "f": 0, "t": 119, "d": [52,660], "a": 1 }, + { "px": [1344,1024], "src": [704,256], "f": 0, "t": 119, "d": [52,661], "a": 1 }, + { "px": [1408,1024], "src": [704,256], "f": 0, "t": 119, "d": [52,662], "a": 1 }, + { "px": [1472,1024], "src": [704,256], "f": 0, "t": 119, "d": [52,663], "a": 1 }, + { "px": [1536,1024], "src": [704,256], "f": 0, "t": 119, "d": [52,664], "a": 1 }, + { "px": [1600,1024], "src": [704,256], "f": 0, "t": 119, "d": [52,665], "a": 1 }, + { "px": [1664,1024], "src": [704,256], "f": 0, "t": 119, "d": [52,666], "a": 1 }, + { "px": [1728,1024], "src": [704,256], "f": 0, "t": 119, "d": [52,667], "a": 1 }, + { "px": [1792,1024], "src": [704,256], "f": 0, "t": 119, "d": [52,668], "a": 1 }, + { "px": [1856,1024], "src": [704,256], "f": 0, "t": 119, "d": [52,669], "a": 1 }, + { "px": [2176,1024], "src": [704,256], "f": 0, "t": 119, "d": [52,674], "a": 1 }, + { "px": [2240,1024], "src": [704,256], "f": 0, "t": 119, "d": [52,675], "a": 1 }, + { "px": [448,1280], "src": [704,256], "f": 0, "t": 119, "d": [52,807], "a": 1 }, + { "px": [1664,768], "src": [896,256], "f": 0, "t": 122, "d": [51,506], "a": 1 }, + { "px": [256,1024], "src": [896,256], "f": 0, "t": 122, "d": [51,644], "a": 1 }, + { "px": [1920,1024], "src": [896,256], "f": 0, "t": 122, "d": [51,670], "a": 1 }, + { "px": [1600,768], "src": [960,320], "f": 0, "t": 150, "d": [50,505], "a": 1 }, + { "px": [576,1024], "src": [960,320], "f": 0, "t": 150, "d": [50,649], "a": 1 }, + { "px": [2112,1024], "src": [960,320], "f": 0, "t": 150, "d": [50,673], "a": 1 }, + { "px": [0,1024], "src": [768,448], "f": 1, "t": 201, "d": [48,640], "a": 1 }, + { "px": [384,1408], "src": [768,512], "f": 0, "t": 228, "d": [38,886], "a": 1 }, + { "px": [2304,1024], "src": [832,512], "f": 0, "t": 229, "d": [36,676], "a": 1 }, + { "px": [512,1408], "src": [704,512], "f": 0, "t": 227, "d": [35,888], "a": 1 }, + { "px": [384,1280], "src": [576,256], "f": 0, "t": 117, "d": [33,806], "a": 1 }, + { "px": [512,1280], "src": [576,256], "f": 1, "t": 117, "d": [33,808], "a": 1 }, + { "px": [1984,576], "src": [960,448], "f": 0, "t": 204, "d": [31,391], "a": 1 }, + { "px": [512,704], "src": [960,448], "f": 0, "t": 204, "d": [31,448], "a": 1 }, + { "px": [64,64], "src": [192,0], "f": 0, "t": 3, "d": [63,41], "a": 1 }, + { "px": [128,64], "src": [64,0], "f": 0, "t": 1, "d": [63,42], "a": 1 }, + { "px": [192,64], "src": [128,0], "f": 0, "t": 2, "d": [63,43], "a": 1 }, + { "px": [256,64], "src": [192,0], "f": 0, "t": 3, "d": [63,44], "a": 1 }, + { "px": [320,64], "src": [64,0], "f": 0, "t": 1, "d": [63,45], "a": 1 }, + { "px": [384,64], "src": [0,0], "f": 0, "t": 0, "d": [63,46], "a": 1 }, + { "px": [448,64], "src": [0,0], "f": 0, "t": 0, "d": [63,47], "a": 1 }, + { "px": [512,64], "src": [128,0], "f": 0, "t": 2, "d": [63,48], "a": 1 }, + { "px": [576,64], "src": [64,0], "f": 0, "t": 1, "d": [63,49], "a": 1 }, + { "px": [640,64], "src": [128,0], "f": 0, "t": 2, "d": [63,50], "a": 1 }, + { "px": [704,64], "src": [192,0], "f": 0, "t": 3, "d": [63,51], "a": 1 }, + { "px": [768,64], "src": [128,0], "f": 0, "t": 2, "d": [63,52], "a": 1 }, + { "px": [832,64], "src": [128,0], "f": 0, "t": 2, "d": [63,53], "a": 1 }, + { "px": [896,64], "src": [64,0], "f": 0, "t": 1, "d": [63,54], "a": 1 }, + { "px": [960,64], "src": [192,0], "f": 0, "t": 3, "d": [63,55], "a": 1 }, + { "px": [1024,64], "src": [192,0], "f": 0, "t": 3, "d": [63,56], "a": 1 }, + { "px": [1088,64], "src": [64,0], "f": 0, "t": 1, "d": [63,57], "a": 1 }, + { "px": [1152,64], "src": [64,0], "f": 0, "t": 1, "d": [63,58], "a": 1 }, + { "px": [1216,64], "src": [0,0], "f": 0, "t": 0, "d": [63,59], "a": 1 }, + { "px": [1280,64], "src": [128,0], "f": 0, "t": 2, "d": [63,60], "a": 1 }, + { "px": [1344,64], "src": [64,0], "f": 0, "t": 1, "d": [63,61], "a": 1 }, + { "px": [1408,64], "src": [64,0], "f": 0, "t": 1, "d": [63,62], "a": 1 }, + { "px": [1472,64], "src": [192,0], "f": 0, "t": 3, "d": [63,63], "a": 1 }, + { "px": [1536,64], "src": [64,0], "f": 0, "t": 1, "d": [63,64], "a": 1 }, + { "px": [1600,64], "src": [192,0], "f": 0, "t": 3, "d": [63,65], "a": 1 }, + { "px": [1664,64], "src": [192,0], "f": 0, "t": 3, "d": [63,66], "a": 1 }, + { "px": [1728,64], "src": [0,0], "f": 0, "t": 0, "d": [63,67], "a": 1 }, + { "px": [1792,64], "src": [0,0], "f": 0, "t": 0, "d": [63,68], "a": 1 }, + { "px": [1856,64], "src": [0,0], "f": 0, "t": 0, "d": [63,69], "a": 1 }, + { "px": [1920,64], "src": [64,0], "f": 0, "t": 1, "d": [63,70], "a": 1 }, + { "px": [1984,64], "src": [64,0], "f": 0, "t": 1, "d": [63,71], "a": 1 }, + { "px": [2048,64], "src": [128,0], "f": 0, "t": 2, "d": [63,72], "a": 1 }, + { "px": [2112,64], "src": [128,0], "f": 0, "t": 2, "d": [63,73], "a": 1 }, + { "px": [2176,64], "src": [0,0], "f": 0, "t": 0, "d": [63,74], "a": 1 }, + { "px": [2240,64], "src": [128,0], "f": 0, "t": 2, "d": [63,75], "a": 1 }, + { "px": [64,128], "src": [128,0], "f": 0, "t": 2, "d": [63,81], "a": 1 }, + { "px": [128,128], "src": [64,0], "f": 0, "t": 1, "d": [63,82], "a": 1 }, + { "px": [256,128], "src": [128,0], "f": 0, "t": 2, "d": [63,84], "a": 1 }, + { "px": [320,128], "src": [0,0], "f": 0, "t": 0, "d": [63,85], "a": 1 }, + { "px": [384,128], "src": [64,0], "f": 0, "t": 1, "d": [63,86], "a": 1 }, + { "px": [448,128], "src": [0,0], "f": 0, "t": 0, "d": [63,87], "a": 1 }, + { "px": [512,128], "src": [128,0], "f": 0, "t": 2, "d": [63,88], "a": 1 }, + { "px": [576,128], "src": [192,0], "f": 0, "t": 3, "d": [63,89], "a": 1 }, + { "px": [640,128], "src": [64,0], "f": 0, "t": 1, "d": [63,90], "a": 1 }, + { "px": [704,128], "src": [64,0], "f": 0, "t": 1, "d": [63,91], "a": 1 }, + { "px": [768,128], "src": [128,0], "f": 0, "t": 2, "d": [63,92], "a": 1 }, + { "px": [832,128], "src": [64,0], "f": 0, "t": 1, "d": [63,93], "a": 1 }, + { "px": [896,128], "src": [0,0], "f": 0, "t": 0, "d": [63,94], "a": 1 }, + { "px": [1024,128], "src": [192,0], "f": 0, "t": 3, "d": [63,96], "a": 1 }, + { "px": [1088,128], "src": [192,0], "f": 0, "t": 3, "d": [63,97], "a": 1 }, + { "px": [1152,128], "src": [192,0], "f": 0, "t": 3, "d": [63,98], "a": 1 }, + { "px": [1216,128], "src": [192,0], "f": 0, "t": 3, "d": [63,99], "a": 1 }, + { "px": [1280,128], "src": [128,0], "f": 0, "t": 2, "d": [63,100], "a": 1 }, + { "px": [1344,128], "src": [0,0], "f": 0, "t": 0, "d": [63,101], "a": 1 }, + { "px": [1408,128], "src": [0,0], "f": 0, "t": 0, "d": [63,102], "a": 1 }, + { "px": [1472,128], "src": [0,0], "f": 0, "t": 0, "d": [63,103], "a": 1 }, + { "px": [1536,128], "src": [64,0], "f": 0, "t": 1, "d": [63,104], "a": 1 }, + { "px": [1600,128], "src": [192,0], "f": 0, "t": 3, "d": [63,105], "a": 1 }, + { "px": [1664,128], "src": [64,0], "f": 0, "t": 1, "d": [63,106], "a": 1 }, + { "px": [1728,128], "src": [64,0], "f": 0, "t": 1, "d": [63,107], "a": 1 }, + { "px": [1792,128], "src": [64,0], "f": 0, "t": 1, "d": [63,108], "a": 1 }, + { "px": [1856,128], "src": [64,0], "f": 0, "t": 1, "d": [63,109], "a": 1 }, + { "px": [1920,128], "src": [64,0], "f": 0, "t": 1, "d": [63,110], "a": 1 }, + { "px": [1984,128], "src": [0,0], "f": 0, "t": 0, "d": [63,111], "a": 1 }, + { "px": [2048,128], "src": [192,0], "f": 0, "t": 3, "d": [63,112], "a": 1 }, + { "px": [2112,128], "src": [192,0], "f": 0, "t": 3, "d": [63,113], "a": 1 }, + { "px": [2176,128], "src": [64,0], "f": 0, "t": 1, "d": [63,114], "a": 1 }, + { "px": [2240,128], "src": [192,0], "f": 0, "t": 3, "d": [63,115], "a": 1 }, + { "px": [64,192], "src": [0,0], "f": 0, "t": 0, "d": [63,121], "a": 1 }, + { "px": [128,192], "src": [64,0], "f": 0, "t": 1, "d": [63,122], "a": 1 }, + { "px": [192,192], "src": [64,0], "f": 0, "t": 1, "d": [63,123], "a": 1 }, + { "px": [256,192], "src": [192,0], "f": 0, "t": 3, "d": [63,124], "a": 1 }, + { "px": [320,192], "src": [64,0], "f": 0, "t": 1, "d": [63,125], "a": 1 }, + { "px": [384,192], "src": [0,0], "f": 0, "t": 0, "d": [63,126], "a": 1 }, + { "px": [448,192], "src": [0,0], "f": 0, "t": 0, "d": [63,127], "a": 1 }, + { "px": [512,192], "src": [64,0], "f": 0, "t": 1, "d": [63,128], "a": 1 }, + { "px": [576,192], "src": [128,0], "f": 0, "t": 2, "d": [63,129], "a": 1 }, + { "px": [640,192], "src": [64,0], "f": 0, "t": 1, "d": [63,130], "a": 1 }, + { "px": [704,192], "src": [192,0], "f": 0, "t": 3, "d": [63,131], "a": 1 }, + { "px": [768,192], "src": [64,0], "f": 0, "t": 1, "d": [63,132], "a": 1 }, + { "px": [832,192], "src": [192,0], "f": 0, "t": 3, "d": [63,133], "a": 1 }, + { "px": [896,192], "src": [128,0], "f": 0, "t": 2, "d": [63,134], "a": 1 }, + { "px": [960,192], "src": [64,0], "f": 0, "t": 1, "d": [63,135], "a": 1 }, + { "px": [1024,192], "src": [128,0], "f": 0, "t": 2, "d": [63,136], "a": 1 }, + { "px": [1088,192], "src": [0,0], "f": 0, "t": 0, "d": [63,137], "a": 1 }, + { "px": [1152,192], "src": [64,0], "f": 0, "t": 1, "d": [63,138], "a": 1 }, + { "px": [1216,192], "src": [0,0], "f": 0, "t": 0, "d": [63,139], "a": 1 }, + { "px": [1280,192], "src": [64,0], "f": 0, "t": 1, "d": [63,140], "a": 1 }, + { "px": [1344,192], "src": [192,0], "f": 0, "t": 3, "d": [63,141], "a": 1 }, + { "px": [1408,192], "src": [128,0], "f": 0, "t": 2, "d": [63,142], "a": 1 }, + { "px": [1472,192], "src": [0,0], "f": 0, "t": 0, "d": [63,143], "a": 1 }, + { "px": [1536,192], "src": [192,0], "f": 0, "t": 3, "d": [63,144], "a": 1 }, + { "px": [1600,192], "src": [128,0], "f": 0, "t": 2, "d": [63,145], "a": 1 }, + { "px": [1664,192], "src": [192,0], "f": 0, "t": 3, "d": [63,146], "a": 1 }, + { "px": [1728,192], "src": [0,0], "f": 0, "t": 0, "d": [63,147], "a": 1 }, + { "px": [1792,192], "src": [0,0], "f": 0, "t": 0, "d": [63,148], "a": 1 }, + { "px": [1856,192], "src": [64,0], "f": 0, "t": 1, "d": [63,149], "a": 1 }, + { "px": [1920,192], "src": [0,0], "f": 0, "t": 0, "d": [63,150], "a": 1 }, + { "px": [1984,192], "src": [0,0], "f": 0, "t": 0, "d": [63,151], "a": 1 }, + { "px": [2048,192], "src": [64,0], "f": 0, "t": 1, "d": [63,152], "a": 1 }, + { "px": [2112,192], "src": [0,0], "f": 0, "t": 0, "d": [63,153], "a": 1 }, + { "px": [64,256], "src": [0,0], "f": 0, "t": 0, "d": [63,161], "a": 1 }, + { "px": [128,256], "src": [192,0], "f": 0, "t": 3, "d": [63,162], "a": 1 }, + { "px": [192,256], "src": [0,0], "f": 0, "t": 0, "d": [63,163], "a": 1 }, + { "px": [256,256], "src": [192,0], "f": 0, "t": 3, "d": [63,164], "a": 1 }, + { "px": [320,256], "src": [0,0], "f": 0, "t": 0, "d": [63,165], "a": 1 }, + { "px": [384,256], "src": [128,0], "f": 0, "t": 2, "d": [63,166], "a": 1 }, + { "px": [448,256], "src": [192,0], "f": 0, "t": 3, "d": [63,167], "a": 1 }, + { "px": [512,256], "src": [192,0], "f": 0, "t": 3, "d": [63,168], "a": 1 }, + { "px": [576,256], "src": [192,0], "f": 0, "t": 3, "d": [63,169], "a": 1 }, + { "px": [640,256], "src": [192,0], "f": 0, "t": 3, "d": [63,170], "a": 1 }, + { "px": [704,256], "src": [64,0], "f": 0, "t": 1, "d": [63,171], "a": 1 }, + { "px": [768,256], "src": [128,0], "f": 0, "t": 2, "d": [63,172], "a": 1 }, + { "px": [832,256], "src": [192,0], "f": 0, "t": 3, "d": [63,173], "a": 1 }, + { "px": [896,256], "src": [64,0], "f": 0, "t": 1, "d": [63,174], "a": 1 }, + { "px": [960,256], "src": [64,0], "f": 0, "t": 1, "d": [63,175], "a": 1 }, + { "px": [1024,256], "src": [0,0], "f": 0, "t": 0, "d": [63,176], "a": 1 }, + { "px": [1088,256], "src": [128,0], "f": 0, "t": 2, "d": [63,177], "a": 1 }, + { "px": [1344,256], "src": [64,0], "f": 0, "t": 1, "d": [63,181], "a": 1 }, + { "px": [1408,256], "src": [128,0], "f": 0, "t": 2, "d": [63,182], "a": 1 }, + { "px": [1472,256], "src": [128,0], "f": 0, "t": 2, "d": [63,183], "a": 1 }, + { "px": [1536,256], "src": [128,0], "f": 0, "t": 2, "d": [63,184], "a": 1 }, + { "px": [1600,256], "src": [192,0], "f": 0, "t": 3, "d": [63,185], "a": 1 }, + { "px": [1664,256], "src": [128,0], "f": 0, "t": 2, "d": [63,186], "a": 1 }, + { "px": [1728,256], "src": [0,0], "f": 0, "t": 0, "d": [63,187], "a": 1 }, + { "px": [1792,256], "src": [128,0], "f": 0, "t": 2, "d": [63,188], "a": 1 }, + { "px": [1856,256], "src": [192,0], "f": 0, "t": 3, "d": [63,189], "a": 1 }, + { "px": [1920,256], "src": [64,0], "f": 0, "t": 1, "d": [63,190], "a": 1 }, + { "px": [1984,256], "src": [192,0], "f": 0, "t": 3, "d": [63,191], "a": 1 }, + { "px": [2048,256], "src": [128,0], "f": 0, "t": 2, "d": [63,192], "a": 1 }, + { "px": [2112,256], "src": [64,0], "f": 0, "t": 1, "d": [63,193], "a": 1 }, + { "px": [64,320], "src": [192,0], "f": 0, "t": 3, "d": [63,201], "a": 1 }, + { "px": [128,320], "src": [128,0], "f": 0, "t": 2, "d": [63,202], "a": 1 }, + { "px": [192,320], "src": [128,0], "f": 0, "t": 2, "d": [63,203], "a": 1 }, + { "px": [256,320], "src": [0,0], "f": 0, "t": 0, "d": [63,204], "a": 1 }, + { "px": [320,320], "src": [0,0], "f": 0, "t": 0, "d": [63,205], "a": 1 }, + { "px": [384,320], "src": [128,0], "f": 0, "t": 2, "d": [63,206], "a": 1 }, + { "px": [448,320], "src": [192,0], "f": 0, "t": 3, "d": [63,207], "a": 1 }, + { "px": [512,320], "src": [0,0], "f": 0, "t": 0, "d": [63,208], "a": 1 }, + { "px": [576,320], "src": [128,0], "f": 0, "t": 2, "d": [63,209], "a": 1 }, + { "px": [640,320], "src": [128,0], "f": 0, "t": 2, "d": [63,210], "a": 1 }, + { "px": [704,320], "src": [0,0], "f": 0, "t": 0, "d": [63,211], "a": 1 }, + { "px": [768,320], "src": [64,0], "f": 0, "t": 1, "d": [63,212], "a": 1 }, + { "px": [832,320], "src": [128,0], "f": 0, "t": 2, "d": [63,213], "a": 1 }, + { "px": [896,320], "src": [128,0], "f": 0, "t": 2, "d": [63,214], "a": 1 }, + { "px": [960,320], "src": [64,0], "f": 0, "t": 1, "d": [63,215], "a": 1 }, + { "px": [1024,320], "src": [192,0], "f": 0, "t": 3, "d": [63,216], "a": 1 }, + { "px": [1408,320], "src": [128,0], "f": 0, "t": 2, "d": [63,222], "a": 1 }, + { "px": [1472,320], "src": [0,0], "f": 0, "t": 0, "d": [63,223], "a": 1 }, + { "px": [1536,320], "src": [0,0], "f": 0, "t": 0, "d": [63,224], "a": 1 }, + { "px": [1600,320], "src": [128,0], "f": 0, "t": 2, "d": [63,225], "a": 1 }, + { "px": [1664,320], "src": [64,0], "f": 0, "t": 1, "d": [63,226], "a": 1 }, + { "px": [1728,320], "src": [64,0], "f": 0, "t": 1, "d": [63,227], "a": 1 }, + { "px": [1792,320], "src": [0,0], "f": 0, "t": 0, "d": [63,228], "a": 1 }, + { "px": [1856,320], "src": [0,0], "f": 0, "t": 0, "d": [63,229], "a": 1 }, + { "px": [1920,320], "src": [0,0], "f": 0, "t": 0, "d": [63,230], "a": 1 }, + { "px": [1984,320], "src": [64,0], "f": 0, "t": 1, "d": [63,231], "a": 1 }, + { "px": [2048,320], "src": [64,0], "f": 0, "t": 1, "d": [63,232], "a": 1 }, + { "px": [2112,320], "src": [64,0], "f": 0, "t": 1, "d": [63,233], "a": 1 }, + { "px": [2176,320], "src": [128,0], "f": 0, "t": 2, "d": [63,234], "a": 1 }, + { "px": [2240,320], "src": [0,0], "f": 0, "t": 0, "d": [63,235], "a": 1 }, + { "px": [2304,320], "src": [64,0], "f": 0, "t": 1, "d": [63,236], "a": 1 }, + { "px": [2368,320], "src": [64,0], "f": 0, "t": 1, "d": [63,237], "a": 1 }, + { "px": [2432,320], "src": [0,0], "f": 0, "t": 0, "d": [63,238], "a": 1 }, + { "px": [64,384], "src": [192,0], "f": 0, "t": 3, "d": [63,241], "a": 1 }, + { "px": [128,384], "src": [0,0], "f": 0, "t": 0, "d": [63,242], "a": 1 }, + { "px": [192,384], "src": [192,0], "f": 0, "t": 3, "d": [63,243], "a": 1 }, + { "px": [256,384], "src": [0,0], "f": 0, "t": 0, "d": [63,244], "a": 1 }, + { "px": [320,384], "src": [192,0], "f": 0, "t": 3, "d": [63,245], "a": 1 }, + { "px": [384,384], "src": [64,0], "f": 0, "t": 1, "d": [63,246], "a": 1 }, + { "px": [576,384], "src": [64,0], "f": 0, "t": 1, "d": [63,249], "a": 1 }, + { "px": [640,384], "src": [128,0], "f": 0, "t": 2, "d": [63,250], "a": 1 }, + { "px": [704,384], "src": [192,0], "f": 0, "t": 3, "d": [63,251], "a": 1 }, + { "px": [768,384], "src": [64,0], "f": 0, "t": 1, "d": [63,252], "a": 1 }, + { "px": [832,384], "src": [192,0], "f": 0, "t": 3, "d": [63,253], "a": 1 }, + { "px": [896,384], "src": [0,0], "f": 0, "t": 0, "d": [63,254], "a": 1 }, + { "px": [960,384], "src": [64,0], "f": 0, "t": 1, "d": [63,255], "a": 1 }, + { "px": [1024,384], "src": [128,0], "f": 0, "t": 2, "d": [63,256], "a": 1 }, + { "px": [1408,384], "src": [192,0], "f": 0, "t": 3, "d": [63,262], "a": 1 }, + { "px": [1472,384], "src": [64,0], "f": 0, "t": 1, "d": [63,263], "a": 1 }, + { "px": [1536,384], "src": [128,0], "f": 0, "t": 2, "d": [63,264], "a": 1 }, + { "px": [1600,384], "src": [64,0], "f": 0, "t": 1, "d": [63,265], "a": 1 }, + { "px": [1664,384], "src": [128,0], "f": 0, "t": 2, "d": [63,266], "a": 1 }, + { "px": [1728,384], "src": [64,0], "f": 0, "t": 1, "d": [63,267], "a": 1 }, + { "px": [1792,384], "src": [0,0], "f": 0, "t": 0, "d": [63,268], "a": 1 }, + { "px": [1856,384], "src": [192,0], "f": 0, "t": 3, "d": [63,269], "a": 1 }, + { "px": [1920,384], "src": [0,0], "f": 0, "t": 0, "d": [63,270], "a": 1 }, + { "px": [1984,384], "src": [192,0], "f": 0, "t": 3, "d": [63,271], "a": 1 }, + { "px": [2048,384], "src": [0,0], "f": 0, "t": 0, "d": [63,272], "a": 1 }, + { "px": [2112,384], "src": [192,0], "f": 0, "t": 3, "d": [63,273], "a": 1 }, + { "px": [2176,384], "src": [192,0], "f": 0, "t": 3, "d": [63,274], "a": 1 }, + { "px": [2240,384], "src": [0,0], "f": 0, "t": 0, "d": [63,275], "a": 1 }, + { "px": [2304,384], "src": [64,0], "f": 0, "t": 1, "d": [63,276], "a": 1 }, + { "px": [2368,384], "src": [0,0], "f": 0, "t": 0, "d": [63,277], "a": 1 }, + { "px": [2432,384], "src": [0,0], "f": 0, "t": 0, "d": [63,278], "a": 1 }, + { "px": [64,448], "src": [192,0], "f": 0, "t": 3, "d": [63,281], "a": 1 }, + { "px": [128,448], "src": [0,0], "f": 0, "t": 0, "d": [63,282], "a": 1 }, + { "px": [192,448], "src": [0,0], "f": 0, "t": 0, "d": [63,283], "a": 1 }, + { "px": [256,448], "src": [192,0], "f": 0, "t": 3, "d": [63,284], "a": 1 }, + { "px": [320,448], "src": [0,0], "f": 0, "t": 0, "d": [63,285], "a": 1 }, + { "px": [384,448], "src": [64,0], "f": 0, "t": 1, "d": [63,286], "a": 1 }, + { "px": [448,448], "src": [192,0], "f": 0, "t": 3, "d": [63,287], "a": 1 }, + { "px": [512,448], "src": [192,0], "f": 0, "t": 3, "d": [63,288], "a": 1 }, + { "px": [576,448], "src": [128,0], "f": 0, "t": 2, "d": [63,289], "a": 1 }, + { "px": [640,448], "src": [128,0], "f": 0, "t": 2, "d": [63,290], "a": 1 }, + { "px": [704,448], "src": [64,0], "f": 0, "t": 1, "d": [63,291], "a": 1 }, + { "px": [768,448], "src": [192,0], "f": 0, "t": 3, "d": [63,292], "a": 1 }, + { "px": [832,448], "src": [128,0], "f": 0, "t": 2, "d": [63,293], "a": 1 }, + { "px": [896,448], "src": [64,0], "f": 0, "t": 1, "d": [63,294], "a": 1 }, + { "px": [960,448], "src": [192,0], "f": 0, "t": 3, "d": [63,295], "a": 1 }, + { "px": [1024,448], "src": [0,0], "f": 0, "t": 0, "d": [63,296], "a": 1 }, + { "px": [1408,448], "src": [64,0], "f": 0, "t": 1, "d": [63,302], "a": 1 }, + { "px": [1472,448], "src": [128,0], "f": 0, "t": 2, "d": [63,303], "a": 1 }, + { "px": [1536,448], "src": [192,0], "f": 0, "t": 3, "d": [63,304], "a": 1 }, + { "px": [1600,448], "src": [0,0], "f": 0, "t": 0, "d": [63,305], "a": 1 }, + { "px": [1664,448], "src": [192,0], "f": 0, "t": 3, "d": [63,306], "a": 1 }, + { "px": [1728,448], "src": [192,0], "f": 0, "t": 3, "d": [63,307], "a": 1 }, + { "px": [1792,448], "src": [192,0], "f": 0, "t": 3, "d": [63,308], "a": 1 }, + { "px": [1856,448], "src": [192,0], "f": 0, "t": 3, "d": [63,309], "a": 1 }, + { "px": [1920,448], "src": [128,0], "f": 0, "t": 2, "d": [63,310], "a": 1 }, + { "px": [1984,448], "src": [64,0], "f": 0, "t": 1, "d": [63,311], "a": 1 }, + { "px": [2048,448], "src": [128,0], "f": 0, "t": 2, "d": [63,312], "a": 1 }, + { "px": [2112,448], "src": [0,0], "f": 0, "t": 0, "d": [63,313], "a": 1 }, + { "px": [2176,448], "src": [128,0], "f": 0, "t": 2, "d": [63,314], "a": 1 }, + { "px": [2240,448], "src": [128,0], "f": 0, "t": 2, "d": [63,315], "a": 1 }, + { "px": [2304,448], "src": [192,0], "f": 0, "t": 3, "d": [63,316], "a": 1 }, + { "px": [2368,448], "src": [64,0], "f": 0, "t": 1, "d": [63,317], "a": 1 }, + { "px": [2432,448], "src": [192,0], "f": 0, "t": 3, "d": [63,318], "a": 1 }, + { "px": [64,512], "src": [192,0], "f": 0, "t": 3, "d": [63,321], "a": 1 }, + { "px": [128,512], "src": [64,0], "f": 0, "t": 1, "d": [63,322], "a": 1 }, + { "px": [192,512], "src": [128,0], "f": 0, "t": 2, "d": [63,323], "a": 1 }, + { "px": [256,512], "src": [128,0], "f": 0, "t": 2, "d": [63,324], "a": 1 }, + { "px": [320,512], "src": [0,0], "f": 0, "t": 0, "d": [63,325], "a": 1 }, + { "px": [384,512], "src": [192,0], "f": 0, "t": 3, "d": [63,326], "a": 1 }, + { "px": [448,512], "src": [0,0], "f": 0, "t": 0, "d": [63,327], "a": 1 }, + { "px": [512,512], "src": [192,0], "f": 0, "t": 3, "d": [63,328], "a": 1 }, + { "px": [576,512], "src": [128,0], "f": 0, "t": 2, "d": [63,329], "a": 1 }, + { "px": [640,512], "src": [0,0], "f": 0, "t": 0, "d": [63,330], "a": 1 }, + { "px": [704,512], "src": [0,0], "f": 0, "t": 0, "d": [63,331], "a": 1 }, + { "px": [768,512], "src": [64,0], "f": 0, "t": 1, "d": [63,332], "a": 1 }, + { "px": [832,512], "src": [64,0], "f": 0, "t": 1, "d": [63,333], "a": 1 }, + { "px": [896,512], "src": [192,0], "f": 0, "t": 3, "d": [63,334], "a": 1 }, + { "px": [960,512], "src": [128,0], "f": 0, "t": 2, "d": [63,335], "a": 1 }, + { "px": [1024,512], "src": [64,0], "f": 0, "t": 1, "d": [63,336], "a": 1 }, + { "px": [1088,512], "src": [128,0], "f": 0, "t": 2, "d": [63,337], "a": 1 }, + { "px": [1152,512], "src": [0,0], "f": 0, "t": 0, "d": [63,338], "a": 1 }, + { "px": [1216,512], "src": [0,0], "f": 0, "t": 0, "d": [63,339], "a": 1 }, + { "px": [1280,512], "src": [0,0], "f": 0, "t": 0, "d": [63,340], "a": 1 }, + { "px": [1344,512], "src": [64,0], "f": 0, "t": 1, "d": [63,341], "a": 1 }, + { "px": [1408,512], "src": [128,0], "f": 0, "t": 2, "d": [63,342], "a": 1 }, + { "px": [1472,512], "src": [192,0], "f": 0, "t": 3, "d": [63,343], "a": 1 }, + { "px": [1536,512], "src": [192,0], "f": 0, "t": 3, "d": [63,344], "a": 1 }, + { "px": [1600,512], "src": [0,0], "f": 0, "t": 0, "d": [63,345], "a": 1 }, + { "px": [1664,512], "src": [0,0], "f": 0, "t": 0, "d": [63,346], "a": 1 }, + { "px": [1792,512], "src": [64,0], "f": 0, "t": 1, "d": [63,348], "a": 1 }, + { "px": [1856,512], "src": [128,0], "f": 0, "t": 2, "d": [63,349], "a": 1 }, + { "px": [1920,512], "src": [0,0], "f": 0, "t": 0, "d": [63,350], "a": 1 }, + { "px": [1984,512], "src": [0,0], "f": 0, "t": 0, "d": [63,351], "a": 1 }, + { "px": [2048,512], "src": [64,0], "f": 0, "t": 1, "d": [63,352], "a": 1 }, + { "px": [2112,512], "src": [192,0], "f": 0, "t": 3, "d": [63,353], "a": 1 }, + { "px": [2176,512], "src": [0,0], "f": 0, "t": 0, "d": [63,354], "a": 1 }, + { "px": [2240,512], "src": [64,0], "f": 0, "t": 1, "d": [63,355], "a": 1 }, + { "px": [2304,512], "src": [128,0], "f": 0, "t": 2, "d": [63,356], "a": 1 }, + { "px": [2368,512], "src": [64,0], "f": 0, "t": 1, "d": [63,357], "a": 1 }, + { "px": [2432,512], "src": [64,0], "f": 0, "t": 1, "d": [63,358], "a": 1 }, + { "px": [64,576], "src": [64,0], "f": 0, "t": 1, "d": [63,361], "a": 1 }, + { "px": [128,576], "src": [0,0], "f": 0, "t": 0, "d": [63,362], "a": 1 }, + { "px": [192,576], "src": [192,0], "f": 0, "t": 3, "d": [63,363], "a": 1 }, + { "px": [256,576], "src": [0,0], "f": 0, "t": 0, "d": [63,364], "a": 1 }, + { "px": [320,576], "src": [128,0], "f": 0, "t": 2, "d": [63,365], "a": 1 }, + { "px": [384,576], "src": [0,0], "f": 0, "t": 0, "d": [63,366], "a": 1 }, + { "px": [448,576], "src": [192,0], "f": 0, "t": 3, "d": [63,367], "a": 1 }, + { "px": [512,576], "src": [128,0], "f": 0, "t": 2, "d": [63,368], "a": 1 }, + { "px": [576,576], "src": [192,0], "f": 0, "t": 3, "d": [63,369], "a": 1 }, + { "px": [640,576], "src": [64,0], "f": 0, "t": 1, "d": [63,370], "a": 1 }, + { "px": [704,576], "src": [0,0], "f": 0, "t": 0, "d": [63,371], "a": 1 }, + { "px": [768,576], "src": [0,0], "f": 0, "t": 0, "d": [63,372], "a": 1 }, + { "px": [832,576], "src": [128,0], "f": 0, "t": 2, "d": [63,373], "a": 1 }, + { "px": [896,576], "src": [0,0], "f": 0, "t": 0, "d": [63,374], "a": 1 }, + { "px": [960,576], "src": [192,0], "f": 0, "t": 3, "d": [63,375], "a": 1 }, + { "px": [1024,576], "src": [64,0], "f": 0, "t": 1, "d": [63,376], "a": 1 }, + { "px": [1088,576], "src": [192,0], "f": 0, "t": 3, "d": [63,377], "a": 1 }, + { "px": [1152,576], "src": [192,0], "f": 0, "t": 3, "d": [63,378], "a": 1 }, + { "px": [1216,576], "src": [0,0], "f": 0, "t": 0, "d": [63,379], "a": 1 }, + { "px": [1280,576], "src": [0,0], "f": 0, "t": 0, "d": [63,380], "a": 1 }, + { "px": [1344,576], "src": [0,0], "f": 0, "t": 0, "d": [63,381], "a": 1 }, + { "px": [1408,576], "src": [128,0], "f": 0, "t": 2, "d": [63,382], "a": 1 }, + { "px": [1472,576], "src": [128,0], "f": 0, "t": 2, "d": [63,383], "a": 1 }, + { "px": [1536,576], "src": [0,0], "f": 0, "t": 0, "d": [63,384], "a": 1 }, + { "px": [1600,576], "src": [0,0], "f": 0, "t": 0, "d": [63,385], "a": 1 }, + { "px": [1664,576], "src": [192,0], "f": 0, "t": 3, "d": [63,386], "a": 1 }, + { "px": [1728,576], "src": [64,0], "f": 0, "t": 1, "d": [63,387], "a": 1 }, + { "px": [1792,576], "src": [0,0], "f": 0, "t": 0, "d": [63,388], "a": 1 }, + { "px": [1856,576], "src": [64,0], "f": 0, "t": 1, "d": [63,389], "a": 1 }, + { "px": [1920,576], "src": [128,0], "f": 0, "t": 2, "d": [63,390], "a": 1 }, + { "px": [2048,576], "src": [0,0], "f": 0, "t": 0, "d": [63,392], "a": 1 }, + { "px": [2112,576], "src": [128,0], "f": 0, "t": 2, "d": [63,393], "a": 1 }, + { "px": [2176,576], "src": [64,0], "f": 0, "t": 1, "d": [63,394], "a": 1 }, + { "px": [2240,576], "src": [0,0], "f": 0, "t": 0, "d": [63,395], "a": 1 }, + { "px": [2304,576], "src": [128,0], "f": 0, "t": 2, "d": [63,396], "a": 1 }, + { "px": [2368,576], "src": [192,0], "f": 0, "t": 3, "d": [63,397], "a": 1 }, + { "px": [2432,576], "src": [0,0], "f": 0, "t": 0, "d": [63,398], "a": 1 }, + { "px": [64,640], "src": [64,0], "f": 0, "t": 1, "d": [63,401], "a": 1 }, + { "px": [128,640], "src": [64,0], "f": 0, "t": 1, "d": [63,402], "a": 1 }, + { "px": [192,640], "src": [0,0], "f": 0, "t": 0, "d": [63,403], "a": 1 }, + { "px": [256,640], "src": [0,0], "f": 0, "t": 0, "d": [63,404], "a": 1 }, + { "px": [320,640], "src": [64,0], "f": 0, "t": 1, "d": [63,405], "a": 1 }, + { "px": [384,640], "src": [192,0], "f": 0, "t": 3, "d": [63,406], "a": 1 }, + { "px": [448,640], "src": [128,0], "f": 0, "t": 2, "d": [63,407], "a": 1 }, + { "px": [512,640], "src": [64,0], "f": 0, "t": 1, "d": [63,408], "a": 1 }, + { "px": [576,640], "src": [192,0], "f": 0, "t": 3, "d": [63,409], "a": 1 }, + { "px": [640,640], "src": [64,0], "f": 0, "t": 1, "d": [63,410], "a": 1 }, + { "px": [704,640], "src": [128,0], "f": 0, "t": 2, "d": [63,411], "a": 1 }, + { "px": [768,640], "src": [64,0], "f": 0, "t": 1, "d": [63,412], "a": 1 }, + { "px": [832,640], "src": [0,0], "f": 0, "t": 0, "d": [63,413], "a": 1 }, + { "px": [896,640], "src": [0,0], "f": 0, "t": 0, "d": [63,414], "a": 1 }, + { "px": [960,640], "src": [192,0], "f": 0, "t": 3, "d": [63,415], "a": 1 }, + { "px": [1024,640], "src": [0,0], "f": 0, "t": 0, "d": [63,416], "a": 1 }, + { "px": [1088,640], "src": [0,0], "f": 0, "t": 0, "d": [63,417], "a": 1 }, + { "px": [1152,640], "src": [128,0], "f": 0, "t": 2, "d": [63,418], "a": 1 }, + { "px": [1216,640], "src": [0,0], "f": 0, "t": 0, "d": [63,419], "a": 1 }, + { "px": [1280,640], "src": [192,0], "f": 0, "t": 3, "d": [63,420], "a": 1 }, + { "px": [1344,640], "src": [64,0], "f": 0, "t": 1, "d": [63,421], "a": 1 }, + { "px": [1408,640], "src": [0,0], "f": 0, "t": 0, "d": [63,422], "a": 1 }, + { "px": [1472,640], "src": [128,0], "f": 0, "t": 2, "d": [63,423], "a": 1 }, + { "px": [1536,640], "src": [64,0], "f": 0, "t": 1, "d": [63,424], "a": 1 }, + { "px": [1600,640], "src": [64,0], "f": 0, "t": 1, "d": [63,425], "a": 1 }, + { "px": [1664,640], "src": [0,0], "f": 0, "t": 0, "d": [63,426], "a": 1 }, + { "px": [1728,640], "src": [128,0], "f": 0, "t": 2, "d": [63,427], "a": 1 }, + { "px": [1792,640], "src": [0,0], "f": 0, "t": 0, "d": [63,428], "a": 1 }, + { "px": [1856,640], "src": [192,0], "f": 0, "t": 3, "d": [63,429], "a": 1 }, + { "px": [1920,640], "src": [128,0], "f": 0, "t": 2, "d": [63,430], "a": 1 }, + { "px": [1984,640], "src": [0,0], "f": 0, "t": 0, "d": [63,431], "a": 1 }, + { "px": [2048,640], "src": [192,0], "f": 0, "t": 3, "d": [63,432], "a": 1 }, + { "px": [2112,640], "src": [192,0], "f": 0, "t": 3, "d": [63,433], "a": 1 }, + { "px": [2176,640], "src": [192,0], "f": 0, "t": 3, "d": [63,434], "a": 1 }, + { "px": [2240,640], "src": [128,0], "f": 0, "t": 2, "d": [63,435], "a": 1 }, + { "px": [2304,640], "src": [64,0], "f": 0, "t": 1, "d": [63,436], "a": 1 }, + { "px": [2368,640], "src": [0,0], "f": 0, "t": 0, "d": [63,437], "a": 1 }, + { "px": [2432,640], "src": [0,0], "f": 0, "t": 0, "d": [63,438], "a": 1 }, + { "px": [64,704], "src": [0,0], "f": 0, "t": 0, "d": [63,441], "a": 1 }, + { "px": [128,704], "src": [64,0], "f": 0, "t": 1, "d": [63,442], "a": 1 }, + { "px": [192,704], "src": [128,0], "f": 0, "t": 2, "d": [63,443], "a": 1 }, + { "px": [256,704], "src": [0,0], "f": 0, "t": 0, "d": [63,444], "a": 1 }, + { "px": [320,704], "src": [64,0], "f": 0, "t": 1, "d": [63,445], "a": 1 }, + { "px": [384,704], "src": [0,0], "f": 0, "t": 0, "d": [63,446], "a": 1 }, + { "px": [448,704], "src": [192,0], "f": 0, "t": 3, "d": [63,447], "a": 1 }, + { "px": [576,704], "src": [64,0], "f": 0, "t": 1, "d": [63,449], "a": 1 }, + { "px": [640,704], "src": [0,0], "f": 0, "t": 0, "d": [63,450], "a": 1 }, + { "px": [704,704], "src": [192,0], "f": 0, "t": 3, "d": [63,451], "a": 1 }, + { "px": [768,704], "src": [128,0], "f": 0, "t": 2, "d": [63,452], "a": 1 }, + { "px": [832,704], "src": [64,0], "f": 0, "t": 1, "d": [63,453], "a": 1 }, + { "px": [896,704], "src": [128,0], "f": 0, "t": 2, "d": [63,454], "a": 1 }, + { "px": [960,704], "src": [64,0], "f": 0, "t": 1, "d": [63,455], "a": 1 }, + { "px": [1024,704], "src": [192,0], "f": 0, "t": 3, "d": [63,456], "a": 1 }, + { "px": [1088,704], "src": [128,0], "f": 0, "t": 2, "d": [63,457], "a": 1 }, + { "px": [1152,704], "src": [64,0], "f": 0, "t": 1, "d": [63,458], "a": 1 }, + { "px": [1216,704], "src": [64,0], "f": 0, "t": 1, "d": [63,459], "a": 1 }, + { "px": [1280,704], "src": [0,0], "f": 0, "t": 0, "d": [63,460], "a": 1 }, + { "px": [1344,704], "src": [192,0], "f": 0, "t": 3, "d": [63,461], "a": 1 }, + { "px": [1408,704], "src": [192,0], "f": 0, "t": 3, "d": [63,462], "a": 1 }, + { "px": [1472,704], "src": [192,0], "f": 0, "t": 3, "d": [63,463], "a": 1 }, + { "px": [1536,704], "src": [0,0], "f": 0, "t": 0, "d": [63,464], "a": 1 }, + { "px": [1600,704], "src": [192,0], "f": 0, "t": 3, "d": [63,465], "a": 1 }, + { "px": [1664,704], "src": [64,0], "f": 0, "t": 1, "d": [63,466], "a": 1 }, + { "px": [1728,704], "src": [192,0], "f": 0, "t": 3, "d": [63,467], "a": 1 }, + { "px": [1792,704], "src": [128,0], "f": 0, "t": 2, "d": [63,468], "a": 1 }, + { "px": [1856,704], "src": [128,0], "f": 0, "t": 2, "d": [63,469], "a": 1 }, + { "px": [1920,704], "src": [0,0], "f": 0, "t": 0, "d": [63,470], "a": 1 }, + { "px": [1984,704], "src": [64,0], "f": 0, "t": 1, "d": [63,471], "a": 1 }, + { "px": [2048,704], "src": [192,0], "f": 0, "t": 3, "d": [63,472], "a": 1 }, + { "px": [2112,704], "src": [192,0], "f": 0, "t": 3, "d": [63,473], "a": 1 }, + { "px": [2176,704], "src": [64,0], "f": 0, "t": 1, "d": [63,474], "a": 1 }, + { "px": [2240,704], "src": [192,0], "f": 0, "t": 3, "d": [63,475], "a": 1 }, + { "px": [2304,704], "src": [64,0], "f": 0, "t": 1, "d": [63,476], "a": 1 }, + { "px": [2368,704], "src": [128,0], "f": 0, "t": 2, "d": [63,477], "a": 1 }, + { "px": [2432,704], "src": [64,0], "f": 0, "t": 1, "d": [63,478], "a": 1 }, + { "px": [64,768], "src": [0,0], "f": 0, "t": 0, "d": [63,481], "a": 1 }, + { "px": [128,768], "src": [0,0], "f": 0, "t": 0, "d": [63,482], "a": 1 }, + { "px": [192,768], "src": [64,0], "f": 0, "t": 1, "d": [63,483], "a": 1 }, + { "px": [256,768], "src": [0,0], "f": 0, "t": 0, "d": [63,484], "a": 1 }, + { "px": [320,768], "src": [192,0], "f": 0, "t": 3, "d": [63,485], "a": 1 }, + { "px": [384,768], "src": [128,0], "f": 0, "t": 2, "d": [63,486], "a": 1 }, + { "px": [448,768], "src": [128,0], "f": 0, "t": 2, "d": [63,487], "a": 1 }, + { "px": [512,768], "src": [64,0], "f": 0, "t": 1, "d": [63,488], "a": 1 }, + { "px": [576,768], "src": [0,0], "f": 0, "t": 0, "d": [63,489], "a": 1 }, + { "px": [640,768], "src": [128,0], "f": 0, "t": 2, "d": [63,490], "a": 1 }, + { "px": [704,768], "src": [0,0], "f": 0, "t": 0, "d": [63,491], "a": 1 }, + { "px": [768,768], "src": [192,0], "f": 0, "t": 3, "d": [63,492], "a": 1 }, + { "px": [832,768], "src": [64,0], "f": 0, "t": 1, "d": [63,493], "a": 1 }, + { "px": [896,768], "src": [64,0], "f": 0, "t": 1, "d": [63,494], "a": 1 }, + { "px": [960,768], "src": [128,0], "f": 0, "t": 2, "d": [63,495], "a": 1 }, + { "px": [1024,768], "src": [0,0], "f": 0, "t": 0, "d": [63,496], "a": 1 }, + { "px": [1088,768], "src": [128,0], "f": 0, "t": 2, "d": [63,497], "a": 1 }, + { "px": [1152,768], "src": [128,0], "f": 0, "t": 2, "d": [63,498], "a": 1 }, + { "px": [1216,768], "src": [192,0], "f": 0, "t": 3, "d": [63,499], "a": 1 }, + { "px": [1280,768], "src": [0,0], "f": 0, "t": 0, "d": [63,500], "a": 1 }, + { "px": [1344,768], "src": [128,0], "f": 0, "t": 2, "d": [63,501], "a": 1 }, + { "px": [1472,768], "src": [192,0], "f": 0, "t": 3, "d": [63,503], "a": 1 }, + { "px": [1536,768], "src": [192,0], "f": 0, "t": 3, "d": [63,504], "a": 1 }, + { "px": [1728,768], "src": [0,0], "f": 0, "t": 0, "d": [63,507], "a": 1 }, + { "px": [1792,768], "src": [0,0], "f": 0, "t": 0, "d": [63,508], "a": 1 }, + { "px": [1856,768], "src": [64,0], "f": 0, "t": 1, "d": [63,509], "a": 1 }, + { "px": [1920,768], "src": [0,0], "f": 0, "t": 0, "d": [63,510], "a": 1 }, + { "px": [1984,768], "src": [0,0], "f": 0, "t": 0, "d": [63,511], "a": 1 }, + { "px": [2048,768], "src": [0,0], "f": 0, "t": 0, "d": [63,512], "a": 1 }, + { "px": [2112,768], "src": [128,0], "f": 0, "t": 2, "d": [63,513], "a": 1 }, + { "px": [2176,768], "src": [192,0], "f": 0, "t": 3, "d": [63,514], "a": 1 }, + { "px": [2240,768], "src": [64,0], "f": 0, "t": 1, "d": [63,515], "a": 1 }, + { "px": [2304,768], "src": [0,0], "f": 0, "t": 0, "d": [63,516], "a": 1 }, + { "px": [2368,768], "src": [192,0], "f": 0, "t": 3, "d": [63,517], "a": 1 }, + { "px": [2432,768], "src": [0,0], "f": 0, "t": 0, "d": [63,518], "a": 1 }, + { "px": [64,832], "src": [64,0], "f": 0, "t": 1, "d": [63,521], "a": 1 }, + { "px": [128,832], "src": [128,0], "f": 0, "t": 2, "d": [63,522], "a": 1 }, + { "px": [192,832], "src": [0,0], "f": 0, "t": 0, "d": [63,523], "a": 1 }, + { "px": [256,832], "src": [128,0], "f": 0, "t": 2, "d": [63,524], "a": 1 }, + { "px": [320,832], "src": [0,0], "f": 0, "t": 0, "d": [63,525], "a": 1 }, + { "px": [384,832], "src": [192,0], "f": 0, "t": 3, "d": [63,526], "a": 1 }, + { "px": [448,832], "src": [0,0], "f": 0, "t": 0, "d": [63,527], "a": 1 }, + { "px": [512,832], "src": [0,0], "f": 0, "t": 0, "d": [63,528], "a": 1 }, + { "px": [576,832], "src": [192,0], "f": 0, "t": 3, "d": [63,529], "a": 1 }, + { "px": [640,832], "src": [192,0], "f": 0, "t": 3, "d": [63,530], "a": 1 }, + { "px": [704,832], "src": [192,0], "f": 0, "t": 3, "d": [63,531], "a": 1 }, + { "px": [768,832], "src": [0,0], "f": 0, "t": 0, "d": [63,532], "a": 1 }, + { "px": [832,832], "src": [192,0], "f": 0, "t": 3, "d": [63,533], "a": 1 }, + { "px": [896,832], "src": [0,0], "f": 0, "t": 0, "d": [63,534], "a": 1 }, + { "px": [960,832], "src": [192,0], "f": 0, "t": 3, "d": [63,535], "a": 1 }, + { "px": [1024,832], "src": [128,0], "f": 0, "t": 2, "d": [63,536], "a": 1 }, + { "px": [1088,832], "src": [0,0], "f": 0, "t": 0, "d": [63,537], "a": 1 }, + { "px": [1152,832], "src": [128,0], "f": 0, "t": 2, "d": [63,538], "a": 1 }, + { "px": [1216,832], "src": [64,0], "f": 0, "t": 1, "d": [63,539], "a": 1 }, + { "px": [1280,832], "src": [0,0], "f": 0, "t": 0, "d": [63,540], "a": 1 }, + { "px": [1344,832], "src": [64,0], "f": 0, "t": 1, "d": [63,541], "a": 1 }, + { "px": [1408,832], "src": [64,0], "f": 0, "t": 1, "d": [63,542], "a": 1 }, + { "px": [1472,832], "src": [128,0], "f": 0, "t": 2, "d": [63,543], "a": 1 }, + { "px": [1536,832], "src": [64,0], "f": 0, "t": 1, "d": [63,544], "a": 1 }, + { "px": [1600,832], "src": [192,0], "f": 0, "t": 3, "d": [63,545], "a": 1 }, + { "px": [1664,832], "src": [64,0], "f": 0, "t": 1, "d": [63,546], "a": 1 }, + { "px": [1728,832], "src": [0,0], "f": 0, "t": 0, "d": [63,547], "a": 1 }, + { "px": [1792,832], "src": [64,0], "f": 0, "t": 1, "d": [63,548], "a": 1 }, + { "px": [1856,832], "src": [192,0], "f": 0, "t": 3, "d": [63,549], "a": 1 }, + { "px": [1920,832], "src": [128,0], "f": 0, "t": 2, "d": [63,550], "a": 1 }, + { "px": [1984,832], "src": [0,0], "f": 0, "t": 0, "d": [63,551], "a": 1 }, + { "px": [2048,832], "src": [0,0], "f": 0, "t": 0, "d": [63,552], "a": 1 }, + { "px": [2112,832], "src": [192,0], "f": 0, "t": 3, "d": [63,553], "a": 1 }, + { "px": [2176,832], "src": [128,0], "f": 0, "t": 2, "d": [63,554], "a": 1 }, + { "px": [2240,832], "src": [128,0], "f": 0, "t": 2, "d": [63,555], "a": 1 }, + { "px": [2304,832], "src": [128,0], "f": 0, "t": 2, "d": [63,556], "a": 1 }, + { "px": [2368,832], "src": [64,0], "f": 0, "t": 1, "d": [63,557], "a": 1 }, + { "px": [2432,832], "src": [192,0], "f": 0, "t": 3, "d": [63,558], "a": 1 }, + { "px": [64,896], "src": [0,0], "f": 0, "t": 0, "d": [63,561], "a": 1 }, + { "px": [128,896], "src": [128,0], "f": 0, "t": 2, "d": [63,562], "a": 1 }, + { "px": [192,896], "src": [64,0], "f": 0, "t": 1, "d": [63,563], "a": 1 }, + { "px": [256,896], "src": [128,0], "f": 0, "t": 2, "d": [63,564], "a": 1 }, + { "px": [320,896], "src": [64,0], "f": 0, "t": 1, "d": [63,565], "a": 1 }, + { "px": [384,896], "src": [64,0], "f": 0, "t": 1, "d": [63,566], "a": 1 }, + { "px": [448,896], "src": [64,0], "f": 0, "t": 1, "d": [63,567], "a": 1 }, + { "px": [512,896], "src": [192,0], "f": 0, "t": 3, "d": [63,568], "a": 1 }, + { "px": [576,896], "src": [192,0], "f": 0, "t": 3, "d": [63,569], "a": 1 }, + { "px": [640,896], "src": [0,0], "f": 0, "t": 0, "d": [63,570], "a": 1 }, + { "px": [704,896], "src": [192,0], "f": 0, "t": 3, "d": [63,571], "a": 1 }, + { "px": [768,896], "src": [192,0], "f": 0, "t": 3, "d": [63,572], "a": 1 }, + { "px": [832,896], "src": [192,0], "f": 0, "t": 3, "d": [63,573], "a": 1 }, + { "px": [896,896], "src": [128,0], "f": 0, "t": 2, "d": [63,574], "a": 1 }, + { "px": [960,896], "src": [0,0], "f": 0, "t": 0, "d": [63,575], "a": 1 }, + { "px": [1024,896], "src": [128,0], "f": 0, "t": 2, "d": [63,576], "a": 1 }, + { "px": [1088,896], "src": [192,0], "f": 0, "t": 3, "d": [63,577], "a": 1 }, + { "px": [1152,896], "src": [0,0], "f": 0, "t": 0, "d": [63,578], "a": 1 }, + { "px": [1216,896], "src": [192,0], "f": 0, "t": 3, "d": [63,579], "a": 1 }, + { "px": [1280,896], "src": [192,0], "f": 0, "t": 3, "d": [63,580], "a": 1 }, + { "px": [1344,896], "src": [0,0], "f": 0, "t": 0, "d": [63,581], "a": 1 }, + { "px": [1408,896], "src": [128,0], "f": 0, "t": 2, "d": [63,582], "a": 1 }, + { "px": [1472,896], "src": [192,0], "f": 0, "t": 3, "d": [63,583], "a": 1 }, + { "px": [1536,896], "src": [192,0], "f": 0, "t": 3, "d": [63,584], "a": 1 }, + { "px": [1600,896], "src": [64,0], "f": 0, "t": 1, "d": [63,585], "a": 1 }, + { "px": [1664,896], "src": [128,0], "f": 0, "t": 2, "d": [63,586], "a": 1 }, + { "px": [1728,896], "src": [128,0], "f": 0, "t": 2, "d": [63,587], "a": 1 }, + { "px": [1792,896], "src": [192,0], "f": 0, "t": 3, "d": [63,588], "a": 1 }, + { "px": [1856,896], "src": [0,0], "f": 0, "t": 0, "d": [63,589], "a": 1 }, + { "px": [1920,896], "src": [192,0], "f": 0, "t": 3, "d": [63,590], "a": 1 }, + { "px": [1984,896], "src": [64,0], "f": 0, "t": 1, "d": [63,591], "a": 1 }, + { "px": [2048,896], "src": [64,0], "f": 0, "t": 1, "d": [63,592], "a": 1 }, + { "px": [2112,896], "src": [192,0], "f": 0, "t": 3, "d": [63,593], "a": 1 }, + { "px": [2176,896], "src": [0,0], "f": 0, "t": 0, "d": [63,594], "a": 1 }, + { "px": [2240,896], "src": [0,0], "f": 0, "t": 0, "d": [63,595], "a": 1 }, + { "px": [2304,896], "src": [192,0], "f": 0, "t": 3, "d": [63,596], "a": 1 }, + { "px": [2368,896], "src": [128,0], "f": 0, "t": 2, "d": [63,597], "a": 1 }, + { "px": [2432,896], "src": [64,0], "f": 0, "t": 1, "d": [63,598], "a": 1 }, + { "px": [64,960], "src": [192,0], "f": 0, "t": 3, "d": [63,601], "a": 1 }, + { "px": [128,960], "src": [0,0], "f": 0, "t": 0, "d": [63,602], "a": 1 }, + { "px": [192,960], "src": [0,0], "f": 0, "t": 0, "d": [63,603], "a": 1 }, + { "px": [256,960], "src": [64,0], "f": 0, "t": 1, "d": [63,604], "a": 1 }, + { "px": [320,960], "src": [192,0], "f": 0, "t": 3, "d": [63,605], "a": 1 }, + { "px": [384,960], "src": [0,0], "f": 0, "t": 0, "d": [63,606], "a": 1 }, + { "px": [448,960], "src": [0,0], "f": 0, "t": 0, "d": [63,607], "a": 1 }, + { "px": [512,960], "src": [128,0], "f": 0, "t": 2, "d": [63,608], "a": 1 }, + { "px": [576,960], "src": [128,0], "f": 0, "t": 2, "d": [63,609], "a": 1 }, + { "px": [640,960], "src": [192,0], "f": 0, "t": 3, "d": [63,610], "a": 1 }, + { "px": [704,960], "src": [192,0], "f": 0, "t": 3, "d": [63,611], "a": 1 }, + { "px": [768,960], "src": [0,0], "f": 0, "t": 0, "d": [63,612], "a": 1 }, + { "px": [832,960], "src": [0,0], "f": 0, "t": 0, "d": [63,613], "a": 1 }, + { "px": [896,960], "src": [192,0], "f": 0, "t": 3, "d": [63,614], "a": 1 }, + { "px": [960,960], "src": [0,0], "f": 0, "t": 0, "d": [63,615], "a": 1 }, + { "px": [1024,960], "src": [192,0], "f": 0, "t": 3, "d": [63,616], "a": 1 }, + { "px": [1088,960], "src": [64,0], "f": 0, "t": 1, "d": [63,617], "a": 1 }, + { "px": [1152,960], "src": [128,0], "f": 0, "t": 2, "d": [63,618], "a": 1 }, + { "px": [1216,960], "src": [64,0], "f": 0, "t": 1, "d": [63,619], "a": 1 }, + { "px": [1280,960], "src": [0,0], "f": 0, "t": 0, "d": [63,620], "a": 1 }, + { "px": [1344,960], "src": [64,0], "f": 0, "t": 1, "d": [63,621], "a": 1 }, + { "px": [1408,960], "src": [128,0], "f": 0, "t": 2, "d": [63,622], "a": 1 }, + { "px": [1472,960], "src": [192,0], "f": 0, "t": 3, "d": [63,623], "a": 1 }, + { "px": [1536,960], "src": [64,0], "f": 0, "t": 1, "d": [63,624], "a": 1 }, + { "px": [1600,960], "src": [64,0], "f": 0, "t": 1, "d": [63,625], "a": 1 }, + { "px": [1664,960], "src": [128,0], "f": 0, "t": 2, "d": [63,626], "a": 1 }, + { "px": [1728,960], "src": [128,0], "f": 0, "t": 2, "d": [63,627], "a": 1 }, + { "px": [1792,960], "src": [0,0], "f": 0, "t": 0, "d": [63,628], "a": 1 }, + { "px": [1856,960], "src": [192,0], "f": 0, "t": 3, "d": [63,629], "a": 1 }, + { "px": [1920,960], "src": [64,0], "f": 0, "t": 1, "d": [63,630], "a": 1 }, + { "px": [1984,960], "src": [0,0], "f": 0, "t": 0, "d": [63,631], "a": 1 }, + { "px": [2048,960], "src": [0,0], "f": 0, "t": 0, "d": [63,632], "a": 1 }, + { "px": [2112,960], "src": [64,0], "f": 0, "t": 1, "d": [63,633], "a": 1 }, + { "px": [2176,960], "src": [192,0], "f": 0, "t": 3, "d": [63,634], "a": 1 }, + { "px": [2240,960], "src": [0,0], "f": 0, "t": 0, "d": [63,635], "a": 1 }, + { "px": [2304,960], "src": [64,0], "f": 0, "t": 1, "d": [63,636], "a": 1 }, + { "px": [2368,960], "src": [128,0], "f": 0, "t": 2, "d": [63,637], "a": 1 }, + { "px": [2432,960], "src": [64,0], "f": 0, "t": 1, "d": [63,638], "a": 1 }, + { "px": [320,1024], "src": [128,0], "f": 0, "t": 2, "d": [63,645], "a": 1 }, + { "px": [384,1024], "src": [128,0], "f": 0, "t": 2, "d": [63,646], "a": 1 }, + { "px": [448,1024], "src": [64,0], "f": 0, "t": 1, "d": [63,647], "a": 1 }, + { "px": [512,1024], "src": [128,0], "f": 0, "t": 2, "d": [63,648], "a": 1 }, + { "px": [1984,1024], "src": [64,0], "f": 0, "t": 1, "d": [63,671], "a": 1 }, + { "px": [2048,1024], "src": [128,0], "f": 0, "t": 2, "d": [63,672], "a": 1 }, + { "px": [64,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,681], "a": 1 }, + { "px": [128,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,682], "a": 1 }, + { "px": [192,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,683], "a": 1 }, + { "px": [256,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,684], "a": 1 }, + { "px": [320,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,685], "a": 1 }, + { "px": [384,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,686], "a": 1 }, + { "px": [448,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,687], "a": 1 }, + { "px": [512,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,688], "a": 1 }, + { "px": [576,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,689], "a": 1 }, + { "px": [640,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,690], "a": 1 }, + { "px": [704,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,691], "a": 1 }, + { "px": [768,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,692], "a": 1 }, + { "px": [832,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,693], "a": 1 }, + { "px": [896,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,694], "a": 1 }, + { "px": [960,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,695], "a": 1 }, + { "px": [1024,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,696], "a": 1 }, + { "px": [1088,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,697], "a": 1 }, + { "px": [1152,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,698], "a": 1 }, + { "px": [1216,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,699], "a": 1 }, + { "px": [1280,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,700], "a": 1 }, + { "px": [1344,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,701], "a": 1 }, + { "px": [1408,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,702], "a": 1 }, + { "px": [1472,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,703], "a": 1 }, + { "px": [1536,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,704], "a": 1 }, + { "px": [1600,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,705], "a": 1 }, + { "px": [1664,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,706], "a": 1 }, + { "px": [1728,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,707], "a": 1 }, + { "px": [1792,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,708], "a": 1 }, + { "px": [1856,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,709], "a": 1 }, + { "px": [1920,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,710], "a": 1 }, + { "px": [1984,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,711], "a": 1 }, + { "px": [2048,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,712], "a": 1 }, + { "px": [2112,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,713], "a": 1 }, + { "px": [2176,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,714], "a": 1 }, + { "px": [2240,1088], "src": [640,0], "f": 0, "t": 10, "d": [67,715], "a": 1 }, + { "px": [128,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,722], "a": 1 }, + { "px": [192,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,723], "a": 1 }, + { "px": [256,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,724], "a": 1 }, + { "px": [320,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,725], "a": 1 }, + { "px": [384,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,726], "a": 1 }, + { "px": [448,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,727], "a": 1 }, + { "px": [512,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,728], "a": 1 }, + { "px": [576,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,729], "a": 1 }, + { "px": [640,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,730], "a": 1 }, + { "px": [704,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,731], "a": 1 }, + { "px": [768,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,732], "a": 1 }, + { "px": [832,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,733], "a": 1 }, + { "px": [896,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,734], "a": 1 }, + { "px": [960,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,735], "a": 1 }, + { "px": [1024,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,736], "a": 1 }, + { "px": [1088,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,737], "a": 1 }, + { "px": [1152,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,738], "a": 1 }, + { "px": [1216,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,739], "a": 1 }, + { "px": [1280,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,740], "a": 1 }, + { "px": [1344,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,741], "a": 1 }, + { "px": [1408,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,742], "a": 1 }, + { "px": [1472,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,743], "a": 1 }, + { "px": [1536,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,744], "a": 1 }, + { "px": [1600,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,745], "a": 1 }, + { "px": [1664,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,746], "a": 1 }, + { "px": [1728,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,747], "a": 1 }, + { "px": [1792,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,748], "a": 1 }, + { "px": [1856,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,749], "a": 1 }, + { "px": [1920,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,750], "a": 1 }, + { "px": [1984,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,751], "a": 1 }, + { "px": [2048,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,752], "a": 1 }, + { "px": [2112,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,753], "a": 1 }, + { "px": [2176,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,754], "a": 1 }, + { "px": [2240,1152], "src": [640,0], "f": 0, "t": 10, "d": [67,755], "a": 1 }, + { "px": [64,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,761], "a": 1 }, + { "px": [128,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,762], "a": 1 }, + { "px": [192,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,763], "a": 1 }, + { "px": [256,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,764], "a": 1 }, + { "px": [320,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,765], "a": 1 }, + { "px": [576,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,769], "a": 1 }, + { "px": [640,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,770], "a": 1 }, + { "px": [704,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,771], "a": 1 }, + { "px": [768,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,772], "a": 1 }, + { "px": [832,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,773], "a": 1 }, + { "px": [896,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,774], "a": 1 }, + { "px": [960,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,775], "a": 1 }, + { "px": [1024,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,776], "a": 1 }, + { "px": [1408,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,782], "a": 1 }, + { "px": [1472,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,783], "a": 1 }, + { "px": [1536,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,784], "a": 1 }, + { "px": [1600,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,785], "a": 1 }, + { "px": [1664,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,786], "a": 1 }, + { "px": [1728,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,787], "a": 1 }, + { "px": [1792,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,788], "a": 1 }, + { "px": [1856,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,789], "a": 1 }, + { "px": [1920,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,790], "a": 1 }, + { "px": [1984,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,791], "a": 1 }, + { "px": [2048,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,792], "a": 1 }, + { "px": [2112,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,793], "a": 1 }, + { "px": [2176,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,794], "a": 1 }, + { "px": [2240,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,795], "a": 1 }, + { "px": [2304,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,796], "a": 1 }, + { "px": [2368,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,797], "a": 1 }, + { "px": [2432,1216], "src": [640,0], "f": 0, "t": 10, "d": [67,798], "a": 1 }, + { "px": [64,1280], "src": [640,0], "f": 0, "t": 10, "d": [67,801], "a": 1 }, + { "px": [128,1280], "src": [640,0], "f": 0, "t": 10, "d": [67,802], "a": 1 }, + { "px": [192,1280], "src": [640,0], "f": 0, "t": 10, "d": [67,803], "a": 1 }, + { "px": [576,1280], "src": [640,0], "f": 0, "t": 10, "d": [67,809], "a": 1 }, + { "px": [640,1280], "src": [640,0], "f": 0, "t": 10, "d": [67,810], "a": 1 }, + { "px": [704,1280], "src": [640,0], "f": 0, "t": 10, "d": [67,811], "a": 1 }, + { "px": [768,1280], "src": [640,0], "f": 0, "t": 10, "d": [67,812], "a": 1 }, + { "px": [832,1280], "src": [640,0], "f": 0, "t": 10, "d": [67,813], "a": 1 }, + { "px": [896,1280], "src": [640,0], "f": 0, "t": 10, "d": [67,814], "a": 1 }, + { "px": [960,1280], "src": [640,0], "f": 0, "t": 10, "d": [67,815], "a": 1 }, + { "px": [1024,1280], "src": [640,0], "f": 0, "t": 10, "d": [67,816], "a": 1 }, + { "px": [1408,1280], "src": [640,0], "f": 0, "t": 10, "d": [67,822], "a": 1 }, + { "px": [1472,1280], "src": [640,0], "f": 0, "t": 10, "d": [67,823], "a": 1 }, + { "px": [1536,1280], "src": [640,0], "f": 0, "t": 10, "d": [67,824], "a": 1 }, + { "px": [1600,1280], "src": [640,0], "f": 0, "t": 10, "d": [67,825], "a": 1 }, + { "px": [1664,1280], "src": [640,0], "f": 0, "t": 10, "d": [67,826], "a": 1 }, + { "px": [1728,1280], "src": [640,0], "f": 0, "t": 10, "d": [67,827], "a": 1 }, + { "px": [1792,1280], "src": [640,0], "f": 0, "t": 10, "d": [67,828], "a": 1 }, + { "px": [1920,1280], "src": [640,0], "f": 0, "t": 10, "d": [67,830], "a": 1 }, + { "px": [1984,1280], "src": [640,0], "f": 0, "t": 10, "d": [67,831], "a": 1 }, + { "px": [2048,1280], "src": [640,0], "f": 0, "t": 10, "d": [67,832], "a": 1 }, + { "px": [2112,1280], "src": [640,0], "f": 0, "t": 10, "d": [67,833], "a": 1 }, + { "px": [2176,1280], "src": [640,0], "f": 0, "t": 10, "d": [67,834], "a": 1 }, + { "px": [2240,1280], "src": [640,0], "f": 0, "t": 10, "d": [67,835], "a": 1 }, + { "px": [2304,1280], "src": [640,0], "f": 0, "t": 10, "d": [67,836], "a": 1 }, + { "px": [2368,1280], "src": [640,0], "f": 0, "t": 10, "d": [67,837], "a": 1 }, + { "px": [2432,1280], "src": [640,0], "f": 0, "t": 10, "d": [67,838], "a": 1 }, + { "px": [64,1344], "src": [640,0], "f": 0, "t": 10, "d": [67,841], "a": 1 }, + { "px": [128,1344], "src": [640,0], "f": 0, "t": 10, "d": [67,842], "a": 1 }, + { "px": [192,1344], "src": [640,0], "f": 0, "t": 10, "d": [67,843], "a": 1 }, + { "px": [448,1344], "src": [640,0], "f": 0, "t": 10, "d": [67,847], "a": 1 }, + { "px": [576,1344], "src": [640,0], "f": 0, "t": 10, "d": [67,849], "a": 1 }, + { "px": [640,1344], "src": [640,0], "f": 0, "t": 10, "d": [67,850], "a": 1 }, + { "px": [704,1344], "src": [640,0], "f": 0, "t": 10, "d": [67,851], "a": 1 }, + { "px": [768,1344], "src": [640,0], "f": 0, "t": 10, "d": [67,852], "a": 1 }, + { "px": [832,1344], "src": [640,0], "f": 0, "t": 10, "d": [67,853], "a": 1 }, + { "px": [896,1344], "src": [640,0], "f": 0, "t": 10, "d": [67,854], "a": 1 }, + { "px": [960,1344], "src": [640,0], "f": 0, "t": 10, "d": [67,855], "a": 1 }, + { "px": [1024,1344], "src": [640,0], "f": 0, "t": 10, "d": [67,856], "a": 1 }, + { "px": [1408,1344], "src": [640,0], "f": 0, "t": 10, "d": [67,862], "a": 1 }, + { "px": [1472,1344], "src": [640,0], "f": 0, "t": 10, "d": [67,863], "a": 1 }, + { "px": [1536,1344], "src": [640,0], "f": 0, "t": 10, "d": [67,864], "a": 1 }, + { "px": [1600,1344], "src": [640,0], "f": 0, "t": 10, "d": [67,865], "a": 1 }, + { "px": [1664,1344], "src": [640,0], "f": 0, "t": 10, "d": [67,866], "a": 1 }, + { "px": [1728,1344], "src": [640,0], "f": 0, "t": 10, "d": [67,867], "a": 1 }, + { "px": [1792,1344], "src": [640,0], "f": 0, "t": 10, "d": [67,868], "a": 1 }, + { "px": [1920,1344], "src": [640,0], "f": 0, "t": 10, "d": [67,870], "a": 1 }, + { "px": [1984,1344], "src": [640,0], "f": 0, "t": 10, "d": [67,871], "a": 1 }, + { "px": [2048,1344], "src": [640,0], "f": 0, "t": 10, "d": [67,872], "a": 1 }, + { "px": [2112,1344], "src": [640,0], "f": 0, "t": 10, "d": [67,873], "a": 1 }, + { "px": [2176,1344], "src": [640,0], "f": 0, "t": 10, "d": [67,874], "a": 1 }, + { "px": [2240,1344], "src": [640,0], "f": 0, "t": 10, "d": [67,875], "a": 1 }, + { "px": [2304,1344], "src": [640,0], "f": 0, "t": 10, "d": [67,876], "a": 1 }, + { "px": [2368,1344], "src": [640,0], "f": 0, "t": 10, "d": [67,877], "a": 1 }, + { "px": [2432,1344], "src": [640,0], "f": 0, "t": 10, "d": [67,878], "a": 1 }, + { "px": [448,1408], "src": [640,0], "f": 0, "t": 10, "d": [67,887], "a": 1 }, + { "px": [1088,1280], "src": [640,0], "f": 0, "t": 10, "d": [70,817], "a": 1 }, + { "px": [256,1344], "src": [640,0], "f": 0, "t": 10, "d": [70,844], "a": 1 }, + { "px": [1088,1344], "src": [640,0], "f": 0, "t": 10, "d": [70,857], "a": 1 }, + { "px": [1344,1280], "src": [640,0], "f": 0, "t": 10, "d": [71,821], "a": 1 }, + { "px": [1344,1344], "src": [640,0], "f": 0, "t": 10, "d": [71,861], "a": 1 }, + { "px": [1856,1344], "src": [640,0], "f": 0, "t": 10, "d": [71,869], "a": 1 }, + { "px": [384,1216], "src": [640,0], "f": 0, "t": 10, "d": [73,766], "a": 1 }, + { "px": [448,1216], "src": [640,0], "f": 0, "t": 10, "d": [73,767], "a": 1 }, + { "px": [512,1216], "src": [640,0], "f": 0, "t": 10, "d": [73,768], "a": 1 }, + { "px": [1088,1216], "src": [640,0], "f": 0, "t": 10, "d": [73,777], "a": 1 }, + { "px": [1344,1216], "src": [640,0], "f": 0, "t": 10, "d": [73,781], "a": 1 }, + { "px": [256,1280], "src": [640,0], "f": 0, "t": 10, "d": [73,804], "a": 1 }, + { "px": [320,1280], "src": [640,0], "f": 0, "t": 10, "d": [73,805], "a": 1 }, + { "px": [1856,1280], "src": [640,0], "f": 0, "t": 10, "d": [73,829], "a": 1 }, + { "px": [64,1152], "src": [640,0], "f": 0, "t": 10, "d": [74,721], "a": 1 }, + { "px": [192,128], "src": [192,0], "f": 0, "t": 3, "d": [75,83], "a": 1 }, + { "px": [960,128], "src": [0,0], "f": 0, "t": 0, "d": [75,95], "a": 1 }, + { "px": [448,384], "src": [64,0], "f": 0, "t": 1, "d": [75,247], "a": 1 }, + { "px": [512,384], "src": [0,0], "f": 0, "t": 0, "d": [75,248], "a": 1 }, + { "px": [1728,512], "src": [64,0], "f": 0, "t": 1, "d": [75,347], "a": 1 }, + { "px": [1408,768], "src": [192,0], "f": 0, "t": 3, "d": [75,502], "a": 1 } + ], + "seed": 9289703, + "overrideTilesetUid": null, + "gridTiles": [], + "entityInstances": [] + } + ], + "__neighbours": [] + } + ], + "worlds": [], + "dummyWorldIid": "24522800-d380-11f0-9ae1-a31d61a14ed0" +} \ No newline at end of file diff --git a/py/assets/pixel_platformer/backgrounds.png b/py/assets/pixel_platformer/backgrounds.png new file mode 100644 index 0000000000000000000000000000000000000000..821ddfccd016afaf751db40b6ba2314ee1bd8a7e GIT binary patch literal 521 zcmV+k0`~ohP) zN>ERL5hX#-Jcjlt0jQ^LQMxqZ-3|Jp;wzM|@JHyELJtr-^JnOnLQfDo^X`getjijI zz&O@^?oSxU+ReQiH>z*Qwe+pNl=4l zW-J`j7Xi9N8@;d${{zT!3I7J*Lk*7Nf8K*OVDXs3s|gUJ=KDT)0d$WexHe$S3)g_I z2T&+A#%Tm_ArPQj2ISd-i2n@`X#gG}GQfKn0`t~0K}ApFi1WeqX9RjRD$N0lJ9xK zP9Knss^Do3hIs`fH)uX?L6<6Etztu|Ap;n|00uCC0SsUO1F*gT%VGBU_HWXY00000 LNkvXXu0mjf-x=Me literal 0 HcmV?d00001 diff --git a/py/assets/pixel_platformer/characters.png b/py/assets/pixel_platformer/characters.png new file mode 100644 index 0000000000000000000000000000000000000000..ae1f329884963a06928a4e3063cbbdbe009f610f GIT binary patch literal 1990 zcmV;%2RZnOP)TP0 zvH$=7Z$3l5-tj|9Upk)DBLDyZ0d!JMQvg8b*k%9#2Kz}wK~!ko?VF2sqc{wPy}f1I z-ENXLnGB%;JTQbmTH|;s277D*b!e<#H8>&>(CS+=XUDMxKTX=xo8IzSI zU&Rh+h5clz=oj!lMa~1iP$*J`=636^I!YD92Q{2vMU&y08ZB$7i6%ZPc{%R0l@D43+4)D0j&NLjDiUOcJCiBSI`Eq zf9&2K%oPAwh}YmP#4LeH09keg^8lyQ&tzDa0J7`~W&pgt-{*o17O?^v0pkIz{sLBj z@c>>oh5_RNto{mCfH43;zknq@TwoL|pfvyvhnHj(7z5A%V*!pwtBj*BD8MR!pkI=K z?)yW;Wyv-`)&O`H7~2$i0H=?}j5SyVAcGBq1B>@D2L^ZQHkdIletB8g6dkTdF2Oi} z4+I+m*ieD7029`yd4LJ)(>%b0BRS23P5NTY#V;4=Ekje>Y+^&)Y;aTL0UR-kB)(Cy z0FD?%68p0Nj`%g%5&PEw!5;&IzwbP3j6!DVnqula1b}d-1l$*z+He5DKVEy(p92W~ zudl{9nffyT;19SLl6d%*=()lsPCaUXb~0K6wEb&c{g3nh8vAQHW=WYM9=Qkr>TtM;m)^|*=>mW{ogU() z_i#eG0HBV?`*`WyACWEqD6MbfrFW}!F?z0sEgk^h$B^!UoLN8&M($%s_dw1pAO^#o z2L|&%&MY7XBi%jHJ&-dCsLP3gYM|-B4mUS9uu=pp=KKZN>EYo4R*HbdQCb0ZyuZJP zl_Fp<=P$tY?d>hB6akAle*wl$4aAVaiUJ?XtsF8~5jpPWtsF8~5jpPWtsF8~5jpPW zt=41?kcCApG9Qvt!PPJyl4HTuFdq_KaJ7x)`lxxoFK6$V$NMH&>*w*l1(%%Kbji>> zo-Rzy=vM>d0o+E1EG45_^8}K9#elH@L4E`a1pu%omce*EQY#j9bqy@;{3HOcKR)Jy z-vJYYD92U+FpIl&2_Wb{zzEodSO(+uaQb^#Dy}^vHvsIgQUELcB>=DgNJhYRyLk3? z3xTnE45ludClu&fmH~{{&5}?`03Qq%C)3J+L2&g#022oPOG5b`u=P#R?O&=CNz!Ei z5v;C>Hdx3l8L*hm6<{IpF7wxq0^4r=xXYOBcAi)Qcpn&}<6v@Nj4l9dw_E?*VHma* z*($IJM{@eTUXi_)1YH2IJO2fHe%_YIbxlYB{>E(ukL&cDdBl^^HJA<=XW6{0?{2rN z`v_K-0Jhubq(2idwkAXXKMfXn(KHw|w0QpIHRg3@jCf&3SDY>Zh+slZNB~lD-0JRg z#CAo*tSdvt>hAz!3)ar#HNlcqVA?M=SglI{?m<}i?R(NsNC$`m$_@`eJ8lkXVdo*{ zimWaH`1uA^;fk&B+7+yS$yx;~19n`OTRp zYw^bIFHi>(fR$_gEf9-j27{SvgYf`ScSdz7lHoOgxHVjxOa^fJIm#7q6-k93PV$c_ znQzZ|ocR}lII7|eVMm;fN^RYgGN*GGUjaA|?Ln&|%a)-7$i zi+ku6z}p%9%mB+^F2(ILKtIIyfBnl;S*NGEB)gmi69Gzj4$S80=|qQo_7#{({(ZOe z*7fB`P0FUv?(%luJ5v!YfZF6prV|B#K3{GwXeI*KAoV6+h(osypD& zka{esB4mItz7Gq2JD#tI)U*H~H?8nx5rBMk-|MLBVlsgT@b{Y7QrZ8(elWiY zR_N=&2F6klGJxS{wRAE0lemh$LjsWI!5FacQk@4#|F~fAe=!VHZ-FU2H(yuu-9yZ{ zhiWop%|xC6md@2su-wnkZ4S5vfTstThnc2+pK9$y9y5>E0uZ;Eif95rfihek!3}fP zPUJEEkRzmEkjMx+x7`N#?1?-UY?X->aoveL&R-fha!ieixb8%rIG|T5VXAxxtA8@r YFUY^GiXS9c$N&HU07*qoM6N<$f~9Dnu>b%7 literal 0 HcmV?d00001 diff --git a/py/assets/pixel_platformer/characters/blue_1.png b/py/assets/pixel_platformer/characters/blue_1.png new file mode 100644 index 0000000000000000000000000000000000000000..1acdd370deb2af149f7cee0c9cb86273534c50ee GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wmUKs7M+SzC{oH>NSwWHkJ|V6^ zx?!-&>C9 u$Hvq+3cmTZ_3$Uf8Np{lXU$l&RBz@UkMMKqiob!bVeoYIb6Mw<&;$V8gku)~ literal 0 HcmV?d00001 diff --git a/py/assets/pixel_platformer/characters/blue_2.png b/py/assets/pixel_platformer/characters/blue_2.png new file mode 100644 index 0000000000000000000000000000000000000000..691f4977380fdc9ecf4364e20f4578d217681fdd GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wmUKs7M+SzC{oH>NSwWHkJ|V6^ zx?pLxwH-X*iv<+dUAdoSQLGI*Y5VV tqL*<651Lmh`6{_*9mwU~bba}0{{CW**Y}^@O9i@y!PC{xWt~$(699zzV&(t< literal 0 HcmV?d00001 diff --git a/py/assets/pixel_platformer/characters/green_1.png b/py/assets/pixel_platformer/characters/green_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c6d7d7f681e1fb412b9b6ee6fb1bce408a4860b8 GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wmUKs7M+SzC{oH>NSwWHkJ|V6^ z+GJ*&vsZlEx848$|Bt%VW0LB=@7_nTNPAA89Ain4UoeBivm0qZPK&3DV~E7%+zW<$ zhYWaFFZiUsJH%MUs^Zu1MA*WZ<7lkpnqR+e{QDSiWd5fV?O&eR_8ZUGygux_vO9=p ziXG#jS!`5SQSe$nq;bXOAe)iPgOurt$8X%`b7+Z>|6P wOztRq#ux*|*I&1u`XlhrZpVfmyQ0_Jvp0DO$!F}?19T6Ar>mdKI;Vst00C59^Z)<= literal 0 HcmV?d00001 diff --git a/py/assets/pixel_platformer/characters/green_2.png b/py/assets/pixel_platformer/characters/green_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a6c81e07cdb211bff4d0008a0cd47d048f9fc669 GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wmUKs7M+SzC{oH>NSwWHkJ|V6^ z+GJ*&vsZlEx848$|Bt%VW0LB=@7_nTNPAA89Ain4UoeBivm0qZPQ9m#V~E7%-1B=m z8yt98AB5~`WZu#AfW=9zW2@4!Yf3Y|p6%D~ma rRW19U@WX-mvmfjJ1qW__H>qT72=IDY<8ONs=oAJ|S3j3^P6NSwWHkJ|V6^ z`c2DHXRrAGr*HiSf?2!TJ!AIW`#9fgk2+9}u_VYZn8D%MjWi&q!_&nvMB;Mp1zWyD z20W|}d{W;XVyt3S@e6pu{oqW`$80zD~MUw`gMFw5v=DyBp#; zYGfuPKf2I#zEdverYMt)r%cV}5A!Ol-?45H;RrtxSE1Lx|AI{SRjw!8RVEwqb||E6 z4}N{Q`qq@S@trXS2R@h1uB_omR@d>lqPc9}l4dWH^Fj+mfNo;&boFyt=akR{05QsD AdjJ3c literal 0 HcmV?d00001 diff --git a/py/assets/pixel_platformer/characters/pink_2.png b/py/assets/pixel_platformer/characters/pink_2.png new file mode 100644 index 0000000000000000000000000000000000000000..5c95202d1673293d9e59559bd0c52596d5d14c52 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wmUKs7M+SzC{oH>NSwWHkJ|V6^ z`c2DHXRrAGr*HiSf?2!TJ!AIW`#9fgk2+9}u_VYZn8D%MjWi&q)zif>MB;Mpd0Va) z2Oic3Ayv%$4@AXm8ol)r)`%Kzi)JbQd$wPbt>)-~<1HVU7#0Y2tT-da^R?-p;*a8l zzD{RuJN2r~PlI?0R0=;IKNS9`z=w5{h~KQvYln>L;ul(qtrqo<-{8jl+D$pIEIZ2l vyTkOg+mF2CZeuqwcpvhCn`@7)|782F+uq!@8?UDV9mL@2>gTe~DWM4f_h?=E literal 0 HcmV?d00001 diff --git a/py/assets/pixel_platformer/characters/yellow_1.png b/py/assets/pixel_platformer/characters/yellow_1.png new file mode 100644 index 0000000000000000000000000000000000000000..6b177a017e4269a4eec035adb1368eaa51602f13 GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wmUKs7M+SzC{oH>NSwWHkJ|V6^ z+Sx1q`b^e;Pa6OK|Nmu+biSSQzIz`X%&HoJa*QQGe!&b5&u*jvIW3+pjv*44TQAsh z9X8-$P4Is?N4w$$E0?XKgZhN$7nD-ZDy(_!ZvSn9UhQOil{1^Ye|EYZi!|eIkz=wG zu#laQ{pbScec`t`mLg0to+WjWKRjw=-*ay9nXve8^QA8BZ9AeA)h`~{b(3N9?X_Ru w+NPeoR;{Ej@!;2=5IOlnH#pSAvP7cA51#j`n8W#V6VN>jp00i_>zopr0L~R&L;wH) literal 0 HcmV?d00001 diff --git a/py/assets/pixel_platformer/characters/yellow_2.png b/py/assets/pixel_platformer/characters/yellow_2.png new file mode 100644 index 0000000000000000000000000000000000000000..607b9a8d0bd00ad32dc63a6c091c0e726a567382 GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wmUKs7M+SzC{oH>NSwWHkJ|V6^ z`ua>(XRr8wPa6OK|Nmu+biSSQzIz{ewLFdhF<)L<=#WSWzuI0&po98L_ZaH?n%d(U0+F7?1$NFVdQ&MBb@0PN9THvj+t literal 0 HcmV?d00001 diff --git a/py/assets/pixel_platformer/enemies/bat_1.png b/py/assets/pixel_platformer/enemies/bat_1.png new file mode 100644 index 0000000000000000000000000000000000000000..8c8e2764640613b7ee7439e234d2039efd3b0b8d GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wmUKs7M+SzC{oH>NS%G}%0G|+7 zAbtPa*ZEOFU)H4EdHDQvW8BnP8}sd)oxS42EzE(k42&f~e!&b5&u*jvIi;R1jv*44 zlM@v9OG+FJI0_srcm+Dm1k{<8u1>thsOqq4fy@M}KC$V2pFZ)4^ZWQk&)T$cV_+0p z%VefUI~*-!^Hwcf=%^{sZFMWe)wOxSw}LIr7NP>;23w}LwY7yi$exPhV_`K&Z?^E5 i_aMWez{0}gqdmjtChd(90-_T@&hd2hb6Mw<&;$UaNKQ%s literal 0 HcmV?d00001 diff --git a/py/assets/pixel_platformer/enemies/bat_2.png b/py/assets/pixel_platformer/enemies/bat_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d4ac52da8531719a0090bf584feec3dceae1cc5e GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wmUKs7M+SzC{oH>NS%G}%0G|+7 zApQUU|M^itU)H2eowf1K!{?_PNS%G}%0G|+7 zApQUU|M^itU)H4EdHDQvW8BnP8}sd)oxS3hn)h=6r5Q_t{DK)Ap4~_Ta&kRg977~7 zCnqe>%+P0V;^LUid?=Hl*y`4l-rim#s{=x^c?y1B>>gcNS%G}f0G|+7 zApQUU|EaS!-g)?3WWr&cqu-pp;%^-lwgpNsmIV0)GdMiEkp|=hc)B=-NL)@%kSJ-; zbzs3j<&CH07HVv;wfhzM_CW1*9?bLRt<*^=tg($1EiSzexAUIvoNs;SBr p$8~r+E=`DGF6NJRk`iE)WGGr9qw8YUDg-o}!PC{xWt~$(698JJHc9{h literal 0 HcmV?d00001 diff --git a/py/assets/pixel_platformer/enemies/block_head_2.png b/py/assets/pixel_platformer/enemies/block_head_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a57c0ce593c05c53e989a2f9ef8c81d7c452ffed GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wmUKs7M+SzC{oH>NS%G}f0G|+7 zApQUU|2q$#i%d8?b=F3mqu-pp;_uxLn+23$ED7=pW^j0RBMr#$^K@|xk+__kAi>k1 z%geGr#=u&aQANSwWHkJ|V6^ zx}<8tT^F4@51&t+wee4eb)BKAvsb*r%{OsCImVJ8zhDN3XE)M-oD@$N#}J9j$q5VW zH1r)d+&q1HqQy~ zA^2#DwD@dkX=h&ja?Qf>!ov2Vp4gZk!8t_&O+^X}uND-2V^Ux;VmMW;Qp#_zBm!t3 NgQu&X%Q~loCIFXUNP_?X literal 0 HcmV?d00001 diff --git a/py/assets/pixel_platformer/enemies/drill_head_2.png b/py/assets/pixel_platformer/enemies/drill_head_2.png new file mode 100644 index 0000000000000000000000000000000000000000..37357d6a67be677b6a62cd55d597bf489946809d GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wmUKs7M+SzC{oH>NSwWHkJ|V6^ zx}<8tT^F4@51&t+wee4eb)BKAvsb*r%{OsCImVJ8zhDN3XE)M-oHS1t#}J9j$q5U% zH1r)d+&q1HqQy~ zA^2#DwD@dkX=h&ja?Qf>!ov1K2Zm#YdhCiiG7Iugoql*uFI}HONr9PR$4|AJe*?FA Q18rpRboFyt=akR{02Jm*3IG5A literal 0 HcmV?d00001 diff --git a/py/assets/pixel_platformer/items/coin_1.png b/py/assets/pixel_platformer/items/coin_1.png new file mode 100644 index 0000000000000000000000000000000000000000..25b9044594faadff7717a627964f76aa077f29bd GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh<3?#J|q#XfLEa{HEjtmSN`?>!lvI6-$0X`wF zK>FX4#xGl>^X;6SAG-Sh`HUq&e!&b5&u*jvImVtYjv*Y^lM@cGeEZMOaPt3udjkW5 z|50DrJ@)b3W>%Ts)^u{Ihe`yC5_cHqMOITrSq6qHfztEUAD-(0YG?3t^>bP0l+XkK D^7}79 literal 0 HcmV?d00001 diff --git a/py/assets/pixel_platformer/items/coin_2.png b/py/assets/pixel_platformer/items/coin_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d563c8915b7b00dc5cd3a48b85099f0c7e49389a GIT binary patch literal 146 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 L|A&&;L;L>#!B6v+{`tk9Zc|gHCI(0VE5 z-{Il2X>yN*-+?|U)w08DwzaXgRkh&=wYLG1eAAn=IPmtgQ`gQPH-BwZ+gD z7j220FS+J@`e4#yL^8! zf@=5=ot{;VRw_T0(IySgp)6lJFU^g3Za$9RuS?HKnkOY`-jql4rM#Ly6-xQ~q|f=a z0BU|#Ye|I(2xx0XTMMfNQ>|Jk7feQs(5}*n*-}w0mfsIy#`!Nlkr& zOrfCUGAC4}bo6s-wyb2W?)qpryt7=^@<->&sy-f8@RUv!Rc%~3bWByA!k7bmNcmW% zOs{mMd@QfqGmI#he-htT@-xa@5ns&bit6-eIBT9D+c9m}CrO^03AW*sG$j?-3o3Hb zWzXbgj}c&BM#ZnIg&Cd3E5^aGW2F=7ShkeI?h5LOOcC{Ibu2fRFK4u;Rju^IT>074 z2$t`E@>kn05@v2#qe33 zp!l*>+d8)3e>Hp)Kcu?t(9+m;2?`xh+_$LpVP%)SS_l3y!uDJ`tzJ?1rd#+TjJUmR z-a><|jVHv$ojB*V@g|4Vu<>avb85x5T@H!uVC6Z{aOXME?@d^)ww4MyAZ-nb$;)1& zMPo;A`03Oy`!xmaMqs8;%9OP&)G>)7877P^5^|@Fa5{aWG(A_Kx|~iwKbI+(Z(`~6 zOkUH=1>k$Jgx9U<^mHkkPHSB>Q$H2!sGzkNo$0hr94(v92>M4?0xMr4;hffH6+{p^ zP4TnR4X-~CTn>8z+m~Bf0&UCjP@wHr7ixSQ4RL37=kUgb*{u=GZjE4e3Bl~v2xhk? z1&$8}7)m8lK~@W=)}+Ak(H2Ryr^2izr#e#L_-JcOb*5xii=qaOkG5E=}fkqKM4}vJEJ_ADd_5mN%>=p4lxxDGz=TD`ihkN_r;`B?Cr)0nZ4F-Rg!K*P=L2@9$xUj60SY?ar_gzKDh3eR8&H>p$%a9QO-ui z@-c$yjcjzUI~x@&-#q5k@OxKQ!f4irIW|Hp{}Wh=%}Vab>tA+XWCP1{@Or-LpERS_ zhOlfWYiGR3SmW3nU&9{S-Ucd|DEp9S(6Bwh(Z%Lg%g#Bsbe;jt^=$naI2TEH%n;=Q zDzAeI4m#hWjUI~%6zPbd0`wF#z_qTy<3rMxo@ty`4*ck#I2Ybd<&?*QIL=LQH1ut; z`&hMuBrzKvmve*iQ}j-G@AS0^h;VUoFHG5rS<_P^b(}NypCBbC1KK$D#MOvhRHK8} zcB4r8m?FnC80|?k=mbER6I_pL)srtku)DpJ|V?B&c1l|#hRR`1?97m zGm&%qmV!gg(V!|1ROEpRKYdN!;y?u_`3Y3`E|K_2;P(A9nICt zSi|!$erF(VDT`~6_|xa zT-HYLF4@8@(zuw-1f=1oO&BeFYmCPkzT@g?owz>%PVhQ>JuOBXPF`2{=8G7o&!Bi& zTJDnMuEnm+zY(fN?yE%ZtMzO-v-iE8EtfVf_B?cDbEW4Y$hp43S7NnjcQv}M5?#08 zt3{&c$6gz|8d-N;UbEOScE$I${FZ#_#l^&*J}A(1qzsX9!jdWfRR-_8curoA^UP_*%VWT50v31rqHFy z(bc{A8XX<+878JWd(R(u?Lf8To=V3(mwZ<{MixS~flZZxZ40LtgO6N!2*quHPZIUR z0pHZ*p54i~2CO1Zny@#xM5u!@Uc(MWAImN*5eYQ{mwTT8v4^lK!-pQ0I_D#+i@2tR z=B@s5fTbGjtps~7Z1`bta3x@9 zdQhq7<{&DsONZkJ@o(cpG6@pIGynNr$JFd`runh$0}6|piTm~RA4?~%iP-#7u(N~~}+4g%_xlXWIFp6YQOHtiV#UW9f5;Y=G#`ZDQ5!C;ax#W)=`V8}~%||T1JzCHs zgC1}(lr@L%jkjv#t!Ax;|7fXHNG6!9(6&)CIgPY2Dz;PM;%(EOq8Iz9n4sd*R6Iw; zQ7T9VXn88`rJ}(HcR#gJLEq7Lp&%bzD|~Qqe_-RXZ291p$p^O_4+hpQceDkP%Y$Lm zdO8BV%Ol~yCzg9cf&S&LP+;g53WdR!&6>r8;vsy)p>V#G;k4@V1izA>ilT7&SRJNU-v z&?p$@40teqmr!9-Uc55_Pr;C+Z}Q1QkW+;4Mk~Brv`o@t(&lR1{ax`Chn8@5{Q%?j zZWOk&YwddYxa69$5k9UM=Qd&)=ty5H~ZK=4!6FPCVN2hYuagXyW3ET3h2QxJH}XK*g&3TTS5KusK4? zhON1nd+zWjC(!NB6 zo8&9e3o5>k|8?3HNxl|HzNjy-X*t{=`9gt#TV1UIZs@Ra?y`;6>>}HOLbe5kYzqq6 z)}jS-t;vwlI*}=6a;o$wn4ZYFju4RI?7f44Uu@5a1 zto70)tyqXdCeX61N5JKOl_y!7Bu&Dd9uH|>z!IAm-oU!uVzBeVq+ zoXC=))zH_gG{}vhzCtgkAmn9+h$Ec4frWE#A)GtFKT93mDd@NG#)X191O;^n3hEFP z)G4&X4xt@(2<@;_L~=V^BDozRlG`OBx!od?+mk}>4x+njQoX4-t0hu>sWq(Do=RvP zx%Ong5nut>d_Q12f2)CRnL0_SEg4FVDV8$`>T;72nj|73rs!}Z=p4o6&A#Ibr2|p$ z)i(c#2DlL8A!70qS<~75w{Q=MDVdVWYzCoxu7=VF#+3u7iWJSId4&&5sHsFCD>w?< z)2jH%BkVZG>U320OHdipUy07x!#EEVMgHU@?dMQS`VH9$3nOUl((qIJZ5UIOos3{h z8}V74!i7*=N4GEdmx8^uhaQIJ+E&}Rg#~HvhFLxQG`W%BPJ(Mf03Mn?{Fw-BvzR=A z&z*!_H728t23YEZZnX2|*EJ3k1+T>(Rw@hxQ~=L&(~pX&W$$rUVQnp2tdlcSLc~=o zc%%{;VSAC}Xm+ek94orHt?ecEwKZsmCg`qQi0 z7->jO`dvNTnPP3ioo3ln4|jsK^$;;JoajO89hFG*xwBgB9!^H6xKonmaOSfKgdJP0 z1=#=Eis%H4M+!P(rrQKF5djmi5cG73gji7!GfeH9@*PAhr}1%o7b~Rix)=tJ>;>g< z5)iaJ!l`(KF=~?$yOYNu_=}k8dLAFwzD5O8K$*?3i++BU3Ubz5_VXx!2WeC$A2T9O z_C~}@tel58!<_gD@r}4mX=$BWCU9PQ4*e~?T9_8qU|%KJw*(J;-{2eDzOn7hzJ;AN zxxFeY6n~7Y=!GRUKF;Vi4$?W^?1}^IGLdHk4)G3iOh9*`W4u$O+<_kO7#IBr z$hn}Kb9Hsm@aL!OXgC8m@WJ#OHKN2$3Q2|O)IOTEk1+T;fP`a^jW^`q!z*k;(iAGb zNyV>F@vA8G01EoJi8C^1S{z4=gp-l+w$A{-`T-1L-cdNwtq6EMwovlJh4E|hW`-?4 zazm0$6?xOe&s~%6MOb{`{*~MjxWVz`Pf%%wA2xwD#SRdzU@f%UhR2@4Vl77m1Hzoa zhVJ<3zzvu*MPeO-+1R}u^I`>rbIgJs-(APLo8yIxBt;aE*f&4oFHy}tXXe7ah&H`} z32tl6#YL#5Y!`7LPLhr!gCuQ3|vmgeg_1 zxGV$EooTwOK*3TmjX0jF8K&}P{eA&!a3~kFBI|Km-9xuo9n44dg?zbLinRN}T4^B| zWwddEGJn2Yzbq$n6UfgUIEOv9QSFZC2VGFx$)2V>EE@B*ofMWU(jN3OOXV~(=_!0p zj^h<-l0&{gn@7}zOEXh>Z9E?8pp!Ykdx6=_;5=}q^eu<`+o`;mZe=Ftj25Jrs>Nxz zjTp;fJcY0CnZBk>dfdBD6J!LCifVBmQJP&dkEdhO~nBg{;VyU&Mk46Ii) z>9nz-!f7ST_Bm~CjYZym7a*}D4~4mSENqHu>{JQHBzR28)6sB(X@ZH-=X$#A-RpG3 z_h6Ejr5jyRci)8v7Q2QoK3M4*UWl->9zd4Cg(FMBuz`;}1AL0kzduV`1N}BBf`_uX_~)UP<1#f6GnHJ$&c^M_Q1X`qKfR>|{7=sxHFB zzl+2lbEqTjC&l%ky2&y~4`<;wD|Lv_;{O`4SL_-H%949}?c^S-4||2wo}k8(aLGN) zLS@<~sm7H0gH#)#;&)J>C-FBUYR+H+$U!4aMI+}Sbp4arG;(^F>ZX%ILg1l?>-iC) z9CIFHjZH9S)0;#mFJhFL(Q~f&X093;twcs^T^r9l^hs93hDyZ57^cJxD@uC85Ux+4f4kLRyalxcIAt*F zSCEGxI~R!r2&M-x0rCepTckpq%r@w_5lVwHS8ox3qv^Xu0F=%EU7$x=yY7vNZ%mwd z2B=Q>TmnoV*_GTU@*SO8eUbZw*|DF7`imHTw8s@NsU*I8n0&-)4wjMx{BT zf6A+S$B?}Plpm0!()!ycxd}wamnM*%G39;MJAsTG;{3X|h}1ViW~$AQCUTM?8?IcM z&Il-A4!1JPOsc~?mwX(CD1=bXn}L>ZSzrU-g0A z=Y5r-?UmS`#o(U*cqg`pvC^}>JN&=VvcnHV`$bH^oh=L_iEBHfh<>KFu=Et3igQ0Y zfR8iOJWgW|QQ@b8X*sM$$E1;Yh@QVM-Z$+@k^^oYdro`2p8?KJ`k9Xt?2p(=;%Abb zcL>BV7gIm2VjUHmsCbi#Z&C5h9T@jhwX#{olGh3+x?KjcK||eSrP})26#J>}np(#Ri%&p6r~a!JOuPA7pGZd)%@RX}Y5Nf_Td) zRDmFv!<2NryR2o3JXyQhwQF)bye_djdEzMRZ|JdjkKm*%-a{;dJ?s~e7<&-!iKBuG zdO-_}Mhl0I5pitWXsg?m5w`cx7!&33={7oJ5e51u!ftMJ)b4wLMSr%?mAy!9GlD=% z!JgXaee`c1zoqSx&P40S|DKy9kebN?H_mVQlOP@1;dLT~h7_oV$Lgg>b=NXR94>0Q zcW=R{k(-;Dwm$98F)zD9qrHlnX^k7L);Ky7Q~hMgEk=leiFAa2wLyfOm7am~UwrM0 z)$Xm8?yc9lw?XJSJjrkv^^C3*mjXnO;xo-aWQo7bFGKW6q&+k~w*w+Gjv5Exw;M>E zUX&vw%Gu-Q7+mkXLTC33TVw2h*GrC>VCFSGmW#3JI^mpXeC(rl%uPhm@Hkfq$R!$H z6v8xgF`>aG1XcFlz{6VL9qRwIlAx&Qv(hzP%fQA{C{)QvLuf9O_tqeyBcul=G#_@wN|3JADoGEc z%C1-m^kV)P7t*dbDRIThWwyF2R<@tTlJ%C*z6(E#In?22nc(SOLIdEJtE|=!b+yXj z2PE;o`U_Q#f%Vn{IS^Ou+QrXe^|AacE!@xY6`Trpu`qc>Qh;f|)^(|rI7c6>1m8xoioMZN5RFYZLe*+8X002qqbej{&wMV;nHUp z6OSy(pQx?f$Zw(`^4i2(LdeP#hhkd!>@5uBaYUdP$JceqIFEe3Fr){Bd@K3EQZ zc9E7Y$r7%tc`n$PI3P_}PNs`BMRk17#kB zJl@HD>CDQqknJuwJXv((%A{%6Y0xI%a)X&g0XH@$lnB+l>S`H0)>YfoijTtM&f5MT z$pO9#0U1*YBwIPFC*Okh7gYQr6@N(uIntS~W$}AI0m+b^+jn@>A4K;R>^?-yoeeOe zg4wg*A1A_q228BJ2RC8Q72e!ajSN>J!?h0O%%1l;l#3e|JMO)-xzcg(!k*f|I+hBt z8~5gFoxS)YE);I;sRVnf!J$eJNis{pO}1vVZZl~>v5o~Zc^}^rkKpuWG<|qZFHjOn zlf#=0!?9jP$$1Ye4x%7V>zjY|lVr&&@Cynvo<)3_e*h_qggkXRGe^&ZCR)M=Kn>(p z5C}?))#*7T*^j@L23BMuaP!Nu^E|3yyOu!+aM&?)u$dxh$rda82h>>vrjZqv(&dtQ z-dwon?3M#`;)EqkYhKfNKJr@ReC)N@MgP_KriH-Y$2u5O+jMdI;-?l9BTMqOT6=e` zZwNP_?UMwhi$|Q~Z=to>Ns4nqpPVPENgc> z0VNyG4fkHwY$Pqf_G9k7Qa=9P9fnf@dJ8*KtOEU9*g4ZSo_D7KLTK_DSy+ptZ1SYJ zp|`W!4EqZSNU_MA%;XChT;OwFSml?(C*LRR(TEv%lj^Dh{_ zf?8yDp~d@T%dtg-rwRNweEI1Yj1Y5k(VGCtNkOD{*i0_qi6OnKoRJu_6%2ghJP3v#-Fe{C;v^n6H&r} zF+>UFo=Rkhs3+20?cZAI-+DE&wU+3rCe~LH>#K<^mBf}y16LCdF6^qs66Zd7=F~UZ zFC40_-BwwXoa42+!%!Jd5M_}7nL zO5zXmEbM;e0NC%@m(IMjXkKbY{E2~>=~m3dW>SS9?)3Wywd-i%etmLmyL$M)LNERl zMKa7`U!aB`iSA7Yl3W8TW9P-j5IgwKn79L+B2N1mIN+#VTc+O8J9znR2mjyEn0Kl8 zM=Jh>iXT(q=EDC0y`X{|+WHtOquC6}cKVZmGjsS0lK7K=nh$dsEy(A9=YvC!s8Ays)LN+sQbCrrMs|Y{ zm_4m!PHR7;h6ojHR8Y8uU7%u@MOYMoeT=7Ef&EE593Fgx|1H8twSPw&5tOc?_`v7! zc>YdW|IgABRq2U}^u*sviTC`GgVmi3;t8xo3J`#jHjJ<1J<%3Cx3aZk?; o3B|2>PoHPthJ@nQ_={f8lb#zA`{&jZEkEV;4Ei}&#=Q@=> zCBV6^gdq3-j@y%|BdLaA+Nzy24Qn30{qNZtQ+%7;mT&dY)$Fx_eSP>b0nn=A+pz30%3g*L&Ub7x}3OlcD_Gocx_uBB81 z__#KaNGENT-PD-*PTKw;W3QOTL_$qz(YtCY`dQMBu9jq)kw_ZaL`t<+qS`%MGc0sw zd^O_;>ys=1Kk>t3bpzQXPo%(B_(3?U9!Ud5ao`w)b#U%T8ZC;WtOM--H*CO}e}xU$*I~oD zV80B*+=zpfUScnShMV-G-RaK7LH*)^AAr6^wc?>vN*JJmzbHS>_2gH1R36;H0SS3vVJ zJnRAz9u^8*dEn{d=kXI@UNkHtr)+qn>1GR*hr_~c1ZxhHp(WTL$Z(_9t3awzSlh93 zRyLkr*i&|u{Opl5SQG~vBY+i;J7WX0jhljZ{eWUnFM{vzO+wzLZ@3y2@C@SoCiNHQ zH<9A}VZw_DYlT%B4~h>9hPK8qzk={s7lCY&$5Q*&)cvXK;7%wPx*z^U8qN>yg?2-w zlCe8d6o(t5R;i+;?srzh07o#+b)&iT9}Za4+KTqPl43YvxFE=)BVx;NL~D)N)mqAe zVABwKT{GD0d@?Ap31a9wx2`?7mR;CUa!UTn-qh|??xT}+^ymJO+EVIn0A>?X0q95g zfV8gYBIK&e8#F={8V(bpLg`wp#IzYyLvW=~gzCvV%Nn3<+J?qTXB*o~-H1@sRsSG+ z<`dyZmw)>@^X~OT*;e*)l$!M@xm@D_%7ndgq80=&^9+-vR6V(&u@P7f6Wy8x0ze1) zvI`GC-n{X+C6Mj=>We3x-CG+EHu9mob<`Ou`a_kT&O6$vrLY1qtcuRpRFw!x1H7v} zXXWW4hK-L1Er+Q_CX{7WnD~K{Jyk>;@3L;Hw(N0y>#CmCtZM36up_t-xh02#vdqj> zGznKShDkR8k2M4YPi6O)vzybd>)&em>2FrP_wK9T`Hv*ID9Zdu%D&R#mtYFNC@|z4 zAJgnKGyZC0`nY>1154~c>@t$x3Wq=BvJ?9ADCKKb^{C`$YSKtB5kI`E8K!1R&aO)6TS=jNcsG>r?xmvllI7DaPrU z<>;KV=lpvv|M&g>zstkI!h8hj(;t05`sZSV{!A)n;`9RZ@CQ)%00mHh8AJmNW*SJ@ zHRu{(F-yzrpnHJB94)&CJp*3s9pEuf>)c=-&L3r~P!kGxs!_mu$fe6Yr2imX5GV-v z0(>=k+x<3!eY9sD^voaS53zbDTo~c}h4)Ft&u9grEXNaKA{v(!sOF7}2{9ZK6;k0& z%}mE6zf1Fu9q5k7;#l*H9q7U0cZb5p^XQKumw9*qsvn?HgqZ-st^kAC7FZj02iQ?A z;C>qJ1~}}YH4m-9+9JF^PxJLiV>1yVxjT`(Pj>MODj9WtOXDVDaWSElOi2j|D?%bJ zOh=PaOfh;qcttCUMP*4yOh&`sktIc0L_>aF;{`z$rzAnp@&#ckK0Xs8WuG9Noe^Wk zonk?lh+-u{#>;U*z=iNs4O(q`0FI59RoDdIX9iR($$0GY;! z3OT6;ns60qDj@*D;%qEBCeWeyDQG5Is$7EX0$Sq>e%w9J{Pcx+CDnW7=)%!-c;R@a z{F#jJ*$n^Og|7eW{dD)jV5Yn^iRjw+SeWdIQSAC{z|; z4g-{8maGW!yN3KO$}yBu{BDg?W~L=fxGE|G69^Q&8XHa|;ig-WViURUTAmj4rJ>dzn~bD>JI#j+<< z32=i_klhPPP20R977-0QP)8FAf-xaIfwCMZVAz5ubTJYkF&O3A`6!e6WPaOOc^_+5 z-mf*QJlm|C$>`lJc8QR~rWACWwAFx)-$keZHNe^W-9z^&fswPPR0gJ-jY%@)7>&cC z9FcG%+|<0MrEnsS4`6blx>@y&gLxOIsg{yD0P^wkq%(g`!eCe>1@9qMpu8DiMkcH= zQOz~|4fxxSTZo(n$P{wWp!-JBS+9V&4kzNV*+^X08XS>e>+vKJ^Bc$j3nk_A{XZ$3 z<5mkw=J)^T@T#wD%~zWWW_)|*n6=Vf^D{rIo$FdH-F>-c?g;#(&Mq8E_b%*HOP`rL zvQ|>|VgCF1sRJnyS`S`pyV{oB)1ksu)3G$RTzXSl9=|<#Ycks>sBm=(nUXVeU5`1+ zS9IyMi?5}+(#_XeueN5J4y#Rvm-gTDy}Vw4%Idy~U4j>i-Eqiwj@^LE(s#EV(*f3M z=YmW*I_*(h`;g)SG!GFJj~E1w9GwV?Shs;a2Shue*g!0|^HJtZPq>bs&~;e$Za>3- zC*Uzh%6!lZE9-)lw<~gGO#m^T=y8j9$2TN%ZzW}9(Dbnx52gx1cm{GRGFOpJ@DVe0k%wpnI zXoZwCA>IILjY;^Mq$3GO`~{RcaT{rXLqhm4WSV;-8jEReLb4ijPGhGNislJJJOWMz zGmT$@K1u;(CVRrK;WiR_48&v6ag#+`wq#LzH$RaW0(;<0rN#AWF0EvWpPh5B*~-6* z#4|+y~b$-dBvZlZA`B}c|GrlTSo<6zo#zNioUC?FMQpM+dr)5My3T5!_ zg}!w6^^=R0H(C~p)#kRP=1*F0wr1N;s_iFN0QSn)ZI`|)VRrc+5 zhb?M_O}AV#H*Ed}dbb=b**#)JX+XyIu`ryZCNyG^K#&PA6t>QAaB!|@GziZoX@eZo zwQ_>hHgZA@j$qtkl-)^*phY9PqFD2La_G`ZDTcyP9EMi_1R4q^o^TFueohC|F=*91 zSR9Ye=&lF`YC#Iw7YZ01D)|H|-Bg-Zza>cY4nPw~8G{Vqk#j4Ew$y&c*M1a8@4C)h z-F^Mk$Dzegc5j~wS7Tr1$)jskHL1Sz{)J=L-5>Lde73bqg{!tJQ*~sus?G+Is`k~Y z-GBG8c{RERK;~*DVtZH;__uBL-rWJlvT$535DvO+R^PLo@_@>izPDxN%twR5IUGN= z|!rpeJYNz~|?Na2Kp_lQHx2Ie=|8U%JgQ@OI8-v+{B< z!{CsCxe}9618KeF8GR%pnA3Q2M}VMQA+NtE`befDu-GzI1`M0Ggdw$6darH}r2G*w zz@p6-Z72gp4_q9WKbI0O&u(z&pXgYcSU!0(dZ+oft)I4L2f`{`o#Bjc9Kr;P{Y%rQ zu7$3KvMrq|T(zCc?$7z&werdj+uv_bolA=gv)2#aU>3i5awTievywxym=`fv7UJAx`)HNl50Q}H@8$AihaRD7{G#h8!m zP+K~d#_#goIuY3U-Xelud<|P+vk*IjyJ-)0Fv?PF&ZgM*6~QTz1mOg{Wj5^A4&=kA zuQMw;D&K)GH4)OIY1%goL3 zy1|rtF_PFaQ}+`C7=DqF%_H9@ z=LVR6R=7CKJb=!aq06P>;87&jfpzYIA52U*ZYCLBu?(g2JdQoDe|9Y*|1&T#151bh z8Nehy)C#Qsi-6Y$ZqnjO%uYw;2qtDkECGkc!Iyh+RwqUJ1^+2%)mKM| zTb~$NqsDjW|DDi@&q0-Jg>nS42Q0%de?U!tMU8(zRbQaS-=i{kY2_+_&0rc}c}&AY d7OD?O^&j~h)9|;FJ_i1wB=zFo5iQVX{1<}x7nA@1 literal 0 HcmV?d00001 diff --git a/py/engine/__pycache__/raycasts.cpython-313.pyc b/py/engine/__pycache__/raycasts.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..368e40b84f5dfa61cc50a599edfe3c8f469b491f GIT binary patch literal 9311 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 M|4wIv(9g#5-vk8fcK`qY literal 0 HcmV?d00001 diff --git a/py/engine/framework.py b/py/engine/framework.py new file mode 100644 index 0000000..47f88fa --- /dev/null +++ b/py/engine/framework.py @@ -0,0 +1,629 @@ +from __future__ import annotations + +from typing import Any, Dict, List, Optional, Tuple, Type, TypeVar +import pyray as rl + +T = TypeVar("T") + + +class Component: + """Base class for all game object components. + + Attributes: + owner: The GameObject that owns this component, or None if unassigned. + """ + def __init__(self) -> None: + self.owner: Optional[GameObject] = None + + def init(self) -> None: + """Lifecycle hook called when the component is initialized. + + Returns: + None + """ + pass + + def update(self, delta_time: float) -> None: + """Lifecycle hook called every frame to update the component. + + Args: + delta_time: Seconds since the last frame. + + Returns: + None + """ + pass + + def draw(self) -> None: + """Lifecycle hook called every frame to draw the component. + + Returns: + None + """ + pass + + +class GameObject: + """Base class for all game objects (entities) in a scene. + + Attributes: + scene: The Scene this object belongs to. + components: Mapping of component type to component instance. + tags: Set of string tags for lookup/filtering. + is_active: If False, update/draw are skipped. + """ + def __init__(self) -> None: + self.scene: Optional[Scene] = None + self.components: Dict[Type[Any], Component] = {} + self.tags: set[str] = set() + self.is_active: bool = True + + def init(self) -> None: + """Lifecycle hook called when the object is initialized. + + Returns: + None + """ + pass + + def update(self, delta_time: float) -> None: + """Lifecycle hook called every frame to update the object. + + Args: + delta_time: Seconds since the last frame. + + Returns: + None + """ + pass + + def draw(self) -> None: + """Lifecycle hook called every frame to draw the object. + + Returns: + None + """ + pass + + def init_object(self) -> None: + """Initialize the object and its components. + + Returns: + None + """ + self.init() + for component in list(self.components.values()): + component.init() + + def update_object(self, delta_time: float) -> None: + """Update the object and its components if active. + + Args: + delta_time: Seconds since the last frame. + + Returns: + None + """ + if not self.is_active: + return + self.update(delta_time) + for component in list(self.components.values()): + component.update(delta_time) + + def draw_object(self) -> None: + """Draw the object and its components if active. + + Returns: + None + """ + if not self.is_active: + return + self.draw() + for component in list(self.components.values()): + component.draw() + + def add_component(self, component_or_cls: Any, *args: Any, **kwargs: Any) -> Component: + """Add a component instance or construct one from a class. + + Args: + component_or_cls: A Component instance or a Component class. + *args: Positional args forwarded to the component constructor. + **kwargs: Keyword args forwarded to the component constructor. + + Returns: + The component instance added. + """ + if isinstance(component_or_cls, Component): + component = component_or_cls + else: + component = component_or_cls(*args, **kwargs) + component.owner = self + key = component.__class__ + if key in self.components: + print(f"Duplicate component added: {key.__name__}") + self.components[key] = component + return component + + def get_component(self, cls: Type[T]) -> Optional[T]: + """Get a component by type, if present. + + Args: + cls: Component class to look up. + + Returns: + The component instance if found, otherwise None. + """ + component = self.components.get(cls) + return component if component is None else component # type: ignore[return-value] + + def add_tag(self, tag: str) -> None: + """Add a tag to this object. + + Args: + tag: Tag string to add. + + Returns: + None + """ + self.tags.add(tag) + + def remove_tag(self, tag: str) -> None: + """Remove a tag from this object. + + Args: + tag: Tag string to remove. + + Returns: + None + """ + self.tags.discard(tag) + + def has_tag(self, tag: str) -> bool: + """Check if a tag is present. + + Args: + tag: Tag string to check. + + Returns: + True if the tag is present, otherwise False. + """ + return tag in self.tags + + +class Service: + """Base class for scene-level services. + + Attributes: + scene: The Scene this service is attached to. + is_init: True once init_service has been run. + is_visible: If False, draw_service is skipped. + """ + def __init__(self) -> None: + self.scene: Optional[Scene] = None + self.is_init: bool = False + self.is_visible: bool = True + + def init(self) -> None: + """Lifecycle hook called when the service is initialized. + + Returns: + None + """ + pass + + def update(self, delta_time: float) -> None: + """Lifecycle hook called every frame to update the service. + + Args: + delta_time: Seconds since the last frame. + + Returns: + None + """ + pass + + def draw(self) -> None: + """Lifecycle hook called every frame to draw the service. + + Returns: + None + """ + pass + + def init_service(self) -> None: + """Initialize the service once. + + Returns: + None + """ + if self.is_init: + return + self.init() + self.is_init = True + + def draw_service(self) -> None: + """Draw the service if visible. + + Returns: + None + """ + if self.is_visible: + self.draw() + + +class Manager: + """Base class for global managers. + + Attributes: + is_init: True once init_manager has been run. + """ + def __init__(self) -> None: + self.is_init: bool = False + + def init(self) -> None: + """Lifecycle hook called when the manager is initialized. + + Returns: + None + """ + pass + + def init_manager(self) -> None: + """Initialize the manager once. + + Returns: + None + """ + if self.is_init: + return + self.init() + self.is_init = True + + +class Scene: + """Base class for scenes that contain objects and services. + + Attributes: + game_objects: List of GameObjects in the scene. + services: List of (type, Service) pairs. + game: Owning Game instance. + is_init: True once init_scene has been run. + """ + def __init__(self) -> None: + self.game_objects: List[GameObject] = [] + self.services: List[Tuple[Type[Any], Service]] = [] + self.game: Optional[Game] = None + self.is_init: bool = False + + def init_services(self) -> None: + """Hook to add services before scene init. + + Returns: + None + """ + pass + + def init(self) -> None: + """Lifecycle hook called when the scene initializes. + + Returns: + None + """ + pass + + def update(self, delta_time: float) -> None: + """Lifecycle hook called every frame to update the scene. + + Args: + delta_time: Seconds since the last frame. + + Returns: + None + """ + pass + + def draw(self) -> None: + """Lifecycle hook called every frame to draw the scene. + + Returns: + None + """ + pass + + def init_scene(self) -> None: + """Initialize services, scene, and objects. + + Returns: + None + """ + if self.is_init: + return + self.init_services() + for _, service in self.services: + service.init_service() + self.init() + for game_object in list(self.game_objects): + game_object.init_object() + self.is_init = True + + def update_scene(self, delta_time: float) -> None: + """Update the scene, services, and objects. + + Args: + delta_time: Seconds since the last frame. + + Returns: + None + """ + self.update(delta_time) + for _, service in self.services: + service.update(delta_time) + for game_object in list(self.game_objects): + game_object.update_object(delta_time) + + def draw_scene(self) -> None: + """Draw the scene, services, and objects. + + Returns: + None + """ + self.draw() + for _, service in self.services: + service.draw_service() + for game_object in list(self.game_objects): + game_object.draw_object() + + def on_enter(self) -> None: + """Hook called when the scene becomes active. + + Returns: + None + """ + pass + + def on_exit(self) -> None: + """Hook called when the scene is exited. + + Returns: + None + """ + pass + + def add_game_object(self, game_object: GameObject) -> GameObject: + """Add an existing object to this scene. + + Args: + game_object: The object to add. + + Returns: + The same object, after being attached to the scene. + """ + game_object.scene = self + self.game_objects.append(game_object) + return game_object + + def add_game_object_type(self, cls: Type[T], *args: Any, **kwargs: Any) -> T: + """Create and add a new object of a given type. + + Args: + cls: GameObject class to instantiate. + *args: Positional args forwarded to the constructor. + **kwargs: Keyword args forwarded to the constructor. + + Returns: + The newly created object. + """ + game_object = cls(*args, **kwargs) + self.add_game_object(game_object) + return game_object + + def add_service(self, service_or_cls: Any, *args: Any, **kwargs: Any) -> Service: + """Add a service instance or construct one from a class. + + Args: + service_or_cls: A Service instance or a Service class. + *args: Positional args forwarded to the constructor. + **kwargs: Keyword args forwarded to the constructor. + + Returns: + The service instance added. + """ + if isinstance(service_or_cls, Service): + service = service_or_cls + else: + service = service_or_cls(*args, **kwargs) + service.scene = self + key = service.__class__ + for svc_key, _ in self.services: + if svc_key == key: + print(f"Duplicate service added: {key.__name__}") + return service + self.services.append((key, service)) + return service + + def get_service(self, cls: Type[T]) -> T: + """Get a service by type. + + Args: + cls: Service class to look up. + + Returns: + The service instance. + + Raises: + RuntimeError: If no matching service exists. + """ + for svc_key, svc in self.services: + if svc_key == cls: + if not svc.is_init: + print(f"Service not initialized: {cls.__name__}") + return svc # type: ignore[return-value] + print(f"Service of requested type not found in scene: {cls.__name__}") + raise RuntimeError(f"Service not found: {cls.__name__}") + + def get_game_objects_with_tag(self, tag: str) -> List[GameObject]: + """Get all objects that contain a tag. + + Args: + tag: Tag string to match. + + Returns: + List of matching game objects. + """ + return [obj for obj in self.game_objects if obj.has_tag(tag)] + + +class Game: + """Main game class that owns managers and scenes. + + Attributes: + managers: Mapping of manager type to instance. + scenes: Mapping of scene name to instance. + scene_order: Ordered list of scene names. + current_scene: Active scene. + next_scene: Scene queued for transition. + """ + def __init__(self) -> None: + self.managers: Dict[Type[Any], Manager] = {} + self.scenes: Dict[str, Scene] = {} + self.scene_order: List[str] = [] + self.current_scene: Optional[Scene] = None + self.next_scene: Optional[Scene] = None + + def init(self) -> None: + """Initialize all managers. + + Returns: + None + """ + for manager in self.managers.values(): + manager.init_manager() + + def update(self, delta_time: float) -> None: + """Update the active scene and render it. + + Args: + delta_time: Seconds since the last frame. + + Returns: + None + """ + if self.current_scene: + self.current_scene.init_scene() + self.current_scene.update_scene(delta_time) + + rl.begin_drawing() + rl.clear_background(rl.RAYWHITE) + self.current_scene.draw_scene() + rl.end_drawing() + + if self.next_scene: + if self.current_scene: + self.current_scene.on_exit() + self.current_scene = self.next_scene + self.current_scene.on_enter() + self.next_scene = None + + def add_manager(self, manager_or_cls: Any, *args: Any, **kwargs: Any) -> Manager: + """Add a manager instance or construct one from a class. + + Args: + manager_or_cls: A Manager instance or a Manager class. + *args: Positional args forwarded to the constructor. + **kwargs: Keyword args forwarded to the constructor. + + Returns: + The manager instance added. + """ + if isinstance(manager_or_cls, Manager): + manager = manager_or_cls + else: + manager = manager_or_cls(*args, **kwargs) + key = manager.__class__ + if key in self.managers: + print(f"Duplicate manager added: {key.__name__}") + self.managers[key] = manager + return manager + + def get_manager(self, cls: Type[T]) -> T: + """Get a manager by type. + + Args: + cls: Manager class to look up. + + Returns: + The manager instance. + + Raises: + RuntimeError: If no matching manager exists. + """ + manager = self.managers.get(cls) + if manager is None: + print(f"Manager of requested type not found: {cls.__name__}") + raise RuntimeError(f"Manager not found: {cls.__name__}") + if not manager.is_init: + print(f"Manager not initialized: {cls.__name__}") + return manager # type: ignore[return-value] + + def add_scene(self, name: str, scene_or_cls: Any, *args: Any, **kwargs: Any) -> Scene: + """Add a scene instance or construct one from a class. + + Args: + name: Name to register the scene under. + scene_or_cls: A Scene instance or a Scene class. + *args: Positional args forwarded to the constructor. + **kwargs: Keyword args forwarded to the constructor. + + Returns: + The scene instance added. + """ + if isinstance(scene_or_cls, Scene): + scene = scene_or_cls + else: + scene = scene_or_cls(*args, **kwargs) + self.scenes[name] = scene + scene.game = self + self.scene_order.append(name) + if not self.current_scene: + self.current_scene = scene + return scene + + def go_to_scene(self, name: str) -> Optional[Scene]: + """Queue a transition to a named scene. + + Args: + name: Registered name of the scene. + + Returns: + The target scene if found, otherwise None. + """ + scene = self.scenes.get(name) + if not scene: + print(f"Scene not found: {name}") + return None + self.next_scene = scene + return scene + + def go_to_scene_next(self) -> Optional[Scene]: + """Queue a transition to the next scene in order. + + Returns: + The next scene if one is available, otherwise None. + """ + if not self.current_scene: + return None + current_name = None + for name, scene in self.scenes.items(): + if scene == self.current_scene: + current_name = name + break + if current_name is None: + return None + if current_name in self.scene_order: + idx = self.scene_order.index(current_name) + if idx + 1 < len(self.scene_order): + next_name = self.scene_order[idx + 1] + else: + next_name = self.scene_order[0] + self.next_scene = self.scenes[next_name] + return self.next_scene diff --git a/py/engine/math_extensions.py b/py/engine/math_extensions.py new file mode 100644 index 0000000..d2de7ca --- /dev/null +++ b/py/engine/math_extensions.py @@ -0,0 +1,49 @@ +from __future__ import annotations + +import math +from typing import Iterable +import pyray as rl + + +def v2(x: float, y: float) -> rl.Vector2: + return rl.Vector2(x, y) + + +def vec_add(a: rl.Vector2, b: rl.Vector2) -> rl.Vector2: + return rl.Vector2(a.x + b.x, a.y + b.y) + + +def vec_sub(a: rl.Vector2, b: rl.Vector2) -> rl.Vector2: + return rl.Vector2(a.x - b.x, a.y - b.y) + + +def vec_mul(a: rl.Vector2, scalar: float) -> rl.Vector2: + return rl.Vector2(a.x * scalar, a.y * scalar) + + +def vec_div(a: rl.Vector2, scalar: float) -> rl.Vector2: + return rl.Vector2(a.x / scalar, a.y / scalar) + + +def vec_neg(a: rl.Vector2) -> rl.Vector2: + return rl.Vector2(-a.x, -a.y) + + +def vec_eq(a: rl.Vector2, b: rl.Vector2) -> bool: + return a.x == b.x and a.y == b.y + + +def vec_len(a: rl.Vector2) -> float: + return math.sqrt(a.x * a.x + a.y * a.y) + + +def vec_normalize(a: rl.Vector2) -> rl.Vector2: + length = vec_len(a) + if length <= 1e-8: + return rl.Vector2(0.0, 0.0) + return rl.Vector2(a.x / length, a.y / length) + + +def vec_from_iter(values: Iterable[float]) -> rl.Vector2: + x, y = values + return rl.Vector2(float(x), float(y)) diff --git a/py/engine/physics_debug.py b/py/engine/physics_debug.py new file mode 100644 index 0000000..dcf1ace --- /dev/null +++ b/py/engine/physics_debug.py @@ -0,0 +1,94 @@ +from __future__ import annotations + +from dataclasses import dataclass +from typing import Tuple + +from Box2D import b2Color, b2Draw +import pyray as rl + + +@dataclass +class DebugDrawCtx: + meters_to_pixels: float = 30.0 + line_thickness: float = 1.0 + + +def _to_raylib_color(color: b2Color, alpha: float = 1.0) -> rl.Color: + r = int(max(0, min(255, color.r * 255))) + g = int(max(0, min(255, color.g * 255))) + b = int(max(0, min(255, color.b * 255))) + a = int(max(0, min(255, alpha * 255))) + return rl.Color(r, g, b, a) + + +class PhysicsDebugRenderer(b2Draw): + def __init__(self, meters_to_pixels: float = 30.0, line_thickness: float = 1.0) -> None: + super().__init__() + self.ctx = DebugDrawCtx(meters_to_pixels=meters_to_pixels, line_thickness=line_thickness) + + def DrawPolygon(self, vertices, color): + count = len(vertices) + if count < 2: + return + c = _to_raylib_color(color) + for i in range(count): + p0 = vertices[i] + p1 = vertices[(i + 1) % count] + a = rl.Vector2(p0[0] * self.ctx.meters_to_pixels, p0[1] * self.ctx.meters_to_pixels) + b = rl.Vector2(p1[0] * self.ctx.meters_to_pixels, p1[1] * self.ctx.meters_to_pixels) + rl.draw_line_ex(a, b, self.ctx.line_thickness, c) + + def DrawSolidPolygon(self, vertices, color): + count = len(vertices) + if count < 2: + return + fill = _to_raylib_color(color, 0.8) + line = _to_raylib_color(color, 1.0) + pts = [rl.Vector2(v[0] * self.ctx.meters_to_pixels, v[1] * self.ctx.meters_to_pixels) for v in vertices] + center = rl.Vector2(0.0, 0.0) + for p in pts: + center.x += p.x + center.y += p.y + center.x /= count + center.y /= count + for i in range(count - 1): + rl.draw_triangle(pts[i], center, pts[i + 1], fill) + rl.draw_triangle(pts[count - 1], center, pts[0], fill) + for i in range(count): + rl.draw_line_ex(pts[i], pts[(i + 1) % count], self.ctx.line_thickness, line) + + def DrawCircle(self, center, radius, color): + c = _to_raylib_color(color) + rl.draw_circle_lines(int(center[0] * self.ctx.meters_to_pixels), + int(center[1] * self.ctx.meters_to_pixels), + radius * self.ctx.meters_to_pixels, + c) + + def DrawSolidCircle(self, center, radius, axis, color): + fill = _to_raylib_color(color, 0.8) + line = _to_raylib_color(color, 1.0) + c = rl.Vector2(center[0] * self.ctx.meters_to_pixels, center[1] * self.ctx.meters_to_pixels) + rl.draw_circle_v(c, radius * self.ctx.meters_to_pixels, fill) + axis_end = rl.Vector2((center[0] + axis[0] * radius) * self.ctx.meters_to_pixels, + (center[1] + axis[1] * radius) * self.ctx.meters_to_pixels) + rl.draw_line_ex(c, axis_end, self.ctx.line_thickness, line) + + def DrawSegment(self, p1, p2, color): + c = _to_raylib_color(color) + a = rl.Vector2(p1[0] * self.ctx.meters_to_pixels, p1[1] * self.ctx.meters_to_pixels) + b = rl.Vector2(p2[0] * self.ctx.meters_to_pixels, p2[1] * self.ctx.meters_to_pixels) + rl.draw_line_ex(a, b, self.ctx.line_thickness, c) + + def DrawTransform(self, xf): + p = xf.position + x_axis = xf.R.x_axis + y_axis = xf.R.y_axis + origin = rl.Vector2(p[0] * self.ctx.meters_to_pixels, p[1] * self.ctx.meters_to_pixels) + x_end = rl.Vector2((p[0] + x_axis[0]) * self.ctx.meters_to_pixels, (p[1] + x_axis[1]) * self.ctx.meters_to_pixels) + y_end = rl.Vector2((p[0] + y_axis[0]) * self.ctx.meters_to_pixels, (p[1] + y_axis[1]) * self.ctx.meters_to_pixels) + rl.draw_line_ex(origin, x_end, self.ctx.line_thickness, rl.RED) + rl.draw_line_ex(origin, y_end, self.ctx.line_thickness, rl.GREEN) + + def DrawPoint(self, p, size, color): + c = _to_raylib_color(color) + rl.draw_circle_v(rl.Vector2(p[0] * self.ctx.meters_to_pixels, p[1] * self.ctx.meters_to_pixels), size, c) diff --git a/py/engine/prefabs/__init__.py b/py/engine/prefabs/__init__.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/py/engine/prefabs/__init__.py @@ -0,0 +1 @@ + diff --git a/py/engine/prefabs/__pycache__/__init__.cpython-313.pyc b/py/engine/prefabs/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..74ce241e18ec701e97953313ca9de7515f46e037 GIT binary patch literal 186 zcmey&%ge<81Sh*|GZ}&OV-N=hKms7}nFUBpWk_exWb|9fP{afh0*T*>)X&JzP1R4% zPfyJ&$w|#k%mcDhQuWhIGfNVSJW`ADok~jrDoZl*^Yqgbb5rB95_99TGfUzNAY!R` z>6v+{`UOR)X^Bb2`tk9Zc|gf{y@JYH95%W6DWy57c15f}n?Nop1~EP|Gcqz3F#}lu DC_pl- literal 0 HcmV?d00001 diff --git a/py/engine/prefabs/__pycache__/components.cpython-313.pyc b/py/engine/prefabs/__pycache__/components.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dccee035f3cc27356233b690805171c5c9cbb830 GIT binary patch literal 50117 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 literal 0 HcmV?d00001 diff --git a/py/engine/prefabs/__pycache__/game_objects.cpython-313.pyc b/py/engine/prefabs/__pycache__/game_objects.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c541a816b1e37b675903dcbcdafb8e2ff104a339 GIT binary patch literal 26536 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 Zo}zp7_`tQxVfvhD^2z^KU;*}~{~K%QmwW&K literal 0 HcmV?d00001 diff --git a/py/engine/prefabs/components.h b/py/engine/prefabs/components.h new file mode 100644 index 0000000..ff44f81 --- /dev/null +++ b/py/engine/prefabs/components.h @@ -0,0 +1,1392 @@ +#pragma once + +#include "engine/framework.h" +#include "engine/prefabs/managers.h" +#include "engine/prefabs/services.h" +#include "engine/raycasts.h" + +/** + * For when you want a GameObject to have multiple of the same component. + */ +template +class MultiComponent : public Component +{ +public: + std::unordered_map> components; + + MultiComponent() {} + + /** + * Initialize all components. + */ + void init() override + { + for (auto& component : components) + { + component.second->init(); + } + } + + /** + * Update all components. + * + * @param delta_time The time elapsed since the last frame. + */ + void update(float delta_time) override + { + for (auto& component : components) + { + component.second->update(delta_time); + } + } + + /** + * Draw all components. + */ + void draw() override + { + for (auto& component : components) + { + component.second->draw(); + } + } + + /** + * Add a component to the MultiComponent. + * + * @param name The name to give the component. + * @param component The component to add. + */ + void add_component(std::string name, std::unique_ptr component) + { + static_assert(std::is_base_of::value, "T must derive from Component"); + components[name] = std::move(component); + components[name]->owner = owner; + } + + /** + * Create a component and add it to the MultiComponent. + * + * @param name The name to give the component. + * @param args The arguments to forward to the component constructor. + * @return A pointer to the added component. + */ + template + T* add_component(std::string name, TArgs&&... args) + { + static_assert(std::is_base_of::value, "T must derive from Component"); + auto new_component = std::make_unique(std::forward(args)...); + T* component_ptr = new_component.get(); + add_component(name, std::move(new_component)); + return component_ptr; + } + + /** + * Get a component by name. + * + * @param name The name of the component. + * @return A pointer to the component. + */ + T* get_component(std::string name) + { + return components[name].get(); + } +}; + +/** + * A component for rendering text. + * Depends on FontManager. + */ +class TextComponent : public Component +{ +public: + FontManager* font_manager; + std::string text; + std::string font_name; + int font_size = 20; + Color color = WHITE; + Vector2 position = {0, 0}; + float rotation = 0.0f; + + /** + * Constructor for TextComponent. + * + * @param text The text to display. + * @param font_name The name of the font to use. + * @param font_size The size of the font. + * @param color The color of the text. + */ + TextComponent(std::string text, std::string font_name = "default", int font_size = 20, Color color = WHITE) : + text(text), + font_name(font_name), + font_size(font_size), + color(color) + { + } + + /** + * Initialize the text component. + */ + void init() override + { + font_manager = owner->scene->game->get_manager(); + } + + /** + * Draw the text. + */ + void draw() override + { + DrawTextEx(font_manager->get_font(font_name), + text.c_str(), + position, + static_cast(font_size), + 1.0f, + color); + } + + /** + * Set the text to display. + * + * @param text The text to display. + */ + void set_text(const std::string& text) + { + this->text = text; + } + + /** + * Set the color of the text. + * + * @param color The color to set. + */ + void set_color(Color color) + { + this->color = color; + } + + /** + * Set the font size. + * + * @param font_size The font size to set. + */ + void set_font_size(int font_size) + { + this->font_size = font_size; + } + + /** + * Set the font by name. + * + * @param font_name The name of the font to set. + */ + void set_font(const std::string& font_name) + { + this->font_name = font_name; + } + + /** + * Set the position of the text. + * + * @param position The position to set. + */ + void set_position(Vector2 position) + { + this->position = position; + } + + /** + * Set the rotation of the text. + * + * @param rotation The rotation to set. + */ + void set_rotation(float rotation) + { + this->rotation = rotation; + } +}; + +/** + * A component for playing sounds. + * Depends on SoundService. + */ +class SoundComponent : public Component +{ +public: + std::string filename; + Sound sound; + float volume = 1.0f; + float pitch = 1.0f; + float pan = 0.5f; + + /** + * Constructor for SoundComponent. + * + * @param filename The filename of the sound to load. + * @param volume The initial volume of the sound. + * @param pitch The initial pitch of the sound. + */ + SoundComponent(std::string filename, float volume = 1.0f, float pitch = 1.0f, float pan = 0.5f) : + filename(filename), + volume(volume), + pitch(pitch), + pan(pan) + { + } + + /** + * Initialize the sound component. + */ + void init() override + { + auto sound_service = owner->scene->get_service(); + sound = sound_service->get_sound(filename); + } + + /** + * Play the sound. + */ + void play() + { + PlaySound(sound); + } + + /** + * Stop the sound. + */ + void stop() + { + StopSound(sound); + } + + /** + * Set the volume of the sound. + * + * @param volume The volume to set. + */ + void set_volume(float volume) + { + this->volume = volume; + SetSoundVolume(sound, volume); + } + + /** + * Set the pitch of the sound. + * + * @param pitch The pitch to set. + */ + void set_pitch(float pitch) + { + this->pitch = pitch; + SetSoundPitch(sound, pitch); + } + + /** + * Set the pan of the sound. + * + * @param pan The pan to set, between 0.0 (left) and 1.0 (right). + */ + void set_pan(float pan) + { + this->pan = pan; + SetSoundPan(sound, pan); + } + + /** + * Check if the sound is currently playing. + * + * @return True if the sound is playing, false otherwise. + */ + bool is_playing() + { + return IsSoundPlaying(sound); + } +}; + +/** + * A component for a Box2D physics body. + * Depends on PhysicsService. + */ +class BodyComponent : public Component +{ +public: + b2BodyId id = b2_nullBodyId; + std::function build; + PhysicsService* physics; + + BodyComponent() {} + + /** + * Constructor for BodyComponent with existing body ID. + * + * @param id The Box2D body ID. + */ + BodyComponent(b2BodyId id) : id(id) {} + + /** + * Specify a lambda for creating the physics body which will be called during init. + * It is the user's responsibility to assign the body id to id in this function. + * + * @param build A user provided function for creating a physics body. + */ + BodyComponent(std::function build = {}) : build(std::move(build)) {} + + ~BodyComponent() + { + if (b2Body_IsValid(id)) + { + b2DestroyBody(id); + } + } + + /** + * Initialize the body component. + */ + void init() override + { + physics = owner->scene->get_service(); + if (build) + { + build(*this); + } + } + + /** + * Enable the body in the physics simulation. + */ + void enable() + { + b2Body_Enable(id); + } + + /** + * Disable the body in the physics simulation. + */ + void disable() + { + b2Body_Disable(id); + } + + /** + * Get the position of the body in meters. + */ + b2Vec2 get_position_meters() const + { + return b2Body_GetPosition(id); + } + + /** + * Get the position of the body in pixels. + */ + Vector2 get_position_pixels() const + { + return physics->convert_to_pixels(get_position_meters()); + } + + /** + * Set the position of the body in meters. + * + * @param meters The position in meters. + */ + void set_position(b2Vec2 meters) + { + b2Rot rotation = b2Body_GetRotation(id); + b2Body_SetTransform(id, meters, rotation); + } + + /** + * Set the position of the body in pixels. + * + * @param pixels The position in pixels. + */ + void set_position(Vector2 pixels) + { + set_position(physics->convert_to_meters(pixels)); + } + + /** + * Set the rotation of the body in degrees. + * + * @param degrees The rotation in degrees. + */ + void set_rotation(float degrees) + { + b2Vec2 position = b2Body_GetPosition(id); + b2Rot rotation = b2MakeRot(degrees * DEG2RAD); + b2Body_SetTransform(id, position, rotation); + } + + /** + * Get the velocity of the body in meters per second. + * + * @return The velocity in meters per second. + */ + b2Vec2 get_velocity_meters() const + { + return b2Body_GetLinearVelocity(id); + } + + /** + * Get the velocity of the body in pixels per second. + * + * @return The velocity in pixels per second. + */ + Vector2 get_velocity_pixels() const + { + return physics->convert_to_pixels(get_velocity_meters()); + } + + /** + * Set the velocity of the body in meters per second. + * + * @param meters_per_second The velocity in meters per second. + */ + void set_velocity(b2Vec2 meters_per_second) + { + b2Body_SetLinearVelocity(id, meters_per_second); + } + + /** + * Set the velocity of the body in pixels per second. + * + * @param pixels_per_second The velocity in pixels per second. + */ + void set_velocity(Vector2 pixels_per_second) + { + set_velocity(physics->convert_to_meters(pixels_per_second)); + } + + /** + * Get the rotation of the body in degrees. + * + * @return The rotation in degrees. + */ + float get_rotation() const + { + auto rot = b2Body_GetRotation(id); + return b2Rot_GetAngle(rot) * RAD2DEG; + } + + /** + * Get a list of all bodies colliding with this one. + * https://box2d.org/documentation/md_simulation.html#autotoc_md94 + * + * @return A list of b2BodyIds that are touching this one. Combine with User Data to get your objects. + */ + std::vector get_contacts() + { + // Choose 10 as an arbitrary max number of contacts on the body. + constexpr int capacity = 10; + b2ContactData contact_data[capacity]; + + int count = b2Body_GetContactData(id, contact_data, capacity); + std::vector contacts; + for (int i = 0; i < count; i++) + { + auto contact = contact_data[i]; + auto body_a = b2Shape_GetBody(contact.shapeIdA); + auto body_b = b2Shape_GetBody(contact.shapeIdB); + auto body = body_a == id ? body_b : body_a; + contacts.push_back(body); + } + + // Remove duplicate bodies. + std::sort(contacts.begin(), contacts.end()); + contacts.erase(std::unique(contacts.begin(), contacts.end()), contacts.end()); + return contacts; + } + + /** + * Get a list of all bodies overlapping with sensors in this body. + * The shape definitions must have isSensor and enableSensorEvents set. + * https://box2d.org/documentation/md_simulation.html#autotoc_md81 + * + * @return A list of b2BodyIds that are overlapping the sensor shapes in this body. Combine with User Data to get + * your objects. + */ + std::vector get_sensor_overlaps() + { + // Choose 10 as an arbitrary max number of shapes on the body. + constexpr int shape_capacity = 10; + b2ShapeId shapes[shape_capacity]; + int shape_count = b2Body_GetShapes(id, shapes, shape_capacity); + + std::vector contacts; + for (int i = 0; i < shape_count; i++) + { + auto shape = shapes[i]; + if (b2Shape_IsSensor(shape)) + { + // Choose 10 as an arbitrary max number of contacts on the sensor shape. + constexpr int shape_capacity = 10; + b2ShapeId shapes[shape_capacity]; + int shape_count = b2Shape_GetSensorOverlaps(shape, shapes, shape_capacity); + + for (int j = 0; j < shape_count; j++) + { + auto shape = shapes[j]; + auto body = b2Shape_GetBody(shape); + // Check if body is already in contacts to avoid duplicates. + if (std::find(contacts.begin(), contacts.end(), body) == contacts.end()) + { + contacts.push_back(body); + } + } + } + } + + // Remove duplicate bodies. + std::sort(contacts.begin(), contacts.end()); + contacts.erase(std::unique(contacts.begin(), contacts.end()), contacts.end()); + return contacts; + } +}; + +/** + * A component for rendering a sprite. + * Depends on TextureService. + */ +class SpriteComponent : public Component +{ +public: + std::string filename; + BodyComponent* body = nullptr; + + Texture2D sprite; + Vector2 position = {0, 0}; + float rotation = 0.0f; + float scale = 1.0f; + Color tint = WHITE; + bool is_active = true; + + /** + * Constructor for SpriteComponent. + * + * @param filename The filename of the texture to load. + */ + SpriteComponent(std::string filename) : filename(filename) {} + + /** + * Constructor for SpriteComponent with optional BodyComponent to follow. + * + * @param body The BodyComponent to follow for position and rotation. + * @param filename The filename of the texture to load. + */ + SpriteComponent(std::string filename, BodyComponent* body) : filename(filename), body(body) {} + + /** + * Initialize the sprite component. + */ + void init() override + { + auto texture_service = owner->scene->get_service(); + sprite = texture_service->get_texture(filename); + } + + /** + * Draw the sprite. + */ + void draw() override + { + if (!is_active) + { + return; + } + + if (body) + { + position = body->get_position_pixels(); + rotation = body->get_rotation(); + } + + Rectangle source = {0, 0, (float)sprite.width, (float)sprite.height}; + Rectangle dest = {position.x, position.y, (float)sprite.width * scale, (float)sprite.height * scale}; + Vector2 origin = {sprite.width / 2.0f * scale, sprite.height / 2.0f * scale}; + + DrawTexturePro(sprite, source, dest, origin, rotation, tint); + } + + /** + * Set the position of the sprite. + * + * @param position The position to set. + */ + void set_position(Vector2 position) + { + this->position = position; + } + + /** + * Set the rotation of the sprite. + * + * @param rotation The rotation to set in degrees. + */ + void set_rotation(float rotation) + { + this->rotation = rotation; + } + + /** + * Set the scale of the sprite. + * + * @param scale The scale to set. + */ + void set_scale(float scale) + { + this->scale = scale; + } + + /** + * Set the tint color of the sprite. + * + * @param tint The tint color to set. + */ + void set_tint(Color tint) + { + this->tint = tint; + } + + /** + * Set whether the sprite is active or not. + * The sprite will not be drawn if inactive. + * + * @param active True to make the sprite active, false to deactivate it. + */ + void set_active(bool active) + { + is_active = active; + } +}; + +/** + * A class for handling frame-based animations. + * Depends on TextureService. + */ +class Animation +{ +public: + std::vector frames; + float fps = 15.0f; + float frame_timer = 0.0f; + bool loop = true; + + int current_frame = 0; + bool playing = true; + bool is_active = true; + + /** + * Constructor for Animation. + * + * @param frames The frames of the animation as Texture2D objects. + * @param fps The frames per second of the animation. + * @param loop Whether the animation should loop or not. + */ + Animation(const std::vector& frames, float fps = 15.0f, bool loop = true) : + frames(frames), + fps(fps), + frame_timer(1.0f / fps), + loop(loop) + { + } + + /** + * Constructor for Animation that loads frames from filenames. + * + * @param texture_service The TextureService to load textures from. + * @param filenames The filenames of the frames of the animation. + * @param fps The frames per second of the animation. + * @param loop Whether the animation should loop or not. + */ + Animation(TextureService* texture_service, + const std::vector& filenames, + float fps = 15.0f, + bool loop = true) : + fps(fps), + frame_timer(1.0f / fps), + loop(loop) + { + for (const auto& filename : filenames) + { + frames.push_back(texture_service->get_texture(filename)); + } + } + + /** + * Update the animation. + * + * @param delta_time The time elapsed since the last frame. + */ + void update(float delta_time) + { + if (frames.empty()) + { + return; + } + if (!playing || !is_active) + { + return; + } + + frame_timer -= delta_time; + if (frame_timer <= 0.0f) + { + frame_timer = 1.0f / fps; + current_frame++; + } + + if (current_frame > frames.size() - 1) + { + if (loop) + current_frame = 0; + else + { + current_frame = (int)frames.size() - 1; + } + } + } + + /** + * Draw the animation. + * + * @param position The position to draw the animation at. + * @param rotation The rotation of the animation in degrees. + * @param tint The tint color to apply to the animation. + */ + void draw(Vector2 position, float rotation = 0.0f, Color tint = WHITE) + { + if (!is_active) + { + return; + } + + auto sprite = frames[current_frame]; + DrawTexturePro(sprite, + {0.0f, 0.0f, static_cast(sprite.width), static_cast(sprite.height)}, + {position.x, position.y, static_cast(sprite.width), static_cast(sprite.height)}, + {static_cast(sprite.width) / 2.0f, static_cast(sprite.height) / 2.0f}, + rotation, + tint); + } + + /** + * Draw the animation with a specific origin. + * + * @param position The position to draw the animation at. + * @param origin The origin point for rotation and scaling. + * @param rotation The rotation of the animation in degrees. + * @param scale The scale of the animation. + * @param flip_x Whether to flip the animation horizontally. + * @param flip_y Whether to flip the animation vertically. + * @param tint The tint color to apply to the animation. + */ + void draw(Vector2 position, + Vector2 origin, + float rotation = 0.0f, + float scale = 1.0f, + bool flip_x = false, + bool flip_y = false, + Color tint = WHITE) + { + if (!is_active) + { + return; + } + + auto sprite = frames[current_frame]; + DrawTexturePro(sprite, + {0.0f, + 0.0f, + static_cast(sprite.width) * (flip_x ? -1.0f : 1.0f), + static_cast(sprite.height) * (flip_y ? -1.0f : 1.0f)}, + {position.x, + position.y, + static_cast(sprite.width) * scale, + static_cast(sprite.height) * scale}, + origin * scale, + rotation, + tint); + } + + /** + * Play the animation. + */ + void play() + { + playing = true; + } + + /** + * Pause the animation. + */ + void pause() + { + playing = false; + } + + /** + * Stop the animation and reset to the first frame. + */ + void stop() + { + playing = false; + frame_timer = 1.0f / fps; + current_frame = 0; + } +}; + +/** + * A component for controlling animations. + * Depends on TextureService. + */ +class AnimationController : public Component +{ +public: + std::unordered_map> animations; + Animation* current_animation = nullptr; + Vector2 position = {0.0f, 0.0f}; + float rotation = 0.0f; + Vector2 origin = {0.0f, 0.0f}; + float scale = 1.0f; + bool flip_x = false; + bool flip_y = false; + BodyComponent* body = nullptr; + + AnimationController() = default; + + /** + * Constructor for AnimationController that follows a BodyComponent. + * + * @param body The BodyComponent to follow for position and rotation. + */ + AnimationController(BodyComponent* body) : body(body) {} + + /** + * Update the animation controller. + * + * @param delta_time The time elapsed since the last frame. + */ + void update(float delta_time) override + { + if (current_animation) + { + current_animation->update(delta_time); + } + } + + /** + * Draw the current animation. + */ + void draw() override + { + if (body) + { + position = body->get_position_pixels(); + rotation = body->get_rotation(); + } + + if (current_animation) + { + current_animation->draw(position, origin, rotation, scale, flip_x, flip_y); + } + } + + /** + * Add an existing animation to the controller. + * + * @param name The name to give the animation. + * @param animation The animation to add. + */ + void add_animation(const std::string& name, std::unique_ptr animation) + { + animations[name] = std::move(animation); + if (!current_animation) + { + current_animation = animations[name].get(); + auto sprite = current_animation->frames[current_animation->current_frame]; + origin = {sprite.width / 2.0f, sprite.height / 2.0f}; + } + } + + /** + * Create an animation and add it to the controller. + * + * @param name The name to give the animation. + * @param args The arguments to forward to the Animation constructor. + * @return A pointer to the added animation. + */ + template + Animation* add_animation(const std::string& name, TArgs&&... args) + { + auto texture_service = owner->scene->get_service(); + auto new_animation = std::make_unique(texture_service, std::forward(args)...); + Animation* animation_ptr = new_animation.get(); + add_animation(name, std::move(new_animation)); + return animation_ptr; + } + + /** + * Get an animation by name. + * + * @param name The name of the animation. + * @return A pointer to the animation. + */ + Animation* get_animation(const std::string& name) + { + return animations[name].get(); + } + + /** + * Play the current animation. + */ + void play() + { + if (current_animation) + { + current_animation->play(); + } + } + + /** + * Play an animation by name. + * + * @param name The name of the animation to play. + */ + void play(const std::string& name) + { + auto it = animations.find(name); + if (it != animations.end()) + { + current_animation = it->second.get(); + current_animation->play(); + auto sprite = current_animation->frames[current_animation->current_frame]; + } + } + + /** + * Pause the current animation. + */ + void pause() + { + if (current_animation) + { + current_animation->pause(); + } + } + + /** + * Set whether the current animation is playing or paused. + * + * @param play True to play the animation, false to pause it. + */ + void set_play(bool play) + { + if (current_animation) + { + if (play) + { + current_animation->play(); + } + else + { + current_animation->pause(); + } + } + } + + /** + * Stop the current animation. + */ + void stop() + { + if (current_animation) + { + current_animation->stop(); + } + } + + /** + * Set the position of the animation. + * + * @param pos The position to set. + */ + void set_position(Vector2 pos) + { + position = pos; + } + + /** + * Set the rotation of the animation. + * + * @param rot The rotation to set in degrees. + */ + void set_rotation(float rot) + { + rotation = rot; + } + + /** + * Set the origin of the animation. + * + * @param orig The origin to set. + */ + void set_origin(Vector2 orig) + { + origin = orig; + } + + /** + * Set the scale of the animation. + * + * @param s The scale to set. + */ + void set_scale(float s) + { + scale = s; + } + + /** + * Set whether to flip the animation horizontally. + * + * @param fx True to flip horizontally, false otherwise. + */ + void set_flip_x(bool fx) + { + flip_x = fx; + } + + /** + * Set whether to flip the animation vertically. + * + * @param fy True to flip vertically, false otherwise. + */ + void set_flip_y(bool fy) + { + flip_y = fy; + } +}; + +/** + * Parameters for PlatformerMovementComponent. + */ +struct PlatformerMovementParams +{ + float width = 24.0f; // pixels + float height = 40.0f; // pixels + + // Movement + float max_speed = 220.0f; // pixels / second + float accel = 2000.0f; // pixels / second / second + float decel = 2500.0f; // pixels / second / second + + // Gravity / jump + float gravity = 1400.0f; // pixels / second / second + float jump_speed = 520.0f; // pixels / second + float fall_speed = 1200.0f; // pixels / second + float jump_cutoff_multiplier = 0.45f; // jump multiplier when the jump button is released early + + // Forgiveness + float coyote_time = 0.08f; // seconds + float jump_buffer = 0.10f; // seconds +}; + +/** + * A component for 2D platformer movement. + * Depends on PhysicsService and BodyComponent. + */ +class PlatformerMovementComponent : public Component +{ +public: + PlatformerMovementParams p; + PhysicsService* physics; + BodyComponent* body; + + bool grounded = false; + bool on_wall_left = false; + bool on_wall_right = false; + float coyote_timer = 0.0f; + float jump_buffer_timer = 0.0f; + + float move_x = 0; + bool jump_pressed = false; + bool jump_held = false; + + /** + * Constructor for PlatformerMovementComponent. + * + * @param p The movement parameters. + */ + PlatformerMovementComponent(PlatformerMovementParams p) : p(p) {} + + /** + * Initialize the movement component. + */ + void init() override + { + physics = owner->scene->get_service(); + body = owner->get_component(); + } + + /** + * Update the movement component. + * + * @param delta_time The time elapsed since the last frame. + */ + void update(float delta_time) override + { + if (!b2Body_IsValid(body->id)) + { + return; + } + + coyote_timer = std::max(0.0f, coyote_timer - delta_time); + jump_buffer_timer = std::max(0.0f, jump_buffer_timer - delta_time); + + if (jump_pressed) + { + jump_buffer_timer = p.jump_buffer; + } + + // Grounded check + grounded = false; + on_wall_left = false; + on_wall_right = false; + + // Convert probe distances to meters + float ray_length = physics->convert_to_meters(4.0f); + + float half_width = physics->convert_to_meters(p.width) / 2.0f; + float half_height = physics->convert_to_meters(p.height) / 2.0f; + + // Ground: cast down from two points near the feet (left/right) + auto pos = body->get_position_meters(); + b2Vec2 ground_left_start = {pos.x - half_width, pos.y + half_height}; + b2Vec2 ground_right_start = {pos.x + half_width, pos.y + half_height}; + b2Vec2 ground_translation = {0, ray_length}; + const b2WorldId world = physics->world; + + RayHit left_ground_hit = raycast_closest(world, body->id, ground_left_start, ground_translation); + RayHit right_ground_hit = raycast_closest(world, body->id, ground_right_start, ground_translation); + grounded = left_ground_hit.hit || right_ground_hit.hit; + + // Walls: cast left/right at mid-body height + b2Vec2 mid = {pos.x, pos.y}; + b2Vec2 wall_left_start = {pos.x - half_width, mid.y}; + b2Vec2 wall_left_translation = {-ray_length, 0}; + b2Vec2 wall_right_start = {pos.x + half_width, mid.y}; + b2Vec2 wall_right_translation = {ray_length, 0}; + + RayHit left_wall_hit = raycast_closest(world, body->id, wall_left_start, wall_left_translation); + RayHit right_wall_hit = raycast_closest(world, body->id, wall_right_start, wall_right_translation); + + on_wall_left = left_wall_hit.hit; + on_wall_right = right_wall_hit.hit; + if (grounded) + { + coyote_timer = p.coyote_time; + } + + float target_vx = move_x * p.max_speed; + + auto v = body->get_velocity_pixels(); + + if (std::fabs(target_vx) > 0.001f) + { + float a = p.accel; + v.x = move_towards(v.x, target_vx, a * delta_time); + } + else + { + float a = p.decel; + v.x = move_towards(v.x, 0.0f, a * delta_time); + } + + // Gravity (custom) + v.y += p.gravity * delta_time; + v.y = std::max(-p.fall_speed, std::min(p.fall_speed, v.y)); + + // Jump + const bool can_jump = (grounded || coyote_timer > 0.0f); + if (jump_buffer_timer > 0.0f && can_jump) + { + v.y = -p.jump_speed; + jump_buffer_timer = 0.0f; + coyote_timer = 0.0f; + grounded = false; + } + + // Variable jump height: cut upward velocity when jump released + if (!jump_held && v.y < 0.0f) + { + v.y *= p.jump_cutoff_multiplier; + } + + // Write velocity back + body->set_velocity(v); + } + + /** + * Calculates a value moved towards a target by a maximum delta. + * + * @param current The current value. + * @param target The target value. + * @param max_delta The maximum change that can be applied. + * @return The new value after moving towards the target. + */ + static float move_towards(float current, float target, float max_delta) + { + float delta = target - current; + if (std::fabs(delta) <= max_delta) + return target; + return current + (delta > 0 ? max_delta : -max_delta); + } + + /** + * Set the input for movement. + * + * @param horizontal_speed The horizontal speed input (-1.0 to 1.0). + * @param jump_pressed Whether the jump button was pressed this frame. + * @param jump_held Whether the jump button is currently held down. + */ + void set_input(float horizontal_speed, bool jump_pressed, bool jump_held) + { + move_x = horizontal_speed; + this->jump_pressed = jump_pressed; + this->jump_held = jump_held; + } +}; + +struct TopDownMovementParams +{ + float max_speed = 300.0f; // max speed in px/s + float accel = 1200.0f; // accel when holding input + float friction = 1200.0f; // decel when no input + float deadzone = 0.1f; // input deadzone +}; + +/** + * A component for 2D top-down movement. + * Depends on PhysicsService and BodyComponent. + * + * Movement is controlled by setting a 2D input vector (move_x, move_y), + * and this component accelerates/decelerates the body towards a target + * velocity using simple acceleration + friction. + */ +class TopDownMovementComponent : public Component +{ +public: + TopDownMovementParams p; + PhysicsService* physics = nullptr; + BodyComponent* body = nullptr; + + // Raw input in [-1, 1] range for each axis. + float move_x = 0.0f; + float move_y = 0.0f; + + // Store last facing direction for aiming/animation. + float facing_dir = 0.0f; + + TopDownMovementComponent(TopDownMovementParams p) : p(p) {} + + void init() override + { + physics = owner->scene->get_service(); + body = owner->get_component(); + } + + void update(float delta_time) override + { + if (!b2Body_IsValid(body->id)) + { + return; + } + + // Current velocity in pixels/sec (assuming your BodyComponent uses this). + Vector2 v = body->get_velocity_pixels(); + + // Build desired movement input vector. + Vector2 input = {move_x, move_y}; + float input_len_sq = input.x * input.x + input.y * input.y; + + Vector2 desired_vel = {0.0f, 0.0f}; + + // Deadzone. + if (input_len_sq > p.deadzone * p.deadzone) + { + desired_vel.x = input.x * p.max_speed; + desired_vel.y = input.y * p.max_speed; + + // Update facing direction. + facing_dir = atan2f(input.y, input.x) * RAD2DEG; + + // Accelerate towards desired velocity. + v = move_towards_vec(v, desired_vel, p.accel * delta_time); + } + else + { + // No input: apply friction to slow down. + v = apply_friction(v, p.friction * delta_time); + } + + // Clamp to max speed just in case. + float speed_sq = v.x * v.x + v.y * v.y; + float max_speed_sq = p.max_speed * p.max_speed; + if (speed_sq > max_speed_sq) + { + float speed = std::sqrt(speed_sq); + float scale = p.max_speed / speed; + v.x *= scale; + v.y *= scale; + } + + body->set_velocity(v); + } + + /** + * Move a velocity vector towards a target vector by at most max_delta length. + */ + static Vector2 move_towards_vec(const Vector2& current, const Vector2& target, float max_delta) + { + Vector2 delta = {target.x - current.x, target.y - current.y}; + float len = std::sqrt(delta.x * delta.x + delta.y * delta.y); + if (len <= max_delta || len < 1e-5f) + { + return target; + } + float scale = max_delta / len; + return Vector2{current.x + delta.x * scale, current.y + delta.y * scale}; + } + + /** + * Apply friction to a velocity vector (reduce its magnitude). + * `friction_delta` is how much speed we remove this frame. + */ + static Vector2 apply_friction(const Vector2& v, float friction_delta) + { + float speed = std::sqrt(v.x * v.x + v.y * v.y); + if (speed < 1e-5f) + { + return Vector2{0.0f, 0.0f}; + } + + float new_speed = speed - friction_delta; + if (new_speed <= 0.0f) + { + return Vector2{0.0f, 0.0f}; + } + + float scale = new_speed / speed; + return Vector2{v.x * scale, v.y * scale}; + } + + /** + * Set the input for movement. + * + * @param horizontal Horizontal input (-1.0 to 1.0). + * @param vertical Vertical input (-1.0 to 1.0). + */ + void set_input(float horizontal, float vertical) + { + move_x = horizontal; + move_y = vertical; + } +}; diff --git a/py/engine/prefabs/components.py b/py/engine/prefabs/components.py new file mode 100644 index 0000000..e9db4ba --- /dev/null +++ b/py/engine/prefabs/components.py @@ -0,0 +1,1214 @@ +from __future__ import annotations + +import math +from typing import Any, Dict, List, Optional + +from Box2D import (b2Body, b2CircleShape, b2FixtureDef, b2PolygonShape, + b2Vec2) +import pyray as rl + +from engine.framework import Component +from engine.math_extensions import vec_add, vec_div, vec_len, vec_mul, vec_normalize, vec_sub, v2 +from engine.raycasts import raycast_closest +from engine.prefabs.managers import FontManager +from engine.prefabs.services import PhysicsService, SoundService, TextureService + + +class MultiComponent(Component): + """Container component that allows multiple components of the same type.""" + def __init__(self) -> None: + """ init . + + Returns: + None + """ + super().__init__() + self.components: Dict[str, Component] = {} + + def init(self) -> None: + """Initialize all contained components. + + Returns: + None + """ + for component in self.components.values(): + component.init() + + def update(self, delta_time: float) -> None: + """Update all contained components. + + Args: + delta_time: Seconds since the last frame. + + Returns: + None + """ + for component in self.components.values(): + component.update(delta_time) + + def draw(self) -> None: + """Draw all contained components. + + Returns: + None + """ + for component in self.components.values(): + component.draw() + + def add_component(self, name: str, component_or_cls: Any, *args: Any, **kwargs: Any) -> Component: + """Add a component under a name. + + Args: + name: Component name key. + component_or_cls: Component instance or class. + *args: Positional args forwarded to constructor. + **kwargs: Keyword args forwarded to constructor. + + Returns: + The component instance added. + """ + if isinstance(component_or_cls, Component): + component = component_or_cls + else: + component = component_or_cls(*args, **kwargs) + component.owner = self.owner + self.components[name] = component + return component + + def get_component(self, name: str) -> Optional[Component]: + """Get a component by name. + + Args: + name: Component name key. + + Returns: + The component if present, otherwise None. + """ + return self.components.get(name) + + +class TextComponent(Component): + """Component for rendering text. Depends on FontManager.""" + def __init__(self, text: str, font_name: str = "default", font_size: int = 20, color: rl.Color = rl.WHITE) -> None: + """ init . + + Args: + text: Parameter. + font_name: Parameter. + font_size: Parameter. + color: Parameter. + + Returns: + None + """ + super().__init__() + self.font_manager: Optional[FontManager] = None + self.text = text + self.font_name = font_name + self.font_size = font_size + self.color = color + self.position = v2(0.0, 0.0) + self.rotation = 0.0 + + def init(self) -> None: + """Resolve FontManager from the owning scene. + + Returns: + None + """ + if self.owner and self.owner.scene and self.owner.scene.game: + self.font_manager = self.owner.scene.game.get_manager(FontManager) + + def draw(self) -> None: + """Draw the text if a font is available. + + Returns: + None + """ + if not self.font_manager: + return + rl.draw_text_ex(self.font_manager.get_font(self.font_name), + self.text, + self.position, + float(self.font_size), + 1.0, + self.color) + + def set_text(self, text: str) -> None: + """Set the displayed text. + + Args: + text: New text string. + + Returns: + None + """ + self.text = text + + def set_color(self, color: rl.Color) -> None: + """Set the text color. + + Args: + color: Raylib color. + + Returns: + None + """ + self.color = color + + def set_font_size(self, font_size: int) -> None: + """Set the font size. + + Args: + font_size: New font size. + + Returns: + None + """ + self.font_size = font_size + + def set_font(self, font_name: str) -> None: + """Set the font by name. + + Args: + font_name: Registered font name. + + Returns: + None + """ + self.font_name = font_name + + def set_position(self, position: rl.Vector2) -> None: + """Set the text position. + + Args: + position: Vector2 in pixels. + + Returns: + None + """ + self.position = position + + def set_rotation(self, rotation: float) -> None: + """Set the text rotation. + + Args: + rotation: Rotation in degrees. + + Returns: + None + """ + self.rotation = rotation + + +class SoundComponent(Component): + """Component for playing sounds. Depends on SoundService.""" + def __init__(self, filename: str, volume: float = 1.0, pitch: float = 1.0, pan: float = 0.5) -> None: + """ init . + + Args: + filename: Parameter. + volume: Parameter. + pitch: Parameter. + pan: Parameter. + + Returns: + None + """ + super().__init__() + self.filename = filename + self.sound = None + self.volume = volume + self.pitch = pitch + self.pan = pan + + def init(self) -> None: + """Load the sound from SoundService. + + Returns: + None + """ + if self.owner and self.owner.scene: + sound_service = self.owner.scene.get_service(SoundService) + self.sound = sound_service.get_sound(self.filename) + + def play(self) -> None: + """Play the sound. + + Returns: + None + """ + if self.sound: + rl.play_sound(self.sound) + + def stop(self) -> None: + """Stop the sound. + + Returns: + None + """ + if self.sound: + rl.stop_sound(self.sound) + + def set_volume(self, volume: float) -> None: + """Set playback volume. + + Args: + volume: Volume scalar. + + Returns: + None + """ + self.volume = volume + if self.sound: + rl.set_sound_volume(self.sound, volume) + + def set_pitch(self, pitch: float) -> None: + """Set playback pitch. + + Args: + pitch: Pitch scalar. + + Returns: + None + """ + self.pitch = pitch + if self.sound: + rl.set_sound_pitch(self.sound, pitch) + + def set_pan(self, pan: float) -> None: + """Set playback pan. + + Args: + pan: Pan value from 0.0 (left) to 1.0 (right). + + Returns: + None + """ + self.pan = pan + if self.sound: + rl.set_sound_pan(self.sound, pan) + + def is_playing(self) -> bool: + """Check if the sound is currently playing. + + Returns: + True if playing, otherwise False. + """ + return bool(self.sound and rl.is_sound_playing(self.sound)) + + +class BodyComponent(Component): + """Component that owns a Box2D body. Depends on PhysicsService.""" + def __init__(self, body: Optional[b2Body] = None, build: Optional[Any] = None) -> None: + """ init . + + Args: + body: Parameter. + build: Parameter. + + Returns: + None + """ + super().__init__() + self.body = body + self.build = build + self.physics: Optional[PhysicsService] = None + + def init(self) -> None: + """Resolve PhysicsService and build the body if provided. + + Returns: + None + """ + if not self.owner or not self.owner.scene: + return + self.physics = self.owner.scene.get_service(PhysicsService) + if self.build: + self.build(self) + + def enable(self) -> None: + """Enable the body in the physics simulation. + + Returns: + None + """ + if self.body: + self.body.awake = True + self.body.active = True + + def disable(self) -> None: + """Disable the body in the physics simulation. + + Returns: + None + """ + if self.body: + self.body.active = False + + def get_position_meters(self) -> b2Vec2: + """Get position in meters. + + Returns: + b2Vec2 position in meters. + """ + return self.body.position if self.body else b2Vec2(0.0, 0.0) + + def get_position_pixels(self) -> rl.Vector2: + """Get position in pixels. + + Returns: + Vector2 position in pixels. + """ + if not self.physics or not self.body: + return v2(0.0, 0.0) + pos = self.physics.convert_to_pixels(self.body.position) + return v2(pos.x, pos.y) + + def set_position(self, pos) -> None: + """Set position (meters if b2Vec2, else pixels). + + Args: + pos: b2Vec2 in meters or Vector2 in pixels. + + Returns: + None + """ + if not self.body: + return + if isinstance(pos, b2Vec2): + self.body.position = pos + else: + if not self.physics: + return + self.body.position = self.physics.convert_to_meters(pos) + + def set_rotation(self, degrees: float) -> None: + """Set rotation in degrees. + + Args: + degrees: Rotation in degrees. + + Returns: + None + """ + if self.body: + self.body.angle = math.radians(degrees) + + def get_velocity_meters(self) -> b2Vec2: + """Get linear velocity in meters/sec. + + Returns: + b2Vec2 velocity in meters/sec. + """ + return self.body.linearVelocity if self.body else b2Vec2(0.0, 0.0) + + def get_velocity_pixels(self) -> rl.Vector2: + """Get linear velocity in pixels/sec. + + Returns: + Vector2 velocity in pixels/sec. + """ + if not self.physics or not self.body: + return v2(0.0, 0.0) + vel = self.physics.convert_to_pixels(self.body.linearVelocity) + return v2(vel.x, vel.y) + + def set_velocity(self, vel) -> None: + """Set linear velocity (meters if b2Vec2, else pixels). + + Args: + vel: b2Vec2 in meters/sec or Vector2 in pixels/sec. + + Returns: + None + """ + if not self.body: + return + if isinstance(vel, b2Vec2): + self.body.linearVelocity = vel + else: + if not self.physics: + return + self.body.linearVelocity = self.physics.convert_to_meters(vel) + + def get_rotation(self) -> float: + """Get rotation in degrees. + + Returns: + Rotation in degrees. + """ + return math.degrees(self.body.angle) if self.body else 0.0 + + def get_contacts(self) -> List[b2Body]: + """Get bodies currently touching this body. + + Returns: + List of bodies in contact. + """ + if not self.body: + return [] + contacts: List[b2Body] = [] + for edge in self.body.contacts: + contact = edge.contact + if contact.touching: + other = edge.other + if other not in contacts: + contacts.append(other) + return contacts + + def get_sensor_overlaps(self) -> List[b2Body]: + """Get bodies overlapping sensor fixtures on this body. + + Returns: + List of bodies overlapping sensor fixtures. + """ + if not self.body: + return [] + contacts: List[b2Body] = [] + for edge in self.body.contacts: + contact = edge.contact + if not contact.touching: + continue + fixture_a = contact.fixtureA + fixture_b = contact.fixtureB + if fixture_a.body == self.body and fixture_a.sensor: + if fixture_b.body not in contacts: + contacts.append(fixture_b.body) + elif fixture_b.body == self.body and fixture_b.sensor: + if fixture_a.body not in contacts: + contacts.append(fixture_a.body) + return contacts + + +class SpriteComponent(Component): + """Component for rendering a sprite. Depends on TextureService.""" + def __init__(self, filename: str, body: Optional[BodyComponent] = None) -> None: + """ init . + + Args: + filename: Parameter. + body: Parameter. + + Returns: + None + """ + super().__init__() + self.filename = filename + self.body = body + self.sprite: Optional[rl.Texture2D] = None + self.position = v2(0.0, 0.0) + self.rotation = 0.0 + self.scale = 1.0 + self.tint = rl.WHITE + self.is_active = True + + def init(self) -> None: + """Load the sprite texture via TextureService. + + Returns: + None + """ + if self.owner and self.owner.scene: + texture_service = self.owner.scene.get_service(TextureService) + self.sprite = texture_service.get_texture(self.filename) + + def draw(self) -> None: + """Draw the sprite if active. + + Returns: + None + """ + if not self.is_active or not self.sprite: + return + if self.body: + self.position = self.body.get_position_pixels() + self.rotation = self.body.get_rotation() + source = rl.Rectangle(0.0, 0.0, float(self.sprite.width), float(self.sprite.height)) + dest = rl.Rectangle(self.position.x, self.position.y, + float(self.sprite.width) * self.scale, + float(self.sprite.height) * self.scale) + origin = v2(float(self.sprite.width) / 2.0 * self.scale, + float(self.sprite.height) / 2.0 * self.scale) + rl.draw_texture_pro(self.sprite, source, dest, origin, self.rotation, self.tint) + + def set_position(self, position: rl.Vector2) -> None: + """Set the sprite position in pixels. + + Args: + position: Vector2 position. + + Returns: + None + """ + self.position = position + + def set_rotation(self, rotation: float) -> None: + """Set the sprite rotation in degrees. + + Args: + rotation: Rotation in degrees. + + Returns: + None + """ + self.rotation = rotation + + def set_scale(self, scale: float) -> None: + """Set the sprite scale. + + Args: + scale: Scale multiplier. + + Returns: + None + """ + self.scale = scale + + def set_tint(self, tint: rl.Color) -> None: + """Set the sprite tint color. + + Args: + tint: Raylib color. + + Returns: + None + """ + self.tint = tint + + def set_active(self, active: bool) -> None: + """Enable or disable sprite rendering. + + Args: + active: True to render, False to hide. + + Returns: + None + """ + self.is_active = active + + +class Animation: + """Frame-based animation helper.""" + def __init__(self, frames: List[rl.Texture2D], fps: float = 15.0, loop: bool = True) -> None: + """ init . + + Args: + frames: Parameter. + fps: Parameter. + loop: Parameter. + + Returns: + None + """ + self.frames = frames + self.fps = fps + self.frame_timer = 1.0 / fps if fps > 0 else 0.0 + self.loop = loop + self.current_frame = 0 + self.playing = True + self.is_active = True + + @classmethod + def from_files(cls, texture_service: TextureService, filenames: List[str], fps: float = 15.0, loop: bool = True): + """From files. + + Args: + texture_service: Parameter. + filenames: Parameter. + fps: Parameter. + loop: Parameter. + + Returns: + Result of the operation. + """ + frames = [texture_service.get_texture(name) for name in filenames] + return cls(frames, fps, loop) + + def update(self, delta_time: float) -> None: + """Advance the animation by delta time. + + Args: + delta_time: Seconds since the last frame. + + Returns: + None + """ + if not self.frames or not self.playing or not self.is_active or self.fps <= 0: + return + self.frame_timer -= delta_time + if self.frame_timer <= 0.0: + self.frame_timer = 1.0 / self.fps + self.current_frame += 1 + if self.current_frame > len(self.frames) - 1: + self.current_frame = 0 if self.loop else len(self.frames) - 1 + + def draw(self, position: rl.Vector2, rotation: float = 0.0, tint: rl.Color = rl.WHITE) -> None: + """Draw the animation at a position. + + Args: + position: Position in pixels. + rotation: Rotation in degrees. + tint: Color tint. + + Returns: + None + """ + if not self.is_active or not self.frames: + return + sprite = self.frames[self.current_frame] + rl.draw_texture_pro(sprite, + rl.Rectangle(0.0, 0.0, float(sprite.width), float(sprite.height)), + rl.Rectangle(position.x, position.y, float(sprite.width), float(sprite.height)), + v2(float(sprite.width) / 2.0, float(sprite.height) / 2.0), + rotation, + tint) + + def draw_with_origin(self, position: rl.Vector2, origin: rl.Vector2, rotation: float = 0.0, + scale: float = 1.0, flip_x: bool = False, flip_y: bool = False, + tint: rl.Color = rl.WHITE) -> None: + """Draw the animation with origin, scale, and flip options. + + Args: + position: Position in pixels. + origin: Origin for rotation/scaling. + rotation: Rotation in degrees. + scale: Scale multiplier. + flip_x: True to flip horizontally. + flip_y: True to flip vertically. + tint: Color tint. + + Returns: + None + """ + if not self.is_active or not self.frames: + return + sprite = self.frames[self.current_frame] + src = rl.Rectangle(0.0, 0.0, + float(sprite.width) * (-1.0 if flip_x else 1.0), + float(sprite.height) * (-1.0 if flip_y else 1.0)) + dest = rl.Rectangle(position.x, position.y, + float(sprite.width) * scale, + float(sprite.height) * scale) + rl.draw_texture_pro(sprite, src, dest, vec_mul(origin, scale), rotation, tint) + + def play(self) -> None: + """Start or resume playback. + + Returns: + None + """ + self.playing = True + + def pause(self) -> None: + """Pause playback. + + Returns: + None + """ + self.playing = False + + def stop(self) -> None: + """Stop playback and reset to the first frame. + + Returns: + None + """ + self.playing = False + self.frame_timer = 1.0 / self.fps if self.fps > 0 else 0.0 + self.current_frame = 0 + + +class AnimationController(Component): + """Component for controlling animations. Depends on TextureService.""" + def __init__(self, body: Optional[BodyComponent] = None) -> None: + """ init . + + Args: + body: Parameter. + + Returns: + None + """ + super().__init__() + self.animations: Dict[str, Animation] = {} + self.current_animation: Optional[Animation] = None + self.position = v2(0.0, 0.0) + self.rotation = 0.0 + self.origin = v2(0.0, 0.0) + self.scale = 1.0 + self.flip_x = False + self.flip_y = False + self.body = body + + def update(self, delta_time: float) -> None: + """Update the current animation. + + Args: + delta_time: Seconds since the last frame. + + Returns: + None + """ + if self.current_animation: + self.current_animation.update(delta_time) + + def draw(self) -> None: + """Draw the current animation. + + Returns: + None + """ + if self.body: + self.position = self.body.get_position_pixels() + self.rotation = self.body.get_rotation() + if self.current_animation: + self.current_animation.draw_with_origin(self.position, self.origin, self.rotation, self.scale, + self.flip_x, self.flip_y) + + def add_animation(self, name: str, animation: Animation) -> None: + """Add an Animation to the controller. + + Args: + name: Animation name. + animation: Animation instance. + + Returns: + None + """ + self.animations[name] = animation + if not self.current_animation: + self.current_animation = animation + sprite = animation.frames[animation.current_frame] + self.origin = v2(float(sprite.width) / 2.0, float(sprite.height) / 2.0) + + def add_animation_from_files(self, name: str, filenames: List[str], fps: float = 15.0, loop: bool = True) -> Animation: + """Create an Animation from files and add it. + + Args: + name: Animation name. + filenames: List of frame image paths. + fps: Frames per second. + loop: True to loop. + + Returns: + The created Animation. + """ + texture_service = self.owner.scene.get_service(TextureService) if self.owner and self.owner.scene else None + if not texture_service: + raise RuntimeError("TextureService not available") + animation = Animation.from_files(texture_service, filenames, fps, loop) + self.add_animation(name, animation) + return animation + + def get_animation(self, name: str) -> Optional[Animation]: + """Get an animation by name. + + Args: + name: Animation name. + + Returns: + The Animation or None. + """ + return self.animations.get(name) + + def play(self, name: Optional[str] = None) -> None: + """Play the current animation or switch by name then play. + + Args: + name: Optional animation name to switch to. + + Returns: + None + """ + if name: + animation = self.animations.get(name) + if animation: + self.current_animation = animation + if self.current_animation: + self.current_animation.play() + + def pause(self) -> None: + """Pause the current animation. + + Returns: + None + """ + if self.current_animation: + self.current_animation.pause() + + def set_play(self, play: bool) -> None: + """Set play/pause state for the current animation. + + Args: + play: True to play, False to pause. + + Returns: + None + """ + if self.current_animation: + self.current_animation.play() if play else self.current_animation.pause() + + def stop(self) -> None: + """Stop the current animation. + + Returns: + None + """ + if self.current_animation: + self.current_animation.stop() + + def set_position(self, position: rl.Vector2) -> None: + """Set animation draw position. + + Args: + position: Vector2 in pixels. + + Returns: + None + """ + self.position = position + + def set_rotation(self, rotation: float) -> None: + """Set animation rotation in degrees. + + Args: + rotation: Rotation in degrees. + + Returns: + None + """ + self.rotation = rotation + + def set_origin(self, origin: rl.Vector2) -> None: + """Set animation origin point. + + Args: + origin: Vector2 origin. + + Returns: + None + """ + self.origin = origin + + def set_scale(self, scale: float) -> None: + """Set animation scale. + + Args: + scale: Scale multiplier. + + Returns: + None + """ + self.scale = scale + + def set_flip_x(self, flip: bool) -> None: + """Set horizontal flip. + + Args: + flip: True to flip horizontally. + + Returns: + None + """ + self.flip_x = flip + + def set_flip_y(self, flip: bool) -> None: + """Set vertical flip. + + Args: + flip: True to flip vertically. + + Returns: + None + """ + self.flip_y = flip + + +class PlatformerMovementParams: + """Parameter bag for platformer movement.""" + def __init__(self) -> None: + """ init . + + Returns: + None + """ + self.width = 24.0 + self.height = 40.0 + self.max_speed = 220.0 + self.accel = 2000.0 + self.decel = 2500.0 + self.gravity = 1400.0 + self.jump_speed = 520.0 + self.fall_speed = 1200.0 + self.jump_cutoff_multiplier = 0.45 + self.coyote_time = 0.08 + self.jump_buffer = 0.10 + + +class PlatformerMovementComponent(Component): + """Component for 2D platformer movement.""" + def __init__(self, params: PlatformerMovementParams) -> None: + """ init . + + Args: + params: Parameter. + + Returns: + None + """ + super().__init__() + self.p = params + self.physics: Optional[PhysicsService] = None + self.body: Optional[BodyComponent] = None + self.grounded = False + self.on_wall_left = False + self.on_wall_right = False + self.coyote_timer = 0.0 + self.jump_buffer_timer = 0.0 + self.move_x = 0.0 + self.jump_pressed = False + self.jump_held = False + + def init(self) -> None: + """Resolve PhysicsService and BodyComponent. + + Returns: + None + """ + if not self.owner or not self.owner.scene: + return + self.physics = self.owner.scene.get_service(PhysicsService) + self.body = self.owner.get_component(BodyComponent) + + def update(self, delta_time: float) -> None: + """Update movement and apply velocity to the body. + + Args: + delta_time: Seconds since the last frame. + + Returns: + None + """ + if not self.physics or not self.body or not self.body.body: + return + self.coyote_timer = max(0.0, self.coyote_timer - delta_time) + self.jump_buffer_timer = max(0.0, self.jump_buffer_timer - delta_time) + if self.jump_pressed: + self.jump_buffer_timer = self.p.jump_buffer + + self.grounded = False + self.on_wall_left = False + self.on_wall_right = False + + ray_length = self.physics.convert_length_to_meters(4.0) + half_width = self.physics.convert_length_to_meters(self.p.width) / 2.0 + half_height = self.physics.convert_length_to_meters(self.p.height) / 2.0 + + pos = self.body.get_position_meters() + ground_left_start = b2Vec2(pos.x - half_width, pos.y + half_height) + ground_right_start = b2Vec2(pos.x + half_width, pos.y + half_height) + ground_translation = b2Vec2(0.0, ray_length) + + left_ground_hit = raycast_closest(self.physics.world, self.body.body, ground_left_start, ground_translation) + right_ground_hit = raycast_closest(self.physics.world, self.body.body, ground_right_start, ground_translation) + self.grounded = left_ground_hit.hit or right_ground_hit.hit + + mid = b2Vec2(pos.x, pos.y) + wall_left_start = b2Vec2(pos.x - half_width, mid.y) + wall_left_translation = b2Vec2(-ray_length, 0.0) + wall_right_start = b2Vec2(pos.x + half_width, mid.y) + wall_right_translation = b2Vec2(ray_length, 0.0) + + left_wall_hit = raycast_closest(self.physics.world, self.body.body, wall_left_start, wall_left_translation) + right_wall_hit = raycast_closest(self.physics.world, self.body.body, wall_right_start, wall_right_translation) + self.on_wall_left = left_wall_hit.hit + self.on_wall_right = right_wall_hit.hit + + if self.grounded: + self.coyote_timer = self.p.coyote_time + + target_vx = self.move_x * self.p.max_speed + v = self.body.get_velocity_pixels() + + if abs(target_vx) > 0.001: + v.x = self.move_towards(v.x, target_vx, self.p.accel * delta_time) + else: + v.x = self.move_towards(v.x, 0.0, self.p.decel * delta_time) + + v.y += self.p.gravity * delta_time + v.y = max(-self.p.fall_speed, min(self.p.fall_speed, v.y)) + + can_jump = self.grounded or self.coyote_timer > 0.0 + if self.jump_buffer_timer > 0.0 and can_jump: + v.y = -self.p.jump_speed + self.jump_buffer_timer = 0.0 + self.coyote_timer = 0.0 + self.grounded = False + + if not self.jump_held and v.y < 0.0: + v.y *= self.p.jump_cutoff_multiplier + + self.body.set_velocity(v) + + @staticmethod + def move_towards(current: float, target: float, max_delta: float) -> float: + """Move a value toward a target by at most max_delta. + + Args: + current: Current value. + target: Target value. + max_delta: Maximum change allowed. + + Returns: + The updated value. + """ + delta = target - current + if abs(delta) <= max_delta: + return target + return current + (max_delta if delta > 0 else -max_delta) + + def set_input(self, horizontal_speed: float, jump_pressed: bool, jump_held: bool) -> None: + """Set movement input for this frame. + + Args: + horizontal_speed: Horizontal input (-1 to 1). + jump_pressed: True if jump pressed this frame. + jump_held: True if jump is held. + + Returns: + None + """ + self.move_x = horizontal_speed + self.jump_pressed = jump_pressed + self.jump_held = jump_held + + +class TopDownMovementParams: + """Parameter bag for top-down movement.""" + def __init__(self) -> None: + """ init . + + Returns: + None + """ + self.max_speed = 300.0 + self.accel = 1200.0 + self.friction = 1200.0 + self.deadzone = 0.1 + + +class TopDownMovementComponent(Component): + """Component for 2D top-down movement.""" + def __init__(self, params: TopDownMovementParams) -> None: + """ init . + + Args: + params: Parameter. + + Returns: + None + """ + super().__init__() + self.p = params + self.physics: Optional[PhysicsService] = None + self.body: Optional[BodyComponent] = None + self.move_x = 0.0 + self.move_y = 0.0 + self.facing_dir = 0.0 + + def init(self) -> None: + """Resolve PhysicsService and BodyComponent. + + Returns: + None + """ + if not self.owner or not self.owner.scene: + return + self.physics = self.owner.scene.get_service(PhysicsService) + self.body = self.owner.get_component(BodyComponent) + + def update(self, delta_time: float) -> None: + """Update movement and apply velocity to the body. + + Args: + delta_time: Seconds since the last frame. + + Returns: + None + """ + if not self.body or not self.body.body: + return + v = self.body.get_velocity_pixels() + input_vec = v2(self.move_x, self.move_y) + input_len_sq = input_vec.x * input_vec.x + input_vec.y * input_vec.y + desired = v2(0.0, 0.0) + + if input_len_sq > self.p.deadzone * self.p.deadzone: + desired = v2(input_vec.x * self.p.max_speed, input_vec.y * self.p.max_speed) + self.facing_dir = math.degrees(math.atan2(input_vec.y, input_vec.x)) + v = self.move_towards_vec(v, desired, self.p.accel * delta_time) + else: + v = self.apply_friction(v, self.p.friction * delta_time) + + speed_sq = v.x * v.x + v.y * v.y + max_speed_sq = self.p.max_speed * self.p.max_speed + if speed_sq > max_speed_sq: + speed = math.sqrt(speed_sq) + scale = self.p.max_speed / speed + v.x *= scale + v.y *= scale + + self.body.set_velocity(v) + + @staticmethod + def move_towards_vec(current: rl.Vector2, target: rl.Vector2, max_delta: float) -> rl.Vector2: + """Move a vector toward a target by at most max_delta. + + Args: + current: Current vector. + target: Target vector. + max_delta: Maximum change length. + + Returns: + The updated vector. + """ + delta = v2(target.x - current.x, target.y - current.y) + length = math.sqrt(delta.x * delta.x + delta.y * delta.y) + if length <= max_delta or length < 1e-5: + return target + scale = max_delta / length + return v2(current.x + delta.x * scale, current.y + delta.y * scale) + + @staticmethod + def apply_friction(v: rl.Vector2, friction_delta: float) -> rl.Vector2: + """Apply friction to reduce vector magnitude. + + Args: + v: Current velocity vector. + friction_delta: Speed to subtract this frame. + + Returns: + The updated velocity vector. + """ + speed = math.sqrt(v.x * v.x + v.y * v.y) + if speed < 1e-5: + return v2(0.0, 0.0) + new_speed = speed - friction_delta + if new_speed <= 0.0: + return v2(0.0, 0.0) + scale = new_speed / speed + return v2(v.x * scale, v.y * scale) + + def set_input(self, horizontal: float, vertical: float) -> None: + """Set movement input for this frame. + + Args: + horizontal: Horizontal input (-1 to 1). + vertical: Vertical input (-1 to 1). + + Returns: + None + """ + self.move_x = horizontal + self.move_y = vertical diff --git a/py/engine/prefabs/game_objects.h b/py/engine/prefabs/game_objects.h new file mode 100644 index 0000000..776ce16 --- /dev/null +++ b/py/engine/prefabs/game_objects.h @@ -0,0 +1,619 @@ +#pragma once + +#include "engine/framework.h" +#include "engine/prefabs/components.h" +#include "engine/prefabs/services.h" + +/** + * A simple static box. + */ +class StaticBox : public GameObject +{ +public: + b2BodyId body = b2_nullBodyId; + float x, y, width, height; + bool is_visible = true; + + /** + * Constructor for StaticBox. + * + * @param x The center x position in pixels. + * @param y The center y position in pixels. + * @param width The width of the box in pixels. + * @param height The height of the box in pixels. + */ + StaticBox(float x, float y, float width, float height) : x(x), y(y), width(width), height(height) {} + + /** + * Constructor for StaticBox that takes Vector2s. + * + * @param position The center of the box in pixels. + * @param size The size of the box in pixels. + */ + StaticBox(Vector2 position, Vector2 size) : x(position.x), y(position.y), width(size.x), height(size.y) {} + + /** + * Initialize the StaticBox. + */ + void init() override + { + auto physics = scene->get_service(); + const float pixels_to_meters = physics->pixels_to_meters; + auto world = physics->world; + + b2BodyDef body_def = b2DefaultBodyDef(); + body_def.type = b2_staticBody; + body_def.position = b2Vec2{x * pixels_to_meters, y * pixels_to_meters}; + body = b2CreateBody(world, &body_def); + + b2Polygon body_polygon = b2MakeBox(width / 2.0f * pixels_to_meters, height / 2.0f * pixels_to_meters); + b2ShapeDef box_shape_def = b2DefaultShapeDef(); + b2CreatePolygonShape(body, &box_shape_def, &body_polygon); + + add_component(body); + } + + /** + * Draw the StaticBox as a blue rectangle. + */ + void draw() override + { + if (is_visible) + { + DrawRectangle((int)(x - width / 2.0f), (int)(y - height / 2.0f), (int)width, (int)height, BLUE); + } + } +}; + +/** + * A simple dynamic rigid body box. + */ +class DynamicBox : public GameObject +{ +public: + b2BodyId body = b2_nullBodyId; + float x, y, width, height, rot_deg; + PhysicsService* physics; + + /** + * Constructor for DynamicBox. + * + * @param x The center x position in pixels. + * @param y The center y position in pixels. + * @param width The width of the box in pixels. + * @param height The height of the box in pixels. + * @param rotation The angle of the box in degrees. + */ + DynamicBox(float x, float y, float width, float height, float rotation = 0) : + x(x), + y(y), + width(width), + height(height), + rot_deg(rotation) + { + } + + /** + * Constructor for DynamicBox that takes Vector2s. + * + * @param position The center of the box in pixels. + * @param size The size of the box in pixels. + * @param rotation The angle of the box in degrees. + */ + DynamicBox(Vector2 position, Vector2 size, float rotation = 0) : + x(position.x), + y(position.y), + width(size.x), + height(size.y), + rot_deg(rotation) + { + } + + /** + * Initialize the DynamicBody. + */ + void init() override + { + physics = scene->get_service(); + const float pixels_to_meters = physics->pixels_to_meters; + auto world = physics->world; + + b2BodyDef body_def = b2DefaultBodyDef(); + body_def.type = b2_dynamicBody; + body_def.position = b2Vec2{x * pixels_to_meters, y * pixels_to_meters}; + body_def.rotation = b2MakeRot(rot_deg * DEG2RAD); + body = b2CreateBody(world, &body_def); + + b2Polygon body_polygon = b2MakeBox(width / 2.0f * pixels_to_meters, height / 2.0f * pixels_to_meters); + b2ShapeDef box_shape_def = b2DefaultShapeDef(); + b2SurfaceMaterial body_material = b2DefaultSurfaceMaterial(); + body_material.friction = 0.3f; + box_shape_def.density = 1.0f; + box_shape_def.material = body_material; + b2CreatePolygonShape(body, &box_shape_def, &body_polygon); + + auto body_component = add_component(body); + add_component("assets/character_green_idle.png", body_component); + } + + /** + * Draw the DynamicBody as a red rectangle. + */ + void draw() override + { + float meters_to_pixels = physics->meters_to_pixels; + b2Vec2 pos = b2Body_GetPosition(body); + b2Rot rot = b2Body_GetRotation(body); + float angle = b2Rot_GetAngle(rot) * RAD2DEG; + + DrawRectanglePro({physics->convert_to_pixels(pos.x), physics->convert_to_pixels(pos.y), width, height}, + {width / 2.0f, height / 2.0f}, + angle, + RED); + } +}; + +/** + * A 2D camera that controls the view of the scene. + */ +class CameraObject : public GameObject +{ +public: + Camera2D camera; + + // The target position to follow, in pixels. + Vector2 target = {0, 0}; + + // The size of the screen. + Vector2 size = {0, 0}; + + // The size of the level in pixels. The camera will clamp to this size. + Vector2 level_size = {0, 0}; + + // Tracking speed in pixels per second. + Vector2 follow_speed = {1000, 1000}; + + // Deadzone bounds in pixels relative to the center. + float offset_left = 150.0f; + float offset_right = 150.0f; + float offset_top = 100.0f; + float offset_bottom = 100.0f; + + /** + * Constructor for CameraObject. + * + * @param size The size of the camera view. + * @param level_size The size of the level. + * @param follow_speed The speed at which the camera follows the target. + * @param offset_left The left deadzone offset in pixels. + * @param offset_right The right deadzone offset in pixels. + * @param offset_top The top deadzone offset in pixels. + * @param offset_bottom The bottom deadzone offset in pixels. + */ + CameraObject(Vector2 size, + Vector2 level_size = {0, 0}, + Vector2 follow_speed = {1000, 1000}, + float offset_left = 70, + float offset_right = 70, + float offset_top = 40, + float offset_bottom = 40) : + size(size), + level_size(level_size), + follow_speed(follow_speed), + offset_left(offset_left), + offset_right(offset_right), + offset_top(offset_top), + offset_bottom(offset_bottom) + { + } + + /** + * Initialize the camera. + */ + void init() override + { + camera.zoom = 1.0f; + camera.offset = {size.x / 2.0f, size.y / 2.0f}; + camera.rotation = 0.0f; + + camera.target = target; + } + + /** + * Update the camera position based on the target and deadzone. + * + * @param delta_time The delta time since the last frame. + */ + void update(float delta_time) override + { + // Desired camera.target after applying deadzone. + Vector2 desired = camera.target; + + // Convert deadzone from SCREEN pixels to WORLD pixels (depends on zoom). + // Because camera.target is in world units. + float inv_zoom = (camera.zoom != 0.0f) ? (1.0f / camera.zoom) : 1.0f; + + float dz_left_w = offset_left * inv_zoom; + float dz_right_w = offset_right * inv_zoom; + float dz_top_w = offset_top * inv_zoom; + float dz_bottom_w = offset_bottom * inv_zoom; + + // Compute target displacement from current camera center (world-space). + float dx = target.x - camera.target.x; + float dy = target.y - camera.target.y; + + // If target is outside deadzone, shift desired camera center just enough to bring it back. + if (dx < -dz_left_w) + { + desired.x = target.x + dz_left_w; + } + else if (dx > dz_right_w) + { + desired.x = target.x - dz_right_w; + } + + if (dy < -dz_top_w) + { + desired.y = target.y + dz_top_w; + } + else if (dy > dz_bottom_w) + { + desired.y = target.y - dz_bottom_w; + } + + // Apply tracking speed per axis. + if (follow_speed.x < 0) + { + camera.target.x = desired.x; + } + else + { + camera.target.x = move_towards(camera.target.x, desired.x, follow_speed.x * delta_time); + } + + if (follow_speed.y < 0) + { + camera.target.y = desired.y; + } + else + { + camera.target.y = move_towards(camera.target.y, desired.y, follow_speed.y * delta_time); + } + + Vector2 half_view = {size.x / 2.0f * inv_zoom, size.y / 2.0f * inv_zoom}; + if (level_size.x > size.x) + { + camera.target.x = std::max(half_view.x, std::min(level_size.x - half_view.x, camera.target.x)); + } + if (level_size.y > size.y) + { + camera.target.y = std::max(half_view.y, std::min(level_size.y - half_view.y, camera.target.y)); + } + } + + /** + * Calculate a value moved towards a target by a maximum delta. + * + * @param current The current value. + * @param target The target value. + * @param max_delta The maximum change that can be applied. + * @return The new value after moving towards the target. + */ + float move_towards(float current, float target, float max_delta) + { + float d = target - current; + if (d > max_delta) + return current + max_delta; + if (d < -max_delta) + return current - max_delta; + return target; + } + + /** + * Set the target position for the camera to follow. + * + * @param target The target position in pixels. + */ + void set_target(Vector2 target) + { + this->target = target; + } + + /** + * Set the zoom level of the camera. + * + * @param zoom The zoom level. + */ + void set_zoom(float zoom) + { + camera.zoom = zoom; + } + + /** + * Set the rotation angle of the camera. + * + * @param angle The rotation angle in degrees. + */ + void set_rotation(float angle) + { + camera.rotation = angle; + } + + /** + * Begin drawing with the camera. + * The rest of the Scene should be drawn between draw_begin() and draw_end(). + */ + void draw_begin() + { + BeginMode2D(camera); + } + + /** + * End drawing with the camera. + */ + void draw_end() + { + EndMode2D(); + } + + /** + * Draw the camera's deadzone for debugging. + * + * @param c The color to draw the deadzone rectangle. + */ + void draw_debug(Color c = {0, 255, 0, 120}) const + { + float inv_zoom = (camera.zoom != 0.0f) ? (1.0f / camera.zoom) : 1.0f; + float dz_left_w = offset_left * inv_zoom; + float dz_right_w = offset_right * inv_zoom; + float dz_top_w = offset_top * inv_zoom; + float dz_bottom_w = offset_bottom * inv_zoom; + + Rectangle r; + r.x = camera.target.x - dz_left_w; + r.y = camera.target.y - dz_top_w; + r.width = dz_left_w + dz_right_w; + r.height = dz_top_w + dz_bottom_w; + + DrawRectangleLinesEx(r, 2.0f * inv_zoom, c); + } + + /** + * Convert screen coordinates to world coordinates. + * + * @param point The screen coordinates. + * @return The corresponding world coordinates. + */ + Vector2 screen_to_world(Vector2 point) + { + return GetScreenToWorld2D(point, camera); + } +}; + +/** + * A split-screen camera that renders to a texture. + */ +class SplitCamera : public CameraObject +{ +public: + RenderTexture2D renderer; + + /** + * Constructor for SplitCamera. + * + * @param size The size of the camera view. + * @param level_size The size of the level. + * @param follow_speed The speed at which the camera follows the target. + * @param offset_left The left deadzone offset in pixels. + * @param offset_right The right deadzone offset in pixels. + * @param offset_top The top deadzone offset in pixels. + * @param offset_bottom The bottom deadzone offset in pixels. + */ + SplitCamera(Vector2 size, + Vector2 level_size = {0, 0}, + Vector2 follow_speed = {1000, 1000}, + float offset_left = 70, + float offset_right = 70, + float offset_top = 40, + float offset_bottom = 40) : + CameraObject(size, level_size, follow_speed, offset_left, offset_right, offset_top, offset_bottom) + { + } + + ~SplitCamera() + { + UnloadRenderTexture(renderer); + } + + /** + * Initialize the SplitCamera. + */ + void init() override + { + renderer = LoadRenderTexture((int)size.x, (int)size.y); + CameraObject::init(); + } + + /** + * Begin drawing to the camera's texture. + * The rest of the Scene should be drawn between draw_begin() and draw_end(). + */ + void draw_begin() + { + BeginTextureMode(renderer); + ClearBackground(WHITE); + BeginMode2D(camera); + } + + /** + * End drawing to the camera's texture. + */ + void draw_end() + { + EndMode2D(); + EndTextureMode(); + } + + /** + * Draw the camera's texture at the specified position. + * + * @param x The x position to draw the texture. + * @param y The y position to draw the texture. + */ + void draw_texture(float x, float y) + { + DrawTextureRec(renderer.texture, + {0, 0, static_cast(renderer.texture.width), static_cast(-renderer.texture.height)}, + {x, y}, + WHITE); + } + + void draw_texture_pro(float x, float y, float width, float height) + { + DrawTexturePro(renderer.texture, + {0, 0, static_cast(renderer.texture.width), static_cast(-renderer.texture.height)}, + {x, y, width, height}, + {0, 0}, + 0.0f, + WHITE); + } + + /** + * Convert screen coordinates to world coordinates relative to a draw position. + * + * @param draw_position The position where the texture is drawn. + * @param point The screen coordinates. + * @return The corresponding world coordinates. + */ + Vector2 screen_to_world(Vector2 draw_position, Vector2 point) + { + auto local_point = point - draw_position; + return GetScreenToWorld2D(local_point, camera); + } +}; + +/** + * Parameters for the PlatformerCharacter game object. + */ +struct CharacterParams +{ + // Geometry in pixels + float width = 24.0f; + float height = 40.0f; + + // Initial position in pixels + Vector2 position; + + // Surface behavior + float friction = 0.0f; + float restitution = 0.0f; + float density = 1.0f; +}; + +/** + * A simple platformer character with movement and animation. + */ +class PlatformerCharacter : public GameObject +{ +public: + CharacterParams p; + PhysicsService* physics; + BodyComponent* body; + PlatformerMovementComponent* movement; + + bool grounded = false; + bool on_wall_left = false; + bool on_wall_right = false; + float coyote_timer = 0.0f; + float jump_buffer_timer = 0.0f; + int gamepad = 0; + + /** + * Constructor for PlatformerCharacter. + * + * @param p The parameters for the character. + */ + PlatformerCharacter(CharacterParams p, int gamepad = 0) : p(p), gamepad(gamepad) {} + + /** + * Initialize the PlatformerCharacter. + */ + void init() override + { + physics = scene->get_service(); + + body = add_component( + [=](BodyComponent& b) + { + b2BodyDef body_def = b2DefaultBodyDef(); + body_def.type = b2_dynamicBody; + body_def.fixedRotation = true; + // body_def.isBullet = true; + body_def.linearDamping = 0.0f; + body_def.angularDamping = 0.0f; + body_def.position = physics->convert_to_meters(p.position); + body_def.userData = this; + b.id = b2CreateBody(physics->world, &body_def); + + b2SurfaceMaterial body_material = b2DefaultSurfaceMaterial(); + body_material.friction = p.friction; + body_material.restitution = p.restitution; + + b2ShapeDef box_shape_def = b2DefaultShapeDef(); + box_shape_def.density = p.density; + box_shape_def.material = body_material; + + // Needed to presolve one-way behavior. + box_shape_def.enablePreSolveEvents = true; + + b2Polygon body_polygon = b2MakeRoundedBox(physics->convert_to_meters(p.width / 2.0f), + physics->convert_to_meters(p.height / 2.0f), + physics->convert_to_meters(0.25)); + b2CreatePolygonShape(b.id, &box_shape_def, &body_polygon); + }); + + PlatformerMovementParams mp; + mp.width = p.width; + mp.height = p.height; + movement = add_component(mp); + } + + /** + * Update the PlatformerCharacter. + */ + void update(float delta_time) override + { + float deadzone = 0.1f; + + const bool jump_pressed = + IsKeyPressed(KEY_W) || IsGamepadButtonPressed(gamepad, GAMEPAD_BUTTON_RIGHT_FACE_DOWN); + const bool jump_held = IsKeyDown(KEY_W) || IsGamepadButtonDown(gamepad, GAMEPAD_BUTTON_RIGHT_FACE_DOWN); + + float move_x = 0.0f; + move_x = GetGamepadAxisMovement(gamepad, GAMEPAD_AXIS_LEFT_X); + if (fabsf(move_x) < deadzone) + { + move_x = 0.0f; + } + if (IsKeyDown(KEY_D) || IsGamepadButtonDown(gamepad, GAMEPAD_BUTTON_LEFT_FACE_RIGHT)) + { + move_x = 1.0f; + } + else if (IsKeyDown(KEY_A) || IsGamepadButtonDown(gamepad, GAMEPAD_BUTTON_LEFT_FACE_LEFT)) + { + move_x = -1.0f; + } + + movement->set_input(move_x, jump_pressed, jump_held); + } + + /** + * Draw the PlatformerCharacter as a rectangle. + */ + void draw() override + { + Color color = movement->grounded ? GREEN : BLUE; + auto pos = body->get_position_pixels(); + DrawRectanglePro({pos.x, pos.y, p.width, p.height}, {p.width / 2.0f, p.height / 2.0f}, 0.0f, color); + } +}; diff --git a/py/engine/prefabs/game_objects.py b/py/engine/prefabs/game_objects.py new file mode 100644 index 0000000..2c96b4f --- /dev/null +++ b/py/engine/prefabs/game_objects.py @@ -0,0 +1,518 @@ +from __future__ import annotations + +import math +from dataclasses import dataclass +from typing import Optional + +from Box2D import b2PolygonShape, b2Vec2 +import pyray as rl + +from engine.framework import GameObject +from engine.math_extensions import v2, vec_sub +from engine.prefabs.components import BodyComponent, PlatformerMovementComponent, PlatformerMovementParams, SpriteComponent +from engine.prefabs.services import PhysicsService + + +class StaticBox(GameObject): + """Simple static box collider with optional debug drawing.""" + def __init__(self, x: float, y: float, width: float, height: float) -> None: + """ init . + + Args: + x: Parameter. + y: Parameter. + width: Parameter. + height: Parameter. + + Returns: + None + """ + super().__init__() + self.x = x + self.y = y + self.width = width + self.height = height + self.body = None + self.is_visible = True + + @classmethod + def from_vectors(cls, position: rl.Vector2, size: rl.Vector2): + """From vectors. + + Args: + position: Parameter. + size: Parameter. + + Returns: + Result of the operation. + """ + return cls(position.x, position.y, size.x, size.y) + + def init(self) -> None: + """Initialize the object. + + Returns: + None + """ + physics = self.scene.get_service(PhysicsService) + world = physics.world + if not world: + return + self.body = world.CreateStaticBody(position=(self.x * physics.pixels_to_meters, self.y * physics.pixels_to_meters)) + shape = b2PolygonShape(box=(self.width / 2.0 * physics.pixels_to_meters, + self.height / 2.0 * physics.pixels_to_meters)) + self.body.CreateFixture(shape=shape) + self.add_component(BodyComponent(self.body)) + + def draw(self) -> None: + """Draw the object. + + Returns: + None + """ + if self.is_visible: + rl.draw_rectangle(int(self.x - self.width / 2.0), int(self.y - self.height / 2.0), int(self.width), int(self.height), rl.Color(0, 121, 241, 255)) + + +class DynamicBox(GameObject): + """Simple dynamic rigid body box.""" + def __init__(self, x: float, y: float, width: float, height: float, rotation: float = 0.0) -> None: + """ init . + + Args: + x: Parameter. + y: Parameter. + width: Parameter. + height: Parameter. + rotation: Parameter. + + Returns: + None + """ + super().__init__() + self.x = x + self.y = y + self.width = width + self.height = height + self.rot_deg = rotation + self.physics: Optional[PhysicsService] = None + self.body = None + + @classmethod + def from_vectors(cls, position: rl.Vector2, size: rl.Vector2, rotation: float = 0.0): + """From vectors. + + Args: + position: Parameter. + size: Parameter. + rotation: Parameter. + + Returns: + Result of the operation. + """ + return cls(position.x, position.y, size.x, size.y, rotation) + + def init(self) -> None: + """Initialize the object. + + Returns: + None + """ + self.physics = self.scene.get_service(PhysicsService) + world = self.physics.world + if not world: + return + self.body = world.CreateDynamicBody(position=(self.x * self.physics.pixels_to_meters, + self.y * self.physics.pixels_to_meters), + angle=math.radians(self.rot_deg)) + shape = b2PolygonShape(box=(self.width / 2.0 * self.physics.pixels_to_meters, + self.height / 2.0 * self.physics.pixels_to_meters)) + self.body.CreateFixture(shape=shape, density=1.0, friction=0.3) + body_component = self.add_component(BodyComponent(self.body)) + self.add_component(SpriteComponent("assets/character_green_idle.png", body_component)) + + def draw(self) -> None: + """Draw the object. + + Returns: + None + """ + if not self.physics or not self.body: + return + pos = self.body.position + angle = math.degrees(self.body.angle) + rl.draw_rectangle_pro(rl.Rectangle(self.physics.convert_length_to_pixels(pos.x), + self.physics.convert_length_to_pixels(pos.y), + self.width, self.height), + v2(self.width / 2.0, self.height / 2.0), + angle, + rl.Color(230, 41, 55, 255)) + + +class CameraObject(GameObject): + """2D camera that follows a target with deadzone and clamp.""" + def __init__(self, + size: rl.Vector2, + level_size: rl.Vector2 = v2(0.0, 0.0), + follow_speed: rl.Vector2 = v2(1000.0, 1000.0), + offset_left: float = 70.0, + offset_right: float = 70.0, + offset_top: float = 40.0, + offset_bottom: float = 40.0) -> None: + super().__init__() + + self.camera = rl.Camera2D() + self.target = v2(0.0, 0.0) + self.size = size + self.level_size = level_size + self.follow_speed = follow_speed + self.offset_left = offset_left + self.offset_right = offset_right + self.offset_top = offset_top + self.offset_bottom = offset_bottom + + def init(self) -> None: + """Initialize the object. + + Returns: + None + """ + self.camera.zoom = 1.0 + self.camera.offset = v2(self.size.x / 2.0, self.size.y / 2.0) + self.camera.rotation = 0.0 + self.camera.target = self.target + + def update(self, delta_time: float) -> None: + """Update the object. + + Args: + delta_time: Parameter. + + Returns: + None + """ + desired = self.camera.target + inv_zoom = 1.0 / self.camera.zoom if self.camera.zoom != 0.0 else 1.0 + dz_left_w = self.offset_left * inv_zoom + dz_right_w = self.offset_right * inv_zoom + dz_top_w = self.offset_top * inv_zoom + dz_bottom_w = self.offset_bottom * inv_zoom + + dx = self.target.x - self.camera.target.x + dy = self.target.y - self.camera.target.y + + if dx < -dz_left_w: + desired.x = self.target.x + dz_left_w + elif dx > dz_right_w: + desired.x = self.target.x - dz_right_w + + if dy < -dz_top_w: + desired.y = self.target.y + dz_top_w + elif dy > dz_bottom_w: + desired.y = self.target.y - dz_bottom_w + + if self.follow_speed.x < 0: + self.camera.target.x = desired.x + else: + self.camera.target.x = self.move_towards(self.camera.target.x, desired.x, self.follow_speed.x * delta_time) + + if self.follow_speed.y < 0: + self.camera.target.y = desired.y + else: + self.camera.target.y = self.move_towards(self.camera.target.y, desired.y, self.follow_speed.y * delta_time) + + half_view = v2(self.size.x / 2.0 * inv_zoom, self.size.y / 2.0 * inv_zoom) + if self.level_size.x > self.size.x: + self.camera.target.x = max(half_view.x, min(self.level_size.x - half_view.x, self.camera.target.x)) + if self.level_size.y > self.size.y: + self.camera.target.y = max(half_view.y, min(self.level_size.y - half_view.y, self.camera.target.y)) + + @staticmethod + def move_towards(current: float, target: float, max_delta: float) -> float: + """Move towards. + + Args: + current: Parameter. + target: Parameter. + max_delta: Parameter. + + Returns: + Result of the operation. + """ + delta = target - current + if delta > max_delta: + return current + max_delta + if delta < -max_delta: + return current - max_delta + return target + + def set_target(self, target: rl.Vector2) -> None: + """Set target. + + Args: + target: Parameter. + + Returns: + None + """ + self.target = target + + def set_zoom(self, zoom: float) -> None: + """Set zoom. + + Args: + zoom: Parameter. + + Returns: + None + """ + self.camera.zoom = zoom + + def set_rotation(self, angle: float) -> None: + """Set rotation. + + Args: + angle: Parameter. + + Returns: + None + """ + self.camera.rotation = angle + + def draw_begin(self) -> None: + """Draw begin. + + Returns: + None + """ + rl.begin_mode_2d(self.camera) + + def draw_end(self) -> None: + """Draw end. + + Returns: + None + """ + rl.end_mode_2d() + + def draw_debug(self, color: rl.Color = rl.Color(0, 255, 0, 120)) -> None: + """TODO""" + inv_zoom = 1.0 / self.camera.zoom if self.camera.zoom != 0.0 else 1.0 + dz_left_w = self.offset_left * inv_zoom + dz_right_w = self.offset_right * inv_zoom + dz_top_w = self.offset_top * inv_zoom + dz_bottom_w = self.offset_bottom * inv_zoom + rect = rl.Rectangle(self.camera.target.x - dz_left_w, + self.camera.target.y - dz_top_w, + dz_left_w + dz_right_w, + dz_top_w + dz_bottom_w) + rl.draw_rectangle_lines_ex(rect, 2.0 * inv_zoom, color) + + def screen_to_world(self, point: rl.Vector2) -> rl.Vector2: + """Convert screen coordinates to world coordinates. + + Args: + point: Parameter. + + Returns: + Result of the operation. + """ + return rl.get_screen_to_world_2d(point, self.camera) + + +class SplitCamera(CameraObject): + """Split-screen camera that renders to a texture.""" + def __init__(self, size: rl.Vector2, level_size: rl.Vector2 = v2(0.0, 0.0), + follow_speed: rl.Vector2 = v2(1000.0, 1000.0), + offset_left: float = 70.0, offset_right: float = 70.0, + offset_top: float = 40.0, offset_bottom: float = 40.0) -> None: + super().__init__(size, level_size, follow_speed, offset_left, offset_right, offset_top, offset_bottom) + self.renderer: Optional[rl.RenderTexture] = None + + def init(self) -> None: + """Initialize the object. + + Returns: + None + """ + self.renderer = rl.load_render_texture(int(self.size.x), int(self.size.y)) + super().init() + + def draw_begin(self) -> None: + """Draw begin. + + Returns: + None + """ + if not self.renderer: + return + rl.begin_texture_mode(self.renderer) + rl.clear_background(rl.WHITE) + rl.begin_mode_2d(self.camera) + + def draw_end(self) -> None: + """Draw end. + + Returns: + None + """ + rl.end_mode_2d() + rl.end_texture_mode() + + def draw_texture(self, x: float, y: float) -> None: + """Draw texture. + + Args: + x: Parameter. + y: Parameter. + + Returns: + None + """ + if not self.renderer: + return + rl.draw_texture_pro(self.renderer.texture, + rl.Rectangle(0.0, 0.0, float(self.renderer.texture.width), -float(self.renderer.texture.height)), + rl.Rectangle(x, y, float(self.renderer.texture.width), float(self.renderer.texture.height)), + v2(0.0, 0.0), + 0.0, + rl.WHITE) + + def draw_texture_pro(self, x: float, y: float, width: float, height: float) -> None: + """Draw texture pro. + + Args: + x: Parameter. + y: Parameter. + width: Parameter. + height: Parameter. + + Returns: + None + """ + if not self.renderer: + return + rl.draw_texture_pro(self.renderer.texture, + rl.Rectangle(0.0, 0.0, float(self.renderer.texture.width), -float(self.renderer.texture.height)), + rl.Rectangle(x, y, width, height), + v2(0.0, 0.0), + 0.0, + rl.WHITE) + + def screen_to_world_with_offset(self, draw_position: rl.Vector2, point: rl.Vector2) -> rl.Vector2: + """Convert screen coordinates to world coordinates. + + Args: + draw_position: Parameter. + point: Parameter. + + Returns: + Result of the operation. + """ + local_point = vec_sub(point, draw_position) + return rl.get_screen_to_world_2d(local_point, self.camera) + + +@dataclass +class CharacterParams: + """Parameter bag for a platformer character.""" + width: float = 24.0 + height: float = 40.0 + position: rl.Vector2 = v2(0.0, 0.0) + friction: float = 0.0 + restitution: float = 0.0 + density: float = 1.0 + + +class PlatformerCharacter(GameObject): + """Simple platformer character with movement.""" + def __init__(self, params: CharacterParams, gamepad: int = 0) -> None: + """ init . + + Args: + params: Parameter. + gamepad: Parameter. + + Returns: + None + """ + super().__init__() + self.p = params + self.physics: Optional[PhysicsService] = None + self.body: Optional[BodyComponent] = None + self.movement: Optional[PlatformerMovementComponent] = None + self.gamepad = gamepad + + def init(self) -> None: + """Initialize the object. + + Returns: + None + """ + self.physics = self.scene.get_service(PhysicsService) + + def build_body(component: BodyComponent): + """Build body. + + Args: + component: Parameter. + + Returns: + Result of the operation. + """ + world = self.physics.world + body = world.CreateDynamicBody(position=(self.physics.convert_to_meters(self.p.position).x, + self.physics.convert_to_meters(self.p.position).y), + fixedRotation=True) + body.userData = self + shape = b2PolygonShape(box=(self.physics.convert_length_to_meters(self.p.width / 2.0), + self.physics.convert_length_to_meters(self.p.height / 2.0))) + body.CreateFixture(shape=shape, density=self.p.density, friction=self.p.friction, restitution=self.p.restitution) + component.body = body + + self.body = self.add_component(BodyComponent(build=build_body)) + params = PlatformerMovementParams() + params.width = self.p.width + params.height = self.p.height + self.movement = self.add_component(PlatformerMovementComponent(params)) + + def update(self, delta_time: float) -> None: + + """Update the object. + + Args: + delta_time: Parameter. + + Returns: + None + """ + deadzone = 0.1 + jump_pressed = rl.is_key_pressed(rl.KEY_W) or rl.is_gamepad_button_pressed(self.gamepad, rl.GAMEPAD_BUTTON_RIGHT_FACE_DOWN) + jump_held = rl.is_key_down(rl.KEY_W) or rl.is_gamepad_button_down(self.gamepad, rl.GAMEPAD_BUTTON_RIGHT_FACE_DOWN) + + move_x = rl.get_gamepad_axis_movement(self.gamepad, rl.GAMEPAD_AXIS_LEFT_X) + if abs(move_x) < deadzone: + move_x = 0.0 + if rl.is_key_down(rl.KEY_D) or rl.is_gamepad_button_down(self.gamepad, rl.GAMEPAD_BUTTON_LEFT_FACE_RIGHT): + move_x = 1.0 + elif rl.is_key_down(rl.KEY_A) or rl.is_gamepad_button_down(self.gamepad, rl.GAMEPAD_BUTTON_LEFT_FACE_LEFT): + move_x = -1.0 + + if self.movement: + self.movement.set_input(move_x, jump_pressed, jump_held) + + def draw(self) -> None: + + """Draw the object. + + Returns: + None + """ + if not self.body or not self.movement: + return + color = rl.GREEN if self.movement.grounded else rl.BLUE + pos = self.body.get_position_pixels() + rl.draw_rectangle_pro(rl.Rectangle(pos.x, pos.y, self.p.width, self.p.height), + v2(self.p.width / 2.0, self.p.height / 2.0), + 0.0, + color) diff --git a/py/engine/prefabs/includes.h b/py/engine/prefabs/includes.h new file mode 100644 index 0000000..0bfd025 --- /dev/null +++ b/py/engine/prefabs/includes.h @@ -0,0 +1,6 @@ +#pragma once + +#include "engine/prefabs/components.h" +#include "engine/prefabs/game_objects.h" +#include "engine/prefabs/managers.h" +#include "engine/prefabs/services.h" diff --git a/py/engine/prefabs/includes.py b/py/engine/prefabs/includes.py new file mode 100644 index 0000000..2956c8a --- /dev/null +++ b/py/engine/prefabs/includes.py @@ -0,0 +1,4 @@ +from engine.prefabs.components import * +from engine.prefabs.game_objects import * +from engine.prefabs.managers import * +from engine.prefabs.services import * diff --git a/py/engine/prefabs/managers.h b/py/engine/prefabs/managers.h new file mode 100644 index 0000000..ae92645 --- /dev/null +++ b/py/engine/prefabs/managers.h @@ -0,0 +1,217 @@ +#pragma once + +#include "engine/framework.h" + +/** + * For when you want multiple of the same manager. + */ +template +class MultiManager : public Manager +{ +public: + std::unordered_map> managers; + + MultiManager() = default; + + /** + * Initialize all managers. + */ + void init() override + { + for (auto& manager : managers) + { + manager.second->init_manager(); + } + Manager::init(); + } + + /** + * Add a manager to the MultiManager. + * + * @param name The name to give the manager. + * @param manager The manager to add. + */ + void add_manager(std::string name, std::unique_ptr manager) + { + static_assert(std::is_base_of::value, "T must derive from Manager"); + managers[name] = std::move(manager); + } + + /** + * Create a manager and add it to the MultiManager. + * + * @param name The name to give the manager. + * @param args The arguments to forward to the manager constructor. + * @return A pointer to the added manager. + */ + template + T* add_manager(std::string name, TArgs&&... args) + { + static_assert(std::is_base_of::value, "T must derive from Manager"); + auto new_manager = std::make_unique(std::forward(args)...); + T* manager_ptr = new_manager.get(); + add_manager(name, std::move(new_manager)); + return manager_ptr; + } + + /** + * Get a manager by name. + * + * @param name The name of the manager. + * @return A pointer to the manager. + */ + T* get_manager(std::string name) + { + return managers[name].get(); + } +}; + +/** + * Manager for handling fonts so they are not loaded multiple times. + */ +class FontManager : public Manager +{ +public: + std::unordered_map fonts; + + /** + * Constructor for FontManager. + * Loads the default font. + */ + FontManager() + { + fonts["default"] = GetFontDefault(); + } + + ~FontManager() + { + for (auto& pair : fonts) + { + UnloadFont(pair.second); + } + } + + /** + * Load a font from a file. + * + * @param name The name to associate with the font. + * @param filename The filename of the font to load. + * @param size The font size to save the font texture as. + * + * @return A reference to the loaded font. + */ + Font& load_font(const std::string& name, const std::string& filename, int size = 32) + { + if (fonts.find(name) != fonts.end()) + { + return fonts[name]; + } + + Font font = LoadFontEx(filename.c_str(), size, nullptr, 0); + fonts[name] = font; + return fonts[name]; + } + + /** + * Get a font by name. + * + * @param name The name of the font. + * @return A reference to the font. + */ + Font& get_font(const std::string& name) + { + return fonts[name]; + } + + /** + * Set the texture filter for a font. + * + * @param name The name of the font. + * @param filter The filter to set. + */ + void set_texture_filter(const std::string& name, int filter) + { + if (fonts.find(name) != fonts.end()) + { + SetTextureFilter(fonts[name].texture, filter); + } + } +}; + +/** + * Manager for handling the application window. + */ +class WindowManager : public Manager +{ +public: + int width = 1280; + int height = 720; + std::string title = "My Game"; + int target_fps = 60; + + WindowManager(int w, int h, const std::string& t, int fps = 60) : width(w), height(h), title(t), target_fps(fps) {} + + /** + * Initialize the window. + */ + void init() override + { + SetConfigFlags(FLAG_WINDOW_RESIZABLE); + InitWindow(width, height, title.c_str()); + InitAudioDevice(); + SetTargetFPS(target_fps); + + char* mappings = LoadFileText("assets/gamecontrollerdb.txt"); + SetGamepadMappings(mappings); + Manager::init(); + } + + /** + * Set the window title. + * + * @param t The new title. + */ + void set_title(const std::string& t) + { + title = t; + SetWindowTitle(title.c_str()); + } + + /** + * Get the window width. + * + * @return The window width. + */ + float get_width() const + { + return static_cast(width); + } + + /** + * Get the window height. + */ + float get_height() const + { + return static_cast(height); + } + + /** + * Get the window size. + * + * @return The window size as a Vector2. + */ + Vector2 get_size() const + { + return Vector2{(float)width, (float)height}; + } + + /** + * Get the window aspect ratio. + * + * @return The window aspect ratio. + */ + float get_aspect_ratio() const + { + return static_cast(width) / static_cast(height); + } +}; \ No newline at end of file diff --git a/py/engine/prefabs/managers.py b/py/engine/prefabs/managers.py new file mode 100644 index 0000000..dce3eab --- /dev/null +++ b/py/engine/prefabs/managers.py @@ -0,0 +1,174 @@ +from __future__ import annotations + +from typing import Any, Dict, Optional, Type +import pyray as rl + +from engine.framework import Manager + + +class MultiManager(Manager): + """Manager container for multiple managers of the same base type.""" + def __init__(self) -> None: + super().__init__() + self.managers: Dict[str, Manager] = {} + + def init(self) -> None: + """Initialize all contained managers. + + Returns: + None + """ + for manager in self.managers.values(): + manager.init_manager() + super().init() + + def add_manager(self, name: str, manager_or_cls: Any, *args: Any, **kwargs: Any) -> Manager: + """Add a manager instance or construct one from a class. + + Args: + name: Name to register the manager under. + manager_or_cls: Manager instance or Manager class. + *args: Positional args forwarded to the constructor. + **kwargs: Keyword args forwarded to the constructor. + + Returns: + The manager instance added. + """ + if isinstance(manager_or_cls, Manager): + manager = manager_or_cls + else: + manager = manager_or_cls(*args, **kwargs) + self.managers[name] = manager + return manager + + def get_manager(self, name: str) -> Optional[Manager]: + """Get a manager by name. + + Args: + name: Manager name. + + Returns: + The manager instance, or None if missing. + """ + return self.managers.get(name) + + +class FontManager(Manager): + """Manager for handling fonts so they are not loaded multiple times.""" + def __init__(self) -> None: + super().__init__() + self.fonts: Dict[str, Any] = {"default": rl.get_font_default()} + + def load_font(self, name: str, filename: str, size: int = 32) -> Any: + """Load a font from a file (cached by name). + + Args: + name: Name to register the font under. + filename: Path to the font file. + size: Font size used for the texture atlas. + + Returns: + The loaded font instance. + """ + if name in self.fonts: + return self.fonts[name] + + font = rl.load_font_ex(filename, size, None, 0) + self.fonts[name] = font + return font + + def get_font(self, name: str) -> Any: + """Get a font by name. + + Args: + name: Font name. + + Returns: + The font instance. + """ + return self.fonts[name] + + def set_texture_filter(self, name: str, texture_filter: int) -> None: + """Set the texture filter for a font. + + Args: + name: Font name. + texture_filter: Raylib texture filter enum value. + + Returns: + None + """ + if name in self.fonts: + rl.set_texture_filter(self.fonts[name].texture, texture_filter) + + +class WindowManager(Manager): + """Manager for handling the application window and audio device.""" + def __init__(self, width: int = 1280, height: int = 720, title: str = "My Game", fps: int = 60) -> None: + super().__init__() + self.width = width + self.height = height + self.title = title + self.target_fps = fps + + def init(self) -> None: + """Initialize the window and audio device. + + Returns: + None + """ + rl.set_config_flags(rl.FLAG_WINDOW_RESIZABLE) + rl.init_window(self.width, self.height, self.title) + rl.init_audio_device() + rl.set_target_fps(self.target_fps) + mappings = rl.load_file_text("assets/gamecontrollerdb.txt") + if mappings: + try: + rl.set_gamepad_mappings(mappings) + except Exception: + print("Failed to set gamepad mappings") + super().init() + + def set_title(self, title: str) -> None: + """Set the window title. + + Args: + title: New title string. + + Returns: + None + """ + self.title = title + rl.set_window_title(title) + + def get_width(self) -> float: + """Get the window width. + + Returns: + Window width in pixels. + """ + return float(self.width) + + def get_height(self) -> float: + """Get the window height. + + Returns: + Window height in pixels. + """ + return float(self.height) + + def get_size(self): + """Get the window size as a Vector2. + + Returns: + Vector2 containing width and height. + """ + return rl.Vector2(float(self.width), float(self.height)) + + def get_aspect_ratio(self) -> float: + """Get the window aspect ratio. + + Returns: + Width divided by height. + """ + return float(self.width) / float(self.height) diff --git a/py/engine/prefabs/services.h b/py/engine/prefabs/services.h new file mode 100644 index 0000000..de72906 --- /dev/null +++ b/py/engine/prefabs/services.h @@ -0,0 +1,1159 @@ +#pragma once + +#include + +#include "engine/framework.h" +#include "engine/physics_debug.h" +#include "engine/raycasts.h" + +/** + * For when you want multiple of the same service. + */ +template +class MultiService : public Service +{ +public: + std::unordered_map> services; + + MultiService() = default; + + /** + * Initialize all services. + */ + void init_service() override + { + for (auto& service : services) + { + service.second->init(); + } + Service::init_service(); + } + + /** + * Update all services. + */ + void update(float delta_time) override + { + for (auto& service : services) + { + service.second->update(); + } + Service::update(delta_time); + } + + /** + * Draw all services. + */ + void draw() override + { + for (auto& service : services) + { + service.second->draw(); + } + } + + /** + * Add a service to the MultiService. + * + * @param name The name to give the service. + * @param service The service to add. + */ + void add_service(std::string name, std::unique_ptr service) + { + static_assert(std::is_base_of::value, "T must derive from Service"); + services[name] = std::move(service); + } + + /** + * Create a service and add it to the MultiService. + * + * @param name The name to give the service. + * @param args The arguments to forward to the service constructor. + * @return A pointer to the added service. + */ + template + T* add_service(std::string name, TArgs&&... args) + { + static_assert(std::is_base_of::value, "T must derive from Service"); + auto new_service = std::make_unique(std::forward(args)...); + T* service_ptr = new_service.get(); + add_service(name, std::move(new_service)); + return service_ptr; + } + + /** + * Get a service by name. + * + * @param name The name of the service. + * @return A pointer to the service. + */ + T* get_service(std::string name) + { + return services[name].get(); + } +}; + +/** + * Service for managing textures. + * Useful when you don't want to load the same texture multiple times. + */ +class TextureService : public Service +{ +public: + std::unordered_map textures; + + TextureService() = default; + ~TextureService() + { + for (auto& pair : textures) + { + UnloadTexture(pair.second); + } + } + + /** + * Get a texture by filename. + * Loads the texture if it is not already loaded. + * + * @param filename The filename of the texture. + * @return A reference to the texture. + */ + Texture2D& get_texture(const std::string& filename) + { + if (textures.find(filename) == textures.end()) + { + Texture2D texture = LoadTexture(filename.c_str()); + textures[filename] = texture; + } + return textures[filename]; + } +}; + +/** + * Service for managing sounds. + * Useful when you don't want to load the same sound multiple times and want to play overlapping sounds. + */ +class SoundService : public Service +{ +public: + std::unordered_map> sounds; + + SoundService() = default; + ~SoundService() + { + for (auto& pair : sounds) + { + // The first sound is a real sound. + UnloadSound(pair.second[0]); + for (int i = 1; i < pair.second.size(); i++) + { + UnloadSoundAlias(pair.second[i]); + } + } + } + + /** + * Get a sound by filename. + * Loads the sound if it is not already loaded. + * Creates a new alias if the sound is already loaded to allow overlapping sounds. + * + * @param filename The filename of the sound. + * @return A reference to the sound. + */ + Sound& get_sound(const std::string& filename) + { + if (sounds.find(filename) == sounds.end()) + { + Sound sound = LoadSound(filename.c_str()); + sounds[filename] = {sound}; + } + else + { + // Create a new alias to allow overlapping sounds. + Sound sound = LoadSoundAlias(sounds[filename][0]); + sounds[filename].push_back(sound); + } + return sounds[filename].back(); + } +}; + +/** + * Service for managing the physics world. + */ +class PhysicsService : public Service +{ +public: + b2WorldId world = b2_nullWorldId; + b2Vec2 gravity = {0.0f, 10.0f}; + float time_step = 1.0f / 60.0f; + int sub_steps = 6; + float meters_to_pixels = 30.0f; + float pixels_to_meters = 1.0f / meters_to_pixels; + PhysicsDebugRenderer debug_draw; + + /** + * Constructor for PhysicsService. + * + * @param gravity The gravity vector for the physics world. + * @param time_step The time step for the physics simulation. + * @param sub_steps The number of sub-steps for the physics simulation. + * @param meters_to_pixels The scale factor from meters to pixels. + */ + PhysicsService(b2Vec2 gravity = b2Vec2{0.0f, 10.0f}, + float time_step = 1.0f / 60.0f, + int sub_steps = 6, + float meters_to_pixels = 30.0f) : + gravity(gravity), + time_step(time_step), + sub_steps(sub_steps), + meters_to_pixels(meters_to_pixels), + pixels_to_meters(1.0f / meters_to_pixels) + { + } + + ~PhysicsService() + { + if (b2World_IsValid(world)) + { + b2DestroyWorld(world); + } + } + + /** + * Initialize the physics world. + */ + void init() override + { + b2WorldDef world_def = b2DefaultWorldDef(); + world_def.gravity = gravity; + world_def.contactHertz = 120; + world = b2CreateWorld(&world_def); + debug_draw.init(meters_to_pixels); + } + + /** + * Update the physics world. + * + * @param delta_time The time elapsed since the last frame. + */ + void update(float delta_time) override + { + if (!b2World_IsValid(world)) + { + return; + } + b2World_Step(world, time_step, sub_steps); + } + + /** + * Draw the physics debug information. + */ + void draw_debug() + { + debug_draw.draw_debug(world); + } + + /** + * Convert between pixels and meters. + * + * @param meters The value in meters. + * @return The value in pixels. + */ + Vector2 convert_to_pixels(b2Vec2 meters) const + { + const auto converted = meters * meters_to_pixels; + return {converted.x, converted.y}; + } + + /** + * Convert between pixels and meters. + * + * @param pixels The value in pixels. + * @return The value in meters. + */ + b2Vec2 convert_to_meters(Vector2 pixels) const + { + const auto converted = pixels * pixels_to_meters; + return {converted.x, converted.y}; + } + + /** + * Convert a length from meters to pixels. + * + * @param meters The length in meters. + * @return The length in pixels. + */ + float convert_to_pixels(float meters) const + { + return meters * meters_to_pixels; + } + + /** + * Convert a length from pixels to meters. + * + * @param pixels The length in pixels. + * @return The length in meters. + */ + float convert_to_meters(float pixels) const + { + return pixels * pixels_to_meters; + } + + /** + * Raycast in pixels. + * + * @param ignore Box2d body to ignore. + * @param from The start point of the ray. + * @param to The end point of the ray. + * @return A RayHit struct describing the hit. + */ + RayHit raycast(b2BodyId ignore, Vector2 from, Vector2 to) + { + auto start = convert_to_meters(from); + auto translation = convert_to_meters(to - from); + + return raycast_closest(world, ignore, start, translation); + } + + /** + * Check for circle shape overlaps in pixels. + * + * @param center The center of the circle. + * @param radius The radius of the circle. + * @param ignore_body The body to ignore. + * @return A vector of body IDs that overlap with the circle. + */ + std::vector circle_overlap(Vector2 center, float radius, b2BodyId ignore_body = b2_nullBodyId) + { + auto center_m = convert_to_meters(center); + auto radius_m = convert_to_meters(radius); + return circle_hit(world, ignore_body, center_m, radius_m); + } + + /** + * Check for rectangle shape overlaps in pixels. + * + * @param rectangle The rectangle to check. + * @param rotation The rotation of the rectangle in degrees. + * @param ignore_body The body to ignore. + * @return A vector of body IDs that overlap with the rectangle. + */ + std::vector rectangle_overlap(Rectangle rectangle, + float rotation = 0.0f, + b2BodyId ignore_body = b2_nullBodyId) + { + Vector2 size = {rectangle.width, rectangle.height}; + Vector2 center = {rectangle.x + size.x / 2.0f, rectangle.y + size.y / 2.0f}; + auto size_m = convert_to_meters(size); + auto center_m = convert_to_meters(center); + return rectangle_hit(world, ignore_body, center_m, size_m, rotation); + } +}; + +/** + * Hash for ldtk::IntPoint to be used in unordered_map/set. + */ +struct IntPointHash +{ + size_t operator()(const ldtk::IntPoint& p) const noexcept + { + std::size_t h1 = std::hash{}(p.x); + std::size_t h2 = std::hash{}(p.y); + return h1 ^ (h2 << 1); + } +}; + +/** + * Undirected edge between two IntPoints, stored canonically (a < b). + */ +struct Edge +{ + ldtk::IntPoint a, b; +}; + +/** + * Equality operator for Edge. + * + * @param e1 The first edge. + * @param e2 The second edge. + * @return True if the edges are equal, false otherwise. + */ +static inline bool operator==(const Edge& e1, const Edge& e2) +{ + return e1.a == e2.a && e1.b == e2.b; +} + +/** + * Hash for Edge to be used in unordered_map/set. + */ +struct EdgeHash +{ + size_t operator()(const Edge& e) const noexcept + { + IntPointHash h; + std::size_t h1 = h(e.a); + std::size_t h2 = h(e.b); + return h1 ^ (h2 << 1); + } +}; + +struct LayerRenderer +{ + RenderTexture2D renderer; + ldtk::IID layer_iid; + bool visible = true; +}; + +/** + * Service for managing LDtk levels. + * Depends on TextureService and PhysicsService. + */ +class LevelService : public Service +{ +public: + ldtk::Project project; + std::string project_file; + std::string level_name; + std::vector collision_names; + std::vector renderers; + std::vector layer_bodies; + float scale = 1.0f; + PhysicsService* physics; + + /** + * Constructor for LevelService. + * + * @param project_file The path to the LDtk project file. + * @param level_name The name of the level to load. + * @param collision_names The names of the layers to create collision bodies for. + * @param scale The scale factor for the level. + */ + LevelService(std::string project_file, + std::string level_name, + std::vector collision_names, + float scale = 1.0f) : + project_file(project_file), + level_name(level_name), + collision_names(collision_names), + scale(scale) + { + } + + virtual ~LevelService() + { + for (auto& renderer : renderers) + { + UnloadRenderTexture(renderer.renderer); + } + + for (auto& body : layer_bodies) + { + if (b2Body_IsValid(body)) + { + b2DestroyBody(body); + } + } + } + + /** + * Initialize the level service. + * Loads the LDtk project and level, creates textures and collision bodies. + */ + void init() override + { + if (!FileExists(project_file.c_str())) + { + TraceLog(LOG_FATAL, "LDtk file not found: %s", project_file.c_str()); + } + project.loadFromFile(project_file); + const auto& world = project.getWorld(); + const auto& levels = world.allLevels(); + + bool found = false; + for (const auto& level : levels) + { + if (level.name == level_name) + { + found = true; + break; + } + } + if (!found) + { + TraceLog(LOG_FATAL, "LDtk level not found: %s", level_name.c_str()); + } + + physics = scene->get_service(); + + const auto& level = world.getLevel(level_name); + const auto& layers = level.allLayers(); + + // Loop through all layers and create textures and collisions bodies. + for (auto& layer : layers) + { + if (!layer.hasTileset()) + { + continue; + } + + // Load the texture and the renderer. + auto directory = std::string(GetDirectoryPath(project_file.c_str())); + auto tileset_file = directory + "/" + layer.getTileset().path; + if (!FileExists(tileset_file.c_str())) + { + TraceLog(LOG_FATAL, "Tileset file not found: %s", tileset_file.c_str()); + } + auto texture_service = scene->get_service(); + Texture2D texture = texture_service->get_texture(tileset_file); + RenderTexture2D renderer = LoadRenderTexture(level.size.x, level.size.y); + + // Draw all the tiles. + const auto& tiles_vector = layer.allTiles(); + BeginTextureMode(renderer); + // Clear with transparency so we can render layers on top of each other. + ClearBackground({0, 0, 0, 0}); + for (const auto& tile : tiles_vector) + { + const auto& position = tile.getPosition(); + const auto& texture_rect = tile.getTextureRect(); + Vector2 dest = { + static_cast(position.x), + static_cast(position.y), + }; + Rectangle src = {static_cast(texture_rect.x), + static_cast(texture_rect.y), + static_cast(texture_rect.width) * (tile.flipX ? -1.0f : 1.0f), + static_cast(texture_rect.height) * (tile.flipY ? -1.0f : 1.0f)}; + DrawTextureRec(texture, src, dest, WHITE); + } + EndTextureMode(); + LayerRenderer layer_renderer; + layer_renderer.renderer = renderer; + layer_renderer.layer_iid = layer.iid; + renderers.push_back(layer_renderer); + + // Create bodies. + const auto& size = layer.getGridSize(); + + auto make_edge = [&](ldtk::IntPoint p0, ldtk::IntPoint p1) -> Edge + { + if (p1.x < p0.x || (p1.x == p0.x && p1.y < p0.y)) + std::swap(p0, p1); + return {p0, p1}; + }; + + std::unordered_set edges; + + for (int y = 0; y < size.y; y++) + { + for (int x = 0; x < size.x; x++) + { + if (!is_solid(layer, x, y, size)) + continue; + + // neighbor empty => boundary edge + if (!is_solid(layer, x, y - 1, size)) + edges.insert(make_edge({x, y}, {x + 1, y})); + if (!is_solid(layer, x, y + 1, size)) + edges.insert(make_edge({x, y + 1}, {x + 1, y + 1})); + if (!is_solid(layer, x - 1, y, size)) + edges.insert(make_edge({x, y}, {x, y + 1})); + if (!is_solid(layer, x + 1, y, size)) + edges.insert(make_edge({x + 1, y}, {x + 1, y + 1})); + } + } + + std::unordered_map, IntPointHash> adj; + adj.reserve(edges.size() * 2); + + for (auto& e : edges) + { + adj[e.a].push_back(e.b); + adj[e.b].push_back(e.a); + } + + // Helper to remove an undirected edge from the set as we consume it + auto erase_edge = [&](ldtk::IntPoint p0, ldtk::IntPoint p1) { edges.erase(make_edge(p0, p1)); }; + + // Walk loops + std::vector> loops; + + while (!edges.empty()) + { + // pick an arbitrary remaining edge + Edge startE = *edges.begin(); + ldtk::IntPoint start = startE.a; + ldtk::IntPoint cur = startE.b; + ldtk::IntPoint prev = start; + + std::vector poly; + poly.push_back(start); + poly.push_back(cur); + erase_edge(start, cur); + + while (!(cur == start)) + { + // choose next neighbor that is not prev and still has an edge remaining + const auto& nbs = adj[cur]; + ldtk::IntPoint next = prev; // fallback + + bool found = false; + for (const ldtk::IntPoint& cand : nbs) + { + if (cand == prev) + continue; + if (edges.find(make_edge(cur, cand)) != edges.end()) + { + next = cand; + found = true; + break; + } + } + + if (!found) + { + // Open chain (should be rare for tile boundaries unless the boundary touches the map edge) + break; + } + + prev = cur; + cur = next; + poly.push_back(cur); + erase_edge(prev, cur); + + // safety guard to avoid infinite loops on bad topology + if (poly.size() > 100000) + break; + } + + // If closed, last vertex == start; Box2D chains usually want NOT duplicated end vertex. + if (!poly.empty() && poly.back() == poly.front()) + { + poly.pop_back(); + } + + // Only keep valid chains + if (poly.size() >= 3) + { + // If we're not solid on the right, then we wrapped the wrong way. + if (!loop_has_solid_on_right(poly, layer)) + { + std::reverse(poly.begin(), poly.end()); + } + + // Not really necessary but here we reduce the number of points on a line to just the ends. + // std::vector reduced; + // reduced.push_back(poly[0]); + // b2Vec2 original_normal = {0, 0}; + // for (int i = 1; i < poly.size(); i++) + // { + // auto first = poly[i - 1]; + // auto second = poly[i]; + // float length = sqrt((second.x - first.x) * (second.x - first.x) + + // (second.y - first.y) * (second.y - first.y)); + // b2Vec2 normal = {(second.x - first.x) / length, (second.y - first.y) / length}; + // if (length == 0) + // { + // normal = {0, 0}; + // } + // if (i == 1) + // { + // original_normal = normal; + // } + + // if (normal != original_normal) + // { + // reduced.push_back(first); + // original_normal = normal; + // } + // } + // reduced.push_back(poly.back()); + // loops.push_back(std::move(reduced)); + + loops.push_back(std::move(poly)); + } + } + + b2BodyDef bd = b2DefaultBodyDef(); + bd.type = b2_staticBody; + bd.position = {0, 0}; + assert(b2World_IsValid(physics->world)); + b2BodyId layer_body = b2CreateBody(physics->world, &bd); + + for (auto& loop : loops) + { + std::vector verts; + verts.reserve(loop.size()); + + for (auto& p : loop) + { + float xpx = p.x * layer.getCellSize() * scale; + float ypx = p.y * layer.getCellSize() * scale; + verts.push_back(physics->convert_to_meters({xpx, ypx})); + } + + std::vector mats; + for (int i = 0; i < verts.size(); i++) + { + b2SurfaceMaterial mat = b2DefaultSurfaceMaterial(); + mat.friction = 0.1f; + mat.restitution = 0.1f; + mats.push_back(mat); + } + + b2ChainDef cd = b2DefaultChainDef(); + cd.points = verts.data(); + cd.count = (int)verts.size(); + cd.materials = mats.data(); + cd.materialCount = (int)mats.size(); + cd.isLoop = true; + b2CreateChain(layer_body, &cd); + + layer_bodies.push_back(layer_body); + } + } + } + + /** + * Draw the level. + * Draws all the layer renderers. + */ + void draw() override + { + // Draw renderers in reverse. + for (int i = (int)renderers.size() - 1; i >= 0; i--) + { + const auto& layer_renderer = renderers[i]; + if (!layer_renderer.visible) + { + continue; + } + const auto& renderer = layer_renderer.renderer; + Rectangle src = {0, + 0, + static_cast(renderer.texture.width), + -static_cast(renderer.texture.height)}; + Rectangle dest = {0, + 0, + static_cast(renderer.texture.width) * scale, + static_cast(renderer.texture.height) * scale}; + DrawTexturePro(renderer.texture, src, dest, {0}, .0f, WHITE); + } + } + + /** + * Draw a specific layer by its IID. + * + * @param layer_id The IID of the layer. + */ + void draw_layer(ldtk::IID layer_id) + { + for (const auto& layer_renderer : renderers) + { + if (layer_renderer.layer_iid == layer_id) + { + const auto& renderer = layer_renderer.renderer; + Rectangle src = {0, + 0, + static_cast(renderer.texture.width), + -static_cast(renderer.texture.height)}; + Rectangle dest = {0, + 0, + static_cast(renderer.texture.width) * scale, + static_cast(renderer.texture.height) * scale}; + DrawTexturePro(renderer.texture, src, dest, {0}, .0f, WHITE); + return; + } + } + } + + /** + * Draw a specific layer by its name. + * + * @param layer_name The name of the layer. + */ + void draw_layer(std::string layer_name) + { + const auto& level = get_level(); + const auto& layer = level.getLayer(layer_name); + draw_layer(layer.iid); + } + + /** + * Check if a cell in the layer is solid. + * Used for collision generation. + * + * @param layer The LDtk layer. + * @param x The x coordinate of the cell. + * @param y The y coordinate of the cell. + * @param size The size of the layer in cells. + */ + bool is_solid(const ldtk::Layer& layer, int x, int y, const ldtk::IntPoint& size) + { + if (x < 0 || y < 0 || x >= size.x || y >= size.y) + { + return false; + } + + std::string name = layer.getIntGridVal(x, y).name; + if (std::find(collision_names.begin(), collision_names.end(), name) != collision_names.end()) + { + return true; + } + return false; + }; + + /** + * Check if there is solid on the right side of a loop of corners. + * Used to determine loop winding. + * + * @param loop_corners The corners of the loop. + * @param layer The LDtk layer. + * @return True if there is solid on the right side of the loop, false otherwise. + */ + bool loop_has_solid_on_right(const std::vector& loop_corners, const ldtk::Layer& layer) + { + const int cell_size = layer.getCellSize(); + + // Pick an edge with non-zero length. + int n = (int)loop_corners.size(); + for (int i = 0; i < n; ++i) + { + ldtk::IntPoint a = loop_corners[i]; + ldtk::IntPoint b = loop_corners[(i + 1) % n]; + int dx = b.x - a.x; + int dy = b.y - a.y; + if (dx == 0 && dy == 0) + continue; + + // Convert corner coords to scaled pixel coords. + float ax = a.x * cell_size * scale; + float ay = a.y * cell_size * scale; + float bx = b.x * cell_size * scale; + float by = b.y * cell_size * scale; + + // Edge direction. + float ex = bx - ax; + float ey = by - ay; + float len = std::sqrt(ex * ex + ey * ey); + if (len < 1e-4f) + { + continue; + } + ex /= len; + ey /= len; + + // Right normal = (-ey, ex) + float rx = -ey; + float ry = ex; + + // Midpoint of the edge. + float mx = 0.5f * (ax + bx); + float my = 0.5f * (ay + by); + + // Sample a point slightly to the right, a quarter cell away. + float eps = 0.25f * cell_size * scale; + float sx = mx + rx * eps; + float sy = my + ry * eps; + + // Map sample pixel to grid cell. + int gx = (int)std::floor(sx / (cell_size * scale)); + int gy = (int)std::floor(sy / (cell_size * scale)); + + return is_solid(layer, gx, gy, layer.getGridSize()); + } + + // Fallback: if degenerate, say false + return false; + } + + /** + * Set the visibility of a layer by its IID. + * + * @param layer_id The IID of the layer. + * @param visible True to make the layer visible, false to hide it. + */ + void set_layer_visibility(ldtk::IID layer_id, bool visible) + { + for (auto& layer_renderer : renderers) + { + if (layer_renderer.layer_iid == layer_id) + { + layer_renderer.visible = visible; + return; + } + } + } + + /** + * Set the visibility of a layer by its name. + * + * @param layer_name The name of the layer. + * @param visible True to make the layer visible, false to hide it. + */ + void set_layer_visibility(std::string layer_name, bool visible) + { + const auto& level = get_level(); + const auto& layer = level.getLayer(layer_name); + for (auto& layer_renderer : renderers) + { + if (layer_renderer.layer_iid == layer.iid) + { + layer_renderer.visible = visible; + return; + } + } + } + + /** + * Get the LDtk world. + * + * @return A reference to the LDtk world. + */ + const ldtk::World& get_world() + { + return project.getWorld(); + } + + /** + * Get the LDtk level. + * + * @return A reference to the LDtk level. + */ + const ldtk::Level& get_level() + { + const auto& world = project.getWorld(); + return world.getLevel(level_name); + } + + /** + * Get the level size in pixels. + * + * @return A Vector2 containing the size of the level. + */ + Vector2 get_size() + { + const auto& level = get_level(); + return {level.size.x * scale, level.size.y * scale}; + } + + /** + * Get a layer by its name. + * + * @param name The name of the layer. + * @return A reference to the LDtk layer. + */ + const ldtk::Layer& get_layer_by_name(const std::string& name) + { + const auto& level = get_level(); + return level.getLayer(name); + } + + /** + * Get all entities across all layers in the level. + * + * @return A vector of LDtk entities. + */ + std::vector get_entities() + { + if (!is_init) + { + TraceLog(LOG_ERROR, "LDtk project not loaded."); + return {}; + } + const auto& level = get_level(); + const auto& layers = level.allLayers(); + + std::vector entities; + + for (const auto& layer : layers) + { + const auto& layer_entities = layer.allEntities(); + + entities.reserve(entities.size() + layer_entities.size()); + for (const auto& entity : layer_entities) + { + entities.push_back(&entity); + } + } + + return entities; + } + + /** + * Get all entities across all layers in the level with the given name. + * + * @param name The name of the entities to get. + * @return A vector of LDtk entities. + */ + std::vector get_entities_by_name(const std::string& name) + { + if (!is_init) + { + TraceLog(LOG_ERROR, "LDtk project not loaded."); + return {}; + } + const auto& level = get_level(); + const auto& layers = level.allLayers(); + + std::vector entities; + + for (const auto& layer : layers) + { + const auto& layer_entities = layer.getEntitiesByName(name); + + entities.reserve(entities.size() + layer_entities.size()); + for (const auto& entity : layer_entities) + { + entities.push_back(&entity.get()); + } + } + + return entities; + } + + /** + * Get all entities across all layers in the level with the given tag. + * + * @param tag The tag of the entities to get. + * @return A vector of LDtk entities. + */ + std::vector get_entities_by_tag(const std::string& tag) + { + if (!is_init) + { + TraceLog(LOG_ERROR, "LDtk project not loaded."); + return {}; + } + const auto& level = get_level(); + const auto& layers = level.allLayers(); + + std::vector entities; + + for (const auto& layer : layers) + { + const auto& layer_entities = layer.getEntitiesByTag(tag); + + entities.reserve(entities.size() + layer_entities.size()); + for (const auto& entity : layer_entities) + { + entities.push_back(&entity.get()); + } + } + + return entities; + } + + /** + * Get the first entity across all layers in the level with the given name. + * + * @param name The name of the entity to get. + * @return A pointer to the LDtk entity, or nullptr if not found. + */ + const ldtk::Entity* get_entity_by_name(const std::string& name) + { + auto entities = get_entities_by_name(name); + if (entities.empty()) + { + return nullptr; + } + + return entities[0]; + } + + /** + * Get the first entity across all layers in the level with the given tag. + * + * @param tag The tag of the entity to get. + * @return A pointer to the LDtk entity, or nullptr if not found. + */ + const ldtk::Entity* get_entity_by_tag(const std::string& tag) + { + auto entities = get_entities_by_tag(tag); + if (entities.empty()) + { + return nullptr; + } + + return entities[0]; + } + + /** + * Convert a grid point to pixels. + * + * @param point The grid point to convert. + * @return A Vector2 containing the point in pixels. + */ + Vector2 convert_to_pixels(const ldtk::IntPoint& point) const + { + return {point.x * scale, point.y * scale}; + } + + /** + * Convert a cell point to pixels. + * + * @param cell_point The cell point to convert. + * @param layer The LDtk layer the cell point is in. + */ + Vector2 convert_cells_to_pixels(const ldtk::IntPoint& cell_point, const ldtk::Layer& layer) const + { + float cell_size = static_cast(layer.getCellSize()); + return {cell_point.x * cell_size * scale, cell_point.y * cell_size * scale}; + } + + /** + * Convert a grid point to meters. + * + * @param point The grid point to convert. + * @return A b2Vec2 containing the point in meters. + */ + b2Vec2 convert_to_meters(const ldtk::IntPoint& point) const + { + return physics->convert_to_meters(convert_to_pixels(point)); + } + + /** + * Convert pixels to a grid point. + * + * @param pixels The pixel position to convert. + * @return An IntPoint containing the point in grid coordinates. + */ + ldtk::IntPoint convert_to_grid(const Vector2& pixels) const + { + return {static_cast(pixels.x / scale), static_cast(pixels.y / scale)}; + } + + /** + * Convert meters to a grid point. + * + * @param meters The meter position to convert. + * @return An IntPoint containing the point in grid coordinates. + */ + ldtk::IntPoint convert_to_grid(const b2Vec2& meters) const + { + auto pixels = physics->convert_to_pixels(meters); + return {static_cast(pixels.x / scale), static_cast(pixels.y / scale)}; + } + + /** + * Get the position of an entity in pixels. + * + * @param entity The entity to get the position of. + * @return A Vector2 containing the position of the entity in pixels. + */ + Vector2 get_entity_position(ldtk::Entity* entity) + { + return convert_to_pixels(entity->getPosition()); + } + + /** + * Get the size of an entity in pixels. + * + * @param entity The entity to get the size of. + * @return A Vector2 containing the size of the entity in pixels. + */ + Vector2 get_entity_size(ldtk::Entity* entity) + { + return convert_to_pixels(entity->getSize()); + } +}; diff --git a/py/engine/prefabs/services.py b/py/engine/prefabs/services.py new file mode 100644 index 0000000..5732d28 --- /dev/null +++ b/py/engine/prefabs/services.py @@ -0,0 +1,798 @@ +from __future__ import annotations + +import json +import math +from dataclasses import dataclass +from typing import Any, Dict, List, Optional + +from Box2D import (b2Body, b2CircleShape, b2EdgeShape, b2FixtureDef, + b2PolygonShape, b2Vec2, b2World) +import pyray as rl + +from engine.framework import Service +from engine.math_extensions import v2 +from engine.physics_debug import PhysicsDebugRenderer +from engine.raycasts import circle_hit, raycast_closest, rectangle_hit +from engine.LdtkJson import LdtkJSON, Level, LayerInstance, GridPoint + + +class MultiService(Service): + """Service container for multiple services of the same base type. + + Attributes: + services: Mapping of service name to instance. + """ + def __init__(self) -> None: + super().__init__() + self.services: Dict[str, Service] = {} + + def init_service(self) -> None: + """Initialize all contained services. + + Returns: + None + """ + for service in self.services.values(): + service.init() + super().init_service() + + def update(self, delta_time: float) -> None: + """Update all contained services. + + Args: + delta_time: Seconds since the last frame. + + Returns: + None + """ + for service in self.services.values(): + service.update(delta_time) + super().update(delta_time) + + def draw(self) -> None: + """Draw all contained services. + + Returns: + None + """ + for service in self.services.values(): + service.draw() + + def add_service(self, name: str, service_or_cls: Any, *args: Any, **kwargs: Any) -> Service: + """Add a service instance or construct one from a class. + + Args: + name: Name to register the service under. + service_or_cls: A Service instance or Service class. + *args: Positional args forwarded to the constructor. + **kwargs: Keyword args forwarded to the constructor. + + Returns: + The service instance added. + """ + if isinstance(service_or_cls, Service): + service = service_or_cls + else: + service = service_or_cls(*args, **kwargs) + self.services[name] = service + return service + + def get_service(self, name: str) -> Optional[Service]: + """Get a service by name. + + Args: + name: Registered name of the service. + + Returns: + The service instance, or None if missing. + """ + return self.services.get(name) + + +class TextureService(Service): + """Cache textures so they are loaded once. + + Attributes: + textures: Mapping of filename to loaded Texture2D. + """ + def __init__(self) -> None: + super().__init__() + self.textures: Dict[str, rl.Texture2D] = {} + + def get_texture(self, filename: str) -> rl.Texture2D: + """Get or load a texture by filename. + + Args: + filename: Path to the texture file. + + Returns: + The loaded Texture2D. + """ + + if filename not in self.textures: + self.textures[filename] = rl.load_texture(filename) + return self.textures[filename] + + +class SoundService(Service): + """Cache sounds and create aliases for overlapping playback. + + Attributes: + sounds: Mapping of filename to a list of Sound aliases. + """ + def __init__(self) -> None: + super().__init__() + self.sounds: Dict[str, List[Any]] = {} + + def get_sound(self, filename: str): + """Get or load a sound; returns an alias if already loaded. + + Args: + filename: Path to the sound file. + + Returns: + A Sound instance (original or alias). + """ + + if filename not in self.sounds: + self.sounds[filename] = [rl.load_sound(filename)] + else: + self.sounds[filename].append(rl.load_sound_alias(self.sounds[filename][0])) + return self.sounds[filename][-1] + + +class PhysicsService(Service): + """Service that owns the Box2D world and physics configuration.""" + def __init__(self, + gravity: b2Vec2 = b2Vec2(0.0, 10.0), + time_step: float = 1.0 / 60.0, + sub_steps: int = 6, + meters_to_pixels: float = 30.0) -> None: + super().__init__() + self.gravity = gravity + self.time_step = time_step + self.sub_steps = sub_steps + self.meters_to_pixels = meters_to_pixels + self.pixels_to_meters = 1.0 / meters_to_pixels + self.world: Optional[b2World] = None + self.debug_draw = PhysicsDebugRenderer(meters_to_pixels=meters_to_pixels) + + def init(self) -> None: + """Create the Box2D world. + + Returns: + None + """ + self.world = b2World(gravity=self.gravity, doSleep=True) + self.world.contactListener = None + self.world.renderer = self.debug_draw + + def update(self, delta_time: float) -> None: + """Step the physics world. + + Args: + delta_time: Seconds since the last frame (unused by fixed-step). + + Returns: + None + """ + if not self.world: + return + self.world.Step(self.time_step, self.sub_steps, self.sub_steps) + + def draw_debug(self) -> None: + """Draw debug shapes for the physics world. + + Returns: + None + """ + if self.world: + self.world.DrawDebugData() + + def convert_to_pixels(self, meters: b2Vec2) -> b2Vec2: + """Convert meters to pixels. + + Args: + meters: Vector in meters. + + Returns: + Vector in pixels. + """ + return b2Vec2(meters.x * self.meters_to_pixels, meters.y * self.meters_to_pixels) + + def convert_to_meters(self, pixels) -> b2Vec2: + """Convert pixels to meters. + + Args: + pixels: Vector in pixels. + + Returns: + Vector in meters. + """ + return b2Vec2(pixels.x * self.pixels_to_meters, pixels.y * self.pixels_to_meters) + + def convert_length_to_pixels(self, meters: float) -> float: + """Convert a length in meters to pixels. + + Args: + meters: Length in meters. + + Returns: + Length in pixels. + """ + return meters * self.meters_to_pixels + + def convert_length_to_meters(self, pixels: float) -> float: + """Convert a length in pixels to meters. + + Args: + pixels: Length in pixels. + + Returns: + Length in meters. + """ + return pixels * self.pixels_to_meters + + def raycast(self, ignore: Optional[b2Body], start, end): + """Raycast in pixel units. + + Args: + ignore: Body to ignore during raycast. + start: Start position in pixels. + end: End position in pixels. + + Returns: + RayHit if world exists, otherwise None. + """ + if not self.world: + return None + origin = self.convert_to_meters(start) + translation = self.convert_to_meters(v2(end.x - start.x, end.y - start.y)) + return raycast_closest(self.world, ignore, origin, translation) + + def circle_overlap(self, center, radius: float, ignore_body: Optional[b2Body] = None): + """Overlap query for a circle in pixel units. + + Args: + center: Center in pixels. + radius: Radius in pixels. + ignore_body: Optional body to ignore. + + Returns: + List of bodies overlapping the circle. + """ + if not self.world: + return [] + center_m = self.convert_to_meters(center) + radius_m = self.convert_length_to_meters(radius) + return circle_hit(self.world, ignore_body, center_m, radius_m) + + def rectangle_overlap(self, rectangle, rotation: float = 0.0, ignore_body: Optional[b2Body] = None): + """Overlap query for a rectangle in pixel units. + + Args: + rectangle: Rectangle in pixels. + rotation: Rotation in radians. + ignore_body: Optional body to ignore. + + Returns: + List of bodies overlapping the rectangle. + """ + if not self.world: + return [] + size = v2(rectangle.width, rectangle.height) + center = v2(rectangle.x + size.x / 2.0, rectangle.y + size.y / 2.0) + size_m = self.convert_to_meters(size) + center_m = self.convert_to_meters(center) + return rectangle_hit(self.world, ignore_body, center_m, size_m, rotation) + + +@dataclass(frozen=True) +class IntPoint: + x: int + y: int + + +class LdtkEntity: + """Thin wrapper around an LDtk entity instance.""" + def __init__(self, entity) -> None: + self.entity = entity + + def getPosition(self) -> IntPoint: + """Get entity position in pixels. + + Returns: + IntPoint for the entity position. + """ + return IntPoint(self.entity.px[0], self.entity.px[1]) + + def getSize(self) -> IntPoint: + """Get entity size in pixels. + + Returns: + IntPoint for the entity size. + """ + return IntPoint(self.entity.width, self.entity.height) + + def getField(self, name: str) -> Optional[Any]: + """Get a field value by name. + + Args: + name: Field identifier. + + Returns: + Field value, converted for point fields when possible. + """ + for field in self.entity.field_instances: + if field.identifier == name: + value = field.value + if isinstance(value, dict) and "cx" in value and "cy" in value: + return IntPoint(int(value["cx"]), int(value["cy"])) + return value + return None + + +@dataclass +class LayerRenderer: + renderer: rl.RenderTexture + layer_iid: str + visible: bool = True + + +class LevelService(Service): + """Service for loading and drawing LDtk levels and collisions. + + Attributes: + project: Parsed LDtk project. + level: Active Level instance. + renderers: Render textures per layer. + layer_bodies: Physics bodies used for collision. + physics: PhysicsService reference. + """ + def __init__(self, + project_file: str, + level_name: str, + collision_names: List[str], + scale: float = 1.0) -> None: + super().__init__() + self.project_file = project_file + self.level_name = level_name + self.collision_names = collision_names + self.scale = scale + self.project: Optional[LdtkJSON] = None + self.level: Optional[Level] = None + self.renderers: List[LayerRenderer] = [] + self.layer_bodies: List[b2Body] = [] + self.physics: Optional[PhysicsService] = None + self.layer_defs_by_uid: Dict[int, Any] = {} + + def init(self) -> None: + """Load the LDtk project, build renderers and collision bodies. + + Returns: + None + """ + if not rl.file_exists(self.project_file): + print(f"LDtk file not found: {self.project_file}") + raise RuntimeError("LDtk file not found") + + with open(self.project_file, "r", encoding="utf-8") as handle: + project_data = json.load(handle) + self.project = LdtkJSON.from_dict(project_data) + + level = None + for candidate in self.project.levels: + if candidate.identifier == self.level_name: + level = candidate + break + if level is None: + print(f"LDtk level not found: {self.level_name}") + raise RuntimeError("LDtk level not found") + + if level.layer_instances is None and level.external_rel_path: + external_path = self._resolve_external_level_path(level.external_rel_path) + with open(external_path, "r", encoding="utf-8") as handle: + external_data = json.load(handle) + level = Level.from_dict(external_data) + + self.level = level + self.layer_defs_by_uid = {layer.uid: layer for layer in self.project.defs.layers} + + self.physics = self.scene.get_service(PhysicsService) if self.scene else None + if not self.physics: + print("PhysicsService required for LevelService") + raise RuntimeError("PhysicsService required") + + texture_service = self.scene.get_service(TextureService) + for layer in self.level.layer_instances or []: + if layer.tileset_rel_path: + tileset_path = self._resolve_tileset_path(layer.tileset_rel_path) + texture = texture_service.get_texture(tileset_path) + renderer = rl.load_render_texture(self.level.px_wid, self.level.px_hei) + self._render_layer_tiles(layer, texture, renderer) + self.renderers.append(LayerRenderer(renderer=renderer, layer_iid=layer.iid, visible=layer.visible)) + + if layer.type == "IntGrid" and self.collision_names: + self._build_collision_for_layer(layer) + + def _resolve_tileset_path(self, rel_path: str) -> str: + """Resolve a tileset path relative to the project file. + + Args: + rel_path: Relative tileset path from the LDtk project. + + Returns: + Absolute or normalized tileset path. + """ + import os + + directory = os.path.dirname(self.project_file) + return os.path.join(directory, rel_path).replace("\\", "/") + + def _resolve_external_level_path(self, rel_path: str) -> str: + """Resolve an external level path relative to the project file. + + Args: + rel_path: Relative level path from the LDtk project. + + Returns: + Absolute or normalized level path. + """ + import os + + directory = os.path.dirname(self.project_file) + return os.path.join(directory, rel_path).replace("\\", "/") + + def _render_layer_tiles(self, layer: LayerInstance, texture: rl.Texture2D, renderer: rl.RenderTexture) -> None: + """Render the tiles for a layer to a render texture. + + Args: + layer: Layer instance to render. + texture: Tileset texture. + renderer: Render texture target. + + Returns: + None + """ + rl.begin_texture_mode(renderer) + rl.clear_background(rl.Color(0, 0, 0, 0)) + + tile_size = layer.grid_size + tiles = list(layer.grid_tiles) + list(layer.auto_layer_tiles) + for tile in tiles: + src_x, src_y = tile.src[0], tile.src[1] + flip_x = (tile.f & 1) != 0 + flip_y = (tile.f & 2) != 0 + src = rl.Rectangle(float(src_x), float(src_y), + float(tile_size) * (-1.0 if flip_x else 1.0), + float(tile_size) * (-1.0 if flip_y else 1.0)) + dest = v2(float(tile.px[0] + layer.px_total_offset_x), float(tile.px[1] + layer.px_total_offset_y)) + rl.draw_texture_rec(texture, src, dest, rl.WHITE) + + rl.end_texture_mode() + + def _intgrid_value_name(self, layer: LayerInstance, value: int) -> Optional[str]: + """Map an IntGrid value to its identifier string. + + Args: + layer: Layer instance with IntGrid definitions. + value: Raw IntGrid value. + + Returns: + Identifier string or None if empty/unknown. + """ + if value == 0: + return None + layer_def = self.layer_defs_by_uid.get(layer.layer_def_uid) + if not layer_def: + return None + for def_value in layer_def.int_grid_values: + if def_value.value == value: + return def_value.identifier + return None + + def _build_collision_for_layer(self, layer: LayerInstance) -> None: + """Create boundary colliders for a collision layer. + + Args: + layer: Layer instance to build colliders for. + + Returns: + None + """ + if not self.physics or not self.physics.world: + return + world = self.physics.world + body = world.CreateStaticBody(position=(0, 0)) + grid_w = layer.c_wid + grid_h = layer.c_hei + cell_size = float(layer.grid_size) * self.scale + # Build boundary edges into chain shapes to avoid internal collisions. + def is_solid(cx: int, cy: int) -> bool: + if cx < 0 or cy < 0 or cx >= grid_w or cy >= grid_h: + return False + idx = cy * grid_w + cx + value = layer.int_grid_csv[idx] if idx < len(layer.int_grid_csv) else 0 + name = self._intgrid_value_name(layer, value) + return bool(name and name in self.collision_names) + + def make_edge(a, b): + return (a, b) if a <= b else (b, a) + + edges = set() + for y in range(grid_h): + for x in range(grid_w): + if not is_solid(x, y): + continue + if not is_solid(x, y - 1): + edges.add(make_edge((x, y), (x + 1, y))) + if not is_solid(x, y + 1): + edges.add(make_edge((x, y + 1), (x + 1, y + 1))) + if not is_solid(x - 1, y): + edges.add(make_edge((x, y), (x, y + 1))) + if not is_solid(x + 1, y): + edges.add(make_edge((x + 1, y), (x + 1, y + 1))) + + adj: Dict[tuple, List[tuple]] = {} + for a, b in edges: + adj.setdefault(a, []).append(b) + adj.setdefault(b, []).append(a) + + def erase_edge(a, b): + edges.discard(make_edge(a, b)) + + loops: List[List[tuple]] = [] + while edges: + start_a, start_b = next(iter(edges)) + start = start_a + cur = start_b + prev = start + poly = [start, cur] + erase_edge(start, cur) + + while cur != start: + next_pt = None + for cand in adj.get(cur, []): + if cand == prev: + continue + if make_edge(cur, cand) in edges: + next_pt = cand + break + if next_pt is None: + break + prev, cur = cur, next_pt + poly.append(cur) + erase_edge(prev, cur) + if len(poly) > 100000: + break + + if poly and poly[0] == poly[-1]: + poly.pop() + if len(poly) >= 3: + loops.append(poly) + + for loop in loops: + verts = [] + for cx, cy in loop: + x_px = cx * cell_size + y_px = cy * cell_size + verts.append(self.physics.convert_to_meters(v2(x_px, y_px))) + count = len(verts) + if count < 2: + continue + for i in range(count): + v1 = verts[i] + v2p = verts[(i + 1) % count] + edge = b2EdgeShape(vertices=[(float(v1.x), float(v1.y)), (float(v2p.x), float(v2p.y))]) + body.CreateFixture(shape=edge, friction=0.1, restitution=0.1) + self.layer_bodies.append(body) + + def draw(self) -> None: + """Draw all visible layer renderers in reverse order. + + Returns: + None + """ + for renderer in reversed(self.renderers): + if not renderer.visible: + continue + texture = renderer.renderer.texture + src = rl.Rectangle(0.0, 0.0, float(texture.width), -float(texture.height)) + dest = rl.Rectangle(0.0, 0.0, float(texture.width) * self.scale, float(texture.height) * self.scale) + rl.draw_texture_pro(texture, src, dest, v2(0.0, 0.0), 0.0, rl.WHITE) + + def draw_layer(self, layer_id_or_name: str) -> None: + """Draw a specific layer by IID or identifier. + + Args: + layer_id_or_name: Layer IID or identifier. + + Returns: + None + """ + if not self.level: + return + layer = None + for layer_inst in self.level.layer_instances or []: + if layer_inst.iid == layer_id_or_name or layer_inst.identifier == layer_id_or_name: + layer = layer_inst + break + if not layer: + return + for renderer in self.renderers: + if renderer.layer_iid == layer.iid: + texture = renderer.renderer.texture + src = rl.Rectangle(0.0, 0.0, float(texture.width), -float(texture.height)) + dest = rl.Rectangle(0.0, 0.0, float(texture.width) * self.scale, float(texture.height) * self.scale) + rl.draw_texture_pro(texture, src, dest, v2(0.0, 0.0), 0.0, rl.WHITE) + return + + def set_layer_visibility(self, layer_id_or_name: str, visible: bool) -> None: + """Set a layer's visibility by IID or identifier. + + Args: + layer_id_or_name: Layer IID or identifier. + visible: True to show the layer, False to hide it. + + Returns: + None + """ + if not self.level: + return + for layer_inst in self.level.layer_instances or []: + if layer_inst.iid == layer_id_or_name or layer_inst.identifier == layer_id_or_name: + for renderer in self.renderers: + if renderer.layer_iid == layer_inst.iid: + renderer.visible = visible + return + + def get_layer_by_name(self, name: str) -> Optional[LayerInstance]: + """Get a layer instance by name. + + Args: + name: Layer identifier. + + Returns: + The LayerInstance or None. + """ + if not self.level: + return None + for layer in self.level.layer_instances or []: + if layer.identifier == name: + return layer + return None + + def get_entities(self) -> List[LdtkEntity]: + """Get all entities across all layers. + + Returns: + List of LdtkEntity wrappers. + """ + if not self.level: + print("LDtk project not loaded.") + return [] + entities: List[LdtkEntity] = [] + for layer in self.level.layer_instances or []: + if layer.type != "Entities": + continue + for entity in layer.entity_instances: + entities.append(LdtkEntity(entity)) + return entities + + def get_entities_by_name(self, name: str) -> List[LdtkEntity]: + """Get all entities by name across all layers. + + Args: + name: Entity identifier. + + Returns: + List of matching entities. + """ + return [entity for entity in self.get_entities() if entity.entity.identifier == name] + + def get_entities_by_tag(self, tag: str) -> List[LdtkEntity]: + """Get all entities by tag across all layers. + + Args: + tag: Tag string. + + Returns: + List of matching entities. + """ + return [entity for entity in self.get_entities() if tag in entity.entity.tags] + + def get_entity_by_name(self, name: str) -> Optional[LdtkEntity]: + """Get the first entity by name. + + Args: + name: Entity identifier. + + Returns: + The first matching entity, or None. + """ + entities = self.get_entities_by_name(name) + return entities[0] if entities else None + + def get_entity_by_tag(self, tag: str) -> Optional[LdtkEntity]: + """Get the first entity by tag. + + Args: + tag: Tag string. + + Returns: + The first matching entity, or None. + """ + entities = self.get_entities_by_tag(tag) + return entities[0] if entities else None + + def convert_to_pixels(self, point: IntPoint) -> Any: + """Convert grid point to pixels. + + Args: + point: Grid point. + + Returns: + Vector2 in pixels. + """ + return v2(point.x * self.scale, point.y * self.scale) + + def convert_cells_to_pixels(self, cell_point: IntPoint, layer: LayerInstance): + """Convert cell coordinates to pixels. + + Args: + cell_point: Cell coordinates. + layer: Layer instance for cell size. + + Returns: + Vector2 in pixels. + """ + cell_size = float(layer.grid_size) + return v2(cell_point.x * cell_size * self.scale, cell_point.y * cell_size * self.scale) + + def convert_to_meters(self, point: IntPoint): + """Convert grid point to meters. + + Args: + point: Grid point. + + Returns: + b2Vec2 in meters. + """ + if not self.physics: + return b2Vec2(0.0, 0.0) + return self.physics.convert_to_meters(self.convert_to_pixels(point)) + + def convert_to_grid(self, pixels) -> IntPoint: + """Convert pixels to grid coordinates. + + Args: + pixels: Vector2 in pixels. + + Returns: + IntPoint grid coordinate. + """ + return IntPoint(int(pixels.x / self.scale), int(pixels.y / self.scale)) + + def convert_to_grid_meters(self, meters) -> IntPoint: + """Convert meters to grid coordinates. + + Args: + meters: b2Vec2 in meters. + + Returns: + IntPoint grid coordinate. + """ + if not self.physics: + return IntPoint(0, 0) + pixels = self.physics.convert_to_pixels(meters) + return IntPoint(int(pixels.x / self.scale), int(pixels.y / self.scale)) + + def get_size(self): + """Get level size in pixels. + + Returns: + Vector2 containing level width and height in pixels. + """ + if not self.level: + return v2(0.0, 0.0) + return v2(float(self.level.px_wid) * self.scale, float(self.level.px_hei) * self.scale) diff --git a/py/engine/raycasts.py b/py/engine/raycasts.py new file mode 100644 index 0000000..960a659 --- /dev/null +++ b/py/engine/raycasts.py @@ -0,0 +1,189 @@ +from __future__ import annotations + +from dataclasses import dataclass +from typing import List, Optional + +from Box2D import (b2AABB, b2Body, b2CircleShape, b2PolygonShape, b2QueryCallback, + b2RayCastCallback, b2Transform, b2Vec2, b2TestOverlap) + + +@dataclass +class RayHit: + """Raycast hit data. + + Attributes: + hit: True if the ray hit something. + body: The body hit, if any. + fraction: Fraction along the ray where the hit occurred. + distance: Distance along the ray in world units. + point: World-space hit point. + normal: World-space hit normal. + """ + hit: bool = False + body: Optional[b2Body] = None + fraction: float = 1.0 + distance: float = 0.0 + point: b2Vec2 = b2Vec2(0.0, 0.0) + normal: b2Vec2 = b2Vec2(0.0, 0.0) + + +class _RayCastClosest(b2RayCastCallback): + def __init__(self, ignore_body: Optional[b2Body], translation: b2Vec2, result: RayHit) -> None: + super().__init__() + self.ignore_body = ignore_body + self.translation = translation + self.result = result + + def ReportFixture(self, fixture, point, normal, fraction): # noqa: N802 + if self.ignore_body is not None and fixture.body == self.ignore_body: + return 1.0 + if fraction < self.result.fraction: + self.result.hit = True + self.result.fraction = fraction + self.result.distance = self.translation.length * fraction + self.result.point = point + self.result.normal = normal + self.result.body = fixture.body + return fraction + + +def raycast_closest(world, ignore_body: Optional[b2Body], origin: b2Vec2, translation: b2Vec2) -> RayHit: + """Cast a ray and return the closest hit. + + Args: + world: Box2D world to query. + ignore_body: Optional body to ignore. + origin: Ray start in world units. + translation: Ray delta in world units. + + Returns: + RayHit data for the closest hit (or empty hit if none). + """ + result = RayHit() + callback = _RayCastClosest(ignore_body, translation, result) + world.RayCast(callback, origin, origin + translation) + return result + + +def raycast_all(world, ignore_body: Optional[b2Body], origin: b2Vec2, translation: b2Vec2) -> List[RayHit]: + """Cast a ray and return all hits. + + Args: + world: Box2D world to query. + ignore_body: Optional body to ignore. + origin: Ray start in world units. + translation: Ray delta in world units. + + Returns: + List of RayHit results. + """ + hits: List[RayHit] = [] + + class _RayCastAll(b2RayCastCallback): + def __init__(self, ignore: Optional[b2Body], translation_vec: b2Vec2) -> None: + super().__init__() + self.ignore = ignore + self.translation_vec = translation_vec + + def ReportFixture(self, fixture, point, normal, fraction): # noqa: N802 + if self.ignore is not None and fixture.body == self.ignore: + return 1.0 + hit = RayHit(True, fixture.body, fraction, self.translation_vec.length * fraction, point, normal) + hits.append(hit) + return fraction + + world.RayCast(_RayCastAll(ignore_body, translation), origin, origin + translation) + return hits + + +def _aabb_for_circle(center: b2Vec2, radius: float) -> b2AABB: + lower = b2Vec2(center.x - radius, center.y - radius) + upper = b2Vec2(center.x + radius, center.y + radius) + return b2AABB(lowerBound=lower, upperBound=upper) + + +def _aabb_for_box(center: b2Vec2, half_w: float, half_h: float, angle: float) -> b2AABB: + # Conservative AABB for rotated box + import math + + cos_a = abs(math.cos(angle)) + sin_a = abs(math.sin(angle)) + extent_x = half_w * cos_a + half_h * sin_a + extent_y = half_w * sin_a + half_h * cos_a + lower = b2Vec2(center.x - extent_x, center.y - extent_y) + upper = b2Vec2(center.x + extent_x, center.y + extent_y) + return b2AABB(lowerBound=lower, upperBound=upper) + + +def shape_hit(world, ignore_body: Optional[b2Body], shape, transform: b2Transform) -> List[b2Body]: + """Query overlaps for a shape and return hit bodies. + + Args: + world: Box2D world to query. + ignore_body: Optional body to ignore. + shape: Box2D shape to test. + transform: Transform for the shape. + + Returns: + List of bodies overlapping the shape. + """ + aabb = shape.getAABB(transform, 0) + hits: List[b2Body] = [] + + class _QueryCallback(b2QueryCallback): + def __init__(self, ignore: Optional[b2Body]) -> None: + super().__init__() + self.ignore = ignore + + def ReportFixture(self, fixture): # noqa: N802 + body = fixture.body + if self.ignore is not None and body == self.ignore: + return True + if b2TestOverlap(shape, 0, fixture.shape, 0, transform, fixture.body.transform): + if body not in hits: + hits.append(body) + return True + + world.QueryAABB(_QueryCallback(ignore_body), aabb) + return hits + + +def circle_hit(world, ignore_body: Optional[b2Body], center: b2Vec2, radius: float) -> List[b2Body]: + """Check for circle overlaps in the world. + + Args: + world: Box2D world to query. + ignore_body: Optional body to ignore. + center: Circle center in world units. + radius: Circle radius in world units. + + Returns: + List of bodies overlapping the circle. + """ + shape = b2CircleShape(radius=radius, pos=b2Vec2(0.0, 0.0)) + transform = b2Transform() + transform.position = center + transform.angle = 0.0 + return shape_hit(world, ignore_body, shape, transform) + + +def rectangle_hit(world, ignore_body: Optional[b2Body], center: b2Vec2, size: b2Vec2, rotation: float = 0.0) -> List[b2Body]: + """Check for rectangle overlaps in the world. + + Args: + world: Box2D world to query. + ignore_body: Optional body to ignore. + center: Rectangle center in world units. + size: Rectangle size in world units. + rotation: Rotation in radians. + + Returns: + List of bodies overlapping the rectangle. + """ + half_w = size.x / 2.0 + half_h = size.y / 2.0 + shape = b2PolygonShape(box=(half_w, half_h)) + transform = b2Transform() + transform.position = center + transform.angle = rotation + return shape_hit(world, ignore_body, shape, transform) diff --git a/py/main.py b/py/main.py new file mode 100644 index 0000000..c510bb2 --- /dev/null +++ b/py/main.py @@ -0,0 +1,39 @@ +import pyray as rl + +from engine.framework import Game +from engine.prefabs.managers import FontManager, WindowManager +from samples.collecting_game import CollectingScene +from samples.fighting_game import FightingScene +from samples.zombie_game import ZombieScene +from samples.title_screen import TitleScreen + + +game = Game() + + +def update() -> None: + delta_time = rl.get_frame_time() + game.update(delta_time) + + +def main() -> int: + game.add_manager(WindowManager, 1280, 720, "Game Jam Kit") + font_manager = game.add_manager(FontManager) + game.init() + + font_manager.load_font("Roboto", "assets/fonts/Roboto.ttf", 64) + font_manager.load_font("Tiny5", "assets/fonts/Tiny5.ttf", 64) + font_manager.set_texture_filter("Roboto", 4) + + game.add_scene("title", TitleScreen) + game.add_scene("fighting", FightingScene) + game.add_scene("collecting", CollectingScene) + game.add_scene("zombie", ZombieScene) + + while not rl.window_should_close(): + update() + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/py/requirements.txt b/py/requirements.txt new file mode 100644 index 0000000..0c37b71 --- /dev/null +++ b/py/requirements.txt @@ -0,0 +1,2 @@ +raylib +Box2D diff --git a/py/samples/__init__.py b/py/samples/__init__.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/py/samples/__init__.py @@ -0,0 +1 @@ + diff --git a/py/samples/__pycache__/__init__.cpython-313.pyc b/py/samples/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0e6372cd3ebca6338fc66b8a01449436a69f7df6 GIT binary patch literal 179 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

2}sNR1|Xeq--2P8y{|m8ZXM$I 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 literal 0 HcmV?d00001 diff --git a/py/samples/__pycache__/title_screen.cpython-313.pyc b/py/samples/__pycache__/title_screen.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..79bd74241ce3de68d00cf8dd7140cdc02baf8501 GIT binary patch literal 3102 zcmbUjTWlM}cGljt*RRHTv zO`A$c{X!`Z6+SA2gv4)=kSJfk7kn0pk8A>RG&e{{m-~^winO|Xa%R_?Y@%{OjCRk= zoH=vmyl1vksW^i6-8*mU-$)4khfn+lbGL1uf$la^kt&oB6`&85Ld7r*XE`oh5{nX* z+_6}S6r(hnMFVIUsZs{1kvVBR?6IM8T~MN1d@`*FEcC`d0ZM9>7z751Gp1pm(+sUn zXw}=`!BA(ieG&$*fgE$L3^b$)G(3Y&2x=&UUYDt;hBJstst7Q`&!$l|Lgg9syg*}5 zASKEY72R$SwMq#wwq)Q|6*|0m$ED=|_9+0TgxhEqdaqT48T2YxW4trxy3U}6FB#Yc zW*sdNsv{*deLZ9`E?W5N3pO)W`1js^C+Ay?1uG z_GXc?Id9sgA~BJhfhFq1#$YWTPn1V8lR1VPohD(bgy;c|O>&G+=ovjr(|kqbj$-Mc zi8zMuvW^0{fj0UFKV1G`x!phJ^pAZuyWaooN^+ww+wN1GKIP8Q^}eUUR598E#MPZ( zfe9Dg4Yi+P5Dc_(kP6m#8x90wc}Hn)jYHogTqNFV$53!b#KQ(5q^7VN+-05#``UO% z4xgtsh`2-DQn8n`oZ36*v)weQd&xjKJ4nC~ZLkBng|CohyhMp*ks6DY3YT$Vx>6{! z$6$&3Zb_@*`Ic>)#tzls*%!|h&cApXPs~&*FHhrhQ>RbARKVq_vy&Bi5V*5+-Nd#D z0S@H^8|0epJ2+k=4O_#u-Xwe68)+@oG@G!Vpo2XecbHWGa0C64NVOA(*Aj<6E`Kuj z(Of%m%t;*kY`&c0o8 zyQqo*PEvpi&&YjkPu%mQ+t>WK&jzENC+@yB%p>pI)(Z-1q?+~<#X`==lWROuYilj*9nuY z*1U^jJ^sjJ%2zG!)~wq)*9t#$@3q1){Xk~*g5q%LrhD4yk+t;5dU|w4+U)LacaN@h zkFIwgS&3|B4!1L7Ynib-mCrAKdig8yoA}r9Zzt{v>zU$8*U!BtSLDs1$J;~swW0i7 z@ypm3v9F%_wtTO9eW%TmsV%zoTum3ldtaK_>gmS zD=5@+UL{Q)omzH7H;7?k>^^$vW1Pzf z2hRdv2jQ({Yqnm+nr%}ZE*=8UFP7@O#Hysxz*rGz7Z6)KFkf)}NcsE31-!O+@1?iU z!%$dy;@5acI`OLM9{h0e+L=FcPan? literal 0 HcmV?d00001 diff --git a/py/samples/__pycache__/zombie_game.cpython-313.pyc b/py/samples/__pycache__/zombie_game.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2fe831cd3ca9a07accdb60caf02ae6eb107f5ee1 GIT binary patch literal 28550 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 U9v(G(&0wg$wC>jo{*s3NU+xm{F#rGn literal 0 HcmV?d00001 diff --git a/py/samples/collecting_game.py b/py/samples/collecting_game.py new file mode 100644 index 0000000..24f3518 --- /dev/null +++ b/py/samples/collecting_game.py @@ -0,0 +1,495 @@ +"""Demonstration of split screen cameras and sensor-based item collection.""" + +from __future__ import annotations + +import math +from typing import List + +from Box2D import b2CircleShape, b2PolygonShape +import pyray as rl + +from engine.framework import GameObject, Scene +from engine.math_extensions import vec_div, vec_mul, vec_normalize, vec_sub, v2 +from engine.prefabs.components import (AnimationController, BodyComponent, MultiComponent, + PlatformerMovementComponent, PlatformerMovementParams, + SoundComponent) +from engine.prefabs.game_objects import CharacterParams, SplitCamera +from engine.prefabs.managers import FontManager, WindowManager +from engine.prefabs.services import LevelService, PhysicsService, SoundService, TextureService + + +class CollectingCharacter(GameObject): + """Basic collecting character. + + Shows how to build a physics body, route input into a movement +component, and drive animations/sounds from gameplay events.""" + def __init__(self, params: CharacterParams, player_number: int = 1) -> None: + """Create a player-controlled collector. + + Args: + params: Character sizing and physics parameters. + player_number: 1-based index used to map input/skins. + + Returns: + None + """ + super().__init__() + self.p = params + self.player_number = player_number + self.gamepad = player_number - 1 + self.width = params.width + self.height = params.height + self.physics: PhysicsService = None # type: ignore[assignment] + self.level: LevelService = None # type: ignore[assignment] + self.body: BodyComponent = None # type: ignore[assignment] + self.movement: PlatformerMovementComponent = None # type: ignore[assignment] + self.animation: AnimationController = None # type: ignore[assignment] + self.sounds: MultiComponent = None # type: ignore[assignment] + self.jump_sound: SoundComponent = None # type: ignore[assignment] + self.die_sound: SoundComponent = None # type: ignore[assignment] + self.score = 0 + + def init(self) -> None: + """Initialize physics, movement, sounds, and animations. + + Services are resolved here (not during update) so missing services are + discovered early and per-frame overhead is avoided. + + Returns: + None + """ + self.physics = self.scene.get_service(PhysicsService) + + def build_body(component: BodyComponent): + """Build body. + + Args: + component: Parameter. + + Returns: + Result of the operation. + """ + world = self.physics.world + body = world.CreateDynamicBody(position=(self.physics.convert_to_meters(self.p.position).x, + self.physics.convert_to_meters(self.p.position).y), + fixedRotation=True, + bullet=True) + body.userData = self + shape = b2PolygonShape(box=(self.physics.convert_length_to_meters(self.p.width / 2.0), + self.physics.convert_length_to_meters(self.p.height / 2.0))) + body.CreateFixture(shape=shape, density=self.p.density, friction=self.p.friction, + restitution=self.p.restitution) + component.body = body + + self.body = self.add_component(BodyComponent(build=build_body)) + + movement_params = PlatformerMovementParams() + movement_params.width = self.p.width + movement_params.height = self.p.height + self.movement = self.add_component(PlatformerMovementComponent(movement_params)) + + self.level = self.scene.get_service(LevelService) + + self.sounds = self.add_component(MultiComponent()) + self.jump_sound = self.sounds.add_component("jump", SoundComponent, "assets/sounds/jump.wav") + self.die_sound = self.sounds.add_component("die", SoundComponent, "assets/sounds/die.wav") + + self.animation = self.add_component(AnimationController(self.body)) + if self.player_number == 1: + self.animation.add_animation_from_files("run", + ["assets/pixel_platformer/characters/green_1.png", + "assets/pixel_platformer/characters/green_2.png"], + 10.0) + elif self.player_number == 2: + self.animation.add_animation_from_files("run", + ["assets/pixel_platformer/characters/blue_1.png", + "assets/pixel_platformer/characters/blue_2.png"], + 10.0) + elif self.player_number == 3: + self.animation.add_animation_from_files("run", + ["assets/pixel_platformer/characters/pink_1.png", + "assets/pixel_platformer/characters/pink_2.png"], + 10.0) + elif self.player_number == 4: + self.animation.add_animation_from_files("run", + ["assets/pixel_platformer/characters/yellow_1.png", + "assets/pixel_platformer/characters/yellow_2.png"], + 10.0) + + def update(self, delta_time: float) -> None: + """Handle input and drive movement/animation. + + Args: + delta_time: Seconds since last frame. + + Returns: + None + """ + deadzone = 0.1 + jump_pressed = rl.is_key_pressed(rl.KEY_W) or rl.is_gamepad_button_pressed(self.gamepad, rl.GAMEPAD_BUTTON_RIGHT_FACE_DOWN) + jump_held = rl.is_key_down(rl.KEY_W) or rl.is_gamepad_button_down(self.gamepad, rl.GAMEPAD_BUTTON_RIGHT_FACE_DOWN) + + move_x = rl.get_gamepad_axis_movement(self.gamepad, rl.GAMEPAD_AXIS_LEFT_X) + if abs(move_x) < deadzone: + move_x = 0.0 + if rl.is_key_down(rl.KEY_D) or rl.is_gamepad_button_down(self.gamepad, rl.GAMEPAD_BUTTON_LEFT_FACE_RIGHT): + move_x = 1.0 + elif rl.is_key_down(rl.KEY_A) or rl.is_gamepad_button_down(self.gamepad, rl.GAMEPAD_BUTTON_LEFT_FACE_LEFT): + move_x = -1.0 + + self.movement.set_input(move_x, jump_pressed, jump_held) + if self.movement.grounded and jump_pressed: + self.jump_sound.play() + + if abs(self.movement.move_x) > 0.1: + self.animation.play("run") + self.animation.flip_x = self.movement.move_x > 0.0 + else: + self.animation.pause() + + def die(self) -> None: + """Respawn the character at the start position. + + Returns: + None + """ + self.body.set_position(self.p.position) + self.body.set_velocity(v2(0.0, 0.0)) + self.die_sound.play() + + +class EnemyType: + Bat = 0 + DrillHead = 1 + BlockHead = 2 + + +class Enemy(GameObject): + """Enemy that patrols between two points using a kinematic body.""" + def __init__(self, enemy_type: int, start: rl.Vector2, end: rl.Vector2) -> None: + """Configure the patrol endpoints and enemy type. + + Args: + enemy_type: EnemyType constant selecting animation and behavior. + start: Starting world position in pixels. + end: Ending world position in pixels. + + Returns: + None + """ + super().__init__() + self.start = start + self.end = end + self.type = enemy_type + self.physics: PhysicsService = None # type: ignore[assignment] + self.body: BodyComponent = None # type: ignore[assignment] + self.animation: AnimationController = None # type: ignore[assignment] + self.radius = 12.0 + + def init_object(self) -> None: + """Create a sensor body, setup animation, and start movement. + + Returns: + None + """ + self.physics = self.scene.get_service(PhysicsService) + + def build_body(component: BodyComponent): + """Build body. + + Args: + component: Parameter. + + Returns: + Result of the operation. + """ + world = self.physics.world + body = world.CreateKinematicBody(position=(self.physics.convert_to_meters(self.start).x, + self.physics.convert_to_meters(self.start).y)) + body.userData = self + shape = b2CircleShape(radius=self.physics.convert_length_to_meters(self.radius)) + body.CreateFixture(shape=shape, density=1.0, isSensor=True) + component.body = body + + self.body = self.add_component(BodyComponent(build=build_body)) + + self.animation = self.add_component(AnimationController(self.body)) + if self.type == EnemyType.Bat: + self.animation.add_animation_from_files("move", + ["assets/pixel_platformer/enemies/bat_1.png", + "assets/pixel_platformer/enemies/bat_2.png", + "assets/pixel_platformer/enemies/bat_3.png"], + 5.0) + elif self.type == EnemyType.DrillHead: + self.animation.add_animation_from_files("move", + ["assets/pixel_platformer/enemies/drill_head_1.png", + "assets/pixel_platformer/enemies/drill_head_2.png"], + 5.0) + elif self.type == EnemyType.BlockHead: + self.animation.add_animation_from_files("move", + ["assets/pixel_platformer/enemies/block_head_1.png", + "assets/pixel_platformer/enemies/block_head_2.png"], + 5.0) + self.animation.play("move") + + super().init_object() + + to_end = vec_normalize(vec_sub(self.end, self.body.get_position_pixels())) + self.body.set_velocity(vec_mul(to_end, 50.0)) + + def update(self, delta_time: float) -> None: + """Move between endpoints and detect sensor hits on players. + + Args: + delta_time: Seconds since last frame. + + Returns: + None + """ + pos = self.body.get_position_pixels() + if math.dist((self.end.x, self.end.y), (pos.x, pos.y)) <= self.radius * 2.0: + to_start = vec_normalize(vec_sub(self.start, pos)) + self.body.set_velocity(vec_mul(to_start, 50.0)) + elif math.dist((self.start.x, self.start.y), (pos.x, pos.y)) <= self.radius * 2.0: + to_end = vec_normalize(vec_sub(self.end, pos)) + self.body.set_velocity(vec_mul(to_end, 50.0)) + + for contact_body in self.body.get_sensor_overlaps(): + user_data = contact_body.userData + if user_data and user_data.has_tag("character"): + user_data.die() + + velocity = self.body.get_velocity_pixels() + self.animation.flip_x = velocity.x > 0.0 + + +class Coin(GameObject): + """Collectible coin using a sensor body.""" + def __init__(self, position: rl.Vector2) -> None: + """Store the coin spawn position. + + Args: + position: World position in pixels. + + Returns: + None + """ + super().__init__() + self.position = position + self.physics: PhysicsService = None # type: ignore[assignment] + self.body: BodyComponent = None # type: ignore[assignment] + self.animation: AnimationController = None # type: ignore[assignment] + self.collect_sound: SoundComponent = None # type: ignore[assignment] + + def init(self) -> None: + """Create the sensor body, animation, and pickup sound. + + Returns: + None + """ + self.physics = self.scene.get_service(PhysicsService) + + def build_body(component: BodyComponent): + """Build body. + + Args: + component: Parameter. + + Returns: + Result of the operation. + """ + world = self.physics.world + body = world.CreateStaticBody(position=(self.physics.convert_to_meters(self.position).x, + self.physics.convert_to_meters(self.position).y)) + body.userData = self + shape = b2CircleShape(radius=self.physics.convert_length_to_meters(8.0)) + body.CreateFixture(shape=shape, density=1.0, isSensor=True) + component.body = body + + self.body = self.add_component(BodyComponent(build=build_body)) + self.animation = self.add_component(AnimationController(self.body)) + self.animation.add_animation_from_files("spin", + ["assets/pixel_platformer/items/coin_1.png", + "assets/pixel_platformer/items/coin_2.png"], + 5.0) + self.animation.play("spin") + self.collect_sound = self.add_component(SoundComponent("assets/sounds/coin.wav")) + + def update(self, delta_time: float) -> None: + """Check sensor overlaps and award score on pickup. + + Args: + delta_time: Seconds since last frame. + + Returns: + None + """ + for contact_body in self.body.get_sensor_overlaps(): + user_data = contact_body.userData + if user_data and user_data.has_tag("character"): + self.collect_sound.play() + self.is_active = False + self.body.disable() + user_data.score += 1 + break + + +class CollectingScene(Scene): + """Scene demonstrating split-screen cameras and collectible items.""" + def __init__(self) -> None: + """Set up scene containers and cached services. + + Returns: + None + """ + super().__init__() + self.window_manager: WindowManager = None # type: ignore[assignment] + self.font_manager: FontManager = None # type: ignore[assignment] + self.characters: List[CollectingCharacter] = [] + self.level: LevelService = None # type: ignore[assignment] + self.physics: PhysicsService = None # type: ignore[assignment] + self.cameras: List[SplitCamera] = [] + self.screen_size = v2(0.0, 0.0) + self.scale = 2.5 + + def init_services(self) -> None: + """Register services required by the scene. + + Returns: + None + """ + self.add_service(TextureService) + self.add_service(SoundService) + self.physics = self.add_service(PhysicsService) + collision_names = ["walls", "clouds", "trees"] + self.level = self.add_service(LevelService, "assets/levels/collecting.ldtk", "Level", collision_names) + + def init(self) -> None: + """Create characters, enemies, coins, and cameras. + + Returns: + None + """ + self.window_manager = self.game.get_manager(WindowManager) + self.font_manager = self.game.get_manager(FontManager) + + entities_layer = self.level.get_layer_by_name("Entities") + player_entities = self.level.get_entities_by_name("Start") + for i, player_entity in enumerate(player_entities[:4]): + params = CharacterParams() + params.position = self.level.convert_to_pixels(player_entity.getPosition()) + params.width = 16 + params.height = 24 + character = self.add_game_object(CollectingCharacter(params, i + 1)) + character.add_tag("character") + self.characters.append(character) + + for bat_entity in self.level.get_entities_by_name("Bat"): + start_pos = self.level.convert_to_pixels(bat_entity.getPosition()) + end_point = bat_entity.getField("end") + end_pos = self.level.convert_cells_to_pixels(end_point, entities_layer) + enemy = self.add_game_object(Enemy(EnemyType.Bat, start_pos, end_pos)) + enemy.add_tag("enemy") + + for drill_entity in self.level.get_entities_by_name("DrillHead"): + start_pos = self.level.convert_to_pixels(drill_entity.getPosition()) + end_point = drill_entity.getField("end") + end_pos = self.level.convert_cells_to_pixels(end_point, entities_layer) + enemy = self.add_game_object(Enemy(EnemyType.DrillHead, start_pos, end_pos)) + enemy.add_tag("enemy") + + for block_entity in self.level.get_entities_by_name("BlockHead"): + start_pos = self.level.convert_to_pixels(block_entity.getPosition()) + end_point = block_entity.getField("end") + end_pos = self.level.convert_cells_to_pixels(end_point, entities_layer) + enemy = self.add_game_object(Enemy(EnemyType.BlockHead, start_pos, end_pos)) + enemy.add_tag("enemy") + + for coin_entity in self.level.get_entities_by_name("Coin"): + coin_pos = self.level.convert_to_pixels(coin_entity.getPosition()) + coin = self.add_game_object(Coin(coin_pos)) + coin.add_tag("coin") + + self.screen_size = v2(self.window_manager.get_width(), self.window_manager.get_height()) + for _ in self.characters: + cam = self.add_game_object(SplitCamera(vec_div(self.screen_size, self.scale), self.level.get_size())) + self.cameras.append(cam) + + def update(self, delta_time: float) -> None: + """Update camera targets and handle window resizing. + + Args: + delta_time: Seconds since last frame. + + Returns: + None + """ + for idx, camera in enumerate(self.cameras): + camera.target = self.characters[idx].body.get_position_pixels() + + new_screen_size = v2(float(rl.get_screen_width()), float(rl.get_screen_height())) + if new_screen_size.x != self.screen_size.x or new_screen_size.y != self.screen_size.y: + self.screen_size = new_screen_size + screen_scale = self.window_manager.get_width() / self.screen_size.x + for camera in self.cameras: + camera.size = vec_mul(vec_div(self.screen_size, self.scale), screen_scale) + camera.camera.offset = v2(camera.size.x / 2.0, camera.size.y / 2.0) + if camera.renderer: + rl.unload_render_texture(camera.renderer) + camera.renderer = rl.load_render_texture(int(camera.size.x), int(camera.size.y)) + + # Trigger scene change on Enter key or gamepad start button. + if rl.is_key_pressed(rl.KEY_ENTER) or rl.is_gamepad_button_pressed(0, rl.GAMEPAD_BUTTON_MIDDLE_RIGHT): + self.game.go_to_scene_next() + + def draw_scene(self) -> None: + """Render the scene once per camera and composite the split view. + + Returns: + None + """ + for camera in self.cameras: + camera.draw_begin() + super().draw_scene() + camera.draw_end() + + rl.clear_background(rl.MAGENTA) + for i, camera in enumerate(self.cameras): + if i == 0: + camera.draw_texture_pro(0, 0, self.screen_size.x / 2.0, self.screen_size.y / 2.0) + rl.draw_text_ex(self.font_manager.get_font("Tiny5"), + f"Score: {self.characters[0].score}", + v2(20.0, 20.0), + 40.0, + 2.0, + rl.BLACK) + elif i == 1: + camera.draw_texture_pro(self.screen_size.x / 2.0, 0, self.screen_size.x / 2.0, self.screen_size.y / 2.0) + rl.draw_text_ex(self.font_manager.get_font("Tiny5"), + f"Score: {self.characters[1].score}", + v2(self.screen_size.x / 2.0 + 20.0, 20.0), + 40.0, + 2.0, + rl.BLACK) + elif i == 2: + camera.draw_texture_pro(0, self.screen_size.y / 2.0, self.screen_size.x / 2.0, self.screen_size.y / 2.0) + rl.draw_text_ex(self.font_manager.get_font("Tiny5"), + f"Score: {self.characters[2].score}", + v2(20.0, self.screen_size.y / 2.0 + 20.0), + 40.0, + 2.0, + rl.BLACK) + elif i == 3: + camera.draw_texture_pro(self.screen_size.x / 2.0, + self.screen_size.y / 2.0, + self.screen_size.x / 2.0, + self.screen_size.y / 2.0) + rl.draw_text_ex(self.font_manager.get_font("Tiny5"), + f"Score: {self.characters[3].score}", + v2(self.screen_size.x / 2.0 + 20.0, self.screen_size.y / 2.0 + 20.0), + 40.0, + 2.0, + rl.BLACK) + + rl.draw_line_ex(v2(self.screen_size.x / 2.0, 0), v2(self.screen_size.x / 2.0, self.screen_size.y), 4.0, rl.Color(130, 130, 130, 255)) + rl.draw_line_ex(v2(0, self.screen_size.y / 2.0), v2(self.screen_size.x, self.screen_size.y / 2.0), 4.0, rl.Color(130, 130, 130, 255)) diff --git a/py/samples/fighting_game.py b/py/samples/fighting_game.py new file mode 100644 index 0000000..cda1d19 --- /dev/null +++ b/py/samples/fighting_game.py @@ -0,0 +1,452 @@ +"""Demonstration of a shared camera and basic fighting mechanics. + +Shows LDtk level setup, one-way platforms, and simple combat interactions.""" + +from __future__ import annotations + +import math +from typing import List + +from Box2D import b2ContactListener, b2PolygonShape, b2Vec2 +import pyray as rl + +from engine.framework import GameObject, Scene +from engine.math_extensions import vec_add, vec_div, vec_mul, vec_sub, v2 +from engine.prefabs.components import (AnimationController, BodyComponent, MultiComponent, + PlatformerMovementComponent, PlatformerMovementParams, + SoundComponent) +from engine.prefabs.game_objects import CameraObject, CharacterParams, StaticBox +from engine.prefabs.services import LevelService, PhysicsService, SoundService, TextureService + + +class FightingCharacter(GameObject): + """Basic fighting character with attacks and one-way platform logic.""" + def __init__(self, params: CharacterParams, player_number: int = 1) -> None: + """Create a player-controlled fighter. + + Args: + params: Character sizing and physics parameters. + player_number: 1-based index used to map input/skins. + + Returns: + None + """ + super().__init__() + self.p = params + self.player_number = player_number + self.gamepad = player_number - 1 + self.width = params.width + self.height = params.height + self.physics: PhysicsService = None # type: ignore[assignment] + self.level: LevelService = None # type: ignore[assignment] + self.body: BodyComponent = None # type: ignore[assignment] + self.movement: PlatformerMovementComponent = None # type: ignore[assignment] + self.animation: AnimationController = None # type: ignore[assignment] + self.sounds: MultiComponent = None # type: ignore[assignment] + self.jump_sound: SoundComponent = None # type: ignore[assignment] + self.hit_sound: SoundComponent = None # type: ignore[assignment] + self.die_sound: SoundComponent = None # type: ignore[assignment] + self.fall_through = False + self.fall_through_timer = 0.0 + self.fall_through_duration = 0.2 + self.attack_display_timer = 0.0 + self.attack_display_duration = 0.1 + self.attack = False + + def init(self) -> None: + """Initialize body, movement, sounds, and animations. + + Returns: + None + """ + self.physics = self.scene.get_service(PhysicsService) + + def build_body(component: BodyComponent): + """Build body. + + Args: + component: Parameter. + + Returns: + Result of the operation. + """ + world = self.physics.world + body = world.CreateDynamicBody(position=(self.physics.convert_to_meters(self.p.position).x, + self.physics.convert_to_meters(self.p.position).y), + fixedRotation=True, + bullet=True) + shape = b2PolygonShape(box=(self.physics.convert_length_to_meters(self.p.width / 2.0), + self.physics.convert_length_to_meters(self.p.height / 2.0))) + body.CreateFixture(shape=shape, density=self.p.density, friction=self.p.friction, + restitution=self.p.restitution) + component.body = body + + self.body = self.add_component(BodyComponent(build=build_body)) + + movement_params = PlatformerMovementParams() + movement_params.width = self.p.width + movement_params.height = self.p.height + self.movement = self.add_component(PlatformerMovementComponent(movement_params)) + + self.level = self.scene.get_service(LevelService) + + self.sounds = self.add_component(MultiComponent()) + self.jump_sound = self.sounds.add_component("jump", SoundComponent, "assets/sounds/jump.wav") + self.hit_sound = self.sounds.add_component("hit", SoundComponent, "assets/sounds/hit.wav") + self.die_sound = self.sounds.add_component("die", SoundComponent, "assets/sounds/die.wav") + + self.animation = self.add_component(AnimationController(self.body)) + if self.player_number == 1: + self.animation.add_animation_from_files("run", + ["assets/sunnyland/fox/run-1.png", + "assets/sunnyland/fox/run-2.png", + "assets/sunnyland/fox/run-3.png", + "assets/sunnyland/fox/run-4.png", + "assets/sunnyland/fox/run-5.png", + "assets/sunnyland/fox/run-6.png"], + 10.0) + self.animation.add_animation_from_files("idle", + ["assets/sunnyland/fox/idle-1.png", + "assets/sunnyland/fox/idle-2.png", + "assets/sunnyland/fox/idle-3.png", + "assets/sunnyland/fox/idle-4.png"], + 5.0) + self.animation.add_animation_from_files("jump", ["assets/sunnyland/fox/jump-1.png"], 0.0) + self.animation.add_animation_from_files("fall", ["assets/sunnyland/fox/jump-2.png"], 0.0) + self.animation.origin.y += 4 + elif self.player_number == 2: + self.animation.add_animation_from_files("run", + ["assets/sunnyland/bunny/run-1.png", + "assets/sunnyland/bunny/run-2.png", + "assets/sunnyland/bunny/run-3.png", + "assets/sunnyland/bunny/run-4.png", + "assets/sunnyland/bunny/run-5.png", + "assets/sunnyland/bunny/run-6.png"], + 10.0) + self.animation.add_animation_from_files("idle", + ["assets/sunnyland/bunny/idle-1.png", + "assets/sunnyland/bunny/idle-2.png", + "assets/sunnyland/bunny/idle-3.png", + "assets/sunnyland/bunny/idle-4.png"], + 10.0) + self.animation.add_animation_from_files("jump", ["assets/sunnyland/bunny/jump-1.png"], 0.0) + self.animation.add_animation_from_files("fall", ["assets/sunnyland/bunny/jump-2.png"], 0.0) + self.animation.origin.y += 8 + elif self.player_number == 3: + self.animation.add_animation_from_files("run", + ["assets/sunnyland/squirrel/run-1.png", + "assets/sunnyland/squirrel/run-2.png", + "assets/sunnyland/squirrel/run-3.png", + "assets/sunnyland/squirrel/run-4.png", + "assets/sunnyland/squirrel/run-5.png", + "assets/sunnyland/squirrel/run-6.png"], + 10.0) + self.animation.add_animation_from_files("idle", + ["assets/sunnyland/squirrel/idle-1.png", + "assets/sunnyland/squirrel/idle-2.png", + "assets/sunnyland/squirrel/idle-3.png", + "assets/sunnyland/squirrel/idle-4.png", + "assets/sunnyland/squirrel/idle-5.png", + "assets/sunnyland/squirrel/idle-6.png", + "assets/sunnyland/squirrel/idle-7.png", + "assets/sunnyland/squirrel/idle-8.png"], + 8.0) + self.animation.add_animation_from_files("jump", + ["assets/sunnyland/squirrel/jump-1.png", + "assets/sunnyland/squirrel/jump-2.png", + "assets/sunnyland/squirrel/jump-3.png", + "assets/sunnyland/squirrel/jump-4.png"], + 15.0) + self.animation.origin.y += 7 + elif self.player_number == 4: + self.animation.add_animation_from_files("run", + ["assets/sunnyland/imp/run-1.png", + "assets/sunnyland/imp/run-2.png", + "assets/sunnyland/imp/run-3.png", + "assets/sunnyland/imp/run-4.png", + "assets/sunnyland/imp/run-5.png", + "assets/sunnyland/imp/run-6.png", + "assets/sunnyland/imp/run-7.png", + "assets/sunnyland/imp/run-8.png"], + 10.0) + self.animation.add_animation_from_files("idle", + ["assets/sunnyland/imp/idle-1.png", + "assets/sunnyland/imp/idle-2.png", + "assets/sunnyland/imp/idle-3.png", + "assets/sunnyland/imp/idle-4.png"], + 10.0) + self.animation.add_animation_from_files("jump", ["assets/sunnyland/imp/jump-1.png"], 0.0) + self.animation.add_animation_from_files("fall", ["assets/sunnyland/imp/jump-4.png"], 0.0) + self.animation.origin.y += 10 + + def update(self, delta_time: float) -> None: + """Handle input, jumping, attacks, and respawn logic. + + Args: + delta_time: Seconds since last frame. + + Returns: + None + """ + deadzone = 0.1 + jump_pressed = rl.is_key_pressed(rl.KEY_W) or rl.is_gamepad_button_pressed(self.gamepad, rl.GAMEPAD_BUTTON_RIGHT_FACE_DOWN) + jump_held = rl.is_key_down(rl.KEY_W) or rl.is_gamepad_button_down(self.gamepad, rl.GAMEPAD_BUTTON_RIGHT_FACE_DOWN) + + move_x = rl.get_gamepad_axis_movement(self.gamepad, rl.GAMEPAD_AXIS_LEFT_X) + if abs(move_x) < deadzone: + move_x = 0.0 + if rl.is_key_down(rl.KEY_D) or rl.is_gamepad_button_down(self.gamepad, rl.GAMEPAD_BUTTON_LEFT_FACE_RIGHT): + move_x = 1.0 + elif rl.is_key_down(rl.KEY_A) or rl.is_gamepad_button_down(self.gamepad, rl.GAMEPAD_BUTTON_LEFT_FACE_LEFT): + move_x = -1.0 + + self.movement.set_input(move_x, jump_pressed, jump_held) + + if self.movement.grounded and jump_pressed: + self.jump_sound.play() + + if abs(self.movement.move_x) > 0.1: + self.animation.play("run") + self.animation.flip_x = self.movement.move_x < 0.0 + else: + self.animation.play("idle") + + if not self.movement.grounded: + if self.player_number != 3: + if self.body.get_velocity_meters().y < 0.0: + self.animation.play("jump") + else: + self.animation.play("fall") + else: + self.animation.play("jump") + + move_y = rl.get_gamepad_axis_movement(self.gamepad, rl.GAMEPAD_AXIS_LEFT_Y) + if rl.is_key_pressed(rl.KEY_S) or rl.is_gamepad_button_pressed(self.gamepad, rl.GAMEPAD_BUTTON_LEFT_FACE_DOWN) or move_y > 0.5: + self.fall_through = True + self.fall_through_timer = self.fall_through_duration + + if self.fall_through_timer > 0.0: + self.fall_through_timer = max(0.0, self.fall_through_timer - delta_time) + if self.fall_through_timer == 0.0: + self.fall_through = False + + if rl.is_key_pressed(rl.KEY_SPACE) or rl.is_gamepad_button_pressed(self.gamepad, rl.GAMEPAD_BUTTON_RIGHT_FACE_RIGHT): + self.attack = True + self.attack_display_timer = self.attack_display_duration + position = self.body.get_position_pixels() + position.x += (self.width / 2.0 + 8.0) * (-1.0 if self.animation.flip_x else 1.0) + bodies = self.physics.circle_overlap(position, 8.0, self.body.body) + for other_body in bodies: + if other_body == self.body.body: + continue + impulse = b2Vec2(-10.0 if self.animation.flip_x else 10.0, -10.0) + other_body.ApplyLinearImpulse(impulse=impulse, point=other_body.worldCenter, wake=True) + self.hit_sound.play() + + if self.attack_display_timer > 0.0: + self.attack_display_timer = max(0.0, self.attack_display_timer - delta_time) + if self.attack_display_timer == 0.0: + self.attack = False + + if self.body.get_position_pixels().y > self.level.get_size().y + 200.0: + self.body.set_position(self.p.position) + self.body.set_velocity(v2(0.0, 0.0)) + self.die_sound.play() + + def draw(self) -> None: + """Draw attack indicator (animations are drawn by controller). + + Returns: + None + """ + if self.attack: + position = self.body.get_position_pixels() + position.x += (self.width / 2.0 + 8.0) * (-1.0 if self.animation.flip_x else 1.0) + rl.draw_circle_v(position, 8.0, rl.Color(230, 41, 55, 128)) + + def pre_solve(self, body_a, body_b, contact, platforms: List[StaticBox]) -> bool: + """Custom pre-solve for one-way platforms. + + Args: + body_a: First body in the contact. + body_b: Second body in the contact. + contact: Box2D contact instance. + platforms: List of one-way platform StaticBox objects. + + Returns: + True to enable contact, False to disable it. + """ + normal = contact.worldManifold.normal + other = None + sign = 0.0 + if body_a == self.body.body: + sign = 1.0 + other = body_b + elif body_b == self.body.body: + sign = -1.0 + other = body_a + if sign * normal.y < 0.5: + return False + if self.fall_through: + for platform in platforms: + if other == platform.body: + return False + return True + + +class FightingContactListener(b2ContactListener): + """Routes Box2D PreSolve callbacks to the owning character.""" + def __init__(self, scene: "FightingScene") -> None: + """Capture the scene so contacts can be filtered. + + Args: + scene: Scene containing fighters and one-way platforms. + + Returns: + None + """ + super().__init__() + self.scene = scene + + def PreSolve(self, contact, old_manifold): + """Dispatch pre-solve handling to the matching character. + + Args: + contact: Box2D contact. + old_manifold: Previous contact manifold. + + Returns: + None + """ + body_a = contact.fixtureA.body + body_b = contact.fixtureB.body + for character in self.scene.characters: + if body_a == character.body.body or body_b == character.body.body: + enabled = character.pre_solve(body_a, body_b, contact, self.scene.platforms) + contact.enabled = enabled + return + + +class FightingScene(Scene): + """Scene demonstrating shared camera and arena combat.""" + def __init__(self) -> None: + """Initialize scene storage for platforms, fighters, and services. + + Returns: + None + """ + super().__init__() + self.platforms: List[StaticBox] = [] + self.characters: List[FightingCharacter] = [] + self.level: LevelService = None # type: ignore[assignment] + self.physics: PhysicsService = None # type: ignore[assignment] + self.camera: CameraObject = None # type: ignore[assignment] + self.renderer = None + self.render_rect = None + + def init_services(self) -> None: + """Register services required by the scene. + + Returns: + None + """ + self.add_service(TextureService) + self.add_service(SoundService) + self.physics = self.add_service(PhysicsService) + collision_names = ["walls"] + self.level = self.add_service(LevelService, "assets/levels/fighting.ldtk", "Stage", collision_names) + + def init(self) -> None: + """Create platforms, players, camera, and render target. + + Returns: + None + """ + platform_entities = self.level.get_entities_by_name("One_way_platform") + for platform_entity in platform_entities: + position = self.level.convert_to_pixels(platform_entity.getPosition()) + size = self.level.convert_to_pixels(platform_entity.getSize()) + platform = self.add_game_object(StaticBox.from_vectors(vec_add(position, vec_div(size, 2.0)), size)) + platform.is_visible = False + platform.add_tag("platform") + self.platforms.append(platform) + + if self.physics.world: + self.physics.world.contactListener = FightingContactListener(self) + + player_entities = self.level.get_entities_by_name("Start") + for i, player_entity in enumerate(player_entities[:4]): + params = CharacterParams() + params.position = self.level.convert_to_pixels(player_entity.getPosition()) + params.width = 16 + params.height = 24 + character = self.add_game_object(FightingCharacter(params, i + 1)) + character.add_tag("character") + self.characters.append(character) + + self.camera = self.add_game_object(CameraObject(self.level.get_size(), v2(0.0, 0.0), v2(300.0, 300.0), 0.0, 0.0, 0.0, 0.0)) + self.camera.target = vec_div(self.level.get_size(), 2.0) + + self.level.set_layer_visibility("Background", False) + self.renderer = rl.load_render_texture(int(self.level.get_size().x), int(self.level.get_size().y)) + + def update(self, delta_time: float) -> None: + """Update camera framing and compute render placement. + + Args: + delta_time: Seconds since last frame. + + Returns: + None + """ + avg_position = v2(0.0, 0.0) + min_point = v2(float("inf"), float("inf")) + max_point = v2(float("-inf"), float("-inf")) + for character in self.characters: + char_pos = character.body.get_position_pixels() + avg_position = vec_add(avg_position, char_pos) + min_point.x = min(min_point.x, char_pos.x) + min_point.y = min(min_point.y, char_pos.y) + max_point.x = max(max_point.x, char_pos.x) + max_point.y = max(max_point.y, char_pos.y) + avg_position = vec_div(avg_position, float(len(self.characters))) + self.camera.target = avg_position + self.camera.target.x = math.floor(self.camera.target.x) + self.camera.target.y = math.floor(self.camera.target.y) + + distance = math.sqrt((max_point.x - min_point.x) ** 2 + (max_point.y - min_point.y) ** 2) + level_diag = math.sqrt(self.level.get_size().x ** 2 + self.level.get_size().y ** 2) + zoom = level_diag / (distance + 400.0) + zoom = max(0.5, min(2.0, zoom)) + self.camera.camera.zoom += (zoom - self.camera.camera.zoom) * min(1.0, delta_time * 5.0) + + aspect_ratio = self.level.get_size().x / self.level.get_size().y + render_scale = rl.get_screen_height() / self.level.get_size().y + render_size = v2(self.level.get_size().y * render_scale * aspect_ratio, self.level.get_size().y * render_scale) + pos = vec_div(vec_sub(v2(float(rl.get_screen_width()), float(rl.get_screen_height())), render_size), 2.0) + self.render_rect = rl.Rectangle(pos.x, pos.y, render_size.x, render_size.y) + + # Trigger scene change on Enter key or gamepad start button. + if rl.is_key_pressed(rl.KEY_ENTER) or rl.is_gamepad_button_pressed(0, rl.GAMEPAD_BUTTON_MIDDLE_RIGHT): + self.game.go_to_scene_next() + + def draw_scene(self) -> None: + """Render the world to a texture and draw it centered. + + Returns: + None + """ + rl.begin_texture_mode(self.renderer) + rl.clear_background(rl.MAGENTA) + self.level.draw_layer("Background") + self.camera.draw_begin() + super().draw_scene() + self.camera.draw_end() + rl.end_texture_mode() + + rl.draw_texture_pro(self.renderer.texture, + rl.Rectangle(0.0, 0.0, float(self.renderer.texture.width), -float(self.renderer.texture.height)), + self.render_rect, + v2(0.0, 0.0), + 0.0, + rl.Color(255, 255, 255, 255)) diff --git a/py/samples/title_screen.py b/py/samples/title_screen.py new file mode 100644 index 0000000..4ab5c6b --- /dev/null +++ b/py/samples/title_screen.py @@ -0,0 +1,47 @@ +import pyray as rl + +from engine.math_extensions import v2 +from engine.framework import Scene +from engine.prefabs.includes import FontManager + + +class TitleScreen(Scene): + def __init__(self): + super().__init__() + self.font = None + self.title = "Game Jam Kit" + + def init(self): + font_manager = self.game.get_manager(FontManager) + self.font = font_manager.get_font("Roboto") + + def update(self, delta_time): + # Trigger scene change on Enter key or gamepad start button. + if rl.is_key_pressed(rl.KEY_ENTER) or rl.is_gamepad_button_pressed(0, rl.GAMEPAD_BUTTON_MIDDLE_RIGHT): + self.game.go_to_scene_next() + + def draw(self): + width = rl.get_screen_width() + height = rl.get_screen_height() + title_text_size = rl.measure_text_ex(self.font, self.title, 64, 0) + + subtitle = "Press Start or Enter to Switch Scenes" + subtitle_text_size = rl.measure_text_ex(self.font, subtitle, 32, 0) + + rl.clear_background(rl.SKYBLUE) + rl.draw_text_ex( + self.font, + self.title, + v2((width - title_text_size.x) / 2, (height - title_text_size.y - 100) / 2), + 64, + 1, + rl.WHITE, + ) + rl.draw_text_ex( + self.font, + subtitle, + v2((width - subtitle_text_size.x) / 2, (height - subtitle_text_size.y + 100) / 2), + 32, + 1, + rl.WHITE, + ) diff --git a/py/samples/zombie_game.py b/py/samples/zombie_game.py new file mode 100644 index 0000000..662a6a4 --- /dev/null +++ b/py/samples/zombie_game.py @@ -0,0 +1,467 @@ +"""Demonstration of a top-down shooter with light masking.""" + +from __future__ import annotations + +import math +from typing import List + +from Box2D import b2CircleShape, b2Vec2 +import pyray as rl + +from engine.framework import GameObject, Scene +from engine.math_extensions import vec_add, vec_mul, vec_sub, v2 +from engine.prefabs.components import (BodyComponent, MultiComponent, SoundComponent, + SpriteComponent, TopDownMovementComponent, + TopDownMovementParams) +from engine.prefabs.managers import FontManager +from engine.prefabs.services import LevelService, PhysicsService, SoundService, TextureService + +RLGL_SRC_ALPHA = 0x0302 +RLGL_MIN = 0x8007 + + +class Bullet(GameObject): + """Projectile fired by a player character.""" + def __init__(self) -> None: + """Prepare bullet component references and cached services. + + Returns: + None + """ + super().__init__() + self.physics: PhysicsService = None # type: ignore[assignment] + self.body: BodyComponent = None # type: ignore[assignment] + self.sprite: SpriteComponent = None # type: ignore[assignment] + self.hit_sound: SoundComponent = None # type: ignore[assignment] + self.speed = 800.0 + + def init(self) -> None: + """Create the bullet body, sprite, and hit sound. + + Returns: + None + """ + self.physics = self.scene.get_service(PhysicsService) + + def build_body(component: BodyComponent): + """Build body. + + Args: + component: Parameter. + + Returns: + Result of the operation. + """ + world = self.physics.world + body = world.CreateDynamicBody(position=(self.physics.convert_to_meters(v2(-1000.0, -1000.0)).x, + self.physics.convert_to_meters(v2(-1000.0, -1000.0)).y), + bullet=True) + body.userData = self + shape = b2CircleShape(radius=self.physics.convert_length_to_meters(8.0)) + body.CreateFixture(shape=shape, density=0.25, friction=0.0, restitution=0.0) + component.body = body + + self.body = self.add_component(BodyComponent(build=build_body)) + self.sprite = self.add_component(SpriteComponent("assets/zombie_shooter/bullet.png", self.body)) + self.hit_sound = self.add_component(SoundComponent("assets/sounds/hit.wav")) + + def update(self, delta_time: float) -> None: + """Handle collisions and deactivate on impact. + + Args: + delta_time: Seconds since last frame. + + Returns: + None + """ + for contact_body in self.body.get_contacts(): + self.is_active = False + self.body.set_position(v2(-1000.0, -1000.0)) + self.body.set_velocity(v2(0.0, 0.0)) + other = contact_body.userData + if other and other.has_tag("zombie"): + self.hit_sound.play() + other.is_active = False + zombie_body = other.get_component(BodyComponent) + if zombie_body: + zombie_body.set_position(v2(-1000.0, -1000.0)) + zombie_body.set_velocity(v2(0.0, 0.0)) + zombie_body.disable() + zombie_sprite = other.get_component(SpriteComponent) + if zombie_sprite: + zombie_sprite.set_position(v2(-1000.0, -1000.0)) + break + + +class TopDownCharacter(GameObject): + """Top-down character controlled by player input.""" + def __init__(self, position: rl.Vector2, bullets: List["Bullet"], player_num: int) -> None: + """Store spawn data, shared bullet pool, and player index. + + Args: + position: Spawn position in pixels. + bullets: Shared list of Bullet objects to reuse. + player_num: Index used for controls and UI. + + Returns: + None + """ + super().__init__() + self.position = position + self.bullets = bullets + self.player_num = player_num + self.health = 10 + self.contact_timer = 1.0 + self.contact_cooldown = 0.3 + self.body: BodyComponent = None # type: ignore[assignment] + self.physics: PhysicsService = None # type: ignore[assignment] + self.sprite: SpriteComponent = None # type: ignore[assignment] + self.movement: TopDownMovementComponent = None # type: ignore[assignment] + self.sounds: MultiComponent = None # type: ignore[assignment] + self.shoot_sound: SoundComponent = None # type: ignore[assignment] + + def init(self) -> None: + """Create body, movement, sounds, and sprite. + + Returns: + None + """ + self.physics = self.scene.get_service(PhysicsService) + + def build_body(component: BodyComponent): + """Build body. + + Args: + component: Parameter. + + Returns: + Result of the operation. + """ + world = self.physics.world + body = world.CreateDynamicBody(position=(self.physics.convert_to_meters(self.position).x, + self.physics.convert_to_meters(self.position).y), + fixedRotation=True) + body.userData = self + shape = b2CircleShape(radius=self.physics.convert_length_to_meters(16.0)) + body.CreateFixture(shape=shape, density=1.0) + component.body = body + + self.body = self.add_component(BodyComponent(build=build_body)) + + params = TopDownMovementParams() + params.accel = 5000.0 + params.friction = 5000.0 + params.max_speed = 350.0 + self.movement = self.add_component(TopDownMovementComponent(params)) + + self.sounds = self.add_component(MultiComponent()) + self.shoot_sound = self.sounds.add_component("shoot", SoundComponent, "assets/sounds/shoot.wav") + + self.sprite = self.add_component(SpriteComponent(f"assets/zombie_shooter/player_{self.player_num + 1}.png")) + + def update(self, delta_time: float) -> None: + """Handle movement, shooting, and damage over time. + + Args: + delta_time: Seconds since last frame. + + Returns: + None + """ + move = v2(0.0, 0.0) + move = v2(rl.get_gamepad_axis_movement(self.player_num, rl.GAMEPAD_AXIS_LEFT_X), + rl.get_gamepad_axis_movement(self.player_num, rl.GAMEPAD_AXIS_LEFT_Y)) + + if rl.is_key_down(rl.KEY_W) or rl.is_gamepad_button_down(self.player_num, rl.GAMEPAD_BUTTON_LEFT_FACE_UP): + move.y -= 1.0 + if rl.is_key_down(rl.KEY_S) or rl.is_gamepad_button_down(self.player_num, rl.GAMEPAD_BUTTON_LEFT_FACE_DOWN): + move.y += 1.0 + if rl.is_key_down(rl.KEY_A) or rl.is_gamepad_button_down(self.player_num, rl.GAMEPAD_BUTTON_LEFT_FACE_LEFT): + move.x -= 1.0 + if rl.is_key_down(rl.KEY_D) or rl.is_gamepad_button_down(self.player_num, rl.GAMEPAD_BUTTON_LEFT_FACE_RIGHT): + move.x += 1.0 + + self.movement.set_input(move.x, move.y) + self.sprite.set_position(self.body.get_position_pixels()) + self.sprite.set_rotation(self.movement.facing_dir) + + if rl.is_key_pressed(rl.KEY_SPACE) or rl.is_gamepad_button_pressed(self.player_num, rl.GAMEPAD_BUTTON_RIGHT_FACE_RIGHT): + for bullet in self.bullets: + if not bullet.is_active: + self.shoot_sound.play() + char_pos = self.body.get_position_pixels() + shoot_dir = v2(math.cos(math.radians(self.movement.facing_dir)), + math.sin(math.radians(self.movement.facing_dir))) + bullet_start = v2(char_pos.x + shoot_dir.x * 48.0, char_pos.y + shoot_dir.y * 48.0) + bullet.body.set_position(bullet_start) + bullet.body.set_rotation(self.movement.facing_dir + 90.0) + bullet.body.set_velocity(v2(shoot_dir.x * bullet.speed, shoot_dir.y * bullet.speed)) + bullet.is_active = True + break + + for contact_body in self.body.get_contacts(): + other = contact_body.userData + if other and other.has_tag("zombie"): + if self.contact_timer > 0.0: + self.contact_timer -= delta_time + if self.contact_timer <= 0.0: + self.health -= 1 + self.contact_timer = self.contact_cooldown + if self.health <= 0: + self.is_active = False + self.body.set_position(v2(-1000.0, -1000.0)) + self.body.set_velocity(v2(0.0, 0.0)) + + +class Zombie(GameObject): + """Enemy that chases the closest player.""" + def __init__(self, players: List[TopDownCharacter]) -> None: + """Store the list of players to chase. + + Args: + players: Player characters to target. + + Returns: + None + """ + super().__init__() + self.players = players + self.body: BodyComponent = None # type: ignore[assignment] + self.physics: PhysicsService = None # type: ignore[assignment] + self.sprite: SpriteComponent = None # type: ignore[assignment] + self.movement: TopDownMovementComponent = None # type: ignore[assignment] + + def init(self) -> None: + """Create body, movement, and sprite (starts inactive). + + Returns: + None + """ + self.physics = self.scene.get_service(PhysicsService) + + def build_body(component: BodyComponent): + """Build body. + + Args: + component: Parameter. + + Returns: + Result of the operation. + """ + world = self.physics.world + body = world.CreateDynamicBody(position=(self.physics.convert_to_meters(v2(-1000.0, -1000.0)).x, + self.physics.convert_to_meters(v2(-1000.0, -1000.0)).y), + fixedRotation=True) + body.userData = self + shape = b2CircleShape(radius=self.physics.convert_length_to_meters(16.0)) + body.CreateFixture(shape=shape, density=1.0) + body.active = False + component.body = body + + self.body = self.add_component(BodyComponent(build=build_body)) + + params = TopDownMovementParams() + params.accel = 5000.0 + params.friction = 5000.0 + params.max_speed = 100.0 + self.movement = self.add_component(TopDownMovementComponent(params)) + + self.sprite = self.add_component(SpriteComponent("assets/zombie_shooter/zombie.png")) + + def update(self, delta_time: float) -> None: + """Move toward the closest player and update sprite. + + Args: + delta_time: Seconds since last frame. + + Returns: + None + """ + closest_pos = v2(0.0, 0.0) + closest_dist_sq = float("inf") + for player in self.players: + player_pos = player.body.get_position_pixels() + to_player = vec_sub(player_pos, self.body.get_position_pixels()) + dist_sq = to_player.x * to_player.x + to_player.y * to_player.y + if dist_sq < closest_dist_sq: + closest_dist_sq = dist_sq + closest_pos = player_pos + to_closest = vec_sub(closest_pos, self.body.get_position_pixels()) + length = math.sqrt(to_closest.x * to_closest.x + to_closest.y * to_closest.y) + if length > 0.0: + to_closest.x /= length + to_closest.y /= length + self.movement.set_input(to_closest.x, to_closest.y) + self.sprite.set_position(self.body.get_position_pixels()) + self.sprite.set_rotation(self.movement.facing_dir) + + +class Spawner(GameObject): + """Spawner that activates zombies from a pool.""" + def __init__(self, position: rl.Vector2, size: rl.Vector2, zombies: List[Zombie]) -> None: + """Configure spawn region and zombie pool. + + Args: + position: Center of the spawn rectangle in pixels. + size: Size of the spawn rectangle in pixels. + zombies: Pool of zombie objects to activate. + + Returns: + None + """ + super().__init__() + self.spawn_timer = 0.0 + self.spawn_interval = 1.0 + self.position = vec_sub(position, vec_mul(size, 0.5)) + self.size = size + self.zombie_pool = zombies + + def update(self, delta_time: float) -> None: + """Spawn zombies at an interval within a rectangle. + + Args: + delta_time: Seconds since last frame. + + Returns: + None + """ + self.spawn_timer -= delta_time + if self.spawn_timer <= 0.0: + self.spawn_timer = self.spawn_interval + x = self.position.x + float(rl.get_random_value(0, int(self.size.x))) + y = self.position.y + float(rl.get_random_value(0, int(self.size.y))) + spawn_pos = v2(x, y) + for zombie in self.zombie_pool: + if not zombie.is_active: + zombie.body.set_position(spawn_pos) + zombie.is_active = True + zombie.body.enable() + return + + +class ZombieScene(Scene): + """Scene for the zombie shooter game.""" + def __init__(self) -> None: + """Initialize scene storage for services, actors, and render targets. + + Returns: + None + """ + super().__init__() + self.font_manager: FontManager = None # type: ignore[assignment] + self.physics: PhysicsService = None # type: ignore[assignment] + self.level: LevelService = None # type: ignore[assignment] + self.renderer: rl.RenderTexture = None # type: ignore[assignment] + self.light_map: rl.RenderTexture = None # type: ignore[assignment] + self.light_texture: rl.Texture2D = None # type: ignore[assignment] + self.bullets: List[Bullet] = [] + self.characters: List[TopDownCharacter] = [] + self.zombies: List[Zombie] = [] + + def init_services(self) -> None: + """Register services required by the scene. + + Returns: + None + """ + self.add_service(TextureService) + self.add_service(SoundService) + self.physics = self.add_service(PhysicsService, b2Vec2(0.0, 0.0)) + collision_names = ["walls", "obstacles"] + self.level = self.add_service(LevelService, "assets/levels/top_down.ldtk", "Level", collision_names) + self.font_manager = self.game.get_manager(FontManager) + + def init(self) -> None: + """Create pools, characters, spawner, and render textures. + + Returns: + None + """ + for _ in range(100): + bullet = self.add_game_object(Bullet()) + bullet.is_active = False + self.bullets.append(bullet) + + player_entities = self.level.get_entities_by_name("Start") + for i, player_entity in enumerate(player_entities[:4]): + position = self.level.convert_to_pixels(player_entity.getPosition()) + character = self.add_game_object(TopDownCharacter(position, self.bullets, i)) + character.add_tag("player") + self.characters.append(character) + + for _ in range(100): + zombie = self.add_game_object(Zombie(self.characters)) + zombie.is_active = False + zombie.add_tag("zombie") + self.zombies.append(zombie) + + spawn_entity = self.level.get_entities_by_name("Spawn")[0] + spawn_position = self.level.convert_to_pixels(spawn_entity.getPosition()) + spawn_size = self.level.convert_to_pixels(spawn_entity.getSize()) + self.add_game_object(Spawner(spawn_position, spawn_size, self.zombies)) + + self.level.set_layer_visibility("Foreground", False) + + self.renderer = rl.load_render_texture(int(self.level.get_size().x), int(self.level.get_size().y)) + self.light_map = rl.load_render_texture(int(self.level.get_size().x), int(self.level.get_size().y)) + self.light_texture = self.get_service(TextureService).get_texture("assets/zombie_shooter/light.png") + + def update(self, delta_time: float) -> None: + # Trigger scene change on Enter key or gamepad start button. + if rl.is_key_pressed(rl.KEY_ENTER) or rl.is_gamepad_button_pressed(0, rl.GAMEPAD_BUTTON_MIDDLE_RIGHT): + self.game.go_to_scene_next() + + def draw_scene(self) -> None: + """Build light mask and render the final frame. + + Returns: + None + """ + + """Draw the scene. + + Returns: + None + """ + rl.begin_texture_mode(self.light_map) + rl.clear_background(rl.BLACK) + rl.rl_set_blend_factors(RLGL_SRC_ALPHA, RLGL_SRC_ALPHA, RLGL_MIN) + rl.rl_set_blend_mode(rl.BLEND_CUSTOM) + + for i in range(min(4, len(self.characters))): + pos = self.characters[i].body.get_position_pixels() + rl.draw_texture(self.light_texture, + int(pos.x - self.light_texture.width / 2), + int(pos.y - self.light_texture.height / 2), + rl.WHITE) + + rl.rl_draw_render_batch_active() + rl.rl_set_blend_mode(rl.BLEND_ALPHA) + rl.end_texture_mode() + + rl.begin_texture_mode(self.renderer) + rl.clear_background(rl.Color(255, 0, 255, 255)) + super().draw_scene() + self.level.draw_layer("Foreground") + rl.draw_texture_pro(self.light_map.texture, + rl.Rectangle(0.0, 0.0, float(self.light_map.texture.width), -float(self.light_map.texture.height)), + rl.Rectangle(0.0, 0.0, float(self.light_map.texture.width), float(self.light_map.texture.height)), + v2(0.0, 0.0), + 0.0, + rl.color_alpha(rl.WHITE, 0.92)) + rl.draw_rectangle(10, 10, 210, 210, rl.color_alpha(rl.WHITE, 0.3)) + health_lines = [f"Health: {char.health}" for char in self.characters[:4]] + rl.draw_text_ex(self.font_manager.get_font("Roboto"), + "\n".join(health_lines), + v2(20.0, 20.0), + 45.0, + 1.0, + rl.Color(230, 41, 55, 255)) + rl.end_texture_mode() + + rl.draw_texture_pro(self.renderer.texture, + rl.Rectangle(0.0, 0.0, float(self.renderer.texture.width), -float(self.renderer.texture.height)), + rl.Rectangle(0.0, 0.0, float(rl.get_screen_width()), float(rl.get_screen_height())), + v2(0.0, 0.0), + 0.0, + rl.WHITE)

~dt`pE$#u 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 literal 0 HcmV?d00001 diff --git a/py/assets/sounds/jump.wav b/py/assets/sounds/jump.wav new file mode 100644 index 0000000000000000000000000000000000000000..25c80bf914b279996ce9d33d78782cda893c0930 GIT binary patch literal 30034 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 ujyURbaSSJL3O}Nvs=$%|RR0A7i)Fh2 literal 0 HcmV?d00001 diff --git a/py/assets/sounds/shoot.wav b/py/assets/sounds/shoot.wav new file mode 100644 index 0000000000000000000000000000000000000000..d3a4b9c64ea49f28134e08dcca6642858a028190 GIT binary patch literal 3306 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 F{{^)pJ0bu8 literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/bunny/idle-1.png b/py/assets/sunnyland/bunny/idle-1.png new file mode 100644 index 0000000000000000000000000000000000000000..82b48656cf56ba6dbbdff5d0801c71460ee34b08 GIT binary patch literal 1570 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 literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/bunny/idle-3.png b/py/assets/sunnyland/bunny/idle-3.png new file mode 100644 index 0000000000000000000000000000000000000000..cea7dc017c2a2c8b3ebb840d2e5222687b3e07e2 GIT binary patch literal 1532 zcmeAS@N?(olHy`uVBq!ia0vp^5|6H_V+Po~;1FfglRhD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&-nVFuU ziK&^Hp^k!)fuWJU0T7w#8k$&{npqi{D?ot~(6*wKG^-#NH>h1eo~=?wNlAf~zJ7Um zxn8-kUVc%!zM-Y1CCCgTBVC{h-Qvo;lEez#ykcdT2`;I{$wiq3C7Jno3Lp~`lk!VT zY?Xj6g?J&i0B&qvF*KNf0j6J(SfFpHX8`gNOrftYexnUy@&(kzb(T9Bihb;hUJ8nFkWk z1ncniwerj>E=kNwPW5!LRRWr!mzkMjW$t3+WM*Mz;$-3CY-s3eX5r-I>SkeXV(4V) z>}2U;2Gi@3pIn-onpXnTn}X15ic>ErG2|8iZFWg5$}CGwaVyHtRRDY1DigO`jBuI< z)tiFbEyg(Y>H{644~kl(sD=pv(+`LVPq;u1Jn5(A0n>XCFkxGFtTbm}V9N7!aSW-r zmGtNTe|u(KMq%dOgBP|pw2BPMhCGANS_UH_u~Uisnl3n_Oiu zmfFdXE|YND<-}2zb$=W~1Qgx%c0D|z#=_0f58ip8EiX+q#I5O z&+lpwdvLkrPhAo+S2akG$n4nkF53j&UrP5 z-Ez9qdztL1{}U&xXxw?+_2+=Z5w$1Qf5aGgkB9Re3=&oJj_Al_Z!Fp(Bv!gW!MfxF z*S)0KoY7oCCrc9;5_dfG2vuHK(tn*PqO84AK8^Ft)*U(rLzh1Cbq%iio{;pKxD{&BKQZ!HPFU?I$a_d6)#Qs3bIJlC zW~Cn!Y8|(*K6o|6H_V+Po~;1FfglRhD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&-nVFuU ziK&^Hp^k!)fuWJU0T7w#8k$&{npqi{D?ot~(6*wKG^-#NH>h1eo~=?wNlAf~zJ7Um zxn8-kUVc%!zM-Y1CCCgTBVC{h-Qvo;lEez#ykcdT2`;I{$wiq3C7Jno3Lp~`lk!VT zY?Xj6g?J&i0B&qvF*KNf0j6J(SfFpHX8`gNOrftYexnUy@&(kzb(T9Bihb;hUJ8nFkWk z1ncniwerj>E=kNwPW5!LRRWr!mzkMjW$t3+WM*Mz;bh_BY-s2TWH`CHS(uv`I$1h9 zS-P0P^t$9Hm*%GCmB93-AoN<|)C)=sxdlL*T~doO%TiO^it=+6z@E0s#O)R{oaRCG zrr>sqIZnO$K*#8Vq82HtVM4(417gAxE|3FH`l)%q^j-u^*d}1 z{rUgjo>`Ysn7Q}hh3yTkGQQbgR0Eato;)gcTNTleXAs)Vky7EIB0gvT|2nmcFu} zG?9t6QTPp1slF~R48i8JMh%EUv=2@sgYfp+pFSmOy4{0E@LSh zd7b}m2JFIfFJ7szTPW3cgzYDXNKDFah9!}`?6Z;+aAjE?^ZE)@<|NRVTb!D(2A-?%mOUC4}x@c_jJCETf0o zFDCH1pO?Pzi7Qa7frs5yP2)`B!@lzY6ZC^jT>lHliZv?dRkJm{w`@MR`Vxn;vd(j* z=b||)yE<B}{l$g}02H*gl5{O!(Xu%~KUW1x=~gC5(X z$+?Ut3i$V%c(yKtYDX#-?)%rwUyyY=KqDi*q$(# r*rYzY_FtigXF<)Lq8kPd4U7!DtJY2PwB7U&R3Ll0`njxgN@xNAEM+Ql literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/bunny/jump-1.png b/py/assets/sunnyland/bunny/jump-1.png new file mode 100644 index 0000000000000000000000000000000000000000..ae9948509060d8e5d71fd1199fef98323dc3015b GIT binary patch literal 5079 zcmeHKX;c$g7OuFk3X0%{OUFV~Y?G>x1d=onO~Mkp6T+f`Mx~OfKnYn)3KDQwL{yY% zSyU8UMnyfg=(IA5qU|o)(t5gW7;!)p+ob_V!NvvGo|k|MXLM#fXZoK>s*-n?@7?>o zd+$lDP{>1EoIIT%2y&5zN+Q5F46exzcHj=l7LBRgUSLIL2iY$R0ovilK;_6{uE?(E_L~GmYkkaOy zMIm!P!=ldQTyP$4cj^4}9j(cuvA`Oq$C>hN2@QcyFIAZF7t2@3gXQNgwz?Sd`ds^J z3#xpbY*U7(`-Y#dVg!vFMGujEK zRzUhKB^A?DyscPz$vyXM#Qr5~T{Yg3UYp0S+EpTdCc2_t+c7k5Z-jd9qThxs>v%rB z74_VE!vEOw2SG5^YjS?Ua^LehY#x#s>c{A z`wj>kQSNgzBELv65o(KjB;&_64{e^)arcVgd`sW_tuc%nkp1$LmV)xSwCjyE{6iUw zW_P@x$&VP<_v?T22n4x`Nl;zUvabYcy_SjLdKJO6Xbsltg8~9A227nmP;?a$N9u%d z+tCv+oy3LkEUpZd8N@_98JcP&B2(p2>eK`^ABO{{I0aY)06ed`2(pmLzVH+$dVmqv2qGlG-4I|UgySj7AV3ha z*~~PvnR;U!!s7G!2<1F)@`si4wvv z(9_?@qw!mB9YL7y-Xl%Rtq%y@@4=aapq}E{b z0;ko>k|H%9h|H?7@zFCA;Qki(y?NM-ft5@qkm%J(*6^efAq*r;oWunpHeV#+`in(8 ziI~L-^5cm_LBTwK4ok!ri}(`19_~_|iNbVh;*C2A++l zB9g+a9J2iVcx)c1X`VmI<@31jjAjx>6DVLSDhp+@c{YvpFa#hSKqqD`ZvbGE16~DU zBY{zRW0YQ>D1@y+(XF0u)iTh9I7VR-j3NLi>gy*!SppU(%6exDSS$w06QDip^*E_X z`ESaG+_STcdz;sjV-Ds?=j zizC3$=`PYYa`HXJ;K$aWzHEOUgRdcQ28YmS7<@jPVEAGfkI&_6*eZ^>@=-uC8r!g>yXG6u?GyrYZ`RJxdLKsPq zY_L(UwNYWBK#L3T4|mA4|JWgbEvx_gSn2LC{s;YSp$FIk?=deyK3y^}hrw7!-p=*z zbF@y-Kk(IEAAjHu0Q%D=AI0w{x<1kMQ4D;P@u%wgMAt_#@KMH}s_Xwom(#l^LqZ4s znVG?JUzN%y7CbZBslE)6Km)DsruO7MK;mc!jWI!xv%B@8K_wf91ED=7l?BwuBXB&s%J$ z{Th7oe^`K~c3EzeZ?VwIq`Rv^nl`AE!E-klm z%d(TEe;$49X=%pEFsP}aE^8cT>;8h$Jori4!W()r@Im|N;+Uc$mCNbp4npO(wbgmK zQ0DSH&F{;S_RyJmKRJYU;>KsMD_y;>o~UfMODLvJfa7imFNL((9* KKUCG&zb&ba_S{@m+#&Cy?gJe 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 literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/bunny/run-1.png b/py/assets/sunnyland/bunny/run-1.png new file mode 100644 index 0000000000000000000000000000000000000000..44037116102c2f1bfcaf680a83a145a4755a4e32 GIT binary patch literal 1633 zcmaJ>drT8|96w4a6`>XxuSVlh(1A$XE70~jDt+;&p$^MaXGX8>VT-g^uE!`%R2;P+ zGAN7~+}Ng@4^+ZfF`Ld9ElgJy+_?~1vO$wU z!Y)Zy^VC)aYBc3KaJ0a&zEJPjs)r5i%(Y;KT}%>~Q33(&=1PlAY?rWSc*W%2Z|1VW z85d%!g#9Y1QguG4z;F~y=cK0Sc@P8&1RN+WT_AwgfP5ar=kmx`kOHNN(*0Y_%2wv8PyU@pBAH z)TYNxR>Fi?KtCg*!>S1ho6Pi831;g&t;IImCbD5%J7VQR9G<_VIY+hn|6R@Id2bt` zLI2J7wZyi z!5mhJ>8s7Cg_y${NGz=6L&9tkZ$YeI3}!1CS&8DN_fSJNj+w!kqQ$0#bCE5`H;XmA zCYRYdQpj=fcWrgIYJ*XL_2C^+8ET9;J1?NL-bwD)#$Mr@U8V3}vr+Z2Vj zrEEt`#wfV`LTv`%BO#j z;7ZX|n4g;ym%j;%m%`dhKz{sPPPh2=g~^?yTM=Ofa@@ySzLg zuqtc2_1T9vfBJh+J~1`fIGuaHp{*i_RuJ!)8?F{GrO;UD#Nd~O)vvsie~7^ z?V?~j!3Xu-u-zMrbcre=pX|So*3%Tcky=5mEn*$$c+*$uX1N2UovY(0KlJYRAn*JM z+gqed9PYr-$>FidQ^H%?gAH(ph}tnK^)B{MPo2C_@^q;tXRkua;PojUXRZ9}KwQ=G z8|zM|z5qIpv_Ft;NUb|a3A;_FxhOwAc(eWoN5`4@#x%h&rN1om7hhwSL>5!rG_Z`iXW-lO zW!~S1ih@QKg%de-o>h)#PPlxaMoly1Tl9?tsLXTDZB*sSTp@fIW9dKQp%+yXn95Raxtmy>jjQ{{Z0! BSqK0C literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/bunny/run-2.png b/py/assets/sunnyland/bunny/run-2.png new file mode 100644 index 0000000000000000000000000000000000000000..7a1dedd2f9ea7bd64c23ebc17d1c44b5a25be6b6 GIT binary patch literal 1479 zcmeAS@N?(olHy`uVBq!ia0vp^NDSr z1<%~X^wgl##FWaylc_cg49qH-ArU1JzCKpT`MG+DAT@dwxdk9Y7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvO-#2=9ZF3nBND}m`vLFhHXsTY(OatnYqyQCInmZhe+73JqDfIV%MiQ6rPIL(9V zO~LIJBb<8mfsWA!MJ-ZP!-Rn82gHOYTp$OY^i%VI>AeV;u$52hoMK>Lvh;Lu45_%4 z^ymM7`@;zgJ&XAyOHZtDcI$DzHRWocNyy#3Cq2yD*Ib-_B%tIqw|uDVVHY2cH$T3% zGqyM?s7&JaS^cr*kffJMA%_uzrCO@uA;#}F?ggGTbaCa~q-t>5_C~~mzTjV~E`=f! zr$$VaW$rfe0vfT3ZGx+Tw_{&JD^HQh#iNQhYHXkX%68kO7M8-mEt=xsxne`WBkl>w zd4CVZox8BKqy4GUlT9pP`_@GM>s5U6sMu}S6RDWKhUrHfjyHJ41r-T!GmA2uNb+Lj zUb(PQMreah56^>C?oQ6>okH;otdkrz>2Fe2i{0O;$S)K<<>8O{X_+c1rIIafLWie1 zeeqGrn3A3MRd}hz(fzzW&qa0{NG#DwUs81?#-fBvyO%r0>T{EsB2#y9j3eJ>2^Ie2 z<7aQ2_n6GYd(*LnVPoHd9isi~L*24=x8$@dgqPgcF+IV@+0|8%vo$wnqP&;K$sJx3 zpJ=Fg$uMeNahNK-N%_FVO}5PsFC5f1$zxNPs=DA4)4ed(sJ^v2irc=r6?N#my6qAY z$y~&s>Fd$8NnhhfqT-{_%$7xIUhm~5MSV+Ay{5iJIxdmlr9-AMWd&2yH?Gme? z@upiFL`<0-I7N5z_wWix+onuce$gtq=HQY^uMa#3`##t4;<3huPgXJgnzH7GjLE~@ zYF&R;r%Ow`d?X+sFq!K|e~zKm{B?YcuC49yQZZ``+q&&adCl4vFb7@YU_PNZ<&mcG m_J8b&B@CjDELZt!co9#sP>T0LF;T-G@yGywqh;S5{= literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/bunny/run-3.png b/py/assets/sunnyland/bunny/run-3.png new file mode 100644 index 0000000000000000000000000000000000000000..6ae103bcebc1ed475672cea639617841f7e835c2 GIT binary patch literal 1502 zcmeAS@N?(olHy`uVBq!ia0vp^NDSr z1<%~X^wgl##FWaylc_cg49qH-ArU1JzCKpT`MG+DAT@dwxdk9Y7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvO-#-pEZGrOz*+!nSKfewy_~PB6)pzigS?OoeTe%##Tdy3b1no4EczEaUCBLSSn4iiz48 zlWG$gp8Ss9|3N)t*A(R}n+_Hmb-77t*L427>^5;aA-Eu>b<*u=^~~yNL5rreN`2(s zG-F*LGZ*iZ2@ZPh6HZHPkm$TQbCDPST|wrc-%8d=m%h%H_@uDWRkH7Y<}^2_u<4E& zDuywdF6UjE+;%<-vk&YF{&V|4iQh)MPUTC(gE<WT`tRV) zi%phH(PHhEi}oq@zB%%1f8ELL|2LR0Wj6{Iv1t5lFwmHl(6>OPw?XFMhUCjSZ7);V z|A`j}UBBB>s(*n|!(`LtJrXCq)+o47h$>Q24|$?-@EJ!(d1I$2|G#{(TmR!jF3IDSr z1<%~X^wgl##FWaylc_cg49qH-ArU1JzCKpT`MG+DAT@dwxdk9Y7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvO-#2=9ZF3nBND}m`vLFhHdsTY(OatnYqyQCInmZhe+73JqDfIV%MiPbGehURV- zmN?CW>P^Aw7O-ANoO<#DphYAP1iGQ}cl7y$G1FmrRS$W?*2l z_H=O!skoK&=l_5E!wC#Mi}@r=PpoiulQnuZ;oyS_W~rrXX03X6FJ;M2=W8##lR|eq zzAkUD_KSCi(s6+j4n6h-)@;uNiewMF^e8(i?R+4%C|O`e@n6%&w%f{i6nws}aOCHl zvDBb@;^j`M^Xfd6L9&OOJPxkauhFn`-Ny2SVMm3H{1N8U`zMMjSu9q2@~GHtM(Tne z?1?j!3!X|rv}<3HwW)vD!pAyxAf7TQYN++XP(|jeeQAS*<-G`4USry8gMZ zD=ggR+fl+HytD5>=&h!L&{y&WOFLuE=)bz{@>fjijN$@;#?X!(PV6fFKIamZ%o+~~ zX`T^WkR)@H@kOp+#P60HZ%#Y)YBaX;tb4|^_0+`w<+ftgdV>semr&4csVf>6{>^UpWiWmxZ^^KX+hYA=QvosCkltAQ`(0goQ# z6;etL?tkL9JQuSunIPMEPp?rl?nUR!DFFv(W;^sXxUyGy1YBCYIQqW0Wrzo-pjy^% zp0uCK`mYrjCN#0D{`y}c&nqyQt3i5I#^VO#u1qPV7Yxrjezln}9aS@M$!K&{{rms$ whbc3o{|g75cRGEcq1CBumiR#zZh-`boeF!4x36rP1}a=VUHx3vIVCg!09|4gF8}}l literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/bunny/run-5.png b/py/assets/sunnyland/bunny/run-5.png new file mode 100644 index 0000000000000000000000000000000000000000..9029c9e69b7dee23fdd5f3eae636861a37c44cfa GIT binary patch literal 1455 zcmeAS@N?(olHy`uVBq!ia0vp^NDSr z1<%~X^wgl##FWaylc_cg49qH-ArU1JzCKpT`MG+DAT@dwxdk9Y7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvO-#2=9ZF3nBND}m`vLFjeDsTY(OatnYqyQCInmZhe+73JqDfIV%MiQ6p}IL(9V zO~LIJOPqT3fsWA!MJ-ZP!-Rn82gHOYTp$OY^i%VI>AeV;uwQpZ3otM+DSEm%hE&{2 z`t$$4{ow=#AD(8G9;=iqii`OaMK?@Xwa__PESif`Oi)-R` ztE}2OX9(Q*_?n-YquIejMSMoswd4CVZox5;Ual@Lfm}zG^pErxwDT>cGzNC76fi+XuiG$vc zp58y8s;_C;(JGb7a3X1!8?T1R1ZSq5M_k#Sh?Iz!GhdK3RCp_x;_kDnPT09FuvIv%6XG5py1MfAUU` zJFuAbNZ;&@^C$iabWT!Ixh9xm-7+Iga^+hgF)!K1m;(nl8C#xZ>guZa5+rub!|7yf zR_m4XrWVDf8=9Pteb{nkduQXbOcpWI1y-!rJPw8J7m)T%v1GBGsARq@a2Bg*d8eOt zNT<{U<_9mE&!jPiICmKZ91CJ^m$Y7AZbi<%K=Qsn41cP3Xl*Bjb%NIaJ NsHdx+%Q~loCIGOs0P_F< literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/bunny/run-6.png b/py/assets/sunnyland/bunny/run-6.png new file mode 100644 index 0000000000000000000000000000000000000000..e174da1c8fb57e65087d8fd4f3a5a7a26ae7c7f6 GIT binary patch literal 1450 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 J%Q~loCIE)zoD%>5 literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/fireball/fireball-4.png b/py/assets/sunnyland/fireball/fireball-4.png new file mode 100644 index 0000000000000000000000000000000000000000..7907a6638c5dd7e91dda6e1efb57f5ff1cc86baf GIT binary patch literal 1209 zcmeAS@N?(olHy`uVBq!ia0vp^vOp}&!3HE7PPGUDDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49pstArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XQrEMXkwsXZmDNz zW?*7!sH0$HU}&yyV5)CmrfXnmWnf`tWT*fINh+i#(Mch>H3D2mX`VkM*2oZxQ#zd*s+85C+33L3tN z$(eZ|K~1nOUtcTFyyB9?yyR3*7h5HuIeM9yDON5PMvkT~Mn)!8(D>;3KH1vC>Jl{?!tp`OdYk z4t_gbUFXN8*z)f7##eO$+%Mb@pVi&NlI9D&PLfbYHVJ-O;2?t!WvvNSAR1xT5>>n#&h2615+7( zoq8}cDf4J#)Pb&nV)jrIdO9_x+jr^PO(sma z{;mO;(}bMW%3qtV@U&X?;}Mf&DSr z1<%~X^wgl##FWaylc_cg49pstArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XQrEMXkwsXZmDNz zW?*7!sH0$HU}&yyV5)CmrfXnmWnf`tWT*fINh+i#(Mch>H3D2mX`VkM*2oZxQ#zd*s+85C+33L3tN z$(eZ|K~1nOUtcTFyyB9?yyR3*7h5HuIeM9yDON5PCdQ_QE>0$vZia@2u9l952IiKA z2Bros&aQ^0E*3DoF8Rr&xv6<2Fuf@Vz0NrGf)Ye-0nlcb)S}F?)D*X({9FaF$E`B4 zy2Z%R)WygIr+HAlDY)I@h*PgV&@uX;=tYWdm=G`xftc{b3*^9)e`+2u%@+X^_mLmd z7BVm}ntQr9hE&{oGtH3ikO7Zt@|55Lh9l>WUFj}RSLr+8I^)K!#jA{$uMjC%p?uvU zGe}F~#q>o16Q4ZY-6vgeZf1UVYTbhWjko;O;u)NrLe3q0<0p7P@ke#-2DaIE93}?O zI#Iq>*Ue!POaIPo$=#n_O%<{>zy5V^#U9jxAS^yb4S6yGe(s~u8S@tyJ#4*>j^5wsxO)lTfKTQr^B18I_G${ zPYqT3S|_-KsXC&=Y5k3;Y5XT@_p{{ry-i@wKdz;8V&}SyuVJfFE=P8%bUU93e5ctk ssax`Y$;qUkqBjXUdG#(>ei2Auu#!6X;RUO4B&cxlboFyt=akR{07`JG;Q#;t literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/fireball/fireball-hit-1.png b/py/assets/sunnyland/fireball/fireball-hit-1.png new file mode 100644 index 0000000000000000000000000000000000000000..b0277e5e6a3eb111d5cf0bc94cfc9a90cad8e646 GIT binary patch literal 1163 zcmeAS@N?(olHy`uVBq!ia0vp^vOp}&!3HE7PPGUDDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49pstArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XQrEMXkwsXZmDNz zW?*7!sH0$HU}&yyV5)CmrfXnmWnf`tWT*fINh+i#(Mch>H3D2mX`VkM*2oZxQ#zd*s+85C+33L3tN z$(eZ|K~1nOUtcTFyyB9?yyR3*7h5HuIeM9yDON5PCdQ_QE^a24Zia@2u9l952IiKA z2Bros&aQ^0E*3DoF8Rr&xv6<2Fuf^oy{-m0^@0*aZUN9{m(-%nveXo}qWoM1u*a=3 zal6F@r+HAlDLCEY;)+wRKF~4xpy)-4ZkP}-4S|^O#0%uWlYeR+FwGYM6SubnYY#AE z{Pc8j45_$vXIda%lL3#z^`nO$Fg`gPTq)vzv|aAN-DOq+!EP^iI_#1z Z0Yl6!mRTZax|f2A2TxZ&mvv4FO#n^hig5q{ literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/fireball/fireball-hit-2.png b/py/assets/sunnyland/fireball/fireball-hit-2.png new file mode 100644 index 0000000000000000000000000000000000000000..4f521e8a50336b287dd0d0c6cda141c2e342934d GIT binary patch literal 1282 zcmaJ>Z%i9?7``#1xB!Woh&VB~t0pX2?@wu=ccB~5D{#z1(smopkZ`^GwLQE0ylLsfe#BaF@br9P$|R70!NEyspR7|!53w6ea|CbMB!l2b7P#jTREfh_y~p^~&7ts8#uSnq!l z>%k5cV1A%0?HX?mE^M<>sgzd(oS|qzMcJ3_Vslh66g{e_u-9vK%?+2a952e&<C+t~2SL(3QLEswQEzT=betKU?+SXm1#~gD+J3OHL#2K|j3z1+}Gjdga;+G$r>Rn|*M9D>-#b zC&5th^|*cfrzg&(!Z$|Wu)iCv-+v@H^EcCW_UJFJ)`pL5^ptJ!CUZYA0-_&IZXY@R z&Y4W-%6Ovj0e_szhzp;fvyP`5cNNsv%@$1m+&aBGFg||=>b4Ee_b?s4S6b7jZszT( tU=J*v?m0jnUSR%s7*alem{5)_=i^Y(%47=a8XdO&N{p|G{;Ia^&_8Yx&4K^` literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/fireball/fireball-hit-3.png b/py/assets/sunnyland/fireball/fireball-hit-3.png new file mode 100644 index 0000000000000000000000000000000000000000..ee3843dae2775f6652e480510ccd238be3580520 GIT binary patch literal 1393 zcmeAS@N?(olHy`uVBq!ia0vp^vOp}&!3HE7PPGUDDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49pstArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XQrEMXkwsXZmDNz zW?*7!sH0$HU}&yyV5)CmrfXnmWnf`tWT*fINh+i#(Mch>H3D2mX`VkM*2oZxQ#zd*s+85C+33L3tN z$(eZ|K~1nOUtcTFyyB9?yyR3*7h5HuIeM9yDOPUImaY~Sjus}CZia@2u9l952IiKA z2Bros&aQ^0E*3DoF8Rr&xv6<2Fuf@Vy_Pujf)Ye-0nlcb)S}F?)D*X({9FaF$E`AP zyTuHrc~HG6xZProQ?EYIG5VnBMT%~i5HJmanDE34lDBo|ZazNDDDG(Jq;>z#TH|N6`97Ctoi>~* z{(S+H!bh5hx zp11z!%vp|0J6x`{q}Fi!cxJa$m+7a#;{2fJ8Ok@a-W;8_F!V%fT+u83d_#?h%TXsg z*9Oi`QJ%rt-lNN=Y~cyt52V~W*~8E zw~~g%0r~q5`}0|sl}>6%y4qK1@+j@sJkc3f{8YndhvYu6nddR#`pbj~O%rdd3wtl+ zte2T!BO0NxO>6tZwTt6&zZ^Kvq+rA};o9O^Ra(J&jyr$32oXniJ z@U_W`El1s?*F^>G^}ZZ`QshMH6UT=x8S`y(oEg5^tNm$bU}iWHoSY{0$Uq-d2zt8u KxvXDSr z1<%~X^wgl##FWaylc_cg49pstArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XQrEMXkwsXZmDNz zW?*7!sH0$HU}&yyV5)CmrfXnmWnf`tWT*fINh+i#(Mch>H3D2mX`VkM*2oZxQ#zd*s+85C+33L3tN z$(eZ|K~1nOUtcTFyyB9?yyR3*7h5HuIeM9yDOPUImaY~Sj?N~QZia@2u9l952IiKA z2Bros&aQ^0E*3DoF8Rr&xv6<2Fuf@Vy)HQQf)Ye-0nlcb)S}F?)D*X({9FaF$E`AP zyTuWwc~HG6xZUD}Q?EYIG5VnBMT%~i5HJmanDE34Ezdir_wTS)$ z?#TAgW9gE0XC_SBXf@&8wr~3; zsHTfVUe#F2a=A%!$*ln1-QW9trd|CQZ6N6jXE$~vd53(`*PPKchE zI88LVO=&rEO+>O(HgEs-$lDKO_om4HCOxY^%puWi!@3UP zc;>?ui{dY@>bN}r`B6p{uFa_eCwi)?CN0cw%g0fW;SQf@)c7H zmrgwR>2`c!$;V!mpOg0-|FteQV@G}_W7srbxw$hvTS{g`=-gE+IuUV{fsOCwt!6!A vt>Sy9Om3}SkZQ8){+gTe~DWM4f###7Y literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/fireball/fireball-hit-5.png b/py/assets/sunnyland/fireball/fireball-hit-5.png new file mode 100644 index 0000000000000000000000000000000000000000..20fc216f25b9e7b31bbf6f81c30fcfcf5b04ac88 GIT binary patch literal 1302 zcmeAS@N?(olHy`uVBq!ia0vp^vOp}&!3HE7PPGUDDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49pstArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XQrEMXkwsXZmDNz zW?*7!sH0$HU}&yyV5)CmrfXnmWnf`tWT*fINh+i#(Mch>H3D2mX`VkM*2oZxQ#zd*s+85C+33L3tN z$(eZ|K~1nOUtcTFyyB9?yyR3*7h5HuIeM9yDOPUImaY~SP6j5HZia@2u9l952IiKA z2Bros&aQ^0E*3DoF8Rr&xv6<2Fuf^Yy^gNtrY>eU^@0*aZUN9{m(-%nveXo}qWoM1 zu*a=3ak|CP6{mSny(w7T0`iBW8&19YK*#8Vq8BN;VM4$(1Y*JyFOUOI{;7GuG+zWv z+=6>ApJHHOZ1Hq)45_%aC9JXVkO5Cm?K>e^1@00?vCMQX?F+6E3%Cs&rf0mnqxG`c zK>udjhjPmuF4MkjiYq%|$!}}XHX;80{B_SnFUyIUmiZi>k?=8R$N$qQQN4RJFEO!PiCTX5w8|$B2mX~)PK6z`jbEAm zXp6&^%(t(7m2)q;ggG~IyuFuxqV44rw%kS~6@vd$@?2>{I<(+mIr literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/fireball/fireball-hit-6.png b/py/assets/sunnyland/fireball/fireball-hit-6.png new file mode 100644 index 0000000000000000000000000000000000000000..055b4f588b766109701f1eb6e3d1db95db50f0ea GIT binary patch literal 1188 zcmeAS@N?(olHy`uVBq!ia0vp^vOp}&!3HE7PPGUDDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49pstArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XQrEMXkwsXZmDNz zW?*7!sH0$HU}&yyV5)CmrfXnmWnf`tWT*fINh+i#(Mch>H3D2mX`VkM*2oZxQ#zd*s+85C+33L3tN z$(eZ|K~1nOUtcTFyyB9?yyR3*7h5HuIeM9yDOPUIj;`jWE|w;iZia@2u9l952IiKA z2Bros&aQ^0E*3DoF8Rr&xv6<2Fuf@Vy^c8bf)Ye-0nlcb)S}F?)D*X({9FaF$E`AP zyTu%*c~HG6xZPrbQ?EYIG5VnBMT%~i5HJmanDE34#YVg)@3HIRpShx3CNKL^7vs^j-{l}CS zUEU#Q_WAJLkMDl|dh_>7P5+BnrZ4Bp8n)-FHfc9>ay;pgeO6#?yQxe*SgSK@%F{Q2 z0-AF_mR3qKJpF4i^Ws|DTl`0+OueG(c&2=ViihLx{%2dvH(k|^PS5Q~ov~Xx)#&E# zMqbs>jZGOxmuyM96cK7rShIdY$)alJlu5JQqO>zJ9ipF$=x}9Zw$$Y-{T0=GA?fXU zb<*RQxUITVuJzoK^Ant;kmdQ3xq{=kO!VK>k}uC*UEP~v)V%_5MQE#3I yO^bTBKtycbY17bHTfgjU$FGHkXg~iflECm<~N!q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1FfglRhD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&-nVFuU ziK&^Hp^k!)fuWJU0T7w#8k$&{npqi{D?ot~(6*wKG^-#NH>h1eo~=?wNlAf~zJ7Um zxn8-kUVc%!zM-Y1CCCgTBVC{h-Qvo;lEez#ykcdT2`;I{$wiq3C7Jno3Lp~`lk!VT zY?Xj6g?J&i0B&qvF*KNf0j6J(SfFpHX8`gNOrftYexnUy@&(kzb(T9Bihb;hUJ8nFkWk z1ncniwerj>E=kNwPW5!LRRWr!mzkMjWol?>>1twTVeD++YG~+cZeiqP;b`XQV(92% zY-(X-4%6$BpIn-onpXnTn}X15iBm5qG2|8iZFWg5$}CGwaVyHtRRDY1DigO`%y60q z)tiFbE#^4&>H{644~kl(sD=pv(+`LVPq;u1Jn5(A0n>XCFk$ak&URy9U|ie-VN%!;Y^ox0 zQ8!Dhx;0eML#Ep~;7jlvwF$BTzrA=?D<=Tc=ljGZRfkwC6XMrPAHH}_mBY|D&*Jx+ zmFo+(l~(dJ2Y=L?;rvgSi!(`BO=i#K&?BoQx^0xVUSg5?Q5Bio!ek_`=FgR&=xSIL zA`qtRChcDFc5lm}`_I<2D?M*j319u%X{K_*O`dQr^R}o9I&GS4R}MR@n(6a{OR0!k zKIm+U;>Hq}k82HsCM0t+CfPP_o#SwgN2|f%r<^pyR8|89E$0H&kS9&N(IpRfIiEb5 zd4DaB>$}J6^mw{Au56syytd`&YmN!ooUE$5T8}WqaLVRy?2QS3&?S^~ipQyx^WZM# zz1LJia+(`1JpJAAsj1^sPiLY4L(|2LXP;|dn<~N!q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1FfglRhD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&-nVFuU ziK&^Hp^k!)fuWJU0T7w#8k$&{npqi{D?ot~(6*wKG^-#NH>h1eo~=?wNlAf~zJ7Um zxn8-kUVc%!zM-Y1CCCgTBVC{h-Qvo;lEez#ykcdT2`;I{$wiq3C7Jno3Lp~`lk!VT zY?Xj6g?J&i0B&qvF*KNf0j6J(SfFpHX8`gNOrftYexnUy@&(kzb(T9Bihb;hUJ8nFkWk z1ncniwerj>E=kNwPW5!LRRWr!mzkMjWol?>>1tx;Z0u~{YG~+cZeiqP;b`XQV(92% zY-(X-4%6$BpIn-onpXnTn}X2mf>SRjG2|8iZFWg5$}CGwaVyHtRRDY1DigO`9C4Zl z)tiFbElxP~>H{644~kl(sD=pv(+`LVPq;u1Jn5(A0n>XCFkzeV)&X-E<9tsS$B>F! zNq_$Tw?FK_tk&kp;3jLhM&_e@m%E=wLv8k&*PrBDCLWPoD8aX3#ZP}-_XE0FV%0|* z(m1=A9X{>&^2lV)jYC{12lvI9w=JIQec;cn@Fa<>1ilS={fPxy_l_2P`y}Uf!BX`1lk z2FJ;+oNmX>=C6;)_R3Lgl3_Ywy5_oA-kybyB^!I=LchQN+oh_$aFu%*hik7?&RW$c zI_#emiz*v@br+gAhMeX~<2=Fi#isuqM@i|CE$bvaUv?*HGj6nOia338)u}|b$J%|K j8*5&q1XeLNFfcRhKJlFAqdsR1r~vbH^>bP0l+XkK$qLK_ literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/fox/idle-1.png b/py/assets/sunnyland/fox/idle-1.png new file mode 100644 index 0000000000000000000000000000000000000000..7a3210b98a661f4ce3e77520de00a418686197ac GIT binary patch literal 1312 zcmeAS@N?(olHy`uVBq!ia0vp^ia@Nu!3HGf><~N!q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1FfglRhD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&-nVFuU ziK&^Hp^k!)fuWJU0T7w#8k$&{npqi{D?ot~(6*wKG^-#NH>h1eo~=?wNlAf~zJ7Um zxn8-kUVc%!zM-Y1CCCgTBVC{h-Qvo;lEez#ykcdT2`;I{$wiq3C7Jno3Lp~`lk!VT zY?Xj6g?J&i0B&qvF*KNf0j6J(SfFpHX8`gNOrftYexnUy@&(kzb(T9Bihb;hUJ8nFkWk z1ncniwerj>E=kNwPW5!LRRWr!mzkMjWnp4s>T2ldV(e_-YG~+cZeiqP;b`XQ0unN{ zFfxbfb;(aI%}vcKf$2>_=yk=Z7nB%s3xGDeq!wkCrKY$Q<>xAZJ#CeV+bvEw&4cPq z!R;1joO<#DphYAP1iGQ}cl7y$G1F^Ag{gGB7Ys@^oJ6*EyW$Q}Y z@>G3gLsg@bih;kqczp6pFa71;%riZC18k-+ctUmfcvFWVRggK>^Jj~7? z_1IQfAG&^eR^sPvi#4W6&MsWM!m|36cCPR;;S1>s?FXC~(=<07HE@@G8{<^#-XJ7t zclabHj!=0Y-K$xF1sQKt*E1Xn-FeX@kt=qe|0d;5zZoYAyJch*yfOt0oq>smVXni8 UcbC6c9RrnFp00i_>zopr08gsNVE_OC literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/fox/idle-2.png b/py/assets/sunnyland/fox/idle-2.png new file mode 100644 index 0000000000000000000000000000000000000000..c6e0212392b8b3f9c801ac3e152da30f8ed262d7 GIT binary patch literal 1297 zcmeAS@N?(olHy`uVBq!ia0vp^ia@Nu!3HGf><~N!q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1FfglRhD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&-nVFuU ziK&^Hp^k!)fuWJU0T7w#8k$&{npqi{D?ot~(6*wKG^-#NH>h1eo~=?wNlAf~zJ7Um zxn8-kUVc%!zM-Y1CCCgTBVC{h-Qvo;lEez#ykcdT2`;I{$wiq3C7Jno3Lp~`lk!VT zY?Xj6g?J&i0B&qvF*KNf0j6J(SfFpHX8`gNOrftYexnUy@&(kzb(T9Bihb;hUJ8nFkWk z1ncniwerj>E=kNwPW5!LRRWr!mzkMjWnp4s>T2j@XzXm@YG~+cZeiqP;b`XQV(92% zY-(X-4%6$BpIn-onpXnTn}X15gi|jlG2|8iZFWg5$}CGwaVyHtRRDY1Difz$9Nlo5 z2i2Q`+bsq-_38s1qYsK&q^O1o0n-nN2~W5{4m|0n<^j`t5instR`vSAz`)q->Eakt zaVzQ1|Nr)f9hlYH92wkX4PSKxy7yQmc~~^HMzkK=rT5^|-pDtiGv06gE~KouHC_LG z;u24fEBl0)FW;W?_1|Hg!%rh}K8dulaEMqHJIibe=aEyop~G}Ca{6%t1CjSh3w9~j z>|G;imT%paG;^b*dDpDX%lBO}OSEFFWh>&)5lNV)6wOn7<>EQjD}^i?D=rF4>K#7G z$=Gy}aZ^qFdg(d6+Di`$X=#*9kYy59w^nhOc1TE3k)cGUZK;Bp&z!7GCJ`ltcE#nb zjGAj4_!^h87kq1GN~mP~@>SJBTGM3ZeCq;Lj|t6o?_N0-GWa?*&3Mx$WA%H&CX<_r zjHfvNR_{N=trp{oGuRcxP8YnEbTj>HMY4M#fP2m~;;y>XbpzCuWL!3BkFOipD2 zEBO>=7+mDmsEG`D@u_wL^MtPg(Ni}I1WFh#x;{;T`~FL^8ItST1xZNp#I&QVrF0<&7;8lDA_JNMI1v-^coVUkSL7@^tlcS?83{ F1OOB}vhx4{ literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/fox/idle-3.png b/py/assets/sunnyland/fox/idle-3.png new file mode 100644 index 0000000000000000000000000000000000000000..f1c0f4401f2c7c92fcd690126fde0da23e0931ed GIT binary patch literal 1294 zcmeAS@N?(olHy`uVBq!ia0vp^ia@Nu!3HGf><~N!q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1FfglRhD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&-nVFuU ziK&^Hp^k!)fuWJU0T7w#8k$&{npqi{D?ot~(6*wKG^-#NH>h1eo~=?wNlAf~zJ7Um zxn8-kUVc%!zM-Y1CCCgTBVC{h-Qvo;lEez#ykcdT2`;I{$wiq3C7Jno3Lp~`lk!VT zY?Xj6g?J&i0B&qvF*KNf0j6J(SfFpHX8`gNOrftYexnUy@&(kzb(T9Bihb;hUJ8nFkWk z1ncniwerj>E=kNwPW5!LRRWr!mzkMjErG2|8iZFWg5$}CGwaVyHtRRDY1DigO`jBuI< z)tiFbEyg(Y>H{644~kl(sD=pv(+`LVPq;u1Jn5(A0n>XCFk#!v|Ngsm z_K9kWfxo?YeDaI0{pR1yGd+3Z$zTy7g@6}lcneR&8CG;8Z01l&kCi)oAYe~-B=hJc31t{lTNf$rAR1DxvoCJhz+}l{E8DPHUWDN^_k#8M2XA^T^xB^!{bWJ^?p*;g4uKvGLW(Ls1OuDq z{rF(XCRgPVIcw2`22rmQYzJkUV-g-}2cPg0?zq4(or|YMhEv;f;?dvVCxxXMJbK-@ z@HtOJ$)3xhM^>@}op5bY&yf;l$390t{u?riB|q)f)Fh~wCQh1a?I8B(@#Q6f%--rJ z7BgTe~DWM4f DcC){A literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/fox/idle-4.png b/py/assets/sunnyland/fox/idle-4.png new file mode 100644 index 0000000000000000000000000000000000000000..8bde2790418cc64fcac03893ffbb1cbc4ebc2518 GIT binary patch literal 1297 zcmeAS@N?(olHy`uVBq!ia0vp^ia@Nu!3HGf><~N!q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1FfglRhD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&-nVFuU ziK&^Hp^k!)fuWJU0T7w#8k$&{npqi{D?ot~(6*wKG^-#NH>h1eo~=?wNlAf~zJ7Um zxn8-kUVc%!zM-Y1CCCgTBVC{h-Qvo;lEez#ykcdT2`;I{$wiq3C7Jno3Lp~`lk!VT zY?Xj6g?J&i0B&qvF*KNf0j6J(SfFpHX8`gNOrftYexnUy@&(kzb(T9Bihb;hUJ8nFkWk z1ncniwerj>E=kNwPW5!LRRWr!mzkMjH{644~kl(sD=pv(+`LVPq;u1Jn5(A0n>XCFku%IGw)(xU~KkuaSW-r zmGtNTfBVA@%xZ0p3~sW9uQ~$Vd#sW?ESg#)T9570d+=#*VLBN({kVaF$or%PyOeA8 zu8}m$x9&=sxlz)*Yu4uF`!1O!S~1qL6>;c@BurC^<|)2%@to?FLKck`7lkGD4xi*? zY`Vy}sV08C^qgMprH6&IG)gAOG6}0&t2j(MB&4XwP$JW|RKd(=PF5z9h>}9P;__BT z%{2~ujZ4`JzBMx?R5E_~s%jyvX|i&@b%CnKgl4;Uubc`Qe4UzRylIoM`aNNj$xTJZ zQ=EUR_aEX`3vhDwt2n_bw$G?FOR+IW;)LRcBb{#q0vOxgI80z)Atbxtg2FZ?r!s++ zd<~N!q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1FfglRhD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&-nVFuU ziK&^Hp^k!)fuWJU0T7w#8k$&{npqi{D?ot~(6*wKG^-#NH>h1eo~=?wNlAf~zJ7Um zxn8-kUVc%!zM-Y1CCCgTBVC{h-Qvo;lEez#ykcdT2`;I{$wiq3C7Jno3Lp~`lk!VT zY?Xj6g?J&i0B&qvF*KNf0j6J(SfFpHX8`gNOrftYexnUy@&(kzb(T9Bihb;hUJ8nFkWk z1ncniwerj>E=kNwPW5!LRRWr!mzkMjH{644~kl(sD=pv(+`LVPq;u1Jn5(A0n>XCFkz=SKFDKWU`+9JaSW-r zmGtNTfBVA@%xZ0p3~sW9uQ~$Vd9vI$2&}#kah-K>h;?-(zp`HGjVBsqEF31?dzD@o z%#fNOvyo5nmY@Q2;LM}b}!2^`**LL0$+#h>1K?-*?3*>g`Gng$0p?ujc0H788rwQ z+qrKrxWLh%!_Mf$w?M<{-b*c`A61dUB@Bj3)dCeauD{MJ_x^^?VYU{%`|OjFrlbc3 zXf((;Xf;?gG=9?Qdc#m-cZ~HyciE)H%@XVlHQZj}Cm5!2boR2%={xX@!K1curDURJ z)^8?Dt`mMUUfkpk4|u$(VG0}XIUO$z!--j(k$nfAN@PX*6|uT$vkQbK_03STcW7W_ Y(DFIdP%y(O8B_{+y85}Sb4q9e04&$2TL1t6 literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/fox/jump-2.png b/py/assets/sunnyland/fox/jump-2.png new file mode 100644 index 0000000000000000000000000000000000000000..de416aecb580af7c66f6df3e711dee60aea9d714 GIT binary patch literal 1276 zcmeAS@N?(olHy`uVBq!ia0vp^ia@Nu!3HGf><~N!q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1FfglRhD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&-nVFuU ziK&^Hp^k!)fuWJU0T7w#8k$&{npqi{D?ot~(6*wKG^-#NH>h1eo~=?wNlAf~zJ7Um zxn8-kUVc%!zM-Y1CCCgTBVC{h-Qvo;lEez#ykcdT2`;I{$wiq3C7Jno3Lp~`lk!VT zY?Xj6g?J&i0B&qvF*KNf0j6J(SfFpHX8`gNOrftYexnUy@&(kzb(T9Bihb;hUJ8nFkWk z1ncniwerj>E=kNwPW5!LRRWr!mzkMjH{644~kl(sD=pv(+`LVPq;u1Jn5(A0n>XCFkx%GWh!G}V9fJ$aSW-r zmGtNTfBVA@%*O)Vd#sYK2wo{^*|?57;_}VY)e@c)53|nD_{ez1spNvrH?HL}W(S=5 zj<%k=ld$c=)87epXRa%lonTzTByL{bx<<=JWHE?%Hg+ z%yL4Jqg$}g!0fS_WlP67*%NG!y2@uTC-kkVRXyh5<9F~S$CEW}@062-<%>COl9iqYDh`o?mextk3hcFauC_jONGfLMR%Acm<;KQ#sIW&SH$+pNU9NKV1WXVr;?OYZ;1rysW$;DAQGZrquWZ09g`>tQTMaMPw&q#r#Rp#%d}1+e jMvT#|_Yxs}3>*dwVy2H|yH_N|g32RLS3j3^P60F(sMjcXQ%0$H3TL4Ltd@&Er1TwPoQ6s-1iaSXBOeS67~ z?|=da%Yj&ffB#R4Ch>-D{Jw0C&zz3#Mf*hSK8iA~_W6;f`PB1})GDtHf<`km6r5%m zY@Kes+57#L9Q$)+4k=COtd_Gq o0F(sMjcXQ%0$H3TL4Ltd@&Er1TwPoQ6s+}haSXBOeS7gV zUxNXM%f;x7KmYx=v6|L8+>uUycxc{~%m)?R`+qbXn9SYP?sI3s&`{i|CRoju^Pc4L4rpHtu(*0Q+H{Y;X>b4l literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/fox/roll-3.png b/py/assets/sunnyland/fox/roll-3.png new file mode 100644 index 0000000000000000000000000000000000000000..add166b2b152ee1563ac88b848aadff66705714d GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^ia@Nu!3-o0F(sMjcXQ%0$H3TL4Ltd@&Er1TwPoQ6fE*|aSXBOeS6WH z?|=da%LPfrd;d>d^|Fsz@OxQKC8K2EeXjjKnhvapc%T(OCwEc@i+jD&X`X|L0-T;M z>`SM_Oo{DKG4|=yPFSuWyh`Pf?%Ud1oQG}F9;RBg*d6#gZSt4Nv5D0VnJ23boxAwt eyY7}&vox#)9&t;ucLK6U>3ucV~ literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/fox/roll-4.png b/py/assets/sunnyland/fox/roll-4.png new file mode 100644 index 0000000000000000000000000000000000000000..58ff431045abd13a2aac6a6396eb055caf35d5f4 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^ia@Nu!3-o0F(sMjcXQ%0$H3TL4Ltd@&Er1TwPoQ6m0NxaSXBOeS689 z?|=da%LPfpd;d>_Uf6Q=W%}JIqMZ6oT&IE`h|3FP6e=@JVv=QPx6qbxShsP~#H(_= zDN4R6;<5^%PO5wS#M3_YFwVLV8+EsThWp*gJ93K_KI?eCz?ENDr&RFmk?x%fST884 tJzTnCu^5NJTlO%6{0pBp=a=O$SH2d0`DNw#EkL(0c)I$ztaD0e0stSFX#D^H literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/fox/run-1.png b/py/assets/sunnyland/fox/run-1.png new file mode 100644 index 0000000000000000000000000000000000000000..ff5d2dd7959f6bcb2382c630dd3b101d103b39a2 GIT binary patch literal 1312 zcmeAS@N?(olHy`uVBq!ia0vp^ia@Nu!3HGf><~N!q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1FfglRhD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&-nVFuU ziK&^Hp^k!)fuWJU0T7w#8k$&{npqi{D?ot~(6*wKG^-#NH>h1eo~=?wNlAf~zJ7Um zxn8-kUVc%!zM-Y1CCCgTBVC{h-Qvo;lEez#ykcdT2`;I{$wiq3C7Jno3Lp~`lk!VT zY?Xj6g?J&i0B&qvF*KNf0j6J(SfFpHX8`gNOrftYexnUy@&(kzb(T9Bihb;hUJ8nFkWk z1ncniwerj>E=kNwPW5!LRRWr!mzkMjH{644~kl(sD=pv(+`LVPq;u1Jn5(A0n>XCFkw5Io=RX~V4URX;uunK zE9uYw|MrI+nAO@G8Qf$IUv&h!_gFOvBpg&dc;ZCIA@fUxY~pLrCaphE^S*YvWZ}!! zmA2)n`pSl?Mkf^me|z!xZat+GCJ{q(HF&)XJjOp}~lxOjzS^(*aM;bp=X(iPedI5DPaZaQkWwOkls5m@zvS-$CmthqTIN|W(Q!U%_z3~rSEjQVmX#DG78L`u8 z^9zS_eSZ^<%eX$A{D`5cuc5W=Lh2t^1C5k>FSRDkomX(}`-X2UMT)I4eg~YGV|i>v zIx_tQN?5A4x$1AY(4Af+;~1pNwTWSGh1>=+HNDfGz7s^m!wlLdWPe<~N!q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1FfglRhD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&-nVFuU ziK&^Hp^k!)fuWJU0T7w#8k$&{npqi{D?ot~(6*wKG^-#NH>h1eo~=?wNlAf~zJ7Um zxn8-kUVc%!zM-Y1CCCgTBVC{h-Qvo;lEez#ykcdT2`;I{$wiq3C7Jno3Lp~`lk!VT zY?Xj6g?J&i0B&qvF*KNf0j6J(SfFpHX8`gNOrftYexnUy@&(kzb(T9Bihb;hUJ8nFkWk z1ncniwerj>E=kNwPW5!LRRWr!mzkMjWbACH{644~kl(sD=pv(+`LVPq;u1Jn5(A0n>XCFkyFi>IE_|FlKtXIEGZ* zO8WEvzx`ncX0=wJX!7=1Qwr&xXv20$h3QJ(u!KuV+G$n$+-o65e)J# z@er{pHa;N3WISgAvqRQOF`*X?673CFBBmcVFc5jaXq~b{AmeA*8;WUnB(l!U`{lK1 zxkTsM0~0Q@w#m#&PT*5C`ztV4?SrIS-}}x!z6tL?M)G~q)G3)D%Ot#f#~cRBg!uK+ z_gFYe6xx;=nECW+wTddXUs$`L$&zK>+XV@;H_Kf(KK((?69LALk`hNw@N-UR-EfH0 z^8RAx3C(uzUNuE^aNT>U6=be5;o!4e_k&y3PdDvKKA_m#cRHtr_39#8W+8oC@Zugv$^8*%BY;h?JO(Vgr&JswyLwOxuJG6+$1;m@+n4@ gt!pwk8JKt&;%m3<{W)=i1gI$TboFyt=akR{0Pn)G!~g&Q literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/fox/run-3.png b/py/assets/sunnyland/fox/run-3.png new file mode 100644 index 0000000000000000000000000000000000000000..987b8f156fe31dad9b25b942cb60648d12d125ee GIT binary patch literal 1298 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 TrB)AGLFJF9tDnm{r-UW|9A>UY literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/imp/hurt-1.png b/py/assets/sunnyland/imp/hurt-1.png new file mode 100644 index 0000000000000000000000000000000000000000..a25178944df06f97647095cbfd48da5def82be85 GIT binary patch literal 1548 zcmaJ>drT8|96uGsh!9YWN;IBl7*gNwt7LQ(+p$b5=XLZjy|LLg;PLRm6B zqUVyy0xGqHCo@V6W}>8!P*|W1>%l}9CJNA`fP*gD#@I2J5*pXV#J%qthQM)%P^g4n zCzY)?g2^mTf-;Fbnm}U_Fis&soBV#Q3F zl!;j4NeLAQ0*Aq{)9I8rVEpma$K?No*MG!Z{d~Aik0&fqMP_Luq;nZ5K@Bn|%LM*lu=n zBy1w>Y%x!WgR`#kh2pSep2P)~H?yp5vWvz7R$%P~EC(hh`??knM(S~bVtkiT<1D=% z(=m1dX9!ZKQ9`1QgrY2%0*zHmkyu5nB1MX#T7?=#;uI(%Lo~@+RHlia=+L zhkV;9^NNQl`;(05d0sSk|BXjZ0GL^#)2Pj^;a}@67Iv#b`$l_p?TeP}4w8ICs81Rk z!LQ1h*^l4mxYqL-{x2hHDz>~Tzt&|~p60jl{w+`lZeMiF*mkGU{e-`B@ai_naH6Ni zwb&csb$Uy6QAE|Uw9v~lv_aK9w-Lpa4Hd^~!e4k22B5y%1Fqwz#%|eCvoBcrC3>>f z;f_k5vw!b_XJ6;6`DFIOGuI@?>ej|=(~(2Ki3Qhlw#N=uTWxZzB)oI|*{!}i+YMno-m!1CB^^%7d>UqNI==N)bCv(V>;-BhK6uAyA$K){L%&%e&k?8< zD;ofIukrMLKVQWseZ?!~o?@ZnGe=ct?%G{vK6n5agUzAB1LU5i%=ywmRi_t*)gy=5 zon?<2uECiHY)2Dv>{}CB&JBgT>Bdqp#19``v01*lsk@%&>WtZ8{&=P_J!Rx>`RSg^ z4Na$lYr}39t!p^-C-944tFJ8i^z8ZjmHotr_sm7ADhE*3(D>sQx}8R^>S)>@u1tCJ z*1EU89E{jpD_;S&n>pG%4FPRf#g3fJCkTOS8yFnx8U39D*DYL`~z`Ue`asE0IO(+R3PD@VM`TSqn; zBW;Y;+t9zVqOB1aE3LVFBVZ5czc8?qJu)0X0)wr4d!9zU$26Ijp38r}tR>{z&x;S0 z@6XboeY*O7R7Npty?qgAAFem!SXRJ=y(0z9aX%b<7Lp5$%`kN^y3lmr|5>LsXj+nT GEB*mgYeJ|1 literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/imp/hurt-2.png b/py/assets/sunnyland/imp/hurt-2.png new file mode 100644 index 0000000000000000000000000000000000000000..84ed54d836d513d41d8e54f159c8a4857577e400 GIT binary patch literal 1496 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 G2~7ZKv>*up literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/imp/idle-3.png b/py/assets/sunnyland/imp/idle-3.png new file mode 100644 index 0000000000000000000000000000000000000000..b220c04ad12b3e854ea34463871574f9fb3d0dc9 GIT binary patch literal 1494 zcmaJlPZn}?52g{IcR|MQ2V{dZzzQ13d=lOje zN=r>z?Hl9^0KjVF7A!-!qlHf*@)rIc6`4cACFTjB4fM;Ek0FpEG|)D= z2{EyHGN0N~#*vw2sb*_gfmKC7+ITR|sTKrmB#(nmTOn;%J2lXPu3C7z+%N<#K==X; z^gJnxDGk&!90|&$3W*hsLBLp*6jdNGax@B*A!sa&$YDewK~OcKRLf9s@jyZ}j>uJK zV1~t5f~A4-d7f3nu*2byI-;cvmj|ONl?p~=uuLWq5E6SS&Erl9ZC}5nfRT19N3lG` z(4b2Z&tZyr4J2gxyaXG&EKA!L+axp$cH%6IN)cB{OF)z9|DiV9GTP2(kT3H6Phq>c zlqKN|(#{lfR$*|t>s_H(wVoq!p5e?4Q@GT{w0wqV?D-4}>h-R!DZwxkZl!3KGkk$% zGO3NUoyTb_X~Z;;pd+OyLY;`o6(}N8#;6Q36irm=P$X7`B60-NC!%spxx~d7Yq5=_ z`6Vv#f~#7Q>skmKD@4Xfjw&Gu1IO6Fg~HX;%DE_3)LY~dE9VlsA{Q2tfnDSM*SMEl z!VbBf%gZYm%j-|l!p?KTau*Jn4+DTZX2f)6=hWkd50X7}Yik&NVRO@I(1L9^8*tTP zXS@PYg%2U;6NN(%PXhACaOx>Z#`@y|2VGw7MzFYizXaeD`$cs)0U-s^lKG z^JnGktx@fht|&h}9C`eSEMU#ZkTTF`Iy?Btz9K|0j)ae*-Myb=Z=V|f_QKzZjqOc! zN4s)8Z@jH~@8!`vW3=iK2u0p+Y#Z(Qdbav}=;R=9_FANNhbCzE&XRcDy~f_rYyh~< zY6rc7-KkXR{`QFO+Rf<$HC~e)*w|dhoX`OmA4h}ejp6v-e zP+~~X^|ZBJOV3iod5llN-TsoevAT0l!$g1iKOPn_t$Y1#K@O=O_I>7WhILg?bhtPr zz#Yij*ZWiR)syLjULNx%4czb8bL-e?|FDXtdGEB#(+Qs$(zE;k{8(#H^F2}W zo!VV{Mn2L37&aVCk Dn)DlZ literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/imp/idle-4.png b/py/assets/sunnyland/imp/idle-4.png new file mode 100644 index 0000000000000000000000000000000000000000..c8992eed1e38b2f0ddf8ad38c0e636db2d7cf6f9 GIT binary patch literal 1492 zcmeAS@N?(olHy`uVBq!ia0vp^#z3sg!3HFmYl9C0DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9r5c$b5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hqhMrUXs&Nys&8PXYhY+)U}0rsr~m~@K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4mih)p`bI{&Koz>hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s0ATTy*XeV}9XLD7p8-7q0w8Uiuli5JL$C;!wuV45!iCT{P=*IXGG zn4COa978H@y_vq(i`h}&c=_R*F4m5Y8#+8ZG%KPamQLK$ydYn}Gconml1&%f0}h^J z=P+BTW73rBk!a<3(62S&L5W`9%-L^Zo$}rv-oVU#bNAVe`~RN5?sdHI$eIYZGZQ2w zn3EHDdKwK4*p3~L0CRkF%G6}b|9H>fFgx$-R+sD6F!xYG-EFZ&Z%+Jwo+i^05&SA# zQ`nMY)x+<8iz5^59sGB^sJOelYL4>ec`L5&uHXD9(<`}cH;+T;^Xqf&o?lmF+hn5c zbSI^F(YKE(!H?56DE2EcDrjj$%$Jg|h~yJlk&^mDdO_j~hFSN{Ds)74g=%ivl;8O$ zt)8W6_U?C&yww)-FgDKk=)ILA>3VMAmK1IKr{8TZ&R`5ZwsZEnUiYZhLX z*=qdl)3o0UFa4gazQa&%g>C#d_eW3vRGF4^ZCl1yCuY5NdbQ_54T1YM=HF}0IL(;_ zUThWlE7r=Ct)tWB8DzGmaqGw3lDTr3=Z{`83H5kdCDS73w8yad)djUlOS8_zFgP); z2x2JwbSvmv>BrQ~^LxX)ZTpQF4y?9dcVv)R6{ayUhb^z=-C=*bjJ}z?U78}7o=pA8 z`(?r9rRQJdH=K}Px7(1to$-CiO5t7S0$NvS|GXLcvXDb;llbL2OXk)PhZ4R5j>f%F zTKTg?GA3=kaPN(&8QXvDUGvB7a1F49Y3x! zU}BP9dicGxffakP-y(xAY&Y-Z`7dQ!#Xh%K;FVdQ&MBb@ E0LkwlDF6Tf literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/imp/jump-1.png b/py/assets/sunnyland/imp/jump-1.png new file mode 100644 index 0000000000000000000000000000000000000000..45c6a56b1237b2a394a47797a0344f551a480d11 GIT binary patch literal 1502 zcmeAS@N?(olHy`uVBq!ia0vp^#z3sg!3HFmYl9C0DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9r5c$b5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hqhMrUXs&Nys&8PXYhY+)U}0rsr~m~@K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4mih)p`bI{&Koz>hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s0LKdlN&PP2Eo zt_f1%(p2qrRS-~&-5{jbb1&xD&e-?otnUVwJqRdycVqkKd$Vs&UiZ2yw$pZ_bK=1W z1F;^~WF*Qb;>n~tI!k+|Jm1z*pE0Raaj~8KyU6UfQ$IG&naX@%TUVM)$N!yIXH`m` z)8`jx$a&(uGTcM0l3ie#&{z>SMjF08FM^Y7Z^3`yUwM{7osxRM0d{Uar%5| zQB2aTmu1^#>$@^JeV#peqKTLB0~?(b$q8B6b$7+)-aN`&w|nQGGi+xQ+$|M)nqSW; z`e?JxNn!SE$a_e6dDyQSgoUo!^(3om=sX_wGxL zz6eb#?(;9|_j^8`weZU#vo*|ZXD2l=zC98fZFTL9ZroM-j0?vq?#yE=o7+|YIPcoz zOG`x=x{qo~lu2qcS~0w~UG>L$#$}$M3qLFlYqp$Y+s&g8a6v%6*;VO5z0LU(ECtOYz1vjF!7H7{`HTQXKtM#mprwU|OI=ncv!t}LCv#&@)i>|=x#ixvoGCnO7S|!Zt z@xpte?>9+?#@eO7qQnZ@Py5K8dttrt-pc|;sh#jJzf1= J);T3K0RTm>Dm(xH literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/imp/jump-2.png b/py/assets/sunnyland/imp/jump-2.png new file mode 100644 index 0000000000000000000000000000000000000000..bd40e865f38386d910dbb66a9bb4f3a55224a0d5 GIT binary patch literal 1461 zcmeAS@N?(olHy`uVBq!ia0vp^#z3sg!3HFmYl9C0DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9r5c$b5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hqhMrUXs&Nys&8PXYhY+)U}0rsr~m~@K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4mih)p`bI{&Koz>hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s0f*}}=x7^itqy(w7S0@Z7RQ?EYIG5VnBMT%~i5HJmanDE34)!AE@2$u9e2#DT z)f*x++dmq}9Xnhh!T&hXrU%U7o$9^#0>aBh6gDwRtYNhNS;28fbF)QtiJ~?G z_hQq{hvqgirYAJ;eabkf5)knuv0&fA4y)D1Yr|5kZ`3ADJsiNedeQD3{OjdA{$I>g zsk^;qe%1N7bZ5h8BOX@AgYswH_Y0=K?6`mB>)C}?XKUnxR}{a!ZkN4pKWF=VefE{^ zR-22jZ8KAzd2ymUxf`-lMWVkE(^V1pr z%hCQRuBsJtlZ`w|@A?#eW@`7maBhk7(p5Y!HR6pqgw_2|e~C!?wCIqX&l&IXZL_L3 ecfIj$U}WfJP}ezDAfyT^NIhNsT-G@yGywn_D-mq~ literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/imp/jump-3.png b/py/assets/sunnyland/imp/jump-3.png new file mode 100644 index 0000000000000000000000000000000000000000..9a59b1bd6812f35b1c80faf25c77150b0f23cb70 GIT binary patch literal 1466 zcmeAS@N?(olHy`uVBq!ia0vp^#z3sg!3HFmYl9C0DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9r5c$b5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hqhMrUXs&Nys&8PXYhY+)U}0rsr~m~@K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4mih)p`bI{&Koz>hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s0*yP`xR*-C~GSuRhQ*`k?4Vif)(?Fb#p2@Wcz`z>|M!9x%-p0TcHpW$8Z*3``oH zE{-7;x8BS!^giq$a=chIxKvn#rQJ&8F3aObPn7;LeEGgJjJXhw6a>l{4`~fjm zJGV3~ws@f+BC=~`ck5>TZ&y#hzFM&}rs!I=z@%-SpX)0B|KGja;M`7g&A<<88Ztf2 zg$8`b4q8aCKTZI1{&O8O|8{=4&aPLtAD=PdG2V2^Wy05`@87R`-{U-U@=Tr-hFd8; z|9ek;nY>nRTARH2eR*a3{5dsmXaD}2JTGr5*D@O>0TC8OgH^%Zcl;z+^%VpTEYq~q zmGEfEGs-;b8YOz^ThE)5aiZSN3ST;W(j-1x?+ds4f8ksI{2S8DkqbMIF7H;Du;lsI zLysS5aD1PdRKBF>cCYCA-0t)RR*N3;r!{Y|`gWc{#jX8S!2SdKg5~$RCRe%L44zqT z%+S;uwj}ud(YWZ!x3`Ql7R9^Fl-<8#C&Rjf8TQ*Fo*8VJ+!@Mf`B1ojvSo2Ucck1E7(&+eOgr=9L~M06M?RnD z(U~!8qJsJ*=9+e2U1YRt#T~bEw!33IzI-vxJS&ni=i}+sdkZ#~-IOt7Hrf|ZoP6iL zOTMO8&~~pnDFvg)!5kB=zPlFek`%VqgpuWVM`3QL>dQOY&dxd43pu;iO4PQ?8b;5! zROV literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/imp/jump-4.png b/py/assets/sunnyland/imp/jump-4.png new file mode 100644 index 0000000000000000000000000000000000000000..99371a8d62a34a274498a48197cff54214929b4d GIT binary patch literal 1492 zcmeAS@N?(olHy`uVBq!ia0vp^#z3sg!3HFmYl9C0DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9r5c$b5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hqhMrUXs&Nys&8PXYhY+)U}0rsr~m~@K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4mih)p`bI{&Koz>hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s0|M!9x%-p0TZ{}{TdYp1|}y@ z7srr_TW@CU_F{GvX-iiL^-pH)nCe%@qBDeLv6VhE>f|e|A*th|J8^jRs=J z4n;_CCnxIo1nr*GD)nZGtcmU!odY5o`Da8JL^aeMY-b4jtL?Jee6?q_v8qL}f#brh z`%P`^%a${x?3=~dz~^wm^Z;Mqvqx>_)&|NAXhGSeH4SH;ozb{5 ztGD!i=G9fx4;w4|{Xg&K1#jNV6DM0Tr5|><@_ZA+r64!fDvjgKE85DV?&}+UpVO$k zYnq7NX#w=8et4}Wx+i~Ew6(|pg#&H=5>FCvUmncRfp4u+%$ z)Ljke4q|y$XLIu90T+vf^G@E&|Gg;gUF$llBG&IE3SYPxKDBE;UGt`D%8`P;E{B+i zSph1O3){}eu!t;wCBedW@gPfK%?CBJ{C`hM5|yqzR4fm#=kuvp$D!NO7v#2|aRPHe z$8!#bf(0S*HM)SGp?@ed{h_U%*(xci@~v9J~vDnemknp3O8C8u+Dd~waZkU zml4T}j;DNE>6yD=iu=O9OJCeSyJ%I2n8M6MPZIw#@i6Ef^ttx(*9KcqIqT`_=d#Wz Gp$PyMPAO*q literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/imp/jump-5.png b/py/assets/sunnyland/imp/jump-5.png new file mode 100644 index 0000000000000000000000000000000000000000..fadeb707bc883ec1a52bb2cf97bd292a6b53bb9c GIT binary patch literal 1487 zcmeAS@N?(olHy`uVBq!ia0vp^#z3sg!3HFmYl9C0DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9r5c$b5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hqhMrUXs&Nys&8PXYhY+)U}0rsr~m~@K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4mih)p`bI{&Koz>hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s0*WV-`b5G1Rk8-D^TkG&;NXZK;1e4 z-i8A~OqckZFC7wmy7EpHTlwAh+}rO&UFE;{?o0D^)d#AjsZNuaI3E2v5njfrwRHa( zw^dtaJ^gt5?)QD{CXB7cLHql^Y)cbwQD|CJ^@+L6G+ylOcJ`UvGp-$~dhkd?LaxE_ z1(ViFop0*BPyTT^z2?-gKELC)+tor9zNt?h9a#QM(#YhX!pW=6o)6FKU9VH^fB)vY znd{rHN3G4XZ%!?7{9t`IV%wf2+R@I5rEA`IcUMjI*kXD<=zl<~dw!wjQ#Oaq*D?-2 zS@vDs=mlT$UzTgP{kIz#r*bree5_{^_}*;)LaJsF)1s}65!$!;RM`~v%zwtuAiPJb z;~Qr~{vsBU)obo>J}P)07;?@&^_M|T*0Wb1ChcBvw^eFh!V9+*8cUbY-pSi2A$L<(xFz-b6!DgT-}%4bys)ghx})Is3+@#$9?eHE{0s*OO(rp2?Ri z{=Sfn`QfTFw|J%`eh_Fove&cW?Y}8DD-G7}O<%|JQ+ZAC!>9`kr>rIQO{a>jpRfzL_CfXzsEGA+^>bP0 Hl+XkKjQ1*Y literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/imp/run-1.png b/py/assets/sunnyland/imp/run-1.png new file mode 100644 index 0000000000000000000000000000000000000000..d4aef633393946ba7c504c37b3de773acbd501b2 GIT binary patch literal 1498 zcmeAS@N?(olHy`uVBq!ia0vp^#z3sg!3HFmYl9C0DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9r5c$b5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hqhMrUXs&Nys&8PXYhY+)U}0rsr~m~@K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4mih)p`bI{&Koz>hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s0ATTyvL;gpPe^@VH1b;8iosVE^srnN!@Z!|DrCEpI81zlVNMooLYe=tkXYyUhzAA zhKESXUdM8$pWItHCWt2I4W3my-?f&#OaU46Jbi_7)VR=K5qt0kBBtW1CLllfJGr+F;iOZ}}|lDL43>v+(o|D`8IdV=Dt&*1m~nD493=a@Qt#MmC1iA0}3-mwr$ImA0O) KelF{r5}E*iCMh!j literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/imp/run-2.png b/py/assets/sunnyland/imp/run-2.png new file mode 100644 index 0000000000000000000000000000000000000000..6e8f2a7da4b8ef5664d8ccfa228fcf6a12ef8aca GIT binary patch literal 1476 zcmeAS@N?(olHy`uVBq!ia0vp^#z3sg!3HFmYl9C0DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9r5c$b5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hqhMrUXs&Nys&8PXYhY+)U}0rsr~m~@K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4mih)p`bI{&Koz>hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s0ATTymUM%(fl%v?!>vug|Mw6I=Ov`Cp5Fa}}2e&vX1d%f>mF_wn0h z!k$N0-|ltEOiO2ZA-?a?t-SAv54a~kR1dt)dEQ~mJ^3YZ7NxCso?ehRucJO$ea>z>t!5j^RV^ z?1r4alWz>FUL}|tT=`|pxN)9o^1tO*88_q^UJ#tJ_2C(}LZ4X4+VE9ZtJ4|ZK6W)V lo@dCH6BT~o=}db@HU^=4F1*Y0cije+tDdfYF6*2UngG~-5R?D_ literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/imp/run-3.png b/py/assets/sunnyland/imp/run-3.png new file mode 100644 index 0000000000000000000000000000000000000000..ff53781e82b46490c4bf7f2219bd4babf8fe905f GIT binary patch literal 1452 zcmeAS@N?(olHy`uVBq!ia0vp^#z3sg!3HFmYl9C0DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9r5c$b5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hqhMrUXs&Nys&8PXYhY+)U}0rsr~m~@K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4mih)p`bI{&Koz>hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s0|M!9x%-p0TZ{o%qBku1|}&_ z7srr_TW@A<^kQ}tXv7r zfBt+tdTv&ubx(J5$a*u|2*U=uh@I~$uRhhy74?ba5A9ySrqI5BZi1|Nkh>VIeNIDr?aeE;$*<1J@RS>OoW2^Q#&C0oWaEREY|i5M_iQy~W>^+@)5J1}BeV2K z!X>#9A8nV*JXaVyY#ffLpS@M89DSr z1<%~X^wgl##FWaylc_d9r5c$b5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hqhMrUXs&Nys&8PXYhY+)U}0rsr~m~@K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4mih)p`bI{&Koz>hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s0|M!9x%-p0TcH*qve_m3{3o< zE{-7;x8BU$>&5ISa6G@+EGu1+Lu{jfw`1;_OC9_P>MQyeY+ae0y0Bm2nw^73a%%D$ zXD(e9$Af-rnX=8EAKAI{rbPbpch@#J_dU^*H{bvF{PA~gnQIq&ZuBy76iZ<8Y2Y+q zR6D>jgFzU`(K8D@5vvzcG`Da`XyK^~v%Q-{YP2$*=32VMoY7FA z?clj0FUbWDP1pWycqn4DZHN5w=W)flw<_y5YdsUnTU5L`@tlI_fv{`UAG_238=B7# z;&9+Apa18Dv4GdHlVXgo?)|sRV|eMyctF{Yo1sPO#^+Fd(XQ#&z5j_c^tPTo$Uke( z1ED&Z(!D1nliyCaZe6&Ep>m_eVg?g&3x!$HdcDThJZBCbi}*cf@3xz9#;aC}%{OM@ z&}M$i~g`bRFWOQ0=I z=iDy#%PRv7&h<kWOi<6LDAZRrT@4UV(0B=kzkPiuFW&~Dc@I6q3P-B=d#Wzp$PzL Cy9Y`D literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/imp/run-5.png b/py/assets/sunnyland/imp/run-5.png new file mode 100644 index 0000000000000000000000000000000000000000..cc69e28fecee20493dfc3c14e72a773e866b0b02 GIT binary patch literal 1445 zcmeAS@N?(olHy`uVBq!ia0vp^#z3sg!3HFmYl9C0DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9r5c$b5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hqhMrUXs&Nys&8PXYhY+)U}0rsr~m~@K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4mih)p`bI{&Koz>hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s0eUB2MjsTtNYM=w0;VAl6P|d19C-3i%>$EaktaqG|%bmj;?UIu=}5xH;i&Y?u52-vE0j**Ui&)!F}Y zyn4f~5qW2A{DNjl7RQ6Wu{t)NFU9PPiJNpSZc=)syZ7a3Ex(`EzyJSEX=+eX+#dgzud8(Q?t+6j6hsWtDAC7c?YS-7q@cywyq4L+Jib z&Csd|L2otVo~pdQVbdwZIEC$E`?Z4(Nspfh1Z>|dSvN2K$H!v7)(>Kf|L>c(H1t%$ z0)baqESG+LOWv<~u6x0bhKPh+-qBp@>x7To*IePL$T#)IH6FG@1{RT%gQPUVmTi+@ z2=zGr>taT{-J9I*zvufyj#`}RUCJ!6UUCVOOLDq})eF}3Pp7sxF%%VjNIJfZbLo=F zUpOv2(EMM=xWtsL;k|_^gNA9x_1%e!MDpL6zcFlhb}O$!aj%{acb!n_+6ZH-U-|t) z&VN}?tSdXVAZ%K5;i^Nce4+w^7tGd9_coquv@Fjuoi}#hcj1%F4vW@nht4d!;_>P` zi-QD9$ij1JUuT`%oVnrAvA6uYjn?dqoYno%*HrhE{^m1{XYRzLtvq5o=cTmTHntF-v6<$haSUNIX-uY}+lLoHb>(b2~*2YQ1>8X5pEXyIZ1HTw!24&doK; zO+)%kK!oTTzP1M;t0$DT+0~v5I#4xZP2U2K8M{_!bQv_?s`s0BY&`=rgIl_5U*W@( Q9H4^J)78&qol`;+0BIr-vj6}9 literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/imp/run-6.png b/py/assets/sunnyland/imp/run-6.png new file mode 100644 index 0000000000000000000000000000000000000000..204ece99e6e7f239ae2b5f4ed89fc0ea6b837050 GIT binary patch literal 1407 zcmeAS@N?(olHy`uVBq!ia0vp^#z3sg!3HFmYl9C0DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9r5c$b5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hqhMrUXs&Nys&8PXYhY+)U}0rsr~m~@K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4mih)p`bI{&Koz>hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s0|M!9x%-p0TcHw>v_x!42*9* zT^vIyZoQeY(eJPWPg`-QdV(_(XD1_Dn#!qrtX~;#Oc3a2U>2U6*yiqV#>U}lt84`$ zo0Wp1;RexVUha2}9Nig{ap}h;?~PX#GfSu1|F@f8>y<65(`DMkYSbtwfr5U98=O6) zoflFx%lhi7c?KdX`Yh{KGE{9d(dKG8zid@;Gow4hqMR1a3(b#Ovp1}sczK880g>Zx zc}mx;O@0y4`0nVnA74LZO^7KLWBI%E$M*H%PkDQEFTH)u@#I1Egdcia_1YdWBsIU( z%g=sgVc~J#H(<6?YG}}$=?x+shXT@by%+5o?>WOTUFQ`a?Nz{-1S?9+E?#yUzQuk zxj4U!d8-z~48KT)bs>dJ%%^6^Zdxn3)^*m-8#gN7x;HQ~_-^2P+uN|;4^$+2y85}S Ib4q9e0Lv8lQ2+n{ literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/imp/run-7.png b/py/assets/sunnyland/imp/run-7.png new file mode 100644 index 0000000000000000000000000000000000000000..18373d642a0e7a88868b99872f5a62fc826c1dca GIT binary patch literal 1437 zcmeAS@N?(olHy`uVBq!ia0vp^#z3sg!3HFmYl9C0DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9r5c$b5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hqhMrUXs&Nys&8PXYhY+)U}0rsr~m~@K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4mih)p`bI{&Koz>hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s0+g z7*cWT&5VtHhYbYU9(Qrxuu@PooU$;)}OOic>gum1JLITq~#gxl|&T z?YI2+ z$+4EZ6JjN=9iBO>A=y{yfUk&xg<}P8!V*5;115qqgtk`wE7Z$)m9XiXte!@gxpOz` ziv3PY*PgxdYguQj;qkEU$eZaQ95HWJ{^zRdyzO`(C%%?@`IL){FLI{K-MheHA-aj} xaPIDdrT8|96#QaflnZb&3N2APh9=M;)&z>@hOfOCRTQL>>Rc5H+=Gc)G4D+2Bh*d=$rM?Rm=_w~tr zq)9&D<*~y9006Iqc$Jo0CEP1?cjdlL@23oL%XT(4gH0iGSTjcBK#YOR#=!&=mWyj~ z%urHz9gpCk!A4yMo1soZ^`uFJ*)bxEiQ?D*5D{geFnvDGg4uYkkx&R0E)57kqd_4^ zm#SekrNr}$@uf7LQktyOm*(r`20>IL7-2y<0Ta$*pv6=`FsMZ#Sk^_kz5N;zfXfgz zUm5G;noVj+hRG9?6yS%d`Rzp9|Z89i;J zSR+Y*c10|kEMgS`F4LDKn5Z>bf>~)3*D%O}Q4k`6?Io=O)$0F;noMhGhSlP)@?BS$ z(Unj*q{SJsh}Lt1%kj5|qEID`V=PJQNU~tHi<&%=C7C>u0+mX8*JNO@8q*sI`{kZx zmRgM_5DbeEdOSg;5O6voqtSpOutWmOmC8_goCHB)4(@d%P{)44QOCQV(AM-9qiz^@f!5wx89CWS)wq`jd9pS;ZT$!OSn=j0ceFoT^ z{rHjf@WWHAdn)+hkp)@h8~p|4e_=rLrK@8(n|Om)yaEsX;(JYfIIT%{qMYtMdwXVX z>!2+Bw8mV`>pZ%LU)K`tTA6Dti!5zVJ9O}3?z7+Kq(Prtn00#`+0d6he2#F^0NqOy zc%a4;=c_zY-o4{}hl0Hq+8WVg1v)|XcF&_&XBXNE}nr#(brQQLPFJ@nB zE4#dNTTfx{i7nZ_l6V(+RqND3b=3_wz_S zJ5+0{I)6LMWwPUs`yV?uCc0X#eZ!9-hO@%p%|$;|BEHW1G$CI1PHR8^{#k9AqyJv_ z%kLq5TgL0K#ogM8~GZzu8{rbv$I^ z$KMazY(CRpGqNC>=@}PW2YjwnJ;`=3k897=q<(emonrXpR1H4&^Pq+IP<^vyZ+94M qeZg;Jf;y%gG6p8PMu;d!PheMi%=8zVJA>_i)P&e%Rr~&|ihltjJRP(E literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/imp/shot-1.png b/py/assets/sunnyland/imp/shot-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f1a76ee9eab92a6e46418a12a4ff8fb3cf6c8c28 GIT binary patch literal 1446 zcmeAS@N?(olHy`uVBq!ia0vp^#z3sg!3HFmYl9C0DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9r5c$b5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hqhMrUXs&Nys&8PXYhY+)U}0rsr~m~@K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4mih)p`bI{&Koz>hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s0{xpPj_u&cqey671>ZxFE|zo}siA znsT%p7APEKWSgYB`OcKYn{NxZSC{)5Pma;M{`uL!zh!dsUCG*_+PA^)U&&nkQuX@p!KznR zb9`m?-#vY@K~Zo4n}A+}(!xzo&!j!BKFMIDSJZmwLd}QLHQGyO^~~{9)Sobgd)Lw_ zI^t@6e>R^^T|Sv(LdwF=YNkEjavTC@^*g%1&ArhXw)XksefKW+>V&4LaWFJ|RzJTt z{#IqLkwPUxM-~Z6!pV`Idp~b_C?E>+T2#| z++x?nw6gKZiZwow|7OZPnl0p1cduDZ&A7FQ@x@#H=PP5BTlg7NH`lQpIh7V>AjNCE z{!H>&k6&TCd<+U)=4*o2Kg!M|e`k@;5ec!SSC=ysQ!o`t#I|UhtiF15|Q)y85}Sb4q9e0Qyu100000 literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/imp/shot-2.png b/py/assets/sunnyland/imp/shot-2.png new file mode 100644 index 0000000000000000000000000000000000000000..6396b0c8275531b1f12c4c24370f09e857b02551 GIT binary patch literal 1538 zcmeAS@N?(olHy`uVBq!ia0vp^#z3sg!3HFmYl9C0DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9r5c$b5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hqhMrUXs&Nys&8PXYhY+)U}0rsr~m~@K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4mih)p`bI{&Koz>hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s0|M!9x%-p0TXx5;&wd-2Brc} z7srr_TW_WtdLMQWIj$chUMeiY(%vQFesGt?P7nKr*$e8JE*@Mt_wADfKR82PJY(0; zn;VmJFtF=}qkzb+mEBHn>|bh6KOLK0G=15XYJo|2wjTfe^zZ%Z^1j!*a$<6tdM8Fo za3?3~^t5g?5Ic4#0>t?z>T~Q%)7ibA@3%~k{yp)$xsgu!*S9K+k7rnAGAS`^*r@dX z;oamUhg$}U9gYT^Oh?-$Iv#MmSM@n|!?UB4?dvw&X-;ZiXB;%~rRBN~Hpe}2><`7u zYAb>TyZDRW?O=X-g;h|oV#3^4TC4ZpUCyD*+?di*Bj{*${!jJF8L7W->o=qC?v^T=~J&WO^iH z>811|9IT2e@%!%t=`Rbs+hgWiRQ7tcYG+SXcmmh48~1unX)h_Vp88dD!GES{SjGt2?M`Lnd zj~P$=RgbVu8NAFVA}&v93z@5P zDZFG){BrZii(9xFcwXqA`}kj4az^0hct$pcyfa;y_cwja0hP+0u6{1-oD!MDSr z1<%~X^wgl##FWaylc_d9r5c$b5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hqhMrUXs&Nys&8PXYhY+)U}0rsr~m~@K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4mih)p`bI{&Koz>hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s0F!Z)R-tVs;d0d+(HU#V;P z6N}U|gl4d)HF_q1DM^D%YIT{#f?5dJ44$`#sHHXR23! ze0z)G(s~|MJ@u}yy?5?^-_HBiL38m_*Q~9!Pkzp6{yRPI+I1d}UPmtjF@q4Z8$Z8! z-@NJ}>+7H?Ykl7P)ML)WOP7i+TVLGD_>=M2IpaObty6qfes~(XeO-Fl@~u^_j6qhX zO75B4%ioSKHVjis;b3ABh!r@#a-DfqYPfB|oVTaEdisrh6qy!k%=xumId7S<-_OSf zds%(1zSTEYdCoq`{#^OJ?)Ujoja#NgI`Wj8Omu9zw#Jr;p+jVn@Zxn(mwV*c2G5EV zTdZQe=FqYE=?o%EOWZ#8Tx3&FU)i+yy!*?v%vc5u-gn|V7l)=jugb2D_MdmND0I*J zHB)mdkNI;lJQcsj;^U{q&~bRhqHjgwkuyU=>;*W4Z0DT+ev0L_`ueSYp8{twm@%#2 zc<_VDOR1B^@eCab%?lPV?OikPtcTz%X%7#!M-v*1WhW+Xxa~3FcVk1vO~DDC>m@SJ zu8LZ|(m(4}%LT5(yQMUpvKX4yt-RvHnA!S~dE(#0dpGa6EL(hj`r3(ohEa)4r%v;$ zy|9y7vSZsfj)s}dFMDODPnK6Zw|@GYQsY0}oKIWtE;E|gtlgM>)n{S#+Bs(#9ONeM zJ>=`Fy28jZ|LrxK#aTxaJ3r3fTE`Tiy0Ey6N7$Z;hhfID)`H0#VtYY_vZt$`%Q~lo FCIDOUH!uJI literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/imp/shot-4.png b/py/assets/sunnyland/imp/shot-4.png new file mode 100644 index 0000000000000000000000000000000000000000..97dc8f6f398f5ab4da32322a4785fc25aaad1b16 GIT binary patch literal 1546 zcmeAS@N?(olHy`uVBq!ia0vp^#z3sg!3HFmYl9C0DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9r5c$b5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hqhMrUXs&Nys&8PXYhY+)U}0rsr~m~@K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4mih)p`bI{&Koz>hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s0|M!9x%-p0TZ|2mS2(#3``ZC zE{-7;x86+O=*8?P(3Y=iHp?$SKqpC1hxPn1t==b$Z&?=D63*72JhJoayECf0BZbQnPHrmqe0F3*7mZUc3HVjq;n! zw%5+4UTd!{=L)jO>tDSxru^-TrO!fJCoFyGni*>B=wjt?)%M>KIg2$-2mUzU|Gep~ zWqqGz!>RY*4|$n7X9a35`}6+lq9A=u+1`UkrbhBDv1)stAaXyh`O2^Ot39CxeC1U; z4KDDBFWE97&2Vp0`eVZj+`T5#zSSnP`-Uuuo72-JW&1w-Pt+<&Mg>!Y5QSA4Q{VV# z6wRLc^uqfXk@rnoH|d^rabVRFBCP}6rqpBL-% z-TyT+z$N_WbHPzX^o_9ZbBd!x_3bcr;ntLlpQj7p>1|KA3mdaUDC;qfB=P zwXI1@Ow^xREo$doknyVJ0@vZyQm!qF7&&GIubRnpiA$Ju(X00C_H%{)&(AjY8Ac^O zx}?pe_RcnI$&BdTObebbs7^i}`uws4-|}m#B;Of$=)W;r+L>h|G(-KXNY(XIH+dMA z2!?9MT$$43sq}p5-C1dqygtVFeS9Bf&!}R#aC7;Rjrojh40kdrGu9aIwFZ^Wp00i_ I>zopr0QSs0-2eap literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/middle.png b/py/assets/sunnyland/middle.png new file mode 100644 index 0000000000000000000000000000000000000000..3e74b1d2c5d784b803c7dd03a32fc313cf8d7722 GIT binary patch literal 6903 zcmcgxXH=7Ew+&q>f;v(aB8W;!=pemF5rL?H^d3SF!4OCQDJn`Al_pXI6r}giyPzOV zkd6tVmrx=dLb*8KI5TVAZ@zo)pPQAn-se4Q?|t@u&iVI--Gyi|(R0!R001WKTk85J z&td?8!s8U}$%*~?537?02TH>PWq@!%p>2^cfT}&h4hGbQ+d9JZVYc=@4?189007k$ zXG0T|iJq<;6afd@{=|SWaE}u<0HC0Z@vw!u!cagvn4`11BJWylBQMa|UXj;WN>5bJ z<0j0>`IavdX5b4kg!;NdW$k&Dm4FHuxf2063}p+%z}?(E!@}|h^ghF}9iHM-lXfRp=j6gbyh{?*z{?rf`2b~~5o<8m< zTMWqElkb;;I?NM_boM|wBiw;M6>aShUMNN06Q}=*0QdM)*4^`uYdX0w5sa;eh!|M( zXQW?1J-z=7g~R_ud!qDVfBF5l!k&gc9xxGom?y#u2|XE{1K-b99&$I4Fk2J?X^23$ z{kp}wP6!mj(+S}LylEf}ysl>pb$0(*5cr*;rzfZF?uoK>hr+bg6?soIz|PM0a_Smt z;_5Qu(h{;a#l*xkWNxV5kWrNulhPEERF@W47yZRmM?k&cFn821uKfvDQ$}4=O{>UNqk6e)xGa^4n`?pd5 zDxK`l&*Ptqd-C$<>ciYm_8ob$*co51MF9Y8&f4m#hM2MCl*Z>mre{NN@numRU-hKb zcx}TbDKL-tfoAwezrkz7PE&MfDl}(>cK2PqbsjFx%g5dCFjl2oZQ%t;IhtN{4^(zW z&5v={;tsu1a^<|1P}UFk1}O^e9PbjXdybFxnFE(6ju-J($8FjVP&2>f8#f-TtdZ|1 zA9vX9o=xj3fFwWG%Ra_c1}@QtPNb*ezT|N^_yI(G91%Z)-6*EIst=dH-NAisJf0&C zTEAnxTGB)`k_pPY9Iz8ccj_BZUZ#03Az>}x#m>a`=_N8ZLmje{TsCnqwc0!!ctmDI zqEe%1l*s)V*pK6Ok4{fX+t`DfaEq_fPl@cdSyq+Y^((0Z)Y*p85zU`qg3uU9DZ5`V zTae7Dl4q4HO&-tTPl-?YUM~ z<6*PiCO-;7CC9#Gf^sR=UnE)$ksOX`gZlED93~l38(Z?I>g(U%puoULOHDe=Tjzxx zc~s=d1Cjvc>b47*f@nEbynfc?p&}WLk$J06MYv%4ow7W|@!sbazoV|5w&?6fawIued3DluhwF4|0vSRhRw9A0SBnX@UMy)UDSzCLi@=F!{sa9^WkN==0S-K6^@ZuC*ZdCUrR z8=$CktiD^&qLiuL^LvW7`L9v(Uewr|%5GH`D&u;Y%ur?4-&?JpJtGoG`92^Ugj!m2)b&dGAZXO%f%Sf_3 z%n#b~4JDove*bZ8=zcNlSXNKIMkPtGbKH{9xm%|ZT2@3uV5(;Nc;)f7AJ#9;-+JXd zL(n?f_jTov0lr8w%5_5Kyv3@(sifQwJygs&0$jnP038+Xpi8M6Ot*4mY!d)dw8{l4$=XZ zVZ%_DzbPV`E}pU?EA=7K#P|gs$1AG6w8h=*jLI^mL7f}(9SmD$O!^&zq4_1l_dg3Q z3E(dF`0c112D6&fjH|PXBH3<-1BdRrrYc)@LarqA?o{;bCI;banZIi_VJnQ*OV18{ zU_G^hDm!Z29o%>D(Y_c>_k%pY!>?=&GPV=+5qXrPd)q{LkabY~C@pbLD>;EY5(;~DuW*hlEZOH!F-RVm#_?XG5a6SH|}nJ7^9^ad-$^1jjf6U9(3 z?wtbt?-HLhNa4f@dZ8$5-8+({EL@jtC4roFOhrsz?6-AYfccGnDKj^AC0scIr8azJ zA=PL3J?;D*#$`+n8_1EZRum1@9@0g5sxLWdEuT72$@ES{;fEm#?Q767ZoJ){H3_%9 z4+l6aPE+L=hCbtQ!NtjO0SH^8A)WiS>`J3qHjOA;@pBWA28QppJ)EpvyTwvj4J?d) z3@⪻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 ewqfYG3YY>Gi3hbK+LIfMKa~Jp5VzbrGV@v4 zq}24xJX@vryZ0+8WTx0Eg`4^s_!c;)W@LI)6{QAO`Gq7`WhYyvDB0U7*i={n4aiL` zNmQuF&B-gas<2f8n`;GRgM{^!6u?SKvTcwn`Gt*5rG%-*xx70H< zGcYkV)KM@pFf`XUFx59O(={-(GO(~RGE{&9C7^9ZDQQ+gE^bh}fIM5JjFOT9D}DX) z@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal z@=Hr>m4GgVcp(sS9KFoU6f0v_150y511Bd-XIDc*R|^X>M{_3w z6LTXYOG^V|R~MLGm;B_?+|;}hnBEkGUT2(oK?x$a0BEyIYEfocYKmJ?ey#%8<5rot z-C~K;JgD9j+-`BisaGH97=2LmB1Jb$2$+UIOnBl2a^T57H4m8Pi-3uH^_Qc2fO&?~ z)5S5Q;?|p4`~5{6WsatEa7uA;E4RA+YwPZfiqcf)hRPzt z4A=u*a=B^Lu{e0}V-sa-X(_OFpUiUq2)6LZ9X`5=^Rp;M3Gq?1d?PS;GzuU8& zpm%E}c-kbC=eyi&j+u=F_7mi8#Gt*pXfSUbZPV zUi)k3?Vd>Ogu`}wVp-;|6XyOOJMELG?V03%XIegAdr)vp@%!HIyFzw^m&(^ZmFc&9 z^WVR3V`6xb&CZ3ZCW>9+k+nH@>rJUvk6?IF-kOP@GdA*kjQ(M;?)0{T6(?s-E%>*q z+Wz*xOSijw6dxaS5)hracyXtmpWuGwFTIMz2Pf(1UGkWAIjMT<2kRLArn%D9Paeq7t}#px%k*QCti53VH>F^GGDE@20*B(?cNsSNulL<}zOig= z!_|B(MvH{)XZ079?V6+XfvrP4yM4_mt5-`pta2IFpPe5Xz9qy|%ydPXr-YIU?_)=A z)6*&|LRXc&fAnCT%+HwtL=%WnWK6Y!&5=pZeyGx#qj_?Eb~3r7M1Gc~5(EJobaYmyWLe m{m}HsISVa0URyPviHD)Nx6|cn=F~-?>cZ32&t;ucLK6T~hoDmc literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/squirrel/idle-1.png b/py/assets/sunnyland/squirrel/idle-1.png new file mode 100644 index 0000000000000000000000000000000000000000..8e8a8f174479f9e665d9961d6b8e13dc57caa0af GIT binary patch literal 1639 zcmaJ>c~BE~6yB=!fQCwSR9exU#GzuzNzR3!xr8t-#lS#R4wKD7GO*dWyO9u7G-+XE zI^xl4m2gP4tp|cr@dCV1idbp9Du_q5)hbBw=y+h2ZV<44h&!|Ud%rjD``-180I=R*30#*U`Hyp%XSeFRY&J(YlGP&ozy1r#RSh=N+okcsM0gDH2( zX*3c5M$WV(>M1=u4?=K^WAMdr9GHzp13=_#hs}Uwp%iFDGc8s*v#0JT6SSD*%w!SF zgKa9*Y>9CaXo52?5piZAG81!l6d37%XaWqS44?zcwvv!T&g|!fXxr!JGQs{3Dof6M zU6dY<2UR$Mf+CKXjqrs$P$J{-#XO;i9|j6|dY%i8!7;IK_A~PT`~(w}C2^Z)#F-CTu_~R-ZGp z9|gmZ)=E+aD}rj(awg5gu~==#(^~#AC~+75V}%W{#TN+AS+rjU0ms|XC7N) zPM#PZ6FMTc=AOs4s5hdm?5i`RV;b{{tDb*pf&KdRn_ogvhsmJh`|;R)`4l4b51ndu zrTE)K%`;qABlw$NHF>(Da`PN4KP>n>QqH<}YS|IS!V>`v^1b8Jt5_0mBbI)BDv{9B zbMgiL^iJ%H&(54rs~_Es1()6qdB~Wud|yCy{-i}uo;O;SZf$Mf+|=?w1U)-Ya^+}8 zd2yIKO&@f4{qf5I_N$({T@0wHCa-sl=dn27uIX5}eS^`xRMGnN#K!Jt#jQI7`<6eH z7Cl-2a|KxiNq4kYB=>nj9+=c;id2gN_f((VcK-{OG>o+&O?$JY?%)UEqgGY4REvtW zUQY89cM=m54kt0h}xNo%dXw+A0D5y&XaQV$A*B~F^a`a!GG*eZ4-$; zJ=NieNZNe6S-j_|D!6LS#;OEs$P!`4H)EcQN~0^57p5M7wtQ5XWQiwNr`0-t6@(r! z?dWTdJiKMS`m`6RhEIxb6`6J94Qdv@Apdi~>vwl|L%`(hM|TgBnYT=1yJ~vg*Hi?b zn$elwQG7@cl7??EG~@-Z@;~?zT-mL0{#3*0>Dzj3(@r<*T-(~(ZDvVHl&kaJIb!>_ z&hO39;f=p#7c47#>Dkh!Ne#*vow`eXq0Esr&fe9TzjtRqbG2!#cl>~~`i(y?x`B~^ WE4MJPh+nAm{ra_v4 zq}24xJX@vryZ0+8WTx0Eg`4^s_!c;)W@LI)6{QAO`Gq7`WhYyvDB0U7*i={n4aiL` zNmQuF&B-gas<2f8n`;GRgM{^!6u?SKvTcwn`Gt*5rG%-*xx70H< zGcYkV)KM@pFf`XUFx59O(={-(GO(~RGE{&9C7^9ZDQQ+gE^bh}fIM5JjFOT9D}DX) z@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal z@=Hr>m4GgVcp(sS9KFoU6f09x3lmcpBUdL&XIDc*R|^X>M{_3w z6LTXYOG^V|R~MLGm;B_?+|;}hnBEkiUUNfN7bA0L1Dtw62_m-uXtPUdQD#|cid#{B zt^(NOR++fn;*8TgsNNJTZh`v41*cwppkwqw(Tfz_Fd<+X0x{u<7s!Dp|I|ESnlAz- z?$gXy0~r{Y=6bp~hE&{oGiSd(bE3rY-(JE&iw!(x^xi#^amnq~a|Iq#;rhmFPmbFk zuwTGzD4^POvSaPy$iogjEib=V*6R7+-&Y>)^m|_2{3S2HR_!#K|GoPD^W&zWeUFa_ z)XU2{FkE2hWyok?%V2R}Hep)8D78S4f%gIjP@ut$!NftCK?*3wc;Ua=qqV;ttlYP* zt^RqzpD*hc@kMQYR4&U>S#SDs@4Wk3JI^nx6*ANJ6FF!uyM^y2%j|8Nm2K};x4xc! zLVM3)wi7%v9?XlMdiVNf_5RZ17k+>F(f4-C(nXvC+NQQv58kHl2s(K5Ie+=@f<^Z$ z^sLmpPW71!e|i*S^z6>`-U4683Blf{x1QQz?OOR=`e5Cg^&6KJ9oyL_H`l+d=0(}I5)Lq z&nlj5hHcFPAUfZmAdfJ?ChCWT_R2RC-@-Tke%&@ofqj%Q|D<>@hw&Uh(6$K#|US-~0Exa;DCGApJkEiF&PoMZ_g?gu! zFaJDIa%z-$|Fj7=-OBjAN;jx}&^WN|kd?%gJZY-}z2_zKpB=Fbt_fg}WwOfQTYF!5 z%09ir*M4_!{l9*3nH(flfRYI~RS3$=XX0V#6O47AnH=c|D#ATo{an^LB{Ts5@y%3W literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/squirrel/idle-3.png b/py/assets/sunnyland/squirrel/idle-3.png new file mode 100644 index 0000000000000000000000000000000000000000..4c2bad7fbb6b1bef044158c25e3a152f40fbe3b1 GIT binary patch literal 1544 zcmeAS@N?(olHy`uVBq!ia0vp^Q9x|P!3HD^V*Db2lw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6H#24;=Skcg59UmvUF{9L_6kQ%*;+ybC(1_m4Zih{)C?9>v4 zq}24xJX@vryZ0+8WTx0Eg`4^s_!c;)W@LI)6{QAO`Gq7`WhYyvDB0U7*i={n4aiL` zNmQuF&B-gas<2f8n`;GRgM{^!6u?SKvTcwn`Gt*5rG%-*xx70H< zGcYkV)KM@pFf`XUFx59O(={-(GO(~RGE{&9C7^9ZDQQ+gE^bh}fIM5JjFOT9D}DX) z@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal z@=Hr>m4GgVcp(sS9KFoU6f1K>R~I95XJaQzXIDc*R|^X>M{_3w z6LTXYOG^V|R~MLGm;B_?+|;}hnBEkGUK5;pK?x$a0BEyIYEfocYKmJ?ey#%8<5rot z-C~H-JgD9j+-@<#saGH97=2LmB1Jb$2$+UIOnBl2a^T57H4m8Pi-3tci}#xl0|Qf; zr;B4q#jQ7U_UkhzN*sT`gfmfu?b5kpc}XUj%Ar{TZL>P}ALu{XfAxU<0%pUEDIPO> zZdlDS^{r^$$jVa>kv!gF%}eKViRF-<<9tmNg>!*y#9hsECGT#y{}Xi-fp z@18z|<BRy$A+my6{C6*=DdqY2q|Lf_e|lVb z(d|t~!sL~VX3dE`!)N|x$JYSUb$WANDe+Vkri$=-TkrH)Ev@;rv{3J5HGlr0Gxyd8 z?!MzzvPD=v%l*U!er{>Kn4rA>=i)Xq-+h!WujKf9>s_ANch)j3I~Q1F*3J5s{bt>T zmhGwfez|f;P2*_z zc{%^?S)SYa?V5`#lZ%$RZ+Q^-OvZ8Pe7n;NY@WZHpjvt_@zMX%KbH>+fKvd+0!Bzu d==iF6fZ@Hlp<&ifkGY_-+0)g}Wt~$(69B4=K$!pl literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/squirrel/idle-4.png b/py/assets/sunnyland/squirrel/idle-4.png new file mode 100644 index 0000000000000000000000000000000000000000..2520d21c16f8775132a73de69c049d121f78fc8a GIT binary patch literal 1543 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 BO9KD^ literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/squirrel/idle-8.png b/py/assets/sunnyland/squirrel/idle-8.png new file mode 100644 index 0000000000000000000000000000000000000000..3b47b77c7f16da750d96d24391827523612b6274 GIT binary patch literal 1660 zcmeAS@N?(olHy`uVBq!ia0vp^Q9x|P!3HD^V*Db2lw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6H#24;=Skcg59UmvUF{9L_6kQ%*;+ybC(1_m4Zih{)C?9>v4 zq}24xJX@vryZ0+8WTx0Eg`4^s_!c;)W@LI)6{QAO`Gq7`WhYyvDB0U7*i={n4aiL` zNmQuF&B-gas<2f8n`;GRgM{^!6u?SKvTcwn`Gt*5rG%-*xx70H< zGcYkV)KM@pFf`XUFx59O(={-(GO(~RGE{&9C7^9ZDQQ+gE^bh}fIM5JjFOT9D}DX) z@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal z@=Hr>m4GgVcp(sS9KFoU6f1KhLuWHLH%li=XIDc*R|^X>M{_3w z6LTXYOG^V|R~MLGm;B_?+|;}hnBEkGUPqjIK?x$a0BEyIYEfocYKmJ?ey#%8<5rni z-C|(iYGiDI(>$o&6x?pXtydrD7=2LmB1Jb$2$+UIOnBl2a^T57H4m8Pi-3vyE!#;R z1_q{Ao-U3d6}R5Z+UqY8D01|^fDrFAH*Vn-x-UDHP8DF*5^>{Rqxy%nE~IXYn84bl z7a|g3dKk66w=Ui?EunGalnm2zb8i~o+qv(iBv;z~U*|l{-n^+%`Ca{dZuR}-$tJ$C zrGKQ9nVQrxx)yNGTA+!a@yedH_UoIIA#uL*TUVus)Hx^{OxK^I*Kcn3Z^fMY;t$%K zf317?nWJXE*4eXkZGK+y!3(bis^dSF2}1}VBO}xl=0`QWvIgWdvPnRo}RuvafRVr*Y>it zt!wZ0CdYI;t|~67sA7a~%bnKA*e)z2L=JMD{A~yAT_9fQm z=S@2w@#ZZ%XVr?gb4zzHOr3u2rDHQoBEyn|H0B9z;ccyWx6~npW%HIDjcP%&M z`0@JcOpD!oFBw#f*Uzzhm=`-gk5^{Wy`9sauDkQzsQj^Hm_$o<_WU~!&n>PH*Ku#u zW%d1jwk%MoYGdL4mf7V}ujl{YWq;tti;~nEY}?|}u9wO*=$>bMaOdM+Ndc`l=gg-r zao|$nmYVQ2sD^Xn#r(e$zMC!2*R%hjUgXq#_vbR9qG)kFhwHnGD)_^%J5J-c_*#rJ}X1CSIf+3-vG0K>JADM!28LtlaF15Z~!mvv4FO#nv4 zq}24xJX@vryZ0+8WTx0Eg`4^s_!c;)W@LI)6{QAO`Gq7`WhYyvDB0U7*i={n4aiL` zNmQuF&B-gas<2f8n`;GRgM{^!6u?SKvTcwn`Gt*5rG%-*xx70H< zGcYkV)KM@pFf`XUFx59O(={-(GO(~RGE{&9C7^9ZDQQ+gE^bh}fIM5JjFOT9D}DX) z@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal z@=Hr>m4GgVcp(sS9KFoU6e|liH)8`MO9LlMXIDc*R|^X>M{_3w z6LTXYOG^V|R~MLGm;B_?+|;}hnBEkGUPGLEK?x$a0BEyIYEfocYKmJ?ey#%8<5rnC z-D2U2(>$o&6r66caKourALtl;Q1l{2H%thahCobs;stWx$v-s@nC6RsiJP_b;3ftJ zrZ!I($B>F!Z)Vy0F&hfBKGqOocQEm|(>QI?BsQ)pzC(o>D>N1?Tyn;7LPh|e!`6e^ zyi(`;>dQ8tllr|^EohVd$>-b88<+W9FV)uAf6am60s}9ji376<3qHoxjLDA|9h-6S z`JOxTtp8V6+xiU>Y z8yC5DFMhkuyEV=a5na<0Dfv|&jX+o`zCTO=&K4lin) zEIiHZXKO>dOwQ|qNUpHg8S`h?s;-xrF=KV@@hP*ezE-_sV?JYLV6fu#S31R-`1FreRSW+JSSbd zf=bT?{Wm2qx#jY=9$2!b-KX)+os<=>9NjGkTg0=^9(TwywUT+Ta)Yy=P;t@c1+_nI z4JR{J>AX20Y#?RiAkR?a!+Vz{Bje_$b(wEjB^cHfZCRC5y4Dm_R(rboxvXv4 zq}24xJX@vryZ0+8WTx0Eg`4^s_!c;)W@LI)6{QAO`Gq7`WhYyvDB0U7*i={n4aiL` zNmQuF&B-gas<2f8n`;GRgM{^!6u?SKvTcwn`Gt*5rG%-*xx70H< zGcYkV)KM@pFf`XUFx59O(={-(GO(~RGE{&9C7^9ZDQQ+gE^bh}fIM5JjFOT9D}DX) z@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal z@=Hr>m4GgVcp(sS9KFoU6e|liH)8`M3uh-wXIDc*R|^X>M{_3w z6LTXYOG^V|R~MLGm;B_?+|;}hnBEkGUKgBtK?x$a0BEyIYEfocYKmJ?ey#%8<5rot z-QtMTJgD9j+-`BgsaGH97=2LmB1Jb$2$+UIOnBl2a^T57H4m8Pi-3vS$g2^U)0nC~ zT^vIyZoRp)*YB_c5BrC>P|h+I?nkx>DJfd7jvabz@R`SkVUe)1viAFi2!}HVL_Rz? zHK!&%x9F>Bz5bL-Q=W+*f49d%g2{rfAaeMJp0-0^CO-1S=gUERl`|lZ~sp0w0V0^ z*o3V*eu}4aQ`&_8eZ6_`h*gHW_+ zD=$BIvu)nh=Ia^f%-CLXN9>zk^FHv~Ma?Js8YHZ*sJ$zB+40uo@Dd~IGKDRxMt~ru}|d5Q27k!k#T8+Dz&+eu7&x8zLRt+K#~wm)Hl z#)nx7IHrAYYS1l_zRKn-@0m8Qe%9{;8)q&y3y%4|=9cG+3no#kx3833WbeI&$5vLz zvgI{@#h1zQ(-lr%k6d>i=(PQByUsqUDAZ_^iF*6_x>w3`<5>p{*e#cv9QmiV`PM6j z$hEIM7=PTHQ|zelJfSCPZSvh&`}F2KEz1|kSl7Q%mjCJnu}zzA_T=S$y2$h8)8llb zZ8x~S+*djIb?((`=Q)baFRWoUd!?$jF1O|?p?oG_P_IXl()wL{T{ zrzt0lil%aMGoI)F-oe@qj196i8w46RI)WrMJAmaxFEy}MdkdQt@XLknw>(jgY69PL3X++BA)pb~Xh zi3T008?s5w5QQO|mN0B^Fd~5saR$Z`eoQx~Mu$on2#n3RZ0?GH`(x~qyYG*@_ddT~ zu6(O@GdCbO00024dW%BGt_Jo+{WXVA7~urWm7fAi+fC;Gmko@^BrF znRdT>6^{h~zX*#ygUQgmg&HYBfO#!4Z*|MdC#?wl)dSgkxQEK9CiUVWqC@VnV3}_zuSsKI^0GT(nfZ0xnbT=R#Z;o7(>x|iYi#_;#M=oP&PAV1?6&Y*J8j34Q8~E z-pj~&mPUiBNgIQaMqI6s@mL*!#bQDwLPRcsVI)y1S0acqCPthfNrXibp-?J?Hz*a0 zTm@w;Byf^hAa^ETFOY(P>T_CEXvpcFAZ-=0VJo_^b{M!3yic|Am=8Pwm zIao~94m^ESks38O81(x^j_>;Y_s=<-r*7Tt=&u`=wYr9CGaQ*eUDl5MxpDi{G|-T8 z_k390J?CuC`B)d}nyA|Q^?+8zMSp7y-PMe9HRAZAb>n`A)4@hycJ!s9q+xe=*6{I_ z+kJO#{xW1M66+=;a21{q%c==0ln z@~L5xYxx;Hmp*n_+hn-bqTlHB{VOy(N77JcaNbxYnNvG%=Dl9)A#(HM?_V6*JM`7n zlCv+!hOpJm@j1ID+Xsjfg@cD~4JF>Y_)XHsvHF0D`X^8JO!QUFBsE=s|4ec^$6ZC1 zbg%tlEm!ZVNqgsEcBiA^WF3{IdqwVlsw^ekxid<1vhLIeBN!RudAm3BK~+j}UrkNq zQ8H28mn)HTO?hcgSR_$=6iuNCWQER9iNgCx8qv4 zq}24xJX@vryZ0+8WTx0Eg`4^s_!c;)W@LI)6{QAO`Gq7`WhYyvDB0U7*i={n4aiL` zNmQuF&B-gas<2f8n`;GRgM{^!6u?SKvTcwn`Gt*5rG%-*xx70H< zGcYkV)KM@pFf`XUFx59O(={-(GO(~RGE{&9C7^9ZDQQ+gE^bh}fIM5JjFOT9D}DX) z@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal z@=Hr>m4GgVcp(sS9KFoU6f1KhLuWHLHy0;MXIDc*R|^X>M{_3w z6LTXYOG^V|R~MLGm;B_?+|;}hnBEkGURRuYK?x$a0BEyIYEfocYKmJ?ey#%8<5rot z-QtAPJgD9j+-`BksaGH97=2LmB1Jb$2$+UIOnBl2a^T57H4m8Pi-3vSLvP|y1_q`) zPZ!6Kid%1HZ8TzW6lm)Wa$V;!rCdOW%XRq)+m7WQc!Xva2`#+Ptij~flksA~>ZsW> z=ib~s_vP)s|5xdj@|5rU_kI4nn}zp&n`Tt3WoC3>HetEIzkD65*%L3z> zT){@2eM}{N(%GU6)w16Eva@#HlzHJA6Fcd=ZpyifwF%Gv_;tH>{d}R(I9E!0x8&Vi zpG|wY-}*l}@XT=GnyC|Z--$^+pL{q;{;sL#Nu>)nA_8|bti79a?&9a~@0ZMe`TNpQ z%L!|BB77`nnclwXbF8VXitow!)z0^s*8DsCeCGE&hJb)8n^NyngGCxu~pBF{j?n$=nJHk3BF-IQM?q9#YO#TO4Qcycak)$+crO)J}XZcRQcl2LhEe^o$8#)XhQv;5Ec z%9+1l-mRjPQ z5u5ZceNvhHa&x&**}Cpz?PJf%S6{unL`3v4 zq}24xJX@vryZ0+8WTx0Eg`4^s_!c;)W@LI)6{QAO`Gq7`WhYyvDB0U7*i={n4aiL` zNmQuF&B-gas<2f8n`;GRgM{^!6u?SKvTcwn`Gt*5rG%-*xx70H< zGcYkV)KM@pFf`XUFx59O(={-(GO(~RGE{&9C7^9ZDQQ+gE^bh}fIM5JjFOT9D}DX) z@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal z@=Hr>m4GgVcp(sS9KFoU6e|liH)8`MOA{wcXIDc*R|^X>M{_3w z6LTXYOG^V|R~MLGm;B_?+|;}hnBEkiUMFKWLsxSr+ATTyOOUj$6t zGn|$@V_;y~@9E+gQgQ3eti68Hjv}q)N-9gX2>Pn52)?A~rR8wK@qv=p<0~$eO%|z# zxLd?KW^1r|Bq*wfdbOWZHTB4xaN1?jtT(bXb8jZ5l^?u*t?HXh=Fv^J#Y5bip zEb2AOtbOws7#)~RSS~Q|UJ$^?a9_;YIa_0C+Q0Vqdb+dTd(OFcXVsqMC0aF0lM?0b zIyywZK7Xc8`{|9B{I4IrFglmKGp~Bhtn~epA5TATd|aaLl6=<6=N_J(JlgRkI~rnr znVR0sjm!TQdqbzl(q8%0ivq^Yr(ZPR{w<_*BAPvav;N;rzyGH$Ti3to)dof35c!mq z=`C~C#G9Ns|F-w(p+M8=ePxQbog=t5Ro9n&zP$FE#lC-E?9}$ozyA31sz+HLt)ir| zR@^!vyuaa@Y>MpE#m*D%CJX(1^Q`E@oXz}S-|?vH?yZ|sZoL2h-+w1v*m47}UrcS^ zazrM<=zi1QotHV{ia+J8wc|Z);^ii6|MJ_jt6A$Ff4BQ@l-JL-B`VVI%hj(Tio36# znV!%5-t@P-c)7KE)|Cxg9=>R2DpL<>J3DvL-*?G52TQq*@jO)uzrFV3l9~3q#OLPw zZ~3kezL0hLDyu0=Chy-DuN&(pl+r(2TYcjvzek7L6oUUX)$%v-g2=Dm4QDPwpxXLan(7Zc*tuEy+cOSqiG|MKg@1tsMt58N&4Yxw-=62}(v zLyK6>uKRW{?Zmd2?`>)a`;HLG1(}iT7g|5q z9^lDXr}QRGW%-m4hQAh1cim#%E4N^wWLX<1`8YU3(~*PorC;g?81_k4c9lCVdJih( NJzf1=);T3K0RR)MaR>ka literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/squirrel/run-2.png b/py/assets/sunnyland/squirrel/run-2.png new file mode 100644 index 0000000000000000000000000000000000000000..a2604fc51bc028a58ed5e782a3ff2e803889a6f2 GIT binary patch literal 1617 zcmaJ>eNfYO7_Klt5i2^U6G1}NiEM3>LMe$<);0y%*$zu_MZq&PDXq|^HmNP_7>GDO z&z(+~!l|$+SU=GTP7s`%%IX}P3RCKEIu#Ka&P_#~r%MrVe~jfW`MtmQ-sgG0p3B-K zRl*qmAb$>rGbV8^re@ED?2C@{Wxr6GO3NOT8HJWfru2**w~`zwL1mCYq6yC=)g(^j zEOU{u9FBLmQKMzF%6X`cG6`@`jKE>CuxJh^HqK$eby*|>WRRIgvxIlQ{v;1D5)$4= zA|<4>$Vr27ZmyL~&Q)o2xmh}d;Kj`WVjU<;U?LeDaG0{qH0qG>`gu{-_P9YF&>zBN zNqDb{(khbxIb|gQksz9{gQFloj0oUpC`tss2M8fp3_>ChisnNw3dNv87#MhXY&I*Q zN7Y#TKrZ$s;Taglf`XvkZWq`i1(Y=tgb@S*At5Lf^4SPJonvNj2j5Ij8)U#pT4yy{ z7$ao{JdAh-Wn&~fw$fKEm@GrIW_n;u?7%<=ZUJEdw5o_ znAYT2NKj4El+CJR7pI@*No7IhRuX3@tA?Vo2d9{1pcslaP!>Qg_e?DY2v_1dquJw} z)sIpt(L^)N;AS0}h)H-XkHBaoP+4R=tPsn@GDNO`VMR<#v{WpEqQpWWf=Sxb4a}GWk~*{nbo|N75DW(#~u#H>trG()i~Ter4sNB>Dx`2nCz%5tYSeo z=A6CiSn?Wu+v%C_uLZxIR6fq&DMdx@+Irn+cBJ zs0uGkOHDPE>E3l!tv~zWtOjSDi>Q#^X~2+nr>b{fc3=|qJg26OGY92IeD&zmQ~hDx zQCE-Z@Rj?w)Ft*8`*+%F#`y`6=Y;8mcB6h$SwV2+p?kkC_+d#$+Tt}&J3gk;w!0_v znok9ryotgqu3yWRE$ZAh^39dC6*rfrOl%R2t>nhEr1VY2t`#JY4nf72(smU4*;jB= zZG?98)#qKW zFKjQGPY_4wQcO_Ktv+<)@V;0Z0TBNR$;jZthHHAQIy9w7vXxg@Gm&Xu^+oWApz<(QP6fVR{h~V1c8KH6$=7beL%$L1_59=$6)NnY HY)RoiUs7#+ literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/squirrel/run-3.png b/py/assets/sunnyland/squirrel/run-3.png new file mode 100644 index 0000000000000000000000000000000000000000..459564077dff2270faedf9663a2327f9a3e107c9 GIT binary patch literal 1583 zcmaJ>eM}Q~7(OZ>(|}Q&^9wi*#>b?+YwZVjqeEyByLlC{Vy8HJ^bUH#yQ|kLZE;2h zV;eZZjAR%Y4kvS>;5HdV;zSLZ!EK6&MTIzt&czQVB6HKQ#a$6_e+)0V`@O$6@AJH0 zPp&M(m>xW1;S2x(f(--8!R>nRQ@pEi}f9iMG!TL*Q75 zkgtWF6=lXVKpn?Zph~8eTIEUv)SxoC8d0j`37`UzYhXkLBWfuk$B;x!AqU4FNX*8Q zxmc!t`FJkzriE;RV8>wC<#NefOJy9N2g^|ug%Jg;P)NlHsl&qxgj>owq9z#hl*7u? zc7f(t(8oyRa85xBiIqNUfw520vX1dFi35Y(gdLX45MN6ZfjIu+P==X|b_ki&^Lqc6 z*kSV6DL9jIa8BMTE-p99m&%Umc#04>-o$a6C#INT;{?uO5&9n)Ny3 z$51$q8CZuvuvW^T*FqwXjHXE}b?I_>nkF?h71gE5J&{XqSPo9D2gmi(@$Xa zoYl!ttT2HkpJR1XVts;O>|$m;#nS~8xt!-1aIA5Rp1KxvO1^O{Idv^5Q(|GU7}&So z|Ezn$C2GiLPKsB&Ov;~PMa}b~xLaSo(+B{PT7y2tI%JZJzo+8EUb$x3bYk{@M2@+;La!UmGgR96Mmh0>nRqLYo*oZZx)$`u|(2KpdMoy`V;p;$=alU%mk^A?{`gj8w7QuEe`@Bi|*iLzNIJ?|Y+%pwKHaIQ^m!4?eID5%q=V3?JrS;n$#1|Jd z`!Dud9<(FJ4ppp*_-ECIE2Zab{c%Ah5zfU!J*V4Gw9n|hGZYcKqq3&sM$14<=OwbS z3lALi9E}t6;&!gyd-gz9(vnjR%7mCsW1Dgy zOS1V#3afZU)lb*%4Jke(YwNOkB+X69Pv)b6LkAo8e4%8qzcL^EOZH>l-RU`yb+^jTL!+ojGR;Uv=sw^>(f=%mS_bkmZ}3oYV!ZvqMtB zyTT9c+_$VJpz{$sSY==<76spwY3|=Ne6uL(vt8G+$%AF2vZEKR3A?9tws-?{y=@EX zqAWA<<8L8eXUp7Cjy2W?tcwlrzYEmu8{T@^&ri8*n$rIQ5Iklm%i9Cy1Mf6&SF_f} Qtn~fD4QWRGkyK0Zzl!2eGXMYp literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/squirrel/run-4.png b/py/assets/sunnyland/squirrel/run-4.png new file mode 100644 index 0000000000000000000000000000000000000000..2455a81c48e8506a10729df91f50494d6e31bd37 GIT binary patch literal 1577 zcmeAS@N?(olHy`uVBq!ia0vp^Q9x|P!3HD^V*Db2lw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6H#24;=Skcg59UmvUF{9L_6kQ%*;+ybC(1_m4Zih{)C?9>v4 zq}24xJX@vryZ0+8WTx0Eg`4^s_!c;)W@LI)6{QAO`Gq7`WhYyvDB0U7*i={n4aiL` zNmQuF&B-gas<2f8n`;GRgM{^!6u?SKvTcwn`Gt*5rG%-*xx70H< zGcYkV)KM@pFf`XUFx59O(={-(GO(~RGE{&9C7^9ZDQQ+gE^bh}fIM5JjFOT9D}DX) z@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal z@=Hr>m4GgVcp(sS9KFoU6e}ka12bbo12ZQ}XIDc*R|^X>M{_3w z6LTXYOG^V|R~MLGm;B_?+|;}hnBEkGUUQs!K?x$a0BEyIYEfocYKmJ?ey#%8<5rp2 z++yrz=xXldg3~;x-V|(Zf#`L`saGH97=2LmB1Jb$2$+UIOnBl2a^T57H4m8Pi-3vy zEWgen1_q|-o-U3d6}R5ZvG+b4AaXR`%kg4hiNLEjH+*I8-a2UiLc!unCaykR2y`9 zva-|;&hBm9+&kqb{A>!$P!tU#vSk@7u%VGdBzpwXb^cl&R^RSoeF-mD(}F_T<*Jf?VNmOPulnRH)pmM*=Ai{92>9ue|@^_leFnK zE_}avzx%C|VM3Fy>C)9tv+pfq^W9aWVSRYRGZ&^J*0ue@&U0mQyXEcl8}G-QkAA&I z?(X*#I}a19Lz{L+pO8^jD`E31P1z$*z$6uxt|9yORZ3aB{yUQ;r_cV*`)ui<74@Oa z&rIE>tZ@CD)Z(2v4=3mCtY(|V_*r~&<5c0OIftibXFXuciQ;Gaux`=er*W2fI}#@z zdi!I+k&fxd_D@u}@oDFAg#+I{)XQq-M=(e+Wi+%gNG)IlGY)-GJ-~2zUOUsT?Dfu| O!rRl;&t;ucLK6UKz*Q>% literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/squirrel/run-5.png b/py/assets/sunnyland/squirrel/run-5.png new file mode 100644 index 0000000000000000000000000000000000000000..1a965e29f042d5933e3528fc7f5902b5e51c36b7 GIT binary patch literal 1578 zcmeAS@N?(olHy`uVBq!ia0vp^Q9x|P!3HD^V*Db2lw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6H#24;=Skcg59UmvUF{9L_6kQ%*;+ybC(1_m4Zih{)C?9>v4 zq}24xJX@vryZ0+8WTx0Eg`4^s_!c;)W@LI)6{QAO`Gq7`WhYyvDB0U7*i={n4aiL` zNmQuF&B-gas<2f8n`;GRgM{^!6u?SKvTcwn`Gt*5rG%-*xx70H< zGcYkV)KM@pFf`XUFx59O(={-(GO(~RGE{&9C7^9ZDQQ+gE^bh}fIM5JjFOT9D}DX) z@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal z@=Hr>m4GgVcp(sS9KFoU6e}ka12bbo14k!IXIDc*R|^X>M{_3w z6LTXYOG^V|R~MLGm;B_?+|;}hnBEkGUMHM-K?x$a0BEyIYEfocYKmJ?ey#%8<5rot z-C}{$JgD9j+-|YNsaGH97=2LmB1Jb$2$+UIOnBl2a^T57H4m8Pi-3vSyZ+5H1_q`X zo-U3d6}R5p*{{#yD8l|>=4sWIAPto(UTcGnK7AA}vS{Hme}~Tc1Mv>ZT%GcQfts4@ zLw373P7zx5bgfO?v$V43-`@D&zy2WaTUzb6v$M-zJFz=15P0d%%hJGR!gK*bxG_jw zXaEr$4$KgOF$2f~63Ps*CssT+{rJdZ|L4ip>F3|?%DQ0n+F#4_!Pb=v`=0l|i__+u zCs`u1L6>8%){T|U#s-hgmL0b`7IS}_cK=+d5}5*#JkgE8jcO_PKRw`%{WdFB+iFvc zXyDwgIrnAKtJhqS%$?TlqHgjpI;rV+nY+5sRkm5;H*NIJiw5d*88OSx+j40AbA9=& z#2x2n-Q@8oo>g&L-2YWc-Ib~sRU<3UlM`-wA83(ID-y`4eE7ue)a(^&?=MUKVXE@& z&9P;d_@`%;?w=YRc73y3*+ZiZGds;v>du7*am*}8Wf3lZRdISBmlxyP=A1`GnHwI? znjIG+ed0#Zo=7vFoTX7a6P8!4KO9ybyJMZ-;dGgFGx@_eZ47p=-SThVtG89=WvU`l zx7d^#YYVG$_t)t6yq%l*aAE4r4OiplpD9gM&#$0Y8mv?Jdzx_JZ)AaJ3?z#CJHeUW}`7F-rg}Be8z1t=wUh}KEYue8{ z?O~<8NZU;e&STXwI~?60BgI##S%R`^;dCZ|m(nvGds_Ri|<&*XBa%q)|& zo!YnGfzSWZ>bP6ejO_j13#8866f3ZKZE^4EO)-Bsx17r`PJCmbBc;BvyDZzZ@Z||D zV`oPfjE&IZ0`oa+>jHoN@)C!XH_*Bg6KQ_6oEJ5~vXc@FcY U-}l(?5>$G7y85}Sb4q9e05O_U+yDRo literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/squirrel/run-6.png b/py/assets/sunnyland/squirrel/run-6.png new file mode 100644 index 0000000000000000000000000000000000000000..1702cade97c7a4d8c62d232d6c3fc4adf6f47c4c GIT binary patch literal 1597 zcmeAS@N?(olHy`uVBq!ia0vp^Q9x|P!3HD^V*Db2lw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6H#24;=Skcg59UmvUF{9L_6kQ%*;+ybC(1_m4Zih{)C?9>v4 zq}24xJX@vryZ0+8WTx0Eg`4^s_!c;)W@LI)6{QAO`Gq7`WhYyvDB0U7*i={n4aiL` zNmQuF&B-gas<2f8n`;GRgM{^!6u?SKvTcwn`Gt*5rG%-*xx70H< zGcYkV)KM@pFf`XUFx59O(={-(GO(~RGE{&9C7^9ZDQQ+gE^bh}fIM5JjFOT9D}DX) z@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal z@=Hr>m4GgVcp(sS9KFoU6e}ka12bbo16LM{_3w z6LTXYOG^V|R~MLGm;B_?+|;}hnBEkGUN@Y2K?x$a0BEyIYEfocYKmJ?ey#%8<5rot z-QtYXJgD9j+-`BfsaGH97=2LmB1Jb$2$+UIOnBl2a^T57H4m8Pi-3vyXdyE@0|V1) zPZ!6Kid%2y*m@s!kT|Zdq+!*?=QLOL?vaZp#a4FlJqk)c>i^*MvO1>y4YDHaN5z*| zS$0L+H#apuTJb{Uvx~lsQLBrmE_l<>~klmhgYcY+GnMD=lOI7E%r4|n;4Ux{tBI=-;+JL@Zsx>ty&uy zXFqTMbZpuFE-P8Ppp}dF7JPaBYIE9yS4&Rsk4>Mvm^1IiXP>aWHi`L9zvQIfIQQw< zNk3j`t(@7~%d@SVFJ1lJuMj@F!ROJg6~{bwRj$~hyeIVO`+Bo)&EHpe8i_9ucW3X3 zz01|YHGRMR%hoBP{_h+n`y_4QObE@2xz?#AXCG-5a&_0tV_E8J<+%fmRNQAbJu5YB zmw6tQzDVWSv(+0v^M{u;x6IXcznxRFsN~I4rduBBU-u^b`S(q22g4TsW50G;zxaDD z;Ca^NRZaJMCKZ;x-5?pg@`Ti^KF`h{N!h>>?dOY?%6{jrT->tecIRc4UGax@pR#&w zQ^|XF^2(Omo(E<&PE(b0{OE6?Snx6;_Vm3|fA_S!Ho4*BczW{FSf!oTTosqBrZ*HF z=V~_6-@dSU`;$Fyj0-F7+}To;3q!m*7<^MBqIQ`5Q~nIGT!T)DGrcX=yw?yLz< zTvui~b=NB@CCn~avQy)I&Xo2-^KOou?W+6cWkvkpI&t`WH{ZYY%F+)#RU6ncI2JHU lEofu_l1wkwU0u(>%;1okY`4%(Y$m8c_jL7hS?83{1OSVpV($O| literal 0 HcmV?d00001 diff --git a/py/assets/sunnyland/tileset.png b/py/assets/sunnyland/tileset.png new file mode 100644 index 0000000000000000000000000000000000000000..f44abc31de50aaaaedabbb841e693d168aedc7a5 GIT binary patch literal 20258 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 literal 0 HcmV?d00001 diff --git a/py/assets/zombie_shooter/bullet.png b/py/assets/zombie_shooter/bullet.png new file mode 100644 index 0000000000000000000000000000000000000000..fd38525dd184472e4b27bb8d36b90d304c49c23b GIT binary patch literal 14842 zcmeI3eQXnD9LH~L>NWxlF-k@tX9vlqw%6;+)}C!)tn5YU*c;Lj47**QZs*#&dUvJW zBxD;3Xi!n3PB9um;~)gVKZc1B2*#jUVvLc1h(OQPT3$*~)SRY9ZyWqAhM)4{JK^_p^A|6IKP8dIPL-l& zFVH^))SGWDq$o#)*x}dwzSW!{hfRDy?gplKI0DraN^Zj+pByvL zV!&-!XZM+Xkvh;THV!DDeW1BR80Zt60mE`nsVmOG1Yw}@bUYlAR4(o|B=T}F)|(jv zosejKZbPj;Ano_H&~>r`XuGM}D6m!sUE?&dcBjK)dx*A}*=ok@WLTTg%yMQYXJ+Zt zW$={3$fX2=T${H(H5~lQZRpjs2*)t7Sj-f&nq;MiVVzDVW416BixDb}YQLoMaigSG zB$G_#@d8y)#E2%!60PUuyXC0nHW>7Q(pT!f!jbeqlA2-%DKc?B!muVYlg|_o(w<0E z2_>c$5Eu{wVIXNL^s#w;kzQGo)n0jqA=BM64h(DJ^QFhmJKu0P@6f8YY7<0|LYmj9 zcJxO8(*{&Ist91!CU`3q`R-m5gPG!FWzu_QoI8k%GuZT=q%E-&k`;2nd*$jBz-zM7 zA;o(Va$?HJU9Qtc_#MoQ-`@ zUzlbjNm7}U!zTyCV1K?GEN9Kifhcox!2J{8HU6fupjsqPK;VM166Q6J80LEb6Onpc zOr{Z0rdJhLCx>JOP78RfE+$_y;!3PEu1QigUJ^i)*8>|&q8Q*TR>0bXfYVrGalp;& zv;~b0drgheVFdu#tY&AB4J07?e5id|YOgFr_1%(69k|8Rh<#e>HHrvNIzEJG^x5C) z5P8x}8>&%M;ri@H)-7DUiLCjQ?7Ci5fqna7Cr0_jE@Dw!&wnmLIo2elZlfZ86oCT?c0 zC$nbTa?`sQ{qzrs*@Z~9X4hwG#ZIrMOFz^&xEA2N_(Tm@7c;FbGjdYz*J~PzCiFEH zGrSm9|4v!a?p$lRt~KLaD~X!Nk{T_i8FA?+Z}M1ZhYtzBQ*F0f?Jg#_IoHu5 z#zDyM72*C>^;PLeS#sO+`Z_Z{OEqdlI#R}DrI7#Ti9#k@;j;pKOkvW`DcLnn?}OVM zWbWuTCq~neK~NglnBc-9LIngDN&_1cTv$Y?fZ#%DU}J&{iwG4ETqq4}OmJZlp#p*n zrGbqJE-WHcKyaZnura}fMT80nE|dl~Cb+POPyxY((!j<97ZwpJAh=K(*qGqLB0>cO z7fJ&g6I@tCsDR)?X<%c53yTO95L_q?Y)o)r5upNt3#EaL2`(%mR6uZ{G_Wzjg++u4 z2riTcHYT{Rh)@B+h0?&r1Q!+&Dj>K}8rYcN!XiQi1Q$vJ8xveuM5ut^LTO-Qf(wfX z6%bq~4QzZvT&0;e|9}Kv_lv>z`gX+6&4TX)(n4dKkD>;aQPkj8in{hM{Jlg`Q8PtN zbWs#HLQ(h0FK_(3o}vm`o4mCh@w1!1ez&=>wrueH#>eOf<`;XH4LAHWe^+DCyulT8 zoGM!K?19nI6?ECsvX!x(!aeX>T6}lW2WKY_A9;Ak-XrgwW4|2vPVU*Xy}PLPOzCU2 z_XJxYzxz3}$_x~-AtIVC#!)vC#n z@%@iB|Dd?HOq6)vnY&k}#>H9VV&NCtN&=r1?YX}B@?Vuhrz_TOuRre|y7D^Df zvF~W;!10}xJ15x-zYW|~;`qIM%wKSFaqGhCg;JIA^)Ow$u4ue-(VyGY;q!;0Pe)dl zU0vVczgkrv8XIam^YdiMw=da;P8_N=mp!w4+qGA^hEA-g+F%>pA`W%k@1I+~B)(yN z*Oqx#o*Mh-*W({uFdmAJT1uH?XV-jMAP-(Y{D|z>C%@=;{8Znr<=?cP^e$c?UmBSG b8EG#p(63qdulYW5yn*){whQv^4% literal 0 HcmV?d00001 diff --git a/py/assets/zombie_shooter/light.png b/py/assets/zombie_shooter/light.png new file mode 100644 index 0000000000000000000000000000000000000000..c40411b0e5fdec143ea255ba25383b97bf716ffa GIT binary patch literal 254687 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⪚5YR#6X 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 literal 0 HcmV?d00001 diff --git a/py/assets/zombie_shooter/player_1.png b/py/assets/zombie_shooter/player_1.png new file mode 100644 index 0000000000000000000000000000000000000000..3cebeb771ac94908042caeee30c188c38912b172 GIT binary patch literal 1617 zcmV-X2Cn&uP)6vv5LRq7%|Sv0D;LCK;Ju8pvBLy7NKF#=>#PK66gt(^NTGHP zZde`@={>7a(R=uuCm$xi#c^2$(jc_gQ;>Lo{UkF6qaNZ2U4pEE;fh^bXw;{s`$qzy zLJvh^X(u~CLV=71wRd`x0-SP|9(X8oCpZ@h+9@kAgJ!yM27;f3BhH`0RnUBs!YrPI-60LP>j4r5T~>v1_Z@4 z@S(j879AZ#51bNs9x%ejk{y0oFu_-zM6dN}bOh#VTi-kb2K9Dk;)MI58bM6_j}t(q z)K|h^*(rjcM+5W2CYT@TPtZ!h122~*;m4(M_;#)v7ObsgoK>fW7Kt4s0>O5B;}vTh zQ2Jv?(_FBHFoW`{1Q@@zE)2l}u%G-+1B~^nz;BVmc&{9^G6ATBJR$|3vssd#Um1Zp zpOK*NX)R6wLCsnfNr6z!x{WZ}ua3&uqX3<(od7AXbGI2lXVX5#Fnh&=%vfY8fiOM9 z1VZ)Q5D}ox4(@IQ=)I86q$%+8y$E9ymB)Zg8(NPALN#gACjj+!c0{LKT9d(kFab|b zT3~Js^(DXz_o+Z5X(d3Bq;M`{FzNEjLEf=yWdugn-uN;y)iMJ!V-}|s#^>x|^$yK& zk*W4ZMqq9_)M%X5WP~lA6zFbkR&#dS*+@Os~||US29FtJ)|o zt=cLszYIrJQEBB)VOiCBVQHoJ@V!}A-LZE8xcZN=fY4aE&TV*ATw1xC3xKS@9oM-5n zpDAB=6Wkd}&O%VfELI;lU9(A*oF*MsQY@r(GqwFo0y8QEhnwv2g+S5d%RMw>_Pa9TPr@p$uy*}S;Xu%Yn@M7Au#>YUM8KMXgJ0U>bh#0h(7Pu*@9n;>hn&eC78_r z01o}1fXEfhIn4_b0!Qk8aiEd(pBhYs49AawjarZ)9b1s0M%T P00000NkvXXu0mjfRul38 literal 0 HcmV?d00001 diff --git a/py/assets/zombie_shooter/player_2.png b/py/assets/zombie_shooter/player_2.png new file mode 100644 index 0000000000000000000000000000000000000000..9c966d39fe6498017b6d19771c9dacc4b55aa21f GIT binary patch literal 1588 zcmV-42Fv-0P)#(D%*z=J}oH zd7pF6^OVIhaX1ulot@-7g_E2=gH;}dD3NQL`*vkv{w!M`7~~p%MGs;VIm#m!Y#Ant z80y?AMDD6|tb_NnDUoY%->FKl<~3fH&B44=5*|Td=nxypwI^xaQ)PUSO#wN``AcA! zn=-{H7$WQ`fYOAi&A`CN4My#2h%pI<=>6Jg+wzkARbDk1|}s z!7LyMQ|zIuydfLOZrZixz+kFbKpyupspMcU3zKPHxpP~AU@b8vyBSOlEkX+F?L;qu z=C!-Gi)R-x#PhSW294#8XQH?fF(rdx*PDd)-#n=ey;8m!=1HTstPQi{^+Qgc1c(?X z7|lS{Jqf74O^D`h95*Oge+v5G^YsZhFp!F&oGJvmUIM5$tO@jPSf+oDn>-SyUhqUm zN8E-GbbZ|zgP*}bchmH|dZa-L0x(h-iUq$X%OV&D`g?u|-D@mB!`IKFf$DRMG$?y!fb!WZ z0I-!0-6vDlmv(F!h=iD>VCEHx6b$I)H$CXZXdMO`s>xfX0qwGR zpx>ry^nm_QE79T?H?=_ZlGRrZ2-YDw&~#S`22xh$OuuqKWE~>48yb*iK`5(MO$B7yCuO{^fd@HUKGwa(978#$~y*NnA_9! z=CLmuf?~=`1Ze)#T7%z?$3fp5??BF+UjS#xFDL{VE8l?N6`w%Pj88!Dru7QD&T~O( zCKuO#<_FL(&-;*flXkalf00YAKaOr50>6OZRZ~C=$tRF~dBdYaUX+J`?B^bud2}FJ z=uF4nk&a(L`!bztC-kv z|2laMl|CrZI}iDkMK43xLHNbS2(UrC7$FjhvrtN|%%C;{gUP^9>?08yLA?nxsK^c& zza?M|d>b8+|2Q$Q7$ zvavCoqmd>h1R|ISfA$gl4p%R(v(c4Pa|?|gW0_j-G{jK7CAj{>^KK0E-FPF~YRcB8 zZO)8UYTNFgh$$Fof{}t{=S(f-rKdx+C^Y=2*)YCAY{gzTw>?(vJ^+kv*cLo0*4wm# zmLIj@%%`fC⁡snCcJFL-x$W!vDaKjqBYyiNYp3c%&@}Q1p9gUtPqhTdk_1K(Kcj zBny3IDSIpmMDovuoVWryz->4e_{UEBhx)!Qn zJR}tm)VE2E8+5EvsOT@xb!KhHzzM>H|0(>hPDe5{MQ&qnWMy)w27m4V0000%-b`lm3|Ds~O`CtkOJaPRp9z-Zc|2@Js2a7X&>{Vi6HjHLynuD=%) zl0_JEFDKX~048_@?_mh8D*yr%hD^QrI5q74AsLzIDJLW6n#s^`59#>ss#W-p>$v}m zHibTaHPZ*Y!3DDhM$9X>kb9N8ml?g10D|{uY;f(YJH(w2!tB2MO6nfJL>BgkF^Kwg zgQzGyps6g&CnwsDx&^@0KF~w(zUI?hGuK=&r;Te4q1M$JKB}!Fb%tS&AX=|X5WEj@ z%}Ff^TuTOjRh4!Q1~i<%=n(|OAd;2JL>@@MS^#X|6v_+`GVZJIuaWMl8&s#R-z2AR z{y?wUK3Ce>PTP2=sJMU!0X^bvh+up+FH8bhIb(;(?+$HDl{wgTk8Op}2OnwZUOMs{;kOx7tbdr#|nUm9v{dYQZ|&J*2`Bs24K?l574%9 z%PY573UskEfd~b=%njUE&lcoWuAjotMhE=Fo5RdU8E|e+UT6#16-lB8} z(Za=-lOW$92E=AG26v;A`C_?85YYIv@GwNmW%GuzT4uE9Et z#fDEqn9QRNA*xSyQ3%XKJ`3S2CiDa6C;+!Qejt#c{6(ASSWKL1sc5C2Bl(6cr?W#;KZKjAS?=5W)kp1h^UhtI$)jkn6HZl(KvEJa3Q$uX_<0IblhZQ zRNP`@%yYz5$)aMHBBJ9=5mB*r`}Yw3;;)=bhhhMHJ@+&DQfW$c#Rql!m)%3)+a`og%g|HnYfWA~pZKdNoQ(C=IyD~m@f`nr zqPJ7Gykb6e!w!JW=xVKA{0h3KCq?YY%lOulf+bL-S(I{^@s=g}OippJ#A|1EI83~s z=h~SafZ3Vd*@lC55Nvn%zw!D-wf?Ag4`Rj?fnEI5)4vP03L3wp+G;(kgZe(+OAW?E z2caa&3e0Tia7&P|H9a+Q^&ERNGn6!`Qynfhyf*e-4Rm9M#NZ5IIP(cpMXAb!EMpaC zFosKhjXqVS(DO=WiC)oM=~@;Zewp`Wpbznf9?PP002ovPDHLkV1i^W)qMZ} literal 0 HcmV?d00001 diff --git a/py/assets/zombie_shooter/player_4.png b/py/assets/zombie_shooter/player_4.png new file mode 100644 index 0000000000000000000000000000000000000000..2e001693bf38c2eccb272af838be9314d6c909c5 GIT binary patch literal 1587 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 VWpbznf9?PP002ovPDHLkV1n=?2@?PS literal 0 HcmV?d00001 diff --git a/py/engine/LdtkJson.py b/py/engine/LdtkJson.py new file mode 100644 index 0000000..c816f39 --- /dev/null +++ b/py/engine/LdtkJson.py @@ -0,0 +1,2831 @@ +from enum import Enum +from typing import Any, List, Optional, Dict, TypeVar, Type, Callable, cast + + +T = TypeVar("T") +EnumT = TypeVar("EnumT", bound=Enum) + + +def from_str(x: Any) -> str: + assert isinstance(x, str) + return x + + +def to_enum(c: Type[EnumT], x: Any) -> EnumT: + assert isinstance(x, c) + return x.value + + +def from_none(x: Any) -> Any: + assert x is None + return x + + +def from_list(f: Callable[[Any], T], x: Any) -> List[T]: + assert isinstance(x, list) + return [f(y) for y in x] + + +def from_union(fs, x): + for f in fs: + try: + return f(x) + except: + pass + assert False + + +def from_int(x: Any) -> int: + assert isinstance(x, int) and not isinstance(x, bool) + return x + + +def from_bool(x: Any) -> bool: + assert isinstance(x, bool) + return x + + +def from_float(x: Any) -> float: + assert isinstance(x, (float, int)) and not isinstance(x, bool) + return float(x) + + +def to_float(x: Any) -> float: + assert isinstance(x, float) + return x + + +def to_class(c: Type[T], x: Any) -> dict: + assert isinstance(x, c) + return cast(Any, x).to_dict() + + +def from_dict(f: Callable[[Any], T], x: Any) -> Dict[str, T]: + assert isinstance(x, dict) + return { k: f(v) for (k, v) in x.items() } + + +class When(Enum): + """Possible values: `Manual`, `AfterLoad`, `BeforeSave`, `AfterSave`""" + AFTER_LOAD = "AfterLoad" + AFTER_SAVE = "AfterSave" + BEFORE_SAVE = "BeforeSave" + MANUAL = "Manual" + + +class LdtkCustomCommand: + command: str + when: When + """Possible values: `Manual`, `AfterLoad`, `BeforeSave`, `AfterSave`""" + + def __init__(self, command: str, when: When) -> None: + self.command = command + self.when = when + + @staticmethod + def from_dict(obj: Any) -> 'LdtkCustomCommand': + assert isinstance(obj, dict) + command = from_str(obj.get("command")) + when = When(obj.get("when")) + return LdtkCustomCommand(command, when) + + def to_dict(self) -> dict: + result: dict = {} + result["command"] = from_str(self.command) + result["when"] = to_enum(When, self.when) + return result + + +class AllowedRefs(Enum): + """Possible values: `Any`, `OnlySame`, `OnlyTags`, `OnlySpecificEntity`""" + ANY = "Any" + ONLY_SAME = "OnlySame" + ONLY_SPECIFIC_ENTITY = "OnlySpecificEntity" + ONLY_TAGS = "OnlyTags" + + +class EditorDisplayMode(Enum): + """Possible values: `Hidden`, `ValueOnly`, `NameAndValue`, `EntityTile`, `LevelTile`, + `Points`, `PointStar`, `PointPath`, `PointPathLoop`, `RadiusPx`, `RadiusGrid`, + `ArrayCountWithLabel`, `ArrayCountNoLabel`, `RefLinkBetweenPivots`, + `RefLinkBetweenCenters` + """ + ARRAY_COUNT_NO_LABEL = "ArrayCountNoLabel" + ARRAY_COUNT_WITH_LABEL = "ArrayCountWithLabel" + ENTITY_TILE = "EntityTile" + HIDDEN = "Hidden" + LEVEL_TILE = "LevelTile" + NAME_AND_VALUE = "NameAndValue" + POINTS = "Points" + POINT_PATH = "PointPath" + POINT_PATH_LOOP = "PointPathLoop" + POINT_STAR = "PointStar" + RADIUS_GRID = "RadiusGrid" + RADIUS_PX = "RadiusPx" + REF_LINK_BETWEEN_CENTERS = "RefLinkBetweenCenters" + REF_LINK_BETWEEN_PIVOTS = "RefLinkBetweenPivots" + VALUE_ONLY = "ValueOnly" + + +class EditorDisplayPos(Enum): + """Possible values: `Above`, `Center`, `Beneath`""" + ABOVE = "Above" + BENEATH = "Beneath" + CENTER = "Center" + + +class EditorLinkStyle(Enum): + """Possible values: `ZigZag`, `StraightArrow`, `CurvedArrow`, `ArrowsLine`, `DashedLine`""" + ARROWS_LINE = "ArrowsLine" + CURVED_ARROW = "CurvedArrow" + DASHED_LINE = "DashedLine" + STRAIGHT_ARROW = "StraightArrow" + ZIG_ZAG = "ZigZag" + + +class TextLanguageMode(Enum): + LANG_C = "LangC" + LANG_HAXE = "LangHaxe" + LANG_JS = "LangJS" + LANG_JSON = "LangJson" + LANG_LOG = "LangLog" + LANG_LUA = "LangLua" + LANG_MARKDOWN = "LangMarkdown" + LANG_PYTHON = "LangPython" + LANG_RUBY = "LangRuby" + LANG_XML = "LangXml" + + +class FieldDefinition: + """This section is mostly only intended for the LDtk editor app itself. You can safely + ignore it. + """ + type: str + """Human readable value type. Possible values: `Int, Float, String, Bool, rl.Color, + ExternEnum.XXX, LocalEnum.XXX, Point, FilePath`.
If the field is an array, this + field will look like `Array<...>` (eg. `Array`, `Array` etc.)
NOTE: if + you enable the advanced option **Use Multilines type**, you will have "*Multilines*" + instead of "*String*" when relevant. + """ + accept_file_types: Optional[List[str]] + """Optional list of accepted file extensions for FilePath value type. Includes the dot: + `.ext` + """ + allowed_refs: AllowedRefs + """Possible values: `Any`, `OnlySame`, `OnlyTags`, `OnlySpecificEntity`""" + allowed_refs_entity_uid: Optional[int] + allowed_ref_tags: List[str] + allow_out_of_level_ref: bool + array_max_length: Optional[int] + """Array max length""" + array_min_length: Optional[int] + """Array min length""" + auto_chain_ref: bool + can_be_null: bool + """TRUE if the value can be null. For arrays, TRUE means it can contain null values + (exception: array of Points can't have null values). + """ + default_override: Any + """Default value if selected value is null or invalid.""" + doc: Optional[str] + """User defined documentation for this field to provide help/tips to level designers about + accepted values. + """ + editor_always_show: bool + editor_cut_long_values: bool + editor_display_color: Optional[str] + editor_display_mode: EditorDisplayMode + """Possible values: `Hidden`, `ValueOnly`, `NameAndValue`, `EntityTile`, `LevelTile`, + `Points`, `PointStar`, `PointPath`, `PointPathLoop`, `RadiusPx`, `RadiusGrid`, + `ArrayCountWithLabel`, `ArrayCountNoLabel`, `RefLinkBetweenPivots`, + `RefLinkBetweenCenters` + """ + editor_display_pos: EditorDisplayPos + """Possible values: `Above`, `Center`, `Beneath`""" + editor_display_scale: float + editor_link_style: EditorLinkStyle + """Possible values: `ZigZag`, `StraightArrow`, `CurvedArrow`, `ArrowsLine`, `DashedLine`""" + editor_show_in_world: bool + editor_text_prefix: Optional[str] + editor_text_suffix: Optional[str] + export_to_toc: bool + """If TRUE, the field value will be exported to the `toc` project JSON field. Only applies + to Entity fields. + """ + identifier: str + """User defined unique identifier""" + is_array: bool + """TRUE if the value is an array of multiple values""" + max: Optional[float] + """Max limit for value, if applicable""" + min: Optional[float] + """Min limit for value, if applicable""" + regex: Optional[str] + """Optional regular expression that needs to be matched to accept values. Expected format: + `/some_reg_ex/g`, with optional "i" flag. + """ + searchable: bool + """If enabled, this field will be searchable through LDtk command palette""" + symmetrical_ref: bool + text_language_mode: Optional[TextLanguageMode] + """Possible values: <`null`>, `LangPython`, `LangRuby`, `LangJS`, `LangLua`, `LangC`, + `LangHaxe`, `LangMarkdown`, `LangJson`, `LangXml`, `LangLog` + """ + tileset_uid: Optional[int] + """UID of the tileset used for a Tile""" + field_definition_type: str + """Internal enum representing the possible field types. Possible values: F_Int, F_Float, + F_String, F_Text, F_Bool, F_Color, F_Enum(...), F_Point, F_Path, F_EntityRef, F_Tile + """ + uid: int + """Unique Int identifier""" + use_for_smart_color: bool + """If TRUE, the color associated with this field will override the Entity or Level default + color in the editor UI. For Enum fields, this would be the color associated to their + values. + """ + + def __init__(self, type: str, accept_file_types: Optional[List[str]], allowed_refs: AllowedRefs, allowed_refs_entity_uid: Optional[int], allowed_ref_tags: List[str], allow_out_of_level_ref: bool, array_max_length: Optional[int], array_min_length: Optional[int], auto_chain_ref: bool, can_be_null: bool, default_override: Any, doc: Optional[str], editor_always_show: bool, editor_cut_long_values: bool, editor_display_color: Optional[str], editor_display_mode: EditorDisplayMode, editor_display_pos: EditorDisplayPos, editor_display_scale: float, editor_link_style: EditorLinkStyle, editor_show_in_world: bool, editor_text_prefix: Optional[str], editor_text_suffix: Optional[str], export_to_toc: bool, identifier: str, is_array: bool, max: Optional[float], min: Optional[float], regex: Optional[str], searchable: bool, symmetrical_ref: bool, text_language_mode: Optional[TextLanguageMode], tileset_uid: Optional[int], field_definition_type: str, uid: int, use_for_smart_color: bool) -> None: + self.type = type + self.accept_file_types = accept_file_types + self.allowed_refs = allowed_refs + self.allowed_refs_entity_uid = allowed_refs_entity_uid + self.allowed_ref_tags = allowed_ref_tags + self.allow_out_of_level_ref = allow_out_of_level_ref + self.array_max_length = array_max_length + self.array_min_length = array_min_length + self.auto_chain_ref = auto_chain_ref + self.can_be_null = can_be_null + self.default_override = default_override + self.doc = doc + self.editor_always_show = editor_always_show + self.editor_cut_long_values = editor_cut_long_values + self.editor_display_color = editor_display_color + self.editor_display_mode = editor_display_mode + self.editor_display_pos = editor_display_pos + self.editor_display_scale = editor_display_scale + self.editor_link_style = editor_link_style + self.editor_show_in_world = editor_show_in_world + self.editor_text_prefix = editor_text_prefix + self.editor_text_suffix = editor_text_suffix + self.export_to_toc = export_to_toc + self.identifier = identifier + self.is_array = is_array + self.max = max + self.min = min + self.regex = regex + self.searchable = searchable + self.symmetrical_ref = symmetrical_ref + self.text_language_mode = text_language_mode + self.tileset_uid = tileset_uid + self.field_definition_type = field_definition_type + self.uid = uid + self.use_for_smart_color = use_for_smart_color + + @staticmethod + def from_dict(obj: Any) -> 'FieldDefinition': + assert isinstance(obj, dict) + type = from_str(obj.get("__type")) + accept_file_types = from_union([from_none, lambda x: from_list(from_str, x)], obj.get("acceptFileTypes")) + allowed_refs = AllowedRefs(obj.get("allowedRefs")) + allowed_refs_entity_uid = from_union([from_none, from_int], obj.get("allowedRefsEntityUid")) + allowed_ref_tags = from_list(from_str, obj.get("allowedRefTags")) + allow_out_of_level_ref = from_bool(obj.get("allowOutOfLevelRef")) + array_max_length = from_union([from_none, from_int], obj.get("arrayMaxLength")) + array_min_length = from_union([from_none, from_int], obj.get("arrayMinLength")) + auto_chain_ref = from_bool(obj.get("autoChainRef")) + can_be_null = from_bool(obj.get("canBeNull")) + default_override = obj.get("defaultOverride") + doc = from_union([from_none, from_str], obj.get("doc")) + editor_always_show = from_bool(obj.get("editorAlwaysShow")) + editor_cut_long_values = from_bool(obj.get("editorCutLongValues")) + editor_display_color = from_union([from_none, from_str], obj.get("editorDisplayColor")) + editor_display_mode = EditorDisplayMode(obj.get("editorDisplayMode")) + editor_display_pos = EditorDisplayPos(obj.get("editorDisplayPos")) + editor_display_scale = from_float(obj.get("editorDisplayScale")) + editor_link_style = EditorLinkStyle(obj.get("editorLinkStyle")) + editor_show_in_world = from_bool(obj.get("editorShowInWorld")) + editor_text_prefix = from_union([from_none, from_str], obj.get("editorTextPrefix")) + editor_text_suffix = from_union([from_none, from_str], obj.get("editorTextSuffix")) + export_to_toc = from_bool(obj.get("exportToToc")) + identifier = from_str(obj.get("identifier")) + is_array = from_bool(obj.get("isArray")) + max = from_union([from_none, from_float], obj.get("max")) + min = from_union([from_none, from_float], obj.get("min")) + regex = from_union([from_none, from_str], obj.get("regex")) + searchable = from_bool(obj.get("searchable")) + symmetrical_ref = from_bool(obj.get("symmetricalRef")) + text_language_mode = from_union([from_none, TextLanguageMode], obj.get("textLanguageMode")) + tileset_uid = from_union([from_none, from_int], obj.get("tilesetUid")) + field_definition_type = from_str(obj.get("type")) + uid = from_int(obj.get("uid")) + use_for_smart_color = from_bool(obj.get("useForSmartColor")) + return FieldDefinition(type, accept_file_types, allowed_refs, allowed_refs_entity_uid, allowed_ref_tags, allow_out_of_level_ref, array_max_length, array_min_length, auto_chain_ref, can_be_null, default_override, doc, editor_always_show, editor_cut_long_values, editor_display_color, editor_display_mode, editor_display_pos, editor_display_scale, editor_link_style, editor_show_in_world, editor_text_prefix, editor_text_suffix, export_to_toc, identifier, is_array, max, min, regex, searchable, symmetrical_ref, text_language_mode, tileset_uid, field_definition_type, uid, use_for_smart_color) + + def to_dict(self) -> dict: + result: dict = {} + result["__type"] = from_str(self.type) + if self.accept_file_types is not None: + result["acceptFileTypes"] = from_union([from_none, lambda x: from_list(from_str, x)], self.accept_file_types) + result["allowedRefs"] = to_enum(AllowedRefs, self.allowed_refs) + if self.allowed_refs_entity_uid is not None: + result["allowedRefsEntityUid"] = from_union([from_none, from_int], self.allowed_refs_entity_uid) + result["allowedRefTags"] = from_list(from_str, self.allowed_ref_tags) + result["allowOutOfLevelRef"] = from_bool(self.allow_out_of_level_ref) + if self.array_max_length is not None: + result["arrayMaxLength"] = from_union([from_none, from_int], self.array_max_length) + if self.array_min_length is not None: + result["arrayMinLength"] = from_union([from_none, from_int], self.array_min_length) + result["autoChainRef"] = from_bool(self.auto_chain_ref) + result["canBeNull"] = from_bool(self.can_be_null) + if self.default_override is not None: + result["defaultOverride"] = self.default_override + if self.doc is not None: + result["doc"] = from_union([from_none, from_str], self.doc) + result["editorAlwaysShow"] = from_bool(self.editor_always_show) + result["editorCutLongValues"] = from_bool(self.editor_cut_long_values) + if self.editor_display_color is not None: + result["editorDisplayColor"] = from_union([from_none, from_str], self.editor_display_color) + result["editorDisplayMode"] = to_enum(EditorDisplayMode, self.editor_display_mode) + result["editorDisplayPos"] = to_enum(EditorDisplayPos, self.editor_display_pos) + result["editorDisplayScale"] = to_float(self.editor_display_scale) + result["editorLinkStyle"] = to_enum(EditorLinkStyle, self.editor_link_style) + result["editorShowInWorld"] = from_bool(self.editor_show_in_world) + if self.editor_text_prefix is not None: + result["editorTextPrefix"] = from_union([from_none, from_str], self.editor_text_prefix) + if self.editor_text_suffix is not None: + result["editorTextSuffix"] = from_union([from_none, from_str], self.editor_text_suffix) + result["exportToToc"] = from_bool(self.export_to_toc) + result["identifier"] = from_str(self.identifier) + result["isArray"] = from_bool(self.is_array) + if self.max is not None: + result["max"] = from_union([from_none, to_float], self.max) + if self.min is not None: + result["min"] = from_union([from_none, to_float], self.min) + if self.regex is not None: + result["regex"] = from_union([from_none, from_str], self.regex) + result["searchable"] = from_bool(self.searchable) + result["symmetricalRef"] = from_bool(self.symmetrical_ref) + if self.text_language_mode is not None: + result["textLanguageMode"] = from_union([from_none, lambda x: to_enum(TextLanguageMode, x)], self.text_language_mode) + if self.tileset_uid is not None: + result["tilesetUid"] = from_union([from_none, from_int], self.tileset_uid) + result["type"] = from_str(self.field_definition_type) + result["uid"] = from_int(self.uid) + result["useForSmartColor"] = from_bool(self.use_for_smart_color) + return result + + +class LimitBehavior(Enum): + """Possible values: `DiscardOldOnes`, `PreventAdding`, `MoveLastOne`""" + DISCARD_OLD_ONES = "DiscardOldOnes" + MOVE_LAST_ONE = "MoveLastOne" + PREVENT_ADDING = "PreventAdding" + + +class LimitScope(Enum): + """If TRUE, the maxCount is a "per world" limit, if FALSE, it's a "per level". Possible + values: `PerLayer`, `PerLevel`, `PerWorld` + """ + PER_LAYER = "PerLayer" + PER_LEVEL = "PerLevel" + PER_WORLD = "PerWorld" + + +class RenderMode(Enum): + """Possible values: `Rectangle`, `Ellipse`, `Tile`, `Cross`""" + CROSS = "Cross" + ELLIPSE = "Ellipse" + RECTANGLE = "Rectangle" + TILE = "Tile" + + +class TilesetRectangle: + """This object represents a custom sub rectangle in a Tileset image.""" + h: int + """Height in pixels""" + tileset_uid: int + """UID of the tileset""" + w: int + """Width in pixels""" + x: int + """X pixels coordinate of the top-left corner in the Tileset image""" + y: int + """Y pixels coordinate of the top-left corner in the Tileset image""" + + def __init__(self, h: int, tileset_uid: int, w: int, x: int, y: int) -> None: + self.h = h + self.tileset_uid = tileset_uid + self.w = w + self.x = x + self.y = y + + @staticmethod + def from_dict(obj: Any) -> 'TilesetRectangle': + assert isinstance(obj, dict) + h = from_int(obj.get("h")) + tileset_uid = from_int(obj.get("tilesetUid")) + w = from_int(obj.get("w")) + x = from_int(obj.get("x")) + y = from_int(obj.get("y")) + return TilesetRectangle(h, tileset_uid, w, x, y) + + def to_dict(self) -> dict: + result: dict = {} + result["h"] = from_int(self.h) + result["tilesetUid"] = from_int(self.tileset_uid) + result["w"] = from_int(self.w) + result["x"] = from_int(self.x) + result["y"] = from_int(self.y) + return result + + +class TileRenderMode(Enum): + """An enum describing how the the Entity tile is rendered inside the Entity bounds. Possible + values: `Cover`, `FitInside`, `Repeat`, `Stretch`, `FullSizeCropped`, + `FullSizeUncropped`, `NineSlice` + """ + COVER = "Cover" + FIT_INSIDE = "FitInside" + FULL_SIZE_CROPPED = "FullSizeCropped" + FULL_SIZE_UNCROPPED = "FullSizeUncropped" + NINE_SLICE = "NineSlice" + REPEAT = "Repeat" + STRETCH = "Stretch" + + +class EntityDefinition: + allow_out_of_bounds: bool + """If enabled, this entity is allowed to stay outside of the current level bounds""" + color: str + """Base entity color""" + doc: Optional[str] + """User defined documentation for this element to provide help/tips to level designers.""" + export_to_toc: bool + """If enabled, all instances of this entity will be listed in the project "Table of content" + object. + """ + field_defs: List[FieldDefinition] + """Array of field definitions""" + fill_opacity: float + height: int + """Pixel height""" + hollow: bool + identifier: str + """User defined unique identifier""" + keep_aspect_ratio: bool + """Only applies to entities resizable on both X/Y. If TRUE, the entity instance width/height + will keep the same aspect ratio as the definition. + """ + limit_behavior: LimitBehavior + """Possible values: `DiscardOldOnes`, `PreventAdding`, `MoveLastOne`""" + limit_scope: LimitScope + """If TRUE, the maxCount is a "per world" limit, if FALSE, it's a "per level". Possible + values: `PerLayer`, `PerLevel`, `PerWorld` + """ + line_opacity: float + max_count: int + """Max instances count""" + max_height: Optional[int] + """Max pixel height (only applies if the entity is resizable on Y)""" + max_width: Optional[int] + """Max pixel width (only applies if the entity is resizable on X)""" + min_height: Optional[int] + """Min pixel height (only applies if the entity is resizable on Y)""" + min_width: Optional[int] + """Min pixel width (only applies if the entity is resizable on X)""" + nine_slice_borders: List[int] + """An array of 4 dimensions for the up/right/down/left borders (in this order) when using + 9-slice mode for `tileRenderMode`.
If the tileRenderMode is not NineSlice, then + this array is empty.
See: https://en.wikipedia.org/wiki/9-slice_scaling + """ + pivot_x: float + """Pivot X coordinate (from 0 to 1.0)""" + pivot_y: float + """Pivot Y coordinate (from 0 to 1.0)""" + render_mode: RenderMode + """Possible values: `rl.Rectangle`, `Ellipse`, `Tile`, `Cross`""" + resizable_x: bool + """If TRUE, the entity instances will be resizable horizontally""" + resizable_y: bool + """If TRUE, the entity instances will be resizable vertically""" + show_name: bool + """Display entity name in editor""" + tags: List[str] + """An array of strings that classifies this entity""" + tile_id: Optional[int] + """**WARNING**: this deprecated value is no longer exported since version 1.2.0 Replaced + by: `tileRect` + """ + tile_opacity: float + tile_rect: Optional[TilesetRectangle] + """An object representing a rectangle from an existing Tileset""" + tile_render_mode: TileRenderMode + """An enum describing how the the Entity tile is rendered inside the Entity bounds. Possible + values: `Cover`, `FitInside`, `Repeat`, `Stretch`, `FullSizeCropped`, + `FullSizeUncropped`, `NineSlice` + """ + tileset_id: Optional[int] + """Tileset ID used for optional tile display""" + uid: int + """Unique Int identifier""" + ui_tile_rect: Optional[TilesetRectangle] + """This tile overrides the one defined in `tileRect` in the UI""" + width: int + """Pixel width""" + + def __init__(self, allow_out_of_bounds: bool, color: str, doc: Optional[str], export_to_toc: bool, field_defs: List[FieldDefinition], fill_opacity: float, height: int, hollow: bool, identifier: str, keep_aspect_ratio: bool, limit_behavior: LimitBehavior, limit_scope: LimitScope, line_opacity: float, max_count: int, max_height: Optional[int], max_width: Optional[int], min_height: Optional[int], min_width: Optional[int], nine_slice_borders: List[int], pivot_x: float, pivot_y: float, render_mode: RenderMode, resizable_x: bool, resizable_y: bool, show_name: bool, tags: List[str], tile_id: Optional[int], tile_opacity: float, tile_rect: Optional[TilesetRectangle], tile_render_mode: TileRenderMode, tileset_id: Optional[int], uid: int, ui_tile_rect: Optional[TilesetRectangle], width: int) -> None: + self.allow_out_of_bounds = allow_out_of_bounds + self.color = color + self.doc = doc + self.export_to_toc = export_to_toc + self.field_defs = field_defs + self.fill_opacity = fill_opacity + self.height = height + self.hollow = hollow + self.identifier = identifier + self.keep_aspect_ratio = keep_aspect_ratio + self.limit_behavior = limit_behavior + self.limit_scope = limit_scope + self.line_opacity = line_opacity + self.max_count = max_count + self.max_height = max_height + self.max_width = max_width + self.min_height = min_height + self.min_width = min_width + self.nine_slice_borders = nine_slice_borders + self.pivot_x = pivot_x + self.pivot_y = pivot_y + self.render_mode = render_mode + self.resizable_x = resizable_x + self.resizable_y = resizable_y + self.show_name = show_name + self.tags = tags + self.tile_id = tile_id + self.tile_opacity = tile_opacity + self.tile_rect = tile_rect + self.tile_render_mode = tile_render_mode + self.tileset_id = tileset_id + self.uid = uid + self.ui_tile_rect = ui_tile_rect + self.width = width + + @staticmethod + def from_dict(obj: Any) -> 'EntityDefinition': + assert isinstance(obj, dict) + allow_out_of_bounds = from_bool(obj.get("allowOutOfBounds")) + color = from_str(obj.get("color")) + doc = from_union([from_none, from_str], obj.get("doc")) + export_to_toc = from_bool(obj.get("exportToToc")) + field_defs = from_list(FieldDefinition.from_dict, obj.get("fieldDefs")) + fill_opacity = from_float(obj.get("fillOpacity")) + height = from_int(obj.get("height")) + hollow = from_bool(obj.get("hollow")) + identifier = from_str(obj.get("identifier")) + keep_aspect_ratio = from_bool(obj.get("keepAspectRatio")) + limit_behavior = LimitBehavior(obj.get("limitBehavior")) + limit_scope = LimitScope(obj.get("limitScope")) + line_opacity = from_float(obj.get("lineOpacity")) + max_count = from_int(obj.get("maxCount")) + max_height = from_union([from_none, from_int], obj.get("maxHeight")) + max_width = from_union([from_none, from_int], obj.get("maxWidth")) + min_height = from_union([from_none, from_int], obj.get("minHeight")) + min_width = from_union([from_none, from_int], obj.get("minWidth")) + nine_slice_borders = from_list(from_int, obj.get("nineSliceBorders")) + pivot_x = from_float(obj.get("pivotX")) + pivot_y = from_float(obj.get("pivotY")) + render_mode = RenderMode(obj.get("renderMode")) + resizable_x = from_bool(obj.get("resizableX")) + resizable_y = from_bool(obj.get("resizableY")) + show_name = from_bool(obj.get("showName")) + tags = from_list(from_str, obj.get("tags")) + tile_id = from_union([from_none, from_int], obj.get("tileId")) + tile_opacity = from_float(obj.get("tileOpacity")) + tile_rect = from_union([from_none, TilesetRectangle.from_dict], obj.get("tileRect")) + tile_render_mode = TileRenderMode(obj.get("tileRenderMode")) + tileset_id = from_union([from_none, from_int], obj.get("tilesetId")) + uid = from_int(obj.get("uid")) + ui_tile_rect = from_union([from_none, TilesetRectangle.from_dict], obj.get("uiTileRect")) + width = from_int(obj.get("width")) + return EntityDefinition(allow_out_of_bounds, color, doc, export_to_toc, field_defs, fill_opacity, height, hollow, identifier, keep_aspect_ratio, limit_behavior, limit_scope, line_opacity, max_count, max_height, max_width, min_height, min_width, nine_slice_borders, pivot_x, pivot_y, render_mode, resizable_x, resizable_y, show_name, tags, tile_id, tile_opacity, tile_rect, tile_render_mode, tileset_id, uid, ui_tile_rect, width) + + def to_dict(self) -> dict: + result: dict = {} + result["allowOutOfBounds"] = from_bool(self.allow_out_of_bounds) + result["color"] = from_str(self.color) + if self.doc is not None: + result["doc"] = from_union([from_none, from_str], self.doc) + result["exportToToc"] = from_bool(self.export_to_toc) + result["fieldDefs"] = from_list(lambda x: to_class(FieldDefinition, x), self.field_defs) + result["fillOpacity"] = to_float(self.fill_opacity) + result["height"] = from_int(self.height) + result["hollow"] = from_bool(self.hollow) + result["identifier"] = from_str(self.identifier) + result["keepAspectRatio"] = from_bool(self.keep_aspect_ratio) + result["limitBehavior"] = to_enum(LimitBehavior, self.limit_behavior) + result["limitScope"] = to_enum(LimitScope, self.limit_scope) + result["lineOpacity"] = to_float(self.line_opacity) + result["maxCount"] = from_int(self.max_count) + if self.max_height is not None: + result["maxHeight"] = from_union([from_none, from_int], self.max_height) + if self.max_width is not None: + result["maxWidth"] = from_union([from_none, from_int], self.max_width) + if self.min_height is not None: + result["minHeight"] = from_union([from_none, from_int], self.min_height) + if self.min_width is not None: + result["minWidth"] = from_union([from_none, from_int], self.min_width) + result["nineSliceBorders"] = from_list(from_int, self.nine_slice_borders) + result["pivotX"] = to_float(self.pivot_x) + result["pivotY"] = to_float(self.pivot_y) + result["renderMode"] = to_enum(RenderMode, self.render_mode) + result["resizableX"] = from_bool(self.resizable_x) + result["resizableY"] = from_bool(self.resizable_y) + result["showName"] = from_bool(self.show_name) + result["tags"] = from_list(from_str, self.tags) + if self.tile_id is not None: + result["tileId"] = from_union([from_none, from_int], self.tile_id) + result["tileOpacity"] = to_float(self.tile_opacity) + if self.tile_rect is not None: + result["tileRect"] = from_union([from_none, lambda x: to_class(TilesetRectangle, x)], self.tile_rect) + result["tileRenderMode"] = to_enum(TileRenderMode, self.tile_render_mode) + if self.tileset_id is not None: + result["tilesetId"] = from_union([from_none, from_int], self.tileset_id) + result["uid"] = from_int(self.uid) + if self.ui_tile_rect is not None: + result["uiTileRect"] = from_union([from_none, lambda x: to_class(TilesetRectangle, x)], self.ui_tile_rect) + result["width"] = from_int(self.width) + return result + + +class EnumValueDefinition: + tile_src_rect: Optional[List[int]] + """**WARNING**: this deprecated value is no longer exported since version 1.4.0 Replaced + by: `tileRect` + """ + color: int + """Optional color""" + id: str + """Enum value""" + tile_id: Optional[int] + """**WARNING**: this deprecated value is no longer exported since version 1.4.0 Replaced + by: `tileRect` + """ + tile_rect: Optional[TilesetRectangle] + """Optional tileset rectangle to represents this value""" + + def __init__(self, tile_src_rect: Optional[List[int]], color: int, id: str, tile_id: Optional[int], tile_rect: Optional[TilesetRectangle]) -> None: + self.tile_src_rect = tile_src_rect + self.color = color + self.id = id + self.tile_id = tile_id + self.tile_rect = tile_rect + + @staticmethod + def from_dict(obj: Any) -> 'EnumValueDefinition': + assert isinstance(obj, dict) + tile_src_rect = from_union([from_none, lambda x: from_list(from_int, x)], obj.get("__tileSrcRect")) + color = from_int(obj.get("color")) + id = from_str(obj.get("id")) + tile_id = from_union([from_none, from_int], obj.get("tileId")) + tile_rect = from_union([from_none, TilesetRectangle.from_dict], obj.get("tileRect")) + return EnumValueDefinition(tile_src_rect, color, id, tile_id, tile_rect) + + def to_dict(self) -> dict: + result: dict = {} + if self.tile_src_rect is not None: + result["__tileSrcRect"] = from_union([from_none, lambda x: from_list(from_int, x)], self.tile_src_rect) + result["color"] = from_int(self.color) + result["id"] = from_str(self.id) + if self.tile_id is not None: + result["tileId"] = from_union([from_none, from_int], self.tile_id) + if self.tile_rect is not None: + result["tileRect"] = from_union([from_none, lambda x: to_class(TilesetRectangle, x)], self.tile_rect) + return result + + +class EnumDefinition: + external_file_checksum: Optional[str] + external_rel_path: Optional[str] + """Relative path to the external file providing this Enum""" + icon_tileset_uid: Optional[int] + """Tileset UID if provided""" + identifier: str + """User defined unique identifier""" + tags: List[str] + """An array of user-defined tags to organize the Enums""" + uid: int + """Unique Int identifier""" + values: List[EnumValueDefinition] + """All possible enum values, with their optional Tile infos.""" + + def __init__(self, external_file_checksum: Optional[str], external_rel_path: Optional[str], icon_tileset_uid: Optional[int], identifier: str, tags: List[str], uid: int, values: List[EnumValueDefinition]) -> None: + self.external_file_checksum = external_file_checksum + self.external_rel_path = external_rel_path + self.icon_tileset_uid = icon_tileset_uid + self.identifier = identifier + self.tags = tags + self.uid = uid + self.values = values + + @staticmethod + def from_dict(obj: Any) -> 'EnumDefinition': + assert isinstance(obj, dict) + external_file_checksum = from_union([from_none, from_str], obj.get("externalFileChecksum")) + external_rel_path = from_union([from_none, from_str], obj.get("externalRelPath")) + icon_tileset_uid = from_union([from_none, from_int], obj.get("iconTilesetUid")) + identifier = from_str(obj.get("identifier")) + tags = from_list(from_str, obj.get("tags")) + uid = from_int(obj.get("uid")) + values = from_list(EnumValueDefinition.from_dict, obj.get("values")) + return EnumDefinition(external_file_checksum, external_rel_path, icon_tileset_uid, identifier, tags, uid, values) + + def to_dict(self) -> dict: + result: dict = {} + if self.external_file_checksum is not None: + result["externalFileChecksum"] = from_union([from_none, from_str], self.external_file_checksum) + if self.external_rel_path is not None: + result["externalRelPath"] = from_union([from_none, from_str], self.external_rel_path) + if self.icon_tileset_uid is not None: + result["iconTilesetUid"] = from_union([from_none, from_int], self.icon_tileset_uid) + result["identifier"] = from_str(self.identifier) + result["tags"] = from_list(from_str, self.tags) + result["uid"] = from_int(self.uid) + result["values"] = from_list(lambda x: to_class(EnumValueDefinition, x), self.values) + return result + + +class Checker(Enum): + """Checker mode Possible values: `None`, `Horizontal`, `Vertical`""" + HORIZONTAL = "Horizontal" + NONE = "None" + VERTICAL = "Vertical" + + +class TileMode(Enum): + """Defines how tileIds array is used Possible values: `Single`, `Stamp`""" + SINGLE = "Single" + STAMP = "Stamp" + + +class AutoLayerRuleDefinition: + """This complex section isn't meant to be used by game devs at all, as these rules are + completely resolved internally by the editor before any saving. You should just ignore + this part. + """ + active: bool + """If FALSE, the rule effect isn't applied, and no tiles are generated.""" + alpha: float + break_on_match: bool + """When TRUE, the rule will prevent other rules to be applied in the same cell if it matches + (TRUE by default). + """ + chance: float + """Chances for this rule to be applied (0 to 1)""" + checker: Checker + """Checker mode Possible values: `None`, `Horizontal`, `Vertical`""" + flip_x: bool + """If TRUE, allow rule to be matched by flipping its pattern horizontally""" + flip_y: bool + """If TRUE, allow rule to be matched by flipping its pattern vertically""" + invalidated: bool + """If TRUE, then the rule should be re-evaluated by the editor at one point""" + out_of_bounds_value: Optional[int] + """Default IntGrid value when checking cells outside of level bounds""" + pattern: List[int] + """Rule pattern (size x size)""" + perlin_active: bool + """If TRUE, enable Perlin filtering to only apply rule on specific random area""" + perlin_octaves: float + perlin_scale: float + perlin_seed: float + pivot_x: float + """X pivot of a tile stamp (0-1)""" + pivot_y: float + """Y pivot of a tile stamp (0-1)""" + size: int + """Pattern width & height. Should only be 1,3,5 or 7.""" + tile_ids: Optional[List[int]] + """**WARNING**: this deprecated value is no longer exported since version 1.5.0 Replaced + by: `tileRectsIds` + """ + tile_mode: TileMode + """Defines how tileIds array is used Possible values: `Single`, `Stamp`""" + tile_random_x_max: int + """Max random offset for X tile pos""" + tile_random_x_min: int + """Min random offset for X tile pos""" + tile_random_y_max: int + """Max random offset for Y tile pos""" + tile_random_y_min: int + """Min random offset for Y tile pos""" + tile_rects_ids: List[List[int]] + """Array containing all the possible tile IDs rectangles (picked randomly).""" + tile_x_offset: int + """Tile X offset""" + tile_y_offset: int + """Tile Y offset""" + uid: int + """Unique Int identifier""" + x_modulo: int + """X cell coord modulo""" + x_offset: int + """X cell start offset""" + y_modulo: int + """Y cell coord modulo""" + y_offset: int + """Y cell start offset""" + + def __init__(self, active: bool, alpha: float, break_on_match: bool, chance: float, checker: Checker, flip_x: bool, flip_y: bool, invalidated: bool, out_of_bounds_value: Optional[int], pattern: List[int], perlin_active: bool, perlin_octaves: float, perlin_scale: float, perlin_seed: float, pivot_x: float, pivot_y: float, size: int, tile_ids: Optional[List[int]], tile_mode: TileMode, tile_random_x_max: int, tile_random_x_min: int, tile_random_y_max: int, tile_random_y_min: int, tile_rects_ids: List[List[int]], tile_x_offset: int, tile_y_offset: int, uid: int, x_modulo: int, x_offset: int, y_modulo: int, y_offset: int) -> None: + self.active = active + self.alpha = alpha + self.break_on_match = break_on_match + self.chance = chance + self.checker = checker + self.flip_x = flip_x + self.flip_y = flip_y + self.invalidated = invalidated + self.out_of_bounds_value = out_of_bounds_value + self.pattern = pattern + self.perlin_active = perlin_active + self.perlin_octaves = perlin_octaves + self.perlin_scale = perlin_scale + self.perlin_seed = perlin_seed + self.pivot_x = pivot_x + self.pivot_y = pivot_y + self.size = size + self.tile_ids = tile_ids + self.tile_mode = tile_mode + self.tile_random_x_max = tile_random_x_max + self.tile_random_x_min = tile_random_x_min + self.tile_random_y_max = tile_random_y_max + self.tile_random_y_min = tile_random_y_min + self.tile_rects_ids = tile_rects_ids + self.tile_x_offset = tile_x_offset + self.tile_y_offset = tile_y_offset + self.uid = uid + self.x_modulo = x_modulo + self.x_offset = x_offset + self.y_modulo = y_modulo + self.y_offset = y_offset + + @staticmethod + def from_dict(obj: Any) -> 'AutoLayerRuleDefinition': + assert isinstance(obj, dict) + active = from_bool(obj.get("active")) + alpha = from_float(obj.get("alpha")) + break_on_match = from_bool(obj.get("breakOnMatch")) + chance = from_float(obj.get("chance")) + checker = Checker(obj.get("checker")) + flip_x = from_bool(obj.get("flipX")) + flip_y = from_bool(obj.get("flipY")) + invalidated = from_bool(obj.get("invalidated")) + out_of_bounds_value = from_union([from_none, from_int], obj.get("outOfBoundsValue")) + pattern = from_list(from_int, obj.get("pattern")) + perlin_active = from_bool(obj.get("perlinActive")) + perlin_octaves = from_float(obj.get("perlinOctaves")) + perlin_scale = from_float(obj.get("perlinScale")) + perlin_seed = from_float(obj.get("perlinSeed")) + pivot_x = from_float(obj.get("pivotX")) + pivot_y = from_float(obj.get("pivotY")) + size = from_int(obj.get("size")) + tile_ids = from_union([from_none, lambda x: from_list(from_int, x)], obj.get("tileIds")) + tile_mode = TileMode(obj.get("tileMode")) + tile_random_x_max = from_int(obj.get("tileRandomXMax")) + tile_random_x_min = from_int(obj.get("tileRandomXMin")) + tile_random_y_max = from_int(obj.get("tileRandomYMax")) + tile_random_y_min = from_int(obj.get("tileRandomYMin")) + tile_rects_ids = from_list(lambda x: from_list(from_int, x), obj.get("tileRectsIds")) + tile_x_offset = from_int(obj.get("tileXOffset")) + tile_y_offset = from_int(obj.get("tileYOffset")) + uid = from_int(obj.get("uid")) + x_modulo = from_int(obj.get("xModulo")) + x_offset = from_int(obj.get("xOffset")) + y_modulo = from_int(obj.get("yModulo")) + y_offset = from_int(obj.get("yOffset")) + return AutoLayerRuleDefinition(active, alpha, break_on_match, chance, checker, flip_x, flip_y, invalidated, out_of_bounds_value, pattern, perlin_active, perlin_octaves, perlin_scale, perlin_seed, pivot_x, pivot_y, size, tile_ids, tile_mode, tile_random_x_max, tile_random_x_min, tile_random_y_max, tile_random_y_min, tile_rects_ids, tile_x_offset, tile_y_offset, uid, x_modulo, x_offset, y_modulo, y_offset) + + def to_dict(self) -> dict: + result: dict = {} + result["active"] = from_bool(self.active) + result["alpha"] = to_float(self.alpha) + result["breakOnMatch"] = from_bool(self.break_on_match) + result["chance"] = to_float(self.chance) + result["checker"] = to_enum(Checker, self.checker) + result["flipX"] = from_bool(self.flip_x) + result["flipY"] = from_bool(self.flip_y) + result["invalidated"] = from_bool(self.invalidated) + if self.out_of_bounds_value is not None: + result["outOfBoundsValue"] = from_union([from_none, from_int], self.out_of_bounds_value) + result["pattern"] = from_list(from_int, self.pattern) + result["perlinActive"] = from_bool(self.perlin_active) + result["perlinOctaves"] = to_float(self.perlin_octaves) + result["perlinScale"] = to_float(self.perlin_scale) + result["perlinSeed"] = to_float(self.perlin_seed) + result["pivotX"] = to_float(self.pivot_x) + result["pivotY"] = to_float(self.pivot_y) + result["size"] = from_int(self.size) + if self.tile_ids is not None: + result["tileIds"] = from_union([from_none, lambda x: from_list(from_int, x)], self.tile_ids) + result["tileMode"] = to_enum(TileMode, self.tile_mode) + result["tileRandomXMax"] = from_int(self.tile_random_x_max) + result["tileRandomXMin"] = from_int(self.tile_random_x_min) + result["tileRandomYMax"] = from_int(self.tile_random_y_max) + result["tileRandomYMin"] = from_int(self.tile_random_y_min) + result["tileRectsIds"] = from_list(lambda x: from_list(from_int, x), self.tile_rects_ids) + result["tileXOffset"] = from_int(self.tile_x_offset) + result["tileYOffset"] = from_int(self.tile_y_offset) + result["uid"] = from_int(self.uid) + result["xModulo"] = from_int(self.x_modulo) + result["xOffset"] = from_int(self.x_offset) + result["yModulo"] = from_int(self.y_modulo) + result["yOffset"] = from_int(self.y_offset) + return result + + +class AutoLayerRuleGroup: + active: bool + biome_requirement_mode: int + collapsed: Optional[bool] + """*This field was removed in 1.0.0 and should no longer be used.*""" + color: Optional[str] + icon: Optional[TilesetRectangle] + is_optional: bool + name: str + required_biome_values: List[str] + rules: List[AutoLayerRuleDefinition] + uid: int + uses_wizard: bool + + def __init__(self, active: bool, biome_requirement_mode: int, collapsed: Optional[bool], color: Optional[str], icon: Optional[TilesetRectangle], is_optional: bool, name: str, required_biome_values: List[str], rules: List[AutoLayerRuleDefinition], uid: int, uses_wizard: bool) -> None: + self.active = active + self.biome_requirement_mode = biome_requirement_mode + self.collapsed = collapsed + self.color = color + self.icon = icon + self.is_optional = is_optional + self.name = name + self.required_biome_values = required_biome_values + self.rules = rules + self.uid = uid + self.uses_wizard = uses_wizard + + @staticmethod + def from_dict(obj: Any) -> 'AutoLayerRuleGroup': + assert isinstance(obj, dict) + active = from_bool(obj.get("active")) + biome_requirement_mode = from_int(obj.get("biomeRequirementMode")) + collapsed = from_union([from_none, from_bool], obj.get("collapsed")) + color = from_union([from_none, from_str], obj.get("color")) + icon = from_union([from_none, TilesetRectangle.from_dict], obj.get("icon")) + is_optional = from_bool(obj.get("isOptional")) + name = from_str(obj.get("name")) + required_biome_values = from_list(from_str, obj.get("requiredBiomeValues")) + rules = from_list(AutoLayerRuleDefinition.from_dict, obj.get("rules")) + uid = from_int(obj.get("uid")) + uses_wizard = from_bool(obj.get("usesWizard")) + return AutoLayerRuleGroup(active, biome_requirement_mode, collapsed, color, icon, is_optional, name, required_biome_values, rules, uid, uses_wizard) + + def to_dict(self) -> dict: + result: dict = {} + result["active"] = from_bool(self.active) + result["biomeRequirementMode"] = from_int(self.biome_requirement_mode) + if self.collapsed is not None: + result["collapsed"] = from_union([from_none, from_bool], self.collapsed) + if self.color is not None: + result["color"] = from_union([from_none, from_str], self.color) + if self.icon is not None: + result["icon"] = from_union([from_none, lambda x: to_class(TilesetRectangle, x)], self.icon) + result["isOptional"] = from_bool(self.is_optional) + result["name"] = from_str(self.name) + result["requiredBiomeValues"] = from_list(from_str, self.required_biome_values) + result["rules"] = from_list(lambda x: to_class(AutoLayerRuleDefinition, x), self.rules) + result["uid"] = from_int(self.uid) + result["usesWizard"] = from_bool(self.uses_wizard) + return result + + +class IntGridValueDefinition: + """IntGrid value definition""" + color: str + group_uid: int + """Parent group identifier (0 if none)""" + identifier: Optional[str] + """User defined unique identifier""" + tile: Optional[TilesetRectangle] + value: int + """The IntGrid value itself""" + + def __init__(self, color: str, group_uid: int, identifier: Optional[str], tile: Optional[TilesetRectangle], value: int) -> None: + self.color = color + self.group_uid = group_uid + self.identifier = identifier + self.tile = tile + self.value = value + + @staticmethod + def from_dict(obj: Any) -> 'IntGridValueDefinition': + assert isinstance(obj, dict) + color = from_str(obj.get("color")) + group_uid = from_int(obj.get("groupUid")) + identifier = from_union([from_none, from_str], obj.get("identifier")) + tile = from_union([from_none, TilesetRectangle.from_dict], obj.get("tile")) + value = from_int(obj.get("value")) + return IntGridValueDefinition(color, group_uid, identifier, tile, value) + + def to_dict(self) -> dict: + result: dict = {} + result["color"] = from_str(self.color) + result["groupUid"] = from_int(self.group_uid) + if self.identifier is not None: + result["identifier"] = from_union([from_none, from_str], self.identifier) + if self.tile is not None: + result["tile"] = from_union([from_none, lambda x: to_class(TilesetRectangle, x)], self.tile) + result["value"] = from_int(self.value) + return result + + +class IntGridValueGroupDefinition: + """IntGrid value group definition""" + color: Optional[str] + """User defined color""" + identifier: Optional[str] + """User defined string identifier""" + uid: int + """Group unique ID""" + + def __init__(self, color: Optional[str], identifier: Optional[str], uid: int) -> None: + self.color = color + self.identifier = identifier + self.uid = uid + + @staticmethod + def from_dict(obj: Any) -> 'IntGridValueGroupDefinition': + assert isinstance(obj, dict) + color = from_union([from_none, from_str], obj.get("color")) + identifier = from_union([from_none, from_str], obj.get("identifier")) + uid = from_int(obj.get("uid")) + return IntGridValueGroupDefinition(color, identifier, uid) + + def to_dict(self) -> dict: + result: dict = {} + if self.color is not None: + result["color"] = from_union([from_none, from_str], self.color) + if self.identifier is not None: + result["identifier"] = from_union([from_none, from_str], self.identifier) + result["uid"] = from_int(self.uid) + return result + + +class TypeEnum(Enum): + """Type of the layer as Haxe Enum Possible values: `IntGrid`, `Entities`, `Tiles`, + `AutoLayer` + """ + AUTO_LAYER = "AutoLayer" + ENTITIES = "Entities" + INT_GRID = "IntGrid" + TILES = "Tiles" + + +class LayerDefinition: + type: str + """Type of the layer (*IntGrid, Entities, Tiles or AutoLayer*)""" + auto_rule_groups: List[AutoLayerRuleGroup] + """Contains all the auto-layer rule definitions.""" + auto_source_layer_def_uid: Optional[int] + auto_tileset_def_uid: Optional[int] + """**WARNING**: this deprecated value is no longer exported since version 1.2.0 Replaced + by: `tilesetDefUid` + """ + auto_tiles_killed_by_other_layer_uid: Optional[int] + biome_field_uid: Optional[int] + can_select_when_inactive: bool + """Allow editor selections when the layer is not currently active.""" + display_opacity: float + """Opacity of the layer (0 to 1.0)""" + doc: Optional[str] + """User defined documentation for this element to provide help/tips to level designers.""" + excluded_tags: List[str] + """An array of tags to forbid some Entities in this layer""" + grid_size: int + """Width and height of the grid in pixels""" + guide_grid_hei: int + """Height of the optional "guide" grid in pixels""" + guide_grid_wid: int + """Width of the optional "guide" grid in pixels""" + hide_fields_when_inactive: bool + hide_in_list: bool + """Hide the layer from the list on the side of the editor view.""" + identifier: str + """User defined unique identifier""" + inactive_opacity: float + """Alpha of this layer when it is not the active one.""" + int_grid_values: List[IntGridValueDefinition] + """An array that defines extra optional info for each IntGrid value.
WARNING: the + array order is not related to actual IntGrid values! As user can re-order IntGrid values + freely, you may value "2" before value "1" in this array. + """ + int_grid_values_groups: List[IntGridValueGroupDefinition] + """Group informations for IntGrid values""" + parallax_factor_x: float + """Parallax horizontal factor (from -1 to 1, defaults to 0) which affects the scrolling + speed of this layer, creating a fake 3D (parallax) effect. + """ + parallax_factor_y: float + """Parallax vertical factor (from -1 to 1, defaults to 0) which affects the scrolling speed + of this layer, creating a fake 3D (parallax) effect. + """ + parallax_scaling: bool + """If true (default), a layer with a parallax factor will also be scaled up/down accordingly.""" + px_offset_x: int + """X offset of the layer, in pixels (IMPORTANT: this should be added to the `LayerInstance` + optional offset) + """ + px_offset_y: int + """Y offset of the layer, in pixels (IMPORTANT: this should be added to the `LayerInstance` + optional offset) + """ + render_in_world_view: bool + """If TRUE, the content of this layer will be used when rendering levels in a simplified way + for the world view + """ + required_tags: List[str] + """An array of tags to filter Entities that can be added to this layer""" + tile_pivot_x: float + """If the tiles are smaller or larger than the layer grid, the pivot value will be used to + position the tile relatively its grid cell. + """ + tile_pivot_y: float + """If the tiles are smaller or larger than the layer grid, the pivot value will be used to + position the tile relatively its grid cell. + """ + tileset_def_uid: Optional[int] + """Reference to the default Tileset UID being used by this layer definition.
+ **WARNING**: some layer *instances* might use a different tileset. So most of the time, + you should probably use the `__tilesetDefUid` value found in layer instances.
Note: + since version 1.0.0, the old `autoTilesetDefUid` was removed and merged into this value. + """ + layer_definition_type: TypeEnum + """Type of the layer as Haxe Enum Possible values: `IntGrid`, `Entities`, `Tiles`, + `AutoLayer` + """ + ui_color: Optional[str] + """User defined color for the UI""" + uid: int + """Unique Int identifier""" + ui_filter_tags: List[str] + """Display tags""" + use_async_render: bool + """Asynchronous rendering option for large/complex layers""" + + def __init__(self, type: str, auto_rule_groups: List[AutoLayerRuleGroup], auto_source_layer_def_uid: Optional[int], auto_tileset_def_uid: Optional[int], auto_tiles_killed_by_other_layer_uid: Optional[int], biome_field_uid: Optional[int], can_select_when_inactive: bool, display_opacity: float, doc: Optional[str], excluded_tags: List[str], grid_size: int, guide_grid_hei: int, guide_grid_wid: int, hide_fields_when_inactive: bool, hide_in_list: bool, identifier: str, inactive_opacity: float, int_grid_values: List[IntGridValueDefinition], int_grid_values_groups: List[IntGridValueGroupDefinition], parallax_factor_x: float, parallax_factor_y: float, parallax_scaling: bool, px_offset_x: int, px_offset_y: int, render_in_world_view: bool, required_tags: List[str], tile_pivot_x: float, tile_pivot_y: float, tileset_def_uid: Optional[int], layer_definition_type: TypeEnum, ui_color: Optional[str], uid: int, ui_filter_tags: List[str], use_async_render: bool) -> None: + self.type = type + self.auto_rule_groups = auto_rule_groups + self.auto_source_layer_def_uid = auto_source_layer_def_uid + self.auto_tileset_def_uid = auto_tileset_def_uid + self.auto_tiles_killed_by_other_layer_uid = auto_tiles_killed_by_other_layer_uid + self.biome_field_uid = biome_field_uid + self.can_select_when_inactive = can_select_when_inactive + self.display_opacity = display_opacity + self.doc = doc + self.excluded_tags = excluded_tags + self.grid_size = grid_size + self.guide_grid_hei = guide_grid_hei + self.guide_grid_wid = guide_grid_wid + self.hide_fields_when_inactive = hide_fields_when_inactive + self.hide_in_list = hide_in_list + self.identifier = identifier + self.inactive_opacity = inactive_opacity + self.int_grid_values = int_grid_values + self.int_grid_values_groups = int_grid_values_groups + self.parallax_factor_x = parallax_factor_x + self.parallax_factor_y = parallax_factor_y + self.parallax_scaling = parallax_scaling + self.px_offset_x = px_offset_x + self.px_offset_y = px_offset_y + self.render_in_world_view = render_in_world_view + self.required_tags = required_tags + self.tile_pivot_x = tile_pivot_x + self.tile_pivot_y = tile_pivot_y + self.tileset_def_uid = tileset_def_uid + self.layer_definition_type = layer_definition_type + self.ui_color = ui_color + self.uid = uid + self.ui_filter_tags = ui_filter_tags + self.use_async_render = use_async_render + + @staticmethod + def from_dict(obj: Any) -> 'LayerDefinition': + assert isinstance(obj, dict) + type = from_str(obj.get("__type")) + auto_rule_groups = from_list(AutoLayerRuleGroup.from_dict, obj.get("autoRuleGroups")) + auto_source_layer_def_uid = from_union([from_none, from_int], obj.get("autoSourceLayerDefUid")) + auto_tileset_def_uid = from_union([from_none, from_int], obj.get("autoTilesetDefUid")) + auto_tiles_killed_by_other_layer_uid = from_union([from_none, from_int], obj.get("autoTilesKilledByOtherLayerUid")) + biome_field_uid = from_union([from_none, from_int], obj.get("biomeFieldUid")) + can_select_when_inactive = from_bool(obj.get("canSelectWhenInactive")) + display_opacity = from_float(obj.get("displayOpacity")) + doc = from_union([from_none, from_str], obj.get("doc")) + excluded_tags = from_list(from_str, obj.get("excludedTags")) + grid_size = from_int(obj.get("gridSize")) + guide_grid_hei = from_int(obj.get("guideGridHei")) + guide_grid_wid = from_int(obj.get("guideGridWid")) + hide_fields_when_inactive = from_bool(obj.get("hideFieldsWhenInactive")) + hide_in_list = from_bool(obj.get("hideInList")) + identifier = from_str(obj.get("identifier")) + inactive_opacity = from_float(obj.get("inactiveOpacity")) + int_grid_values = from_list(IntGridValueDefinition.from_dict, obj.get("intGridValues")) + int_grid_values_groups = from_list(IntGridValueGroupDefinition.from_dict, obj.get("intGridValuesGroups")) + parallax_factor_x = from_float(obj.get("parallaxFactorX")) + parallax_factor_y = from_float(obj.get("parallaxFactorY")) + parallax_scaling = from_bool(obj.get("parallaxScaling")) + px_offset_x = from_int(obj.get("pxOffsetX")) + px_offset_y = from_int(obj.get("pxOffsetY")) + render_in_world_view = from_bool(obj.get("renderInWorldView")) + required_tags = from_list(from_str, obj.get("requiredTags")) + tile_pivot_x = from_float(obj.get("tilePivotX")) + tile_pivot_y = from_float(obj.get("tilePivotY")) + tileset_def_uid = from_union([from_none, from_int], obj.get("tilesetDefUid")) + layer_definition_type = TypeEnum(obj.get("type")) + ui_color = from_union([from_none, from_str], obj.get("uiColor")) + uid = from_int(obj.get("uid")) + ui_filter_tags = from_list(from_str, obj.get("uiFilterTags")) + use_async_render = from_bool(obj.get("useAsyncRender")) + return LayerDefinition(type, auto_rule_groups, auto_source_layer_def_uid, auto_tileset_def_uid, auto_tiles_killed_by_other_layer_uid, biome_field_uid, can_select_when_inactive, display_opacity, doc, excluded_tags, grid_size, guide_grid_hei, guide_grid_wid, hide_fields_when_inactive, hide_in_list, identifier, inactive_opacity, int_grid_values, int_grid_values_groups, parallax_factor_x, parallax_factor_y, parallax_scaling, px_offset_x, px_offset_y, render_in_world_view, required_tags, tile_pivot_x, tile_pivot_y, tileset_def_uid, layer_definition_type, ui_color, uid, ui_filter_tags, use_async_render) + + def to_dict(self) -> dict: + result: dict = {} + result["__type"] = from_str(self.type) + result["autoRuleGroups"] = from_list(lambda x: to_class(AutoLayerRuleGroup, x), self.auto_rule_groups) + if self.auto_source_layer_def_uid is not None: + result["autoSourceLayerDefUid"] = from_union([from_none, from_int], self.auto_source_layer_def_uid) + if self.auto_tileset_def_uid is not None: + result["autoTilesetDefUid"] = from_union([from_none, from_int], self.auto_tileset_def_uid) + if self.auto_tiles_killed_by_other_layer_uid is not None: + result["autoTilesKilledByOtherLayerUid"] = from_union([from_none, from_int], self.auto_tiles_killed_by_other_layer_uid) + if self.biome_field_uid is not None: + result["biomeFieldUid"] = from_union([from_none, from_int], self.biome_field_uid) + result["canSelectWhenInactive"] = from_bool(self.can_select_when_inactive) + result["displayOpacity"] = to_float(self.display_opacity) + if self.doc is not None: + result["doc"] = from_union([from_none, from_str], self.doc) + result["excludedTags"] = from_list(from_str, self.excluded_tags) + result["gridSize"] = from_int(self.grid_size) + result["guideGridHei"] = from_int(self.guide_grid_hei) + result["guideGridWid"] = from_int(self.guide_grid_wid) + result["hideFieldsWhenInactive"] = from_bool(self.hide_fields_when_inactive) + result["hideInList"] = from_bool(self.hide_in_list) + result["identifier"] = from_str(self.identifier) + result["inactiveOpacity"] = to_float(self.inactive_opacity) + result["intGridValues"] = from_list(lambda x: to_class(IntGridValueDefinition, x), self.int_grid_values) + result["intGridValuesGroups"] = from_list(lambda x: to_class(IntGridValueGroupDefinition, x), self.int_grid_values_groups) + result["parallaxFactorX"] = to_float(self.parallax_factor_x) + result["parallaxFactorY"] = to_float(self.parallax_factor_y) + result["parallaxScaling"] = from_bool(self.parallax_scaling) + result["pxOffsetX"] = from_int(self.px_offset_x) + result["pxOffsetY"] = from_int(self.px_offset_y) + result["renderInWorldView"] = from_bool(self.render_in_world_view) + result["requiredTags"] = from_list(from_str, self.required_tags) + result["tilePivotX"] = to_float(self.tile_pivot_x) + result["tilePivotY"] = to_float(self.tile_pivot_y) + if self.tileset_def_uid is not None: + result["tilesetDefUid"] = from_union([from_none, from_int], self.tileset_def_uid) + result["type"] = to_enum(TypeEnum, self.layer_definition_type) + if self.ui_color is not None: + result["uiColor"] = from_union([from_none, from_str], self.ui_color) + result["uid"] = from_int(self.uid) + result["uiFilterTags"] = from_list(from_str, self.ui_filter_tags) + result["useAsyncRender"] = from_bool(self.use_async_render) + return result + + +class TileCustomMetadata: + """In a tileset definition, user defined meta-data of a tile.""" + data: str + tile_id: int + + def __init__(self, data: str, tile_id: int) -> None: + self.data = data + self.tile_id = tile_id + + @staticmethod + def from_dict(obj: Any) -> 'TileCustomMetadata': + assert isinstance(obj, dict) + data = from_str(obj.get("data")) + tile_id = from_int(obj.get("tileId")) + return TileCustomMetadata(data, tile_id) + + def to_dict(self) -> dict: + result: dict = {} + result["data"] = from_str(self.data) + result["tileId"] = from_int(self.tile_id) + return result + + +class EmbedAtlas(Enum): + LDTK_ICONS = "LdtkIcons" + + +class EnumTagValue: + """In a tileset definition, enum based tag infos""" + enum_value_id: str + tile_ids: List[int] + + def __init__(self, enum_value_id: str, tile_ids: List[int]) -> None: + self.enum_value_id = enum_value_id + self.tile_ids = tile_ids + + @staticmethod + def from_dict(obj: Any) -> 'EnumTagValue': + assert isinstance(obj, dict) + enum_value_id = from_str(obj.get("enumValueId")) + tile_ids = from_list(from_int, obj.get("tileIds")) + return EnumTagValue(enum_value_id, tile_ids) + + def to_dict(self) -> dict: + result: dict = {} + result["enumValueId"] = from_str(self.enum_value_id) + result["tileIds"] = from_list(from_int, self.tile_ids) + return result + + +class TilesetDefinition: + """The `Tileset` definition is the most important part among project definitions. It + contains some extra informations about each integrated tileset. If you only had to parse + one definition section, that would be the one. + """ + c_hei: int + """Grid-based height""" + c_wid: int + """Grid-based width""" + cached_pixel_data: Optional[Dict[str, Any]] + """The following data is used internally for various optimizations. It's always synced with + source image changes. + """ + custom_data: List[TileCustomMetadata] + """An array of custom tile metadata""" + embed_atlas: Optional[EmbedAtlas] + """If this value is set, then it means that this atlas uses an internal LDtk atlas image + instead of a loaded one. Possible values: <`null`>, `LdtkIcons` + """ + enum_tags: List[EnumTagValue] + """Tileset tags using Enum values specified by `tagsSourceEnumId`. This array contains 1 + element per Enum value, which contains an array of all Tile IDs that are tagged with it. + """ + identifier: str + """User defined unique identifier""" + padding: int + """Distance in pixels from image borders""" + px_hei: int + """Image height in pixels""" + px_wid: int + """Image width in pixels""" + rel_path: Optional[str] + """Path to the source file, relative to the current project JSON file
It can be null + if no image was provided, or when using an embed atlas. + """ + saved_selections: List[Dict[str, Any]] + """Array of group of tiles selections, only meant to be used in the editor""" + spacing: int + """Space in pixels between all tiles""" + tags: List[str] + """An array of user-defined tags to organize the Tilesets""" + tags_source_enum_uid: Optional[int] + """Optional Enum definition UID used for this tileset meta-data""" + tile_grid_size: int + uid: int + """Unique Intidentifier""" + + def __init__(self, c_hei: int, c_wid: int, cached_pixel_data: Optional[Dict[str, Any]], custom_data: List[TileCustomMetadata], embed_atlas: Optional[EmbedAtlas], enum_tags: List[EnumTagValue], identifier: str, padding: int, px_hei: int, px_wid: int, rel_path: Optional[str], saved_selections: List[Dict[str, Any]], spacing: int, tags: List[str], tags_source_enum_uid: Optional[int], tile_grid_size: int, uid: int) -> None: + self.c_hei = c_hei + self.c_wid = c_wid + self.cached_pixel_data = cached_pixel_data + self.custom_data = custom_data + self.embed_atlas = embed_atlas + self.enum_tags = enum_tags + self.identifier = identifier + self.padding = padding + self.px_hei = px_hei + self.px_wid = px_wid + self.rel_path = rel_path + self.saved_selections = saved_selections + self.spacing = spacing + self.tags = tags + self.tags_source_enum_uid = tags_source_enum_uid + self.tile_grid_size = tile_grid_size + self.uid = uid + + @staticmethod + def from_dict(obj: Any) -> 'TilesetDefinition': + assert isinstance(obj, dict) + c_hei = from_int(obj.get("__cHei")) + c_wid = from_int(obj.get("__cWid")) + cached_pixel_data = from_union([from_none, lambda x: from_dict(lambda x: x, x)], obj.get("cachedPixelData")) + custom_data = from_list(TileCustomMetadata.from_dict, obj.get("customData")) + embed_atlas = from_union([from_none, EmbedAtlas], obj.get("embedAtlas")) + enum_tags = from_list(EnumTagValue.from_dict, obj.get("enumTags")) + identifier = from_str(obj.get("identifier")) + padding = from_int(obj.get("padding")) + px_hei = from_int(obj.get("pxHei")) + px_wid = from_int(obj.get("pxWid")) + rel_path = from_union([from_none, from_str], obj.get("relPath")) + saved_selections = from_list(lambda x: from_dict(lambda x: x, x), obj.get("savedSelections")) + spacing = from_int(obj.get("spacing")) + tags = from_list(from_str, obj.get("tags")) + tags_source_enum_uid = from_union([from_none, from_int], obj.get("tagsSourceEnumUid")) + tile_grid_size = from_int(obj.get("tileGridSize")) + uid = from_int(obj.get("uid")) + return TilesetDefinition(c_hei, c_wid, cached_pixel_data, custom_data, embed_atlas, enum_tags, identifier, padding, px_hei, px_wid, rel_path, saved_selections, spacing, tags, tags_source_enum_uid, tile_grid_size, uid) + + def to_dict(self) -> dict: + result: dict = {} + result["__cHei"] = from_int(self.c_hei) + result["__cWid"] = from_int(self.c_wid) + if self.cached_pixel_data is not None: + result["cachedPixelData"] = from_union([from_none, lambda x: from_dict(lambda x: x, x)], self.cached_pixel_data) + result["customData"] = from_list(lambda x: to_class(TileCustomMetadata, x), self.custom_data) + if self.embed_atlas is not None: + result["embedAtlas"] = from_union([from_none, lambda x: to_enum(EmbedAtlas, x)], self.embed_atlas) + result["enumTags"] = from_list(lambda x: to_class(EnumTagValue, x), self.enum_tags) + result["identifier"] = from_str(self.identifier) + result["padding"] = from_int(self.padding) + result["pxHei"] = from_int(self.px_hei) + result["pxWid"] = from_int(self.px_wid) + if self.rel_path is not None: + result["relPath"] = from_union([from_none, from_str], self.rel_path) + result["savedSelections"] = from_list(lambda x: from_dict(lambda x: x, x), self.saved_selections) + result["spacing"] = from_int(self.spacing) + result["tags"] = from_list(from_str, self.tags) + if self.tags_source_enum_uid is not None: + result["tagsSourceEnumUid"] = from_union([from_none, from_int], self.tags_source_enum_uid) + result["tileGridSize"] = from_int(self.tile_grid_size) + result["uid"] = from_int(self.uid) + return result + + +class Definitions: + """If you're writing your own LDtk importer, you should probably just ignore *most* stuff in + the `defs` section, as it contains data that are mostly important to the editor. To keep + you away from the `defs` section and avoid some unnecessary JSON parsing, important data + from definitions is often duplicated in fields prefixed with a double underscore (eg. + `__identifier` or `__type`). The 2 only definition types you might need here are + **Tilesets** and **Enums**. + + A structure containing all the definitions of this project + """ + entities: List[EntityDefinition] + """All entities definitions, including their custom fields""" + enums: List[EnumDefinition] + """All internal enums""" + external_enums: List[EnumDefinition] + """Note: external enums are exactly the same as `enums`, except they have a `relPath` to + point to an external source file. + """ + layers: List[LayerDefinition] + """All layer definitions""" + level_fields: List[FieldDefinition] + """All custom fields available to all levels.""" + tilesets: List[TilesetDefinition] + """All tilesets""" + + def __init__(self, entities: List[EntityDefinition], enums: List[EnumDefinition], external_enums: List[EnumDefinition], layers: List[LayerDefinition], level_fields: List[FieldDefinition], tilesets: List[TilesetDefinition]) -> None: + self.entities = entities + self.enums = enums + self.external_enums = external_enums + self.layers = layers + self.level_fields = level_fields + self.tilesets = tilesets + + @staticmethod + def from_dict(obj: Any) -> 'Definitions': + assert isinstance(obj, dict) + entities = from_list(EntityDefinition.from_dict, obj.get("entities")) + enums = from_list(EnumDefinition.from_dict, obj.get("enums")) + external_enums = from_list(EnumDefinition.from_dict, obj.get("externalEnums")) + layers = from_list(LayerDefinition.from_dict, obj.get("layers")) + level_fields = from_list(FieldDefinition.from_dict, obj.get("levelFields")) + tilesets = from_list(TilesetDefinition.from_dict, obj.get("tilesets")) + return Definitions(entities, enums, external_enums, layers, level_fields, tilesets) + + def to_dict(self) -> dict: + result: dict = {} + result["entities"] = from_list(lambda x: to_class(EntityDefinition, x), self.entities) + result["enums"] = from_list(lambda x: to_class(EnumDefinition, x), self.enums) + result["externalEnums"] = from_list(lambda x: to_class(EnumDefinition, x), self.external_enums) + result["layers"] = from_list(lambda x: to_class(LayerDefinition, x), self.layers) + result["levelFields"] = from_list(lambda x: to_class(FieldDefinition, x), self.level_fields) + result["tilesets"] = from_list(lambda x: to_class(TilesetDefinition, x), self.tilesets) + return result + + +class Flag(Enum): + DISCARD_PRE_CSV_INT_GRID = "DiscardPreCsvIntGrid" + EXPORT_OLD_TABLE_OF_CONTENT_DATA = "ExportOldTableOfContentData" + EXPORT_PRE_CSV_INT_GRID_FORMAT = "ExportPreCsvIntGridFormat" + IGNORE_BACKUP_SUGGEST = "IgnoreBackupSuggest" + MULTI_WORLDS = "MultiWorlds" + PREPEND_INDEX_TO_LEVEL_FILE_NAMES = "PrependIndexToLevelFileNames" + USE_MULTILINES_TYPE = "UseMultilinesType" + + +class FieldInstance: + identifier: str + """Field definition identifier""" + tile: Optional[TilesetRectangle] + """Optional TilesetRect used to display this field (this can be the field own Tile, or some + other Tile guessed from the value, like an Enum). + """ + type: str + """Type of the field, such as `Int`, `Float`, `String`, `Enum(my_enum_name)`, `Bool`, + etc.
NOTE: if you enable the advanced option **Use Multilines type**, you will have + "*Multilines*" instead of "*String*" when relevant. + """ + value: Any + """Actual value of the field instance. The value type varies, depending on `__type`:
+ - For **classic types** (ie. Integer, Float, Boolean, String, Text and FilePath), you + just get the actual value with the expected type.
- For **rl.Color**, the value is an + hexadecimal string using "#rrggbb" format.
- For **Enum**, the value is a String + representing the selected enum value.
- For **Point**, the value is a + [GridPoint](#ldtk-GridPoint) object.
- For **Tile**, the value is a + [TilesetRect](#ldtk-TilesetRect) object.
- For **EntityRef**, the value is an + [EntityReferenceInfos](#ldtk-EntityReferenceInfos) object.

If the field is an + array, then this `__value` will also be a JSON array. + """ + def_uid: int + """Reference of the **Field definition** UID""" + real_editor_values: List[Any] + """Editor internal raw values""" + + def __init__(self, identifier: str, tile: Optional[TilesetRectangle], type: str, value: Any, def_uid: int, real_editor_values: List[Any]) -> None: + self.identifier = identifier + self.tile = tile + self.type = type + self.value = value + self.def_uid = def_uid + self.real_editor_values = real_editor_values + + @staticmethod + def from_dict(obj: Any) -> 'FieldInstance': + assert isinstance(obj, dict) + identifier = from_str(obj.get("__identifier")) + tile = from_union([from_none, TilesetRectangle.from_dict], obj.get("__tile")) + type = from_str(obj.get("__type")) + value = obj.get("__value") + def_uid = from_int(obj.get("defUid")) + real_editor_values = from_list(lambda x: x, obj.get("realEditorValues")) + return FieldInstance(identifier, tile, type, value, def_uid, real_editor_values) + + def to_dict(self) -> dict: + result: dict = {} + result["__identifier"] = from_str(self.identifier) + if self.tile is not None: + result["__tile"] = from_union([from_none, lambda x: to_class(TilesetRectangle, x)], self.tile) + result["__type"] = from_str(self.type) + result["__value"] = self.value + result["defUid"] = from_int(self.def_uid) + result["realEditorValues"] = from_list(lambda x: x, self.real_editor_values) + return result + + +class EntityInstance: + grid: List[int] + """Grid-based coordinates (`[x,y]` format)""" + identifier: str + """Entity definition identifier""" + pivot: List[float] + """Pivot coordinates (`[x,y]` format, values are from 0 to 1) of the Entity""" + smart_color: str + """The entity "smart" color, guessed from either Entity definition, or one its field + instances. + """ + tags: List[str] + """Array of tags defined in this Entity definition""" + tile: Optional[TilesetRectangle] + """Optional TilesetRect used to display this entity (it could either be the default Entity + tile, or some tile provided by a field value, like an Enum). + """ + world_x: Optional[int] + """X world coordinate in pixels. Only available in GridVania or Free world layouts.""" + world_y: Optional[int] + """Y world coordinate in pixels Only available in GridVania or Free world layouts.""" + def_uid: int + """Reference of the **Entity definition** UID""" + field_instances: List[FieldInstance] + """An array of all custom fields and their values.""" + height: int + """Entity height in pixels. For non-resizable entities, it will be the same as Entity + definition. + """ + iid: str + """Unique instance identifier""" + px: List[int] + """Pixel coordinates (`[x,y]` format) in current level coordinate space. Don't forget + optional layer offsets, if they exist! + """ + width: int + """Entity width in pixels. For non-resizable entities, it will be the same as Entity + definition. + """ + + def __init__(self, grid: List[int], identifier: str, pivot: List[float], smart_color: str, tags: List[str], tile: Optional[TilesetRectangle], world_x: Optional[int], world_y: Optional[int], def_uid: int, field_instances: List[FieldInstance], height: int, iid: str, px: List[int], width: int) -> None: + self.grid = grid + self.identifier = identifier + self.pivot = pivot + self.smart_color = smart_color + self.tags = tags + self.tile = tile + self.world_x = world_x + self.world_y = world_y + self.def_uid = def_uid + self.field_instances = field_instances + self.height = height + self.iid = iid + self.px = px + self.width = width + + @staticmethod + def from_dict(obj: Any) -> 'EntityInstance': + assert isinstance(obj, dict) + grid = from_list(from_int, obj.get("__grid")) + identifier = from_str(obj.get("__identifier")) + pivot = from_list(from_float, obj.get("__pivot")) + smart_color = from_str(obj.get("__smartColor")) + tags = from_list(from_str, obj.get("__tags")) + tile = from_union([from_none, TilesetRectangle.from_dict], obj.get("__tile")) + world_x = from_union([from_none, from_int], obj.get("__worldX")) + world_y = from_union([from_none, from_int], obj.get("__worldY")) + def_uid = from_int(obj.get("defUid")) + field_instances = from_list(FieldInstance.from_dict, obj.get("fieldInstances")) + height = from_int(obj.get("height")) + iid = from_str(obj.get("iid")) + px = from_list(from_int, obj.get("px")) + width = from_int(obj.get("width")) + return EntityInstance(grid, identifier, pivot, smart_color, tags, tile, world_x, world_y, def_uid, field_instances, height, iid, px, width) + + def to_dict(self) -> dict: + result: dict = {} + result["__grid"] = from_list(from_int, self.grid) + result["__identifier"] = from_str(self.identifier) + result["__pivot"] = from_list(to_float, self.pivot) + result["__smartColor"] = from_str(self.smart_color) + result["__tags"] = from_list(from_str, self.tags) + if self.tile is not None: + result["__tile"] = from_union([from_none, lambda x: to_class(TilesetRectangle, x)], self.tile) + if self.world_x is not None: + result["__worldX"] = from_union([from_none, from_int], self.world_x) + if self.world_y is not None: + result["__worldY"] = from_union([from_none, from_int], self.world_y) + result["defUid"] = from_int(self.def_uid) + result["fieldInstances"] = from_list(lambda x: to_class(FieldInstance, x), self.field_instances) + result["height"] = from_int(self.height) + result["iid"] = from_str(self.iid) + result["px"] = from_list(from_int, self.px) + result["width"] = from_int(self.width) + return result + + +class ReferenceToAnEntityInstance: + """This object describes the "location" of an Entity instance in the project worlds. + + IID information of this instance + """ + entity_iid: str + """IID of the refered EntityInstance""" + layer_iid: str + """IID of the LayerInstance containing the refered EntityInstance""" + level_iid: str + """IID of the Level containing the refered EntityInstance""" + world_iid: str + """IID of the World containing the refered EntityInstance""" + + def __init__(self, entity_iid: str, layer_iid: str, level_iid: str, world_iid: str) -> None: + self.entity_iid = entity_iid + self.layer_iid = layer_iid + self.level_iid = level_iid + self.world_iid = world_iid + + @staticmethod + def from_dict(obj: Any) -> 'ReferenceToAnEntityInstance': + assert isinstance(obj, dict) + entity_iid = from_str(obj.get("entityIid")) + layer_iid = from_str(obj.get("layerIid")) + level_iid = from_str(obj.get("levelIid")) + world_iid = from_str(obj.get("worldIid")) + return ReferenceToAnEntityInstance(entity_iid, layer_iid, level_iid, world_iid) + + def to_dict(self) -> dict: + result: dict = {} + result["entityIid"] = from_str(self.entity_iid) + result["layerIid"] = from_str(self.layer_iid) + result["levelIid"] = from_str(self.level_iid) + result["worldIid"] = from_str(self.world_iid) + return result + + +class GridPoint: + """This object is just a grid-based coordinate used in Field values.""" + cx: int + """X grid-based coordinate""" + cy: int + """Y grid-based coordinate""" + + def __init__(self, cx: int, cy: int) -> None: + self.cx = cx + self.cy = cy + + @staticmethod + def from_dict(obj: Any) -> 'GridPoint': + assert isinstance(obj, dict) + cx = from_int(obj.get("cx")) + cy = from_int(obj.get("cy")) + return GridPoint(cx, cy) + + def to_dict(self) -> dict: + result: dict = {} + result["cx"] = from_int(self.cx) + result["cy"] = from_int(self.cy) + return result + + +class IntGridValueInstance: + """IntGrid value instance""" + coord_id: int + """Coordinate ID in the layer grid""" + v: int + """IntGrid value""" + + def __init__(self, coord_id: int, v: int) -> None: + self.coord_id = coord_id + self.v = v + + @staticmethod + def from_dict(obj: Any) -> 'IntGridValueInstance': + assert isinstance(obj, dict) + coord_id = from_int(obj.get("coordId")) + v = from_int(obj.get("v")) + return IntGridValueInstance(coord_id, v) + + def to_dict(self) -> dict: + result: dict = {} + result["coordId"] = from_int(self.coord_id) + result["v"] = from_int(self.v) + return result + + +class TileInstance: + """This structure represents a single tile from a given Tileset.""" + a: float + """Alpha/opacity of the tile (0-1, defaults to 1)""" + d: List[int] + """Internal data used by the editor.
For auto-layer tiles: `[ruleId, coordId]`.
+ For tile-layer tiles: `[coordId]`. + """ + f: int + """"Flip bits", a 2-bits integer to represent the mirror transformations of the tile.
+ - Bit 0 = X flip
- Bit 1 = Y flip
Examples: f=0 (no flip), f=1 (X flip + only), f=2 (Y flip only), f=3 (both flips) + """ + px: List[int] + """Pixel coordinates of the tile in the **layer** (`[x,y]` format). Don't forget optional + layer offsets, if they exist! + """ + src: List[int] + """Pixel coordinates of the tile in the **tileset** (`[x,y]` format)""" + t: int + """The *Tile ID* in the corresponding tileset.""" + + def __init__(self, a: float, d: List[int], f: int, px: List[int], src: List[int], t: int) -> None: + self.a = a + self.d = d + self.f = f + self.px = px + self.src = src + self.t = t + + @staticmethod + def from_dict(obj: Any) -> 'TileInstance': + assert isinstance(obj, dict) + a = from_float(obj.get("a")) + d = from_list(from_int, obj.get("d")) + f = from_int(obj.get("f")) + px = from_list(from_int, obj.get("px")) + src = from_list(from_int, obj.get("src")) + t = from_int(obj.get("t")) + return TileInstance(a, d, f, px, src, t) + + def to_dict(self) -> dict: + result: dict = {} + result["a"] = to_float(self.a) + result["d"] = from_list(from_int, self.d) + result["f"] = from_int(self.f) + result["px"] = from_list(from_int, self.px) + result["src"] = from_list(from_int, self.src) + result["t"] = from_int(self.t) + return result + + +class LayerInstance: + c_hei: int + """Grid-based height""" + c_wid: int + """Grid-based width""" + grid_size: int + """Grid size""" + identifier: str + """Layer definition identifier""" + opacity: float + """Layer opacity as Float [0-1]""" + px_total_offset_x: int + """Total layer X pixel offset, including both instance and definition offsets.""" + px_total_offset_y: int + """Total layer Y pixel offset, including both instance and definition offsets.""" + tileset_def_uid: Optional[int] + """The definition UID of corresponding Tileset, if any.""" + tileset_rel_path: Optional[str] + """The relative path to corresponding Tileset, if any.""" + type: str + """Layer type (possible values: IntGrid, Entities, Tiles or AutoLayer)""" + auto_layer_tiles: List[TileInstance] + """An array containing all tiles generated by Auto-layer rules. The array is already sorted + in display order (ie. 1st tile is beneath 2nd, which is beneath 3rd etc.).

+ Note: if multiple tiles are stacked in the same cell as the result of different rules, + all tiles behind opaque ones will be discarded. + """ + entity_instances: List[EntityInstance] + grid_tiles: List[TileInstance] + iid: str + """Unique layer instance identifier""" + int_grid: Optional[List[IntGridValueInstance]] + """**WARNING**: this deprecated value is no longer exported since version 1.0.0 Replaced + by: `intGridCsv` + """ + int_grid_csv: List[int] + """A list of all values in the IntGrid layer, stored in CSV format (Comma Separated + Values).
Order is from left to right, and top to bottom (ie. first row from left to + right, followed by second row, etc).
`0` means "empty cell" and IntGrid values + start at 1.
The array size is `__cWid` x `__cHei` cells. + """ + layer_def_uid: int + """Reference the Layer definition UID""" + level_id: int + """Reference to the UID of the level containing this layer instance""" + optional_rules: List[int] + """An Array containing the UIDs of optional rules that were enabled in this specific layer + instance. + """ + override_tileset_uid: Optional[int] + """This layer can use another tileset by overriding the tileset UID here.""" + px_offset_x: int + """X offset in pixels to render this layer, usually 0 (IMPORTANT: this should be added to + the `LayerDef` optional offset, so you should probably prefer using `__pxTotalOffsetX` + which contains the total offset value) + """ + px_offset_y: int + """Y offset in pixels to render this layer, usually 0 (IMPORTANT: this should be added to + the `LayerDef` optional offset, so you should probably prefer using `__pxTotalOffsetX` + which contains the total offset value) + """ + seed: int + """Random seed used for Auto-Layers rendering""" + visible: bool + """Layer instance visibility""" + + def __init__(self, c_hei: int, c_wid: int, grid_size: int, identifier: str, opacity: float, px_total_offset_x: int, px_total_offset_y: int, tileset_def_uid: Optional[int], tileset_rel_path: Optional[str], type: str, auto_layer_tiles: List[TileInstance], entity_instances: List[EntityInstance], grid_tiles: List[TileInstance], iid: str, int_grid: Optional[List[IntGridValueInstance]], int_grid_csv: List[int], layer_def_uid: int, level_id: int, optional_rules: List[int], override_tileset_uid: Optional[int], px_offset_x: int, px_offset_y: int, seed: int, visible: bool) -> None: + self.c_hei = c_hei + self.c_wid = c_wid + self.grid_size = grid_size + self.identifier = identifier + self.opacity = opacity + self.px_total_offset_x = px_total_offset_x + self.px_total_offset_y = px_total_offset_y + self.tileset_def_uid = tileset_def_uid + self.tileset_rel_path = tileset_rel_path + self.type = type + self.auto_layer_tiles = auto_layer_tiles + self.entity_instances = entity_instances + self.grid_tiles = grid_tiles + self.iid = iid + self.int_grid = int_grid + self.int_grid_csv = int_grid_csv + self.layer_def_uid = layer_def_uid + self.level_id = level_id + self.optional_rules = optional_rules + self.override_tileset_uid = override_tileset_uid + self.px_offset_x = px_offset_x + self.px_offset_y = px_offset_y + self.seed = seed + self.visible = visible + + @staticmethod + def from_dict(obj: Any) -> 'LayerInstance': + assert isinstance(obj, dict) + c_hei = from_int(obj.get("__cHei")) + c_wid = from_int(obj.get("__cWid")) + grid_size = from_int(obj.get("__gridSize")) + identifier = from_str(obj.get("__identifier")) + opacity = from_float(obj.get("__opacity")) + px_total_offset_x = from_int(obj.get("__pxTotalOffsetX")) + px_total_offset_y = from_int(obj.get("__pxTotalOffsetY")) + tileset_def_uid = from_union([from_none, from_int], obj.get("__tilesetDefUid")) + tileset_rel_path = from_union([from_none, from_str], obj.get("__tilesetRelPath")) + type = from_str(obj.get("__type")) + auto_layer_tiles = from_list(TileInstance.from_dict, obj.get("autoLayerTiles")) + entity_instances = from_list(EntityInstance.from_dict, obj.get("entityInstances")) + grid_tiles = from_list(TileInstance.from_dict, obj.get("gridTiles")) + iid = from_str(obj.get("iid")) + int_grid = from_union([from_none, lambda x: from_list(IntGridValueInstance.from_dict, x)], obj.get("intGrid")) + int_grid_csv = from_list(from_int, obj.get("intGridCsv")) + layer_def_uid = from_int(obj.get("layerDefUid")) + level_id = from_int(obj.get("levelId")) + optional_rules = from_list(from_int, obj.get("optionalRules")) + override_tileset_uid = from_union([from_none, from_int], obj.get("overrideTilesetUid")) + px_offset_x = from_int(obj.get("pxOffsetX")) + px_offset_y = from_int(obj.get("pxOffsetY")) + seed = from_int(obj.get("seed")) + visible = from_bool(obj.get("visible")) + return LayerInstance(c_hei, c_wid, grid_size, identifier, opacity, px_total_offset_x, px_total_offset_y, tileset_def_uid, tileset_rel_path, type, auto_layer_tiles, entity_instances, grid_tiles, iid, int_grid, int_grid_csv, layer_def_uid, level_id, optional_rules, override_tileset_uid, px_offset_x, px_offset_y, seed, visible) + + def to_dict(self) -> dict: + result: dict = {} + result["__cHei"] = from_int(self.c_hei) + result["__cWid"] = from_int(self.c_wid) + result["__gridSize"] = from_int(self.grid_size) + result["__identifier"] = from_str(self.identifier) + result["__opacity"] = to_float(self.opacity) + result["__pxTotalOffsetX"] = from_int(self.px_total_offset_x) + result["__pxTotalOffsetY"] = from_int(self.px_total_offset_y) + if self.tileset_def_uid is not None: + result["__tilesetDefUid"] = from_union([from_none, from_int], self.tileset_def_uid) + if self.tileset_rel_path is not None: + result["__tilesetRelPath"] = from_union([from_none, from_str], self.tileset_rel_path) + result["__type"] = from_str(self.type) + result["autoLayerTiles"] = from_list(lambda x: to_class(TileInstance, x), self.auto_layer_tiles) + result["entityInstances"] = from_list(lambda x: to_class(EntityInstance, x), self.entity_instances) + result["gridTiles"] = from_list(lambda x: to_class(TileInstance, x), self.grid_tiles) + result["iid"] = from_str(self.iid) + if self.int_grid is not None: + result["intGrid"] = from_union([from_none, lambda x: from_list(lambda x: to_class(IntGridValueInstance, x), x)], self.int_grid) + result["intGridCsv"] = from_list(from_int, self.int_grid_csv) + result["layerDefUid"] = from_int(self.layer_def_uid) + result["levelId"] = from_int(self.level_id) + result["optionalRules"] = from_list(from_int, self.optional_rules) + if self.override_tileset_uid is not None: + result["overrideTilesetUid"] = from_union([from_none, from_int], self.override_tileset_uid) + result["pxOffsetX"] = from_int(self.px_offset_x) + result["pxOffsetY"] = from_int(self.px_offset_y) + result["seed"] = from_int(self.seed) + result["visible"] = from_bool(self.visible) + return result + + +class LevelBackgroundPosition: + """Level background image position info""" + crop_rect: List[float] + """An array of 4 float values describing the cropped sub-rectangle of the displayed + background image. This cropping happens when original is larger than the level bounds. + Array format: `[ cropX, cropY, cropWidth, cropHeight ]` + """ + scale: List[float] + """An array containing the `[scaleX,scaleY]` values of the **cropped** background image, + depending on `bgPos` option. + """ + top_left_px: List[int] + """An array containing the `[x,y]` pixel coordinates of the top-left corner of the + **cropped** background image, depending on `bgPos` option. + """ + + def __init__(self, crop_rect: List[float], scale: List[float], top_left_px: List[int]) -> None: + self.crop_rect = crop_rect + self.scale = scale + self.top_left_px = top_left_px + + @staticmethod + def from_dict(obj: Any) -> 'LevelBackgroundPosition': + assert isinstance(obj, dict) + crop_rect = from_list(from_float, obj.get("cropRect")) + scale = from_list(from_float, obj.get("scale")) + top_left_px = from_list(from_int, obj.get("topLeftPx")) + return LevelBackgroundPosition(crop_rect, scale, top_left_px) + + def to_dict(self) -> dict: + result: dict = {} + result["cropRect"] = from_list(to_float, self.crop_rect) + result["scale"] = from_list(to_float, self.scale) + result["topLeftPx"] = from_list(from_int, self.top_left_px) + return result + + +class BgPos(Enum): + CONTAIN = "Contain" + COVER = "Cover" + COVER_DIRTY = "CoverDirty" + REPEAT = "Repeat" + UNSCALED = "Unscaled" + + +class NeighbourLevel: + """Nearby level info""" + dir: str + """A lowercase string tipping on the level location (`n`orth, `s`outh, `w`est, + `e`ast).
Since 1.4.0, this value can also be `<` (neighbour depth is lower), `>` + (neighbour depth is greater) or `o` (levels overlap and share the same world + depth).
Since 1.5.3, this value can also be `nw`,`ne`,`sw` or `se` for levels only + touching corners. + """ + level_iid: str + """Neighbour Instance Identifier""" + level_uid: Optional[int] + """**WARNING**: this deprecated value is no longer exported since version 1.2.0 Replaced + by: `levelIid` + """ + + def __init__(self, dir: str, level_iid: str, level_uid: Optional[int]) -> None: + self.dir = dir + self.level_iid = level_iid + self.level_uid = level_uid + + @staticmethod + def from_dict(obj: Any) -> 'NeighbourLevel': + assert isinstance(obj, dict) + dir = from_str(obj.get("dir")) + level_iid = from_str(obj.get("levelIid")) + level_uid = from_union([from_none, from_int], obj.get("levelUid")) + return NeighbourLevel(dir, level_iid, level_uid) + + def to_dict(self) -> dict: + result: dict = {} + result["dir"] = from_str(self.dir) + result["levelIid"] = from_str(self.level_iid) + if self.level_uid is not None: + result["levelUid"] = from_union([from_none, from_int], self.level_uid) + return result + + +class Level: + """This section contains all the level data. It can be found in 2 distinct forms, depending + on Project current settings: - If "*Separate level files*" is **disabled** (default): + full level data is *embedded* inside the main Project JSON file, - If "*Separate level + files*" is **enabled**: level data is stored in *separate* standalone `.ldtkl` files (one + per level). In this case, the main Project JSON file will still contain most level data, + except heavy sections, like the `layerInstances` array (which will be null). The + `externalRelPath` string points to the `ldtkl` file. A `ldtkl` file is just a JSON file + containing exactly what is described below. + """ + bg_color: str + """Background color of the level (same as `bgColor`, except the default value is + automatically used here if its value is `null`) + """ + bg_pos: Optional[LevelBackgroundPosition] + """Position informations of the background image, if there is one.""" + neighbours: List[NeighbourLevel] + """An array listing all other levels touching this one on the world map. Since 1.4.0, this + includes levels that overlap in the same world layer, or in nearby world layers.
+ Only relevant for world layouts where level spatial positioning is manual (ie. GridVania, + Free). For Horizontal and Vertical layouts, this array is always empty. + """ + smart_color: str + """The "guessed" color for this level in the editor, decided using either the background + color or an existing custom field. + """ + level_bg_color: Optional[str] + """Background color of the level. If `null`, the project `defaultLevelBgColor` should be + used. + """ + bg_pivot_x: float + """Background image X pivot (0-1)""" + bg_pivot_y: float + """Background image Y pivot (0-1)""" + level_bg_pos: Optional[BgPos] + """An enum defining the way the background image (if any) is positioned on the level. See + `__bgPos` for resulting position info. Possible values: <`null`>, `Unscaled`, + `Contain`, `Cover`, `CoverDirty`, `Repeat` + """ + bg_rel_path: Optional[str] + """The *optional* relative path to the level background image.""" + external_rel_path: Optional[str] + """This value is not null if the project option "*Save levels separately*" is enabled. In + this case, this **relative** path points to the level Json file. + """ + field_instances: List[FieldInstance] + """An array containing this level custom field values.""" + identifier: str + """User defined unique identifier""" + iid: str + """Unique instance identifier""" + layer_instances: Optional[List[LayerInstance]] + """An array containing all Layer instances. **IMPORTANT**: if the project option "*Save + levels separately*" is enabled, this field will be `null`.
This array is **sorted + in display order**: the 1st layer is the top-most and the last is behind. + """ + px_hei: int + """Height of the level in pixels""" + px_wid: int + """Width of the level in pixels""" + uid: int + """Unique Int identifier""" + use_auto_identifier: bool + """If TRUE, the level identifier will always automatically use the naming pattern as defined + in `Project.levelNamePattern`. Becomes FALSE if the identifier is manually modified by + user. + """ + world_depth: int + """Index that represents the "depth" of the level in the world. Default is 0, greater means + "above", lower means "below".
This value is mostly used for display only and is + intended to make stacking of levels easier to manage. + """ + world_x: int + """World X coordinate in pixels.
Only relevant for world layouts where level spatial + positioning is manual (ie. GridVania, Free). For Horizontal and Vertical layouts, the + value is always -1 here. + """ + world_y: int + """World Y coordinate in pixels.
Only relevant for world layouts where level spatial + positioning is manual (ie. GridVania, Free). For Horizontal and Vertical layouts, the + value is always -1 here. + """ + + def __init__(self, bg_color: str, bg_pos: Optional[LevelBackgroundPosition], neighbours: List[NeighbourLevel], smart_color: str, level_bg_color: Optional[str], bg_pivot_x: float, bg_pivot_y: float, level_bg_pos: Optional[BgPos], bg_rel_path: Optional[str], external_rel_path: Optional[str], field_instances: List[FieldInstance], identifier: str, iid: str, layer_instances: Optional[List[LayerInstance]], px_hei: int, px_wid: int, uid: int, use_auto_identifier: bool, world_depth: int, world_x: int, world_y: int) -> None: + self.bg_color = bg_color + self.bg_pos = bg_pos + self.neighbours = neighbours + self.smart_color = smart_color + self.level_bg_color = level_bg_color + self.bg_pivot_x = bg_pivot_x + self.bg_pivot_y = bg_pivot_y + self.level_bg_pos = level_bg_pos + self.bg_rel_path = bg_rel_path + self.external_rel_path = external_rel_path + self.field_instances = field_instances + self.identifier = identifier + self.iid = iid + self.layer_instances = layer_instances + self.px_hei = px_hei + self.px_wid = px_wid + self.uid = uid + self.use_auto_identifier = use_auto_identifier + self.world_depth = world_depth + self.world_x = world_x + self.world_y = world_y + + @staticmethod + def from_dict(obj: Any) -> 'Level': + assert isinstance(obj, dict) + bg_color = from_str(obj.get("__bgColor")) + bg_pos = from_union([from_none, LevelBackgroundPosition.from_dict], obj.get("__bgPos")) + neighbours = from_list(NeighbourLevel.from_dict, obj.get("__neighbours")) + smart_color = from_str(obj.get("__smartColor")) + level_bg_color = from_union([from_none, from_str], obj.get("bgColor")) + bg_pivot_x = from_float(obj.get("bgPivotX")) + bg_pivot_y = from_float(obj.get("bgPivotY")) + level_bg_pos = from_union([from_none, BgPos], obj.get("bgPos")) + bg_rel_path = from_union([from_none, from_str], obj.get("bgRelPath")) + external_rel_path = from_union([from_none, from_str], obj.get("externalRelPath")) + field_instances = from_list(FieldInstance.from_dict, obj.get("fieldInstances")) + identifier = from_str(obj.get("identifier")) + iid = from_str(obj.get("iid")) + layer_instances = from_union([from_none, lambda x: from_list(LayerInstance.from_dict, x)], obj.get("layerInstances")) + px_hei = from_int(obj.get("pxHei")) + px_wid = from_int(obj.get("pxWid")) + uid = from_int(obj.get("uid")) + use_auto_identifier = from_bool(obj.get("useAutoIdentifier")) + world_depth = from_int(obj.get("worldDepth")) + world_x = from_int(obj.get("worldX")) + world_y = from_int(obj.get("worldY")) + return Level(bg_color, bg_pos, neighbours, smart_color, level_bg_color, bg_pivot_x, bg_pivot_y, level_bg_pos, bg_rel_path, external_rel_path, field_instances, identifier, iid, layer_instances, px_hei, px_wid, uid, use_auto_identifier, world_depth, world_x, world_y) + + def to_dict(self) -> dict: + result: dict = {} + result["__bgColor"] = from_str(self.bg_color) + if self.bg_pos is not None: + result["__bgPos"] = from_union([from_none, lambda x: to_class(LevelBackgroundPosition, x)], self.bg_pos) + result["__neighbours"] = from_list(lambda x: to_class(NeighbourLevel, x), self.neighbours) + result["__smartColor"] = from_str(self.smart_color) + if self.level_bg_color is not None: + result["bgColor"] = from_union([from_none, from_str], self.level_bg_color) + result["bgPivotX"] = to_float(self.bg_pivot_x) + result["bgPivotY"] = to_float(self.bg_pivot_y) + if self.level_bg_pos is not None: + result["bgPos"] = from_union([from_none, lambda x: to_enum(BgPos, x)], self.level_bg_pos) + if self.bg_rel_path is not None: + result["bgRelPath"] = from_union([from_none, from_str], self.bg_rel_path) + if self.external_rel_path is not None: + result["externalRelPath"] = from_union([from_none, from_str], self.external_rel_path) + result["fieldInstances"] = from_list(lambda x: to_class(FieldInstance, x), self.field_instances) + result["identifier"] = from_str(self.identifier) + result["iid"] = from_str(self.iid) + if self.layer_instances is not None: + result["layerInstances"] = from_union([from_none, lambda x: from_list(lambda x: to_class(LayerInstance, x), x)], self.layer_instances) + result["pxHei"] = from_int(self.px_hei) + result["pxWid"] = from_int(self.px_wid) + result["uid"] = from_int(self.uid) + result["useAutoIdentifier"] = from_bool(self.use_auto_identifier) + result["worldDepth"] = from_int(self.world_depth) + result["worldX"] = from_int(self.world_x) + result["worldY"] = from_int(self.world_y) + return result + + +class LdtkTocInstanceData: + fields: Any + """An object containing the values of all entity fields with the `exportToToc` option + enabled. This object typing depends on actual field value types. + """ + hei_px: int + iids: ReferenceToAnEntityInstance + """IID information of this instance""" + wid_px: int + world_x: int + world_y: int + + def __init__(self, fields: Any, hei_px: int, iids: ReferenceToAnEntityInstance, wid_px: int, world_x: int, world_y: int) -> None: + self.fields = fields + self.hei_px = hei_px + self.iids = iids + self.wid_px = wid_px + self.world_x = world_x + self.world_y = world_y + + @staticmethod + def from_dict(obj: Any) -> 'LdtkTocInstanceData': + assert isinstance(obj, dict) + fields = obj.get("fields") + hei_px = from_int(obj.get("heiPx")) + iids = ReferenceToAnEntityInstance.from_dict(obj.get("iids")) + wid_px = from_int(obj.get("widPx")) + world_x = from_int(obj.get("worldX")) + world_y = from_int(obj.get("worldY")) + return LdtkTocInstanceData(fields, hei_px, iids, wid_px, world_x, world_y) + + def to_dict(self) -> dict: + result: dict = {} + result["fields"] = self.fields + result["heiPx"] = from_int(self.hei_px) + result["iids"] = to_class(ReferenceToAnEntityInstance, self.iids) + result["widPx"] = from_int(self.wid_px) + result["worldX"] = from_int(self.world_x) + result["worldY"] = from_int(self.world_y) + return result + + +class LdtkTableOfContentEntry: + identifier: str + instances: Optional[List[ReferenceToAnEntityInstance]] + """**WARNING**: this deprecated value will be *removed* completely on version 1.7.0+ + Replaced by: `instancesData` + """ + instances_data: List[LdtkTocInstanceData] + + def __init__(self, identifier: str, instances: Optional[List[ReferenceToAnEntityInstance]], instances_data: List[LdtkTocInstanceData]) -> None: + self.identifier = identifier + self.instances = instances + self.instances_data = instances_data + + @staticmethod + def from_dict(obj: Any) -> 'LdtkTableOfContentEntry': + assert isinstance(obj, dict) + identifier = from_str(obj.get("identifier")) + instances = from_union([lambda x: from_list(ReferenceToAnEntityInstance.from_dict, x), from_none], obj.get("instances")) + instances_data = from_list(LdtkTocInstanceData.from_dict, obj.get("instancesData")) + return LdtkTableOfContentEntry(identifier, instances, instances_data) + + def to_dict(self) -> dict: + result: dict = {} + result["identifier"] = from_str(self.identifier) + if self.instances is not None: + result["instances"] = from_union([lambda x: from_list(lambda x: to_class(ReferenceToAnEntityInstance, x), x), from_none], self.instances) + result["instancesData"] = from_list(lambda x: to_class(LdtkTocInstanceData, x), self.instances_data) + return result + + +class WorldLayout(Enum): + FREE = "Free" + GRID_VANIA = "GridVania" + LINEAR_HORIZONTAL = "LinearHorizontal" + LINEAR_VERTICAL = "LinearVertical" + + +class World: + """**IMPORTANT**: this type is available as a preview. You can rely on it to update your + importers, for when it will be officially available. A World contains multiple levels, + and it has its own layout settings. + """ + default_level_height: int + """Default new level height""" + default_level_width: int + """Default new level width""" + identifier: str + """User defined unique identifier""" + iid: str + """Unique instance identifer""" + levels: List[Level] + """All levels from this world. The order of this array is only relevant in + `LinearHorizontal` and `linearVertical` world layouts (see `worldLayout` value). + Otherwise, you should refer to the `worldX`,`worldY` coordinates of each Level. + """ + world_grid_height: int + """Height of the world grid in pixels.""" + world_grid_width: int + """Width of the world grid in pixels.""" + world_layout: Optional[WorldLayout] + """An enum that describes how levels are organized in this project (ie. linearly or in a 2D + space). Possible values: `Free`, `GridVania`, `LinearHorizontal`, `LinearVertical`, `null` + """ + + def __init__(self, default_level_height: int, default_level_width: int, identifier: str, iid: str, levels: List[Level], world_grid_height: int, world_grid_width: int, world_layout: Optional[WorldLayout]) -> None: + self.default_level_height = default_level_height + self.default_level_width = default_level_width + self.identifier = identifier + self.iid = iid + self.levels = levels + self.world_grid_height = world_grid_height + self.world_grid_width = world_grid_width + self.world_layout = world_layout + + @staticmethod + def from_dict(obj: Any) -> 'World': + assert isinstance(obj, dict) + default_level_height = from_int(obj.get("defaultLevelHeight")) + default_level_width = from_int(obj.get("defaultLevelWidth")) + identifier = from_str(obj.get("identifier")) + iid = from_str(obj.get("iid")) + levels = from_list(Level.from_dict, obj.get("levels")) + world_grid_height = from_int(obj.get("worldGridHeight")) + world_grid_width = from_int(obj.get("worldGridWidth")) + world_layout = from_union([from_none, WorldLayout], obj.get("worldLayout")) + return World(default_level_height, default_level_width, identifier, iid, levels, world_grid_height, world_grid_width, world_layout) + + def to_dict(self) -> dict: + result: dict = {} + result["defaultLevelHeight"] = from_int(self.default_level_height) + result["defaultLevelWidth"] = from_int(self.default_level_width) + result["identifier"] = from_str(self.identifier) + result["iid"] = from_str(self.iid) + result["levels"] = from_list(lambda x: to_class(Level, x), self.levels) + result["worldGridHeight"] = from_int(self.world_grid_height) + result["worldGridWidth"] = from_int(self.world_grid_width) + result["worldLayout"] = from_union([from_none, lambda x: to_enum(WorldLayout, x)], self.world_layout) + return result + + +class ForcedRefs: + """This object is not actually used by LDtk. It ONLY exists to force explicit references to + all types, to make sure QuickType finds them and integrate all of them. Otherwise, + Quicktype will drop types that are not explicitely used. + """ + auto_layer_rule_group: Optional[AutoLayerRuleGroup] + auto_rule_def: Optional[AutoLayerRuleDefinition] + custom_command: Optional[LdtkCustomCommand] + definitions: Optional[Definitions] + entity_def: Optional[EntityDefinition] + entity_instance: Optional[EntityInstance] + entity_reference_infos: Optional[ReferenceToAnEntityInstance] + enum_def: Optional[EnumDefinition] + enum_def_values: Optional[EnumValueDefinition] + enum_tag_value: Optional[EnumTagValue] + field_def: Optional[FieldDefinition] + field_instance: Optional[FieldInstance] + grid_point: Optional[GridPoint] + int_grid_value_def: Optional[IntGridValueDefinition] + int_grid_value_group_def: Optional[IntGridValueGroupDefinition] + int_grid_value_instance: Optional[IntGridValueInstance] + layer_def: Optional[LayerDefinition] + layer_instance: Optional[LayerInstance] + level: Optional[Level] + level_bg_pos_infos: Optional[LevelBackgroundPosition] + neighbour_level: Optional[NeighbourLevel] + table_of_content_entry: Optional[LdtkTableOfContentEntry] + tile: Optional[TileInstance] + tile_custom_metadata: Optional[TileCustomMetadata] + tileset_def: Optional[TilesetDefinition] + tileset_rect: Optional[TilesetRectangle] + toc_instance_data: Optional[LdtkTocInstanceData] + world: Optional[World] + + def __init__(self, auto_layer_rule_group: Optional[AutoLayerRuleGroup], auto_rule_def: Optional[AutoLayerRuleDefinition], custom_command: Optional[LdtkCustomCommand], definitions: Optional[Definitions], entity_def: Optional[EntityDefinition], entity_instance: Optional[EntityInstance], entity_reference_infos: Optional[ReferenceToAnEntityInstance], enum_def: Optional[EnumDefinition], enum_def_values: Optional[EnumValueDefinition], enum_tag_value: Optional[EnumTagValue], field_def: Optional[FieldDefinition], field_instance: Optional[FieldInstance], grid_point: Optional[GridPoint], int_grid_value_def: Optional[IntGridValueDefinition], int_grid_value_group_def: Optional[IntGridValueGroupDefinition], int_grid_value_instance: Optional[IntGridValueInstance], layer_def: Optional[LayerDefinition], layer_instance: Optional[LayerInstance], level: Optional[Level], level_bg_pos_infos: Optional[LevelBackgroundPosition], neighbour_level: Optional[NeighbourLevel], table_of_content_entry: Optional[LdtkTableOfContentEntry], tile: Optional[TileInstance], tile_custom_metadata: Optional[TileCustomMetadata], tileset_def: Optional[TilesetDefinition], tileset_rect: Optional[TilesetRectangle], toc_instance_data: Optional[LdtkTocInstanceData], world: Optional[World]) -> None: + self.auto_layer_rule_group = auto_layer_rule_group + self.auto_rule_def = auto_rule_def + self.custom_command = custom_command + self.definitions = definitions + self.entity_def = entity_def + self.entity_instance = entity_instance + self.entity_reference_infos = entity_reference_infos + self.enum_def = enum_def + self.enum_def_values = enum_def_values + self.enum_tag_value = enum_tag_value + self.field_def = field_def + self.field_instance = field_instance + self.grid_point = grid_point + self.int_grid_value_def = int_grid_value_def + self.int_grid_value_group_def = int_grid_value_group_def + self.int_grid_value_instance = int_grid_value_instance + self.layer_def = layer_def + self.layer_instance = layer_instance + self.level = level + self.level_bg_pos_infos = level_bg_pos_infos + self.neighbour_level = neighbour_level + self.table_of_content_entry = table_of_content_entry + self.tile = tile + self.tile_custom_metadata = tile_custom_metadata + self.tileset_def = tileset_def + self.tileset_rect = tileset_rect + self.toc_instance_data = toc_instance_data + self.world = world + + @staticmethod + def from_dict(obj: Any) -> 'ForcedRefs': + assert isinstance(obj, dict) + auto_layer_rule_group = from_union([AutoLayerRuleGroup.from_dict, from_none], obj.get("AutoLayerRuleGroup")) + auto_rule_def = from_union([AutoLayerRuleDefinition.from_dict, from_none], obj.get("AutoRuleDef")) + custom_command = from_union([LdtkCustomCommand.from_dict, from_none], obj.get("CustomCommand")) + definitions = from_union([Definitions.from_dict, from_none], obj.get("Definitions")) + entity_def = from_union([EntityDefinition.from_dict, from_none], obj.get("EntityDef")) + entity_instance = from_union([EntityInstance.from_dict, from_none], obj.get("EntityInstance")) + entity_reference_infos = from_union([ReferenceToAnEntityInstance.from_dict, from_none], obj.get("EntityReferenceInfos")) + enum_def = from_union([EnumDefinition.from_dict, from_none], obj.get("EnumDef")) + enum_def_values = from_union([EnumValueDefinition.from_dict, from_none], obj.get("EnumDefValues")) + enum_tag_value = from_union([EnumTagValue.from_dict, from_none], obj.get("EnumTagValue")) + field_def = from_union([FieldDefinition.from_dict, from_none], obj.get("FieldDef")) + field_instance = from_union([FieldInstance.from_dict, from_none], obj.get("FieldInstance")) + grid_point = from_union([GridPoint.from_dict, from_none], obj.get("GridPoint")) + int_grid_value_def = from_union([IntGridValueDefinition.from_dict, from_none], obj.get("IntGridValueDef")) + int_grid_value_group_def = from_union([IntGridValueGroupDefinition.from_dict, from_none], obj.get("IntGridValueGroupDef")) + int_grid_value_instance = from_union([IntGridValueInstance.from_dict, from_none], obj.get("IntGridValueInstance")) + layer_def = from_union([LayerDefinition.from_dict, from_none], obj.get("LayerDef")) + layer_instance = from_union([LayerInstance.from_dict, from_none], obj.get("LayerInstance")) + level = from_union([Level.from_dict, from_none], obj.get("Level")) + level_bg_pos_infos = from_union([from_none, LevelBackgroundPosition.from_dict], obj.get("LevelBgPosInfos")) + neighbour_level = from_union([NeighbourLevel.from_dict, from_none], obj.get("NeighbourLevel")) + table_of_content_entry = from_union([LdtkTableOfContentEntry.from_dict, from_none], obj.get("TableOfContentEntry")) + tile = from_union([TileInstance.from_dict, from_none], obj.get("Tile")) + tile_custom_metadata = from_union([TileCustomMetadata.from_dict, from_none], obj.get("TileCustomMetadata")) + tileset_def = from_union([TilesetDefinition.from_dict, from_none], obj.get("TilesetDef")) + tileset_rect = from_union([from_none, TilesetRectangle.from_dict], obj.get("TilesetRect")) + toc_instance_data = from_union([LdtkTocInstanceData.from_dict, from_none], obj.get("TocInstanceData")) + world = from_union([World.from_dict, from_none], obj.get("World")) + return ForcedRefs(auto_layer_rule_group, auto_rule_def, custom_command, definitions, entity_def, entity_instance, entity_reference_infos, enum_def, enum_def_values, enum_tag_value, field_def, field_instance, grid_point, int_grid_value_def, int_grid_value_group_def, int_grid_value_instance, layer_def, layer_instance, level, level_bg_pos_infos, neighbour_level, table_of_content_entry, tile, tile_custom_metadata, tileset_def, tileset_rect, toc_instance_data, world) + + def to_dict(self) -> dict: + result: dict = {} + if self.auto_layer_rule_group is not None: + result["AutoLayerRuleGroup"] = from_union([lambda x: to_class(AutoLayerRuleGroup, x), from_none], self.auto_layer_rule_group) + if self.auto_rule_def is not None: + result["AutoRuleDef"] = from_union([lambda x: to_class(AutoLayerRuleDefinition, x), from_none], self.auto_rule_def) + if self.custom_command is not None: + result["CustomCommand"] = from_union([lambda x: to_class(LdtkCustomCommand, x), from_none], self.custom_command) + if self.definitions is not None: + result["Definitions"] = from_union([lambda x: to_class(Definitions, x), from_none], self.definitions) + if self.entity_def is not None: + result["EntityDef"] = from_union([lambda x: to_class(EntityDefinition, x), from_none], self.entity_def) + if self.entity_instance is not None: + result["EntityInstance"] = from_union([lambda x: to_class(EntityInstance, x), from_none], self.entity_instance) + if self.entity_reference_infos is not None: + result["EntityReferenceInfos"] = from_union([lambda x: to_class(ReferenceToAnEntityInstance, x), from_none], self.entity_reference_infos) + if self.enum_def is not None: + result["EnumDef"] = from_union([lambda x: to_class(EnumDefinition, x), from_none], self.enum_def) + if self.enum_def_values is not None: + result["EnumDefValues"] = from_union([lambda x: to_class(EnumValueDefinition, x), from_none], self.enum_def_values) + if self.enum_tag_value is not None: + result["EnumTagValue"] = from_union([lambda x: to_class(EnumTagValue, x), from_none], self.enum_tag_value) + if self.field_def is not None: + result["FieldDef"] = from_union([lambda x: to_class(FieldDefinition, x), from_none], self.field_def) + if self.field_instance is not None: + result["FieldInstance"] = from_union([lambda x: to_class(FieldInstance, x), from_none], self.field_instance) + if self.grid_point is not None: + result["GridPoint"] = from_union([lambda x: to_class(GridPoint, x), from_none], self.grid_point) + if self.int_grid_value_def is not None: + result["IntGridValueDef"] = from_union([lambda x: to_class(IntGridValueDefinition, x), from_none], self.int_grid_value_def) + if self.int_grid_value_group_def is not None: + result["IntGridValueGroupDef"] = from_union([lambda x: to_class(IntGridValueGroupDefinition, x), from_none], self.int_grid_value_group_def) + if self.int_grid_value_instance is not None: + result["IntGridValueInstance"] = from_union([lambda x: to_class(IntGridValueInstance, x), from_none], self.int_grid_value_instance) + if self.layer_def is not None: + result["LayerDef"] = from_union([lambda x: to_class(LayerDefinition, x), from_none], self.layer_def) + if self.layer_instance is not None: + result["LayerInstance"] = from_union([lambda x: to_class(LayerInstance, x), from_none], self.layer_instance) + if self.level is not None: + result["Level"] = from_union([lambda x: to_class(Level, x), from_none], self.level) + if self.level_bg_pos_infos is not None: + result["LevelBgPosInfos"] = from_union([from_none, lambda x: to_class(LevelBackgroundPosition, x)], self.level_bg_pos_infos) + if self.neighbour_level is not None: + result["NeighbourLevel"] = from_union([lambda x: to_class(NeighbourLevel, x), from_none], self.neighbour_level) + if self.table_of_content_entry is not None: + result["TableOfContentEntry"] = from_union([lambda x: to_class(LdtkTableOfContentEntry, x), from_none], self.table_of_content_entry) + if self.tile is not None: + result["Tile"] = from_union([lambda x: to_class(TileInstance, x), from_none], self.tile) + if self.tile_custom_metadata is not None: + result["TileCustomMetadata"] = from_union([lambda x: to_class(TileCustomMetadata, x), from_none], self.tile_custom_metadata) + if self.tileset_def is not None: + result["TilesetDef"] = from_union([lambda x: to_class(TilesetDefinition, x), from_none], self.tileset_def) + if self.tileset_rect is not None: + result["TilesetRect"] = from_union([from_none, lambda x: to_class(TilesetRectangle, x)], self.tileset_rect) + if self.toc_instance_data is not None: + result["TocInstanceData"] = from_union([lambda x: to_class(LdtkTocInstanceData, x), from_none], self.toc_instance_data) + if self.world is not None: + result["World"] = from_union([lambda x: to_class(World, x), from_none], self.world) + return result + + +class IdentifierStyle(Enum): + """Naming convention for Identifiers (first-letter uppercase, full uppercase etc.) Possible + values: `Capitalize`, `Uppercase`, `Lowercase`, `Free` + """ + CAPITALIZE = "Capitalize" + FREE = "Free" + LOWERCASE = "Lowercase" + UPPERCASE = "Uppercase" + + +class ImageExportMode(Enum): + """"Image export" option when saving project. Possible values: `None`, `OneImagePerLayer`, + `OneImagePerLevel`, `LayersAndLevels` + """ + LAYERS_AND_LEVELS = "LayersAndLevels" + NONE = "None" + ONE_IMAGE_PER_LAYER = "OneImagePerLayer" + ONE_IMAGE_PER_LEVEL = "OneImagePerLevel" + + +class LdtkJSON: + """This file is a JSON schema of files created by LDtk level editor (https://ldtk.io). + + This is the root of any Project JSON file. It contains: - the project settings, - an + array of levels, - a group of definitions (that can probably be safely ignored for most + users). + """ + forced_refs: Optional[ForcedRefs] + """This object is not actually used by LDtk. It ONLY exists to force explicit references to + all types, to make sure QuickType finds them and integrate all of them. Otherwise, + Quicktype will drop types that are not explicitely used. + """ + app_build_id: float + """LDtk application build identifier.
This is only used to identify the LDtk version + that generated this particular project file, which can be useful for specific bug fixing. + Note that the build identifier is just the date of the release, so it's not unique to + each user (one single global ID per LDtk public release), and as a result, completely + anonymous. + """ + backup_limit: int + """Number of backup files to keep, if the `backupOnSave` is TRUE""" + backup_on_save: bool + """If TRUE, an extra copy of the project will be created in a sub folder, when saving.""" + backup_rel_path: Optional[str] + """Target relative path to store backup files""" + bg_color: str + """Project background color""" + custom_commands: List[LdtkCustomCommand] + """An array of command lines that can be ran manually by the user""" + default_entity_height: int + """Default height for new entities""" + default_entity_width: int + """Default width for new entities""" + default_grid_size: int + """Default grid size for new layers""" + default_level_bg_color: str + """Default background color of levels""" + default_level_height: Optional[int] + """**WARNING**: this field will move to the `worlds` array after the "multi-worlds" update. + It will then be `null`. You can enable the Multi-worlds advanced project option to enable + the change immediately.

Default new level height + """ + default_level_width: Optional[int] + """**WARNING**: this field will move to the `worlds` array after the "multi-worlds" update. + It will then be `null`. You can enable the Multi-worlds advanced project option to enable + the change immediately.

Default new level width + """ + default_pivot_x: float + """Default X pivot (0 to 1) for new entities""" + default_pivot_y: float + """Default Y pivot (0 to 1) for new entities""" + defs: Definitions + """A structure containing all the definitions of this project""" + dummy_world_iid: str + """If the project isn't in MultiWorlds mode, this is the IID of the internal "dummy" World.""" + export_level_bg: bool + """If TRUE, the exported PNGs will include the level background (color or image).""" + export_png: Optional[bool] + """**WARNING**: this deprecated value is no longer exported since version 0.9.3 Replaced + by: `imageExportMode` + """ + export_tiled: bool + """If TRUE, a Tiled compatible file will also be generated along with the LDtk JSON file + (default is FALSE) + """ + external_levels: bool + """If TRUE, one file will be saved for the project (incl. all its definitions) and one file + in a sub-folder for each level. + """ + flags: List[Flag] + """An array containing various advanced flags (ie. options or other states). Possible + values: `DiscardPreCsvIntGrid`, `ExportOldTableOfContentData`, + `ExportPreCsvIntGridFormat`, `IgnoreBackupSuggest`, `PrependIndexToLevelFileNames`, + `MultiWorlds`, `UseMultilinesType` + """ + identifier_style: IdentifierStyle + """Naming convention for Identifiers (first-letter uppercase, full uppercase etc.) Possible + values: `Capitalize`, `Uppercase`, `Lowercase`, `Free` + """ + iid: str + """Unique project identifier""" + image_export_mode: ImageExportMode + """"Image export" option when saving project. Possible values: `None`, `OneImagePerLayer`, + `OneImagePerLevel`, `LayersAndLevels` + """ + json_version: str + """File format version""" + level_name_pattern: str + """The default naming convention for level identifiers.""" + levels: List[Level] + """All levels. The order of this array is only relevant in `LinearHorizontal` and + `linearVertical` world layouts (see `worldLayout` value).
Otherwise, you should + refer to the `worldX`,`worldY` coordinates of each Level. + """ + minify_json: bool + """If TRUE, the Json is partially minified (no indentation, nor line breaks, default is + FALSE) + """ + next_uid: int + """Next Unique integer ID available""" + png_file_pattern: Optional[str] + """File naming pattern for exported PNGs""" + simplified_export: bool + """If TRUE, a very simplified will be generated on saving, for quicker & easier engine + integration. + """ + toc: List[LdtkTableOfContentEntry] + """All instances of entities that have their `exportToToc` flag enabled are listed in this + array. + """ + tutorial_desc: Optional[str] + """This optional description is used by LDtk Samples to show up some informations and + instructions. + """ + world_grid_height: Optional[int] + """**WARNING**: this field will move to the `worlds` array after the "multi-worlds" update. + It will then be `null`. You can enable the Multi-worlds advanced project option to enable + the change immediately.

Height of the world grid in pixels. + """ + world_grid_width: Optional[int] + """**WARNING**: this field will move to the `worlds` array after the "multi-worlds" update. + It will then be `null`. You can enable the Multi-worlds advanced project option to enable + the change immediately.

Width of the world grid in pixels. + """ + world_layout: Optional[WorldLayout] + """**WARNING**: this field will move to the `worlds` array after the "multi-worlds" update. + It will then be `null`. You can enable the Multi-worlds advanced project option to enable + the change immediately.

An enum that describes how levels are organized in + this project (ie. linearly or in a 2D space). Possible values: <`null`>, `Free`, + `GridVania`, `LinearHorizontal`, `LinearVertical` + """ + worlds: List[World] + """This array will be empty, unless you enable the Multi-Worlds in the project advanced + settings.

- in current version, a LDtk project file can only contain a single + world with multiple levels in it. In this case, levels and world layout related settings + are stored in the root of the JSON.
- with "Multi-worlds" enabled, there will be a + `worlds` array in root, each world containing levels and layout settings. Basically, it's + pretty much only about moving the `levels` array to the `worlds` array, along with world + layout related values (eg. `worldGridWidth` etc).

If you want to start + supporting this future update easily, please refer to this documentation: + https://github.com/deepnight/ldtk/issues/231 + """ + + def __init__(self, forced_refs: Optional[ForcedRefs], app_build_id: float, backup_limit: int, backup_on_save: bool, backup_rel_path: Optional[str], bg_color: str, custom_commands: List[LdtkCustomCommand], default_entity_height: int, default_entity_width: int, default_grid_size: int, default_level_bg_color: str, default_level_height: Optional[int], default_level_width: Optional[int], default_pivot_x: float, default_pivot_y: float, defs: Definitions, dummy_world_iid: str, export_level_bg: bool, export_png: Optional[bool], export_tiled: bool, external_levels: bool, flags: List[Flag], identifier_style: IdentifierStyle, iid: str, image_export_mode: ImageExportMode, json_version: str, level_name_pattern: str, levels: List[Level], minify_json: bool, next_uid: int, png_file_pattern: Optional[str], simplified_export: bool, toc: List[LdtkTableOfContentEntry], tutorial_desc: Optional[str], world_grid_height: Optional[int], world_grid_width: Optional[int], world_layout: Optional[WorldLayout], worlds: List[World]) -> None: + self.forced_refs = forced_refs + self.app_build_id = app_build_id + self.backup_limit = backup_limit + self.backup_on_save = backup_on_save + self.backup_rel_path = backup_rel_path + self.bg_color = bg_color + self.custom_commands = custom_commands + self.default_entity_height = default_entity_height + self.default_entity_width = default_entity_width + self.default_grid_size = default_grid_size + self.default_level_bg_color = default_level_bg_color + self.default_level_height = default_level_height + self.default_level_width = default_level_width + self.default_pivot_x = default_pivot_x + self.default_pivot_y = default_pivot_y + self.defs = defs + self.dummy_world_iid = dummy_world_iid + self.export_level_bg = export_level_bg + self.export_png = export_png + self.export_tiled = export_tiled + self.external_levels = external_levels + self.flags = flags + self.identifier_style = identifier_style + self.iid = iid + self.image_export_mode = image_export_mode + self.json_version = json_version + self.level_name_pattern = level_name_pattern + self.levels = levels + self.minify_json = minify_json + self.next_uid = next_uid + self.png_file_pattern = png_file_pattern + self.simplified_export = simplified_export + self.toc = toc + self.tutorial_desc = tutorial_desc + self.world_grid_height = world_grid_height + self.world_grid_width = world_grid_width + self.world_layout = world_layout + self.worlds = worlds + + @staticmethod + def from_dict(obj: Any) -> 'LdtkJSON': + assert isinstance(obj, dict) + forced_refs = from_union([ForcedRefs.from_dict, from_none], obj.get("__FORCED_REFS")) + app_build_id = from_float(obj.get("appBuildId")) + backup_limit = from_int(obj.get("backupLimit")) + backup_on_save = from_bool(obj.get("backupOnSave")) + backup_rel_path = from_union([from_none, from_str], obj.get("backupRelPath")) + bg_color = from_str(obj.get("bgColor")) + custom_commands = from_list(LdtkCustomCommand.from_dict, obj.get("customCommands")) + default_entity_height = from_int(obj.get("defaultEntityHeight")) + default_entity_width = from_int(obj.get("defaultEntityWidth")) + default_grid_size = from_int(obj.get("defaultGridSize")) + default_level_bg_color = from_str(obj.get("defaultLevelBgColor")) + default_level_height = from_union([from_none, from_int], obj.get("defaultLevelHeight")) + default_level_width = from_union([from_none, from_int], obj.get("defaultLevelWidth")) + default_pivot_x = from_float(obj.get("defaultPivotX")) + default_pivot_y = from_float(obj.get("defaultPivotY")) + defs = Definitions.from_dict(obj.get("defs")) + dummy_world_iid = from_str(obj.get("dummyWorldIid")) + export_level_bg = from_bool(obj.get("exportLevelBg")) + export_png = from_union([from_none, from_bool], obj.get("exportPng")) + export_tiled = from_bool(obj.get("exportTiled")) + external_levels = from_bool(obj.get("externalLevels")) + flags = from_list(Flag, obj.get("flags")) + identifier_style = IdentifierStyle(obj.get("identifierStyle")) + iid = from_str(obj.get("iid")) + image_export_mode = ImageExportMode(obj.get("imageExportMode")) + json_version = from_str(obj.get("jsonVersion")) + level_name_pattern = from_str(obj.get("levelNamePattern")) + levels = from_list(Level.from_dict, obj.get("levels")) + minify_json = from_bool(obj.get("minifyJson")) + next_uid = from_int(obj.get("nextUid")) + png_file_pattern = from_union([from_none, from_str], obj.get("pngFilePattern")) + simplified_export = from_bool(obj.get("simplifiedExport")) + toc = from_list(LdtkTableOfContentEntry.from_dict, obj.get("toc")) + tutorial_desc = from_union([from_none, from_str], obj.get("tutorialDesc")) + world_grid_height = from_union([from_none, from_int], obj.get("worldGridHeight")) + world_grid_width = from_union([from_none, from_int], obj.get("worldGridWidth")) + world_layout = from_union([from_none, WorldLayout], obj.get("worldLayout")) + worlds = from_list(World.from_dict, obj.get("worlds")) + return LdtkJSON(forced_refs, app_build_id, backup_limit, backup_on_save, backup_rel_path, bg_color, custom_commands, default_entity_height, default_entity_width, default_grid_size, default_level_bg_color, default_level_height, default_level_width, default_pivot_x, default_pivot_y, defs, dummy_world_iid, export_level_bg, export_png, export_tiled, external_levels, flags, identifier_style, iid, image_export_mode, json_version, level_name_pattern, levels, minify_json, next_uid, png_file_pattern, simplified_export, toc, tutorial_desc, world_grid_height, world_grid_width, world_layout, worlds) + + def to_dict(self) -> dict: + result: dict = {} + if self.forced_refs is not None: + result["__FORCED_REFS"] = from_union([lambda x: to_class(ForcedRefs, x), from_none], self.forced_refs) + result["appBuildId"] = to_float(self.app_build_id) + result["backupLimit"] = from_int(self.backup_limit) + result["backupOnSave"] = from_bool(self.backup_on_save) + if self.backup_rel_path is not None: + result["backupRelPath"] = from_union([from_none, from_str], self.backup_rel_path) + result["bgColor"] = from_str(self.bg_color) + result["customCommands"] = from_list(lambda x: to_class(LdtkCustomCommand, x), self.custom_commands) + result["defaultEntityHeight"] = from_int(self.default_entity_height) + result["defaultEntityWidth"] = from_int(self.default_entity_width) + result["defaultGridSize"] = from_int(self.default_grid_size) + result["defaultLevelBgColor"] = from_str(self.default_level_bg_color) + if self.default_level_height is not None: + result["defaultLevelHeight"] = from_union([from_none, from_int], self.default_level_height) + if self.default_level_width is not None: + result["defaultLevelWidth"] = from_union([from_none, from_int], self.default_level_width) + result["defaultPivotX"] = to_float(self.default_pivot_x) + result["defaultPivotY"] = to_float(self.default_pivot_y) + result["defs"] = to_class(Definitions, self.defs) + result["dummyWorldIid"] = from_str(self.dummy_world_iid) + result["exportLevelBg"] = from_bool(self.export_level_bg) + if self.export_png is not None: + result["exportPng"] = from_union([from_none, from_bool], self.export_png) + result["exportTiled"] = from_bool(self.export_tiled) + result["externalLevels"] = from_bool(self.external_levels) + result["flags"] = from_list(lambda x: to_enum(Flag, x), self.flags) + result["identifierStyle"] = to_enum(IdentifierStyle, self.identifier_style) + result["iid"] = from_str(self.iid) + result["imageExportMode"] = to_enum(ImageExportMode, self.image_export_mode) + result["jsonVersion"] = from_str(self.json_version) + result["levelNamePattern"] = from_str(self.level_name_pattern) + result["levels"] = from_list(lambda x: to_class(Level, x), self.levels) + result["minifyJson"] = from_bool(self.minify_json) + result["nextUid"] = from_int(self.next_uid) + if self.png_file_pattern is not None: + result["pngFilePattern"] = from_union([from_none, from_str], self.png_file_pattern) + result["simplifiedExport"] = from_bool(self.simplified_export) + result["toc"] = from_list(lambda x: to_class(LdtkTableOfContentEntry, x), self.toc) + if self.tutorial_desc is not None: + result["tutorialDesc"] = from_union([from_none, from_str], self.tutorial_desc) + if self.world_grid_height is not None: + result["worldGridHeight"] = from_union([from_none, from_int], self.world_grid_height) + if self.world_grid_width is not None: + result["worldGridWidth"] = from_union([from_none, from_int], self.world_grid_width) + if self.world_layout is not None: + result["worldLayout"] = from_union([from_none, lambda x: to_enum(WorldLayout, x)], self.world_layout) + result["worlds"] = from_list(lambda x: to_class(World, x), self.worlds) + return result + + +def ldtk_json_from_dict(s: Any) -> LdtkJSON: + return LdtkJSON.from_dict(s) + + +def ldtk_json_to_dict(x: LdtkJSON) -> Any: + return to_class(LdtkJSON, x) diff --git a/py/engine/__init__.py b/py/engine/__init__.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/py/engine/__init__.py @@ -0,0 +1 @@ + diff --git a/py/engine/__pycache__/LdtkJson.cpython-313.pyc b/py/engine/__pycache__/LdtkJson.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d6d8f18e9d5188c63067a6514a762cb352d6d461 GIT binary patch literal 165704 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