filebrowser
authorhgn <hgodden00@gmail.com>
Tue, 18 Mar 2025 15:31:23 +0000 (15:31 +0000)
committerhgn <hgodden00@gmail.com>
Tue, 18 Mar 2025 15:31:23 +0000 (15:31 +0000)
15 files changed:
src/fonts/vg_font_thin_3.png
src/fonts/vg_font_thin_3.xcf
vg_build_font.h
vg_console.c
vg_engine.c
vg_input.c
vg_io.c
vg_io.h
vg_pxfont_thin.h
vg_render.c
vg_render.h
vg_ui/filebrowser.c [new file with mode: 0644]
vg_ui/filebrowser.h [new file with mode: 0644]
vg_ui/imgui.c
vg_ui/imgui.h

index d3239dd08582a998fbd1560b02452d581befbec0..e729ffaf6b90678273d282998c12b556c08c436d 100644 (file)
Binary files a/src/fonts/vg_font_thin_3.png and b/src/fonts/vg_font_thin_3.png differ
index 66e8368ea080f9e3456c328de02683f3bfdca77d..a68c8ed7dc9dd58457e53f9b5c4d7d312533613c 100644 (file)
Binary files a/src/fonts/vg_font_thin_3.xcf and b/src/fonts/vg_font_thin_3.xcf differ
index e743b468d2e01b20f8c2484acacd511c1ade00ee..5a03155f6041f78392231cddcafbea095804d033 100644 (file)
@@ -94,8 +94,7 @@ void vg_build_font_sheet( FILE *fp, char *name, const char *source )
 void vg_build_default_font(void)
 {
    FILE *fp = fopen( "vg/vg_default_font.gc", "w" );
-   vg_build_font_sheet( fp, "vg_default_font_sheet", 
-                         "vg/src/fonts/vg_font_thin_3.png" );
+   vg_build_font_sheet( fp, "vg_default_font_sheet", "vg/src/fonts/vg_font_thin_3.png" );
    vg_font_face small =
    {
       .name = "vgf_default_small",
@@ -111,7 +110,7 @@ void vg_build_default_font(void)
    vg_build_font_face_run( &small, 'a', 'z', 0,  28 );
    vg_build_font_face_run( &small, '0', '9', 208,14 );
    vg_build_font_face_run( &small, 0x7f, 0xa4, 0,42 );
-   vg_build_font_face_run( &small, 0xb0, 0xb3, 208,28 );
+   vg_build_font_face_run( &small, 0xb0, 0xbe, 208,28 );
    vg_build_write_font_face( fp, &small );
 
    vg_font_face large =
@@ -129,7 +128,7 @@ void vg_build_default_font(void)
    vg_build_font_face_run( &large, 'a', 'z', 0,  98  );
    vg_build_font_face_run( &large, '0', '9', 312,77  );
    vg_build_font_face_run( &large, 0x7f, 0xa4, 0,119 );
-   vg_build_font_face_run( &large, 0xb0, 0xb3, 312,98 );
+   vg_build_font_face_run( &large, 0xb0, 0xbe, 312,98 );
    vg_build_write_font_face( fp, &large );
    
    vg_font_face title =
index e8579427fc1445137d82d5a289ee47d037119833..f9f56bb56021c036f72171e8f97c13fa3ee2078a 100644 (file)
@@ -7,8 +7,7 @@
 
 struct vg_console vg_console;
 
-void vg_console_reg_var( const char *alias, void *ptr, enum vg_var_dtype type, 
-                         u32 flags )
+void vg_console_reg_var( const char *alias, void *ptr, enum vg_var_dtype type, u32 flags )
 {
    VG_ASSERT( vg_thread_purpose() != k_thread_purpose_main );
    VG_ASSERT( vg_console.var_count < VG_ARRAY_LEN(vg_console.vars) );
@@ -504,7 +503,7 @@ void console_suggest_prev( ui_context *ctx )
    }
 }
 
-static void _vg_console_on_update( ui_context *ctx, char *buf, u32 len )
+static void _vg_console_on_update( ui_context *ctx, char *buf, u32 len, void *userdata )
 {
    if( buf == vg_console.input )
    {
@@ -523,7 +522,7 @@ static void console_history_get( char* buf, int entry_num )
        strcpy( buf, vg_console.history[ pick ] );
 }
 
-static void _vg_console_on_up( ui_context *ctx, char *buf, u32 len )
+static void _vg_console_on_up( ui_context *ctx, char *buf, u32 len, void *userdata )
 {
    if( buf == vg_console.input )
    {
@@ -550,7 +549,7 @@ static void _vg_console_on_up( ui_context *ctx, char *buf, u32 len )
    }
 }
 
-static void _vg_console_on_down( ui_context *ctx, char *buf, u32 len )
+static void _vg_console_on_down( ui_context *ctx, char *buf, u32 len, void *userdata )
 {
    if( buf == vg_console.input )
    {
@@ -564,7 +563,7 @@ static void _vg_console_on_down( ui_context *ctx, char *buf, u32 len )
    }
 }
 
-static void _vg_console_on_enter( ui_context *ctx, char *buf, u32 len )
+static void _vg_console_on_enter( ui_context *ctx, char *buf, u32 len, void *userdata )
 {
    if( buf == vg_console.input )
    {
index e9151a59cd30f237eb0b3b6a4f4c42ef4e488c1b..4a971f5612fd4c90f615d3e20be1e1162b631c93 100644 (file)
@@ -124,7 +124,7 @@ void vg_auto_shader_register(void); /* created from codegen */
 static void _vg_load_full( void *data )
 {
 vg_info(" Copyright  .        . .       -----, ,----- ,---.   .---.  \n" );
-vg_info(" 2021-2024  |\\      /| |           /  |      |    | |    /| \n" );
+vg_info(" 2021-2025  |\\      /| |           /  |      |    | |    /| \n" );
 vg_info("            | \\    / | +--        /   +----- +---'  |   / | \n" );
 vg_info("            |  \\  /  | |         /    |      |   \\  |  /  | \n" );
 vg_info("            |   \\/   | |        /     |      |    \\ | /   | \n" );
@@ -892,7 +892,7 @@ static void vg_settings_ui_draw_diff( ui_context *ctx, ui_rect orig )
 /* i32 settings 
  * ------------------------------------------------------------------------- */
 
-static void vg_settings_ui_int( ui_context *ctx, char *buf, u32 len )
+static void vg_settings_ui_int( ui_context *ctx, char *buf, u32 len, void *userdata )
 {
    for( u32 i=0, j=0; i<len; i ++ )
    {
index ee0df5fd49ba84623c85afc1d5e08b26d4ccbfd8..9ca03a41b7f582f37cb5f0c0c4d5cf8894602475 100644 (file)
@@ -51,11 +51,13 @@ static int vg_open_gamecontroller( Sint32 index )
       }
    }
 
-   if( controller ){
+   if( controller )
+   {
       controller->handle = SDL_GameControllerOpen( index );
       controller->instance_id = instance_id;
 
-      if( controller->handle ){
+      if( controller->handle )
+      {
          vg_success( 
                " . opened SDL_JoystickID[%d] as controller '%s' at index #%d\n",
                instance_id, name, vg_id );
@@ -66,11 +68,11 @@ static int vg_open_gamecontroller( Sint32 index )
          for( u32 i=0; i< SDL_CONTROLLER_AXIS_MAX; i++ )
             controller->axises[i] = 0.0f;
 
-         if( vg_input.active_controller_index == -2 ){
+         if( vg_input.active_controller_index == -2 )
+         {
             vg_input.active_controller_index = vg_id;
             vg_input.display_input_method = k_input_method_controller;
-            vg_input.display_input_type = 
-               SDL_GameControllerGetType( controller->handle );
+            vg_input.display_input_type = SDL_GameControllerGetType( controller->handle );
          }
 
          return vg_id;
@@ -103,8 +105,7 @@ void vg_input_device_event( SDL_Event *ev )
       }
    }
    else if( ev->type == SDL_CONTROLLERDEVICEREMOVED ){
-      vg_info( "SDL_CONTROLLERDEVICEREMOVED | instance_id: %d\n", 
-                  ev->cdevice.which );
+      vg_info( "SDL_CONTROLLERDEVICEREMOVED | instance_id: %d\n", ev->cdevice.which );
 
       for( int i=0; i<VG_MAX_CONTROLLERS; i++ ){
          struct vg_controller *controller = &vg_input.controllers[i];
@@ -132,8 +133,7 @@ static void vg_input_set_active_controller( int index, const char *why )
 {
    if( vg_input.active_controller_index != index )
    {
-      vg_input.display_input_type = 
-         SDL_GameControllerGetType( vg_input.controllers[index].handle );
+      vg_input.display_input_type = SDL_GameControllerGetType( vg_input.controllers[index].handle );
       vg_input.active_controller_index = index;
       vg_info( "Switching controller index to #%d. (%s)\n", index, why );
    }
@@ -208,35 +208,50 @@ void vg_process_inputs(void)
    vg_input.sdl_keys = SDL_GetKeyboardState( &count );
    vg_input.sdl_mouse = SDL_GetMouseState(NULL,NULL);
 
-   if( vg_input.display_input_method != k_input_method_kbm )
+   bool pressed_key = 0, moved_mouse = 0, clicked_mouse = 0;
+   int pressed_id = -1;
+
+   for( int i=0; i<count; i++ )
    {
-      /* check for giving keyboard priority */
-      for( int i=0; i<count; i++ )
+      if( vg_input.sdl_keys[i] )
       {
-         if( vg_input.sdl_keys[i] )
-         {
-            vg_input.display_input_method = k_input_method_kbm;
-            vg_info( "display_input: k_input_method_kbm (keyboard %d)\n", i );
-            break;
-         }
+         pressed_id = i;
+         pressed_key = 1;
+         break;
       }
+   }
 
-      /* check for giving mouse priority */
-      if( vg_input.sdl_mouse & 
-            (SDL_BUTTON(SDL_BUTTON_LEFT)|SDL_BUTTON(SDL_BUTTON_RIGHT)|
-             SDL_BUTTON(SDL_BUTTON_MIDDLE)) )
+   if( vg_input.sdl_mouse & (SDL_BUTTON(SDL_BUTTON_LEFT)|SDL_BUTTON(SDL_BUTTON_RIGHT)|SDL_BUTTON(SDL_BUTTON_MIDDLE)) )
+   {
+      clicked_mouse = 1;
+   }
+
+   vg_input.hidden_mouse_travel += v2_length( vg.mouse_delta ); 
+   if( vg_input.hidden_mouse_travel > 64.0f )
+   {
+      moved_mouse = 1;
+      vg_input.hidden_mouse_travel = 0.0f;
+   }
+
+   if( vg_input.display_input_method != k_input_method_kbm )
+   {
+      if( pressed_key )
       {
          vg_input.display_input_method = k_input_method_kbm;
-         vg_info( "display_input: k_input_method_kbm (mouse click)\n" );
+         vg_info( "display_input: k_input_method_kbm (keyboard %d)\n", pressed_id );
       }
 
-      vg_input.hidden_mouse_travel += v2_length( vg.mouse_delta ); 
-      if( vg_input.hidden_mouse_travel > 64.0f )
+      if( moved_mouse )
       {
          vg_input.display_input_method = k_input_method_kbm;
-         vg_input.hidden_mouse_travel = 0.0f;
          vg_info( "display_input: k_input_method_kbm (mouse move)\n" );
       }
+
+      if( clicked_mouse )
+      {
+         vg_input.display_input_method = k_input_method_kbm;
+         vg_info( "display_input: k_input_method_kbm (mouse click)\n" );
+      }
    }
    else
       vg_input.hidden_mouse_travel = 0.0f;
@@ -254,9 +269,8 @@ void async_vg_input_init( void *payload, u32 size )
 
       vg_info( "%d: %s [controller: %d]\n", i, name, is_controller );
 
-      if( is_controller ){
+      if( is_controller )
          vg_open_gamecontroller( i );
-      }
    }
 }
 
@@ -268,10 +282,12 @@ void vg_input_init(void)
 
 void vg_input_free(void)
 {
-   for( int i=0; i<VG_MAX_CONTROLLERS; i++ ){
+   for( int i=0; i<VG_MAX_CONTROLLERS; i++ )
+   {
       struct vg_controller *controller = &vg_input.controllers[i];
 
-      if( controller->handle ){
+      if( controller->handle )
+      {
          SDL_GameControllerClose( controller->handle );
          controller->handle = NULL;
       }
@@ -540,8 +556,10 @@ void vg_input_string( vg_str *str, vg_input_op *ops, int glyphs )
 next_code:;
    vg_input_op op = ops[ pc ++ ];
 
-   if( (op == vg_keyboard) || (op == vg_mouse) ){
-      if( (vg_input.display_input_method == k_input_method_kbm) && visible ){
+   if( (op == vg_keyboard) || (op == vg_mouse) )
+   {
+      if( (vg_input.display_input_method == k_input_method_kbm) && visible )
+      {
          applicable = 1;
          
          if( op == vg_keyboard )
@@ -552,9 +570,10 @@ next_code:;
       else applicable = 0;
       pc ++;
    }
-   else if( (op == vg_joy_button) || (op == vg_joy_axis) ){
-      if( (vg_input.display_input_method == k_input_method_controller) 
-            && visible ){
+   else if( (op == vg_joy_button) || (op == vg_joy_axis) )
+   {
+      if( (vg_input.display_input_method == k_input_method_controller) && visible )
+      {
          applicable = 1;
 
          if( op == vg_joy_button )
@@ -565,9 +584,10 @@ next_code:;
       else applicable = 0;
       pc ++;
    }
-   else if( (op == vg_joy_ls) || (op == vg_joy_rs) ){
-      if( (vg_input.display_input_method == k_input_method_controller) 
-            && visible ){
+   else if( (op == vg_joy_ls) || (op == vg_joy_rs) )
+   {
+      if( (vg_input.display_input_method == k_input_method_controller) && visible )
+      {
          applicable = 1;
          vg_joy_string( str, op, glyphs );
       }
diff --git a/vg_io.c b/vg_io.c
index b100992649075236e4f99ef8548a21fd9548c3a0..da4dd39f584737f0e68b902fba7b4ec46e217d77 100644 (file)
--- a/vg_io.c
+++ b/vg_io.c
@@ -7,7 +7,15 @@
 #include <string.h>
 #include <errno.h>
 
-int vg_dir_open( vg_dir *dir, const char *name )
+const char *dir_open_result_str[] = 
+{
+   [k_dir_open_none] = "None",
+   [k_dir_open_ok] = "OK",
+   [k_dir_open_path_too_long] = "Path too long",
+   [k_dir_open_invalid_path] = "Invalid path"
+};
+
+enum dir_open_result vg_dir_open( vg_dir *dir, const char *name )
 {
 #ifdef _WIN32
    char q_buf[4096];
@@ -15,23 +23,28 @@ int vg_dir_open( vg_dir *dir, const char *name )
    vg_strnull( &q, q_buf, 4096 );
    vg_strcat( &q, name );
    vg_strcat( &q, "/*" );
-   if( !vg_strgood(&q) ) return 0;
+   if( !vg_strgood(&q) ) 
+      return k_dir_open_path_too_long;
 
    vg_info( "FindFirstFile( '%s' )\n", q.buffer );
    dir->h = FindFirstFile( q.buffer, &dir->data );
-   if( dir->h == INVALID_HANDLE_VALUE ){
-      if( GetLastError() == ERROR_FILE_NOT_FOUND ){
+   if( dir->h == INVALID_HANDLE_VALUE )
+   {
+      if( GetLastError() == ERROR_FILE_NOT_FOUND )
+      {
          dir->index = 0;
-         return 1;
+         return k_dir_open_ok;
       }
-      else return 0;
+      else 
+         return k_dir_open_invalid_path;
    }
 #else
    dir->h = opendir( name );
-   if( !dir->h ) return 0;
+   if( !dir->h ) 
+      return k_dir_open_invalid_path;
 #endif
    dir->index = 1;
-   return 1;
+   return k_dir_open_ok;
 }
 
 const char *vg_dir_entry_name( vg_dir *dir )
@@ -43,41 +56,56 @@ const char *vg_dir_entry_name( vg_dir *dir )
 #endif
 }
 
-int vg_dirskip( vg_dir *dir )
+static int vg_dirskip( vg_dir *dir )
 {
    const char *s = vg_dir_entry_name(dir);
 #ifdef _WIN32
-   if( dir->data.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN ) return 1;
+   if( dir->data.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN ) 
+      return 1;
 #endif
-   if( s[0] == '.' ){
-      if( s[1] == '\0' ) return 1;
-      else if( s[1] == '.' ){
-         if( s[2] == '\0' ) return 1;
+   if( s[0] == '.' )
+   {
+      if( s[1] == '\0' ) 
+         return 1;
+      else if( s[1] == '.' )
+      {
+         if( s[2] == '\0' ) 
+            return 1;
       }
    }
    return 0;
 }
 
-int vg_dir_next_entry( vg_dir *dir )
+bool vg_dir_next_entry( vg_dir *dir )
 {
 #ifdef _WIN32
-   if( dir->index == 0 ) return 0;
-   if( dir->index > 1 ) {
+   if( dir->index == 0 ) 
+      return 0;
+
+   if( dir->index > 1 ) 
+   {
       dir->index ++;
-      if( !FindNextFile( dir->h, &dir->data ) ) return 0;
+      if( !FindNextFile( dir->h, &dir->data ) ) 
+         return 0;
    }
-   while( vg_dirskip(dir) ){
+   while( vg_dirskip(dir) )
+   {
       dir->index ++;
-      if( !FindNextFile( dir->h, &dir->data ) ) return 0;
+      if( !FindNextFile( dir->h, &dir->data ) ) 
+         return 0;
    }
-   if( dir->index == 1 ) dir->index ++;
+   if( dir->index == 1 ) 
+      dir->index ++;
    return 1;
 #else
-   while( (dir->data = readdir(dir->h)) ){
+   while( (dir->data = readdir(dir->h)) )
+   {
       dir->index ++;
-      if( !vg_dirskip(dir) ) break;
+      if( !vg_dirskip(dir) ) 
+         break;
    }
-   if( dir->data ) return 1;
+   if( dir->data ) 
+      return 1;
    else return 0;
 #endif
 }
@@ -87,12 +115,13 @@ enum vg_entry_type vg_dir_entry_type( vg_dir *dir )
 #ifdef _WIN32
    if( dir->data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) 
       return k_vg_entry_type_dir;
-   return k_vg_entry_type_file; /* sketchy? */
+   else 
+      return k_vg_entry_type_file; /* sketchy? */
 #else
    if( dir->data->d_type == DT_DIR ) return k_vg_entry_type_dir;
    if( dir->data->d_type == DT_REG ) return k_vg_entry_type_file;
 #endif
-   return 0;
+   return k_vg_entry_type_unknown;
 }
 
 void vg_dir_close( vg_dir *dir )
diff --git a/vg_io.h b/vg_io.h
index 0991f0eb69dca24112b7083a524bd5ab60833e93..8f81365c781c7fac66cd3c1298e0f98ac08b4892 100644 (file)
--- a/vg_io.h
+++ b/vg_io.h
@@ -29,10 +29,18 @@ enum vg_entry_type{
    k_vg_entry_type_dir
 };
 
-int vg_dir_open( vg_dir *dir, const char *name );
+enum dir_open_result
+{
+   k_dir_open_none,
+   k_dir_open_ok,
+   k_dir_open_path_too_long,
+   k_dir_open_invalid_path
+};
+extern const char *dir_open_result_str[];
+enum dir_open_result vg_dir_open( vg_dir *dir, const char *name );
+
 const char *vg_dir_entry_name( vg_dir *dir );
-int vg_dirskip( vg_dir *dir );
-int vg_dir_next_entry( vg_dir *dir );
+bool vg_dir_next_entry( vg_dir *dir );
 enum vg_entry_type vg_dir_entry_type( vg_dir *dir );
 void vg_dir_close( vg_dir *dir );
 
index 96a6bc167e0d4121b4628af891b4dd00f8a0d82f..e796af68557d5e88582d866e0ee5146f5a0e4ecf 100644 (file)
-/* Font buffer generated from source file: 'src/fonts/vg_font_thin.png' */
-0xc3002800,0x8000020,0x8100000,0,0,0,0,0,
-0x81102800,0x1c000020,0x10080010,0x2,0x3c103c7c,0x407c387c,0x38380000,0,
-0x102822,0x22202020,0x20040010,0x2,0x46304208,0x48404404,0x44440000,0x38,
-0x100022,0x20525000,0x20045410,0x4,0x46504210,0x48404008,0x44440000,0x8001044,
-0x10007f,0x20245000,0x200438fe,0x8,0x4a100420,0x48404008,0x44441010,0x10000804,
-0x100022,0x1c086000,0x20043810,0x8,0x5a100878,0x48787810,0x7c3c0000,0x20000404,
-0x100022,0x2109400,0x20045410,0x3c0010,0x52101004,0x3c044410,0x44040000,0x403c0208,
-0x22,0x2248800,0x20040010,0x20,0x62102004,0x8044420,0x44040000,0x40000210,
-0x7f,0x224a9400,0x10080000,0x20,0x62104004,0x8444420,0x44440010,0x203c0400,
-0x100022,0x1c046200,0x8100000,0x10002000,0x3c7c7e78,0x8383820,0x38381010,0x10000810,
-0x22,0x8000000,0,0x20000000,0,0,0x20,0x8001000,
+/* Font buffer generated from source file: 'vg/src/fonts/vg_font_thin_3.png' */
+0xc3002800,0x8000020,0x8100000,0,0x3c003c18,0x100018,0,0,
+0,0,0,0,0,0,0,0,
+0x81102800,0x1c000020,0x10080010,0x2,0x20800424,0x180c18,0x30000000,0,
+0x18000000,0,0,0,0,0,0,0,
+0x102822,0x22202020,0x20040010,0x2,0x20800442,0x81018,0x8000000,0x38,
+0x24000000,0,0,0,0,0,0,0,
+0x100022,0x20525000,0x20045410,0x4,0x20400400,0x1018,0x8000000,0x8001044,
+0x440000fe,0x10380000,0,0,0,0,0,0,
+0x10007f,0x20245000,0x200438fe,0x8,0x20200400,0x2018,0x4621010,0x10000804,
+0x440000fe,0x387c0000,0,0,0,0,0,0,
+0x100022,0x1c086000,0x20043810,0x8,0x20200400,0x4018,0x2920000,0x20000404,
+0x540000fe,0x38fe0000,0,0,0,0,0,0,
+0x100022,0x2109400,0x20045410,0x3c0010,0x20100400,0x4018,0x28c0000,0x403c0208,
+0x540000fe,0x7cfe0000,0,0,0,0,0,0,
+0x22,0x2248800,0x20040010,0x20,0x20080400,0x2018,0x4000000,0x40000210,
+0x5c0000fe,0x7cfe0000,0,0,0,0,0,0,
+0x7f,0x224a9400,0x10080000,0x20,0x20080400,0x1018,0x8000010,0x203c0400,
+0xfe,0xfe7c0000,0,0,0,0,0,0,
+0x100022,0x1c046200,0x8100000,0x10002000,0x20000400,0x1018,0x8001010,0x10000810,
+0xfe,0xfe380000,0,0,0,0,0,0,
+0x22,0x8000000,0,0x20000000,0x3c003c00,0xff000c00,0x30000020,0x8001000,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
 0x81000000,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
 0xc3000000,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0x3c,0x3c1800,
-0x1818303c,0x707c3838,0x447c7844,0x4044443c,0x7838387c,0xfe428282,0x8282fe20,0x80042400,
-0x24244840,0x48404044,0x44100848,0x40444442,0x44444482,0x10428282,0x82820220,0x80044200,
-0x44244840,0x44404040,0x44100848,0x40aa6442,0x44444480,0x10424492,0x44820420,0x40040000,
-0x44424840,0x44404040,0x44100850,0x40aa5442,0x44444480,0x10424492,0x28820820,0x20040000,
-0x54427840,0x4478705c,0x7c100860,0x40aa5442,0x7854787c,0x10424492,0x107e1020,0x20040000,
-0x547e4440,0x44404044,0x44100850,0x40924c42,0x404c4402,0x104228aa,0x28022020,0x10040000,
-0x5c424440,0x44404044,0x44100848,0x40924c42,0x40444402,0x104228aa,0x44024020,0x8040000,
-0x424440,0x48404044,0x44101048,0x40924442,0x40424482,0x104228aa,0x82828020,0x8040000,
-0x42783c,0x707c4038,0x447c6044,0x7c82443c,0x403a447c,0x103c1044,0x827cfe20,0x40000,
-0,0,0,0,0,0,0x3c,0x3c00ff,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
-0x10000000,0,0,0,0,0,0,0x18000000,
-0x18004000,0x4000000,0x40000040,0x60000000,0,0x40000000,0xc,0x18300000,
-0x8004000,0x4003800,0x40100840,0x20000000,0,0x40000000,0x10,0x18080000,
-0x4000,0x4004400,0x40000040,0x20000000,0,0x40000000,0x10,0x180800fe,
-0x38783c,0x3c384038,0x78303848,0x206c3838,0x3838383c,0x78444282,0x44447c20,0x18046282,
-0x44440,0x44444044,0x44100850,0x20924444,0x44444440,0x40444292,0x28440840,0x18029282,
-0x3c4440,0x44447844,0x44100860,0x20924444,0x44444038,0x40442492,0x10441040,0x18028c82,
-0x444440,0x44784044,0x44100860,0x20824444,0x44444004,0x40442492,0x28442020,0x18040082,
-0x444440,0x44404044,0x44100850,0x20824444,0x64444044,0x404424aa,0x44444010,0x18080082,
-0x3c783c,0x3c3c403c,0x44380848,0x1c824438,0x583c4038,0x38381844,0x443c7c10,0x180800fe,
-0,0x4004,0x800,0,0x40040000,0,0x4000c,0x300000,
-0,0x4004,0x3000,0,0x40060000,0,0x80000,0,
-0,0x8078,0,0,0x40040000,0,0x700000,0,
+0x18303c70,0x7c383844,0x7c784440,0x44443c78,0x38787cfe,0x42828282,0x82fe3c10,0x3c7c407c,
+0x387c3838,0,0,0,0,0,0,0,
+0x24484048,0x40404444,0x10084840,0x44444244,0x44448210,0x42828282,0x82024630,0x42084840,
+0x44044444,0,0,0,0,0,0,0,
+0x24484044,0x40404044,0x10084840,0xaa644244,0x44448010,0x42449244,0x82044650,0x42104840,
+0x40084444,0,0,0,0,0,0,0,
+0x42484044,0x40404044,0x10085040,0xaa544244,0x44448010,0x42449228,0x82084a10,0x4204840,
+0x40084444,0,0,0,0,0,0,0,
+0x42784044,0x78705c7c,0x10086040,0xaa544278,0x54787c10,0x42449210,0x7e105a10,0x8784878,
+0x78107c3c,0,0,0,0,0,0,0,
+0x7e444044,0x40404444,0x10085040,0x924c4240,0x4c440210,0x4228aa28,0x2205210,0x10043c04,
+0x44104404,0,0,0,0,0,0,0,
+0x42444044,0x40404444,0x10084840,0x924c4240,0x44440210,0x4228aa44,0x2406210,0x20040804,
+0x44204404,0,0,0,0,0,0,0,
+0x42444048,0x40404444,0x10104840,0x92444240,0x42448210,0x4228aa82,0x82806210,0x40040844,
+0x44204444,0,0,0,0,0,0,0,
+0x42783c70,0x7c403844,0x7c60447c,0x82443c40,0x3a447c10,0x3c104482,0x7cfe3c7c,0x7e780838,
+0x38203838,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0x400004,0x40,0x4060,0,0x40,0,0x4,0x7000000,
+0,0,0,0,0,0,0,0,
+0x400004,0x380040,0x10084020,0,0x40,0,0x3008,0x73000000,
+0,0,0,0,0,0,0,0,
+0x400004,0x440040,0x4020,0,0x40,0,0x4810,0x4500606c,
+0x98000000,0,0,0,0,0,0,0,
+0x38783c3c,0x38403878,0x30384820,0x6c383838,0x38383c78,0x44428244,0x447c4810,0x4806706c,
+0xe4e00000,0,0,0,0,0,0,0,
+0x4444044,0x44404444,0x10085020,0x92444444,0x44444040,0x44429228,0x44083010,0x420c786c,
+0xe2900000,0,0,0,0,0,0,0,
+0x3c444044,0x44784444,0x10086020,0x92444444,0x44403840,0x44249210,0x4410000e,0x42d87c6c,
+0xf28e0000,0,0,0,0,0,0,0,
+0x44444044,0x78404444,0x10086020,0x82444444,0x44400440,0x44249228,0x44200000,0x7e70786c,
+0x2820000,0,0,0,0,0,0,0,
+0x44444044,0x40404444,0x10085020,0x82444464,0x44404440,0x4424aa44,0x44400000,0x20706c,
+0x44820000,0,0,0,0,0,0,0,
+0x3c783c3c,0x3c403c44,0x3808481c,0x82443858,0x3c403838,0x38184444,0x3c7c0000,0x606c,
+0x38fe0000,0,0,0,0,0,0,0,
+0,0x400400,0x80000,0x40,0x4000000,0,0x4000000,0,
+0,0,0,0,0,0,0,0,
+0,0x400400,0x300000,0x40,0x6000000,0,0x8000000,0,
+0,0,0,0,0,0,0,0,
+0,0x807800,0,0x40,0x4000000,0,0x70000000,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0x1818,0x1818,0x7c1e3c3c,0,0,0,
+0,0xdc000000,0,0,0,0,0,0,
+0xfe103882,0x82441060,0x3c002424,0x3c002424,0x82214242,0x18001800,0,0x1000,
+0xe80000,0x90000000,0,0,0,0,0,0,
+0x82284444,0x44442890,0x42000000,0x42000000,0x80010000,0x38181c7e,0x3c7c6c6c,0x6c6c2810,
+0xdca80000,0xdc6c0000,0,0,0,0,0,0,
+0x82288228,0x28284490,0x52521052,0x5a5a185a,0xaedd8868,0x783c1e7e,0x40eaae,0xee828228,
+0x88e80022,0x84aa0000,0,0,0,0,0,0,
+0x82448210,0x101044f0,0x52911091,0x52911091,0xa4898888,0x787e1e3c,0x3c5eeaae,0xee101044,
+0xc8ae0042,0xdcaa0000,0,0,0,0,0,0,
+0x82448228,0x28107c88,0x5a5a185a,0x52521052,0xb4898e8e,0x387e1c18,0x12eaae,0xee929282,
+0x429e,0xaa0000,0,0,0,0,0,0,
+0x82824444,0x44108288,0x42000000,0x42000000,0x80018a8a,0x18001800,0x3c1eeeee,0xee1000ee,
+0xd0e04240,0x70ee0000,0,0,0,0,0,0,
+0xfefe3882,0x821082f0,0x3c002424,0x3c002424,0x80016e8e,0,0x8282,0x8282aa28,
+0x90407e20,0x40820000,0,0,0,0,0,0,
+0,0,0x1818,0x1818,0,0,0,0x1038,
+0x9c400000,0x70000000,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0xe0700000,0,0,0,0,0,0,0x800000,
+0x80000000,0,0,0,0,0,0,0,
+0x8010800a,0x200,0x100,0x2008000,0,0,0x1f80001f,0x81400000,
+0xc0070040,0x38000000,0,0,0,0,0,0,
+0x8010800a,0x703,0x100,0x4004000,0,0x4,0x10040000,0x82200000,
+0x60080040,0x4000000,0,0x1e0,0,0,0,0,
+0x800a,0x1040884,0x80380100,0x8002000,0,0x8,0x10020000,0x84100000,
+0x20080040,0x4000000,0,0x210,0,0,0,0,
+0x8000,0x1041044,0x84440000,0x8002000,0x400000,0x8,0x10020000,0x80000000,
+0x80040,0x4000000,0,0x408,0,0xc03,0xf0000000,0,
+0x8000,0x1041004,0x88440000,0x10001008,0x400000,0x10,0x10010000,0x80000000,
+0x80040,0x4000000,0x200,0x80408,0x1e000000,0xffc1e07,0xf8000000,0,
+0x8000,0x7ff1003,0x10440000,0x1000102a,0x400000,0x20,0x10008000,0x80000000,
+0x100040,0x2038408,0x800400,0x40008,0x21000000,0xffc1e0f,0xfc000000,0,
+0x8000,0x1040800,0x20440000,0x1000101c,0x400000,0x20,0x10008000,0x80000000,
+0x100040,0x2044400,0x800,0x20008,0x40800000,0xffc3f0f,0xfc000000,0,
+0x8000,0x1040700,0x40780000,0x1000101c,0x7fc0001,0xf8000040,0x10004000,0x80000000,
+0x600040,0x1842400,0x1000,0x10010,0x4c800000,0xffc3f0f,0xfc000000,0,
+0x8000,0x1040080,0x80880000,0x1000102a,0x400000,0x80,0x10002000,0x80000000,
+0x100040,0x2041800,0x2001,0xf8008060,0x52800000,0xffc7f8f,0xfc000000,0,
+0x8000,0x1040041,0x18850000,0x10001008,0x400000,0x80,0x10002000,0x80000000,
+0x100040,0x2000000,0x4000,0x4080,0x52800000,0xffc7f8f,0xfc000000,0,
+0,0x1040042,0x24820000,0x10001000,0x400000,0x100,0x10001000,0x80000000,
+0x80040,0x4000000,0x2000,0x8000,0x52800000,0xffc7f8f,0xfc000000,0,
+0x80100000,0x7ff1044,0x24850000,0x8002000,0x400000,0x200,0x10000800,0x80000000,
+0x80040,0x4000000,0x1001,0xf8010000,0x52800000,0xffcffcf,0xfc000000,0,
+0x80108000,0x1040880,0x24888000,0x8002000,0xc00,0x180200,0x10000800,0x80000000,
+0x80040,0x4000000,0x800800,0x20080,0x4d000000,0xffcffc7,0xf8000000,0,
+0xe0708000,0x1040700,0x18704000,0x4004000,0x800,0x180400,0x10000400,0x80000000,
+0x80040,0x4000008,0x800400,0x40080,0,0xffcffc3,0xf0000000,0,
+0,0x1040200,0,0x2008000,0x1000,0,0x1f80001f,0x8000fff0,
+0x70000,0x38000000,0x1000200,0x80000,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0xc03e01f,0x87c07f83,0xf01f0410,0x7f07e041,0x84006304,0x81e07e0,0x1c07e01f,0x8ff84088,
+0x8808808,0x808ffc1e,0xc01e07,0xf84007f8,0x1f07f81e,0x1e00000,0,0,
+0x12041020,0x4204004,0x208410,0x8002042,0x4009486,0x8210410,0x22041020,0x40804088,
+0x8808808,0x80800421,0x1402100,0x10420400,0x20800821,0x2100000,0,0,
+0x21041040,0x4104004,0x400410,0x8002042,0x4009486,0x8408408,0x41040840,0x804084,
+0x10808410,0x80800842,0x82404080,0x20420400,0x40001040,0x84080000,0,0,
+0x21041040,0x4104004,0x400410,0x8002044,0x4009485,0x8408408,0x41040840,0x804084,
+0x10888220,0x80801042,0x80404080,0x40420400,0x40002040,0x84080000,0,0,
+0x40841040,0x4104004,0x400410,0x8002048,0x4009485,0x8408408,0x41040840,0x804084,
+0x10888140,0x80802044,0x80400080,0x80420400,0x40002021,0x4080000,0,0,
+0x4087e040,0x4104004,0x400410,0x8002070,0x4009484,0x88408410,0x49041020,0x804084,
+0x10888080,0x41804044,0x80400101,0x4207e0,0x5e00401e,0x4080000,0,0,
+0x40841040,0x4107e07,0xe04f87f0,0x8002070,0x4009484,0xc84087e0,0x4507e01f,0x804084,
+0x10888080,0x3e808048,0x80400203,0xe0220010,0x61004021,0x2180000,0,0,
+0x7f840840,0x4104004,0x408410,0x8002048,0x4008884,0x48408400,0x43041000,0x80804082,
+0x20948080,0x810048,0x80400400,0x101f8008,0x40808040,0x81e80000,0,0,
+0x40840840,0x4104004,0x408410,0x8002044,0x4008884,0x28408400,0x41040800,0x40804082,
+0x20948140,0x820050,0x80400800,0x8020008,0x40808040,0x80080000,0,0,
+0x40840840,0x4104004,0x408410,0x8002042,0x4008884,0x28408400,0x40840800,0x40804082,
+0x20948220,0x840050,0x80401000,0x8020008,0x40810040,0x80080000,0,0,
+0x40840840,0x4104004,0x408410,0x8002042,0x4008884,0x18408400,0x40040800,0x40804082,
+0x20948410,0x80880060,0x80402000,0x8020408,0x40810040,0x80080000,0,0,
+0x40841020,0x4204004,0x210410,0x8004041,0x2008084,0x18210400,0x22040840,0x80802101,
+0x40948808,0x41080021,0x404000,0x10020210,0x21010021,0x4100000,0,0,
+0x4087e01f,0x87c07f84,0x1e0410,0x7f078040,0x81f88084,0x81e0400,0x1c04083f,0x801e00,
+0x80630808,0x3e0ffc1e,0x3f87f87,0xe00201e0,0x1e01001e,0x3e00000,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0x40000,0x80000,0x400,0x40,0x6000000,0,0,0x2000000,
+0,0,0x80000,0,0,0,0,0,
+0x40000,0x80000,0x400,0x40,0x2000000,0,0,0x2000000,
+0,0,0x1001e0,0,0,0,0,0,
+0x40000,0x80001,0xe0000400,0x4002040,0x2000000,0,0,0x2000000,
+0,0xc,0x207c60,0,0,0,0,0,
+0x40000,0x80002,0x10000400,0x40,0x2000000,0,0,0x2000000,
+0,0x12,0x4060a0,0,0,0,0,0,
+0x40000,0x80004,0x8000400,0x40,0x2000000,0,0,0x2000000,
+0,0x12,0x806120,0x83803b8,0xf000000,0,0,0,
+0x3e05e01e,0x1e81e04,0x1e85c0,0xc00e042,0x2003b85,0xe01e05e0,0x1e85f03f,0x3f04084,
+0x4808410,0x4087f80c,0x806200,0x1c3c03b8,0x90877000,0,0,0,
+0x1061021,0x2182104,0x218620,0x4002044,0x2004446,0x10210610,0x21860840,0x82004084,
+0x4808410,0x40801000,0x806040,0x383e03b8,0xe0488800,0,0,0,
+0x1040840,0x84084084,0x408410,0x4002048,0x2004444,0x8408408,0x40840040,0x2004082,
+0x8888220,0x40802000,0x406044,0x703f03b8,0xe0484800,0,0,0,
+0x3d040840,0x4084087,0xe0408410,0x4002070,0x2004444,0x8408408,0x4084003e,0x2004082,
+0x8888140,0x40804000,0x3c604e,0xe03f83b8,0xf0483c00,0,0,0,
+0x43040840,0x4087f04,0x408410,0x4002050,0x2004444,0x8408408,0x40840001,0x2004081,
+0x10888080,0x40808000,0x7fc7,0xc03f83b8,0xf8480400,0,0,0,
+0x41040840,0x4084004,0x408410,0x4002048,0x2004044,0x8408408,0x40840000,0x82004081,
+0x10888140,0x40810000,0x7fc3,0x803f03b8,0x480400,0,0,0,
+0x41040840,0x84084004,0x408410,0x4002044,0x2004044,0x8408408,0x40840000,0x82004081,
+0x10948220,0x40820000,0x1,0x3e03b8,0x20480400,0,0,0,
+0x43061021,0x2182084,0x218410,0x4002042,0x1004044,0x8210610,0x21840041,0x1002100,
+0xa0a28410,0x21840000,0,0x3c03b8,0x10880400,0,0,0,
+0x3c85e01e,0x1e81f04,0x1e8410,0xe002041,0xf04044,0x81e05e0,0x1e84003e,0xf01e00,
+0x40410410,0x1e87f800,0,0x3803b8,0xf0ffc00,0,0,0,
+0,0x4,0x8000,0x2000,0,0x400,0x800000,0,
+0,0x800000,0,0,0,0,0,0,
+0,0x4,0x8000,0x4000,0,0x400,0x800000,0,
+0,0x800000,0,0,0,0,0,0,
+0,0x4,0x410000,0x18000,0,0x400,0xc00000,0,
+0,0x41000000,0,0,0,0,0,0,
+0,0x8,0x3e0000,0,0,0x400,0x800000,0,
+0,0x3e000000,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0x4,0x400000,0x40040,0,0,
+0,0,0,0,0,0,0,0,
+0xc03f,0x804804c,0xc0c07f0,0x1f00000a,0xa01f00,0xa00a0,0x3f81fc3f,0xc3fc0e00,
+0x1c0000,0,0,0,0,0,0,0,
+0xffc1e07f,0x8c0cc0ce,0x1c1e0ff8,0x20800011,0x1102080,0x110110,0x40420240,0x24021e00,
+0x1e0000,0,0,0x80000,0,0,0,0,
+0xffc1e0e1,0xc6186186,0x18330c18,0x40400000,0x4040,0,0x40420240,0x24023e00,
+0xe01f07fc,0x1f87f873,0x87387387,0x701400c0,0x1b800000,0x7,0x38000000,0,
+0xc0c330c0,0xc3303303,0x30330c18,0x48428808,0x2884642,0x68060268,0x40000200,0x7e01,
+0xf01f87fc,0x400f2,0x493cf3c8,0x8808120,0x21000000,0x9,0x24000000,0,
+0xc0c330c0,0xc1e01e03,0xf0618c38,0x48448408,0x4844844,0x84080484,0x5381ba11,0xd07e03,
+0xf81f87fc,0x400f2,0x493cf3c8,0x8808210,0x21000000,0x1040009,0x24000000,0,
+0xc0c618c0,0xc0c00c01,0xe0618ff8,0x48488208,0x8824848,0x82080882,0x51021211,0x1107e07,
+0xfc1f83f8,0x1f84fcf2,0x493cf3c0,0x80080408,0x19024e00,0x2042669,0x24000000,0,
+0xc0c618c0,0xc1e01e00,0xc0ffcffc,0x48448408,0x4844844,0x84080484,0x51021211,0xc11c3e07,
+0xfc1f01f0,0x84f2,0x493cf3c8,0x88888804,0x54400,0x4044889,0x24000000,0,
+0xc0c618c0,0xc3303300,0xc0ffcc0c,0x4e426806,0x2684842,0x88080288,0x51021211,0x41141e07,
+0xfc1e00e0,0x84f2,0x493cf3c8,0x88888804,0x1a054400,0x8f86489,0x24000000,0,
+0xc0cc0ce1,0xc6186180,0xc0c0cc0c,0x40400000,0x4040,0,0x4d02120d,0xc11c0e00,
+0x1c0000,0x1f80fcf3,0xcf3cf3c0,0x80000f3c,0x22074440,0x4400428f,0x3c000000,0,
+0xffcffc7f,0x8c0cc0c0,0xc0c0cffc,0x20800011,0x1102080,0x110110,0x40000200,0,
+0,0x80,0x48048048,0x8808120,0x22053440,0x42002c68,0x4000000,0,
+0xffcffc3f,0x8048040,0xc0c0c7f8,0x1f00000a,0xa01f00,0xa00a0,0x40000200,0,
+0,0x80,0x48048048,0x8948120,0x2180007f,0xc1000008,0x4000000,0,
+0,0,0,0x4,0x400000,0x40040,0,0,
+0,0,0,0x801e0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0xfc003f00,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0xc000,0,
+0xfc003f00,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0x1e000,0,
+0xc0000300,0xf00001ce,0,0xc0000,0,0x30000,0xc0000,0xc0000000,
+0,0,0,0,0x3ffc000,0x3ff,0xc003f000,0,
+0xc0000300,0xf00001ce,0,0xc0000,0,0x30000,0x1c0000,0xe0000000,
+0,0,0,0,0x3ffc000,0x3ff,0xc0073800,0,
+0xc0000300,0xf00001ce,0,0x3f000f,0,0x30000,0x380000,0x70000000,
+0,0,0,0x70,0x3ffc030,0x3ff,0xc00e1c00,0,
+0xc0000300,0xf00001ce,0,0x7f801f,0x80000000,0x30000,0x700000,0x38000000,
+0,0,0,0xf0,0x3800038,0x1,0xc01c0e00,0,
+0,0xf00000cc,0x38070,0xffc03f,0xc0000fc0,0x30000,0xe00000,0x1c000000,
+0,0,0,0xe0,0x380003c,0x1,0xc0380700,0,
+0,0xf00000cc,0x38070,0x1e1e039,0xc0001fc0,0x30000,0xe00000,0x1c000000,
+0,0,0,0x1c0,0x380001c,0x1,0xc0300300,0,
+0,0xf0000000,0x38070,0x3c0f039,0xc0303ff0,0,0x1c00000,0xe000000,
+0x3000,0,0,0x1c0,0x380001e,0x1,0xc0000000,0,
+0,0xf0000000,0x38070,0x3807039,0xc0703870,0,0x1c00000,0xe000000,
+0x3000,0,0,0x380,0x380000e,0x1,0xc0000000,0,
+0,0xf0000000,0x38070,0x3800039,0xc0f03870,0,0x3c00000,0xf0000c0,
+0x3000,0,0,0x380,0x380000f,0x1,0xc0000000,0,
+0,0xf0000000,0x38070,0x380003f,0xc1e03870,0,0x3800000,0x70000c0,
+0x3000,0,0,0x700,0x3800007,0x80000001,0xc0000000,0,
+0,0xf0000000,0x3fffff,0x380001f,0x83c03870,0,0x3800000,0x7000ccc,
+0x3000,0,0,0xe00,0x3800003,0xc0000001,0xc0000000,0,
+0,0xf0000000,0x3fffff,0x380000f,0x7803870,0,0x3800000,0x7000ccc,
+0x3000,0,0,0xe00,0x3800001,0xc0000001,0xc0000000,0,
+0,0xf0000000,0x3fffff,0x3c00000,0xf003870,0,0x3800000,0x70003f0,
+0x3000,0,0,0x1c00,0x3800000,0xe0000001,0xc0000000,0,
+0,0xf0000000,0x38070,0x3e00000,0x1e003ff0,0,0x3800000,0x70003f0,
+0x3000,0,0,0x1c00,0x3800000,0xe0000001,0xc0000000,0,
+0,0xf0000000,0x38070,0x1ff8000,0x3c003fc0,0,0x3800000,0x70003f0,
+0x3ffff0,0x3,0xffc00000,0x3800,0x3800000,0x70000001,0xc0000000,0,
+0,0xf0000000,0x38070,0xffc000,0x78007fc0,0,0x3800000,0x70003f0,
+0x3ffff0,0x3,0xffc00000,0x7000,0x3800000,0x38000001,0xc0000000,0,
+0,0xf0000000,0x38070,0x7fe000,0xf000f9e0,0,0x3800000,0x7000ccc,
+0x3000,0,0,0x7000,0x3800000,0x3c000001,0xc0000000,0,
+0,0x60000000,0x38070,0xf001,0xe000f0f0,0,0x3800000,0x7000ccc,
+0x3000,0,0,0xe000,0x3800000,0x1c000001,0xc0000000,0,
+0,0x60000000,0x38070,0x7003,0xc3c0e07b,0,0x3800000,0x70000c0,
+0x3000,0,0,0xe000,0x3800000,0xe000001,0xc0000000,0,
+0,0x60000000,0x38070,0x7007,0x87e0e03f,0,0x3800000,0x70000c0,
+0x3000,0,0,0x1c000,0x3800000,0xe000001,0xc0000000,0,
+0,0x60000000,0x38070,0x700f,0xff0e01f,0,0x3c00000,0xf000000,
+0x3000,0,0,0x3c000,0x3800000,0x7000001,0xc0000000,0,
+0,0,0x3fffff,0x701e,0xe70e01f,0,0x3c00000,0xf000000,
+0x3000,0,0,0x38000,0x3800000,0x3800001,0xc0000000,0,
+0xc0000300,0,0x3fffff,0x380703c,0xe70e03f,0x80000000,0x1c00000,0xe000000,
+0x3000,0,0,0x70000,0x3800000,0x1c00001,0xc0000000,0,
+0xc0000300,0,0x3fffff,0x3c0f038,0xe70e07b,0xc0000000,0x1c00000,0xe000000,
+0x3000,0,0,0x70000,0x3800000,0x1c00001,0xc0000000,0,
+0xc0000300,0x60000000,0x38070,0x1e1f030,0xe70f0f1,0xe0000000,0xe00000,0x1c000000,
+0,0xf00000,0x180,0xe0000,0x3800000,0xe00001,0xc0000000,0,
+0xc0000300,0xf0000000,0x38070,0xffe000,0xff07fe0,0xf0000000,0xe00000,0x1c000000,
+0,0xf00000,0x3c0,0xe0000,0x3800000,0xe00001,0xc0000000,0,
+0xfc003f00,0xf0000000,0x38070,0x7fc000,0x7e07fc0,0x70000000,0x700000,0x38000000,
+0,0xe00000,0x3c0,0x1c0000,0x3800000,0x700001,0xc0000000,0,
+0xfc003f00,0x60000000,0x38070,0x3f8000,0x3c01f00,0x30000000,0x380000,0x70000000,
+0,0x1c00000,0x180,0x1c0000,0x3ffc000,0x3003ff,0xc0000000,0,
+0,0,0x38070,0xc0000,0,0,0x1c0000,0xe0000000,
+0,0x3800000,0,0,0x3ffc000,0x3ff,0xc0000000,0xffffff00,
+0,0,0x38070,0xc0000,0,0,0xc0000,0xc0000000,
+0,0x3000000,0,0,0x3ffc000,0x3ff,0xc0000000,0xffffff00,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0xc00000,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0xe00000,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0xf00000,0x3f000070,0xfc000,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0xf80000,0x7f000070,0xfe000,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0x7c0000,0xff000070,0xff000,0,0,0,0,0x3fc,
+0,0,0,0,0,0,0,0,
+0x1c0000,0xf0000070,0xf000,0,0,0,0,0x7fe,
+0,0,0,0,0,0,0,0,
+0xc0000,0xe0000070,0x7000,0,0,0,0,0xfff,
+0,0,0,0,0,0x30000030,0,0,
+0,0xe0000070,0x7000,0,0,0,0,0x1e07,
+0x80000000,0,0,0,0,0x78000078,0,0,
+0,0xe0000070,0x7800,0,0,0,0,0x3c03,
+0xc0000000,0,0,0xf000,0x3fc0000,0xfc0000fc,0x3ff00,0,
+0x1,0xe0000070,0x7800,0,0,0,0,0x3801,
+0xc0000000,0,0,0x1f800,0xfff0001,0xce0001ce,0x7ff80,0,
+0x1,0xe0000070,0x7800,0,0,0xc00,0,0xc0003801,
+0xc003fc00,0,0xffff,0xf003fc00,0x1fff8003,0x87000387,0xe01c0,0,
+0x1,0xc0000070,0x3800,0,0,0x1c00,0,0xe0003801,
+0xc007fe00,0,0xffff,0xf003fc00,0x3fffc003,0x3000303,0x1c00e0,0,
+0x3,0xc0000070,0x3c00,0xfc07000,0xc00000c0,0x3800,0,0x70000001,
+0xc00e0700,0,0xffff,0xf007fe00,0x7fffe000,0,0x380070,0,
+0x3,0x80000070,0x1c00,0x1fe07001,0xe00001e0,0x7000,0,0x38000001,
+0xc01c0380,0,0xffff,0xf007fe00,0x7fffe000,0,0x300030,0,
+0x7,0x80000070,0x1e00,0x3ff07001,0xe00001e0,0xe000,0,0x1c000001,
+0xc03801c0,0,0xffff,0xf00fff00,0xfffff000,0xc0000cc0,0xc0303c30,0xc3cc000,
+0x3f,0x80000070,0x1fc0,0x38787000,0xc00000c0,0x1c000,0,0xe000003,
+0xc03000c0,0,0xffff,0xf00fff00,0xfffff000,0xc0001cc0,0xe0307c30,0x1c7ce000,
+0x3e,0x70,0x7c0,0x383c7000,0,0x38000,0,0x7000007,
+0x8030f0c0,0,0xffff,0xf01fff80,0xfffff000,0xc00038c0,0x7030e030,0x38e07000,
+0x3e,0x70,0x7c0,0x381ff000,0,0x70000,0,0x380007f,
+0x31f8c0,0,0xffff,0xf01fff80,0xfffff000,0xc00070c0,0x3830c030,0x70c03800,
+0x7,0x80000070,0x1e00,0x380fe000,0,0xe0000,0x3ffc000,0x1c000fe,
+0x339cc0,0,0xffff,0xf03fffc0,0xfffff000,0xc000e0c0,0x1c30c030,0xe0c01c00,
+0x3,0x80000070,0x1c00,0x3807c000,0,0x1c0000,0x3ffc000,0xe001fc,
+0x330cc0,0,0xffff,0xf03fffc0,0xfffff000,0xc000e0c0,0x1c30c030,0xe0c01c00,
+0x3,0x80000070,0x1c00,0,0,0x380000,0,0x7001e0,
+0x330cc0,0,0xffff,0xf03fffc0,0xfffff000,0xc00070c0,0x3830c030,0x70c03800,
+0x3,0xc0000070,0x3c00,0,0,0x380000,0,0x7001e0,
+0x330cc0,0,0xffff,0xf07fffe0,0xfffff000,0xe00038e0,0x7030c030,0x38c07000,
+0x1,0xc0000070,0x3800,0,0,0x1c0000,0,0xe000c0,
+0x330cc0,0,0xffff,0xf07fffe0,0xfffff000,0x7c001c7c,0xe030c030,0x1cc0e000,
+0x1,0xe0000070,0x7800,0,0,0xe0000,0,0x1c00000,
+0x330cc0,0,0xffff,0xf07fffe0,0xfffff000,0x3c000c3c,0xc030c030,0xcc0c000,
+0x1,0xe0000070,0x7800,0,0,0x70000,0x3ffc000,0x3800000,
+0x330cc0,0,0xffff,0xf0fffff0,0x7fffe000,0,0x300030,0,
+0,0xe0000070,0x7800,0,0,0x38000,0x3ffc000,0x7000000,
+0x339cc0,0,0xffff,0xf0fffff0,0x7fffe000,0,0x380070,0,
+0,0xe0000070,0x7000,0,0xc00001e0,0x1c000,0,0xe0000c0,
+0x31ff80,0,0xffff,0xf0fffff0,0x3fffc003,0x3000303,0x1c00e0,0,
+0,0xe0000070,0x7000,0x1,0xe00001e0,0xe000,0,0x1c0001e0,
+0x30f300,0,0xffff,0xf0fffff0,0x1fff8003,0x87000387,0xe01c0,0,
+0,0xf0000070,0xf000,0x1,0xe00001c0,0x7000,0,0x380001e0,
+0,0,0xffff,0xf0fffff0,0xfff0001,0xce0001ce,0x7ff80,0,
+0,0xff000070,0xff000,0,0xc0000380,0x3800,0,0x700000c0,
+0,0,0xffff,0xf0fffff0,0x3fc0000,0xfc0000fc,0x3ff00,0,
+0,0x7f000000,0xfe000,0,0x700,0x1c00,0,0xe0000000,
+0,0,0,0,0,0x78000078,0,0,
+0,0x3f000000,0xfc000,0,0x600,0xc00,0,0xc0000000,
+0,0,0,0,0,0x30000030,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0x1f0003f,0xfe001fff,0x3ffe00,0x1fff001f,0xff001ffe,0x3c0780,0xfff0000,0x38003c0f,
+0x801c0000,0xf003c038,0x3803ffe,0x3ffe00,0x3ffe003f,0xfc001ffe,0x7fff00,0x3c1f0000,
+0x1f8003f,0xff803fff,0x3fff00,0x3fff003f,0xff003ffe,0x3e0780,0xfff0000,0x3c003c0f,
+0x803c0000,0xf807c03c,0x7803fff,0x3fff00,0x3fff003f,0xfe003ffe,0x7fff00,0x3e1f0000,
+0x1fc003f,0xff803fff,0x3fff00,0x3fff003f,0xff003ffe,0x3e0780,0xfff0000,0x3c003c1f,
+0x3c0000,0xf807c03e,0x7803fff,0x3fff00,0x3fff003f,0xff003ffe,0x7fff00,0x3e1f0000,
+0x1fc003f,0xff803fff,0x3fff00,0x3fff003f,0xff003ffe,0x3e0780,0xffe0000,0x3c003c1f,
+0x3c0000,0xfc0fc03e,0x7803fff,0x3fff00,0x3fff003f,0xff003ffe,0x7ffe00,0x3e1f0000,
+0x3fc003c,0xf803c00,0x3c0f00,0x3c00003e,0x3c00,0x3e0780,0xf00000,0x3c003c3e,
+0x3c0000,0xfc0fc03e,0x7803c0f,0x3c1f00,0x3c0f003c,0x1f003e1e,0x1e000,0x3e1f0000,
+0x3fc003c,0x7803c00,0x3c0f00,0x3c00003e,0x3c00,0x3e0780,0xf00000,0x3c003c3e,
+0x3c0000,0xfc0fc03f,0x7803c0f,0x3c0f00,0x3c0f003c,0x1f003e1e,0x1e000,0x3e1f0000,
+0x3fc003c,0x7803c00,0x3c0f00,0x3c00003e,0x3c00,0x3e0780,0xf00000,0x3c003c3c,
+0x3c0000,0xfe1fc03f,0x7803c0f,0x3c0f00,0x3c0f003c,0x1f003e1e,0x1e000,0x3e1f0000,
+0x3fe003c,0x7803c00,0x3c0f00,0x3c00003e,0x3c00,0x3e0780,0xf00000,0x3c003c7c,
+0x3c0000,0xfe1fc03f,0x87803c0f,0x3c0f00,0x3c0f003c,0x1f003e00,0x1e000,0x3e1f0000,
+0x3fe003c,0x7803c00,0x3c0f00,0x3c00003e,0x3c00,0x3e0780,0xf00000,0x3c003c78,
+0x3c0000,0xff3fc03f,0x87803c0f,0x3c0f00,0x3c0f003c,0x1f003e00,0x1e000,0x3e1f0000,
+0x7de003c,0xf803c00,0x3c0f00,0x3c00003e,0x3c00,0x3e0780,0xf00000,0x3c003cf8,
+0x3c0000,0xff3fc03f,0x87803c0f,0x3c0f00,0x3c0f003c,0x1f003e00,0x1e000,0x3e1f0000,
+0x79e003c,0x1f803c00,0x3c0f00,0x3c00003e,0x3c00,0x3e0780,0xf00000,0x3c003cf0,
+0x3c0000,0xffffc03f,0xc7803c0f,0x3c0f00,0x3c0f003c,0x1f003e00,0x1e000,0x3e1f0000,
+0x79e003f,0xff003c00,0x3c0f00,0x3c00003e,0x3c00,0x3fff80,0xf00000,0x3c003cf0,
+0x3c0000,0xffffc03f,0xc7803c0f,0x3c0f00,0x3c0f003c,0x1f003e00,0x1e000,0x3e1f0000,
+0x79f003f,0xfe003c00,0x3c0f00,0x3ffc003e,0x3c00,0x3fff80,0xf00000,0x3c003df0,
+0x3c0000,0xf7f7c03f,0xc7803c0f,0x3e1f00,0x3c0f003e,0x1f003ffc,0x1e000,0x3e1f0000,
+0x79f003f,0xff003c00,0x3c0f00,0x3ffc003f,0xf0003c00,0x3fff80,0xf00000,0x3c003de0,
+0x3c0000,0xf7f7c03f,0xe7803c0f,0x3fff00,0x3c0f003f,0xfe003ffe,0x1e000,0x3e1f0000,
+0xf8f003f,0xff803c00,0x3c0f00,0x3ffc003f,0xf0003c00,0x3fff80,0xf00000,0x3c003fe0,
+0x3c0000,0xf7f7c03d,0xe7803c0f,0x3fff00,0x3c0f003f,0xfe003ffe,0x1e000,0x3e1f0000,
+0xf0f003c,0xf803c00,0x3c0f00,0x3ffc003f,0xf0003c1e,0x3e0780,0xf00000,0x3c003de0,
+0x3c0000,0xf3e7c03d,0xf7803c0f,0x3fff00,0x3c0f003f,0xfc001ffe,0x1e000,0x3e1f0000,
+0xfef003c,0x7803c00,0x3c0f00,0x3ffc003f,0xf0003c1e,0x3e0780,0xf00000,0x3c003df0,
+0x3c0000,0xf3e7c03d,0xf7803c0f,0x3fff00,0x3c0f003f,0xfe00001e,0x1e000,0x3e1f0000,
+0xfef003c,0x7803c00,0x3c0f00,0x3c00003e,0x3c1e,0x3e0780,0xf00000,0x3c003cf0,
+0x3c0000,0xf3e7c03c,0xf7803c0f,0x3c0000,0x3c0f003c,0x3f00001e,0x1e000,0x3e1f0000,
+0xfcf803c,0x7803c00,0x3c0f00,0x3c00003e,0x3c1e,0x3e0780,0xf00000,0x3c003cf8,
+0x3c0000,0xf1c7c03c,0xff803c0f,0x3c0000,0x3c0f003c,0x1f00001e,0x1e000,0x3e1f0000,
+0x1f8f803c,0x7803c00,0x3c0f00,0x3c00003e,0x3c1e,0x3e0780,0xf00000,0x3c003cf8,
+0x3c0000,0xf1c7c03c,0xff803c0f,0x3c0000,0x3c0f003c,0x1f00001e,0x1e000,0x3e1f0000,
+0x1f87803c,0x7803c00,0x3c0f00,0x3c00003e,0x3c1e,0x3e0780,0xf00000,0x3c003c78,
+0x3c0000,0xf1c7c03c,0x7f803c0f,0x3c0000,0x3c0f003c,0x1f00001e,0x1e000,0x3e1f0000,
+0x1f87803c,0x7803c00,0x3c0f00,0x3c00003e,0x3c1e,0x3e0780,0xf00000,0x3c003c7c,
+0x3c0000,0xf087c03c,0x7f803c0f,0x3c0000,0x3c0f003c,0x1f00001e,0x1e000,0x3e1f0000,
+0x1f07803c,0x7803c00,0x3c0f00,0x3c00003e,0x3c1e,0x3e0780,0xf00000,0x3c003c3c,
+0x3c0000,0xf007c03c,0x3f803c0f,0x3c0000,0x3c0f003c,0x1f003e1e,0x1e000,0x3e1f0000,
+0x1f07c03c,0x7803c00,0x3c0f00,0x3c00003e,0x3c1e,0x3e0780,0xf00000,0x3c003c3e,
+0x3c0000,0xf007c03c,0x3f803c0f,0x3c0000,0x3c0f003c,0x1f003e1e,0x1e000,0x3e1f0000,
+0x3e07c03c,0xf803e00,0x3c0f00,0x3e00003e,0x3e1e,0x3e0780,0xf00000,0x7c003c3e,
+0x3e0000,0xf007c03c,0x3f803e0f,0x3c0000,0x3e0f003c,0x1f003e3e,0x1e000,0x3e1f0000,
+0x3e07c03f,0xff803fff,0x3fff00,0x3fff003e,0x3ffe,0x3e0780,0x7ff0007,0xfc003c1f,
+0x3ffe00,0xf007c03c,0x1f803fff,0x3c0000,0x3fff003c,0x1f003ffe,0x1e000,0x3fff0000,
+0x3e03c03f,0xff803fff,0x3fff00,0x3fff003e,0x3ffe,0x3e0780,0xfff0007,0xfc003c1f,
+0x3ffe00,0xf007c03c,0x1f803fff,0x3c0000,0x3fff003c,0x1f003ffe,0x1e000,0x3fff0000,
+0x3c03c03f,0xff803fff,0x3fff00,0x3fff003e,0x3ffe,0x3e0780,0xfff0007,0xfc003c0f,
+0x3ffe00,0xf007c03c,0x1f803fff,0x3c0000,0x3fff003c,0x1f003ffe,0x1e000,0x3fff0000,
+0x3c03e03f,0xff001fff,0x3ffe00,0x1fff003e,0x1ffe,0x3e0780,0xfff0007,0xf8003c0f,
+0x803ffe00,0xf007c03c,0xf801fff,0x3c0000,0x1fff003c,0x1f003ffc,0x1e000,0x3ffe0000,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0x3c0000,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0x3c0000,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0x3c0000,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0x1f8003f,0xfe001fff,0x3ffe00,0x1fff001f,0xff001ffe,0x3c0780,0xfff0000,0x38003c0f,
+0x801c0000,0xf003c038,0x3803ffe,0x3ffe00,0x3ffe003f,0xfc001ffe,0x7fff00,0x3c1f0000,
+0x1fc003f,0xff803fff,0x3fff00,0x3fff003f,0xff003ffe,0x3e0780,0xfff0000,0x3c003c0f,
+0x803c0000,0xf807c03c,0x7803fff,0x3fff00,0x3fff003f,0xfe003ffe,0x7fff00,0x3e1f0000,
+0x1fc003f,0xff803fff,0x3fff00,0x3fff003f,0xff003ffe,0x3e0780,0xfff0000,0x3c003c1f,
+0x3c0000,0xfc0fc03e,0x7803fff,0x3fff00,0x3fff003f,0xff003ffe,0x7fff00,0x3e1f0000,
+0x3fc003f,0xff803fff,0x3fff00,0x3fff003f,0xff003ffe,0x3e0780,0xffe0000,0x3c003c1f,
+0x3c0000,0xfc0fc03e,0x7803fff,0x3fff00,0x3fff003f,0xff003ffe,0x7ffe00,0x3e1f0000,
+0x3fc003c,0xf803c00,0x3c0f00,0x3c00003e,0x3c00,0x3e0780,0xf00000,0x3c003c3e,
+0x3c0000,0xfc0fc03f,0x7803c0f,0x3c1f00,0x3c0f003c,0x1f003e1e,0x1e000,0x3e1f0000,
+0x3fe003c,0x7803c00,0x3c0f00,0x3c00003e,0x3c00,0x3e0780,0xf00000,0x3c003c3c,
+0x3c0000,0xfe1fc03f,0x7803c0f,0x3c0f00,0x3c0f003c,0x1f003e1e,0x1e000,0x3e1f0000,
+0x3fe003c,0x7803c00,0x3c0f00,0x3c00003e,0x3c00,0x3e0780,0xf00000,0x3c003c7c,
+0x3c0000,0xff3fc03f,0x87803c0f,0x3c0f00,0x3c0f003c,0x1f003e00,0x1e000,0x3e1f0000,
+0x7de003c,0x7803c00,0x3c0f00,0x3c00003e,0x3c00,0x3e0780,0xf00000,0x3c003c78,
+0x3c0000,0xff3fc03f,0x87803c0f,0x3c0f00,0x3c0f003c,0x1f003e00,0x1e000,0x3e1f0000,
+0x79e003c,0xf803c00,0x3c0f00,0x3c00003e,0x3c00,0x3e0780,0xf00000,0x3c003cf8,
+0x3c0000,0xffffc03f,0xc7803c0f,0x3c0f00,0x3c0f003c,0x1f003e00,0x1e000,0x3e1f0000,
+0x79f003f,0xff003c00,0x3c0f00,0x3ffc003f,0xf0003c00,0x3fff80,0xf00000,0x3c003cf0,
+0x3c0000,0xffffc03f,0xc7803c0f,0x3fff00,0x3c0f003c,0x1f003ffe,0x1e000,0x3e1f0000,
+0x79f003f,0xff003c00,0x3c0f00,0x3ffc003f,0xf0003c00,0x3fff80,0xf00000,0x3c003df0,
+0x3c0000,0xf7f7c03f,0xe7803c0f,0x3fff00,0x3c0f003f,0xfe003ffe,0x1e000,0x3e1f0000,
+0xf8f003f,0xff803c00,0x3c0f00,0x3ffc003f,0xf0003c00,0x3fff80,0xf00000,0x3c003fe0,
+0x3c0000,0xf7f7c03d,0xe7803c0f,0x3fff00,0x3c0f003f,0xfe003ffe,0x1e000,0x3e1f0000,
+0xf0f003f,0xff803c00,0x3c0f00,0x3ffc003f,0xf0003c1e,0x3fff80,0xf00000,0x3c003ff0,
+0x3c0000,0xf3e7c03d,0xf7803c0f,0x3fff00,0x3c0f003f,0xfc001ffe,0x1e000,0x3e1f0000,
+0xfef803c,0xf803c00,0x3c0f00,0x3c00003e,0x3c1e,0x3e0780,0xf00000,0x3c003df0,
+0x3c0000,0xf3e7c03c,0xf7803c0f,0x3c0000,0x3c0f003f,0xfe00001e,0x1e000,0x3e1f0000,
+0xfcf803c,0x7803c00,0x3c0f00,0x3c00003e,0x3c1e,0x3e0780,0xf00000,0x3c003cf8,
+0x3c0000,0xf1c7c03c,0xff803c0f,0x3c0000,0x3c0f003c,0x3f00001e,0x1e000,0x3e1f0000,
+0x1f8f803c,0x7803c00,0x3c0f00,0x3c00003e,0x3c1e,0x3e0780,0xf00000,0x3c003cf8,
+0x3c0000,0xf1c7c03c,0xff803c0f,0x3c0000,0x3c0f003c,0x1f00001e,0x1e000,0x3e1f0000,
+0x1f87803c,0x7803c00,0x3c0f00,0x3c00003e,0x3c1e,0x3e0780,0xf00000,0x3c003c7c,
+0x3c0000,0xf1c7c03c,0x7f803c0f,0x3c0000,0x3c0f003c,0x1f00001e,0x1e000,0x3e1f0000,
+0x1f07c03c,0x7803c00,0x3c0f00,0x3c00003e,0x3c1e,0x3e0780,0xf00000,0x3c003c7c,
+0x3c0000,0xf007c03c,0x3f803c0f,0x3c0000,0x3c0f003c,0x1f003e1e,0x1e000,0x3e1f0000,
+0x1f07c03c,0xf803e00,0x3c0f00,0x3e00003e,0x3e1e,0x3e0780,0xf00000,0x3c003c3e,
+0x3e0000,0xf007c03c,0x3f803e0f,0x3c0000,0x3e0f003c,0x1f003e3e,0x1e000,0x3e1f0000,
+0x3e07c03f,0xff803fff,0x3fff00,0x3fff003e,0x3ffe,0x3e0780,0x7ff0000,0x7c003c3f,
+0x3ffe00,0xf007c03c,0x3f803fff,0x3c0000,0x3fff003c,0x1f003ffe,0x1e000,0x3fff0000,
+0x3e07e03f,0xff803fff,0x3fff00,0x3fff003e,0x3ffe,0x3e0780,0xfff0007,0xfc003c1f,
+0x3ffe00,0xf007c03c,0x1f803fff,0x3c0000,0x3fff003c,0x1f003ffe,0x1e000,0x3fff0000,
+0x3c03e03f,0xff803fff,0x3fff00,0x3fff003e,0x3ffe,0x3e0780,0xfff0007,0xfc003c1f,
+0x803ffe00,0xf007c03c,0x1f803fff,0x3c0000,0x3fff003c,0x1f003ffe,0x1e000,0x3fff0000,
+0x3c03e03f,0xff001fff,0x3ffe00,0x1fff003e,0x1ffe,0x3e0780,0xfff0007,0xf8003c0f,
+0x803ffe00,0xf007c03c,0xf801fff,0x3c0000,0x1fff003c,0x1f003ffc,0x1e000,0x3ffe0000,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0x3c0000,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0x3c0000,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0x3c0000,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0x3c03e07c,0x7c07c07,0xc03c03c0,0x1fff803f,0xfc0007f0,0xffc00,0x3ff00003,0xe0003ffc,
+0x1ffe00,0x3ff8001f,0xfc000ffe,0,0,0,0,0,
+0x3c03e07c,0x7c07c07,0xc03e07c0,0x1fff803f,0xfe0007f8,0x1ffe00,0x3ff80003,0xc0003ffc,
+0x3ffe00,0x3ffc003f,0xfe001fff,0,0,0,0,0,
+0x3c03e07c,0x7c07c07,0xc03e07c0,0x1fff803f,0xfe0007f8,0x1ffe00,0x3ff80003,0xc0003ffc,
+0x3ffe00,0x3ffc003f,0xfe001fff,0,0,0,0,0,
+0x3c03e07c,0x7c03e0f,0x801f0f80,0x1fff803f,0xfe0007f8,0x1ffe00,0x3ff80003,0xc0003ffc,
+0x3ffe00,0x3ffc003f,0xfe001fff,0,0,0,0,0,
+0x3e03e07c,0x7c03e0f,0x801f0f80,0xfff803c,0x1e0007f8,0x1e3e00,0xf80003,0xc0003c00,
+0x3c0000,0x78003c,0x1e001e0f,0x3000,0x300000,0,0,0,
+0x1e03c07c,0x7c01f1f,0xf0f00,0xf003c,0x1e0000f8,0x1e3e00,0x780007,0xc0003c00,
+0x3c0000,0x78003c,0x1e001e0f,0x7800,0x780000,0,0,0,
+0x1e07c07c,0x7c01f1f,0xf9f00,0x1f003c,0x1e0000f8,0x1e7e00,0x780007,0xc0003c00,
+0x3c0000,0x78003c,0x1e001e0f,0xfc00,0xfc000f,0xffc003ff,0xf00ffff0,0xffff000,
+0x1e07c07c,0x7800fbe,0xf9f00,0x1f003c,0x1e0000f8,0x7c00,0x780007,0x80003c00,
+0x3c0000,0xf8003c,0x1e001e0f,0x1ce00,0x1ce001f,0xffe007ff,0xf81ffff8,0x1ffff800,
+0x1f07c07c,0x7800fbe,0x79e00,0x3e003c,0x1e0000f8,0x7c00,0x780007,0x80003c00,
+0x3c0000,0xf0003c,0x1e001e0f,0x38700,0x3870038,0x700e00,0x1c38001c,0x38001c00,
+0xf07803c,0x7800ffe,0x7fe00,0x3e003c,0x1e0000f8,0xfc00,0x780007,0x80003c00,
+0x3c0000,0xf0003c,0x1e001e0f,0x30300,0x3030030,0x300c00,0xc30000c,0x30000c00,
+0xf07803e,0x4f8007fc,0x7fe00,0x7c003c,0x1e0000f8,0xf800,0xff80007,0x80003ff8,
+0x3c0000,0xf0003f,0xfe001e0f,0,0x30,0x300c00,0xc30000c,0x30000c00,
+0xf0f803e,0x4f8007fc,0x3fc00,0x7c003c,0x1e0000f8,0x1f800,0xff8000f,0x80003ffc,
+0x3c0000,0xf0001f,0xfc001e0f,0,0x30,0x300c00,0xc30000c,0x30000c00,
+0xf0f003e,0x4f8007fc,0x3fc00,0xf8003c,0x1e0000f8,0x1f000,0xff0000f,0x80003ffc,
+0x3ffc00,0x1e0001f,0xfc001fff,0x3c00,0xc3cc030,0,0xc000000,0,
+0xf8f003e,0xef8003f8,0x1f800,0xf8003c,0x1e0000f8,0x1f000,0xff8000f,0x3ffc,
+0x3ffe00,0x1e0003f,0xfe001fff,0x7c00,0x1c7ce030,0,0xc000000,0,
+0x78f003e,0xef8003f8,0x1f800,0x1f0003c,0x1e0000f8,0x3f000,0xff8000f,0x3c,
+0x3ffe00,0x1e0003c,0x1e001fff,0xe000,0x38e07033,0xfc003cf,0xcc030300,0xf30000,
+0x78f003e,0xef0003f8,0xf000,0x1f0003c,0x1e0000f8,0x3e000,0x78000f,0x3c,
+0x3ffe00,0x1e0003c,0x1e000fff,0xc000,0x70c03833,0xfc007cf,0xcc030300,0x1f30000,
+0x78f003e,0xef0003f8,0xf000,0x3e0003c,0x1e0000f8,0x7e000,0x78000f,0x3c,
+0x3c1e00,0x3e0003c,0x1e00000f,0xc000,0xe0c01c33,0x3000e03,0xc030300,0x3830000,
+0x79e001f,0xff0007fc,0xf000,0x3e0003c,0x1e0000f8,0x7e000,0x78001f,0x3c,
+0x3c1e00,0x3c0003c,0x1e00000f,0xc000,0xe0c01c33,0x3000c03,0xc030300,0x3030000,
+0x7de001f,0xff0007fc,0xf000,0x3c0003c,0x1e0000f8,0x7c000,0x78001f,0x3c,
+0x3c1e00,0x3c0003c,0x1e00000f,0xc000,0x70c03833,0x3000c03,0xc0303e0,0x303e000,
+0x3de001f,0xff000ffc,0xf000,0x7c0003c,0x1e0000f8,0xfc000,0x78001e,0x3c,
+0x3c1e00,0x3c0003c,0x1e00000f,0xc000,0x38c07033,0x3000c03,0xc0303f0,0x303f000,
+0x3de001f,0xff000fbe,0xf000,0x780003c,0x1e0000f8,0xf8000,0x78001e,0x3c,
+0x3c1e00,0x3c0003c,0x1e00000f,0xc000,0x1cc0e033,0x3000c03,0xc030330,0x3033000,
+0x3de001f,0xff000fbe,0xf000,0xf80003c,0x1e0000f8,0x1f8000,0x78001e,0x3c00003c,
+0x3c1e00,0x780003c,0x1e00000f,0xc000,0xcc0c033,0x83000c03,0xc038330,0x3033000,
+0x3fc001f,0xff001f1f,0xf000,0xf80003c,0x1e0000f8,0x1f8000,0x78001e,0x3e00003c,
+0x3c1e00,0x780003c,0x1e00000f,0,0x31,0xf3000c03,0xc01f3f0,0x303f000,
+0x3fc001f,0xbe001f1f,0xf000,0x1f00003c,0x1e0000f8,0x1f0000,0x78001e,0x3e00003c,
+0x3c1e00,0x780003c,0x1e00000f,0,0x30,0xf3000c03,0xc00f1e0,0x301e000,
+0x1fc001f,0xbe003e0f,0x8000f000,0x1fff003c,0x1e0000f8,0x3f0000,0xf8003e,0x3e00003c,
+0x3c1e00,0x780003c,0x1e00000f,0x30300,0x3030030,0,0xc000000,0,
+0x1fc000f,0xbe003e0f,0x8000f000,0x1fff803f,0xfe0007ff,0x3fff00,0x3ff8003f,0xfe003ffc,
+0x3ffe00,0xf00003f,0xfe000fff,0x38700,0x3870030,0,0xc000000,0,
+0x1fc000f,0x1e003c07,0x8000f000,0x1fff803f,0xfe0007ff,0x3fff00,0x3ff8003f,0xfe003ffc,
+0x3ffe00,0xf00003f,0xfe001fff,0x1ce00,0x1ce0030,0,0xc000000,0,
+0x1f8000f,0x1e007c07,0xc000f000,0x1fff803f,0xfe0007ff,0x3fff00,0x3ff8003f,0xfe003ffc,
+0x3ffe00,0xf00003f,0xfe001fff,0xfc00,0xfc0030,0,0xc000000,0,
+0x1f8000e,0x1e007c07,0xc000f000,0x1fff803f,0xfe0007ff,0x3fff00,0x3ff0003f,0xfe003ffc,
+0x3ffe00,0xf00001f,0xfc001ffe,0x7800,0x780000,0,0,0,
+0,0,0,0,0,0,0,0x3e000000,
+0,0,0,0x3000,0x300000,0,0,0,
+0,0,0,0,0,0,0,0x3e000000,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0x3c01e07c,0x7c07c07,0xc03c03c0,0x3fff0000,0xf0,0xfff00,0xc00030c0,0x30f000,
+0xf000f000,0x3fff0003,0xff000000,0xfc00,0x3,0xf0000000,0,0,
+0x3c01e07c,0x7c07c07,0xc03c03c0,0x3fff0000,0x1f8,0x1fff80,0xe00070e0,0x70f801,
+0xf001f800,0x7fff8007,0xff800000,0x1fc00,0x3,0xf8000000,0,0,
+0x3c01e07c,0x7c07c07,0xc03e07c0,0x3fff00ff,0xfff003fc,0x3fffc0,0xf000f0f0,0xf0f801,
+0xf003fc00,0xffffc00e,0x1c00000,0x3fc00,0x3,0xfc000000,0,0,
+0x3c01e07c,0x7c07e0f,0xc03e07c0,0x3fff00ff,0xfff003fc,0x7fffe0,0xf801f0f8,0x1f0fc03,
+0xf007fe00,0xffffc01c,0xe00000,0x7fc00,0x3,0xfe000000,0,0,
+0x3c01e07c,0x7c03e0f,0x801f0f80,0x1f00ff,0xfff007fe,0xfc03f0,0x7c03e07c,0x3e07c03,
+0xe00fff00,0xf00fc038,0x700000,0xffc00,0xfc0003,0xff003fff,0xf003ffc0,0x3fffc000,
+0x3e03e07c,0x7c03f1f,0x801f0f80,0x1f00ff,0xfff007fe,0xf801f0,0x3e07c03e,0x7c03e07,
+0xc00f9f00,0xf007c030,0x300000,0x1ffc00,0x1fe0003,0xff803fff,0xf003ffc0,0x3fffc000,
+0x1e03c07c,0x7c01f1f,0xf0f00,0x3e00f0,0xf00f9f,0xf000f0,0x1f0f801f,0xf801f0f,
+0x801f0f80,0xf003c030,0xc0300cc0,0xc03ffc00,0x3ff0003,0xffc03fff,0xf0000000,0x30000000,
+0x1e03c07c,0x7c00fbe,0xf9f00,0x3e00f0,0xf00f0f,0xf000f0,0xf9f000f,0x9f000f9f,
+0x1f0f80,0xf003c030,0xc0301cc0,0xe03ffc00,0x7ff8003,0xffc03fff,0xf0000000,0x30000000,
+0x1f07c07c,0x7c00fbe,0x79e00,0x7c00f0,0xf01f0f,0x80f000f0,0x7fe0007,0xfe0007fe,
+0x3e07c0,0xf007c030,0xc03038c0,0x703ffc00,0xfffc003,0xffc03fff,0xf0000000,0x30000000,
+0xf07803c,0x78007fc,0x7fe00,0x7c00f0,0xf01f0f,0x80f000f0,0x3fc0003,0xfc0003fc,
+0x3e07c0,0xf00fc030,0xc03070c0,0x383ffc00,0x1fffe003,0xffc03fff,0xf0000000,0x30000000,
+0xf07803e,0x4f8007fc,0x3fc00,0xf800f0,0xf03e07,0xc0f000f0,0x1f80001,0xf80001f8,
+0x7c03e0,0xffff8030,0xc030e0c0,0x1c3ffc00,0x3ffff003,0xffc01fff,0xe003ffc0,0x30fff000,
+0xf07803e,0x4f8003f8,0x3fc00,0x1f000f0,0xf03e07,0xc0f000f0,0x1f80001,0xf80000f0,
+0x7c03e0,0xffff8030,0xc030e0c0,0x1c3ffc00,0x3ffff003,0xffc00fff,0xc003ffc0,0x30fff000,
+0xf8f803e,0x4f8003f8,0x1f800,0x1f000f0,0xf03e07,0xc0f000f0,0x3fc0003,0xfc0000f0,
+0xfffff0,0xffffe030,0xc03070c0,0x381ffc00,0x3ffff003,0xff8007ff,0x80000000,0xc03000,
+0x78f003e,0xef8003f8,0x1f800,0x3e000f0,0xf07c03,0xe0f000f0,0x7fe0007,0xfe0000f0,
+0xfffff0,0xfffff030,0xc03038e0,0x700ffc00,0x3ffff003,0xff0003ff,0,0xc03000,
+0x78f003e,0xef0007fc,0xf000,0x7c000f0,0xf07c03,0xe0f000f0,0xf9f000f,0x9f0000f0,
+0xfffff0,0xf001f030,0xfc301c7c,0xe007fc00,0x3ffff003,0xfe0001fe,0,0xc03000,
+0x78f001f,0xff0007fc,0xf000,0x7c000f0,0xf0fc03,0xf0f000f0,0x1f0f801f,0xf8000f0,
+0xfffff0,0xf000f030,0x7c300c3c,0xc003fc00,0x3ffff003,0xfc0000fc,0,0xc03000,
+0x7df001f,0xff000ffe,0xf000,0xf8000f0,0xf0f801,0xf0f801f0,0x3e07c03e,0x7c000f0,
+0xf000f0,0xf000f030,0x300000,0x1fc00,0x3,0xf8000000,0x3ffc0,0xfff000,
+0x3de001f,0xff001fbf,0xf000,0x1f8000f0,0xf0f801,0xf0fc03f0,0x7c03e07c,0x3e000f0,
+0xf000f0,0xf001f038,0x700000,0xfc00,0x3,0xf0000000,0x3ffc0,0xfff000,
+0x3de001f,0xff001f1f,0xf000,0x1f0000ff,0xfff0ffff,0xf07fffe0,0xf801f0f8,0x1f000f0,
+0xf000f0,0xfffff01c,0xe00000,0,0,0,0,0,
+0x3fe001f,0xff003f1f,0x8000f000,0x3fff00ff,0xfff0ffff,0xf03fffc0,0xf000f0f0,0xf000f0,
+0xf000f0,0xfffff00e,0x1c00000,0,0,0,0,0,
+0x3fe001f,0xbf007e0f,0xc000f000,0x3fff00ff,0xfff0ffff,0xf01fff80,0xe00070e0,0x7000f0,
+0xf000f0,0x7fffe007,0xff800000,0,0,0,0,0,
+0x1fc000f,0xbe007e0f,0xc000f000,0x3fff00ff,0xfff0ffff,0xf00fff00,0xc00030c0,0x3000f0,
+0xf000f0,0x3fffc003,0xff000000,0,0,0,0,0,
+0x1fc000f,0x1e007c07,0xc000f000,0x3fff0000,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0xf00000,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0x3fc0000,0xc00000,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0x39c0000,0x1c00000,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0x70e0000,0x3800003,0xfc000000,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0x6060000,0x7000003,0xfc000000,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0x6060000,0xe003ff0,0x3c000000,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0x70e0000,0x1c003ff0,0x7c000000,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0x39c0000,0x38003c00,0xec000000,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0x3fc0000,0x70003c01,0xcc000000,0,0,0,0,
+0,0,0,0xc00000,0,0,0,0,
+0,0xf00000,0xe0003c03,0x8c000000,0,0,0,0,
+0,0,0,0x1e00000,0,0,0,0,
+0,0,0xc0003c07,0xc000000,0,0,0,0,
+0x3f0fc03f,0xfc03f0f,0xc03f3f00,0x3f00000,0xf00003cf,0xc0000000,0,0,
+0x3f0fc0,0,0xc0003c0e,0,0,0,0,0,
+0x7f0fe07f,0xfe07f0f,0xe03f3f00,0x3300001,0xf80007cf,0xc0000000,0,0,
+0x7f0fe0,0,0xc0003c0c,0,0,0,0,0,
+0xff0c70e3,0xff0ff0f,0xf0c000c0,0xc000c003,0x9c000e03,0,0,0,
+0xe30c70,0,0xc0003c00,0x30000000,0,0,0,0,
+0xff0c30c3,0xff0ff0f,0xf0c000c0,0xc000c007,0xe000c03,0,0,0,
+0xc30c30,0,0xe0003c00,0x30000000,0,0,0,0,
+0xff0c30c3,0xff0ff0f,0xf0c000c0,0xc000c00e,0x7000c03,0,0x3,0x300000,
+0xc30c30,0,0x70003c00,0x30000000,0,0,0,0,
+0xff0c30c3,0xff0ff0f,0xf0c000c0,0xc000c01c,0x3800e03,0,0x7,0x300000,
+0xc30c30,0,0x38003c00,0x30000000,0,0,0,0,
+0xff0c30c3,0xff0ff0f,0xf000c000,0xc00038,0x1c007c3,0xc30fc,0xe,0x301c7c,
+0x3cc30c30,0,0x1ff03c00,0x30000000,0,0,0,0,
+0xff0c30c3,0xff0ff0f,0xf000c000,0xc00070,0xe003c3,0x1e30fc,0x1c,0x303cfc,
+0x7cc30c30,0,0xff03c00,0x30000000,0,0,0,0,
+0xff0c30c3,0xff0ff0f,0xf0c0c0c0,0xc0c0c0e0,0x700000,0x3f3030,0x38,0x3030c0,
+0xe0c30c30,0,0x3fff,0xf0000000,0,0,0,0,
+0xff0c30c3,0xff0ff0f,0xf0c0c0c0,0xc0c0c0c0,0x300000,0x333030,0x70,0x7030e0,
+0xc0c30c30,0,0x3fff,0xf0000000,0,0,0,0,
+0xff0c30c3,0xff0ff0f,0xf0c0c0c0,0xc0c0c0c0,0x3003cc,0x333030,0xe0,0xffe03c70,
+0xc0c30c30,0,0x3fff,0xf0000000,0,0,0,0,
+0xff0c30c3,0xff0ff0f,0xf0c0c0c0,0xc0c0c0c0,0x3007cc,0x333030,0xe0,0xffc03c38,
+0xc0c30c30,0,0x3fff,0xf0000000,0,0,0,0,
+0xff0ff0ff,0xff0ff0f,0xf000c000,0xff,0xff00e0c,0x3f3030,0x30003070,0x301c,
+0xc0ff0ff0,0,0,0,0,0,0,0,
+0xff0ff0ff,0xff0ff0f,0xf000c000,0xff,0xff00c0c,0x3f3830,0x30003038,0x300c,
+0xe0ff0ff0,0,0,0,0,0,0,0,
+0xc00030c0,0x30c000,0x30c000c0,0xc000c003,0xc000c0c,0x331f30,0x3000301c,0x3cfc,
+0x7cc00030,0,0,0,0,0,0,0,
+0xc00030c0,0x30c000,0x30c000c0,0xc000c003,0xc000c0e,0x330f30,0x3000300e,0x1cf8,
+0x3cc00030,0,0,0,0,0,0,0,
+0xc00030c0,0x30c000,0x30c000c0,0xc330c003,0xc000c07,0xc0000000,0x3ffff007,0,
+0xc00030,0,0,0,0,0,0,0,
+0xc00030c0,0x30c000,0x30c000c0,0xc3f0c003,0xc000c03,0xc0000000,0x3ffff003,0,
+0xc00030,0,0,0,0,0,0,0,
+0,0,0,0x1e00003,0xfc000000,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0xc00003,0xfc000000,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
-0,0,0x181800,0x18187c,0x1e3c3c00,0,0,0,
-0x10388282,0x4410603c,0x24243c,0x242482,0x21424218,0x180000,0,0x100000,
-0x28444444,0x44289042,0x42,0x80,0x1000038,0x181c7e3c,0x7c6c6c6c,0x6c2810dc,
-0x28822828,0x28449052,0x5210525a,0x5a185aae,0xdd886878,0x3c1e7e00,0x40eaaeee,0x82822888,
-0x44821010,0x1044f052,0x91109152,0x911091a4,0x89888878,0x7e1e3c3c,0x5eeaaeee,0x101044c8,
-0x44822828,0x107c885a,0x5a185a52,0x521052b4,0x898e8e38,0x7e1c1800,0x12eaaeee,0x92928200,
-0x82444444,0x10828842,0x42,0x80,0x18a8a18,0x18003c,0x1eeeeeee,0x1000eed0,
-0xfe388282,0x1082f03c,0x24243c,0x242480,0x16e8e00,0,0x828282,0x82aa2890,
-0,0,0x181800,0x181800,0,0,0,0x10389c,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
-0,0x40700,0,0,0,0,0,0,
-0xdc,0x87300,0,0,0,0,0,0,
-0xe8000090,0x1045fe,0x10380000,0,0,0,0,0,
-0xa80000dc,0x6c1048fe,0x387c0000,0,0,0,0,0,
-0xe8002284,0xaa1042fe,0x38fe0000,0,0,0,0,0,
-0xae0042dc,0xaa0e42fe,0x7cfe0000,0,0,0,0,0,
-0x429e00,0xaa007efe,0x7cfe0000,0,0,0,0,0,
-0xe0424070,0xee0000fe,0xfe7c0000,0,0,0,0,0,
-0x407e2040,0x820000fe,0xfe380000,0,0,0,0,0,
-0x40000070,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
-0xe0700000,0,0,0,0,0,0,0,
-0x8010800a,0x200,0x100,0x2008000,0,0,0,0,
-0x8010800a,0x703,0x100,0x4004000,0,0x4,0x1e00c01e,0x7f84000,
-0x800a,0x1040884,0x80380100,0x8002000,0,0x8,0x21014021,0x104200,
-0x8000,0x1041044,0x84440000,0x8002000,0x400000,0x8,0x42824040,0x80204200,
-0x8000,0x1041004,0x88440000,0x10001008,0x400000,0x10,0x42804040,0x80404200,
-0x8000,0x7ff1003,0x10440000,0x1000102a,0x400000,0x20,0x44804000,0x80804200,
-0x8000,0x1040800,0x20440000,0x1000101c,0x400000,0x20,0x44804001,0x1004200,
-0x8000,0x1040700,0x40780000,0x1000101c,0x7fc0001,0xf8000040,0x48804002,0x3e02200,
-0x8000,0x1040080,0x80880000,0x1000102a,0x400000,0x80,0x48804004,0x101f80,
-0x8000,0x1040041,0x18850000,0x10001008,0x400000,0x80,0x50804008,0x80200,
-0,0x1040042,0x24820000,0x10001000,0x400000,0x100,0x50804010,0x80200,
-0x80100000,0x7ff1044,0x24850000,0x8002000,0x400000,0x200,0x60804020,0x80200,
-0x80108000,0x1040880,0x24888000,0x8002000,0xc00,0x180200,0x21004040,0x100200,
-0xe0708000,0x1040700,0x18704000,0x4004000,0x800,0x180400,0x1e03f87f,0x87e00200,
-0,0x1040200,0,0x2008000,0x1000,0,0,0,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
-0x7f81f07f,0x81e01e00,0,0x1e,0xc03,0xe01f87c0,0x7f83f01f,0x4107f00,
-0x40020800,0x82102100,0,0x21,0x1204,0x10200420,0x40040020,0x84100800,
-0x40040001,0x4084080,0,0x40,0x80002104,0x10400410,0x40040040,0x4100800,
-0x40040002,0x4084080,0x20,0x8040,0x81e02104,0x10400410,0x40040040,0x4100800,
-0x40040002,0x2104080,0x80080040,0x4000,0x82104084,0x10400410,0x40040040,0x4100800,
-0x7e05e004,0x1e04080,0x80,0x2000,0x84084087,0xe0400410,0x40040040,0x4100800,
-0x1061004,0x2102180,0x100,0x1001,0x4c84084,0x10400410,0x7e07e04f,0x87f00800,
-0x840808,0x4081e80,0x200,0x1f800806,0x5287f84,0x8400410,0x40040040,0x84100800,
-0x840808,0x4080080,0x400,0x408,0x5284084,0x8400410,0x40040040,0x84100800,
-0x840810,0x4080080,0x200,0x800,0x5284084,0x8400410,0x40040040,0x84100800,
-0x40840810,0x4080080,0x100,0x1f801000,0x5284084,0x8400410,0x40040040,0x84100800,
-0x21021010,0x2104100,0x80080,0x2008,0x4d04084,0x10200420,0x40040021,0x4100800,
-0x1e01e010,0x1e03e00,0x80080040,0x4008,0x4087,0xe01f87c0,0x7f84001e,0x4107f00,
-0,0,0x100020,0x8000,0,0,0,0,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x800,
-0,0,0,0,0,0,0x1f800,0x1f81400,
-0x7e041840,0x6304081,0xe07e01c0,0x3e01f8ff,0x84088088,0x8808808,0xffc10040,0x82200,
-0x2042040,0x9486082,0x10410220,0x41020408,0x4088088,0x8808808,0x410020,0x84100,
-0x2042040,0x9486084,0x8408410,0x40840008,0x4084108,0x8410808,0x810020,0x80000,
-0x2044040,0x9485084,0x8408410,0x40840008,0x4084108,0x88220808,0x1010010,0x80000,
-0x2048040,0x9485084,0x8408410,0x40840008,0x4084108,0x88140808,0x2010008,0x80000,
-0x2070040,0x9484884,0x8410490,0x41020008,0x4084108,0x88080418,0x4010008,0x80000,
-0x2070040,0x9484c84,0x87e0450,0x7e01f008,0x4084108,0x880803e8,0x8010004,0x80000,
-0x2048040,0x8884484,0x8400430,0x41000808,0x4082209,0x48080008,0x10010002,0x80000,
-0x2044040,0x8884284,0x8400410,0x40800408,0x4082209,0x48140008,0x20010002,0x80000,
-0x2042040,0x8884284,0x8400408,0x40800408,0x4082209,0x48220008,0x40010001,0x80000,
-0x2042040,0x8884184,0x8400400,0x40800408,0x4082209,0x48410808,0x80010000,0x80080000,
-0x4041020,0x8084182,0x10400220,0x40840808,0x2101409,0x48808410,0x80010000,0x80080000,
-0x7804081f,0x88084081,0xe04001c0,0x4083f008,0x1e00806,0x308083e0,0xffc10000,0x40080000,
-0,0,0,0,0,0,0x1f800,0x1f80000,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
-0x8000,0,0,0,0,0,0,0,
-0xc000,0x4000000,0x8000000,0x40000,0x4006,0,0,0,
-0x6000,0x4000000,0x8000000,0x40000,0x4002,0,0,0,
-0x2000,0x4000000,0x80001e0,0x40004,0x204002,0,0,0,
-0,0x4000000,0x8000210,0x40000,0x4002,0,0,0,
-0,0x4000000,0x8000408,0x40000,0x4002,0,0,0,
-0x3e,0x5e01e01,0xe81e0400,0x1e85c00c,0xe04202,0x3b85e0,0x1e05e01e,0x85f03f00,
-0x1,0x6102102,0x18210400,0x21862004,0x204402,0x444610,0x21061021,0x86084080,
-0x1,0x4084084,0x8408400,0x40841004,0x204802,0x444408,0x40840840,0x84004000,
-0x3d,0x4084004,0x84087e0,0x40841004,0x207002,0x444408,0x40840840,0x84003e00,
-0x43,0x4084004,0x87f0400,0x40841004,0x205002,0x444408,0x40840840,0x84000100,
-0x41,0x4084004,0x8400400,0x40841004,0x204802,0x404408,0x40840840,0x84000080,
-0x41,0x4084084,0x8400400,0x40841004,0x204402,0x404408,0x40840840,0x84000080,
-0x43,0x6102102,0x18208400,0x21841004,0x204201,0x404408,0x21061021,0x84004100,
-0x3c,0x85e01e01,0xe81f0400,0x1e84100e,0x204100,0xf0404408,0x1e05e01e,0x84003e00,
-0xfff00000,0,0x400,0x800000,0x200000,0,0x40000,0x80000000,
-0,0,0x400,0x800000,0x400000,0,0x40000,0x80000000,
-0,0,0x400,0x41000000,0x1800000,0,0x40000,0xc0000000,
-0,0,0x800,0x3e000000,0,0,0x40000,0x80000000,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
-0x40000000,0,0x70,0x4038000,0,0,0,0,
-0x40000000,0,0x80,0x4004000,0,0,0,0,
-0x40000000,0,0x80,0x4004000,0,0,0,0,
-0x40000000,0,0x80,0x4004000,0xc03,0xf0804804,0xc0c0c07f,0x1f00000,
-0x40000000,0,0x80,0x4004000,0xffc1e07,0xf8c0cc0c,0xe1c1e0ff,0x82080000,
-0x7e040840,0x48084104,0x87f8100,0x4002038,0x4ffc1e0e,0x1c618618,0x618330c1,0x84040000,
-0x40040840,0x48084104,0x8010100,0x4002044,0x4c0c330c,0xc330330,0x330330c1,0x84842880,
-0x40040820,0x88882204,0x8020600,0x4001842,0x4c0c330c,0xc1e01e0,0x3f0618c3,0x84844840,
-0x40040820,0x88881404,0x8040100,0x4002041,0x8c0c618c,0xc0c00c0,0x1e0618ff,0x84848820,
-0x40040811,0x8880804,0x8080100,0x4002000,0xc0c618c,0xc1e01e0,0xc0ffcff,0xc4844840,
-0x40040811,0x8881404,0x8100080,0x4004000,0xc0c618c,0xc330330,0xc0ffcc0,0xc4e42680,
-0x40040811,0x9482204,0x8200080,0x4004000,0xc0cc0ce,0x1c618618,0xc0c0cc0,0xc4040000,
-0x2002100a,0xa284102,0x18400080,0x4004000,0xffcffc7,0xf8c0cc0c,0xc0c0cff,0xc2080000,
-0x1e01e004,0x4104101,0xe87f8080,0x4004000,0xffcffc3,0xf0804804,0xc0c0c7f,0x81f00000,
-0,0,0x8000070,0x38000,0,0,0,0,
-0,0,0x8000000,0,0,0,0,0,
-0,0x4,0x10000000,0,0,0,0,0,
-0,0x3,0xe0000000,0,0,0,0,0,
-0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,
-0x4004000,0x400,0x40000000,0,0,0,0,0,
-0xa00a01f,0xa00,0xa03f81fc,0x3fc3fc0e,0x1c00,0,0,0,
-0x11011020,0x80001101,0x10404202,0x4024021e,0x1e00,0,0,0x800,
-0x40,0x40000000,0x404202,0x4024023e,0xe01f07,0xfc1f87f8,0x73873873,0x87701400,
-0x8028846,0x42680602,0x68400002,0x7e,0x1f01f87,0xfc000400,0xf2493cf3,0xc8088080,
-0x8048448,0x44840804,0x845381ba,0x1100d07e,0x3f81f87,0xfc000400,0xf2493cf3,0xc8088080,
-0x8088248,0x48820808,0x82510212,0x1101107e,0x7fc1f83,0xf81f84fc,0xf2493cf3,0xc0800800,
-0x8048448,0x44840804,0x84510212,0x11c11c3e,0x7fc1f01,0xf0000084,0xf2493cf3,0xc8888880,
-0x6026848,0x42880802,0x88510212,0x1141141e,0x7fc1e00,0xe0000084,0xf2493cf3,0xc8888880,
-0x40,0x40000000,0x4d0212,0xdc11c0e,0x1c00,0x1f80fc,0xf3cf3cf3,0xc0800000,
-0x11011020,0x80001101,0x10400002,0,0,0,0x80480480,0x48088080,
-0xa00a01f,0xa00,0xa0400002,0,0,0,0x80480480,0x48089480,
-0x4004000,0x400,0x40000000,0,0,0,0,0x800,
-0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,
-0,0,0x8,0,0,0,0,0,
-0,0,0x10,0x1e00000,0,0,0,0,
-0,0,0x20,0x7c600000,0,0,0,0,
-0,0,0x40,0x60a0000c,0x3f00000,0,0,0,
-0,0,0x80,0x612ffc1e,0x7f80000,0,0,0,
-0xc01b800,0,0x738080,0x620ffc1e,0xffc0000,0,0,0,
-0x12021000,0,0x924080,0x604ffc3f,0xffc0000,0,0,0,
-0x21021000,0x1040,0x924040,0x604ffc3f,0xffc0000,0,0,0,
-0x40819024,0xe0002042,0x6692403c,0x604ffc7f,0x8ffc0000,0,0,0,
-0x80400054,0x40004044,0x88924000,0x7fcffc7f,0x8ffc0000,0,0,0,
-0x8041a054,0x40008f86,0x48924000,0x7fcffc7f,0x8ffc0000,0,0,0,
-0xf3c22074,0x44044004,0x28f3c000,0xffcff,0xcffc0000,0,0,0,
-0x12022053,0x44042002,0xc6804000,0xffcff,0xc7f80000,0,0,0,
-0x12021800,0x7fc1000,0x804000,0xffcff,0xc3f00000,0,0,0,
-0x1e000000,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,
index a1fc499f19237543f3586a0367a0190f021ad314..477d47061102541fb5b2bdcc992cad9c275d0487 100644 (file)
@@ -1,11 +1,45 @@
 #include "vg_render.h"
-#include "shaders/blit.h"
+
+#ifdef VG_3D
 #include "shaders/blitblur.h"
+#endif
 
-struct vg_postprocess vg_postprocess = 
+static struct vg_shader _shader_blit =
 {
+   .name = "[vg] blit texture",
+   .vs = {
+      .orig_file = NULL,
+      .static_src = 
+       "layout (location=0) in vec2 a_co;"
+       ""
+   "uniform vec2 uInverseRatio;"
+       "out vec2 aUv;"
+       ""
+       "void main(){"
+      "gl_Position = vec4(a_co*2.0-1.0,0.0,1.0);"
+      "aUv = a_co * uInverseRatio;"
+       "}",
+   },
+   .fs = {
+      .orig_file = NULL,
+      .static_src = 
+   "uniform sampler2D uTexMain;"
+       "out vec4 FragColor;"
+       ""
+       "in vec2 aUv;"
+       ""
+       "void main(){"
+      "FragColor = texture( uTexMain, aUv );"
+       "}"
+   }
+};
+
+struct vg_postprocess _vg_postprocess = 
+{
+#ifdef VG_3D
    .blur_effect = 1,
    .blur_strength = 0.3f,
+#endif
 };
 
 struct vg_render _vg_render = 
@@ -21,28 +55,26 @@ static void vg_async_postprocess_init( void *payload, u32 size )
       0.00f,0.00f, 1.00f,0.00f, 1.00f,1.00f,    
    };
 
-   glGenVertexArrays( 1, &vg_postprocess.quad_vao );
-   glGenBuffers( 1, &vg_postprocess.quad_vbo );
-   glBindVertexArray( vg_postprocess.quad_vao );
-   glBindBuffer( GL_ARRAY_BUFFER, vg_postprocess.quad_vbo );
+   glGenVertexArrays( 1, &_vg_postprocess.quad_vao );
+   glGenBuffers( 1, &_vg_postprocess.quad_vbo );
+   glBindVertexArray( _vg_postprocess.quad_vao );
+   glBindBuffer( GL_ARRAY_BUFFER, _vg_postprocess.quad_vbo );
    glBufferData( GL_ARRAY_BUFFER, sizeof(quad), quad, GL_STATIC_DRAW );
-   glBindVertexArray( vg_postprocess.quad_vao );
+   glBindVertexArray( _vg_postprocess.quad_vao );
    glVertexAttribPointer( 0, 2, GL_FLOAT, GL_FALSE, sizeof(f32)*2, (void*)0 );
    glEnableVertexAttribArray( 0 );
+   vg_compile_shader( &_shader_blit );
 }
 
 void vg_render_init(void)
 {
    vg_async_call( vg_async_postprocess_init, NULL, 0 );
 
-   vg_console_reg_var( "render_scale", &_vg_render.scale,
-                       k_var_dtype_f32, VG_VAR_PERSISTENT );
+   vg_console_reg_var( "render_scale", &_vg_render.scale, k_var_dtype_f32, VG_VAR_PERSISTENT );
 
 #ifdef VG_3D
-   vg_console_reg_var( "blur_strength", &vg_postprocess.blur_strength, 
-                        k_var_dtype_f32, 0 );
-   vg_console_reg_var( "blur_effect", &vg_postprocess.blur_effect,
-                        k_var_dtype_i32, VG_VAR_PERSISTENT );
+   vg_console_reg_var( "blur_strength", &_vg_postprocess.blur_strength, k_var_dtype_f32, 0 );
+   vg_console_reg_var( "blur_effect", &_vg_postprocess.blur_effect, k_var_dtype_i32, VG_VAR_PERSISTENT );
 
    void *alloc = vg_mem.rtmemory;
    
@@ -130,7 +162,7 @@ void vg_render_init(void)
 
 void vg_render_fullscreen_quad(void)
 {
-   glBindVertexArray( vg_postprocess.quad_vao );
+   glBindVertexArray( _vg_postprocess.quad_vao );
    glDrawArrays( GL_TRIANGLES, 0, 6 );
 }
 
@@ -143,27 +175,29 @@ void vg_postprocess_to_screen( vg_framebuffer *fb )
    glBindFramebuffer( GL_FRAMEBUFFER, 0 );
    glViewport( 0,0, vg.window_x, vg.window_y );
 
-   glDisable(GL_BLEND);
+   glEnable(GL_BLEND);
    glDisable(GL_DEPTH_TEST);
+   glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_DST_ALPHA);
+   glBlendEquation(GL_FUNC_ADD);
 
    v2f inverse;
    vg_framebuffer_inverse_ratio( fb, inverse );
 
 #ifdef VG_3D
-   if( vg_postprocess.blur_effect )
+   if( _vg_postprocess.blur_effect )
    {
       shader_blitblur_use();
       shader_blitblur_uTexMain( 0 );
       shader_blitblur_uTexMotion( 1 );
 
       f32 s = vg.time_frame_delta*60.0;
-      shader_blitblur_uBlurStrength( vg_postprocess.blur_strength / s );
+      shader_blitblur_uBlurStrength( _vg_postprocess.blur_strength / s );
       shader_blitblur_uInverseRatio( inverse );
 
       inverse[0] -= 0.0001f;
       inverse[1] -= 0.0001f;
       shader_blitblur_uClampUv( inverse );
-      shader_blitblur_uOverrideDir( vg_postprocess.motion_blur_override );
+      shader_blitblur_uOverrideDir( _vg_postprocess.motion_blur_override );
 
       vg_framebuffer_bind_texture( fb, 0, 0 );
       vg_framebuffer_bind_texture( fb, 1, 1 );
@@ -171,9 +205,9 @@ void vg_postprocess_to_screen( vg_framebuffer *fb )
    else
 #endif
    {
-      shader_blit_use();
-      shader_blit_uTexMain( 0 );
-      shader_blit_uInverseRatio( inverse );
+      glUseProgram( _shader_blit.id );
+      glUniform1i( glGetUniformLocation( _shader_blit.id, "uTexMain" ), 0 );
+      glUniform2fv( glGetUniformLocation( _shader_blit.id, "uInverseRatio" ), 1, vg_ui.bg_inverse_ratio );
       vg_framebuffer_bind_texture( fb, 0, 0 );
    }
 
index 9e9db99f67b2028dcc5c05f224c8f1d357c7e1cf..8f401ea787a27cf9ca2342c77bbdd24bb2258d14 100644 (file)
@@ -13,7 +13,7 @@ struct vg_postprocess
    v2f motion_blur_override;
 #endif
 }
-extern vg_postprocess;
+extern _vg_postprocess;
 
 struct vg_render
 {
diff --git a/vg_ui/filebrowser.c b/vg_ui/filebrowser.c
new file mode 100644 (file)
index 0000000..399a522
--- /dev/null
@@ -0,0 +1,397 @@
+#include "vg/vg_ui/filebrowser.h"
+
+void vg_filebrowser_init( struct vg_filebrowser *browser )
+{
+   browser->open_result = k_dir_open_none;
+   browser->view_top_entry = NULL;
+   browser->whole_list = NULL;
+   browser->selected_entry = NULL;
+   browser->current_path[0] = '\0';
+   browser->entry_count = 0;
+   browser->view_top_index = 0;
+   browser->slider_value = 0.0f;
+   browser->mode = k_filebrowser_mode_pick_file;
+   browser->filter = 0;
+}
+
+void filebrowser_textbox_callback( ui_context *ctx, char *buffer, u32 len, void *userdata )
+{
+   struct vg_filebrowser *browser = userdata;
+   vg_filebrowser_free_entries( browser );
+   vg_filebrowser_populate( browser );
+}
+
+enum filebrowser_action vg_filebrowser_ui( ui_context *ctx, ui_rect root_rect, struct vg_filebrowser *browser )
+{
+   enum filebrowser_action result_action = k_filebrowser_action_none;
+
+   ui_rect panel;
+   rect_copy( root_rect, panel );
+   ui_rect_pad( panel, (ui_px[2]){8,8} );
+
+   ui_rect top_bar, box_refresh, box_up, bottom_bar;
+   ui_standard_widget( ctx, panel, top_bar, 1 );
+
+   ui_px height = ui_standard_widget_height( ctx, 1 );
+   ui_split( panel, k_ui_axis_h, -height, ctx->padding, panel, bottom_bar );
+
+   ui_split( top_bar, k_ui_axis_v, 24, 1, box_refresh, top_bar );
+   ui_split( top_bar, k_ui_axis_v, 24, 1, box_up, top_bar );
+
+   struct ui_textbox_callbacks callbacks = 
+   {
+      .enter = filebrowser_textbox_callback,
+      .up = NULL,
+      .down = NULL,
+      .change = NULL,
+      .escape = NULL,
+      .userdata = browser
+   };
+
+   ctx->text_encoding = k_ui_text_encoding_utf8;
+   ui_textbox( ctx, top_bar, NULL, browser->current_path, sizeof(browser->current_path)-1, 1, 0, &callbacks );
+   ctx->text_encoding = k_ui_text_encoding_ascii_vg_extended;
+
+   ctx->font = &vgf_default_large;
+   if( ui_button_text( ctx, box_refresh, "\xb6", 1 ) == k_ui_button_click )
+   {
+      vg_filebrowser_free_entries( browser );
+      vg_filebrowser_populate( browser );
+   }
+
+   if( ui_button_text( ctx, box_up, "\xb8", 1 ) == k_ui_button_click )
+   {
+      vg_str str = 
+      {
+         .buffer = browser->current_path,
+         .i = strlen( browser->current_path ),
+         .len = sizeof(browser->current_path)-1
+      };
+      
+      char *sep = vg_strch( &str, '/' );
+      if( sep )
+      {
+         sep[0] = '\0';
+         vg_filebrowser_free_entries( browser );
+         vg_filebrowser_populate( browser );
+      }
+   }
+   ctx->font = &vgf_default_small;
+
+   if( browser->open_result == k_dir_open_none )
+   {
+      ui_text( ctx, panel, "...", 1, k_ui_align_middle_center, 0 );
+   }
+   else if( browser->open_result == k_dir_open_ok )
+   {
+      ui_rect list_panel, scrollbar;
+      ui_split( panel, k_ui_axis_v, -16, 8, list_panel, scrollbar );
+      u32 max_view = (list_panel[3]-2) / 24;
+      
+      /* scrollbar */
+      f32 t;
+      enum ui_button_state state = ui_slider_base( ctx, scrollbar, k_ui_axis_v, 0, 
+                                                        browser->entry_count+1, &browser->slider_value, &t );
+      enum ui_button_state mask_using = k_ui_button_holding_inside |
+                                        k_ui_button_holding_outside |
+                                        k_ui_button_click;
+      if( state & mask_using )
+      {
+         u32 target = browser->slider_value,
+             index  = browser->view_top_index;
+
+         while( index != target )
+         {
+            struct vg_filebrowser_entry *new_top;
+            if( index < target ) 
+            {
+               new_top = browser->view_top_entry->prev;
+               index ++;
+            }
+            else 
+            {
+               new_top = browser->view_top_entry->next;
+               index --;
+            }
+
+            if( new_top )
+            {
+               browser->view_top_entry = new_top;
+               browser->view_top_index = index;
+            }
+            else break;
+         }
+      }
+
+      ui_fill( ctx, scrollbar, ui_colour( ctx, k_ui_bg ) );
+      ui_outline( ctx, scrollbar, -1, ui_colour(ctx, k_ui_bg+2), 0 );
+
+      ui_rect bar;
+      rect_copy( scrollbar, bar );
+      bar[3] =                (f32)scrollbar[3] * vg_minf(((f32)max_view / (f32)(browser->entry_count+1)), 1.0f);
+      bar[1] = scrollbar[1] + (f32)scrollbar[3] * ((f32)browser->view_top_index / (f32)(browser->entry_count+1));
+      
+      ui_rect bar_top;
+      rect_copy( bar, bar_top );
+      bar_top[3] = 1;
+
+      ui_clip( scrollbar, bar, bar );
+      ui_fill( ctx, bar, ui_colour( ctx, k_ui_bg+1 ) );
+      ui_fill( ctx, bar_top, ui_colour( ctx, k_ui_fg ) );
+
+      /* entries */
+      ui_fill( ctx, list_panel, ui_colour( ctx, k_ui_bg+3 ) );
+      ui_rect entry_box = { list_panel[0]+1, list_panel[1]+1, list_panel[2]-2, 24 };
+      struct vg_filebrowser_entry *entry = browser->view_top_entry;
+
+      bool reload_next_time = 0;
+
+      for( u32 i=0; i<max_view; i ++ )
+      {
+         if( entry )
+         {
+            u32 text_colour = ui_colour( ctx, k_ui_fg );
+
+            if( entry == browser->selected_entry )
+            {
+               ui_fill( ctx, entry_box, ui_colour( ctx, k_ui_bg ) );
+               ui_outline( ctx, entry_box, -1, ui_colour( ctx, k_ui_orange ), 0 );
+            }
+            else
+            {
+               enum ui_button_state click_state = k_ui_button_none;
+               click_state = ui_colourbutton( ctx, entry_box, k_ui_bg+2+(i&0x1), 0, 0 );
+
+               if( click_state == k_ui_button_click )
+               {
+                  if( entry->type == k_vg_entry_type_dir )
+                  {
+                     u32 cur_len = strlen( browser->current_path );
+                     if( (cur_len + strlen( entry->name ) + 2) > sizeof(browser->current_path) )
+                        vg_fatal_error( "Max path size exceeded." );
+                     else
+                     {
+                        strcat( browser->current_path, "/" );
+                        strcat( browser->current_path, entry->name );
+                        reload_next_time = 1;
+                     }
+                  }
+                  else
+                  {
+                     browser->selected_entry = entry;
+                  }
+               }
+               else if( click_state != k_ui_button_none )
+               {
+                  text_colour = ui_colour( ctx, k_ui_bg );
+               }
+            }
+
+            ui_rect icon_box, label_box;
+            ui_split( entry_box, k_ui_axis_v, 24, 0, icon_box, label_box );
+
+            ctx->font = &vgf_default_large;
+            if( entry->type == k_vg_entry_type_dir )
+            {
+               ui_text( ctx, icon_box, "\xb7", 1, k_ui_align_middle_center, 0 );
+            }
+            else
+            {
+               if( entry->media_type != 0 )
+               {
+                  const struct
+                  {
+                     const char *icon_str;
+                     enum ui_scheme_colour colour;
+                  }
+                  scheme[] = 
+                  {
+                     [k_media_type_image] = { "\xb9", k_ui_green },
+                     [k_media_type_video] = { "\xba", k_ui_blue },
+                     [k_media_type_audio] = { "\xbb", k_ui_purple },
+                     [k_media_type_text ] = { "\xbc", k_ui_yellow }
+                  };
+
+                  ui_text( ctx, icon_box, scheme[entry->media_type].icon_str, 1, 
+                                k_ui_align_middle_center, ui_colour(ctx,scheme[entry->media_type].colour) );
+               }
+            }
+            ctx->font = &vgf_default_small;
+
+            ctx->text_encoding = k_ui_text_encoding_utf8;
+            ui_text( ctx, label_box, entry->name, 1, k_ui_align_middle_left, 0 );
+            ctx->text_encoding = k_ui_text_encoding_ascii_vg_extended;
+
+            entry_box[1] += entry_box[3];
+            entry = entry->prev;
+         }
+         else
+            break;
+      }
+
+      if( reload_next_time )
+      {
+         vg_filebrowser_free_entries( browser );
+         vg_filebrowser_populate( browser );
+      }
+
+      ui_rect ok_box, cancel_box;
+      ui_split( bottom_bar, k_ui_axis_v, -120, ctx->padding, bottom_bar, ok_box );
+      ui_split( bottom_bar, k_ui_axis_v, -80, ctx->padding, bottom_bar, cancel_box );
+
+      if( ui_button_text( ctx, cancel_box, "Cancel", 1 ) == k_ui_button_click )
+      {
+         result_action = k_filebrowser_action_escape;
+      }
+
+      if( browser->selected_entry )
+      {
+         if( ui_button_text( ctx, ok_box, "OK", 1 ) == k_ui_button_click )
+         {
+            result_action = k_filebrowser_action_accept;
+         }
+      }
+      else
+      {
+         ui_fill( ctx, ok_box, ui_colour( ctx, k_ui_bg ) );
+         ui_text( ctx, ok_box, "OK", 1, k_ui_align_middle_center, ui_colour( ctx, k_ui_bg+4 ) );
+      }
+   }
+   else
+   {
+      ui_text( ctx, panel, dir_open_result_str[browser->open_result], 1, k_ui_align_middle_center, 
+               ui_colour(ctx,k_ui_yellow) );
+   }
+
+   return result_action;
+}
+
+void vg_filebrowser_free_entries( struct vg_filebrowser *browser )
+{
+   struct vg_filebrowser_entry *entry = browser->whole_list;
+
+   while( entry )
+   {
+      struct vg_filebrowser_entry *prev = entry->prev;
+
+      free( entry );
+      entry = prev;
+   }
+
+   browser->whole_list = NULL;
+   browser->view_top_entry = NULL;
+   browser->selected_entry = NULL;
+   browser->entry_count = 0;
+   browser->view_top_index = 0;
+   browser->slider_value = 0.0f;
+}
+
+void vg_filebrowser_populate( struct vg_filebrowser *browser )
+{
+   VG_ASSERT( browser->whole_list == NULL );
+
+   vg_dir dir;
+   browser->open_result = vg_dir_open( &dir, browser->current_path );
+   browser->entry_count = 0;
+   browser->view_top_index = 0;
+   browser->slider_value = 0.0f;
+
+   struct vg_filebrowser_entry *folder_list_head = NULL,
+                               *folder_list_tail = NULL,
+                               *file_list_head = NULL;
+
+   if( browser->open_result != k_dir_open_ok )
+      return;
+
+   while( vg_dir_next_entry( &dir ) )
+   {
+      enum vg_entry_type type = vg_dir_entry_type( &dir );
+      if( type == k_vg_entry_type_unknown )
+         continue;
+
+      const char *entry_name = vg_dir_entry_name( &dir );
+
+      enum vg_media_type media_type = k_media_type_none;
+      if( type == k_vg_entry_type_file )
+      {
+         const char *ch = entry_name, *ext = NULL;
+         while( *ch )
+         {
+            if( *ch == '.' )
+               ext = (ch+1);
+
+            ch ++;
+         }
+
+         if( ext )
+         {
+            if( !strcmp( ext, "jpg" ) || !strcmp( ext, "jpeg" ) || !strcmp( ext, "png" ) || !strcmp( ext, "tga" ) ||
+                !strcmp( ext, "bmp" ) )
+            {
+               media_type = k_media_type_image;
+            }
+            else if( !strcmp( ext, "mp4" ) || !strcmp( ext, "mkv" ) || !strcmp( ext, "mov" ) )
+            {
+               media_type = k_media_type_video;
+            }
+            else if( !strcmp( ext, "opus" ) || !strcmp( ext, "ogg" ) || !strcmp( ext, "mp3" ) || !strcmp( ext, "wav" ) )
+            {
+               media_type = k_media_type_audio;
+            }
+            else if( !strcmp( ext, "txt" ) || !strcmp( ext, "conf" ) || !strcmp( ext, "cfg" ) || !strcmp( ext, "c" ) ||
+                     !strcmp( ext, "h" ) || !strcmp( ext, "py" ) || !strcmp( ext, "sh" ) || !strcmp( ext, "gitignore" ))
+            {
+               media_type = k_media_type_text;
+            }
+         }
+
+         if( browser->filter )
+         {
+            if( !((0x1 << media_type) & browser->filter) )
+               continue;
+         }
+      }
+
+      u32 len = strlen( entry_name );
+      struct vg_filebrowser_entry *entry = malloc( sizeof(struct vg_filebrowser_entry) + len + 1 );
+      entry->next = NULL;
+      entry->type = type;
+      entry->media_type = media_type;
+      strcpy( entry->name, entry_name );
+
+      if( type == k_vg_entry_type_dir )
+      {
+         entry->prev = folder_list_head;
+         if( folder_list_head )
+            folder_list_head->next = entry;
+         else
+            folder_list_tail = entry;
+         folder_list_head = entry;
+      }
+      else if( type == k_vg_entry_type_file )
+      {
+         entry->prev = file_list_head;
+         if( file_list_head )
+            file_list_head->next = entry;
+         file_list_head = entry;
+      }
+
+      browser->entry_count ++;
+   }
+   vg_dir_close( &dir );
+
+   if( folder_list_head )
+   {
+      browser->whole_list = folder_list_head;
+      folder_list_tail->prev = file_list_head;
+
+      if( file_list_head )
+         file_list_head->next = folder_list_tail;
+   }
+   else
+   {
+      browser->whole_list = file_list_head;
+   }
+
+   browser->view_top_entry = browser->whole_list;
+}
diff --git a/vg_ui/filebrowser.h b/vg_ui/filebrowser.h
new file mode 100644 (file)
index 0000000..ef552d5
--- /dev/null
@@ -0,0 +1,51 @@
+#pragma once
+#include "vg/vg_ui/imgui.h"
+
+struct vg_filebrowser_entry
+{
+   struct vg_filebrowser_entry *prev, *next;
+
+   enum vg_entry_type type;
+   enum vg_media_type
+   {
+      k_media_type_none  = 0,
+      k_media_type_image = 1,
+      k_media_type_video = 2,
+      k_media_type_audio = 3,
+      k_media_type_text  = 4
+   }
+   media_type;
+
+   char name[];
+};
+
+enum filebrowser_action
+{
+   k_filebrowser_action_none,
+   k_filebrowser_action_escape,
+   k_filebrowser_action_accept
+};
+
+struct vg_filebrowser
+{
+   char current_path[ 4096 ];
+   enum dir_open_result open_result;
+
+   struct vg_filebrowser_entry *whole_list, *view_top_entry, *selected_entry;
+   u32 entry_count, view_top_index;
+   f32 slider_value;
+
+   enum filebrowser_mode
+   {
+      k_filebrowser_mode_pick_folder,
+      k_filebrowser_mode_pick_file,
+   }
+   mode;
+
+   u32 filter;
+};
+
+void vg_filebrowser_init( struct vg_filebrowser *browser );
+enum filebrowser_action vg_filebrowser_ui( ui_context *ctx, ui_rect root_rect, struct vg_filebrowser *browser );
+void vg_filebrowser_populate( struct vg_filebrowser *browser );
+void vg_filebrowser_free_entries( struct vg_filebrowser *browser );
index dbcbe5e3e3c9a1c53ef29ae6e252ee4d4daee0bf..ab0915b9910a0637dcd502508e80145f3be8a0b2 100644 (file)
@@ -19,6 +19,7 @@ void ui_init( ui_context *ctx,
    ctx->max_indices = indices_max;
    ctx->cur_indice = 0;
    ctx->indice_start = 0;
+   ctx->text_encoding = k_ui_text_encoding_ascii_vg_extended;
 
    if( !verts_buf || !indices_buf )
       exit(0);
@@ -345,7 +346,7 @@ ui_px ui_text_line_width( ui_context *ctx, const char *str )
             if( c == 'm' ) 
                break;
          } 
-         
+        
          if( c == 0 ) break;
          else continue;
       }
@@ -447,7 +448,8 @@ u32 ui_ntext( ui_context *ctx,
    ui_px glow_text = 0;
 
        ui_rect text_cursor;
-   if( colour == 0 ) colour = ui_colour(ctx, k_ui_fg );
+   if( colour == 0 ) 
+      colour = ui_colour( ctx, k_ui_fg );
 
    colour &= 0x00ffffff;
        
@@ -471,8 +473,28 @@ u32 ui_ntext( ui_context *ctx,
          text_cursor[1] += (rect[3]-height)/2;
    }
 
+   u32 utf8_counter = 0;
+
        while( (c = *(_c ++)) )
    {
+      if( ctx->text_encoding == k_ui_text_encoding_utf8 )
+      {
+         if( utf8_counter )
+         {
+            c = 0xbe;
+            utf8_counter --;
+         }
+         else
+         {
+            if     ( (c & 0xe0) == 0xc0 ) utf8_counter = 1;
+            else if( (c & 0xf0) == 0xe0 ) utf8_counter = 2;
+            else if( (c & 0xf8) == 0xf0 ) utf8_counter = 3;
+
+            if( utf8_counter )
+               c = 0xbd;
+         }
+      }
+
       if( printed_chars >= len )
       {
          printed_chars = 0;
@@ -557,6 +579,12 @@ u32 ui_ntext( ui_context *ctx,
          _c ++;
          continue;
       }
+      else if( c == '\x07' )
+      {
+         glow_text = 0;
+         colour = ui_colour( ctx, k_ui_fg ) & 0x00ffffff;
+         continue;
+      }
       else if( c == '\t' )
       {
          text_cursor[0] += ctx->font->sx*scale*4;
@@ -606,12 +634,10 @@ ui_px ui_standard_widget_height( ui_context *ctx, ui_px count )
    return (count * ctx->font->sy + 18) * ctx->scale;
 }
 
-void ui_standard_widget( ui_context *ctx, 
-                         ui_rect inout_panel, ui_rect out_rect, ui_px count )
+void ui_standard_widget( ui_context *ctx, ui_rect inout_panel, ui_rect out_rect, ui_px count )
 {
    ui_px height = ui_standard_widget_height( ctx, count );
-   ui_split( inout_panel, k_ui_axis_h, height, ctx->padding, 
-             out_rect, inout_panel );
+   ui_split( inout_panel, k_ui_axis_h, height, ctx->padding, out_rect, inout_panel );
 }
 
 void ui_info( ui_context *ctx, ui_rect inout_panel, const char *text )
@@ -636,7 +662,7 @@ void ui_defocus_all( ui_context *ctx )
    {
       ctx->stop_text_input();
       if( ctx->textbox.callbacks.escape )
-         ctx->textbox.callbacks.escape( ctx );
+         ctx->textbox.callbacks.escape( ctx, ctx->textbox.callbacks.userdata );
    }
 
    ctx->focused_control_id = NULL;
@@ -697,8 +723,7 @@ enum ui_button_state ui_colourbutton( ui_context *ctx, ui_rect rect,
 
    u32 col_base      = ctx->scheme[ colour ],
        col_highlight = ctx->scheme[ hi_colour? hi_colour: k_ui_fg ],
-       col_hover     = ctx->scheme[ hover_colour? hover_colour: 
-                                     colour + k_ui_brighter ];
+       col_hover     = ctx->scheme[ hover_colour? hover_colour: colour + k_ui_brighter ];
 
    if( state == k_ui_button_click )
    {
@@ -975,19 +1000,18 @@ static void ui_enum_post( ui_context *ctx )
  * -----------------------------------------------------------------------------
  */
 
-enum ui_button_state ui_slider_base( ui_context *ctx,
-      ui_rect box, f32 min, f32 max, f32 *value, f32 *out_t )
+enum ui_button_state ui_slider_base( ui_context *ctx, ui_rect box, enum ui_axis axis, 
+                                     f32 min, f32 max, f32 *value, f32 *out_t )
 {
-   enum ui_button_state mask_using = 
-                           k_ui_button_holding_inside |
-                           k_ui_button_holding_outside |
-                           k_ui_button_click,
+   enum ui_button_state mask_using = k_ui_button_holding_inside |
+                                     k_ui_button_holding_outside |
+                                     k_ui_button_click,
       state = ui_button_base( ctx, box );
 
    f32 t;
    if( state & mask_using )
    {
-      t = vg_clampf( (f32)(ctx->mouse[0] - box[0]) / (f32)( box[2] ), 0,1 );
+      t = vg_clampf( (f32)(ctx->mouse[axis] - box[axis]) / (f32)( box[2+axis] ), 0,1 );
       *value = vg_lerpf( min, max, t );
    }
    else
@@ -1018,14 +1042,11 @@ bool ui_slider_standard( ui_context *ctx,
          k_ui_button_holding_outside |
          k_ui_button_click,
       mask_brighter = mask_using | k_ui_button_hover,
-      state = ui_slider_base( ctx, box, min, max, value, &t );
+      state = ui_slider_base( ctx, box, k_ui_axis_h, min, max, value, &t );
 
    ui_rect line = { box[0], box[1], t * (f32)box[2], box[3] };
-   ui_fill( ctx, line, 
-            ui_colour(ctx,state&mask_brighter? k_ui_bg+4: k_ui_bg+2) );
-
-   ui_fill( ctx, (ui_rect){ box[0]+line[2], box[1], box[2]-line[2], box[3] },
-               ui_colour(ctx, k_ui_bg ) );
+   ui_fill( ctx, line, ui_colour(ctx,state&mask_brighter? k_ui_bg+4: k_ui_bg+2) );
+   ui_fill( ctx, (ui_rect){ box[0]+line[2], box[1], box[2]-line[2], box[3] }, ui_colour(ctx, k_ui_bg ) );
    ui_outline( ctx, box, 1, ui_colour(ctx,state? k_ui_fg+3: k_ui_bg+3), 0 );
    ui_slider_text( ctx, box, NULL, *value );
 
@@ -1216,7 +1237,7 @@ static void _ui_textbox_change_callback( ui_context *ctx )
 {
    if( ctx->textbox.callbacks.change )
    {
-      ctx->textbox.callbacks.change( ctx, ctx->textbuf, ctx->textbox.len );
+      ctx->textbox.callbacks.change( ctx, ctx->textbuf, ctx->textbox.len, ctx->textbox.callbacks.userdata );
 
       /* we gave permission to modify the buffer in this callback so.. */
       int len = strlen( ctx->textbuf );
@@ -1333,7 +1354,7 @@ void _ui_textbox_up( ui_context *ctx )
    {
       if( ctx->textbox.callbacks.up )
       {
-         ctx->textbox.callbacks.up( ctx, ctx->textbuf, ctx->textbox.len );
+         ctx->textbox.callbacks.up( ctx, ctx->textbuf, ctx->textbox.len, ctx->textbox.callbacks.userdata );
       }
    }
 }
@@ -1397,7 +1418,7 @@ void _ui_textbox_down( ui_context *ctx )
    {
       if( ctx->textbox.callbacks.down )
       {
-         ctx->textbox.callbacks.down( ctx, ctx->textbuf, ctx->textbox.len );
+         ctx->textbox.callbacks.down( ctx, ctx->textbuf, ctx->textbox.len, ctx->textbox.callbacks.userdata );
       }
    }
 }
@@ -1509,7 +1530,7 @@ void _ui_textbox_enter( ui_context *ctx )
       ui_ignore_input_frames( ctx, 2 );
 
       if( ctx->textbox.callbacks.enter )
-         ctx->textbox.callbacks.enter( ctx, ctx->textbuf, ctx->textbox.len );
+         ctx->textbox.callbacks.enter( ctx, ctx->textbuf, ctx->textbox.len, ctx->textbox.callbacks.userdata );
 
       if( ctx->focused_control_type != k_ui_control_textbox ) return;
 
@@ -1823,6 +1844,7 @@ int ui_textbox( ui_context *ctx, ui_rect inout_panel, const char *label,
             ctx->textbox.callbacks.down = NULL;
             ctx->textbox.callbacks.up = NULL;
             ctx->textbox.callbacks.enter = NULL;
+            ctx->textbox.callbacks.userdata = NULL;
          }
 
          ctx->start_text_input();
index a5504e8f2b377074c709fb89a11afd4e669dfa4a..8279b9ba07ead219749aaa5e5564f98a92cdca10 100644 (file)
@@ -142,11 +142,12 @@ struct ui_context
 
          struct ui_textbox_callbacks
          {
-            void (*enter)( ui_context *ctx, char *, u32 ),  
-                 (*up)( ui_context *ctx, char *, u32 ), 
-                 (*down)( ui_context *ctx, char *, u32 ),
-                 (*change)( ui_context *ctx, char *, u32 ),
-                 (*escape)( ui_context *ctx );
+            void (*enter)( ui_context *ctx, char *, u32, void * ),  
+                 (*up)( ui_context *ctx, char *, u32, void * ), 
+                 (*down)( ui_context *ctx, char *, u32, void * ),
+                 (*change)( ui_context *ctx, char *, u32, void * ),
+                 (*escape)( ui_context *ctx, void * );
+            void *userdata;
          }
          callbacks;
       }
@@ -201,6 +202,13 @@ struct ui_context
    }
    cursor;
 
+   enum ui_text_encoding 
+   {
+      k_ui_text_encoding_ascii_vg_extended,
+      k_ui_text_encoding_utf8
+   }
+   text_encoding;
+
    ui_px widget_height, scale, padding;
 
    void (*render_batch)(ui_context *ctx, ui_batch *batch, 
@@ -247,10 +255,8 @@ void ui_outline( ui_context *ctx, ui_rect rect, ui_px thickness, u32 colour, u32
 
 /* rect controls */
 void rect_copy( ui_rect a, ui_rect b );
-void ui_split( ui_rect rect, enum ui_axis other, ui_px width, ui_px gap,
-               ui_rect l, ui_rect r );
-void ui_split_ratio( ui_rect rect, enum ui_axis dir, float ratio, 
-                     ui_px gap, ui_rect l, ui_rect r );
+void ui_split( ui_rect rect, enum ui_axis other, ui_px width, ui_px gap, ui_rect l, ui_rect r );
+void ui_split_ratio( ui_rect rect, enum ui_axis dir, float ratio, ui_px gap, ui_rect l, ui_rect r );
 void ui_rect_pad( ui_rect rect, ui_px pad[2] );
 int ui_clip( ui_rect parent, ui_rect child, ui_rect clipped );
 int ui_inside_rect( ui_rect rect, ui_px co[2] );
@@ -327,7 +333,7 @@ void ui_enum( ui_context *ctx, ui_rect inout_panel, const char *str_label,
 
 enum ui_button_state ui_slider_base( 
       ui_context *ctx,
-      ui_rect box, f32 min, f32 max, f32 *value, f32 *out_t );
+      ui_rect box, enum ui_axis axis, f32 min, f32 max, f32 *value, f32 *out_t );
 void ui_slider_text( ui_context *ctx,
                      ui_rect box, const char *format, f32 value );
 bool ui_slider_standard( ui_context *ctx,