Orb/Doxygen/src/htmlgen.cpp
changeset 4 468f4c8d3d5b
parent 0 42188c7ea2d9
equal deleted inserted replaced
3:d8fccb2cd802 4:468f4c8d3d5b
     1 /******************************************************************************
     1 /******************************************************************************
     2  *
     2  *
     3  * 
     3  * 
     4  *
     4  *
     5  * Copyright (C) 1997-2008 by Dimitri van Heesch.
     5  * Copyright (C) 1997-2010 by Dimitri van Heesch.
     6  *
     6  *
     7  * Permission to use, copy, modify, and distribute this software and its
     7  * Permission to use, copy, modify, and distribute this software and its
     8  * documentation under the terms of the GNU General Public License is hereby 
     8  * documentation under the terms of the GNU General Public License is hereby 
     9  * granted. No representations are made about the suitability of this software 
     9  * granted. No representations are made about the suitability of this software 
    10  * for any purpose. It is provided "as is" without express or implied warranty.
    10  * for any purpose. It is provided "as is" without express or implied warranty.
    14  * input used in their production; they are not affected by this license.
    14  * input used in their production; they are not affected by this license.
    15  *
    15  *
    16  */
    16  */
    17 
    17 
    18 #include <stdlib.h>
    18 #include <stdlib.h>
       
    19 #include <math.h>
    19 
    20 
    20 #include "qtbc.h"
    21 #include "qtbc.h"
    21 #include <qdir.h>
    22 #include <qdir.h>
       
    23 #include <qregexp.h>
    22 #include "message.h"
    24 #include "message.h"
    23 #include "htmlgen.h"
    25 #include "htmlgen.h"
    24 #include "config.h"
    26 #include "config.h"
    25 #include "util.h"
    27 #include "util.h"
    26 #include "doxygen.h"
    28 #include "doxygen.h"
    36 #include "pagedef.h"
    38 #include "pagedef.h"
    37 #include "debug.h"
    39 #include "debug.h"
    38 #include "dirdef.h"
    40 #include "dirdef.h"
    39 #include "vhdldocgen.h"
    41 #include "vhdldocgen.h"
    40 #include "layout.h"
    42 #include "layout.h"
    41 
    43 #include "image.h"
    42 // #define GROUP_COLOR "#ff8080"
    44 
    43 
    45 
    44 //#define DBG_HTML(x) x;
    46 //#define DBG_HTML(x) x;
    45 #define DBG_HTML(x) 
    47 #define DBG_HTML(x) 
    46 
    48 
    47 static const char defaultStyleSheet[] = 
    49 static const char defaultStyleSheet[] = 
    50 
    52 
    51 static const char search_script[]=
    53 static const char search_script[]=
    52 #include "search_php.h"
    54 #include "search_php.h"
    53 ;
    55 ;
    54 
    56 
       
    57 static const char search_styleSheet[] =
       
    58 #include "search_css.h"
       
    59 ;
       
    60 
       
    61 
    55 static QCString g_header;
    62 static QCString g_header;
    56 static QCString g_footer;
    63 static QCString g_footer;
    57 
    64 
    58 //------------------------- Pictures for the Tabs ------------------------
    65 //------------------------- Pictures for the Tabs ------------------------
    59 
    66 
    60 static unsigned char tab_b_gif[] = {
    67 // active
    61   0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x01, 0x00, 0x01, 0x00, 0x80, 0x00,
    68 static unsigned char tab_a_png[36] =
    62   0x00, 0x84, 0xb0, 0xc7, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00,
    69 {
    63   0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x02, 0x44, 0x01, 0x00, 0x3b
    70    31,  42,  59,  69,  73,  74,  75,  77,  77,
       
    71    77,  79,  80,  80,  82,  81,  83,  84,  86,
       
    72    87,  88,  89,  90,  91,  91,  93,  94,  94,
       
    73    96,  96,  97,  98,  98,  99,  99,  99, 100
    64 };
    74 };
    65 static unsigned int tab_b_gif_len = 35;
    75 
    66 
    76 // normal background
    67 static unsigned char tab_l_gif[] = {
    77 static unsigned char tab_b_png[36] =
    68   0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x09, 0x00, 0x2c, 0x01, 0xd5, 0x00,
    78 {
    69   0x00, 0xf6, 0xf7, 0xf9, 0xf1, 0xf4, 0xf7, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd,
    79   240, 239, 238, 237, 235, 234, 234, 232, 231,
    70   0xfe, 0xfa, 0xfb, 0xfc, 0xf9, 0xfa, 0xfb, 0xf8, 0xf9, 0xfa, 0xea, 0xef,
    80   229, 228, 227, 224, 224, 221, 219, 218, 217,
    71   0xf3, 0xef, 0xf3, 0xf6, 0xc6, 0xd5, 0xdf, 0xd2, 0xde, 0xe6, 0xd8, 0xe2,
    81   214, 212, 210, 209, 206, 203, 202, 200, 198,
    72   0xe9, 0xde, 0xe7, 0xed, 0xdd, 0xe6, 0xec, 0xe5, 0xec, 0xf1, 0xe8, 0xee,
    82   196, 195, 193, 192, 190, 189, 188, 188, 188
    73   0xf2, 0xf4, 0xf7, 0xf9, 0xf3, 0xf6, 0xf8, 0xb3, 0xc8, 0xd5, 0xc1, 0xd2,
       
    74   0xdd, 0xcb, 0xd9, 0xe2, 0xcf, 0xdc, 0xe4, 0xd6, 0xe1, 0xe8, 0x96, 0xb4,
       
    75   0xc5, 0x9d, 0xb9, 0xc9, 0xaf, 0xc2, 0xcd, 0xbb, 0xce, 0xd9, 0xc3, 0xd4,
       
    76   0xde, 0xc2, 0xd3, 0xdd, 0xc8, 0xd7, 0xe0, 0xcc, 0xda, 0xe2, 0xd5, 0xe1,
       
    77   0xe8, 0xd9, 0xe4, 0xea, 0xd7, 0xe2, 0xe8, 0xe5, 0xec, 0xf0, 0xeb, 0xf0,
       
    78   0xf3, 0x84, 0xb0, 0xc7, 0xd1, 0xde, 0xe5, 0xdc, 0xe6, 0xeb, 0xe3, 0xeb,
       
    79   0xef, 0xeb, 0xf1, 0xf4, 0xee, 0xf3, 0xf5, 0xf7, 0xfa, 0xfb, 0xfb, 0xfc,
       
    80   0xfc, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
       
    81   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       
    82   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       
    83   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       
    84   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       
    85   0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x2c, 0x01, 0x00, 0x06,
       
    86   0xff, 0x40, 0x96, 0x50, 0xb1, 0xc9, 0x60, 0x48, 0x24, 0x21, 0x25, 0x43,
       
    87   0x71, 0x00, 0x56, 0x03, 0x16, 0x65, 0x32, 0x1a, 0x58, 0xad, 0x8a, 0xcc,
       
    88   0x08, 0x4a, 0x28, 0x08, 0x04, 0x93, 0xc4, 0xa0, 0x2b, 0x80, 0x98, 0x33,
       
    89   0x0d, 0x32, 0x24, 0xc0, 0xc6, 0x20, 0xbc, 0x6b, 0x76, 0x8a, 0xe4, 0x2d,
       
    90   0xcb, 0xe7, 0xf5, 0x75, 0x2a, 0x85, 0x22, 0x7d, 0xe3, 0x7c, 0x7d, 0x7f,
       
    91   0x01, 0x7c, 0x07, 0x07, 0x7e, 0x71, 0x28, 0x0f, 0x22, 0x0c, 0x24, 0x66,
       
    92   0x84, 0x07, 0x0c, 0x0c, 0x27, 0x8e, 0x6c, 0x28, 0x8c, 0x26, 0x26, 0x24,
       
    93   0x72, 0x91, 0x99, 0x0b, 0x9b, 0x90, 0x0c, 0x26, 0x0b, 0x21, 0xa0, 0x29,
       
    94   0x0f, 0xa2, 0xa4, 0x9b, 0x7b, 0xa8, 0xa3, 0xa5, 0x72, 0xad, 0xaa, 0xb0,
       
    95   0xa9, 0xaf, 0x84, 0xb1, 0xaf, 0xac, 0xb4, 0xa6, 0xb7, 0xbb, 0xba, 0xb3,
       
    96   0xae, 0xab, 0xa7, 0xbe, 0xb6, 0xc3, 0xc2, 0xc0, 0xbf, 0xb2, 0xb9, 0xc7,
       
    97   0xc4, 0xcb, 0xc6, 0xb2, 0xcc, 0xc9, 0xce, 0xb5, 0xd2, 0xbd, 0xcd, 0xbc,
       
    98   0x84, 0xd4, 0xc8, 0xd3, 0xd7, 0xd0, 0xb8, 0xd9, 0xdd, 0xd5, 0xcf, 0xd9,
       
    99   0xca, 0xe2, 0xdc, 0xdf, 0xe3, 0xe7, 0xe6, 0xea, 0xbe, 0xe4, 0xdb, 0xc5,
       
   100   0xeb, 0xc7, 0xed, 0xe1, 0xee, 0xd6, 0xec, 0xe9, 0xef, 0xf8, 0xf1, 0xf7,
       
   101   0xf5, 0xfc, 0xd1, 0xf0, 0xe5, 0xf9, 0xfc, 0x05, 0xa4, 0x07, 0x50, 0xdf,
       
   102   0x3f, 0x82, 0x08, 0x83, 0x1d, 0x9c, 0xc7, 0x10, 0xdb, 0x42, 0x6d, 0x0d,
       
   103   0xe5, 0x41, 0x9c, 0x08, 0xce, 0xe1, 0xc0, 0x86, 0x15, 0x25, 0x56, 0xdc,
       
   104   0x88, 0xee, 0x21, 0xc7, 0x6b, 0x1a, 0xf7, 0x15, 0x14, 0xd8, 0x2f, 0xe1,
       
   105   0xc4, 0x90, 0x1e, 0x3b, 0x5e, 0xa4, 0xa8, 0xb2, 0x24, 0xc6, 0x96, 0x23,
       
   106   0x4d, 0x66, 0x14, 0x29, 0x13, 0x66, 0xcd, 0x87, 0x28, 0x57, 0xce, 0x4c,
       
   107   0x89, 0x93, 0xe6, 0x4b, 0xe7, 0x90, 0xd2, 0x84, 0xb0, 0x20, 0x92, 0x01,
       
   108   0x49, 0x12, 0x29, 0x4c, 0x1c, 0x18, 0x10, 0x3a, 0x65, 0x44, 0x0b, 0xa1,
       
   109   0x43, 0xb5, 0xb4, 0x78, 0x2a, 0x34, 0x0c, 0x55, 0xa8, 0x68, 0xa0, 0x0a,
       
   110   0x25, 0x11, 0x41, 0xab, 0x90, 0xa3, 0x5e, 0xc1, 0x4e, 0x1d, 0x4b, 0x62,
       
   111   0xac, 0xd9, 0x16, 0x65, 0xa7, 0x0e, 0x58, 0xb1, 0x82, 0x00, 0x81, 0xb4,
       
   112   0x6b, 0xbb, 0x78, 0x21, 0xc1, 0xd6, 0xed, 0x97, 0x32, 0x74, 0xdd, 0xd6,
       
   113   0x09, 0x00, 0x21, 0xaf, 0x9a, 0x35, 0x74, 0xdb, 0xe6, 0xe9, 0x1b, 0x97,
       
   114   0xc0, 0x5d, 0x01, 0x24, 0xac, 0xb4, 0x25, 0x83, 0x58, 0xed, 0xe2, 0x2e,
       
   115   0x69, 0x5b, 0xac, 0x5d, 0x1c, 0x59, 0xad, 0x95, 0xca, 0x66, 0x8f, 0x9e,
       
   116   0x45, 0xeb, 0xf5, 0x6b, 0x67, 0x16, 0x60, 0xb5, 0x86, 0x86, 0x3a, 0x7a,
       
   117   0xeb, 0xe7, 0xd2, 0x9e, 0x3b, 0xa3, 0x06, 0x7d, 0xba, 0xb5, 0x6a, 0xd7,
       
   118   0x61, 0x61, 0x8b, 0x96, 0x4d, 0x9a, 0xb6, 0xe9, 0xd7, 0xb8, 0x63, 0xe7,
       
   119   0x9e, 0xbd, 0xbb, 0x76, 0xef, 0xdb, 0xba, 0x83, 0xf3, 0x16, 0xee, 0x9b,
       
   120   0x38, 0xf0, 0xe1, 0xc8, 0x8b, 0x27, 0x3f, 0xae, 0xbc, 0x39, 0xf3, 0xe7,
       
   121   0xa9, 0x8d, 0x47, 0x5f, 0x3e, 0xdd, 0x79, 0x75, 0xe8, 0xac, 0x7f, 0x5f,
       
   122   0xdf, 0x9e, 0x5d, 0x7a, 0x77, 0xea, 0xdf, 0xad, 0x87, 0xc7, 0xbe, 0xba,
       
   123   0xbc, 0x6d, 0xee, 0xe6, 0xb5, 0x8f, 0x47, 0x7f, 0x7e, 0xbd, 0xfb, 0xf4,
       
   124   0xde, 0xe1, 0x83, 0x97, 0x2f, 0x9e, 0x3e, 0xf9, 0xf6, 0xf6, 0xd9, 0xab,
       
   125   0xcf, 0xff, 0x1e, 0xbf, 0xff, 0xfd, 0xff, 0xc5, 0x17, 0xe0, 0x7c, 0x03,
       
   126   0xd6, 0x57, 0xe0, 0x7d, 0x00, 0x76, 0x16, 0x04, 0x00, 0x3b
       
   127 };
    83 };
   128 static unsigned int tab_l_gif_len = 706;
    84 
   129 
    85 // shadowed header
   130 static unsigned char tab_r_gif[] = {
    86 static unsigned char header_png[12] = 
   131   0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x90, 0x01, 0x2c, 0x01, 0xd5, 0x00,
    87 {
   132   0x00, 0xf6, 0xf7, 0xf9, 0xf1, 0xf4, 0xf7, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd,
    88   255, 240, 241, 242, 243, 244, 
   133   0xfe, 0xfa, 0xfb, 0xfc, 0xf9, 0xfa, 0xfb, 0xf8, 0xf9, 0xfa, 0xea, 0xef,
    89   245, 246, 247, 248, 249, 250
   134   0xf3, 0xef, 0xf3, 0xf6, 0xc6, 0xd5, 0xdf, 0xd2, 0xde, 0xe6, 0xd8, 0xe2,
       
   135   0xe9, 0xde, 0xe7, 0xed, 0xdd, 0xe6, 0xec, 0xe5, 0xec, 0xf1, 0xe8, 0xee,
       
   136   0xf2, 0xf4, 0xf7, 0xf9, 0xf3, 0xf6, 0xf8, 0xb3, 0xc8, 0xd5, 0xc1, 0xd2,
       
   137   0xdd, 0xcb, 0xd9, 0xe2, 0xcf, 0xdc, 0xe4, 0xd6, 0xe1, 0xe8, 0x96, 0xb4,
       
   138   0xc5, 0x9d, 0xb9, 0xc9, 0xaf, 0xc2, 0xcd, 0xbb, 0xce, 0xd9, 0xc3, 0xd4,
       
   139   0xde, 0xc2, 0xd3, 0xdd, 0xc8, 0xd7, 0xe0, 0xcc, 0xda, 0xe2, 0xd5, 0xe1,
       
   140   0xe8, 0xd9, 0xe4, 0xea, 0xd7, 0xe2, 0xe8, 0xe5, 0xec, 0xf0, 0xeb, 0xf0,
       
   141   0xf3, 0x84, 0xb0, 0xc7, 0xd1, 0xde, 0xe5, 0xdc, 0xe6, 0xeb, 0xe3, 0xeb,
       
   142   0xef, 0xeb, 0xf1, 0xf4, 0xee, 0xf3, 0xf5, 0xf7, 0xfa, 0xfb, 0xfb, 0xfc,
       
   143   0xfc, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
       
   144   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       
   145   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       
   146   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       
   147   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       
   148   0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, 0x2c, 0x01, 0x00, 0x06,
       
   149   0xff, 0x40, 0x92, 0x70, 0x48, 0x2c, 0x1a, 0x8f, 0xc8, 0xa4, 0x72, 0xc9,
       
   150   0x6c, 0x3a, 0x9f, 0xd0, 0xa8, 0x74, 0x4a, 0xad, 0x5a, 0xaf, 0xd8, 0xac,
       
   151   0x76, 0x0b, 0x95, 0x68, 0x3c, 0xac, 0x70, 0x6b, 0x4c, 0x2e, 0x9b, 0xcf,
       
   152   0xe8, 0xb4, 0x7a, 0xcd, 0x6e, 0xbb, 0xdf, 0xf0, 0xb8, 0x7c, 0x4e, 0xaf,
       
   153   0xdb, 0xef, 0xf8, 0xbc, 0x7e, 0xcf, 0x77, 0x0f, 0x56, 0x10, 0x16, 0x1a,
       
   154   0x17, 0x1c, 0x61, 0x2b, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e,
       
   155   0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a,
       
   156   0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0x93, 0x2a, 0x10, 0x01, 0x29, 0x15,
       
   157   0x5e, 0x2c, 0x2a, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2,
       
   158   0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe,
       
   159   0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xb6, 0x10, 0x10, 0x29, 0x0f, 0x27, 0x1d,
       
   160   0x17, 0x15, 0xc6, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6,
       
   161   0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2,
       
   162   0xe3, 0xe4, 0xe5, 0xe6, 0xda, 0xa5, 0x28, 0x22, 0x0c, 0x0c, 0x12, 0x12,
       
   163   0x01, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa,
       
   164   0xfb, 0xfc, 0xfd, 0xfe, 0xff, 0x00, 0x03, 0x0a, 0x1c, 0x48, 0xb0, 0xa0,
       
   165   0xc1, 0x83, 0x08, 0x13, 0xf2, 0x4b, 0x81, 0x22, 0x19, 0x03, 0x13, 0x83,
       
   166   0x52, 0x48, 0x9c, 0x48, 0xb1, 0xa2, 0xc5, 0x8b, 0x18, 0x33, 0x6a, 0xdc,
       
   167   0xc8, 0xb1, 0xa3, 0xc7, 0x8f, 0x20, 0x43, 0x8a, 0x1c, 0x49, 0xb2, 0xa4,
       
   168   0xc9, 0x93, 0x28, 0x53, 0xaa, 0x5c, 0xe9, 0x11, 0xc5, 0x81, 0x75, 0x26,
       
   169   0x40, 0x80, 0x20, 0xc1, 0xb2, 0xa6, 0xcd, 0x9b, 0x38, 0x73, 0xea, 0xdc,
       
   170   0xc9, 0xb3, 0xa7, 0x4f, 0xff, 0x96, 0x28, 0x1a, 0xc2, 0x04, 0xb1, 0x80,
       
   171   0x44, 0xd0, 0xa3, 0x48, 0x93, 0x2a, 0x5d, 0xca, 0xb4, 0xa9, 0xd3, 0xa7,
       
   172   0x50, 0xa3, 0x4a, 0x9d, 0x4a, 0xb5, 0xaa, 0xd5, 0xab, 0x58, 0xb3, 0x6a,
       
   173   0xdd, 0xca, 0xb5, 0xab, 0xd7, 0xaf, 0x53, 0x0f, 0x38, 0x34, 0xb1, 0x20,
       
   174   0x04, 0x89, 0x03, 0x68, 0xd3, 0xaa, 0x5d, 0xcb, 0xb6, 0xad, 0xdb, 0xb7,
       
   175   0x70, 0xe3, 0xca, 0x9d, 0x4b, 0xb7, 0xae, 0xdd, 0xbb, 0x78, 0xf3, 0xea,
       
   176   0xdd, 0xcb, 0xb7, 0xaf, 0xdf, 0xbf, 0x80, 0x03, 0xd3, 0x7d, 0x20, 0xe2,
       
   177   0x44, 0xcc, 0x10, 0x66, 0x1f, 0x28, 0x5e, 0xcc, 0xb8, 0xb1, 0xe3, 0xc7,
       
   178   0x90, 0x23, 0x4b, 0x9e, 0x4c, 0xb9, 0xb2, 0xe5, 0xcb, 0x98, 0x33, 0x6b,
       
   179   0xde, 0xcc, 0xb9, 0xb3, 0xe7, 0xcf, 0xa0, 0x43, 0x8b, 0x1e, 0x6d, 0xb9,
       
   180   0xf0, 0x43, 0xc4, 0x1f, 0x48, 0x9c, 0x58, 0xcd, 0xba, 0xb5, 0xeb, 0xd7,
       
   181   0xb0, 0x63, 0xcb, 0x9e, 0x4d, 0xbb, 0xb6, 0xed, 0xdb, 0xb8, 0x73, 0xeb,
       
   182   0xde, 0xcd, 0xbb, 0xb7, 0xef, 0xdf, 0xc0, 0x83, 0x0b, 0x1f, 0x4e, 0x1c,
       
   183   0xf7, 0xc3, 0x05, 0x1f, 0x4a, 0x94, 0x20, 0xc1, 0xae, 0xb9, 0xf3, 0xe7,
       
   184   0xd0, 0xa3, 0x4b, 0x9f, 0x4e, 0xbd, 0xba, 0xf5, 0xeb, 0xd8, 0xb3, 0x6b,
       
   185   0xdf, 0xce, 0xbd, 0xbb, 0xf7, 0xef, 0xe0, 0xc3, 0x8b, 0x1f, 0x4f, 0xbe,
       
   186   0x3c, 0x76, 0x13, 0x31, 0x91, 0x2b, 0x5f, 0x2e, 0xb3, 0xbd, 0xfb, 0xf7,
       
   187   0xf0, 0xe3, 0xcb, 0x9f, 0x4f, 0xbf, 0xbe, 0xfd, 0xfb, 0xf8, 0xf3, 0xeb,
       
   188   0xdf, 0xcf, 0xbf, 0xbf, 0xff, 0xff, 0x00, 0x06, 0x28, 0xe0, 0x80, 0x04,
       
   189   0x16, 0x98, 0x5f, 0x59, 0xc9, 0x95, 0x40, 0xc1, 0x72, 0x88, 0x35, 0xe8,
       
   190   0xe0, 0x83, 0x10, 0x46, 0x28, 0xe1, 0x84, 0x14, 0x56, 0x68, 0xe1, 0x85,
       
   191   0x18, 0x66, 0xa8, 0xe1, 0x86, 0x1c, 0x76, 0xe8, 0xff, 0xe1, 0x87, 0x20,
       
   192   0x86, 0x28, 0xe2, 0x88, 0x24, 0x96, 0xa8, 0x61, 0x82, 0x14, 0xa4, 0x48,
       
   193   0x82, 0x89, 0x2c, 0xb6, 0xe8, 0xe2, 0x8b, 0x30, 0xc6, 0x28, 0xe3, 0x8c,
       
   194   0x34, 0xd6, 0x68, 0xe2, 0x07, 0x09, 0x2a, 0xa8, 0x22, 0x8e, 0x3c, 0xf6,
       
   195   0xe8, 0xe3, 0x8f, 0x40, 0x06, 0x29, 0xe4, 0x90, 0x44, 0x16, 0x69, 0xe4,
       
   196   0x91, 0x48, 0x26, 0xa9, 0xe4, 0x92, 0x4c, 0x36, 0xe9, 0xe4, 0x93, 0x50,
       
   197   0x46, 0x29, 0xe5, 0x94, 0x54, 0x26, 0xa9, 0x5c, 0x8a, 0x3b, 0x56, 0xa9,
       
   198   0xe5, 0x96, 0x5c, 0x76, 0xe9, 0xe5, 0x97, 0x60, 0x86, 0x29, 0xe6, 0x98,
       
   199   0x5a, 0x5e, 0x89, 0x25, 0x09, 0x64, 0xa6, 0xa9, 0xe6, 0x9a, 0x6c, 0xb6,
       
   200   0xe9, 0xe6, 0x9b, 0x70, 0xfe, 0x68, 0x66, 0x96, 0x71, 0xd6, 0x69, 0xe7,
       
   201   0x9d, 0x78, 0xe6, 0xa9, 0xe7, 0x97, 0x73, 0x52, 0x80, 0xe6, 0x9e, 0x80,
       
   202   0x06, 0x2a, 0xe8, 0xa0, 0x84, 0xc2, 0xd9, 0xe7, 0x9f, 0x85, 0x26, 0xaa,
       
   203   0xe8, 0xa2, 0x8c, 0x36, 0x3a, 0xe4, 0xa1, 0x8e, 0x46, 0x2a, 0xe9, 0xa4,
       
   204   0x94, 0xc6, 0x09, 0x69, 0xa5, 0x98, 0x66, 0xaa, 0xe9, 0xa6, 0x4f, 0x5e,
       
   205   0xca, 0xe9, 0xa7, 0xa0, 0x86, 0xca, 0xa9, 0xa7, 0xa2, 0x96, 0x6a, 0xea,
       
   206   0xa9, 0x84, 0x92, 0x8a, 0xea, 0xaa, 0xac, 0xb6, 0xca, 0xa6, 0xaa, 0xae,
       
   207   0xc6, 0x2a, 0xeb, 0xac, 0x53, 0xc2, 0x4a, 0xeb, 0xad, 0xb8, 0xe6, 0x2a,
       
   208   0xa4, 0xad, 0xba, 0xf6, 0xea, 0xeb, 0xac, 0xbc, 0xfe, 0x2a, 0xec, 0xb0,
       
   209   0xa5, 0x06, 0x4b, 0xec, 0xb1, 0xc8, 0x56, 0x6a, 0x6c, 0xb2, 0xcc, 0x36,
       
   210   0x9b, 0xe8, 0xb2, 0xce, 0x46, 0x2b, 0x2d, 0x9e, 0xd0, 0x4e, 0x6b, 0xed,
       
   211   0xb5, 0x6b, 0x56, 0x8b, 0xed, 0xb6, 0xdc, 0x76, 0xa9, 0x6d, 0xb7, 0xe0,
       
   212   0x86, 0xdb, 0xa9, 0x8e, 0x74, 0x8a, 0x6b, 0xee, 0xb9, 0x51, 0x7e, 0x8b,
       
   213   0xff, 0xee, 0xba, 0xec, 0xf2, 0xa8, 0x6e, 0xbb, 0xf0, 0x9a, 0xfb, 0x6e,
       
   214   0xbc, 0xf4, 0x72, 0x3b, 0x6f, 0xbd, 0xf8, 0x4e, 0x7b, 0x6f, 0xbe, 0xfc,
       
   215   0x32, 0xbb, 0x6f, 0xbf, 0x00, 0x0f, 0xfb, 0x6f, 0xc0, 0x04, 0xeb, 0x3a,
       
   216   0x70, 0xc1, 0x08, 0x03, 0x4b, 0xae, 0x9f, 0x09, 0x37, 0x1c, 0xed, 0xc1,
       
   217   0x0e, 0x47, 0x6c, 0x2a, 0xc4, 0x12, 0x57, 0xfc, 0x29, 0xc5, 0x16, 0x67,
       
   218   0x8c, 0x29, 0xc6, 0x1a, 0x77, 0x1c, 0x29, 0xc7, 0x1e, 0x87, 0xac, 0x28,
       
   219   0xc8, 0x22, 0x97, 0x2c, 0x28, 0xc9, 0x26, 0xa7, 0x9c, 0x27, 0xca, 0x2a,
       
   220   0xb7, 0x6c, 0xe9, 0xc2, 0x88, 0xba, 0x2c, 0x33, 0xa5, 0x2c, 0xcf, 0x6c,
       
   221   0x33, 0x99, 0x35, 0xdf, 0xac, 0x33, 0x9f, 0x30, 0xef, 0xec, 0xf3, 0xb3,
       
   222   0x3d, 0xff, 0x2c, 0x74, 0xa0, 0x39, 0x0f, 0x6d, 0xb4, 0x93, 0x45, 0x1f,
       
   223   0xad, 0xb4, 0x95, 0x41, 0x2f, 0xed, 0x74, 0x9b, 0x49, 0x3f, 0x2d, 0x35,
       
   224   0x90, 0x51, 0x4f, 0x6d, 0x35, 0x8e, 0x55, 0x5f, 0x3d, 0x75, 0xd6, 0x5a,
       
   225   0x3f, 0xcd, 0x75, 0xd7, 0x4b, 0x7f, 0x0d, 0xf6, 0xd1, 0x62, 0x8f, 0x3d,
       
   226   0x74, 0xd9, 0x66, 0xff, 0x8c, 0x76, 0xda, 0x3b, 0xaf, 0xcd, 0xf6, 0xcd,
       
   227   0x6e, 0xbf, 0x3d, 0x73, 0xdc, 0x72, 0xbb, 0x4c, 0x77, 0xdd, 0x2a, 0xdf,
       
   228   0x8d, 0xb7, 0xc9, 0x7a, 0xef, 0x2d, 0x72, 0xdf, 0x7e, 0x7b, 0x0c, 0x78,
       
   229   0xe0, 0x1a, 0x0f, 0x4e, 0xb8, 0xc5, 0x86, 0x1f, 0x2e, 0x71, 0xe2, 0x8a,
       
   230   0x3b, 0xcc, 0x78, 0xe3, 0x09, 0x3f, 0x0e, 0x79, 0xc1, 0x92, 0x4f, 0x1e,
       
   231   0x70, 0xe5, 0x96, 0xf7, 0x8b, 0x79, 0xe6, 0xf9, 0x6e, 0xce, 0x79, 0xbd,
       
   232   0x9e, 0x7f, 0x1e, 0x6f, 0xe8, 0xa2, 0xb7, 0x4b, 0x7a, 0xe9, 0xeb, 0x9e,
       
   233   0x8e, 0xfa, 0xb9, 0xaa, 0xaf, 0x2e, 0x6e, 0xeb, 0xae, 0x83, 0x0b, 0x7b,
       
   234   0xec, 0xf6, 0x36, 0x4d, 0xff, 0xbb, 0xd6, 0xb3, 0xdf, 0x7e, 0x6d, 0xee,
       
   235   0xba, 0xeb, 0x6b, 0x7b, 0xef, 0x52, 0xf3, 0x0e, 0xbc, 0xb3, 0xc2, 0x0f,
       
   236   0xef, 0xef, 0xef, 0xc6, 0x2b, 0x5d, 0x7c, 0xf2, 0xc7, 0x2e, 0xcf, 0xbc,
       
   237   0xc0, 0xc8, 0x3f, 0x2f, 0xb4, 0xf3, 0xd2, 0xfb, 0x4a, 0x7d, 0xf5, 0x06,
       
   238   0x47, 0x8f, 0xbd, 0xce, 0xd7, 0x6f, 0x7f, 0x6b, 0xf7, 0xde, 0x2b, 0x8c,
       
   239   0x25, 0xc3, 0xe1, 0xab, 0xad, 0x7d, 0xf9, 0x76, 0x9f, 0x8f, 0x7e, 0xde,
       
   240   0xea, 0xaf, 0xcf, 0x77, 0xfb, 0xee, 0xff, 0x0d, 0x7f, 0xfc, 0x82, 0xcf,
       
   241   0x4f, 0x7f, 0xe1, 0xf6, 0xdf, 0x8f, 0x78, 0xfe, 0xfa, 0x2f, 0xce, 0x7f,
       
   242   0xff, 0x8e, 0xfb, 0x1f, 0x00, 0x23, 0x27, 0xc0, 0x01, 0x52, 0xae, 0x80,
       
   243   0x06, 0xbc, 0x1c, 0x02, 0x13, 0xa8, 0xb9, 0x05, 0x32, 0xb0, 0x73, 0x0e,
       
   244   0x7c, 0x20, 0xe8, 0x22, 0x28, 0xc1, 0xd1, 0x51, 0xb0, 0x82, 0xa6, 0xbb,
       
   245   0x20, 0x06, 0x53, 0xa7, 0xc1, 0x0d, 0xb2, 0xae, 0x83, 0x1e, 0x7c, 0x1d,
       
   246   0x08, 0x43, 0x28, 0xbb, 0x11, 0x92, 0xb0, 0x76, 0xe3, 0x8b, 0xd9, 0x09,
       
   247   0x09, 0x98, 0xc2, 0x15, 0x46, 0x0c, 0x7c, 0x2e, 0x64, 0x14, 0x0c, 0x63,
       
   248   0x38, 0x32, 0x13, 0xd2, 0x50, 0x5a, 0x33, 0xbc, 0x61, 0xaa, 0x6c, 0xa8,
       
   249   0xc3, 0x66, 0xe5, 0xb0, 0x87, 0x44, 0xe3, 0x21, 0x10, 0x91, 0xf5, 0xc3,
       
   250   0x21, 0xea, 0xa9, 0x88, 0x46, 0xa4, 0x96, 0x10, 0x93, 0x28, 0x2c, 0x24,
       
   251   0x32, 0xb1, 0x4e, 0x4e, 0x7c, 0xa2, 0xa1, 0x96, 0x28, 0xc5, 0xec, 0xb5,
       
   252   0xb0, 0x8a, 0x16, 0x4c, 0x21, 0x17, 0xb6, 0xc8, 0xc5, 0x2e, 0x7a, 0xf1,
       
   253   0x8b, 0x60, 0x0c, 0xa3, 0x18, 0xc7, 0x48, 0xc6, 0x2e, 0x7a, 0x01, 0x0c,
       
   254   0x61, 0x48, 0xa3, 0x1a, 0xd7, 0xc8, 0xc6, 0x36, 0xba, 0xf1, 0x8d, 0x70,
       
   255   0x8c, 0xa3, 0x1c, 0xe7, 0x48, 0xc7, 0x3a, 0xda, 0xff, 0xf1, 0x8e, 0x78,
       
   256   0xcc, 0xa3, 0x1e, 0xf7, 0xc8, 0xc7, 0x3e, 0xfa, 0xf1, 0x8f, 0x80, 0x0c,
       
   257   0x64, 0x1d, 0xc7, 0x40, 0x80, 0x00, 0x08, 0x82, 0x10, 0x82, 0x4c, 0xa4,
       
   258   0x22, 0x17, 0xc9, 0xc8, 0x46, 0x3a, 0xf2, 0x91, 0x90, 0x8c, 0xa4, 0x24,
       
   259   0x13, 0x39, 0x86, 0x02, 0x08, 0x20, 0x00, 0x28, 0x38, 0x85, 0x06, 0x26,
       
   260   0xc9, 0xc9, 0x4e, 0x7a, 0xf2, 0x93, 0xa0, 0x0c, 0xa5, 0x28, 0x47, 0xa9,
       
   261   0x46, 0x42, 0x5e, 0xb2, 0x21, 0xcb, 0xa8, 0x00, 0x29, 0x57, 0xc9, 0xca,
       
   262   0x56, 0xba, 0xf2, 0x95, 0xb0, 0x6c, 0xa4, 0x29, 0x31, 0x99, 0x0c, 0x77,
       
   263   0xc4, 0xf2, 0x96, 0xb8, 0xcc, 0xa5, 0x2e, 0x77, 0x19, 0xca, 0x59, 0xba,
       
   264   0xe4, 0x01, 0x83, 0xe0, 0xa5, 0x30, 0x87, 0x49, 0xcc, 0x62, 0x1a, 0xf3,
       
   265   0x8d, 0xbe, 0x7c, 0xc9, 0x03, 0x48, 0x70, 0xcc, 0x66, 0x3a, 0xf3, 0x99,
       
   266   0xd0, 0xec, 0x65, 0x0b, 0x08, 0x70, 0x4a, 0xb1, 0x88, 0x80, 0x04, 0x7d,
       
   267   0xc8, 0xa6, 0x36, 0xb7, 0xc9, 0xcd, 0x6e, 0x7a, 0xf3, 0x9b, 0xe0, 0x0c,
       
   268   0xa7, 0x38, 0xfb, 0x30, 0x00, 0x02, 0x90, 0xc2, 0x25, 0x22, 0xb8, 0xe6,
       
   269   0x38, 0xd7, 0xc9, 0xce, 0x76, 0xba, 0xf3, 0x9d, 0xf0, 0x8c, 0xa7, 0x3c,
       
   270   0xc9, 0x50, 0xce, 0x51, 0x60, 0xf2, 0x25, 0xd7, 0x24, 0x80, 0x3e, 0xf7,
       
   271   0xc9, 0xcf, 0x7e, 0xfa, 0xf3, 0x9f, 0x00, 0x0d, 0xa8, 0x40, 0x07, 0x4a,
       
   272   0xd0, 0x82, 0x1a, 0xf4, 0xa0, 0x08, 0x4d, 0xa8, 0x42, 0x17, 0xca, 0xd0,
       
   273   0x86, 0x3a, 0xf4, 0xa1, 0x10, 0x8d, 0xa8, 0x44, 0x27, 0x5a, 0x50, 0x4b,
       
   274   0x46, 0x20, 0x05, 0xd6, 0xbc, 0x26, 0x31, 0x36, 0xca, 0xd1, 0x8e, 0x7a,
       
   275   0xf4, 0xa3, 0x20, 0x0d, 0xa9, 0x48, 0x47, 0x4a, 0x52, 0x62, 0x08, 0x20,
       
   276   0x02, 0xf7, 0x4c, 0xe7, 0x35, 0xcf, 0xc1, 0xd2, 0x96, 0xba, 0xf4, 0xa5,
       
   277   0xff, 0x30, 0x8d, 0xa9, 0x4c, 0x67, 0x4a, 0xd3, 0x9a, 0x9a, 0x23, 0x02,
       
   278   0x28, 0x65, 0x08, 0x3e, 0xaf, 0x89, 0xd3, 0x9e, 0xfa, 0xf4, 0xa7, 0x40,
       
   279   0x0d, 0xaa, 0x50, 0x87, 0x4a, 0xd4, 0xa2, 0x1a, 0xf5, 0xa8, 0x48, 0x4d,
       
   280   0xaa, 0x52, 0x97, 0xca, 0xd4, 0xa6, 0x3a, 0xf5, 0xa9, 0x50, 0x8d, 0xaa,
       
   281   0x54, 0xa7, 0x4a, 0xd5, 0xaa, 0x26, 0x35, 0x1d, 0x3b, 0x25, 0x81, 0x55,
       
   282   0xb7, 0xca, 0xd5, 0xae, 0x7a, 0xf5, 0xab, 0x60, 0x0d, 0xab, 0x58, 0xc7,
       
   283   0x4a, 0x56, 0xab, 0xc2, 0x43, 0xa7, 0x8b, 0xd1, 0x6a, 0x59, 0xd7, 0xca,
       
   284   0xd6, 0xb6, 0xba, 0xf5, 0xad, 0x70, 0x8d, 0xab, 0x5c, 0x7f, 0x8a, 0x55,
       
   285   0xb4, 0x90, 0xc0, 0xa6, 0x78, 0xcd, 0xab, 0x5e, 0xf7, 0xca, 0xd7, 0xbe,
       
   286   0xfa, 0xf5, 0xaf, 0xd0, 0xc0, 0x69, 0x29, 0x24, 0x82, 0x02, 0x12, 0x94,
       
   287   0xf4, 0xb0, 0x88, 0x4d, 0xac, 0x62, 0x17, 0xcb, 0xd8, 0xc6, 0x3a, 0x76,
       
   288   0x15, 0x02, 0x88, 0x2c, 0x04, 0x04, 0x0b, 0x0f, 0x12, 0x14, 0xe0, 0xb2,
       
   289   0x98, 0xcd, 0xac, 0x66, 0x37, 0xcb, 0xd9, 0xce, 0x7a, 0xf6, 0xb3, 0xa0,
       
   290   0x0d, 0xad, 0x68, 0x47, 0x4b, 0xda, 0xd2, 0x9a, 0xf6, 0xb4, 0xa8, 0x4d,
       
   291   0xad, 0x6a, 0x57, 0xcb, 0xda, 0xd6, 0xba, 0xf6, 0xb5, 0xb0, 0x15, 0xad,
       
   292   0x2a, 0x24, 0xdb, 0x53, 0x12, 0x50, 0xf4, 0xb6, 0xb8, 0xcd, 0xad, 0x6e,
       
   293   0x77, 0xcb, 0xdb, 0xde, 0xfa, 0xf6, 0xb7, 0xc0, 0xc5, 0x6d, 0x01, 0x20,
       
   294   0x2b, 0x00, 0x12, 0x84, 0xe2, 0xb8, 0xc8, 0x4d, 0xae, 0x72, 0x97, 0xcb,
       
   295   0xdc, 0xe6, 0x3a, 0xf7, 0xb9, 0xd0, 0x45, 0xae, 0x3f, 0xb1, 0x39, 0xcf,
       
   296   0xea, 0x5a, 0xf7, 0xba, 0xd8, 0xcd, 0xae, 0x76, 0xbf, 0x39, 0x80, 0xee,
       
   297   0x22, 0x82, 0xba, 0xdb, 0x0d, 0xaf, 0x78, 0xc7, 0x4b, 0xde, 0xf2, 0x62,
       
   298   0x97, 0x99, 0xd1, 0x4c, 0xff, 0xaf, 0x7a, 0xd7, 0xcb, 0x5e, 0x41, 0xa2,
       
   299   0xb7, 0xbd, 0xf0, 0x8d, 0xaf, 0x7c, 0xe7, 0x1b, 0x86, 0xf7, 0xd2, 0xf7,
       
   300   0xbe, 0xf8, 0xcd, 0xaf, 0x30, 0xed, 0xab, 0xdf, 0xfe, 0xfa, 0xf7, 0xbf,
       
   301   0xa1, 0xe4, 0x2f, 0x80, 0x07, 0x4c, 0xe0, 0x02, 0xbb, 0xd7, 0xc0, 0x08,
       
   302   0x4e, 0xb0, 0x82, 0xef, 0x28, 0xe0, 0x05, 0x3b, 0xf8, 0xc1, 0x09, 0x6e,
       
   303   0x30, 0x84, 0x27, 0x4c, 0x61, 0xfd, 0x4a, 0xb8, 0xc2, 0x18, 0xce, 0x30,
       
   304   0x7b, 0x2f, 0xac, 0xe1, 0x0e, 0x7b, 0xd8, 0x98, 0x1c, 0xfe, 0xb0, 0x88,
       
   305   0x47, 0x7c, 0xcb, 0x10, 0x93, 0xf8, 0xc4, 0x28, 0x16, 0xa5, 0x89, 0x53,
       
   306   0xcc, 0xe2, 0x16, 0x43, 0x72, 0xc5, 0x2e, 0x8e, 0xb1, 0x8c, 0x01, 0x09,
       
   307   0xe3, 0x19, 0xdb, 0xf8, 0xc6, 0x76, 0xac, 0x31, 0x8e, 0x77, 0xcc, 0x63,
       
   308   0x36, 0xea, 0xb8, 0xc7, 0x40, 0xde, 0xf1, 0x8f, 0x83, 0x4c, 0x64, 0x19,
       
   309   0x0f, 0xb9, 0xc8, 0x48, 0x4e, 0xf1, 0x91, 0x93, 0xcc, 0x64, 0x11, 0x2f,
       
   310   0xb9, 0xc9, 0x50, 0xce, 0xf0, 0x93, 0xa3, 0x4c, 0x65, 0x08, 0x4f, 0xb9,
       
   311   0xca, 0x58, 0x8e, 0x70, 0x96, 0xb7, 0x7c, 0xe2, 0x2b, 0x73, 0xf9, 0xcb,
       
   312   0xfd, 0xf5, 0x32, 0x98, 0xc7, 0x4c, 0x5f, 0x31, 0x93, 0xf9, 0xcc, 0xed,
       
   313   0x35, 0x33, 0x9a, 0xd7, 0x1c, 0x4d, 0x35, 0xb3, 0xf9, 0xcd, 0xc7, 0x74,
       
   314   0x33, 0x9c, 0xe7, 0xbc, 0x5f, 0x3a, 0xdb, 0xd9, 0xc2, 0x77, 0xce, 0x73,
       
   315   0x99, 0xf5, 0xcc, 0x67, 0xf8, 0xca, 0xb9, 0xcf, 0x80, 0x0e, 0x70, 0xa0,
       
   316   0x07, 0xfd, 0xcc, 0x3f, 0x13, 0xfa, 0xd0, 0x2f, 0x46, 0xb4, 0xa2, 0xeb,
       
   317   0xbc, 0xe8, 0x46, 0xe3, 0xd2, 0xd0, 0x8e, 0x8e, 0x74, 0x1f, 0x21, 0x2d,
       
   318   0xe9, 0x4a, 0xe3, 0x91, 0xd2, 0x96, 0xce, 0xf4, 0x1c, 0x31, 0xad, 0xe9,
       
   319   0x4e, 0xbb, 0x91, 0xd3, 0x9e, 0x0e, 0x75, 0x1a, 0xff, 0x41, 0x2d, 0xea,
       
   320   0x50, 0x93, 0xba, 0xd4, 0x9d, 0x3e, 0x35, 0xaa, 0x33, 0xad, 0xea, 0x55,
       
   321   0x57, 0xba, 0xd5, 0xae, 0x8e, 0x34, 0xac, 0x63, 0xdd, 0xe8, 0x59, 0xd3,
       
   322   0x5a, 0xd1, 0xb6, 0xbe, 0xf5, 0xa1, 0x73, 0xad, 0xeb, 0x41, 0xf3, 0xba,
       
   323   0xd7, 0x80, 0xfe, 0x35, 0xb0, 0xf9, 0x2c, 0xec, 0x61, 0xe7, 0xb9, 0xd8,
       
   324   0xc6, 0xb6, 0x33, 0xb2, 0x93, 0x3d, 0xe7, 0x65, 0x33, 0xfb, 0xcd, 0xce,
       
   325   0x7e, 0xf6, 0x9a, 0xa3, 0x2d, 0xed, 0x33, 0x53, 0xbb, 0xda, 0x63, 0xbe,
       
   326   0x36, 0xb6, 0xbf, 0xac, 0xed, 0x6d, 0x6f, 0xb9, 0xdb, 0xde, 0xc6, 0x32,
       
   327   0xb8, 0xc3, 0x4d, 0xe5, 0x71, 0x93, 0x1b, 0xca, 0xe6, 0x3e, 0x37, 0x93,
       
   328   0xd3, 0xad, 0x6e, 0x24, 0xb3, 0xbb, 0xdd, 0x44, 0x7e, 0x37, 0xbc, 0x81,
       
   329   0x2c, 0xef, 0x79, 0xf3, 0xb8, 0xde, 0xf6, 0xc6, 0x31, 0xbe, 0xf3, 0x6d,
       
   330   0xe3, 0x7d, 0xf3, 0xdb, 0xc8, 0xff, 0x76, 0xb5, 0xbf, 0x03, 0xde, 0xe2,
       
   331   0x81, 0x13, 0x5c, 0xc9, 0x07, 0x2f, 0xb5, 0xc1, 0x13, 0x4e, 0xe2, 0x85,
       
   332   0x33, 0xdc, 0xc9, 0x0f, 0xf7, 0xb4, 0xc3, 0x23, 0xde, 0xe1, 0x89, 0x53,
       
   333   0x5c, 0xca, 0x17, 0x67, 0x75, 0xc6, 0x2d, 0x6d, 0xf1, 0x8d, 0x4f, 0xb8,
       
   334   0xe3, 0x1e, 0x7f, 0x30, 0xc8, 0x43, 0xbe, 0xe0, 0x91, 0x93, 0x5c, 0xcb,
       
   335   0x27, 0x5f, 0xb4, 0xc9, 0x53, 0x5e, 0xe0, 0x95, 0xb3, 0x7c, 0xc0, 0x2e,
       
   336   0x7f, 0xf9, 0x7f, 0x63, 0x2e, 0xf3, 0x30, 0xd7, 0x9c, 0xd0, 0x34, 0xbf,
       
   337   0x39, 0x7e, 0x73, 0xae, 0xf3, 0x3d, 0xf7, 0xbc, 0xcf, 0x3c, 0xff, 0x79,
       
   338   0x7c, 0x83, 0x2e, 0xf4, 0x34, 0x17, 0x5d, 0xcf, 0x44, 0x3f, 0xba, 0x7a,
       
   339   0x93, 0xae, 0xf4, 0x36, 0x37, 0x5d, 0xd9, 0x4f, 0xa7, 0x33, 0xd3, 0xa3,
       
   340   0xde, 0xcc, 0xa9, 0x53, 0x1d, 0xc4, 0x57, 0x87, 0x76, 0xd6, 0xd9, 0x6c,
       
   341   0x3e, 0xf5, 0xad, 0x33, 0xda, 0xeb, 0x64, 0xee, 0x3a, 0xd8, 0x75, 0x29,
       
   342   0xf6, 0xb1, 0x3f, 0xda, 0xec, 0xd9, 0x46, 0x3b, 0x98, 0xcb, 0xae, 0xf6,
       
   343   0x57, 0xb2, 0xbd, 0xed, 0xad, 0x7c, 0x3b, 0xdc, 0x57, 0x29, 0xf7, 0xb9,
       
   344   0x8f, 0xb2, 0xee, 0x76, 0x17, 0x74, 0xde, 0xcb, 0xbd, 0x77, 0xbe, 0xf7,
       
   345   0x1d, 0xdd, 0x7f, 0x07, 0x7c, 0xe0, 0xd7, 0x3d, 0x78, 0xc2, 0x17, 0xde,
       
   346   0xdd, 0x41, 0x00, 0x00, 0x3b
       
   347 };
    90 };
   348 static unsigned int tab_r_gif_len = 2585;
    91 
   349 
    92 // hovering
   350 static unsigned char search_sel_png[] = {
    93 static unsigned char tab_h_png[36] =
       
    94 {
       
    95   199, 198, 196, 196, 195, 194, 193, 192, 189,
       
    96   188, 187, 184, 184, 181, 180, 178, 176, 173,
       
    97   171, 169, 166, 164, 163, 161, 159, 156, 155,
       
    98   153, 152, 149, 148, 147, 145, 145, 150, 161
       
    99 };
       
   100 
       
   101 // separator
       
   102 static unsigned char tab_s_png[36] =
       
   103 {
       
   104   187, 186, 185, 183, 182, 181, 180, 178, 176,
       
   105   174, 173, 171, 169, 167, 164, 163, 161, 158,
       
   106   156, 154, 152, 150, 148, 145, 143, 141, 140,
       
   107   138, 136, 134, 131, 131, 128, 126, 125, 124
       
   108 };
       
   109 
       
   110 
       
   111 static unsigned char bc_s_png[240] =
       
   112 {
       
   113   150,187,187,148,148,148,148,148,
       
   114   147,175,186,147,147,147,147,147,
       
   115   146,153,185,185,146,146,146,146,
       
   116   144,144,177,183,144,144,144,144,
       
   117   144,144,159,182,144,144,144,144,
       
   118   143,143,144,179,181,143,143,143,
       
   119   142,142,142,165,180,142,142,142,
       
   120   141,141,141,144,178,178,141,141,
       
   121   139,139,139,139,167,176,139,139,
       
   122   137,137,137,137,146,174,137,137,
       
   123   137,137,137,137,137,169,173,137,
       
   124   135,135,135,135,135,150,171,135,
       
   125   133,133,133,133,133,135,167,169,
       
   126   132,132,132,132,132,132,154,167,
       
   127   129,129,129,129,129,129,140,164,
       
   128   129,129,129,129,129,129,154,163,
       
   129   127,127,127,127,127,128,161,161,
       
   130   125,125,125,125,125,141,158,125,
       
   131   123,123,123,123,123,152,156,123,
       
   132   121,121,121,121,129,154,121,121,
       
   133   120,120,120,120,143,152,120,120,
       
   134   118,118,118,120,150,150,118,118,
       
   135   117,117,117,132,148,117,117,117,
       
   136   114,114,114,142,145,114,114,114,
       
   137   113,113,120,143,113,113,113,113,
       
   138   111,111,133,141,111,111,111,111,
       
   139   110,112,140,140,110,110,110,110,
       
   140   109,124,138,109,109,109,109,109,
       
   141   107,133,136,107,107,107,107,107,
       
   142   111,134,106,106,106,106,106,106
       
   143 };
       
   144 
       
   145 static unsigned char bc_s_a_png[240] =
       
   146 {
       
   147   241,241, 21,  0,  0,  0,  0,  0,
       
   148   162,205,117,  0,  0,  0,  0,  0,
       
   149    54,231,225,  3,  0,  0,  0,  0,
       
   150     0,198,215, 78,  0,  0,  0,  0,
       
   151     0, 93,211,186,  0,  0,  0,  0,
       
   152     0,  6,232,235, 42,  0,  0,  0,
       
   153     0,  0,132,203,147,  0,  0,  0,
       
   154     0,  0, 27,242,241, 15,  0,  0,
       
   155     0,  0,  0,168,205,108,  0,  0,
       
   156     0,  0,  0, 63,228,219,  0,  0,
       
   157     0,  0,  0,  0,207,221, 72,  0,
       
   158     0,  0,  0,  0,102,208,177,  0,
       
   159     0,  0,  0,  0,  9,238,240, 36,
       
   160     0,  0,  0,  0,  0,138,201,138,
       
   161     0,  0,  0,  0,  0, 77,187,158,
       
   162     0,  0,  0,  0,  0,159,204,120,
       
   163     0,  0,  0,  0, 15,241,241, 21,
       
   164     0,  0,  0,  0,111,208,171,  0,
       
   165     0,  0,  0,  0,210,222, 66,  0,
       
   166     0,  0,  0, 60,227,219,  0,  0,
       
   167     0,  0,  0,162,204,114,  0,  0,
       
   168     0,  0, 18,238,238, 21,  0,  0,
       
   169     0,  0,114,205,165,  0,  0,  0,
       
   170     0,  0,216,225, 60,  0,  0,  0,
       
   171     0, 66,226,216,  0,  0,  0,  0,
       
   172     0,165,204,111,  0,  0,  0,  0,
       
   173    21,241,241, 18,  0,  0,  0,  0,
       
   174   117,203,159,  0,  0,  0,  0,  0,
       
   175   219,227, 57,  0,  0,  0,  0,  0,
       
   176   211,201,  0,  0,  0,  0,  0,  0
       
   177 };
       
   178 
       
   179 static unsigned char doxygen_png[3224] =
       
   180 {
       
   181   255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
       
   182   255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
       
   183    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,255,255,255,255,255,255,255,255,
       
   184    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 91, 91, 91, 91, 32, 32,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
       
   185    32, 32, 32, 32, 32, 32, 32, 32, 32, 32,255,255,255,255, 32, 32,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
       
   186    32, 32, 32, 32, 32, 32, 32, 32, 32, 32,253,253,253,253, 32, 32,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,255,255,255,255,255,255,255,255,
       
   187    32, 32, 32, 32, 32, 32, 32, 32, 32, 32,251,251,251,251, 32, 32,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,255,255,255,255,255,255,255,255,
       
   188    32, 32, 32, 32, 32, 32, 32, 32, 32, 32,249,249,249,249, 32, 32,249,249,249,249, 32, 32, 32, 32, 32, 32,249,249,249,249, 32, 32, 32, 32, 32, 32,249,249,249,249, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,249,249,249, 32, 32, 32, 32, 32,249,249,249,249, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,249,249,249,249,249,249, 32, 32, 32, 32, 32, 32, 32,249,249,249,249,249, 32, 32, 32, 32, 32,249, 32, 32, 32, 32, 32,255,255,255,
       
   189    32, 32, 32, 32, 46,132,190,190,147, 61,247,247,247,247, 32, 32,247,247, 32, 32,118,161,190,190,161,118, 32, 32,247, 32, 46, 89, 89, 89, 89, 46, 32,247,247, 32, 89, 89, 89, 89, 61, 89, 89, 89, 89, 46, 32,247, 32, 46, 89, 89, 89, 89, 32,247, 32, 32,118,175,190,161, 89, 61, 89, 89, 89, 61, 32,247,247,247, 32, 32,104,147,190,190,190,132, 89, 32, 32,247,247, 32, 46, 89, 89, 89, 75, 32, 89,161,190,161, 75, 32,255,255,
       
   190    32, 32, 32, 74,230,244,244,244,244,244,244,244,244,244, 32, 32,244, 32, 74,216,244,244,244,244,244,244,216, 74, 32,244, 32,187,244,244,244,159, 32,244, 32,117,244,244,244,230, 46,173,244,244,244,131, 32,244, 32,131,244,244,244,173, 32, 32, 46,173,244,244,244,244,244,230,244,244,244,131, 32,244,244, 32, 74,202,244,244,244,244,244,244,244,173, 46, 32,244, 32, 89,244,244,244,187,145,244,244,244,244,244, 89, 32,255,
       
   191    32, 32, 46,213,241,241,241,241,241,241,241,241,241,241, 32, 32, 32, 60,227,241,241,241,241,241,241,241,241,227, 60, 32, 32, 46,227,241,241,241,102, 32, 60,227,241,241,241, 88, 32,116,241,241,241,199, 32,241, 32,185,241,241,241,116, 32, 32,143,241,241,241,241,241,241,241,241,241,241,130, 32,241, 32, 74,227,241,241,241,199,185,241,241,241,241,171, 32,241, 32, 88,241,241,241,241,241,241,241,241,241,241,199, 32,255,
       
   192    32, 32,128,237,237,237,223,128, 87,128,237,237,237,237, 32, 32, 32,182,237,237,237,196,100,100,196,237,237,237,182, 32,237, 32,100,237,237,237,223, 59,196,237,237,237,141, 32, 32, 46,237,237,237,237, 59, 32, 46,237,237,237,237, 46, 32, 59,237,237,237,237,169, 87, 87,182,237,237,237,128, 32,237, 32,196,237,237,237, 87, 32, 32, 73,223,237,237,237, 73, 32, 32, 87,237,237,237,237,223,182,223,237,237,237,237, 46, 32,
       
   193    32, 32,207,234,234,234,113, 32, 32, 32,234,234,234,234, 32, 32, 59,234,234,234,221, 45, 32, 32, 45,221,234,234,234, 59, 32,234, 32,140,234,234,234,221,234,234,234,194, 32, 32,234, 32,167,234,234,234,126, 32, 99,234,234,234,167, 32, 32,126,234,234,234,180, 32, 32, 32,126,234,234,234,126, 32, 32, 99,234,234,234,167, 32, 32, 32, 32,153,234,234,234,126, 32, 32, 86,234,234,234,207, 45, 32, 45,234,234,234,234, 86, 32,
       
   194    32, 45,231,231,231,218, 32, 32, 32, 32,231,231,231,231, 32, 32, 98,231,231,231,165, 32,231,231, 32,165,231,231,231, 98, 32,231, 32, 45,191,231,231,231,231,231,218, 72, 32,231,231, 32, 98,231,231,231,165, 32,151,231,231,231,112, 32, 32,165,231,231,231,112, 32,231, 32,125,231,231,231,125, 32, 32,138,231,231,231,178,125,125,125,125,178,231,231,231,178, 32, 32, 85,231,231,231,178, 32,255, 32,191,231,231,231, 85, 32,
       
   195    32, 84,227,227,227,175, 32, 32, 32, 32,227,227,227,227, 32, 32,123,227,227,227,123, 32,227,227, 32,123,227,227,227,123, 32,227,227, 32, 71,227,227,227,227,227,123, 32,227,227,227,227, 32,214,227,227,227, 45,201,227,227,227, 45, 32, 32,175,227,227,227, 84, 32,227, 32,123,227,227,227,123, 32, 32,175,227,227,227,227,227,227,227,227,227,227,227,227,175, 32, 32, 84,227,227,227,175, 32,255, 32,175,227,227,227, 84, 32,
       
   196    32, 83,223,223,223,172, 32, 32, 32, 32,223,223,223,223, 32, 32,121,223,223,223,121, 32,223,223, 32,121,223,223,223,121, 32,223,223,223, 32,172,223,223,223,210, 45, 32,223,223,223,223, 32,147,223,223,223,134,223,223,223,147, 32,223, 32,172,223,223,223, 83, 32,223, 32,121,223,223,223,121, 32, 32,172,223,223,223,223,223,223,223,223,223,223,223,223,172, 32, 32, 83,223,223,223,172, 32,255, 32,172,223,223,223, 83, 32,
       
   197    32, 82,220,220,220,170, 32, 32, 32, 32,220,220,220,220, 32, 32,120,220,220,220,120, 32,220,220, 32,120,220,220,220,120, 32,220,220, 32, 95,220,220,220,220,220,132, 32,220,220,220,220, 32, 95,220,220,220,207,220,220,220, 95, 32,220, 32,170,220,220,220,107, 32,220, 32,120,220,220,220,120, 32, 32,170,220,220,220,132, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 82,220,220,220,170, 32,255, 32,170,220,220,220, 82, 32,
       
   198    32, 57,216,216,216,216, 32, 32, 32, 32,216,216,216,216, 32, 32, 81,216,216,216,167, 32,216,216, 32,155,216,216,216, 81, 32,216, 32, 57,204,216,216,216,216,216,216, 93, 32,216,216,216,216, 32,204,216,216,216,216,216,204, 32,216,216, 32,118,216,216,216,167, 32, 32, 32,130,216,216,216,118, 32, 32,118,216,216,216,191, 32, 32,216,216,216, 32, 32, 44, 57, 32, 32, 81,216,216,216,167, 32,255, 32,167,216,216,216, 81, 32,
       
   199    32, 32,189,213,213,213,116, 32, 32, 80,213,213,213,213, 32, 32, 44,201,213,213,213, 68, 32, 32, 68,213,213,213,213, 44, 32, 32, 32,165,213,213,213,165,213,213,213,201, 44, 32,213,213,213, 32,129,213,213,213,213,213,141, 32,213,213, 32, 80,213,213,213,213,165,116,153,213,213,213,213,116, 32, 32, 56,213,213,213,213,153, 56, 32, 32, 32, 44,104,189,116, 32, 32, 80,213,213,213,165, 32,255, 32,165,213,213,213, 80, 32,
       
   200    32, 32,139,210,210,210,210,174,174,210,210,210,210,210, 32, 32, 32,127,210,210,210,198,127,127,198,210,210,210,127, 32,210, 32,115,210,210,210,174, 44,139,210,210,210,163, 32, 32,210,210, 32, 68,210,210,210,210,210, 91, 32,210,210,210, 32,174,210,210,210,210,210,210,210,210,210,210,115, 32,210, 32,127,210,210,210,210,210,174,163,163,210,210,210,115, 32, 32, 79,210,210,210,163, 32,255, 32,163,210,210,210, 79, 32,
       
   201    32, 32, 55,194,206,206,206,206,206,194,206,206,206,206, 32, 32, 32, 44,171,206,206,206,206,206,206,206,206,171, 44, 32, 32, 67,206,206,206,206, 67, 32, 44,183,206,206,206,113, 32,206,206,206, 32,183,206,206,206,194, 32,206,206,206,206, 32, 67,194,206,206,206,206,206,171,206,206,206,113, 32,206, 32, 32,136,206,206,206,206,206,206,206,206,206,206,113, 32, 32, 78,206,206,206,160, 32,255, 32,160,206,206,206, 78, 32,
       
   202    32, 32, 32,100,192,203,203,203,157, 55,203,203,203,203, 32, 32,203, 32, 43,135,203,203,203,203,203,203,135, 43, 32, 32, 43,180,203,203,203,112, 32,203, 32, 66,203,203,203,203, 66, 32,203,203, 32,157,203,203,203,135, 32,203,203,203,203,203, 32, 43,112,157,157,123, 55,112,203,203,203,112, 32,203,203, 32, 32, 78,146,203,203,203,203,203,203,169,123, 55, 32, 32, 78,203,203,203,157, 32,255, 32,157,203,203,203, 78, 32,
       
   203    32, 32, 32, 32, 54,110,110, 88, 32, 32, 32, 32, 32, 32, 32, 32,200,200, 32, 32, 54, 99,110,110, 99, 54, 32, 32,200,200, 32, 32, 32, 32, 32, 32, 32,200,200, 32, 32, 32, 32, 32, 32,200,200, 32, 54,200,200,200,200, 77, 32,200,200,200,200,200, 32, 32, 32, 32, 32, 32, 32,166,200,200,200, 88, 32,200,200,200,200, 32, 32, 32, 66, 77, 77, 77, 32, 32, 32, 32,200,200, 32, 32, 32, 32, 32, 32,255, 32, 32, 32, 32, 32, 32,255,
       
   204    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,198,198,198,198, 32, 32, 32, 32, 32, 32,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198, 32,109,198,198,198,176, 32,198,198,198,198,198, 32, 98,121, 76, 32, 32, 54,109,198,198,198,198, 43, 32,198,198,198,198,198,198,198, 32, 32, 32, 32,198,198,198,198,198,198,198,198,198,198,198,198,255,255,255,255,255,255,255,255,
       
   205    32, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 33,159,191,191,191,117, 36, 41, 41, 41, 41, 41, 34,108,191,191,191,191,191,191,191,191,191,117, 36, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,255,
       
   206    32, 41, 97,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 78, 38, 64,190,192,192,192, 66, 66, 41, 41, 85,128, 65, 34,107,190,192,192,192,192,192,192,192,139, 48, 39, 41, 41,105,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 97, 41,255,
       
   207    32, 41, 97,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 96, 36, 95,147,148,148,139, 55, 41, 41, 85,121,128, 91, 38, 75,137,158,190,190,190,170,139, 97, 49, 37, 41, 41,105,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 97, 41,255,
       
   208    32, 41, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 41, 36, 45, 45, 45, 48, 38, 41, 41, 76, 76, 76, 76, 76, 37, 34, 42, 33, 33, 33, 39, 48, 59, 41, 41, 41, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 41,255,
       
   209    32, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,255,
       
   210   255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
       
   211   255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
       
   212 };
       
   213 
       
   214 static unsigned char doxygen_a_png[3224] =
       
   215 {
       
   216     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
       
   217     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
       
   218     0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 66, 66, 66, 66,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
       
   219     0,  0,  0,  0,  0,  0,  0,  0,  0,145,247,247,247,247,145,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
       
   220     0,  0,  0,  0,  0,  0,  0,  0,  0,247,247,247,247,247,247,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
       
   221     0,  0,  0,  0,  0,  0,  0,  0,  0,247,247,247,247,247,247,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
       
   222     0,  0,  0,  0,  0,  0,  0,  0,  0,247,247,247,247,247,247,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
       
   223     0,  0,  0,  0, 16,115,181,181,132,247,247,247,247,247,247,  0,  0,  0,  0,  0, 99,148,181,181,148, 99,  0,  0,  0,  0, 16, 66, 66, 66, 66, 16,  0,  0,  0,  0, 66, 66, 66, 66, 33, 66, 66, 66, 66, 16,  0,  0,  0, 16, 66, 66, 66, 66,  0,  0,  0,  0, 99,165,181,148, 66, 33, 66, 66, 66, 33,  0,  0,  0,  0,  0,  0, 82,132,181,181,181,115, 66,  0,  0,  0,  0,  0, 16, 66, 66, 66, 49,  0, 66,148,181,148, 49,  0,  0,  0,
       
   224     0,  0,  0,129,247,247,247,247,247,247,247,247,247,247,247,  0,  0,  0,112,214,247,247,247,247,247,247,214,112,  0, 16,247,247,247,247,247,247, 46,  0,  0,145,247,247,247,247,247,247,247,247,247,247, 16,  0, 16,247,247,247,247,247, 66,  0, 63,165,247,247,247,247,247,247,247,247,247,247, 33,  0,  0,  0, 96,198,247,247,247,247,247,247,247,165, 63,  0,  0, 16,247,247,247,247,247,145,247,247,247,247,247,145,  0,  0,
       
   225     0,  0,112,247,247,247,247,247,247,247,247,247,247,247,247,  0,  0,129,247,247,247,247,247,247,247,247,247,247,129,  0,181,247,247,247,247,247,148,  0,129,247,247,247,247,247,247,247,247,247,247,247,115,  0,115,247,247,247,247,247,165, 30,247,247,247,247,247,247,247,247,247,247,247,247,115,  0,  0,129,247,247,247,247,247,247,247,247,247,247,247, 63,  0, 66,247,247,247,247,247,247,247,247,247,247,247,247, 96,  0,
       
   226     0, 16,247,247,247,247,247,247,247,247,247,247,247,247,247,  0, 79,247,247,247,247,247,247,247,247,247,247,247,247, 79, 79,247,247,247,247,247,247,129,247,247,247,247,247,247,129,247,247,247,247,247,198,  0,181,247,247,247,247,247, 99,145,247,247,247,247,247,247,247,247,247,247,247,247,115,  0, 96,247,247,247,247,247,247,247,247,247,247,247,247,165,  0, 66,247,247,247,247,247,247,247,247,247,247,247,247,198,  0,
       
   227     0,115,247,247,247,247,247,247,247,247,247,247,247,247,247,  0,181,247,247,247,247,247,247,247,247,247,247,247,247,181,  0,129,247,247,247,247,247,247,247,247,247,247,247,145, 16,247,247,247,247,247,247, 33,247,247,247,247,247,247, 33,247,247,247,247,247,247,247,247,247,247,247,247,247,115,  0,198,247,247,247,247,247,198,181,247,247,247,247,247,247, 49, 66,247,247,247,247,247,247,247,247,247,247,247,247,247, 16,
       
   228     0,214,247,247,247,247,247,129, 66,247,247,247,247,247,247, 33,247,247,247,247,247,247, 96, 96,247,247,247,247,247,247, 33,  0,145,247,247,247,247,247,247,247,247,247,198, 30,  0,165,247,247,247,247,247,115,247,247,247,247,247,165,115,247,247,247,247,247,181, 66,115,247,247,247,247,247,115, 82,247,247,247,247,247,165,115,115,148,247,247,247,247,247,115, 66,247,247,247,247,247,247,181,247,247,247,247,247,247, 66,
       
   229    16,247,247,247,247,247,231,  0,  0,247,247,247,247,247,247, 82,247,247,247,247,247,165,  0,  0,165,247,247,247,247,247, 82,  0, 30,247,247,247,247,247,247,247,247,247, 96,  0,  0, 82,247,247,247,247,247,165,247,247,247,247,247, 99,165,247,247,247,247,247, 99,  0,115,247,247,247,247,247,115,132,247,247,247,247,247,247,247,247,247,247,247,247,247,247,181, 66,247,247,247,247,247,181,  0,198,247,247,247,247,247, 66,
       
   230    66,247,247,247,247,247,181,  0,  0,247,247,247,247,247,247,115,247,247,247,247,247,115,  0,  0,115,247,247,247,247,247,115,  0,  0, 96,247,247,247,247,247,247,247,129,  0,  0,  0,  0,231,247,247,247,247,247,247,247,247,247,247, 16,181,247,247,247,247,247, 66,  0,115,247,247,247,247,247,115,181,247,247,247,247,247,247,247,247,247,247,247,247,247,247,181, 66,247,247,247,247,247,181,  0,181,247,247,247,247,247, 66,
       
   231    66,247,247,247,247,247,181,  0,  0,247,247,247,247,247,247,115,247,247,247,247,247,115,  0,  0,115,247,247,247,247,247,115,  0,  0,  0,181,247,247,247,247,247,247, 30,  0,  0,  0,  0,148,247,247,247,247,247,247,247,247,247,148,  0,181,247,247,247,247,247, 66,  0,115,247,247,247,247,247,115,181,247,247,247,247,247,247,247,247,247,247,247,247,247,247,181, 66,247,247,247,247,247,181,  0,181,247,247,247,247,247, 66,
       
   232    66,247,247,247,247,247,181,  0,  0,247,247,247,247,247,247,115,247,247,247,247,247,115,  0,  0,115,247,247,247,247,247,115,  0,  0,129,247,247,247,247,247,247,247,145,  0,  0,  0,  0, 82,247,247,247,247,247,247,247,247,247, 82,  0,181,247,247,247,247,247, 99,  0,115,247,247,247,247,247,115,181,247,247,247,247,247,247,247,247,247,247,247,247,247,181, 79, 66,247,247,247,247,247,181,  0,181,247,247,247,247,247, 66,
       
   233    33,247,247,247,247,247,247, 14,  0,247,247,247,247,247,247, 66,247,247,247,247,247,181,  0,  0,165,247,247,247,247,247, 66,  0, 79,247,247,247,247,247,247,247,247,247,129,  0,  0,  0,  0,231,247,247,247,247,247,247,247,231,  0,  0,115,247,247,247,247,247,181,115,165,247,247,247,247,247,115,115,247,247,247,247,247,214, 63,  0,  0,  0, 16,112,247,247, 33, 66,247,247,247,247,247,181,  0,181,247,247,247,247,247, 66,
       
   234     0,214,247,247,247,247,247,198,198,247,247,247,247,247,247, 16,247,247,247,247,247,247,132,132,247,247,247,247,247,247, 16, 14,181,247,247,247,247,247,247,247,247,247,247, 79,  0,  0,  0,132,247,247,247,247,247,247,247,148,  0,  0, 66,247,247,247,247,247,247,247,247,247,247,247,247,247,115, 33,247,247,247,247,247,247,247,198,181,181,247,247,247,247,115, 66,247,247,247,247,247,181,  0,181,247,247,247,247,247, 66,
       
   235     0,148,247,247,247,247,247,247,247,247,247,247,247,247,247,  0,132,247,247,247,247,247,247,247,247,247,247,247,247,145,  0,145,247,247,247,247,247,247,247,247,247,247,247,181, 14,  0,  0, 49,247,247,247,247,247,247,247, 82,  0,  0,  0,198,247,247,247,247,247,247,247,247,247,247,247,247,115,  0,145,247,247,247,247,247,247,247,247,247,247,247,247,247,115, 66,247,247,247,247,247,181,  0,181,247,247,247,247,247, 66,
       
   236     0, 46,247,247,247,247,247,247,247,247,247,247,247,247,247,  0, 30,247,247,247,247,247,247,247,247,247,247,247,247, 30,112,247,247,247,247,247,247, 96,247,247,247,247,247,247,145,  0,  0,  0,214,247,247,247,247,247,231,  0,  0,  0,  0, 96,247,247,247,247,247,247,247,247,247,247,247,247,115,  0, 30,148,247,247,247,247,247,247,247,247,247,247,247,247,115, 66,247,247,247,247,247,181,  0,181,247,247,247,247,247, 66,
       
   237     0,  0,129,247,247,247,247,247,247,247,247,247,247,247,247,  0,  0, 96,247,247,247,247,247,247,247,247,247,247, 96, 16,247,247,247,247,247,247,145,  0,112,247,247,247,247,247,247, 49,  0,  0,181,247,247,247,247,247,148,  0,  0,  0,  0,  0,129,247,247,247,247,247,247,247,247,247,247,247,115,  0,  0, 46,148,247,247,247,247,247,247,247,247,247,247,247, 33, 66,247,247,247,247,247,181,  0,181,247,247,247,247,247, 66,
       
   238     0,  0,  0,129,247,247,247,247,181,145,247,247,247,247,145,  0,  0,  0, 46,148,247,247,247,247,247,247,148, 46,  0,  0,112,214,247,247,247,145, 14,  0,  0,145,247,247,247,247,145,  0,  0, 33,247,247,247,247,247,247, 66,  0,  0,  0,  0,  0, 99,132,115,181,181,132,198,247,247,247,247,247, 82,  0,  0,  0,  0, 66,165,247,247,247,247,247,247,198,132, 33,  0,  0,145,247,247,247,181, 79,  0, 79,181,247,247,247,145,  0,
       
   239     0,  0,  0,  0, 33,115,115, 82,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 33, 99,115,115, 99, 33,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,115,247,247,247,247,247,214,  0,  0,  0,  0,  0, 99,247,247,247,247,247,247,247,247,247,247,247,247, 16,  0,  0,  0,  0,  0,  0,  0, 49, 66, 66, 66,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
       
   240     0,165,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,108,224,255,255,255,255,255,255,101,164,255,255,255,143,250,255,255,255,255,255,255,255,255,255,255,255, 98,170,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,165,  0,
       
   241     0,165,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,136,251,255,255,255,255,255,255,101,130,255,255,255,153,250,255,255,255,255,255,255,255,255,255,255,121, 98,189,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,165,  0,
       
   242     0,165,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,198,252,255,255,255,255,255,164,164,255,255,255,255,176,249,251,255,255,255,255,255,255,255,255,150, 86,192,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,165,  0,
       
   243     0,165,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,164,198,255,255,255,255,201,133,164,255,255,255,255,255,145,203,255,255,255,255,255,255,255,117, 79,194,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,165,  0,
       
   244     0, 66,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 73, 73,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 47, 70,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 66,  0,
       
   245     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
       
   246     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
       
   247 };
       
   248 
       
   249 unsigned char mag_sel_png[] = {
   351   0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
   250   0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
   352   0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x10,
   251   0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13,
   353   0x08, 0x02, 0x00, 0x00, 0x00, 0x99, 0x7a, 0xc8, 0x4c, 0x00, 0x00, 0x01,
   252   0x08, 0x06, 0x00, 0x00, 0x00, 0x90, 0x8c, 0x2d, 0xb5, 0x00, 0x00, 0x00,
   354   0xd6, 0x49, 0x44, 0x41, 0x54, 0x28, 0x15, 0x8d, 0x92, 0xbb, 0xae, 0x41,
   253   0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b,
   355   0x51, 0x10, 0x86, 0xcf, 0x66, 0x0b, 0x22, 0x44, 0x23, 0x4a, 0xb7, 0xd0,
   254   0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48,
   356   0x11, 0x09, 0x71, 0x49, 0xbc, 0x82, 0xc2, 0x2b, 0xa0, 0xd6, 0x29, 0x74,
   255   0x52, 0x4d, 0x00, 0x00, 0x6d, 0x98, 0x00, 0x00, 0x73, 0x8e, 0x00, 0x00,
   357   0x1e, 0x42, 0xeb, 0x11, 0x44, 0x41, 0x43, 0x45, 0x27, 0x48, 0x08, 0x91,
   256   0xe0, 0x38, 0x00, 0x00, 0x82, 0xd5, 0x00, 0x00, 0x7a, 0x07, 0x00, 0x00,
   358   0x10, 0x51, 0xba, 0x14, 0x42, 0x21, 0x91, 0x10, 0x97, 0xf3, 0xb1, 0x9c,
   257   0xca, 0xb4, 0x00, 0x00, 0x33, 0x44, 0x00, 0x00, 0x1c, 0x76, 0x84, 0x36,
   359   0x9d, 0x13, 0x97, 0x93, 0x33, 0xc5, 0xda, 0xb3, 0x66, 0xfe, 0xff, 0x9f,
   258   0x2a, 0xbd, 0x00, 0x00, 0x01, 0xb9, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
   360   0x59, 0x33, 0x5b, 0xba, 0x5e, 0xaf, 0x5f, 0x77, 0xbb, 0x5c, 0x2e, 0xd2,
   259   0xe4, 0x94, 0xbb, 0x8a, 0x22, 0x41, 0x14, 0x86, 0xbf, 0xda, 0x16, 0x3a,
   361   0xdd, 0xc4, 0xf5, 0x3f, 0xa7, 0xac, 0x30, 0x3b, 0x9d, 0x4e, 0xbf, 0xdf,
   260   0x10, 0xba, 0x03, 0x2f, 0x78, 0x03, 0x51, 0x11, 0x4c, 0xd4, 0x40, 0xd4,
   362   0x9f, 0x4e, 0xa7, 0x44, 0xdc, 0x6e, 0xb7, 0xdf, 0xef, 0x0f, 0x87, 0xc3,
   261   0x37, 0x30, 0x31, 0x30, 0xe9, 0x07, 0xf0, 0x15, 0x14, 0x7c, 0x1e, 0x31,
   363   0x7f, 0x4b, 0x48, 0xa7, 0xd3, 0x89, 0x7a, 0xd5, 0x6a, 0xb5, 0x5c, 0x2e,
   262   0x37, 0x33, 0x11, 0x73, 0xe9, 0x56, 0x44, 0x84, 0x36, 0xe9, 0x40, 0x50,
   364   0x9f, 0xcf, 0x67, 0xea, 0x43, 0x50, 0xa9, 0x54, 0x6a, 0xb5, 0x3a, 0x91,
   263   0x54, 0x14, 0xc4, 0xc0, 0xa8, 0x6d, 0x50, 0x6a, 0x92, 0x1d, 0xd9, 0x9d,
   365   0x48, 0xc4, 0xe3, 0x71, 0xb2, 0x9f, 0x24, 0x64, 0x70, 0xad, 0x56, 0xab,
   264   0x99, 0x75, 0x0d, 0x26, 0x58, 0xd8, 0x3f, 0xaa, 0xe2, 0xfc, 0xf5, 0xd5,
   366   0x54, 0x2a, 0x19, 0x0c, 0x86, 0x50, 0x28, 0xe4, 0xf5, 0x7a, 0x81, 0x0e,
   265   0x39, 0x9c, 0x53, 0x25, 0xa4, 0x94, 0x7c, 0xa7, 0x7e, 0xf0, 0xcd, 0xfa,
   367   0x87, 0xc3, 0x76, 0xbb, 0x4d, 0xd0, 0x62, 0xb1, 0x44, 0xa3, 0xd1, 0x8f,
   266   0xf7, 0x81, 0xbe, 0xf7, 0xc5, 0xf9, 0x7c, 0x96, 0x93, 0xc9, 0x84, 0xe5,
   368   0x64, 0x12, 0xdd, 0x6e, 0x97, 0xfa, 0x91, 0x48, 0x84, 0x3a, 0x5a, 0xad,
   267   0x72, 0xc9, 0x66, 0xb3, 0x21, 0x99, 0x4c, 0x92, 0xcf, 0xe7, 0xa9, 0x54,
   369   0x96, 0x52, 0x4e, 0xa7, 0x13, 0xd1, 0x5a, 0xad, 0x46, 0x8a, 0xe6, 0xf1,
   268   0x2a, 0x04, 0x02, 0x01, 0xf1, 0x2a, 0x50, 0x48, 0x29, 0x39, 0x9d, 0x4e,
   370   0xdf, 0xf2, 0x55, 0x0c, 0x6c, 0x32, 0x99, 0x70, 0x52, 0xd6, 0x68, 0x34,
   269   0x72, 0x30, 0x18, 0x60, 0x59, 0xd6, 0x27, 0x43, 0xb5, 0x5a, 0xa5, 0xd1,
   371   0xea, 0xf5, 0x7a, 0x9d, 0x4e, 0x87, 0xc3, 0x55, 0xa4, 0xde, 0xd2, 0x44,
   270   0x68, 0x10, 0x0c, 0x06, 0xc5, 0xcb, 0x19, 0x4e, 0xa7, 0x53, 0x2c, 0xcb,
   372   0x50, 0x06, 0x21, 0xde, 0x49, 0x4d, 0x59, 0x7e, 0xcc, 0x8f, 0x07, 0x23,
   271   0x22, 0x95, 0x4a, 0x51, 0x2a, 0x95, 0xc8, 0x64, 0x32, 0xac, 0x56, 0x2b,
   373   0x01, 0x82, 0x14, 0x36, 0x1a, 0x8d, 0x8a, 0xc5, 0xe2, 0x6f, 0x95, 0x54,
   272   0x66, 0xb3, 0x19, 0x93, 0xc9, 0x84, 0x48, 0x24, 0x42, 0xbd, 0x5e, 0x7f,
   374   0x2a, 0xc5, 0x03, 0x6f, 0xfd, 0xd0, 0x24, 0x67, 0xaf, 0xd7, 0x43, 0x48,
   273   0xbd, 0x64, 0xdb, 0xb6, 0x01, 0x28, 0x97, 0xcb, 0x54, 0x2a, 0x15, 0x34,
   375   0x41, 0x70, 0xc5, 0x77, 0xb9, 0x5c, 0x9c, 0xe0, 0x40, 0x2b, 0xd9, 0x64,
   274   0x4d, 0x13, 0xa1, 0x50, 0x48, 0x2a, 0x8a, 0xc2, 0x7a, 0xbd, 0xc6, 0xb6,
   376   0x32, 0x29, 0x46, 0x73, 0x23, 0xfb, 0x7c, 0x3e, 0xce, 0x66, 0xb3, 0x59,
   275   0x6d, 0xea, 0xf5, 0x3a, 0xa3, 0xd1, 0x48, 0xf6, 0xfb, 0xfd, 0xc7, 0x61,
   377   0xa9, 0x54, 0x56, 0xab, 0xd5, 0x72, 0xb9, 0xc4, 0x69, 0x34, 0x1a, 0x04,
   276   0xc3, 0x30, 0xa8, 0xd5, 0x6a, 0xe2, 0x53, 0x53, 0xb6, 0xdb, 0x2d, 0x00,
   378   0xd9, 0x99, 0x98, 0x36, 0xe8, 0x74, 0x3a, 0x4d, 0x04, 0xa6, 0xc0, 0xe3,
   277   0xc5, 0x62, 0x11, 0x4d, 0xd3, 0x04, 0x80, 0xa6, 0x69, 0xa2, 0x50, 0x28,
   379   0x4b, 0x74, 0xb5, 0xdb, 0xed, 0xd8, 0x53, 0xbd, 0x5e, 0xa7, 0x6d, 0x1a,
   278   0xf0, 0x6b, 0x1c, 0x10, 0x86, 0x61, 0x3c, 0x60, 0x80, 0xf8, 0xb2, 0xcb,
   380   0x26, 0xca, 0xce, 0x18, 0x21, 0xa5, 0x6c, 0x36, 0x5b, 0x2e, 0x97, 0x33,
   279   0x89, 0x44, 0x02, 0x00, 0xc7, 0x71, 0x00, 0xde, 0x27, 0x5d, 0xfe, 0xdc,
   381   0x99, 0x4c, 0x04, 0xb1, 0xc1, 0x60, 0xa0, 0x30, 0xb9, 0xaa, 0xf3, 0xf9,
   280   0x3f, 0xe2, 0x1f, 0xa0, 0xe2, 0x8f, 0x63, 0x93, 0xcb, 0xe5, 0x00, 0x18,
   382   0x3c, 0x1c, 0xbb, 0xdd, 0x6e, 0x36, 0x9b, 0x41, 0x23, 0x04, 0xdf, 0xe3,
   281   0x8f, 0xc7, 0x98, 0xa6, 0x89, 0xeb, 0xba, 0xd2, 0x34, 0x4d, 0xc6, 0xe3,
   383   0xf1, 0xb0, 0xa1, 0xed, 0x76, 0x4b, 0x17, 0xe3, 0xf1, 0x38, 0x18, 0x0c,
   282   0x31, 0x00, 0xe9, 0x74, 0x1a, 0x80, 0x5a, 0xad, 0xf6, 0x80, 0x3e, 0xed,
   384   0x32, 0x11, 0xd0, 0x56, 0xab, 0xf5, 0xa6, 0xf1, 0x63, 0x92, 0x78, 0x09,
   283   0xf2, 0x7a, 0xbd, 0x96, 0xc3, 0xe1, 0x90, 0xf9, 0x7c, 0xfe, 0xa5, 0x29,
   385   0x75, 0xf6, 0xfb, 0xfd, 0xe1, 0x70, 0x10, 0x05, 0x35, 0x1a, 0x0d, 0x8a,
   284   0x1c, 0x0e, 0xd3, 0xe9, 0x74, 0xd0, 0x75, 0x5d, 0x00, 0x8c, 0x46, 0xa3,
   386   0x9b, 0xcd, 0xa6, 0x50, 0x28, 0xac, 0xd7, 0x6b, 0x87, 0xc3, 0x91, 0xcd,
   285   0x8f, 0x17, 0xfc, 0x0e, 0xf4, 0x3c, 0x4f, 0xee, 0x76, 0x3b, 0x16, 0x8b,
   387   0x66, 0x59, 0xc1, 0x0f, 0xeb, 0xf1, 0xbd, 0xb5, 0x2d, 0x5e, 0x85, 0x0a,
   286   0x05, 0x8e, 0xe3, 0xb0, 0xdf, 0xef, 0x89, 0xc7, 0xe3, 0xa4, 0xd3, 0x69,
   388   0xa6, 0x5c, 0x09, 0xa2, 0xb5, 0x58, 0x2c, 0xe0, 0xa3, 0x92, 0xc9, 0x64,
   287   0x6c, 0xdb, 0xe6, 0x74, 0x3a, 0x11, 0x8d, 0x46, 0x69, 0xb7, 0xdb, 0x0f,
   389   0x02, 0x81, 0xc0, 0x33, 0x59, 0x70, 0x04, 0xff, 0x29, 0x47, 0x0a, 0xfe,
   288   0xe8, 0xd3, 0x0c, 0x01, 0x3c, 0xcf, 0x93, 0xae, 0xeb, 0xe2, 0x79, 0x1e,
   390   0x7c, 0x3e, 0x9f, 0xcd, 0x66, 0xb1, 0x58, 0x8c, 0x5f, 0xe0, 0x09, 0xf6,
   289   0xb7, 0xdb, 0x0d, 0x9f, 0xcf, 0x87, 0xa2, 0x28, 0x5c, 0x2e, 0x17, 0x7a,
   391   0x68, 0x1b, 0xdc, 0x53, 0x42, 0x08, 0x11, 0x3f, 0x1e, 0x8f, 0xcc, 0x8f,
   290   0xbd, 0x1e, 0xc7, 0xe3, 0x91, 0x58, 0x2c, 0x46, 0xab, 0xd5, 0x7a, 0x0a,
   392   0xb5, 0xbf, 0xfe, 0x67, 0x0f, 0x32, 0xd0, 0xdf, 0x0d, 0xbf, 0xb6, 0xf0,
   291   0x7d, 0xbc, 0x14, 0x55, 0x55, 0x85, 0xaa, 0xaa, 0x9f, 0x0c, 0x7e, 0xbf,
   393   0x56, 0xfa, 0x1b, 0x21, 0x36, 0x05, 0xd3, 0x4d, 0xe6, 0x17, 0x7f, 0x00,
   292   0x5f, 0x36, 0x9b, 0x4d, 0xba, 0xdd, 0x2e, 0xd7, 0xeb, 0x95, 0xeb, 0xf5,
       
   293   0x8a, 0xae, 0xeb, 0x7f, 0xcf, 0xf0, 0x99, 0x5c, 0xd7, 0x95, 0x87, 0xc3,
       
   294   0x81, 0xfb, 0xfd, 0x4e, 0x36, 0x9b, 0x7d, 0xad, 0xe4, 0xff, 0xe7, 0xfb,
       
   295   0x7a, 0x1b, 0x00, 0x59, 0xa8, 0xba, 0x68, 0xca, 0x4f, 0xc5, 0xa7, 0x00,
   394   0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
   296   0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
   395 };
   297 };
   396 static unsigned int search_sel_png_len = 527;
   298 unsigned int mag_sel_png_len = 563;
   397 
   299 
   398 unsigned char search_png[] = {
   300 unsigned char mag_png[] = {
   399   0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
   301   0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
   400   0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x10,
   302   0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13,
   401   0x08, 0x06, 0x00, 0x00, 0x00, 0xc9, 0x56, 0x25, 0x04, 0x00, 0x00, 0x01,
   303   0x08, 0x06, 0x00, 0x00, 0x00, 0x90, 0x8c, 0x2d, 0xb5, 0x00, 0x00, 0x00,
   402   0x9e, 0x49, 0x44, 0x41, 0x54, 0x28, 0x15, 0xa5, 0x52, 0xcd, 0xca, 0x41,
   304   0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b,
   403   0x51, 0x14, 0x5d, 0xdf, 0x75, 0xe5, 0x96, 0xa2, 0x64, 0x2e, 0x6e, 0x86,
   305   0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48,
   404   0x64, 0x24, 0x79, 0x07, 0xc9, 0x0b, 0x18, 0x1b, 0x9a, 0x18, 0x78, 0x08,
   306   0x52, 0x4d, 0x00, 0x00, 0x6d, 0x98, 0x00, 0x00, 0x73, 0x8e, 0x00, 0x00,
   405   0x33, 0x03, 0x6f, 0x21, 0x19, 0x31, 0x62, 0x22, 0x49, 0x28, 0x26, 0xa2,
   307   0xe0, 0x38, 0x00, 0x00, 0x82, 0xd5, 0x00, 0x00, 0x7a, 0x07, 0x00, 0x00,
   406   0x0c, 0x0c, 0x4c, 0xa4, 0x28, 0x7f, 0x85, 0xed, 0xee, 0x5d, 0xe7, 0x84,
   308   0xca, 0xb4, 0x00, 0x00, 0x33, 0x44, 0x00, 0x00, 0x1c, 0x76, 0x84, 0x36,
   407   0x81, 0xfa, 0xbe, 0x6f, 0x0f, 0xee, 0x3d, 0xad, 0xbd, 0xd6, 0xda, 0xfb,
   309   0x2a, 0xbd, 0x00, 0x00, 0x01, 0x92, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
   408   0xec, 0x7d, 0x80, 0x7f, 0xc4, 0xcf, 0xab, 0xb6, 0xdf, 0xef, 0xd3, 0x64,
   310   0xe4, 0x94, 0xbb, 0xaa, 0xea, 0x50, 0x10, 0x86, 0xbf, 0xec, 0x08, 0x29,
   409   0x32, 0xc1, 0x62, 0xb1, 0x10, 0x38, 0x1a, 0x8d, 0x22, 0x91, 0x48, 0x20,
   311   0x36, 0x24, 0x85, 0x17, 0xbc, 0x81, 0x18, 0x11, 0x6c, 0xd4, 0x42, 0x8c,
   410   0x95, 0x4a, 0xbd, 0xf1, 0x94, 0x46, 0x83, 0x8d, 0x46, 0x83, 0xea, 0xf5,
   312   0x0f, 0x61, 0xe1, 0x2b, 0xf8, 0x0a, 0x0a, 0x3e, 0x8f, 0xf8, 0x0c, 0x36,
   411   0x3a, 0xee, 0xf7, 0x3b, 0x1e, 0x8f, 0x87, 0xe4, 0x0d, 0xc3, 0x80, 0xcb,
   313   0x62, 0x1f, 0x92, 0x88, 0x88, 0x10, 0x9b, 0x14, 0x42, 0x44, 0x45, 0x41,
   412   0xe5, 0x42, 0x2e, 0x97, 0x43, 0x36, 0x9b, 0xd5, 0xdc, 0x37, 0x71, 0xaf,
   314   0x2c, 0xac, 0x92, 0x80, 0xb2, 0x4e, 0x73, 0x94, 0x03, 0xfb, 0xb0, 0x4d,
   413   0xd7, 0xa3, 0x5a, 0xad, 0x06, 0xaf, 0xd7, 0x8b, 0x64, 0x32, 0x89, 0x58,
   315   0xb1, 0x8b, 0x03, 0xe7, 0xaf, 0xd6, 0x62, 0xfe, 0xf5, 0x31, 0xc3, 0xcc,
   414   0x2c, 0x26, 0xf9, 0xe9, 0x74, 0x8a, 0xc1, 0x60, 0x80, 0xe3, 0xf1, 0x88,
   316   0x1a, 0x49, 0x08, 0xc1, 0x4f, 0xea, 0x83, 0x1f, 0xd6, 0xbf, 0x0f, 0x4c,
   415   0x42, 0xa1, 0x80, 0x74, 0x3a, 0xfd, 0x66, 0x60, 0x32, 0x6b, 0x38, 0x1c,
   317   0x3c, 0x0f, 0xd7, 0xeb, 0x55, 0x38, 0x8e, 0xc3, 0x66, 0xb3, 0x61, 0xb7,
   416   0xe2, 0x76, 0xbb, 0x71, 0x7b, 0xc8, 0x64, 0x32, 0x08, 0x04, 0x02, 0x42,
   318   0xdb, 0x51, 0x2a, 0x95, 0xa8, 0xd7, 0xeb, 0x18, 0x86, 0x41, 0x32, 0x99,
   417   0xda, 0xed, 0x76, 0xc4, 0xd5, 0x5b, 0xad, 0x96, 0x70, 0x54, 0x45, 0xf5,
   319   0x94, 0xe2, 0x02, 0x25, 0x21, 0x04, 0x97, 0xcb, 0x45, 0x4c, 0xa7, 0x53,
   418   0x37, 0xf8, 0x30, 0x9f, 0xcf, 0x41, 0x44, 0x52, 0x55, 0x09, 0x19, 0xe7,
   320   0x6c, 0xdb, 0xfe, 0x62, 0xe8, 0x74, 0x3a, 0xf4, 0x7a, 0x3d, 0x52, 0xa9,
   419   0x33, 0x77, 0xc2, 0x39, 0xe6, 0x7c, 0x86, 0x88, 0xd5, 0x1d, 0x3d, 0x1e,
   321   0x94, 0x14, 0x3b, 0xc3, 0xc5, 0x62, 0x81, 0x6d, 0xdb, 0x94, 0xcb, 0x65,
   420   0xcf, 0x67, 0x1e, 0x96, 0x65, 0x09, 0xa6, 0x38, 0xaf, 0x04, 0x11, 0x47,
   322   0x5a, 0xad, 0x16, 0x95, 0x4a, 0x85, 0xed, 0x76, 0xcb, 0x72, 0xb9, 0xc4,
   421   0x22, 0x11, 0xc1, 0xc6, 0xe3, 0x31, 0x0f, 0x8b, 0x14, 0x81, 0xcf, 0x8c,
   323   0x71, 0x1c, 0xb2, 0xd9, 0x2c, 0xdd, 0x6e, 0x37, 0x7e, 0xc9, 0xae, 0xeb,
   422   0x71, 0xd8, 0xb6, 0xad, 0x60, 0xfd, 0x97, 0x3b, 0xc7, 0xe3, 0x71, 0x8c,
   324   0x02, 0xd0, 0x6e, 0xb7, 0x31, 0x0c, 0x03, 0x55, 0x55, 0xa5, 0x74, 0x3a,
   423   0x46, 0x23, 0x74, 0xbb, 0x5d, 0x98, 0xa6, 0x89, 0xcd, 0x66, 0xe3, 0x74,
   325   0x2d, 0x64, 0x59, 0xc6, 0xf7, 0x7d, 0x5c, 0xd7, 0x8d, 0x0d, 0xfc, 0x00,
   424   0x4a, 0x68, 0x36, 0x9b, 0xe8, 0x74, 0x3a, 0x42, 0xe6, 0xb5, 0x7d, 0x86,
   326   0xd8, 0xef, 0xf7, 0x00, 0x34, 0x9b, 0x4d, 0x54, 0x55, 0x95, 0x00, 0x54,
   425   0x0c, 0x66, 0xbf, 0xdf, 0xcb, 0x9a, 0xda, 0xed, 0xb6, 0x88, 0x79, 0x3d,
   327   0x55, 0x95, 0x1a, 0x8d, 0x06, 0x7f, 0xc6, 0x63, 0x03, 0x8b, 0xc5, 0x22,
   426   0x1c, 0xbc, 0x36, 0x1e, 0x24, 0x1b, 0x85, 0x42, 0x21, 0x94, 0xcb, 0x65,
   328   0x00, 0x9e, 0xe7, 0x01, 0x3c, 0x27, 0x5d, 0xfc, 0xbe, 0xbf, 0xe2, 0xb1,
   427   0xf8, 0xfd, 0x7e, 0x3d, 0x71, 0xa9, 0xcc, 0x00, 0x4f, 0x36, 0x18, 0x0c,
   329   0x81, 0xb5, 0x5a, 0x0d, 0x00, 0xd3, 0x34, 0xb1, 0x2c, 0x8b, 0x20, 0x08,
   428   0x62, 0x36, 0x9b, 0x61, 0xb5, 0x5a, 0x89, 0x38, 0x1c, 0x0e, 0x83, 0xaf,
   330   0x84, 0x65, 0x59, 0x98, 0xa6, 0x09, 0x80, 0xae, 0xeb, 0xaf, 0x07, 0xf3,
   429   0xe4, 0xac, 0x12, 0xeb, 0xf5, 0x1a, 0x95, 0x4a, 0x05, 0x87, 0xc3, 0x81,
   331   0xf9, 0xfc, 0x7d, 0x97, 0x7d, 0xdf, 0x17, 0xb3, 0xd9, 0x8c, 0xd5, 0x6a,
   430   0x7c, 0x3e, 0x9f, 0x18, 0x68, 0x17, 0x66, 0x73, 0x07, 0xd7, 0xeb, 0x55,
   332   0xf5, 0x57, 0x53, 0x26, 0x93, 0x61, 0x34, 0x1a, 0xa1, 0x69, 0x9a, 0x14,
   431   0x57, 0x73, 0xbb, 0xdd, 0xd2, 0x89, 0x63, 0x8c, 0x6a, 0xb5, 0x8a, 0xed,
   333   0x6b, 0x6c, 0xa2, 0x28, 0x12, 0x87, 0xc3, 0x81, 0xf5, 0x7a, 0x8d, 0xe7,
   432   0x76, 0x0b, 0x36, 0x2c, 0x95, 0x4a, 0x50, 0x06, 0x52, 0xe5, 0xdb, 0xe7,
   334   0x79, 0x1c, 0x8f, 0x47, 0x0a, 0x85, 0x02, 0xba, 0xae, 0xe3, 0xba, 0x2e,
   433   0x74, 0x3a, 0xd1, 0x72, 0xb9, 0xa4, 0x62, 0xb1, 0x48, 0xf9, 0x7c, 0x9e,
   335   0x97, 0xcb, 0x85, 0x5c, 0x2e, 0xc7, 0x70, 0x38, 0x7c, 0x0b, 0x95, 0x9e,
   434   0x9c, 0x77, 0xa1, 0x87, 0xfa, 0x4d, 0xa7, 0x73, 0xe7, 0xf3, 0x59, 0x0c,
   336   0xcb, 0x21, 0x8a, 0x22, 0x11, 0x04, 0x01, 0x51, 0x14, 0x71, 0xbf, 0xdf,
   435   0x9c, 0x07, 0x43, 0xce, 0x8b, 0xfb, 0x9d, 0x98, 0x5d, 0x2e, 0x97, 0xcb,
   337   0x49, 0x24, 0x12, 0xc8, 0xb2, 0xcc, 0xed, 0x76, 0x63, 0x32, 0x99, 0x70,
   436   0xdf, 0x84, 0xba, 0x85, 0x97, 0xc3, 0x13, 0x25, 0xab, 0xcb, 0x08, 0x4d,
   338   0x3e, 0x9f, 0xc9, 0xe7, 0xf3, 0x0c, 0x06, 0x83, 0x6f, 0xa1, 0xaf, 0x9f,
   437   0x39, 0xd0, 0x92, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
   339   0xa2, 0x28, 0x8a, 0xa4, 0x28, 0xca, 0x17, 0xc3, 0xe7, 0xe7, 0xa7, 0xe8,
   438   0x42, 0x60, 0x82
   340   0xf7, 0xfb, 0x8c, 0xc7, 0x63, 0xc2, 0x30, 0x24, 0x0c, 0x43, 0x34, 0x4d,
       
   341   0x7b, 0x9f, 0xe1, 0x77, 0x0a, 0x82, 0x40, 0x9c, 0x4e, 0x27, 0x1e, 0x8f,
       
   342   0x07, 0xd5, 0x6a, 0x35, 0x5e, 0xc9, 0xff, 0xcf, 0xfa, 0xfa, 0x35, 0x00,
       
   343   0x70, 0xf3, 0xae, 0xcb, 0x89, 0xcd, 0xd2, 0x46, 0x00, 0x00, 0x00, 0x00,
       
   344   0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
   439 };
   345 };
   440 unsigned int search_png_len = 471;
   346 unsigned int mag_png_len = 524;
   441 
   347 
   442 
   348 unsigned char search_l_png[] = {
       
   349   0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
       
   350   0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13,
       
   351   0x08, 0x06, 0x00, 0x00, 0x00, 0x90, 0x8c, 0x2d, 0xb5, 0x00, 0x00, 0x00,
       
   352   0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b,
       
   353   0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48,
       
   354   0x52, 0x4d, 0x00, 0x00, 0x6d, 0x98, 0x00, 0x00, 0x73, 0x8e, 0x00, 0x00,
       
   355   0xe0, 0x38, 0x00, 0x00, 0x82, 0xd5, 0x00, 0x00, 0x7a, 0x07, 0x00, 0x00,
       
   356   0xca, 0xb4, 0x00, 0x00, 0x33, 0x44, 0x00, 0x00, 0x1c, 0x76, 0x84, 0x36,
       
   357   0x2a, 0xbd, 0x00, 0x00, 0x01, 0xe2, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
       
   358   0xac, 0x54, 0x3d, 0xab, 0xda, 0x50, 0x18, 0x7e, 0xce, 0xc9, 0x39, 0x31,
       
   359   0x4d, 0xfc, 0x40, 0x30, 0x46, 0x14, 0xec, 0x50, 0x44, 0x17, 0x2f, 0x9d,
       
   360   0xba, 0x15, 0xda, 0xd1, 0xa1, 0x2e, 0xdd, 0x3b, 0x14, 0x4a, 0xa1, 0x7f,
       
   361   0xa6, 0x74, 0xbd, 0x43, 0xff, 0x84, 0xfd, 0x05, 0x82, 0xda, 0xa5, 0x83,
       
   362   0x1d, 0xdc, 0x8a, 0x88, 0xa0, 0x44, 0x83, 0xc6, 0x28, 0xad, 0x1f, 0x49,
       
   363   0xde, 0x2e, 0x8d, 0x78, 0x6f, 0xaf, 0x34, 0x68, 0x9f, 0xed, 0xbc, 0x70,
       
   364   0x1e, 0x9e, 0x8f, 0xf7, 0x1c, 0x46, 0x44, 0x38, 0x45, 0xaf, 0xd7, 0x63,
       
   365   0xb6, 0x6d, 0xe7, 0x6d, 0xdb, 0x6e, 0xba, 0xae, 0xfb, 0x6e, 0xb3, 0xd9,
       
   366   0xdc, 0x6c, 0xb7, 0xdb, 0x04, 0xe7, 0x1c, 0x8c, 0x31, 0xfc, 0x0b, 0x2c,
       
   367   0x22, 0xec, 0x76, 0xbb, 0xcc, 0xf3, 0xbc, 0xcc, 0x68, 0x34, 0x7a, 0xed,
       
   368   0xba, 0xee, 0x87, 0x6c, 0x36, 0x7b, 0x93, 0xcb, 0xe5, 0x44, 0x3a, 0x9d,
       
   369   0x86, 0xa6, 0x69, 0x50, 0x14, 0x25, 0x3e, 0x61, 0xa7, 0xd3, 0x61, 0xf3,
       
   370   0xf9, 0xfc, 0xc9, 0x78, 0x3c, 0xbe, 0xd5, 0x75, 0xfd, 0x79, 0xa5, 0x52,
       
   371   0x11, 0xa6, 0x69, 0x22, 0x95, 0x4a, 0x41, 0xd3, 0x34, 0x08, 0x21, 0xc0,
       
   372   0x18, 0x8b, 0x45, 0x28, 0x00, 0x60, 0xb5, 0x5a, 0xa5, 0x27, 0x93, 0xc9,
       
   373   0xa7, 0x62, 0xb1, 0xf8, 0xb2, 0x5a, 0xad, 0x22, 0x9f, 0xcf, 0xc3, 0x30,
       
   374   0x0c, 0x48, 0x29, 0xc1, 0x39, 0x47, 0x5c, 0xbb, 0x00, 0x20, 0xda, 0xed,
       
   375   0x36, 0x9f, 0x4e, 0xa7, 0xaf, 0x4c, 0xd3, 0x7c, 0x51, 0xaf, 0xd7, 0x61,
       
   376   0x59, 0x16, 0x74, 0x5d, 0x87, 0x94, 0x12, 0x97, 0x40, 0x2c, 0x16, 0x0b,
       
   377   0x93, 0x88, 0xde, 0xd6, 0x6a, 0x35, 0xdd, 0xb2, 0x2c, 0x18, 0x86, 0x01,
       
   378   0x21, 0x04, 0x2e, 0x05, 0xf7, 0x3c, 0xaf, 0x59, 0x2e, 0x97, 0x9f, 0x45,
       
   379   0xca, 0x38, 0xe7, 0xb8, 0x06, 0x3c, 0x08, 0x82, 0x46, 0xa1, 0x50, 0x78,
       
   380   0x74, 0xad, 0xb2, 0x23, 0xa1, 0x94, 0xf2, 0x69, 0x26, 0x93, 0xe1, 0x51,
       
   381   0x66, 0xf7, 0xf7, 0xd2, 0xf7, 0xfd, 0x07, 0x2f, 0x9e, 0x9b, 0x73, 0x55,
       
   382   0x55, 0xb3, 0x91, 0x55, 0xc6, 0x18, 0xc2, 0x30, 0xbc, 0x1b, 0xf2, 0x19,
       
   383   0xd5, 0xe7, 0xe6, 0x5c, 0x4a, 0x39, 0x06, 0x70, 0x5c, 0x8b, 0xb8, 0xeb,
       
   384   0x71, 0xd6, 0x32, 0x11, 0x75, 0xf6, 0xfb, 0xfd, 0xd1, 0xea, 0xd5, 0xa5,
       
   385   0x10, 0xd1, 0xb7, 0xf5, 0x7a, 0x1d, 0x84, 0x61, 0x08, 0x22, 0xba, 0x9e,
       
   386   0x50, 0x51, 0x94, 0xaf, 0x8e, 0xe3, 0xfc, 0xdc, 0xed, 0x76, 0xf8, 0x1f,
       
   387   0xe0, 0x89, 0x44, 0xe2, 0xc7, 0x72, 0xb9, 0xfc, 0xee, 0x38, 0x0e, 0x7c,
       
   388   0xdf, 0x3f, 0x5a, 0xbf, 0xdf, 0x76, 0x6c, 0xc2, 0x46, 0xa3, 0xf1, 0x2b,
       
   389   0x08, 0x82, 0xdb, 0xe1, 0x70, 0xe8, 0x2c, 0x16, 0x0b, 0x04, 0x41, 0x00,
       
   390   0x22, 0xba, 0xb8, 0x1c, 0xfe, 0x67, 0x05, 0xbe, 0x78, 0x9e, 0xf7, 0x79,
       
   391   0x30, 0x18, 0x8c, 0x67, 0xb3, 0x19, 0x45, 0x25, 0x9d, 0x53, 0x49, 0x44,
       
   392   0x38, 0x1c, 0x0e, 0x38, 0x2d, 0xf3, 0xce, 0x6f, 0x03, 0x60, 0x29, 0x84,
       
   393   0xf8, 0xe8, 0x79, 0x9e, 0xdb, 0xef, 0xf7, 0xdf, 0x97, 0x4a, 0xa5, 0xc7,
       
   394   0xd1, 0x53, 0x54, 0x55, 0x15, 0x52, 0xca, 0xbf, 0x14, 0x0b, 0x21, 0x1e,
       
   395   0x8c, 0x87, 0x9d, 0x1e, 0x5a, 0xad, 0x96, 0x00, 0x50, 0x27, 0xa2, 0x37,
       
   396   0xaa, 0xaa, 0x36, 0x0d, 0xc3, 0x28, 0x26, 0x93, 0x49, 0xa1, 0x69, 0x9a,
       
   397   0xc2, 0x39, 0x8f, 0x95, 0xc1, 0xef, 0x01, 0x00, 0x35, 0xe5, 0xd5, 0x5e,
       
   398   0xd0, 0xed, 0x0c, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
       
   399   0xae, 0x42, 0x60, 0x82
       
   400 };
       
   401 unsigned int search_l_png_len = 604;
       
   402 
       
   403 unsigned char search_m_png[] = {
       
   404   0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
       
   405   0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13,
       
   406   0x08, 0x02, 0x00, 0x00, 0x00, 0x35, 0x5e, 0x4b, 0x4d, 0x00, 0x00, 0x00,
       
   407   0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xd6, 0xd8, 0xd4, 0x4f, 0x58,
       
   408   0x32, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66,
       
   409   0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20,
       
   410   0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x71, 0xc9,
       
   411   0x65, 0x3c, 0x00, 0x00, 0x00, 0x30, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
       
   412   0x62, 0x2c, 0x2f, 0x2f, 0x67, 0x60, 0x60, 0x60, 0x3c, 0x7e, 0xfc, 0x38,
       
   413   0x88, 0xfa, 0xf8, 0xf1, 0x23, 0x88, 0xfa, 0xff, 0xff, 0x3f, 0x90, 0x62,
       
   414   0x62, 0x00, 0x03, 0x5a, 0x50, 0x2c, 0x10, 0x1b, 0x58, 0x6e, 0xdd, 0xba,
       
   415   0x05, 0xa4, 0x00, 0x02, 0x0c, 0x00, 0xa5, 0x07, 0x0f, 0x3c, 0x7e, 0xe1,
       
   416   0x45, 0xa7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
       
   417   0x60, 0x82
       
   418 };
       
   419 unsigned int search_m_png_len = 158;
       
   420 
       
   421 unsigned char search_r_png[] = {
       
   422   0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
       
   423   0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x13,
       
   424   0x08, 0x06, 0x00, 0x00, 0x00, 0x9d, 0x92, 0x5d, 0xf2, 0x00, 0x00, 0x00,
       
   425   0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b,
       
   426   0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48,
       
   427   0x52, 0x4d, 0x00, 0x00, 0x6d, 0x98, 0x00, 0x00, 0x73, 0x8e, 0x00, 0x00,
       
   428   0xe0, 0x38, 0x00, 0x00, 0x82, 0xd5, 0x00, 0x00, 0x7a, 0x07, 0x00, 0x00,
       
   429   0xca, 0xb4, 0x00, 0x00, 0x33, 0x44, 0x00, 0x00, 0x1c, 0x76, 0x84, 0x36,
       
   430   0x2a, 0xbd, 0x00, 0x00, 0x01, 0xea, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
       
   431   0xa4, 0xd4, 0xbf, 0xaa, 0x1a, 0x41, 0x14, 0x06, 0xf0, 0x6f, 0xf6, 0x9f,
       
   432   0xb2, 0x0a, 0x6b, 0xa5, 0x56, 0x8b, 0xa4, 0x92, 0xd4, 0x69, 0x7c, 0x03,
       
   433   0xb1, 0x59, 0x49, 0x11, 0x52, 0xdf, 0xbc, 0x43, 0xcc, 0x2b, 0xa4, 0x4c,
       
   434   0x97, 0x67, 0x08, 0xa4, 0x11, 0x2c, 0x52, 0x5c, 0x42, 0x24, 0x60, 0x8a,
       
   435   0x34, 0x29, 0x42, 0x50, 0x41, 0x21, 0xa0, 0x97, 0xd5, 0x55, 0xb3, 0xbb,
       
   436   0xee, 0xb2, 0xce, 0xee, 0xcc, 0x49, 0x91, 0x28, 0xc2, 0x0d, 0xe6, 0xaa,
       
   437   0xa7, 0x9d, 0xc3, 0x8f, 0x73, 0x98, 0xf9, 0x86, 0x75, 0x3a, 0x1d, 0xc2,
       
   438   0x89, 0x12, 0x42, 0x24, 0xf9, 0x7c, 0x7e, 0x5a, 0x2c, 0x16, 0x3f, 0x96,
       
   439   0x4a, 0xa5, 0x5e, 0xb5, 0x5a, 0xfd, 0x52, 0x2e, 0x97, 0xfd, 0x46, 0xa3,
       
   440   0x21, 0x8e, 0xfb, 0xd8, 0x60, 0x30, 0x38, 0x09, 0x65, 0x59, 0x86, 0x24,
       
   441   0x49, 0x10, 0x04, 0x81, 0xf0, 0x3c, 0x6f, 0xb3, 0xd9, 0x6c, 0x7e, 0x58,
       
   442   0x96, 0x75, 0x5b, 0xab, 0xd5, 0xde, 0x34, 0x9b, 0xcd, 0x5f, 0x07, 0xc8,
       
   443   0xf7, 0xfd, 0x93, 0x90, 0x94, 0xf2, 0x80, 0x85, 0x61, 0x88, 0xe5, 0x72,
       
   444   0x49, 0xe3, 0xf1, 0x58, 0xc6, 0x71, 0xfc, 0xc1, 0xb6, 0xed, 0xe7, 0x8e,
       
   445   0xe3, 0x84, 0x00, 0xc0, 0xa4, 0x94, 0x27, 0x21, 0x22, 0x82, 0x94, 0x12,
       
   446   0x52, 0x4a, 0xa4, 0x69, 0x8a, 0x28, 0x8a, 0xb0, 0x58, 0x2c, 0x30, 0x1c,
       
   447   0x0e, 0x85, 0xeb, 0xba, 0xef, 0x6b, 0xb5, 0xda, 0x4d, 0xab, 0xd5, 0x8a,
       
   448   0x34, 0xc6, 0xd8, 0x29, 0x07, 0x8c, 0x31, 0x28, 0x8a, 0x02, 0x22, 0x82,
       
   449   0xae, 0xeb, 0x30, 0x0c, 0x03, 0xb9, 0x5c, 0x0e, 0x86, 0x61, 0xa8, 0x52,
       
   450   0xca, 0xa7, 0xf3, 0xf9, 0xfc, 0x67, 0xbf, 0xdf, 0x7f, 0xa5, 0xe0, 0x81,
       
   451   0xc5, 0x18, 0x03, 0x63, 0x0c, 0x9a, 0xa6, 0xa1, 0x50, 0x28, 0xa0, 0x52,
       
   452   0xa9, 0xa0, 0x5e, 0xaf, 0x6b, 0x00, 0x5e, 0xac, 0xd7, 0xeb, 0x47, 0x0f,
       
   453   0x86, 0x8e, 0x41, 0x55, 0x55, 0x61, 0x9a, 0x26, 0x2a, 0x95, 0x0a, 0x6c,
       
   454   0xdb, 0xb6, 0x82, 0x20, 0x78, 0x76, 0x36, 0xb4, 0xc7, 0xf6, 0x93, 0x55,
       
   455   0xab, 0x55, 0x26, 0x84, 0x78, 0xac, 0x1c, 0x5f, 0xf3, 0xb9, 0xa5, 0xeb,
       
   456   0x3a, 0x2c, 0xcb, 0x82, 0xae, 0xeb, 0xbb, 0x03, 0xa4, 0x69, 0xda, 0xd9,
       
   457   0x53, 0x29, 0x8a, 0x02, 0xd3, 0x34, 0x99, 0x61, 0x18, 0xcb, 0x8b, 0x56,
       
   458   0x3b, 0xc6, 0xfe, 0x4e, 0x76, 0x77, 0x15, 0x44, 0x44, 0xe0, 0x9c, 0x0b,
       
   459   0x22, 0xfa, 0xaa, 0x5c, 0x83, 0x48, 0x29, 0x11, 0x86, 0xe1, 0x86, 0x88,
       
   460   0xbe, 0x5f, 0x35, 0xd1, 0x6e, 0xb7, 0x83, 0xe7, 0x79, 0x3d, 0x55, 0x55,
       
   461   0x7d, 0xd0, 0x05, 0x25, 0xa5, 0x24, 0xce, 0x39, 0x4d, 0x26, 0x93, 0x45,
       
   462   0xb7, 0xdb, 0x7d, 0x42, 0x44, 0x50, 0x2e, 0x59, 0x49, 0x08, 0x81, 0xf5,
       
   463   0x7a, 0x9d, 0x4c, 0xa7, 0xd3, 0x77, 0x42, 0x88, 0x6f, 0x00, 0xa0, 0xed,
       
   464   0x0f, 0xb3, 0x2c, 0x3b, 0xe4, 0xe9, 0x5f, 0xf9, 0x23, 0xfa, 0x93, 0x6d,
       
   465   0xce, 0x39, 0x56, 0xab, 0x95, 0x18, 0x0e, 0x87, 0x9f, 0x82, 0x20, 0x78,
       
   466   0xdd, 0x6e, 0xb7, 0xd3, 0x7b, 0xe9, 0x27, 0xa2, 0x7b, 0x08, 0x11, 0x21,
       
   467   0x4d, 0x53, 0x70, 0xce, 0x11, 0xc7, 0xb1, 0x74, 0x5d, 0xd7, 0x9f, 0xcd,
       
   468   0x66, 0x3d, 0xce, 0xf9, 0x4b, 0xc7, 0x71, 0xee, 0x0e, 0xef, 0x70, 0x34,
       
   469   0x1a, 0xe1, 0x7f, 0xff, 0x51, 0x92, 0x24, 0xd8, 0x6e, 0xb7, 0x61, 0x14,
       
   470   0x45, 0x9f, 0x39, 0xe7, 0x6f, 0x19, 0x63, 0xb7, 0x8e, 0xe3, 0x44, 0xc7,
       
   471   0x7d, 0xbf, 0x07, 0x00, 0x5f, 0x77, 0x46, 0x8c, 0x30, 0x2c, 0xd8, 0x9d,
       
   472   0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
       
   473 };
       
   474 unsigned int search_r_png_len = 612;
   443 
   475 
   444 static unsigned char close_png[] = {
   476 static unsigned char close_png[] = {
   445   0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
   477   0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
   446   0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0b,
   478   0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0b,
   447   0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0xac, 0x77, 0x26, 0x00, 0x00, 0x00,
   479   0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0xac, 0x77, 0x26, 0x00, 0x00, 0x00,
   466   0x3f, 0x07, 0x0a, 0x79, 0x90, 0x0e, 0x11, 0x45, 0xc2, 0x00, 0x00, 0x00,
   498   0x3f, 0x07, 0x0a, 0x79, 0x90, 0x0e, 0x11, 0x45, 0xc2, 0x00, 0x00, 0x00,
   467   0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
   499   0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
   468 };
   500 };
   469 static unsigned int close_png_len = 273;
   501 static unsigned int close_png_len = 273;
   470 
   502 
   471 
   503 #if 0
   472 static const char tabs_css[] = 
       
   473 "/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */\n"
       
   474 "\n"
       
   475 "DIV.tabs\n"
       
   476 "{\n"
       
   477 "   float            : left;\n"
       
   478 "   width            : 100%;\n"
       
   479 "   background       : url(\"tab_b.gif\") repeat-x bottom;\n"
       
   480 "   margin-bottom    : 4px;\n"
       
   481 "}\n"
       
   482 "\n"
       
   483 "DIV.tabs UL\n"
       
   484 "{\n"
       
   485 "   margin           : 0px;\n"
       
   486 "   padding-left     : 10px;\n"
       
   487 "   list-style       : none;\n"
       
   488 "}\n"
       
   489 "\n"
       
   490 "DIV.tabs LI, DIV.tabs FORM\n"
       
   491 "{\n"
       
   492 "   display          : inline;\n"
       
   493 "   margin           : 0px;\n"
       
   494 "   padding          : 0px;\n"
       
   495 "}\n"
       
   496 "\n"
       
   497 "DIV.tabs FORM\n"
       
   498 "{\n"
       
   499 "   float            : right;\n"
       
   500 "}\n"
       
   501 "\n"
       
   502 "DIV.tabs A\n"
       
   503 "{\n"
       
   504 "   float            : left;\n"
       
   505 "   background       : url(\"tab_r.gif\") no-repeat right top;\n"
       
   506 "   border-bottom    : 1px solid #84B0C7;\n"
       
   507 "   font-size        : 80%;\n"
       
   508 "   font-weight      : bold;\n"
       
   509 "   text-decoration  : none;\n"
       
   510 "}\n"
       
   511 "\n"
       
   512 "DIV.tabs A:hover\n"
       
   513 "{\n"
       
   514 "   background-position: 100% -150px;\n"
       
   515 "}\n"
       
   516 "\n"
       
   517 "DIV.tabs A:link, DIV.tabs A:visited,\n"
       
   518 "DIV.tabs A:active, DIV.tabs A:hover\n"
       
   519 "{\n"
       
   520 "       color: #1A419D;\n"
       
   521 "}\n"
       
   522 "\n"
       
   523 "DIV.tabs SPAN\n"
       
   524 "{\n"
       
   525 "   float            : left;\n"
       
   526 "   display          : block;\n"
       
   527 "   background       : url(\"tab_l.gif\") no-repeat left top;\n"
       
   528 "   padding          : 5px 9px;\n"
       
   529 "   white-space      : nowrap;\n"
       
   530 "}\n"
       
   531 "\n"
       
   532 "DIV.tabs #MSearchBox\n"
       
   533 "{\n"
       
   534 "   float            : right;\n"
       
   535 "   display          : inline;\n"
       
   536 "   font-size        : 1em;\n"
       
   537 "}\n"
       
   538 "\n"
       
   539 "DIV.tabs TD\n"
       
   540 "{\n"
       
   541 "   font-size        : 80%;\n"
       
   542 "   font-weight      : bold;\n"
       
   543 "   text-decoration  : none;\n"
       
   544 "}\n"
       
   545 "\n"
       
   546 "\n"
       
   547 "\n"
       
   548 "/* Commented Backslash Hack hides rule from IE5-Mac \\*/\n"
       
   549 "DIV.tabs SPAN {float : none;}\n"
       
   550 "/* End IE5-Mac hack */\n"
       
   551 "\n"
       
   552 "DIV.tabs A:hover SPAN\n"
       
   553 "{\n"
       
   554 "   background-position: 0% -150px;\n"
       
   555 "}\n"
       
   556 "\n"
       
   557 "DIV.tabs LI.current A\n"
       
   558 "{\n"
       
   559 "   background-position: 100% -150px;\n"
       
   560 "   border-width     : 0px;\n"
       
   561 "}\n"
       
   562 "\n"
       
   563 "DIV.tabs LI.current SPAN\n"
       
   564 "{\n"
       
   565 "   background-position: 0% -150px;\n"
       
   566 "   padding-bottom   : 6px;\n"
       
   567 "}\n"
       
   568 "\n"
       
   569 "DIV.navpath\n"
       
   570 "{\n"
       
   571 "   background       : none;\n"
       
   572 "   border           : none;\n"
       
   573 "   border-bottom    : 1px solid #84B0C7;\n"
       
   574 "   text-align       : center;\n"
       
   575 "   margin           : 2px;\n"
       
   576 "   padding          : 2px;\n"
       
   577 "}\n"
       
   578 ;
       
   579 
       
   580 struct img_data_item
       
   581 {
       
   582   const char *name;
       
   583   unsigned char *content;
       
   584   unsigned int len;
       
   585 };
       
   586 
       
   587 static void writeImgData(const char *dir,img_data_item *data)
       
   588 {
       
   589   while (data->name)
       
   590   {
       
   591     QCString fileName;
       
   592     fileName=(QCString)dir+"/"+data->name;
       
   593     QFile f(fileName);
       
   594     if (f.open(IO_WriteOnly))
       
   595     {
       
   596       f.writeBlock((char*)data->content,
       
   597                     data->len>0 ? data->len : strlen((char*)data->content));
       
   598     }
       
   599     else
       
   600     {
       
   601       fprintf(stderr,"Warning: Cannot open file %s for writing\n",data->name);
       
   602     }
       
   603     data++;
       
   604   }
       
   605 }
       
   606 
       
   607 static img_data_item tab_data[] =
       
   608 {
       
   609   { "tab_b.gif", tab_b_gif, tab_b_gif_len },
       
   610   { "tab_l.gif", tab_l_gif, tab_l_gif_len },
       
   611   { "tab_r.gif", tab_r_gif, tab_r_gif_len },
       
   612   { "tabs.css",  (unsigned char *)tabs_css, 0 }, 
       
   613   { 0, 0, 0 }
       
   614 };
       
   615 
       
   616 static void writeTabData(const char *dir)
       
   617 {
       
   618   writeImgData(dir,tab_data);
       
   619 }
       
   620 
       
   621 static img_data_item search_client_data[] =
       
   622 {
       
   623   { "search.png",       search_sel_png,   search_sel_png_len },
       
   624   { "close.png",        close_png,        close_png_len },
       
   625   { 0, 0, 0 }
       
   626 };
       
   627 
       
   628 static img_data_item search_server_data[] =
       
   629 {
       
   630   { "search.png",       search_png,       search_png_len },
       
   631   { 0, 0, 0 }
       
   632 };
       
   633 
       
   634 void HtmlGenerator::writeSearchData(const char *dir)
       
   635 {
       
   636   static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
       
   637   writeImgData(dir,serverBasedSearch ? search_server_data : search_client_data);
       
   638   Doxygen::indexList.addImageFile("search/close.png");
       
   639   Doxygen::indexList.addImageFile("search/search.png");
       
   640 }
       
   641 
       
   642 
       
   643 //------------------------------------------------------------------------
       
   644 
       
   645 unsigned char open_gif[] = {
   504 unsigned char open_gif[] = {
   646   0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x09, 0x00, 0x09, 0x00, 0xf0, 0x00,
   505   0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x09, 0x00, 0x09, 0x00, 0xf0, 0x00,
   647   0x00, 0x8e, 0xaf, 0xc4, 0x00, 0x00, 0x00, 0x21, 0xf9, 0x04, 0x01, 0x00,
   506   0x00, 0x8e, 0xaf, 0xc4, 0x00, 0x00, 0x00, 0x21, 0xf9, 0x04, 0x01, 0x00,
   648   0x00, 0x01, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x09, 0x00,
   507   0x00, 0x01, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x09, 0x00,
   649   0x00, 0x02, 0x0d, 0x8c, 0x8f, 0xa9, 0xcb, 0xe0, 0xff, 0x02, 0x8c, 0x66,
   508   0x00, 0x02, 0x0d, 0x8c, 0x8f, 0xa9, 0xcb, 0xe0, 0xff, 0x02, 0x8c, 0x66,
   657   0x00, 0x01, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x09, 0x00,
   516   0x00, 0x01, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x09, 0x00,
   658   0x00, 0x02, 0x10, 0x8c, 0x03, 0xa7, 0x98, 0xcb, 0xad, 0x80, 0x84, 0x66,
   517   0x00, 0x02, 0x10, 0x8c, 0x03, 0xa7, 0x98, 0xcb, 0xad, 0x80, 0x84, 0x66,
   659   0xca, 0x38, 0x57, 0xd6, 0xf4, 0xd0, 0x02, 0x00, 0x3b
   518   0xca, 0x38, 0x57, 0xd6, 0xf4, 0xd0, 0x02, 0x00, 0x3b
   660 };
   519 };
   661 unsigned int closed_gif_len = 57;
   520 unsigned int closed_gif_len = 57;
   662 
   521 #endif
   663 
   522 
       
   523 static unsigned char closed_png[81] =
       
   524 {
       
   525   0,  0,  0,  0,142,  0,  0,  0,  0,
       
   526   0,  0,  0,  0,142,142,  0,  0,  0,
       
   527   0,  0,  0,  0,142,142,142,  0,  0,
       
   528   0,  0,  0,  0,142,142,142,142,  0,
       
   529   0,  0,  0,  0,142,142,142,142,142,
       
   530   0,  0,  0,  0,142,142,142,142,  0,
       
   531   0,  0,  0,  0,142,142,142,  0,  0,
       
   532   0,  0,  0,  0,142,142,  0,  0,  0,
       
   533   0,  0,  0,  0,142,  0,  0,  0,  0
       
   534 };
       
   535 
       
   536 static unsigned char closed_a_png[81] =
       
   537 {
       
   538   0,  0,  0,  0,255,  0,  0,  0,  0,
       
   539   0,  0,  0,  0,255,255,  0,  0,  0,
       
   540   0,  0,  0,  0,255,255,255,  0,  0,
       
   541   0,  0,  0,  0,255,255,255,255,  0,
       
   542   0,  0,  0,  0,255,255,255,255,255,
       
   543   0,  0,  0,  0,255,255,255,255,  0,
       
   544   0,  0,  0,  0,255,255,255,  0,  0,
       
   545   0,  0,  0,  0,255,255,  0,  0,  0,
       
   546   0,  0,  0,  0,255,  0,  0,  0,  0
       
   547 };
       
   548 
       
   549 static unsigned char open_png[81] =
       
   550 {
       
   551     0,  0,  0,  0,  0,  0,  0,  0,  0,
       
   552     0,  0,  0,  0,  0,  0,  0,  0,  0,
       
   553     0,  0,  0,  0,  0,  0,  0,  0,  0,
       
   554     0,  0,  0,  0,  0,  0,  0,  0,  0,
       
   555   142,142,142,142,142,142,142,142,142,
       
   556     0,142,142,142,142,142,142,142,  0,
       
   557     0,  0,142,142,142,142,142,  0,  0,
       
   558     0,  0,  0,142,142,142,  0,  0,  0,
       
   559     0,  0,  0,  0,142,  0,  0,  0,  0
       
   560 };
       
   561 
       
   562 static unsigned char open_a_png[81] =
       
   563 {
       
   564     0,  0,  0,  0,  0,  0,  0,  0,  0,
       
   565     0,  0,  0,  0,  0,  0,  0,  0,  0,
       
   566     0,  0,  0,  0,  0,  0,  0,  0,  0,
       
   567     0,  0,  0,  0,  0,  0,  0,  0,  0,
       
   568   255,255,255,255,255,255,255,255,255,
       
   569     0,255,255,255,255,255,255,255,  0,
       
   570     0,  0,255,255,255,255,255,  0,  0,
       
   571     0,  0,  0,255,255,255,  0,  0,  0,
       
   572     0,  0,  0,  0,255,  0,  0,  0,  0
       
   573 };
       
   574 
       
   575 
       
   576 
       
   577 //------------------------------------------------------------------------
       
   578 
       
   579 static const char tabs_css[] = 
       
   580 ".tabs, .tabs2, .tabs3 {\n"
       
   581 "    background-image: url('tab_b.png');\n"
       
   582 "    z-index: 101;\n"
       
   583 "    font-size: 13px;\n"
       
   584 "}\n"
       
   585 "\n"
       
   586 ".tabs2 {\n"
       
   587 "    font-size: 10px;\n"
       
   588 "}\n"
       
   589 ".tabs3 {\n"
       
   590 "    font-size: 9px;\n"
       
   591 "}\n"
       
   592 "\n"
       
   593 ".tablist {\n"
       
   594 "    margin: 0;\n"
       
   595 "    padding: 0;\n"
       
   596 "    display: table\n"
       
   597 "}\n"
       
   598 "\n"
       
   599 ".tablist li {\n"
       
   600 "    float: left;\n"
       
   601 "    display: table-cell\n"
       
   602 "    background-image: url('tab_b.png');\n"
       
   603 "    line-height: 36px;\n"
       
   604 "    list-style: none;\n"
       
   605 "}\n"
       
   606 "\n"
       
   607 ".tablist a {\n"
       
   608 "    display: block;\n"
       
   609 "    padding: 0 20px;\n"
       
   610 "    font-weight: bold;\n"
       
   611 "    background-image:url('tab_s.png');\n"
       
   612 "    background-repeat:no-repeat;\n"
       
   613 "    background-position:right;\n"
       
   614 "    color: ##30;\n"
       
   615 "    text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);\n"
       
   616 "    text-decoration: none;\n"
       
   617 "    outline: none;\n"
       
   618 "}\n"
       
   619 "\n"
       
   620 ".tabs3 .tablist a {\n"
       
   621 "    padding: 0 10px;\n"
       
   622 "}\n"
       
   623 "\n"
       
   624 ".tablist a:hover {\n"
       
   625 "    background-image: url('tab_h.png');\n"
       
   626 "    background-repeat:repeat-x;\n"
       
   627 "    color: #fff;\n"
       
   628 "    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n"
       
   629 "    text-decoration: none;\n"
       
   630 "}\n"
       
   631 "\n"
       
   632 ".tablist li.current a {\n"
       
   633 "    background-image: url('tab_a.png');\n"
       
   634 "    background-repeat:repeat-x;\n"
       
   635 "    color: #fff;\n"
       
   636 "    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n"
       
   637 "}\n"
       
   638 ;
       
   639 
       
   640 struct img_data_item
       
   641 {
       
   642   const char *name;
       
   643   unsigned char *content;
       
   644   unsigned int len;
       
   645 };
       
   646 
       
   647 struct colored_img_data_item
       
   648 {
       
   649   const char *name;
       
   650   unsigned short width;
       
   651   unsigned short height;
       
   652   unsigned char *content;
       
   653   unsigned char *alpha;
       
   654 };
       
   655 
       
   656 
       
   657 static void writeImgData(const char *dir,img_data_item *data)
       
   658 {
       
   659   while (data->name)
       
   660   {
       
   661     QCString fileName;
       
   662     fileName=(QCString)dir+"/"+data->name;
       
   663     QFile f(fileName);
       
   664     if (f.open(IO_WriteOnly))
       
   665     {
       
   666       f.writeBlock((char*)data->content,
       
   667                     data->len>0 ? data->len : strlen((char*)data->content));
       
   668     }
       
   669     else
       
   670     {
       
   671       fprintf(stderr,"Warning: Cannot open file %s for writing\n",data->name);
       
   672     }
       
   673     data++;
       
   674   }
       
   675 }
       
   676 
       
   677 static void writeColoredImgData(const char *dir,colored_img_data_item *data)
       
   678 {
       
   679   static int hue   = Config_getInt("HTML_COLORSTYLE_HUE");
       
   680   static int sat   = Config_getInt("HTML_COLORSTYLE_SAT");
       
   681   static int gamma = Config_getInt("HTML_COLORSTYLE_GAMMA");
       
   682   while (data->name)
       
   683   {
       
   684     QCString fileName;
       
   685     fileName=(QCString)dir+"/"+data->name;
       
   686     QFile f(fileName);
       
   687     if (f.open(IO_WriteOnly))
       
   688     {
       
   689       ColoredImage img(data->width,data->height,data->content,data->alpha,
       
   690                        sat,hue,gamma);
       
   691       img.save(fileName);
       
   692     }
       
   693     else
       
   694     {
       
   695       fprintf(stderr,"Warning: Cannot open file %s for writing\n",data->name);
       
   696     }
       
   697     data++;
       
   698   }
       
   699 }
       
   700 
       
   701 static colored_img_data_item colored_tab_data[] =
       
   702 {
       
   703   { "tab_a.png",    1, 36, tab_a_png, 0 },
       
   704   { "tab_b.png",    1, 36, tab_b_png, 0 },
       
   705   { "tab_h.png",    1, 36, tab_h_png, 0 },
       
   706   { "tab_s.png",    1, 36, tab_s_png, 0 },
       
   707   { "nav_h.png",   1, 12, header_png, 0 },
       
   708   { "bc_s.png",     8, 32, bc_s_png, bc_s_a_png },
       
   709   { "doxygen.png", 104,31, doxygen_png, doxygen_a_png },
       
   710   { "closed.png",   9,  9, closed_png, closed_a_png },
       
   711   { "open.png",     9,  9, open_png, open_a_png },
       
   712   { 0, 0, 0, 0, 0 }
       
   713 };
       
   714 
       
   715 static void writeTabData(const char *dir)
       
   716 {
       
   717   writeColoredImgData(dir,colored_tab_data);
       
   718 }
       
   719 
       
   720 static img_data_item search_client_data[] =
       
   721 {
       
   722   { "mag_sel.png",      mag_sel_png,      mag_sel_png_len  },
       
   723   { "search_l.png",     search_l_png,     search_l_png_len },
       
   724   { "search_m.png",     search_m_png,     search_m_png_len },
       
   725   { "search_r.png",     search_r_png,     search_r_png_len },
       
   726   { "close.png",        close_png,        close_png_len    },
       
   727   { 0, 0, 0 }
       
   728 };
       
   729 
       
   730 static img_data_item search_server_data[] =
       
   731 {
       
   732   { "mag.png",          mag_png,          mag_png_len      },
       
   733   { "search_l.png",     search_l_png,     search_l_png_len },
       
   734   { "search_m.png",     search_m_png,     search_m_png_len },
       
   735   { "search_r.png",     search_r_png,     search_r_png_len },
       
   736   { 0, 0, 0 }
       
   737 };
       
   738 
       
   739 //------------------------------------------------------------------------
       
   740 
       
   741 static QCString replaceColorMarkers(const char *str)
       
   742 {
       
   743   QCString result;
       
   744   QCString s=str;
       
   745   if (s.isEmpty()) return result;
       
   746   static QRegExp re("##[0-9A-Fa-f][0-9A-Fa-f]");
       
   747   static const char hex[] = "0123456789ABCDEF";
       
   748   static int hue   = Config_getInt("HTML_COLORSTYLE_HUE");
       
   749   static int sat   = Config_getInt("HTML_COLORSTYLE_SAT");
       
   750   static int gamma = Config_getInt("HTML_COLORSTYLE_GAMMA");
       
   751   int i,l,sl=s.length(),p=0;
       
   752   while ((i=re.match(s,p,&l))!=-1)
       
   753   {
       
   754     result+=s.mid(p,i-p);
       
   755     QCString lumStr = s.mid(i+2,l-2);
       
   756 #define HEXTONUM(x) (((x)>='0' && (x)<='9') ? ((x)-'0') :       \
       
   757                      ((x)>='a' && (x)<='f') ? ((x)-'a'+10) :    \
       
   758                      ((x)>='A' && (x)<='F') ? ((x)-'A'+10) : 0)
       
   759     
       
   760     double r,g,b;
       
   761     int red,green,blue;
       
   762     int level = HEXTONUM(lumStr[0])*16+HEXTONUM(lumStr[1]);
       
   763     ColoredImage::hsl2rgb(hue/360.0,sat/255.0,
       
   764                           pow(level/255.0,gamma/100.0),&r,&g,&b);
       
   765     red   = (int)(r*255.0);
       
   766     green = (int)(g*255.0);
       
   767     blue  = (int)(b*255.0);
       
   768     char colStr[8];
       
   769     colStr[0]='#';
       
   770     colStr[1]=hex[red>>4];
       
   771     colStr[2]=hex[red&0xf];
       
   772     colStr[3]=hex[green>>4];
       
   773     colStr[4]=hex[green&0xf];
       
   774     colStr[5]=hex[blue>>4];
       
   775     colStr[6]=hex[blue&0xf];
       
   776     colStr[7]=0;
       
   777     //printf("replacing %s->%s (level=%d)\n",lumStr.data(),colStr,level);
       
   778     result+=colStr;
       
   779     p=i+l;
       
   780   }
       
   781   result+=s.right(sl-p);
       
   782   return result;
       
   783 }
   664 
   784 
   665 //------------------------- Pictures for the Tabs ------------------------
   785 //------------------------- Pictures for the Tabs ------------------------
   666 
   786 
   667 HtmlGenerator::HtmlGenerator() : OutputGenerator()
   787 HtmlGenerator::HtmlGenerator() : OutputGenerator()
   668 {
   788 {
   682   if (!d.exists() && !d.mkdir(dname))
   802   if (!d.exists() && !d.mkdir(dname))
   683   {
   803   {
   684     err("Could not create output directory %s\n",dname.data());
   804     err("Could not create output directory %s\n",dname.data());
   685     exit(1);
   805     exit(1);
   686   }
   806   }
   687   writeLogo(dname);
   807   //writeLogo(dname);
   688   if (!Config_getString("HTML_HEADER").isEmpty()) 
   808   if (!Config_getString("HTML_HEADER").isEmpty()) 
   689   {
   809   {
   690     g_header=fileToString(Config_getString("HTML_HEADER"));
   810     g_header=fileToString(Config_getString("HTML_HEADER"));
   691     //printf("g_header='%s'\n",g_header.data());
   811     //printf("g_header='%s'\n",g_header.data());
   692   }
   812   }
   695     g_footer=fileToString(Config_getString("HTML_FOOTER"));
   815     g_footer=fileToString(Config_getString("HTML_FOOTER"));
   696     //printf("g_footer='%s'\n",g_footer.data());
   816     //printf("g_footer='%s'\n",g_footer.data());
   697   }
   817   }
   698   createSubDirs(d);
   818   createSubDirs(d);
   699 
   819 
       
   820   QCString fileName=dname+"/tabs.css";
       
   821   QFile f(fileName);
       
   822   if (f.open(IO_WriteOnly))
       
   823   {
       
   824     QTextStream t(&f);
       
   825     t << replaceColorMarkers(tabs_css);
       
   826   }
       
   827   else
       
   828   {
       
   829     fprintf(stderr,"Warning: Cannot open file %s for writing\n",fileName.data());
       
   830   }
       
   831 
   700   writeTabData(dname);
   832   writeTabData(dname);
   701 }
   833 }
   702 
   834 
       
   835 void HtmlGenerator::writeSearchData(const char *dir)
       
   836 {
       
   837   static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
       
   838   writeImgData(dir,serverBasedSearch ? search_server_data : search_client_data);
       
   839   Doxygen::indexList.addImageFile("search/close.png");
       
   840   Doxygen::indexList.addImageFile("search/search.png");
       
   841   QCString searchDirName = Config_getString("HTML_OUTPUT")+"/search";
       
   842   QFile f(searchDirName+"/search.css");
       
   843   if (f.open(IO_WriteOnly))
       
   844   {
       
   845     QTextStream t(&f);
       
   846     t << replaceColorMarkers(search_styleSheet);
       
   847   }
       
   848   Doxygen::indexList.addStyleSheetFile("search/search.css");
       
   849 }
       
   850 
       
   851 
       
   852 
   703 void HtmlGenerator::writeStyleSheetFile(QFile &file)
   853 void HtmlGenerator::writeStyleSheetFile(QFile &file)
   704 {
   854 {
   705   QTextStream t(&file);
   855   QTextStream t(&file);
   706   t << defaultStyleSheet;
   856   t << replaceColorMarkers(defaultStyleSheet);
   707 }
   857 }
   708 
   858 
   709 static void writeDefaultHeaderFile(QTextStream &t, const char *title,
   859 static void writeDefaultHeaderFile(QTextStream &t, const char *title,
   710                                    const char *relPath,bool usePathCmd,
   860                                    const char *relPath,bool usePathCmd,
   711                                    bool searchPage=FALSE)
   861                                    bool searchPage=FALSE)
   717     relPathStr=relPath;
   867     relPathStr=relPath;
   718 
   868 
   719   static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
   869   static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
   720   static bool searchEngine = Config_getBool("SEARCHENGINE");
   870   static bool searchEngine = Config_getBool("SEARCHENGINE");
   721   static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
   871   static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
   722   if (searchEngine && !generateTreeView)
   872   //if (searchEngine && !generateTreeView)
   723   {
   873   //{
   724     t << "<!-- This comment will put IE 6, 7 and 8 in quirks mode -->" << endl;
   874   //  t << "<!-- This comment will put IE 6, 7 and 8 in quirks mode -->" << endl;
   725   }
   875   //}
   726 //  t << "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
   876   //  t << "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
   727 //  t << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n";
   877   //  t << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n";
   728   t << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n";
   878   t << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n";
   729   t << "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n"
   879   t << "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n"
   730        "<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n"
   880        "<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n"
   731        "<title>"; 
   881        "<title>"; 
   732   t << convertToHtml(title);
   882   t << convertToHtml(title);
   784 }
   934 }
   785 
   935 
   786 void HtmlGenerator::writeFooterFile(QFile &file)
   936 void HtmlGenerator::writeFooterFile(QFile &file)
   787 {
   937 {
   788   QTextStream t(&file);
   938   QTextStream t(&file);
   789   t << "<hr size=\"1\"/><address style=\"text-align: right;\"><small>\n";
   939   t.setEncoding(QTextStream::UnicodeUTF8);
       
   940   t << "<hr class=\"footer\"/><address class=\"footer\"><small>\n";
   790   t << theTranslator->trGeneratedAt( "$datetime", "$projectname" );
   941   t << theTranslator->trGeneratedAt( "$datetime", "$projectname" );
   791   t << "&nbsp;<a href=\"http://www.doxygen.org/index.html\">"
   942   t << "&nbsp;<a href=\"http://www.doxygen.org/index.html\">"
   792     << "<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>"
   943     << "<img class=\"footer\" src=\"$relpath$doxygen.png\" alt=\"doxygen\"/>"
   793     << "</a> $doxygenversion";
   944     << "</a> $doxygenversion";
   794   t << "</small></address>\n"
   945   t << "</small></address>\n"
   795     << "</body>\n"
   946     << "</body>\n"
   796     << "</html>\n";
   947     << "</html>\n";
   797 }
   948 }
   799 static void generateDynamicSections(QTextStream &t,const QCString &relPath)
   950 static void generateDynamicSections(QTextStream &t,const QCString &relPath)
   800 {
   951 {
   801   if (Config_getBool("HTML_DYNAMIC_SECTIONS"))
   952   if (Config_getBool("HTML_DYNAMIC_SECTIONS"))
   802   { 
   953   { 
   803     t << 
   954     t << 
       
   955 #if 0
   804       "<script type=\"text/javascript\">\n"
   956       "<script type=\"text/javascript\">\n"
   805       "<!--\n"
   957       "<!--\n"
   806       "function changeDisplayState (e){\n"
   958       "function changeDisplayState (e){\n"
   807       "  var num=this.id.replace(/[^[0-9]/g,'');\n"
   959       "  var num=this.id.replace(/[^[0-9]/g,'');\n"
   808       "  var button=this.firstChild;\n"
   960       "  var button=this.firstChild;\n"
   809       "  var sectionDiv=document.getElementById('dynsection'+num);\n"
   961       "  var sectionDiv=document.getElementById('dynsection'+num);\n"
   810       "  if (sectionDiv.style.display=='none'||sectionDiv.style.display==''){\n"
   962       "  if (sectionDiv.style.display=='none'||sectionDiv.style.display==''){\n"
   811       "    sectionDiv.style.display='block';\n"
   963       "    sectionDiv.style.display='block';\n"
   812       "    button.src='" << relPath << "open.gif';\n"
   964       "    button.src='" << relPath << "open.png';\n"
   813       "  }else{\n"
   965       "  }else{\n"
   814       "    sectionDiv.style.display='none';\n"
   966       "    sectionDiv.style.display='none';\n"
   815       "    button.src='" << relPath << "closed.gif';\n"
   967       "    button.src='" << relPath << "closed.png';\n"
   816       "  }\n"
   968       "  }\n"
   817       "}\n"
   969       "}\n"
   818       "function initDynSections(){\n"
   970       "function initDynSections(){\n"
   819       "  var divs=document.getElementsByTagName('div');\n"
   971       "  var divs=document.getElementsByTagName('div');\n"
   820       "  var sectionCounter=1;\n"
   972       "  var sectionCounter=1;\n"
   829       "        divs[i].insertBefore(button,divs[i].firstChild);\n"
   981       "        divs[i].insertBefore(button,divs[i].firstChild);\n"
   830       "      }\n"
   982       "      }\n"
   831       "      header.style.cursor='pointer';\n"
   983       "      header.style.cursor='pointer';\n"
   832       "      header.onclick=changeDisplayState;\n"
   984       "      header.onclick=changeDisplayState;\n"
   833       "      header.id='dynheader'+sectionCounter;\n"
   985       "      header.id='dynheader'+sectionCounter;\n"
   834       "      button.src='" << relPath << "closed.gif';\n"
   986       "      button.src='" << relPath << "closed.png';\n"
   835       "      section.id='dynsection'+sectionCounter;\n"
   987       "      section.id='dynsection'+sectionCounter;\n"
   836       "      section.style.display='none';\n"
   988       "      section.style.display='none';\n"
   837       "      section.style.marginLeft='14px';\n"
   989       "      section.style.marginLeft='14px';\n"
   838       "      sectionCounter++;\n"
   990       "      sectionCounter++;\n"
   839       "    }\n"
   991       "    }\n"
   840       "  }\n"
   992       "  }\n"
   841       "}\n"
   993       "}\n"
   842       "window.onload = initDynSections;\n"
   994       "window.onload = initDynSections;\n"
   843       "-->\n"
   995       "-->\n"
   844       "</script>\n";
   996       "</script>\n";
       
   997 #endif
       
   998     "<script type=\"text/javascript\">\n"
       
   999     "function hasClass(ele,cls) {\n"
       
  1000     "  return ele.className.match(new RegExp('(\\\\s|^)'+cls+'(\\\\s|$)'));\n"
       
  1001     "}\n"
       
  1002     "\n"
       
  1003     "function addClass(ele,cls) {\n"
       
  1004     "  if (!this.hasClass(ele,cls)) ele.className += \" \"+cls;\n"
       
  1005     "}\n"
       
  1006     "\n"
       
  1007     "function removeClass(ele,cls) {\n"
       
  1008     "  if (hasClass(ele,cls)) {\n"
       
  1009     "    var reg = new RegExp('(\\\\s|^)'+cls+'(\\\\s|$)');\n"
       
  1010     "    ele.className=ele.className.replace(reg,' ');\n"
       
  1011     "  }\n"
       
  1012     "}\n"
       
  1013     "\n"
       
  1014     "function toggleVisibility(linkObj) {\n"
       
  1015     " var base = linkObj.getAttribute('id');\n"
       
  1016     " var summary = document.getElementById(base + '-summary');\n"
       
  1017     " var content = document.getElementById(base + '-content');\n"
       
  1018     " var trigger = document.getElementById(base + '-trigger');\n"
       
  1019     " if ( hasClass(linkObj,'closed') ) {\n"
       
  1020     "   summary.style.display = 'none';\n"
       
  1021     "   content.style.display = 'block';\n"
       
  1022     "   trigger.src = '" << relPath << "open.png';\n"
       
  1023     "   removeClass(linkObj,'closed');\n"
       
  1024     "   addClass(linkObj,'opened');\n"
       
  1025     " } else if ( hasClass(linkObj,'opened') ) {\n"
       
  1026     "   summary.style.display = 'block';\n"
       
  1027     "   content.style.display = 'none';\n"
       
  1028     "   trigger.src = '" << relPath << "closed.png';\n"
       
  1029     "   removeClass(linkObj,'opened');\n"
       
  1030     "   addClass(linkObj,'closed');\n"
       
  1031     " }\n"
       
  1032     " return false;\n"
       
  1033     "}\n"
       
  1034     "</script>\n";
   845   }
  1035   }
   846 }
  1036 }
   847 
  1037 
   848 
  1038 
   849 void HtmlGenerator::startFile(const char *name,const char *,
  1039 void HtmlGenerator::startFile(const char *name,const char *,
   891     t << "var searchBox = new SearchBox(\"searchBox\", \""
  1081     t << "var searchBox = new SearchBox(\"searchBox\", \""
   892       << relPath<< "search\",false,'" << theTranslator->trSearch() << "');\n";
  1082       << relPath<< "search\",false,'" << theTranslator->trSearch() << "');\n";
   893     t << "--></script>\n";
  1083     t << "--></script>\n";
   894   }
  1084   }
   895   generateDynamicSections(t,relPath);
  1085   generateDynamicSections(t,relPath);
       
  1086   m_sectionCount=0;
   896 }
  1087 }
   897 
  1088 
   898 void HtmlGenerator::writeSearchFooter(QTextStream &t,const QCString &relPath)
  1089 void HtmlGenerator::writeSearchFooter(QTextStream &t,const QCString &relPath)
   899 {
  1090 {
   900   (void)relPath;
  1091   (void)relPath;
   926   {
  1117   {
   927     HtmlGenerator::writeSearchFooter(t,relPath);
  1118     HtmlGenerator::writeSearchFooter(t,relPath);
   928   }
  1119   }
   929   if (g_footer.isEmpty())
  1120   if (g_footer.isEmpty())
   930   {
  1121   {
   931     t << "<hr size=\"1\"/><address style=\"text-align: right;\"><small>";
  1122     t << "<hr class=\"footer\"/><address class=\"footer\"><small>";
   932     if (timeStamp)
  1123     if (timeStamp)
   933     {
  1124     {
   934       t << theTranslator->trGeneratedAt(
  1125       t << theTranslator->trGeneratedAt(
   935           dateToString(TRUE),
  1126           dateToString(TRUE),
   936           Config_getString("PROJECT_NAME")
  1127           Config_getString("PROJECT_NAME")
   994       
  1185       
   995       // alternative, cooler looking titles
  1186       // alternative, cooler looking titles
   996       //t << "H1 { text-align: center; border-width: thin none thin none;" << endl;
  1187       //t << "H1 { text-align: center; border-width: thin none thin none;" << endl;
   997       //t << "     border-style : double; border-color : blue; padding-left : 1em; padding-right : 1em }" << endl;
  1188       //t << "     border-style : double; border-color : blue; padding-left : 1em; padding-right : 1em }" << endl;
   998 
  1189 
   999       t << defaultStyleSheet;
  1190       t << replaceColorMarkers(defaultStyleSheet);
  1000       endPlainFile();
  1191       endPlainFile();
  1001       Doxygen::indexList.addStyleSheetFile("doxygen.css");
  1192       Doxygen::indexList.addStyleSheetFile("doxygen.css");
  1002     }
  1193     }
  1003     else // write user defined style sheet
  1194     else // write user defined style sheet
  1004     {
  1195     {
  1354   cs[0]=c;
  1545   cs[0]=c;
  1355   cs[1]=0;
  1546   cs[1]=0;
  1356   docify(cs);
  1547   docify(cs);
  1357 }
  1548 }
  1358 
  1549 
       
  1550 //--- helper function for dynamic sections -------------------------
       
  1551 
       
  1552 static void startSectionHeader(QTextStream &t,int sectionCount)
       
  1553 {
       
  1554   static bool dynamicSections = Config_getBool("HTML_DYNAMIC_SECTIONS");
       
  1555   if (dynamicSections)
       
  1556   {
       
  1557     t << "<div id=\"dynsection-" << sectionCount << "\" "
       
  1558          "onclick=\"return toggleVisibility(this)\" "
       
  1559          "class=\"dynheader closed\" "
       
  1560          "style=\"cursor:pointer;\">" << endl;
       
  1561     t << "  <img id=\"dynsection-" << sectionCount << "-trigger\" src=\"closed.png\"/> ";
       
  1562   }
       
  1563   else
       
  1564   {
       
  1565     t << "<div class=\"dynheader\">" << endl;
       
  1566   }
       
  1567 }
       
  1568 
       
  1569 static void endSectionHeader(QTextStream &t)
       
  1570 {
       
  1571   t << "</div>" << endl;
       
  1572 }
       
  1573 
       
  1574 static void startSectionSummary(QTextStream &t,int sectionCount)
       
  1575 {
       
  1576   static bool dynamicSections = Config_getBool("HTML_DYNAMIC_SECTIONS");
       
  1577   if (dynamicSections)
       
  1578   {
       
  1579     t << "<div id=\"dynsection-" << sectionCount << "-summary\" "
       
  1580          "class=\"dynsummary\" "
       
  1581          "style=\"display:block;\">" << endl;
       
  1582   }
       
  1583 }
       
  1584 
       
  1585 static void endSectionSummary(QTextStream &t)
       
  1586 {
       
  1587   static bool dynamicSections = Config_getBool("HTML_DYNAMIC_SECTIONS");
       
  1588   if (dynamicSections)
       
  1589   {
       
  1590     t << "</div>" << endl;
       
  1591   }
       
  1592 }
       
  1593 
       
  1594 static void startSectionContent(QTextStream &t,int sectionCount)
       
  1595 {
       
  1596   static bool dynamicSections = Config_getBool("HTML_DYNAMIC_SECTIONS");
       
  1597   if (dynamicSections)
       
  1598   {
       
  1599     t << "<div id=\"dynsection-" << sectionCount << "-content\" "
       
  1600          "class=\"dyncontent\" "
       
  1601          "style=\"display:none;\">" << endl;
       
  1602   }
       
  1603   else
       
  1604   {
       
  1605     t << "<div class=\"dyncontent\">" << endl;
       
  1606   }
       
  1607 }
       
  1608 
       
  1609 static void endSectionContent(QTextStream &t)
       
  1610 {
       
  1611   t << "</div>" << endl;
       
  1612 }
       
  1613 
       
  1614 //----------------------------
       
  1615 
  1359 void HtmlGenerator::startClassDiagram()
  1616 void HtmlGenerator::startClassDiagram()
  1360 {
  1617 {
  1361   //t << "<p>";
  1618   startSectionHeader(t,m_sectionCount);
  1362   t << "<div class=\"dynheader\">" << endl;
       
  1363 }
  1619 }
  1364 
  1620 
  1365 void HtmlGenerator::endClassDiagram(const ClassDiagram &d,
  1621 void HtmlGenerator::endClassDiagram(const ClassDiagram &d,
  1366                                 const char *fileName,const char *name)
  1622                                 const char *fileName,const char *name)
  1367 {
  1623 {
  1368   t << "</div>" << endl;
  1624   endSectionHeader(t);
  1369   t << "<div class=\"dynsection\">" << endl;
  1625   startSectionSummary(t,m_sectionCount);
       
  1626   endSectionSummary(t);
       
  1627   startSectionContent(t,m_sectionCount);
  1370   t << " <div class=\"center\">" << endl;
  1628   t << " <div class=\"center\">" << endl;
  1371   t << "  <img src=\"";
  1629   t << "  <img src=\"";
  1372   t << relPath << fileName << ".png\" usemap=\"#";
  1630   t << relPath << fileName << ".png\" usemap=\"#";
  1373   docify(name);
  1631   docify(name);
  1374   t << "_map\" alt=\"\"/>" << endl;
  1632   t << "_map\" alt=\"\"/>" << endl;
  1377   t << "_map\" name=\"";
  1635   t << "_map\" name=\"";
  1378   docify(name);
  1636   docify(name);
  1379   t << "_map\">" << endl;
  1637   t << "_map\">" << endl;
  1380 
  1638 
  1381   d.writeImage(t,dir,relPath,fileName);
  1639   d.writeImage(t,dir,relPath,fileName);
  1382   t << " </div>" << endl;
  1640   endSectionContent(t);
  1383   t << "</div>" << endl;
  1641   m_sectionCount++;
  1384 }
  1642 }
  1385 
  1643 
  1386 
  1644 
  1387 void HtmlGenerator::startMemberList()  
  1645 void HtmlGenerator::startMemberList()  
  1388 { 
  1646 { 
  1510   {
  1768   {
  1511     t << "</table>" << endl;
  1769     t << "</table>" << endl;
  1512   }
  1770   }
  1513 }
  1771 }
  1514 
  1772 
  1515 void HtmlGenerator::startMemberHeader()
  1773 void HtmlGenerator::startMemberHeader(const char *anchor)
  1516 {
  1774 {
  1517   DBG_HTML(t << "<!-- startMemberHeader -->" << endl)
  1775   DBG_HTML(t << "<!-- startMemberHeader -->" << endl)
  1518   if (Config_getBool("HTML_ALIGN_MEMBERS"))
  1776   if (Config_getBool("HTML_ALIGN_MEMBERS"))
  1519   {
  1777   {
  1520     t << "<tr><td colspan=\"2\"><h2>";
  1778     t << "<tr><td colspan=\"2\"><h2>";
  1521   }
  1779   }
  1522   else
  1780   else
  1523   {
  1781   {
  1524     startGroupHeader();
  1782     startGroupHeader();
       
  1783   }
       
  1784   if (anchor)
       
  1785   {
       
  1786     t << "<a name=\"" << anchor << "\"></a>" << endl;
  1525   }
  1787   }
  1526 }
  1788 }
  1527 
  1789 
  1528 void HtmlGenerator::endMemberHeader()
  1790 void HtmlGenerator::endMemberHeader()
  1529 {
  1791 {
  1736   t << "</div>" << endl;
  1998   t << "</div>" << endl;
  1737 }
  1999 }
  1738 
  2000 
  1739 void HtmlGenerator::startDotGraph()
  2001 void HtmlGenerator::startDotGraph()
  1740 {
  2002 {
  1741   t << "<div class=\"dynheader\">" << endl;
  2003   startSectionHeader(t,m_sectionCount);
  1742 }
  2004 }
  1743 
  2005 
  1744 void HtmlGenerator::endDotGraph(const DotClassGraph &g)
  2006 void HtmlGenerator::endDotGraph(const DotClassGraph &g)
  1745 {
  2007 {
  1746   t << "</div>" << endl;
  2008   endSectionHeader(t);
  1747   t << "<div class=\"dynsection\">" << endl;
  2009   startSectionSummary(t,m_sectionCount);
       
  2010   endSectionSummary(t);
       
  2011   startSectionContent(t,m_sectionCount);
       
  2012 
  1748   g.writeGraph(t,BITMAP,dir,relPath);
  2013   g.writeGraph(t,BITMAP,dir,relPath);
  1749   if (Config_getBool("GENERATE_LEGEND"))
  2014   if (Config_getBool("GENERATE_LEGEND"))
  1750   {
  2015   {
  1751     t << "<center><span class=\"legend\">[";
  2016     t << "<center><span class=\"legend\">[";
  1752     startHtmlLink(relPath+"graph_legend"+Doxygen::htmlFileExtension);
  2017     startHtmlLink(relPath+"graph_legend"+Doxygen::htmlFileExtension);
  1753     t << theTranslator->trLegend();
  2018     t << theTranslator->trLegend();
  1754     endHtmlLink();
  2019     endHtmlLink();
  1755     t << "]</span></center>";
  2020     t << "]</span></center>";
  1756   }
  2021   }
  1757   t << "</div>" << endl;
  2022 
       
  2023   endSectionContent(t);
       
  2024   m_sectionCount++;
  1758 }
  2025 }
  1759 
  2026 
  1760 void HtmlGenerator::startInclDepGraph()
  2027 void HtmlGenerator::startInclDepGraph()
  1761 {
  2028 {
  1762   t << "<div class=\"dynheader\">" << endl;
  2029   startSectionHeader(t,m_sectionCount);
  1763 }
  2030 }
  1764 
  2031 
  1765 void HtmlGenerator::endInclDepGraph(const DotInclDepGraph &g)
  2032 void HtmlGenerator::endInclDepGraph(const DotInclDepGraph &g)
  1766 {
  2033 {
  1767   t << "</div>" << endl;
  2034   endSectionHeader(t);
  1768   t << "<div class=\"dynsection\">" << endl;
  2035   startSectionSummary(t,m_sectionCount);
       
  2036   endSectionSummary(t);
       
  2037   startSectionContent(t,m_sectionCount);
       
  2038 
  1769   g.writeGraph(t,BITMAP,dir,relPath);
  2039   g.writeGraph(t,BITMAP,dir,relPath);
  1770   t << "</div>" << endl;
  2040 
       
  2041   endSectionContent(t);
       
  2042   m_sectionCount++;
  1771 }
  2043 }
  1772 
  2044 
  1773 void HtmlGenerator::startGroupCollaboration()
  2045 void HtmlGenerator::startGroupCollaboration()
  1774 {
  2046 {
  1775   t << "<div class=\"dynheader\">" << endl;
  2047   startSectionHeader(t,m_sectionCount);
  1776 }
  2048 }
  1777 
  2049 
  1778 void HtmlGenerator::endGroupCollaboration(const DotGroupCollaboration &g)
  2050 void HtmlGenerator::endGroupCollaboration(const DotGroupCollaboration &g)
  1779 {
  2051 {
  1780   t << "</div>" << endl;
  2052   endSectionHeader(t);
  1781   t << "<div class=\"dynsection\">" << endl;
  2053   startSectionSummary(t,m_sectionCount);
       
  2054   endSectionSummary(t);
       
  2055   startSectionContent(t,m_sectionCount);
       
  2056 
  1782   g.writeGraph(t,BITMAP,dir,relPath);
  2057   g.writeGraph(t,BITMAP,dir,relPath);
  1783   t << "</div>" << endl;
  2058 
       
  2059   endSectionContent(t);
       
  2060   m_sectionCount++;
  1784 }
  2061 }
  1785 
  2062 
  1786 void HtmlGenerator::startCallGraph()
  2063 void HtmlGenerator::startCallGraph()
  1787 {
  2064 {
  1788   t << "<div class=\"dynheader\">" << endl;
  2065   startSectionHeader(t,m_sectionCount);
  1789 }
  2066 }
  1790 
  2067 
  1791 void HtmlGenerator::endCallGraph(const DotCallGraph &g)
  2068 void HtmlGenerator::endCallGraph(const DotCallGraph &g)
  1792 {
  2069 {
  1793   t << "</div>" << endl;
  2070   endSectionHeader(t);
  1794   t << "<div class=\"dynsection\">" << endl;
  2071   startSectionSummary(t,m_sectionCount);
       
  2072   endSectionSummary(t);
       
  2073   startSectionContent(t,m_sectionCount);
       
  2074 
  1795   g.writeGraph(t,BITMAP,dir,relPath);
  2075   g.writeGraph(t,BITMAP,dir,relPath);
  1796   t << "</div>" << endl;
  2076 
       
  2077   endSectionContent(t);
       
  2078   m_sectionCount++;
  1797 }
  2079 }
  1798 
  2080 
  1799 void HtmlGenerator::startDirDepGraph()
  2081 void HtmlGenerator::startDirDepGraph()
  1800 {
  2082 {
  1801   t << "<div class=\"dynheader\">" << endl;
  2083   startSectionHeader(t,m_sectionCount);
  1802 }
  2084 }
  1803 
  2085 
  1804 void HtmlGenerator::endDirDepGraph(const DotDirDeps &g)
  2086 void HtmlGenerator::endDirDepGraph(const DotDirDeps &g)
  1805 {
  2087 {
  1806   t << "</div>" << endl;
  2088   endSectionHeader(t);
  1807   t << "<div class=\"dynsection\">" << endl;
  2089   startSectionSummary(t,m_sectionCount);
       
  2090   endSectionSummary(t);
       
  2091   startSectionContent(t,m_sectionCount);
       
  2092 
  1808   g.writeGraph(t,BITMAP,dir,relPath);
  2093   g.writeGraph(t,BITMAP,dir,relPath);
  1809   t << "</div>" << endl;
  2094 
       
  2095   endSectionContent(t);
       
  2096   m_sectionCount++;
  1810 }
  2097 }
  1811 
  2098 
  1812 void HtmlGenerator::writeGraphicalHierarchy(const DotGfxHierarchyTable &g)
  2099 void HtmlGenerator::writeGraphicalHierarchy(const DotGfxHierarchyTable &g)
  1813 {
  2100 {
  1814   g.writeGraph(t,dir);
  2101   g.writeGraph(t,dir);
  1931   delete visitor; 
  2218   delete visitor; 
  1932 }
  2219 }
  1933 
  2220 
  1934 //---------------- helpers for index generation -----------------------------
  2221 //---------------- helpers for index generation -----------------------------
  1935 
  2222 
  1936 static void startQuickIndexList(QTextStream &t,bool compact)
  2223 static void startQuickIndexList(QTextStream &t,bool compact,bool topLevel=TRUE)
  1937 {
  2224 {
  1938   if (compact) 
  2225   if (compact) 
  1939   {
  2226   {
  1940     t << "  <div class=\"tabs\">\n";
  2227     if (topLevel)
  1941     t << "    <ul>\n"; 
  2228     {
       
  2229       t << "  <div class=\"tabs\">\n";
       
  2230     }
       
  2231     else
       
  2232     {
       
  2233       t << "  <div class=\"tabs2\">\n";
       
  2234     }
       
  2235     t << "    <ul class=\"tablist\">\n"; 
  1942   }
  2236   }
  1943   else 
  2237   else 
  1944   {
  2238   {
  1945     t << "<ul>";
  2239     t << "<ul>";
  1946   }
  2240   }
  2040   {
  2334   {
  2041     renderQuickLinksAsTabs(t,relPath,hlEntry->parent(),kind,highlightParent,highlightSearch);
  2335     renderQuickLinksAsTabs(t,relPath,hlEntry->parent(),kind,highlightParent,highlightSearch);
  2042   }
  2336   }
  2043   if (hlEntry->parent() && hlEntry->parent()->children().count()>0) // draw tabs for row containing hlEntry
  2337   if (hlEntry->parent() && hlEntry->parent()->children().count()>0) // draw tabs for row containing hlEntry
  2044   {
  2338   {
       
  2339     bool topLevel = hlEntry->parent()->parent()==0;
  2045     QListIterator<LayoutNavEntry> li(hlEntry->parent()->children());
  2340     QListIterator<LayoutNavEntry> li(hlEntry->parent()->children());
  2046     LayoutNavEntry *entry;
  2341     LayoutNavEntry *entry;
  2047 
  2342 
  2048     int count=0;
  2343     int count=0;
  2049     for (li.toFirst();(entry=li.current());++li)
  2344     for (li.toFirst();(entry=li.current());++li)
  2050     {
  2345     {
  2051       if (entry->visible() && quickLinkVisible(entry->kind())) count++;
  2346       if (entry->visible() && quickLinkVisible(entry->kind())) count++;
  2052     }
  2347     }
  2053     if (count>0) // at least one item is visible
  2348     if (count>0) // at least one item is visible
  2054     {
  2349     {
  2055       startQuickIndexList(t,TRUE);
  2350       startQuickIndexList(t,TRUE,topLevel);
  2056       for (li.toFirst();(entry=li.current());++li)
  2351       for (li.toFirst();(entry=li.current());++li)
  2057       {
  2352       {
  2058         if (entry->visible() && quickLinkVisible(entry->kind()))
  2353         if (entry->visible() && quickLinkVisible(entry->kind()))
  2059         {
  2354         {
  2060           startQuickIndexItem(t,entry->baseFile()+Doxygen::htmlFileExtension,
  2355           startQuickIndexItem(t,entry->baseFile()+Doxygen::htmlFileExtension,
  2097         static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
  2392         static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
  2098         if (searchEngine && !generateTreeView)
  2393         if (searchEngine && !generateTreeView)
  2099         {
  2394         {
  2100           if (!serverBasedSearch) // pure client side search
  2395           if (!serverBasedSearch) // pure client side search
  2101           {
  2396           {
  2102             t << "      <li>\n";
  2397             t << "      <li id=\"searchli\">\n";
  2103             t << "        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
  2398             t << "        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
  2104             t << "        <img id=\"MSearchSelect\" src=\"" << relPath << "search/search.png\"\n";
  2399             t << "        <span class=\"left\">\n";
  2105             t << "             onmouseover=\"return searchBox.OnSearchSelectShow()\"\n";
  2400             t << "          <img id=\"MSearchSelect\" src=\"" << relPath << "search/mag_sel.png\"\n";
  2106             t << "             onmouseout=\"return searchBox.OnSearchSelectHide()\"\n";
  2401             t << "               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n";
  2107             t << "             alt=\"\"/>\n";
  2402             t << "               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n";
  2108             t << "        <input type=\"text\" id=\"MSearchField\" value=\"" 
  2403             t << "               alt=\"\"/>\n";
       
  2404             t << "          <input type=\"text\" id=\"MSearchField\" value=\"" 
  2109               << theTranslator->trSearch() << "\" accesskey=\"S\"\n";
  2405               << theTranslator->trSearch() << "\" accesskey=\"S\"\n";
  2110             t << "             onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
  2406             t << "               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
  2111             t << "             onblur=\"searchBox.OnSearchFieldFocus(false)\" \n";
  2407             t << "               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n";
  2112             t << "             onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n";
  2408             t << "               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n";
  2113             t << "        <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\">"
  2409             t << "          </span><span class=\"right\">\n";
       
  2410             t << "            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\">"
  2114               << "<img id=\"MSearchCloseImg\" border=\"0\" src=\"" << relPath << "search/close.png\" alt=\"\"/></a>\n";
  2411               << "<img id=\"MSearchCloseImg\" border=\"0\" src=\"" << relPath << "search/close.png\" alt=\"\"/></a>\n";
       
  2412             t << "          </span>\n";
  2115             t << "        </div>\n";
  2413             t << "        </div>\n";
  2116             t << "      </li>\n";
  2414             t << "      </li>\n";
  2117           }
  2415           }
  2118           else if (!generateTreeView) // server based search
  2416           else if (!generateTreeView) // server based search
  2119           {
  2417           {
  2120             t << "      <li>\n";
  2418             t << "      <li id=\"searchli\">\n";
  2121             t << "        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
  2419             t << "        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
  2122             t << "          <form id=\"FSearchBox\" action=\"" << relPath << "search.php\" method=\"get\">\n";
  2420             t << "          <span class=\"left\">\n";
  2123             t << "            <img id=\"MSearchSelect\" src=\"" << relPath << "search/search.png\" alt=\"\"/>\n";
  2421             t << "            <form id=\"FSearchBox\" action=\"" << relPath << "search.php\" method=\"get\">\n";
       
  2422             t << "              <img id=\"MSearchSelect\" src=\"" << relPath << "search/mag.png\" alt=\"\"/>\n";
  2124             if (!highlightSearch)
  2423             if (!highlightSearch)
  2125             {
  2424             {
  2126               t << "            <input type=\"text\" id=\"MSearchField\" name=\"query\" value=\""
  2425               t << "              <input type=\"text\" id=\"MSearchField\" name=\"query\" value=\""
  2127                 << theTranslator->trSearch() << "\" size=\"20\" accesskey=\"S\" \n";
  2426                 << theTranslator->trSearch() << "\" size=\"20\" accesskey=\"S\" \n";
  2128               t << "                   onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
  2427               t << "                     onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
  2129               t << "                   onblur=\"searchBox.OnSearchFieldFocus(false)\"/>\n";
  2428               t << "                     onblur=\"searchBox.OnSearchFieldFocus(false)\"/>\n";
  2130               t << "          </form>\n";
  2429               t << "            </form>\n";
       
  2430               t << "          </span><span class=\"right\"></span>\n";
  2131               t << "        </div>\n";
  2431               t << "        </div>\n";
  2132               t << "      </li>\n";
  2432               t << "      </li>\n";
  2133             }
  2433             }
  2134           }
  2434           }
  2135         }
  2435         }
  2296     t << "function end_form($value)\n";
  2596     t << "function end_form($value)\n";
  2297     t << "{\n";
  2597     t << "{\n";
  2298     if (!generateTreeView)
  2598     if (!generateTreeView)
  2299     {
  2599     {
  2300       t << "  echo \"" 
  2600       t << "  echo \"" 
  2301         << "            <input type=\\\"text\\\" id=\\\"MSearchField\\\" name=\\\"query\\\" value=\\\"$value\\\" size=\\\"20\\\" accesskey=\\\"S\\\" "
  2601         << "              <input type=\\\"text\\\" id=\\\"MSearchField\\\" name=\\\"query\\\" value=\\\"$value\\\" size=\\\"20\\\" accesskey=\\\"S\\\" "
  2302         << "onfocus=\\\"searchBox.OnSearchFieldFocus(true)\\\" "
  2602         << "onfocus=\\\"searchBox.OnSearchFieldFocus(true)\\\" "
  2303         << "onblur=\\\"searchBox.OnSearchFieldFocus(false)\\\"/>\\n"
  2603         << "onblur=\\\"searchBox.OnSearchFieldFocus(false)\\\"/>\\n"
  2304         << "          </form>\\n"
  2604         << "            </form>\\n"
       
  2605         << "          </span><span class=\\\"right\\\"></span>\\n"
  2305         << "        </div>\\n"
  2606         << "        </div>\\n"
  2306         << "      </li>\\n"
  2607         << "      </li>\\n"
  2307         << "    </ul>\\n"
  2608         << "    </ul>\\n"
  2308         << "  </div>\\n"
  2609         << "  </div>\\n"
  2309         << "\";\n";
  2610         << "\";\n";
  2357   {
  2658   {
  2358      err("Failed to open file '%s' for writing...\n",scriptName.data());
  2659      err("Failed to open file '%s' for writing...\n",scriptName.data());
  2359   }
  2660   }
  2360 }
  2661 }
  2361 
  2662 
       
  2663 #if 0
  2362 void HtmlGenerator::generateSectionImages()
  2664 void HtmlGenerator::generateSectionImages()
  2363 {
  2665 {
  2364   {
  2666   {
  2365     QCString fileName = Config_getString("HTML_OUTPUT")+"/open.gif";
  2667     QCString fileName = Config_getString("HTML_OUTPUT")+"/open.png";
  2366     QFile f(fileName);
  2668     QFile f(fileName);
  2367     if (f.open(IO_WriteOnly))
  2669     if (f.open(IO_WriteOnly))
  2368     {
  2670     {
  2369       f.writeBlock((char*)open_gif,open_gif_len);
  2671       f.writeBlock((char*)open_gif,open_gif_len);
  2370     }
  2672     }
  2371     Doxygen::indexList.addImageFile("open.gif");
  2673     Doxygen::indexList.addImageFile("open.png");
  2372   }
  2674   }
  2373   {
  2675   {
  2374     QCString fileName = Config_getString("HTML_OUTPUT")+"/closed.gif";
  2676     QCString fileName = Config_getString("HTML_OUTPUT")+"/closed.png";
  2375     QFile f(fileName);
  2677     QFile f(fileName);
  2376     if (f.open(IO_WriteOnly))
  2678     if (f.open(IO_WriteOnly))
  2377     {
  2679     {
  2378       f.writeBlock((char*)closed_gif,closed_gif_len);
  2680       f.writeBlock((char*)closed_gif,closed_gif_len);
  2379     }
  2681     }
  2380     Doxygen::indexList.addImageFile("closed.gif");
  2682     Doxygen::indexList.addImageFile("closed.png");
  2381   }
  2683   }
  2382 }
  2684 }
       
  2685 #endif
  2383 
  2686 
  2384 void HtmlGenerator::startConstraintList(const char *header)
  2687 void HtmlGenerator::startConstraintList(const char *header)
  2385 {
  2688 {
  2386   t << "<div class=\"typeconstraint\">" << endl;
  2689   t << "<div class=\"typeconstraint\">" << endl;
  2387   t << "<dl><dt><b>" << header << "</b><dt><dd>" << endl;
  2690   t << "<dl><dt><b>" << header << "</b><dt><dd>" << endl;
  2435   {
  2738   {
  2436     t << "<br/>" << endl;
  2739     t << "<br/>" << endl;
  2437   }
  2740   }
  2438 }
  2741 }
  2439 
  2742 
       
  2743 void HtmlGenerator::startHeaderSection()
       
  2744 {
       
  2745   t << "<div class=\"header\">" << endl;
       
  2746 }
       
  2747 
       
  2748 void HtmlGenerator::startTitleHead(const char *) 
       
  2749 { 
       
  2750   t << "  <div class=\"headertitle\">" << endl;
       
  2751   startTitle(); 
       
  2752 }
       
  2753 
       
  2754 void HtmlGenerator::endTitleHead(const char *,const char *) 
       
  2755 { 
       
  2756   endTitle(); 
       
  2757   t << "  </div>" << endl;
       
  2758 }
       
  2759 
       
  2760 void HtmlGenerator::endHeaderSection()
       
  2761 {
       
  2762   t << "</div>" << endl;
       
  2763 }
       
  2764