dynamically adding sprites to current scene tryout

This commit is contained in:
wgroeneveld 2018-08-09 11:35:52 +02:00
parent a9a59e1b7c
commit b46b5a907d
19 changed files with 975 additions and 27 deletions

View File

@ -27,4 +27,5 @@ add_subdirectory(engine)
add_subdirectory(test)
add_subdirectory(demos/demo1-basicfeatures)
add_subdirectory(demos/demo2-arkanoid)
add_subdirectory(demos/demo2-arkanoid)
add_subdirectory(demos/demo3-foodthrowing)

View File

@ -10,7 +10,7 @@
int main() {
std::shared_ptr<GBAEngine> engine(new GBAEngine());
ArkanoidGameScene* scene = new ArkanoidGameScene(engine);
auto scene = new ArkanoidGameScene(engine);
engine->setScene(scene);
while (true) {

View File

@ -0,0 +1,13 @@
project(foodthrowing)
add_executable(${PROJECT_NAME}.elf
src/main.cpp
src/food_scene.cpp
src/food_scene.h
src/avatar.h src/bullet.h)
target_link_libraries(${PROJECT_NAME}.elf gba-sprite-engine)
add_custom_command(TARGET ${PROJECT_NAME}.elf POST_BUILD
COMMAND ${CMAKE_OBJCOPY} -v -O binary ${PROJECT_NAME}.elf ${PROJECT_NAME}.gba
)

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@ -0,0 +1,724 @@
/* avatar.h
* generated by png2gba program */
#define avatar_width 64
#define avatar_height 128
const unsigned char avatar_data [] = {
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02,
0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x04,
0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03,
0x03, 0x03, 0x05, 0x05, 0x06, 0x06, 0x07, 0x07, 0x03, 0x03, 0x05, 0x05,
0x06, 0x06, 0x07, 0x07, 0x08, 0x08, 0x07, 0x07, 0x09, 0x09, 0x0A, 0x0A,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x03, 0x03, 0x0B, 0x0B, 0x08, 0x08, 0x08, 0x08, 0x03, 0x03, 0x0B, 0x0B,
0x08, 0x08, 0x08, 0x08, 0x09, 0x09, 0x0A, 0x0A, 0x0C, 0x0C, 0x0C, 0x0C,
0x09, 0x09, 0x0A, 0x0A, 0x0C, 0x0C, 0x0C, 0x0C, 0x0D, 0x0D, 0x0C, 0x0C,
0x0A, 0x0A, 0x0E, 0x0E, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0B, 0x0B,
0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0B, 0x0B, 0x0C, 0x0C, 0x0A, 0x0A,
0x09, 0x09, 0x0F, 0x0F, 0x0C, 0x0C, 0x0A, 0x0A, 0x09, 0x09, 0x0F, 0x0F,
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03,
0x04, 0x04, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x01, 0x01,
0x08, 0x08, 0x03, 0x03, 0x05, 0x05, 0x03, 0x03, 0x08, 0x08, 0x03, 0x03,
0x05, 0x05, 0x03, 0x03, 0x07, 0x07, 0x08, 0x08, 0x08, 0x08, 0x05, 0x05,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x04, 0x02, 0x02,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01,
0x02, 0x02, 0x08, 0x08, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x08, 0x08,
0x01, 0x01, 0x10, 0x10, 0x11, 0x11, 0x03, 0x03, 0x01, 0x01, 0x10, 0x10,
0x11, 0x11, 0x03, 0x03, 0x01, 0x01, 0x10, 0x10, 0x11, 0x11, 0x04, 0x04,
0x01, 0x01, 0x10, 0x10, 0x11, 0x11, 0x04, 0x04, 0x01, 0x01, 0x10, 0x10,
0x04, 0x04, 0x04, 0x04, 0x08, 0x08, 0x07, 0x07, 0x09, 0x09, 0x0A, 0x0A,
0x12, 0x12, 0x08, 0x08, 0x07, 0x07, 0x0F, 0x0F, 0x12, 0x12, 0x08, 0x08,
0x07, 0x07, 0x0F, 0x0F, 0x08, 0x08, 0x03, 0x03, 0x07, 0x07, 0x0F, 0x0F,
0x08, 0x08, 0x03, 0x03, 0x07, 0x07, 0x0F, 0x0F, 0x05, 0x05, 0x03, 0x03,
0x07, 0x07, 0x05, 0x05, 0x05, 0x05, 0x03, 0x03, 0x07, 0x07, 0x05, 0x05,
0x08, 0x08, 0x08, 0x08, 0x05, 0x05, 0x07, 0x07, 0x0D, 0x0D, 0x0C, 0x0C,
0x0A, 0x0A, 0x0E, 0x0E, 0x0E, 0x0E, 0x12, 0x12, 0x09, 0x09, 0x07, 0x07,
0x0E, 0x0E, 0x12, 0x12, 0x09, 0x09, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
0x0F, 0x0F, 0x0B, 0x0B, 0x0B, 0x0B, 0x07, 0x07, 0x0F, 0x0F, 0x0B, 0x0B,
0x0B, 0x0B, 0x07, 0x07, 0x05, 0x05, 0x0B, 0x0B, 0x08, 0x08, 0x0B, 0x0B,
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x13, 0x13, 0x08, 0x08,
0x08, 0x08, 0x08, 0x08, 0x13, 0x13, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
0x04, 0x04, 0x07, 0x07, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x07, 0x07,
0x03, 0x03, 0x04, 0x04, 0x0B, 0x0B, 0x04, 0x04, 0x0B, 0x0B, 0x04, 0x04,
0x0B, 0x0B, 0x04, 0x04, 0x0B, 0x0B, 0x04, 0x04, 0x0B, 0x0B, 0x07, 0x07,
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x08, 0x08, 0x08, 0x08, 0x05, 0x05,
0x08, 0x08, 0x03, 0x03, 0x05, 0x05, 0x02, 0x02, 0x08, 0x08, 0x03, 0x03,
0x05, 0x05, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x02, 0x02, 0x10, 0x10,
0x03, 0x03, 0x04, 0x04, 0x02, 0x02, 0x10, 0x10, 0x11, 0x11, 0x03, 0x03,
0x10, 0x10, 0x02, 0x02, 0x11, 0x11, 0x03, 0x03, 0x10, 0x10, 0x02, 0x02,
0x12, 0x12, 0x12, 0x12, 0x0B, 0x0B, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02,
0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x10, 0x10, 0x01, 0x01, 0x01, 0x01,
0x02, 0x02, 0x10, 0x10, 0x01, 0x01, 0x01, 0x01, 0x10, 0x10, 0x10, 0x10,
0x10, 0x10, 0x01, 0x01, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x01, 0x01,
0x02, 0x02, 0x11, 0x11, 0x10, 0x10, 0x01, 0x01, 0x02, 0x02, 0x11, 0x11,
0x10, 0x10, 0x01, 0x01, 0x11, 0x11, 0x04, 0x04, 0x10, 0x10, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x10,
0x04, 0x04, 0x04, 0x04, 0x01, 0x01, 0x10, 0x10, 0x04, 0x04, 0x05, 0x05,
0x01, 0x01, 0x10, 0x10, 0x04, 0x04, 0x05, 0x05, 0x01, 0x01, 0x10, 0x10,
0x04, 0x04, 0x03, 0x03, 0x01, 0x01, 0x10, 0x10, 0x04, 0x04, 0x03, 0x03,
0x01, 0x01, 0x10, 0x10, 0x04, 0x04, 0x08, 0x08, 0x01, 0x01, 0x10, 0x10,
0x04, 0x04, 0x08, 0x08, 0x01, 0x01, 0x10, 0x10, 0x04, 0x04, 0x08, 0x08,
0x08, 0x08, 0x08, 0x08, 0x05, 0x05, 0x07, 0x07, 0x08, 0x08, 0x07, 0x07,
0x08, 0x08, 0x05, 0x05, 0x08, 0x08, 0x07, 0x07, 0x08, 0x08, 0x05, 0x05,
0x07, 0x07, 0x09, 0x09, 0x0E, 0x0E, 0x13, 0x13, 0x07, 0x07, 0x09, 0x09,
0x0E, 0x0E, 0x13, 0x13, 0x0F, 0x0F, 0x0C, 0x0C, 0x0D, 0x0D, 0x0D, 0x0D,
0x0F, 0x0F, 0x0C, 0x0C, 0x0D, 0x0D, 0x0D, 0x0D, 0x0F, 0x0F, 0x0C, 0x0C,
0x14, 0x14, 0x15, 0x15, 0x05, 0x05, 0x0B, 0x0B, 0x08, 0x08, 0x0B, 0x0B,
0x13, 0x13, 0x05, 0x05, 0x08, 0x08, 0x07, 0x07, 0x13, 0x13, 0x05, 0x05,
0x08, 0x08, 0x07, 0x07, 0x13, 0x13, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E,
0x13, 0x13, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x13, 0x13,
0x09, 0x09, 0x09, 0x09, 0x0E, 0x0E, 0x13, 0x13, 0x09, 0x09, 0x09, 0x09,
0x0C, 0x0C, 0x0A, 0x0A, 0x13, 0x13, 0x07, 0x07, 0x0B, 0x0B, 0x07, 0x07,
0x07, 0x07, 0x07, 0x07, 0x13, 0x13, 0x0E, 0x0E, 0x0F, 0x0F, 0x13, 0x13,
0x13, 0x13, 0x0E, 0x0E, 0x0F, 0x0F, 0x13, 0x13, 0x0E, 0x0E, 0x0E, 0x0E,
0x0E, 0x0E, 0x13, 0x13, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x13, 0x13,
0x09, 0x09, 0x09, 0x09, 0x13, 0x13, 0x0E, 0x0E, 0x09, 0x09, 0x09, 0x09,
0x13, 0x13, 0x0E, 0x0E, 0x07, 0x07, 0x13, 0x13, 0x0A, 0x0A, 0x0C, 0x0C,
0x12, 0x12, 0x12, 0x12, 0x0B, 0x0B, 0x04, 0x04, 0x07, 0x07, 0x07, 0x07,
0x07, 0x07, 0x0B, 0x0B, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0B, 0x0B,
0x13, 0x13, 0x0E, 0x0E, 0x09, 0x09, 0x07, 0x07, 0x13, 0x13, 0x0E, 0x0E,
0x09, 0x09, 0x07, 0x07, 0x0D, 0x0D, 0x0D, 0x0D, 0x0C, 0x0C, 0x0F, 0x0F,
0x0D, 0x0D, 0x0D, 0x0D, 0x0C, 0x0C, 0x0F, 0x0F, 0x15, 0x15, 0x14, 0x14,
0x0C, 0x0C, 0x0F, 0x0F, 0x11, 0x11, 0x04, 0x04, 0x10, 0x10, 0x01, 0x01,
0x04, 0x04, 0x04, 0x04, 0x10, 0x10, 0x01, 0x01, 0x04, 0x04, 0x04, 0x04,
0x10, 0x10, 0x01, 0x01, 0x05, 0x05, 0x04, 0x04, 0x10, 0x10, 0x01, 0x01,
0x05, 0x05, 0x04, 0x04, 0x10, 0x10, 0x01, 0x01, 0x03, 0x03, 0x04, 0x04,
0x10, 0x10, 0x01, 0x01, 0x03, 0x03, 0x04, 0x04, 0x10, 0x10, 0x01, 0x01,
0x08, 0x08, 0x04, 0x04, 0x10, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x10, 0x04, 0x04, 0x08, 0x08,
0x01, 0x01, 0x10, 0x10, 0x04, 0x04, 0x08, 0x08, 0x01, 0x01, 0x10, 0x10,
0x04, 0x04, 0x08, 0x08, 0x0E, 0x0E, 0x0B, 0x0B, 0x04, 0x04, 0x08, 0x08,
0x0E, 0x0E, 0x0B, 0x0B, 0x04, 0x04, 0x08, 0x08, 0x0E, 0x0E, 0x0B, 0x0B,
0x16, 0x16, 0x0E, 0x0E, 0x0E, 0x0E, 0x0B, 0x0B, 0x16, 0x16, 0x0E, 0x0E,
0x07, 0x07, 0x0B, 0x0B, 0x17, 0x17, 0x0E, 0x0E, 0x0F, 0x0F, 0x0C, 0x0C,
0x14, 0x14, 0x15, 0x15, 0x0E, 0x0E, 0x15, 0x15, 0x18, 0x18, 0x18, 0x18,
0x0E, 0x0E, 0x15, 0x15, 0x18, 0x18, 0x18, 0x18, 0x11, 0x11, 0x11, 0x11,
0x05, 0x05, 0x13, 0x13, 0x11, 0x11, 0x11, 0x11, 0x05, 0x05, 0x13, 0x13,
0x12, 0x12, 0x03, 0x03, 0x11, 0x11, 0x11, 0x11, 0x12, 0x12, 0x03, 0x03,
0x11, 0x11, 0x11, 0x11, 0x08, 0x08, 0x19, 0x19, 0x1A, 0x1A, 0x1B, 0x1B,
0x0C, 0x0C, 0x0A, 0x0A, 0x13, 0x13, 0x07, 0x07, 0x15, 0x15, 0x15, 0x15,
0x0C, 0x0C, 0x1C, 0x1C, 0x15, 0x15, 0x15, 0x15, 0x0C, 0x0C, 0x1C, 0x1C,
0x1D, 0x1D, 0x18, 0x18, 0x0A, 0x0A, 0x1E, 0x1E, 0x1D, 0x1D, 0x18, 0x18,
0x0A, 0x0A, 0x1E, 0x1E, 0x11, 0x11, 0x01, 0x01, 0x03, 0x03, 0x09, 0x09,
0x11, 0x11, 0x01, 0x01, 0x03, 0x03, 0x09, 0x09, 0x01, 0x01, 0x01, 0x01,
0x04, 0x04, 0x05, 0x05, 0x07, 0x07, 0x13, 0x13, 0x0A, 0x0A, 0x0C, 0x0C,
0x1C, 0x1C, 0x0C, 0x0C, 0x15, 0x15, 0x15, 0x15, 0x1C, 0x1C, 0x0C, 0x0C,
0x15, 0x15, 0x15, 0x15, 0x1E, 0x1E, 0x0A, 0x0A, 0x18, 0x18, 0x0F, 0x0F,
0x1E, 0x1E, 0x0A, 0x0A, 0x18, 0x18, 0x0F, 0x0F, 0x09, 0x09, 0x03, 0x03,
0x01, 0x01, 0x01, 0x01, 0x09, 0x09, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01,
0x05, 0x05, 0x04, 0x04, 0x01, 0x01, 0x1F, 0x1F, 0x15, 0x15, 0x14, 0x14,
0x0C, 0x0C, 0x0F, 0x0F, 0x0F, 0x0F, 0x05, 0x05, 0x01, 0x01, 0x11, 0x11,
0x0F, 0x0F, 0x05, 0x05, 0x01, 0x01, 0x11, 0x11, 0x01, 0x01, 0x11, 0x11,
0x08, 0x08, 0x12, 0x12, 0x01, 0x01, 0x11, 0x11, 0x08, 0x08, 0x12, 0x12,
0x01, 0x01, 0x11, 0x11, 0x03, 0x03, 0x0E, 0x0E, 0x01, 0x01, 0x11, 0x11,
0x03, 0x03, 0x0E, 0x0E, 0x1A, 0x1A, 0x1B, 0x1B, 0x01, 0x01, 0x08, 0x08,
0x08, 0x08, 0x04, 0x04, 0x10, 0x10, 0x01, 0x01, 0x08, 0x08, 0x04, 0x04,
0x10, 0x10, 0x01, 0x01, 0x08, 0x08, 0x04, 0x04, 0x10, 0x10, 0x01, 0x01,
0x08, 0x08, 0x04, 0x04, 0x0B, 0x0B, 0x0E, 0x0E, 0x08, 0x08, 0x04, 0x04,
0x0B, 0x0B, 0x0E, 0x0E, 0x07, 0x07, 0x16, 0x16, 0x0B, 0x0B, 0x0E, 0x0E,
0x07, 0x07, 0x16, 0x16, 0x0B, 0x0B, 0x0E, 0x0E, 0x0E, 0x0E, 0x17, 0x17,
0x0B, 0x0B, 0x07, 0x07, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x07, 0x07, 0x0B, 0x0B, 0x17, 0x17, 0x0E, 0x0E, 0x0B, 0x0B, 0x03, 0x03,
0x12, 0x12, 0x0E, 0x0E, 0x0B, 0x0B, 0x03, 0x03, 0x12, 0x12, 0x0E, 0x0E,
0x12, 0x12, 0x03, 0x03, 0x12, 0x12, 0x1C, 0x1C, 0x12, 0x12, 0x03, 0x03,
0x12, 0x12, 0x1C, 0x1C, 0x07, 0x07, 0x03, 0x03, 0x07, 0x07, 0x0C, 0x0C,
0x07, 0x07, 0x03, 0x03, 0x07, 0x07, 0x0C, 0x0C, 0x01, 0x01, 0x03, 0x03,
0x12, 0x12, 0x13, 0x13, 0x08, 0x08, 0x19, 0x19, 0x1A, 0x1A, 0x1B, 0x1B,
0x07, 0x07, 0x09, 0x09, 0x14, 0x14, 0x09, 0x09, 0x07, 0x07, 0x09, 0x09,
0x14, 0x14, 0x09, 0x09, 0x1C, 0x1C, 0x0A, 0x0A, 0x09, 0x09, 0x07, 0x07,
0x1C, 0x1C, 0x0A, 0x0A, 0x09, 0x09, 0x07, 0x07, 0x1D, 0x1D, 0x14, 0x14,
0x1D, 0x1D, 0x0D, 0x0D, 0x1D, 0x1D, 0x14, 0x14, 0x1D, 0x1D, 0x0D, 0x0D,
0x09, 0x09, 0x0A, 0x0A, 0x1C, 0x1C, 0x14, 0x14, 0x01, 0x01, 0x01, 0x01,
0x04, 0x04, 0x05, 0x05, 0x0B, 0x0B, 0x03, 0x03, 0x07, 0x07, 0x0C, 0x0C,
0x0B, 0x0B, 0x03, 0x03, 0x07, 0x07, 0x0C, 0x0C, 0x09, 0x09, 0x0C, 0x0C,
0x09, 0x09, 0x1E, 0x1E, 0x09, 0x09, 0x0C, 0x0C, 0x09, 0x09, 0x1E, 0x1E,
0x15, 0x15, 0x18, 0x18, 0x15, 0x15, 0x18, 0x18, 0x15, 0x15, 0x18, 0x18,
0x15, 0x15, 0x18, 0x18, 0x20, 0x20, 0x1D, 0x1D, 0x1C, 0x1C, 0x21, 0x21,
0x05, 0x05, 0x04, 0x04, 0x01, 0x01, 0x1F, 0x1F, 0x0C, 0x0C, 0x07, 0x07,
0x03, 0x03, 0x0B, 0x0B, 0x0C, 0x0C, 0x07, 0x07, 0x03, 0x03, 0x0B, 0x0B,
0x1E, 0x1E, 0x09, 0x09, 0x0C, 0x0C, 0x09, 0x09, 0x1E, 0x1E, 0x09, 0x09,
0x0C, 0x0C, 0x09, 0x09, 0x18, 0x18, 0x15, 0x15, 0x18, 0x18, 0x15, 0x15,
0x18, 0x18, 0x15, 0x15, 0x18, 0x18, 0x15, 0x15, 0x22, 0x22, 0x1C, 0x1C,
0x1D, 0x1D, 0x20, 0x20, 0x1A, 0x1A, 0x1B, 0x1B, 0x01, 0x01, 0x08, 0x08,
0x09, 0x09, 0x14, 0x14, 0x09, 0x09, 0x07, 0x07, 0x09, 0x09, 0x14, 0x14,
0x09, 0x09, 0x07, 0x07, 0x07, 0x07, 0x09, 0x09, 0x0A, 0x0A, 0x1C, 0x1C,
0x07, 0x07, 0x09, 0x09, 0x0A, 0x0A, 0x1C, 0x1C, 0x0D, 0x0D, 0x1D, 0x1D,
0x14, 0x14, 0x1D, 0x1D, 0x0D, 0x0D, 0x1D, 0x1D, 0x14, 0x14, 0x1D, 0x1D,
0x14, 0x14, 0x1C, 0x1C, 0x0A, 0x0A, 0x09, 0x09, 0x0E, 0x0E, 0x17, 0x17,
0x0B, 0x0B, 0x07, 0x07, 0x0E, 0x0E, 0x12, 0x12, 0x03, 0x03, 0x0B, 0x0B,
0x0E, 0x0E, 0x12, 0x12, 0x03, 0x03, 0x0B, 0x0B, 0x1C, 0x1C, 0x12, 0x12,
0x03, 0x03, 0x12, 0x12, 0x1C, 0x1C, 0x12, 0x12, 0x03, 0x03, 0x12, 0x12,
0x0C, 0x0C, 0x07, 0x07, 0x03, 0x03, 0x07, 0x07, 0x0C, 0x0C, 0x07, 0x07,
0x03, 0x03, 0x07, 0x07, 0x13, 0x13, 0x12, 0x12, 0x03, 0x03, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03,
0x12, 0x12, 0x13, 0x13, 0x01, 0x01, 0x03, 0x03, 0x08, 0x08, 0x0F, 0x0F,
0x01, 0x01, 0x03, 0x03, 0x08, 0x08, 0x0F, 0x0F, 0x01, 0x01, 0x01, 0x01,
0x08, 0x08, 0x0E, 0x0E, 0x01, 0x01, 0x01, 0x01, 0x08, 0x08, 0x0E, 0x0E,
0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x0D, 0x0D, 0x01, 0x01, 0x01, 0x01,
0x03, 0x03, 0x0D, 0x0D, 0x01, 0x01, 0x01, 0x01, 0x05, 0x05, 0x09, 0x09,
0x09, 0x09, 0x0A, 0x0A, 0x1C, 0x1C, 0x14, 0x14, 0x13, 0x13, 0x0A, 0x0A,
0x14, 0x14, 0x23, 0x23, 0x13, 0x13, 0x0A, 0x0A, 0x14, 0x14, 0x23, 0x23,
0x0F, 0x0F, 0x1C, 0x1C, 0x18, 0x18, 0x15, 0x15, 0x0F, 0x0F, 0x1C, 0x1C,
0x18, 0x18, 0x15, 0x15, 0x0F, 0x0F, 0x15, 0x15, 0x1E, 0x1E, 0x0A, 0x0A,
0x0F, 0x0F, 0x15, 0x15, 0x1E, 0x1E, 0x0A, 0x0A, 0x13, 0x13, 0x1C, 0x1C,
0x15, 0x15, 0x0C, 0x0C, 0x20, 0x20, 0x1D, 0x1D, 0x1C, 0x1C, 0x21, 0x21,
0x1C, 0x1C, 0x09, 0x09, 0x0F, 0x0F, 0x24, 0x24, 0x1C, 0x1C, 0x09, 0x09,
0x0F, 0x0F, 0x24, 0x24, 0x13, 0x13, 0x05, 0x05, 0x08, 0x08, 0x12, 0x12,
0x13, 0x13, 0x05, 0x05, 0x08, 0x08, 0x12, 0x12, 0x0C, 0x0C, 0x1D, 0x1D,
0x0A, 0x0A, 0x13, 0x13, 0x0C, 0x0C, 0x1D, 0x1D, 0x0A, 0x0A, 0x13, 0x13,
0x1C, 0x1C, 0x1E, 0x1E, 0x23, 0x23, 0x1C, 0x1C, 0x22, 0x22, 0x1C, 0x1C,
0x1D, 0x1D, 0x20, 0x20, 0x24, 0x24, 0x0F, 0x0F, 0x09, 0x09, 0x1C, 0x1C,
0x24, 0x24, 0x0F, 0x0F, 0x09, 0x09, 0x1C, 0x1C, 0x12, 0x12, 0x08, 0x08,
0x05, 0x05, 0x13, 0x13, 0x12, 0x12, 0x08, 0x08, 0x05, 0x05, 0x13, 0x13,
0x13, 0x13, 0x0A, 0x0A, 0x1D, 0x1D, 0x0C, 0x0C, 0x13, 0x13, 0x0A, 0x0A,
0x1D, 0x1D, 0x0C, 0x0C, 0x1C, 0x1C, 0x23, 0x23, 0x1E, 0x1E, 0x1C, 0x1C,
0x14, 0x14, 0x1C, 0x1C, 0x0A, 0x0A, 0x09, 0x09, 0x23, 0x23, 0x14, 0x14,
0x0A, 0x0A, 0x13, 0x13, 0x23, 0x23, 0x14, 0x14, 0x0A, 0x0A, 0x13, 0x13,
0x15, 0x15, 0x18, 0x18, 0x1C, 0x1C, 0x0F, 0x0F, 0x15, 0x15, 0x18, 0x18,
0x1C, 0x1C, 0x0F, 0x0F, 0x0A, 0x0A, 0x1E, 0x1E, 0x15, 0x15, 0x0F, 0x0F,
0x0A, 0x0A, 0x1E, 0x1E, 0x15, 0x15, 0x0F, 0x0F, 0x0C, 0x0C, 0x15, 0x15,
0x1C, 0x1C, 0x13, 0x13, 0x13, 0x13, 0x12, 0x12, 0x03, 0x03, 0x01, 0x01,
0x0F, 0x0F, 0x08, 0x08, 0x03, 0x03, 0x01, 0x01, 0x0F, 0x0F, 0x08, 0x08,
0x03, 0x03, 0x01, 0x01, 0x0E, 0x0E, 0x08, 0x08, 0x01, 0x01, 0x01, 0x01,
0x0E, 0x0E, 0x08, 0x08, 0x01, 0x01, 0x01, 0x01, 0x0D, 0x0D, 0x03, 0x03,
0x01, 0x01, 0x01, 0x01, 0x0D, 0x0D, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01,
0x09, 0x09, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x05, 0x05, 0x09, 0x09,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x12, 0x12, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x12, 0x12, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x05, 0x05,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x13, 0x13, 0x1C, 0x1C,
0x15, 0x15, 0x0C, 0x0C, 0x09, 0x09, 0x0D, 0x0D, 0x1C, 0x1C, 0x07, 0x07,
0x09, 0x09, 0x0D, 0x0D, 0x1C, 0x1C, 0x07, 0x07, 0x07, 0x07, 0x0E, 0x0E,
0x0D, 0x0D, 0x0D, 0x0D, 0x07, 0x07, 0x0E, 0x0E, 0x0D, 0x0D, 0x0D, 0x0D,
0x0B, 0x0B, 0x0F, 0x0F, 0x0C, 0x0C, 0x1D, 0x1D, 0x0B, 0x0B, 0x0F, 0x0F,
0x0C, 0x0C, 0x1D, 0x1D, 0x01, 0x01, 0x0B, 0x0B, 0x13, 0x13, 0x0C, 0x0C,
0x1C, 0x1C, 0x1E, 0x1E, 0x23, 0x23, 0x1C, 0x1C, 0x08, 0x08, 0x25, 0x25,
0x25, 0x25, 0x25, 0x25, 0x08, 0x08, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
0x0D, 0x0D, 0x1C, 0x1C, 0x15, 0x15, 0x26, 0x26, 0x0D, 0x0D, 0x1C, 0x1C,
0x15, 0x15, 0x26, 0x26, 0x0D, 0x0D, 0x09, 0x09, 0x07, 0x07, 0x06, 0x06,
0x0D, 0x0D, 0x09, 0x09, 0x07, 0x07, 0x06, 0x06, 0x1D, 0x1D, 0x0D, 0x0D,
0x0D, 0x0D, 0x15, 0x15, 0x1C, 0x1C, 0x23, 0x23, 0x1E, 0x1E, 0x1C, 0x1C,
0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x08, 0x08, 0x25, 0x25, 0x25, 0x25,
0x25, 0x25, 0x08, 0x08, 0x26, 0x26, 0x15, 0x15, 0x1C, 0x1C, 0x0D, 0x0D,
0x26, 0x26, 0x15, 0x15, 0x1C, 0x1C, 0x0D, 0x0D, 0x06, 0x06, 0x07, 0x07,
0x09, 0x09, 0x0D, 0x0D, 0x06, 0x06, 0x07, 0x07, 0x09, 0x09, 0x0D, 0x0D,
0x15, 0x15, 0x0D, 0x0D, 0x0D, 0x0D, 0x1D, 0x1D, 0x0C, 0x0C, 0x15, 0x15,
0x1C, 0x1C, 0x13, 0x13, 0x07, 0x07, 0x1C, 0x1C, 0x0D, 0x0D, 0x09, 0x09,
0x07, 0x07, 0x1C, 0x1C, 0x0D, 0x0D, 0x09, 0x09, 0x0D, 0x0D, 0x0D, 0x0D,
0x0E, 0x0E, 0x07, 0x07, 0x0D, 0x0D, 0x0D, 0x0D, 0x0E, 0x0E, 0x07, 0x07,
0x1D, 0x1D, 0x0C, 0x0C, 0x0F, 0x0F, 0x0B, 0x0B, 0x1D, 0x1D, 0x0C, 0x0C,
0x0F, 0x0F, 0x0B, 0x0B, 0x0C, 0x0C, 0x13, 0x13, 0x0B, 0x0B, 0x01, 0x01,
0x09, 0x09, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x12, 0x12, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x12, 0x12, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x05, 0x05, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0B, 0x0B, 0x13, 0x13, 0x0C, 0x0C,
0x01, 0x01, 0x01, 0x01, 0x05, 0x05, 0x12, 0x12, 0x01, 0x01, 0x01, 0x01,
0x05, 0x05, 0x12, 0x12, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x1D, 0x1D, 0x0D, 0x0D,
0x0D, 0x0D, 0x15, 0x15, 0x0E, 0x0E, 0x1C, 0x1C, 0x15, 0x15, 0x23, 0x23,
0x0E, 0x0E, 0x1C, 0x1C, 0x15, 0x15, 0x23, 0x23, 0x0B, 0x0B, 0x07, 0x07,
0x13, 0x13, 0x13, 0x13, 0x0B, 0x0B, 0x07, 0x07, 0x13, 0x13, 0x13, 0x13,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x15, 0x15, 0x0D, 0x0D, 0x0D, 0x0D, 0x1D, 0x1D, 0x23, 0x23, 0x15, 0x15,
0x1C, 0x1C, 0x0E, 0x0E, 0x23, 0x23, 0x15, 0x15, 0x1C, 0x1C, 0x0E, 0x0E,
0x13, 0x13, 0x13, 0x13, 0x07, 0x07, 0x0B, 0x0B, 0x13, 0x13, 0x13, 0x13,
0x07, 0x07, 0x0B, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x0C, 0x0C, 0x13, 0x13, 0x0B, 0x0B, 0x01, 0x01,
0x12, 0x12, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x12, 0x12, 0x05, 0x05,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x03, 0x01, 0x01, 0x01, 0x01,
0x01, 0x02, 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x08,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04,
0x04, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x04, 0x04, 0x03, 0x03, 0x03,
0x02, 0x03, 0x03, 0x05, 0x05, 0x03, 0x03, 0x0B, 0x02, 0x03, 0x03, 0x05,
0x05, 0x03, 0x03, 0x0B, 0x03, 0x08, 0x08, 0x07, 0x07, 0x0F, 0x0F, 0x0A,
0x03, 0x08, 0x08, 0x07, 0x07, 0x0F, 0x0F, 0x0A, 0x08, 0x12, 0x12, 0x08,
0x08, 0x07, 0x07, 0x0F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x03, 0x03, 0x03, 0x0B, 0x0B, 0x08, 0x08, 0x08, 0x03, 0x03, 0x03, 0x0B,
0x0B, 0x08, 0x08, 0x08, 0x0B, 0x07, 0x07, 0x0A, 0x0A, 0x0E, 0x0E, 0x0C,
0x0B, 0x07, 0x07, 0x0A, 0x0A, 0x0E, 0x0E, 0x0C, 0x0A, 0x0D, 0x0D, 0x0C,
0x0C, 0x13, 0x13, 0x0E, 0x0A, 0x0D, 0x0D, 0x0C, 0x0C, 0x13, 0x13, 0x0E,
0x0F, 0x0E, 0x0E, 0x12, 0x12, 0x09, 0x09, 0x07, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0B,
0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0B, 0x0C, 0x0C, 0x0C, 0x0E,
0x0E, 0x09, 0x09, 0x0F, 0x0C, 0x0C, 0x0C, 0x0E, 0x0E, 0x09, 0x09, 0x0F,
0x0E, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x0E, 0x0F, 0x0F, 0x0F,
0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x13, 0x13, 0x08, 0x08, 0x08, 0x08, 0x08,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0B, 0x03, 0x03, 0x03,
0x03, 0x04, 0x04, 0x01, 0x0B, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x01,
0x0F, 0x08, 0x08, 0x03, 0x03, 0x05, 0x05, 0x03, 0x0F, 0x08, 0x08, 0x03,
0x03, 0x05, 0x05, 0x03, 0x07, 0x07, 0x07, 0x08, 0x08, 0x08, 0x08, 0x05,
0x07, 0x07, 0x07, 0x08, 0x08, 0x08, 0x08, 0x05, 0x08, 0x08, 0x08, 0x03,
0x03, 0x05, 0x05, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x03, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01,
0x03, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x05, 0x04, 0x04, 0x02,
0x02, 0x01, 0x01, 0x01, 0x05, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01,
0x02, 0x02, 0x02, 0x10, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x08,
0x01, 0x01, 0x01, 0x10, 0x10, 0x11, 0x11, 0x03, 0x01, 0x01, 0x01, 0x10,
0x10, 0x11, 0x11, 0x03, 0x01, 0x01, 0x01, 0x10, 0x10, 0x11, 0x11, 0x04,
0x01, 0x01, 0x01, 0x10, 0x10, 0x11, 0x11, 0x04, 0x01, 0x01, 0x01, 0x10,
0x10, 0x04, 0x04, 0x04, 0x01, 0x01, 0x01, 0x10, 0x10, 0x04, 0x04, 0x04,
0x01, 0x01, 0x01, 0x10, 0x10, 0x04, 0x04, 0x05, 0x08, 0x12, 0x12, 0x08,
0x08, 0x07, 0x07, 0x0F, 0x03, 0x08, 0x08, 0x03, 0x03, 0x07, 0x07, 0x0F,
0x03, 0x08, 0x08, 0x03, 0x03, 0x07, 0x07, 0x0F, 0x04, 0x05, 0x05, 0x03,
0x03, 0x07, 0x07, 0x05, 0x04, 0x05, 0x05, 0x03, 0x03, 0x07, 0x07, 0x05,
0x04, 0x08, 0x08, 0x08, 0x08, 0x05, 0x05, 0x07, 0x04, 0x08, 0x08, 0x08,
0x08, 0x05, 0x05, 0x07, 0x05, 0x08, 0x08, 0x07, 0x07, 0x08, 0x08, 0x05,
0x0F, 0x0E, 0x0E, 0x12, 0x12, 0x09, 0x09, 0x07, 0x0F, 0x07, 0x07, 0x07,
0x07, 0x07, 0x07, 0x07, 0x0F, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
0x05, 0x0F, 0x0F, 0x0B, 0x0B, 0x0B, 0x0B, 0x07, 0x05, 0x0F, 0x0F, 0x0B,
0x0B, 0x0B, 0x0B, 0x07, 0x07, 0x05, 0x05, 0x0B, 0x0B, 0x08, 0x08, 0x0B,
0x07, 0x05, 0x05, 0x0B, 0x0B, 0x08, 0x08, 0x0B, 0x05, 0x13, 0x13, 0x05,
0x05, 0x08, 0x08, 0x07, 0x07, 0x13, 0x13, 0x08, 0x08, 0x08, 0x08, 0x08,
0x07, 0x04, 0x04, 0x07, 0x07, 0x03, 0x03, 0x04, 0x07, 0x04, 0x04, 0x07,
0x07, 0x03, 0x03, 0x04, 0x07, 0x0B, 0x0B, 0x04, 0x04, 0x0B, 0x0B, 0x04,
0x07, 0x0B, 0x0B, 0x04, 0x04, 0x0B, 0x0B, 0x04, 0x0B, 0x0B, 0x0B, 0x07,
0x07, 0x07, 0x07, 0x07, 0x0B, 0x0B, 0x0B, 0x07, 0x07, 0x07, 0x07, 0x07,
0x07, 0x13, 0x13, 0x0E, 0x0E, 0x0F, 0x0F, 0x13, 0x08, 0x08, 0x08, 0x03,
0x03, 0x05, 0x05, 0x02, 0x04, 0x03, 0x03, 0x04, 0x04, 0x02, 0x02, 0x10,
0x04, 0x03, 0x03, 0x04, 0x04, 0x02, 0x02, 0x10, 0x04, 0x11, 0x11, 0x03,
0x03, 0x10, 0x10, 0x02, 0x04, 0x11, 0x11, 0x03, 0x03, 0x10, 0x10, 0x02,
0x07, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x0B, 0x04, 0x07, 0x12, 0x12, 0x12,
0x12, 0x0B, 0x0B, 0x04, 0x13, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0B,
0x02, 0x02, 0x02, 0x10, 0x10, 0x01, 0x01, 0x01, 0x10, 0x10, 0x10, 0x10,
0x10, 0x10, 0x10, 0x01, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x01,
0x02, 0x02, 0x02, 0x11, 0x11, 0x10, 0x10, 0x01, 0x02, 0x02, 0x02, 0x11,
0x11, 0x10, 0x10, 0x01, 0x04, 0x11, 0x11, 0x04, 0x04, 0x10, 0x10, 0x01,
0x04, 0x11, 0x11, 0x04, 0x04, 0x10, 0x10, 0x01, 0x0B, 0x04, 0x04, 0x04,
0x04, 0x10, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x10, 0x10, 0x04, 0x04, 0x05, 0x01, 0x01, 0x01, 0x10,
0x10, 0x04, 0x04, 0x03, 0x01, 0x01, 0x01, 0x10, 0x10, 0x04, 0x04, 0x03,
0x01, 0x01, 0x01, 0x10, 0x10, 0x04, 0x04, 0x08, 0x01, 0x01, 0x01, 0x10,
0x10, 0x04, 0x04, 0x08, 0x01, 0x01, 0x01, 0x10, 0x10, 0x04, 0x04, 0x08,
0x01, 0x01, 0x01, 0x10, 0x10, 0x04, 0x04, 0x08, 0x01, 0x01, 0x01, 0x10,
0x10, 0x04, 0x04, 0x08, 0x05, 0x08, 0x08, 0x07, 0x07, 0x08, 0x08, 0x05,
0x03, 0x07, 0x07, 0x09, 0x09, 0x0E, 0x0E, 0x13, 0x03, 0x07, 0x07, 0x09,
0x09, 0x0E, 0x0E, 0x13, 0x08, 0x0F, 0x0F, 0x0C, 0x0C, 0x0D, 0x0D, 0x0D,
0x08, 0x0F, 0x0F, 0x0C, 0x0C, 0x0D, 0x0D, 0x0D, 0x08, 0x0F, 0x0F, 0x0C,
0x0C, 0x14, 0x14, 0x15, 0x08, 0x0F, 0x0F, 0x0C, 0x0C, 0x14, 0x14, 0x15,
0x08, 0x0E, 0x0E, 0x15, 0x15, 0x18, 0x18, 0x18, 0x05, 0x13, 0x13, 0x05,
0x05, 0x08, 0x08, 0x07, 0x13, 0x13, 0x13, 0x0E, 0x0E, 0x1C, 0x1C, 0x15,
0x13, 0x13, 0x13, 0x0E, 0x0E, 0x1C, 0x1C, 0x15, 0x0D, 0x0E, 0x0E, 0x1C,
0x1C, 0x09, 0x09, 0x09, 0x0D, 0x0E, 0x0E, 0x1C, 0x1C, 0x09, 0x09, 0x09,
0x15, 0x0C, 0x0C, 0x0A, 0x0A, 0x13, 0x13, 0x1C, 0x15, 0x0C, 0x0C, 0x0A,
0x0A, 0x13, 0x13, 0x1C, 0x18, 0x15, 0x15, 0x1C, 0x1C, 0x0E, 0x0E, 0x1C,
0x07, 0x13, 0x13, 0x0E, 0x0E, 0x0F, 0x0F, 0x13, 0x15, 0x15, 0x15, 0x1C,
0x1C, 0x0E, 0x0E, 0x1C, 0x15, 0x15, 0x15, 0x1C, 0x1C, 0x0E, 0x0E, 0x1C,
0x09, 0x09, 0x09, 0x09, 0x09, 0x1C, 0x1C, 0x0E, 0x09, 0x09, 0x09, 0x09,
0x09, 0x1C, 0x1C, 0x0E, 0x1C, 0x15, 0x15, 0x13, 0x13, 0x0A, 0x0A, 0x0F,
0x1C, 0x15, 0x15, 0x13, 0x13, 0x0A, 0x0A, 0x0F, 0x1C, 0x1C, 0x1C, 0x09,
0x09, 0x09, 0x09, 0x27, 0x13, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0B,
0x1C, 0x13, 0x13, 0x0E, 0x0E, 0x09, 0x09, 0x07, 0x1C, 0x13, 0x13, 0x0E,
0x0E, 0x09, 0x09, 0x07, 0x0E, 0x0F, 0x0F, 0x0F, 0x0F, 0x0C, 0x0C, 0x0F,
0x0E, 0x0F, 0x0F, 0x0F, 0x0F, 0x0C, 0x0C, 0x0F, 0x0F, 0x15, 0x15, 0x14,
0x14, 0x0C, 0x0C, 0x0F, 0x0F, 0x15, 0x15, 0x14, 0x14, 0x0C, 0x0C, 0x0F,
0x27, 0x14, 0x14, 0x18, 0x18, 0x15, 0x15, 0x0E, 0x0B, 0x04, 0x04, 0x04,
0x04, 0x10, 0x10, 0x01, 0x07, 0x05, 0x05, 0x04, 0x04, 0x10, 0x10, 0x01,
0x07, 0x05, 0x05, 0x04, 0x04, 0x10, 0x10, 0x01, 0x0F, 0x03, 0x03, 0x04,
0x04, 0x10, 0x10, 0x01, 0x0F, 0x03, 0x03, 0x04, 0x04, 0x10, 0x10, 0x01,
0x0F, 0x08, 0x08, 0x04, 0x04, 0x10, 0x10, 0x01, 0x0F, 0x08, 0x08, 0x04,
0x04, 0x10, 0x10, 0x01, 0x0E, 0x08, 0x08, 0x04, 0x04, 0x10, 0x10, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10,
0x10, 0x04, 0x04, 0x08, 0x01, 0x0E, 0x0E, 0x0B, 0x0B, 0x04, 0x04, 0x07,
0x01, 0x0E, 0x0E, 0x0B, 0x0B, 0x04, 0x04, 0x07, 0x01, 0x0E, 0x0E, 0x0B,
0x0B, 0x16, 0x16, 0x08, 0x01, 0x0E, 0x0E, 0x0B, 0x0B, 0x16, 0x16, 0x08,
0x01, 0x07, 0x07, 0x0B, 0x0B, 0x12, 0x12, 0x0B, 0x01, 0x07, 0x07, 0x0B,
0x0B, 0x12, 0x12, 0x0B, 0x01, 0x0B, 0x0B, 0x03, 0x03, 0x12, 0x12, 0x12,
0x08, 0x0E, 0x0E, 0x15, 0x15, 0x18, 0x18, 0x18, 0x07, 0x0B, 0x0B, 0x0B,
0x0B, 0x12, 0x12, 0x0C, 0x07, 0x0B, 0x0B, 0x0B, 0x0B, 0x12, 0x12, 0x0C,
0x08, 0x1D, 0x1D, 0x09, 0x09, 0x07, 0x07, 0x11, 0x08, 0x1D, 0x1D, 0x09,
0x09, 0x07, 0x07, 0x11, 0x0B, 0x07, 0x07, 0x01, 0x01, 0x28, 0x28, 0x29,
0x0B, 0x07, 0x07, 0x01, 0x01, 0x28, 0x28, 0x29, 0x12, 0x05, 0x05, 0x28,
0x28, 0x04, 0x04, 0x01, 0x18, 0x15, 0x15, 0x1C, 0x1C, 0x0E, 0x0E, 0x1C,
0x0C, 0x20, 0x20, 0x27, 0x27, 0x1C, 0x1C, 0x0E, 0x0C, 0x20, 0x20, 0x27,
0x27, 0x1C, 0x1C, 0x0E, 0x11, 0x0B, 0x0B, 0x12, 0x12, 0x1D, 0x1D, 0x15,
0x11, 0x0B, 0x0B, 0x12, 0x12, 0x1D, 0x1D, 0x15, 0x29, 0x11, 0x11, 0x04,
0x04, 0x07, 0x07, 0x1D, 0x29, 0x11, 0x11, 0x04, 0x04, 0x07, 0x07, 0x1D,
0x01, 0x29, 0x29, 0x01, 0x01, 0x05, 0x05, 0x13, 0x1C, 0x1C, 0x1C, 0x09,
0x09, 0x09, 0x09, 0x27, 0x0E, 0x0E, 0x0E, 0x0C, 0x0C, 0x27, 0x27, 0x1D,
0x0E, 0x0E, 0x0E, 0x0C, 0x0C, 0x27, 0x27, 0x1D, 0x15, 0x0C, 0x0C, 0x15,
0x15, 0x0E, 0x0E, 0x0B, 0x15, 0x0C, 0x0C, 0x15, 0x15, 0x0E, 0x0E, 0x0B,
0x1D, 0x0A, 0x0A, 0x07, 0x07, 0x04, 0x04, 0x11, 0x1D, 0x0A, 0x0A, 0x07,
0x07, 0x04, 0x04, 0x11, 0x13, 0x1E, 0x1E, 0x05, 0x05, 0x01, 0x01, 0x28,
0x27, 0x14, 0x14, 0x18, 0x18, 0x15, 0x15, 0x0E, 0x1D, 0x13, 0x13, 0x05,
0x05, 0x0B, 0x0B, 0x0B, 0x1D, 0x13, 0x13, 0x05, 0x05, 0x0B, 0x0B, 0x0B,
0x0B, 0x11, 0x11, 0x07, 0x07, 0x09, 0x09, 0x1D, 0x0B, 0x11, 0x11, 0x07,
0x07, 0x09, 0x09, 0x1D, 0x11, 0x28, 0x28, 0x29, 0x29, 0x01, 0x01, 0x07,
0x11, 0x28, 0x28, 0x29, 0x29, 0x01, 0x01, 0x07, 0x28, 0x01, 0x01, 0x04,
0x04, 0x29, 0x29, 0x05, 0x0E, 0x08, 0x08, 0x04, 0x04, 0x10, 0x10, 0x01,
0x0B, 0x07, 0x07, 0x04, 0x04, 0x0B, 0x0B, 0x0E, 0x0B, 0x07, 0x07, 0x04,
0x04, 0x0B, 0x0B, 0x0E, 0x1D, 0x08, 0x08, 0x16, 0x16, 0x0B, 0x0B, 0x0E,
0x1D, 0x08, 0x08, 0x16, 0x16, 0x0B, 0x0B, 0x0E, 0x07, 0x0B, 0x0B, 0x12,
0x12, 0x0B, 0x0B, 0x07, 0x07, 0x0B, 0x0B, 0x12, 0x12, 0x0B, 0x0B, 0x07,
0x05, 0x12, 0x12, 0x12, 0x12, 0x03, 0x03, 0x0B, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x0E, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x0E, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0E, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x0E, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x07, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x0B, 0x0B, 0x03, 0x03, 0x12, 0x12, 0x12,
0x01, 0x12, 0x12, 0x03, 0x03, 0x12, 0x12, 0x0C, 0x01, 0x12, 0x12, 0x03,
0x03, 0x12, 0x12, 0x0C, 0x01, 0x07, 0x07, 0x03, 0x03, 0x07, 0x07, 0x0C,
0x01, 0x07, 0x07, 0x03, 0x03, 0x07, 0x07, 0x0C, 0x01, 0x01, 0x01, 0x03,
0x03, 0x07, 0x07, 0x0A, 0x01, 0x01, 0x01, 0x03, 0x03, 0x07, 0x07, 0x0A,
0x01, 0x01, 0x01, 0x03, 0x03, 0x07, 0x07, 0x07, 0x12, 0x05, 0x05, 0x28,
0x28, 0x04, 0x04, 0x01, 0x0C, 0x0E, 0x0E, 0x03, 0x03, 0x2A, 0x2A, 0x2A,
0x0C, 0x0E, 0x0E, 0x03, 0x03, 0x2A, 0x2A, 0x2A, 0x0C, 0x15, 0x15, 0x0E,
0x0E, 0x03, 0x03, 0x12, 0x0C, 0x15, 0x15, 0x0E, 0x0E, 0x03, 0x03, 0x12,
0x0A, 0x15, 0x15, 0x1E, 0x1E, 0x1E, 0x1E, 0x18, 0x0A, 0x15, 0x15, 0x1E,
0x1E, 0x1E, 0x1E, 0x18, 0x07, 0x0E, 0x0E, 0x09, 0x09, 0x15, 0x15, 0x0C,
0x01, 0x29, 0x29, 0x01, 0x01, 0x05, 0x05, 0x13, 0x2A, 0x0C, 0x0C, 0x1E,
0x1E, 0x07, 0x07, 0x0A, 0x2A, 0x0C, 0x0C, 0x1E, 0x1E, 0x07, 0x07, 0x0A,
0x12, 0x0C, 0x0C, 0x18, 0x18, 0x1C, 0x1C, 0x0C, 0x12, 0x0C, 0x0C, 0x18,
0x18, 0x1C, 0x1C, 0x0C, 0x18, 0x14, 0x14, 0x1E, 0x1E, 0x1C, 0x1C, 0x21,
0x18, 0x14, 0x14, 0x1E, 0x1E, 0x1C, 0x1C, 0x21, 0x0C, 0x07, 0x07, 0x09,
0x09, 0x0F, 0x0F, 0x24, 0x13, 0x1E, 0x1E, 0x05, 0x05, 0x01, 0x01, 0x28,
0x0A, 0x15, 0x15, 0x07, 0x07, 0x1E, 0x1E, 0x0C, 0x0A, 0x15, 0x15, 0x07,
0x07, 0x1E, 0x1E, 0x0C, 0x0C, 0x21, 0x21, 0x1C, 0x1C, 0x18, 0x18, 0x0C,
0x0C, 0x21, 0x21, 0x1C, 0x1C, 0x18, 0x18, 0x0C, 0x21, 0x22, 0x22, 0x1C,
0x1C, 0x1E, 0x1E, 0x1E, 0x21, 0x22, 0x22, 0x1C, 0x1C, 0x1E, 0x1E, 0x1E,
0x24, 0x24, 0x24, 0x0F, 0x0F, 0x09, 0x09, 0x07, 0x28, 0x01, 0x01, 0x04,
0x04, 0x29, 0x29, 0x05, 0x0C, 0x2A, 0x2A, 0x2A, 0x2A, 0x03, 0x03, 0x0E,
0x0C, 0x2A, 0x2A, 0x2A, 0x2A, 0x03, 0x03, 0x0E, 0x0C, 0x12, 0x12, 0x03,
0x03, 0x0E, 0x0E, 0x15, 0x0C, 0x12, 0x12, 0x03, 0x03, 0x0E, 0x0E, 0x15,
0x1E, 0x14, 0x14, 0x18, 0x18, 0x1E, 0x1E, 0x15, 0x1E, 0x14, 0x14, 0x18,
0x18, 0x1E, 0x1E, 0x15, 0x07, 0x0C, 0x0C, 0x15, 0x15, 0x09, 0x09, 0x0A,
0x05, 0x12, 0x12, 0x12, 0x12, 0x03, 0x03, 0x0B, 0x0E, 0x0C, 0x0C, 0x12,
0x12, 0x03, 0x03, 0x12, 0x0E, 0x0C, 0x0C, 0x12, 0x12, 0x03, 0x03, 0x12,
0x15, 0x0C, 0x0C, 0x07, 0x07, 0x03, 0x03, 0x07, 0x15, 0x0C, 0x0C, 0x07,
0x07, 0x03, 0x03, 0x07, 0x15, 0x0A, 0x0A, 0x07, 0x07, 0x03, 0x03, 0x01,
0x15, 0x0A, 0x0A, 0x07, 0x07, 0x03, 0x03, 0x01, 0x0A, 0x07, 0x07, 0x07,
0x07, 0x03, 0x03, 0x01, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x12, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x12, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x07, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x07, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x03, 0x03, 0x07, 0x07, 0x07, 0x01, 0x01, 0x01, 0x03,
0x03, 0x13, 0x13, 0x06, 0x01, 0x01, 0x01, 0x03, 0x03, 0x13, 0x13, 0x06,
0x01, 0x01, 0x01, 0x01, 0x01, 0x07, 0x07, 0x07, 0x01, 0x01, 0x01, 0x01,
0x01, 0x07, 0x07, 0x07, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x13,
0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x13, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x07, 0x07, 0x0E, 0x0E, 0x09, 0x09, 0x15, 0x15, 0x0C,
0x06, 0x06, 0x06, 0x13, 0x13, 0x15, 0x15, 0x07, 0x06, 0x06, 0x06, 0x13,
0x13, 0x15, 0x15, 0x07, 0x07, 0x12, 0x12, 0x13, 0x13, 0x1C, 0x1C, 0x0B,
0x07, 0x12, 0x12, 0x13, 0x13, 0x1C, 0x1C, 0x0B, 0x13, 0x06, 0x06, 0x13,
0x13, 0x0C, 0x0C, 0x08, 0x13, 0x06, 0x06, 0x13, 0x13, 0x0C, 0x0C, 0x08,
0x07, 0x06, 0x06, 0x0F, 0x0F, 0x0A, 0x0A, 0x0F, 0x0C, 0x07, 0x07, 0x09,
0x09, 0x0F, 0x0F, 0x24, 0x07, 0x12, 0x12, 0x05, 0x05, 0x08, 0x08, 0x12,
0x07, 0x12, 0x12, 0x05, 0x05, 0x08, 0x08, 0x12, 0x0B, 0x0E, 0x0E, 0x1C,
0x1C, 0x0F, 0x0F, 0x0B, 0x0B, 0x0E, 0x0E, 0x1C, 0x1C, 0x0F, 0x0F, 0x0B,
0x08, 0x0E, 0x0E, 0x1E, 0x1E, 0x1C, 0x1C, 0x1C, 0x08, 0x0E, 0x0E, 0x1E,
0x1E, 0x1C, 0x1C, 0x1C, 0x0F, 0x1C, 0x1C, 0x09, 0x09, 0x08, 0x08, 0x08,
0x24, 0x24, 0x24, 0x0F, 0x0F, 0x09, 0x09, 0x07, 0x12, 0x12, 0x12, 0x08,
0x08, 0x05, 0x05, 0x12, 0x12, 0x12, 0x12, 0x08, 0x08, 0x05, 0x05, 0x12,
0x0B, 0x0B, 0x0B, 0x0F, 0x0F, 0x1C, 0x1C, 0x0E, 0x0B, 0x0B, 0x0B, 0x0F,
0x0F, 0x1C, 0x1C, 0x0E, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1E, 0x1E, 0x0E,
0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1E, 0x1E, 0x0E, 0x08, 0x08, 0x08, 0x08,
0x08, 0x09, 0x09, 0x1C, 0x07, 0x0C, 0x0C, 0x15, 0x15, 0x09, 0x09, 0x0A,
0x12, 0x07, 0x07, 0x15, 0x15, 0x13, 0x13, 0x06, 0x12, 0x07, 0x07, 0x15,
0x15, 0x13, 0x13, 0x06, 0x0E, 0x0B, 0x0B, 0x1C, 0x1C, 0x13, 0x13, 0x12,
0x0E, 0x0B, 0x0B, 0x1C, 0x1C, 0x13, 0x13, 0x12, 0x0E, 0x08, 0x08, 0x0C,
0x0C, 0x13, 0x13, 0x06, 0x0E, 0x08, 0x08, 0x0C, 0x0C, 0x13, 0x13, 0x06,
0x1C, 0x0F, 0x0F, 0x0A, 0x0A, 0x0F, 0x0F, 0x06, 0x0A, 0x07, 0x07, 0x07,
0x07, 0x03, 0x03, 0x01, 0x06, 0x06, 0x06, 0x13, 0x13, 0x03, 0x03, 0x01,
0x06, 0x06, 0x06, 0x13, 0x13, 0x03, 0x03, 0x01, 0x12, 0x13, 0x13, 0x07,
0x07, 0x01, 0x01, 0x01, 0x12, 0x13, 0x13, 0x07, 0x07, 0x01, 0x01, 0x01,
0x06, 0x0A, 0x0A, 0x06, 0x06, 0x01, 0x01, 0x01, 0x06, 0x0A, 0x0A, 0x06,
0x06, 0x01, 0x01, 0x01, 0x06, 0x13, 0x13, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x07, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x12,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x12, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x08,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x07, 0x06, 0x06, 0x0F, 0x0F, 0x0A, 0x0A, 0x0F, 0x12, 0x06, 0x06, 0x12,
0x12, 0x0A, 0x0A, 0x0F, 0x12, 0x06, 0x06, 0x12, 0x12, 0x0A, 0x0A, 0x0F,
0x08, 0x06, 0x06, 0x06, 0x06, 0x13, 0x13, 0x09, 0x08, 0x06, 0x06, 0x06,
0x06, 0x13, 0x13, 0x09, 0x01, 0x06, 0x06, 0x08, 0x08, 0x07, 0x07, 0x0A,
0x01, 0x06, 0x06, 0x08, 0x08, 0x07, 0x07, 0x0A, 0x01, 0x08, 0x08, 0x08,
0x08, 0x12, 0x12, 0x0C, 0x0F, 0x1C, 0x1C, 0x09, 0x09, 0x08, 0x08, 0x08,
0x0F, 0x0E, 0x0E, 0x2B, 0x2B, 0x2A, 0x2A, 0x28, 0x0F, 0x0E, 0x0E, 0x2B,
0x2B, 0x2A, 0x2A, 0x28, 0x09, 0x0F, 0x0F, 0x01, 0x01, 0x01, 0x01, 0x01,
0x09, 0x0F, 0x0F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0A, 0x12, 0x12, 0x01,
0x01, 0x2C, 0x2C, 0x01, 0x0A, 0x12, 0x12, 0x01, 0x01, 0x2C, 0x2C, 0x01,
0x0C, 0x13, 0x13, 0x2A, 0x2A, 0x2D, 0x2D, 0x2E, 0x08, 0x08, 0x08, 0x08,
0x08, 0x09, 0x09, 0x1C, 0x28, 0x28, 0x28, 0x2A, 0x2A, 0x2B, 0x2B, 0x0E,
0x28, 0x28, 0x28, 0x2A, 0x2A, 0x2B, 0x2B, 0x0E, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x0F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0F,
0x01, 0x01, 0x01, 0x2C, 0x2C, 0x01, 0x01, 0x12, 0x01, 0x01, 0x01, 0x2C,
0x2C, 0x01, 0x01, 0x12, 0x2E, 0x2E, 0x2E, 0x2D, 0x2D, 0x2A, 0x2A, 0x13,
0x1C, 0x0F, 0x0F, 0x0A, 0x0A, 0x0F, 0x0F, 0x06, 0x0E, 0x0F, 0x0F, 0x0A,
0x0A, 0x06, 0x06, 0x06, 0x0E, 0x0F, 0x0F, 0x0A, 0x0A, 0x06, 0x06, 0x06,
0x0F, 0x09, 0x09, 0x13, 0x13, 0x08, 0x08, 0x06, 0x0F, 0x09, 0x09, 0x13,
0x13, 0x08, 0x08, 0x06, 0x12, 0x0A, 0x0A, 0x07, 0x07, 0x08, 0x08, 0x06,
0x12, 0x0A, 0x0A, 0x07, 0x07, 0x08, 0x08, 0x06, 0x13, 0x0C, 0x0C, 0x12,
0x12, 0x08, 0x08, 0x08, 0x06, 0x13, 0x13, 0x01, 0x01, 0x01, 0x01, 0x01,
0x06, 0x12, 0x12, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x12, 0x12, 0x01,
0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01,
0x06, 0x08, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x08, 0x08, 0x08,
0x08, 0x12, 0x12, 0x0C, 0x01, 0x01, 0x01, 0x08, 0x08, 0x06, 0x06, 0x0E,
0x01, 0x01, 0x01, 0x08, 0x08, 0x06, 0x06, 0x0E, 0x01, 0x01, 0x01, 0x01,
0x01, 0x08, 0x08, 0x07, 0x01, 0x01, 0x01, 0x01, 0x01, 0x08, 0x08, 0x07,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x0C, 0x13, 0x13, 0x2A, 0x2A, 0x2D, 0x2D, 0x2E, 0x0E, 0x09, 0x09, 0x07,
0x07, 0x2A, 0x2A, 0x28, 0x0E, 0x09, 0x09, 0x07, 0x07, 0x2A, 0x2A, 0x28,
0x07, 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x06, 0x07, 0x09, 0x09, 0x09,
0x09, 0x07, 0x07, 0x06, 0x08, 0x0F, 0x0F, 0x0D, 0x0D, 0x14, 0x14, 0x23,
0x08, 0x0F, 0x0F, 0x0D, 0x0D, 0x14, 0x14, 0x23, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x2E, 0x2E, 0x2E, 0x2D, 0x2D, 0x2A, 0x2A, 0x13,
0x28, 0x28, 0x28, 0x2A, 0x2A, 0x07, 0x07, 0x09, 0x28, 0x28, 0x28, 0x2A,
0x2A, 0x07, 0x07, 0x09, 0x06, 0x06, 0x06, 0x07, 0x07, 0x09, 0x09, 0x09,
0x06, 0x06, 0x06, 0x07, 0x07, 0x09, 0x09, 0x09, 0x23, 0x23, 0x23, 0x14,
0x14, 0x0D, 0x0D, 0x0F, 0x23, 0x23, 0x23, 0x14, 0x14, 0x0D, 0x0D, 0x0F,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x13, 0x0C, 0x0C, 0x12,
0x12, 0x08, 0x08, 0x08, 0x09, 0x0E, 0x0E, 0x06, 0x06, 0x08, 0x08, 0x01,
0x09, 0x0E, 0x0E, 0x06, 0x06, 0x08, 0x08, 0x01, 0x09, 0x07, 0x07, 0x08,
0x08, 0x01, 0x01, 0x01, 0x09, 0x07, 0x07, 0x08, 0x08, 0x01, 0x01, 0x01,
0x0F, 0x08, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0F, 0x08, 0x08, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
};
const unsigned short avatar_palette [] = {
0x7c1f, 0x0000, 0x08a6, 0x110b, 0x0cc9, 0x0cea, 0x154f, 0x1971, 0x152e,
0x21b5, 0x25f7, 0x110d, 0x2a19, 0x25f9, 0x21d6, 0x1d93, 0x0485, 0x08a7,
0x1950, 0x1db4, 0x3a9d, 0x367c, 0x10c8, 0x194c, 0x4aff, 0x3def, 0x4e73,
0x35ad, 0x2e3a, 0x325b, 0x3ebe, 0x294a, 0x42df, 0x3edf, 0x5f5f, 0x4eff,
0x3213, 0x0973, 0x2e9f, 0x5b3f, 0x39ce, 0x5294, 0x2d6b, 0x14a5, 0x000b,
0x14b1, 0x0c6f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000
};

View File

@ -0,0 +1,28 @@
//
// Created by Wouter Groeneveld on 09/08/18.
//
#ifndef GBA_SPRITE_ENGINE_PROJECT_BULLET_H
#define GBA_SPRITE_ENGINE_PROJECT_BULLET_H
const unsigned char bullet_data [] = {
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A
};
#endif //GBA_SPRITE_ENGINE_PROJECT_BULLET_H

View File

@ -0,0 +1,91 @@
//
// Created by Wouter Groeneveld on 09/08/18.
//
#include <libgba-sprite-engine/sprites/sprite_builder.h>
#include <libgba-sprite-engine/gba_engine.h>
#include <algorithm>
#include <libgba-sprite-engine/background/text_stream.h>
#include "food_scene.h"
#include "avatar.h"
#include "bullet.h"
#define AVATAR_ROTATION_DIFF 300
#define MAX_AMOUNT_OF_BULLETS 40
FoodScene::FoodScene(const std::shared_ptr<GBAEngine> &engine) : Scene(engine) {}
std::vector<Background *> FoodScene::backgrounds() {
return {};
}
std::vector<Sprite *> FoodScene::sprites() {
std::vector<Sprite*> sprites = {
avatar.get() // order is important for affine transformations because of updateSpritesInScene()
};
for(auto& b : bullets) {
if(!b->isOffScreen()) {
sprites.push_back(b.get());
}
}
return sprites;
}
void FoodScene::removeBulletsOffScreen() {
// TODO crashes after this
bullets.erase(
std::remove_if(bullets.begin(), bullets.end(), [](std::unique_ptr<Sprite> &s) { return s->isOffScreen(); }),
bullets.end());
}
void FoodScene::tick(u16 keys) {
avatar->animateToFrame(0);
//removeBulletsOffScreen();
TextStream::instance().setText(std::to_string(bullets.size()) + std::string(" bullets"), 1, 1);
if(keys & KEY_LEFT) {
avatarRotation -= AVATAR_ROTATION_DIFF;
} else if(keys & KEY_RIGHT) {
avatarRotation += AVATAR_ROTATION_DIFF;
}
if(keys & KEY_A) {
if(bullets.size() < MAX_AMOUNT_OF_BULLETS) {
avatar->animateToFrame(1);
bullets.push_back(createBullet());
engine->updateSpritesInScene();
//addSprite(bullets.at(bullets.size() - 1).get());
}
}
avatar->rotate(avatarRotation);
}
std::unique_ptr<Sprite> FoodScene::createBullet() {
// TODO shared bullet data tiles
return this->spriteBuilder->withData(bullet_data, sizeof(bullet_data))
.withSize(SIZE_16_16)
.withVelocity(1, 1)
.withLocation(avatar->getX(), avatar->getY())
.buildPtr();
}
void FoodScene::load() {
foregroundPalette = std::unique_ptr<ForegroundPaletteManager>(new ForegroundPaletteManager(avatar_palette, sizeof(avatar_palette)));
backgroundPalette = std::unique_ptr<BackgroundPaletteManager>(new BackgroundPaletteManager());
spriteBuilder = std::unique_ptr<SpriteBuilder<Sprite>>(new SpriteBuilder<Sprite>);
SpriteBuilder<AffineSprite> affineBuilder;
// Doom avatar copyright iD Software
avatar = affineBuilder.withData(avatar_data, sizeof(avatar_data))
.withSize(SIZE_64_64)
.withAnimated(2, 3)
.withLocation(GBA_SCREEN_WIDTH / 2 - 32, GBA_SCREEN_HEIGHT / 2 - 32)
.buildPtr();
avatar->stopAnimating();
avatarRotation = 0;
}

View File

@ -0,0 +1,36 @@
//
// Created by Wouter Groeneveld on 09/08/18.
//
#ifndef GBA_SPRITE_ENGINE_PROJECT_FOOD_SCENE_H
#define GBA_SPRITE_ENGINE_PROJECT_FOOD_SCENE_H
#include <libgba-sprite-engine/scene.h>
#include <libgba-sprite-engine/sprites/sprite_builder.h>
#include <libgba-sprite-engine/sprites/affine_sprite.h>
class FoodScene : public Scene {
private:
std::unique_ptr<AffineSprite> avatar;
std::vector<std::unique_ptr<Sprite>> bullets;
int avatarRotation;
std::unique_ptr<SpriteBuilder<Sprite>> spriteBuilder;
std::unique_ptr<Sprite> createBullet();
void removeBulletsOffScreen();
public:
explicit FoodScene(const std::shared_ptr<GBAEngine> &engine);
FoodScene(FoodScene& other) = delete;
std::vector<Sprite *> sprites() override;
std::vector<Background *> backgrounds() override;
void load() override;
void tick(u16 keys) override;
};
#endif //GBA_SPRITE_ENGINE_PROJECT_FOOD_SCENE_H

View File

@ -0,0 +1,19 @@
//
// Created by Wouter Groeneveld on 09/08/18.
//
#include <libgba-sprite-engine/gba_engine.h>
#include "food_scene.h"
int main() {
std::shared_ptr<GBAEngine> engine(new GBAEngine());
auto scene = new FoodScene(engine);
engine->setScene(scene);
while (true) {
engine->update();
}
return 0;
}

View File

@ -14,7 +14,7 @@ add_library(${PROJECT_NAME}
src/background/text_stream.cpp
src/background/background.cpp
src/effects/fade_out_scene.cpp
src/sound_control.cpp)
src/sound_control.cpp src/scene.cpp)
target_include_directories(${PROJECT_NAME} PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>

View File

@ -40,6 +40,7 @@ public:
GBAEngine();
void setScene(Scene* scene);
void dynamicallyAddSprite(Sprite* s) { spriteManager.add(s); }
void transitionIntoScene(Scene* scene, SceneEffect* effect);
bool isTransitioning() { return currentEffectForTransition != nullptr; }
@ -53,6 +54,7 @@ public:
u16 readKeys();
void update();
void updateSpritesInScene();
void delay(int times) {
for(int i = 0; i < times; i++){}
}

View File

@ -19,6 +19,8 @@ protected:
std::unique_ptr<BackgroundPaletteManager> backgroundPalette;
std::shared_ptr<GBAEngine> engine;
void addSprite(Sprite* sprite);
public:
ForegroundPaletteManager* getForegroundPalette() { return foregroundPalette.get(); }
BackgroundPaletteManager* getBackgroundPalette() { return backgroundPalette.get(); }

View File

@ -61,7 +61,7 @@ protected:
void setAttributesBasedOnSize(SpriteSize size);
public:
Sprite(const void *imageData, int imageSize, int x, int y, SpriteSize size);
explicit Sprite(const void *imageData, int imageSize, int x, int y, SpriteSize size);
virtual ~Sprite() {}
void makeAnimated(int amountOfFrames, int animationDelay) {
@ -70,6 +70,7 @@ public:
animate();
}
void animate() { this->animating = true; }
void animateToFrame(int frame) { this->currentFrame = frame; }
void stopAnimating() { this->animating = false; }
void setStayWithinBounds(bool b) { stayWithinBounds = b; }
void setVelocity(int dx, int dy) {
@ -91,6 +92,7 @@ public:
int getWidth() { return w; }
int getY() { return y; }
int getCurrentFrame() { return currentFrame; }
bool isOffScreen();
friend class SpriteManager;
};

View File

@ -15,12 +15,13 @@ private:
std::vector<Sprite*> sprites;
void copyOverSpriteOAMToVRAM();
void copyOverImageDataToVRAM(Sprite* s);
void copyOverImageDataToVRAM();
public:
int getSpriteSize() { return sprites.size(); }
void add(const Sprite& sprite);
void add(Sprite* sprite);
void set(std::vector<Sprite*> sprites);
void persist(); // copies over image and palette data to VRAM, modifies sprite OAM indiches
void render(); // copies over OAM buffer to OAM RAM, called in game loop

View File

@ -151,15 +151,18 @@ void GBAEngine::setScene(Scene* scene) {
}
bgPalette->persist();
Allocator::free();
TextStream::instance().persist();
spriteManager.set(scene->sprites());
spriteManager.persist();
for(const auto bg : scene->backgrounds()) {
bg->persist();
}
this->currentScene = scene;
updateSpritesInScene();
}
void GBAEngine::updateSpritesInScene() {
Allocator::free();
spriteManager.set(currentScene->sprites());
spriteManager.persist();
}

10
engine/src/scene.cpp Normal file
View File

@ -0,0 +1,10 @@
//
// Created by Wouter Groeneveld on 09/08/18.
//
#include <libgba-sprite-engine/scene.h>
#include <libgba-sprite-engine/gba_engine.h>
void Scene::addSprite(Sprite *sprite) {
engine->dynamicallyAddSprite(sprite);
}

View File

@ -6,6 +6,7 @@
#include <libgba-sprite-engine/gba/tonc_oam.h>
#include <libgba-sprite-engine/sprites/affine_sprite.h>
#include <libgba-sprite-engine/background/text_stream.h>
void AffineSprite::identity() {
obj_aff_identity(this->affine.get());
@ -46,6 +47,9 @@ void AffineSprite::buildOam(int tileIndex) {
(this->shape_bits << 14);
rebuildOamAttr1ForAffineIndex();
this->affine = std::unique_ptr<OBJ_AFFINE>(new OBJ_AFFINE());
identity();
if(!affine) {
TextStream::instance() << "building";
this->affine = std::unique_ptr<OBJ_AFFINE>(new OBJ_AFFINE());
identity();
}
}

View File

@ -20,6 +20,10 @@ void Sprite::moveTo(int x, int y) {
syncOam();
}
bool Sprite::isOffScreen() {
return x < 0 || x > GBA_SCREEN_WIDTH || y < 0 || y > GBA_SCREEN_HEIGHT;
}
void Sprite::flipHorizontally(bool flip) {
if(flip) {
oam->attr1 |= ATTR1_HFLIP;
@ -42,8 +46,8 @@ void Sprite::syncVelocity() {
}
void Sprite::syncAnimation() {
if(!animating) return;
int newTileIndex = this->tileIndex + (currentFrame * w);
int offset = w == 64 ? 2 : 1; // 64xY sprites don't seem to cut currFrame * w
int newTileIndex = this->tileIndex + (currentFrame * w * offset);
oam->attr2 &= OAM_TILE_OFFSET_CLEAR;
oam->attr2 |= (newTileIndex & OAM_TILE_OFFSET_NEW);
@ -118,7 +122,10 @@ bool Sprite::collidesWith(Sprite &s2) {
void Sprite::buildOam(int tileIndex) {
this->tileIndex = tileIndex;
this->oam = std::unique_ptr<OBJ_ATTR>(new OBJ_ATTR());
if(!oam) {
this->oam = std::unique_ptr<OBJ_ATTR>(new OBJ_ATTR());
}
this->oam->attr0 = ATTR0_Y(this->y) |
ATTR0_MODE(0) |

View File

@ -7,36 +7,37 @@
#include <libgba-sprite-engine/gba/tonc_core.h>
#include <libgba-sprite-engine/allocator.h>
#include <libgba-sprite-engine/background/text_stream.h>
#define MAX_SPRITE_SIZE 128
#define MAX_AFFINE_SIZE 31
void SpriteManager::set(std::vector<Sprite *> sprites) {
void SpriteManager::set(std::vector<Sprite*> sprites) {
initialized = false;
this->sprites.clear();
this->sprites.insert(this->sprites.end(), sprites.begin(), sprites.end());
}
void SpriteManager::add(const Sprite &sprite) {
void SpriteManager::add(Sprite* sprite) {
if(sprites.size() == MAX_SPRITE_SIZE) {
throw std::runtime_error("maximum sprite limit reached");
failure(MaxSpriteSizeReached);
}
const Sprite* sPtr = &sprite;
sprites.push_back(const_cast<Sprite*>(sPtr));
sprites.push_back(sprite);
copyOverImageDataToVRAM(sprite);
}
void SpriteManager::render() {
if(!initialized) {
throw std::runtime_error("can't render before initialization");
failure(Cant_Render_Before_Init);
}
copyOverSpriteOAMToVRAM();
}
void SpriteManager::persist() {
copyOverImageDataToVRAM();
copyOverImageDataToVRAM();
initialized = true;
}
@ -46,7 +47,7 @@ void SpriteManager::copyOverSpriteOAMToVRAM() {
for(auto sprite : this->sprites) {
if(affineIndex > MAX_AFFINE_SIZE) {
throw std::runtime_error("max amount of sprites with affine matriches reached");
failure(MaxSpritesWithAffineReached);
}
sprite->update();
@ -70,11 +71,15 @@ void SpriteManager::copyOverSpriteOAMToVRAM() {
}
}
void SpriteManager::copyOverImageDataToVRAM() {
for(auto sprite : this->sprites) {
const auto allocated = Allocator::allocateObjectTiles(sprite->imageSize);
dma3_cpy(allocated.pointer(), sprite->data, allocated.size);
void SpriteManager::copyOverImageDataToVRAM(Sprite *sprite) {
const auto allocated = Allocator::allocateObjectTiles(sprite->imageSize);
dma3_cpy(allocated.pointer(), sprite->data, allocated.size);
sprite->buildOam(allocated.getTileLocation());
sprite->buildOam(allocated.getTileLocation());
}
void SpriteManager::copyOverImageDataToVRAM() {
for(auto sprite : sprites) {
copyOverImageDataToVRAM(sprite);
}
}