Day 35 complete

This commit is contained in:
Edward R. Gonzalez 2023-10-17 23:50:28 -04:00
parent a4f07c67d2
commit 8d66887b02
10 changed files with 833 additions and 162 deletions

View File

@ -7,6 +7,7 @@
#include "handmade.hpp"
#include "tile_map.cpp"
#include "random.cpp
#endif
NS_ENGINE_BEGIN
@ -49,10 +50,10 @@ struct EngineActions
struct EngineState
{
hh::Memory game_memory;
MemoryArena world_arena;
World* world;
World* world;
f32 auto_snapshot_interval;
f32 auto_snapshot_timer;
@ -164,7 +165,7 @@ void input_poll_player_actions( InputState* input, hh::PlayerActions* actions )
}
}
internal
internal
void output_sound( EngineState* state, AudioBuffer* sound_buffer, GetSoundSampleValueFn* get_sample_value )
{
s16* sample_out = sound_buffer->samples;
@ -241,52 +242,14 @@ void draw_debug_point(OffscreenBuffer* back_buffer, World* world, TileMapPositio
TileMap* tile_map = world->tile_map;
draw_rectangle(back_buffer,
pos.x * tile_map->tile_meters_to_pixels + world->tile_lower_left_x + scast(f32, pos.tile_x * tile_map->tile_size_in_pixels),
pos.y * tile_map->tile_meters_to_pixels + world->tile_lower_left_y + scast(f32, pos.tile_y * tile_map->tile_size_in_pixels),
(pos.x + 0.1f) * tile_map->tile_meters_to_pixels + world->tile_lower_left_x + scast(f32, pos.tile_x * tile_map->tile_size_in_pixels),
(pos.y + 0.1f) * tile_map->tile_meters_to_pixels + world->tile_lower_left_y + scast(f32, pos.tile_y * tile_map->tile_size_in_pixels),
pos.x * world->tile_meters_to_pixels + world->tile_lower_left_x + scast(f32, pos.tile_x * world->tile_size_in_pixels),
pos.y * world->tile_meters_to_pixels + world->tile_lower_left_y + scast(f32, pos.tile_y * world->tile_size_in_pixels),
(pos.x + 0.1f) * world->tile_meters_to_pixels + world->tile_lower_left_x + scast(f32, pos.tile_x * world->tile_size_in_pixels),
(pos.y + 0.1f) * world->tile_meters_to_pixels + world->tile_lower_left_y + scast(f32, pos.tile_y * world->tile_size_in_pixels),
red, green, blue);
}
internal
void MemoryArena_init( MemoryArena* arena, ssize size, Byte* storage )
{
arena->storage = storage;
arena->size = size;
arena->used = 0;
}
#define MemoryArena_push_struct( arena, type ) MemoryArena__push_struct<type>( arena )
template< typename Type > inline
Type* MemoryArena__push_struct( MemoryArena* arena )
{
assert( arena != nullptr );
ssize type_size = sizeof( Type );
assert( arena->used + type_size <= arena->size );
Type* result = rcast(Type*, arena->storage + arena->used);
arena->used += type_size;
return result;
}
#define MemoryArena_push_array( arena, type, num ) MemoryArena__push_array<type>( arena, num )
template< typename Type> inline
Type* MemoryArena__push_array( MemoryArena* arena, ssize num )
{
assert( arena != nullptr );
ssize mem_amount = sizeof( Type ) * num;
assert( arena->used + mem_amount <= arena->size );
Type* result = rcast(Type*, arena->storage + arena->used);
arena->used += mem_amount;
return result;
}
Engine_API
void on_module_reload( Memory* memory, platform::ModuleAPI* platfom_api )
{
@ -330,17 +293,18 @@ void startup( OffscreenBuffer* back_buffer, Memory* memory, platform::ModuleAPI*
state->game_memory.persistent = rcast(Byte*, memory->persistent) + state->game_memory.persistent_size;
state->game_memory.transient_size = memory->transient_size / Memory::game_memory_factor;
state->game_memory.transient = rcast(Byte*, memory->transient) + state->game_memory.transient_size;
// World setup
{
ssize world_arena_size = memory->engine_persistent_size() - sizeof(EngineState);
Byte* world_arena_storage = memory->persistent + sizeof(EngineState);
MemoryArena_init( & state->world_arena, world_arena_size, world_arena_storage );
state->world = MemoryArena_push_struct( & state->world_arena, World);
MemoryArena::init( & state->world_arena, world_arena_size, world_arena_storage );
//state->world = MemoryArena_push_struct( & state->world_arena, World);
state->world = state->world_arena.push_struct( World );
World* world = state->world;
TileMap* tile_map = MemoryArena_push_struct( & state->world_arena, TileMap);
TileMap* tile_map = state->world_arena.push_struct( TileMap );
world->tile_map = tile_map;
tile_map->chunk_shift = 4;
@ -349,51 +313,172 @@ void startup( OffscreenBuffer* back_buffer, Memory* memory, platform::ModuleAPI*
tile_map->tile_chunks_num_x = 128;
tile_map->tile_chunks_num_y = 128;
tile_map->tile_chunks_num_z = 2;
tile_map->chunks = MemoryArena_push_array( & state->world_arena, TileChunk, tile_map->tile_chunks_num_x * tile_map->tile_chunks_num_y );
for ( s32 y = 0; y < tile_map->tile_chunks_num_y; ++ y )
{
for ( s32 x = 0; x < tile_map->tile_chunks_num_x; ++ x )
{
ssize num_tiles = tile_map->chunk_dimension * tile_map->chunk_dimension;
tile_map->chunks[ (y * tile_map->tile_chunks_num_x) + x ].tiles = MemoryArena_push_array( & state->world_arena, u32, num_tiles );
}
}
ssize num_chunks = tile_map->tile_chunks_num_x * tile_map->tile_chunks_num_y * tile_map->tile_chunks_num_z;
tile_map->chunks = state->world_arena.push_array( TileChunk, num_chunks );
//TileChunk temp_chunk;
//temp_chunk.tiles = rcast( u32*, & temp_tiles );
//tile_map->chunks = & temp_chunk;
tile_map->tile_size_in_meters = 1.4f;
tile_map->tile_size_in_pixels = 85;
tile_map->tile_meters_to_pixels = scast(f32, tile_map->tile_size_in_pixels) / tile_map->tile_size_in_meters;
tile_map->tile_size_in_meters = 1.4f;
world->tile_size_in_pixels = 85;
world->tile_meters_to_pixels = scast(f32, world->tile_size_in_pixels) / tile_map->tile_size_in_meters;
f32 tile_size_in_pixels = scast(f32, tile_map->tile_size_in_pixels);
f32 tile_size_in_pixels = scast(f32, world->tile_size_in_pixels);
world->tile_lower_left_x = -( tile_size_in_pixels * 0.5f);
world->tile_lower_left_y = +( tile_size_in_pixels * 0.25f) + scast(f32, back_buffer->height);
u32 tiles_per_screen_x = 17;
u32 tiles_per_screen_y = 9;
for ( u32 screen_y = 0; screen_y < 32; ++ screen_y )
u32 screen_x = 0;
u32 screen_y = 0;
u32 rng_index = 0;
b32 door_left = false;
b32 door_right = false;
b32 door_top = false;
b32 door_bottom = false;
b32 door_up = false;
b32 door_down = false;
u32 abs_tile_z = 0;
for ( u32 screen_index = 0; screen_index < 100; ++ screen_index )
{
for ( u32 screen_x = 0; screen_x < 32; ++ screen_x )
// TODO(Ed) : We need a proper RNG.
assert( rng_index < array_count(RNG_Table) )
u32 random_choice;
if ( door_up || door_down )
{
for (u32 tile_y = 0; tile_y < tiles_per_screen_y; ++ tile_y )
random_choice = RNG_Table[ rng_index ] % 2;
}
else
{
random_choice = RNG_Table[ rng_index ] % 3;
}
++ rng_index;
if ( random_choice == 2 )
{
if ( abs_tile_z == 0 )
{
for ( u32 tile_x = 0; tile_x < tiles_per_screen_x; ++ tile_x )
{
u32 abs_tile_x = screen_x * tiles_per_screen_x + tile_x;
u32 abs_tile_y = screen_y * tiles_per_screen_y + tile_y;
u32 tile_value = tile_x == tile_y && tile_y % 2 ? 1 : 0;
TileMap_set_tile_value( & state->world_arena, world->tile_map, abs_tile_x, abs_tile_y, tile_value );
}
door_up = true;
}
else
{
door_down = true;
}
}
else if ( random_choice == 1 )
{
door_right = true;
}
else
{
door_top = true;
}
for (u32 tile_y = 0; tile_y < tiles_per_screen_y; ++ tile_y )
{
for ( u32 tile_x = 0; tile_x < tiles_per_screen_x; ++ tile_x )
{
u32 abs_tile_x = screen_x * tiles_per_screen_x + tile_x;
u32 abs_tile_y = screen_y * tiles_per_screen_y + tile_y;
u32 tile_value = 1;
bool in_middle_x = tile_x == (tiles_per_screen_x / 2);
bool in_middle_y = tile_y == (tiles_per_screen_y / 2);
bool on_right = tile_x == (tiles_per_screen_x - 1);
bool on_left = tile_x == 0;
bool on_bottom = tile_y == 0;
bool on_top = tile_y == (tiles_per_screen_y - 1);
if ( on_left && (! in_middle_y || ! door_left ))
{
tile_value = 2;
}
if ( on_right && (! in_middle_y || ! door_right ))
{
tile_value = 2;
}
if ( on_bottom && (! in_middle_x || ! door_bottom ))
{
tile_value = 2;
}
if ( on_top && (! in_middle_x || ! door_top ))
{
tile_value = 2;
}
if ( tile_x == 6 && tile_y == 6 )
{
if ( door_up )
{
tile_value = 3;
}
else if ( door_down )
{
tile_value = 4;
}
}
// u32 tile_value = tile_x == tile_y && tile_y % 2 ? 1 : 0;
TileMap_set_tile_value( & state->world_arena, world->tile_map, abs_tile_x, abs_tile_y, abs_tile_z, tile_value );
}
}
door_left = door_right;
door_bottom = door_top;
if ( door_up )
{
door_down = true;
door_up = false;
}
else if ( door_down )
{
door_up = true;
door_down = false;
}
else
{
door_up = false;
door_down = false;
}
door_right = false;
door_top = false;
if ( random_choice == 2 )
{
if ( abs_tile_z == 0 )
{
abs_tile_z = 1;
}
else
{
abs_tile_z = 0;
}
}
else if ( random_choice == 1 )
{
screen_x += 1;
}
else
{
screen_y += 1;
}
}
}
hh::GameState* game_state = rcast( hh::GameState*, state->game_memory.persistent );
assert( sizeof(hh::GameState) <= state->game_memory.persistent_size );
@ -563,18 +648,18 @@ void update_and_render( f32 delta_time, InputState* input, OffscreenBuffer* back
World* world = state->world;
TileMap* tile_map = world->tile_map;
f32 tile_size_in_pixels = scast(f32, tile_map->tile_size_in_pixels);
f32 tile_size_in_pixels = scast(f32, world->tile_size_in_pixels);
f32 player_half_width = player->width / 2.f;
f32 player_quarter_height = player->height / 4.f;
input_poll_player_actions( input, & player_actions );
{
f32 move_speed = 2.f;
f32 move_speed = 6.f;
if ( player_actions.sprint )
{
move_speed = 6.f;
move_speed = 24.f;
}
f32 new_player_pos_x = player->position.x;
@ -672,36 +757,51 @@ void update_and_render( f32 delta_time, InputState* input, OffscreenBuffer* back
{
u32 col = player->position.tile_x + relative_col;
u32 row = player->position.tile_y + relative_row;
u32 tileID = TileMap_get_tile_value( tile_map, col, row );
u32 tile_id = TileMap_get_tile_value( tile_map, col, row, player->position.tile_z );
f32 color[3] = { 0.15f, 0.15f, 0.15f };
if ( tileID == 1 )
if ( tile_id > 0 )
{
color[0] = 0.22f;
color[1] = 0.22f;
color[2] = 0.22f;
if ( tile_id == 2 )
{
color[0] = 0.22f;
color[1] = 0.22f;
color[2] = 0.22f;
}
if ( tile_id == 3 )
{
color[0] = 0.12f;
color[1] = 0.12f;
color[2] = 0.12f;
}
if ( tile_id == 4 )
{
color[0] = 0.52f;
color[1] = 0.52f;
color[2] = 0.52f;
}
if ( row == player->position.tile_y && col == player->position.tile_x )
{
color[0] = 0.44f;
color[1] = 0.3f;
color[2] = 0.3f;
}
f32 center_x = screen_center_x + scast(f32, relative_col) * tile_size_in_pixels - player->position.x * world->tile_meters_to_pixels;
f32 center_y = screen_center_y - scast(f32, relative_row) * tile_size_in_pixels + player->position.y * world->tile_meters_to_pixels;
f32 min_x = center_x - tile_size_in_pixels * 0.5f;
f32 min_y = center_y - tile_size_in_pixels * 0.5f;
f32 max_x = center_x + tile_size_in_pixels * 0.5f;
f32 max_y = center_y + tile_size_in_pixels * 0.5f;
draw_rectangle( back_buffer
, min_x, min_y
, max_x, max_y
, color[0], color[1], color[2] );
}
if ( row == player->position.tile_y && col == player->position.tile_x )
{
color[0] = 0.44f;
color[1] = 0.3f;
color[2] = 0.3f;
}
f32 center_x = screen_center_x + scast(f32, relative_col) * tile_size_in_pixels - player->position.x * tile_map->tile_meters_to_pixels;
f32 center_y = screen_center_y - scast(f32, relative_row) * tile_size_in_pixels + player->position.y * tile_map->tile_meters_to_pixels;
f32 min_x = center_x - tile_size_in_pixels * 0.5f;
f32 min_y = center_y - tile_size_in_pixels * 0.5f;
f32 max_x = center_x + tile_size_in_pixels * 0.5f;
f32 max_y = center_y + tile_size_in_pixels * 0.5f;
draw_rectangle( back_buffer
, min_x, min_y
, max_x, max_y
, color[0], color[1], color[2] );
}
}
@ -710,8 +810,8 @@ void update_and_render( f32 delta_time, InputState* input, OffscreenBuffer* back
f32 player_green = 0.7f;
f32 player_blue = 0.3f;
f32 player_tile_x_offset = screen_center_x + scast(f32, player->position.tile_x) * tile_map->tile_meters_to_pixels + player->position.x * tile_map->tile_meters_to_pixels;
f32 player_tile_y_offset = screen_center_y - scast(f32, player->position.tile_y) * tile_map->tile_meters_to_pixels + player->position.y * tile_map->tile_meters_to_pixels;
f32 player_tile_x_offset = screen_center_x + scast(f32, player->position.tile_x) * world->tile_meters_to_pixels + player->position.x * world->tile_meters_to_pixels;
f32 player_tile_y_offset = screen_center_y - scast(f32, player->position.tile_y) * world->tile_meters_to_pixels + player->position.y * world->tile_meters_to_pixels;
f32 player_screen_pos_x = screen_center_x;
f32 player_screen_pos_y = screen_center_y;
@ -719,8 +819,8 @@ void update_and_render( f32 delta_time, InputState* input, OffscreenBuffer* back
// player_min_x = player_tile_x_offset - player_half_width * world;
draw_rectangle( back_buffer
, player_screen_pos_x - player_half_width * tile_map->tile_meters_to_pixels, player_screen_pos_y - player->height * tile_map->tile_meters_to_pixels
, player_screen_pos_x + player_half_width * tile_map->tile_meters_to_pixels, player_screen_pos_y
, player_screen_pos_x - player_half_width * world->tile_meters_to_pixels, player_screen_pos_y - player->height * world->tile_meters_to_pixels
, player_screen_pos_x + player_half_width * world->tile_meters_to_pixels, player_screen_pos_y
, player_red, player_green, player_blue );
// Auto-Snapshot percent bar

View File

@ -90,30 +90,66 @@ struct Memory
// Engine-wide recording & playback loop.
s32 engine_loop_active;
s32 game_loop_active;
//ReplayData replay;
#endif
// The game will have 1/4 of persistent's memory available ot it.
static constexpr
ssize game_memory_factor = 4;
ssize engine_persistent_size()
{
return persistent_size - persistent_size / game_memory_factor;
}
ssize total_size()
{
return persistent_size + transient_size;
}
};
// Allocator member-interface macros
#define push_struct( type ) push__struct<type>()
#define push_array( type, num ) push__array<type>( num )
struct MemoryArena
{
Byte* storage;
ssize size;
ssize used;
static
void init( MemoryArena* arena, ssize size, Byte* storage )
{
arena->storage = storage;
arena->size = size;
arena->used = 0;
}
template< typename Type >
Type* push__struct()
{
ssize type_size = sizeof( Type );
assert( used + type_size <= size );
Type* result = rcast(Type*, storage + used);
used += type_size;
return result;
}
template< typename Type >
Type* push__array( ssize num )
{
ssize mem_amount = sizeof( Type ) * num;
assert( used + mem_amount <= size );
Type* result = rcast(Type*, storage + used);
used += mem_amount;
return result;
}
};
struct OffscreenBuffer
@ -136,10 +172,12 @@ struct AudioBuffer
struct World
{
// TODO(Ed) : Remove
f32 tile_lower_left_x;
f32 tile_lower_left_y;
f32 tile_meters_to_pixels;
s32 tile_size_in_pixels;
TileMap* tile_map;
};

524
project/engine/random.cpp Normal file
View File

@ -0,0 +1,524 @@
#if INTELLISENSE_DIRECTIVES
#include "engine.hpp"
#endif
NS_ENGINE_BEGIN
global
u32 RNG_Table[]
{
0x4f0143b, 0x3402005, 0x26f2b01, 0x22796b6, 0x57343bb, 0x2d9954e, 0x06f9425, 0x1789180,
0x57d8fab, 0x5365d9c, 0x0e9ec55, 0x2a623e0, 0x366e05d, 0x3759f45, 0x1b4d151, 0x35a5411,
0x59e734b, 0x211c9e4, 0x1b0df4d, 0x50d423d, 0x3b18f5b, 0x5066bed, 0x0aa03be, 0x2b66c73,
0x21a0ea3, 0x50d821c, 0x4628aed, 0x2456259, 0x2a178ad, 0x4b3bf40, 0x0185588, 0x5ecf044,
0x48a6c64, 0x5585c49, 0x0bf0dae, 0x03aeb87, 0x0677916, 0x0aca65a, 0x42534d2, 0x226d712,
0x03713ed, 0x4a5afa1, 0x4f2f545, 0x30dff53, 0x0d98c9d, 0x4b43caa, 0x54cfe7a, 0x5c5a54e,
0x4816e78, 0x30f9b01, 0x110677f, 0x44c0f3e, 0x03ee6b3, 0x1ce05d2, 0x1beca77, 0x3011e81,
0x1c0e238, 0x27039e5, 0x15242d4, 0x0386766, 0x10a7455, 0x5f2ea75, 0x4291cb8, 0x2b33e48,
0x12405ca, 0x40bd964, 0x3792675, 0x4c38386, 0x204dce0, 0x41023d7, 0x0f70768, 0x43a95f7,
0x16280f9, 0x42566bd, 0x160d0b5, 0x2b6dcfd, 0x390b16d, 0x41768ff, 0x26ed0f2, 0x2d906f1,
0x1ade480, 0x44f6e26, 0x0c71504, 0x2a605c8, 0x4cf4128, 0x3983aa1, 0x2d20133, 0x4c677ca,
0x014eed0, 0x3c94d24, 0x2bec8fc, 0x1006c95, 0x0a57f1a, 0x16d2803, 0x1fe5fd5, 0x2560dfe,
0x03a77e0, 0x1ae35cc, 0x2e15cee, 0x45c1621, 0x4a8e6a2, 0x53b3af4, 0x16b64db, 0x2602c93,
0x31fa92e, 0x3137d85, 0x4351ce9, 0x03ca2db, 0x4b7a27e, 0x28e3846, 0x289e3b4, 0x3e9a0fe,
0x041fc34, 0x2400db4, 0x5740222, 0x072c880, 0x5330621, 0x305fac0, 0x30bba4c, 0x1d1bcc0,
0x46e3749, 0x27f3a6b, 0x51dfd7e, 0x1b99797, 0x078f825, 0x0899824, 0x3d87dfb, 0x1506d51,
0x41b2e1b, 0x5a7e30b, 0x42b665d, 0x40c1412, 0x2dfcfd6, 0x0f64f3f, 0x2effce1, 0x181eda6,
0x0f7d529, 0x481718b, 0x4e872c9, 0x22ce1cc, 0x55269e9, 0x0e69c54, 0x0992a2f, 0x0e1cd99,
0x3bcf0ed, 0x0dbc5f2, 0x2e58639, 0x2a8846f, 0x2737a5d, 0x3d5fc85, 0x1c1fc2d, 0x29ce3d6,
0x4f8ee3f, 0x426dc27, 0x223db0e, 0x3e0d8d5, 0x5a28a7a, 0x2587f0a, 0x36a54cf, 0x23887bb,
0x22cc929, 0x595e059, 0x33fed84, 0x4f7042e, 0x311c187, 0x430f215, 0x3ab4245, 0x2116700,
0x30186b9, 0x5312195, 0x300262d, 0x35e2b65, 0x5280730, 0x1365bcd, 0x466dc33, 0x22bf5cc,
0x34a3fb1, 0x172fb52, 0x0a9cde5, 0x142f318, 0x2731995, 0x58eb3bd, 0x1693e13, 0x25a9cf1,
0x05c235e, 0x08a601d, 0x2432351, 0x2061136, 0x422f956, 0x33fba4a, 0x5c76788, 0x5b0387f,
0x0e3a118, 0x4c4f4f0, 0x49726f7, 0x4600fb2, 0x284a1fc, 0x47d625f, 0x4a6127d, 0x18b4cc6,
0x2d69328, 0x04a79b2, 0x59705c2, 0x550efbe, 0x3d43be5, 0x21d316b, 0x4e872d3, 0x34b4339,
0x5ab279c, 0x31ab38f, 0x28dfd4a, 0x46c8148, 0x3222416, 0x299c85d, 0x0ff8604, 0x5b86120,
0x3fe7e78, 0x0c421d7, 0x4c8dab6, 0x25e37ee, 0x42e2c78, 0x1ba3101, 0x1d26b60, 0x557e4bf,
0x5c48926, 0x38b258a, 0x44728e4, 0x482e0dd, 0x4434fa2, 0x2fce17b, 0x350211d, 0x023370f,
0x0f6657f, 0x23d4f4c, 0x3b18d0c, 0x3b1e0b6, 0x1dcdd39, 0x034761f, 0x4df128d, 0x2945257,
0x460e7e4, 0x1ce4d80, 0x0a8e6a2, 0x5eb784b, 0x0853730, 0x2ea3a05, 0x09b717b, 0x5ce8362,
0x5360703, 0x06c1609, 0x51604cf, 0x17e01d2, 0x40bf132, 0x32a9935, 0x15aa9d8, 0x4912351,
0x51f7652, 0x027aa0a, 0x24addd6, 0x3d2c538, 0x3a7d54a, 0x40adb17, 0x0fdb245, 0x557c53d,
0x4eb9775, 0x2c95a30, 0x4b3d29d, 0x468d608, 0x5bf85f6, 0x33de0cb, 0x394ca9e, 0x4d7166f,
0x3cb570d, 0x3b7b3c9, 0x5292bfb, 0x09d2662, 0x0510f39, 0x3267933, 0x53a5fe9, 0x0873a43,
0x59e9de2, 0x0b5c941, 0x24f78c4, 0x54fa1c8, 0x0da6aed, 0x4df5f5d, 0x1ea3ccc, 0x3ac14aa,
0x40d25fd, 0x331a3ae, 0x5257579, 0x0030e95, 0x14995ad, 0x4879608, 0x3c8bbf4, 0x2715173,
0x03654fd, 0x3767b2f, 0x3b90be2, 0x44fd28e, 0x023618d, 0x2bdcfdb, 0x0231780, 0x0bf178c,
0x3166bab, 0x57327db, 0x203c21e, 0x40fc81f, 0x35ff817, 0x39f114f, 0x5ae772c, 0x3e6591d,
0x5a192a5, 0x05b9ee7, 0x3349792, 0x34b012d, 0x2c0ddbf, 0x27aba82, 0x30ceeec, 0x2ec25f9,
0x1aae3f5, 0x2773ffb, 0x196102d, 0x4bf0762, 0x42b929f, 0x354d296, 0x220ee6b, 0x3fc80c0,
0x120d332, 0x01b7679, 0x2690014, 0x0563acf, 0x502ff24, 0x14cbc08, 0x2f6db6d, 0x4b741ac,
0x39fa332, 0x20bcf75, 0x4b9b111, 0x0c8595a, 0x3d95fb4, 0x33bb9a1, 0x08932ee, 0x53bf013,
0x2f2df9d, 0x1e70ce1, 0x4b13619, 0x4078eb6, 0x3ffc3ce, 0x5e56f4c, 0x3d456ca, 0x3130295,
0x3c69442, 0x152dfc8, 0x0808c9b, 0x3bc2876, 0x141ac03, 0x1a962ea, 0x0baaa86, 0x48715cf,
0x2910d74, 0x5023627, 0x0460e1e, 0x1ad8724, 0x1e402fc, 0x1892985, 0x0c039f6, 0x2d83a4a,
0x1947c37, 0x3dd189a, 0x407d540, 0x02e9ef6, 0x5dc7b05, 0x0623d84, 0x47df5b4, 0x37b191f,
0x39bc842, 0x2a89dcc, 0x444809e, 0x009b253, 0x106b1b6, 0x56bf97c, 0x35cd1a7, 0x5713178,
0x52ce61b, 0x13ca28c, 0x186ab5f, 0x53a6c2e, 0x42e5924, 0x4214750, 0x407ab66, 0x199dc40,
0x10bfae2, 0x54592e8, 0x4c9bfad, 0x589ac54, 0x2315075, 0x411068c, 0x1431637, 0x05de9e5,
0x3365f7f, 0x55408fa, 0x4306140, 0x0a3e8e6, 0x27eff3b, 0x441f9ad, 0x1e746ba, 0x478f925,
0x24848e3, 0x5709a30, 0x5a610f9, 0x31ae341, 0x2c460a3, 0x49fd92c, 0x505237d, 0x4a8cf5e,
0x4c00f7a, 0x3dec4eb, 0x3c290ec, 0x3fe1a17, 0x0f28ff9, 0x0f6cda4, 0x14126bb, 0x519748e,
0x2a051bc, 0x1a9e8c4, 0x169f87c, 0x0b0d11b, 0x212d2bd, 0x11819c3, 0x3b6dbcb, 0x4f0e0af,
0x2ac62ef, 0x5e75958, 0x0ef9f89, 0x4bce875, 0x5008515, 0x301e851, 0x4e8dda8, 0x52ade69,
0x466ec50, 0x117a672, 0x257437a, 0x43bcb00, 0x1f8f710, 0x4a54cfc, 0x08aeb47, 0x3433312,
0x334d0ad, 0x349e3bb, 0x5847e7c, 0x2ae4a79, 0x4a69da5, 0x587e061, 0x31c06ee, 0x3303bc9,
0x5349932, 0x2100ca8, 0x04bf772, 0x10e268d, 0x2105aee, 0x5bf4955, 0x02b5161, 0x49d4df2,
0x167617c, 0x45c4246, 0x3bc5717, 0x5f38db2, 0x21e208d, 0x1232c86, 0x05df3f1, 0x3674470,
0x068c79f, 0x32a1868, 0x229f61f, 0x179843b, 0x3865c40, 0x430cb20, 0x31fbff7, 0x26d64fa,
0x27ee976, 0x03f0c7c, 0x265d3f8, 0x50d6255, 0x1a125ac, 0x1bd06aa, 0x53c4196, 0x0439728,
0x4c46f9e, 0x0200d95, 0x1f76335, 0x1ad8da2, 0x523da1c, 0x12d7ace, 0x10bc9fe, 0x1689423,
0x49f47bb, 0x549700b, 0x02f54e6, 0x3787067, 0x463b32b, 0x18db1c0, 0x44c4097, 0x5616172,
0x23359d3, 0x0945145, 0x3a2d2b8, 0x50fddaf, 0x2f8e2e8, 0x5c6f839, 0x25d0091, 0x4ad3e06,
0x53203f9, 0x2ef93a8, 0x4932a1a, 0x19f4bbd, 0x1ab9a75, 0x44c480a, 0x4e806c1, 0x1d57648,
0x353faa0, 0x0d7ea94, 0x0808d11, 0x4aded6e, 0x4525c09, 0x36d4ee6, 0x463203d, 0x53049ac,
0x1307e79, 0x1f4f1e9, 0x291bb6a, 0x055f1f9, 0x159b03c, 0x5945b54, 0x5bfbf5e, 0x251de9e,
0x560b32d, 0x1ae529b, 0x49a4dd5, 0x4dd2a5d, 0x4ac261b, 0x4d48086, 0x5dd4289, 0x177a133,
0x457495c, 0x2adbd76, 0x3776da4, 0x5275e1a, 0x1ad0e27, 0x3403f32, 0x082f3ea, 0x51f8f64,
0x44dbfad, 0x4da1d15, 0x1bd8194, 0x0b98547, 0x0730172, 0x3d7d457, 0x09d0dad, 0x38fae32,
0x17601bc, 0x21c440c, 0x50ba349, 0x44842ed, 0x0cb28e6, 0x4bceec7, 0x28f183f, 0x5952a31,
0x2c98a95, 0x2359477, 0x401429c, 0x1052dd0, 0x04b42e7, 0x26654a2, 0x3f6418e, 0x25ef7be,
0x0290f29, 0x175e101, 0x3cb28c0, 0x206dd81, 0x3909ab0, 0x441b637, 0x46e2bf5, 0x5c3b27b,
0x2150cb5, 0x00418a4, 0x47a91b6, 0x02ce251, 0x23530c9, 0x072f631, 0x1394da2, 0x156e035,
0x2e43c6f, 0x53129ef, 0x235c077, 0x51fb2d4, 0x20261fc, 0x1d8d8ce, 0x427b68c, 0x34805ef,
0x24032e2, 0x2cdb326, 0x450f713, 0x5a9df2b, 0x4e0a5cb, 0x4d1bbbc, 0x0196e47, 0x3efc5b5,
0x2a3fc7d, 0x1a1a983, 0x3b18b91, 0x290aedc, 0x3533ee7, 0x3bff002, 0x21b4683, 0x364e3b9,
0x5ab4d51, 0x3d624b0, 0x332231e, 0x25af8dd, 0x24cb453, 0x18a5460, 0x12238b7, 0x37d5df2,
0x24b7d60, 0x44db9ee, 0x4a71e48, 0x0472775, 0x0338867, 0x2b3c1c9, 0x2c5a402, 0x518ba40,
0x3f92fc3, 0x04201c2, 0x4b1d69d, 0x3d56e30, 0x3552214, 0x13429e6, 0x3407619, 0x01beea0,
0x5a8df4f, 0x5805a61, 0x4df5178, 0x0266082, 0x40df736, 0x0757347, 0x47d1d5f, 0x27695d3,
0x00a81d5, 0x3759bc2, 0x12f3c66, 0x594fd93, 0x5c29d37, 0x363acd6, 0x1b4558c, 0x4abbda0,
0x1127991, 0x35ab84c, 0x537fa78, 0x1f71ab8, 0x0e4adb2, 0x2293c6e, 0x361af30, 0x0483560,
0x31d07c4, 0x0dd01bd, 0x3468e4f, 0x2012173, 0x4175b07, 0x38e8998, 0x3f39436, 0x451ac7d,
0x10331b2, 0x4bde6fd, 0x03fe204, 0x47463cd, 0x5381bdd, 0x054b077, 0x2a17deb, 0x3d1b711,
0x5ab1679, 0x490d81f, 0x37b3c0a, 0x12272c3, 0x3ba19f4, 0x2df475c, 0x2486527, 0x40e9c52,
0x0fbd0e5, 0x272211c, 0x47fdfc3, 0x4cf2c1d, 0x56284eb, 0x44ee47d, 0x2409bfd, 0x02c2230,
0x1be6f72, 0x3fc3c3d, 0x28f32d8, 0x3ed1670, 0x3f0cf4e, 0x4a68dd4, 0x2463da5, 0x44a3cd1,
0x068f53d, 0x12315f5, 0x4410f0d, 0x2c846e0, 0x0e715e8, 0x249bab5, 0x21654a7, 0x511bb18,
0x0985f31, 0x0ebc851, 0x0a33373, 0x5800fab, 0x549af43, 0x3055655, 0x30c152b, 0x0350664,
0x5514e58, 0x2a119c1, 0x01fa149, 0x508b86e, 0x0e79d10, 0x2ac25a0, 0x0f8e26b, 0x18747c0,
0x013e8be, 0x40b811f, 0x4f4ad82, 0x4f5a3c3, 0x3dd208a, 0x4904312, 0x5358f23, 0x4f123df,
0x529dbf7, 0x3645edd, 0x0f2d9a7, 0x42e4890, 0x2cfbc18, 0x0b8d389, 0x061914a, 0x3e92dd2,
0x2f54d4f, 0x4532db3, 0x4db46e0, 0x2baed0e, 0x555f307, 0x2278251, 0x1d82f56, 0x3f4b42a,
0x13b2af5, 0x312cc8e, 0x36854bf, 0x0f9910e, 0x2d5b4e3, 0x21d3b41, 0x43d99b0, 0x0a94fa7,
0x322ae0b, 0x2df0db5, 0x1f80b21, 0x4d493a2, 0x45b20f4, 0x059b9e5, 0x22d1e03, 0x4519213,
0x34b6dc2, 0x0461c6b, 0x52bdd26, 0x4caec56, 0x06cc872, 0x4e6220f, 0x186e013, 0x352941d,
0x1dcc7ed, 0x087b4c0, 0x5293c91, 0x2b3cc2f, 0x56ac502, 0x074cae5, 0x46ae019, 0x4463c0a,
0x206727a, 0x24e5b66, 0x24837ae, 0x11be471, 0x4a82337, 0x09a27c7, 0x2ac6bdb, 0x432379e,
0x4cf0a3c, 0x2c0b675, 0x457a53c, 0x380fa67, 0x057cb76, 0x4755c19, 0x2514f73, 0x229ed49,
0x20a83ed, 0x4bed1fd, 0x0f25a96, 0x400f9fc, 0x572a6ac, 0x5d77a13, 0x118c6f1, 0x3d3a972,
0x44517c0, 0x11a7445, 0x499f406, 0x3f1a984, 0x4c3eee7, 0x2437116, 0x1b6e3f5, 0x33be8b4,
0x04a22e8, 0x24f774b, 0x58dc8e4, 0x3b60d45, 0x47fa696, 0x21a46c3, 0x4d933d3, 0x16e5692,
0x00b754d, 0x132d07c, 0x1e107a1, 0x14e3e1a, 0x5be670f, 0x5f5c21f, 0x03d8a3a, 0x2df919d,
0x27479d5, 0x12c3314, 0x4a41fcc, 0x1d1469f, 0x5f232ce, 0x2a7eac1, 0x39c8d8e, 0x372070c,
0x14357eb, 0x4971f2f, 0x493279c, 0x237c448, 0x39cf0b5, 0x5564a0c, 0x519a53d, 0x3acf59e,
0x4c4daa4, 0x43ed201, 0x0749e80, 0x0d0da35, 0x55ccdd2, 0x1100efa, 0x0f83ba5, 0x10354ae,
0x4832e9f, 0x0fb02cf, 0x1f29418, 0x206922a, 0x3a4e142, 0x1d76057, 0x12a6457, 0x3a8334a,
0x478b296, 0x2e3e67a, 0x43f658a, 0x0a78a4f, 0x28154b7, 0x5721f33, 0x0af825d, 0x43d2f9f,
0x0769af7, 0x20b6a74, 0x1390d47, 0x10c180e, 0x0afa8a8, 0x45573ff, 0x0fa6c2c, 0x2623765,
0x056bc12, 0x49475f6, 0x490feb2, 0x2383ca4, 0x00f0b2c, 0x4d87c98, 0x36d3c79, 0x2d864c8,
0x3197be7, 0x1aae8b4, 0x4578a0f, 0x1087340, 0x4c606c9, 0x07d8127, 0x387a7d6, 0x297e540,
0x51cf247, 0x0a05cda, 0x017c49a, 0x338ae3f, 0x2ef18e8, 0x35b528f, 0x44eca1d, 0x59c4bf8,
0x48d476a, 0x3b1b4f8, 0x4a2116d, 0x2d902ed, 0x1a8816a, 0x0c43b3e, 0x3e09636, 0x3d2a966,
0x46dff8f, 0x42f69cc, 0x3ab20b2, 0x4a2451a, 0x5738e33, 0x25aaf7b, 0x333cdd6, 0x5c2330e,
0x2e0270f, 0x33be448, 0x3491c7d, 0x380d62d, 0x2745d0f, 0x35c7470, 0x09ea28f, 0x122334f,
0x53b66c7, 0x2c43168, 0x00abffa, 0x31513e5, 0x4e626e5, 0x53951b8, 0x1b58365, 0x4c8304f,
0x1bfdf22, 0x2d2665a, 0x377a97c, 0x4be7e47, 0x286a4bc, 0x4441582, 0x2910d6f, 0x5ae3fd3,
0x5bec3bd, 0x05d7a87, 0x3d0e63e, 0x2e25d22, 0x4d94e7c, 0x2060072, 0x32f1602, 0x1fe1b55,
0x1fbe3f0, 0x2260e5b, 0x5b342f0, 0x521c52e, 0x2987d07, 0x1f1c85e, 0x20e44f9, 0x1f05bca,
0x169fbac, 0x39175ab, 0x24ec502, 0x16a2fbc, 0x52add2b, 0x0430101, 0x49b0884, 0x0663883,
0x1d47ce4, 0x5c28141, 0x4edad42, 0x2d72fd4, 0x1d0423c, 0x16be1d4, 0x10d5582, 0x4b4d144,
0x106a797, 0x0fb2dfd, 0x5872da2, 0x5deb6e7, 0x2d46a52, 0x03fc4c6, 0x465eda0, 0x56a4ab7,
0x18f0ad6, 0x39922bc, 0x4679687, 0x093cb97, 0x17a9712, 0x2272202, 0x2ef0aac, 0x0ac5a21,
0x003b7fb, 0x389e091, 0x4c1a086, 0x24dca55, 0x5ea6823, 0x040d9df, 0x0bd0ce2, 0x49d626e,
0x190c17d, 0x0ff6f70, 0x1979a8f, 0x11186a9, 0x49989cd, 0x5e941d7, 0x4bb7c9e, 0x548365a,
0x2a79eef, 0x0cb597c, 0x4f51060, 0x1ee9fdc, 0x306d709, 0x55304ab, 0x00fd4ec, 0x3e8d707,
0x3b9df83, 0x17e89b3, 0x059a797, 0x53ad54f, 0x3f02037, 0x4fb45b0, 0x4c4e5b8, 0x1423eb8,
0x1653c44, 0x2e38aa4, 0x1e68c2f, 0x13fa069, 0x01ba70a, 0x1f24565, 0x58578d7, 0x27f6cd0,
0x3087105, 0x130dcfe, 0x4b8b133, 0x3d728e3, 0x29e9d3f, 0x57c89be, 0x2a879bb, 0x5369a2d,
0x3a9479e, 0x42e6b24, 0x5cc574f, 0x07fc6b2, 0x34524da, 0x0c62ede, 0x2737bd1, 0x37c81a5,
0x4ff34bb, 0x382dad6, 0x1f1651d, 0x55b5489, 0x12d6551, 0x0dfde3f, 0x327618b, 0x3d94c02,
0x1a7783a, 0x55f3664, 0x2c1a0f1, 0x2ba90eb, 0x1f1615e, 0x4df5aae, 0x515bb9e, 0x0e76d9e,
0x236975c, 0x48d18c2, 0x2d45e9a, 0x2a5078c, 0x3ce205a, 0x0331485, 0x3215fbd, 0x02b42ab,
0x00877cd, 0x525ab2e, 0x42ae7e9, 0x06dbb02, 0x5d152c4, 0x213cebe, 0x241637b, 0x0e25980,
0x402cb8b, 0x07fcc2c, 0x0458c17, 0x4d8e48c, 0x4034e6c, 0x5722b66, 0x231c2a5, 0x04f0c40,
0x355b88d, 0x5d66d89, 0x31aa77e, 0x13a6520, 0x30d0a54, 0x1fa46a9, 0x1c3f12a, 0x2265dac,
0x5a0f196, 0x13301b0, 0x14142b7, 0x3c7fe83, 0x1b69b24, 0x1630d4c, 0x225d6e7, 0x3c21269,
0x396870e, 0x502f249, 0x062964e, 0x3af2b73, 0x2ece8d0, 0x043d51b, 0x555639e, 0x4f876f3,
0x4b70f78, 0x4424878, 0x4875ad9, 0x3942259, 0x10b5f05, 0x4a7fc80, 0x10a158a, 0x4e58a20,
0x2a08e9b, 0x5205495, 0x1080ca8, 0x4218d95, 0x2250695, 0x37ac9f9, 0x52c1e5d, 0x02ea66c,
0x33c5c62, 0x4c382d1, 0x5a707fd, 0x3950982, 0x1eea02d, 0x110a8b3, 0x01813fd, 0x2c2bd90,
0x5199fc4, 0x32f1c4a, 0x2ebd3ac, 0x177f817, 0x3b0dab9, 0x57627f2, 0x113ce41, 0x1b807e9,
0x1163c5a, 0x5c4ff03, 0x4590255, 0x5e6d9d5, 0x11babdb, 0x2e39e58, 0x1b6775f, 0x4be9348,
0x46d898d, 0x2e39ee0, 0x4255049, 0x23b62a0, 0x49c291d, 0x2ff5448, 0x35ffad9, 0x0b0f112,
0x287ed0d, 0x2e08afc, 0x02604c6, 0x270d0a7, 0x5e23db0, 0x5f08a67, 0x54b97a5, 0x3cd4b63,
0x14cd663, 0x5adb834, 0x35efacb, 0x3829409, 0x140af79, 0x57f3ca8, 0x36ef13d, 0x0526051,
0x3cf7cdc, 0x2cbb0c6, 0x0a45db5, 0x2e24d44, 0x0babb6a, 0x1352ec7, 0x57d50e3, 0x5ea2f2a,
0x2a5df44, 0x1ece4f3, 0x5cdb1a1, 0x2149271, 0x1c02f14, 0x12422f0, 0x50b1ec3, 0x0bc9ecf,
0x58b524f, 0x5eafdb1, 0x3051784, 0x10f7027, 0x3e521ea, 0x12bbbed, 0x21d39f3, 0x00b6439,
0x302a786, 0x5941694, 0x019263b, 0x1143879, 0x0284828, 0x2f0c134, 0x4daa53e, 0x18c79dd,
0x0ebc04c, 0x41c1f82, 0x4a20774, 0x55aa739, 0x5008c43, 0x5a85f48, 0x132f366, 0x12fa823,
0x2523e57, 0x50c530d, 0x1101f2b, 0x28fc06e, 0x2db225d, 0x3120204, 0x195ead6, 0x1b91f5f,
0x3b81036, 0x3463df8, 0x0c841e5, 0x34742e6, 0x05cee33, 0x0023c29, 0x2d01120, 0x52052d9,
0x2586da2, 0x17a4ff1, 0x144d892, 0x37a1fbd, 0x5728c20, 0x111db68, 0x071c954, 0x1d7d6fb,
0x22f698f, 0x1b3e4e5, 0x4169e9c, 0x0b5c475, 0x53c61e3, 0x351a99a, 0x289b3e0, 0x5a26009,
0x332d6bc, 0x09cd1da, 0x2f24c60, 0x1810dea, 0x20eab99, 0x1f82959, 0x242923e, 0x3fa533d,
0x13c968c, 0x0c5ac4a, 0x4d9663a, 0x567bb0c, 0x3f81dbf, 0x41bbdce, 0x4333674, 0x3e6fee5,
0x450a4c8, 0x3a4ecfd, 0x4488320, 0x58f2022, 0x0d184bd, 0x5a4fa4a, 0x3983f78, 0x5516b84,
0x4d746d2, 0x1a547f2, 0x4f868ff, 0x4861717, 0x4433694, 0x3b18db2, 0x4e159eb, 0x40c14e7,
0x4529e68, 0x22abeab, 0x5445043, 0x1dd9a4f, 0x0fec7ae, 0x5277d41, 0x02bf503, 0x2e8140a,
0x519fce0, 0x2d938f9, 0x21e97d6, 0x498126b, 0x0a3f2ac, 0x47c418f, 0x39c82dc, 0x009f54e,
0x3c2d48e, 0x31a2448, 0x3cdeaeb, 0x16f8de8, 0x2c1b9d2, 0x4e96233, 0x2c4d765, 0x22ee45d,
0x0cf227e, 0x21503ca, 0x1a7c3b2, 0x172106b, 0x2e11b86, 0x5c054f1, 0x16eb4d5, 0x51ad377,
0x40c8bc9, 0x434022b, 0x010253a, 0x4b0a760, 0x55d6753, 0x302a0da, 0x3dd962b, 0x115900c,
0x0fc1c65, 0x46c43e4, 0x50dfed3, 0x1165787, 0x5092b58, 0x3786171, 0x0eda969, 0x236358a,
0x41f64c8, 0x41edd6b, 0x405eb8a, 0x225032e, 0x4f7d171, 0x3747e1e, 0x53f5301, 0x47b4d53,
0x1f1d387, 0x0c6f2be, 0x33548dc, 0x1e28765, 0x2addc10, 0x25b2638, 0x4a84b79, 0x2bfb8e2,
0x2fc1423, 0x4df2f7f, 0x303cb5e, 0x32b260c, 0x2461db2, 0x59c634a, 0x5a6228b, 0x4a80950,
0x1c1f344, 0x081d1fc, 0x0f67ca6, 0x2c47700, 0x27f10e3, 0x5db8801, 0x1ebe356, 0x58f3fcb,
0x235caae, 0x51c952f, 0x4934e69, 0x54931f0, 0x48594a5, 0x3a446de, 0x21ef011, 0x5e14cf3,
0x1653647, 0x5792933, 0x0c66660, 0x1417ff9, 0x4e791b3, 0x156a29f, 0x10b5348, 0x12563c8,
0x1d427ab, 0x38070de, 0x36bdd3e, 0x5beafa9, 0x4d85d26, 0x39d29a8, 0x0f59892, 0x1c65b2f,
0x08e6f61, 0x2e52ce4, 0x29da15f, 0x530704a, 0x0ae9b5c, 0x09c992a, 0x33dff84, 0x0a856ac,
0x0191f81, 0x35f9a09, 0x0953d45, 0x04f16da, 0x352d165, 0x35b9362, 0x0113a39, 0x1bef7ea,
0x3c63385, 0x264b75e, 0x5d3fd04, 0x4e69de6, 0x2fc31f4, 0x231d6b1, 0x597dd7a, 0x114f377,
0x2703abb, 0x0b1bd8a, 0x2e7f772, 0x1113670, 0x4ea00dc, 0x2732188, 0x52fb19e, 0x1a47221,
0x0c09d19, 0x1f7acd0, 0x29b7d5a, 0x505e3ee, 0x32dc6eb, 0x40df7a2, 0x3a28279, 0x5be11b7,
0x30a1702, 0x4b235a6, 0x2f7107b, 0x3b6d6b4, 0x4d703b6, 0x5cc307e, 0x3bb96ce, 0x18842fc,
0x2b80f8d, 0x004d675, 0x5a269f2, 0x1d12741, 0x004bc4c, 0x03ba065, 0x158dfbb, 0x3397cca,
0x4726fb0, 0x3c97ac2, 0x536c3c5, 0x114c8d2, 0x17295ec, 0x1063964, 0x31ba123, 0x3657cbb,
0x07e1f74, 0x44a93de, 0x265eb55, 0x40e5b4f, 0x3336081, 0x3662382, 0x2875f7f, 0x1d09377,
0x1f326e0, 0x568a3c6, 0x54dbf44, 0x4d0d43a, 0x0bae2be, 0x2b5a2ff, 0x115b4f2, 0x26ebe80,
0x0f8d4ce, 0x2a7f009, 0x35ee46a, 0x47a18c2, 0x5df011e, 0x281a9b6, 0x0e36737, 0x3fdd7e2,
0x01a9c19, 0x41061d9, 0x5d9826a, 0x309ab2c, 0x0b3f00f, 0x0e7db39, 0x541b75b, 0x1bfcea9,
0x26f31a7, 0x3beaba1, 0x0c034db, 0x4bc8fe4, 0x14a65f9, 0x088ac5a, 0x16f95e2, 0x53cfed3,
0x53cf19b, 0x156d5de, 0x25e2675, 0x2246714, 0x493ceb5, 0x0ba4fe2, 0x510fae0, 0x04dc4e7,
0x47e37f8, 0x4b24629, 0x395fd7e, 0x1e02c1d, 0x4efd1a1, 0x01acc51, 0x0075994, 0x4d03b84,
0x0cfbf3a, 0x56299a9, 0x5734fc4, 0x133aff0, 0x3d6eb32, 0x3199114, 0x1b8fd85, 0x0f23e35,
0x3a9dce4, 0x1c7f542, 0x0d26cae, 0x0e1f666, 0x48c60df, 0x37032bd, 0x2a156ec, 0x4629858,
0x30ffe9d, 0x379d063, 0x41314f1, 0x00707f2, 0x4b9252a, 0x48a718d, 0x098f886, 0x549d28b,
0x10c7bc5, 0x0960ae6, 0x3089baf, 0x0343766, 0x5df72de, 0x049efef, 0x0a49fb6, 0x4e16fc3,
0x34d8ed9, 0x56b4051, 0x1c98f7b, 0x320cbe7, 0x537096b, 0x5441cdf, 0x0766d5d, 0x05ec0d4,
0x3e08901, 0x0be9487, 0x4a6beb8, 0x5b21477, 0x2bf310b, 0x20820e9, 0x2ef59e9, 0x3103ba8,
0x42b4919, 0x4a2e097, 0x4af4355, 0x375abfb, 0x149aab4, 0x17edbe6, 0x382af19, 0x09548db,
0x5ae1343, 0x2f233f4, 0x0bc179e, 0x18ead63, 0x40c3d39, 0x41034cc, 0x34559a4, 0x0c1ff0b,
0x4db2d93, 0x40b7b3d, 0x4077bca, 0x532d049, 0x044e2b6, 0x06f8b7d, 0x3eecac2, 0x0550672,
0x55fac47, 0x4137ffc, 0x15d0020, 0x51fbfb9, 0x49bb51e, 0x32c4888, 0x3e457d7, 0x1c15554,
0x3b504d0, 0x59b284e, 0x0523e86, 0x1be45c0, 0x0eea59e, 0x4f1a038, 0x38bc942, 0x4787c2a,
0x2ae7f04, 0x5b09bd4, 0x09d1d7b, 0x4d01ac5, 0x4cfbb56, 0x546dc26, 0x5121172, 0x18f834a,
0x0f6506a, 0x093b76f, 0x009e002, 0x5149ebd, 0x02c9f70, 0x4d34dd8, 0x104ca3c, 0x4a53032,
0x4877b87, 0x4fcc679, 0x5a36f68, 0x0c32404, 0x5d8096f, 0x3c98b52, 0x44c19cd, 0x03b3427,
0x32ad880, 0x2b9d5d4, 0x4d9063f, 0x038db59, 0x5079cf4, 0x48dd496, 0x2b6f5be, 0x068c5a7,
0x247b711, 0x2bd8cf6, 0x165f476, 0x0eae49e, 0x5752063, 0x52a8982, 0x4a5e4cd, 0x36b1b86,
0x088ddce, 0x3e200a8, 0x2a2abb1, 0x0906b1d, 0x3776b89, 0x4f7dd4e, 0x101059c, 0x507216f,
0x2e4cfaf, 0x4ce9fed, 0x3ab2fe1, 0x50a12a4, 0x2f6a542, 0x15da5f4, 0x5a9209d, 0x597f4e9,
0x017f80f, 0x15f399c, 0x0c9ce7c, 0x4654a25, 0x5702612, 0x1c0fb45, 0x1e072f2, 0x4999c66,
0x2b73cdc, 0x260c545, 0x4ced04d, 0x5045de7, 0x33c3e34, 0x2ee1dea, 0x30c19bc, 0x1e35419,
0x403fd93, 0x02e005c, 0x0287f38, 0x34444b1, 0x27bfb6a, 0x2a97e3e, 0x26edb95, 0x42cde37,
0x11f9432, 0x4ba53ab, 0x048b2d5, 0x0d8d449, 0x382b394, 0x07c2f09, 0x319d5be, 0x15c46bf,
0x464d2a5, 0x427a35d, 0x192adcb, 0x493c695, 0x5a43159, 0x4e48bad, 0x51f279d, 0x25eb340,
0x1f7ca59, 0x210eb6b, 0x0b5cf49, 0x5c53229, 0x21e78d8, 0x5bdbd2f, 0x4a16c82, 0x224f1dc,
0x3a35ef6, 0x0d20de4, 0x425694a, 0x42116a8, 0x1b48a8e, 0x41dc509, 0x2c21687, 0x15c1741,
0x0d136af, 0x5e45cdc, 0x26cd0f8, 0x3f3aa2f, 0x546781e, 0x4db45b3, 0x39d8a30, 0x3adf782,
0x26f72ae, 0x09896f5, 0x556a834, 0x413d575, 0x016621f, 0x008f315, 0x492a708, 0x0b18a90,
0x4101314, 0x11946bb, 0x0f6367c, 0x25c70a1, 0x4d70f1a, 0x5ef874d, 0x3da0698, 0x11fc490,
0x2d458e9, 0x0f1bbf7, 0x0ef33d5, 0x1276a9b, 0x2d3957b, 0x5dd6448, 0x15b393b, 0x4c2a9de,
0x3512679, 0x0103dea, 0x1e849a1, 0x42f731f, 0x3fd319d, 0x3d99c48, 0x3e48aa1, 0x0b085c3,
0x43ebf4e, 0x05f6a71, 0x5f2786f, 0x0a92532, 0x47966fe, 0x1f23c5b, 0x5f20fa3, 0x275b32c,
0x0e0e197, 0x19f1e1c, 0x19ec924, 0x5c0ddeb, 0x1ea49c9, 0x517093b, 0x0f16a7a, 0x1e24ec7,
0x10f8354, 0x5f374d9, 0x4bcfbfc, 0x1e432c3, 0x5c9185c, 0x4da5f77, 0x3f9fa2b, 0x3d94698,
0x240e43c, 0x1b98a85, 0x29a5b54, 0x3da5921, 0x0512ecc, 0x2ec2c72, 0x1877392, 0x41c57da,
0x3710d6e, 0x41c6e39, 0x5909c2c, 0x02462c4, 0x071a8b5, 0x3fe3a12, 0x4fb23b1, 0x44b498f,
0x38ac507, 0x10c2559, 0x552201f, 0x40a3b55, 0x17b407a, 0x002fa5c, 0x36d3a59, 0x0076841,
0x547146e, 0x5849a23, 0x0bc2992, 0x3e6db4c, 0x5d07279, 0x3f92719, 0x00f0c87, 0x46b2a13,
0x4a9042b, 0x4a01ace, 0x2a1666b, 0x17cad59, 0x0055d39, 0x30feaf2, 0x5700758, 0x2076d47,
0x10b8bd4, 0x03e3540, 0x057868a, 0x30d9a65, 0x0ba2aeb, 0x406eee7, 0x3018d2e, 0x1e88ab8,
0x458be11, 0x502673e, 0x0b9827f, 0x21c132d, 0x4925635, 0x358346a, 0x013fafb, 0x138ef22,
0x216f0ef, 0x22e74f4, 0x0fe43ad, 0x39aa6bb, 0x0338527, 0x0417d5a, 0x3f1ade7, 0x436d775,
0x4f181ee, 0x38a503c, 0x0dab593, 0x2a6cec0, 0x0e7b9aa, 0x3aef7e0, 0x0144735, 0x3f5a541,
0x1eb0c47, 0x10aaf07, 0x3fa9ce3, 0x1635d30, 0x24422ce, 0x0d9dd30, 0x00a3c9d, 0x27b022a,
0x489b0dd, 0x20e39a5, 0x486527b, 0x4c9cb62, 0x459e483, 0x0d62620, 0x5db38d3, 0x207c98f,
0x283eb60, 0x33e2029, 0x2c21207, 0x5331f2b, 0x4cc0677, 0x3b1b78f, 0x2fb0b1e, 0x48147fc,
0x3216a0a, 0x49fa537, 0x40623bc, 0x1c558c7, 0x51f9c25, 0x0aad7de, 0x3a4fb50, 0x1cdf9e3,
0x3e146c9, 0x0c8e3ee, 0x1ea0559, 0x325e196, 0x0efa24b, 0x0becebd, 0x2fc0a85, 0x537bfdf,
0x08d2251, 0x245e670, 0x3a1f40f, 0x38eaa59, 0x2510add, 0x0f8468a, 0x2ce3db7, 0x21f7398,
0x024e584, 0x08ab8a0, 0x435c955, 0x4ec5229, 0x5747d88, 0x005ef3f, 0x027dbb0, 0x521c97a,
0x1deddb4, 0x3e24a06, 0x2b9927f, 0x4a6217a, 0x03fe580, 0x1389d0c, 0x29bb437, 0x0af3e95,
0x3d33a0e, 0x0030be4, 0x51cd89a, 0x059e987, 0x3d930c5, 0x33c0753, 0x2f37e8c, 0x31af0a6,
0x1b1621f, 0x169f344, 0x4bc0139, 0x0b1975d, 0x58b1e84, 0x28bb873, 0x3446308, 0x4cd9c01,
0x002616b, 0x1e73446, 0x5f23b53, 0x137271b, 0x0ca6363, 0x40ac879, 0x4bcc1ed, 0x28a13ae,
0x11b619c, 0x3e9019f, 0x1926006, 0x3a3a54a, 0x3d76168, 0x5267ce1, 0x1967dc6, 0x2d7af89,
0x51b31c3, 0x53cb5b4, 0x3aaa5e8, 0x12e1d65, 0x3503e5f, 0x5c1e9f2, 0x29b50b0, 0x3384647,
0x43262de, 0x5c70936, 0x2d807a0, 0x41c5a7c, 0x3fbda03, 0x2c1f1e6, 0x320cf41, 0x2cb2d7d,
0x1e3920c, 0x4f5a23f, 0x3760d02, 0x4de6f1c, 0x01d4d18, 0x11fb98d, 0x38912a5, 0x5916d40,
0x04689ef, 0x1a170d1, 0x124c7ab, 0x5e9c9d4, 0x28a8e66, 0x16314d7, 0x4ce82fb, 0x49afb27,
0x4c951b4, 0x2485f8f, 0x0e35ebf, 0x0ca2f27, 0x3219e4c, 0x48cefe2, 0x46c993c, 0x1571e3c,
0x4c32bc0, 0x4db864c, 0x532aed3, 0x42508b3, 0x199d00b, 0x2000602, 0x04564fd, 0x4fdc687,
0x0445b9f, 0x2f604ce, 0x3b31e92, 0x22d0075, 0x326f9af, 0x16f07b4, 0x24a6c34, 0x21c75e0,
0x166b8ec, 0x0908fd7, 0x2cc406f, 0x25adb93, 0x1f9eb7b, 0x33607f1, 0x18ba21e, 0x05d01ab,
0x30e6df0, 0x05f82b5, 0x0eb298b, 0x31cae3e, 0x02541b1, 0x5b61ff2, 0x37be9ed, 0x50b2c5b,
0x4a457f1, 0x1a6effe, 0x4fe6658, 0x52863fa, 0x34d5f48, 0x29e338a, 0x06aa806, 0x48a3a6b,
0x5590035, 0x073a0d2, 0x47586dc, 0x3ebd552, 0x21f2f22, 0x36f0cb3, 0x0660cfe, 0x1b28067,
0x02d7822, 0x43cc61c, 0x24945c1, 0x4ff4f56, 0x454457e, 0x39d73f0, 0x524f560, 0x28583ee,
0x118e11f, 0x09cf8b8, 0x55e5d96, 0x441234c, 0x58b29ca, 0x44b4232, 0x241e2fd, 0x1f4c225,
0x38dedc6, 0x18fe952, 0x3055b13, 0x1216fb2, 0x4bf3dcd, 0x1c0270e, 0x3f18487, 0x2a519c1,
0x50c86ab, 0x0718baa, 0x5ae88c9, 0x4d4dde8, 0x0b5b828, 0x58f1e58, 0x0f433aa, 0x06d654a,
0x55ff991, 0x2831e5c, 0x2857c1b, 0x176a550, 0x13fc35f, 0x06e026a, 0x3cf4df4, 0x36f6362,
0x5b22e83, 0x56fa2bf, 0x021ee1b, 0x5a27285, 0x0f1be0c, 0x3b55833, 0x2e74fb3, 0x3028d10,
0x0deaf0d, 0x2c01726, 0x3d813ed, 0x22ff72d, 0x57ef158, 0x5d486e5, 0x0d7a153, 0x290734a,
0x44b627b, 0x4243d53, 0x1026d7d, 0x283f669, 0x53933f0, 0x18a88c8, 0x00ee52f, 0x2ea0a7e,
0x3583f7c, 0x3eef362, 0x07d2338, 0x530fc54, 0x311e1d8, 0x2ce65b8, 0x0af845c, 0x1bb021a,
0x174d03b, 0x05c8034, 0x4c37d70, 0x3836609, 0x042c4a6, 0x357a5fa, 0x3a3d935, 0x130e0e8,
0x52207a3, 0x5af9e2f, 0x3b04ca9, 0x03e2ff2, 0x144aaeb, 0x09635e2, 0x2fc245b, 0x3df03d7,
0x2199bdb, 0x004d94c, 0x1133f9a, 0x58be09b, 0x45fd9ca, 0x5e12d33, 0x49fc58f, 0x3d4748d,
0x36e856c, 0x4668b58, 0x3d642a0, 0x39ae534, 0x554f2f8, 0x4d236b2, 0x21fe4af, 0x06a8e2c,
0x2306f34, 0x04c1fe2, 0x06aa967, 0x4a257a9, 0x2aee7b2, 0x567d5ab, 0x1d585be, 0x37655c1,
0x3340948, 0x1544a21, 0x12ab999, 0x10735d0, 0x436fe79, 0x5b82cc8, 0x0c764ea, 0x2ae33c0,
0x23b3edb, 0x30d46cb, 0x20c88b1, 0x24f3442, 0x41b4d45, 0x4349fc7, 0x4dc93ce, 0x2adb2b5,
0x028d2c5, 0x4e6d92c, 0x51f4d10, 0x2835b02, 0x5e68106, 0x027e994, 0x58cee93, 0x38e5384,
0x060e425, 0x5894907, 0x1872a39, 0x5dc97dc, 0x0faf18b, 0x589293e, 0x176dfe7, 0x283b747,
0x49ee8f7, 0x31ee47c, 0x0b8f55a, 0x34dc5f3, 0x1d0d382, 0x4505caf, 0x1d4949a, 0x210d47c,
0x15cbb77, 0x2b09d89, 0x2254620, 0x1c8b42b, 0x285d7c5, 0x22e7646, 0x479da15, 0x26db31d,
0x1517573, 0x3a20e62, 0x2ff3602, 0x126cf4d, 0x1397625, 0x2f8af37, 0x0a7525c, 0x5a0252e,
0x0215d31, 0x1ed226a, 0x2f039c4, 0x0b59c8b, 0x4691d4a, 0x1a73bc2, 0x243cacf, 0x253bd15,
0x1cb3243, 0x4c657ec, 0x5070d3a, 0x2594bff, 0x1576253, 0x18c4edb, 0x4ca98d2, 0x5780dcf,
0x420aee3, 0x514fb01, 0x376d58f, 0x5f0ea00, 0x473f033, 0x390d67e, 0x5ab0869, 0x2a52661,
0x5ea656e, 0x13f357c, 0x552e1ca, 0x3437bc6, 0x28f04b0, 0x5645d26, 0x3e232a7, 0x4911d25,
0x2bef435, 0x26805f9, 0x479cbd3, 0x4a83f53, 0x35eb4d4, 0x37382a7, 0x12182da, 0x378ef4e,
0x5d675bf, 0x4607e73, 0x4563509, 0x34c7b39, 0x30b5f01, 0x102b823, 0x3654c61, 0x011adf6,
0x1420f9a, 0x52f6dd7, 0x2a29b1c, 0x055e1a2, 0x2a7a96f, 0x5c2219b, 0x11ae3ed, 0x54d00e5,
0x0d75244, 0x20890de, 0x2386060, 0x4991209, 0x42e3272, 0x486bec1, 0x23c90f5, 0x3a69ab8,
0x36b8a5a, 0x3035e18, 0x258ceda, 0x26529f3, 0x37ff474, 0x5cfed3e, 0x040bd12, 0x25206cf,
0x24b0c8f, 0x22f998f, 0x19430df, 0x4ca367d, 0x12d5b26, 0x2d969ba, 0x3c55e74, 0x01c0b7b,
0x0af26cf, 0x2d7eaf4, 0x48490fd, 0x2df5c47, 0x29e1571, 0x461a426, 0x4cf7183, 0x3b57677,
0x11800b1, 0x0c35a56, 0x489b742, 0x2bbc17e, 0x32a6534, 0x15357b8, 0x0fce89d, 0x1bf17ca,
0x0f3f070, 0x5852a68, 0x178a100, 0x1189c2c, 0x4b5d272, 0x0c05add, 0x3f5926d, 0x3f07f3a,
0x510bae3, 0x1d8bc17, 0x2f58f6c, 0x3d7a38b, 0x1b0e9fb, 0x4a8ae7b, 0x3c5ac87, 0x00fa68f,
0x16d388d, 0x2fc7d83, 0x3dc492a, 0x462edcf, 0x4a9ea66, 0x08aca0c, 0x3108c65, 0x19d70f7,
0x5f4e3b2, 0x3f6f2f2, 0x1ec186a, 0x27bd6b1, 0x28be6d0, 0x0275b86, 0x4ededfe, 0x5d2f956,
0x4618e8b, 0x37073dc, 0x19aa633, 0x0abee93, 0x1077f9c, 0x20cdf77, 0x007f0d8, 0x1799e7a,
0x2c3178c, 0x0965bac, 0x2d359b0, 0x408f29d, 0x51000f3, 0x3733470, 0x318b9e6, 0x0961a75,
0x0466429, 0x4488ea9, 0x31fd564, 0x403bdf7, 0x4951dc5, 0x4234b4b, 0x4b65e45, 0x266f19d,
0x3d2f51d, 0x41fb039, 0x5b8b783, 0x1effbf8, 0x3e165aa, 0x53fa7ee, 0x43ff04a, 0x30e1109,
0x4196df9, 0x0758778, 0x27f1d0e, 0x5e62f03, 0x31f7a76, 0x20ead9c, 0x0d9541d, 0x4f79664,
0x18b089b, 0x060c739, 0x4a31ad2, 0x2069d56, 0x36071a8, 0x21c89e0, 0x119784e, 0x4ca88e7,
0x06db3f2, 0x59d3dc5, 0x127075a, 0x1e4a5b2, 0x2f30268, 0x19dd50b, 0x4e1be7b, 0x4f99dd7,
0x48d2118, 0x15a39d7, 0x5cd8deb, 0x2e79bcc, 0x595ba41, 0x40d2e17, 0x0bd620b, 0x352d160,
0x4408ad9, 0x4fad40e, 0x175d3be, 0x1289445, 0x2e52a33, 0x41d222c, 0x246a470, 0x0f89c9b,
0x08462e1, 0x35adbfc, 0x5898d97, 0x1911448, 0x0bce2ae, 0x33e7bb5, 0x1af7398, 0x44fc995,
0x44add3a, 0x26d0042, 0x4fb0b56, 0x19aaf0d, 0x43b824b, 0x15556f0, 0x5d661b6, 0x52b2e53,
0x3173fe1, 0x39c4476, 0x38f65d1, 0x2c586af, 0x499f431, 0x2502169, 0x4bb6cf8, 0x084be40,
0x4fa7edd, 0x0f8d245, 0x4fa34e4, 0x4afdd6e, 0x11bed30, 0x11304b4, 0x3ef5aa8, 0x36a02e5,
0x09d37d1, 0x1411abd, 0x3a5cc4d, 0x0c61cea, 0x09a49be, 0x0c090b1, 0x40b3ede, 0x511d625,
0x227f229, 0x25926cd, 0x05bbea5, 0x5dfdbaa, 0x0576b65, 0x4cbce39, 0x1e4ae16, 0x0175202,
0x248a07a, 0x53498e7, 0x32f9c52, 0x060dc7b, 0x2211b00, 0x4a33af0, 0x122ad57, 0x046a453,
0x0ee1ccf, 0x29aacfe, 0x50e5496, 0x056e80e, 0x30b2afa, 0x4e6a1e1, 0x2230263, 0x395c8a5,
0x4f3a073, 0x50ee280, 0x2797fe8, 0x01fb071, 0x15cc49f, 0x23d0a69, 0x469d6e7, 0x2376b0e,
0x5f585a8, 0x03170d7, 0x448ae86, 0x22dd643, 0x02da337, 0x1dc0d21, 0x526c0d4, 0x0e2287e,
0x1691da7, 0x03fa3e0, 0x50d992e, 0x3654049, 0x27bf370, 0x29752b7, 0x00c4f2d, 0x05c3a1b,
0x2b799ed, 0x1875599, 0x0808bfb, 0x299736c, 0x3c5dd4b, 0x450739a, 0x2098741, 0x4c22dc4,
0x24c30e0, 0x2eb4a23, 0x1024695, 0x3eb8606, 0x115c3f9, 0x13e2957, 0x211d8bb, 0x516efe9,
0x270a6f2, 0x2246ff0, 0x16db06d, 0x4c2c4b4, 0x0c45ff7, 0x22a8c31, 0x42a6c6e, 0x4d977aa,
0x051aeb9, 0x0474ee6, 0x2364861, 0x28b15e4, 0x351be5d, 0x4a04d04, 0x23d2c7c, 0x50e6106,
0x122973c, 0x53d360a, 0x55ade5a, 0x25353f2, 0x14020b1, 0x07a3fcb, 0x5863185, 0x523b871,
0x3e4bb40, 0x3b262bf, 0x0b747f8, 0x4b81acd, 0x4d812e2, 0x26451f5, 0x3642987, 0x3e1fba8,
0x4dfaa75, 0x326a499, 0x067674c, 0x4143e68, 0x5b4442d, 0x4ae0ca3, 0x3eeb4fa, 0x2f0bb35,
0x4ff1d0a, 0x3f3230d, 0x0ca1ef1, 0x35c5802, 0x4b4a32d, 0x3ba9432, 0x0286f9d, 0x1f04bb7,
0x512a591, 0x24cef49, 0x330e7d4, 0x1e0835a, 0x56c2990, 0x341eb3c, 0x0afcdf0, 0x0134d7b,
0x14cd429, 0x05ad768, 0x1f60303, 0x08499ae, 0x286f823, 0x118e722, 0x3bb1e30, 0x0ce88b7,
0x36d14da, 0x4f4b1e5, 0x0f7bbb1, 0x35dbb0e, 0x50de390, 0x1ead31c, 0x0c60b5b, 0x505ef37,
0x0335c6a, 0x1f90905, 0x5e4edbd, 0x528dbfa, 0x0748725, 0x4a01ae8, 0x5e259b7, 0x21a8f23,
0x17d657c, 0x3ed484a, 0x2db3233, 0x1f466a2, 0x5a263c2, 0x48e72f6, 0x5746dad, 0x18198ef,
0x5d8282b, 0x1287929, 0x24a88a0, 0x37b8c88, 0x2a16281, 0x457cf6d, 0x0146632, 0x3ef2526,
0x3151eb2, 0x1b7c89f, 0x2c007e3, 0x363e1e9, 0x0598811, 0x327b2d8, 0x5e2e1cc, 0x1836d49,
0x5661b99, 0x00e71cf, 0x57d9e36, 0x117c5a9, 0x2a8b2d8, 0x089dd30, 0x4c9d4c5, 0x1d0a14b,
0x339d5c0, 0x52ac0ab, 0x2034390, 0x45d2cf5, 0x3a7ab93, 0x5b5cb76, 0x1a87b61, 0x1cab7da,
0x3b7e43b, 0x409341c, 0x0e2ef7e, 0x5e60d9c, 0x53f60cb, 0x3f417e2, 0x2a1c002, 0x1034777,
0x4433f92, 0x551ff6f, 0x01f748c, 0x2090b92, 0x140c8cf, 0x30a0cea, 0x1ace5d4, 0x179f8ce,
0x5de2004, 0x0786bee, 0x119f9de, 0x00025a0, 0x4f5fb7a, 0x437fd92, 0x1f2cac8, 0x4a7f498,
0x1fb3cb5, 0x465a4a8, 0x0c3a2a1, 0x0fda1ae, 0x25692f8, 0x5bc8e7a, 0x42168ec, 0x3e645aa,
0x20e90df, 0x1dc2918, 0x5ab9415, 0x127bb74, 0x5bbd472, 0x2a77df3, 0x0905b81, 0x31bca0b,
0x41b8f7f, 0x4fabfb9, 0x4eaf6e1, 0x27fc3a8, 0x17dc8db, 0x3bd6d1c, 0x203a431, 0x4842661,
0x570bb6f, 0x04ea761, 0x17778d6, 0x0b48b9d, 0x5552bb7, 0x49769a2, 0x45dfa75, 0x422ac6a,
0x576c090, 0x0ca14ca, 0x34c62bc, 0x081751f, 0x453fea1, 0x052905f, 0x4175f03, 0x08520cd,
0x21d3b04, 0x339d658, 0x55f7280, 0x58371de, 0x3e9deb8, 0x44d451c, 0x1ee94f7, 0x452c2a2,
0x03e84e9, 0x5d9b039, 0x4a88d26, 0x480e896, 0x42a8c01, 0x3256405, 0x3cf16cd, 0x1d079a7,
0x54a0f8e, 0x57111cc, 0x0ce29ab, 0x0c13557, 0x57c21bb, 0x116a20e, 0x0d0bedc, 0x283dad5,
0x3211b90, 0x23458ef, 0x59a3990, 0x4709fc3, 0x3603a2b, 0x48d039f, 0x0292ef8, 0x3bfdc8f,
0x1cce36d, 0x31ce719, 0x2a62034, 0x5043b61, 0x0cde255, 0x5f03daf, 0x417b014, 0x11206b3,
0x1889bfd, 0x520bbb3, 0x26dd839, 0x52631d3, 0x153c66e, 0x2a74e83, 0x560a6d3, 0x107b498,
0x2731c2b, 0x078b567, 0x261e6f5, 0x01e6b1d, 0x5771c11, 0x1bdb1e1, 0x381610e, 0x472d2a2,
0x1385452, 0x361478b, 0x5933539, 0x36a67b2, 0x01537ed, 0x27dee69, 0x122f9ea, 0x390bb34,
0x242f98a, 0x414406d, 0x255e470, 0x58f4279, 0x55d565e, 0x5b7cd98, 0x09ff428, 0x5124e1f,
0x56faf9f, 0x1698174, 0x4c199cc, 0x0f8eb73, 0x245ee3d, 0x1d863b8, 0x5f50e40, 0x151d9a8,
0x5e0c9c3, 0x3155cb5, 0x1935dd7, 0x3947d51, 0x076deb2, 0x0553866, 0x1957a79, 0x54b0c06,
0x550dcd1, 0x3f62c0d, 0x0ecd643, 0x54395aa, 0x19ef96e, 0x10110d6, 0x3c915cd, 0x4ca63f8,
0x051848d, 0x1a97aa2, 0x5526242, 0x202ff5a, 0x104900d, 0x4d00a16, 0x5821221, 0x20ea420,
0x2c53e99, 0x4863f5a, 0x1087219, 0x321381a, 0x00857fe, 0x0523134, 0x3940a6f, 0x3c896c0,
0x22b6d33, 0x5c2ea31, 0x5885143, 0x13de62d, 0x019e3d1, 0x50980cb, 0x535f580, 0x2710b06,
0x290daa2, 0x2e3ac61, 0x5c53610, 0x31dabcf, 0x32c481e, 0x2462a6e, 0x425ea08, 0x3a5c3ab,
0x032da76, 0x56b1384, 0x1c3a922, 0x2b6238e, 0x408528f, 0x2ce13f1, 0x44824af, 0x4be4469,
0x55ea833, 0x0a530f1, 0x2c80425, 0x0b80008, 0x19eeb5a, 0x02f5072, 0x24ca737, 0x3b82655,
0x56007b0, 0x3d2340a, 0x33c376a, 0x44fba52, 0x435129c, 0x1c7cd3a, 0x46ecd77, 0x450619f,
0x3a08631, 0x3c0b3f0, 0x27fffe7, 0x2b66951, 0x27091ca, 0x36ed4d6, 0x1cccef7, 0x0127f96,
0x213a171, 0x0e79011, 0x4254f43, 0x0072ad6, 0x5b0923d, 0x47ad6df, 0x0c7fc83, 0x433e3ce,
0x3d0eeb0, 0x0fa5843, 0x55ad491, 0x1d0a950, 0x22994be, 0x318a858, 0x4aa25d7, 0x25559c2,
0x05c70af, 0x4a93f93, 0x37fdcb7, 0x24e503f, 0x48241f9, 0x2d22c7a, 0x4376be2, 0x470998c,
0x54074ca, 0x29be05d, 0x446f05b, 0x5764f7e, 0x41d10fb, 0x5baf355, 0x23838ae, 0x12d6f15,
0x15590c8, 0x0c2986e, 0x2140fb0, 0x01c8f12, 0x3eb8810, 0x2248264, 0x460f5a9, 0x2652ee5,
0x219a0ef, 0x51d3bb5, 0x27a86a2, 0x48eb622, 0x2b4d204, 0x5f2d632, 0x478481d, 0x05d90e6,
0x0720c7d, 0x5cb88c2, 0x2a5b47f, 0x5489f00, 0x2ea2205, 0x043dbdf, 0x1edb2d5, 0x284bf9b,
0x25e9ab9, 0x20a3847, 0x06d0aab, 0x22614fd, 0x295a577, 0x472c3a7, 0x374321c, 0x15d6854,
0x198c05a, 0x465a533, 0x49727e9, 0x1cf616a, 0x2d00605, 0x5d96304, 0x2f31d99, 0x0cb084b,
0x24d1d93, 0x3b60288, 0x280ab4b, 0x55323da, 0x2dfa305, 0x3137fb4, 0x19e7683, 0x45b41bd,
0x3373692, 0x5cf9888, 0x4f2c3eb, 0x47cdf41, 0x57802ee, 0x3817225, 0x45eb546, 0x03b990c,
0x3d0ea4a, 0x4a88b6c, 0x1384d7a, 0x25f4043, 0x3893349, 0x3c45d06, 0x0bdb9c8, 0x1ea4134,
0x4e59115, 0x18ff096, 0x51ec1ce, 0x47a8855, 0x1459e6c, 0x231fab0, 0x47fb36d, 0x1e8699e,
0x2a1b348, 0x33e69df, 0x28f7c2b, 0x00c7026, 0x53d1bfa, 0x4fc8d68, 0x199ba96, 0x3564a58,
0x2d6b5fd, 0x51766e2, 0x5c9db35, 0x32f7395, 0x5110f57, 0x427256e, 0x5180888, 0x1e7f590,
0x0387b10, 0x3d290bd, 0x5210179, 0x346c191, 0x142c379, 0x34fd011, 0x48af6ce, 0x0d7f9c5,
0x3160d2d, 0x45c87f6, 0x313a3e6, 0x3a47b87, 0x0cd32a6, 0x3b47aaa, 0x026596e, 0x20bc93f,
0x5591c1b, 0x0478f5a, 0x0a5bec0, 0x2535115, 0x50df790, 0x0da9e58, 0x20b06b3, 0x5f32065,
0x2454614, 0x4500835, 0x3f4d125, 0x040272b, 0x5000f06, 0x4348fa0, 0x33199a0, 0x3303796,
0x30e1a5e, 0x5c418da, 0x46471e4, 0x4520823, 0x1bd208d, 0x4dbaacc, 0x4ee2acb, 0x092ff02,
0x45d8c67, 0x3f7121e, 0x0b023c1, 0x31da2a7, 0x597d3e5, 0x089e4e5, 0x133e995, 0x45b6dc3,
0x56fa322, 0x1cfd7a2, 0x3b9c495, 0x04c7ce3, 0x2adf0a9, 0x56be0ce, 0x4294773, 0x05f061e,
0x4beb15b, 0x45ee7ca, 0x528659b, 0x022caed, 0x2789c77, 0x3385793, 0x3f5bf8a, 0x169a294,
0x1bb1c49, 0x5e948c2, 0x0c09583, 0x1888a04, 0x3602b05, 0x411c064, 0x1c477da, 0x0a13c1f,
0x3704ba8, 0x5dc8be4, 0x06ecba1, 0x3496c87, 0x39f3483, 0x338445e, 0x448d690, 0x3490561,
0x47e3808, 0x162f30f, 0x16435e7, 0x44cb115, 0x3bfbe99, 0x57bbd9f, 0x3bbbeed, 0x5addf00,
0x2e3a6a3, 0x40cbc01, 0x4ec7de2, 0x54e9ea7, 0x3993f95, 0x1364820, 0x0d62afc, 0x35efa55,
0x03bc4b7, 0x0e1a554, 0x2b0c5bb, 0x058a1d6, 0x14d8cb6, 0x2ec334b, 0x466e7ff, 0x463688b,
0x1f92f8e, 0x2eb1ff8, 0x07dadf6, 0x5eb8200, 0x42d6ecf, 0x18e3750, 0x3dbde74, 0x417a54b,
0x227bb0b, 0x4bf00a0, 0x4fbec64, 0x05b1888, 0x58cf838, 0x24a914c, 0x34e03ad, 0x24f25ac,
0x30d4ccf, 0x08deced, 0x2b70f57, 0x4126f97, 0x2b1dcf4, 0x35c947c, 0x04e3820, 0x249ba88,
0x0de3d42, 0x5a78e22, 0x36c85e3, 0x0a8d44a, 0x07a8994, 0x2c9eccb, 0x48c6185, 0x2240860,
0x43312c6, 0x050affc, 0x58d2a1c, 0x2e4ea14, 0x5ad4919, 0x266e6bf, 0x00bb8f2, 0x41dcae1,
0x57df710, 0x210fc04, 0x2c5ac65, 0x457d709, 0x3655d93, 0x3bccd56, 0x0da53fa, 0x52f4d8e,
0x53c27cc, 0x3e40fe5, 0x0126c6c, 0x2d5ac00, 0x0e435be, 0x3c9f6fb, 0x5074c02, 0x13d39d1,
0x4c08d7d, 0x4bababb, 0x565310d, 0x1e2bd34, 0x36df254, 0x582af32, 0x2f8aaf9, 0x4bfad70,
0x087094e, 0x110f201, 0x157c17a, 0x5cfd6a9, 0x473a6d6, 0x45d61e0, 0x1343ba2, 0x3d6eea5,
0x2617104, 0x514a1b8, 0x1a9a661, 0x4447183, 0x38d4361, 0x57105b8, 0x4a153c8, 0x58ccc8f,
0x261dfd6, 0x3493c91, 0x4d94838, 0x1348d71, 0x3a91b0b, 0x014037a, 0x43e5161, 0x3f286d9,
0x59e3641, 0x3c830cf, 0x4c4022b, 0x4e2394a, 0x4707cb2, 0x26a1e8a, 0x4c6d0c4, 0x5e57744,
0x01da8ec, 0x4971196, 0x1d9c73c, 0x5e19672, 0x4be3967, 0x02ed6e0, 0x350a8ee, 0x1774354,
0x48d7478, 0x0ecebc8, 0x27c01cf, 0x1be3728, 0x22e7a82, 0x5cb8730, 0x06b3130, 0x1016de5,
0x4c65718, 0x42e4aff, 0x421d5a7, 0x3e3da43, 0x5da8a59, 0x4e76367, 0x4699895, 0x417c513,
0x3da9578, 0x5387a0e, 0x50ae88f, 0x5e1b541, 0x5534694, 0x12f1ce6, 0x3e247e5, 0x34df1b7,
0x13c4508, 0x05e3d38, 0x0b57e4d, 0x1b12d24, 0x26908ac, 0x5ddb4c7, 0x380f95b, 0x4f1df61,
0x59fe45e, 0x5158eed, 0x2de4584, 0x5367459, 0x1572d04, 0x14f4eed, 0x2a36851, 0x192154d,
0x273d580, 0x571fd73, 0x3654fd0, 0x274977c, 0x4cd4d81, 0x3fff9dd, 0x0efa124, 0x231555f,
0x28ddd8a, 0x4fe1059, 0x4edcc99, 0x2313e4e, 0x018f36c, 0x5a67b30, 0x1a48d8c, 0x00eb84d,
0x1c0ed2c, 0x513cf0e, 0x3369c03, 0x2c0f984, 0x2b61109, 0x2e78bf9, 0x0003a5c, 0x42f746a,
0x2d878b7, 0x380011e, 0x55adfd2, 0x319a26d, 0x4cf7a0a, 0x04c9de3, 0x468f995, 0x0bc4830,
0x44b21a1, 0x55b57c8, 0x4e9d11b, 0x14a4899, 0x3835ea7, 0x44ea808, 0x2c8cf0f, 0x2fac41d,
0x1e4b845, 0x4f730fd, 0x430b796, 0x12c4c54, 0x51d6a63, 0x44e1c86, 0x3ab0049, 0x3f61687,
0x1553373, 0x25e44e4, 0x0247ace, 0x42b299a, 0x1901c52, 0x16479d5, 0x36bdecf, 0x421b211,
0x1a8a824, 0x4c0f7e0, 0x319492d, 0x35627f2, 0x188ab51, 0x314079c, 0x16dfcb2, 0x0f35b2c,
0x2399098, 0x138fb79, 0x4e82be1, 0x46c0cad, 0x346f686, 0x16e9ac6, 0x24be914, 0x3388e97,
0x1914aa5, 0x3022504, 0x50e8bf5, 0x0d31655, 0x362d570, 0x480b8a9, 0x3ba52a9, 0x38ec748,
0x036de59, 0x3d817a8, 0x4b90ddc, 0x0d00852, 0x5abe801, 0x40d9a1c, 0x5c5dfcf, 0x350dda4,
0x1064be4, 0x5534e67, 0x512817b, 0x4edefec, 0x304dc64, 0x45af5bf, 0x539cddc, 0x1ef3d68,
0x5257582, 0x30d4999, 0x3d7f582, 0x44fd7f2, 0x2c0a6f0, 0x0ff723a, 0x1a7915b, 0x03f171c,
0x447d81b, 0x05ec207, 0x02c632d, 0x415084a, 0x23b1d42, 0x5104fd1, 0x5da4b32, 0x0f1a29d,
0x1270205, 0x02680b8, 0x33a6c8c, 0x4f1f6bb, 0x30ab40b, 0x538e890, 0x0b6821f, 0x4c82906,
0x406c9d3, 0x2048f01, 0x2fecbd7, 0x06c6ae7, 0x19e7a7d, 0x4dab4f4, 0x03a9cf5, 0x2af80f2,
0x323d821, 0x290e051, 0x26d7324, 0x08bf312, 0x42e16b8, 0x39fc1e6, 0x5924f16, 0x5d286ef,
0x26ed44d, 0x52fdcf7, 0x162908d, 0x4efc7ee, 0x5cbd41a, 0x06944bb, 0x3a11d24, 0x142dc47,
0x444a2b7, 0x3affacb, 0x31a4d4b, 0x2f77002, 0x5625b5d, 0x45b9398, 0x1c3e0b1, 0x05b7689,
0x1c8d103, 0x32e91d3, 0x1032bdb, 0x5a7bd94, 0x246077a, 0x046b82a, 0x4f98e1c, 0x090ede9,
0x0f82b74, 0x59bb756, 0x2292b25, 0x529617c, 0x32535c6, 0x497059a, 0x48e0e6f, 0x536c1c3,
0x38521c8, 0x486a8a0, 0x497a789, 0x2b6ba04, 0x564264f, 0x10500a7, 0x1ce2661, 0x409a859,
0x342df5c, 0x3c057bc, 0x207e678, 0x530ab10, 0x561d66c, 0x4150294, 0x3a6792e, 0x4106a4c,
0x4828d5d, 0x2fec6cd, 0x5cf5fe9, 0x596c81c, 0x292ac60, 0x12da2ea, 0x05d2ac4, 0x4bd5492,
0x4b58470, 0x1d5c86d, 0x59f985e, 0x52b6914, 0x383a5b5, 0x293acb4, 0x0a74e03, 0x3860ca7,
0x2f08fa1, 0x4add299, 0x55703fd, 0x5afc833, 0x3a66f50, 0x330494e, 0x2e736cc, 0x2cbe45d,
0x331e9cd, 0x08d24c6, 0x56bee2d, 0x0ab1ac2, 0x5e84817, 0x153e60e, 0x12643cf, 0x3222123,
0x270c969, 0x2c614ba, 0x04fa8e2, 0x54adf59, 0x20b207c, 0x085d318, 0x45d3985, 0x2674d86,
0x234163a, 0x03f2807, 0x0d676da, 0x3eb3a3b, 0x1961553, 0x0cd4e2a, 0x2ad2ed4, 0x5484318,
0x03d4e25, 0x25a7da3, 0x2853b36, 0x30009a3, 0x3c61b30, 0x0392556, 0x0cbb436, 0x12278b2,
0x219e827, 0x2f318b6, 0x50bd090, 0x44a1397, 0x59814d3, 0x1429c61, 0x378d9c6, 0x39342cf,
0x2c99c3b, 0x52c03ef, 0x42d67dd, 0x05eba18, 0x0428471, 0x21505aa, 0x21bd644, 0x1a32d5a,
0x069b67c, 0x119af47, 0x44cda76, 0x428721d, 0x3ce54a0, 0x417b6dd, 0x3d6c2f7, 0x349ea4d,
0x33a1aef, 0x5de2b23, 0x2f4ff01, 0x085bd7f, 0x4e32400, 0x39df021, 0x470b051, 0x216c3b2,
0x194700b, 0x5def8ab, 0x1dd574a, 0x52d2a79, 0x0e6f573, 0x0591d11, 0x47d755a, 0x540aad5,
0x539b8a5, 0x12c4c9e, 0x2a939da, 0x3cc8578, 0x5a66bc1, 0x10d4fb1, 0x0f263fa, 0x28c40c7,
0x17b1e1f, 0x41cd24e, 0x2d332cc, 0x019a30f, 0x2f02597, 0x3d70fa1, 0x5b307bc, 0x5d29090,
0x5e1aba0, 0x5dcbea0, 0x4a88eb9, 0x56350a0, 0x2639b0b, 0x46fcc3c, 0x35ee1a7, 0x267af5e,
0x2e76f9a, 0x2cd6f27, 0x1365c28, 0x04c4861, 0x22de9c9, 0x53b2b1a, 0x04f1dca, 0x27d960e,
0x2f177b2, 0x5284a05, 0x1e33d12, 0x42c0a67, 0x59fa2aa, 0x1a0bfc1, 0x508b1ad, 0x43f9a35,
0x415bf73, 0x4b257a0, 0x5f1d3cd, 0x2061431, 0x2686613, 0x24364d8, 0x2781f11, 0x2363b81,
0x5ad65c0, 0x526e4b6, 0x1135fdc, 0x54125f9, 0x3e266a2, 0x30b7901, 0x200ca3b, 0x56d7ac1,
0x45fe545, 0x4eacbf3, 0x379615c, 0x22e51a4, 0x0ea253e, 0x2f40c0a, 0x08af0bf, 0x5c5e7fd,
0x15033de, 0x5561d63, 0x04e1ee7, 0x2129b39, 0x420b6b9, 0x53c99e1, 0x2dde065, 0x081faec,
0x0f31103, 0x39f8bf0, 0x359931b, 0x37a54e1, 0x296f38d, 0x354f896, 0x5502af3, 0x1f2c86b,
0x2c7c1d3, 0x0922a02, 0x2aab8c3, 0x45b3daf, 0x476086b, 0x40adb31, 0x0f4824f, 0x5bf00ee,
0x1cfdeac, 0x5bd4196, 0x4ed155a, 0x2d325f1, 0x1ff2cfd, 0x5b9c682, 0x45c47b4, 0x3474221,
0x1d59731, 0x159149b, 0x173ca10, 0x2e71d45, 0x4cb939c, 0x05adec6, 0x0c043fd, 0x1279fe9,
0x06c06a3, 0x584a237, 0x2c6b229, 0x51b3c32, 0x5972ffd, 0x0a2117e, 0x5cbe8e1, 0x4c62118,
0x530ce01, 0x13d0fa7, 0x309f98d, 0x12d0cd4, 0x4fb8719, 0x24950e3, 0x0e09770, 0x350bd6d,
0x50ec057, 0x3648f58, 0x240160d, 0x30cd6c5, 0x41231c1, 0x04c1b90, 0x0330b1f, 0x10f351a,
0x4dcc8ac, 0x5249c69, 0x46bebf6, 0x154c29e, 0x17d3710, 0x0c9a97d, 0x2d12f1d, 0x1e21d00,
0x0d8f827, 0x4060c8b, 0x4e283da, 0x504d6f5, 0x0266438, 0x26191c5, 0x4b84129, 0x573589b,
0x1bc37bc, 0x291d612, 0x4e1436e, 0x22fbead, 0x1d33ee7, 0x3ce092b, 0x1882030, 0x56a3583,
0x3437856, 0x454d80f, 0x42b35f5, 0x0d64675, 0x4d9cd11, 0x530a971, 0x2b2791a, 0x07afdbb,
0x31717d8, 0x22a651c, 0x28185d6, 0x45cc923, 0x0919219, 0x4720d41, 0x1136da8, 0x0619da7,
0x2298222, 0x527274f, 0x1847c68, 0x45ba143, 0x1fc68b9, 0x528bb16, 0x2e444f7, 0x292f753,
0x3e862f5, 0x30c2f63, 0x0e37609, 0x2524fdb, 0x39fd53d, 0x18d66fe, 0x18fc78a, 0x3c7b3d6,
0x462e8d8, 0x4ab5d33, 0x5817ed1, 0x3391293, 0x48cf2b1, 0x28396c5, 0x17c9aef, 0x37c4750,
0x2fe7de9, 0x374cbce, 0x1a08def, 0x23986b9, 0x2070650, 0x0765f0f, 0x39482c5, 0x4b37890,
0x2235d0f, 0x5240fb4, 0x0d94793, 0x57355af, 0x082d07b, 0x1feb469, 0x152aa9c, 0x3238cca,
0x2a6f125, 0x1970455, 0x5ac228e, 0x2952852, 0x0118f16, 0x37e72bd, 0x24351c2, 0x0c56e11,
0x4eb42e8, 0x32f111a, 0x1f621e9, 0x5e90794, 0x3226a64, 0x42ab6b2, 0x0643dbf, 0x30854bb,
0x110e06a, 0x2ce06c1, 0x33796e8, 0x14d1b2c, 0x031070a, 0x4b9e9de, 0x334a5e1, 0x1ccca12,
0x30c45a8, 0x46134f9, 0x3cddf1d, 0x43dac04, 0x45aa1c4, 0x2513849, 0x5299bcb, 0x5f40ca5,
0x0665e26, 0x4b780eb, 0x074b842, 0x478b5d7, 0x0892d57, 0x5301411, 0x09cc5c0, 0x3f5305e,
0x3fb9c41, 0x3770f92, 0x2a4def5, 0x4637f32, 0x0914c15, 0x0fe8210, 0x5606e29, 0x3bc2528,
0x5e62145, 0x086ab0e, 0x01bad8e, 0x29c0749, 0x45e6b95, 0x3fc85de, 0x06e5ca7, 0x54d8dfe,
0x3e76ffc, 0x24f7046, 0x52f69f4, 0x2123d7a, 0x1f0a9d9, 0x42785f4, 0x5960720, 0x452ee3d,
0x5180935, 0x4aca308, 0x540c9d5, 0x21a9a0d, 0x07389a1, 0x1e03969, 0x5a9f5f5, 0x5b80384,
0x3278cdd, 0x20315ff, 0x3b937c8, 0x2f3d8cc, 0x4c67fdf, 0x4c6e2c7, 0x0210d8b, 0x4dfb4ab,
0x12445c9, 0x28a79f0, 0x271900a, 0x0376c2a, 0x0166b17, 0x28a672e, 0x34cac10, 0x413e828,
0x4a9759b, 0x0ce0f53, 0x5d6d020, 0x1e7bde0, 0x2adb971, 0x11f26cd, 0x4575c09, 0x2e6236e,
0x5be0df6, 0x1f552b8, 0x1ae0566, 0x28f71de, 0x2b84dbe, 0x2bcd4bd, 0x09be4d2, 0x4860e49,
0x3cd20fc, 0x06f9064, 0x31edcf8, 0x251bca5, 0x34479a1, 0x3647845, 0x2ad3bf1, 0x073f9f0,
0x24cb199, 0x57d71fc, 0x3f9ac7c, 0x412904d, 0x1eeacfe, 0x2c35c86, 0x09ddf75, 0x3033b89,
0x4bd908d, 0x1996fcc, 0x2cd4f75, 0x2c92c3c, 0x33ae01a, 0x1093d71, 0x5aa7baa, 0x4a86577,
0x25c4434, 0x41961f4, 0x5a6f3c7, 0x575d2fd, 0x3c4c39f, 0x545a974, 0x5570682, 0x4e1750b,
0x3ef6ee7, 0x28d06af, 0x31a256f, 0x5334be8, 0x093e26f, 0x4796805, 0x5a228bd, 0x214203e,
0x267537e, 0x54ee1ee, 0x35d2813, 0x4e3eed6, 0x29fc8ef, 0x0c2309d, 0x24c1e4a, 0x3828772,
0x294cb93, 0x4e0d631, 0x16a8a5f, 0x06380ca, 0x146834b, 0x5d493a5, 0x3353f6b, 0x5dcf412,
0x4a40a06, 0x19396c5, 0x3d40f48, 0x58f277b, 0x5082b70, 0x096896d, 0x213d04c, 0x11561bd,
0x2405626, 0x1a30a65, 0x5bdf120, 0x2fe661a, 0x4f54188, 0x4773e64, 0x23bb84b, 0x2938adb,
0x59d4767, 0x0dc0cce, 0x1fd8f50, 0x5de93a3, 0x307559a, 0x41c9c70, 0x33f296b, 0x49564cd,
0x1728967, 0x5572a22, 0x167f580, 0x30cb478, 0x25d7b3e, 0x38b3504, 0x38484ce, 0x339f21b,
0x1ef5cf7, 0x0b70d8c, 0x0b93ac3, 0x1afccbf, 0x5780fd3, 0x06558c8, 0x43b2a5d, 0x5b4626e,
0x5e5121c, 0x302ffdb, 0x0e186df, 0x49a049f, 0x06fe3c5, 0x15574a8, 0x5d5f256, 0x2fa0ad6,
0x0d545bc, 0x2c33e9f, 0x1ce8dea, 0x32c3c8c, 0x222e839, 0x3286b7f, 0x29f9000, 0x083cd91,
0x32dc014, 0x4426bde, 0x2e36e6b, 0x38c03c0, 0x0b8930c, 0x2b2c4ac, 0x384bc6c, 0x228142e,
0x42df93b, 0x4ca9a67, 0x0addfae, 0x26d6ff4, 0x2181387, 0x2ca2aa2, 0x520faf4, 0x3b89847,
0x1c8936b, 0x4d43776, 0x13a9d3f, 0x29537e1, 0x07f3c86, 0x2431d30, 0x0fc8938, 0x021ca5b,
0x493da18, 0x1f7d16b, 0x1cdd508, 0x3b2576b, 0x2d92e15, 0x46278dd, 0x002c05c, 0x002ffef,
0x17c98df, 0x54a4042, 0x42ee518, 0x322a133, 0x4998b6a, 0x2249c3c, 0x51637d7, 0x10821ba,
0x5430454, 0x22d7917, 0x0bebbcf, 0x1a085c0, 0x2d0a6b5, 0x508664a, 0x0ecfe27, 0x0ad943d,
0x46cfaeb, 0x4ff27eb, 0x3d4bf1c, 0x2556e37, 0x5bbf38f, 0x27a0ded, 0x0678873, 0x4707dd8,
0x07ec2c3, 0x3eeef64, 0x5c831e0, 0x32c1362, 0x304530b, 0x21d1066, 0x3bc740f, 0x46e4fef,
0x1b52fc5, 0x3759882, 0x58354c6, 0x32b53e7, 0x4191ba0, 0x53aa864, 0x0dc68a0, 0x3069456,
0x5d4cd11, 0x0ea1224, 0x12de9fb, 0x2677a63, 0x03a91a9, 0x5ca697c, 0x0addead, 0x2b219cc,
0x02d21d5, 0x35bb686, 0x22ee455, 0x06bb267, 0x096f12d, 0x4aeba17, 0x331d452, 0x1a193d5,
0x01b6fa2, 0x3158ad6, 0x3616ab3, 0x3f5f64d, 0x543c3be, 0x4f8e55a, 0x5865875, 0x1987e49,
0x549e323, 0x0a7c16f, 0x5a977dd, 0x2a4fdd1, 0x07c0911, 0x11f6bb3, 0x4a05c34, 0x245754e,
0x512e836, 0x36a0fef, 0x496d3f0, 0x041cb0f, 0x0f9b6ee, 0x3b10f70, 0x3bc2efc, 0x5719e3b,
0x2aeda17, 0x17065f0, 0x3db44ff, 0x55d7b26, 0x2e1e859, 0x5869d14, 0x1310d92, 0x1e02d41,
0x45c3134, 0x4072c88, 0x254c979, 0x5141c81, 0x56ac15b, 0x0cb4b87, 0x1ca522b, 0x53df04a,
0x163bee7, 0x33c3686, 0x2823053, 0x1b4068c, 0x30a1e0a, 0x3bd6d3b, 0x4172407, 0x1734d9f,
0x316842b, 0x27cab0e, 0x384aa6f, 0x486db5c, 0x57fb84f, 0x1eba66d, 0x5925c43, 0x0dd34c7,
0x1983276, 0x1eb5679, 0x11ccf9f, 0x496f98c, 0x1c35b4b, 0x48b7444, 0x48bceed, 0x01d9c13,
0x1ddee3b, 0x1127181, 0x5ac1a92, 0x1fd4bc5, 0x0b166cd, 0x107b011, 0x52c02c6, 0x199c690,
0x490fed8, 0x2b77c22, 0x383bd32, 0x040d7df, 0x44ce3bf, 0x2c6e777, 0x3dd86af, 0x3fa677b,
0x1d46fff, 0x146703c, 0x07dc71f, 0x05a6b46, 0x53660a3, 0x3b4b5c9, 0x4ec4cbb, 0x248ae53,
0x0d5d155, 0x4363005, 0x2cbd064, 0x5c18f03, 0x214bedd, 0x42ef202, 0x41827cd, 0x27a8fe9,
};
NS_ENGINE_END

View File

@ -34,7 +34,7 @@ TileMapPosition recannonicalize_position( TileMap* tile_map, TileMapPosition pos
cannonicalize_coord( tile_map, & result.tile_y, & result.y );
return result;
}
inline
u32 TileChunk_get_tile_value( TileChunk* tile_chunk, TileMap* tile_map, u32 x, u32 y )
{
@ -48,9 +48,9 @@ u32 TileChunk_get_tile_value( TileChunk* tile_chunk, TileMap* tile_map, u32 x, u
}
inline
void TileChunk_set_tile_value( TileChunk* tile_chunk, TileMap* tile_map, u32 x, u32 y , u32 value)
void TileChunk_set_tile_value( TileChunk* tile_chunk, TileMap* tile_map, u32 x, u32 y, u32 value)
{
assert( tile_map != nullptr );
assert( tile_map != nullptr );
assert( tile_chunk != nullptr );
assert( x < tile_map->chunk_dimension );
assert( y < tile_map->chunk_dimension );
@ -59,43 +59,48 @@ void TileChunk_set_tile_value( TileChunk* tile_chunk, TileMap* tile_map, u32 x,
}
inline
TileChunk* TileMap_get_chunk( TileMap* tile_map, s32 tile_chunk_x, s32 tile_chunk_y )
TileChunk* TileMap_get_chunk( TileMap* tile_map, s32 tile_chunk_x, s32 tile_chunk_y, s32 tile_chunk_z )
{
TileChunk* chunk = nullptr;
TileChunk* chunk = nullptr;
if ( tile_chunk_x >= 0 && tile_chunk_x < scast(s32, tile_map->tile_chunks_num_x)
&& tile_chunk_y >= 0 && tile_chunk_y < scast(s32, tile_map->tile_chunks_num_y) )
&& tile_chunk_y >= 0 && tile_chunk_y < scast(s32, tile_map->tile_chunks_num_y)
&& tile_chunk_z >= 0 && tile_chunk_z < scast(s32, tile_map->tile_chunks_num_z) )
{
chunk = & tile_map->chunks[ tile_chunk_y * tile_map->tile_chunks_num_x + tile_chunk_x ];
}
chunk = & tile_map->chunks[
tile_chunk_z * tile_map->tile_chunks_num_y * tile_map->tile_chunks_num_x
+ tile_chunk_y * tile_map->tile_chunks_num_x
+ tile_chunk_x ];
}
return chunk;
}
inline
TileChunkPosition get_tile_chunk_position_for( TileMap* tile_map, u32 abs_tile_x, u32 abs_tile_y )
TileChunkPosition get_tile_chunk_position_for( TileMap* tile_map, u32 abs_tile_x, u32 abs_tile_y, u32 abs_tile_z )
{
assert( tile_map != nullptr );
TileChunkPosition chunk_pos {};
chunk_pos.tile_chunk_x = abs_tile_x >> tile_map->chunk_shift;
chunk_pos.tile_chunk_y = abs_tile_y >> tile_map->chunk_shift;
chunk_pos.tile_chunk_z = abs_tile_z;
chunk_pos.tile_x = abs_tile_x & tile_map->chunk_mask;
chunk_pos.tile_y = abs_tile_y & tile_map->chunk_mask;
return chunk_pos;
}
u32 TileMap_get_tile_value( TileMap* tile_map, u32 tile_x, u32 tile_y )
u32 TileMap_get_tile_value( TileMap* tile_map, u32 tile_x, u32 tile_y, u32 tile_z )
{
assert( tile_map != nullptr );
u32 value = 0;
TileChunkPosition chunk_pos = get_tile_chunk_position_for( tile_map, tile_x, tile_y );
TileChunk* chunk = TileMap_get_chunk( tile_map, chunk_pos.tile_chunk_x, chunk_pos.tile_chunk_y );
TileChunkPosition chunk_pos = get_tile_chunk_position_for( tile_map, tile_x, tile_y, tile_z );
TileChunk* chunk = TileMap_get_chunk( tile_map, chunk_pos.tile_chunk_x, chunk_pos.tile_chunk_y, chunk_pos.tile_chunk_z );
if ( chunk )
if ( chunk && chunk->tiles )
value = TileChunk_get_tile_value( chunk, tile_map, chunk_pos.tile_x, chunk_pos.tile_y );
return value;
}
@ -105,25 +110,29 @@ b32 TileMap_is_point_empty( TileMap* tile_map, TileMapPosition position )
{
assert( tile_map != nullptr );
u32 chunk_value = TileMap_get_tile_value( tile_map, position.tile_x, position.tile_y );
b32 is_empty = chunk_value == 0;
u32 chunk_value = TileMap_get_tile_value( tile_map, position.tile_x, position.tile_y, position.tile_z );
b32 is_empty = chunk_value == 1;
return is_empty;
}
internal
void TileMap_set_tile_value( MemoryArena* arena, TileMap* tile_map, u32 abs_tile_x, u32 abs_tile_y, u32 value )
void TileMap_set_tile_value( MemoryArena* arena, TileMap* tile_map, u32 abs_tile_x, u32 abs_tile_y, u32 abs_tile_z, u32 value )
{
TileChunkPosition chunk_pos = get_tile_chunk_position_for( tile_map, abs_tile_x, abs_tile_y );
TileChunk* chunk = TileMap_get_chunk( tile_map, chunk_pos.tile_chunk_x, chunk_pos.tile_chunk_y );
#if 0
if ( chunk == nullptr )
{
}
#else
TileChunkPosition chunk_pos = get_tile_chunk_position_for( tile_map, abs_tile_x, abs_tile_y, abs_tile_z );
TileChunk* chunk = TileMap_get_chunk( tile_map, chunk_pos.tile_chunk_x, chunk_pos.tile_chunk_y, chunk_pos.tile_chunk_z );
assert( chunk != nullptr );
#endif
if ( chunk->tiles == nullptr )
{
ssize num_tiles = tile_map->chunk_dimension * tile_map->chunk_dimension;
chunk->tiles = arena->push_array( u32, num_tiles );
for ( ssize tile_index = 0; tile_index < num_tiles; ++ tile_index )
{
chunk->tiles[ tile_index ] = 1;
}
}
TileChunk_set_tile_value( chunk, tile_map, chunk_pos.tile_x, chunk_pos.tile_y, value );
}

View File

@ -23,6 +23,7 @@ struct TileChunkPosition
{
u32 tile_chunk_x;
u32 tile_chunk_y;
u32 tile_chunk_z;
// "Chunk-relative (x, y)
@ -35,11 +36,11 @@ struct TileMap
// TODO(Ed) : Beginner's sparseness
s32 tile_chunks_num_x;
s32 tile_chunks_num_y;
s32 tile_chunks_num_z;
s32 tile_size_in_pixels;
f32 tile_size_in_meters;
f32 tile_meters_to_pixels;
// TODO(Ed) : Real sparseness ? (not use the giant pointer array)
u32 chunk_shift;
u32 chunk_mask;
u32 chunk_dimension;
@ -60,6 +61,7 @@ struct TileMapPosition
u32 tile_x;
u32 tile_y;
u32 tile_z;
};
NS_ENGINE_END

View File

@ -3,15 +3,12 @@
NS_ENGINE_BEGIN
constexpr
Str const symbol_on_module_load = str_ascii("?on_module_reload@engine@@YAXPEAUMemory@1@PEAUModuleAPI@platform@@@Z");
constexpr
Str const symbol_startup = str_ascii("?startup@engine@@YAXPEAUOffscreenBuffer@1@PEAUMemory@1@PEAUModuleAPI@platform@@@Z");
constexpr
Str const symbol_shutdown = str_ascii("?shutdown@engine@@YAXPEAUMemory@1@PEAUModuleAPI@platform@@@Z");
constexpr
Str const symbol_update_and_render = str_ascii("?update_and_render@engine@@YAXMPEAUInputState@1@PEAUOffscreenBuffer@1@PEAUMemory@1@PEAUModuleAPI@platform@@PEAUThreadContext@1@@Z");
constexpr
Str const symbol_update_audio = str_ascii("?update_audio@engine@@YAXMPEAUAudioBuffer@1@PEAUMemory@1@PEAUModuleAPI@platform@@PEAUThreadContext@1@@Z");
constexpr Str const symbol_on_module_load = str_ascii( "?on_module_reload@engine@@YAXPEAUMemory@1@PEAUModuleAPI@platform@@@Z" );
constexpr Str const symbol_startup = str_ascii( "?startup@engine@@YAXPEAUOffscreenBuffer@1@PEAUMemory@1@PEAUModuleAPI@platform@@@Z" );
constexpr Str const symbol_shutdown = str_ascii( "?shutdown@engine@@YAXPEAUMemory@1@PEAUModuleAPI@platform@@@Z" );
constexpr Str const symbol_update_and_render =
str_ascii( "?update_and_render@engine@@YAXMPEAUInputState@1@PEAUOffscreenBuffer@1@PEAUMemory@1@PEAUModuleAPI@platform@@PEAUThreadContext@1@@Z" );
constexpr Str const symbol_update_audio =
str_ascii( "?update_audio@engine@@YAXMPEAUAudioBuffer@1@PEAUMemory@1@PEAUModuleAPI@platform@@PEAUThreadContext@1@@Z" );
NS_ENGINE_END

View File

@ -28,4 +28,5 @@ Handmade Engine Translation Unit
#include "handmade.hpp"
#include "tile_map.cpp"
#include "random.cpp"
#include "engine.cpp"

View File

@ -1,5 +1,3 @@
//This was generated by project/codegen/platform_gen.cpp
#define using_context() \
Context * parent;
// This was generated by project/codegen/platform_gen.cpp
#define using_context() Context* parent;

View File

@ -1,6 +1,7 @@
#if INTELLISENSE_DIRECTIVES
#include "platform.hpp"
#include "engine/engine.hpp"
#include "engine/input.hpp"
#include "jsl.hpp"
#include "win32.hpp"
#endif

View File

@ -303,7 +303,7 @@ function build-engine
$path_generated_file = Join-Path $path_build 'engine_symbol_table.hpp'
move-item $path_generated_file (join-path $path_gen (split-path $path_generated_file -leaf)) -Force
$should_format_gen = $true
$script:should_format_gen = $true
return $true
}
@ -374,7 +374,7 @@ function build-platform
}
Pop-Location
$should_format_gen = $true
$script:should_format_gen = $true
}
# Delete old PDBs
@ -423,6 +423,7 @@ if ( (Test-Path $path_jsl_dll) -eq $false )
if ( $should_format_gen )
{
write-host 'Formatting...'
push-location $path_scripts
$include = @(
'*.cpp'