PageRenderTime 81ms CodeModel.GetById 28ms RepoModel.GetById 0ms app.codeStats 2ms

/Inc/CImg.h

http://asmodeling.codeplex.com
C++ Header | 7837 lines | 7298 code | 240 blank | 299 comment | 568 complexity | 8c7492f19b329e8d0013faaf6d9d3510 MD5 | raw file
  1. /*
  2. #
  3. # File : CImg.h
  4. # ( C++ header file )
  5. #
  6. # Description : The C++ Template Image Processing Library.
  7. # This file is the main part of the CImg Library project.
  8. # ( http://cimg.sourceforge.net )
  9. #
  10. # Project manager : David Tschumperle.
  11. # ( http://www.greyc.ensicaen.fr/~dtschump/ )
  12. #
  13. # The complete contributor list can be seen in the 'README.txt' file.
  14. #
  15. # Licenses : This file is "dual-licensed", you have to choose one
  16. # of the two licenses below to apply on this file.
  17. #
  18. # CeCILL-C
  19. # The CeCILL-C license is close to the GNU LGPL.
  20. # ( http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.html )
  21. #
  22. # or CeCILL v2.0
  23. # The CeCILL license is compatible with the GNU GPL.
  24. # ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html )
  25. #
  26. # This software is governed either by the CeCILL or the CeCILL-C license
  27. # under French law and abiding by the rules of distribution of free software.
  28. # You can use, modify and or redistribute the software under the terms of
  29. # the CeCILL or CeCILL-C licenses as circulated by CEA, CNRS and INRIA
  30. # at the following URL : "http://www.cecill.info".
  31. #
  32. # As a counterpart to the access to the source code and rights to copy,
  33. # modify and redistribute granted by the license, users are provided only
  34. # with a limited warranty and the software's author, the holder of the
  35. # economic rights, and the successive licensors have only limited
  36. # liability.
  37. #
  38. # In this respect, the user's attention is drawn to the risks associated
  39. # with loading, using, modifying and/or developing or reproducing the
  40. # software by the user in light of its specific status of free software,
  41. # that may mean that it is complicated to manipulate, and that also
  42. # therefore means that it is reserved for developers and experienced
  43. # professionals having in-depth computer knowledge. Users are therefore
  44. # encouraged to load and test the software's suitability as regards their
  45. # requirements in conditions enabling the security of their systems and/or
  46. # data to be ensured and, more generally, to use and operate it in the
  47. # same conditions as regards security.
  48. #
  49. # The fact that you are presently reading this means that you have had
  50. # knowledge of the CeCILL and CeCILL-C licenses and that you accept its terms.
  51. #
  52. */
  53. // Define version number of the current file.
  54. //
  55. #ifndef cimg_version
  56. #define cimg_version 131
  57. /*-----------------------------------------------------------
  58. #
  59. # Test/auto-set CImg configuration variables
  60. # and include required headers.
  61. #
  62. # If you find that default configuration variables are
  63. # not adapted, you can override their values before including
  64. # the header file "CImg.h" (using the #define directive).
  65. #
  66. ------------------------------------------------------------*/
  67. // Include required standard C++ headers.
  68. //
  69. #include <cstdio>
  70. #include <cstdlib>
  71. #include <cstdarg>
  72. #include <cstring>
  73. #include <cmath>
  74. #include <ctime>
  75. // Operating system configuration.
  76. //
  77. // Define 'cimg_OS' to : 0 for an unknown OS (will try to minize library dependancies).
  78. // 1 for a Unix-like OS (Linux, Solaris, BSD, MacOSX, Irix, ...).
  79. // 2 for Microsoft Windows.
  80. //
  81. #ifndef cimg_OS
  82. #if defined(unix) || defined(__unix) || defined(__unix__) \
  83. || defined(linux) || defined(__linux) || defined(__linux__) \
  84. || defined(sun) || defined(__sun) \
  85. || defined(BSD) || defined(__OpenBSD__) || defined(__NetBSD__) \
  86. || defined(__FreeBSD__) || defined __DragonFly__ \
  87. || defined(sgi) || defined(__sgi) \
  88. || defined(__MACOSX__) || defined(__APPLE__) \
  89. || defined(__CYGWIN__)
  90. #define cimg_OS 1
  91. #elif defined(_MSC_VER) || defined(WIN32) || defined(_WIN32) || defined(__WIN32__) \
  92. || defined(WIN64) || defined(_WIN64) || defined(__WIN64__)
  93. #define cimg_OS 2
  94. #else
  95. #define cimg_OS 0
  96. #endif
  97. #elif !(cimg_OS==0 || cimg_OS==1 || cimg_OS==2)
  98. #error CImg Library : Configuration variable 'cimg_OS' is badly defined.
  99. #error (valid values are '0=unknown OS', '1=Unix-like OS', '2=Microsoft Windows').
  100. #endif
  101. // Compiler configuration.
  102. //
  103. // Try to detect Microsoft VC++ compilers.
  104. // (lot of workarounds are needed afterwards to
  105. // make CImg working, particularly with VC++ 6.0).
  106. //
  107. #ifdef _MSC_VER
  108. #pragma warning(push)
  109. #pragma warning(disable:4311)
  110. #pragma warning(disable:4312)
  111. #pragma warning(disable:4800)
  112. #pragma warning(disable:4804)
  113. #pragma warning(disable:4996)
  114. #define _CRT_SECURE_NO_DEPRECATE 1
  115. #define _CRT_NONSTDC_NO_DEPRECATE 1
  116. #if _MSC_VER<1300
  117. #define cimg_use_visualcpp6
  118. #define cimg_std
  119. #define _WIN32_WINNT 0x0500
  120. #endif
  121. #endif
  122. // Include OS-specific headers.
  123. //
  124. #if cimg_OS==1
  125. #include <sys/time.h>
  126. #include <unistd.h>
  127. #elif cimg_OS==2
  128. #include <windows.h>
  129. #ifndef _WIN32_IE
  130. #define _WIN32_IE 0x0400
  131. #endif
  132. #include <shlobj.h>
  133. #endif
  134. // Define default pipe for output messages.
  135. //
  136. // Define 'cimg_stdout' to : stdout to print CImg messages on the standard output.
  137. // stderr to print CImg messages on the standart error output (default behavior).
  138. //
  139. #ifndef cimg_std
  140. #define cimg_std std
  141. #endif
  142. #ifndef cimg_stdout
  143. #define cimg_stdout stderr
  144. #endif
  145. // Define default filename separator.
  146. #ifndef cimg_file_separator
  147. #if cimg_OS==2
  148. #define cimg_file_separator "\\"
  149. #else
  150. #define cimg_file_separator "/"
  151. #endif
  152. #endif
  153. // Output messages configuration.
  154. //
  155. // Define 'cimg_debug' to : 0 to hide debug messages (quiet mode, but exceptions are still thrown).
  156. // 1 to display debug messages on the console.
  157. // 2 to display debug messages with dialog windows (default behavior).
  158. // 3 to do as 1 + add extra warnings (may slow down the code !).
  159. // 4 to do as 2 + add extra warnings (may slow down the code !).
  160. //
  161. // Define 'cimg_strict_warnings' to replace warning messages by exception throwns.
  162. //
  163. // Define 'cimg_use_vt100' to allow output of color messages (require VT100-compatible terminal).
  164. //
  165. #ifndef cimg_debug
  166. #define cimg_debug 2
  167. #elif !(cimg_debug==0 || cimg_debug==1 || cimg_debug==2 || cimg_debug==3 || cimg_debug==4)
  168. #error CImg Library : Configuration variable 'cimg_debug' is badly defined.
  169. #error (valid values are '0=quiet', '1=console', '2=dialog', '3=console+warnings', '4=dialog+warnings').
  170. #endif
  171. // Display framework configuration.
  172. //
  173. // Define 'cimg_display' to : 0 to disable display capabilities.
  174. // 1 to use X-Window framework (X11).
  175. // 2 to use Microsoft GDI32 framework.
  176. // 3 to use Apple Carbon framework.
  177. //
  178. #ifndef cimg_display
  179. #if cimg_OS==0
  180. #define cimg_display 0
  181. #elif cimg_OS==1
  182. #if defined(__MACOSX__) || defined(__APPLE__)
  183. #define cimg_display 1
  184. #else
  185. #define cimg_display 1
  186. #endif
  187. #elif cimg_OS==2
  188. #define cimg_display 2
  189. #endif
  190. #elif !(cimg_display==0 || cimg_display==1 || cimg_display==2 || cimg_display==3)
  191. #error CImg Library : Configuration variable 'cimg_display' is badly defined.
  192. #error (valid values are '0=disable', '1=X-Window (X11)', '2=Microsoft GDI32', '3=Apple Carbon').
  193. #endif
  194. // Include display-specific headers.
  195. //
  196. #if cimg_display==1
  197. #include <X11/Xlib.h>
  198. #include <X11/Xutil.h>
  199. #include <X11/keysym.h>
  200. #include <pthread.h>
  201. #ifdef cimg_use_xshm
  202. #include <sys/ipc.h>
  203. #include <sys/shm.h>
  204. #include <X11/extensions/XShm.h>
  205. #endif
  206. #ifdef cimg_use_xrandr
  207. #include <X11/extensions/Xrandr.h>
  208. #endif
  209. #elif cimg_display==3
  210. #include <Carbon/Carbon.h>
  211. #include <pthread.h>
  212. #endif
  213. // OpenMP configuration.
  214. // (http://www.openmp.org)
  215. //
  216. // Define 'cimg_use_openmp' to enable OpenMP support.
  217. //
  218. // OpenMP directives can be used in few CImg functions to get
  219. // advantages of multi-core CPUs. Using OpenMP is not mandatory.
  220. //
  221. #ifdef cimg_use_openmp
  222. #include "omp.h"
  223. #endif
  224. // LibPNG configuration.
  225. // (http://www.libpng.org)
  226. //
  227. // Define 'cimg_use_png' to enable LibPNG support.
  228. //
  229. // LibPNG can be used in functions 'CImg<T>::{load,save}_png()'
  230. // to get a builtin support of PNG files. Using LibPNG is not mandatory.
  231. //
  232. #ifdef cimg_use_png
  233. extern "C" {
  234. #include "png.h"
  235. }
  236. #endif
  237. // LibJPEG configuration.
  238. // (http://en.wikipedia.org/wiki/Libjpeg)
  239. //
  240. // Define 'cimg_use_jpeg' to enable LibJPEG support.
  241. //
  242. // LibJPEG can be used in functions 'CImg<T>::{load,save}_jpeg()'
  243. // to get a builtin support of JPEG files. Using LibJPEG is not mandatory.
  244. //
  245. #ifdef cimg_use_jpeg
  246. extern "C" {
  247. #include "jpeglib.h"
  248. }
  249. #endif
  250. // LibTIFF configuration.
  251. // (http://www.libtiff.org)
  252. //
  253. // Define 'cimg_use_tiff' to enable LibTIFF support.
  254. //
  255. // LibTIFF can be used in functions 'CImg[List]<T>::{load,save}_tiff()'
  256. // to get a builtin support of TIFF files. Using LibTIFF is not mandatory.
  257. //
  258. #ifdef cimg_use_tiff
  259. extern "C" {
  260. #include "tiffio.h"
  261. }
  262. #endif
  263. // FFMPEG Avcodec and Avformat libraries configuration.
  264. // (http://www.ffmpeg.org)
  265. //
  266. // Define 'cimg_use_ffmpeg' to enable FFMPEG lib support.
  267. //
  268. // Avcodec and Avformat libraries can be used in functions
  269. // 'CImg[List]<T>::load_ffmpeg()' to get a builtin
  270. // support of various image sequences files.
  271. // Using FFMPEG libraries is not mandatory.
  272. //
  273. #ifdef cimg_use_ffmpeg
  274. extern "C" {
  275. #include "avformat.h"
  276. #include "avcodec.h"
  277. #include "swscale.h"
  278. }
  279. #endif
  280. // Zlib configuration
  281. // (http://www.zlib.net)
  282. //
  283. // Define 'cimg_use_zlib' to enable Zlib support.
  284. //
  285. // Zlib can be used in functions 'CImg[List]<T>::{load,save}_cimg()'
  286. // to allow compressed data in '.cimg' files. Using Zlib is not mandatory.
  287. //
  288. #ifdef cimg_use_zlib
  289. extern "C" {
  290. #include "zlib.h"
  291. }
  292. #endif
  293. // Magick++ configuration.
  294. // (http://www.imagemagick.org/Magick++)
  295. //
  296. // Define 'cimg_use_magick' to enable Magick++ support.
  297. //
  298. // Magick++ library can be used in functions 'CImg<T>::{load,save}()'
  299. // to get a builtin support of various image formats (PNG,JPEG,TIFF,...).
  300. // Using Magick++ is not mandatory.
  301. //
  302. #ifdef cimg_use_magick
  303. #include "Magick++.h"
  304. #endif
  305. // FFTW3 configuration.
  306. // (http://www.fftw.org)
  307. //
  308. // Define 'cimg_use_fftw3' to enable libFFTW3 support.
  309. //
  310. // FFTW3 library can be used in functions 'CImg[List]<T>::FFT()' to
  311. // efficiently compile the Fast Fourier Transform of image data.
  312. //
  313. #ifdef cimg_use_fftw3
  314. extern "C" {
  315. #include "fftw3.h"
  316. }
  317. #endif
  318. // Board configuration.
  319. // (http://libboard.sourceforge.net/)
  320. //
  321. // Define 'cimg_use_board' to enable Board support.
  322. //
  323. // Board library can be used in functions 'CImg<T>::draw_object3d()'
  324. // to draw objects 3D in vector-graphics canvas that can be saved
  325. // as .PS or .SVG files afterwards.
  326. //
  327. #ifdef cimg_use_board
  328. #include "Board.h"
  329. #endif
  330. // Lapack configuration.
  331. // (http://www.netlib.org/lapack)
  332. //
  333. // Define 'cimg_use_lapack' to enable LAPACK support.
  334. //
  335. // Lapack can be used in various CImg functions dealing with
  336. // matrix computation and algorithms (eigenvalues, inverse, ...).
  337. // Using Lapack is not mandatory.
  338. //
  339. #ifdef cimg_use_lapack
  340. extern "C" {
  341. extern void sgetrf_(int*, int*, float*, int*, int*, int*);
  342. extern void sgetri_(int*, float*, int*, int*, float*, int*, int*);
  343. extern void sgetrs_(char*, int*, int*, float*, int*, int*, float*, int*, int*);
  344. extern void sgesvd_(char*, char*, int*, int*, float*, int*, float*, float*, int*, float*, int*, float*, int*, int*);
  345. extern void ssyev_(char*, char*, int*, float*, int*, float*, float*, int*, int*);
  346. extern void dgetrf_(int*, int*, double*, int*, int*, int*);
  347. extern void dgetri_(int*, double*, int*, int*, double*, int*, int*);
  348. extern void dgetrs_(char*, int*, int*, double*, int*, int*, double*, int*, int*);
  349. extern void dgesvd_(char*, char*, int*, int*, double*, int*, double*, double*, int*, double*, int*, double*, int*, int*);
  350. extern void dsyev_(char*, char*, int*, double*, int*, double*, double*, int*, int*);
  351. }
  352. #endif
  353. // Check if min/max macros are defined.
  354. //
  355. // CImg does not compile if macros 'min' or 'max' are defined,
  356. // because min() and max() functions are also defined in the cimg:: namespace.
  357. // so it '#undef' these macros if necessary, and restore them to reasonable
  358. // values at the end of the file.
  359. //
  360. #ifdef min
  361. #undef min
  362. #define _cimg_redefine_min
  363. #endif
  364. #ifdef max
  365. #undef max
  366. #define _cimg_redefine_max
  367. #endif
  368. // Set the current working directory for native MacOSX bundled applications.
  369. //
  370. // By default, MacOS bundled applications set the cwd at the root directory '/',
  371. // the code below allows to set it to the current exec directory instead when
  372. // a CImg-based program is executed.
  373. //
  374. #if cimg_OS==1 && cimg_display==3
  375. static struct _cimg_macosx_setcwd {
  376. _cimg_macosx_setcwd() {
  377. FSRef location;
  378. ProcessSerialNumber psn;
  379. char filePath[512];
  380. if (GetCurrentProcess(&psn)!=noErr) return;
  381. if (GetProcessBundleLocation(&psn,&location)!=noErr) return;
  382. FSRefMakePath(&location,(UInt8*)filePath,sizeof(filePath)-1);
  383. unsigned int p = cimg_std::strlen(filePath);
  384. while (filePath[p] != '/') --p;
  385. filePath[p] = 0;
  386. chdir(filePath);
  387. }
  388. } cimg_macosx_setcwd;
  389. #endif
  390. /*------------------------------------------------------------------------------
  391. #
  392. # Define user-friendly macros.
  393. #
  394. # User macros are prefixed by 'cimg_' and can be used in your own code.
  395. # They are particularly useful for option parsing, and image loops creation.
  396. #
  397. ------------------------------------------------------------------------------*/
  398. // Define the program usage, and retrieve command line arguments.
  399. //
  400. #define cimg_usage(usage) cimg_library::cimg::option((char*)0,argc,argv,(char*)0,usage)
  401. #define cimg_help(str) cimg_library::cimg::option((char*)0,argc,argv,str,(char*)0)
  402. #define cimg_option(name,defaut,usage) cimg_library::cimg::option(name,argc,argv,defaut,usage)
  403. #define cimg_argument(pos) cimg_library::cimg::argument(pos,argc,argv)
  404. #define cimg_argument1(pos,s0) cimg_library::cimg::argument(pos,argc,argv,1,s0)
  405. #define cimg_argument2(pos,s0,s1) cimg_library::cimg::argument(pos,argc,argv,2,s0,s1)
  406. #define cimg_argument3(pos,s0,s1,s2) cimg_library::cimg::argument(pos,argc,argv,3,s0,s1,s2)
  407. #define cimg_argument4(pos,s0,s1,s2,s3) cimg_library::cimg::argument(pos,argc,argv,4,s0,s1,s2,s3)
  408. #define cimg_argument5(pos,s0,s1,s2,s3,s4) cimg_library::cimg::argument(pos,argc,argv,5,s0,s1,s2,s3,s4)
  409. #define cimg_argument6(pos,s0,s1,s2,s3,s4,s5) cimg_library::cimg::argument(pos,argc,argv,6,s0,s1,s2,s3,s4,s5)
  410. #define cimg_argument7(pos,s0,s1,s2,s3,s4,s5,s6) cimg_library::cimg::argument(pos,argc,argv,7,s0,s1,s2,s3,s4,s5,s6)
  411. #define cimg_argument8(pos,s0,s1,s2,s3,s4,s5,s6,s7) cimg_library::cimg::argument(pos,argc,argv,8,s0,s1,s2,s3,s4,s5,s6,s7)
  412. #define cimg_argument9(pos,s0,s1,s2,s3,s4,s5,s6,s7,s8) cimg_library::cimg::argument(pos,argc,argv,9,s0,s1,s2,s3,s4,s5,s6,s7,s8)
  413. // Define and manipulate local neighborhoods.
  414. //
  415. #define CImg_2x2(I,T) T I[4]; \
  416. T& I##cc = I[0]; T& I##nc = I[1]; \
  417. T& I##cn = I[2]; T& I##nn = I[3]; \
  418. I##cc = I##nc = \
  419. I##cn = I##nn = 0
  420. #define CImg_3x3(I,T) T I[9]; \
  421. T& I##pp = I[0]; T& I##cp = I[1]; T& I##np = I[2]; \
  422. T& I##pc = I[3]; T& I##cc = I[4]; T& I##nc = I[5]; \
  423. T& I##pn = I[6]; T& I##cn = I[7]; T& I##nn = I[8]; \
  424. I##pp = I##cp = I##np = \
  425. I##pc = I##cc = I##nc = \
  426. I##pn = I##cn = I##nn = 0
  427. #define CImg_4x4(I,T) T I[16]; \
  428. T& I##pp = I[0]; T& I##cp = I[1]; T& I##np = I[2]; T& I##ap = I[3]; \
  429. T& I##pc = I[4]; T& I##cc = I[5]; T& I##nc = I[6]; T& I##ac = I[7]; \
  430. T& I##pn = I[8]; T& I##cn = I[9]; T& I##nn = I[10]; T& I##an = I[11]; \
  431. T& I##pa = I[12]; T& I##ca = I[13]; T& I##na = I[14]; T& I##aa = I[15]; \
  432. I##pp = I##cp = I##np = I##ap = \
  433. I##pc = I##cc = I##nc = I##ac = \
  434. I##pn = I##cn = I##nn = I##an = \
  435. I##pa = I##ca = I##na = I##aa = 0
  436. #define CImg_5x5(I,T) T I[25]; \
  437. T& I##bb = I[0]; T& I##pb = I[1]; T& I##cb = I[2]; T& I##nb = I[3]; T& I##ab = I[4]; \
  438. T& I##bp = I[5]; T& I##pp = I[6]; T& I##cp = I[7]; T& I##np = I[8]; T& I##ap = I[9]; \
  439. T& I##bc = I[10]; T& I##pc = I[11]; T& I##cc = I[12]; T& I##nc = I[13]; T& I##ac = I[14]; \
  440. T& I##bn = I[15]; T& I##pn = I[16]; T& I##cn = I[17]; T& I##nn = I[18]; T& I##an = I[19]; \
  441. T& I##ba = I[20]; T& I##pa = I[21]; T& I##ca = I[22]; T& I##na = I[23]; T& I##aa = I[24]; \
  442. I##bb = I##pb = I##cb = I##nb = I##ab = \
  443. I##bp = I##pp = I##cp = I##np = I##ap = \
  444. I##bc = I##pc = I##cc = I##nc = I##ac = \
  445. I##bn = I##pn = I##cn = I##nn = I##an = \
  446. I##ba = I##pa = I##ca = I##na = I##aa = 0
  447. #define CImg_2x2x2(I,T) T I[8]; \
  448. T& I##ccc = I[0]; T& I##ncc = I[1]; \
  449. T& I##cnc = I[2]; T& I##nnc = I[3]; \
  450. T& I##ccn = I[4]; T& I##ncn = I[5]; \
  451. T& I##cnn = I[6]; T& I##nnn = I[7]; \
  452. I##ccc = I##ncc = \
  453. I##cnc = I##nnc = \
  454. I##ccn = I##ncn = \
  455. I##cnn = I##nnn = 0
  456. #define CImg_3x3x3(I,T) T I[27]; \
  457. T& I##ppp = I[0]; T& I##cpp = I[1]; T& I##npp = I[2]; \
  458. T& I##pcp = I[3]; T& I##ccp = I[4]; T& I##ncp = I[5]; \
  459. T& I##pnp = I[6]; T& I##cnp = I[7]; T& I##nnp = I[8]; \
  460. T& I##ppc = I[9]; T& I##cpc = I[10]; T& I##npc = I[11]; \
  461. T& I##pcc = I[12]; T& I##ccc = I[13]; T& I##ncc = I[14]; \
  462. T& I##pnc = I[15]; T& I##cnc = I[16]; T& I##nnc = I[17]; \
  463. T& I##ppn = I[18]; T& I##cpn = I[19]; T& I##npn = I[20]; \
  464. T& I##pcn = I[21]; T& I##ccn = I[22]; T& I##ncn = I[23]; \
  465. T& I##pnn = I[24]; T& I##cnn = I[25]; T& I##nnn = I[26]; \
  466. I##ppp = I##cpp = I##npp = \
  467. I##pcp = I##ccp = I##ncp = \
  468. I##pnp = I##cnp = I##nnp = \
  469. I##ppc = I##cpc = I##npc = \
  470. I##pcc = I##ccc = I##ncc = \
  471. I##pnc = I##cnc = I##nnc = \
  472. I##ppn = I##cpn = I##npn = \
  473. I##pcn = I##ccn = I##ncn = \
  474. I##pnn = I##cnn = I##nnn = 0
  475. #define cimg_get2x2(img,x,y,z,v,I) \
  476. I[0] = (img)(x,y,z,v), I[1] = (img)(_n1##x,y,z,v), I[2] = (img)(x,_n1##y,z,v), I[3] = (img)(_n1##x,_n1##y,z,v)
  477. #define cimg_get3x3(img,x,y,z,v,I) \
  478. I[0] = (img)(_p1##x,_p1##y,z,v), I[1] = (img)(x,_p1##y,z,v), I[2] = (img)(_n1##x,_p1##y,z,v), I[3] = (img)(_p1##x,y,z,v), \
  479. I[4] = (img)(x,y,z,v), I[5] = (img)(_n1##x,y,z,v), I[6] = (img)(_p1##x,_n1##y,z,v), I[7] = (img)(x,_n1##y,z,v), \
  480. I[8] = (img)(_n1##x,_n1##y,z,v)
  481. #define cimg_get4x4(img,x,y,z,v,I) \
  482. I[0] = (img)(_p1##x,_p1##y,z,v), I[1] = (img)(x,_p1##y,z,v), I[2] = (img)(_n1##x,_p1##y,z,v), I[3] = (img)(_n2##x,_p1##y,z,v), \
  483. I[4] = (img)(_p1##x,y,z,v), I[5] = (img)(x,y,z,v), I[6] = (img)(_n1##x,y,z,v), I[7] = (img)(_n2##x,y,z,v), \
  484. I[8] = (img)(_p1##x,_n1##y,z,v), I[9] = (img)(x,_n1##y,z,v), I[10] = (img)(_n1##x,_n1##y,z,v), I[11] = (img)(_n2##x,_n1##y,z,v), \
  485. I[12] = (img)(_p1##x,_n2##y,z,v), I[13] = (img)(x,_n2##y,z,v), I[14] = (img)(_n1##x,_n2##y,z,v), I[15] = (img)(_n2##x,_n2##y,z,v)
  486. #define cimg_get5x5(img,x,y,z,v,I) \
  487. I[0] = (img)(_p2##x,_p2##y,z,v), I[1] = (img)(_p1##x,_p2##y,z,v), I[2] = (img)(x,_p2##y,z,v), I[3] = (img)(_n1##x,_p2##y,z,v), \
  488. I[4] = (img)(_n2##x,_p2##y,z,v), I[5] = (img)(_p2##x,_p1##y,z,v), I[6] = (img)(_p1##x,_p1##y,z,v), I[7] = (img)(x,_p1##y,z,v), \
  489. I[8] = (img)(_n1##x,_p1##y,z,v), I[9] = (img)(_n2##x,_p1##y,z,v), I[10] = (img)(_p2##x,y,z,v), I[11] = (img)(_p1##x,y,z,v), \
  490. I[12] = (img)(x,y,z,v), I[13] = (img)(_n1##x,y,z,v), I[14] = (img)(_n2##x,y,z,v), I[15] = (img)(_p2##x,_n1##y,z,v), \
  491. I[16] = (img)(_p1##x,_n1##y,z,v), I[17] = (img)(x,_n1##y,z,v), I[18] = (img)(_n1##x,_n1##y,z,v), I[19] = (img)(_n2##x,_n1##y,z,v), \
  492. I[20] = (img)(_p2##x,_n2##y,z,v), I[21] = (img)(_p1##x,_n2##y,z,v), I[22] = (img)(x,_n2##y,z,v), I[23] = (img)(_n1##x,_n2##y,z,v), \
  493. I[24] = (img)(_n2##x,_n2##y,z,v)
  494. #define cimg_get6x6(img,x,y,z,v,I) \
  495. I[0] = (img)(_p2##x,_p2##y,z,v), I[1] = (img)(_p1##x,_p2##y,z,v), I[2] = (img)(x,_p2##y,z,v), I[3] = (img)(_n1##x,_p2##y,z,v), \
  496. I[4] = (img)(_n2##x,_p2##y,z,v), I[5] = (img)(_n3##x,_p2##y,z,v), I[6] = (img)(_p2##x,_p1##y,z,v), I[7] = (img)(_p1##x,_p1##y,z,v), \
  497. I[8] = (img)(x,_p1##y,z,v), I[9] = (img)(_n1##x,_p1##y,z,v), I[10] = (img)(_n2##x,_p1##y,z,v), I[11] = (img)(_n3##x,_p1##y,z,v), \
  498. I[12] = (img)(_p2##x,y,z,v), I[13] = (img)(_p1##x,y,z,v), I[14] = (img)(x,y,z,v), I[15] = (img)(_n1##x,y,z,v), \
  499. I[16] = (img)(_n2##x,y,z,v), I[17] = (img)(_n3##x,y,z,v), I[18] = (img)(_p2##x,_n1##y,z,v), I[19] = (img)(_p1##x,_n1##y,z,v), \
  500. I[20] = (img)(x,_n1##y,z,v), I[21] = (img)(_n1##x,_n1##y,z,v), I[22] = (img)(_n2##x,_n1##y,z,v), I[23] = (img)(_n3##x,_n1##y,z,v), \
  501. I[24] = (img)(_p2##x,_n2##y,z,v), I[25] = (img)(_p1##x,_n2##y,z,v), I[26] = (img)(x,_n2##y,z,v), I[27] = (img)(_n1##x,_n2##y,z,v), \
  502. I[28] = (img)(_n2##x,_n2##y,z,v), I[29] = (img)(_n3##x,_n2##y,z,v), I[30] = (img)(_p2##x,_n3##y,z,v), I[31] = (img)(_p1##x,_n3##y,z,v), \
  503. I[32] = (img)(x,_n3##y,z,v), I[33] = (img)(_n1##x,_n3##y,z,v), I[34] = (img)(_n2##x,_n3##y,z,v), I[35] = (img)(_n3##x,_n3##y,z,v)
  504. #define cimg_get7x7(img,x,y,z,v,I) \
  505. I[0] = (img)(_p3##x,_p3##y,z,v), I[1] = (img)(_p2##x,_p3##y,z,v), I[2] = (img)(_p1##x,_p3##y,z,v), I[3] = (img)(x,_p3##y,z,v), \
  506. I[4] = (img)(_n1##x,_p3##y,z,v), I[5] = (img)(_n2##x,_p3##y,z,v), I[6] = (img)(_n3##x,_p3##y,z,v), I[7] = (img)(_p3##x,_p2##y,z,v), \
  507. I[8] = (img)(_p2##x,_p2##y,z,v), I[9] = (img)(_p1##x,_p2##y,z,v), I[10] = (img)(x,_p2##y,z,v), I[11] = (img)(_n1##x,_p2##y,z,v), \
  508. I[12] = (img)(_n2##x,_p2##y,z,v), I[13] = (img)(_n3##x,_p2##y,z,v), I[14] = (img)(_p3##x,_p1##y,z,v), I[15] = (img)(_p2##x,_p1##y,z,v), \
  509. I[16] = (img)(_p1##x,_p1##y,z,v), I[17] = (img)(x,_p1##y,z,v), I[18] = (img)(_n1##x,_p1##y,z,v), I[19] = (img)(_n2##x,_p1##y,z,v), \
  510. I[20] = (img)(_n3##x,_p1##y,z,v), I[21] = (img)(_p3##x,y,z,v), I[22] = (img)(_p2##x,y,z,v), I[23] = (img)(_p1##x,y,z,v), \
  511. I[24] = (img)(x,y,z,v), I[25] = (img)(_n1##x,y,z,v), I[26] = (img)(_n2##x,y,z,v), I[27] = (img)(_n3##x,y,z,v), \
  512. I[28] = (img)(_p3##x,_n1##y,z,v), I[29] = (img)(_p2##x,_n1##y,z,v), I[30] = (img)(_p1##x,_n1##y,z,v), I[31] = (img)(x,_n1##y,z,v), \
  513. I[32] = (img)(_n1##x,_n1##y,z,v), I[33] = (img)(_n2##x,_n1##y,z,v), I[34] = (img)(_n3##x,_n1##y,z,v), I[35] = (img)(_p3##x,_n2##y,z,v), \
  514. I[36] = (img)(_p2##x,_n2##y,z,v), I[37] = (img)(_p1##x,_n2##y,z,v), I[38] = (img)(x,_n2##y,z,v), I[39] = (img)(_n1##x,_n2##y,z,v), \
  515. I[40] = (img)(_n2##x,_n2##y,z,v), I[41] = (img)(_n3##x,_n2##y,z,v), I[42] = (img)(_p3##x,_n3##y,z,v), I[43] = (img)(_p2##x,_n3##y,z,v), \
  516. I[44] = (img)(_p1##x,_n3##y,z,v), I[45] = (img)(x,_n3##y,z,v), I[46] = (img)(_n1##x,_n3##y,z,v), I[47] = (img)(_n2##x,_n3##y,z,v), \
  517. I[48] = (img)(_n3##x,_n3##y,z,v)
  518. #define cimg_get8x8(img,x,y,z,v,I) \
  519. I[0] = (img)(_p3##x,_p3##y,z,v), I[1] = (img)(_p2##x,_p3##y,z,v), I[2] = (img)(_p1##x,_p3##y,z,v), I[3] = (img)(x,_p3##y,z,v), \
  520. I[4] = (img)(_n1##x,_p3##y,z,v), I[5] = (img)(_n2##x,_p3##y,z,v), I[6] = (img)(_n3##x,_p3##y,z,v), I[7] = (img)(_n4##x,_p3##y,z,v), \
  521. I[8] = (img)(_p3##x,_p2##y,z,v), I[9] = (img)(_p2##x,_p2##y,z,v), I[10] = (img)(_p1##x,_p2##y,z,v), I[11] = (img)(x,_p2##y,z,v), \
  522. I[12] = (img)(_n1##x,_p2##y,z,v), I[13] = (img)(_n2##x,_p2##y,z,v), I[14] = (img)(_n3##x,_p2##y,z,v), I[15] = (img)(_n4##x,_p2##y,z,v), \
  523. I[16] = (img)(_p3##x,_p1##y,z,v), I[17] = (img)(_p2##x,_p1##y,z,v), I[18] = (img)(_p1##x,_p1##y,z,v), I[19] = (img)(x,_p1##y,z,v), \
  524. I[20] = (img)(_n1##x,_p1##y,z,v), I[21] = (img)(_n2##x,_p1##y,z,v), I[22] = (img)(_n3##x,_p1##y,z,v), I[23] = (img)(_n4##x,_p1##y,z,v), \
  525. I[24] = (img)(_p3##x,y,z,v), I[25] = (img)(_p2##x,y,z,v), I[26] = (img)(_p1##x,y,z,v), I[27] = (img)(x,y,z,v), \
  526. I[28] = (img)(_n1##x,y,z,v), I[29] = (img)(_n2##x,y,z,v), I[30] = (img)(_n3##x,y,z,v), I[31] = (img)(_n4##x,y,z,v), \
  527. I[32] = (img)(_p3##x,_n1##y,z,v), I[33] = (img)(_p2##x,_n1##y,z,v), I[34] = (img)(_p1##x,_n1##y,z,v), I[35] = (img)(x,_n1##y,z,v), \
  528. I[36] = (img)(_n1##x,_n1##y,z,v), I[37] = (img)(_n2##x,_n1##y,z,v), I[38] = (img)(_n3##x,_n1##y,z,v), I[39] = (img)(_n4##x,_n1##y,z,v), \
  529. I[40] = (img)(_p3##x,_n2##y,z,v), I[41] = (img)(_p2##x,_n2##y,z,v), I[42] = (img)(_p1##x,_n2##y,z,v), I[43] = (img)(x,_n2##y,z,v), \
  530. I[44] = (img)(_n1##x,_n2##y,z,v), I[45] = (img)(_n2##x,_n2##y,z,v), I[46] = (img)(_n3##x,_n2##y,z,v), I[47] = (img)(_n4##x,_n2##y,z,v), \
  531. I[48] = (img)(_p3##x,_n3##y,z,v), I[49] = (img)(_p2##x,_n3##y,z,v), I[50] = (img)(_p1##x,_n3##y,z,v), I[51] = (img)(x,_n3##y,z,v), \
  532. I[52] = (img)(_n1##x,_n3##y,z,v), I[53] = (img)(_n2##x,_n3##y,z,v), I[54] = (img)(_n3##x,_n3##y,z,v), I[55] = (img)(_n4##x,_n3##y,z,v), \
  533. I[56] = (img)(_p3##x,_n4##y,z,v), I[57] = (img)(_p2##x,_n4##y,z,v), I[58] = (img)(_p1##x,_n4##y,z,v), I[59] = (img)(x,_n4##y,z,v), \
  534. I[60] = (img)(_n1##x,_n4##y,z,v), I[61] = (img)(_n2##x,_n4##y,z,v), I[62] = (img)(_n3##x,_n4##y,z,v), I[63] = (img)(_n4##x,_n4##y,z,v);
  535. #define cimg_get9x9(img,x,y,z,v,I) \
  536. I[0] = (img)(_p4##x,_p4##y,z,v), I[1] = (img)(_p3##x,_p4##y,z,v), I[2] = (img)(_p2##x,_p4##y,z,v), I[3] = (img)(_p1##x,_p4##y,z,v), \
  537. I[4] = (img)(x,_p4##y,z,v), I[5] = (img)(_n1##x,_p4##y,z,v), I[6] = (img)(_n2##x,_p4##y,z,v), I[7] = (img)(_n3##x,_p4##y,z,v), \
  538. I[8] = (img)(_n4##x,_p4##y,z,v), I[9] = (img)(_p4##x,_p3##y,z,v), I[10] = (img)(_p3##x,_p3##y,z,v), I[11] = (img)(_p2##x,_p3##y,z,v), \
  539. I[12] = (img)(_p1##x,_p3##y,z,v), I[13] = (img)(x,_p3##y,z,v), I[14] = (img)(_n1##x,_p3##y,z,v), I[15] = (img)(_n2##x,_p3##y,z,v), \
  540. I[16] = (img)(_n3##x,_p3##y,z,v), I[17] = (img)(_n4##x,_p3##y,z,v), I[18] = (img)(_p4##x,_p2##y,z,v), I[19] = (img)(_p3##x,_p2##y,z,v), \
  541. I[20] = (img)(_p2##x,_p2##y,z,v), I[21] = (img)(_p1##x,_p2##y,z,v), I[22] = (img)(x,_p2##y,z,v), I[23] = (img)(_n1##x,_p2##y,z,v), \
  542. I[24] = (img)(_n2##x,_p2##y,z,v), I[25] = (img)(_n3##x,_p2##y,z,v), I[26] = (img)(_n4##x,_p2##y,z,v), I[27] = (img)(_p4##x,_p1##y,z,v), \
  543. I[28] = (img)(_p3##x,_p1##y,z,v), I[29] = (img)(_p2##x,_p1##y,z,v), I[30] = (img)(_p1##x,_p1##y,z,v), I[31] = (img)(x,_p1##y,z,v), \
  544. I[32] = (img)(_n1##x,_p1##y,z,v), I[33] = (img)(_n2##x,_p1##y,z,v), I[34] = (img)(_n3##x,_p1##y,z,v), I[35] = (img)(_n4##x,_p1##y,z,v), \
  545. I[36] = (img)(_p4##x,y,z,v), I[37] = (img)(_p3##x,y,z,v), I[38] = (img)(_p2##x,y,z,v), I[39] = (img)(_p1##x,y,z,v), \
  546. I[40] = (img)(x,y,z,v), I[41] = (img)(_n1##x,y,z,v), I[42] = (img)(_n2##x,y,z,v), I[43] = (img)(_n3##x,y,z,v), \
  547. I[44] = (img)(_n4##x,y,z,v), I[45] = (img)(_p4##x,_n1##y,z,v), I[46] = (img)(_p3##x,_n1##y,z,v), I[47] = (img)(_p2##x,_n1##y,z,v), \
  548. I[48] = (img)(_p1##x,_n1##y,z,v), I[49] = (img)(x,_n1##y,z,v), I[50] = (img)(_n1##x,_n1##y,z,v), I[51] = (img)(_n2##x,_n1##y,z,v), \
  549. I[52] = (img)(_n3##x,_n1##y,z,v), I[53] = (img)(_n4##x,_n1##y,z,v), I[54] = (img)(_p4##x,_n2##y,z,v), I[55] = (img)(_p3##x,_n2##y,z,v), \
  550. I[56] = (img)(_p2##x,_n2##y,z,v), I[57] = (img)(_p1##x,_n2##y,z,v), I[58] = (img)(x,_n2##y,z,v), I[59] = (img)(_n1##x,_n2##y,z,v), \
  551. I[60] = (img)(_n2##x,_n2##y,z,v), I[61] = (img)(_n3##x,_n2##y,z,v), I[62] = (img)(_n4##x,_n2##y,z,v), I[63] = (img)(_p4##x,_n3##y,z,v), \
  552. I[64] = (img)(_p3##x,_n3##y,z,v), I[65] = (img)(_p2##x,_n3##y,z,v), I[66] = (img)(_p1##x,_n3##y,z,v), I[67] = (img)(x,_n3##y,z,v), \
  553. I[68] = (img)(_n1##x,_n3##y,z,v), I[69] = (img)(_n2##x,_n3##y,z,v), I[70] = (img)(_n3##x,_n3##y,z,v), I[71] = (img)(_n4##x,_n3##y,z,v), \
  554. I[72] = (img)(_p4##x,_n4##y,z,v), I[73] = (img)(_p3##x,_n4##y,z,v), I[74] = (img)(_p2##x,_n4##y,z,v), I[75] = (img)(_p1##x,_n4##y,z,v), \
  555. I[76] = (img)(x,_n4##y,z,v), I[77] = (img)(_n1##x,_n4##y,z,v), I[78] = (img)(_n2##x,_n4##y,z,v), I[79] = (img)(_n3##x,_n4##y,z,v), \
  556. I[80] = (img)(_n4##x,_n4##y,z,v)
  557. #define cimg_get2x2x2(img,x,y,z,v,I) \
  558. I[0] = (img)(x,y,z,v), I[1] = (img)(_n1##x,y,z,v), I[2] = (img)(x,_n1##y,z,v), I[3] = (img)(_n1##x,_n1##y,z,v), \
  559. I[4] = (img)(x,y,_n1##z,v), I[5] = (img)(_n1##x,y,_n1##z,v), I[6] = (img)(x,_n1##y,_n1##z,v), I[7] = (img)(_n1##x,_n1##y,_n1##z,v)
  560. #define cimg_get3x3x3(img,x,y,z,v,I) \
  561. I[0] = (img)(_p1##x,_p1##y,_p1##z,v), I[1] = (img)(x,_p1##y,_p1##z,v), I[2] = (img)(_n1##x,_p1##y,_p1##z,v), \
  562. I[3] = (img)(_p1##x,y,_p1##z,v), I[4] = (img)(x,y,_p1##z,v), I[5] = (img)(_n1##x,y,_p1##z,v), \
  563. I[6] = (img)(_p1##x,_n1##y,_p1##z,v), I[7] = (img)(x,_n1##y,_p1##z,v), I[8] = (img)(_n1##x,_n1##y,_p1##z,v), \
  564. I[9] = (img)(_p1##x,_p1##y,z,v), I[10] = (img)(x,_p1##y,z,v), I[11] = (img)(_n1##x,_p1##y,z,v), \
  565. I[12] = (img)(_p1##x,y,z,v), I[13] = (img)(x,y,z,v), I[14] = (img)(_n1##x,y,z,v), \
  566. I[15] = (img)(_p1##x,_n1##y,z,v), I[16] = (img)(x,_n1##y,z,v), I[17] = (img)(_n1##x,_n1##y,z,v), \
  567. I[18] = (img)(_p1##x,_p1##y,_n1##z,v), I[19] = (img)(x,_p1##y,_n1##z,v), I[20] = (img)(_n1##x,_p1##y,_n1##z,v), \
  568. I[21] = (img)(_p1##x,y,_n1##z,v), I[22] = (img)(x,y,_n1##z,v), I[23] = (img)(_n1##x,y,_n1##z,v), \
  569. I[24] = (img)(_p1##x,_n1##y,_n1##z,v), I[25] = (img)(x,_n1##y,_n1##z,v), I[26] = (img)(_n1##x,_n1##y,_n1##z,v)
  570. // Define various image loops.
  571. //
  572. // These macros generally avoid the use of iterators, but you are not forced to used them !
  573. //
  574. #define cimg_for(img,ptr,T_ptr) for (T_ptr *ptr = (img).data + (img).size(); (ptr--)>(img).data; )
  575. #define cimg_foroff(img,off) for (unsigned int off = 0, _max##off = (unsigned int)(img).size(); off<_max##off; ++off)
  576. #define cimglist_for(list,l) for (unsigned int l = 0; l<(list).size; ++l)
  577. #define cimglist_apply(list,fn) cimglist_for(list,__##fn) (list)[__##fn].fn
  578. #define cimg_for1(bound,i) for (int i = 0; i<(int)(bound); ++i)
  579. #define cimg_forX(img,x) cimg_for1((img).width,x)
  580. #define cimg_forY(img,y) cimg_for1((img).height,y)
  581. #define cimg_forZ(img,z) cimg_for1((img).depth,z)
  582. #define cimg_forV(img,v) cimg_for1((img).dim,v)
  583. #define cimg_forXY(img,x,y) cimg_forY(img,y) cimg_forX(img,x)
  584. #define cimg_forXZ(img,x,z) cimg_forZ(img,z) cimg_forX(img,x)
  585. #define cimg_forYZ(img,y,z) cimg_forZ(img,z) cimg_forY(img,y)
  586. #define cimg_forXV(img,x,v) cimg_forV(img,v) cimg_forX(img,x)
  587. #define cimg_forYV(img,y,v) cimg_forV(img,v) cimg_forY(img,y)
  588. #define cimg_forZV(img,z,v) cimg_forV(img,v) cimg_forZ(img,z)
  589. #define cimg_forXYZ(img,x,y,z) cimg_forZ(img,z) cimg_forXY(img,x,y)
  590. #define cimg_forXYV(img,x,y,v) cimg_forV(img,v) cimg_forXY(img,x,y)
  591. #define cimg_forXZV(img,x,z,v) cimg_forV(img,v) cimg_forXZ(img,x,z)
  592. #define cimg_forYZV(img,y,z,v) cimg_forV(img,v) cimg_forYZ(img,y,z)
  593. #define cimg_forXYZV(img,x,y,z,v) cimg_forV(img,v) cimg_forXYZ(img,x,y,z)
  594. #define cimg_for_in1(bound,i0,i1,i) \
  595. for (int i = (int)(i0)<0?0:(int)(i0), _max##i = (int)(i1)<(int)(bound)?(int)(i1):(int)(bound)-1; i<=_max##i; ++i)
  596. #define cimg_for_inX(img,x0,x1,x) cimg_for_in1((img).width,x0,x1,x)
  597. #define cimg_for_inY(img,y0,y1,y) cimg_for_in1((img).height,y0,y1,y)
  598. #define cimg_for_inZ(img,z0,z1,z) cimg_for_in1((img).depth,z0,z1,z)
  599. #define cimg_for_inV(img,v0,v1,v) cimg_for_in1((img).dim,v0,v1,v)
  600. #define cimg_for_inXY(img,x0,y0,x1,y1,x,y) cimg_for_inY(img,y0,y1,y) cimg_for_inX(img,x0,x1,x)
  601. #define cimg_for_inXZ(img,x0,z0,x1,z1,x,z) cimg_for_inZ(img,z0,z1,z) cimg_for_inX(img,x0,x1,x)
  602. #define cimg_for_inXV(img,x0,v0,x1,v1,x,v) cimg_for_inV(img,v0,v1,v) cimg_for_inX(img,x0,x1,x)
  603. #define cimg_for_inYZ(img,y0,z0,y1,z1,y,z) cimg_for_inZ(img,x0,z1,z) cimg_for_inY(img,y0,y1,y)
  604. #define cimg_for_inYV(img,y0,v0,y1,v1,y,v) cimg_for_inV(img,v0,v1,v) cimg_for_inY(img,y0,y1,y)
  605. #define cimg_for_inZV(img,z0,v0,z1,v1,z,v) cimg_for_inV(img,v0,v1,v) cimg_for_inZ(img,z0,z1,z)
  606. #define cimg_for_inXYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_inZ(img,z0,z1,z) cimg_for_inXY(img,x0,y0,x1,y1,x,y)
  607. #define cimg_for_inXYV(img,x0,y0,v0,x1,y1,v1,x,y,v) cimg_for_inV(img,v0,v1,v) cimg_for_inXY(img,x0,y0,x1,y1,x,y)
  608. #define cimg_for_inXZV(img,x0,z0,v0,x1,z1,v1,x,z,v) cimg_for_inV(img,v0,v1,v) cimg_for_inXZ(img,x0,z0,x1,z1,x,z)
  609. #define cimg_for_inYZV(img,y0,z0,v0,y1,z1,v1,y,z,v) cimg_for_inV(img,v0,v1,v) cimg_for_inYZ(img,y0,z0,y1,z1,y,z)
  610. #define cimg_for_inXYZV(img,x0,y0,z0,v0,x1,y1,z1,v1,x,y,z,v) cimg_for_inV(img,v0,v1,v) cimg_for_inXYZ(img,x0,y0,z0,x1,y1,z1,x,y,z)
  611. #define cimg_for_insideX(img,x,n) cimg_for_inX(img,n,(img).width-1-(n),x)
  612. #define cimg_for_insideY(img,y,n) cimg_for_inY(img,n,(img).height-1-(n),y)
  613. #define cimg_for_insideZ(img,z,n) cimg_for_inZ(img,n,(img).depth-1-(n),z)
  614. #define cimg_for_insideV(img,v,n) cimg_for_inV(img,n,(img).dim-1-(n),v)
  615. #define cimg_for_insideXY(img,x,y,n) cimg_for_inXY(img,n,n,(img).width-1-(n),(img).height-1-(n),x,y)
  616. #define cimg_for_insideXYZ(img,x,y,z,n) cimg_for_inXYZ(img,n,n,n,(img).width-1-(n),(img).height-1-(n),(img).depth-1-(n),x,y,z)
  617. #define cimg_for_insideXYZV(img,x,y,z,v,n) cimg_for_inXYZ(img,n,n,n,(img).width-1-(n),(img).height-1-(n),(img).depth-1-(n),x,y,z)
  618. #define cimg_for_out1(boundi,i0,i1,i) \
  619. for (int i = (int)(i0)>0?0:(int)(i1)+1; i<(int)(boundi); ++i, i = i==(int)(i0)?(int)(i1)+1:i)
  620. #define cimg_for_out2(boundi,boundj,i0,j0,i1,j1,i,j) \
  621. for (int j = 0; j<(int)(boundj); ++j) \
  622. for (int _n1j = (int)(j<(int)(j0) || j>(int)(j1)), i = _n1j?0:(int)(i0)>0?0:(int)(i1)+1; i<(int)(boundi); \
  623. ++i, i = _n1j?i:(i==(int)(i0)?(int)(i1)+1:i))
  624. #define cimg_for_out3(boundi,boundj,boundk,i0,j0,k0,i1,j1,k1,i,j,k) \
  625. for (int k = 0; k<(int)(boundk); ++k) \
  626. for (int _n1k = (int)(k<(int)(k0) || k>(int)(k1)), j = 0; j<(int)(boundj); ++j) \
  627. for (int _n1j = (int)(j<(int)(j0) || j>(int)(j1)), i = _n1j || _n1k?0:(int)(i0)>0?0:(int)(i1)+1; i<(int)(boundi); \
  628. ++i, i = _n1j || _n1k?i:(i==(int)(i0)?(int)(i1)+1:i))
  629. #define cimg_for_out4(boundi,boundj,boundk,boundl,i0,j0,k0,l0,i1,j1,k1,l1,i,j,k,l) \
  630. for (int l = 0; l<(int)(boundl); ++l) \
  631. for (int _n1l = (int)(l<(int)(l0) || l>(int)(l1)), k = 0; k<(int)(boundk); ++k) \
  632. for (int _n1k = (int)(k<(int)(k0) || k>(int)(k1)), j = 0; j<(int)(boundj); ++j) \
  633. for (int _n1j = (int)(j<(int)(j0) || j>(int)(j1)), i = _n1j || _n1k || _n1l?0:(int)(i0)>0?0:(int)(i1)+1; i<(int)(boundi); \
  634. ++i, i = _n1j || _n1k || _n1l?i:(i==(int)(i0)?(int)(i1)+1:i))
  635. #define cimg_for_outX(img,x0,x1,x) cimg_for_out1((img).width,x0,x1,x)
  636. #define cimg_for_outY(img,y0,y1,y) cimg_for_out1((img).height,y0,y1,y)
  637. #define cimg_for_outZ(img,z0,z1,z) cimg_for_out1((img).depth,z0,z1,z)
  638. #define cimg_for_outV(img,v0,v1,v) cimg_for_out1((img).dim,v0,v1,v)
  639. #define cimg_for_outXY(img,x0,y0,x1,y1,x,y) cimg_for_out2((img).width,(img).height,x0,y0,x1,y1,x,y)
  640. #define cimg_for_outXZ(img,x0,z0,x1,z1,x,z) cimg_for_out2((img).width,(img).depth,x0,z0,x1,z1,x,z)
  641. #define cimg_for_outXV(img,x0,v0,x1,v1,x,v) cimg_for_out2((img).width,(img).dim,x0,v0,x1,v1,x,v)
  642. #define cimg_for_outYZ(img,y0,z0,y1,z1,y,z) cimg_for_out2((img).height,(img).depth,y0,z0,y1,z1,y,z)
  643. #define cimg_for_outYV(img,y0,v0,y1,v1,y,v) cimg_for_out2((img).height,(img).dim,y0,v0,y1,v1,y,v)
  644. #define cimg_for_outZV(img,z0,v0,z1,v1,z,v) cimg_for_out2((img).depth,(img).dim,z0,v0,z1,v1,z,v)
  645. #define cimg_for_outXYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_out3((img).width,(img).height,(img).depth,x0,y0,z0,x1,y1,z1,x,y,z)
  646. #define cimg_for_outXYV(img,x0,y0,v0,x1,y1,v1,x,y,v) cimg_for_out3((img).width,(img).height,(img).dim,x0,y0,v0,x1,y1,v1,x,y,v)
  647. #define cimg_for_outXZV(img,x0,z0,v0,x1,z1,v1,x,z,v) cimg_for_out3((img).width,(img).depth,(img).dim,x0,z0,v0,x1,z1,v1,x,z,v)
  648. #define cimg_for_outYZV(img,y0,z0,v0,y1,z1,v1,y,z,v) cimg_for_out3((img).height,(img).depth,(img).dim,y0,z0,v0,y1,z1,v1,y,z,v)
  649. #define cimg_for_outXYZV(img,x0,y0,z0,v0,x1,y1,z1,v1,x,y,z,v) \
  650. cimg_for_out4((img).width,(img).height,(img).depth,(img).dim,x0,y0,z0,v0,x1,y1,z1,v1,x,y,z,v)
  651. #define cimg_for_borderX(img,x,n) cimg_for_outX(img,n,(img).width-1-(n),x)
  652. #define cimg_for_borderY(img,y,n) cimg_for_outY(img,n,(img).height-1-(n),y)
  653. #define cimg_for_borderZ(img,z,n) cimg_for_outZ(img,n,(img).depth-1-(n),z)
  654. #define cimg_for_borderV(img,v,n) cimg_for_outV(img,n,(img).dim-1-(n),v)
  655. #define cimg_for_borderXY(img,x,y,n) cimg_for_outXY(img,n,n,(img).width-1-(n),(img).height-1-(n),x,y)
  656. #define cimg_for_borderXYZ(img,x,y,z,n) cimg_for_outXYZ(img,n,n,n,(img).width-1-(n),(img).height-1-(n),(img).depth-1-(n),x,y,z)
  657. #define cimg_for_borderXYZV(img,x,y,z,v,n) \
  658. cimg_for_outXYZV(img,n,n,n,n,(img).width-1-(n),(img).height-1-(n),(img).depth-1-(n),(img).dim-1-(n),x,y,z,v)
  659. #define cimg_for_spiralXY(img,x,y) \
  660. for (int x = 0, y = 0, _n1##x = 1, _n1##y = (int)((img).width*(img).height); _n1##y; \
  661. --_n1##y, _n1##x += (_n1##x>>2)-((!(_n1##x&3)?--y:((_n1##x&3)==1?(img).width-1-++x:((_n1##x&3)==2?(img).height-1-++y:--x))))?0:1)
  662. #define cimg_for_lineXY(x,y,x0,y0,x1,y1) \
  663. for (int x = (int)(x0), y = (int)(y0), _sx = 1, _sy = 1, _steep = 0, \
  664. _dx=(x1)>(x0)?(int)(x1)-(int)(x0):(_sx=-1,(int)(x0)-(int)(x1)), \
  665. _dy=(y1)>(y0)?(int)(y1)-(int)(y0):(_sy=-1,(int)(y0)-(int)(y1)), \
  666. _counter = _dx, \
  667. _err = _dx>_dy?(_dy>>1):((_steep=1),(_counter=_dy),(_dx>>1)); \
  668. _counter>=0; \
  669. --_counter, x+=_steep? \
  670. (y+=_sy,(_err-=_dx)<0?_err+=_dy,_sx:0): \
  671. (y+=(_err-=_dy)<0?_err+=_dx,_sy:0,_sx))
  672. #define cimg_for2(bound,i) \
  673. for (int i = 0, _n1##i = 1>=(bound)?(int)(bound)-1:1; \
  674. _n1##i<(int)(bound) || i==--_n1##i; \
  675. ++i, ++_n1##i)
  676. #define cimg_for2X(img,x) cimg_for2((img).width,x)
  677. #define cimg_for2Y(img,y) cimg_for2((img).height,y)
  678. #define cimg_for2Z(img,z) cimg_for2((img).depth,z)
  679. #define cimg_for2V(img,v) cimg_for2((img).dim,v)
  680. #define cimg_for2XY(img,x,y) cimg_for2Y(img,y) cimg_for2X(img,x)
  681. #define cimg_for2XZ(img,x,z) cimg_for2Z(img,z) cimg_for2X(img,x)
  682. #define cimg_for2XV(img,x,v) cimg_for2V(img,v) cimg_for2X(img,x)
  683. #define cimg_for2YZ(img,y,z) cimg_for2Z(img,z) cimg_for2Y(img,y)
  684. #define cimg_for2YV(img,y,v) cimg_for2V(img,v) cimg_for2Y(img,y)
  685. #define cimg_for2ZV(img,z,v) cimg_for2V(img,v) cimg_for2Z(img,z)
  686. #define cimg_for2XYZ(img,x,y,z) cimg_for2Z(img,z) cimg_for2XY(img,x,y)
  687. #define cimg_for2XZV(img,x,z,v) cimg_for2V(img,v) cimg_for2XZ(img,x,z)
  688. #define cimg_for2YZV(img,y,z,v) cimg_for2V(img,v) cimg_for2YZ(img,y,z)
  689. #define cimg_for2XYZV(img,x,y,z,v) cimg_for2V(img,v) cimg_for2XYZ(img,x,y,z)
  690. #define cimg_for_in2(bound,i0,i1,i) \
  691. for (int i = (int)(i0)<0?0:(int)(i0), \
  692. _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1; \
  693. i<=(int)(i1) && (_n1##i<(int)(bound) || i==--_n1##i); \
  694. ++i, ++_n1##i)
  695. #define cimg_for_in2X(img,x0,x1,x) cimg_for_in2((img).width,x0,x1,x)
  696. #define cimg_for_in2Y(img,y0,y1,y) cimg_for_in2((img).height,y0,y1,y)
  697. #define cimg_for_in2Z(img,z0,z1,z) cimg_for_in2((img).depth,z0,z1,z)
  698. #define cimg_for_in2V(img,v0,v1,v) cimg_for_in2((img).dim,v0,v1,v)
  699. #define cimg_for_in2XY(img,x0,y0,x1,y1,x,y) cimg_for_in2Y(img,y0,y1,y) cimg_for_in2X(img,x0,x1,x)
  700. #define cimg_for_in2XZ(img,x0,z0,x1,z1,x,z) cimg_for_in2Z(img,z0,z1,z) cimg_for_in2X(img,x0,x1,x)
  701. #define cimg_for_in2XV(img,x0,v0,x1,v1,x,v) cimg_for_in2V(img,v0,v1,v) cimg_for_in2X(img,x0,x1,x)
  702. #define cimg_for_in2YZ(img,y0,z0,y1,z1,y,z) cimg_for_in2Z(img,z0,z1,z) cimg_for_in2Y(img,y0,y1,y)
  703. #define cimg_for_in2YV(img,y0,v0,y1,v1,y,v) cimg_for_in2V(img,v0,v1,v) cimg_for_in2Y(img,y0,y1,y)
  704. #define cimg_for_in2ZV(img,z0,v0,z1,v1,z,v) cimg_for_in2V(img,v0,v1,v) cimg_for_in2Z(img,z0,z1,z)
  705. #define cimg_for_in2XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in2Z(img,z0,z1,z) cimg_for_in2XY(img,x0,y0,x1,y1,x,y)
  706. #define cimg_for_in2XZV(img,x0,z0,v0,x1,y1,v1,x,z,v) cimg_for_in2V(img,v0,v1,v) cimg_for_in2XZ(img,x0,y0,x1,y1,x,z)
  707. #define cimg_for_in2YZV(img,y0,z0,v0,y1,z1,v1,y,z,v) cimg_for_in2V(img,v0,v1,v) cimg_for_in2YZ(img,y0,z0,y1,z1,y,z)
  708. #define cimg_for_in2XYZV(img,x0,y0,z0,v0,x1,y1,z1,v1,x,y,z,v) cimg_for_in2V(img,v0,v1,v) cimg_for_in2XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z)
  709. #define cimg_for3(bound,i) \
  710. for (int i = 0, _p1##i = 0, \
  711. _n1##i = 1>=(bound)?(int)(bound)-1:1; \
  712. _n1##i<(int)(bound) || i==--_n1##i; \
  713. _p1##i = i++, ++_n1##i)
  714. #define cimg_for3X(img,x) cimg_for3((img).width,x)
  715. #define cimg_for3Y(img,y) cimg_for3((img).height,y)
  716. #define cimg_for3Z(img,z) cimg_for3((img).depth,z)
  717. #define cimg_for3V(img,v) cimg_for3((img).dim,v)
  718. #define cimg_for3XY(img,x,y) cimg_for3Y(img,y) cimg_for3X(img,x)
  719. #define cimg_for3XZ(img,x,z) cimg_for3Z(img,z) cimg_for3X(img,x)
  720. #define cimg_for3XV(img,x,v) cimg_for3V(img,v) cimg_for3X(img,x)
  721. #define cimg_for3YZ(img,y,z) cimg_for3Z(img,z) cimg_for3Y(img,y)
  722. #define cimg_for3YV(img,y,v) cimg_for3V(img,v) cimg_for3Y(img,y)
  723. #define cimg_for3ZV(img,z,v) cimg_for3V(img,v) cimg_for3Z(img,z)
  724. #define cimg_for3XYZ(img,x,y,z) cimg_for3Z(img,z) cimg_for3XY(img,x,y)
  725. #define cimg_for3XZV(img,x,z,v) cimg_for3V(img,v) cimg_for3XZ(img,x,z)
  726. #define cimg_for3YZV(img,y,z,v) cimg_for3V(img,v) cimg_for3YZ(img,y,z)
  727. #define cimg_for3XYZV(img,x,y,z,v) cimg_for3V(img,v) cimg_for3XYZ(img,x,y,z)
  728. #define cimg_for_in3(bound,i0,i1,i) \
  729. for (int i = (int)(i0)<0?0:(int)(i0), \
  730. _p1##i = i-1<0?0:i-1, \
  731. _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1; \
  732. i<=(int)(i1) && (_n1##i<(int)(bound) || i==--_n1##i); \
  733. _p1##i = i++, ++_n1##i)
  734. #define cimg_for_in3X(img,x0,x1,x) cimg_for_in3((img).width,x0,x1,x)
  735. #define cimg_for_in3Y(img,y0,y1,y) cimg_for_in3((img).height,y0,y1,y)
  736. #define cimg_for_in3Z(img,z0,z1,z) cimg_for_in3((img).depth,z0,z1,z)
  737. #define cimg_for_in3V(img,v0,v1,v) cimg_for_in3((img).dim,v0,v1,v)
  738. #define cimg_for_in3XY(img,x0,y0,x1,y1,x,y) cimg_for_in3Y(img,y0,y1,y) cimg_for_in3X(img,x0,x1,x)
  739. #define cimg_for_in3XZ(img,x0,z0,x1,z1,x,z) cimg_for_in3Z(img,z0,z1,z) cimg_for_in3X(img,x0,x1,x)
  740. #define cimg_for_in3XV(img,x0,v0,x1,v1,x,v) cimg_for_in3V(img,v0,v1,v) cimg_for_in3X(img,x0,x1,x)
  741. #define cimg_for_in3YZ(img,y0,z0,y1,z1,y,z) cimg_for_in3Z(img,z0,z1,z) cimg_for_in3Y(img,y0,y1,y)
  742. #define cimg_for_in3YV(img,y0,v0,y1,v1,y,v) cimg_for_in3V(img,v0,v1,v) cimg_for_in3Y(img,y0,y1,y)
  743. #define cimg_for_in3ZV(img,z0,v0,z1,v1,z,v) cimg_for_in3V(img,v0,v1,v) cimg_for_in3Z(img,z0,z1,z)
  744. #define cimg_for_in3XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in3Z(img,z0,z1,z) cimg_for_in3XY(img,x0,y0,x1,y1,x,y)
  745. #define cimg_for_in3XZV(img,x0,z0,v0,x1,y1,v1,x,z,v) cimg_for_in3V(img,v0,v1,v) cimg_for_in3XZ(img,x0,y0,x1,y1,x,z)
  746. #define cimg_for_in3YZV(img,y0,z0,v0,y1,z1,v1,y,z,v) cimg_for_in3V(img,v0,v1,v) cimg_for_in3YZ(img,y0,z0,y1,z1,y,z)
  747. #define cimg_for_in3XYZV(img,x0,y0,z0,v0,x1,y1,z1,v1,x,y,z,v) cimg_for_in3V(img,v0,v1,v) cimg_for_in3XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z)
  748. #define cimg_for4(bound,i) \
  749. for (int i = 0, _p1##i = 0, _n1##i = 1>=(bound)?(int)(bound)-1:1, \
  750. _n2##i = 2>=(bound)?(int)(bound)-1:2; \
  751. _n2##i<(int)(bound) || _n1##i==--_n2##i || i==(_n2##i = --_n1##i); \
  752. _p1##i = i++, ++_n1##i, ++_n2##i)
  753. #define cimg_for4X(img,x) cimg_for4((img).width,x)
  754. #define cimg_for4Y(img,y) cimg_for4((img).height,y)
  755. #define cimg_for4Z(img,z) cimg_for4((img).depth,z)
  756. #define cimg_for4V(img,v) cimg_for4((img).dim,v)
  757. #define cimg_for4XY(img,x,y) cimg_for4Y(img,y) cimg_for4X(img,x)
  758. #define cimg_for4XZ(img,x,z) cimg_for4Z(img,z) cimg_for4X(img,x)
  759. #define cimg_for4XV(img,x,v) cimg_for4V(img,v) cimg_for4X(img,x)
  760. #define cimg_for4YZ(img,y,z) cimg_for4Z(img,z) cimg_for4Y(img,y)
  761. #define cimg_for4YV(img,y,v) cimg_for4V(img,v) cimg_for4Y(img,y)
  762. #define cimg_for4ZV(img,z,v) cimg_for4V(img,v) cimg_for4Z(img,z)
  763. #define cimg_for4XYZ(img,x,y,z) cimg_for4Z(img,z) cimg_for4XY(img,x,y)
  764. #define cimg_for4XZV(img,x,z,v) cimg_for4V(img,v) cimg_for4XZ(img,x,z)
  765. #define cimg_for4YZV(img,y,z,v) cimg_for4V(img,v) cimg_for4YZ(img,y,z)
  766. #define cimg_for4XYZV(img,x,y,z,v) cimg_for4V(img,v) cimg_for4XYZ(img,x,y,z)
  767. #define cimg_for_in4(bound,i0,i1,i) \
  768. for (int i = (int)(i0)<0?0:(int)(i0), \
  769. _p1##i = i-1<0?0:i-1, \
  770. _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \
  771. _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2; \
  772. i<=(int)(i1) && (_n2##i<(int)(bound) || _n1##i==--_n2##i || i==(_n2##i = --_n1##i)); \
  773. _p1##i = i++, ++_n1##i, ++_n2##i)
  774. #define cimg_for_in4X(img,x0,x1,x) cimg_for_in4((img).width,x0,x1,x)
  775. #define cimg_for_in4Y(img,y0,y1,y) cimg_for_in4((img).height,y0,y1,y)
  776. #define cimg_for_in4Z(img,z0,z1,z) cimg_for_in4((img).depth,z0,z1,z)
  777. #define cimg_for_in4V(img,v0,v1,v) cimg_for_in4((img).dim,v0,v1,v)
  778. #define cimg_for_in4XY(img,x0,y0,x1,y1,x,y) cimg_for_in4Y(img,y0,y1,y) cimg_for_in4X(img,x0,x1,x)
  779. #define cimg_for_in4XZ(img,x0,z0,x1,z1,x,z) cimg_for_in4Z(img,z0,z1,z) cimg_for_in4X(img,x0,x1,x)
  780. #define cimg_for_in4XV(img,x0,v0,x1,v1,x,v) cimg_for_in4V(img,v0,v1,v) cimg_for_in4X(img,x0,x1,x)
  781. #define cimg_for_in4YZ(img,y0,z0,y1,z1,y,z) cimg_for_in4Z(img,z0,z1,z) cimg_for_in4Y(img,y0,y1,y)
  782. #define cimg_for_in4YV(img,y0,v0,y1,v1,y,v) cimg_for_in4V(img,v0,v1,v) cimg_for_in4Y(img,y0,y1,y)
  783. #define cimg_for_in4ZV(img,z0,v0,z1,v1,z,v) cimg_for_in4V(img,v0,v1,v) cimg_for_in4Z(img,z0,z1,z)
  784. #define cimg_for_in4XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in4Z(img,z0,z1,z) cimg_for_in4XY(img,x0,y0,x1,y1,x,y)
  785. #define cimg_for_in4XZV(img,x0,z0,v0,x1,y1,v1,x,z,v) cimg_for_in4V(img,v0,v1,v) cimg_for_in4XZ(img,x0,y0,x1,y1,x,z)
  786. #define cimg_for_in4YZV(img,y0,z0,v0,y1,z1,v1,y,z,v) cimg_for_in4V(img,v0,v1,v) cimg_for_in4YZ(img,y0,z0,y1,z1,y,z)
  787. #define cimg_for_in4XYZV(img,x0,y0,z0,v0,x1,y1,z1,v1,x,y,z,v) cimg_for_in4V(img,v0,v1,v) cimg_for_in4XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z)
  788. #define cimg_for5(bound,i) \
  789. for (int i = 0, _p2##i = 0, _p1##i = 0, \
  790. _n1##i = 1>=(bound)?(int)(bound)-1:1, \
  791. _n2##i = 2>=(bound)?(int)(bound)-1:2; \
  792. _n2##i<(int)(bound) || _n1##i==--_n2##i || i==(_n2##i = --_n1##i); \
  793. _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i)
  794. #define cimg_for5X(img,x) cimg_for5((img).width,x)
  795. #define cimg_for5Y(img,y) cimg_for5((img).height,y)
  796. #define cimg_for5Z(img,z) cimg_for5((img).depth,z)
  797. #define cimg_for5V(img,v) cimg_for5((img).dim,v)
  798. #define cimg_for5XY(img,x,y) cimg_for5Y(img,y) cimg_for5X(img,x)
  799. #define cimg_for5XZ(img,x,z) cimg_for5Z(img,z) cimg_for5X(img,x)
  800. #define cimg_for5XV(img,x,v) cimg_for5V(img,v) cimg_for5X(img,x)
  801. #define cimg_for5YZ(img,y,z) cimg_for5Z(img,z) cimg_for5Y(img,y)
  802. #define cimg_for5YV(img,y,v) cimg_for5V(img,v) cimg_for5Y(img,y)
  803. #define cimg_for5ZV(img,z,v) cimg_for5V(img,v) cimg_for5Z(img,z)
  804. #define cimg_for5XYZ(img,x,y,z) cimg_for5Z(img,z) cimg_for5XY(img,x,y)
  805. #define cimg_for5XZV(img,x,z,v) cimg_for5V(img,v) cimg_for5XZ(img,x,z)
  806. #define cimg_for5YZV(img,y,z,v) cimg_for5V(img,v) cimg_for5YZ(img,y,z)
  807. #define cimg_for5XYZV(img,x,y,z,v) cimg_for5V(img,v) cimg_for5XYZ(img,x,y,z)
  808. #define cimg_for_in5(bound,i0,i1,i) \
  809. for (int i = (int)(i0)<0?0:(int)(i0), \
  810. _p2##i = i-2<0?0:i-2, \
  811. _p1##i = i-1<0?0:i-1, \
  812. _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \
  813. _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2; \
  814. i<=(int)(i1) && (_n2##i<(int)(bound) || _n1##i==--_n2##i || i==(_n2##i = --_n1##i)); \
  815. _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i)
  816. #define cimg_for_in5X(img,x0,x1,x) cimg_for_in5((img).width,x0,x1,x)
  817. #define cimg_for_in5Y(img,y0,y1,y) cimg_for_in5((img).height,y0,y1,y)
  818. #define cimg_for_in5Z(img,z0,z1,z) cimg_for_in5((img).depth,z0,z1,z)
  819. #define cimg_for_in5V(img,v0,v1,v) cimg_for_in5((img).dim,v0,v1,v)
  820. #define cimg_for_in5XY(img,x0,y0,x1,y1,x,y) cimg_for_in5Y(img,y0,y1,y) cimg_for_in5X(img,x0,x1,x)
  821. #define cimg_for_in5XZ(img,x0,z0,x1,z1,x,z) cimg_for_in5Z(img,z0,z1,z) cimg_for_in5X(img,x0,x1,x)
  822. #define cimg_for_in5XV(img,x0,v0,x1,v1,x,v) cimg_for_in5V(img,v0,v1,v) cimg_for_in5X(img,x0,x1,x)
  823. #define cimg_for_in5YZ(img,y0,z0,y1,z1,y,z) cimg_for_in5Z(img,z0,z1,z) cimg_for_in5Y(img,y0,y1,y)
  824. #define cimg_for_in5YV(img,y0,v0,y1,v1,y,v) cimg_for_in5V(img,v0,v1,v) cimg_for_in5Y(img,y0,y1,y)
  825. #define cimg_for_in5ZV(img,z0,v0,z1,v1,z,v) cimg_for_in5V(img,v0,v1,v) cimg_for_in5Z(img,z0,z1,z)
  826. #define cimg_for_in5XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in5Z(img,z0,z1,z) cimg_for_in5XY(img,x0,y0,x1,y1,x,y)
  827. #define cimg_for_in5XZV(img,x0,z0,v0,x1,y1,v1,x,z,v) cimg_for_in5V(img,v0,v1,v) cimg_for_in5XZ(img,x0,y0,x1,y1,x,z)
  828. #define cimg_for_in5YZV(img,y0,z0,v0,y1,z1,v1,y,z,v) cimg_for_in5V(img,v0,v1,v) cimg_for_in5YZ(img,y0,z0,y1,z1,y,z)
  829. #define cimg_for_in5XYZV(img,x0,y0,z0,v0,x1,y1,z1,v1,x,y,z,v) cimg_for_in5V(img,v0,v1,v) cimg_for_in5XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z)
  830. #define cimg_for6(bound,i) \
  831. for (int i = 0, _p2##i = 0, _p1##i = 0, \
  832. _n1##i = 1>=(bound)?(int)(bound)-1:1, \
  833. _n2##i = 2>=(bound)?(int)(bound)-1:2, \
  834. _n3##i = 3>=(bound)?(int)(bound)-1:3; \
  835. _n3##i<(int)(bound) || _n2##i==--_n3##i || _n1##i==--_n2##i || i==(_n3##i = _n2##i = --_n1##i); \
  836. _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i)
  837. #define cimg_for6X(img,x) cimg_for6((img).width,x)
  838. #define cimg_for6Y(img,y) cimg_for6((img).height,y)
  839. #define cimg_for6Z(img,z) cimg_for6((img).depth,z)
  840. #define cimg_for6V(img,v) cimg_for6((img).dim,v)
  841. #define cimg_for6XY(img,x,y) cimg_for6Y(img,y) cimg_for6X(img,x)
  842. #define cimg_for6XZ(img,x,z) cimg_for6Z(img,z) cimg_for6X(img,x)
  843. #define cimg_for6XV(img,x,v) cimg_for6V(img,v) cimg_for6X(img,x)
  844. #define cimg_for6YZ(img,y,z) cimg_for6Z(img,z) cimg_for6Y(img,y)
  845. #define cimg_for6YV(img,y,v) cimg_for6V(img,v) cimg_for6Y(img,y)
  846. #define cimg_for6ZV(img,z,v) cimg_for6V(img,v) cimg_for6Z(img,z)
  847. #define cimg_for6XYZ(img,x,y,z) cimg_for6Z(img,z) cimg_for6XY(img,x,y)
  848. #define cimg_for6XZV(img,x,z,v) cimg_for6V(img,v) cimg_for6XZ(img,x,z)
  849. #define cimg_for6YZV(img,y,z,v) cimg_for6V(img,v) cimg_for6YZ(img,y,z)
  850. #define cimg_for6XYZV(img,x,y,z,v) cimg_for6V(img,v) cimg_for6XYZ(img,x,y,z)
  851. #define cimg_for_in6(bound,i0,i1,i) \
  852. for (int i = (int)(i0)<0?0:(int)(i0), \
  853. _p2##i = i-2<0?0:i-2, \
  854. _p1##i = i-1<0?0:i-1, \
  855. _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \
  856. _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \
  857. _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3; \
  858. i<=(int)(i1) && (_n3##i<(int)(bound) || _n2##i==--_n3##i || _n1##i==--_n2##i || i==(_n3##i = _n2##i = --_n1##i)); \
  859. _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i)
  860. #define cimg_for_in6X(img,x0,x1,x) cimg_for_in6((img).width,x0,x1,x)
  861. #define cimg_for_in6Y(img,y0,y1,y) cimg_for_in6((img).height,y0,y1,y)
  862. #define cimg_for_in6Z(img,z0,z1,z) cimg_for_in6((img).depth,z0,z1,z)
  863. #define cimg_for_in6V(img,v0,v1,v) cimg_for_in6((img).dim,v0,v1,v)
  864. #define cimg_for_in6XY(img,x0,y0,x1,y1,x,y) cimg_for_in6Y(img,y0,y1,y) cimg_for_in6X(img,x0,x1,x)
  865. #define cimg_for_in6XZ(img,x0,z0,x1,z1,x,z) cimg_for_in6Z(img,z0,z1,z) cimg_for_in6X(img,x0,x1,x)
  866. #define cimg_for_in6XV(img,x0,v0,x1,v1,x,v) cimg_for_in6V(img,v0,v1,v) cimg_for_in6X(img,x0,x1,x)
  867. #define cimg_for_in6YZ(img,y0,z0,y1,z1,y,z) cimg_for_in6Z(img,z0,z1,z) cimg_for_in6Y(img,y0,y1,y)
  868. #define cimg_for_in6YV(img,y0,v0,y1,v1,y,v) cimg_for_in6V(img,v0,v1,v) cimg_for_in6Y(img,y0,y1,y)
  869. #define cimg_for_in6ZV(img,z0,v0,z1,v1,z,v) cimg_for_in6V(img,v0,v1,v) cimg_for_in6Z(img,z0,z1,z)
  870. #define cimg_for_in6XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in6Z(img,z0,z1,z) cimg_for_in6XY(img,x0,y0,x1,y1,x,y)
  871. #define cimg_for_in6XZV(img,x0,z0,v0,x1,y1,v1,x,z,v) cimg_for_in6V(img,v0,v1,v) cimg_for_in6XZ(img,x0,y0,x1,y1,x,z)
  872. #define cimg_for_in6YZV(img,y0,z0,v0,y1,z1,v1,y,z,v) cimg_for_in6V(img,v0,v1,v) cimg_for_in6YZ(img,y0,z0,y1,z1,y,z)
  873. #define cimg_for_in6XYZV(img,x0,y0,z0,v0,x1,y1,z1,v1,x,y,z,v) cimg_for_in6V(img,v0,v1,v) cimg_for_in6XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z)
  874. #define cimg_for7(bound,i) \
  875. for (int i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \
  876. _n1##i = 1>=(bound)?(int)(bound)-1:1, \
  877. _n2##i = 2>=(bound)?(int)(bound)-1:2, \
  878. _n3##i = 3>=(bound)?(int)(bound)-1:3; \
  879. _n3##i<(int)(bound) || _n2##i==--_n3##i || _n1##i==--_n2##i || i==(_n3##i = _n2##i = --_n1##i); \
  880. _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i)
  881. #define cimg_for7X(img,x) cimg_for7((img).width,x)
  882. #define cimg_for7Y(img,y) cimg_for7((img).height,y)
  883. #define cimg_for7Z(img,z) cimg_for7((img).depth,z)
  884. #define cimg_for7V(img,v) cimg_for7((img).dim,v)
  885. #define cimg_for7XY(img,x,y) cimg_for7Y(img,y) cimg_for7X(img,x)
  886. #define cimg_for7XZ(img,x,z) cimg_for7Z(img,z) cimg_for7X(img,x)
  887. #define cimg_for7XV(img,x,v) cimg_for7V(img,v) cimg_for7X(img,x)
  888. #define cimg_for7YZ(img,y,z) cimg_for7Z(img,z) cimg_for7Y(img,y)
  889. #define cimg_for7YV(img,y,v) cimg_for7V(img,v) cimg_for7Y(img,y)
  890. #define cimg_for7ZV(img,z,v) cimg_for7V(img,v) cimg_for7Z(img,z)
  891. #define cimg_for7XYZ(img,x,y,z) cimg_for7Z(img,z) cimg_for7XY(img,x,y)
  892. #define cimg_for7XZV(img,x,z,v) cimg_for7V(img,v) cimg_for7XZ(img,x,z)
  893. #define cimg_for7YZV(img,y,z,v) cimg_for7V(img,v) cimg_for7YZ(img,y,z)
  894. #define cimg_for7XYZV(img,x,y,z,v) cimg_for7V(img,v) cimg_for7XYZ(img,x,y,z)
  895. #define cimg_for_in7(bound,i0,i1,i) \
  896. for (int i = (int)(i0)<0?0:(int)(i0), \
  897. _p3##i = i-3<0?0:i-3, \
  898. _p2##i = i-2<0?0:i-2, \
  899. _p1##i = i-1<0?0:i-1, \
  900. _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \
  901. _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \
  902. _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3; \
  903. i<=(int)(i1) && (_n3##i<(int)(bound) || _n2##i==--_n3##i || _n1##i==--_n2##i || i==(_n3##i = _n2##i = --_n1##i)); \
  904. _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i)
  905. #define cimg_for_in7X(img,x0,x1,x) cimg_for_in7((img).width,x0,x1,x)
  906. #define cimg_for_in7Y(img,y0,y1,y) cimg_for_in7((img).height,y0,y1,y)
  907. #define cimg_for_in7Z(img,z0,z1,z) cimg_for_in7((img).depth,z0,z1,z)
  908. #define cimg_for_in7V(img,v0,v1,v) cimg_for_in7((img).dim,v0,v1,v)
  909. #define cimg_for_in7XY(img,x0,y0,x1,y1,x,y) cimg_for_in7Y(img,y0,y1,y) cimg_for_in7X(img,x0,x1,x)
  910. #define cimg_for_in7XZ(img,x0,z0,x1,z1,x,z) cimg_for_in7Z(img,z0,z1,z) cimg_for_in7X(img,x0,x1,x)
  911. #define cimg_for_in7XV(img,x0,v0,x1,v1,x,v) cimg_for_in7V(img,v0,v1,v) cimg_for_in7X(img,x0,x1,x)
  912. #define cimg_for_in7YZ(img,y0,z0,y1,z1,y,z) cimg_for_in7Z(img,z0,z1,z) cimg_for_in7Y(img,y0,y1,y)
  913. #define cimg_for_in7YV(img,y0,v0,y1,v1,y,v) cimg_for_in7V(img,v0,v1,v) cimg_for_in7Y(img,y0,y1,y)
  914. #define cimg_for_in7ZV(img,z0,v0,z1,v1,z,v) cimg_for_in7V(img,v0,v1,v) cimg_for_in7Z(img,z0,z1,z)
  915. #define cimg_for_in7XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in7Z(img,z0,z1,z) cimg_for_in7XY(img,x0,y0,x1,y1,x,y)
  916. #define cimg_for_in7XZV(img,x0,z0,v0,x1,y1,v1,x,z,v) cimg_for_in7V(img,v0,v1,v) cimg_for_in7XZ(img,x0,y0,x1,y1,x,z)
  917. #define cimg_for_in7YZV(img,y0,z0,v0,y1,z1,v1,y,z,v) cimg_for_in7V(img,v0,v1,v) cimg_for_in7YZ(img,y0,z0,y1,z1,y,z)
  918. #define cimg_for_in7XYZV(img,x0,y0,z0,v0,x1,y1,z1,v1,x,y,z,v) cimg_for_in7V(img,v0,v1,v) cimg_for_in7XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z)
  919. #define cimg_for8(bound,i) \
  920. for (int i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \
  921. _n1##i = 1>=(bound)?(int)(bound)-1:1, \
  922. _n2##i = 2>=(bound)?(int)(bound)-1:2, \
  923. _n3##i = 3>=(bound)?(int)(bound)-1:3, \
  924. _n4##i = 4>=(bound)?(int)(bound)-1:4; \
  925. _n4##i<(int)(bound) || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \
  926. i==(_n4##i = _n3##i = _n2##i = --_n1##i); \
  927. _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i)
  928. #define cimg_for8X(img,x) cimg_for8((img).width,x)
  929. #define cimg_for8Y(img,y) cimg_for8((img).height,y)
  930. #define cimg_for8Z(img,z) cimg_for8((img).depth,z)
  931. #define cimg_for8V(img,v) cimg_for8((img).dim,v)
  932. #define cimg_for8XY(img,x,y) cimg_for8Y(img,y) cimg_for8X(img,x)
  933. #define cimg_for8XZ(img,x,z) cimg_for8Z(img,z) cimg_for8X(img,x)
  934. #define cimg_for8XV(img,x,v) cimg_for8V(img,v) cimg_for8X(img,x)
  935. #define cimg_for8YZ(img,y,z) cimg_for8Z(img,z) cimg_for8Y(img,y)
  936. #define cimg_for8YV(img,y,v) cimg_for8V(img,v) cimg_for8Y(img,y)
  937. #define cimg_for8ZV(img,z,v) cimg_for8V(img,v) cimg_for8Z(img,z)
  938. #define cimg_for8XYZ(img,x,y,z) cimg_for8Z(img,z) cimg_for8XY(img,x,y)
  939. #define cimg_for8XZV(img,x,z,v) cimg_for8V(img,v) cimg_for8XZ(img,x,z)
  940. #define cimg_for8YZV(img,y,z,v) cimg_for8V(img,v) cimg_for8YZ(img,y,z)
  941. #define cimg_for8XYZV(img,x,y,z,v) cimg_for8V(img,v) cimg_for8XYZ(img,x,y,z)
  942. #define cimg_for_in8(bound,i0,i1,i) \
  943. for (int i = (int)(i0)<0?0:(int)(i0), \
  944. _p3##i = i-3<0?0:i-3, \
  945. _p2##i = i-2<0?0:i-2, \
  946. _p1##i = i-1<0?0:i-1, \
  947. _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \
  948. _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \
  949. _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \
  950. _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4; \
  951. i<=(int)(i1) && (_n4##i<(int)(bound) || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \
  952. i==(_n4##i = _n3##i = _n2##i = --_n1##i)); \
  953. _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i)
  954. #define cimg_for_in8X(img,x0,x1,x) cimg_for_in8((img).width,x0,x1,x)
  955. #define cimg_for_in8Y(img,y0,y1,y) cimg_for_in8((img).height,y0,y1,y)
  956. #define cimg_for_in8Z(img,z0,z1,z) cimg_for_in8((img).depth,z0,z1,z)
  957. #define cimg_for_in8V(img,v0,v1,v) cimg_for_in8((img).dim,v0,v1,v)
  958. #define cimg_for_in8XY(img,x0,y0,x1,y1,x,y) cimg_for_in8Y(img,y0,y1,y) cimg_for_in8X(img,x0,x1,x)
  959. #define cimg_for_in8XZ(img,x0,z0,x1,z1,x,z) cimg_for_in8Z(img,z0,z1,z) cimg_for_in8X(img,x0,x1,x)
  960. #define cimg_for_in8XV(img,x0,v0,x1,v1,x,v) cimg_for_in8V(img,v0,v1,v) cimg_for_in8X(img,x0,x1,x)
  961. #define cimg_for_in8YZ(img,y0,z0,y1,z1,y,z) cimg_for_in8Z(img,z0,z1,z) cimg_for_in8Y(img,y0,y1,y)
  962. #define cimg_for_in8YV(img,y0,v0,y1,v1,y,v) cimg_for_in8V(img,v0,v1,v) cimg_for_in8Y(img,y0,y1,y)
  963. #define cimg_for_in8ZV(img,z0,v0,z1,v1,z,v) cimg_for_in8V(img,v0,v1,v) cimg_for_in8Z(img,z0,z1,z)
  964. #define cimg_for_in8XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in8Z(img,z0,z1,z) cimg_for_in8XY(img,x0,y0,x1,y1,x,y)
  965. #define cimg_for_in8XZV(img,x0,z0,v0,x1,y1,v1,x,z,v) cimg_for_in8V(img,v0,v1,v) cimg_for_in8XZ(img,x0,y0,x1,y1,x,z)
  966. #define cimg_for_in8YZV(img,y0,z0,v0,y1,z1,v1,y,z,v) cimg_for_in8V(img,v0,v1,v) cimg_for_in8YZ(img,y0,z0,y1,z1,y,z)
  967. #define cimg_for_in8XYZV(img,x0,y0,z0,v0,x1,y1,z1,v1,x,y,z,v) cimg_for_in8V(img,v0,v1,v) cimg_for_in8XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z)
  968. #define cimg_for9(bound,i) \
  969. for (int i = 0, _p4##i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \
  970. _n1##i = 1>=(int)(bound)?(int)(bound)-1:1, \
  971. _n2##i = 2>=(int)(bound)?(int)(bound)-1:2, \
  972. _n3##i = 3>=(int)(bound)?(int)(bound)-1:3, \
  973. _n4##i = 4>=(int)(bound)?(int)(bound)-1:4; \
  974. _n4##i<(int)(bound) || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \
  975. i==(_n4##i = _n3##i = _n2##i = --_n1##i); \
  976. _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i)
  977. #define cimg_for9X(img,x) cimg_for9((img).width,x)
  978. #define cimg_for9Y(img,y) cimg_for9((img).height,y)
  979. #define cimg_for9Z(img,z) cimg_for9((img).depth,z)
  980. #define cimg_for9V(img,v) cimg_for9((img).dim,v)
  981. #define cimg_for9XY(img,x,y) cimg_for9Y(img,y) cimg_for9X(img,x)
  982. #define cimg_for9XZ(img,x,z) cimg_for9Z(img,z) cimg_for9X(img,x)
  983. #define cimg_for9XV(img,x,v) cimg_for9V(img,v) cimg_for9X(img,x)
  984. #define cimg_for9YZ(img,y,z) cimg_for9Z(img,z) cimg_for9Y(img,y)
  985. #define cimg_for9YV(img,y,v) cimg_for9V(img,v) cimg_for9Y(img,y)
  986. #define cimg_for9ZV(img,z,v) cimg_for9V(img,v) cimg_for9Z(img,z)
  987. #define cimg_for9XYZ(img,x,y,z) cimg_for9Z(img,z) cimg_for9XY(img,x,y)
  988. #define cimg_for9XZV(img,x,z,v) cimg_for9V(img,v) cimg_for9XZ(img,x,z)
  989. #define cimg_for9YZV(img,y,z,v) cimg_for9V(img,v) cimg_for9YZ(img,y,z)
  990. #define cimg_for9XYZV(img,x,y,z,v) cimg_for9V(img,v) cimg_for9XYZ(img,x,y,z)
  991. #define cimg_for_in9(bound,i0,i1,i) \
  992. for (int i = (int)(i0)<0?0:(int)(i0), \
  993. _p4##i = i-4<0?0:i-4, \
  994. _p3##i = i-3<0?0:i-3, \
  995. _p2##i = i-2<0?0:i-2, \
  996. _p1##i = i-1<0?0:i-1, \
  997. _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \
  998. _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \
  999. _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \
  1000. _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4; \
  1001. i<=(int)(i1) && (_n4##i<(int)(bound) || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \
  1002. i==(_n4##i = _n3##i = _n2##i = --_n1##i)); \
  1003. _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i)
  1004. #define cimg_for_in9X(img,x0,x1,x) cimg_for_in9((img).width,x0,x1,x)
  1005. #define cimg_for_in9Y(img,y0,y1,y) cimg_for_in9((img).height,y0,y1,y)
  1006. #define cimg_for_in9Z(img,z0,z1,z) cimg_for_in9((img).depth,z0,z1,z)
  1007. #define cimg_for_in9V(img,v0,v1,v) cimg_for_in9((img).dim,v0,v1,v)
  1008. #define cimg_for_in9XY(img,x0,y0,x1,y1,x,y) cimg_for_in9Y(img,y0,y1,y) cimg_for_in9X(img,x0,x1,x)
  1009. #define cimg_for_in9XZ(img,x0,z0,x1,z1,x,z) cimg_for_in9Z(img,z0,z1,z) cimg_for_in9X(img,x0,x1,x)
  1010. #define cimg_for_in9XV(img,x0,v0,x1,v1,x,v) cimg_for_in9V(img,v0,v1,v) cimg_for_in9X(img,x0,x1,x)
  1011. #define cimg_for_in9YZ(img,y0,z0,y1,z1,y,z) cimg_for_in9Z(img,z0,z1,z) cimg_for_in9Y(img,y0,y1,y)
  1012. #define cimg_for_in9YV(img,y0,v0,y1,v1,y,v) cimg_for_in9V(img,v0,v1,v) cimg_for_in9Y(img,y0,y1,y)
  1013. #define cimg_for_in9ZV(img,z0,v0,z1,v1,z,v) cimg_for_in9V(img,v0,v1,v) cimg_for_in9Z(img,z0,z1,z)
  1014. #define cimg_for_in9XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in9Z(img,z0,z1,z) cimg_for_in9XY(img,x0,y0,x1,y1,x,y)
  1015. #define cimg_for_in9XZV(img,x0,z0,v0,x1,y1,v1,x,z,v) cimg_for_in9V(img,v0,v1,v) cimg_for_in9XZ(img,x0,y0,x1,y1,x,z)
  1016. #define cimg_for_in9YZV(img,y0,z0,v0,y1,z1,v1,y,z,v) cimg_for_in9V(img,v0,v1,v) cimg_for_in9YZ(img,y0,z0,y1,z1,y,z)
  1017. #define cimg_for_in9XYZV(img,x0,y0,z0,v0,x1,y1,z1,v1,x,y,z,v) cimg_for_in9V(img,v0,v1,v) cimg_for_in9XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z)
  1018. #define cimg_for2x2(img,x,y,z,v,I) \
  1019. cimg_for2((img).height,y) for (int x = 0, \
  1020. _n1##x = (int)( \
  1021. (I[0] = (img)(0,y,z,v)), \
  1022. (I[2] = (img)(0,_n1##y,z,v)), \
  1023. 1>=(img).width?(int)((img).width)-1:1); \
  1024. (_n1##x<(int)((img).width) && ( \
  1025. (I[1] = (img)(_n1##x,y,z,v)), \
  1026. (I[3] = (img)(_n1##x,_n1##y,z,v)),1)) || \
  1027. x==--_n1##x; \
  1028. I[0] = I[1], \
  1029. I[2] = I[3], \
  1030. ++x, ++_n1##x)
  1031. #define cimg_for_in2x2(img,x0,y0,x1,y1,x,y,z,v,I) \
  1032. cimg_for_in2((img).height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \
  1033. _n1##x = (int)( \
  1034. (I[0] = (img)(x,y,z,v)), \
  1035. (I[2] = (img)(x,_n1##y,z,v)), \
  1036. x+1>=(int)(img).width?(int)((img).width)-1:x+1); \
  1037. x<=(int)(x1) && ((_n1##x<(int)((img).width) && ( \
  1038. (I[1] = (img)(_n1##x,y,z,v)), \
  1039. (I[3] = (img)(_n1##x,_n1##y,z,v)),1)) || \
  1040. x==--_n1##x); \
  1041. I[0] = I[1], \
  1042. I[2] = I[3], \
  1043. ++x, ++_n1##x)
  1044. #define cimg_for3x3(img,x,y,z,v,I) \
  1045. cimg_for3((img).height,y) for (int x = 0, \
  1046. _p1##x = 0, \
  1047. _n1##x = (int)( \
  1048. (I[0] = I[1] = (img)(0,_p1##y,z,v)), \
  1049. (I[3] = I[4] = (img)(0,y,z,v)), \
  1050. (I[6] = I[7] = (img)(0,_n1##y,z,v)), \
  1051. 1>=(img).width?(int)((img).width)-1:1); \
  1052. (_n1##x<(int)((img).width) && ( \
  1053. (I[2] = (img)(_n1##x,_p1##y,z,v)), \
  1054. (I[5] = (img)(_n1##x,y,z,v)), \
  1055. (I[8] = (img)(_n1##x,_n1##y,z,v)),1)) || \
  1056. x==--_n1##x; \
  1057. I[0] = I[1], I[1] = I[2], \
  1058. I[3] = I[4], I[4] = I[5], \
  1059. I[6] = I[7], I[7] = I[8], \
  1060. _p1##x = x++, ++_n1##x)
  1061. #define cimg_for_in3x3(img,x0,y0,x1,y1,x,y,z,v,I) \
  1062. cimg_for_in3((img).height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \
  1063. _p1##x = x-1<0?0:x-1, \
  1064. _n1##x = (int)( \
  1065. (I[0] = (img)(_p1##x,_p1##y,z,v)), \
  1066. (I[3] = (img)(_p1##x,y,z,v)), \
  1067. (I[6] = (img)(_p1##x,_n1##y,z,v)), \
  1068. (I[1] = (img)(x,_p1##y,z,v)), \
  1069. (I[4] = (img)(x,y,z,v)), \
  1070. (I[7] = (img)(x,_n1##y,z,v)), \
  1071. x+1>=(int)(img).width?(int)((img).width)-1:x+1); \
  1072. x<=(int)(x1) && ((_n1##x<(int)((img).width) && ( \
  1073. (I[2] = (img)(_n1##x,_p1##y,z,v)), \
  1074. (I[5] = (img)(_n1##x,y,z,v)), \
  1075. (I[8] = (img)(_n1##x,_n1##y,z,v)),1)) || \
  1076. x==--_n1##x); \
  1077. I[0] = I[1], I[1] = I[2], \
  1078. I[3] = I[4], I[4] = I[5], \
  1079. I[6] = I[7], I[7] = I[8], \
  1080. _p1##x = x++, ++_n1##x)
  1081. #define cimg_for4x4(img,x,y,z,v,I) \
  1082. cimg_for4((img).height,y) for (int x = 0, \
  1083. _p1##x = 0, \
  1084. _n1##x = 1>=(img).width?(int)((img).width)-1:1, \
  1085. _n2##x = (int)( \
  1086. (I[0] = I[1] = (img)(0,_p1##y,z,v)), \
  1087. (I[4] = I[5] = (img)(0,y,z,v)), \
  1088. (I[8] = I[9] = (img)(0,_n1##y,z,v)), \
  1089. (I[12] = I[13] = (img)(0,_n2##y,z,v)), \
  1090. (I[2] = (img)(_n1##x,_p1##y,z,v)), \
  1091. (I[6] = (img)(_n1##x,y,z,v)), \
  1092. (I[10] = (img)(_n1##x,_n1##y,z,v)), \
  1093. (I[14] = (img)(_n1##x,_n2##y,z,v)), \
  1094. 2>=(img).width?(int)((img).width)-1:2); \
  1095. (_n2##x<(int)((img).width) && ( \
  1096. (I[3] = (img)(_n2##x,_p1##y,z,v)), \
  1097. (I[7] = (img)(_n2##x,y,z,v)), \
  1098. (I[11] = (img)(_n2##x,_n1##y,z,v)), \
  1099. (I[15] = (img)(_n2##x,_n2##y,z,v)),1)) || \
  1100. _n1##x==--_n2##x || x==(_n2##x = --_n1##x); \
  1101. I[0] = I[1], I[1] = I[2], I[2] = I[3], \
  1102. I[4] = I[5], I[5] = I[6], I[6] = I[7], \
  1103. I[8] = I[9], I[9] = I[10], I[10] = I[11], \
  1104. I[12] = I[13], I[13] = I[14], I[14] = I[15], \
  1105. _p1##x = x++, ++_n1##x, ++_n2##x)
  1106. #define cimg_for_in4x4(img,x0,y0,x1,y1,x,y,z,v,I) \
  1107. cimg_for_in4((img).height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \
  1108. _p1##x = x-1<0?0:x-1, \
  1109. _n1##x = x+1>=(int)(img).width?(int)((img).width)-1:x+1, \
  1110. _n2##x = (int)( \
  1111. (I[0] = (img)(_p1##x,_p1##y,z,v)), \
  1112. (I[4] = (img)(_p1##x,y,z,v)), \
  1113. (I[8] = (img)(_p1##x,_n1##y,z,v)), \
  1114. (I[12] = (img)(_p1##x,_n2##y,z,v)), \
  1115. (I[1] = (img)(x,_p1##y,z,v)), \
  1116. (I[5] = (img)(x,y,z,v)), \
  1117. (I[9] = (img)(x,_n1##y,z,v)), \
  1118. (I[13] = (img)(x,_n2##y,z,v)), \
  1119. (I[2] = (img)(_n1##x,_p1##y,z,v)), \
  1120. (I[6] = (img)(_n1##x,y,z,v)), \
  1121. (I[10] = (img)(_n1##x,_n1##y,z,v)), \
  1122. (I[14] = (img)(_n1##x,_n2##y,z,v)), \
  1123. x+2>=(int)(img).width?(int)((img).width)-1:x+2); \
  1124. x<=(int)(x1) && ((_n2##x<(int)((img).width) && ( \
  1125. (I[3] = (img)(_n2##x,_p1##y,z,v)), \
  1126. (I[7] = (img)(_n2##x,y,z,v)), \
  1127. (I[11] = (img)(_n2##x,_n1##y,z,v)), \
  1128. (I[15] = (img)(_n2##x,_n2##y,z,v)),1)) || \
  1129. _n1##x==--_n2##x || x==(_n2##x = --_n1##x)); \
  1130. I[0] = I[1], I[1] = I[2], I[2] = I[3], \
  1131. I[4] = I[5], I[5] = I[6], I[6] = I[7], \
  1132. I[8] = I[9], I[9] = I[10], I[10] = I[11], \
  1133. I[12] = I[13], I[13] = I[14], I[14] = I[15], \
  1134. _p1##x = x++, ++_n1##x, ++_n2##x)
  1135. #define cimg_for5x5(img,x,y,z,v,I) \
  1136. cimg_for5((img).height,y) for (int x = 0, \
  1137. _p2##x = 0, _p1##x = 0, \
  1138. _n1##x = 1>=(img).width?(int)((img).width)-1:1, \
  1139. _n2##x = (int)( \
  1140. (I[0] = I[1] = I[2] = (img)(0,_p2##y,z,v)), \
  1141. (I[5] = I[6] = I[7] = (img)(0,_p1##y,z,v)), \
  1142. (I[10] = I[11] = I[12] = (img)(0,y,z,v)), \
  1143. (I[15] = I[16] = I[17] = (img)(0,_n1##y,z,v)), \
  1144. (I[20] = I[21] = I[22] = (img)(0,_n2##y,z,v)), \
  1145. (I[3] = (img)(_n1##x,_p2##y,z,v)), \
  1146. (I[8] = (img)(_n1##x,_p1##y,z,v)), \
  1147. (I[13] = (img)(_n1##x,y,z,v)), \
  1148. (I[18] = (img)(_n1##x,_n1##y,z,v)), \
  1149. (I[23] = (img)(_n1##x,_n2##y,z,v)), \
  1150. 2>=(img).width?(int)((img).width)-1:2); \
  1151. (_n2##x<(int)((img).width) && ( \
  1152. (I[4] = (img)(_n2##x,_p2##y,z,v)), \
  1153. (I[9] = (img)(_n2##x,_p1##y,z,v)), \
  1154. (I[14] = (img)(_n2##x,y,z,v)), \
  1155. (I[19] = (img)(_n2##x,_n1##y,z,v)), \
  1156. (I[24] = (img)(_n2##x,_n2##y,z,v)),1)) || \
  1157. _n1##x==--_n2##x || x==(_n2##x = --_n1##x); \
  1158. I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], \
  1159. I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], \
  1160. I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], \
  1161. I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], \
  1162. I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], \
  1163. _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x)
  1164. #define cimg_for_in5x5(img,x0,y0,x1,y1,x,y,z,v,I) \
  1165. cimg_for_in5((img).height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \
  1166. _p2##x = x-2<0?0:x-2, \
  1167. _p1##x = x-1<0?0:x-1, \
  1168. _n1##x = x+1>=(int)(img).width?(int)((img).width)-1:x+1, \
  1169. _n2##x = (int)( \
  1170. (I[0] = (img)(_p2##x,_p2##y,z,v)), \
  1171. (I[5] = (img)(_p2##x,_p1##y,z,v)), \
  1172. (I[10] = (img)(_p2##x,y,z,v)), \
  1173. (I[15] = (img)(_p2##x,_n1##y,z,v)), \
  1174. (I[20] = (img)(_p2##x,_n2##y,z,v)), \
  1175. (I[1] = (img)(_p1##x,_p2##y,z,v)), \
  1176. (I[6] = (img)(_p1##x,_p1##y,z,v)), \
  1177. (I[11] = (img)(_p1##x,y,z,v)), \
  1178. (I[16] = (img)(_p1##x,_n1##y,z,v)), \
  1179. (I[21] = (img)(_p1##x,_n2##y,z,v)), \
  1180. (I[2] = (img)(x,_p2##y,z,v)), \
  1181. (I[7] = (img)(x,_p1##y,z,v)), \
  1182. (I[12] = (img)(x,y,z,v)), \
  1183. (I[17] = (img)(x,_n1##y,z,v)), \
  1184. (I[22] = (img)(x,_n2##y,z,v)), \
  1185. (I[3] = (img)(_n1##x,_p2##y,z,v)), \
  1186. (I[8] = (img)(_n1##x,_p1##y,z,v)), \
  1187. (I[13] = (img)(_n1##x,y,z,v)), \
  1188. (I[18] = (img)(_n1##x,_n1##y,z,v)), \
  1189. (I[23] = (img)(_n1##x,_n2##y,z,v)), \
  1190. x+2>=(int)(img).width?(int)((img).width)-1:x+2); \
  1191. x<=(int)(x1) && ((_n2##x<(int)((img).width) && ( \
  1192. (I[4] = (img)(_n2##x,_p2##y,z,v)), \
  1193. (I[9] = (img)(_n2##x,_p1##y,z,v)), \
  1194. (I[14] = (img)(_n2##x,y,z,v)), \
  1195. (I[19] = (img)(_n2##x,_n1##y,z,v)), \
  1196. (I[24] = (img)(_n2##x,_n2##y,z,v)),1)) || \
  1197. _n1##x==--_n2##x || x==(_n2##x = --_n1##x)); \
  1198. I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], \
  1199. I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], \
  1200. I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], \
  1201. I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], \
  1202. I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], \
  1203. _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x)
  1204. #define cimg_for6x6(img,x,y,z,v,I) \
  1205. cimg_for6((img).height,y) for (int x = 0, \
  1206. _p2##x = 0, _p1##x = 0, \
  1207. _n1##x = 1>=(img).width?(int)((img).width)-1:1, \
  1208. _n2##x = 2>=(img).width?(int)((img).width)-1:2, \
  1209. _n3##x = (int)( \
  1210. (I[0] = I[1] = I[2] = (img)(0,_p2##y,z,v)), \
  1211. (I[6] = I[7] = I[8] = (img)(0,_p1##y,z,v)), \
  1212. (I[12] = I[13] = I[14] = (img)(0,y,z,v)), \
  1213. (I[18] = I[19] = I[20] = (img)(0,_n1##y,z,v)), \
  1214. (I[24] = I[25] = I[26] = (img)(0,_n2##y,z,v)), \
  1215. (I[30] = I[31] = I[32] = (img)(0,_n3##y,z,v)), \
  1216. (I[3] = (img)(_n1##x,_p2##y,z,v)), \
  1217. (I[9] = (img)(_n1##x,_p1##y,z,v)), \
  1218. (I[15] = (img)(_n1##x,y,z,v)), \
  1219. (I[21] = (img)(_n1##x,_n1##y,z,v)), \
  1220. (I[27] = (img)(_n1##x,_n2##y,z,v)), \
  1221. (I[33] = (img)(_n1##x,_n3##y,z,v)), \
  1222. (I[4] = (img)(_n2##x,_p2##y,z,v)), \
  1223. (I[10] = (img)(_n2##x,_p1##y,z,v)), \
  1224. (I[16] = (img)(_n2##x,y,z,v)), \
  1225. (I[22] = (img)(_n2##x,_n1##y,z,v)), \
  1226. (I[28] = (img)(_n2##x,_n2##y,z,v)), \
  1227. (I[34] = (img)(_n2##x,_n3##y,z,v)), \
  1228. 3>=(img).width?(int)((img).width)-1:3); \
  1229. (_n3##x<(int)((img).width) && ( \
  1230. (I[5] = (img)(_n3##x,_p2##y,z,v)), \
  1231. (I[11] = (img)(_n3##x,_p1##y,z,v)), \
  1232. (I[17] = (img)(_n3##x,y,z,v)), \
  1233. (I[23] = (img)(_n3##x,_n1##y,z,v)), \
  1234. (I[29] = (img)(_n3##x,_n2##y,z,v)), \
  1235. (I[35] = (img)(_n3##x,_n3##y,z,v)),1)) || \
  1236. _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n3## x = _n2##x = --_n1##x); \
  1237. I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], \
  1238. I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], \
  1239. I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], \
  1240. I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], \
  1241. I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], \
  1242. I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], \
  1243. _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x)
  1244. #define cimg_for_in6x6(img,x0,y0,x1,y1,x,y,z,v,I) \
  1245. cimg_for_in6((img).height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)x0, \
  1246. _p2##x = x-2<0?0:x-2, \
  1247. _p1##x = x-1<0?0:x-1, \
  1248. _n1##x = x+1>=(int)(img).width?(int)((img).width)-1:x+1, \
  1249. _n2##x = x+2>=(int)(img).width?(int)((img).width)-1:x+2, \
  1250. _n3##x = (int)( \
  1251. (I[0] = (img)(_p2##x,_p2##y,z,v)), \
  1252. (I[6] = (img)(_p2##x,_p1##y,z,v)), \
  1253. (I[12] = (img)(_p2##x,y,z,v)), \
  1254. (I[18] = (img)(_p2##x,_n1##y,z,v)), \
  1255. (I[24] = (img)(_p2##x,_n2##y,z,v)), \
  1256. (I[30] = (img)(_p2##x,_n3##y,z,v)), \
  1257. (I[1] = (img)(_p1##x,_p2##y,z,v)), \
  1258. (I[7] = (img)(_p1##x,_p1##y,z,v)), \
  1259. (I[13] = (img)(_p1##x,y,z,v)), \
  1260. (I[19] = (img)(_p1##x,_n1##y,z,v)), \
  1261. (I[25] = (img)(_p1##x,_n2##y,z,v)), \
  1262. (I[31] = (img)(_p1##x,_n3##y,z,v)), \
  1263. (I[2] = (img)(x,_p2##y,z,v)), \
  1264. (I[8] = (img)(x,_p1##y,z,v)), \
  1265. (I[14] = (img)(x,y,z,v)), \
  1266. (I[20] = (img)(x,_n1##y,z,v)), \
  1267. (I[26] = (img)(x,_n2##y,z,v)), \
  1268. (I[32] = (img)(x,_n3##y,z,v)), \
  1269. (I[3] = (img)(_n1##x,_p2##y,z,v)), \
  1270. (I[9] = (img)(_n1##x,_p1##y,z,v)), \
  1271. (I[15] = (img)(_n1##x,y,z,v)), \
  1272. (I[21] = (img)(_n1##x,_n1##y,z,v)), \
  1273. (I[27] = (img)(_n1##x,_n2##y,z,v)), \
  1274. (I[33] = (img)(_n1##x,_n3##y,z,v)), \
  1275. (I[4] = (img)(_n2##x,_p2##y,z,v)), \
  1276. (I[10] = (img)(_n2##x,_p1##y,z,v)), \
  1277. (I[16] = (img)(_n2##x,y,z,v)), \
  1278. (I[22] = (img)(_n2##x,_n1##y,z,v)), \
  1279. (I[28] = (img)(_n2##x,_n2##y,z,v)), \
  1280. (I[34] = (img)(_n2##x,_n3##y,z,v)), \
  1281. x+3>=(int)(img).width?(int)((img).width)-1:x+3); \
  1282. x<=(int)(x1) && ((_n3##x<(int)((img).width) && ( \
  1283. (I[5] = (img)(_n3##x,_p2##y,z,v)), \
  1284. (I[11] = (img)(_n3##x,_p1##y,z,v)), \
  1285. (I[17] = (img)(_n3##x,y,z,v)), \
  1286. (I[23] = (img)(_n3##x,_n1##y,z,v)), \
  1287. (I[29] = (img)(_n3##x,_n2##y,z,v)), \
  1288. (I[35] = (img)(_n3##x,_n3##y,z,v)),1)) || \
  1289. _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n3## x = _n2##x = --_n1##x)); \
  1290. I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], \
  1291. I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], \
  1292. I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], \
  1293. I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], \
  1294. I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], \
  1295. I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], \
  1296. _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x)
  1297. #define cimg_for7x7(img,x,y,z,v,I) \
  1298. cimg_for7((img).height,y) for (int x = 0, \
  1299. _p3##x = 0, _p2##x = 0, _p1##x = 0, \
  1300. _n1##x = 1>=(img).width?(int)((img).width)-1:1, \
  1301. _n2##x = 2>=(img).width?(int)((img).width)-1:2, \
  1302. _n3##x = (int)( \
  1303. (I[0] = I[1] = I[2] = I[3] = (img)(0,_p3##y,z,v)), \
  1304. (I[7] = I[8] = I[9] = I[10] = (img)(0,_p2##y,z,v)), \
  1305. (I[14] = I[15] = I[16] = I[17] = (img)(0,_p1##y,z,v)), \
  1306. (I[21] = I[22] = I[23] = I[24] = (img)(0,y,z,v)), \
  1307. (I[28] = I[29] = I[30] = I[31] = (img)(0,_n1##y,z,v)), \
  1308. (I[35] = I[36] = I[37] = I[38] = (img)(0,_n2##y,z,v)), \
  1309. (I[42] = I[43] = I[44] = I[45] = (img)(0,_n3##y,z,v)), \
  1310. (I[4] = (img)(_n1##x,_p3##y,z,v)), \
  1311. (I[11] = (img)(_n1##x,_p2##y,z,v)), \
  1312. (I[18] = (img)(_n1##x,_p1##y,z,v)), \
  1313. (I[25] = (img)(_n1##x,y,z,v)), \
  1314. (I[32] = (img)(_n1##x,_n1##y,z,v)), \
  1315. (I[39] = (img)(_n1##x,_n2##y,z,v)), \
  1316. (I[46] = (img)(_n1##x,_n3##y,z,v)), \
  1317. (I[5] = (img)(_n2##x,_p3##y,z,v)), \
  1318. (I[12] = (img)(_n2##x,_p2##y,z,v)), \
  1319. (I[19] = (img)(_n2##x,_p1##y,z,v)), \
  1320. (I[26] = (img)(_n2##x,y,z,v)), \
  1321. (I[33] = (img)(_n2##x,_n1##y,z,v)), \
  1322. (I[40] = (img)(_n2##x,_n2##y,z,v)), \
  1323. (I[47] = (img)(_n2##x,_n3##y,z,v)), \
  1324. 3>=(img).width?(int)((img).width)-1:3); \
  1325. (_n3##x<(int)((img).width) && ( \
  1326. (I[6] = (img)(_n3##x,_p3##y,z,v)), \
  1327. (I[13] = (img)(_n3##x,_p2##y,z,v)), \
  1328. (I[20] = (img)(_n3##x,_p1##y,z,v)), \
  1329. (I[27] = (img)(_n3##x,y,z,v)), \
  1330. (I[34] = (img)(_n3##x,_n1##y,z,v)), \
  1331. (I[41] = (img)(_n3##x,_n2##y,z,v)), \
  1332. (I[48] = (img)(_n3##x,_n3##y,z,v)),1)) || \
  1333. _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n3##x = _n2##x = --_n1##x); \
  1334. I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], \
  1335. I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], \
  1336. I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], \
  1337. I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], \
  1338. I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], \
  1339. I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], \
  1340. I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], \
  1341. _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x)
  1342. #define cimg_for_in7x7(img,x0,y0,x1,y1,x,y,z,v,I) \
  1343. cimg_for_in7((img).height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \
  1344. _p3##x = x-3<0?0:x-3, \
  1345. _p2##x = x-2<0?0:x-2, \
  1346. _p1##x = x-1<0?0:x-1, \
  1347. _n1##x = x+1>=(int)(img).width?(int)((img).width)-1:x+1, \
  1348. _n2##x = x+2>=(int)(img).width?(int)((img).width)-1:x+2, \
  1349. _n3##x = (int)( \
  1350. (I[0] = (img)(_p3##x,_p3##y,z,v)), \
  1351. (I[7] = (img)(_p3##x,_p2##y,z,v)), \
  1352. (I[14] = (img)(_p3##x,_p1##y,z,v)), \
  1353. (I[21] = (img)(_p3##x,y,z,v)), \
  1354. (I[28] = (img)(_p3##x,_n1##y,z,v)), \
  1355. (I[35] = (img)(_p3##x,_n2##y,z,v)), \
  1356. (I[42] = (img)(_p3##x,_n3##y,z,v)), \
  1357. (I[1] = (img)(_p2##x,_p3##y,z,v)), \
  1358. (I[8] = (img)(_p2##x,_p2##y,z,v)), \
  1359. (I[15] = (img)(_p2##x,_p1##y,z,v)), \
  1360. (I[22] = (img)(_p2##x,y,z,v)), \
  1361. (I[29] = (img)(_p2##x,_n1##y,z,v)), \
  1362. (I[36] = (img)(_p2##x,_n2##y,z,v)), \
  1363. (I[43] = (img)(_p2##x,_n3##y,z,v)), \
  1364. (I[2] = (img)(_p1##x,_p3##y,z,v)), \
  1365. (I[9] = (img)(_p1##x,_p2##y,z,v)), \
  1366. (I[16] = (img)(_p1##x,_p1##y,z,v)), \
  1367. (I[23] = (img)(_p1##x,y,z,v)), \
  1368. (I[30] = (img)(_p1##x,_n1##y,z,v)), \
  1369. (I[37] = (img)(_p1##x,_n2##y,z,v)), \
  1370. (I[44] = (img)(_p1##x,_n3##y,z,v)), \
  1371. (I[3] = (img)(x,_p3##y,z,v)), \
  1372. (I[10] = (img)(x,_p2##y,z,v)), \
  1373. (I[17] = (img)(x,_p1##y,z,v)), \
  1374. (I[24] = (img)(x,y,z,v)), \
  1375. (I[31] = (img)(x,_n1##y,z,v)), \
  1376. (I[38] = (img)(x,_n2##y,z,v)), \
  1377. (I[45] = (img)(x,_n3##y,z,v)), \
  1378. (I[4] = (img)(_n1##x,_p3##y,z,v)), \
  1379. (I[11] = (img)(_n1##x,_p2##y,z,v)), \
  1380. (I[18] = (img)(_n1##x,_p1##y,z,v)), \
  1381. (I[25] = (img)(_n1##x,y,z,v)), \
  1382. (I[32] = (img)(_n1##x,_n1##y,z,v)), \
  1383. (I[39] = (img)(_n1##x,_n2##y,z,v)), \
  1384. (I[46] = (img)(_n1##x,_n3##y,z,v)), \
  1385. (I[5] = (img)(_n2##x,_p3##y,z,v)), \
  1386. (I[12] = (img)(_n2##x,_p2##y,z,v)), \
  1387. (I[19] = (img)(_n2##x,_p1##y,z,v)), \
  1388. (I[26] = (img)(_n2##x,y,z,v)), \
  1389. (I[33] = (img)(_n2##x,_n1##y,z,v)), \
  1390. (I[40] = (img)(_n2##x,_n2##y,z,v)), \
  1391. (I[47] = (img)(_n2##x,_n3##y,z,v)), \
  1392. x+3>=(int)(img).width?(int)((img).width)-1:x+3); \
  1393. x<=(int)(x1) && ((_n3##x<(int)((img).width) && ( \
  1394. (I[6] = (img)(_n3##x,_p3##y,z,v)), \
  1395. (I[13] = (img)(_n3##x,_p2##y,z,v)), \
  1396. (I[20] = (img)(_n3##x,_p1##y,z,v)), \
  1397. (I[27] = (img)(_n3##x,y,z,v)), \
  1398. (I[34] = (img)(_n3##x,_n1##y,z,v)), \
  1399. (I[41] = (img)(_n3##x,_n2##y,z,v)), \
  1400. (I[48] = (img)(_n3##x,_n3##y,z,v)),1)) || \
  1401. _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n3##x = _n2##x = --_n1##x)); \
  1402. I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], \
  1403. I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], \
  1404. I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], \
  1405. I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], \
  1406. I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], \
  1407. I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], \
  1408. I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], \
  1409. _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x)
  1410. #define cimg_for8x8(img,x,y,z,v,I) \
  1411. cimg_for8((img).height,y) for (int x = 0, \
  1412. _p3##x = 0, _p2##x = 0, _p1##x = 0, \
  1413. _n1##x = 1>=((img).width)?(int)((img).width)-1:1, \
  1414. _n2##x = 2>=((img).width)?(int)((img).width)-1:2, \
  1415. _n3##x = 3>=((img).width)?(int)((img).width)-1:3, \
  1416. _n4##x = (int)( \
  1417. (I[0] = I[1] = I[2] = I[3] = (img)(0,_p3##y,z,v)), \
  1418. (I[8] = I[9] = I[10] = I[11] = (img)(0,_p2##y,z,v)), \
  1419. (I[16] = I[17] = I[18] = I[19] = (img)(0,_p1##y,z,v)), \
  1420. (I[24] = I[25] = I[26] = I[27] = (img)(0,y,z,v)), \
  1421. (I[32] = I[33] = I[34] = I[35] = (img)(0,_n1##y,z,v)), \
  1422. (I[40] = I[41] = I[42] = I[43] = (img)(0,_n2##y,z,v)), \
  1423. (I[48] = I[49] = I[50] = I[51] = (img)(0,_n3##y,z,v)), \
  1424. (I[56] = I[57] = I[58] = I[59] = (img)(0,_n4##y,z,v)), \
  1425. (I[4] = (img)(_n1##x,_p3##y,z,v)), \
  1426. (I[12] = (img)(_n1##x,_p2##y,z,v)), \
  1427. (I[20] = (img)(_n1##x,_p1##y,z,v)), \
  1428. (I[28] = (img)(_n1##x,y,z,v)), \
  1429. (I[36] = (img)(_n1##x,_n1##y,z,v)), \
  1430. (I[44] = (img)(_n1##x,_n2##y,z,v)), \
  1431. (I[52] = (img)(_n1##x,_n3##y,z,v)), \
  1432. (I[60] = (img)(_n1##x,_n4##y,z,v)), \
  1433. (I[5] = (img)(_n2##x,_p3##y,z,v)), \
  1434. (I[13] = (img)(_n2##x,_p2##y,z,v)), \
  1435. (I[21] = (img)(_n2##x,_p1##y,z,v)), \
  1436. (I[29] = (img)(_n2##x,y,z,v)), \
  1437. (I[37] = (img)(_n2##x,_n1##y,z,v)), \
  1438. (I[45] = (img)(_n2##x,_n2##y,z,v)), \
  1439. (I[53] = (img)(_n2##x,_n3##y,z,v)), \
  1440. (I[61] = (img)(_n2##x,_n4##y,z,v)), \
  1441. (I[6] = (img)(_n3##x,_p3##y,z,v)), \
  1442. (I[14] = (img)(_n3##x,_p2##y,z,v)), \
  1443. (I[22] = (img)(_n3##x,_p1##y,z,v)), \
  1444. (I[30] = (img)(_n3##x,y,z,v)), \
  1445. (I[38] = (img)(_n3##x,_n1##y,z,v)), \
  1446. (I[46] = (img)(_n3##x,_n2##y,z,v)), \
  1447. (I[54] = (img)(_n3##x,_n3##y,z,v)), \
  1448. (I[62] = (img)(_n3##x,_n4##y,z,v)), \
  1449. 4>=((img).width)?(int)((img).width)-1:4); \
  1450. (_n4##x<(int)((img).width) && ( \
  1451. (I[7] = (img)(_n4##x,_p3##y,z,v)), \
  1452. (I[15] = (img)(_n4##x,_p2##y,z,v)), \
  1453. (I[23] = (img)(_n4##x,_p1##y,z,v)), \
  1454. (I[31] = (img)(_n4##x,y,z,v)), \
  1455. (I[39] = (img)(_n4##x,_n1##y,z,v)), \
  1456. (I[47] = (img)(_n4##x,_n2##y,z,v)), \
  1457. (I[55] = (img)(_n4##x,_n3##y,z,v)), \
  1458. (I[63] = (img)(_n4##x,_n4##y,z,v)),1)) || \
  1459. _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n4##x = _n3##x = _n2##x = --_n1##x); \
  1460. I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], \
  1461. I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], \
  1462. I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], \
  1463. I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], \
  1464. I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], \
  1465. I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], \
  1466. I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], \
  1467. I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], \
  1468. _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x)
  1469. #define cimg_for_in8x8(img,x0,y0,x1,y1,x,y,z,v,I) \
  1470. cimg_for_in8((img).height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \
  1471. _p3##x = x-3<0?0:x-3, \
  1472. _p2##x = x-2<0?0:x-2, \
  1473. _p1##x = x-1<0?0:x-1, \
  1474. _n1##x = x+1>=(int)((img).width)?(int)((img).width)-1:x+1, \
  1475. _n2##x = x+2>=(int)((img).width)?(int)((img).width)-1:x+2, \
  1476. _n3##x = x+3>=(int)((img).width)?(int)((img).width)-1:x+3, \
  1477. _n4##x = (int)( \
  1478. (I[0] = (img)(_p3##x,_p3##y,z,v)), \
  1479. (I[8] = (img)(_p3##x,_p2##y,z,v)), \
  1480. (I[16] = (img)(_p3##x,_p1##y,z,v)), \
  1481. (I[24] = (img)(_p3##x,y,z,v)), \
  1482. (I[32] = (img)(_p3##x,_n1##y,z,v)), \
  1483. (I[40] = (img)(_p3##x,_n2##y,z,v)), \
  1484. (I[48] = (img)(_p3##x,_n3##y,z,v)), \
  1485. (I[56] = (img)(_p3##x,_n4##y,z,v)), \
  1486. (I[1] = (img)(_p2##x,_p3##y,z,v)), \
  1487. (I[9] = (img)(_p2##x,_p2##y,z,v)), \
  1488. (I[17] = (img)(_p2##x,_p1##y,z,v)), \
  1489. (I[25] = (img)(_p2##x,y,z,v)), \
  1490. (I[33] = (img)(_p2##x,_n1##y,z,v)), \
  1491. (I[41] = (img)(_p2##x,_n2##y,z,v)), \
  1492. (I[49] = (img)(_p2##x,_n3##y,z,v)), \
  1493. (I[57] = (img)(_p2##x,_n4##y,z,v)), \
  1494. (I[2] = (img)(_p1##x,_p3##y,z,v)), \
  1495. (I[10] = (img)(_p1##x,_p2##y,z,v)), \
  1496. (I[18] = (img)(_p1##x,_p1##y,z,v)), \
  1497. (I[26] = (img)(_p1##x,y,z,v)), \
  1498. (I[34] = (img)(_p1##x,_n1##y,z,v)), \
  1499. (I[42] = (img)(_p1##x,_n2##y,z,v)), \
  1500. (I[50] = (img)(_p1##x,_n3##y,z,v)), \
  1501. (I[58] = (img)(_p1##x,_n4##y,z,v)), \
  1502. (I[3] = (img)(x,_p3##y,z,v)), \
  1503. (I[11] = (img)(x,_p2##y,z,v)), \
  1504. (I[19] = (img)(x,_p1##y,z,v)), \
  1505. (I[27] = (img)(x,y,z,v)), \
  1506. (I[35] = (img)(x,_n1##y,z,v)), \
  1507. (I[43] = (img)(x,_n2##y,z,v)), \
  1508. (I[51] = (img)(x,_n3##y,z,v)), \
  1509. (I[59] = (img)(x,_n4##y,z,v)), \
  1510. (I[4] = (img)(_n1##x,_p3##y,z,v)), \
  1511. (I[12] = (img)(_n1##x,_p2##y,z,v)), \
  1512. (I[20] = (img)(_n1##x,_p1##y,z,v)), \
  1513. (I[28] = (img)(_n1##x,y,z,v)), \
  1514. (I[36] = (img)(_n1##x,_n1##y,z,v)), \
  1515. (I[44] = (img)(_n1##x,_n2##y,z,v)), \
  1516. (I[52] = (img)(_n1##x,_n3##y,z,v)), \
  1517. (I[60] = (img)(_n1##x,_n4##y,z,v)), \
  1518. (I[5] = (img)(_n2##x,_p3##y,z,v)), \
  1519. (I[13] = (img)(_n2##x,_p2##y,z,v)), \
  1520. (I[21] = (img)(_n2##x,_p1##y,z,v)), \
  1521. (I[29] = (img)(_n2##x,y,z,v)), \
  1522. (I[37] = (img)(_n2##x,_n1##y,z,v)), \
  1523. (I[45] = (img)(_n2##x,_n2##y,z,v)), \
  1524. (I[53] = (img)(_n2##x,_n3##y,z,v)), \
  1525. (I[61] = (img)(_n2##x,_n4##y,z,v)), \
  1526. (I[6] = (img)(_n3##x,_p3##y,z,v)), \
  1527. (I[14] = (img)(_n3##x,_p2##y,z,v)), \
  1528. (I[22] = (img)(_n3##x,_p1##y,z,v)), \
  1529. (I[30] = (img)(_n3##x,y,z,v)), \
  1530. (I[38] = (img)(_n3##x,_n1##y,z,v)), \
  1531. (I[46] = (img)(_n3##x,_n2##y,z,v)), \
  1532. (I[54] = (img)(_n3##x,_n3##y,z,v)), \
  1533. (I[62] = (img)(_n3##x,_n4##y,z,v)), \
  1534. x+4>=(int)((img).width)?(int)((img).width)-1:x+4); \
  1535. x<=(int)(x1) && ((_n4##x<(int)((img).width) && ( \
  1536. (I[7] = (img)(_n4##x,_p3##y,z,v)), \
  1537. (I[15] = (img)(_n4##x,_p2##y,z,v)), \
  1538. (I[23] = (img)(_n4##x,_p1##y,z,v)), \
  1539. (I[31] = (img)(_n4##x,y,z,v)), \
  1540. (I[39] = (img)(_n4##x,_n1##y,z,v)), \
  1541. (I[47] = (img)(_n4##x,_n2##y,z,v)), \
  1542. (I[55] = (img)(_n4##x,_n3##y,z,v)), \
  1543. (I[63] = (img)(_n4##x,_n4##y,z,v)),1)) || \
  1544. _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n4##x = _n3##x = _n2##x = --_n1##x)); \
  1545. I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], \
  1546. I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], \
  1547. I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], \
  1548. I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], \
  1549. I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], \
  1550. I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], \
  1551. I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], \
  1552. I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], \
  1553. _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x)
  1554. #define cimg_for9x9(img,x,y,z,v,I) \
  1555. cimg_for9((img).height,y) for (int x = 0, \
  1556. _p4##x = 0, _p3##x = 0, _p2##x = 0, _p1##x = 0, \
  1557. _n1##x = 1>=((img).width)?(int)((img).width)-1:1, \
  1558. _n2##x = 2>=((img).width)?(int)((img).width)-1:2, \
  1559. _n3##x = 3>=((img).width)?(int)((img).width)-1:3, \
  1560. _n4##x = (int)( \
  1561. (I[0] = I[1] = I[2] = I[3] = I[4] = (img)(0,_p4##y,z,v)), \
  1562. (I[9] = I[10] = I[11] = I[12] = I[13] = (img)(0,_p3##y,z,v)), \
  1563. (I[18] = I[19] = I[20] = I[21] = I[22] = (img)(0,_p2##y,z,v)), \
  1564. (I[27] = I[28] = I[29] = I[30] = I[31] = (img)(0,_p1##y,z,v)), \
  1565. (I[36] = I[37] = I[38] = I[39] = I[40] = (img)(0,y,z,v)), \
  1566. (I[45] = I[46] = I[47] = I[48] = I[49] = (img)(0,_n1##y,z,v)), \
  1567. (I[54] = I[55] = I[56] = I[57] = I[58] = (img)(0,_n2##y,z,v)), \
  1568. (I[63] = I[64] = I[65] = I[66] = I[67] = (img)(0,_n3##y,z,v)), \
  1569. (I[72] = I[73] = I[74] = I[75] = I[76] = (img)(0,_n4##y,z,v)), \
  1570. (I[5] = (img)(_n1##x,_p4##y,z,v)), \
  1571. (I[14] = (img)(_n1##x,_p3##y,z,v)), \
  1572. (I[23] = (img)(_n1##x,_p2##y,z,v)), \
  1573. (I[32] = (img)(_n1##x,_p1##y,z,v)), \
  1574. (I[41] = (img)(_n1##x,y,z,v)), \
  1575. (I[50] = (img)(_n1##x,_n1##y,z,v)), \
  1576. (I[59] = (img)(_n1##x,_n2##y,z,v)), \
  1577. (I[68] = (img)(_n1##x,_n3##y,z,v)), \
  1578. (I[77] = (img)(_n1##x,_n4##y,z,v)), \
  1579. (I[6] = (img)(_n2##x,_p4##y,z,v)), \
  1580. (I[15] = (img)(_n2##x,_p3##y,z,v)), \
  1581. (I[24] = (img)(_n2##x,_p2##y,z,v)), \
  1582. (I[33] = (img)(_n2##x,_p1##y,z,v)), \
  1583. (I[42] = (img)(_n2##x,y,z,v)), \
  1584. (I[51] = (img)(_n2##x,_n1##y,z,v)), \
  1585. (I[60] = (img)(_n2##x,_n2##y,z,v)), \
  1586. (I[69] = (img)(_n2##x,_n3##y,z,v)), \
  1587. (I[78] = (img)(_n2##x,_n4##y,z,v)), \
  1588. (I[7] = (img)(_n3##x,_p4##y,z,v)), \
  1589. (I[16] = (img)(_n3##x,_p3##y,z,v)), \
  1590. (I[25] = (img)(_n3##x,_p2##y,z,v)), \
  1591. (I[34] = (img)(_n3##x,_p1##y,z,v)), \
  1592. (I[43] = (img)(_n3##x,y,z,v)), \
  1593. (I[52] = (img)(_n3##x,_n1##y,z,v)), \
  1594. (I[61] = (img)(_n3##x,_n2##y,z,v)), \
  1595. (I[70] = (img)(_n3##x,_n3##y,z,v)), \
  1596. (I[79] = (img)(_n3##x,_n4##y,z,v)), \
  1597. 4>=((img).width)?(int)((img).width)-1:4); \
  1598. (_n4##x<(int)((img).width) && ( \
  1599. (I[8] = (img)(_n4##x,_p4##y,z,v)), \
  1600. (I[17] = (img)(_n4##x,_p3##y,z,v)), \
  1601. (I[26] = (img)(_n4##x,_p2##y,z,v)), \
  1602. (I[35] = (img)(_n4##x,_p1##y,z,v)), \
  1603. (I[44] = (img)(_n4##x,y,z,v)), \
  1604. (I[53] = (img)(_n4##x,_n1##y,z,v)), \
  1605. (I[62] = (img)(_n4##x,_n2##y,z,v)), \
  1606. (I[71] = (img)(_n4##x,_n3##y,z,v)), \
  1607. (I[80] = (img)(_n4##x,_n4##y,z,v)),1)) || \
  1608. _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n4##x = _n3##x = _n2##x = --_n1##x); \
  1609. I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], \
  1610. I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], \
  1611. I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], \
  1612. I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], \
  1613. I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], \
  1614. I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], \
  1615. I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], \
  1616. I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], \
  1617. I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], \
  1618. _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x)
  1619. #define cimg_for_in9x9(img,x0,y0,x1,y1,x,y,z,v,I) \
  1620. cimg_for_in9((img).height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \
  1621. _p4##x = x-4<0?0:x-4, \
  1622. _p3##x = x-3<0?0:x-3, \
  1623. _p2##x = x-2<0?0:x-2, \
  1624. _p1##x = x-1<0?0:x-1, \
  1625. _n1##x = x+1>=(int)((img).width)?(int)((img).width)-1:x+1, \
  1626. _n2##x = x+2>=(int)((img).width)?(int)((img).width)-1:x+2, \
  1627. _n3##x = x+3>=(int)((img).width)?(int)((img).width)-1:x+3, \
  1628. _n4##x = (int)( \
  1629. (I[0] = (img)(_p4##x,_p4##y,z,v)), \
  1630. (I[9] = (img)(_p4##x,_p3##y,z,v)), \
  1631. (I[18] = (img)(_p4##x,_p2##y,z,v)), \
  1632. (I[27] = (img)(_p4##x,_p1##y,z,v)), \
  1633. (I[36] = (img)(_p4##x,y,z,v)), \
  1634. (I[45] = (img)(_p4##x,_n1##y,z,v)), \
  1635. (I[54] = (img)(_p4##x,_n2##y,z,v)), \
  1636. (I[63] = (img)(_p4##x,_n3##y,z,v)), \
  1637. (I[72] = (img)(_p4##x,_n4##y,z,v)), \
  1638. (I[1] = (img)(_p3##x,_p4##y,z,v)), \
  1639. (I[10] = (img)(_p3##x,_p3##y,z,v)), \
  1640. (I[19] = (img)(_p3##x,_p2##y,z,v)), \
  1641. (I[28] = (img)(_p3##x,_p1##y,z,v)), \
  1642. (I[37] = (img)(_p3##x,y,z,v)), \
  1643. (I[46] = (img)(_p3##x,_n1##y,z,v)), \
  1644. (I[55] = (img)(_p3##x,_n2##y,z,v)), \
  1645. (I[64] = (img)(_p3##x,_n3##y,z,v)), \
  1646. (I[73] = (img)(_p3##x,_n4##y,z,v)), \
  1647. (I[2] = (img)(_p2##x,_p4##y,z,v)), \
  1648. (I[11] = (img)(_p2##x,_p3##y,z,v)), \
  1649. (I[20] = (img)(_p2##x,_p2##y,z,v)), \
  1650. (I[29] = (img)(_p2##x,_p1##y,z,v)), \
  1651. (I[38] = (img)(_p2##x,y,z,v)), \
  1652. (I[47] = (img)(_p2##x,_n1##y,z,v)), \
  1653. (I[56] = (img)(_p2##x,_n2##y,z,v)), \
  1654. (I[65] = (img)(_p2##x,_n3##y,z,v)), \
  1655. (I[74] = (img)(_p2##x,_n4##y,z,v)), \
  1656. (I[3] = (img)(_p1##x,_p4##y,z,v)), \
  1657. (I[12] = (img)(_p1##x,_p3##y,z,v)), \
  1658. (I[21] = (img)(_p1##x,_p2##y,z,v)), \
  1659. (I[30] = (img)(_p1##x,_p1##y,z,v)), \
  1660. (I[39] = (img)(_p1##x,y,z,v)), \
  1661. (I[48] = (img)(_p1##x,_n1##y,z,v)), \
  1662. (I[57] = (img)(_p1##x,_n2##y,z,v)), \
  1663. (I[66] = (img)(_p1##x,_n3##y,z,v)), \
  1664. (I[75] = (img)(_p1##x,_n4##y,z,v)), \
  1665. (I[4] = (img)(x,_p4##y,z,v)), \
  1666. (I[13] = (img)(x,_p3##y,z,v)), \
  1667. (I[22] = (img)(x,_p2##y,z,v)), \
  1668. (I[31] = (img)(x,_p1##y,z,v)), \
  1669. (I[40] = (img)(x,y,z,v)), \
  1670. (I[49] = (img)(x,_n1##y,z,v)), \
  1671. (I[58] = (img)(x,_n2##y,z,v)), \
  1672. (I[67] = (img)(x,_n3##y,z,v)), \
  1673. (I[76] = (img)(x,_n4##y,z,v)), \
  1674. (I[5] = (img)(_n1##x,_p4##y,z,v)), \
  1675. (I[14] = (img)(_n1##x,_p3##y,z,v)), \
  1676. (I[23] = (img)(_n1##x,_p2##y,z,v)), \
  1677. (I[32] = (img)(_n1##x,_p1##y,z,v)), \
  1678. (I[41] = (img)(_n1##x,y,z,v)), \
  1679. (I[50] = (img)(_n1##x,_n1##y,z,v)), \
  1680. (I[59] = (img)(_n1##x,_n2##y,z,v)), \
  1681. (I[68] = (img)(_n1##x,_n3##y,z,v)), \
  1682. (I[77] = (img)(_n1##x,_n4##y,z,v)), \
  1683. (I[6] = (img)(_n2##x,_p4##y,z,v)), \
  1684. (I[15] = (img)(_n2##x,_p3##y,z,v)), \
  1685. (I[24] = (img)(_n2##x,_p2##y,z,v)), \
  1686. (I[33] = (img)(_n2##x,_p1##y,z,v)), \
  1687. (I[42] = (img)(_n2##x,y,z,v)), \
  1688. (I[51] = (img)(_n2##x,_n1##y,z,v)), \
  1689. (I[60] = (img)(_n2##x,_n2##y,z,v)), \
  1690. (I[69] = (img)(_n2##x,_n3##y,z,v)), \
  1691. (I[78] = (img)(_n2##x,_n4##y,z,v)), \
  1692. (I[7] = (img)(_n3##x,_p4##y,z,v)), \
  1693. (I[16] = (img)(_n3##x,_p3##y,z,v)), \
  1694. (I[25] = (img)(_n3##x,_p2##y,z,v)), \
  1695. (I[34] = (img)(_n3##x,_p1##y,z,v)), \
  1696. (I[43] = (img)(_n3##x,y,z,v)), \
  1697. (I[52] = (img)(_n3##x,_n1##y,z,v)), \
  1698. (I[61] = (img)(_n3##x,_n2##y,z,v)), \
  1699. (I[70] = (img)(_n3##x,_n3##y,z,v)), \
  1700. (I[79] = (img)(_n3##x,_n4##y,z,v)), \
  1701. x+4>=(int)((img).width)?(int)((img).width)-1:x+4); \
  1702. x<=(int)(x1) && ((_n4##x<(int)((img).width) && ( \
  1703. (I[8] = (img)(_n4##x,_p4##y,z,v)), \
  1704. (I[17] = (img)(_n4##x,_p3##y,z,v)), \
  1705. (I[26] = (img)(_n4##x,_p2##y,z,v)), \
  1706. (I[35] = (img)(_n4##x,_p1##y,z,v)), \
  1707. (I[44] = (img)(_n4##x,y,z,v)), \
  1708. (I[53] = (img)(_n4##x,_n1##y,z,v)), \
  1709. (I[62] = (img)(_n4##x,_n2##y,z,v)), \
  1710. (I[71] = (img)(_n4##x,_n3##y,z,v)), \
  1711. (I[80] = (img)(_n4##x,_n4##y,z,v)),1)) || \
  1712. _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n4##x = _n3##x = _n2##x = --_n1##x)); \
  1713. I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], \
  1714. I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], \
  1715. I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], \
  1716. I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], \
  1717. I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], \
  1718. I[45] = I[46], I[46] = I[47], I[47] = I[48], I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], \
  1719. I[54] = I[55], I[55] = I[56], I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], \
  1720. I[63] = I[64], I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], \
  1721. I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], I[79] = I[80], \
  1722. _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x)
  1723. #define cimg_for2x2x2(img,x,y,z,v,I) \
  1724. cimg_for2((img).depth,z) cimg_for2((img).height,y) for (int x = 0, \
  1725. _n1##x = (int)( \
  1726. (I[0] = (img)(0,y,z,v)), \
  1727. (I[2] = (img)(0,_n1##y,z,v)), \
  1728. (I[4] = (img)(0,y,_n1##z,v)), \
  1729. (I[6] = (img)(0,_n1##y,_n1##z,v)), \
  1730. 1>=(img).width?(int)((img).width)-1:1); \
  1731. (_n1##x<(int)((img).width) && ( \
  1732. (I[1] = (img)(_n1##x,y,z,v)), \
  1733. (I[3] = (img)(_n1##x,_n1##y,z,v)), \
  1734. (I[5] = (img)(_n1##x,y,_n1##z,v)), \
  1735. (I[7] = (img)(_n1##x,_n1##y,_n1##z,v)),1)) || \
  1736. x==--_n1##x; \
  1737. I[0] = I[1], I[2] = I[3], I[4] = I[5], I[6] = I[7], \
  1738. ++x, ++_n1##x)
  1739. #define cimg_for_in2x2x2(img,x0,y0,z0,x1,y1,z1,x,y,z,v,I) \
  1740. cimg_for_in2((img).depth,z0,z1,z) cimg_for_in2((img).height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \
  1741. _n1##x = (int)( \
  1742. (I[0] = (img)(x,y,z,v)), \
  1743. (I[2] = (img)(x,_n1##y,z,v)), \
  1744. (I[4] = (img)(x,y,_n1##z,v)), \
  1745. (I[6] = (img)(x,_n1##y,_n1##z,v)), \
  1746. x+1>=(int)(img).width?(int)((img).width)-1:x+1); \
  1747. x<=(int)(x1) && ((_n1##x<(int)((img).width) && ( \
  1748. (I[1] = (img)(_n1##x,y,z,v)), \
  1749. (I[3] = (img)(_n1##x,_n1##y,z,v)), \
  1750. (I[5] = (img)(_n1##x,y,_n1##z,v)), \
  1751. (I[7] = (img)(_n1##x,_n1##y,_n1##z,v)),1)) || \
  1752. x==--_n1##x); \
  1753. I[0] = I[1], I[2] = I[3], I[4] = I[5], I[6] = I[7], \
  1754. ++x, ++_n1##x)
  1755. #define cimg_for3x3x3(img,x,y,z,v,I) \
  1756. cimg_for3((img).depth,z) cimg_for3((img).height,y) for (int x = 0, \
  1757. _p1##x = 0, \
  1758. _n1##x = (int)( \
  1759. (I[0] = I[1] = (img)(0,_p1##y,_p1##z,v)), \
  1760. (I[3] = I[4] = (img)(0,y,_p1##z,v)), \
  1761. (I[6] = I[7] = (img)(0,_n1##y,_p1##z,v)), \
  1762. (I[9] = I[10] = (img)(0,_p1##y,z,v)), \
  1763. (I[12] = I[13] = (img)(0,y,z,v)), \
  1764. (I[15] = I[16] = (img)(0,_n1##y,z,v)), \
  1765. (I[18] = I[19] = (img)(0,_p1##y,_n1##z,v)), \
  1766. (I[21] = I[22] = (img)(0,y,_n1##z,v)), \
  1767. (I[24] = I[25] = (img)(0,_n1##y,_n1##z,v)), \
  1768. 1>=(img).width?(int)((img).width)-1:1); \
  1769. (_n1##x<(int)((img).width) && ( \
  1770. (I[2] = (img)(_n1##x,_p1##y,_p1##z,v)), \
  1771. (I[5] = (img)(_n1##x,y,_p1##z,v)), \
  1772. (I[8] = (img)(_n1##x,_n1##y,_p1##z,v)), \
  1773. (I[11] = (img)(_n1##x,_p1##y,z,v)), \
  1774. (I[14] = (img)(_n1##x,y,z,v)), \
  1775. (I[17] = (img)(_n1##x,_n1##y,z,v)), \
  1776. (I[20] = (img)(_n1##x,_p1##y,_n1##z,v)), \
  1777. (I[23] = (img)(_n1##x,y,_n1##z,v)), \
  1778. (I[26] = (img)(_n1##x,_n1##y,_n1##z,v)),1)) || \
  1779. x==--_n1##x; \
  1780. I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], \
  1781. I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], \
  1782. I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], \
  1783. _p1##x = x++, ++_n1##x)
  1784. #define cimg_for_in3x3x3(img,x0,y0,z0,x1,y1,z1,x,y,z,v,I) \
  1785. cimg_for_in3((img).depth,z0,z1,z) cimg_for_in3((img).height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \
  1786. _p1##x = x-1<0?0:x-1, \
  1787. _n1##x = (int)( \
  1788. (I[0] = (img)(_p1##x,_p1##y,_p1##z,v)), \
  1789. (I[3] = (img)(_p1##x,y,_p1##z,v)), \
  1790. (I[6] = (img)(_p1##x,_n1##y,_p1##z,v)), \
  1791. (I[9] = (img)(_p1##x,_p1##y,z,v)), \
  1792. (I[12] = (img)(_p1##x,y,z,v)), \
  1793. (I[15] = (img)(_p1##x,_n1##y,z,v)), \
  1794. (I[18] = (img)(_p1##x,_p1##y,_n1##z,v)), \
  1795. (I[21] = (img)(_p1##x,y,_n1##z,v)), \
  1796. (I[24] = (img)(_p1##x,_n1##y,_n1##z,v)), \
  1797. (I[1] = (img)(x,_p1##y,_p1##z,v)), \
  1798. (I[4] = (img)(x,y,_p1##z,v)), \
  1799. (I[7] = (img)(x,_n1##y,_p1##z,v)), \
  1800. (I[10] = (img)(x,_p1##y,z,v)), \
  1801. (I[13] = (img)(x,y,z,v)), \
  1802. (I[16] = (img)(x,_n1##y,z,v)), \
  1803. (I[19] = (img)(x,_p1##y,_n1##z,v)), \
  1804. (I[22] = (img)(x,y,_n1##z,v)), \
  1805. (I[25] = (img)(x,_n1##y,_n1##z,v)), \
  1806. x+1>=(int)(img).width?(int)((img).width)-1:x+1); \
  1807. x<=(int)(x1) && ((_n1##x<(int)((img).width) && ( \
  1808. (I[2] = (img)(_n1##x,_p1##y,_p1##z,v)), \
  1809. (I[5] = (img)(_n1##x,y,_p1##z,v)), \
  1810. (I[8] = (img)(_n1##x,_n1##y,_p1##z,v)), \
  1811. (I[11] = (img)(_n1##x,_p1##y,z,v)), \
  1812. (I[14] = (img)(_n1##x,y,z,v)), \
  1813. (I[17] = (img)(_n1##x,_n1##y,z,v)), \
  1814. (I[20] = (img)(_n1##x,_p1##y,_n1##z,v)), \
  1815. (I[23] = (img)(_n1##x,y,_n1##z,v)), \
  1816. (I[26] = (img)(_n1##x,_n1##y,_n1##z,v)),1)) || \
  1817. x==--_n1##x); \
  1818. I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], \
  1819. I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], \
  1820. I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], \
  1821. _p1##x = x++, ++_n1##x)
  1822. /*------------------------------------------------
  1823. #
  1824. #
  1825. # Definition of the cimg_library:: namespace
  1826. #
  1827. #
  1828. -------------------------------------------------*/
  1829. //! This namespace encompasses all classes and functions of the %CImg library.
  1830. /**
  1831. This namespace is defined to avoid functions and class names collisions
  1832. that could happen with the include of other C++ header files.
  1833. Anyway, it should not happen often and you should reasonnably start most of your
  1834. %CImg-based programs with
  1835. \code
  1836. #include "CImg.h"
  1837. using namespace cimg_library;
  1838. \endcode
  1839. to simplify the declaration of %CImg Library variables afterwards.
  1840. **/
  1841. namespace cimg_library {
  1842. // Declare the only four classes of the CImg Library.
  1843. //
  1844. template<typename T=float> struct CImg;
  1845. template<typename T=float> struct CImgList;
  1846. struct CImgDisplay;
  1847. struct CImgException;
  1848. // (Pre)declare the cimg namespace.
  1849. // This is not the complete namespace declaration. It only contains some
  1850. // necessary stuffs to ensure a correct declaration order of classes and functions
  1851. // defined afterwards.
  1852. //
  1853. namespace cimg {
  1854. #ifdef cimg_use_vt100
  1855. const char t_normal[] = { 0x1b,'[','0',';','0',';','0','m','\0' };
  1856. const char t_red[] = { 0x1b,'[','4',';','3','1',';','5','9','m','\0' };
  1857. const char t_bold[] = { 0x1b,'[','1','m','\0' };
  1858. const char t_purple[] = { 0x1b,'[','0',';','3','5',';','5','9','m','\0' };
  1859. const char t_green[] = { 0x1b,'[','0',';','3','2',';','5','9','m','\0' };
  1860. #else
  1861. const char t_normal[] = { '\0' };
  1862. const char *const t_red = cimg::t_normal, *const t_bold = cimg::t_normal,
  1863. *const t_purple = cimg::t_normal, *const t_green = cimg::t_normal;
  1864. #endif
  1865. inline void info();
  1866. //! Get/set the current CImg exception mode.
  1867. /**
  1868. The way error messages are handled by CImg can be changed dynamically, using this function.
  1869. Possible values are :
  1870. - 0 to hide debug messages (quiet mode, but exceptions are still thrown).
  1871. - 1 to display debug messages on standard error (console).
  1872. - 2 to display debug messages in modal windows (default behavior).
  1873. - 3 to do as 1 + add extra warnings (may slow down the code !).
  1874. - 4 to do as 2 + add extra warnings (may slow down the code !).
  1875. **/
  1876. inline unsigned int& exception_mode() { static unsigned int mode = cimg_debug; return mode; }
  1877. inline int dialog(const char *title, const char *msg, const char *button1_txt="OK",
  1878. const char *button2_txt=0, const char *button3_txt=0,
  1879. const char *button4_txt=0, const char *button5_txt=0,
  1880. const char *button6_txt=0, const bool centering=false);
  1881. }
  1882. /*----------------------------------------------
  1883. #
  1884. # Definition of the CImgException structures
  1885. #
  1886. ----------------------------------------------*/
  1887. //! Instances of this class are thrown when errors occur during a %CImg library function call.
  1888. /**
  1889. \section ex1 Overview
  1890. CImgException is the base class of %CImg exceptions.
  1891. Exceptions are thrown by the %CImg Library when an error occured in a %CImg library function call.
  1892. CImgException is seldom thrown itself. Children classes that specify the kind of error encountered
  1893. are generally used instead. These sub-classes are :
  1894. - \b CImgInstanceException : Thrown when the instance associated to the called %CImg function is not
  1895. correctly defined. Generally, this exception is thrown when one tries to process \a empty images. The example
  1896. below will throw a \a CImgInstanceException.
  1897. \code
  1898. CImg<float> img; // Construct an empty image.
  1899. img.blur(10); // Try to blur the image.
  1900. \endcode
  1901. - \b CImgArgumentException : Thrown when one of the arguments given to the called %CImg function is not correct.
  1902. Generally, this exception is thrown when arguments passed to the function are outside an admissible range of values.
  1903. The example below will throw a \a CImgArgumentException.
  1904. \code
  1905. CImg<float> img(100,100,1,3); // Define a 100x100 color image with float pixels.
  1906. img = 0; // Try to fill pixels from the 0 pointer (invalid argument to operator=() ).
  1907. \endcode
  1908. - \b CImgIOException : Thrown when an error occured when trying to load or save image files.
  1909. The example below will throw a \a CImgIOException.
  1910. \code
  1911. CImg<float> img("file_doesnt_exist.jpg"); // Try to load a file that doesn't exist.
  1912. \endcode
  1913. - \b CImgDisplayException : Thrown when an error occured when trying to display an image in a window.
  1914. This exception is thrown when image display request cannot be satisfied.
  1915. The parent class CImgException may be thrown itself when errors that cannot be classified in one of
  1916. the above type occur. It is recommended not to throw CImgExceptions yourself, since there are normally
  1917. reserved to %CImg Library functions.
  1918. \b CImgInstanceException, \b CImgArgumentException, \b CImgIOException and \b CImgDisplayException are simple
  1919. subclasses of CImgException and are thus not detailled more in this reference documentation.
  1920. \section ex2 Exception handling
  1921. When an error occurs, the %CImg Library first displays the error in a modal window.
  1922. Then, it throws an instance of the corresponding exception class, generally leading the program to stop
  1923. (this is the default behavior).
  1924. You can bypass this default behavior by handling the exceptions yourself,
  1925. using a code block <tt>try { ... } catch() { ... }</tt>.
  1926. In this case, you can avoid the apparition of the modal window, by
  1927. defining the environment variable <tt>cimg_debug</tt> to 0 before including the %CImg header file.
  1928. The example below shows how to cleanly handle %CImg Library exceptions :
  1929. \code
  1930. #define cimg_debug 0 // Disable modal window in CImg exceptions.
  1931. #define "CImg.h"
  1932. int main() {
  1933. try {
  1934. ...; // Here, do what you want.
  1935. }
  1936. catch (CImgInstanceException &e) {
  1937. std::fprintf(stderr,"CImg Library Error : %s",e.message); // Display your own error message
  1938. ... // Do what you want now.
  1939. }
  1940. }
  1941. \endcode
  1942. **/
  1943. struct CImgException {
  1944. #define _cimg_exception_err(etype,disp_flag) \
  1945. cimg_std::va_list ap; va_start(ap,format); cimg_std::vsprintf(message,format,ap); va_end(ap); \
  1946. switch (cimg::exception_mode()) { \
  1947. case 0 : break; \
  1948. case 2 : case 4 : try { cimg::dialog(etype,message,"Abort"); } catch (CImgException&) { \
  1949. cimg_std::fprintf(cimg_stdout,"\n%s# %s%s :\n%s\n\n",cimg::t_red,etype,cimg::t_normal,message); \
  1950. } break; \
  1951. default : cimg_std::fprintf(cimg_stdout,"\n%s# %s%s :\n%s\n\n",cimg::t_red,etype,cimg::t_normal,message); \
  1952. } \
  1953. if (cimg::exception_mode()>=3) cimg_library::cimg::info();
  1954. char message[4096]; //!< Message associated with the error that thrown the exception.
  1955. CImgException() { message[0]='\0'; }
  1956. CImgException(const char *format, ...) { _cimg_exception_err("CImgException",true); }
  1957. };
  1958. // The \ref CImgInstanceException class is used to throw an exception related
  1959. // to a non suitable instance encountered in a library function call.
  1960. struct CImgInstanceException: public CImgException {
  1961. CImgInstanceException(const char *format, ...) { _cimg_exception_err("CImgInstanceException",true); }
  1962. };
  1963. // The \ref CImgArgumentException class is used to throw an exception related
  1964. // to invalid arguments encountered in a library function call.
  1965. struct CImgArgumentException: public CImgException {
  1966. CImgArgumentException(const char *format, ...) { _cimg_exception_err("CImgArgumentException",true); }
  1967. };
  1968. // The \ref CImgIOException class is used to throw an exception related
  1969. // to Input/Output file problems encountered in a library function call.
  1970. struct CImgIOException: public CImgException {
  1971. CImgIOException(const char *format, ...) { _cimg_exception_err("CImgIOException",true); }
  1972. };
  1973. // The CImgDisplayException class is used to throw an exception related to display problems
  1974. // encountered in a library function call.
  1975. struct CImgDisplayException: public CImgException {
  1976. CImgDisplayException(const char *format, ...) { _cimg_exception_err("CImgDisplayException",false); }
  1977. };
  1978. // The CImgWarningException class is used to throw an exception for warnings
  1979. // encountered in a library function call.
  1980. struct CImgWarningException: public CImgException {
  1981. CImgWarningException(const char *format, ...) { _cimg_exception_err("CImgWarningException",false); }
  1982. };
  1983. /*-------------------------------------
  1984. #
  1985. # Definition of the namespace 'cimg'
  1986. #
  1987. --------------------------------------*/
  1988. //! Namespace that encompasses \a low-level functions and variables of the %CImg Library.
  1989. /**
  1990. Most of the functions and variables within this namespace are used by the library for low-level processing.
  1991. Nevertheless, documented variables and functions of this namespace may be used safely in your own source code.
  1992. \warning Never write <tt>using namespace cimg_library::cimg;</tt> in your source code, since a lot of functions of the
  1993. <tt>cimg::</tt> namespace have prototypes similar to standard C functions that could defined in the global namespace <tt>::</tt>.
  1994. **/
  1995. namespace cimg {
  1996. // Define the traits that will be used to determine the best data type to work with.
  1997. //
  1998. template<typename T> struct type {
  1999. static const char* string() {
  2000. static const char* s[] = { "unknown", "unknown8", "unknown16", "unknown24",
  2001. "unknown32", "unknown40", "unknown48", "unknown56",
  2002. "unknown64", "unknown72", "unknown80", "unknown88",
  2003. "unknown96", "unknown104", "unknown112", "unknown120",
  2004. "unknown128" };
  2005. return s[(sizeof(T)<17)?sizeof(T):0];
  2006. }
  2007. static bool is_float() { return false; }
  2008. static T min() { return (T)-1>0?(T)0:(T)-1<<(8*sizeof(T)-1); }
  2009. static T max() { return (T)-1>0?(T)-1:~((T)-1<<(8*sizeof(T)-1)); }
  2010. static const char* format() { return "%s"; }
  2011. static const char* format(const T val) { static const char *s = "unknown"; return s; }
  2012. };
  2013. template<> struct type<bool> {
  2014. static const char* string() { static const char *const s = "bool"; return s; }
  2015. static bool is_float() { return false; }
  2016. static bool min() { return false; }
  2017. static bool max() { return true; }
  2018. static const char* format() { return "%s"; }
  2019. static const char* format(const bool val) { static const char* s[] = { "false", "true" }; return s[val?1:0]; }
  2020. };
  2021. template<> struct type<unsigned char> {
  2022. static const char* string() { static const char *const s = "unsigned char"; return s; }
  2023. static bool is_float() { return false; }
  2024. static unsigned char min() { return 0; }
  2025. static unsigned char max() { return (unsigned char)~0U; }
  2026. static const char* format() { return "%u"; }
  2027. static unsigned int format(const unsigned char val) { return (unsigned int)val; }
  2028. };
  2029. template<> struct type<char> {
  2030. static const char* string() { static const char *const s = "char"; return s; }
  2031. static bool is_float() { return false; }
  2032. static char min() { return (char)(-1L<<(8*sizeof(char)-1)); }
  2033. static char max() { return ~((char)(-1L<<(8*sizeof(char)-1))); }
  2034. static const char* format() { return "%d"; }
  2035. static int format(const char val) { return (int)val; }
  2036. };
  2037. template<> struct type<signed char> {
  2038. static const char* string() { static const char *const s = "signed char"; return s; }
  2039. static bool is_float() { return false; }
  2040. static signed char min() { return (signed char)(-1L<<(8*sizeof(signed char)-1)); }
  2041. static signed char max() { return ~((signed char)(-1L<<(8*sizeof(signed char)-1))); }
  2042. static const char* format() { return "%d"; }
  2043. static unsigned int format(const signed char val) { return (int)val; }
  2044. };
  2045. template<> struct type<unsigned short> {
  2046. static const char* string() { static const char *const s = "unsigned short"; return s; }
  2047. static bool is_float() { return false; }
  2048. static unsigned short min() { return 0; }
  2049. static unsigned short max() { return (unsigned short)~0U; }
  2050. static const char* format() { return "%u"; }
  2051. static unsigned int format(const unsigned short val) { return (unsigned int)val; }
  2052. };
  2053. template<> struct type<short> {
  2054. static const char* string() { static const char *const s = "short"; return s; }
  2055. static bool is_float() { return false; }
  2056. static short min() { return (short)(-1L<<(8*sizeof(short)-1)); }
  2057. static short max() { return ~((short)(-1L<<(8*sizeof(short)-1))); }
  2058. static const char* format() { return "%d"; }
  2059. static int format(const short val) { return (int)val; }
  2060. };
  2061. template<> struct type<unsigned int> {
  2062. static const char* string() { static const char *const s = "unsigned int"; return s; }
  2063. static bool is_float() { return false; }
  2064. static unsigned int min() { return 0; }
  2065. static unsigned int max() { return (unsigned int)~0U; }
  2066. static const char* format() { return "%u"; }
  2067. static unsigned int format(const unsigned int val) { return val; }
  2068. };
  2069. template<> struct type<int> {
  2070. static const char* string() { static const char *const s = "int"; return s; }
  2071. static bool is_float() { return false; }
  2072. static int min() { return (int)(-1L<<(8*sizeof(int)-1)); }
  2073. static int max() { return ~((int)(-1L<<(8*sizeof(int)-1))); }
  2074. static const char* format() { return "%d"; }
  2075. static int format(const int val) { return val; }
  2076. };
  2077. template<> struct type<unsigned long> {
  2078. static const char* string() { static const char *const s = "unsigned long"; return s; }
  2079. static bool is_float() { return false; }
  2080. static unsigned long min() { return 0; }
  2081. static unsigned long max() { return (unsigned long)~0UL; }
  2082. static const char* format() { return "%lu"; }
  2083. static unsigned long format(const unsigned long val) { return val; }
  2084. };
  2085. template<> struct type<long> {
  2086. static const char* string() { static const char *const s = "long"; return s; }
  2087. static bool is_float() { return false; }
  2088. static long min() { return (long)(-1L<<(8*sizeof(long)-1)); }
  2089. static long max() { return ~((long)(-1L<<(8*sizeof(long)-1))); }
  2090. static const char* format() { return "%ld"; }
  2091. static long format(const long val) { return val; }
  2092. };
  2093. template<> struct type<float> {
  2094. static const char* string() { static const char *const s = "float"; return s; }
  2095. static bool is_float() { return true; }
  2096. static float min() { return -3.4E38f; }
  2097. static float max() { return 3.4E38f; }
  2098. static const char* format() { return "%g"; }
  2099. static double format(const float val) { return (double)val; }
  2100. };
  2101. template<> struct type<double> {
  2102. static const char* string() { static const char *const s = "double"; return s; }
  2103. static bool is_float() { return true; }
  2104. static double min() { return -1.7E308; }
  2105. static double max() { return 1.7E308; }
  2106. static const char* format() { return "%g"; }
  2107. static double format(const double val) { return val; }
  2108. };
  2109. template<typename T, typename t> struct superset { typedef T type; };
  2110. template<> struct superset<bool,unsigned char> { typedef unsigned char type; };
  2111. template<> struct superset<bool,char> { typedef char type; };
  2112. template<> struct superset<bool,signed char> { typedef signed char type; };
  2113. template<> struct superset<bool,unsigned short> { typedef unsigned short type; };
  2114. template<> struct superset<bool,short> { typedef short type; };
  2115. template<> struct superset<bool,unsigned int> { typedef unsigned int type; };
  2116. template<> struct superset<bool,int> { typedef int type; };
  2117. template<> struct superset<bool,unsigned long> { typedef unsigned long type; };
  2118. template<> struct superset<bool,long> { typedef long type; };
  2119. template<> struct superset<bool,float> { typedef float type; };
  2120. template<> struct superset<bool,double> { typedef double type; };
  2121. template<> struct superset<unsigned char,char> { typedef short type; };
  2122. template<> struct superset<unsigned char,signed char> { typedef short type; };
  2123. template<> struct superset<unsigned char,unsigned short> { typedef unsigned short type; };
  2124. template<> struct superset<unsigned char,short> { typedef short type; };
  2125. template<> struct superset<unsigned char,unsigned int> { typedef unsigned int type; };
  2126. template<> struct superset<unsigned char,int> { typedef int type; };
  2127. template<> struct superset<unsigned char,unsigned long> { typedef unsigned long type; };
  2128. template<> struct superset<unsigned char,long> { typedef long type; };
  2129. template<> struct superset<unsigned char,float> { typedef float type; };
  2130. template<> struct superset<unsigned char,double> { typedef double type; };
  2131. template<> struct superset<signed char,unsigned char> { typedef short type; };
  2132. template<> struct superset<signed char,char> { typedef short type; };
  2133. template<> struct superset<signed char,unsigned short> { typedef int type; };
  2134. template<> struct superset<signed char,short> { typedef short type; };
  2135. template<> struct superset<signed char,unsigned int> { typedef long type; };
  2136. template<> struct superset<signed char,int> { typedef int type; };
  2137. template<> struct superset<signed char,unsigned long> { typedef long type; };
  2138. template<> struct superset<signed char,long> { typedef long type; };
  2139. template<> struct superset<signed char,float> { typedef float type; };
  2140. template<> struct superset<signed char,double> { typedef double type; };
  2141. template<> struct superset<char,unsigned char> { typedef short type; };
  2142. template<> struct superset<char,signed char> { typedef short type; };
  2143. template<> struct superset<char,unsigned short> { typedef int type; };
  2144. template<> struct superset<char,short> { typedef short type; };
  2145. template<> struct superset<char,unsigned int> { typedef long type; };
  2146. template<> struct superset<char,int> { typedef int type; };
  2147. template<> struct superset<char,unsigned long> { typedef long type; };
  2148. template<> struct superset<char,long> { typedef long type; };
  2149. template<> struct superset<char,float> { typedef float type; };
  2150. template<> struct superset<char,double> { typedef double type; };
  2151. template<> struct superset<unsigned short,char> { typedef int type; };
  2152. template<> struct superset<unsigned short,signed char> { typedef int type; };
  2153. template<> struct superset<unsigned short,short> { typedef int type; };
  2154. template<> struct superset<unsigned short,unsigned int> { typedef unsigned int type; };
  2155. template<> struct superset<unsigned short,int> { typedef int type; };
  2156. template<> struct superset<unsigned short,unsigned long> { typedef unsigned long type; };
  2157. template<> struct superset<unsigned short,long> { typedef long type; };
  2158. template<> struct superset<unsigned short,float> { typedef float type; };
  2159. template<> struct superset<unsigned short,double> { typedef double type; };
  2160. template<> struct superset<short,unsigned short> { typedef int type; };
  2161. template<> struct superset<short,unsigned int> { typedef long type; };
  2162. template<> struct superset<short,int> { typedef int type; };
  2163. template<> struct superset<short,unsigned long> { typedef long type; };
  2164. template<> struct superset<short,long> { typedef long type; };
  2165. template<> struct superset<short,float> { typedef float type; };
  2166. template<> struct superset<short,double> { typedef double type; };
  2167. template<> struct superset<unsigned int,char> { typedef long type; };
  2168. template<> struct superset<unsigned int,signed char> { typedef long type; };
  2169. template<> struct superset<unsigned int,short> { typedef long type; };
  2170. template<> struct superset<unsigned int,int> { typedef long type; };
  2171. template<> struct superset<unsigned int,unsigned long> { typedef unsigned long type; };
  2172. template<> struct superset<unsigned int,long> { typedef long type; };
  2173. template<> struct superset<unsigned int,float> { typedef float type; };
  2174. template<> struct superset<unsigned int,double> { typedef double type; };
  2175. template<> struct superset<int,unsigned int> { typedef long type; };
  2176. template<> struct superset<int,unsigned long> { typedef long type; };
  2177. template<> struct superset<int,long> { typedef long type; };
  2178. template<> struct superset<int,float> { typedef float type; };
  2179. template<> struct superset<int,double> { typedef double type; };
  2180. template<> struct superset<unsigned long,char> { typedef long type; };
  2181. template<> struct superset<unsigned long,signed char> { typedef long type; };
  2182. template<> struct superset<unsigned long,short> { typedef long type; };
  2183. template<> struct superset<unsigned long,int> { typedef long type; };
  2184. template<> struct superset<unsigned long,long> { typedef long type; };
  2185. template<> struct superset<unsigned long,float> { typedef float type; };
  2186. template<> struct superset<unsigned long,double> { typedef double type; };
  2187. template<> struct superset<long,float> { typedef float type; };
  2188. template<> struct superset<long,double> { typedef double type; };
  2189. template<> struct superset<float,double> { typedef double type; };
  2190. template<typename t1, typename t2, typename t3> struct superset2 {
  2191. typedef typename superset<t1, typename superset<t2,t3>::type>::type type;
  2192. };
  2193. template<typename t1, typename t2, typename t3, typename t4> struct superset3 {
  2194. typedef typename superset<t1, typename superset2<t2,t3,t4>::type>::type type;
  2195. };
  2196. template<typename t1, typename t2> struct last { typedef t2 type; };
  2197. #define _cimg_Tuchar typename cimg::superset<T,unsigned char>::type
  2198. #define _cimg_Tint typename cimg::superset<T,int>::type
  2199. #define _cimg_Tfloat typename cimg::superset<T,float>::type
  2200. #define _cimg_Tdouble typename cimg::superset<T,double>::type
  2201. #define _cimg_Tt typename cimg::superset<T,t>::type
  2202. // Define internal library variables.
  2203. //
  2204. #if cimg_display==1
  2205. struct X11info {
  2206. volatile unsigned int nb_wins;
  2207. pthread_t* event_thread;
  2208. CImgDisplay* wins[1024];
  2209. Display* display;
  2210. unsigned int nb_bits;
  2211. GC* gc;
  2212. bool blue_first;
  2213. bool byte_order;
  2214. bool shm_enabled;
  2215. #ifdef cimg_use_xrandr
  2216. XRRScreenSize *resolutions;
  2217. Rotation curr_rotation;
  2218. unsigned int curr_resolution;
  2219. unsigned int nb_resolutions;
  2220. #endif
  2221. X11info():nb_wins(0),event_thread(0),display(0),
  2222. nb_bits(0),gc(0),blue_first(false),byte_order(false),shm_enabled(false) {
  2223. #ifdef cimg_use_xrandr
  2224. resolutions = 0;
  2225. curr_rotation = 0;
  2226. curr_resolution = nb_resolutions = 0;
  2227. #endif
  2228. }
  2229. };
  2230. #if defined(cimg_module)
  2231. X11info& X11attr();
  2232. #elif defined(cimg_main)
  2233. X11info& X11attr() { static X11info val; return val; }
  2234. #else
  2235. inline X11info& X11attr() { static X11info val; return val; }
  2236. #endif
  2237. #elif cimg_display==2
  2238. struct Win32info {
  2239. HANDLE wait_event;
  2240. Win32info() { wait_event = CreateEvent(0,FALSE,FALSE,0); }
  2241. };
  2242. #if defined(cimg_module)
  2243. Win32info& Win32attr();
  2244. #elif defined(cimg_main)
  2245. Win32info& Win32attr() { static Win32info val; return val; }
  2246. #else
  2247. inline Win32info& Win32attr() { static Win32info val; return val; }
  2248. #endif
  2249. #elif cimg_display==3
  2250. struct CarbonInfo {
  2251. MPCriticalRegionID windowListCR; // Protects access to the list of windows
  2252. int windowCount; // Count of displays used on the screen
  2253. pthread_t event_thread; // The background event thread
  2254. MPSemaphoreID sync_event; // Event used to perform tasks synchronizations
  2255. MPSemaphoreID wait_event; // Event used to notify that new events occured on the display
  2256. MPQueueID com_queue; // The message queue
  2257. CarbonInfo(): windowCount(0),event_thread(0),sync_event(0),com_queue(0) {
  2258. if (MPCreateCriticalRegion(&windowListCR) != noErr) // Create the critical region
  2259. throw CImgDisplayException("MPCreateCriticalRegion failed.");
  2260. if (MPCreateSemaphore(1, 0, &sync_event) != noErr) // Create the inter-thread sync object
  2261. throw CImgDisplayException("MPCreateSemaphore failed.");
  2262. if (MPCreateSemaphore(1, 0, &wait_event) != noErr) // Create the event sync object
  2263. throw CImgDisplayException("MPCreateSemaphore failed.");
  2264. if (MPCreateQueue(&com_queue) != noErr) // Create the shared queue
  2265. throw CImgDisplayException("MPCreateQueue failed.");
  2266. }
  2267. ~CarbonInfo() {
  2268. if (event_thread != 0) { // Terminates the resident thread, if needed
  2269. pthread_cancel(event_thread);
  2270. pthread_join(event_thread, NULL);
  2271. event_thread = 0;
  2272. }
  2273. if (MPDeleteCriticalRegion(windowListCR) != noErr) // Delete the critical region
  2274. throw CImgDisplayException("MPDeleteCriticalRegion failed.");
  2275. if (MPDeleteSemaphore(wait_event) != noErr) // Delete the event sync event
  2276. throw CImgDisplayException("MPDeleteEvent failed.");
  2277. if (MPDeleteSemaphore(sync_event) != noErr) // Delete the inter-thread sync event
  2278. throw CImgDisplayException("MPDeleteEvent failed.");
  2279. if (MPDeleteQueue(com_queue) != noErr) // Delete the shared queue
  2280. throw CImgDisplayException("MPDeleteQueue failed.");
  2281. }
  2282. };
  2283. #if defined(cimg_module)
  2284. CarbonInfo& CarbonAttr();
  2285. #elif defined(cimg_main)
  2286. CarbonInfo CarbonAttr() { static CarbonInfo val; return val; }
  2287. #else
  2288. inline CarbonInfo& CarbonAttr() { static CarbonInfo val; return val; }
  2289. #endif
  2290. #endif
  2291. #if cimg_display==1
  2292. // Keycodes for X11-based graphical systems.
  2293. //
  2294. const unsigned int keyESC = XK_Escape;
  2295. const unsigned int keyF1 = XK_F1;
  2296. const unsigned int keyF2 = XK_F2;
  2297. const unsigned int keyF3 = XK_F3;
  2298. const unsigned int keyF4 = XK_F4;
  2299. const unsigned int keyF5 = XK_F5;
  2300. const unsigned int keyF6 = XK_F6;
  2301. const unsigned int keyF7 = XK_F7;
  2302. const unsigned int keyF8 = XK_F8;
  2303. const unsigned int keyF9 = XK_F9;
  2304. const unsigned int keyF10 = XK_F10;
  2305. const unsigned int keyF11 = XK_F11;
  2306. const unsigned int keyF12 = XK_F12;
  2307. const unsigned int keyPAUSE = XK_Pause;
  2308. const unsigned int key1 = XK_1;
  2309. const unsigned int key2 = XK_2;
  2310. const unsigned int key3 = XK_3;
  2311. const unsigned int key4 = XK_4;
  2312. const unsigned int key5 = XK_5;
  2313. const unsigned int key6 = XK_6;
  2314. const unsigned int key7 = XK_7;
  2315. const unsigned int key8 = XK_8;
  2316. const unsigned int key9 = XK_9;
  2317. const unsigned int key0 = XK_0;
  2318. const unsigned int keyBACKSPACE = XK_BackSpace;
  2319. const unsigned int keyINSERT = XK_Insert;
  2320. const unsigned int keyHOME = XK_Home;
  2321. const unsigned int keyPAGEUP = XK_Page_Up;
  2322. const unsigned int keyTAB = XK_Tab;
  2323. const unsigned int keyQ = XK_q;
  2324. const unsigned int keyW = XK_w;
  2325. const unsigned int keyE = XK_e;
  2326. const unsigned int keyR = XK_r;
  2327. const unsigned int keyT = XK_t;
  2328. const unsigned int keyY = XK_y;
  2329. const unsigned int keyU = XK_u;
  2330. const unsigned int keyI = XK_i;
  2331. const unsigned int keyO = XK_o;
  2332. const unsigned int keyP = XK_p;
  2333. const unsigned int keyDELETE = XK_Delete;
  2334. const unsigned int keyEND = XK_End;
  2335. const unsigned int keyPAGEDOWN = XK_Page_Down;
  2336. const unsigned int keyCAPSLOCK = XK_Caps_Lock;
  2337. const unsigned int keyA = XK_a;
  2338. const unsigned int keyS = XK_s;
  2339. const unsigned int keyD = XK_d;
  2340. const unsigned int keyF = XK_f;
  2341. const unsigned int keyG = XK_g;
  2342. const unsigned int keyH = XK_h;
  2343. const unsigned int keyJ = XK_j;
  2344. const unsigned int keyK = XK_k;
  2345. const unsigned int keyL = XK_l;
  2346. const unsigned int keyENTER = XK_Return;
  2347. const unsigned int keySHIFTLEFT = XK_Shift_L;
  2348. const unsigned int keyZ = XK_z;
  2349. const unsigned int keyX = XK_x;
  2350. const unsigned int keyC = XK_c;
  2351. const unsigned int keyV = XK_v;
  2352. const unsigned int keyB = XK_b;
  2353. const unsigned int keyN = XK_n;
  2354. const unsigned int keyM = XK_m;
  2355. const unsigned int keySHIFTRIGHT = XK_Shift_R;
  2356. const unsigned int keyARROWUP = XK_Up;
  2357. const unsigned int keyCTRLLEFT = XK_Control_L;
  2358. const unsigned int keyAPPLEFT = XK_Super_L;
  2359. const unsigned int keyALT = XK_Alt_L;
  2360. const unsigned int keySPACE = XK_space;
  2361. const unsigned int keyALTGR = XK_Alt_R;
  2362. const unsigned int keyAPPRIGHT = XK_Super_R;
  2363. const unsigned int keyMENU = XK_Menu;
  2364. const unsigned int keyCTRLRIGHT = XK_Control_R;
  2365. const unsigned int keyARROWLEFT = XK_Left;
  2366. const unsigned int keyARROWDOWN = XK_Down;
  2367. const unsigned int keyARROWRIGHT = XK_Right;
  2368. const unsigned int keyPAD0 = XK_KP_0;
  2369. const unsigned int keyPAD1 = XK_KP_1;
  2370. const unsigned int keyPAD2 = XK_KP_2;
  2371. const unsigned int keyPAD3 = XK_KP_3;
  2372. const unsigned int keyPAD4 = XK_KP_4;
  2373. const unsigned int keyPAD5 = XK_KP_5;
  2374. const unsigned int keyPAD6 = XK_KP_6;
  2375. const unsigned int keyPAD7 = XK_KP_7;
  2376. const unsigned int keyPAD8 = XK_KP_8;
  2377. const unsigned int keyPAD9 = XK_KP_9;
  2378. const unsigned int keyPADADD = XK_KP_Add;
  2379. const unsigned int keyPADSUB = XK_KP_Subtract;
  2380. const unsigned int keyPADMUL = XK_KP_Multiply;
  2381. const unsigned int keyPADDIV = XK_KP_Divide;
  2382. #elif cimg_display==2
  2383. // Keycodes for Windows.
  2384. //
  2385. const unsigned int keyESC = VK_ESCAPE;
  2386. const unsigned int keyF1 = VK_F1;
  2387. const unsigned int keyF2 = VK_F2;
  2388. const unsigned int keyF3 = VK_F3;
  2389. const unsigned int keyF4 = VK_F4;
  2390. const unsigned int keyF5 = VK_F5;
  2391. const unsigned int keyF6 = VK_F6;
  2392. const unsigned int keyF7 = VK_F7;
  2393. const unsigned int keyF8 = VK_F8;
  2394. const unsigned int keyF9 = VK_F9;
  2395. const unsigned int keyF10 = VK_F10;
  2396. const unsigned int keyF11 = VK_F11;
  2397. const unsigned int keyF12 = VK_F12;
  2398. const unsigned int keyPAUSE = VK_PAUSE;
  2399. const unsigned int key1 = '1';
  2400. const unsigned int key2 = '2';
  2401. const unsigned int key3 = '3';
  2402. const unsigned int key4 = '4';
  2403. const unsigned int key5 = '5';
  2404. const unsigned int key6 = '6';
  2405. const unsigned int key7 = '7';
  2406. const unsigned int key8 = '8';
  2407. const unsigned int key9 = '9';
  2408. const unsigned int key0 = '0';
  2409. const unsigned int keyBACKSPACE = VK_BACK;
  2410. const unsigned int keyINSERT = VK_INSERT;
  2411. const unsigned int keyHOME = VK_HOME;
  2412. const unsigned int keyPAGEUP = VK_PRIOR;
  2413. const unsigned int keyTAB = VK_TAB;
  2414. const unsigned int keyQ = 'Q';
  2415. const unsigned int keyW = 'W';
  2416. const unsigned int keyE = 'E';
  2417. const unsigned int keyR = 'R';
  2418. const unsigned int keyT = 'T';
  2419. const unsigned int keyY = 'Y';
  2420. const unsigned int keyU = 'U';
  2421. const unsigned int keyI = 'I';
  2422. const unsigned int keyO = 'O';
  2423. const unsigned int keyP = 'P';
  2424. const unsigned int keyDELETE = VK_DELETE;
  2425. const unsigned int keyEND = VK_END;
  2426. const unsigned int keyPAGEDOWN = VK_NEXT;
  2427. const unsigned int keyCAPSLOCK = VK_CAPITAL;
  2428. const unsigned int keyA = 'A';
  2429. const unsigned int keyS = 'S';
  2430. const unsigned int keyD = 'D';
  2431. const unsigned int keyF = 'F';
  2432. const unsigned int keyG = 'G';
  2433. const unsigned int keyH = 'H';
  2434. const unsigned int keyJ = 'J';
  2435. const unsigned int keyK = 'K';
  2436. const unsigned int keyL = 'L';
  2437. const unsigned int keyENTER = VK_RETURN;
  2438. const unsigned int keySHIFTLEFT = VK_SHIFT;
  2439. const unsigned int keyZ = 'Z';
  2440. const unsigned int keyX = 'X';
  2441. const unsigned int keyC = 'C';
  2442. const unsigned int keyV = 'V';
  2443. const unsigned int keyB = 'B';
  2444. const unsigned int keyN = 'N';
  2445. const unsigned int keyM = 'M';
  2446. const unsigned int keySHIFTRIGHT = VK_SHIFT;
  2447. const unsigned int keyARROWUP = VK_UP;
  2448. const unsigned int keyCTRLLEFT = VK_CONTROL;
  2449. const unsigned int keyAPPLEFT = VK_LWIN;
  2450. const unsigned int keyALT = VK_LMENU;
  2451. const unsigned int keySPACE = VK_SPACE;
  2452. const unsigned int keyALTGR = VK_CONTROL;
  2453. const unsigned int keyAPPRIGHT = VK_RWIN;
  2454. const unsigned int keyMENU = VK_APPS;
  2455. const unsigned int keyCTRLRIGHT = VK_CONTROL;
  2456. const unsigned int keyARROWLEFT = VK_LEFT;
  2457. const unsigned int keyARROWDOWN = VK_DOWN;
  2458. const unsigned int keyARROWRIGHT = VK_RIGHT;
  2459. const unsigned int keyPAD0 = 0x60;
  2460. const unsigned int keyPAD1 = 0x61;
  2461. const unsigned int keyPAD2 = 0x62;
  2462. const unsigned int keyPAD3 = 0x63;
  2463. const unsigned int keyPAD4 = 0x64;
  2464. const unsigned int keyPAD5 = 0x65;
  2465. const unsigned int keyPAD6 = 0x66;
  2466. const unsigned int keyPAD7 = 0x67;
  2467. const unsigned int keyPAD8 = 0x68;
  2468. const unsigned int keyPAD9 = 0x69;
  2469. const unsigned int keyPADADD = VK_ADD;
  2470. const unsigned int keyPADSUB = VK_SUBTRACT;
  2471. const unsigned int keyPADMUL = VK_MULTIPLY;
  2472. const unsigned int keyPADDIV = VK_DIVIDE;
  2473. #elif cimg_display==3
  2474. // Keycodes for MacOSX, when using the Carbon framework.
  2475. //
  2476. const unsigned int keyESC = kEscapeCharCode;
  2477. const unsigned int keyF1 = 2U;
  2478. const unsigned int keyF2 = 3U;
  2479. const unsigned int keyF3 = 4U;
  2480. const unsigned int keyF4 = 5U;
  2481. const unsigned int keyF5 = 6U;
  2482. const unsigned int keyF6 = 7U;
  2483. const unsigned int keyF7 = 8U;
  2484. const unsigned int keyF8 = 9U;
  2485. const unsigned int keyF9 = 10U;
  2486. const unsigned int keyF10 = 11U;
  2487. const unsigned int keyF11 = 12U;
  2488. const unsigned int keyF12 = 13U;
  2489. const unsigned int keyPAUSE = 14U;
  2490. const unsigned int key1 = '1';
  2491. const unsigned int key2 = '2';
  2492. const unsigned int key3 = '3';
  2493. const unsigned int key4 = '4';
  2494. const unsigned int key5 = '5';
  2495. const unsigned int key6 = '6';
  2496. const unsigned int key7 = '7';
  2497. const unsigned int key8 = '8';
  2498. const unsigned int key9 = '9';
  2499. const unsigned int key0 = '0';
  2500. const unsigned int keyBACKSPACE = kBackspaceCharCode;
  2501. const unsigned int keyINSERT = 26U;
  2502. const unsigned int keyHOME = kHomeCharCode;
  2503. const unsigned int keyPAGEUP = kPageUpCharCode;
  2504. const unsigned int keyTAB = kTabCharCode;
  2505. const unsigned int keyQ = 'q';
  2506. const unsigned int keyW = 'w';
  2507. const unsigned int keyE = 'e';
  2508. const unsigned int keyR = 'r';
  2509. const unsigned int keyT = 't';
  2510. const unsigned int keyY = 'y';
  2511. const unsigned int keyU = 'u';
  2512. const unsigned int keyI = 'i';
  2513. const unsigned int keyO = 'o';
  2514. const unsigned int keyP = 'p';
  2515. const unsigned int keyDELETE = kDeleteCharCode;
  2516. const unsigned int keyEND = kEndCharCode;
  2517. const unsigned int keyPAGEDOWN = kPageDownCharCode;
  2518. const unsigned int keyCAPSLOCK = 43U;
  2519. const unsigned int keyA = 'a';
  2520. const unsigned int keyS = 's';
  2521. const unsigned int keyD = 'd';
  2522. const unsigned int keyF = 'f';
  2523. const unsigned int keyG = 'g';
  2524. const unsigned int keyH = 'h';
  2525. const unsigned int keyJ = 'j';
  2526. const unsigned int keyK = 'k';
  2527. const unsigned int keyL = 'l';
  2528. const unsigned int keyENTER = kEnterCharCode;
  2529. const unsigned int keySHIFTLEFT = 54U; //Macintosh modifier key, emulated
  2530. const unsigned int keyZ = 'z';
  2531. const unsigned int keyX = 'x';
  2532. const unsigned int keyC = 'c';
  2533. const unsigned int keyV = 'v';
  2534. const unsigned int keyB = 'b';
  2535. const unsigned int keyN = 'n';
  2536. const unsigned int keyM = 'm';
  2537. const unsigned int keySHIFTRIGHT = 62U; //Macintosh modifier key, emulated
  2538. const unsigned int keyARROWUP = kUpArrowCharCode;
  2539. const unsigned int keyCTRLLEFT = 64U; //Macintosh modifier key, emulated
  2540. const unsigned int keyAPPLEFT = 65U; //Macintosh modifier key, emulated
  2541. const unsigned int keyALT = 66U;
  2542. const unsigned int keySPACE = kSpaceCharCode;
  2543. const unsigned int keyALTGR = 67U; //Macintosh modifier key, emulated
  2544. const unsigned int keyAPPRIGHT = 68U; //Aliased on keyAPPLEFT
  2545. const unsigned int keyMENU = 69U;
  2546. const unsigned int keyCTRLRIGHT = 70U; //Macintosh modifier key, emulated
  2547. const unsigned int keyARROWLEFT = kLeftArrowCharCode;
  2548. const unsigned int keyARROWDOWN = kDownArrowCharCode;
  2549. const unsigned int keyARROWRIGHT = kRightArrowCharCode;
  2550. const unsigned int keyPAD0 = 74U;
  2551. const unsigned int keyPAD1 = 75U;
  2552. const unsigned int keyPAD2 = 76U;
  2553. const unsigned int keyPAD3 = 77U;
  2554. const unsigned int keyPAD4 = 78U;
  2555. const unsigned int keyPAD5 = 79U;
  2556. const unsigned int keyPAD6 = 80U;
  2557. const unsigned int keyPAD7 = 81U;
  2558. const unsigned int keyPAD8 = 82U;
  2559. const unsigned int keyPAD9 = 83U;
  2560. const unsigned int keyPADADD = 84U;
  2561. const unsigned int keyPADSUB = 85U;
  2562. const unsigned int keyPADMUL = 86U;
  2563. const unsigned int keyPADDIV = 87U;
  2564. #else
  2565. // Define unknow keycodes when no display are available.
  2566. // (should rarely be used then !).
  2567. //
  2568. const unsigned int keyESC = 1U;
  2569. const unsigned int keyF1 = 2U;
  2570. const unsigned int keyF2 = 3U;
  2571. const unsigned int keyF3 = 4U;
  2572. const unsigned int keyF4 = 5U;
  2573. const unsigned int keyF5 = 6U;
  2574. const unsigned int keyF6 = 7U;
  2575. const unsigned int keyF7 = 8U;
  2576. const unsigned int keyF8 = 9U;
  2577. const unsigned int keyF9 = 10U;
  2578. const unsigned int keyF10 = 11U;
  2579. const unsigned int keyF11 = 12U;
  2580. const unsigned int keyF12 = 13U;
  2581. const unsigned int keyPAUSE = 14U;
  2582. const unsigned int key1 = 15U;
  2583. const unsigned int key2 = 16U;
  2584. const unsigned int key3 = 17U;
  2585. const unsigned int key4 = 18U;
  2586. const unsigned int key5 = 19U;
  2587. const unsigned int key6 = 20U;
  2588. const unsigned int key7 = 21U;
  2589. const unsigned int key8 = 22U;
  2590. const unsigned int key9 = 23U;
  2591. const unsigned int key0 = 24U;
  2592. const unsigned int keyBACKSPACE = 25U;
  2593. const unsigned int keyINSERT = 26U;
  2594. const unsigned int keyHOME = 27U;
  2595. const unsigned int keyPAGEUP = 28U;
  2596. const unsigned int keyTAB = 29U;
  2597. const unsigned int keyQ = 30U;
  2598. const unsigned int keyW = 31U;
  2599. const unsigned int keyE = 32U;
  2600. const unsigned int keyR = 33U;
  2601. const unsigned int keyT = 34U;
  2602. const unsigned int keyY = 35U;
  2603. const unsigned int keyU = 36U;
  2604. const unsigned int keyI = 37U;
  2605. const unsigned int keyO = 38U;
  2606. const unsigned int keyP = 39U;
  2607. const unsigned int keyDELETE = 40U;
  2608. const unsigned int keyEND = 41U;
  2609. const unsigned int keyPAGEDOWN = 42U;
  2610. const unsigned int keyCAPSLOCK = 43U;
  2611. const unsigned int keyA = 44U;
  2612. const unsigned int keyS = 45U;
  2613. const unsigned int keyD = 46U;
  2614. const unsigned int keyF = 47U;
  2615. const unsigned int keyG = 48U;
  2616. const unsigned int keyH = 49U;
  2617. const unsigned int keyJ = 50U;
  2618. const unsigned int keyK = 51U;
  2619. const unsigned int keyL = 52U;
  2620. const unsigned int keyENTER = 53U;
  2621. const unsigned int keySHIFTLEFT = 54U;
  2622. const unsigned int keyZ = 55U;
  2623. const unsigned int keyX = 56U;
  2624. const unsigned int keyC = 57U;
  2625. const unsigned int keyV = 58U;
  2626. const unsigned int keyB = 59U;
  2627. const unsigned int keyN = 60U;
  2628. const unsigned int keyM = 61U;
  2629. const unsigned int keySHIFTRIGHT = 62U;
  2630. const unsigned int keyARROWUP = 63U;
  2631. const unsigned int keyCTRLLEFT = 64U;
  2632. const unsigned int keyAPPLEFT = 65U;
  2633. const unsigned int keyALT = 66U;
  2634. const unsigned int keySPACE = 67U;
  2635. const unsigned int keyALTGR = 68U;
  2636. const unsigned int keyAPPRIGHT = 69U;
  2637. const unsigned int keyMENU = 70U;
  2638. const unsigned int keyCTRLRIGHT = 71U;
  2639. const unsigned int keyARROWLEFT = 72U;
  2640. const unsigned int keyARROWDOWN = 73U;
  2641. const unsigned int keyARROWRIGHT = 74U;
  2642. const unsigned int keyPAD0 = 75U;
  2643. const unsigned int keyPAD1 = 76U;
  2644. const unsigned int keyPAD2 = 77U;
  2645. const unsigned int keyPAD3 = 78U;
  2646. const unsigned int keyPAD4 = 79U;
  2647. const unsigned int keyPAD5 = 80U;
  2648. const unsigned int keyPAD6 = 81U;
  2649. const unsigned int keyPAD7 = 82U;
  2650. const unsigned int keyPAD8 = 83U;
  2651. const unsigned int keyPAD9 = 84U;
  2652. const unsigned int keyPADADD = 85U;
  2653. const unsigned int keyPADSUB = 86U;
  2654. const unsigned int keyPADMUL = 87U;
  2655. const unsigned int keyPADDIV = 88U;
  2656. #endif
  2657. const double valuePI = 3.14159265358979323846; //!< Definition of the mathematical constant PI
  2658. // Definition of a 7x11 font, used to return a default font for drawing text.
  2659. const unsigned int font7x11[7*11*256/32] = {
  2660. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2661. 0x0,0x0,0x0,0x0,0x0,0x0,0x90,0x0,0x7f0000,0x40000,0x0,0x0,0x4010c0a4,0x82000040,0x11848402,0x18480050,0x80430292,0x8023,0x9008000,
  2662. 0x40218140,0x4000040,0x21800402,0x18000051,0x1060500,0x8083,0x10000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x24002,0x4031,0x80000000,0x10000,
  2663. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x81c0400,0x40020000,0x80070080,0x40440e00,0x0,0x0,0x1,0x88180000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2664. 0x0,0x200000,0x0,0x0,0x80000,0x0,0x0,0x20212140,0x5000020,0x22400204,0x240000a0,0x40848500,0x4044,0x80010038,0x20424285,0xa000020,
  2665. 0x42428204,0x2428e0a0,0x82090a14,0x4104,0x85022014,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10240a7,0x88484040,0x40800000,0x270c3,0x87811e0e,
  2666. 0x7c70e000,0x78,0x3c23c1ef,0x1f3e1e89,0xf1c44819,0xa23cf0f3,0xc3cff120,0xc18307f4,0x4040400,0x20000,0x80080080,0x40200,0x0,
  2667. 0x40000,0x2,0x8040000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8188,0x50603800,0xf3c00000,0x1c004003,0xc700003e,0x18180,0xc993880,0x10204081,
  2668. 0x2071ef9,0xf3e7cf9f,0x3e7c7911,0xe3c78f1e,0x7d1224,0x48906048,0x0,0x4000000,0x0,0x9000,0x0,0x0,0x2000,0x0,0x0,0x0,0x0,0x0,0x0,
  2669. 0x0,0x10240aa,0x14944080,0x23610000,0x68940,0x40831010,0x8891306,0x802044,0x44522208,0x90202088,0x40448819,0xb242890a,0x24011111,
  2670. 0x49448814,0x4040a00,0xe2c3c7,0x8e3f3cb9,0xc1c44216,0xee38b0f2,0xe78f9120,0xc18507e2,0x8040000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2671. 0x101c207,0x88a04001,0x9c00000,0x2200a041,0x8200113a,0x8240,0x50a3110,0x2850a142,0x850c2081,0x2040204,0x8104592,0x142850a1,
  2672. 0x42cd1224,0x4888bc48,0x70e1c387,0xe3b3c70,0xe1c38e1c,0x38707171,0xc3870e1c,0x10791224,0x48906c41,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2673. 0x10003ee,0x15140080,0x21810000,0x48840,0x40851020,0x8911306,0x31fd804,0x9c522408,0x90204088,0x4045081a,0xba42890a,0x24011111,
  2674. 0x49285024,0x2041b00,0x132408,0x910844c8,0x4044821b,0x7244c913,0x24041111,0x49488822,0x8040000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2675. 0x28204,0x85006001,0x6a414000,0x3a004043,0xc700113a,0x8245,0x50a3a00,0x2850a142,0x850c4081,0x2040204,0x81045d2,0x142850a1,
  2676. 0x24951224,0x48852250,0x8102040,0x81054089,0x12244204,0x8108992,0x24489122,0x991224,0x4888b222,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2677. 0x1000143,0xa988080,0x2147c01f,0x88840,0x83091c2c,0x1070f000,0xc000608,0xa48bc408,0x9e3c46f8,0x40460816,0xaa42f10b,0xc3811111,
  2678. 0x35102044,0x1041100,0xf22408,0x9f084488,0x40470212,0x62448912,0x6041111,0x55308846,0x8061c80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2679. 0x1028704,0x8f805801,0x4be28fdf,0x220001f0,0x111a,0x60000182,0x82c5c710,0x44891224,0x489640f1,0xe3c78204,0x810e552,0x142850a1,
  2680. 0x18a51224,0x48822250,0x78f1e3c7,0x8f1f40f9,0xf3e7c204,0x8108912,0x24489122,0x7ea91224,0x4888a222,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2681. 0x10007e2,0x85648080,0x20010000,0x88841,0x8f8232,0x20881000,0xc1fc610,0xbefa2408,0x90204288,0x40450816,0xa642810a,0x4041110a,
  2682. 0x36282084,0x1042080,0x1122408,0x90084488,0x40450212,0x62448912,0x184110a,0x55305082,0x8042700,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2683. 0x1028207,0x82004801,0x68050040,0x1c000040,0x110a,0x60000001,0x45484d10,0x7cf9f3e7,0xcf944081,0x2040204,0x8104532,0x142850a1,
  2684. 0x18a51224,0x48822248,0x89122448,0x91244081,0x2040204,0x8108912,0x24489122,0xc91224,0x48852214,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x282,
  2685. 0x89630080,0x20010c00,0x30108842,0x810222,0x20882306,0x3001800,0x408a2208,0x90202288,0x40448814,0xa642810a,0x2041110a,0x26442104,
  2686. 0x840000,0x1122408,0x90084488,0x40448212,0x62448912,0x84130a,0x36485102,0x8040000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x101c208,0x4f802801,
  2687. 0x8028040,0x40,0x130a,0x2,0x85e897a0,0x44891224,0x489c2081,0x2040204,0x8104532,0x142850a1,0x24cd1224,0x48823c44,0x89122448,
  2688. 0x91244081,0x2040204,0x8108912,0x24489122,0xc93264,0xc9852214,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x100028f,0x109f0080,0x20010c00,
  2689. 0x303071f3,0xc7011c1c,0x4071c306,0x802010,0x3907c1ef,0x1f201e89,0xf3844f90,0xa23c80f2,0x17810e04,0x228223f4,0x840000,0xfbc3c7,
  2690. 0x8f083c88,0x40444212,0x6238f0f2,0x7039d04,0x228423e2,0x8040000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1008780,0x2201800,0xf0014000,0x1f0,
  2691. 0x1d0a,0x5,0x851e140,0x83060c18,0x30671ef9,0xf3e7cf9f,0x3e7c7911,0xe3c78f1e,0x42f8e1c3,0x8702205c,0x7cf9f3e7,0xcf9b3c78,0xf1e3c204,
  2692. 0x8107111,0xc3870e1c,0x10f1d3a7,0x4e823c08,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x40,0x40000400,0x200000,0x0,0x2,0x0,0x0,0x0,0x0,0x18,
  2693. 0x0,0x4,0x44007f,0x0,0x400,0x400000,0x8010,0x0,0x6002,0x8040000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000000,0x200800,0x0,0x0,0x100a,
  2694. 0x400000,0x44,0x0,0x400,0x0,0x0,0x0,0x0,0x0,0x0,0x800,0x0,0x0,0x0,0x0,0x62018,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x31,0x80000800,
  2695. 0x400000,0x0,0x4,0x0,0x0,0x0,0x0,0xc,0x0,0x7,0x3c0000,0x0,0x3800,0x3800000,0x8010,0x0,0x1c001,0x881c0000,0x0,0x0,0x0,0x0,0x0,0x0,
  2696. 0x0,0x0,0x207000,0x0,0x0,0x100a,0xc00000,0x3c,0x0,0xc00,0x0,0x0,0x0,0x0,0x0,0x0,0x1800,0x0,0x0,0x0,0x0,0x1c2070
  2697. };
  2698. // Definition of a 10x13 font (used in dialog boxes).
  2699. const unsigned int font10x13[256*10*13/32] = {
  2700. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2701. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80100c0,
  2702. 0x68000300,0x801,0xc00010,0x100c000,0x68100,0x100c0680,0x2,0x403000,0x1000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2703. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2704. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfc,0x0,0x0,0x0,0x0,0x0,0x4020120,
  2705. 0x58120480,0x402,0x1205008,0x2012050,0x58080,0x20120581,0x40000001,0x804812,0x2000000,0x0,0x300,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2706. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x140,0x80000,0x200402,0x800000,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2707. 0x0,0x7010,0x7000000,0x8000200,0x20000,0xc0002000,0x8008,0x0,0x0,0x0,0x0,0x808,0x4000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2708. 0x0,0x0,0x80000000,0x0,0x0,0x0,0x40000,0x0,0x0,0x0,0x0,0x480,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x70,0x80100c0,0x68000480,0x1001,
  2709. 0xc00010,0x1018000,0x68100,0x100c0680,0x4,0x403000,0x1020000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20140,0x28081883,0x200801,
  2710. 0x2a00000,0x10,0x1c0201c0,0x70040f80,0xc0f81c07,0x0,0x70,0x3e0303c0,0x3c3c0f83,0xe03c2107,0xe08810,0x18c31070,0x3c0703c0,
  2711. 0x783e0842,0x22222208,0x83e04010,0x1008000,0x4000200,0x20001,0x2002,0x408008,0x0,0x0,0x100000,0x0,0x1008,0x2000000,0x0,0x0,0x0,
  2712. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20080,0x38000880,0x8078140f,0x81c00000,0x3e000,0xc020180,0x60080001,0xe0000002,0xc00042,0x108e2010,
  2713. 0xc0300c0,0x300c0303,0xf83c3e0f,0x83e0f81c,0x701c070,0x3c0c41c0,0x701c0701,0xc0001d08,0x42108421,0x8820088,0x4020120,0x58140480,
  2714. 0x802,0x1205008,0x3014050,0xc058080,0x20120581,0x40000002,0x804814,0x2020050,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20140,
  2715. 0x281e2484,0x80200801,0x1c02000,0x10,0x22060220,0x880c0801,0x82208,0x80000001,0x20008,0x41030220,0x40220802,0x402102,0x209010,
  2716. 0x18c31088,0x22088220,0x80080842,0x22222208,0x80204010,0x1014000,0x200,0x20001,0x2000,0x8008,0x0,0x0,0x100000,0x0,0x1008,
  2717. 0x2000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40000500,0x80800010,0x40200000,0x41000,0x12020040,0x10000003,0xa0000006,
  2718. 0x12000c4,0x31014000,0xc0300c0,0x300c0302,0x80402008,0x2008008,0x2008020,0x220c4220,0x88220882,0x20002208,0x42108421,0x8820088,
  2719. 0x0,0x300,0x0,0x0,0x0,0x14000000,0x0,0x200200,0x0,0x20000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0xfc282504,0x80001000,
  2720. 0x82a02000,0x20,0x22020020,0x8140802,0x102208,0x80801006,0x18008,0x9c848220,0x80210802,0x802102,0x20a010,0x15429104,0x22104220,
  2721. 0x80080842,0x22221405,0x404008,0x1022000,0x703c0,0x381e0701,0xc0783c02,0xc09008,0x1d83c070,0x3c078140,0x381c0882,0x21242208,
  2722. 0x81e01008,0x2000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x201e0,0x40220500,0x80800027,0x20e02800,0x9c800,0x12020040,
  2723. 0x20000883,0xa0200002,0x120a044,0x11064010,0x12048120,0x48120484,0x80802008,0x2008008,0x2008020,0x210a4411,0x4411044,0x10884508,
  2724. 0x42108421,0x503c0b0,0x1c0701c0,0x701c0707,0x70381c07,0x1c07008,0x2008020,0x20f01c0,0x701c0701,0xc0201c08,0x82208822,0x883c088,
  2725. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0x50281903,0x20001000,0x80802000,0x20,0x22020040,0x30240f03,0xc0101c08,0x80801018,
  2726. 0x1fc06010,0xa48483c0,0x80210f03,0xe0803f02,0x20c010,0x15429104,0x22104220,0x70080841,0x41540805,0x804008,0x1041000,0x8220,
  2727. 0x40220881,0x882202,0x40a008,0x12422088,0x22088180,0x40100882,0x21241408,0x80201008,0x2031000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2728. 0x0,0x20280,0x401c0200,0x700028,0x21205000,0x92800,0xc1fc080,0x10000883,0xa0200002,0x1205049,0x12c19010,0x12048120,0x48120484,
  2729. 0xf0803c0f,0x3c0f008,0x2008020,0x790a4411,0x4411044,0x10504908,0x42108421,0x5022088,0x2008020,0x8020080,0x88402208,0x82208808,
  2730. 0x2008020,0x1e088220,0x88220882,0x20002608,0x82208822,0x8822088,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0x501c0264,
  2731. 0xa0001000,0x8001fc00,0x7000020,0x22020080,0x83e0082,0x20202207,0x80000020,0x1020,0xa4848220,0x80210802,0x9c2102,0x20c010,
  2732. 0x12425104,0x3c1043c0,0x8080841,0x41540802,0x804008,0x1000000,0x78220,0x40220f81,0x882202,0x40c008,0x12422088,0x22088100,
  2733. 0x60100881,0x41540805,0x406008,0x1849000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20280,0xf0140200,0x880028,0x20e0a03f,0x709c800,
  2734. 0x201c0,0x60000881,0xa0000007,0xc0284b,0x122eb020,0x12048120,0x48120487,0x80802008,0x2008008,0x2008020,0x21094411,0x4411044,
  2735. 0x10204908,0x42108421,0x2022088,0x1e0781e0,0x781e0787,0xf8403e0f,0x83e0f808,0x2008020,0x22088220,0x88220882,0x21fc2a08,0x82208822,
  2736. 0x5022050,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20001,0xf80a0294,0x40001000,0x80002000,0x20,0x22020100,0x8040082,0x20202200,
  2737. 0x80000018,0x1fc06020,0xa48fc220,0x80210802,0x842102,0x20a010,0x12425104,0x20104240,0x8080841,0x41541402,0x1004008,0x1000000,
  2738. 0x88220,0x40220801,0x882202,0x40a008,0x12422088,0x22088100,0x18100881,0x41540805,0x801008,0x2046000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2739. 0x0,0x0,0x0,0x20280,0x401c0f80,0x80880028,0x20005001,0x94800,0x20000,0x880,0xa0000000,0x5015,0x4215040,0x3f0fc3f0,0xfc3f0fc8,
  2740. 0x80802008,0x2008008,0x2008020,0x21094411,0x4411044,0x10505108,0x42108421,0x203c088,0x22088220,0x88220888,0x80402008,0x2008008,
  2741. 0x2008020,0x22088220,0x88220882,0x20002a08,0x82208822,0x5022050,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xa00a0494,0x60001000,
  2742. 0x80002004,0x8020,0x22020200,0x88040882,0x20402201,0x801006,0x18000,0x9f084220,0x40220802,0x442102,0x209010,0x10423088,0x20088220,
  2743. 0x8080840,0x80882202,0x2004008,0x1000000,0x88220,0x40220881,0x882202,0x409008,0x12422088,0x22088100,0x8100880,0x80881402,
  2744. 0x1001008,0x2000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20280,0x40220200,0x80700027,0x20002801,0x92800,0x1fc000,0x980,
  2745. 0xa0000000,0xa017,0x84417840,0x21084210,0x84210848,0x80402008,0x2008008,0x2008020,0x2208c220,0x88220882,0x20882208,0x42108421,
  2746. 0x2020088,0x22088220,0x88220888,0xc8402208,0x82208808,0x2008020,0x22088220,0x88220882,0x20203208,0x82208822,0x2022020,0x0,0x0,0x0,
  2747. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0xa03c0463,0x90000801,0x2004,0x8040,0x1c0703e0,0x70040701,0xc0401c06,0x801001,0x20020,
  2748. 0x400843c0,0x3c3c0f82,0x3c2107,0x1c0881e,0x10423070,0x20070210,0xf0080780,0x80882202,0x3e04004,0x1000000,0x783c0,0x381e0701,
  2749. 0x782202,0x408808,0x12422070,0x3c078100,0x700c0780,0x80882202,0x1e01008,0x2000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x201e0,
  2750. 0xf8000200,0x80080010,0x40000001,0x41000,0x0,0xe80,0xa0000000,0x21,0x8e21038,0x21084210,0x84210848,0xf83c3e0f,0x83e0f81c,
  2751. 0x701c070,0x3c08c1c0,0x701c0701,0xc0005c07,0x81e0781e,0x20200b0,0x1e0781e0,0x781e0787,0x30381c07,0x1c07008,0x2008020,0x1c0881c0,
  2752. 0x701c0701,0xc0201c07,0x81e0781e,0x203c020,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80000,0x801,0x4,0x40,0x0,0x0,0x0,0x1000,
  2753. 0x0,0x3c000000,0x0,0x0,0x0,0x0,0x10000,0x0,0x0,0x4004,0x1000000,0x0,0x0,0x80000,0x400000,0x0,0x20008000,0x0,0x4,0x1008,0x2000000,
  2754. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x8008000f,0x80000000,0x3e000,0x0,0x800,0xa0000400,0x0,0x0,0x0,0x0,0x80000,0x0,
  2755. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x100000,0x0,0x0,0x0,0x0,0x2000,0x0,0x4020040,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80000,
  2756. 0x402,0x8,0x40,0x0,0x0,0x0,0x2000,0x0,0x0,0x0,0x0,0x0,0x0,0xc000,0x0,0x0,0x7004,0x70000fc,0x0,0x0,0x700000,0x800000,0x0,0x20008000,
  2757. 0x0,0x4,0x808,0x4000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x80f00000,0x0,0x0,0x0,0x800,0xa0001800,0x0,0x0,0x0,0x0,
  2758. 0x300000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x600000,0x0,0x0,0x0,0x0,0x0,0x0,0x4020040
  2759. };
  2760. // Definition of a 8x17 font.
  2761. const unsigned int font8x17[8*17*256/32] = {
  2762. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2763. 0x0,0x0,0x0,0x2400,0x2400,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20081834,0x1c0000,0x20081800,0x20081800,0x342008,
  2764. 0x18340000,0x200818,0x80000,0x0,0x180000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4200000,0x0,0x0,
  2765. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c,0x380000,0x4000,0x2000c00,0x40100840,0x70000000,0x0,0x0,0x1c,0x10700000,0x7,0x0,
  2766. 0x1800,0x1800,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1010242c,0x14140000,0x10102414,0x10102414,0x2c1010,0x242c1400,
  2767. 0x101024,0x14100038,0x0,0x240000,0x0,0x0,0x30000000,0x0,0x0,0x4000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x12,0x0,0x8100000,0x0,
  2768. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x80000,0x10004000,0x2001000,0x40000040,0x10000000,0x0,0x0,0x10,0x10100000,0x4,
  2769. 0x0,0x18000000,0x0,0x0,0x0,0x34002400,0x2400,0x0,0x0,0x0,0x3c,0x0,0x8000000,0x0,0x60607800,0x0,0x140000,0x0,0x0,0x0,0x0,0x0,
  2770. 0x44,0x10081834,0x240000,0x10081800,0x10081800,0x1c341008,0x18340000,0x100818,0x84000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x102812,
  2771. 0x8601c10,0x8100800,0x2,0x1c383e3e,0x67e1e7f,0x3e3c0000,0x38,0x1e087e1e,0x7c7f7f1e,0x417c1c42,0x4063611c,0x7e1c7e3e,0xfe414181,
  2772. 0x63827f10,0x40081000,0x8004000,0x2001000,0x40000040,0x10000000,0x0,0x10000000,0x10,0x10100000,0x3c000008,0x0,0x24003e00,
  2773. 0x3f007f00,0x0,0x0,0x2ce91800,0x1882,0x10101c,0xc2103c,0x143c3c00,0x3c00,0x18003c3c,0x10001f00,0x181c00,0x20200810,0x8080808,
  2774. 0x8083e1e,0x7f7f7f7f,0x7c7c7c7c,0x7c611c1c,0x1c1c1c00,0x1e414141,0x41824044,0x810242c,0x14180000,0x8102414,0x8102414,0x382c0810,
  2775. 0x242c1400,0x81024,0x14104014,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x102816,0x3e902010,0x10084910,0x4,0x22084343,0xa402102,0x41620000,
  2776. 0x44,0x33144121,0x42404021,0x41100444,0x40636122,0x43224361,0x10416381,0x22440310,0x20082800,0x4000,0x2001000,0x40000040,
  2777. 0x10000000,0x0,0x10000000,0x10,0x10100000,0x24000008,0x0,0x606100,0x68000300,0x8106c,0x34000000,0x4f0000,0x44,0x101020,0x441040,
  2778. 0x420200,0x4200,0x24000404,0x7d00,0x82200,0x20203010,0x14141414,0x14082821,0x40404040,0x10101010,0x42612222,0x22222200,0x23414141,
  2779. 0x41447e48,0x0,0x0,0x0,0x0,0x4000000,0x18,0x0,0x4000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10287f,0x49902010,0x10083e10,0x4,0x41080101,
  2780. 0x1a404002,0x41411818,0x1004004,0x21144140,0x41404040,0x41100448,0x40555141,0x41414140,0x10412281,0x14280610,0x20084400,0x1c7c1c,
  2781. 0x3e3c7c3a,0x5c703844,0x107f5c3c,0x7c3e3c3c,0x7e424281,0x66427e10,0x10100000,0x40100008,0x1010,0xa04000,0x48100610,0x100c3024,
  2782. 0x24000000,0x4f3c00,0x2c107e28,0x3820,0x42281060,0x9d1e12,0xbd00,0x24100818,0x427d00,0x82248,0x20200800,0x14141414,0x14142840,
  2783. 0x40404040,0x10101010,0x41514141,0x41414142,0x43414141,0x41284350,0x1c1c1c1c,0x1c1c6c1c,0x3c3c3c3c,0x70707070,0x3c5c3c3c,
  2784. 0x3c3c3c18,0x3e424242,0x42427c42,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x102824,0x48623010,0x10081c10,0x8,0x41080103,0x127c5e04,
  2785. 0x41411818,0xe7f3808,0x4f144140,0x41404040,0x41100450,0x40555141,0x41414160,0x1041225a,0x1c280410,0x1008c600,0x226622,0x66661066,
  2786. 0x62100848,0x10496266,0x66663242,0x10426681,0x24220260,0x100c0000,0xf8280008,0x1010,0x606000,0x48280428,0x28042014,0x48000000,
  2787. 0x494200,0x52280228,0x105420,0x3cee1058,0xa12236,0xa500,0x18101004,0x427d00,0x8226c,0x76767e10,0x14141414,0x14142840,0x40404040,
  2788. 0x10101010,0x41514141,0x41414124,0x45414141,0x41284150,0x22222222,0x22221222,0x66666666,0x10101010,0x66626666,0x66666600,
  2789. 0x66424242,0x42226622,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x100024,0x381c4900,0x10086bfe,0x8,0x4908021c,0x22036304,0x3e630000,
  2790. 0x70000710,0x51227e40,0x417f7f43,0x7f100470,0x40554941,0x43417e3e,0x1041225a,0x8100810,0x10080000,0x24240,0x42421042,0x42100850,
  2791. 0x10494242,0x42422040,0x1042245a,0x18240410,0x10103900,0x407c003e,0x1818,0x1c3e10,0x4f7c087c,0x7c002010,0x48000000,0x4008,
  2792. 0x527c0410,0x105078,0x2410104c,0xa13e6c,0x7f00b900,0xfe3c3c,0x421d18,0x1c1c36,0x38383810,0x22222222,0x22144e40,0x7f7f7f7f,
  2793. 0x10101010,0xf1494141,0x41414118,0x49414141,0x4110435c,0x2020202,0x2021240,0x42424242,0x10101010,0x42424242,0x424242ff,0x4e424242,
  2794. 0x42244224,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000fe,0xe664d00,0x10080810,0x380010,0x41080c03,0x42014108,0x633d0000,0x70000710,
  2795. 0x51224140,0x41404041,0x41100448,0x40494541,0x7e414203,0x1041145a,0x14101010,0x10080000,0x3e4240,0x427e1042,0x42100870,0x10494242,
  2796. 0x4242203c,0x1042245a,0x18241810,0x10104600,0xf8f60008,0x1010,0x600320,0x48f610f6,0xf6000000,0x187eff,0x3c04,0x5ef61810,0x105020,
  2797. 0x24fe0064,0x9d006c,0x138ad00,0x100000,0x420518,0x36,0xc0c0c020,0x22222222,0x22224840,0x40404040,0x10101010,0x41454141,0x41414118,
  2798. 0x51414141,0x41107e46,0x3e3e3e3e,0x3e3e7e40,0x7e7e7e7e,0x10101010,0x42424242,0x42424200,0x5a424242,0x42244224,0x0,0x0,0x0,
  2799. 0x0,0x0,0x0,0x0,0x0,0x28,0x9094500,0x10080010,0x10,0x41081801,0x7f014118,0x41010000,0xe7f3800,0x513e4140,0x41404041,0x41100444,
  2800. 0x40414541,0x40414101,0x10411466,0x36103010,0x8080000,0x424240,0x42401042,0x42100848,0x10494242,0x42422002,0x10423c5a,0x18142010,
  2801. 0x10100000,0x407c0010,0x1010,0x260140,0x487c307c,0x7c000000,0x180000,0x202,0x507c2010,0x105020,0x3c10003c,0x423e36,0x1004200,
  2802. 0x100000,0x420500,0x3e6c,0x41e0440,0x3e3e3e3e,0x3e3e7840,0x40404040,0x10101010,0x41454141,0x41414124,0x61414141,0x41104042,
  2803. 0x42424242,0x42425040,0x40404040,0x10101010,0x42424242,0x42424218,0x72424242,0x42144214,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x100048,
  2804. 0x49096200,0x8100010,0x18001810,0x22082043,0x2432310,0x61421818,0x1004010,0x4f634121,0x42404021,0x41104444,0x40414322,0x40234143,
  2805. 0x10411466,0x22106010,0x8080000,0x466622,0x66621066,0x42100844,0x10494266,0x66662042,0x10461824,0x24184010,0x10100000,0x24381010,
  2806. 0x34001018,0xda4320,0x68386038,0x38000000,0x0,0x4204,0x50384010,0x105420,0x4210100c,0x3c0012,0x3c00,0x0,0x460500,0x48,0xc020c44,
  2807. 0x63636363,0x63228821,0x40404040,0x10101010,0x42432222,0x22222242,0x62414141,0x41104042,0x46464646,0x46465022,0x62626262,
  2808. 0x10101010,0x66426666,0x66666618,0x66464646,0x46186618,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x100048,0x3e063d00,0x8100000,0x18001820,
  2809. 0x1c3e7f3e,0x23c1e20,0x3e3c1818,0x10,0x20417e1e,0x7c7f401e,0x417c3842,0x7f41431c,0x401e40be,0x103e0866,0x41107f10,0x4080000,
  2810. 0x3a5c1c,0x3a3c103a,0x427c0842,0xe49423c,0x7c3e203c,0xe3a1824,0x66087e10,0x10100000,0x3c103010,0x245a1010,0x5a3e10,0x3f107f10,
  2811. 0x10000000,0x0,0x3c08,0x2e107e10,0x1038fc,0x101004,0x0,0x0,0xfe0000,0x7f0500,0x0,0x14041438,0x41414141,0x41418e1e,0x7f7f7f7f,
  2812. 0x7c7c7c7c,0x7c431c1c,0x1c1c1c00,0xbc3e3e3e,0x3e10405c,0x3a3a3a3a,0x3a3a6e1c,0x3c3c3c3c,0x7c7c7c7c,0x3c423c3c,0x3c3c3c00,
  2813. 0x7c3a3a3a,0x3a087c08,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8000000,0x4200000,0x10000020,0x0,0x0,0x10,0x0,0x30000000,0x0,
  2814. 0x0,0x0,0x60000,0x0,0x1c,0x4380000,0x0,0x2,0x800,0x0,0x40020000,0x0,0x8000c,0x10600000,0x2010,0x48000000,0x240000,0x0,0x0,
  2815. 0x0,0x0,0x0,0x1000,0x1078,0x0,0x0,0x0,0x400500,0x0,0x1e081e00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2816. 0x84008,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8000000,0x0,0x20000040,0x0,0x0,0x20,0x0,0x1e000000,0x0,0x0,0x0,0x20000,0x0,
  2817. 0x0,0x2000000,0x0,0x26,0x800,0x0,0x40020000,0x0,0x100000,0x10000000,0x2030,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000,0x1000,0x0,
  2818. 0x0,0x0,0x400000,0x8000000,0x41e0400,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x104010,0x0,0x0,0x0,0x0,
  2819. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfe,0x0,0x1c,0x7000,0x0,0x40020000,0x0,0x300000,
  2820. 0x0,0xe0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000,0x0,0x0,0x0,0x400000,0x38000000,0x0,0x0,0x1c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2821. 0x1c,0x0,0x0,0x0,0x0,0x0,0x304030,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2822. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2823. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2824. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2825. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 };
  2826. // Definition of a 10x19 font.
  2827. const unsigned int font10x19[10*19*256/32] = {
  2828. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2829. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3600000,0x36000,0x0,0x0,0x0,0x0,0x6c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2830. 0x0,0x180181c0,0xe81b0300,0x1801,0x81c06c18,0x181c06c,0xe8180,0x181c0e81,0xb0000006,0x60701b,0x1800000,0x0,0x0,0x0,0x0,0x0,
  2831. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2832. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c00000,0x1c000,0x0,0x0,0x0,0x0,0x6c,0x0,0x0,0x0,0x0,
  2833. 0x0,0x0,0x0,0x0,0x0,0x0,0xc030360,0xb81b0480,0xc03,0x3606c0c,0x303606c,0xb80c0,0x30360b81,0xb0000003,0xc0d81b,0x3000000,0x0,
  2834. 0x300,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2835. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x800,0x0,0x0,0x0,0x0,0x0,0x2200000,
  2836. 0x22000,0x0,0x0,0x0,0x0,0x0,0x0,0x30000,0x0,0xe0,0x38078000,0x0,0x480,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3000c080,0x480,0x3000,
  2837. 0xc0800030,0xc08000,0x300,0xc080000,0xc,0x302000,0xc00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20120,0x41c01,0xe020060c,
  2838. 0x800000,0x4,0x1e0703e0,0xf8060fc1,0xe1fe1e07,0x80000000,0x78,0x307e0,0x3c7c1fe7,0xf83c408f,0x80f10440,0x18660878,0x7e0787e0,
  2839. 0x78ff9024,0xa0140a0,0x27f83840,0x700e000,0x18000400,0x8000,0x70004002,0x410078,0x0,0x0,0x0,0x0,0x1808,0xc000000,0xf000000,
  2840. 0xe000000,0x1400,0x1e0001f,0x8007f800,0x0,0x0,0x3a3b,0x61400000,0x14202,0x20000,0x38002020,0x3c1b00,0x3e00000,0xf8,0x1c0001c0,
  2841. 0x78060001,0xf800000e,0x1e00020,0x8004020,0xc0300c0,0x300c0301,0xf83c7f9f,0xe7f9fe3e,0xf83e0f8,0x7c1821e0,0x781e0781,0xe0001f10,
  2842. 0x24090240,0xa02400f8,0x18018140,0xe81b0480,0x1801,0x81406c18,0x181406c,0x190e8180,0x18140e81,0xb0000006,0x60501b,0x184006c,
  2843. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20120,0x26042202,0x200c06,0x800000,0x8,0x210d0611,0x40e0803,0x10026188,0x40000000,
  2844. 0x8c,0xf030418,0xc6431004,0xc64082,0x110840,0x18660884,0x41084410,0x8c081024,0xa012110,0x40082020,0x101b000,0xc000400,0x8000,
  2845. 0x80004002,0x410008,0x0,0x0,0x100000,0x0,0x2008,0x2000000,0x18800000,0x10000000,0x2200,0x2300024,0x800,0x0,0x0,0x2e13,0x60800000,
  2846. 0x8104,0x20040,0x64001040,0x80401b07,0x80100000,0x1e000,0x22000020,0x40c0003,0xc8000002,0x3300020,0x8004020,0xc0300c0,0x300c0301,
  2847. 0x40c64010,0x4010008,0x2008020,0x43182210,0x84210842,0x10002190,0x24090240,0x9044018c,0xc030220,0xb81b0300,0xc03,0x2206c0c,
  2848. 0x302206c,0x1e0b80c0,0x30220b81,0xb0000003,0xc0881b,0x304006c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20120,0x241f2202,
  2849. 0x200802,0x4900000,0x8,0x21010408,0x20a0802,0x44090,0x20000000,0x4,0x11878408,0x80411004,0x804082,0x111040,0x1ce50986,0x40986409,
  2850. 0x81022,0x12012108,0x80102020,0x1031800,0x400,0x8000,0x80004000,0x10008,0x0,0x0,0x100000,0x0,0x2008,0x2000000,0x10000000,
  2851. 0x10000000,0x18,0x4000044,0x1000,0x30180,0xd81b0000,0x13,0xe0000000,0x88,0x40,0x400018c0,0x80400018,0x61f00000,0x61800,0x22020020,
  2852. 0x4000007,0xc8000002,0x2100020,0x8038000,0x1e0781e0,0x781e0301,0x40804010,0x4010008,0x2008020,0x41142619,0x86619866,0x18002190,
  2853. 0x24090240,0x8887e104,0x0,0x0,0x0,0x0,0x0,0x2000000,0x0,0x0,0x0,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20120,0x2434a202,
  2854. 0x200802,0x3e00000,0x10,0x40810008,0x21a0804,0x44090,0x20000000,0x80040004,0x20848409,0x409004,0x1004082,0x112040,0x14a50902,
  2855. 0x40902409,0x81022,0x11321208,0x80202010,0x1060c00,0x7c5e0,0x781e8783,0xf07a5f0e,0x1c10808,0xfc5f078,0x5e07a170,0x7c7e1024,
  2856. 0xa016190,0x27f82008,0x2000000,0x20000000,0x10000000,0x80200024,0x4000044,0x2000,0x18180,0xc8320000,0x12,0xa1f00037,0x7f888,
  2857. 0x1e0,0x40410880,0x80600017,0xa2100000,0x5e800,0x22020040,0x38001027,0xc8000002,0x2100020,0x8004020,0x12048120,0x48120482,
  2858. 0x41004010,0x4010008,0x2008020,0x40942409,0x2409024,0x9044390,0x24090240,0x88841918,0x1f07c1f0,0x7c1f07c3,0x70781e07,0x81e07838,
  2859. 0xe0380e0,0x1f17c1e0,0x781e0781,0xe0001f90,0x24090240,0x9025e102,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20001,0xff241c41,
  2860. 0x1001,0x1c02000,0x10,0x40810008,0x6120f85,0xe0086190,0x20c03007,0x8007800c,0x27848419,0x409004,0x1004082,0x114040,0x14a48902,
  2861. 0x40902409,0x81022,0x11321205,0x602010,0x1000000,0x86610,0x84218840,0x80866182,0x411008,0x9261884,0x61086189,0x82101022,0x12012108,
  2862. 0x40082008,0x2000000,0x20030000,0x20000000,0x80200024,0x4000044,0x3006030,0xc018100,0x4c260000,0x12,0x26080048,0x83000850,
  2863. 0x20250,0x403e0500,0x8078002c,0x12302200,0x92400,0x1c0200c0,0x4001027,0xc8000002,0x3308820,0x8004020,0x12048120,0x48120482,
  2864. 0x41004010,0x4010008,0x2008020,0x40922409,0x2409024,0x8884690,0x24090240,0x85040920,0x21886218,0x86218860,0x88842108,0x42108408,
  2865. 0x2008020,0x21186210,0x84210842,0x10302190,0x24090240,0x88461084,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0x4c240182,
  2866. 0x80001001,0x6b02000,0x20,0x4c810010,0x78220846,0x10081e10,0x20c0301c,0x1fe0e018,0x4d8487e1,0x409fe7,0xf9007f82,0x11a040,
  2867. 0x13248902,0x41102418,0xe0081022,0x11320c05,0x402008,0x1000000,0x2409,0x409020,0x81024082,0x412008,0x9240902,0x40902101,0x101022,
  2868. 0x11321208,0x40102008,0x2000000,0x7e0c8000,0xfc000003,0xf0fc0018,0x43802047,0x8c8040c8,0x32008300,0x44240000,0x0,0x4000048,
  2869. 0x8c801050,0x20440,0x40221dc0,0x808c0028,0x11d0667f,0x8009c400,0x1fc180,0x4001023,0xc8300002,0x1e0ccfb,0x3ec7b020,0x12048120,
  2870. 0x48120482,0x79007f9f,0xe7f9fe08,0x2008020,0xf0922409,0x2409024,0x8504490,0x24090240,0x85040920,0x802008,0x2008020,0x89004090,
  2871. 0x24090208,0x2008020,0x40902409,0x2409024,0x8304390,0x24090240,0x88440884,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,
  2872. 0x481c0606,0xc8001001,0x802000,0x20,0x4c810020,0x4220024,0x8102108,0x60000070,0x3820,0x48884419,0x409004,0x10e4082,0x112040,
  2873. 0x13244902,0x7e1027e0,0x3c081021,0x21320c02,0x802008,0x1000000,0x7e409,0x409020,0x81024082,0x414008,0x9240902,0x40902101,
  2874. 0x80101022,0x11320c08,0x40202008,0x2038800,0x200bc000,0x20000000,0x80200003,0x80f04044,0xbc080bc,0x2f000200,0x0,0x0,0x6001048,
  2875. 0x8bc02020,0x20441,0xf8220200,0x80820028,0x1000cc00,0x80094400,0x201e0,0x78001021,0xc830000f,0x8000663c,0xf03c0c0,0x21084210,
  2876. 0x84210846,0x41004010,0x4010008,0x2008020,0x40912409,0x2409024,0x8204890,0x24090240,0x82040930,0x1f87e1f8,0x7e1f87e0,0x89004090,
  2877. 0x24090208,0x2008020,0x40902409,0x2409024,0x8004690,0x24090240,0x88440884,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,
  2878. 0x480719c4,0x48001001,0x81fc00,0x7800020,0x40810040,0x2420024,0x8104087,0xa0000070,0x3820,0x48884409,0x409004,0x1024082,0x111040,
  2879. 0x13244902,0x40102410,0x2081021,0x214a1202,0x1802008,0x1000000,0x182409,0x409fe0,0x81024082,0x41a008,0x9240902,0x40902100,
  2880. 0xf8101021,0x214a0c04,0x80c0c008,0x1847000,0x7c1ee000,0x20000000,0x8020000c,0x8c044,0x1ee181ee,0x7b800000,0x707,0xf3ff0000,
  2881. 0x3e0084f,0x9ee0c020,0x20440,0x40221fc0,0xc2002c,0x13f11000,0x87892400,0x20000,0x1020,0x48000000,0x3f011c6,0x31cc6180,0x21084210,
  2882. 0x84210844,0x41004010,0x4010008,0x2008020,0x40912409,0x2409024,0x8505090,0x24090240,0x8204191c,0x60982609,0x82609823,0xf9007f9f,
  2883. 0xe7f9fe08,0x2008020,0x40902409,0x2409024,0x9fe4c90,0x24090240,0x84840848,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0xfe048224,
  2884. 0x28001001,0x2000,0x40,0x40810080,0x27f8024,0x8104080,0x2000001c,0x1fe0e020,0x488fc409,0x409004,0x1024082,0x110840,0x10242902,
  2885. 0x40102408,0x2081021,0x214a1202,0x1002004,0x1000000,0x102409,0x409000,0x81024082,0x411008,0x9240902,0x40902100,0x6101021,
  2886. 0x214a0c04,0x81002008,0x2000000,0x201dc000,0x20000000,0x80200000,0x98044,0x1dc101dc,0x77000000,0x700,0x0,0x180448,0x1dc10020,
  2887. 0x20440,0x403e0200,0x620017,0xa000cc00,0x80052800,0x20000,0x1020,0x48000000,0x6606,0x206100,0x3f0fc3f0,0xfc3f0fc7,0xc1004010,
  2888. 0x4010008,0x2008020,0x4090a409,0x2409024,0x8886090,0x24090240,0x8207e106,0x40902409,0x2409024,0x81004010,0x4010008,0x2008020,
  2889. 0x40902409,0x2409024,0x8005890,0x24090240,0x84840848,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x98048224,0x30001001,0x2000,
  2890. 0x40,0x21010100,0x2020024,0x8204080,0x40000007,0x80078000,0x48884408,0x80411004,0x824082,0x110840,0x10242986,0x40086409,0x2081021,
  2891. 0xe14a2102,0x2002004,0x1000000,0x106409,0x409000,0x81024082,0x410808,0x9240902,0x40902100,0x2101021,0x214a1202,0x82002008,
  2892. 0x2000000,0x300f8000,0x20000000,0x80fc001d,0xe4088044,0xf8200f8,0x3e000000,0x300,0x0,0x80c48,0xf820020,0x20640,0x40410200,
  2893. 0x803c0018,0x60006600,0x61800,0x0,0x1020,0x48000000,0xcc0a,0x20a100,0x21084210,0x84210844,0x40804010,0x4010008,0x2008020,
  2894. 0x4110a619,0x86619866,0x19046110,0x24090240,0x82040102,0x41906419,0x6419064,0x81004010,0x4010008,0x2008020,0x40902409,0x2409024,
  2895. 0x8307090,0x24090240,0x82840828,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0x90248222,0x30000802,0x200c,0xc080,0x21010301,
  2896. 0x4021042,0x10202108,0xc0c03000,0x80040020,0x4d902418,0xc6431004,0xc24082,0x6210440,0x10241884,0x40084409,0x86080840,0xc0842102,
  2897. 0x4002002,0x1000000,0x18e610,0x84218820,0x80864082,0x410408,0x9240884,0x61086101,0x6101860,0xc0842103,0x4002008,0x2000000,
  2898. 0x10850180,0x20330000,0x80200013,0x26184024,0x5040050,0x14000000,0x0,0x0,0x4180848,0x85040020,0x20350,0x40000200,0x800c0007,
  2899. 0x80002200,0x1e000,0x0,0x1860,0x48000000,0x880a,0x40a188,0x40902409,0x2409028,0x40c64010,0x4010008,0x2008020,0x43106210,0x84210842,
  2900. 0x10006108,0x42108421,0x2040102,0x6398e639,0x8e6398e4,0x88842088,0x22088208,0x2008020,0x21102210,0x84210842,0x10306118,0x66198661,
  2901. 0x83061030,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20001,0x901f01c1,0xe8000802,0xc,0xc080,0x1e07c7f8,0xf8020f81,0xe0401e07,
  2902. 0x80c03000,0x20,0x279027e0,0x3c7c1fe4,0x3c408f,0x83c1027f,0x90241878,0x4007c404,0xf8080780,0xc0844082,0x7f82002,0x1000000,
  2903. 0xfa5e0,0x781e87c0,0x807a409f,0xc0410207,0x9240878,0x5e07a100,0xf80e0fa0,0xc0846183,0x7f82008,0x2000000,0xf020100,0x40321360,
  2904. 0x80200014,0xa3e0201f,0x8207f820,0x8000000,0x0,0x0,0x3e01037,0x207f820,0x201e1,0xfc000200,0x80040000,0x0,0x0,0x1fc000,0x17b0,
  2905. 0x48000000,0x12,0xc120f0,0x40902409,0x2409028,0x783c7f9f,0xe7f9fe3e,0xf83e0f8,0x7c1061e0,0x781e0781,0xe000be07,0x81e0781e,
  2906. 0x204017c,0x3e8fa3e8,0xfa3e8fa3,0x70781f07,0xc1f07c7f,0x1fc7f1fc,0x1e1021e0,0x781e0781,0xe0007e0f,0xa3e8fa3e,0x8305e030,0x0,
  2907. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0xc06,0xc,0x100,0x0,0x0,0x0,0x3000,0x0,0x20000000,0x0,0x0,0x0,0x0,0xc000,
  2908. 0x0,0x0,0x2001,0x1000000,0x0,0x0,0x20000,0x400000,0x0,0x40002000,0x0,0x1,0x2008,0x2000000,0x100,0x40240000,0x80200008,0x40000000,
  2909. 0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x80040000,0x0,0x0,0x0,0x1000,0x48000000,0x1f,0x181f000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2910. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1040010,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x60c,0x18,0x0,
  2911. 0x0,0x0,0x0,0x6000,0x0,0x10000000,0x0,0x0,0x0,0x0,0x4000,0x0,0x0,0x3800,0x7000000,0x0,0x0,0x840000,0x400000,0x0,0x40002000,
  2912. 0x0,0x2,0x2008,0x2000000,0x200,0x40440000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x80780000,0x0,0x0,0x0,0x1000,0x48000400,
  2913. 0x2,0x1e02000,0x0,0x0,0x80000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80000,0x0,0x0,0x0,0x0,0x0,0x0,0x2040020,0x0,0x0,0x0,0x0,
  2914. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x4000,0x0,0xf000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2915. 0x780000,0x3800000,0x0,0x40002000,0x0,0xe,0x1808,0xc000000,0x3,0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80000000,
  2916. 0x0,0x0,0x0,0x1000,0x1c00,0x0,0x0,0x0,0x0,0x380000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x380000,0x0,0x0,0x0,0x0,0x0,0x0,0xe0400e0,
  2917. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3fc,
  2918. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2919. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 };
  2920. // Definition of a 12x24 font.
  2921. const unsigned int font12x24[12*24*256/32] = {
  2922. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2923. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x19,0x80000000,0x198000,0x0,0x0,0x0,0x0,
  2924. 0x0,0x198,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc001806,0xc81980,0x60000000,0xc001806,0x1980c00,0x18060198,0xc80c,
  2925. 0x180600,0xc8198000,0xc001,0x80601980,0x18000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2926. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2927. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf,0x0,0xf0000,0x0,0x0,0x0,0x0,0x0,0x198,0x0,0x0,0x0,0x0,0x0,0x0,
  2928. 0x0,0x0,0x0,0x0,0x0,0x0,0x600300f,0x1301980,0x90000000,0x600300f,0x1980600,0x300f0198,0x13006,0x300f01,0x30198000,0x6003,
  2929. 0xf01980,0x30000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2930. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2931. 0x0,0x0,0x0,0x0,0x0,0x0,0x6,0x0,0x60000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7007,0x3c0000,0x3006019,
  2932. 0x80000000,0x90000000,0x3006019,0x80000300,0x60198000,0x3,0x601980,0x0,0x3006,0x1980000,0x60000000,0x0,0x0,0xe0000000,0x0,
  2933. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  2934. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x18000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6000000,
  2935. 0x0,0x0,0x0,0x0,0x0,0xc800019,0x80000000,0x198000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x1001,0x420000,0x0,0x0,0x90000000,
  2936. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x18000c06,0xc80001,0x10000000,0x18000c06,0x1800,0xc060000,0xc818,0xc0600,0xc8000000,
  2937. 0x18000,0xc0600000,0xc000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6019,0x80660207,0x800f8060,0x300c004,0x0,0x6,
  2938. 0xe00703f,0x3f00383,0xf80f07fc,0x1f01f000,0x0,0xf8,0x607f,0x7c7e07,0xfe7fe0f8,0x6063fc1f,0x86066007,0xe7060f0,0x7f80f07f,
  2939. 0x81f8fff6,0x6606c03,0x70ee077f,0xe0786000,0xf0070000,0xc000060,0xc0,0x3e000,0x60006003,0x600fc00,0x0,0x0,0x0,0x0,0x0,0x3c0603,
  2940. 0xc0000000,0x7800000,0xf0000,0x0,0xf00001f,0x80001fe0,0x7fe000,0x0,0x0,0x0,0x168fe609,0x0,0x90e07,0x6000,0x3c000e,0x70000f8,
  2941. 0x1980001f,0x0,0x1f8,0xf00000f,0xf00180,0xfe000,0xe00e,0x1001,0x20060,0x6006006,0x600600,0x600fe07c,0x7fe7fe7f,0xe7fe3fc3,
  2942. 0xfc3fc3fc,0x7e07060f,0xf00f00,0xf00f0000,0xf360660,0x6606606e,0x76001e0,0xc00180f,0x1681981,0x10000000,0xc00180f,0x1980c00,
  2943. 0x180f0198,0x3801680c,0x180f01,0x68198000,0xc001,0x80f01980,0x18600198,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6019,
  2944. 0x8044020c,0xc01f8060,0x2004004,0x0,0xc,0x3f81f07f,0x87f80383,0xf81f87fc,0x3f83f800,0x0,0x1fc,0x780607f,0x81fe7f87,0xfe7fe1fc,
  2945. 0x6063fc1f,0x860c6007,0xe7061f8,0x7fc1f87f,0xc3fcfff6,0x6606c03,0x30c6067f,0xe0783000,0xf00d8000,0x6000060,0xc0,0x7e000,0x60006003,
  2946. 0x600fc00,0x0,0x0,0xc00,0x0,0x0,0x7c0603,0xe0000000,0xfc00000,0x1f0000,0x0,0x900003f,0xc0003fe0,0x7fe000,0x0,0x0,0x0,0x1302660f,
  2947. 0x0,0xf0606,0x6004,0x7e0006,0x60601f8,0x19800001,0x80000000,0x1f8,0x19800010,0x81080300,0x3f2000,0x2011,0x1001,0x1c0060,0x6006006,
  2948. 0x600600,0x601fe1fe,0x7fe7fe7f,0xe7fe3fc3,0xfc3fc3fc,0x7f87061f,0x81f81f81,0xf81f8000,0x3fa60660,0x66066066,0x66003f0,0x6003009,
  2949. 0x1301981,0x10000000,0x6003009,0x1980600,0x30090198,0x1f013006,0x300901,0x30198000,0x6003,0x901980,0x30600198,0x0,0x0,0x0,
  2950. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6019,0x80cc0f8c,0xc0180060,0x6006044,0x40000000,0xc,0x3181b041,0xc41c0783,0x388018,
  2951. 0x71c71800,0x0,0x106,0x18c0f061,0xc38261c6,0x600384,0x60606001,0x86186007,0xe78630c,0x60e30c60,0xe7040606,0x630cc03,0x39c30c00,
  2952. 0xc0603000,0x3018c000,0x3000060,0xc0,0x60000,0x60000000,0x6000c00,0x0,0x0,0xc00,0x0,0x0,0x600600,0x60000000,0x18400000,0x180000,
  2953. 0x0,0x19800070,0x40003600,0xc000,0x0,0x0,0x0,0x25a06,0x0,0x6030c,0x4,0xe20007,0xe060180,0xf000,0x80000000,0xf0000,0x10800000,
  2954. 0x80080600,0x7f2000,0x2020,0x80001001,0x20000,0xf00f00f,0xf00f00,0x601b0382,0x60060060,0x6000600,0x60060060,0x61c78630,0xc30c30c3,
  2955. 0xc30c000,0x30e60660,0x66066063,0xc600738,0x3006019,0x80000000,0xe0000000,0x3006019,0x80000300,0x60198000,0x3e000003,0x601980,
  2956. 0x0,0x3006,0x1980000,0x60600000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6019,0x80cc1fcc,0xc0180060,0x6006035,0x80000000,
  2957. 0x18,0x71c03000,0xc00c0583,0x300018,0x60c60c00,0x0,0x6,0x3060f060,0xc30060c6,0x600300,0x60606001,0x86306007,0x9e78670e,0x60670e60,
  2958. 0x66000606,0x630c606,0x19830c01,0xc0601800,0x30306000,0x60,0xc0,0x60000,0x60000000,0x6000c00,0x0,0x0,0xc00,0x0,0x0,0x600600,
  2959. 0x60000000,0x18000000,0x300000,0x0,0x78060,0x6600,0x1c000,0x300c,0x39819c0,0x0,0x25a00,0x0,0x30c,0x4,0xc00003,0xc060180,0x30c1f,
  2960. 0x80000000,0x30c000,0x10800001,0x80700000,0x7f2000,0x2020,0x80001001,0x20060,0xf00f00f,0xf00f00,0xf01b0300,0x60060060,0x6000600,
  2961. 0x60060060,0x60c78670,0xe70e70e7,0xe70e000,0x70c60660,0x66066063,0xc7f8618,0x0,0x0,0x0,0x0,0x0,0x0,0x7000000,0x0,0x0,0x0,
  2962. 0x0,0x600000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6019,0x87ff3a4c,0xc0180060,0x400600e,0x600000,0x18,0x60c03000,
  2963. 0xc00c0d83,0x700018,0x60c60c00,0x20,0x400006,0x3060f060,0xc6006066,0x600600,0x60606001,0x86606006,0x966c6606,0x60660660,0x66000606,
  2964. 0x630c666,0xf019801,0x80601800,0x30603000,0x1f06f,0xf01ec0,0xf03fe1ec,0x6703e01f,0x61c0c06,0xdc6701f0,0x6f01ec0c,0xe1f87fc6,
  2965. 0xc60cc03,0x71c60c7f,0xc0600600,0x60000000,0x30000000,0x300000,0x40040,0x88060,0x6600,0x18000,0x300c,0x1981980,0x0,0x2421f,
  2966. 0x80003ce0,0x7fc198,0x601f,0xc02021,0x980600c0,0x40230,0x80000000,0x402000,0x19806003,0x80006,0xc7f2000,0x2020,0x80001001,
  2967. 0x420060,0xf00f00f,0xf00f00,0xf01b0600,0x60060060,0x6000600,0x60060060,0x6066c660,0x66066066,0x6606208,0x60e60660,0x66066061,
  2968. 0x987fc670,0x1f01f01f,0x1f01f01,0xf039c0f0,0xf00f00f,0xf03e03,0xe03e03e0,0x1f06701f,0x1f01f01,0xf01f0060,0x1e660c60,0xc60c60c6,
  2969. 0xc6f060c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6000,0x7ff3207,0x8c0c0000,0xc00300e,0x600000,0x30,0x60c03000,
  2970. 0xc01c0983,0xf0600030,0x31860c06,0x6001e0,0x78000e,0x23e1f861,0xc6006066,0x600600,0x60606001,0x86c06006,0x966c6606,0x60660660,
  2971. 0xe7000606,0x630c666,0xf01f803,0x600c00,0x30000000,0x3f87f,0x83f83fc3,0xf83fe3fc,0x7f83e01f,0x6380c07,0xfe7f83f8,0x7f83fc0d,
  2972. 0xf3fc7fc6,0xc71cc03,0x3183187f,0xc0600600,0x60000000,0xff806000,0x300000,0x40040,0x88070,0x6600,0x60030060,0x6001818,0x1883180,
  2973. 0x0,0x2423f,0xc0007ff0,0x607fc1f8,0x603f,0x80c01fc1,0xf80601e0,0x5f220,0x80420000,0x5f2000,0xf006006,0x80006,0xc7f2000,0x2020,
  2974. 0x82107c07,0xc03c0060,0x1f81f81f,0x81f81f80,0xf03b0600,0x60060060,0x6000600,0x60060060,0x6066c660,0x66066066,0x660671c,0x61660660,
  2975. 0x66066061,0xf860e6c0,0x3f83f83f,0x83f83f83,0xf87fe3f8,0x3f83f83f,0x83f83e03,0xe03e03e0,0x3f87f83f,0x83f83f83,0xf83f8060,
  2976. 0x3fc60c60,0xc60c60c3,0x187f8318,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6000,0x883200,0x300c0000,0xc003035,0x80600000,
  2977. 0x30,0x66c03001,0xc0f81983,0xf86f0030,0x1f071c06,0x600787,0xfe1e001c,0x6261987f,0x86006067,0xfe7fc600,0x7fe06001,0x87c06006,
  2978. 0xf6646606,0x60e6067f,0xc3e00606,0x61986f6,0x600f007,0x600c00,0x30000000,0x21c71,0x830831c3,0x1c06031c,0x71c06003,0x6700c06,
  2979. 0x6671c318,0x71831c0f,0x16040c06,0xc318606,0x1b031803,0x80600600,0x60000000,0x30009000,0x300000,0x40040,0x7003e,0x67e0,0x90070090,
  2980. 0x9001818,0x8c3100,0x0,0x60,0x4000e730,0x900380f0,0x6034,0x80c018c7,0xfe060338,0xb0121,0x80c60000,0x909000,0x6008,0x1080006,
  2981. 0xc3f2000,0x2011,0x3180060,0x60060e0,0x19819819,0x81981981,0x9833c600,0x7fe7fe7f,0xe7fe0600,0x60060060,0x60664660,0x66066066,
  2982. 0x66063b8,0x62660660,0x66066060,0xf06066c0,0x21c21c21,0xc21c21c2,0x1c466308,0x31c31c31,0xc31c0600,0x60060060,0x31871c31,0x83183183,
  2983. 0x18318000,0x71860c60,0xc60c60c3,0x18718318,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6000,0x1981a00,0xe03e0000,0xc003044,
  2984. 0x40600000,0x60,0x66c03001,0x80f03182,0x1c7f8030,0x3f83fc06,0x601e07,0xfe078038,0x6661987f,0x86006067,0xfe7fc61e,0x7fe06001,
  2985. 0x87e06006,0x66666606,0x7fc6067f,0x81f80606,0x61986f6,0x6006006,0x600600,0x30000000,0xc60,0xc60060c6,0xc06060c,0x60c06003,
  2986. 0x6e00c06,0x6660c60c,0x60c60c0e,0x6000c06,0xc318666,0x1f031803,0x600600,0x603c2000,0x30016800,0x1fe0000,0x1f81f8,0x1c1f,0x804067e1,
  2987. 0x68060168,0x16800810,0xc42300,0x0,0x60,0x20c331,0x68030060,0x6064,0x3fc1040,0xf006031c,0xa011e,0x818c7fe0,0x909000,0x7fe1f,
  2988. 0x80f00006,0xc0f2060,0xf80e,0x18c0780,0x780781c0,0x19819819,0x81981981,0x9833c600,0x7fe7fe7f,0xe7fe0600,0x60060060,0xfc666660,
  2989. 0x66066066,0x66061f0,0x66660660,0x66066060,0x606066e0,0xc00c00,0xc00c00c0,0xc066600,0x60c60c60,0xc60c0600,0x60060060,0x60c60c60,
  2990. 0xc60c60c6,0xc60c000,0x61c60c60,0xc60c60c3,0x1860c318,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6000,0x1980f81,0x80373000,
  2991. 0xc003004,0x7fe0001,0xf0000060,0x60c03003,0x183180,0xc71c060,0x3181ec00,0x7000,0xe070,0x66619860,0xc6006066,0x60061e,0x60606001,
  2992. 0x87606006,0x66626606,0x7f860661,0xc01c0606,0x6198696,0xf00600e,0x600600,0x30000000,0x1fc60,0xc60060c7,0xfc06060c,0x60c06003,
  2993. 0x7c00c06,0x6660c60c,0x60c60c0c,0x7f00c06,0xc3b8666,0xe01b007,0x3c00600,0x3c7fe000,0xff03ec00,0x1fe0000,0x40040,0xe001,0xc0806603,
  2994. 0xec0e03ec,0x3ec00010,0x0,0x60000000,0x7f,0x10c3f3,0xec070060,0x6064,0x3fc1040,0x6000030c,0xa0100,0x3187fe1,0xf09f1000,0x7fe00,
  2995. 0x6,0xc012060,0x0,0xc63c03,0xc03c0380,0x19819819,0x81981981,0x98330600,0x60060060,0x6000600,0x60060060,0xfc662660,0x66066066,
  2996. 0x66060e0,0x6c660660,0x66066060,0x6060e630,0x1fc1fc1f,0xc1fc1fc1,0xfc3fe600,0x7fc7fc7f,0xc7fc0600,0x60060060,0x60c60c60,0xc60c60c6,
  2997. 0xc60c7fe,0x62c60c60,0xc60c60c1,0xb060c1b0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6000,0xffe02c6,0x3c633000,0xc003004,
  2998. 0x7fe0001,0xf00000c0,0x60c03006,0xc6180,0xc60c060,0x60c00c00,0x7000,0xe060,0x66639c60,0x66006066,0x600606,0x60606001,0x86306006,
  2999. 0x66636606,0x60060660,0xc0060606,0x61f8696,0xf00600c,0x600300,0x30000000,0x3fc60,0xc60060c7,0xfc06060c,0x60c06003,0x7c00c06,
  3000. 0x6660c60c,0x60c60c0c,0x1f80c06,0xc1b0666,0xe01b00e,0x3c00600,0x3c43c000,0x3007de00,0x600000,0x40040,0x30000,0x61006607,0xde0c07de,
  3001. 0x7de00000,0x0,0xf07fefff,0x1f,0x8008c3f7,0xde0e0060,0x6064,0xc01047,0xfe00018c,0xb013f,0x86300061,0xf0911000,0x6000,0x6,
  3002. 0xc012060,0x3f,0x8063c0cc,0x3cc0c700,0x39c39c39,0xc39c39c1,0x98630600,0x60060060,0x6000600,0x60060060,0x60663660,0x66066066,
  3003. 0x66061f0,0x78660660,0x66066060,0x607fc618,0x3fc3fc3f,0xc3fc3fc3,0xfc7fe600,0x7fc7fc7f,0xc7fc0600,0x60060060,0x60c60c60,0xc60c60c6,
  3004. 0xc60c7fe,0x64c60c60,0xc60c60c1,0xb060c1b0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6000,0xffe0260,0x6661b000,0xc003000,
  3005. 0x600000,0xc0,0x60c0300c,0xc7fe0,0xc60c060,0x60c01c00,0x1e07,0xfe078060,0x6663fc60,0x66006066,0x600606,0x60606001,0x86386006,
  3006. 0x6636606,0x60060660,0xe0060606,0x60f039c,0x1b806018,0x600300,0x30000000,0x70c60,0xc60060c6,0x6060c,0x60c06003,0x7600c06,
  3007. 0x6660c60c,0x60c60c0c,0x1c0c06,0xc1b03fc,0xe01f01c,0xe00600,0x70000000,0x3007fc00,0x600000,0x40040,0x0,0x62006607,0xfc1807fc,
  3008. 0x7fc00000,0x0,0xf0000000,0x1,0xc004c307,0xfc1c0060,0x6064,0xc018c0,0x600000d8,0x5f200,0x3180060,0x50a000,0x6000,0x6,0xc012000,
  3009. 0x0,0xc601c0,0x4201c600,0x3fc3fc3f,0xc3fc3fc3,0xfc7f0600,0x60060060,0x6000600,0x60060060,0x60663660,0x66066066,0x66063b8,
  3010. 0x70660660,0x66066060,0x607f860c,0x70c70c70,0xc70c70c7,0xcc60600,0x60060060,0x6000600,0x60060060,0x60c60c60,0xc60c60c6,0xc60c000,
  3011. 0x68c60c60,0xc60c60c1,0xf060c1f0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3300260,0x6661e000,0xc003000,0x600000,
  3012. 0x180,0x71c03018,0xc7fe0,0xc60c0c0,0x60c01800,0x787,0xfe1e0060,0x6663fc60,0x630060c6,0x600306,0x60606001,0x86186006,0x661e70e,
  3013. 0x60070c60,0x60060606,0x60f039c,0x19806038,0x600180,0x30000000,0x60c60,0xc60060c6,0x6060c,0x60c06003,0x6700c06,0x6660c60c,
  3014. 0x60c60c0c,0xc0c06,0xc1b039c,0x1f00e018,0x600600,0x60000000,0x1803f800,0x600000,0x40040,0x39e00,0x63006603,0xf83803f8,0x3f800000,
  3015. 0x0,0x60000000,0x0,0xc00cc303,0xf8180060,0x6064,0xc01fc0,0x60060070,0x40200,0x18c0060,0x402000,0x6000,0x6,0xc012000,0x0,0x18c0140,
  3016. 0x2014600,0x3fc3fc3f,0xc3fc3fc3,0xfc7f0300,0x60060060,0x6000600,0x60060060,0x60c61e70,0xe70e70e7,0xe70e71c,0x60e60660,0x66066060,
  3017. 0x6060060c,0x60c60c60,0xc60c60c6,0xcc60600,0x60060060,0x6000600,0x60060060,0x60c60c60,0xc60c60c6,0xc60c000,0x70c60c60,0xc60c60c0,
  3018. 0xe060c0e0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x33022e0,0x6670c000,0xc003000,0x600600,0x60180,0x31803030,
  3019. 0x41c0184,0x1831c0c0,0x71c23806,0x6001e0,0x780000,0x62630c60,0xe38261c6,0x600386,0x60606043,0x860c6006,0x661e30c,0x60030c60,
  3020. 0x740e0607,0xe0f039c,0x31c06030,0x600180,0x30000000,0x61c71,0x830831c3,0x406031c,0x60c06003,0x6300c06,0x6660c318,0x71831c0c,
  3021. 0x41c0c07,0x1c0e039c,0x1b00e030,0x600600,0x60000000,0x1c41b00e,0x601cc0,0x401f8,0x45240,0xe1803601,0xb03001b0,0x1b000000,
  3022. 0x0,0x0,0x41,0xc008e711,0xb0300060,0x6034,0x80c02020,0x60060030,0x30c00,0xc60000,0x30c000,0x0,0x7,0x1c012000,0x0,0x3180240,
  3023. 0x6024608,0x30c30c30,0xc30c30c3,0xc630382,0x60060060,0x6000600,0x60060060,0x61c61e30,0xc30c30c3,0xc30c208,0x70c70e70,0xe70e70e0,
  3024. 0x6060068c,0x61c61c61,0xc61c61c6,0x1cc62308,0x30430430,0x43040600,0x60060060,0x31860c31,0x83183183,0x18318060,0x31c71c71,
  3025. 0xc71c71c0,0xe07180e0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6000,0x2203fc0,0x663f6000,0x6006000,0x600600,0x60300,
  3026. 0x3f81fe7f,0xc7f80187,0xf83f80c0,0x3f83f006,0x600020,0x400060,0x33e6067f,0xc1fe7f87,0xfe6001fe,0x6063fc7f,0x60e7fe6,0x660e3f8,
  3027. 0x6001f860,0x37fc0603,0xfc06030c,0x30c0607f,0xe06000c0,0x30000000,0x7fc7f,0x83f83fc3,0xfc0603fc,0x60c7fe03,0x61807c6,0x6660c3f8,
  3028. 0x7f83fc0c,0x7f80fc3,0xfc0e039c,0x3180607f,0xc0600600,0x60000000,0xfc0e00c,0x601986,0x66040040,0x4527f,0xc0803fe0,0xe07fe0e0,
  3029. 0xe000000,0x0,0x0,0x7f,0x80107ff0,0xe07fc060,0x603f,0x83fe0000,0x60060018,0xf000,0x420000,0xf0000,0x7fe00,0x7,0xfe012000,
  3030. 0x0,0x2100640,0xc0643f8,0x60660660,0x66066067,0xec3e1fe,0x7fe7fe7f,0xe7fe3fc3,0xfc3fc3fc,0x7f860e3f,0x83f83f83,0xf83f8000,
  3031. 0x5fc3fc3f,0xc3fc3fc0,0x606006fc,0x7fc7fc7f,0xc7fc7fc7,0xfcffe3f8,0x3fc3fc3f,0xc3fc7fe7,0xfe7fe7fe,0x3f860c3f,0x83f83f83,
  3032. 0xf83f8060,0x7f83fc3f,0xc3fc3fc0,0x607f8060,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6000,0x2201f80,0x3c1e7000,0x6006000,
  3033. 0x600,0x60300,0xe01fe7f,0xc3f00183,0xe01f0180,0x1f01e006,0x600000,0x60,0x3006067f,0x807c7e07,0xfe6000f8,0x6063fc3e,0x6067fe6,
  3034. 0x660e0f0,0x6000f060,0x3bf80601,0xf806030c,0x60e0607f,0xe06000c0,0x30000000,0x1ec6f,0xf01ec0,0xf80601ec,0x60c7fe03,0x61c03c6,
  3035. 0x6660c1f0,0x6f01ec0c,0x3f007c1,0xcc0e030c,0x71c0c07f,0xc0600600,0x60000000,0x7804018,0xe01186,0x66040040,0x39e3f,0x80401fe0,
  3036. 0x407fe040,0x4000000,0x0,0x0,0x3f,0x203ce0,0x407fc060,0x601f,0x3fe0000,0x60060018,0x0,0x0,0x0,0x7fe00,0x6,0xe6012000,0x0,
  3037. 0x7e0,0x1807e1f0,0x60660660,0x66066066,0x6c3e07c,0x7fe7fe7f,0xe7fe3fc3,0xfc3fc3fc,0x7e060e0f,0xf00f00,0xf00f0000,0x8f01f81f,
  3038. 0x81f81f80,0x60600670,0x1ec1ec1e,0xc1ec1ec1,0xec79c0f0,0xf80f80f,0x80f87fe7,0xfe7fe7fe,0x1f060c1f,0x1f01f01,0xf01f0000,0x4f01cc1c,
  3039. 0xc1cc1cc0,0xc06f00c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200,0x0,0x6006000,0x600,0x600,0x0,0x0,0x0,0x0,
  3040. 0x600000,0x0,0x18000000,0x0,0x0,0x0,0x0,0x0,0x1800,0x0,0x0,0x0,0x600060,0x30000000,0x0,0x0,0xc,0x3,0x0,0x0,0x60000c00,0x0,
  3041. 0x0,0xc000,0x600600,0x60000000,0x18,0xc03100,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x601f8,0x0,0x0,0x0,0x0,0x6,
  3042. 0x12000,0x2000000,0x40,0x20004000,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3043. 0x0,0xc06000c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200,0x0,0x2004000,0xc00,0x0,0x0,0x0,0x0,0x0,0xc00000,
  3044. 0x0,0x1c000000,0x0,0x0,0x0,0x0,0x0,0xc00,0x0,0x0,0x0,0x780000,0xf0000000,0x0,0x0,0x21c,0x3,0x0,0x0,0x60000c00,0x0,0x0,0xc000,
  3045. 0x7c0603,0xe0000000,0x10,0xc02300,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x601f0,0x0,0x0,0x0,0x0,0x6,0x12000,0x1000000,
  3046. 0x40,0x7e004000,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc06000c0,0x0,
  3047. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200,0x0,0x300c000,0xc00,0x0,0x0,0x0,0x0,0x0,0xc00000,0x0,0x7800000,0x0,
  3048. 0x0,0x0,0x0,0x0,0x800,0x0,0x0,0x0,0x780000,0xf0000000,0x0,0x0,0x3f8,0x3e,0x0,0x0,0x60000c00,0x0,0x0,0x38000,0x3c0603,0xc0000000,
  3049. 0x10,0xfc00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x60000,0x0,0x0,0x0,0x0,0x6,0x0,0x1000000,0x0,0x0,0x0,0x0,
  3050. 0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x80600380,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3051. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffc,0x0,
  3052. 0x0,0x1f0,0x3c,0x0,0x0,0x60000c00,0x0,0x0,0x38000,0x600,0x0,0x0,0xf000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3053. 0x0,0x0,0x0,0x0,0x0,0x6,0x0,0xe000000,0x0,0x0,0x0,0x0,0x70,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x70,0x0,0x0,0x0,0x0,
  3054. 0x0,0x0,0x0,0x3,0x80600380,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3055. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x600,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3056. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3057. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 };
  3058. // Definition of a 16x32 font.
  3059. const unsigned int font16x32[16*32*256/32] = {
  3060. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3061. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3062. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc300000,0x0,0xc300000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe70,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3063. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x70000e0,0x3c00730,0xe7001c0,0x0,0x70000e0,0x3c00e70,0x70000e0,0x3c00e70,0x730,0x70000e0,0x3c00730,
  3064. 0xe700000,0x700,0xe003c0,0xe7000e0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3065. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3066. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3067. 0x0,0x0,0x6600000,0x0,0x6600000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe70,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3068. 0x0,0x0,0x18001c0,0x6600ff0,0xe7003e0,0x0,0x18001c0,0x6600e70,0x18001c0,0x6600e70,0xff0,0x18001c0,0x6600ff0,0xe700000,0x180,
  3069. 0x1c00660,0xe7001c0,0x0,0x0,0x0,0x380,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3070. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3071. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c00000,
  3072. 0x0,0x3c00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe70,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c00380,
  3073. 0xc300ce0,0xe700630,0x0,0x1c00380,0xc300e70,0x1c00380,0xc300e70,0xce0,0x1c00380,0xc300ce0,0xe700000,0x1c0,0x3800c30,0xe700380,
  3074. 0x0,0x0,0x0,0x7c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3075. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3076. 0x0,0x0,0x0,0x0,0xe000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1800000,0x0,0x0,0x0,
  3077. 0x0,0x0,0x0,0x0,0x0,0xc300000,0x0,0xc300000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x700000,0x0,0x0,0x0,0x7c007c00,0x3e000000,
  3078. 0x0,0x0,0x630,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe000070,0x1800000,0xc60,0x0,0xe000070,0x1800000,0xe000070,
  3079. 0x1800000,0x0,0xe000070,0x1800000,0x0,0xe00,0x700180,0x70,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3080. 0x0,0x0,0x0,0x800000,0x0,0x600600,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3081. 0x0,0x0,0x3f0,0xfc0,0x0,0x7000000,0x38000000,0x1c0000,0xfc0000,0x380001c0,0xe01c00,0x7f800000,0x0,0x0,0x0,0x0,0x0,0x0,0x7c,
  3082. 0x1801f00,0x0,0x0,0x1c,0x0,0x0,0x3c00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7300000,0x6600000,0x0,0x6600000,0x0,0x0,0x0,0x0,0xe700000,
  3083. 0x0,0x0,0x0,0x0,0x0,0xe00000,0x0,0x0,0x0,0xc000c00,0x43800000,0x0,0x0,0x630,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3084. 0xf80,0x70000e0,0x3c00730,0xe700c60,0x0,0x70000e0,0x3c00e70,0x70000e0,0x3c00e70,0xe000730,0x70000e0,0x3c00730,0xe700000,0x700,
  3085. 0xe003c0,0xe7000e0,0x38000e70,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c0,0x6300000,0x803c00,0x7c00180,
  3086. 0xc00300,0x1000000,0x0,0x1c,0x3c007c0,0xfc007e0,0xe01ff8,0x3f03ffc,0x7e007c0,0x0,0x0,0x7c0,0x1c0,0x7f8003f0,0x7f007ff8,0x7ff803f0,
  3087. 0x70381ffc,0xff0700e,0x7000783c,0x783807c0,0x7fc007c0,0x7fc00fc0,0x7fff7038,0x700ee007,0x780f780f,0x7ffc03f0,0x70000fc0,0x3c00000,
  3088. 0x3000000,0x38000000,0x1c0000,0x1fc0000,0x380001c0,0xe01c00,0x7f800000,0x0,0x0,0x0,0x0,0x0,0x0,0xfc,0x1801f80,0x0,0x1f80000,
  3089. 0x7e,0x0,0x0,0x2400000,0xfc00000,0x7ff0000,0x7ffc0000,0x0,0x0,0x0,0x0,0xf30fb0c,0x2400000,0x0,0x240780f,0x1c0,0xfc,0x780f,
  3090. 0x18003f0,0xe700000,0x7c00000,0x0,0xff0,0x3c00000,0x78007c0,0xc00000,0xff80000,0xf80,0x7c00000,0xc000c00,0x18001c0,0x1c001c0,
  3091. 0x1c001c0,0x1c003e0,0x7fe03f0,0x7ff87ff8,0x7ff87ff8,0x1ffc1ffc,0x1ffc1ffc,0x7f007838,0x7c007c0,0x7c007c0,0x7c00000,0x7c67038,
  3092. 0x70387038,0x7038780f,0x70001fe0,0x30000c0,0x2400f30,0xe700c60,0x0,0x30000c0,0x2400e70,0x30000c0,0x2400e70,0xf700f30,0x30000c0,
  3093. 0x2400f30,0xe700000,0x300,0xc00240,0xe7000c0,0x38000e70,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c0,
  3094. 0x630018c,0x807e00,0xfe00180,0xc00300,0x1000000,0x0,0x38,0xff01fc0,0x3ff01ff0,0x1e01ff8,0x7f83ffc,0x1ff80ff0,0x0,0x0,0xff0,
  3095. 0x1f003e0,0x7fe00ff8,0x7fc07ff8,0x7ff80ff8,0x70381ffc,0xff0701c,0x7000783c,0x78381ff0,0x7fe01ff0,0x7fe01ff0,0x7fff7038,0x781ee007,
  3096. 0x3c1e380e,0x7ffc0380,0x380001c0,0x3c00000,0x1800000,0x38000000,0x1c0000,0x3c00000,0x380001c0,0xe01c00,0x3800000,0x0,0x0,
  3097. 0x0,0x7000000,0x0,0x0,0x1e0,0x18003c0,0x0,0x3fc0000,0x70,0x0,0x0,0x6600000,0x1ff00000,0x1fff0000,0x7ffc0000,0x0,0x0,0x0,0x0,
  3098. 0xcf0239c,0x3c00000,0x0,0x3c0380e,0x1c0,0x2001fe,0x380e,0x18007f8,0xe700000,0x8600000,0x0,0xff0,0x7e00000,0x8c00870,0x1800000,
  3099. 0x1ff80000,0x180,0xc600000,0xc000c00,0x38001c0,0x3e003e0,0x3e003e0,0x3e001c0,0x7fe0ff8,0x7ff87ff8,0x7ff87ff8,0x1ffc1ffc,0x1ffc1ffc,
  3100. 0x7fc07838,0x1ff01ff0,0x1ff01ff0,0x1ff00000,0x1fec7038,0x70387038,0x7038380e,0x70003ce0,0x1800180,0x6600cf0,0xe7007c0,0x0,
  3101. 0x1800180,0x6600e70,0x1800180,0x6600e70,0x7c00cf0,0x1800180,0x6600cf0,0xe700000,0x180,0x1800660,0xe700180,0x38000e70,0x0,
  3102. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c0,0x630030c,0x3f0e700,0x1e200180,0x1800180,0x21100000,0x0,
  3103. 0x38,0x1e7819c0,0x38781038,0x1e01c00,0xf080038,0x1c381c38,0x0,0x0,0x1878,0x7fc03e0,0x70e01e18,0x70e07000,0x70001e18,0x703801c0,
  3104. 0x707038,0x70007c7c,0x7c381c70,0x70701c70,0x70703830,0x1c07038,0x381ce007,0x1c1c3c1e,0x3c0380,0x380001c0,0x7e00000,0xc00000,
  3105. 0x38000000,0x1c0000,0x3800000,0x38000000,0x1c00,0x3800000,0x0,0x0,0x0,0x7000000,0x0,0x0,0x1c0,0x18001c0,0x0,0x70c0000,0xe0,
  3106. 0x0,0x0,0xc300000,0x38300000,0x3c700000,0x3c0000,0x0,0x0,0x0,0x0,0xce022f4,0x1800000,0x0,0x1803c1e,0x1c0,0x2003c2,0x3c1e,
  3107. 0x1800e08,0x7e0,0x300000,0x0,0x7e00000,0xe700000,0x600030,0x3000000,0x3f980000,0x180,0x18200000,0xc000c00,0x1e0001c0,0x3e003e0,
  3108. 0x3e003e0,0x3e003e0,0xfe01e18,0x70007000,0x70007000,0x1c001c0,0x1c001c0,0x70e07c38,0x1c701c70,0x1c701c70,0x1c700000,0x3c787038,
  3109. 0x70387038,0x70383c1e,0x70003870,0xc00300,0xc300ce0,0x380,0x0,0xc00300,0xc300000,0xc00300,0xc300000,0xfc00ce0,0xc00300,0xc300ce0,
  3110. 0x0,0xc0,0x3000c30,0x300,0x38000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c0,0x630031c,0xff8c300,
  3111. 0x1c000180,0x1800180,0x39380000,0x0,0x70,0x1c3801c0,0x203c001c,0x3e01c00,0x1c000038,0x381c3838,0x0,0x0,0x1038,0xe0e03e0,0x70703c08,
  3112. 0x70707000,0x70003808,0x703801c0,0x707070,0x70007c7c,0x7c383838,0x70383838,0x70387010,0x1c07038,0x381c700e,0x1e3c1c1c,0x780380,
  3113. 0x1c0001c0,0xe700000,0x0,0x38000000,0x1c0000,0x3800000,0x38000000,0x1c00,0x3800000,0x0,0x0,0x0,0x7000000,0x0,0x0,0x1c0,0x18001c0,
  3114. 0x0,0xe000000,0xe0,0x0,0x1000100,0x3800,0x70100000,0x38700000,0x780000,0x1c0,0x7801ce0,0xe380000,0x0,0x2264,0x0,0x0,0x1c1c,
  3115. 0x0,0x200780,0x1c1c,0x1800c00,0x1818,0x7f00000,0x0,0x18180000,0xc300000,0x600070,0x0,0x7f980000,0x180,0x18300000,0xc000c00,
  3116. 0x3000000,0x3e003e0,0x3e003e0,0x3e003e0,0xee03c08,0x70007000,0x70007000,0x1c001c0,0x1c001c0,0x70707c38,0x38383838,0x38383838,
  3117. 0x38380000,0x38387038,0x70387038,0x70381c1c,0x7fc03870,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xbc00000,0x0,0x0,0x0,0x0,0x0,0x0,
  3118. 0x38000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c0,0x6300318,0xe88c300,0x1c000180,0x38001c0,
  3119. 0xfe00180,0x0,0x70,0x1c3801c0,0x1c001c,0x6e01c00,0x1c000078,0x381c3818,0x0,0x40000,0x40000038,0x1c0607e0,0x70703800,0x70707000,
  3120. 0x70003800,0x703801c0,0x7070e0,0x70007c7c,0x7c383838,0x70383838,0x70387000,0x1c07038,0x381c700e,0xf780e38,0x700380,0x1c0001c0,
  3121. 0x1c380000,0x0,0x38000000,0x1c0000,0x3800000,0x38000000,0x1c00,0x3800000,0x0,0x0,0x0,0x7000000,0x0,0x0,0x1c0,0x18001c0,0x0,
  3122. 0xe000000,0xe0,0x0,0x1000100,0x4400,0x70000000,0x38700000,0x700000,0xe0,0x7001c70,0xe380000,0x0,0x2264,0x0,0x0,0xe38,0x0,
  3123. 0x200700,0xe38,0x1800c00,0x300c,0xc300000,0x0,0x300c0000,0xc300180,0x6003c0,0x0,0x7f980000,0x180,0x18300000,0xc000c00,0x1800000,
  3124. 0x7e007e0,0x7e007e0,0x7e003e0,0xee03800,0x70007000,0x70007000,0x1c001c0,0x1c001c0,0x70707c38,0x38383838,0x38383838,0x38380000,
  3125. 0x38387038,0x70387038,0x70380e38,0x7ff039f0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1e00000,0x0,0x0,0x0,0x40000,0x0,0x0,0x38000000,
  3126. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c0,0x6300318,0x1c80e700,0x1c000180,0x38001c0,0x3800180,
  3127. 0x0,0xe0,0x381c01c0,0x1c001c,0x6e01c00,0x38000070,0x381c381c,0x0,0x3c0000,0x78000078,0x38030770,0x70707800,0x70387000,0x70007000,
  3128. 0x703801c0,0x7071c0,0x7000745c,0x7638701c,0x7038701c,0x70387000,0x1c07038,0x1c38718e,0x7700f78,0xf00380,0xe0001c0,0x381c0000,
  3129. 0x7e0,0x39e003e0,0x79c03f0,0x3ffc079c,0x39e01fc0,0xfe01c1e,0x3807778,0x39e007e0,0x39e0079c,0x73c07e0,0x7ff83838,0x701ce007,
  3130. 0x783c701c,0x1ffc01c0,0x18001c0,0x0,0x1c000100,0xe0,0x0,0x1000100,0x4200,0x70000000,0x70700100,0xf00100,0x10000e0,0x7000c70,
  3131. 0xc700000,0x0,0x2204,0x7e00000,0x1e380100,0x1ffc0f78,0x0,0xf80700,0xf78,0x1800e00,0x63e6,0x18300000,0x0,0x6fe60000,0xe700180,
  3132. 0xc00060,0x3838,0x7f980000,0x180,0x18300000,0xc000c00,0x18001c0,0x7700770,0x7700770,0x77007f0,0xee07800,0x70007000,0x70007000,
  3133. 0x1c001c0,0x1c001c0,0x70387638,0x701c701c,0x701c701c,0x701c1008,0x707c7038,0x70387038,0x70380f78,0x707039c0,0x7e007e0,0x7e007e0,
  3134. 0x7e007e0,0x1f3c03e0,0x3f003f0,0x3f003f0,0x1fc01fc0,0x1fc01fc0,0x7f039e0,0x7e007e0,0x7e007e0,0x7e00380,0x7ce3838,0x38383838,
  3135. 0x3838701c,0x39e0701c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c0,0x6307fff,0x1c807e0c,0xe000180,
  3136. 0x30000c0,0x3800180,0x0,0xe0,0x381c01c0,0x1c001c,0xce01fe0,0x38000070,0x381c381c,0x3800380,0xfc0000,0x7e0000f0,0x30030770,
  3137. 0x70707000,0x70387000,0x70007000,0x703801c0,0x707380,0x700076dc,0x7638701c,0x7038701c,0x70387800,0x1c07038,0x1c3873ce,0x7f00770,
  3138. 0xe00380,0xe0001c0,0x700e0000,0x1ff8,0x3ff00ff0,0xffc0ff8,0x3ffc0ffc,0x3bf01fc0,0xfe01c3c,0x3807f78,0x3bf00ff0,0x3ff00ffc,
  3139. 0x77e0ff0,0x7ff83838,0x3838e007,0x3c783838,0x1ffc01c0,0x18001c0,0x0,0x7ff00380,0x1e0,0x0,0x1000100,0x4200,0x78000000,0x70700380,
  3140. 0xe00380,0x3800060,0xe000e30,0x1c600000,0x0,0x2204,0xff00000,0x7f7c0380,0x1ffc0770,0x1c0,0x3fc0700,0x18040770,0x1800780,0x4e12,
  3141. 0x18300104,0x0,0x4c320000,0x7e00180,0x1c00030,0x3838,0x7f980000,0x180,0x18302080,0xc000c00,0x18001c0,0x7700770,0x7700770,
  3142. 0x7700770,0x1ee07000,0x70007000,0x70007000,0x1c001c0,0x1c001c0,0x70387638,0x701c701c,0x701c701c,0x701c381c,0x705c7038,0x70387038,
  3143. 0x70380770,0x70383b80,0x1ff81ff8,0x1ff81ff8,0x1ff81ff8,0x3fbe0ff0,0xff80ff8,0xff80ff8,0x1fc01fc0,0x1fc01fc0,0xff83bf0,0xff00ff0,
  3144. 0xff00ff0,0xff00380,0xffc3838,0x38383838,0x38383838,0x3ff03838,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3145. 0x0,0x1c0,0x7fff,0x1c803c38,0xf000000,0x70000e0,0xfe00180,0x0,0x1c0,0x381c01c0,0x3c0078,0xce01ff0,0x39e000f0,0x1c38381c,0x3800380,
  3146. 0x3e07ffc,0xf8001f0,0x307b0770,0x70e07000,0x70387000,0x70007000,0x703801c0,0x707700,0x700076dc,0x7638701c,0x7038701c,0x70387e00,
  3147. 0x1c07038,0x1c3873ce,0x3e007f0,0x1e00380,0x70001c0,0x0,0x1038,0x3c381e18,0x1c7c1e3c,0x3801e3c,0x3c7801c0,0xe01c78,0x380739c,
  3148. 0x3c781c38,0x3c381c3c,0x7c21e10,0x7003838,0x3838700e,0x1ef03838,0x3c01c0,0x18001c0,0x0,0x7fe007c0,0x1c0,0x0,0x1000100,0x6400,
  3149. 0x7e000000,0x707007c0,0x1e007c0,0x7c00070,0xe000638,0x18600000,0x0,0x0,0x1e100000,0x73ce07c0,0x3c07f0,0x1c0,0x7240700,0x1ddc3ffe,
  3150. 0x1800de0,0x8c01,0x1870030c,0x0,0x8c310000,0x3c00180,0x3800030,0x3838,0x7f980000,0x180,0x183030c0,0xc000c00,0x430001c0,0x7700770,
  3151. 0x7700770,0x7700770,0x1ce07000,0x70007000,0x70007000,0x1c001c0,0x1c001c0,0x70387638,0x701c701c,0x701c701c,0x701c1c38,0x70dc7038,
  3152. 0x70387038,0x703807f0,0x70383b80,0x10381038,0x10381038,0x10381038,0x21e71e18,0x1e3c1e3c,0x1e3c1e3c,0x1c001c0,0x1c001c0,0x1e383c78,
  3153. 0x1c381c38,0x1c381c38,0x1c380380,0x1c383838,0x38383838,0x38383838,0x3c383838,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3154. 0x0,0x0,0x0,0x0,0x0,0x1c0,0x630,0x1e8000e0,0x1f000000,0x70000e0,0x39380180,0x0,0x1c0,0x3b9c01c0,0x3c07f0,0x18e01078,0x3bf800e0,
  3155. 0x7e0383c,0x3800380,0x1f807ffc,0x3f001c0,0x61ff0e38,0x7fc07000,0x70387ff0,0x7ff07000,0x7ff801c0,0x707f00,0x7000729c,0x7338701c,
  3156. 0x7070701c,0x70703fc0,0x1c07038,0x1e7873ce,0x1c003e0,0x3c00380,0x70001c0,0x0,0x1c,0x3c381c00,0x1c3c1c1c,0x3801c3c,0x383801c0,
  3157. 0xe01cf0,0x380739c,0x38381c38,0x3c381c3c,0x7801c00,0x7003838,0x3838700e,0xfe03c78,0x7801c0,0x18001c0,0x0,0x1c000c20,0xff8,
  3158. 0x0,0x1ff01ff0,0x3818,0x3fc00100,0x707e0c20,0x3c00c20,0xc200030,0xc000618,0x18c00000,0x0,0x0,0x1c000080,0xe1ce0c20,0x7803e0,
  3159. 0x1c0,0xe200700,0xff83ffe,0x1801878,0x9801,0x1cf0071c,0x7ffc0000,0x8c310000,0x7ffe,0x7000030,0x3838,0x3f980380,0x180,0xc6038e0,
  3160. 0x7f9c7f9c,0x3e1c01c0,0xe380e38,0xe380e38,0xe380f78,0x1cfc7000,0x7ff07ff0,0x7ff07ff0,0x1c001c0,0x1c001c0,0xfe387338,0x701c701c,
  3161. 0x701c701c,0x701c0e70,0x719c7038,0x70387038,0x703803e0,0x70383b80,0x1c001c,0x1c001c,0x1c001c,0xe71c00,0x1c1c1c1c,0x1c1c1c1c,
  3162. 0x1c001c0,0x1c001c0,0x1c383838,0x1c381c38,0x1c381c38,0x1c380000,0x3c383838,0x38383838,0x38383c78,0x3c383c78,0x0,0x0,0x0,0x0,
  3163. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c0,0x630,0xf800380,0x3f830000,0x70000e0,0x31080180,0x0,0x380,0x3b9c01c0,
  3164. 0x7807e0,0x38e00038,0x3c3800e0,0xff01c3c,0x3800380,0x7c000000,0x7c03c0,0x61870e38,0x7fc07000,0x70387ff0,0x7ff070fc,0x7ff801c0,
  3165. 0x707f80,0x7000739c,0x7338701c,0x7ff0701c,0x7fe00ff0,0x1c07038,0xe7073ce,0x1c003e0,0x3800380,0x38001c0,0x0,0x1c,0x381c3800,
  3166. 0x381c380e,0x380381c,0x383801c0,0xe01de0,0x380739c,0x3838381c,0x381c381c,0x7001e00,0x7003838,0x1c70718e,0x7e01c70,0xf00380,
  3167. 0x18001e0,0x1e000000,0x1c001bb0,0xff8,0x0,0x1000100,0xe0,0xff00300,0x707e1bb0,0x3801bb0,0x1bb00010,0x8000308,0x30c00000,0x0,
  3168. 0x0,0x1e0000c0,0xe1ce1bb0,0xf003e0,0x1c0,0x1c203ff8,0x63003e0,0x180181c,0x9801,0xfb00e38,0x7ffc0000,0x8fc10000,0x7ffe,0xe000860,
  3169. 0x3838,0x1f980380,0x180,0x7c01c70,0x1f001f0,0x1f003c0,0xe380e38,0xe380e38,0xe380e38,0x1cfc7000,0x7ff07ff0,0x7ff07ff0,0x1c001c0,
  3170. 0x1c001c0,0xfe387338,0x701c701c,0x701c701c,0x701c07e0,0x731c7038,0x70387038,0x703803e0,0x70383980,0x1c001c,0x1c001c,0x1c001c,
  3171. 0xe73800,0x380e380e,0x380e380e,0x1c001c0,0x1c001c0,0x381c3838,0x381c381c,0x381c381c,0x381c0000,0x387c3838,0x38383838,0x38381c70,
  3172. 0x381c1c70,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c0,0xc30,0x7f00e00,0x33c30000,0x70000e0,0x1007ffe,
  3173. 0x0,0x380,0x3b9c01c0,0xf00078,0x30e0001c,0x3c1c01c0,0x1c381fdc,0x0,0x70000000,0x1c0380,0x63030e38,0x70707000,0x70387000,0x700070fc,
  3174. 0x703801c0,0x707b80,0x7000739c,0x7338701c,0x7fc0701c,0x7fc001f0,0x1c07038,0xe703e5c,0x3e001c0,0x7800380,0x38001c0,0x0,0x7fc,
  3175. 0x381c3800,0x381c380e,0x380381c,0x383801c0,0xe01fe0,0x380739c,0x3838381c,0x381c381c,0x7001fc0,0x7003838,0x1c70718e,0x7c01c70,
  3176. 0xe01f00,0x180007c,0x7f8c0000,0x7fc03fb8,0x1c0,0x0,0x1000100,0x700,0x1f00600,0x70703fb8,0x7803fb8,0x3fb80000,0x8000000,0x180,
  3177. 0x0,0x0,0x1fc00060,0xe1ce3fb8,0xe001c0,0x1c0,0x1c203ff8,0xc1801c0,0x180c,0x9801,0x1c70,0xc0000,0x8cc10000,0x180,0xfe007c0,
  3178. 0x3838,0x7980380,0xff0,0xe38,0x3e003e00,0x3e000380,0xe380e38,0xe380e38,0xe380e38,0x38e07000,0x70007000,0x70007000,0x1c001c0,
  3179. 0x1c001c0,0x70387338,0x701c701c,0x701c701c,0x701c03c0,0x731c7038,0x70387038,0x703801c0,0x703838e0,0x7fc07fc,0x7fc07fc,0x7fc07fc,
  3180. 0xe73800,0x380e380e,0x380e380e,0x1c001c0,0x1c001c0,0x381c3838,0x381c381c,0x381c381c,0x381c7ffc,0x38dc3838,0x38383838,0x38381c70,
  3181. 0x381c1c70,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c0,0xc60,0xf83878,0x71e30000,0x70000e0,0x1007ffe,
  3182. 0x7f0,0x380,0x381c01c0,0x1e0003c,0x60e0001c,0x381c01c0,0x381c079c,0x0,0x7c000000,0x7c0380,0x63031c1c,0x70307000,0x70387000,
  3183. 0x7000701c,0x703801c0,0x7071c0,0x7000739c,0x71b8701c,0x7000701c,0x71e00078,0x1c07038,0xe703e7c,0x7e001c0,0xf000380,0x38001c0,
  3184. 0x0,0x1ffc,0x381c3800,0x381c3ffe,0x380381c,0x383801c0,0xe01fc0,0x380739c,0x3838381c,0x381c381c,0x7000ff0,0x7003838,0x1ef03bdc,
  3185. 0x3800ee0,0x1e01f00,0x180007c,0x61fc0000,0x7fc07f3c,0x1c0,0x0,0x1000100,0x1800,0x780c00,0x70707f3c,0xf007f3c,0x7f3c0000,0x0,
  3186. 0x3c0,0x3ffcffff,0x0,0xff00030,0xe1fe7f3c,0x1e001c0,0x1c0,0x1c200700,0xc183ffe,0xe0c,0x9801,0x1ff038e0,0xc07f0,0x8c610000,
  3187. 0x180,0x0,0x3838,0x1980380,0x0,0x1ff0071c,0xe000e000,0xe0000f80,0x1c1c1c1c,0x1c1c1c1c,0x1c1c1e38,0x38e07000,0x70007000,0x70007000,
  3188. 0x1c001c0,0x1c001c0,0x703871b8,0x701c701c,0x701c701c,0x701c03c0,0x761c7038,0x70387038,0x703801c0,0x70703870,0x1ffc1ffc,0x1ffc1ffc,
  3189. 0x1ffc1ffc,0xfff3800,0x3ffe3ffe,0x3ffe3ffe,0x1c001c0,0x1c001c0,0x381c3838,0x381c381c,0x381c381c,0x381c7ffc,0x389c3838,0x38383838,
  3190. 0x38380ee0,0x381c0ee0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c0,0xfffc,0xbc60fc,0x70e30000,0x70000e0,
  3191. 0x180,0x7f0,0x700,0x381c01c0,0x3e0001c,0x7ffc001c,0x381c03c0,0x381c001c,0x0,0x1f807ffc,0x3f00380,0x63031ffc,0x70387000,0x70387000,
  3192. 0x7000701c,0x703801c0,0x7071e0,0x7000701c,0x71b8701c,0x7000701c,0x70f00038,0x1c07038,0x7e03e7c,0x77001c0,0xe000380,0x1c001c0,
  3193. 0x0,0x3c1c,0x381c3800,0x381c3ffe,0x380381c,0x383801c0,0xe01fe0,0x380739c,0x3838381c,0x381c381c,0x70003f8,0x7003838,0xee03bdc,
  3194. 0x3c00ee0,0x3c00380,0x18000e0,0xf00000,0x1c007e7c,0x3c0,0x0,0x1000100,0x0,0x381800,0x70707e7c,0xe007e7c,0x7e7c0000,0x0,0x7c0,
  3195. 0x0,0x0,0x3f80018,0xe1fe7e7c,0x3c001c0,0x1c0,0x1c200700,0xc183ffe,0xf0c,0x8c01,0x38e0,0xc07f0,0x8c710000,0x180,0x0,0x3838,
  3196. 0x1980000,0x0,0x71c,0x7000f0,0x700f00,0x1ffc1ffc,0x1ffc1ffc,0x1ffc1ffc,0x3fe07000,0x70007000,0x70007000,0x1c001c0,0x1c001c0,
  3197. 0x703871b8,0x701c701c,0x701c701c,0x701c07e0,0x7c1c7038,0x70387038,0x703801c0,0x7ff03838,0x3c1c3c1c,0x3c1c3c1c,0x3c1c3c1c,
  3198. 0x3fff3800,0x3ffe3ffe,0x3ffe3ffe,0x1c001c0,0x1c001c0,0x381c3838,0x381c381c,0x381c381c,0x381c0000,0x391c3838,0x38383838,0x38380ee0,
  3199. 0x381c0ee0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfffc,0x9c01ce,0x70f60000,0x70000e0,0x180,
  3200. 0x0,0x700,0x381c01c0,0x780001c,0x7ffc001c,0x381c0380,0x381c003c,0x0,0x3e07ffc,0xf800380,0x63031ffc,0x70387000,0x70387000,
  3201. 0x7000701c,0x703801c0,0x7070f0,0x7000701c,0x71b8701c,0x7000701c,0x70700038,0x1c07038,0x7e03e7c,0xf7801c0,0x1e000380,0x1c001c0,
  3202. 0x0,0x381c,0x381c3800,0x381c3800,0x380381c,0x383801c0,0xe01fe0,0x380739c,0x3838381c,0x381c381c,0x7000078,0x7003838,0xee03a5c,
  3203. 0x7c00fe0,0x78001c0,0x18001c0,0x0,0x1c003ef8,0x380,0x0,0x1000100,0x810,0x383000,0x70703ef8,0x1e003ef8,0x3ef80000,0x0,0x7c0,
  3204. 0x0,0x0,0x78000c,0xe1c03ef8,0x78001c0,0x1c0,0x1c200700,0x63001c0,0x18003f8,0x4e12,0x1c70,0xc0000,0x4c320000,0x180,0x0,0x3838,
  3205. 0x1980000,0x0,0xe38,0x700118,0x701e00,0x1ffc1ffc,0x1ffc1ffc,0x1ffc1ffc,0x7fe07000,0x70007000,0x70007000,0x1c001c0,0x1c001c0,
  3206. 0x703871b8,0x701c701c,0x701c701c,0x701c0e70,0x7c1c7038,0x70387038,0x703801c0,0x7fc0381c,0x381c381c,0x381c381c,0x381c381c,
  3207. 0x78e03800,0x38003800,0x38003800,0x1c001c0,0x1c001c0,0x381c3838,0x381c381c,0x381c381c,0x381c0000,0x3b1c3838,0x38383838,0x38380fe0,
  3208. 0x381c0fe0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1860,0x9c0186,0x707e0000,0x30000c0,0x180,
  3209. 0x0,0xe00,0x183801c0,0xf00001c,0xe0001c,0x181c0380,0x381c0038,0x0,0xfc0000,0x7e000000,0x61873c1e,0x70383800,0x70707000,0x7000381c,
  3210. 0x703801c0,0x707070,0x7000701c,0x70f83838,0x70003838,0x70780038,0x1c07038,0x7e03c3c,0xe3801c0,0x1c000380,0xe001c0,0x0,0x381c,
  3211. 0x381c3800,0x381c3800,0x380381c,0x383801c0,0xe01ef0,0x380739c,0x3838381c,0x381c381c,0x7000038,0x7003838,0xfe03e7c,0xfe007c0,
  3212. 0x70001c0,0x18001c0,0x0,0xe001ff0,0x380,0x0,0x1000100,0x162c,0x381800,0x30701ff0,0x1c001ff0,0x1ff00000,0x0,0x3c0,0x0,0x0,
  3213. 0x380018,0xe1c01ff0,0x70001c0,0x1c0,0x1c200700,0xff801c0,0x18000f0,0x63e6,0xe38,0x0,0x6c3e0000,0x0,0x0,0x3838,0x1980000,0x0,
  3214. 0x1c70,0xf0000c,0xf01c00,0x3c1e3c1e,0x3c1e3c1e,0x3c1e3c1c,0x70e03800,0x70007000,0x70007000,0x1c001c0,0x1c001c0,0x707070f8,
  3215. 0x38383838,0x38383838,0x38381c38,0x38387038,0x70387038,0x703801c0,0x7000381c,0x381c381c,0x381c381c,0x381c381c,0x70e03800,
  3216. 0x38003800,0x38003800,0x1c001c0,0x1c001c0,0x381c3838,0x381c381c,0x381c381c,0x381c0380,0x3e1c3838,0x38383838,0x383807c0,0x381c07c0,
  3217. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x18c0,0x9c0186,0x783c0000,0x38001c0,0x180,0x3800000,
  3218. 0x3800e00,0x1c3801c0,0x1e00003c,0xe00038,0x1c1c0780,0x381c0038,0x3800380,0x3c0000,0x78000000,0x61ff380e,0x70383808,0x70707000,
  3219. 0x7000381c,0x703801c0,0x40707078,0x7000701c,0x70f83838,0x70003838,0x70384038,0x1c07038,0x7e03c3c,0x1e3c01c0,0x3c000380,0xe001c0,
  3220. 0x0,0x383c,0x3c381c00,0x1c3c1c00,0x3801c3c,0x383801c0,0xe01c78,0x380739c,0x38381c38,0x3c381c3c,0x7000038,0x7003878,0x7c01e78,
  3221. 0x1ef007c0,0xf0001c0,0x18001c0,0x0,0xe000ee0,0x7800380,0xe380000,0x1001ff0,0x2242,0x40380c00,0x38700ee0,0x3c000ee0,0xee00000,
  3222. 0x0,0x0,0x0,0x0,0x380030,0xe1c00ee0,0xf0001c0,0x1c0,0xe200700,0xdd801c0,0x1800038,0x300c,0x71c,0x0,0x300c0000,0x0,0x0,0x3838,
  3223. 0x1980000,0x0,0x38e0,0xb0000c,0xb01c08,0x380e380e,0x380e380e,0x380e380e,0x70e03808,0x70007000,0x70007000,0x1c001c0,0x1c001c0,
  3224. 0x707070f8,0x38383838,0x38383838,0x3838381c,0x38387038,0x70387038,0x703801c0,0x7000381c,0x383c383c,0x383c383c,0x383c383c,
  3225. 0x70e01c00,0x1c001c00,0x1c001c00,0x1c001c0,0x1c001c0,0x1c383838,0x1c381c38,0x1c381c38,0x1c380380,0x1c383878,0x38783878,0x387807c0,
  3226. 0x3c3807c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c0,0x18c0,0x10b801ce,0x3c3e0000,0x38001c0,0x180,
  3227. 0x3800000,0x3801c00,0x1e7801c0,0x3c002078,0xe02078,0x1c380700,0x1c3810f0,0x3800380,0x40000,0x40000380,0x307b380e,0x70701e18,
  3228. 0x70e07000,0x70001c1c,0x703801c0,0x60e0703c,0x7000701c,0x70f83c78,0x70003c70,0x703c70f0,0x1c03870,0x3c01c3c,0x3c1c01c0,0x78000380,
  3229. 0x7001c0,0x0,0x3c7c,0x3c381e18,0x1c7c1e0c,0x3801c3c,0x383801c0,0xe01c38,0x3c0739c,0x38381c38,0x3c381c3c,0x7001078,0x7803c78,
  3230. 0x7c01c38,0x1c780380,0x1e0001c0,0x18001c0,0x0,0x70c06c0,0x7000380,0xe300000,0x1000100,0x2142,0x70f00600,0x3c7006c0,0x780006c0,
  3231. 0x6c00000,0x0,0x0,0x0,0x0,0x10780060,0x73e206c0,0x1e0001c0,0x1c0,0x7240700,0x180c01c0,0x1800018,0x1818,0x30c,0x0,0x18180000,
  3232. 0x0,0x0,0x3c78,0x1980000,0x0,0x30c0,0x130000c,0x1301c18,0x380e380e,0x380e380e,0x380e380e,0x70e01e18,0x70007000,0x70007000,
  3233. 0x1c001c0,0x1c001c0,0x70e070f8,0x3c783c78,0x3c783c78,0x3c781008,0x7c783870,0x38703870,0x387001c0,0x70003a3c,0x3c7c3c7c,0x3c7c3c7c,
  3234. 0x3c7c3c7c,0x79f11e18,0x1e0c1e0c,0x1e0c1e0c,0x1c001c0,0x1c001c0,0x1c783838,0x1c381c38,0x1c381c38,0x1c380380,0x1c383c78,0x3c783c78,
  3235. 0x3c780380,0x3c380380,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c0,0x38c0,0x1ff800fc,0x1fee0000,
  3236. 0x1800180,0x180,0x3800000,0x3801c00,0xff01ffc,0x3ffc3ff0,0xe03ff0,0xff00700,0x1ff81fe0,0x3800380,0x0,0x380,0x3000780f,0x7ff00ff8,
  3237. 0x7fc07ff8,0x70000ffc,0x70381ffc,0x7fe0701c,0x7ff8701c,0x70781ff0,0x70001ff0,0x701c7ff0,0x1c01fe0,0x3c01c38,0x380e01c0,0x7ffc0380,
  3238. 0x7001c0,0x0,0x1fdc,0x3ff00ff0,0xffc0ffc,0x3800fdc,0x38383ffe,0xe01c3c,0x1fc739c,0x38380ff0,0x3ff00ffc,0x7001ff0,0x3f81fb8,
  3239. 0x7c01c38,0x3c3c0380,0x1ffc01c0,0x18001c0,0x0,0x3fc0380,0x7000380,0xc70718c,0x1000100,0x2244,0x7ff00200,0x1fff0380,0x7ffc0380,
  3240. 0x3800000,0x0,0x0,0x0,0x0,0x1ff000c0,0x7f7e0380,0x1ffc01c0,0x1c0,0x3fc3ffe,0x1c0,0x1800018,0x7e0,0x104,0x0,0x7e00000,0x7ffe,
  3241. 0x0,0x3fde,0x1980000,0x0,0x2080,0x3300018,0x3300ff0,0x780f780f,0x780f780f,0x780f780e,0xf0fe0ff8,0x7ff87ff8,0x7ff87ff8,0x1ffc1ffc,
  3242. 0x1ffc1ffc,0x7fc07078,0x1ff01ff0,0x1ff01ff0,0x1ff00000,0x7ff01fe0,0x1fe01fe0,0x1fe001c0,0x70003bf8,0x1fdc1fdc,0x1fdc1fdc,
  3243. 0x1fdc1fdc,0x3fbf0ff0,0xffc0ffc,0xffc0ffc,0x3ffe3ffe,0x3ffe3ffe,0xff03838,0xff00ff0,0xff00ff0,0xff00000,0x3ff01fb8,0x1fb81fb8,
  3244. 0x1fb80380,0x3ff00380,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c0,0x31c0,0x7e00078,0x7cf0000,0x1800180,
  3245. 0x0,0x3800000,0x3803800,0x3c01ffc,0x3ffc0fe0,0xe01fc0,0x3e00e00,0x7e00f80,0x3800380,0x0,0x380,0x18007007,0x7fc003f0,0x7f007ff8,
  3246. 0x700003f0,0x70381ffc,0x3f80701e,0x7ff8701c,0x707807c0,0x700007c0,0x701e1fc0,0x1c00fc0,0x3c01818,0x780f01c0,0x7ffc0380,0x3801c0,
  3247. 0x0,0xf9c,0x39e003e0,0x79c03f0,0x380079c,0x38383ffe,0xe01c1e,0x7c739c,0x383807e0,0x39e0079c,0x7000fc0,0x1f80f38,0x3801c38,
  3248. 0x781e0380,0x1ffc01c0,0x18001c0,0x0,0x1f80100,0xe000700,0x1c60718c,0x1000100,0x1e3c,0x1fc00100,0x7ff0100,0x7ffc0100,0x1000000,
  3249. 0x0,0x0,0x0,0x0,0xfc00080,0x3e3c0100,0x1ffc01c0,0x1c0,0xf83ffe,0x1c0,0x1800838,0x0,0x0,0x0,0x0,0x7ffe,0x0,0x3b9e,0x1980000,
  3250. 0x0,0x0,0x2300038,0x23003e0,0x70077007,0x70077007,0x70077007,0xe0fe03f0,0x7ff87ff8,0x7ff87ff8,0x1ffc1ffc,0x1ffc1ffc,0x7f007078,
  3251. 0x7c007c0,0x7c007c0,0x7c00000,0xc7c00fc0,0xfc00fc0,0xfc001c0,0x700039f0,0xf9c0f9c,0xf9c0f9c,0xf9c0f9c,0x1f1e03e0,0x3f003f0,
  3252. 0x3f003f0,0x3ffe3ffe,0x3ffe3ffe,0x7e03838,0x7e007e0,0x7e007e0,0x7e00000,0x63e00f38,0xf380f38,0xf380380,0x39e00380,0x0,0x0,
  3253. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x800000,0x0,0xc00300,0x0,0x3000000,0x3800,0x0,0x0,0x0,0x0,
  3254. 0x0,0x300,0x0,0x0,0x1c000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x0,0x0,0x0,0x0,0x380,0x3801c0,0x0,0x0,0x0,0x0,0x1c,0x0,0xe00000,
  3255. 0x0,0x0,0x3800001c,0x0,0x0,0x0,0x700,0x1c0,0x18001c0,0x0,0x0,0xe000700,0x18600000,0x1000100,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3256. 0x0,0x0,0x0,0x0,0x0,0x200000,0x0,0x1800ff0,0x0,0x0,0x0,0x0,0x0,0x0,0x3800,0x1980000,0x1800000,0x0,0x6300070,0x6300000,0x0,
  3257. 0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000000,
  3258. 0x0,0x700,0x38000700,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x800000,0x0,0xc00300,0x0,0x7000000,
  3259. 0x7000,0x0,0x0,0x0,0x0,0x0,0x700,0x0,0x0,0xf040000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x78,0x0,0x0,0x0,0x0,0x3f0,0x1c0fc0,0x0,0x0,
  3260. 0x0,0x0,0x1c,0x0,0xe00000,0x0,0x0,0x3800001c,0x0,0x0,0x0,0x700,0x1e0,0x18003c0,0x0,0x0,0xc000700,0x18c00000,0x1000000,0x0,
  3261. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200000,0x0,0x18007e0,0x0,0x0,0x0,0x0,0x0,0x0,0x3800,0x1980000,0xc00000,
  3262. 0x0,0x7f800e0,0x7f80000,0x0,0x0,0x0,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x60,0x0,0x0,0x0,0x0,
  3263. 0x0,0x0,0x0,0x0,0x0,0x0,0x700,0x38000700,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x800000,
  3264. 0x0,0x600600,0x0,0x6000000,0x0,0x0,0x0,0x0,0x0,0x0,0x600,0x0,0x0,0x7fc0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0x0,0x0,0x0,0x0,
  3265. 0x3f0,0xfc0,0x0,0x0,0x0,0x0,0x838,0x0,0x1e00000,0x0,0x0,0x3800001c,0x0,0x0,0x0,0xf00,0xfc,0x1801f80,0x0,0x0,0x8008e00,0x30c00000,
  3266. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200000,0x0,0x1800000,0x0,0x0,0x0,0x0,0x0,0x0,0x3800,0x1980000,0xc00000,
  3267. 0x0,0x3001c0,0x300000,0x0,0x0,0x0,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x60,0x0,0x0,0x0,0x0,0x0,
  3268. 0x0,0x0,0x0,0x0,0x0,0xf00,0x38000f00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x800000,0x0,
  3269. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfc0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3270. 0x0,0x0,0xff0,0x0,0x1fc00000,0x0,0x0,0x3800001c,0x0,0x0,0x0,0x3e00,0x7c,0x1801f00,0x0,0x0,0x800fe00,0x0,0x0,0x0,0x0,0x0,0x0,
  3271. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200000,0x0,0x1800000,0x0,0x0,0x0,0x0,0x0,0x0,0x3800,0x0,0x7c00000,0x0,0x3001fc,0x300000,
  3272. 0x0,0x0,0x0,0x3e0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3e0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3273. 0x3e00,0x38003e00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3274. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfff8,0x0,0x0,0x0,0x7e0,0x0,0x1f000000,
  3275. 0x0,0x0,0x3800001c,0x0,0x0,0x0,0x3c00,0x0,0x1800000,0x0,0x0,0x7800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3276. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3800,0x0,0x7800000,0x0,0x0,0x0,0x0,0x0,0x0,0x3c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3277. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c00,0x38003c00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3278. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3279. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfff8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1800000,0x0,0x0,0x0,0x0,
  3280. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3281. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3282. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3283. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3284. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3285. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3286. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3287. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3288. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3289. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3290. 0x0,0x0,0x0,0x0,0x0,0x0,0x0 };
  3291. // Definition of a 19x38 font.
  3292. const unsigned int font19x38[19*38*256/32] = {
  3293. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3294. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3295. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c380000,0x0,0x1c380,0x0,0x0,0x0,0x0,0x0,
  3296. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3800007,0x3c003,0x86000000,
  3297. 0x1e00000,0x3,0x80000700,0x3c00000,0x380000,0x70003c00,0x0,0xe1800e,0x1c00,0xf000e18,0x0,0x0,0x700000e0,0x780000,0x7000,0x0,
  3298. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3299. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3300. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3301. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe700000,0x0,0xe700,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x38e0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3302. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c0000e,0x7e003,0xe60071c0,0x7f80000,0x1,0xc0000e00,0x7e0038e,0x1c0000,
  3303. 0xe0007e00,0x38e00000,0xf98007,0x3800,0x1f800f98,0x1c70000,0x0,0x380001c0,0xfc0071,0xc000e000,0x0,0x0,0x0,0x0,0x3e00000,0x0,
  3304. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3305. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3306. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3307. 0x0,0x0,0x0,0x7e00000,0x0,0x7e00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x38e0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3308. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0001c,0xe7006,0x7c0071c0,0xe180000,0x0,0xe0001c00,0xe70038e,0xe0001,0xc000e700,0x38e00000,
  3309. 0x19f0003,0x80007000,0x39c019f0,0x1c70000,0x0,0x1c000380,0x1ce0071,0xc001c000,0x0,0x0,0x0,0x0,0x7f00000,0x0,0x0,0x0,0x0,0x0,
  3310. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3311. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3312. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c00000,
  3313. 0x0,0x3c00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x38e0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3314. 0x0,0x0,0x700038,0x1c3806,0x3c0071c0,0xc0c0000,0x0,0x70003800,0x1c38038e,0x70003,0x8001c380,0x38e00000,0x18f0001,0xc000e000,
  3315. 0x70e018f0,0x1c70000,0x0,0xe000700,0x3870071,0xc0038000,0x0,0x0,0x0,0x0,0xe380000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3316. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3317. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3318. 0xe000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x60000000,0x0,0x0,
  3319. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c38,0x0,0x1,0xc3800000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c00000,0x0,0x0,0x0,
  3320. 0x0,0x0,0x0,0x0,0x0,0x0,0xc0c0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe000003,0x80018000,0x0,0xc180000,
  3321. 0xe,0x380,0x1800000,0xe00000,0x38001800,0x0,0x38,0xe00,0x6000000,0x0,0x1,0xc0000070,0x300000,0x3800,0x0,0x0,0x0,0x0,0x0,0x0,
  3322. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x600,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3323. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7000000,0x0,0x0,0x0,0x0,0x0,0x0,
  3324. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x78c00,0xc30,
  3325. 0x0,0x0,0xc3000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3800000,0x0,0x0,0x0,0xe0,0x1c000f,0xc0000000,0x0,0x0,
  3326. 0x0,0xc0c0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7000007,0x3c003,0xc6000000,0xc180000,0x7,0x700,
  3327. 0x3c00000,0x700000,0x70003c00,0x0,0xf1801c,0x1c00,0xf000f18,0x0,0x0,0xe00000e0,0x780000,0x7000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3328. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x600,0x0,0x0,0x1c007000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3329. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfe0000,0xfe000,0x0,0x3800000,0x700000,0x38,
  3330. 0x7,0xe000001c,0x1c00,0x1c00700,0x7fc0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf800e,0x3e0000,0x0,0x0,0x0,0x1e00000,0x0,0x1,
  3331. 0xf8000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7cc00,0x660,0x0,0x0,0x66000000,0x0,0x0,0x0,0x0,0x7,0x1c000000,0x0,0x0,0x0,0x3fe00000,
  3332. 0x0,0x0,0x7000000,0x0,0x0,0x0,0x3e0,0x7c001f,0xe0000000,0x0,0x0,0x0,0xe1c0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3333. 0x0,0x0,0x0,0x1f80,0x380000e,0x7e007,0xe60071c0,0xc180000,0x3,0x80000e00,0x7e0038e,0x380000,0xe0007e00,0x38e00f00,0x1f9800e,
  3334. 0x3800,0x1f801f98,0x1c70000,0x0,0x700001c0,0xfc0071,0xc000e007,0x38e0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3335. 0x0,0x0,0x0,0x0,0x0,0x0,0x1c,0x1c7000,0x61c00600,0x1e00007e,0x70000,0x18003000,0x1800000,0x0,0x0,0x1c01f0,0x7e003f,0xc003f800,
  3336. 0x1e03ffc,0x7f01ff,0xfc03f000,0x7e000000,0x0,0x0,0xfc0,0x1e,0x7fe000,0x7e03fe00,0x3fff07ff,0xe007e038,0x383ffe0,0xff81c01,
  3337. 0xe1c000f8,0xf8f00e0,0xfc01ffc,0x3f00ff,0xc000fe07,0xfffc7007,0x1c007700,0x73c01ef,0x78ffff,0xfe0380,0xfe000,0x38000000,0x1800000,
  3338. 0x700000,0x38,0x1f,0xe000001c,0x1c00,0x1c00700,0x7fc0000,0x0,0x0,0x0,0x0,0x1c000000,0x0,0x0,0x0,0x3f800e,0x3f8000,0x0,0xfc0000,
  3339. 0x0,0x7f00000,0x0,0x1,0x98000000,0x7f00000,0x3ffe00,0xffff0,0x0,0x0,0x0,0x0,0x0,0xcf81f,0xee3807e0,0x0,0x0,0x7e03c01e,0x1c,
  3340. 0x0,0x1f800000,0xf0078038,0xfc007,0x1c000000,0xfe00000,0x0,0x0,0x3fe000f0,0xf,0xc001f800,0x6000000,0xffc000,0x0,0x1c0007e0,
  3341. 0x360,0x6c0010,0x70000700,0xf0001e,0x3c000,0x78000f00,0x7f800ff,0xf007e01f,0xff83fff0,0x7ffe0fff,0xc1fff03f,0xfe07ffc0,0xfff83fc0,
  3342. 0x7807007,0xe000fc00,0x1f8003f0,0x7e0000,0x1f867,0x70e00e,0x1c01c380,0x38f00787,0x3fe0,0x180000c,0x66006,0x7c0071c0,0xe380000,
  3343. 0x1,0x80000c00,0x660038e,0x180000,0xc0006600,0x38e0078e,0x19f0006,0x3000,0x198019f0,0x1c70000,0x0,0x30000180,0xcc0071,0xc000c007,
  3344. 0x38e0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c,0x1c7000,0x61800600,0x7f8001ff,0x70000,
  3345. 0x38003800,0x1800000,0x0,0x0,0x3807fc,0x1fe00ff,0xf00ffe00,0x3e03ffc,0xff81ff,0xfc07fc01,0xff800000,0x0,0x0,0x3fe0,0xfe001e,
  3346. 0x7ff801,0xff83ff80,0x3fff07ff,0xe01ff838,0x383ffe0,0xff81c03,0xc1c000f8,0xf8f80e0,0x3ff01fff,0xffc0ff,0xf003ff87,0xfffc7007,
  3347. 0x1e00f700,0x71c03c7,0x70ffff,0xfe01c0,0xfe000,0x7c000000,0xc00000,0x700000,0x38,0x3f,0xe000001c,0x1c00,0x1c00700,0x7fc0000,
  3348. 0x0,0x0,0x0,0x0,0x1c000000,0x0,0x0,0x0,0x3f800e,0x3f8000,0x0,0x3fe0000,0x0,0xff00000,0x0,0x3,0xc000000,0x1ffc0000,0xfffe00,
  3349. 0xffff0,0x0,0x0,0x0,0x0,0x0,0xc781f,0xee3803c0,0x0,0x0,0x3c01c01c,0x1c,0xc000,0x7fc00000,0x70070038,0x3fe007,0x1c000000,0x1ff80000,
  3350. 0x0,0x0,0x3fe003fc,0x1f,0xe003fc00,0xc000000,0x3ffc000,0x0,0x7c000ff0,0x60,0xc0000,0x30000700,0xf0001e,0x3c000,0x78000f00,
  3351. 0x3f000ff,0xf01ff81f,0xff83fff0,0x7ffe0fff,0xc1fff03f,0xfe07ffc0,0xfff83ff8,0x7c0701f,0xf803ff00,0x7fe00ffc,0x1ff8000,0x7fe67,
  3352. 0x70e00e,0x1c01c380,0x38700707,0x7ff0,0xc00018,0xc3006,0x3c0071c0,0x7f00000,0x0,0xc0001800,0xc30038e,0xc0001,0x8000c300,0x38e003fc,
  3353. 0x18f0003,0x6000,0x30c018f0,0x1c70000,0x0,0x18000300,0x1860071,0xc0018007,0x38e0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3354. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c,0x1c7000,0xe1801fc0,0x618001ff,0x70000,0x30001800,0x21840000,0x0,0x0,0x380ffe,0x1fe00ff,
  3355. 0xfc0fff00,0x3e03ffc,0x1ff81ff,0xfc0ffe03,0xffc00000,0x0,0x0,0x7ff0,0x3ff803f,0x7ffc03,0xffc3ffc0,0x3fff07ff,0xe03ffc38,0x383ffe0,
  3356. 0xff81c07,0x81c000f8,0xf8f80e0,0x7ff81fff,0x81ffe0ff,0xf80fff87,0xfffc7007,0xe00e700,0x70e0387,0x80f0ffff,0xe001c0,0xe000,
  3357. 0xfe000000,0xe00000,0x700000,0x38,0x3c,0x1c,0x1c00,0x1c00700,0x1c0000,0x0,0x0,0x0,0x0,0x1c000000,0x0,0x0,0x0,0x78000e,0x3c000,
  3358. 0x0,0x7ff0000,0x0,0xf100000,0x0,0x7,0xe000000,0x7ffc0000,0x1fffe00,0xffff0,0x0,0x0,0x0,0x0,0x0,0x3,0xf780180,0x0,0x0,0x1801e03c,
  3359. 0x1c,0xc000,0xffc00000,0x780f0038,0x786000,0x7f00,0x18380000,0x0,0xfe00,0x30c,0x10,0x70020e00,0x1c000000,0x7f8c000,0x0,0x6c001c38,
  3360. 0x60,0xc0000,0x70000700,0x1f8003f,0x7e000,0xfc001f80,0x3f000ff,0xf03ffc1f,0xff83fff0,0x7ffe0fff,0xc1fff03f,0xfe07ffc0,0xfff83ffc,
  3361. 0x7c0703f,0xfc07ff80,0xfff01ffe,0x3ffc000,0xffec7,0x70e00e,0x1c01c380,0x38780f07,0xf070,0xe00038,0x1c3800,0x0,0x3e00000,0x0,
  3362. 0xe0003800,0x1c380000,0xe0003,0x8001c380,0x3e0,0x3,0x8000e000,0x70e00000,0x0,0x0,0x1c000700,0x3870000,0x38007,0x0,0x0,0x0,
  3363. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c,0x1c7000,0xe3807ff0,0xc0c003c1,0x70000,0x70001c00,
  3364. 0x718e0000,0x0,0x0,0x700f1e,0x1ce00c0,0x3c0c0f80,0x7e03800,0x3e08000,0x381e0f03,0xc1e00000,0x0,0x0,0x7078,0x783c03f,0x701e07,
  3365. 0xc1c383e0,0x38000700,0x7c1c38,0x3801c00,0x381c0f,0x1c000fc,0x1f8f80e0,0x78781c07,0x81e1e0e0,0x780f0180,0xe007007,0xe00e380,
  3366. 0xe0f0783,0x80e0000e,0xe000e0,0xe001,0xef000000,0x0,0x700000,0x38,0x38,0x1c,0x0,0x700,0x1c0000,0x0,0x0,0x0,0x0,0x1c000000,
  3367. 0x0,0x0,0x0,0x70000e,0x1c000,0x0,0xf830000,0x0,0x1e000000,0x0,0x0,0x10000,0x780c0000,0x3e38000,0xe0,0x0,0x0,0x0,0x0,0x0,0x3,
  3368. 0xd580000,0x0,0x0,0xe038,0x1c,0xc000,0xf0400000,0x380e0038,0x702000,0x1ffc0,0xc0000,0x0,0x3ff80,0x606,0x0,0x30000600,0x0,
  3369. 0x7f8c000,0x0,0xc001818,0x60,0xc0003,0xe0000700,0x1f8003f,0x7e000,0xfc001f80,0x73801ee,0x7c1c1c,0x38000,0x70000e00,0xe0001,
  3370. 0xc0003800,0x700383e,0x7c0703c,0x3c078780,0xf0f01e1e,0x3c3c000,0xf0f87,0x70e00e,0x1c01c380,0x38380e07,0xe038,0x0,0x0,0x0,
  3371. 0x0,0x0,0x0,0x0,0x0,0x0,0xff0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3372. 0x0,0x0,0x0,0x0,0x0,0x1c,0x1c7000,0xc380fff0,0xc0c00380,0x70000,0x70001c00,0x3dbc0070,0x0,0x0,0x701e0f,0xe0000,0x1e000380,
  3373. 0x6e03800,0x7800000,0x781c0707,0x80e00000,0x0,0x0,0x4038,0xe00c03f,0x700e07,0x4380f0,0x38000700,0x700438,0x3801c00,0x381c0e,
  3374. 0x1c000ec,0x1b8fc0e0,0xf03c1c03,0xc3c0f0e0,0x3c1e0000,0xe007007,0xe00e380,0xe070703,0xc1e0001e,0xe000e0,0xe001,0xc7000000,
  3375. 0x0,0x700000,0x38,0x38,0x1c,0x0,0x700,0x1c0000,0x0,0x0,0x0,0x0,0x1c000000,0x0,0x0,0x0,0x70000e,0x1c000,0x0,0xe010000,0x0,
  3376. 0x1c000000,0x10,0x20000,0x6c000,0xf0000000,0x3838000,0x1e0,0x0,0xf000f,0xf1e00,0x78f00000,0x0,0x3,0xdd80000,0x0,0x0,0xf078,
  3377. 0x0,0xc001,0xe0000000,0x1c1c0038,0x700000,0x3c1e0,0xc0000,0x0,0x783c0,0x606,0x0,0x30000e00,0x0,0xff8c000,0x0,0xc00300c,0x60,
  3378. 0xc0003,0xe0000000,0x1f8003f,0x7e000,0xfc001f80,0x73801ce,0x70041c,0x38000,0x70000e00,0xe0001,0xc0003800,0x700380f,0x7e07078,
  3379. 0x1e0f03c1,0xe0783c0f,0x781e000,0x1c0787,0x70e00e,0x1c01c380,0x383c1e07,0xff00e038,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x878,
  3380. 0x0,0x0,0x0,0x7,0x80000080,0x0,0x0,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c,
  3381. 0x1c7000,0xc301e630,0xc0c00380,0x70000,0xe0000e00,0xff00070,0x0,0x0,0xe01c07,0xe0000,0xe000380,0xce03800,0x7000000,0x701c0707,
  3382. 0x600000,0x0,0x4000010,0x38,0x1c00e07f,0x80700e0e,0x38070,0x38000700,0xe00038,0x3801c00,0x381c1c,0x1c000ec,0x1b8ec0e0,0xe01c1c01,
  3383. 0xc38070e0,0x1c1c0000,0xe007007,0x701c380,0xe078e01,0xc1c0003c,0xe00070,0xe003,0x83800000,0x7f,0x71f000,0x3e003e38,0x3f007ff,
  3384. 0xe01f1c1c,0x7801fc00,0x3fc00701,0xe01c0077,0x8f071e00,0xf801c7c,0x7c700e,0x3e01fc03,0xfff8380e,0xe007700,0x73c0787,0x387ffc,
  3385. 0x70000e,0x1c000,0x0,0xe000000,0x0,0x1c000000,0x10,0x20000,0xc2000,0xe0000000,0x3838000,0x3c0,0x0,0xf000f,0x78e00,0x70e00000,
  3386. 0x0,0x3,0xc980fe0,0x1f0,0xf8000007,0xffc07070,0x0,0x3f801,0xc0000000,0x1e3c0038,0x700000,0x70070,0x7fc0000,0x0,0xe00e0,0x606,
  3387. 0x1c0000,0x70007c00,0x380e,0xff8c000,0x0,0xc00300c,0x60,0xc0000,0x70000000,0x3fc007f,0x800ff001,0xfe003fc0,0x73801ce,0xe0001c,
  3388. 0x38000,0x70000e00,0xe0001,0xc0003800,0x7003807,0x7607070,0xe0e01c1,0xc0383807,0x700e000,0x1c0387,0x70e00e,0x1c01c380,0x381c1c07,
  3389. 0xffc0e0f8,0x3f8007f,0xfe001,0xfc003f80,0x7f007e3,0xe003e001,0xf8003f00,0x7e000fc,0xfe001f,0xc003f800,0x7f00003c,0x38f0007,
  3390. 0xc000f800,0x1f0003e0,0x7c0007,0x8003f0c3,0x80e0701c,0xe0381c0,0x70700387,0x1f01c00e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3391. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c,0x1c701f,0xfff1c600,0xc0c00380,0x70000,0xe0000e00,0x3c00070,0x0,0x0,0xe03c07,
  3392. 0x800e0000,0xe000380,0x1ce03800,0x7000000,0x701c0707,0x7003c0,0x780000,0x3c00001e,0x38,0x18006073,0x80700e0e,0x38070,0x38000700,
  3393. 0xe00038,0x3801c00,0x381c38,0x1c000ee,0x3b8ee0e1,0xe01e1c01,0xc78078e0,0x1c1c0000,0xe007007,0x701c387,0xe03de00,0xe3800038,
  3394. 0xe00070,0xe007,0x1c00000,0x1ff,0xc077f801,0xff807fb8,0xff807ff,0xe03fdc1d,0xfc01fc00,0x3fc00703,0xc01c007f,0xdf877f00,0x3fe01dfe,
  3395. 0xff700e,0xff07ff03,0xfff8380e,0x700f700,0x71e0f03,0x80707ffc,0x70000e,0x1c000,0x0,0x1c000008,0x0,0x1c000000,0x10,0x20000,
  3396. 0x82000,0xe0000000,0x7038000,0x80000380,0x2000040,0x7000e,0x38700,0xf1e00000,0x0,0x3,0xc183ff8,0x3fd,0xfc008007,0xffc038e0,
  3397. 0x0,0xffc01,0xc0008008,0xe380038,0x380000,0xe3e38,0x1ffc0040,0x80000000,0x1cfc70,0x606,0x1c0000,0xe0007c00,0x380e,0xff8c000,
  3398. 0x0,0xc00300c,0x8100060,0xc0000,0x30000700,0x39c0073,0x800e7001,0xce0039c0,0x73801ce,0xe0001c,0x38000,0x70000e00,0xe0001,
  3399. 0xc0003800,0x7003807,0x77070f0,0xf1e01e3,0xc03c7807,0x8f00f080,0x83c0787,0x70e00e,0x1c01c380,0x380e3807,0xffe0e1c0,0xffe01ff,
  3400. 0xc03ff807,0xff00ffe0,0x1ffc0ff7,0xf01ff807,0xfc00ff80,0x1ff003fe,0xfe001f,0xc003f800,0x7f0003fc,0x3bf801f,0xf003fe00,0x7fc00ff8,
  3401. 0x1ff0007,0x8007fd83,0x80e0701c,0xe0381c0,0x70380707,0x7f80e01c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3402. 0x0,0x0,0x0,0x0,0x1c,0x1c701f,0xfff1c600,0x618081c0,0x70000,0xe0000e00,0x3c00070,0x0,0x0,0xe03803,0x800e0000,0xe000380,0x18e03800,
  3403. 0xf000000,0xf01c0707,0x7003c0,0x780000,0xfc00001f,0x80000078,0x301e6073,0x80700e1c,0x38038,0x38000700,0x1c00038,0x3801c00,
  3404. 0x381c70,0x1c000e6,0x338ee0e1,0xc00e1c01,0xc70038e0,0x1c1c0000,0xe007007,0x701c387,0xe01dc00,0xf7800078,0xe00070,0xe00e,0xe00000,
  3405. 0x3ff,0xe07ffc03,0xffc0fff8,0x1ffc07ff,0xe07ffc1d,0xfe01fc00,0x3fc00707,0x801c007f,0xdf877f80,0x7ff01fff,0x1fff00e,0xff07ff03,
  3406. 0xfff8380e,0x700e380,0xe0e0e03,0x80707ffc,0x70000e,0x1c000,0x0,0x7ffc001c,0x0,0x1c000000,0x10,0x20000,0x82000,0xe0000000,
  3407. 0x7038001,0xc0000780,0x70000e0,0x3800e,0x38700,0xe1c00000,0x0,0x3,0xc183ff8,0x7ff,0xfc01c007,0xffc03de0,0x0,0x1ffc01,0xc001c01c,
  3408. 0xf780038,0x3c0000,0xcff18,0x380c00c1,0x80000000,0x18fe30,0x30c,0x1c0001,0xc0000e00,0x380e,0xff8c000,0x0,0xc00300c,0xc180060,
  3409. 0xc0000,0x30000700,0x39c0073,0x800e7001,0xce0039c0,0xe1c038e,0x1c0001c,0x38000,0x70000e00,0xe0001,0xc0003800,0x7003803,0x877070e0,
  3410. 0x71c00e3,0x801c7003,0x8e0071c0,0x1c380fc7,0x70e00e,0x1c01c380,0x380f7807,0x1e0e380,0x1fff03ff,0xe07ffc0f,0xff81fff0,0x3ffe0fff,
  3411. 0xf03ffc0f,0xfe01ffc0,0x3ff807ff,0xfe001f,0xc003f800,0x7f0007fe,0x3bfc03f,0xf807ff00,0xffe01ffc,0x3ff8007,0x800fff83,0x80e0701c,
  3412. 0xe0381c0,0x70380707,0xffc0e01c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c,0x1c701f,
  3413. 0xfff1c600,0x7f8381e0,0x70000,0xc0000600,0xff00070,0x0,0x0,0x1c03803,0x800e0000,0xe000f00,0x38e03fe0,0xe000000,0xe00e0e07,
  3414. 0x7003c0,0x780007,0xf0ffff87,0xf00000f0,0x307fe0f3,0xc0703c1c,0x38038,0x38000700,0x1c00038,0x3801c00,0x381ce0,0x1c000e6,0x338e70e1,
  3415. 0xc00e1c01,0xc70038e0,0x3c1e0000,0xe007007,0x783c38f,0x8e01fc00,0x770000f0,0xe00038,0xe01c,0x700000,0x381,0xe07c1e07,0xc0c1e0f8,
  3416. 0x3c1e0038,0xf07c1f,0xe001c00,0x1c0070f,0x1c0079,0xf3c7c380,0xf0781f07,0x83c1f00f,0xc10f0300,0x1c00380e,0x700e380,0xe0f1e03,
  3417. 0xc0f00078,0x70000e,0x1c000,0x0,0xfff8003e,0x0,0x3c000000,0x10,0x20000,0xc6000,0xf0000000,0x7038003,0xe0000f00,0xf8001f0,
  3418. 0x3801c,0x18300,0xe1800000,0x0,0x3,0xc187818,0x70f,0x9e03e000,0x7801dc0,0x1c,0x3cc401,0xc000efb8,0x7f7f0038,0x3f0000,0x1ce11c,
  3419. 0x300c01c3,0x80000000,0x38c638,0x3fc,0x1c0003,0x80000600,0x380e,0xff8c000,0x0,0xc00300c,0xe1c0060,0xc0010,0x70000700,0x79e00f3,
  3420. 0xc01e7803,0xcf0079e0,0xe1c038e,0x1c0001c,0x38000,0x70000e00,0xe0001,0xc0003800,0x7003803,0x873870e0,0x71c00e3,0x801c7003,
  3421. 0x8e0070e0,0x38381dc7,0x70e00e,0x1c01c380,0x38077007,0xf0e700,0x1c0f0381,0xe0703c0e,0x781c0f0,0x381e083e,0x787c0c1e,0xf03c1e0,
  3422. 0x783c0f07,0x800e0001,0xc0003800,0x7000fff,0x3e1c078,0x3c0f0781,0xe0f03c1e,0x783c000,0x1e0f03,0x80e0701c,0xe0381c0,0x70380f07,
  3423. 0xc1e0e03c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c,0x1,0x8701c600,0x1e0f01e0,0x1,
  3424. 0xc0000700,0x3dbc0070,0x0,0x0,0x1c03803,0x800e0000,0x1e01fe00,0x70e03ff8,0xe3e0001,0xe007fc07,0x80f003c0,0x78001f,0xc0ffff81,
  3425. 0xfc0001e0,0x30e1e0e1,0xc07ff81c,0x38038,0x3ffe07ff,0xc1c0003f,0xff801c00,0x381de0,0x1c000e7,0x738e70e1,0xc00e1c03,0xc70038e0,
  3426. 0x780f8000,0xe007007,0x383838d,0x8e00f800,0x7f0000e0,0xe00038,0xe000,0x0,0x200,0xf0780e07,0x8041c078,0x380e0038,0xe03c1e,
  3427. 0xf001c00,0x1c0071e,0x1c0070,0xe1c783c0,0xe0381e03,0x8380f00f,0xe0000,0x1c00380e,0x381c380,0xe07bc01,0xc0e00078,0x70000e,
  3428. 0x1c000,0x0,0x1c000061,0x0,0x38000000,0x10,0x20000,0x7c000,0x7c000000,0x703fc06,0x10000e00,0x18400308,0x1801c,0x1c381,0xc3800000,
  3429. 0x0,0x0,0x7000,0xe0f,0xe061000,0x7801fc0,0x1c,0x38c001,0xc0007ff0,0x7fff0038,0x77c000,0x19c00c,0x301c0387,0x0,0x30c618,0xf0,
  3430. 0x1c0007,0x600,0x380e,0x7f8c007,0x80000000,0xc001818,0x70e03fc,0x387f871f,0xe0e00700,0x70e00e1,0xc01c3803,0x870070e0,0xe1c038f,
  3431. 0xe1c0001f,0xff03ffe0,0x7ffc0fff,0x800e0001,0xc0003800,0x7003803,0x873870e0,0x71c00e3,0x801c7003,0x8e007070,0x703839c7,0x70e00e,
  3432. 0x1c01c380,0x3807f007,0x70e700,0x10078200,0xf0401e08,0x3c10078,0x200f001c,0x3878041c,0x70380e0,0x701c0e03,0x800e0001,0xc0003800,
  3433. 0x7001e0f,0x3c1e070,0x1c0e0381,0xc070380e,0x701c000,0x1c0f03,0x80e0701c,0xe0381c0,0x701c0e07,0x80e07038,0x0,0x0,0x0,0x0,0x0,
  3434. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c,0x3,0x8600e600,0x7803f0,0x1,0xc0000700,0x718e0070,0x0,0x0,0x38038c3,
  3435. 0x800e0000,0x3c01f800,0x60e03ffc,0xeff8001,0xc001f003,0xc1f003c0,0x7800fe,0xffff80,0x3f8003c0,0x60c0e0e1,0xc07fe01c,0x38038,
  3436. 0x3ffe07ff,0xc1c07e3f,0xff801c00,0x381fe0,0x1c000e3,0x638e30e1,0xc00e1c07,0x870038ff,0xf00ff800,0xe007007,0x38381cd,0x9c007000,
  3437. 0x3e0001e0,0xe0001c,0xe000,0x0,0x0,0x70780f0f,0x3c078,0x70070038,0x1e03c1c,0x7001c00,0x1c0073c,0x1c0070,0xe1c701c1,0xe03c1e03,
  3438. 0xc780f00f,0xe0000,0x1c00380e,0x381c387,0xe03f801,0xc0e000f0,0x70000e,0x1c007,0xe0100000,0x1c0000cd,0x80000003,0xffc00000,
  3439. 0x3ff,0x807ff000,0xe0,0x7fc00060,0x703fc0c,0xd8001e00,0x3360066c,0x1c018,0xc181,0x83000000,0x0,0x0,0x7000,0x300e07,0xe0cd800,
  3440. 0xf000f80,0x1c,0x78c00f,0xff0038e0,0x3e00038,0xe1e000,0x19800c,0x383c070e,0x7fffc00,0x30fc18,0x0,0xffff80e,0x20e00,0x380e,
  3441. 0x7f8c007,0x80000000,0xc001c38,0x38703ff,0xf87fff0f,0xcfe00f00,0x70e00e1,0xc01c3803,0x870070e0,0x1e1e078f,0xe1c0001f,0xff03ffe0,
  3442. 0x7ffc0fff,0x800e0001,0xc0003800,0x700ff83,0x871870e0,0x71c00e3,0x801c7003,0x8e007038,0xe03871c7,0x70e00e,0x1c01c380,0x3803e007,
  3443. 0x70e700,0x38000,0x70000e00,0x1c00038,0x7001c,0x38f00038,0x3870070,0xe00e1c01,0xc00e0001,0xc0003800,0x7001c07,0x380e0f0,0x1e1e03c3,
  3444. 0xc078780f,0xf01e000,0x3c0f03,0x80e0701c,0xe0381c0,0x701c0e07,0x80f07038,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3445. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c,0x3,0x8600ff00,0x1e00778,0x38000001,0xc0000700,0x21843fff,0xe0000000,0x0,0x38039e3,0x800e0000,
  3446. 0x7c01fe00,0xe0e0203e,0xeffc001,0xc00ffe03,0xff700000,0x7f0,0x0,0x7f00380,0x618060e1,0xc07ffc1c,0x38038,0x3ffe07ff,0xc1c07e3f,
  3447. 0xff801c00,0x381ff0,0x1c000e3,0x638e38e1,0xc00e1fff,0x870038ff,0xc003fe00,0xe007007,0x38381cd,0x9c00f800,0x3e0003c0,0xe0001c,
  3448. 0xe000,0x0,0x0,0x7070070e,0x38038,0x70070038,0x1c01c1c,0x7001c00,0x1c00778,0x1c0070,0xe1c701c1,0xc01c1c01,0xc700700e,0xfc000,
  3449. 0x1c00380e,0x381c3c7,0x1e01f001,0xe1e001e0,0xf0000e,0x1e01f,0xf8300000,0x1c00019c,0xc0000003,0xffc00000,0x10,0x20000,0x700,
  3450. 0x1ff000c0,0x703fc19,0xcc003c00,0x67300ce6,0xc038,0xc181,0x83000000,0x0,0x0,0x7e00,0x180e07,0xe19cc00,0x1e000f80,0x1c,0x70c00f,
  3451. 0xff007070,0x3e00038,0xe0f000,0x19800c,0x1fec0e1c,0x7fffc00,0x30f818,0x0,0xffff81f,0xf003fc00,0x380e,0x3f8c007,0x80000000,
  3452. 0x7f800ff0,0x1c3803f,0xe007fc00,0xff800e00,0x70e00e1,0xc01c3803,0x870070e0,0x1c0e070f,0xe1c0001f,0xff03ffe0,0x7ffc0fff,0x800e0001,
  3453. 0xc0003800,0x700ff83,0x871c70e0,0x71c00e3,0x801c7003,0x8e00701d,0xc038e1c7,0x70e00e,0x1c01c380,0x3803e007,0x70e3c0,0x38000,
  3454. 0x70000e00,0x1c00038,0x7001c,0x38e00038,0x3870070,0xe00e1c01,0xc00e0001,0xc0003800,0x7003c07,0x8380e0e0,0xe1c01c3,0x80387007,
  3455. 0xe00e1ff,0xfe381b83,0x80e0701c,0xe0381c0,0x701e1e07,0x707878,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3456. 0x0,0x0,0x0,0x0,0x1c,0x3,0xe007fe0,0x7800e3c,0x38000001,0xc0000700,0x1803fff,0xe0000000,0x0,0x70039c3,0x800e0000,0xf8000f80,
  3457. 0xc0e0000e,0xf83c003,0xc01e0f01,0xff700000,0x7c0,0x0,0x1f00780,0x618061c0,0xe0701e1c,0x38038,0x38000700,0x1c07e38,0x3801c00,
  3458. 0x381e78,0x1c000e3,0xe38e18e1,0xc00e1fff,0x70038ff,0xe0007f80,0xe007007,0x1c701dd,0x9c00f800,0x1c000780,0xe0000e,0xe000,0x0,
  3459. 0x7f,0xf070070e,0x38038,0x7fff0038,0x1c01c1c,0x7001c00,0x1c007f8,0x1c0070,0xe1c701c1,0xc01c1c01,0xc700700e,0x7fc00,0x1c00380e,
  3460. 0x1c381c7,0x1c01f000,0xe1c001c0,0xfe0000e,0xfe1f,0xfff00000,0x7ff003fc,0xe0000003,0xffc00000,0x10,0x20000,0x3800,0x3fc0180,
  3461. 0x703803f,0xce007800,0xff381fe7,0x30,0x0,0xc0,0x0,0x0,0x3fe0,0xc0e07,0xfe3fce00,0x1c000700,0x1c,0x70c00f,0xff006030,0x1c00000,
  3462. 0xe07800,0x19800c,0xfcc1c38,0x7fffc00,0x30d818,0x0,0xffff81f,0xf001f800,0x380e,0xf8c007,0x80000000,0x7f8007e0,0xe1c3fe,0x7fc00f,
  3463. 0xf8001e00,0xe0701c0,0xe0381c07,0x380e070,0x1c0e070e,0x1c0001c,0x38000,0x70000e00,0xe0001,0xc0003800,0x700ff83,0x870c70e0,
  3464. 0x71c00e3,0x801c7003,0x8e00700f,0x8038c1c7,0x70e00e,0x1c01c380,0x3801c007,0xf0e3e0,0x3ff807f,0xf00ffe01,0xffc03ff8,0x7ff03ff,
  3465. 0xf8e0003f,0xff87fff0,0xfffe1fff,0xc00e0001,0xc0003800,0x7003803,0x8380e0e0,0xe1c01c3,0x80387007,0xe00e1ff,0xfe383383,0x80e0701c,
  3466. 0xe0381c0,0x700e1c07,0x703870,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c,0x3,0xc000ff0,
  3467. 0x3c1e1c1c,0x38000001,0xc0000700,0x1803fff,0xe0000007,0xf8000000,0x7003803,0x800e0001,0xf0000381,0xc0e00007,0xf01e003,0x801c0700,
  3468. 0x7c700000,0x7c0,0x0,0x1f00700,0x618061c0,0xe0700e1c,0x38038,0x38000700,0x1c00e38,0x3801c00,0x381e38,0x1c000e1,0xc38e1ce1,
  3469. 0xc00e1ffc,0x70038e0,0xf0000780,0xe007007,0x1c701dd,0xdc01fc00,0x1c000780,0xe0000e,0xe000,0x0,0x1ff,0xf070070e,0x38038,0x7fff0038,
  3470. 0x1c01c1c,0x7001c00,0x1c007f8,0x1c0070,0xe1c701c1,0xc01c1c01,0xc700700e,0x3ff00,0x1c00380e,0x1c381cd,0x9c00e000,0xe1c003c0,
  3471. 0xf80000e,0x3e18,0x3ff00000,0xffe007fd,0xf0000000,0x38000000,0x10,0x20000,0x1c000,0x3c0300,0x703807f,0xdf007801,0xff7c3fef,
  3472. 0x80000000,0x0,0x3e0,0x7ffe7ff,0xff000000,0x1ff8,0x60e07,0xfe7fdf00,0x3c000700,0x1c,0x70c001,0xc0006030,0x7fff0000,0xf03800,
  3473. 0x19800c,0x1c38,0x1c07,0xf830cc18,0x0,0x1c0000,0x0,0x380e,0x18c007,0x80000000,0x0,0xe1cfe0,0x1fc003f,0x80003c00,0xe0701c0,
  3474. 0xe0381c07,0x380e070,0x1c0e070e,0x1c0001c,0x38000,0x70000e00,0xe0001,0xc0003800,0x7003803,0x870e70e0,0x71c00e3,0x801c7003,
  3475. 0x8e007007,0x3981c7,0x70e00e,0x1c01c380,0x3801c007,0x1e0e0f8,0xfff81ff,0xf03ffe07,0xffc0fff8,0x1fff07ff,0xf8e0003f,0xff87fff0,
  3476. 0xfffe1fff,0xc00e0001,0xc0003800,0x7003803,0x8380e0e0,0xe1c01c3,0x80387007,0xe00e1ff,0xfe386383,0x80e0701c,0xe0381c0,0x700e1c07,
  3477. 0x703870,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c,0x7f,0xffc00678,0x707f9c1e,0x38000001,
  3478. 0xc0000700,0x70,0x7,0xf8000000,0xe003803,0x800e0003,0xe00001c3,0x80e00007,0xe00e007,0x80380380,0x700000,0x7f0,0x0,0x7f00700,
  3479. 0x618061ff,0xe070071c,0x38038,0x38000700,0x1c00e38,0x3801c00,0x381c3c,0x1c000e1,0xc38e1ce1,0xc00e1c00,0x70038e0,0x700003c0,
  3480. 0xe007007,0x1c701d8,0xdc03dc00,0x1c000f00,0xe00007,0xe000,0x0,0x3ff,0xf070070e,0x38038,0x7fff0038,0x1c01c1c,0x7001c00,0x1c007fc,
  3481. 0x1c0070,0xe1c701c1,0xc01c1c01,0xc700700e,0x3f00,0x1c00380e,0x1c381cd,0x9c01f000,0x73800780,0xfe0000e,0xfe10,0x7c00000,0x1c000ffb,
  3482. 0xf8000000,0x38000000,0x10,0x20000,0x20000,0x1e0700,0x70380ff,0xbf80f003,0xfefe7fdf,0xc0000000,0x0,0x3f0,0x7ffe7ff,0xff000000,
  3483. 0x1f8,0x30e07,0xfeffbf80,0x78000700,0x1c,0x70c001,0xc0006030,0x7fff0000,0x783800,0x1ce11c,0xe1c,0x1c07,0xf838ce38,0x0,0x1c0000,
  3484. 0x0,0x380e,0x18c000,0x0,0x0,0x1c38c00,0x1800030,0x7800,0xfff01ff,0xe03ffc07,0xff80fff0,0x3fff0ffe,0x1c0001c,0x38000,0x70000e00,
  3485. 0xe0001,0xc0003800,0x7003803,0x870e70e0,0x71c00e3,0x801c7003,0x8e00700f,0x803b81c7,0x70e00e,0x1c01c380,0x3801c007,0xffe0e03c,
  3486. 0x1fff83ff,0xf07ffe0f,0xffc1fff8,0x3fff0fff,0xf8e0003f,0xff87fff0,0xfffe1fff,0xc00e0001,0xc0003800,0x7003803,0x8380e0e0,0xe1c01c3,
  3487. 0x80387007,0xe00e000,0x38c383,0x80e0701c,0xe0381c0,0x70073807,0x701ce0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3488. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7f,0xffc0063c,0x40619c0f,0x30000001,0xc0000700,0x70,0x7,0xf8000000,0xe003803,0x800e0007,0xc00001c3,
  3489. 0xfffc0007,0xe00e007,0x380380,0xf00000,0xfe,0xffff80,0x3f800700,0x618063ff,0xf070071c,0x38038,0x38000700,0x1c00e38,0x3801c00,
  3490. 0x381c1e,0x1c000e0,0x38e0ee1,0xc00e1c00,0x70038e0,0x380001c0,0xe007007,0x1ef01d8,0xdc038e00,0x1c001e00,0xe00007,0xe000,0x0,
  3491. 0x7c0,0x7070070e,0x38038,0x70000038,0x1c01c1c,0x7001c00,0x1c0079e,0x1c0070,0xe1c701c1,0xc01c1c01,0xc700700e,0x780,0x1c00380e,
  3492. 0xe701cd,0x9c01f000,0x73800f00,0xe0000e,0xe000,0x0,0x1c0007f7,0xf0000000,0x70000000,0x10,0x20000,0x0,0xe0e00,0x703807f,0x7f01e001,
  3493. 0xfdfc3fbf,0x80000000,0x0,0x7f0,0x0,0x0,0x3c,0x18e07,0x7f7f00,0xf0000700,0x1c,0x70c001,0xc0007070,0x1c00000,0x3e7000,0xcff18,
  3494. 0x3ffc070e,0x1c07,0xf818c630,0x0,0x1c0000,0x0,0x380e,0x18c000,0x0,0x3ffc,0x3870000,0xe000fc00,0x380f000,0x1fff83ff,0xf07ffe0f,
  3495. 0xffc1fff8,0x3fff0ffe,0x1c0001c,0x38000,0x70000e00,0xe0001,0xc0003800,0x7003803,0x870770e0,0x71c00e3,0x801c7003,0x8e00701d,
  3496. 0xc03f01c7,0x70e00e,0x1c01c380,0x3801c007,0xffc0e01c,0x3e0387c0,0x70f80e1f,0x1c3e038,0x7c071e1c,0xe00038,0x70000,0xe0001c00,
  3497. 0xe0001,0xc0003800,0x7003803,0x8380e0e0,0xe1c01c3,0x80387007,0xe00e000,0x398383,0x80e0701c,0xe0381c0,0x70073807,0x701ce0,
  3498. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7f,0xffc0061c,0xc0dc07,0xf0000001,0xc0000700,
  3499. 0x70,0x0,0x0,0x1c003c07,0x800e000f,0x1c3,0xfffc0007,0xe00e007,0x380380,0xe00000,0x1f,0xc0ffff81,0xfc000700,0x618063ff,0xf070070e,
  3500. 0x38070,0x38000700,0xe00e38,0x3801c00,0x381c0e,0x1c000e0,0x38e0ee1,0xe01e1c00,0x78078e0,0x380001c0,0xe007007,0xee01f8,0xfc078f00,
  3501. 0x1c001c00,0xe00003,0x8000e000,0x0,0x700,0x7070070e,0x38038,0x70000038,0x1c01c1c,0x7001c00,0x1c0070e,0x1c0070,0xe1c701c1,
  3502. 0xc01c1c01,0xc700700e,0x380,0x1c00380e,0xe700ed,0xb803f800,0x77800f00,0x70000e,0x1c000,0x0,0xe0003f7,0xe0000000,0x70000000,
  3503. 0x10,0x20000,0x1c0e0,0xe1c00,0x703803f,0x7e01c000,0xfdf81fbf,0x0,0x0,0x3f0,0x0,0x0,0x1c,0x1ce07,0x3f7e00,0xf0000700,0x1c,
  3504. 0x70c001,0xc00038e0,0x1c00038,0xf7000,0xe3e38,0x3ffc0387,0x1c00,0x1cc770,0x0,0x1c0000,0x0,0x380e,0x18c000,0x0,0x3ffc,0x70e0001,
  3505. 0xe001fe00,0x780e000,0x1fff83ff,0xf07ffe0f,0xffc1fff8,0x3fff0ffe,0xe0001c,0x38000,0x70000e00,0xe0001,0xc0003800,0x7003807,
  3506. 0x70770f0,0xf1e01e3,0xc03c7807,0x8f00f038,0xe03e03c7,0x70e00e,0x1c01c380,0x3801c007,0xff00e00e,0x38038700,0x70e00e1c,0x1c38038,
  3507. 0x70071c1c,0xe00038,0x70000,0xe0001c00,0xe0001,0xc0003800,0x7003803,0x8380e0e0,0xe1c01c3,0x80387007,0xe00e000,0x3b0383,0x80e0701c,
  3508. 0xe0381c0,0x70077807,0x701de0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6,0x1c00061c,
  3509. 0xc0de03,0xe0000001,0xc0000700,0x70,0x0,0x0,0x1c001c07,0xe001e,0x1c3,0xfffc0007,0x600e00e,0x380380,0xe00000,0x7,0xf0ffff87,
  3510. 0xf0000000,0x60c0e380,0x7070070e,0x38070,0x38000700,0xe00e38,0x3801c00,0x381c0f,0x1c000e0,0x38e06e0,0xe01c1c00,0x38070e0,
  3511. 0x1c0001c0,0xe007007,0xee00f8,0xf80f0700,0x1c003c00,0xe00003,0x8000e000,0x0,0x700,0x70780f0f,0x3c078,0x70000038,0x1e03c1c,
  3512. 0x7001c00,0x1c0070f,0x1c0070,0xe1c701c1,0xe03c1e03,0xc780f00e,0x380,0x1c00380e,0xe700f8,0xf807bc00,0x3f001e00,0x70000e,0x1c000,
  3513. 0x0,0xe0001ff,0xc0000000,0x70000000,0x10,0x20000,0x33110,0xe0e00,0x383801f,0xfc03c000,0x7ff00ffe,0x0,0x0,0x3e0,0x0,0x0,0x1c,
  3514. 0x38e07,0x1ffc01,0xe0000700,0x1c,0x78c001,0xc0007ff0,0x1c00038,0x7c000,0x70070,0x1c3,0x80001c00,0xe00e0,0x0,0x1c0000,0x0,
  3515. 0x380e,0x18c000,0x0,0x0,0xe1c0001,0xe0010700,0x780e000,0x1c038380,0x70700e0e,0x1c1c038,0x78070e0e,0xe0001c,0x38000,0x70000e00,
  3516. 0xe0001,0xc0003800,0x7003807,0x7037070,0xe0e01c1,0xc0383807,0x700e070,0x701c0387,0x70e00e,0x1c01c380,0x3801c007,0xe00e,0x38038700,
  3517. 0x70e00e1c,0x1c38038,0x70071c1c,0xf00038,0x70000,0xe0001c00,0xe0001,0xc0003800,0x7003c07,0x8380e0f0,0x1e1e03c3,0xc078780f,
  3518. 0xf01e007,0x803e0783,0x80e0701c,0xe0381c0,0x7003f007,0x80f00fc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3519. 0x0,0x0,0x0,0x0,0x0,0x6,0x1800061c,0xc0de01,0xc0000000,0xc0000e00,0x70,0xf0000,0x3c00,0x38001c0f,0xe003c,0x3c0,0xe0000e,0x701e00e,
  3520. 0x3c0780,0x1e003c0,0x780000,0xfc00001f,0x80000000,0x60e1e780,0x78700f07,0x4380f0,0x38000700,0xf00e38,0x3801c00,0xc0781c07,
  3521. 0x81c000e0,0x38e07e0,0xe03c1c00,0x380f0e0,0x1e0003c0,0xe00780f,0xee00f0,0x780e0780,0x1c007800,0xe00001,0xc000e000,0x0,0x700,
  3522. 0xf0780e07,0x8041c078,0x38020038,0xe03c1c,0x7001c00,0x1c00707,0x801c0070,0xe1c701c0,0xe0381e03,0x8380f00e,0x80380,0x1c003c1e,
  3523. 0x7e00f8,0xf80f1e00,0x3f003c00,0x70000e,0x1c000,0x0,0xf0100f7,0x80078000,0x700078f0,0x10,0x7ff000,0x61208,0x1e0700,0x383800f,
  3524. 0x78078000,0x3de007bc,0x0,0x0,0x0,0x0,0x0,0x401c,0x70e0f,0xf7803,0xc0000700,0x1c,0x38c001,0xc000efb8,0x1c00038,0x1e000,0x3c1e0,
  3525. 0xc1,0x80000000,0x783c0,0x0,0x0,0x0,0x3c1e,0x18c000,0x0,0x0,0xc180003,0x60000300,0xd80e010,0x3c03c780,0x78f00f1e,0x1e3c03c,
  3526. 0x70039c0e,0x70041c,0x38000,0x70000e00,0xe0001,0xc0003800,0x700380f,0x703f070,0x1e0e03c1,0xc078380f,0x701e0e0,0x381c0787,
  3527. 0x80f0f01e,0x1e03c3c0,0x7801c007,0xe00e,0x38078700,0xf0e01e1c,0x3c38078,0x700f1c1c,0x78041c,0x1038020,0x70040e00,0x800e0001,
  3528. 0xc0003800,0x7001c07,0x380e070,0x1c0e0381,0xc070380e,0x701c007,0x801e0703,0xc1e0783c,0xf0781e0,0xf003f007,0x80e00fc0,0x0,
  3529. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c,0xe,0x1801867c,0xc0cf83,0xe0000000,0xe0000e00,
  3530. 0x70,0xf0000,0x3c00,0x38000f1e,0xe0070,0x180780,0xe0603e,0x783c01e,0x1e0f01,0x7c003c0,0x780000,0x3c00001e,0x700,0x307fe700,
  3531. 0x38701e07,0xc1c383e0,0x38000700,0x7c1e38,0x3801c00,0xe0f01c03,0x81c000e0,0x38e03e0,0x78781c00,0x1e1e0e0,0xe180780,0xe003c1e,
  3532. 0x7c00f0,0x781e03c0,0x1c007000,0xe00001,0xc000e000,0x0,0x783,0xf07c1e07,0xc0c1e0f8,0x3e0e0038,0xf07c1c,0x7001c00,0x1c00703,
  3533. 0xc01e0070,0xe1c701c0,0xf0781f07,0x83c1f00e,0xe0f80,0x1e003c3e,0x7e00f8,0xf80e0e00,0x3f003800,0x70000e,0x1c000,0x0,0x7830077,
  3534. 0xf0000,0x700078f0,0x10,0x20000,0x41208,0xc03c0380,0x3c38007,0x70070000,0x1dc003b8,0x0,0x0,0x0,0x0,0x0,0x707c,0x6070f,0x86077003,
  3535. 0x80000700,0x1c,0x3ec401,0xc001c01c,0x1c00038,0xf000,0x1ffc0,0x40,0x80000000,0x3ff80,0x0,0x0,0x0,0x3e3e,0x18c000,0x0,0x0,
  3536. 0x8100006,0x60000300,0x1980f070,0x3801c700,0x38e0071c,0xe3801c,0x70039c0e,0x7c1c1c,0x38000,0x70000e00,0xe0001,0xc0003800,
  3537. 0x700383e,0x701f03c,0x3c078780,0xf0f01e1e,0x3c3c1c0,0x1c3f0f03,0xc1e0783c,0xf0781e0,0xf001c007,0xe81e,0x3c1f8783,0xf0f07e1e,
  3538. 0xfc3c1f8,0x783f1e3e,0x187c0c1f,0x703e0e0,0x7c1c0f83,0x800e0001,0xc0003800,0x7001e0f,0x380e078,0x3c0f0781,0xe0f03c1e,0x783c007,
  3539. 0x801e0f03,0xc3e0787c,0xf0f81e1,0xf003f007,0xc1e00fc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3540. 0x0,0x0,0x1c,0xe,0x3801fff8,0x6187ff,0xe0000000,0xe0000e00,0x70,0xf0000,0x3c00,0x38000ffe,0x1fff0ff,0xfe1fff80,0xe07ffc,0x3ffc01c,
  3541. 0x1fff01,0xff8003c0,0x780000,0x4000010,0x700,0x301e6700,0x387ffe03,0xffc3ffc0,0x3fff0700,0x3ffe38,0x383ffe0,0xfff01c03,0xc1fff8e0,
  3542. 0x38e03e0,0x7ff81c00,0x1ffe0e0,0xf1fff80,0xe003ffe,0x7c00f0,0x781c01c0,0x1c00ffff,0xe00001,0xc000e000,0x0,0x3ff,0x707ffc03,
  3543. 0xffc0fff8,0x1ffe0038,0x7ffc1c,0x707fff0,0x1c00701,0xc00ff070,0xe1c701c0,0x7ff01fff,0x1fff00e,0xfff00,0xff81fee,0x7e00f0,
  3544. 0x781e0f00,0x1e007ffc,0x70000e,0x1c000,0x0,0x3ff003e,0xf0000,0xe00070e0,0x60830010,0x20000,0x41208,0xfffc01c0,0x1fffe03,0xe00ffff0,
  3545. 0xf8001f0,0x0,0x0,0x0,0x0,0x0,0x7ff8,0xc07fd,0xfe03e007,0xffc00700,0x1c,0x1ffc1f,0xffc08008,0x1c00038,0x7000,0x7f00,0x0,0x0,
  3546. 0xfe00,0x0,0xffff800,0x0,0x3ff7,0x8018c000,0x0,0x0,0x6,0x60000700,0x19807ff0,0x3801c700,0x38e0071c,0xe3801c,0x70039c0f,0xf03ffc1f,
  3547. 0xff83fff0,0x7ffe0fff,0xc1fff03f,0xfe07ffc0,0xfff83ffc,0x701f03f,0xfc07ff80,0xfff01ffe,0x3ffc080,0x83fff03,0xffe07ffc,0xfff81ff,
  3548. 0xf001c007,0xeffc,0x1ffb83ff,0x707fee0f,0xfdc1ffb8,0x3ff70ff7,0xf83ffc0f,0xff01ffe0,0x3ffc07ff,0x83fff87f,0xff0fffe1,0xfffc0ffe,
  3549. 0x380e03f,0xf807ff00,0xffe01ffc,0x3ff8007,0x803ffe01,0xfee03fdc,0x7fb80ff,0x7001e007,0xffc00780,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3550. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c,0xc,0x3801fff0,0x7f83fe,0x70000000,0xe0000e00,0x0,0xf0000,0x3c00,0x700007fc,
  3551. 0x1fff0ff,0xfe1ffe00,0xe07ff8,0x1ff801c,0xffe01,0xff0003c0,0x780000,0x0,0x700,0x38000f00,0x3c7ffc01,0xff83ff80,0x3fff0700,
  3552. 0x1ffc38,0x383ffe0,0x7fe01c01,0xe1fff8e0,0x38e03e0,0x3ff01c00,0xffc0e0,0x71fff00,0xe001ffc,0x7c00f0,0x783c01e0,0x1c00ffff,
  3553. 0xe00000,0xe000e000,0x0,0x1ff,0x7077f801,0xff807fb8,0xffc0038,0x3fdc1c,0x707fff0,0x1c00701,0xe007f070,0xe1c701c0,0x3fe01dfe,
  3554. 0xff700e,0x7fe00,0xff80fee,0x3c0070,0x703c0780,0x1e007ffc,0x70000e,0x1c000,0x0,0x1fe001c,0xe0000,0xe000e1c0,0x71c78010,0x20000,
  3555. 0x21318,0xfff800c0,0xfffe01,0xc00ffff0,0x70000e0,0x0,0x0,0x0,0x0,0x0,0x3ff0,0x1803fd,0xfe01c007,0xffc00700,0x1c,0xffc1f,0xffc00000,
  3556. 0x1c00038,0x7000,0x0,0x0,0x0,0x0,0x0,0xffff800,0x0,0x3ff7,0x8018c000,0x0,0x0,0xc,0x60000e00,0x31803fe0,0x7801ef00,0x3de007bc,
  3557. 0xf7801e,0xf003fc0f,0xf01ff81f,0xff83fff0,0x7ffe0fff,0xc1fff03f,0xfe07ffc0,0xfff83ff8,0x701f01f,0xf803ff00,0x7fe00ffc,0x1ff8000,
  3558. 0x67fe01,0xffc03ff8,0x7ff00ff,0xe001c007,0xeff8,0xffb81ff,0x703fee07,0xfdc0ffb8,0x1ff70ff7,0xf81ff807,0xfe00ffc0,0x1ff803ff,
  3559. 0x3fff87f,0xff0fffe1,0xfffc07fc,0x380e01f,0xf003fe00,0x7fc00ff8,0x1ff0000,0x37fc00,0xfee01fdc,0x3fb807f,0x7001e007,0x7f800780,
  3560. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c,0xc,0x30007fc0,0x1e00f8,0x78000000,0x70001c00,
  3561. 0x0,0xe0000,0x3c00,0x700001f0,0x1fff0ff,0xfe07f800,0xe01fe0,0x7e0038,0x3f800,0xfc0003c0,0x700000,0x0,0x700,0x18000e00,0x1c7ff000,
  3562. 0x7e03fe00,0x3fff0700,0x7f038,0x383ffe0,0x1f801c00,0xf1fff8e0,0x38e01e0,0xfc01c00,0x3f80e0,0x787fc00,0xe0007f0,0x7c00f0,0x387800f0,
  3563. 0x1c00ffff,0xe00000,0xe000e000,0x0,0xfc,0x7071f000,0x3f003e38,0x3f00038,0x1f1c1c,0x707fff0,0x1c00700,0xf003f070,0xe1c701c0,
  3564. 0x1f801c7c,0x7c700e,0x1f800,0x3f8078e,0x3c0070,0x707803c0,0x1c007ffc,0x70000e,0x1c000,0x0,0x7c0008,0x1e0000,0xe000e1c0,0x71c30010,
  3565. 0x20000,0x1e1f0,0x3fe00020,0x3ffe00,0x800ffff0,0x2000040,0x0,0x0,0x0,0x0,0x0,0xfc0,0x3001f0,0x78008007,0xffc00700,0x1c,0x3f81f,
  3566. 0xffc00000,0x1c00038,0x407000,0x0,0x0,0x0,0x0,0x0,0xffff800,0x0,0x39c7,0x18c000,0x0,0x0,0x18,0x60001c00,0x61801f80,0x7000ee00,
  3567. 0x1dc003b8,0x77000e,0xe001f80f,0xf007e01f,0xff83fff0,0x7ffe0fff,0xc1fff03f,0xfe07ffc0,0xfff83fc0,0x700f007,0xe000fc00,0x1f8003f0,
  3568. 0x7e0000,0xe1f800,0x7f000fe0,0x1fc003f,0x8001c007,0xe7f0,0x7e380fc,0x701f8e03,0xf1c07e38,0xfc703c1,0xe003f001,0xf8003f00,
  3569. 0x7e000fc,0x3fff87f,0xff0fffe1,0xfffc03f8,0x380e00f,0xc001f800,0x3f0007e0,0xfc0000,0x61f800,0x78e00f1c,0x1e3803c,0x7001c007,
  3570. 0x1f000700,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x600,0x0,0x0,0x70001c00,0x0,
  3571. 0x1c0000,0x0,0xe0000000,0x0,0x0,0x0,0x0,0x0,0x0,0xe00000,0x0,0x0,0xc000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c000,0x0,
  3572. 0x0,0x0,0x0,0x0,0xe00000,0x7000e000,0x0,0x0,0x0,0x0,0x0,0x1c00,0x0,0x1c00000,0x0,0x0,0x1c00,0x7000,0x0,0x0,0x0,0x0,0x1c000000,
  3573. 0x70000e,0x1c000,0x0,0x0,0x1c0000,0xe000c180,0x10,0x20000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc000,
  3574. 0x0,0x38,0x70e000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3800,0x18c000,0x2000,0x0,0x1f,0xf8003800,0x7fe00000,0x0,0x0,0x0,0x0,0x4000,
  3575. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x400000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x400000,
  3576. 0x0,0x0,0x1c007,0x700,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x600,0x0,0x0,0x30001800,
  3577. 0x0,0x1c0000,0x0,0xe0000000,0x0,0x0,0x0,0x0,0x0,0x0,0xe00000,0x0,0x0,0xe000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1e000,
  3578. 0x0,0x0,0x0,0x0,0x0,0xe00000,0x7000e000,0x0,0x0,0x0,0x0,0x0,0x1c00,0x0,0x1c00000,0x0,0x0,0x1c00,0x7000,0x0,0x0,0x0,0x0,0x1c000000,
  3579. 0x70000e,0x1c000,0x0,0x0,0x1c0001,0xe001c380,0x10,0x20000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc000,
  3580. 0x0,0x38,0x7fe000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3800,0x18c000,0x3000,0x0,0x1f,0xf8007000,0x7fe00000,0x0,0x0,0x0,0x0,0x6000,
  3581. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3582. 0x0,0x1c007,0x700,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x600,0x0,0x0,0x38003800,
  3583. 0x0,0x380000,0x1,0xc0000000,0x0,0x0,0x0,0x0,0x0,0x0,0x1c00000,0x0,0x0,0x3c18000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf000,
  3584. 0x0,0x0,0x0,0x0,0x0,0xfe0000,0x380fe000,0x0,0x0,0x0,0x0,0x0,0x3800,0x0,0x1c00000,0x0,0x0,0x1c00,0x7000,0x0,0x0,0x0,0x0,0x38000000,
  3585. 0x78000e,0x3c000,0x0,0x0,0x180001,0xc0018300,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc000,0x0,
  3586. 0x38,0x1f8000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3800,0x18c000,0x1800,0x0,0x0,0x6000e000,0x1800000,0x0,0x0,0x0,0x0,0x3000,0x0,
  3587. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3588. 0x38007,0xe00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x600,0x0,0x0,0x18003000,
  3589. 0x0,0x300000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1800000,0x0,0x0,0x1ff8000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4000,0x0,0x0,
  3590. 0x0,0x0,0x0,0xfe0000,0xfe000,0x0,0x0,0x0,0x0,0x0,0x607800,0x0,0x3c00000,0x0,0x0,0x1c00,0x7000,0x0,0x0,0x0,0x0,0x78000000,
  3591. 0x3f800e,0x3f8000,0x0,0x0,0x300043,0xc0018200,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc000,
  3592. 0x0,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3800,0x0,0x11800,0x0,0x0,0x6001ff00,0x1800000,0x0,0x0,0x0,0x0,0x23000,0x0,0x0,
  3593. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x23000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x78007,
  3594. 0x1e00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x600,0x0,0x0,0x1c007000,0x0,0x0,
  3595. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7f8000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfe0000,
  3596. 0xfe000,0x0,0x0,0x0,0x0,0x0,0x7ff000,0x0,0x7f800000,0x0,0x0,0x1c00,0x7000,0x0,0x0,0x0,0x3,0xf8000000,0x3f800e,0x3f8000,0x0,
  3597. 0x0,0x10007f,0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc000,0x0,0x38,0x0,0x0,0x0,0x0,
  3598. 0x0,0x0,0x0,0x0,0x3800,0x0,0x1f800,0x0,0x0,0x6001ff00,0x1800000,0x0,0x0,0x0,0x0,0x3f000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3599. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3f000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3f8007,0xfe00,0x0,0x0,0x0,0x0,
  3600. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3601. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7fff8,0x0,0x0,0x0,0x0,0x7fe000,0x0,
  3602. 0x7f000000,0x0,0x0,0x1c00,0x7000,0x0,0x0,0x0,0x3,0xf0000000,0xf800e,0x3e0000,0x0,0x0,0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3603. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3800,0x0,0x1f000,0x0,0x0,0x0,0x0,0x0,
  3604. 0x0,0x0,0x0,0x3e000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3e000,0x0,0x0,0x0,0x0,0x0,0x0,
  3605. 0x0,0x0,0x0,0x0,0x0,0x0,0x3f0007,0xfc00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3606. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3607. 0x0,0x0,0x0,0x0,0x7fff8,0x0,0x0,0x0,0x0,0x1fc000,0x0,0x7e000000,0x0,0x0,0x1c00,0x7000,0x0,0x0,0x0,0x3,0xc0000000,0xe,0x0,
  3608. 0x0,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3609. 0x0,0x0,0x3800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3610. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c0007,0xf000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3611. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3612. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7fff8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3613. 0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3614. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3615. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 };
  3616. // Definition of a 29x57 font.
  3617. const unsigned int font29x57[29*57*256/32] = {
  3618. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3619. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3620. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3621. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3622. 0x0,0x781e00,0x0,0x0,0x7,0x81e00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3623. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7c0000,0xf8000,0x7e00000,0x0,0x7,
  3624. 0xc0000000,0x0,0x7c00,0xf80,0x7e000,0x0,0x7c00000,0xf80000,0x7e000000,0x0,0x0,0x1f00,0x3e0,0x1f800,0x0,0x0,0x0,0x3,0xe0000000,
  3625. 0x7c00003f,0x0,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3626. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3627. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3628. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3629. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3630. 0x0,0x0,0x0,0x0,0x0,0x0,0x3c3c00,0x0,0x0,0x3,0xc3c00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3e1f00,
  3631. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3e0000,
  3632. 0x1f0000,0x7e00000,0xf838001f,0xf80001f,0xf0000000,0x0,0x3e00,0x1f00,0x7e000,0x3e1f000,0x3e00000,0x1f00000,0x7e00003e,0x1f000000,
  3633. 0x3e0,0xe0000f80,0x7c0,0x1f800,0x3e0e00,0x7c3e000,0x0,0x1,0xf0000000,0xf800003f,0x1f0f,0x800001f0,0x0,0x0,0x0,0x0,0x0,0x0,
  3634. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3635. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3636. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3637. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3638. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1e7800,0x0,0x0,
  3639. 0x1,0xe7800000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3e1f00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3640. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1e0000,0x1e0000,0xff00001,0xfe38001f,0xf80003f,
  3641. 0xf8000000,0x0,0x1e00,0x1e00,0xff000,0x3e1f000,0x1e00000,0x1e00000,0xff00003e,0x1f000000,0x7f8,0xe0000780,0x780,0x3fc00,0x7f8e00,
  3642. 0x7c3e000,0x0,0x0,0xf0000000,0xf000007f,0x80001f0f,0x800001e0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3643. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3644. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3645. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3646. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3647. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xef000,0x0,0x0,0x0,0xef000000,0x0,0x0,0x0,0x0,0x0,0x0,
  3648. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3e1f00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3649. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0000,0x3c0000,0x1e780003,0xfff8001f,0xf80003c,0x78000000,0x0,0xf00,0x3c00,0x1e7800,
  3650. 0x3e1f000,0xf00000,0x3c00001,0xe780003e,0x1f000000,0xfff,0xe00003c0,0xf00,0x79e00,0xfffe00,0x7c3e000,0x0,0x0,0x78000001,0xe00000f3,
  3651. 0xc0001f0f,0x800003c0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0xc0000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3652. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3653. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3654. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3655. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3656. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7e000,0x0,0x0,0x0,0x7e000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3657. 0x3e1f00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3658. 0x0,0x78000,0x780000,0x3c3c0003,0x8ff0001f,0xf800078,0x3c000000,0x0,0x780,0x7800,0x3c3c00,0x3e1f000,0x780000,0x7800003,0xc3c0003e,
  3659. 0x1f000000,0xe3f,0xc00001e0,0x1e00,0xf0f00,0xe3fc00,0x7c3e000,0x0,0x0,0x3c000003,0xc00001e1,0xe0001f0f,0x80000780,0x0,0x0,
  3660. 0x0,0x0,0x0,0x0,0x1f,0xf0000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3661. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3662. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3663. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3664. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3665. 0x0,0x7e000,0x0,0x0,0x0,0x7e000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3e1f00,0x0,0x0,0x0,0x0,0x0,0x0,
  3666. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfc00,0x7e000,0xfe000,0x0,0x3c000,0xf00000,0x781e0003,
  3667. 0x83e0001f,0xf800070,0x1c000000,0x0,0x3c0,0xf000,0x781e00,0x3e1f000,0x3c0000,0xf000007,0x81e0003e,0x1f000000,0xe0f,0x800000f0,
  3668. 0x3c00,0x1e0780,0xe0f800,0x7c3e000,0x0,0x0,0x1e000007,0x800003c0,0xf0001f0f,0x80000f00,0x0,0x0,0x0,0x0,0x0,0x0,0x3f,0xf8000000,
  3669. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3670. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3671. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3672. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3673. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3674. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3675. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3fc00,0x1fe000,0x3ff800,0x0,0x0,0x0,0x0,0x0,0x70,0x1c000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3676. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c,0x78000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3677. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3678. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3679. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3680. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1f00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3681. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3682. 0x0,0x0,0x78,0xf000000,0x0,0x0,0x780f0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7c0,
  3683. 0x0,0x0,0x0,0x0,0x0,0x0,0x3fc00,0x1fe000,0x3ffc00,0x0,0x0,0x0,0x0,0x0,0x70,0x1c000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3684. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1f00000,0x3e000,0x3e00000,0x0,0x78,0x3c000000,0x0,0x1f000,0x3e0,
  3685. 0x3e000,0x0,0x1f000000,0x3e0000,0x3e000000,0x0,0x0,0x7c00,0xf8,0xf800,0x0,0x0,0x0,0xf,0x80000000,0x1f00001f,0x0,0x3e,0x0,
  3686. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3687. 0x0,0x0,0x0,0x30000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3688. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf80000,
  3689. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3690. 0x0,0x0,0x0,0x0,0xf80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x781c0000,0x38,0xe000000,0x0,0x0,0x380e0,0x0,
  3691. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf80,0x0,0x0,0x0,0x0,0x0,0x0,0x39c00,0x1ce000,0x303e00,
  3692. 0x0,0x0,0x0,0x0,0x0,0x78,0x3c000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4000,0x0,0x0,0x0,0x0,
  3693. 0x0,0x0,0xf80000,0x7c000,0x3e00000,0xf0380000,0x70,0x1c000000,0x0,0xf800,0x7c0,0x3e000,0x0,0xf800000,0x7c0000,0x3e000000,
  3694. 0x0,0x3c0,0xe0003e00,0x1f0,0xf800,0x3c0e00,0x0,0x0,0x7,0xc0000000,0x3e00001f,0x0,0x7c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3695. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30000000,0xff,0x0,
  3696. 0xf8,0xf8000,0x1c000,0x0,0x0,0x0,0x0,0x1f,0xc0000000,0x1ff8,0xff00,0x0,0x0,0x3fe000,0x0,0x1fc00001,0xfe000000,0x0,0x0,0x0,
  3697. 0x0,0x7f800,0x0,0x0,0x0,0xff00000,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0xf8000000,0xfe,0x0,0x7f80,0x0,0x0,0x0,0x0,0x0,
  3698. 0x0,0x3f,0xf0000000,0x7fe0,0x0,0x0,0x780000,0x1,0xe0000000,0x0,0x780000,0x3,0xfe000000,0x78000,0x3c00,0xf000,0x7800003,0xffe00000,
  3699. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfc0000f0,0x3f000,0x0,0x0,0x3fc00,0x0,0x0,0x1fc000,0x0,0x0,0x0,0x1fc0,
  3700. 0x0,0xff000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfe1c0000,0x1c,0x1c000000,0x0,0x0,0x1c1c0,0x0,0x0,0x0,0x0,0x1fe0000,
  3701. 0x0,0x0,0x1ff,0x1f0f8,0x0,0xff000,0x0,0x0,0x0,0x3f,0xff00000f,0x80000000,0xfe0,0x3f80,0xf00,0x0,0x0,0x0,0x1,0xf8000003,0xe0000000,
  3702. 0x1c00,0xe000,0xe00,0x0,0x0,0x0,0x0,0x0,0x3c,0x78000000,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7f0,0x3f80,0x1fc00,0xfe000,
  3703. 0x7f0000,0x0,0x1fc07000,0x0,0x0,0x0,0x0,0x0,0x3f800,0x780000,0x78000,0x7f00001,0xfc38001f,0xf800070,0x1c000000,0x0,0x7800,
  3704. 0x780,0x7f000,0x3e1f000,0x7800000,0x780000,0x7f00003e,0x1f0003f0,0x7f0,0xe0001e00,0x1e0,0x1fc00,0x7f0e00,0x7c3e000,0x0,0x3,
  3705. 0xc0000000,0x3c00003f,0x80001f0f,0x80000078,0x1e0000,0x3e1f00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3706. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x780000,0x3c1e0000,0x1e078000,0x30000000,0x3ff,0xc00001e0,0xf0,
  3707. 0x78000,0x1c000,0x0,0x0,0x0,0x0,0x1e0007f,0xf000007e,0x1ffff,0x7ffe0,0x1f80,0x3ffff80,0xfff803,0xfffff800,0xfff80007,0xff800000,
  3708. 0x0,0x0,0x0,0x0,0x1ffe00,0x0,0xfe0003,0xfff80000,0x3ffe01ff,0xe00003ff,0xffe01fff,0xff0003ff,0xe01e0007,0x803ffff0,0xfff80,
  3709. 0x3c000fc0,0x7800001f,0x8003f07e,0x1e000f,0xfe0007ff,0xf00003ff,0x8007ffe0,0x1fff8,0x7fffffe,0xf0003c1,0xe000079e,0xf1f,0x1f3e0,
  3710. 0x1f01ff,0xfff8003f,0xf003c000,0x7fe0,0x3f00,0x0,0x3c0000,0x1,0xe0000000,0x0,0x780000,0xf,0xfe000000,0x78000,0x3c00,0xf000,
  3711. 0x7800003,0xffe00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0xfc0000f0,0x3fe00,0x0,0x0,0xfff00,0x0,0x0,0x3fe000,
  3712. 0x0,0x0,0x0,0x1dc0,0x0,0x3fff00,0x0,0x3ffff80,0x1f,0xffff8000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff1c07ff,0x3c0f001e,0x3c000000,
  3713. 0x0,0x0,0x1e3c0,0xf80007c,0x0,0x780000,0x0,0xfff8000,0x3e00,0x1f00000,0x7ff,0xc001f0f8,0x0,0x3ffc00,0x0,0x0,0x0,0x3f,0xff00003f,
  3714. 0xe0000000,0x3ff8,0xffe0,0x1e00,0x0,0xfffc00,0x0,0x7,0xf800000f,0xf8000000,0x1c00,0xe000,0xe00,0xf000,0x1fc000,0xfe0000,0x7f00000,
  3715. 0x3f800001,0xfc00003f,0xf80000ff,0xffc003ff,0xe007ffff,0xc03ffffe,0x1fffff0,0xfffff80,0x7fffe003,0xffff001f,0xfff800ff,0xffc01ffc,
  3716. 0xfc00,0x3c001ffc,0xffe0,0x7ff00,0x3ff800,0x1ffc000,0x0,0x7ff8f0f0,0x3c0780,0x1e03c00,0xf01e000,0x783e0001,0xf01e0000,0xffe00,
  3717. 0x3c0000,0xf0000,0x7700001,0xfe38001f,0xf800070,0x1c000000,0x0,0x3c00,0xf00,0x77000,0x3e1f000,0x3c00000,0xf00000,0x7700003e,
  3718. 0x1f0000f8,0xc0007f8,0xe0000f00,0x3c0,0x1dc00,0x7f8e00,0x7c3e000,0x0,0x1,0xe0000000,0x7800003b,0x80001f0f,0x800000f0,0x1e0000,
  3719. 0x3e1f00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3720. 0x0,0x0,0x780000,0x3c1e0000,0x1e070000,0x300001f0,0x7ff,0xc00001e0,0x1e0,0x7c000,0x1c000,0x0,0x0,0x0,0x0,0x3c000ff,0xf80007fe,
  3721. 0x3ffff,0x801ffff8,0x1f80,0x3ffff80,0x3fff803,0xfffff801,0xfffc000f,0xffc00000,0x0,0x0,0x0,0x0,0x7fff80,0x0,0xfe0003,0xffff0000,
  3722. 0xffff01ff,0xfc0003ff,0xffe01fff,0xff000fff,0xf01e0007,0x803ffff0,0xfff80,0x3c001f80,0x7800001f,0xc007f07e,0x1e001f,0xff0007ff,
  3723. 0xfc0007ff,0xc007fffc,0x3fffc,0x7fffffe,0xf0003c1,0xf0000f9e,0xf0f,0x8003e1e0,0x1e01ff,0xfff8003f,0xf001e000,0x7fe0,0x3f00,
  3724. 0x0,0x1e0000,0x1,0xe0000000,0x0,0x780000,0x1f,0xfe000000,0x78000,0x3c00,0xf000,0x7800003,0xffe00000,0x0,0x0,0x0,0x0,0x0,0x0,
  3725. 0x0,0x0,0x0,0x0,0x0,0x0,0xf,0xfc0000f0,0x3ff00,0x0,0x0,0x1fff80,0x0,0x0,0xffe000,0x0,0x0,0x0,0x3de0,0x0,0x7fff80,0x0,0xfffff80,
  3726. 0x1f,0xffff8000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xe7bc07ff,0x3e1f000f,0x78000000,0x0,0x0,0xf780,0x7800078,0x0,0x780000,0x180000,
  3727. 0x1fff8000,0x1e00,0x1e0003c,0xfff,0xc001f0f8,0x0,0x7ffe00,0x0,0x0,0x0,0x3f,0xff00007f,0xf0000000,0x3ffc,0xfff0,0x3c00,0x0,
  3728. 0x7fffc00,0x0,0x7,0xf800003f,0xfe000000,0x1c00,0xe000,0xe00,0xf000,0x1fc000,0xfe0000,0x7f00000,0x3f800001,0xfc00001f,0xe00001ff,
  3729. 0xffc00fff,0xf007ffff,0xc03ffffe,0x1fffff0,0xfffff80,0x7fffe003,0xffff001f,0xfff800ff,0xffc01fff,0xc000fc00,0x3c003ffe,0x1fff0,
  3730. 0xfff80,0x7ffc00,0x3ffe000,0x0,0xfffce0f0,0x3c0780,0x1e03c00,0xf01e000,0x781e0001,0xe01e0000,0x3fff00,0x1e0000,0x1e0000,0xf780003,
  3731. 0xcf78001f,0xf800078,0x3c000000,0x0,0x1e00,0x1e00,0xf7800,0x3e1f000,0x1e00000,0x1e00000,0xf780003e,0x1f0000fc,0x7c000f3d,
  3732. 0xe0000780,0x780,0x3de00,0xf3de00,0x7c3e000,0x0,0x0,0xf0000000,0xf000007b,0xc0001f0f,0x800001e0,0x1e0000,0x3e1f00,0x0,0x0,
  3733. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x780000,
  3734. 0x3c1e0000,0x1e0f0000,0x300007fc,0xfff,0xc00001e0,0x1e0,0x3c000,0x1c000,0x0,0x0,0x0,0x0,0x3c001ff,0xfc001ffe,0x3ffff,0xc01ffffc,
  3735. 0x3f80,0x3ffff80,0x7fff803,0xfffff803,0xfffe001f,0xffe00000,0x0,0x0,0x0,0x0,0xffff80,0x7f800,0xfe0003,0xffff8001,0xffff01ff,
  3736. 0xff0003ff,0xffe01fff,0xff001fff,0xf01e0007,0x803ffff0,0xfff80,0x3c003f00,0x7800001f,0xc007f07f,0x1e003f,0xff8007ff,0xff000fff,
  3737. 0xe007ffff,0x7fffc,0x7fffffe,0xf0003c0,0xf0000f1e,0xf07,0x8003c1f0,0x3e01ff,0xfff8003f,0xf001e000,0x7fe0,0x7f80,0x0,0xe0000,
  3738. 0x1,0xe0000000,0x0,0x780000,0x1f,0xfe000000,0x78000,0x3c00,0xf000,0x7800003,0xffe00000,0x0,0x0,0x0,0x0,0x0,0x0,0x3c000,0x0,
  3739. 0x0,0x0,0x0,0x0,0xf,0xfc0000f0,0x3ff00,0x0,0x0,0x3fff80,0x0,0x0,0xffe000,0x0,0x0,0x0,0x78f0,0x0,0xffff80,0x0,0x3fffff80,0x1f,
  3740. 0xffff8000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xc7f80070,0x3e1f0007,0x70000000,0x0,0x0,0x7700,0x7c000f8,0x0,0x780000,0x180000,
  3741. 0x3fff8000,0x1f00,0x3e0003c,0x1f03,0xc001f0f8,0x0,0x703f00,0x0,0x0,0x0,0x3f,0xff0000f0,0xf8000000,0x303e,0xc0f8,0x7800,0x0,
  3742. 0xffffc00,0x0,0x7,0x3800003e,0x3e000000,0x1c00,0xe000,0x3c00,0xf000,0x1fc000,0xfe0000,0x7f00000,0x3f800001,0xfc00000f,0xe00001ff,
  3743. 0xffc01fff,0xf007ffff,0xc03ffffe,0x1fffff0,0xfffff80,0x7fffe003,0xffff001f,0xfff800ff,0xffc01fff,0xf000fe00,0x3c007fff,0x3fff8,
  3744. 0x1fffc0,0xfffe00,0x7fff000,0x1,0xffffc0f0,0x3c0780,0x1e03c00,0xf01e000,0x781f0003,0xe01e0000,0x3fff80,0xe0000,0x3c0000,0x1e3c0003,
  3745. 0x8ff0001f,0xf80003c,0x78000000,0x0,0xe00,0x3c00,0x1e3c00,0x3e1f000,0xe00000,0x3c00001,0xe3c0003e,0x1f00007f,0xf8000e3f,0xc0000380,
  3746. 0xf00,0x78f00,0xe3fc00,0x7c3e000,0x0,0x0,0x70000001,0xe00000f1,0xe0001f0f,0x800003c0,0x1e0000,0x3e1f00,0x0,0x0,0x0,0x0,0x0,
  3747. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x780000,0x3c1e0000,0x3c0f0000,
  3748. 0x30000ffe,0xf80,0xc00001e0,0x3c0,0x1e000,0x101c040,0x0,0x0,0x0,0x0,0x78003f0,0x7e001ffe,0x3f807,0xe01f00fe,0x3f80,0x3ffff80,
  3749. 0x7e01803,0xfffff007,0xe03f003f,0x3f00000,0x0,0x0,0x0,0x0,0xfc0fc0,0x3ffe00,0xfe0003,0xffffc003,0xf81f01ff,0xff8003ff,0xffe01fff,
  3750. 0xff003f01,0xf01e0007,0x803ffff0,0xfff80,0x3c007e00,0x7800001f,0xc007f07f,0x1e007e,0xfc007ff,0xff801f83,0xf007ffff,0x800fc07c,
  3751. 0x7fffffe,0xf0003c0,0xf0000f0f,0x1e07,0xc007c0f8,0x7c01ff,0xfff8003c,0xf000,0x1e0,0xffc0,0x0,0xf0000,0x1,0xe0000000,0x0,0x780000,
  3752. 0x3e,0x0,0x78000,0x3c00,0xf000,0x7800000,0x1e00000,0x0,0x0,0x0,0x0,0x0,0x0,0x3c000,0x0,0x0,0x0,0x0,0x0,0x1f,0x800000f0,0x1f80,
  3753. 0x0,0x0,0x7e0780,0x0,0x0,0x1f82000,0x0,0x0,0x0,0x7070,0x0,0x1f80f80,0x0,0x7fffff80,0x1f,0xffff8000,0x0,0x0,0x0,0x0,0x0,0x0,
  3754. 0x0,0x1,0xc3f80070,0x3f3f0007,0xf0000000,0x0,0x0,0x7f00,0x3e001f0,0x0,0x780000,0x180000,0x7f018000,0xf80,0x7c0003c,0x3e00,
  3755. 0x4001f0f8,0xfe00,0x400f00,0x0,0x0,0x0,0x7f000000,0xe0,0x38000000,0x1e,0x38,0x7800,0x0,0x1ffe1c00,0x0,0x0,0x38000078,0xf000000,
  3756. 0x1c00,0xe000,0x7f800,0xf000,0x1fc000,0xfe0000,0x7f00000,0x3f800001,0xfc00001f,0xf00001ff,0xffc03f81,0xf007ffff,0xc03ffffe,
  3757. 0x1fffff0,0xfffff80,0x7fffe003,0xffff001f,0xfff800ff,0xffc01fff,0xf800fe00,0x3c00fc1f,0x8007e0fc,0x3f07e0,0x1f83f00,0xfc1f800,
  3758. 0x3,0xf07fc0f0,0x3c0780,0x1e03c00,0xf01e000,0x780f8007,0xc01e0000,0x7e0fc0,0xf0000,0x3c0000,0x1c1c0003,0x87f0001f,0xf80003f,
  3759. 0xf8000000,0x0,0xf00,0x3c00,0x1c1c00,0x3e1f000,0xf00000,0x3c00001,0xc1c0003e,0x1f00003f,0xc0000e1f,0xc00003c0,0xf00,0x70700,
  3760. 0xe1fc00,0x7c3e000,0x0,0x0,0x78000001,0xe00000e0,0xe0001f0f,0x800003c0,0x1e0000,0x3e1f00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3761. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x780000,0x3c1e0000,0x3c0f0001,0xff801e0f,
  3762. 0x1f00,0x1e0,0x3c0,0x1e000,0x3c1c1e0,0x0,0x0,0x0,0x0,0x78007c0,0x1f001f9e,0x3c001,0xf010003e,0x7780,0x3c00000,0xf800000,0xf007,
  3763. 0xc01f007c,0x1f80000,0x0,0x0,0x0,0x0,0xe003e0,0x7fff00,0x1ef0003,0xc007e007,0xc00301e0,0x1fc003c0,0x1e00,0x7c00,0x301e0007,
  3764. 0x80007800,0x780,0x3c00fc00,0x7800001f,0xe00ff07f,0x1e00f8,0x3e00780,0x1fc03e00,0xf807801f,0xc01f001c,0xf000,0xf0003c0,0xf0000f0f,
  3765. 0x1e03,0xc00f8078,0x780000,0xf0003c,0xf000,0x1e0,0x1f3e0,0x0,0x78000,0x1,0xe0000000,0x0,0x780000,0x3c,0x0,0x78000,0x0,0x0,
  3766. 0x7800000,0x1e00000,0x0,0x0,0x0,0x0,0x0,0x0,0x3c000,0x0,0x0,0x0,0x0,0x0,0x1f,0xf0,0xf80,0x0,0x0,0xf80180,0x0,0x0,0x1e00000,
  3767. 0x0,0x0,0x0,0xe038,0x0,0x3e00380,0x0,0xfe0f0000,0x0,0xf0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xc0f00070,0x3b370003,0xe0000000,
  3768. 0x0,0x0,0x3e00,0x1e001e0,0x0,0x780000,0x180000,0x7c000000,0x780,0x780003c,0x3c00,0x0,0x7ffc0,0x780,0x0,0x0,0x3,0xffe00000,
  3769. 0x1c0,0x3c000000,0xe,0x38,0xf000,0x0,0x3ffe1c00,0x0,0x0,0x38000078,0xf000000,0x1c00,0xe000,0x7f000,0xf000,0x3de000,0x1ef0000,
  3770. 0xf780000,0x7bc00003,0xde00001e,0xf00003e7,0x80007c00,0x30078000,0x3c0000,0x1e00000,0xf000000,0xf00000,0x7800000,0x3c000001,
  3771. 0xe0001e03,0xfc00fe00,0x3c01f007,0xc00f803e,0x7c01f0,0x3e00f80,0x1f007c00,0x7,0xc01f80f0,0x3c0780,0x1e03c00,0xf01e000,0x78078007,
  3772. 0x801e0000,0x7803c0,0x78000,0x780000,0x380e0003,0x81e00000,0x1f,0xf0000000,0x0,0x780,0x7800,0x380e00,0x0,0x780000,0x7800003,
  3773. 0x80e00000,0x1ff,0x80000e07,0x800001e0,0x1e00,0xe0380,0xe07800,0x0,0x0,0x0,0x3c000003,0xc00001c0,0x70000000,0x780,0x1e0000,
  3774. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3775. 0x780000,0x3c1e0000,0x3c0e0007,0xfff01c07,0x1e00,0x1e0,0x780,0xf000,0x3e1c3e0,0x0,0x0,0x0,0x0,0xf0007c0,0x1f00181e,0x20000,
  3776. 0xf000001f,0xf780,0x3c00000,0x1f000000,0x1f00f,0x800f8078,0xf80000,0x0,0x0,0x0,0x0,0x8003e0,0x1fc0f80,0x1ef0003,0xc001e007,
  3777. 0x800101e0,0x7e003c0,0x1e00,0x7800,0x101e0007,0x80007800,0x780,0x3c00f800,0x7800001e,0xe00ef07f,0x801e00f0,0x1e00780,0x7c03c00,
  3778. 0x78078007,0xc01e0004,0xf000,0xf0003c0,0x78001e0f,0x1e03,0xe00f807c,0xf80000,0x1f0003c,0x7800,0x1e0,0x3e1f0,0x0,0x3c000,0x1,
  3779. 0xe0000000,0x0,0x780000,0x3c,0x0,0x78000,0x0,0x0,0x7800000,0x1e00000,0x0,0x0,0x0,0x0,0x0,0x0,0x3c000,0x0,0x0,0x0,0x0,0x0,
  3780. 0x1e,0xf0,0x780,0x0,0x0,0x1f00080,0x0,0x0,0x3c00000,0x0,0x0,0x0,0x1e03c,0x0,0x3c00080,0x0,0xf80f0000,0x0,0x1f0000,0x0,0x0,
  3781. 0x0,0x0,0x0,0x0,0x0,0x0,0x70,0x3bf70003,0xe0000000,0x0,0x0,0x3e00,0x1f003e0,0x0,0x780000,0x180000,0x78000000,0x7c0,0xf80003c,
  3782. 0x3c00,0x0,0x1f01f0,0x780,0x0,0x0,0xf,0x80f80000,0x1c0,0x1c000000,0xe,0x38,0x1e000,0x0,0x7ffe1c00,0x0,0x0,0x380000f0,0x7800000,
  3783. 0x1c00,0xe000,0x7fc00,0xf000,0x3de000,0x1ef0000,0xf780000,0x7bc00003,0xde00001e,0xf00003c7,0x80007800,0x10078000,0x3c0000,
  3784. 0x1e00000,0xf000000,0xf00000,0x7800000,0x3c000001,0xe0001e00,0x7e00ff00,0x3c01e003,0xc00f001e,0x7800f0,0x3c00780,0x1e003c00,
  3785. 0x7,0x800f00f0,0x3c0780,0x1e03c00,0xf01e000,0x7807c00f,0x801e0000,0xf803c0,0x3c000,0xf00000,0x780f0000,0x0,0x7,0xc0000000,
  3786. 0x0,0x3c0,0xf000,0x780f00,0x0,0x3c0000,0xf000007,0x80f00000,0x7ff,0xc0000000,0xf0,0x3c00,0x1e03c0,0x0,0x0,0x0,0x0,0x1e000007,
  3787. 0x800003c0,0x78000000,0xf00,0x1e0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3788. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x780000,0x3c1e0000,0x3c1e001f,0xfff03803,0x80001e00,0x1e0,0x780,0xf000,0xf9cf80,
  3789. 0x0,0x0,0x0,0x0,0xf000780,0xf00001e,0x0,0xf800000f,0xe780,0x3c00000,0x1e000000,0x1e00f,0x78078,0x7c0000,0x0,0x0,0x0,0x0,0x1e0,
  3790. 0x3f003c0,0x1ef0003,0xc000f00f,0x800001e0,0x1f003c0,0x1e00,0xf000,0x1e0007,0x80007800,0x780,0x3c01f000,0x7800001e,0xe00ef07f,
  3791. 0x801e01f0,0x1e00780,0x3c07c00,0x78078003,0xc03e0000,0xf000,0xf0003c0,0x78001e0f,0x1e01,0xf01f003c,0xf00000,0x3e0003c,0x7800,
  3792. 0x1e0,0x7c0f8,0x0,0x0,0x1,0xe0000000,0x0,0x780000,0x3c,0x0,0x78000,0x0,0x0,0x7800000,0x1e00000,0x0,0x0,0x0,0x0,0x0,0x0,0x3c000,
  3793. 0x0,0x0,0x0,0x0,0x0,0x1e,0xf0,0x780,0x0,0x0,0x1e00000,0x0,0x0,0x3c00000,0x0,0x8,0x40,0x0,0x7e0000,0x7c00000,0x1,0xf00f0000,
  3794. 0x0,0x3e0000,0x0,0x3f,0xfc0,0xfc3f0,0xfc3f0,0x0,0x0,0x0,0x70,0x39e70000,0x0,0x0,0x0,0x0,0xf003c0,0x0,0x0,0x180000,0xf8000000,
  3795. 0x3c0,0xf00003c,0x3c00,0x0,0x3c0078,0x7ff80,0x0,0x0,0x1e,0x3c0000,0x1c0,0x1c000000,0xe,0xf0,0x0,0x0,0x7ffe1c00,0x0,0x0,0x380000f0,
  3796. 0x7800000,0x1c00,0xe000,0x3c00,0x0,0x3de000,0x1ef0000,0xf780000,0x7bc00003,0xde00001e,0xf00003c7,0x8000f800,0x78000,0x3c0000,
  3797. 0x1e00000,0xf000000,0xf00000,0x7800000,0x3c000001,0xe0001e00,0x1f00ff00,0x3c03e003,0xc01f001e,0xf800f0,0x7c00780,0x3e003c00,
  3798. 0xf,0x800f80f0,0x3c0780,0x1e03c00,0xf01e000,0x7803c00f,0x1fffc0,0xf001e0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3799. 0x0,0x0,0x307,0xe0000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1e0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3800. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x780000,0x3c1e0000,0x781e003f,0xfff03803,
  3801. 0x80001e00,0x1e0,0xf80,0xf000,0x3dde00,0x0,0x0,0x0,0x0,0xf000f00,0x780001e,0x0,0x7800000f,0x1e780,0x3c00000,0x3e000000,0x3e00f,
  3802. 0x780f0,0x7c0000,0x0,0x0,0x0,0x0,0x1e0,0x7c001e0,0x3ef8003,0xc000f00f,0x1e0,0xf003c0,0x1e00,0xf000,0x1e0007,0x80007800,0x780,
  3803. 0x3c03e000,0x7800001e,0xf01ef07b,0xc01e01e0,0xf00780,0x3e07800,0x3c078003,0xe03c0000,0xf000,0xf0003c0,0x78001e0f,0x1e00,0xf01e003e,
  3804. 0x1f00000,0x3c0003c,0x7800,0x1e0,0x78078,0x0,0x0,0x1,0xe0000000,0x0,0x780000,0x3c,0x0,0x78000,0x0,0x0,0x7800000,0x1e00000,
  3805. 0x0,0x0,0x0,0x0,0x0,0x0,0x3c000,0x0,0x0,0x0,0x0,0x0,0x1e,0xf0,0x780,0x0,0x0,0x1e00000,0x0,0x0,0x3c00000,0x0,0x18,0xc0,0x0,
  3806. 0xe70000,0x7800000,0x1,0xe00f0000,0x0,0x3c0000,0x0,0x3f,0xfc0,0xfc1f0,0x1f83f0,0x0,0x0,0x0,0x70,0x39e70000,0x0,0x0,0x0,0x0,
  3807. 0xf807c0,0x0,0x0,0x180000,0xf0000000,0x3e0,0x1f00003c,0x3e00,0x0,0x70001c,0x3fff80,0x0,0x0,0x38,0xe0000,0x1c0,0x1c000078,
  3808. 0x1c,0x1fe0,0x0,0x0,0xfffe1c00,0x0,0x0,0x380000f0,0x7800000,0x1c00,0xe000,0xe00,0x0,0x7df000,0x3ef8000,0x1f7c0000,0xfbe00007,
  3809. 0xdf00003c,0x780003c7,0x8000f000,0x78000,0x3c0000,0x1e00000,0xf000000,0xf00000,0x7800000,0x3c000001,0xe0001e00,0xf00f780,
  3810. 0x3c03c001,0xe01e000f,0xf00078,0x78003c0,0x3c001e00,0xf,0xf80f0,0x3c0780,0x1e03c00,0xf01e000,0x7803e01f,0x1ffff8,0xf001e0,
  3811. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0xe0000000,0x0,0x0,0x0,0x0,0x0,0x0,0xc000,0x0,0x0,0x0,0x0,0x1e0000,
  3812. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3813. 0x780000,0x3c1e0000,0x781e003e,0x30703803,0x80001e00,0x1e0,0xf00,0x7800,0xff800,0x1e0000,0x0,0x0,0x0,0x1e000f00,0x780001e,
  3814. 0x0,0x7800000f,0x3c780,0x3c00000,0x3c000000,0x3c00f,0x780f0,0x3c0000,0x0,0x0,0x2000000,0x800000,0x1e0,0x78000e0,0x3c78003,
  3815. 0xc000f01e,0x1e0,0xf803c0,0x1e00,0x1e000,0x1e0007,0x80007800,0x780,0x3c07c000,0x7800001e,0x701cf07b,0xc01e01e0,0xf00780,0x1e07800,
  3816. 0x3c078001,0xe03c0000,0xf000,0xf0003c0,0x7c003e0f,0x1e00,0xf83e001e,0x1e00000,0x7c0003c,0x3c00,0x1e0,0xf807c,0x0,0x0,0x1fe0001,
  3817. 0xe1fc0000,0x7f00003,0xf8780007,0xf000003c,0x7f0,0x783f0,0x0,0x0,0x7800000,0x1e00000,0x3e0f8000,0xfc00007,0xf8000007,0xf00001fc,
  3818. 0xf,0xc0003fc0,0x3c000,0x0,0x0,0x0,0x0,0x0,0x1e,0xf0,0x780,0x0,0x0,0x3c00000,0x0,0x0,0x3c00000,0x0,0x18,0xc0,0x0,0x1818000,
  3819. 0x7800000,0x1,0xe00f0000,0x0,0x7c0000,0x0,0x1f,0x80001f80,0x7c1f8,0x1f83e0,0x0,0x0,0x0,0x70,0x38c70007,0xf8000000,0x7f03,
  3820. 0xf0000000,0x0,0x780780,0x0,0x0,0xfe0000,0xf0000000,0x1e0,0x1e00003c,0x3f00,0x0,0xe07f0e,0x7fff80,0x0,0x0,0x70,0x70000,0x1c0,
  3821. 0x1c000078,0x3c,0x1fc0,0x0,0x0,0xfffe1c00,0x0,0x0,0x380000f0,0x7800000,0x1c00,0xe000,0xe00,0x0,0x78f000,0x3c78000,0x1e3c0000,
  3822. 0xf1e00007,0x8f00003c,0x78000787,0x8001e000,0x78000,0x3c0000,0x1e00000,0xf000000,0xf00000,0x7800000,0x3c000001,0xe0001e00,
  3823. 0xf80f780,0x3c03c001,0xe01e000f,0xf00078,0x78003c0,0x3c001e00,0xf,0x1f80f0,0x3c0780,0x1e03c00,0xf01e000,0x7801e01e,0x1ffffc,
  3824. 0xf007e0,0x3fc000,0x1fe0000,0xff00000,0x7f800003,0xfc00001f,0xe0000fc0,0xfc00007f,0xfe0,0x7f00,0x3f800,0x1fc000,0x0,0x0,0x0,
  3825. 0x1,0xf000001f,0x80000ff0,0x7f80,0x3fc00,0x1fe000,0xff0000,0x1f80000,0x1fc1e000,0x0,0x0,0x0,0x0,0x1e1fc0,0x0,0x0,0x0,0x0,
  3826. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x780000,0x3c1e0000,
  3827. 0x781c007c,0x30003803,0x80001f00,0x1e0,0xf00,0x7800,0x7f000,0x1e0000,0x0,0x0,0x0,0x1e000f00,0x780001e,0x0,0x7800000f,0x3c780,
  3828. 0x3c00000,0x3c000000,0x3c00f,0x780f0,0x3c0000,0x0,0x0,0x1e000000,0xf00000,0x3e0,0xf0000e0,0x3c78003,0xc000f01e,0x1e0,0x7803c0,
  3829. 0x1e00,0x1e000,0x1e0007,0x80007800,0x780,0x3c0f8000,0x7800001e,0x701cf079,0xe01e01e0,0xf00780,0x1e07800,0x3c078001,0xe03c0000,
  3830. 0xf000,0xf0003c0,0x3c003c0f,0x3e00,0x787c001f,0x3e00000,0xf80003c,0x3c00,0x1e0,0x1f003e,0x0,0x0,0x1fffc001,0xe7ff0000,0x3ffe000f,
  3831. 0xfe78003f,0xfc001fff,0xfe001ffc,0xf0078ffc,0x1ffc00,0x7ff000,0x7800f80,0x1e0000f,0x7f1fc01e,0x3ff0001f,0xfe00079f,0xfc0007ff,
  3832. 0x3c003c7f,0xf001fff8,0x1fffff0,0x3c003c0,0xf0000f1e,0xf1f,0x7c1f0,0x1f00ff,0xffe0001e,0xf0,0x780,0x0,0x0,0x3c00000,0x100000,
  3833. 0x0,0x7800000,0x0,0x18,0xc0,0x0,0x1818000,0x7800000,0x1,0xe00f0000,0x1000000,0xf80000,0x40000002,0xf,0x80001f00,0x7e0f8,0x1f07c0,
  3834. 0x0,0x0,0x0,0x70,0x38c7003f,0xff000000,0xff8f,0xf8000100,0xffffe,0x7c0f80,0x0,0x0,0x3ffc000,0xf0000020,0x1001f0,0x3c00003c,
  3835. 0x1f80,0x0,0x1c3ffc7,0x7c0780,0x0,0x0,0xe3,0xff038000,0xe0,0x38000078,0x78,0x1ff0,0x0,0x3c003c0,0xfffe1c00,0x0,0x0,0x380000f0,
  3836. 0x7800000,0x1c00,0xe000,0xe00,0xf000,0x78f000,0x3c78000,0x1e3c0000,0xf1e00007,0x8f00003c,0x78000787,0x8001e000,0x78000,0x3c0000,
  3837. 0x1e00000,0xf000000,0xf00000,0x7800000,0x3c000001,0xe0001e00,0x780f3c0,0x3c03c001,0xe01e000f,0xf00078,0x78003c0,0x3c001e00,
  3838. 0x4000200f,0x3f80f0,0x3c0780,0x1e03c00,0xf01e000,0x7801f03e,0x1ffffe,0xf01fe0,0x3fff800,0x1fffc000,0xfffe0007,0xfff0003f,
  3839. 0xff8001ff,0xfc003ff3,0xfe0003ff,0xe0007ff8,0x3ffc0,0x1ffe00,0xfff000,0x3ff80001,0xffc0000f,0xfe00007f,0xf000003f,0xf8003c7f,
  3840. 0xe0003ffc,0x1ffe0,0xfff00,0x7ff800,0x3ffc000,0x1f80000,0xfff1c03c,0x3c01e0,0x1e00f00,0xf007800,0x781f0001,0xf01e7ff0,0x7c0007c,
  3841. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x780000,
  3842. 0x3c1e003f,0xfffff078,0x30003803,0x80000f00,0x1e0,0x1f00,0x7800,0x7f000,0x1e0000,0x0,0x0,0x0,0x3c000f00,0x780001e,0x0,0x7800000f,
  3843. 0x78780,0x3c00000,0x3c000000,0x7c00f,0x780f0,0x3c0007,0xe000003f,0x0,0xfe000000,0xfe0000,0x3c0,0x1f000070,0x7c7c003,0xc000f01e,
  3844. 0x1e0,0x7803c0,0x1e00,0x1e000,0x1e0007,0x80007800,0x780,0x3c1f0000,0x7800001e,0x783cf079,0xe01e03c0,0xf00780,0x1e0f000,0x3c078001,
  3845. 0xe03c0000,0xf000,0xf0003c0,0x3c003c07,0x81f03c00,0x7c7c000f,0x87c00000,0xf00003c,0x1e00,0x1e0,0x3e001f,0x0,0x0,0x3fffe001,
  3846. 0xefff8000,0x7fff001f,0xff78007f,0xfe001fff,0xfe003ffe,0xf0079ffe,0x1ffc00,0x7ff000,0x7801f00,0x1e0000f,0xffbfe01e,0x7ff8003f,
  3847. 0xff0007bf,0xfe000fff,0xbc003cff,0xf803fffc,0x1fffff0,0x3c003c0,0x78001e1e,0xf0f,0x800f80f0,0x1e00ff,0xffe0001e,0xf0,0x780,
  3848. 0x0,0x0,0x3c00000,0x380000,0x0,0x7800000,0x0,0x18,0xc0,0x0,0x1008000,0x7800000,0x3,0xe00f0000,0x3800000,0xf00000,0xe0000007,
  3849. 0xf,0x80001f00,0x3e0f8,0x1e07c0,0x0,0x0,0x0,0x70,0x3807007f,0xff800000,0x1ffdf,0xfc000380,0xffffe,0x3e1f00,0x0,0x0,0xfffe000,
  3850. 0xf0000030,0x3800f8,0x7c00003c,0xfc0,0x0,0x18780c3,0xf00780,0x80100,0x0,0xc3,0xffc18000,0xf0,0x78000078,0xf0,0xf0,0x0,0x3c003c0,
  3851. 0xfffe1c00,0x0,0x0,0x380000f0,0x7800801,0x1c00,0xe000,0x1e00,0xf000,0xf8f800,0x7c7c000,0x3e3e0001,0xf1f0000f,0x8f80007c,0x7c000787,
  3852. 0x8001e000,0x78000,0x3c0000,0x1e00000,0xf000000,0xf00000,0x7800000,0x3c000001,0xe0001e00,0x780f3c0,0x3c078001,0xe03c000f,
  3853. 0x1e00078,0xf0003c0,0x78001e00,0xe000701f,0x3fc0f0,0x3c0780,0x1e03c00,0xf01e000,0x7800f87c,0x1e007f,0xf07e00,0x7fffc00,0x3fffe001,
  3854. 0xffff000f,0xfff8007f,0xffc003ff,0xfe007ff7,0xff0007ff,0xf000fffc,0x7ffe0,0x3fff00,0x1fff800,0x3ff80001,0xffc0000f,0xfe00007f,
  3855. 0xf00000ff,0xf8003cff,0xf0007ffe,0x3fff0,0x1fff80,0xfffc00,0x7ffe000,0x1f80001,0xfffb803c,0x3c01e0,0x1e00f00,0xf007800,0x780f0001,
  3856. 0xe01efff8,0x3c00078,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3857. 0x0,0x0,0x0,0x0,0x0,0x780000,0x3c1e003f,0xfffff078,0x30001c07,0xf80,0x1e0,0x1e00,0x3c00,0xff800,0x1e0000,0x0,0x0,0x0,0x3c001e00,
  3858. 0x3c0001e,0x0,0x7800001e,0x70780,0x3c00000,0x78000000,0x78007,0x800f00f0,0x3e0007,0xe000003f,0x3,0xfe000000,0xff8000,0x7c0,
  3859. 0x1e000070,0x783c003,0xc001f01e,0x1e0,0x7803c0,0x1e00,0x1e000,0x1e0007,0x80007800,0x780,0x3c3e0000,0x7800001e,0x3838f079,
  3860. 0xe01e03c0,0x780780,0x1e0f000,0x1e078001,0xe03c0000,0xf000,0xf0003c0,0x3c007c07,0x81f03c00,0x3ef80007,0x87800000,0x1f00003c,
  3861. 0x1e00,0x1e0,0x7c000f,0x80000000,0x0,0x3ffff001,0xffffc000,0xffff003f,0xff7800ff,0xff001fff,0xfe007ffe,0xf007bffe,0x1ffc00,
  3862. 0x7ff000,0x7803e00,0x1e0000f,0xffffe01e,0xfff8007f,0xff8007ff,0xff001fff,0xbc003dff,0xf807fffc,0x1fffff0,0x3c003c0,0x78001e0f,
  3863. 0x1e07,0xc01f00f0,0x1e00ff,0xffe0001e,0xf0,0x780,0x0,0x0,0x7c00000,0x7c0000,0x0,0x7800000,0x0,0x18,0xc0,0x0,0x1018000,0x7800000,
  3864. 0x3,0xc00f0000,0x7c00000,0x1f00001,0xf000000f,0x80000007,0xc0003e00,0x1e07c,0x3e0780,0x0,0x0,0x0,0x70,0x380700ff,0xff800000,
  3865. 0x3ffff,0xfe0007c0,0xffffe,0x1e1e00,0x0,0x780000,0x1fffe000,0xf0000078,0x7c0078,0x7800003c,0xff0,0x0,0x38e0003,0x80f00780,
  3866. 0x180300,0x0,0x1c3,0x81e1c000,0x7f,0xf0000078,0x1e0,0x38,0x0,0x3c003c0,0xfffe1c00,0x0,0x0,0x380000f0,0x7800c01,0x80001c00,
  3867. 0xe000,0x603e00,0xf000,0xf07800,0x783c000,0x3c1e0001,0xe0f0000f,0x7800078,0x3c000f87,0x8001e000,0x78000,0x3c0000,0x1e00000,
  3868. 0xf000000,0xf00000,0x7800000,0x3c000001,0xe0001e00,0x780f3c0,0x3c078000,0xf03c0007,0x81e0003c,0xf0001e0,0x78000f01,0xf000f81e,
  3869. 0x7bc0f0,0x3c0780,0x1e03c00,0xf01e000,0x78007878,0x1e001f,0xf0f800,0x7fffe00,0x3ffff001,0xffff800f,0xfffc007f,0xffe003ff,
  3870. 0xff007fff,0xff800fff,0xf001fffe,0xffff0,0x7fff80,0x3fffc00,0x3ff80001,0xffc0000f,0xfe00007f,0xf00001ff,0xfc003dff,0xf000ffff,
  3871. 0x7fff8,0x3fffc0,0x1fffe00,0xffff000,0x1f80003,0xffff803c,0x3c01e0,0x1e00f00,0xf007800,0x780f0001,0xe01ffffc,0x3c00078,0x0,
  3872. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x780000,
  3873. 0x3c1e003f,0xfffff078,0x30001e0f,0x300780,0x1e0,0x1e00,0x3c00,0x3dde00,0x1e0000,0x0,0x0,0x0,0x78001e00,0x3c0001e,0x0,0xf800003e,
  3874. 0xf0780,0x3dfc000,0x783f8000,0xf8007,0xc01f00f0,0x3e0007,0xe000003f,0x1f,0xfc000000,0x7ff000,0xf80,0x3e007c70,0x783c003,0xc001e03c,
  3875. 0x1e0,0x3c03c0,0x1e00,0x3c000,0x1e0007,0x80007800,0x780,0x3c7c0000,0x7800001e,0x3878f078,0xf01e03c0,0x780780,0x1e0f000,0x1e078001,
  3876. 0xe03e0000,0xf000,0xf0003c0,0x1e007807,0x83f03c00,0x3ef00007,0xcf800000,0x3e00003c,0xf00,0x1e0,0xf80007,0xc0000000,0x0,0x3e01f801,
  3877. 0xfe07e001,0xf80f007e,0x7f801f8,0x1f801fff,0xfe00fc0f,0xf007f83f,0x1ffc00,0x7ff000,0x7807c00,0x1e0000f,0x87e1e01f,0xe0fc00fc,
  3878. 0xfc007f8,0x1f803f03,0xfc003df0,0x3807e03c,0x1fffff0,0x3c003c0,0x78003e0f,0x1e03,0xe03e00f8,0x3e00ff,0xffe0001e,0xf0,0x780,
  3879. 0x0,0x0,0x7800000,0xfe0000,0x0,0x7800000,0x0,0x18,0xc0,0x0,0x1818000,0x7c00000,0x3,0xc00f0000,0xfe00000,0x3e00003,0xf800001f,
  3880. 0xc0000007,0xc0003e00,0x1e03c,0x3c0f80,0x0,0x0,0x0,0x70,0x380700fc,0x7800000,0x7c1fe,0x3e000fe0,0xffffe,0x1f3e00,0x0,0x780000,
  3881. 0x3f98e000,0xf000003c,0xfcf8007c,0xf800003c,0x3ffc,0x0,0x31c0001,0x80f00f80,0x380700,0x0,0x183,0x80e0c000,0x3f,0xe0000078,
  3882. 0x3c0,0x38,0x0,0x3c003c0,0xfffe1c00,0x0,0x0,0x38000078,0xf000e01,0xc003ffe0,0x1fff00,0x7ffc00,0xf000,0xf07800,0x783c000,0x3c1e0001,
  3883. 0xe0f0000f,0x7800078,0x3c000f07,0x8003c000,0x78000,0x3c0000,0x1e00000,0xf000000,0xf00000,0x7800000,0x3c000001,0xe0001e00,
  3884. 0x3c0f1e0,0x3c078000,0xf03c0007,0x81e0003c,0xf0001e0,0x78000f00,0xf801f01e,0xf3c0f0,0x3c0780,0x1e03c00,0xf01e000,0x78007cf8,
  3885. 0x1e000f,0x80f0f000,0x7c03f00,0x3e01f801,0xf00fc00f,0x807e007c,0x3f003e0,0x1f80707f,0x8f801f80,0xf003f03f,0x1f81f8,0xfc0fc0,
  3886. 0x7e07e00,0x3ff80001,0xffc0000f,0xfe00007f,0xf00003ff,0xfc003fc1,0xf801f81f,0x800fc0fc,0x7e07e0,0x3f03f00,0x1f81f800,0x1f80007,
  3887. 0xe07f003c,0x3c01e0,0x1e00f00,0xf007800,0x780f8003,0xe01fe07e,0x3e000f8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3888. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x780000,0x3f,0xfffff078,0x30000ffe,0x1f007c0,0x0,0x1e00,
  3889. 0x3c00,0xf9cf80,0x1e0000,0x0,0x0,0x0,0x78001e00,0x3c0001e,0x0,0xf00000fc,0x1e0780,0x3fff800,0x78ffe000,0xf0003,0xe03e00f0,
  3890. 0x3e0007,0xe000003f,0x7f,0xe01fffff,0xf00ffc00,0x1f80,0x3c01ff70,0x783c003,0xc007e03c,0x1e0,0x3c03c0,0x1e00,0x3c000,0x1e0007,
  3891. 0x80007800,0x780,0x3cfc0000,0x7800001e,0x3c78f078,0xf01e03c0,0x780780,0x3e0f000,0x1e078003,0xc01f0000,0xf000,0xf0003c0,0x1e007807,
  3892. 0x83f83c00,0x1ff00003,0xcf000000,0x3e00003c,0xf00,0x1e0,0x0,0x0,0x0,0x20007801,0xfc03e003,0xe003007c,0x3f803e0,0x7c0003c,
  3893. 0xf807,0xf007e00f,0x3c00,0xf000,0x780f800,0x1e0000f,0x87e1f01f,0x803c00f8,0x7c007f0,0xf803e01,0xfc003f80,0x80f8004,0x3c000,
  3894. 0x3c003c0,0x3c003c0f,0x1e03,0xe03e0078,0x3c0000,0x7c0001e,0xf0,0x780,0x0,0x0,0x3ffff800,0x1ff0000,0x0,0x7800000,0x0,0x18,
  3895. 0xc0,0x0,0x1818000,0x3e00000,0x3,0xc00f0000,0x1ff00000,0x3e00007,0xfc00003f,0xe0000003,0xc0003c00,0xf03c,0x3c0f00,0x0,0x0,
  3896. 0x0,0x70,0x380701f0,0x800000,0x780fc,0x1e001ff0,0x7c,0xf3c00,0x0,0x780000,0x7e182000,0xf000001f,0xfff00ffc,0xffc0003c,0x3cfe,
  3897. 0x0,0x31c0001,0x80f01f80,0x780f00,0x0,0x183,0x80e0c000,0xf,0x80000078,0x780,0x38,0x0,0x3c003c0,0x7ffe1c00,0x0,0x0,0x38000078,
  3898. 0xf000f01,0xe003ffe0,0x1fff00,0x7ff800,0xf000,0xf07800,0x783c000,0x3c1e0001,0xe0f0000f,0x78000f8,0x3e000f07,0x8003c000,0x78000,
  3899. 0x3c0000,0x1e00000,0xf000000,0xf00000,0x7800000,0x3c000001,0xe0001e00,0x3c0f1e0,0x3c078000,0xf03c0007,0x81e0003c,0xf0001e0,
  3900. 0x78000f00,0x7c03e01e,0x1e3c0f0,0x3c0780,0x1e03c00,0xf01e000,0x78003cf0,0x1e0007,0x80f1e000,0x4000f00,0x20007801,0x3c008,
  3901. 0x1e0040,0xf00200,0x780403f,0x7803e00,0x3007c00f,0x803e007c,0x1f003e0,0xf801f00,0x780000,0x3c00000,0x1e000000,0xf00007f0,
  3902. 0x3e003f00,0x7801f00f,0x800f807c,0x7c03e0,0x3e01f00,0x1f00f800,0x1f80007,0xc03e003c,0x3c01e0,0x1e00f00,0xf007800,0x78078003,
  3903. 0xc01fc03e,0x1e000f0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3904. 0x0,0x0,0x0,0x0,0x0,0x780000,0x0,0xf078007c,0x300007fc,0x7e00fe0,0x0,0x1e00,0x3c00,0x3e1c3e0,0x1e0000,0x0,0x0,0x0,0xf0001e00,
  3905. 0x3c0001e,0x1,0xf000fff8,0x1e0780,0x3fffe00,0x79fff000,0x1f0001,0xfffc00f0,0x7e0007,0xe000003f,0x3ff,0x801fffff,0xf003ff80,
  3906. 0x3f00,0x3c03fff0,0xf01e003,0xffffc03c,0x1e0,0x3c03ff,0xffc01fff,0xfe03c000,0x1fffff,0x80007800,0x780,0x3df80000,0x7800001e,
  3907. 0x1c70f078,0x781e03c0,0x780780,0x3c0f000,0x1e078007,0xc01f8000,0xf000,0xf0003c0,0x1e007807,0x83f83c00,0xfe00003,0xff000000,
  3908. 0x7c00003c,0x780,0x1e0,0x0,0x0,0x0,0x7c01,0xf801f007,0xc00100f8,0x1f803c0,0x3c0003c,0x1f003,0xf007c00f,0x80003c00,0xf000,
  3909. 0x783f000,0x1e0000f,0x3c0f01f,0x3e01f0,0x3e007e0,0x7c07c00,0xfc003f00,0xf0000,0x3c000,0x3c003c0,0x3c003c0f,0x1e01,0xf07c007c,
  3910. 0x7c0000,0xfc0001e,0xf0,0x780,0x0,0x0,0x3ffff000,0x3838000,0x0,0x7800000,0x0,0x18,0xc0,0x0,0xff0000,0x3f00000,0x3,0xc00fff00,
  3911. 0x38380000,0x7c0000e,0xe000070,0x70000001,0xe0003c00,0xf01e,0x780e00,0x0,0x0,0x0,0x0,0x1e0,0x0,0x780f8,0xf003838,0xfc,0xffc00,
  3912. 0x0,0x780000,0x7c180000,0xf000000f,0xffe00fff,0xffc0003c,0x783f,0x80000000,0x6380000,0xc0f83f80,0xf81f00,0x0,0x303,0x80e06000,
  3913. 0x0,0x78,0xf00,0x78,0x0,0x3c003c0,0x7ffe1c00,0x0,0x0,0x3800003c,0x3e000f81,0xf003ffe0,0x1fff00,0x1fc000,0xf000,0x1e03c00,
  3914. 0xf01e000,0x780f0003,0xc078001e,0x3c000f0,0x1e000f07,0xff83c000,0x7ffff,0x803ffffc,0x1ffffe0,0xfffff00,0xf00000,0x7800000,
  3915. 0x3c000001,0xe0001e00,0x3c0f0f0,0x3c078000,0xf03c0007,0x81e0003c,0xf0001e0,0x78000f00,0x3e07c01e,0x1e3c0f0,0x3c0780,0x1e03c00,
  3916. 0xf01e000,0x78003ff0,0x1e0007,0x80f1e000,0xf80,0x7c00,0x3e000,0x1f0000,0xf80000,0x7c0001e,0x3c07c00,0x10078007,0x803c003c,
  3917. 0x1e001e0,0xf000f00,0x780000,0x3c00000,0x1e000000,0xf00007c0,0x1e003e00,0x7c03e007,0xc01f003e,0xf801f0,0x7c00f80,0x3e007c00,
  3918. 0xf,0x801f003c,0x3c01e0,0x1e00f00,0xf007800,0x7807c007,0xc01f801f,0x1f001f0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3919. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x780000,0x0,0xe078003c,0x300001f0,0x3f801ff0,0x0,
  3920. 0x3c00,0x1e00,0x3c1c1e0,0x1e0000,0x0,0x0,0x0,0xf0001e0f,0x3c0001e,0x3,0xe000fff0,0x3c0780,0x3ffff00,0x7bfff800,0x1e0000,0x7ff00078,
  3921. 0x7e0007,0xe000003f,0x1ffc,0x1fffff,0xf0007ff0,0x7e00,0x3c07c3f0,0xf01e003,0xffff003c,0x1e0,0x3c03ff,0xffc01fff,0xfe03c000,
  3922. 0x1fffff,0x80007800,0x780,0x3ffc0000,0x7800001e,0x1ef0f078,0x781e03c0,0x780780,0x7c0f000,0x1e07801f,0x800ff000,0xf000,0xf0003c0,
  3923. 0xf00f807,0x83b83c00,0xfc00001,0xfe000000,0xf800003c,0x780,0x1e0,0x0,0x0,0x0,0x3c01,0xf000f007,0xc00000f0,0xf80780,0x3c0003c,
  3924. 0x1e001,0xf007c007,0x80003c00,0xf000,0x787e000,0x1e0000f,0x3c0f01f,0x1e01e0,0x1e007c0,0x3c07800,0x7c003f00,0xf0000,0x3c000,
  3925. 0x3c003c0,0x3e007c07,0x80003c00,0xf8f8003c,0x780000,0xf80001e,0xf0,0x780,0x0,0x0,0x7ffff000,0x601c000,0x3,0xffff0000,0x0,
  3926. 0xfff,0xf8007fff,0xc0000000,0x7e003c,0x1fe0000,0xc0003,0xc00fff00,0x601c0000,0xf800018,0x70000c0,0x38000001,0xe0007800,0x701e,
  3927. 0x701e00,0x0,0x0,0x0,0x0,0x1e0,0x6,0x700f8,0xf00601c,0xf8,0x7f800,0x0,0x780000,0xf8180000,0xf000000f,0x87c00fff,0xffc0003c,
  3928. 0xf01f,0xc0000000,0x6380000,0xc07ff780,0x1f03e03,0xfffffe00,0x303,0x81c06000,0x0,0x1ffff,0xfe001e00,0x180f8,0x0,0x3c003c0,
  3929. 0x3ffe1c00,0x3f00000,0x0,0x3800003f,0xfe0007c0,0xf8000000,0x18000000,0xc0000006,0x1f000,0x1e03c00,0xf01e000,0x780f0003,0xc078001e,
  3930. 0x3c000f0,0x1e001f07,0xff83c000,0x7ffff,0x803ffffc,0x1ffffe0,0xfffff00,0xf00000,0x7800000,0x3c000001,0xe000fff8,0x3c0f0f0,
  3931. 0x3c078000,0xf03c0007,0x81e0003c,0xf0001e0,0x78000f00,0x1f0f801e,0x3c3c0f0,0x3c0780,0x1e03c00,0xf01e000,0x78001fe0,0x1e0007,
  3932. 0x80f1e000,0x780,0x3c00,0x1e000,0xf0000,0x780000,0x3c0001e,0x3c07c00,0xf0007,0x8078003c,0x3c001e0,0x1e000f00,0x780000,0x3c00000,
  3933. 0x1e000000,0xf0000f80,0x1f003e00,0x3c03c003,0xc01e001e,0xf000f0,0x7800780,0x3c003c00,0xf,0x3f003c,0x3c01e0,0x1e00f00,0xf007800,
  3934. 0x7803c007,0x801f000f,0xf001e0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3935. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x780000,0x1,0xe078003f,0xb0000000,0xfc003cf0,0x0,0x3c00,0x1e00,0x101c040,0x1e0000,0x0,0x0,0x1,
  3936. 0xe0001e1f,0x83c0001e,0x7,0xe000fff0,0x3c0780,0x3c03f80,0x7fc0fc00,0x1e0000,0xfff80078,0xfe0007,0xe000003f,0x7fe0,0x1fffff,
  3937. 0xf0000ffc,0xfc00,0x780f81f0,0xf01e003,0xffff003c,0x1e0,0x3c03ff,0xffc01fff,0xfe03c000,0x1fffff,0x80007800,0x780,0x3ffc0000,
  3938. 0x7800001e,0x1ef0f078,0x3c1e03c0,0x780780,0x1fc0f000,0x1e07ffff,0x7ff00,0xf000,0xf0003c0,0xf00f007,0xc3b87c00,0x7c00001,0xfe000000,
  3939. 0xf800003c,0x3c0,0x1e0,0x0,0x0,0x0,0x3c01,0xf000f007,0x800000f0,0xf80780,0x1e0003c,0x1e001,0xf0078007,0x80003c00,0xf000,0x78fc000,
  3940. 0x1e0000f,0x3c0f01e,0x1e01e0,0x1e007c0,0x3c07800,0x7c003e00,0xf0000,0x3c000,0x3c003c0,0x1e007807,0x80003c00,0x7df0003c,0x780000,
  3941. 0x1f00001e,0xf0,0x780,0x0,0x0,0x7800000,0xe7ce000,0x3,0xffff0000,0x0,0xfff,0xf8007fff,0xc0000000,0x1f0,0xffe000,0x1c0003,
  3942. 0xc00fff00,0xe7ce0000,0xf800039,0xf38001cf,0x9c000000,0xe0007800,0x780e,0x701c00,0x0,0x0,0x0,0x0,0x1e0,0x7,0xf0078,0xf00e7ce,
  3943. 0x1f0,0x7f800,0x0,0x780000,0xf0180000,0xf000000e,0x1c0001f,0xe000003c,0xf007,0xe0000000,0x6380000,0xc03fe780,0x3e07c03,0xfffffe00,
  3944. 0x303,0xffc06000,0x0,0x1ffff,0xfe003ffe,0x1fff0,0x0,0x3c003c0,0x1ffe1c00,0x3f00000,0x7,0xffc0001f,0xfc0003e0,0x7c000001,0xfc00000f,
  3945. 0xe000007f,0x1e000,0x1e03c00,0xf01e000,0x780f0003,0xc078001e,0x3c000f0,0x1e001e07,0xff83c000,0x7ffff,0x803ffffc,0x1ffffe0,
  3946. 0xfffff00,0xf00000,0x7800000,0x3c000001,0xe000fff8,0x3c0f078,0x3c078000,0xf03c0007,0x81e0003c,0xf0001e0,0x78000f00,0xf9f001e,
  3947. 0x783c0f0,0x3c0780,0x1e03c00,0xf01e000,0x78001fe0,0x1e0007,0x80f1e000,0x780,0x3c00,0x1e000,0xf0000,0x780000,0x3c0001e,0x3c07800,
  3948. 0xf0003,0xc078001e,0x3c000f0,0x1e000780,0x780000,0x3c00000,0x1e000000,0xf0000f00,0xf003c00,0x3c03c003,0xc01e001e,0xf000f0,
  3949. 0x7800780,0x3c003c00,0xf,0x7f003c,0x3c01e0,0x1e00f00,0xf007800,0x7803c007,0x801f000f,0xf001e0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3950. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x780000,0x1,0xe070001f,0xf8000007,
  3951. 0xf0007cf8,0x7800000,0x3c00,0x1e00,0x1c000,0x1e0000,0x0,0x0,0x1,0xe0001e1f,0x83c0001e,0xf,0xc000fff8,0x780780,0x2000f80,0x7f803e00,
  3952. 0x3e0003,0xfffe007c,0x1fe0000,0x0,0x3ff00,0x0,0x1ff,0x8001f000,0x780f00f0,0x1f00f003,0xffffc03c,0x1e0,0x3c03ff,0xffc01fff,
  3953. 0xfe03c00f,0xf81fffff,0x80007800,0x780,0x3ffe0000,0x7800001e,0xee0f078,0x3c1e03c0,0x7807ff,0xff80f000,0x1e07fffe,0x3ffe0,
  3954. 0xf000,0xf0003c0,0xf00f003,0xc7bc7800,0xfc00000,0xfc000001,0xf000003c,0x3c0,0x1e0,0x0,0x0,0x0,0x3c01,0xe000f80f,0x800001e0,
  3955. 0xf80f00,0x1e0003c,0x3c000,0xf0078007,0x80003c00,0xf000,0x79f8000,0x1e0000f,0x3c0f01e,0x1e03c0,0x1f00780,0x3e0f000,0x7c003e00,
  3956. 0xf0000,0x3c000,0x3c003c0,0x1e007807,0x81e03c00,0x7df0003e,0xf80000,0x3e00003e,0xf0,0x7c0,0xfc000,0x80000000,0x7800000,0x1e7cf000,
  3957. 0x3,0xffff0000,0x0,0x18,0xc0,0x0,0xf80,0x7ffc00,0x380003,0xc00fff01,0xe7cf0000,0x1f000079,0xf3c003cf,0x9e000000,0xe0007000,
  3958. 0x380e,0xe01c00,0x0,0x0,0x0,0x0,0x1e0,0x3,0x800f0078,0xf01e7cf,0x3e0,0x3f000,0x0,0x780000,0xf018001f,0xfff8001e,0x1e0000f,
  3959. 0xc000003c,0xf003,0xe0000000,0x6380000,0xc00fc780,0x7c0f803,0xfffffe00,0x303,0xfe006000,0x0,0x1ffff,0xfe003ffe,0x1ffe0,0x0,
  3960. 0x3c003c0,0xffe1c00,0x3f00000,0x7,0xffc00007,0xf00001f0,0x3e00001f,0xfc0000ff,0xe00007ff,0x3e000,0x3e01e00,0x1f00f000,0xf8078007,
  3961. 0xc03c003e,0x1e001e0,0xf001e07,0xff83c000,0x7ffff,0x803ffffc,0x1ffffe0,0xfffff00,0xf00000,0x7800000,0x3c000001,0xe000fff8,
  3962. 0x3c0f078,0x3c078000,0xf03c0007,0x81e0003c,0xf0001e0,0x78000f00,0x7fe001e,0xf03c0f0,0x3c0780,0x1e03c00,0xf01e000,0x78000fc0,
  3963. 0x1e0007,0x80f1f000,0x780,0x3c00,0x1e000,0xf0000,0x780000,0x3c0001e,0x3c0f800,0x1e0003,0xc0f0001e,0x78000f0,0x3c000780,0x780000,
  3964. 0x3c00000,0x1e000000,0xf0000f00,0xf003c00,0x3c078003,0xe03c001f,0x1e000f8,0xf0007c0,0x78003e00,0x1e,0xf7803c,0x3c01e0,0x1e00f00,
  3965. 0xf007800,0x7803e00f,0x801e000f,0x80f803e0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3966. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x780000,0x1,0xe0f0000f,0xff00001f,0x8000f87c,0x7800000,0x3c00,0x1e00,0x1c000,0x7fffff80,
  3967. 0x0,0x0,0x3,0xc0001e1f,0x83c0001e,0x1f,0x800000fe,0xf00780,0x7c0,0x7f001e00,0x3c0007,0xe03f003f,0x3fe0000,0x0,0x3fc00,0x0,
  3968. 0x7f,0x8001e000,0x781f00f0,0x1e00f003,0xc007e03c,0x1e0,0x3c03c0,0x1e00,0x3c00f,0xf81e0007,0x80007800,0x780,0x3f9f0000,0x7800001e,
  3969. 0xfe0f078,0x3c1e03c0,0x7807ff,0xff00f000,0x1e07fff8,0xfff8,0xf000,0xf0003c0,0xf81f003,0xc7bc7800,0xfe00000,0x78000003,0xe000003c,
  3970. 0x1e0,0x1e0,0x0,0x0,0x0,0x1fffc01,0xe000780f,0x1e0,0x780f00,0x1e0003c,0x3c000,0xf0078007,0x80003c00,0xf000,0x7bf0000,0x1e0000f,
  3971. 0x3c0f01e,0x1e03c0,0xf00780,0x1e0f000,0x3c003c00,0xf8000,0x3c000,0x3c003c0,0x1f00f807,0x81f03c00,0x3fe0001e,0xf00000,0x7c00007c,
  3972. 0xf0,0x3e0,0x3ff801,0x80000000,0x7800000,0x3cfcf800,0x3,0xffff0000,0x0,0x18,0xc0,0x0,0x7c00,0x1fff00,0x700003,0xc00f0003,
  3973. 0xcfcf8000,0x3e0000f3,0xf3e0079f,0x9f000000,0xf000,0x1000,0x0,0x0,0x0,0x0,0x0,0x1f0,0x1,0xc00f0078,0xf03cfcf,0x800007c0,0x1e000,
  3974. 0x0,0x780001,0xe018001f,0xfff8001c,0xe00007,0x8000003c,0xf001,0xf0000000,0x6380000,0xc0000000,0xf81f003,0xfffffe00,0x303,
  3975. 0x87006000,0x0,0x1ffff,0xfe003ffe,0x7f00,0x0,0x3c003c0,0x3fe1c00,0x3f00000,0x7,0xffc00000,0xf8,0x1f0001ff,0xf0000fff,0x80007ffc,
  3976. 0xfc000,0x3c01e00,0x1e00f000,0xf0078007,0x803c003c,0x1e001e0,0xf001e07,0x8003c000,0x78000,0x3c0000,0x1e00000,0xf000000,0xf00000,
  3977. 0x7800000,0x3c000001,0xe000fff8,0x3c0f078,0x3c078000,0xf03c0007,0x81e0003c,0xf0001e0,0x78000f00,0x3fc001e,0x1e03c0f0,0x3c0780,
  3978. 0x1e03c00,0xf01e000,0x78000780,0x1e0007,0x80f0fc00,0x3fff80,0x1fffc00,0xfffe000,0x7fff0003,0xfff8001f,0xffc0001e,0x3c0f000,
  3979. 0x1e0003,0xc0f0001e,0x78000f0,0x3c000780,0x780000,0x3c00000,0x1e000000,0xf0001e00,0xf803c00,0x3c078001,0xe03c000f,0x1e00078,
  3980. 0xf0003c0,0x78001e07,0xfffffe1e,0x1e7803c,0x3c01e0,0x1e00f00,0xf007800,0x7801e00f,0x1e0007,0x807803c0,0x0,0x0,0x0,0x0,0x0,
  3981. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x780000,0x3,0xc0f00007,
  3982. 0xffc0007e,0xf03e,0x7800000,0x3c00,0x1e00,0x1c000,0x7fffff80,0x0,0x0,0x3,0xc0001e1f,0x83c0001e,0x3f,0x3e,0xf00780,0x3c0,0x7e001e00,
  3983. 0x7c000f,0x800f001f,0xffde0000,0x0,0x3e000,0x0,0xf,0x8003e000,0x781e0070,0x1e00f003,0xc001f03c,0x1e0,0x3c03c0,0x1e00,0x3c00f,
  3984. 0xf81e0007,0x80007800,0x780,0x3f1f0000,0x7800001e,0x7c0f078,0x1e1e03c0,0x7807ff,0xfc00f000,0x1e07fffe,0xffc,0xf000,0xf0003c0,
  3985. 0x781e003,0xc71c7800,0x1ff00000,0x78000003,0xe000003c,0x1e0,0x1e0,0x0,0x0,0x0,0xffffc01,0xe000780f,0x1e0,0x780fff,0xffe0003c,
  3986. 0x3c000,0xf0078007,0x80003c00,0xf000,0x7ff0000,0x1e0000f,0x3c0f01e,0x1e03c0,0xf00780,0x1e0f000,0x3c003c00,0x7f000,0x3c000,
  3987. 0x3c003c0,0xf00f007,0xc1f07c00,0x1fc0001f,0x1f00000,0xfc000ff8,0xf0,0x1ff,0xfffe07,0x80000000,0x7800000,0x7ffcfc00,0x0,0xf000000,
  3988. 0x0,0x18,0xc0,0x0,0x3e000,0x1ff80,0xe00003,0xc00f0007,0xffcfc000,0x3e0001ff,0xf3f00fff,0x9f800000,0x6000,0x0,0x0,0x7c000,
  3989. 0x0,0x0,0x0,0xfe,0x0,0xe00f007f,0xff07ffcf,0xc0000fc0,0x1e000,0x0,0x780001,0xe018001f,0xfff8001c,0xe00007,0x80000000,0xf800,
  3990. 0xf0000000,0x6380000,0xc0000000,0x1f03c000,0x1e00,0x303,0x83806000,0x0,0x78,0x0,0x0,0x0,0x3c003c0,0xfe1c00,0x3f00000,0x0,
  3991. 0x0,0x3c,0xf801fff,0xfff8,0x7ffc0,0x1f8000,0x3c01e00,0x1e00f000,0xf0078007,0x803c003c,0x1e001e0,0xf003c07,0x8003c000,0x78000,
  3992. 0x3c0000,0x1e00000,0xf000000,0xf00000,0x7800000,0x3c000001,0xe0001e00,0x3c0f03c,0x3c078000,0xf03c0007,0x81e0003c,0xf0001e0,
  3993. 0x78000f00,0x1f8001e,0x1e03c0f0,0x3c0780,0x1e03c00,0xf01e000,0x78000780,0x1e000f,0x80f0ff00,0x1ffff80,0xffffc00,0x7fffe003,
  3994. 0xffff001f,0xfff800ff,0xffc007ff,0xffc0f000,0x1fffff,0xc0fffffe,0x7fffff0,0x3fffff80,0x780000,0x3c00000,0x1e000000,0xf0001e00,
  3995. 0x7803c00,0x3c078001,0xe03c000f,0x1e00078,0xf0003c0,0x78001e07,0xfffffe1e,0x3c7803c,0x3c01e0,0x1e00f00,0xf007800,0x7801f01f,
  3996. 0x1e0007,0x807c07c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  3997. 0x0,0x0,0x0,0x0,0x780000,0x3,0xc0f00000,0xfff003f0,0x1f00f03e,0x7800000,0x3c00,0x1e00,0x1c000,0x7fffff80,0x0,0x7ff80000,0x3,
  3998. 0xc0001e0f,0x3c0001e,0x7e,0x1f,0x1e00780,0x3e0,0x7e000f00,0x78000f,0x7800f,0xff9e0000,0x0,0x3fc00,0x0,0x7f,0x8003c000,0x781e0070,
  3999. 0x3e00f803,0xc000f03c,0x1e0,0x3c03c0,0x1e00,0x3c00f,0xf81e0007,0x80007800,0x780,0x3e0f8000,0x7800001e,0x7c0f078,0x1e1e03c0,
  4000. 0x7807ff,0xf000f000,0x1e07807f,0xfe,0xf000,0xf0003c0,0x781e003,0xc71c7800,0x3ef00000,0x78000007,0xc000003c,0x1e0,0x1e0,0x0,
  4001. 0x0,0x0,0x1ffffc01,0xe000780f,0x1e0,0x780fff,0xffe0003c,0x3c000,0xf0078007,0x80003c00,0xf000,0x7ff0000,0x1e0000f,0x3c0f01e,
  4002. 0x1e03c0,0xf00780,0x1e0f000,0x3c003c00,0x7ff80,0x3c000,0x3c003c0,0xf00f003,0xc1f07800,0x1fc0000f,0x1e00000,0xf8000ff0,0xf0,
  4003. 0xff,0xffffff,0x80000000,0x3fffc000,0xfff9fe00,0x0,0xf000000,0x0,0x18,0xc0,0x0,0x1f0000,0x1fc0,0x1c00003,0xc00f000f,0xff9fe000,
  4004. 0x7c0003ff,0xe7f81fff,0x3fc00000,0x0,0x0,0x0,0xfe000,0x1ffffc0f,0xfffffc00,0x0,0xff,0xf0000000,0x700f007f,0xff0fff9f,0xe0000f80,
  4005. 0x1e000,0x0,0x780001,0xe018001f,0xfff8001c,0xe00fff,0xffc00000,0xf800,0xf0000000,0x6380000,0xc0ffff80,0x3e078000,0x1e00,0x7ff80303,
  4006. 0x83c06000,0x0,0x78,0x0,0x0,0x0,0x3c003c0,0xe1c00,0x3f00000,0x0,0x7f,0xff00001e,0x7c1fff0,0xfff80,0x7ffc00,0x3f0000,0x7c01f00,
  4007. 0x3e00f801,0xf007c00f,0x803e007c,0x1f003e0,0xf803c07,0x8003c000,0x78000,0x3c0000,0x1e00000,0xf000000,0xf00000,0x7800000,0x3c000001,
  4008. 0xe0001e00,0x3c0f03c,0x3c078000,0xf03c0007,0x81e0003c,0xf0001e0,0x78000f00,0x1f8001e,0x3c03c0f0,0x3c0780,0x1e03c00,0xf01e000,
  4009. 0x78000780,0x1e001f,0xf07f80,0x3ffff80,0x1ffffc00,0xffffe007,0xffff003f,0xfff801ff,0xffc03fff,0xffc0f000,0x1fffff,0xc0fffffe,
  4010. 0x7fffff0,0x3fffff80,0x780000,0x3c00000,0x1e000000,0xf0001e00,0x7803c00,0x3c078001,0xe03c000f,0x1e00078,0xf0003c0,0x78001e07,
  4011. 0xfffffe1e,0x787803c,0x3c01e0,0x1e00f00,0xf007800,0x7800f01e,0x1e0007,0x803c0780,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4012. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x780000,0x1ff,0xffff8000,0x3ff80fc0,0x7fc1e01f,
  4013. 0x7800000,0x3c00,0x1e00,0x0,0x7fffff80,0x0,0x7ff80000,0x7,0x80001e00,0x3c0001e,0xfc,0xf,0x1e00780,0x1e0,0x7c000f00,0x78000f,
  4014. 0x78007,0xff1e0000,0x0,0x3ff00,0x0,0x1ff,0x8003c000,0x781e0070,0x3c007803,0xc000f03c,0x1e0,0x3c03c0,0x1e00,0x3c000,0x781e0007,
  4015. 0x80007800,0x780,0x3c07c000,0x7800001e,0x7c0f078,0xf1e03c0,0x780780,0xf000,0x1e07801f,0x3e,0xf000,0xf0003c0,0x781e003,0xcf1c7800,
  4016. 0x3cf80000,0x7800000f,0x8000003c,0xf0,0x1e0,0x0,0x0,0x0,0x3ffffc01,0xe000780f,0x1e0,0x780fff,0xffe0003c,0x3c000,0xf0078007,
  4017. 0x80003c00,0xf000,0x7ff8000,0x1e0000f,0x3c0f01e,0x1e03c0,0xf00780,0x1e0f000,0x3c003c00,0x3fff0,0x3c000,0x3c003c0,0xf81f003,
  4018. 0xc3b87800,0xf80000f,0x1e00001,0xf0000ff0,0xf0,0xff,0xf03fff,0x80000000,0x3fff8001,0xfff1ff00,0x0,0xf000000,0x0,0x18,0xc0,
  4019. 0x0,0x380000,0x7c0,0x3c00003,0xc00f001f,0xff1ff000,0xf80007ff,0xc7fc3ffe,0x3fe00000,0x0,0x0,0x0,0x1ff000,0x7ffffe1f,0xffffff00,
  4020. 0x0,0x7f,0xfe000000,0x780f007f,0xff1fff1f,0xf0001f00,0x1e000,0x0,0x780001,0xe0180000,0xf000001c,0xe00fff,0xffc00000,0x7c00,
  4021. 0xf0000000,0x31c0001,0x80ffff80,0x3e078000,0x1e00,0x7ff80183,0x81c0c000,0x0,0x78,0x0,0x0,0x0,0x3c003c0,0xe1c00,0x3f00000,
  4022. 0x0,0x7f,0xff00001e,0x7c7ff03,0xc03ff8fe,0x1ffc0f0,0x7e0000,0x7800f00,0x3c007801,0xe003c00f,0x1e0078,0xf003c0,0x7803c07,0x8003c000,
  4023. 0x78000,0x3c0000,0x1e00000,0xf000000,0xf00000,0x7800000,0x3c000001,0xe0001e00,0x3c0f01e,0x3c078000,0xf03c0007,0x81e0003c,
  4024. 0xf0001e0,0x78000f00,0x3fc001e,0x7803c0f0,0x3c0780,0x1e03c00,0xf01e000,0x78000780,0x1e007f,0xf03fe0,0x7ffff80,0x3ffffc01,
  4025. 0xffffe00f,0xffff007f,0xfff803ff,0xffc07fff,0xffc0f000,0x1fffff,0xc0fffffe,0x7fffff0,0x3fffff80,0x780000,0x3c00000,0x1e000000,
  4026. 0xf0001e00,0x7803c00,0x3c078001,0xe03c000f,0x1e00078,0xf0003c0,0x78001e07,0xfffffe1e,0x707803c,0x3c01e0,0x1e00f00,0xf007800,
  4027. 0x7800f01e,0x1e0007,0x803c0780,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4028. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x780000,0x1ff,0xffff8000,0x30f81f00,0xffe1e00f,0x87800000,0x3c00,0x1e00,0x0,0x1e0000,0x0,0x7ff80000,
  4029. 0x7,0x80001e00,0x3c0001e,0x1f8,0x7,0x83c00780,0x1e0,0x7c000f00,0xf8001e,0x3c001,0xfc1e0000,0x0,0x7fe0,0x0,0xffc,0x3c000,0x781e0070,
  4030. 0x3ffff803,0xc000783c,0x1e0,0x3c03c0,0x1e00,0x3c000,0x781e0007,0x80007800,0x780,0x3c07c000,0x7800001e,0x380f078,0xf1e03c0,
  4031. 0x780780,0xf000,0x1e07800f,0x8000001e,0xf000,0xf0003c0,0x3c3c003,0xcf1e7800,0x7c780000,0x7800000f,0x8000003c,0xf0,0x1e0,0x0,
  4032. 0x0,0x0,0x7f003c01,0xe000780f,0x1e0,0x780fff,0xffe0003c,0x3c000,0xf0078007,0x80003c00,0xf000,0x7f7c000,0x1e0000f,0x3c0f01e,
  4033. 0x1e03c0,0xf00780,0x1e0f000,0x3c003c00,0xfff8,0x3c000,0x3c003c0,0x781e003,0xc3b87800,0x1fc00007,0x83e00003,0xe0000ff8,0xf0,
  4034. 0x1ff,0xc007fe,0x0,0x7fff8001,0xffe3ff00,0x0,0x1e000000,0x0,0x18,0xc0,0x0,0x0,0x3c0,0x7800003,0xc00f001f,0xfe3ff000,0xf80007ff,
  4035. 0x8ffc3ffc,0x7fe00000,0x0,0x0,0x0,0x1ff000,0x0,0x0,0x0,0x1f,0xff000000,0x3c0f007f,0xff1ffe3f,0xf0003e00,0x1e000,0x0,0x780001,
  4036. 0xe0180000,0xf000001e,0x1e00fff,0xffc00000,0x3f00,0xf0000000,0x31c0001,0x80ffff80,0x1f03c000,0x1e00,0x7ff80183,0x81c0c000,
  4037. 0x0,0x78,0x0,0x0,0x0,0x3c003c0,0xe1c00,0x0,0x0,0x7f,0xff00003c,0xf87f007,0xc03f83ff,0x81fc01f0,0x7c0000,0x7ffff00,0x3ffff801,
  4038. 0xffffc00f,0xfffe007f,0xfff003ff,0xff807fff,0x8003c000,0x78000,0x3c0000,0x1e00000,0xf000000,0xf00000,0x7800000,0x3c000001,
  4039. 0xe0001e00,0x3c0f01e,0x3c078000,0xf03c0007,0x81e0003c,0xf0001e0,0x78000f00,0x7fe001e,0xf003c0f0,0x3c0780,0x1e03c00,0xf01e000,
  4040. 0x78000780,0x1ffffe,0xf00ff0,0xfe00780,0x7f003c03,0xf801e01f,0xc00f00fe,0x7807f0,0x3c0ffff,0xffc0f000,0x1fffff,0xc0fffffe,
  4041. 0x7fffff0,0x3fffff80,0x780000,0x3c00000,0x1e000000,0xf0001e00,0x7803c00,0x3c078001,0xe03c000f,0x1e00078,0xf0003c0,0x78001e00,
  4042. 0x1e,0xf07803c,0x3c01e0,0x1e00f00,0xf007800,0x7800783e,0x1e0007,0x801e0f80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4043. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x780000,0x1ff,0xffff8000,0x307c0801,0xe1f1e00f,0x87000000,
  4044. 0x3c00,0x1e00,0x0,0x1e0000,0x0,0x7ff80000,0xf,0x1e00,0x3c0001e,0x3f0,0x7,0x83fffffc,0x1e0,0x7c000f00,0xf0001e,0x3c000,0x3e0000,
  4045. 0x0,0x1ffc,0x1fffff,0xf0007ff0,0x3c000,0x781e0070,0x7ffffc03,0xc000781e,0x1e0,0x7803c0,0x1e00,0x3c000,0x781e0007,0x80007800,
  4046. 0x780,0x3c03e000,0x7800001e,0xf078,0x79e03c0,0x780780,0xf000,0x1e078007,0x8000000f,0xf000,0xf0003c0,0x3c3c001,0xee0ef000,
  4047. 0xf87c0000,0x7800001f,0x3c,0x78,0x1e0,0x0,0x0,0x0,0x7c003c01,0xe000780f,0x1e0,0x780f00,0x3c,0x3c000,0xf0078007,0x80003c00,
  4048. 0xf000,0x7e3e000,0x1e0000f,0x3c0f01e,0x1e03c0,0xf00780,0x1e0f000,0x3c003c00,0x1ffc,0x3c000,0x3c003c0,0x781e003,0xe3b8f800,
  4049. 0x1fc00007,0x83c00007,0xc00000fc,0xf0,0x3e0,0x8001f8,0x0,0x7800000,0xffc7fe00,0x0,0x1e000000,0x0,0x18,0xc0,0x0,0x0,0x1e0,
  4050. 0xf000003,0xc00f000f,0xfc7fe001,0xf00003ff,0x1ff81ff8,0xffc00000,0x0,0x0,0x0,0x1ff000,0x0,0x0,0x0,0x3,0xff800000,0x1e0f0078,
  4051. 0xffc7f,0xe0007c00,0x1e000,0x0,0x780001,0xe0180000,0xf000000e,0x1c00007,0x80000000,0x1f81,0xe0000000,0x38e0003,0x80000000,
  4052. 0xf81f000,0x1e00,0x7ff801c3,0x80e1c000,0x0,0x78,0x0,0x0,0x0,0x3c003c0,0xe1c00,0x0,0x0,0x0,0xf8,0x1f070007,0xc03803ff,0xc1c001f0,
  4053. 0xf80000,0xfffff00,0x7ffff803,0xffffc01f,0xfffe00ff,0xfff007ff,0xffc07fff,0x8001e000,0x78000,0x3c0000,0x1e00000,0xf000000,
  4054. 0xf00000,0x7800000,0x3c000001,0xe0001e00,0x780f00f,0x3c078000,0xf03c0007,0x81e0003c,0xf0001e0,0x78000f00,0xf9f001e,0xf003c0f0,
  4055. 0x3c0780,0x1e03c00,0xf01e000,0x78000780,0x1ffffc,0xf003f8,0xf800780,0x7c003c03,0xe001e01f,0xf00f8,0x7807c0,0x3c0fc1e,0xf000,
  4056. 0x1e0000,0xf00000,0x7800000,0x3c000000,0x780000,0x3c00000,0x1e000000,0xf0001e00,0x7803c00,0x3c078001,0xe03c000f,0x1e00078,
  4057. 0xf0003c0,0x78001e00,0x1e,0x1e07803c,0x3c01e0,0x1e00f00,0xf007800,0x7800783c,0x1e0007,0x801e0f00,0x0,0x0,0x0,0x0,0x0,0x0,
  4058. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1ff,0xffff8000,0x303c0001,
  4059. 0xc071e007,0xcf000000,0x3c00,0x1e00,0x0,0x1e0000,0x0,0x0,0xf,0xf00,0x780001e,0x7e0,0x7,0x83fffffc,0x1e0,0x7c000f00,0x1f0001e,
  4060. 0x3c000,0x3c0000,0x0,0x3ff,0x801fffff,0xf003ff80,0x3c000,0x781e0070,0x7ffffc03,0xc000781e,0x1e0,0x7803c0,0x1e00,0x1e000,0x781e0007,
  4061. 0x80007800,0x780,0x3c01f000,0x7800001e,0xf078,0x79e03c0,0xf00780,0xf000,0x3e078007,0xc000000f,0xf000,0xf0003c0,0x3c3c001,
  4062. 0xee0ef000,0xf03e0000,0x7800003e,0x3c,0x78,0x1e0,0x0,0x0,0x0,0xf8003c01,0xe000780f,0x1e0,0x780f00,0x3c,0x3c000,0xf0078007,
  4063. 0x80003c00,0xf000,0x7c3e000,0x1e0000f,0x3c0f01e,0x1e03c0,0xf00780,0x1e0f000,0x3c003c00,0xfc,0x3c000,0x3c003c0,0x3c3e001,0xe7b8f000,
  4064. 0x3fe00007,0xc7c0000f,0xc000003e,0xf0,0x7c0,0x0,0x0,0x7c00000,0x7fcffc00,0x0,0x1e000000,0x0,0x18,0xc0,0x0,0x0,0x1e0,0x1e000003,
  4065. 0xc00f0007,0xfcffc003,0xe00001ff,0x3ff00ff9,0xff800000,0x0,0x0,0x0,0x1ff000,0x0,0x0,0x0,0x0,0x1f800000,0xf0f0078,0x7fcff,
  4066. 0xc000fc00,0x1e000,0x0,0x780001,0xe0180000,0xf000000f,0x87c00007,0x80000000,0xfe3,0xe0000000,0x18780c3,0x0,0x7c0f800,0x1e00,
  4067. 0xc3,0x80e18000,0x0,0x78,0x0,0x0,0x0,0x3c003c0,0xe1c00,0x0,0x0,0x0,0x1f0,0x3e00000f,0xc0000303,0xe00003f0,0xf00000,0xfffff80,
  4068. 0x7ffffc03,0xffffe01f,0xffff00ff,0xfff807ff,0xffc07fff,0x8001e000,0x78000,0x3c0000,0x1e00000,0xf000000,0xf00000,0x7800000,
  4069. 0x3c000001,0xe0001e00,0x780f00f,0x3c078001,0xe03c000f,0x1e00078,0xf0003c0,0x78001e00,0x1f0f801f,0xe00780f0,0x3c0780,0x1e03c00,
  4070. 0xf01e000,0x78000780,0x1ffff8,0xf000f8,0x1f000780,0xf8003c07,0xc001e03e,0xf01f0,0x780f80,0x3c1f01e,0xf000,0x1e0000,0xf00000,
  4071. 0x7800000,0x3c000000,0x780000,0x3c00000,0x1e000000,0xf0001e00,0x7803c00,0x3c078001,0xe03c000f,0x1e00078,0xf0003c0,0x78001e00,
  4072. 0x1e,0x3c07803c,0x3c01e0,0x1e00f00,0xf007800,0x78007c7c,0x1e0007,0x801f1f00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4073. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x81c00000,0x303c0003,0x8039e003,0xef000000,
  4074. 0x3c00,0x1e00,0x0,0x1e0000,0x0,0x0,0x1e,0xf00,0x780001e,0xfc0,0x7,0x83fffffc,0x1e0,0x3c000f00,0x1e0001e,0x3c000,0x3c0000,
  4075. 0x0,0x7f,0xe01fffff,0xf00ffc00,0x3c000,0x781f00f0,0x7ffffc03,0xc000781e,0x1e0,0x7803c0,0x1e00,0x1e000,0x781e0007,0x80007800,
  4076. 0x780,0x3c01f000,0x7800001e,0xf078,0x7de01e0,0xf00780,0x7800,0x3c078003,0xc000000f,0xf000,0xf0003c0,0x3e7c001,0xee0ef001,
  4077. 0xf01e0000,0x7800003e,0x3c,0x3c,0x1e0,0x0,0x0,0x0,0xf0003c01,0xe000780f,0x1e0,0x780f00,0x3c,0x3c000,0xf0078007,0x80003c00,
  4078. 0xf000,0x781f000,0x1e0000f,0x3c0f01e,0x1e03c0,0xf00780,0x1e0f000,0x3c003c00,0x3e,0x3c000,0x3c003c0,0x3c3c001,0xe71cf000,0x7df00003,
  4079. 0xc780000f,0x8000003e,0xf0,0x780,0x0,0x0,0x3c00000,0x3fcff800,0x0,0x1e000000,0x0,0x18,0xc0,0x0,0x1f00fc,0x1e0,0x1e000001,
  4080. 0xe00f0003,0xfcff8003,0xe00000ff,0x3fe007f9,0xff000000,0x0,0x0,0x0,0x1ff000,0x0,0x0,0x0,0x0,0x7c00000,0xf0f0078,0x3fcff,0x8000f800,
  4081. 0x1e000,0x0,0x780001,0xe0180000,0xf000001f,0xffe00007,0x8000003c,0x7ff,0xc0000000,0x1c3ffc7,0x0,0x3e07c00,0x1e00,0xe3,0x80738000,
  4082. 0x0,0x78,0x0,0x0,0x0,0x3c003c0,0xe1c00,0x0,0x0,0x0,0x3e0,0x7c00001d,0xc0000001,0xe0000770,0x1f00000,0xfffff80,0x7ffffc03,
  4083. 0xffffe01f,0xffff00ff,0xfff807ff,0xffc07fff,0x8001e000,0x78000,0x3c0000,0x1e00000,0xf000000,0xf00000,0x7800000,0x3c000001,
  4084. 0xe0001e00,0x780f00f,0x3c03c001,0xe01e000f,0xf00078,0x78003c0,0x3c001e00,0x3e07c01f,0xc00780f0,0x3c0780,0x1e03c00,0xf01e000,
  4085. 0x78000780,0x1fffc0,0xf0007c,0x1e000780,0xf0003c07,0x8001e03c,0xf01e0,0x780f00,0x3c1e01e,0xf000,0x1e0000,0xf00000,0x7800000,
  4086. 0x3c000000,0x780000,0x3c00000,0x1e000000,0xf0001e00,0x7803c00,0x3c078001,0xe03c000f,0x1e00078,0xf0003c0,0x78001e00,0x1e,0x7807803c,
  4087. 0x3c01e0,0x1e00f00,0xf007800,0x78003c78,0x1e0007,0x800f1e00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4088. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x83c00000,0x303c0003,0x8039e001,0xee000000,0x1e00,0x3c00,
  4089. 0x0,0x1e0000,0x0,0x0,0x1e,0xf00,0x780001e,0x1f80,0x7,0x83fffffc,0x1e0,0x3c000f00,0x1e0001e,0x3c000,0x3c0000,0x0,0x1f,0xfc1fffff,
  4090. 0xf07ff000,0x0,0x780f00f0,0x78003c03,0xc000781e,0x1e0,0xf803c0,0x1e00,0x1e000,0x781e0007,0x80007800,0x780,0x3c00f800,0x7800001e,
  4091. 0xf078,0x3de01e0,0xf00780,0x7800,0x3c078003,0xe000000f,0xf000,0xf0003c0,0x1e78001,0xfe0ff003,0xe01f0000,0x7800007c,0x3c,0x3c,
  4092. 0x1e0,0x0,0x0,0x0,0xf0007c01,0xe000f80f,0x800001e0,0xf80f00,0x3c,0x1e001,0xf0078007,0x80003c00,0xf000,0x780f800,0x1e0000f,
  4093. 0x3c0f01e,0x1e03c0,0x1f00780,0x3e0f000,0x7c003c00,0x1e,0x3c000,0x3c003c0,0x3c3c001,0xe71cf000,0xf8f80003,0xe780001f,0x1e,
  4094. 0xf0,0x780,0x0,0x0,0x3c00000,0x1ffff000,0x0,0x1e000000,0x0,0x18,0xc0,0x0,0x3bc1de,0x1e0,0xf000001,0xe00f0001,0xffff0007,0xc000007f,
  4095. 0xffc003ff,0xfe000000,0x0,0x0,0x0,0xfe000,0x0,0x0,0x0,0x0,0x3c00000,0x1e0f0078,0x1ffff,0x1f000,0x1e000,0x0,0x780000,0xf0180000,
  4096. 0xf000001f,0xfff00007,0x8000003c,0x1ff,0x80000000,0xe0ff0e,0x0,0x1f03e00,0x1e00,0x70,0x70000,0x0,0x78,0x0,0x0,0x0,0x3c003c0,
  4097. 0xe1c00,0x0,0x0,0x0,0x7c0,0xf8000019,0xc0000000,0xe0000670,0x1e00000,0xf000780,0x78003c03,0xc001e01e,0xf00f0,0x780780,0x3c0f807,
  4098. 0x8001e000,0x78000,0x3c0000,0x1e00000,0xf000000,0xf00000,0x7800000,0x3c000001,0xe0001e00,0xf80f007,0xbc03c001,0xe01e000f,
  4099. 0xf00078,0x78003c0,0x3c001e00,0x7c03e00f,0x800780f0,0x3c0780,0x1e03c00,0xf01e000,0x78000780,0x1e0000,0xf0003c,0x1e000f80,
  4100. 0xf0007c07,0x8003e03c,0x1f01e0,0xf80f00,0x7c1e01e,0xf800,0x1e0000,0xf00000,0x7800000,0x3c000000,0x780000,0x3c00000,0x1e000000,
  4101. 0xf0001e00,0x7803c00,0x3c078003,0xe03c001f,0x1e000f8,0xf0007c0,0x78003e00,0x1f8001f,0xf00f803c,0x3c01e0,0x1e00f00,0xf007800,
  4102. 0x78003e78,0x1e000f,0x800f9e00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4103. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf,0x3c00000,0x303c0003,0x8039f001,0xfe000000,0x1e00,0x3c00,0x0,0x1e0000,0x0,0x0,0x3c,0xf00,
  4104. 0x780001e,0x3f00,0x7,0x80000780,0x3e0,0x3e000f00,0x3c0001e,0x3c000,0x7c0000,0x0,0x3,0xfe000000,0xff8000,0x0,0x3c0f81f0,0xf0001e03,
  4105. 0xc000780f,0x1e0,0xf003c0,0x1e00,0xf000,0x781e0007,0x80007800,0x780,0x3c007c00,0x7800001e,0xf078,0x3de01e0,0xf00780,0x7800,
  4106. 0x3c078001,0xe000000f,0xf000,0xf0003c0,0x1e78001,0xfc07f003,0xe00f0000,0x78000078,0x3c,0x1e,0x1e0,0x0,0x0,0x0,0xf0007c01,
  4107. 0xf000f007,0x800000f0,0xf80780,0x3c,0x1e001,0xf0078007,0x80003c00,0xf000,0x7807c00,0x1e0000f,0x3c0f01e,0x1e01e0,0x1e007c0,
  4108. 0x3c07800,0x7c003c00,0x1e,0x3c000,0x3c007c0,0x1e78001,0xe71df000,0xf8f80001,0xef80003e,0x1e,0xf0,0x780,0x0,0x0,0x3c00000,
  4109. 0xfffe000,0x0,0x3e000000,0x0,0x18,0x7fff,0xc0000000,0x60c306,0x1e0,0x7800001,0xe00f0000,0xfffe0007,0x8000003f,0xff8001ff,
  4110. 0xfc000000,0x0,0x0,0x0,0x7c000,0x0,0x0,0x0,0x0,0x3c00000,0x3c0f0078,0xfffe,0x3e000,0x1e000,0x0,0x780000,0xf0180000,0xf000003c,
  4111. 0xfcf80007,0x8000003c,0x7f,0x0,0x70001c,0x0,0xf81f00,0x0,0x38,0xe0000,0x0,0x0,0x0,0x0,0x0,0x3c003c0,0xe1c00,0x0,0x0,0x0,0xf81,
  4112. 0xf0000039,0xc0000000,0xe0000e70,0x1e00000,0x1e0003c0,0xf0001e07,0x8000f03c,0x781e0,0x3c0f00,0x1e0f007,0x8000f000,0x78000,
  4113. 0x3c0000,0x1e00000,0xf000000,0xf00000,0x7800000,0x3c000001,0xe0001e00,0xf00f007,0xbc03c001,0xe01e000f,0xf00078,0x78003c0,
  4114. 0x3c001e00,0xf801f00f,0x800780f0,0x3c0780,0x1e03c00,0xf01e000,0x78000780,0x1e0000,0xf0003c,0x1e000f80,0xf0007c07,0x8003e03c,
  4115. 0x1f01e0,0xf80f00,0x7c1e01e,0x7800,0xf0000,0x780000,0x3c00000,0x1e000000,0x780000,0x3c00000,0x1e000000,0xf0000f00,0xf003c00,
  4116. 0x3c03c003,0xc01e001e,0xf000f0,0x7800780,0x3c003c00,0x1f8000f,0xe00f003c,0x7c01e0,0x3e00f00,0x1f007800,0xf8001ef8,0x1f000f,
  4117. 0x7be00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4118. 0x0,0x0,0xf,0x3c00000,0x307c0003,0x8038f000,0xfc000000,0x1e00,0x3c00,0x0,0x1e0000,0xfc0000,0x0,0x7e00003c,0x780,0xf00001e,
  4119. 0x7e00,0xf,0x80000780,0x3c0,0x3e001e00,0x3c0001f,0x7c000,0x780007,0xe000003f,0x0,0xfe000000,0xfe0000,0x0,0x3c07c3f0,0xf0001e03,
  4120. 0xc000f80f,0x800001e0,0x1f003c0,0x1e00,0xf000,0x781e0007,0x80007800,0x4000f80,0x3c003c00,0x7800001e,0xf078,0x1fe01f0,0x1f00780,
  4121. 0x7c00,0x7c078001,0xf000001f,0xf000,0xf0003c0,0x1e78001,0xfc07f007,0xc00f8000,0x780000f8,0x3c,0x1e,0x1e0,0x0,0x0,0x0,0xf0007c01,
  4122. 0xf000f007,0xc00000f0,0xf80780,0x3c,0x1f003,0xf0078007,0x80003c00,0xf000,0x7807c00,0x1e0000f,0x3c0f01e,0x1e01e0,0x1e007c0,
  4123. 0x3c07800,0x7c003c00,0x1e,0x3c000,0x3c007c0,0x1e78000,0xfe0fe001,0xf07c0001,0xef00007c,0x1e,0xf0,0x780,0x0,0x0,0x1e00000,
  4124. 0x7cfc000,0xfc00000,0x3c00000f,0xc3f00000,0x18,0x7fff,0xc0000000,0x406303,0x3e0,0x3c00001,0xf00f0000,0x7cfc000f,0x8000001f,
  4125. 0x3f0000f9,0xf8000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c00000,0x780700f8,0x7cfc,0x7c000,0x1e000,0x0,0x780000,0xf8180000,
  4126. 0xf0000070,0x3c0007,0x8000003c,0x3f,0x80000000,0x3c0078,0x0,0x780f00,0x0,0x1e,0x3c0000,0x0,0x0,0x0,0x0,0x0,0x3e007c0,0xe1c00,
  4127. 0x0,0x0,0x0,0xf01,0xe0000071,0xc0000000,0xe0001c70,0x1e00000,0x1e0003c0,0xf0001e07,0x8000f03c,0x781e0,0x3c0f00,0x1e0f007,
  4128. 0x8000f800,0x78000,0x3c0000,0x1e00000,0xf000000,0xf00000,0x7800000,0x3c000001,0xe0001e00,0x1f00f003,0xfc03e003,0xe01f001f,
  4129. 0xf800f8,0x7c007c0,0x3e003e01,0xf000f80f,0xf00f0,0x3c0780,0x1e03c00,0xf01e000,0x78000780,0x1e0000,0xf0003c,0x1e000f80,0xf0007c07,
  4130. 0x8003e03c,0x1f01e0,0xf80f00,0x7c1e01e,0x7c00,0xf0000,0x780000,0x3c00000,0x1e000000,0x780000,0x3c00000,0x1e000000,0xf0000f00,
  4131. 0xf003c00,0x3c03c003,0xc01e001e,0xf000f0,0x7800780,0x3c003c00,0x1f8000f,0xc00f003c,0x7c01e0,0x3e00f00,0x1f007800,0xf8001ef0,
  4132. 0x1f000f,0x7bc00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4133. 0x0,0x0,0x0,0x0,0x780000,0xf,0x3800040,0x30780003,0x8038f800,0x78000000,0x1e00,0x3c00,0x0,0x1e0000,0xfc0000,0x0,0x7e000078,
  4134. 0x780,0x1f00001e,0xfc00,0x20001f,0x780,0x80007c0,0x1f001e00,0x7c0000f,0x78000,0xf80007,0xe000003f,0x0,0x1e000000,0xf00000,
  4135. 0x3c000,0x3c03fff0,0xf0001e03,0xc001f007,0x800101e0,0x7e003c0,0x1e00,0x7800,0x781e0007,0x80007800,0x6000f00,0x3c003e00,0x7800001e,
  4136. 0xf078,0x1fe00f0,0x1e00780,0x3c00,0x78078000,0xf020001e,0xf000,0x7800780,0xff0001,0xfc07f00f,0x8007c000,0x780001f0,0x3c,0xf,
  4137. 0x1e0,0x0,0x0,0x0,0xf800fc01,0xf801f007,0xc00100f8,0x1f807c0,0x40003c,0xf807,0xf0078007,0x80003c00,0xf000,0x7803e00,0x1f0000f,
  4138. 0x3c0f01e,0x1e01f0,0x3e007e0,0x7c07c00,0xfc003c00,0x1e,0x3e000,0x3e007c0,0x1ff8000,0xfe0fe003,0xe03e0001,0xff0000fc,0x1e,
  4139. 0xf0,0x780,0x0,0x0,0x1f00080,0x3cf8000,0xfc00000,0x3c00001f,0x83f00000,0x18,0xc0,0x0,0xc06203,0x40003c0,0x1c00000,0xf80f0000,
  4140. 0x3cf8001f,0xf,0x3e000079,0xf0000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c00000,0x700780fc,0x3cf8,0xfc000,0x1e000,0x0,0x780000,
  4141. 0x7c180000,0xf0000020,0x100007,0x8000003c,0xf,0x80000000,0x1f01f0,0x0,0x380700,0x0,0xf,0x80f80000,0x0,0x0,0x0,0x0,0x0,0x3e007c0,
  4142. 0xe1c00,0x0,0x0,0x0,0xe01,0xc0000071,0xc0000001,0xc0001c70,0x1e00040,0x1e0003c0,0xf0001e07,0x8000f03c,0x781e0,0x3c0f00,0x1e0f007,
  4143. 0x80007800,0x10078000,0x3c0000,0x1e00000,0xf000000,0xf00000,0x7800000,0x3c000001,0xe0001e00,0x7e00f003,0xfc01e003,0xc00f001e,
  4144. 0x7800f0,0x3c00780,0x1e003c00,0xe000700f,0x800f0078,0x7803c0,0x3c01e00,0x1e00f000,0xf0000780,0x1e0000,0xf0003c,0x1f001f80,
  4145. 0xf800fc07,0xc007e03e,0x3f01f0,0x1f80f80,0xfc1e01f,0x7c00,0x100f8000,0x807c0004,0x3e00020,0x1f000100,0x780000,0x3c00000,0x1e000000,
  4146. 0xf0000f80,0x1f003c00,0x3c03e007,0xc01f003e,0xf801f0,0x7c00f80,0x3e007c00,0x1f8000f,0x801f003e,0x7c01f0,0x3e00f80,0x1f007c00,
  4147. 0xf8001ff0,0x1f801f,0x7fc00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4148. 0x0,0x0,0x0,0x0,0x0,0x0,0x780000,0xf,0x7800078,0x31f80001,0xc070fc00,0xfc000000,0x1e00,0x7c00,0x0,0x1e0000,0xfc0000,0x0,0x7e000078,
  4149. 0x7c0,0x1f00001e,0x1f000,0x38003f,0x780,0xe000f80,0x1f803e00,0x780000f,0x800f8000,0x1f00007,0xe000003f,0x0,0x2000000,0x800000,
  4150. 0x3c000,0x3e01ff71,0xf0001f03,0xc007f007,0xc00301e0,0x1fc003c0,0x1e00,0x7c00,0x781e0007,0x80007800,0x7801f00,0x3c001f00,0x7800001e,
  4151. 0xf078,0xfe00f8,0x3e00780,0x3e00,0xf8078000,0xf838003e,0xf000,0x7c00f80,0xff0000,0xfc07e00f,0x8003c000,0x780001e0,0x3c,0xf,
  4152. 0x1e0,0x0,0x0,0x0,0xf801fc01,0xfc03e003,0xe003007c,0x3f803e0,0x1c0003c,0xfc0f,0xf0078007,0x80003c00,0xf000,0x7801f00,0xf8000f,
  4153. 0x3c0f01e,0x1e00f8,0x7c007f0,0xf803e01,0xfc003c00,0x8003e,0x1f000,0x1e00fc0,0xff0000,0xfe0fe007,0xc01f0000,0xfe0000f8,0x1e,
  4154. 0xf0,0x780,0x0,0x0,0xf80180,0x1cf0000,0x1f800000,0x3c00001f,0x83e00000,0x18,0xc0,0x0,0xc06203,0x70007c0,0xe00000,0x7e0f0000,
  4155. 0x1cf0001e,0x7,0x3c000039,0xe0000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x100,0x7c00000,0xe00780fc,0x2001cf0,0xf8000,0x1e000,0x0,
  4156. 0x780000,0x7e182000,0xf0000000,0x7,0x8000003c,0x7,0xc0000000,0x7ffc0,0x0,0x180300,0x0,0x3,0xffe00000,0x0,0x0,0x0,0x0,0x0,
  4157. 0x3f00fc0,0xe1c00,0x0,0x0,0x0,0xc01,0x800000e1,0xc0000003,0xc0003870,0x1f001c0,0x3e0003e1,0xf0001f0f,0x8000f87c,0x7c3e0,0x3e1f00,
  4158. 0x1f1e007,0x80007c00,0x30078000,0x3c0000,0x1e00000,0xf000000,0xf00000,0x7800000,0x3c000001,0xe0001e03,0xfc00f001,0xfc01f007,
  4159. 0xc00f803e,0x7c01f0,0x3e00f80,0x1f007c00,0x4000201f,0xc01f007c,0xf803e0,0x7c01f00,0x3e00f801,0xf0000780,0x1e0000,0xf0007c,
  4160. 0x1f003f80,0xf801fc07,0xc00fe03e,0x7f01f0,0x3f80f80,0x1fc1f03f,0x803e00,0x3007c003,0x803e001c,0x1f000e0,0xf800700,0x780000,
  4161. 0x3c00000,0x1e000000,0xf00007c0,0x3e003c00,0x3c01f00f,0x800f807c,0x7c03e0,0x3e01f00,0x1f00f800,0x1f80007,0xc03e001e,0xfc00f0,
  4162. 0x7e00780,0x3f003c01,0xf8000fe0,0x1fc03e,0x3f800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4163. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x780000,0x1e,0x780007f,0xfff00001,0xe0f07f03,0xfe000000,0xf00,0x7800,0x0,
  4164. 0x1e0000,0xfc0000,0x0,0x7e0000f0,0x3f0,0x7e000fff,0xfc03ffff,0xf83f00fe,0x780,0xfc03f80,0xfc0fc00,0xf800007,0xe03f0018,0x7e00007,
  4165. 0xe000003f,0x0,0x0,0x0,0x3c000,0x1e007c71,0xe0000f03,0xffffe003,0xf01f01ff,0xff8003ff,0xffe01e00,0x3f01,0xf81e0007,0x803ffff0,
  4166. 0x7e03f00,0x3c000f00,0x7ffffe1e,0xf078,0xfe007e,0xfc00780,0x1f83,0xf0078000,0x783f00fe,0xf000,0x3f03f00,0xff0000,0xfc07e01f,
  4167. 0x3e000,0x780003ff,0xfffc003c,0x7,0x800001e0,0x0,0x0,0x0,0x7e07fc01,0xfe07e001,0xf80f007e,0x7f801f8,0xfc0003c,0x7ffe,0xf0078007,
  4168. 0x807ffffe,0xf000,0x7801f00,0xfff00f,0x3c0f01e,0x1e00fc,0xfc007f8,0x1f803f03,0xfc003c00,0xf80fc,0x1fff0,0x1f83fc0,0xff0000,
  4169. 0xfc07e007,0xc01f0000,0xfe0001ff,0xffe0001e,0xf0,0x780,0x0,0x0,0xfe0780,0xfe0000,0x1f000000,0x3c00001f,0x7c00e03,0x81c00018,
  4170. 0xc0,0x0,0x406203,0x7e01fc0,0x700000,0x7fffff80,0xfe0003f,0xffffc003,0xf800001f,0xc0000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1f0,
  4171. 0x1f800001,0xc007c1fe,0x6000fe0,0x1ffffe,0x1e000,0x0,0x780000,0x3f98e03f,0xffff8000,0x7,0x8000003c,0x7,0xc0000000,0xfe00,
  4172. 0x0,0x80100,0x0,0x0,0x7f000000,0x0,0x1ffff,0xfe000000,0x0,0x0,0x3f83fe8,0xe1c00,0x0,0x0,0x0,0x801,0xc1,0xc0000007,0x80003070,
  4173. 0xfc0fc0,0x3c0001e1,0xe0000f0f,0x7878,0x3c3c0,0x1e1e00,0xf1e007,0xffc03f01,0xf007ffff,0xc03ffffe,0x1fffff0,0xfffff80,0x7fffe003,
  4174. 0xffff001f,0xfff800ff,0xffc01fff,0xf800f001,0xfc00fc1f,0x8007e0fc,0x3f07e0,0x1f83f00,0xfc1f800,0x1f,0xf07e003f,0x3f001f8,
  4175. 0x1f800fc0,0xfc007e07,0xe0000780,0x1e0000,0xf301f8,0xfc0ff80,0x7e07fc03,0xf03fe01f,0x81ff00fc,0xff807e0,0x7fc0f87f,0x81801f80,
  4176. 0xf003f01f,0x801f80fc,0xfc07e0,0x7e03f00,0xfffffc07,0xffffe03f,0xffff01ff,0xfff807e0,0x7e003c00,0x3c01f81f,0x800fc0fc,0x7e07e0,
  4177. 0x3f03f00,0x1f81f800,0x1f8000f,0xe07e001f,0x83fc00fc,0x1fe007e0,0xff003f07,0xf8000fe0,0x1fe07e,0x3f800,0x0,0x0,0x0,0x0,0x0,
  4178. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x780000,0x1e,0x780007f,
  4179. 0xffe00000,0xffe03fff,0xdf000000,0xf00,0x7800,0x0,0x0,0xfc0000,0x0,0x7e0000f0,0x1ff,0xfc000fff,0xfc03ffff,0xf83ffffc,0x780,
  4180. 0xfffff00,0x7fff800,0xf000007,0xffff001f,0xffe00007,0xe000003f,0x0,0x0,0x0,0x3c000,0x1e000001,0xe0000f03,0xffffc001,0xffff01ff,
  4181. 0xff0003ff,0xffe01e00,0x1fff,0xf81e0007,0x803ffff0,0x7fffe00,0x3c000f80,0x7ffffe1e,0xf078,0xfe003f,0xff800780,0xfff,0xf0078000,
  4182. 0x7c3ffffc,0xf000,0x3ffff00,0xff0000,0xf803e01e,0x1e000,0x780003ff,0xfffc003c,0x7,0x800001e0,0x0,0x0,0x0,0x7fffbc01,0xffffc000,
  4183. 0xffff003f,0xfff800ff,0xffc0003c,0x3ffe,0xf0078007,0x807ffffe,0xf000,0x7800f80,0x7ff00f,0x3c0f01e,0x1e007f,0xff8007ff,0xff001fff,
  4184. 0xbc003c00,0xffffc,0x1fff0,0x1fffbc0,0xff0000,0x7c07c00f,0x800f8000,0x7e0001ff,0xffe0001e,0xf0,0x780,0x0,0x0,0x7fff80,0x7c0000,
  4185. 0x1f000000,0x3c00001e,0x7c00f07,0xc1e00018,0xc0,0x0,0x60e303,0x7ffff80,0x380000,0x3fffff80,0x7c0003f,0xffffc001,0xf000000f,
  4186. 0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1ff,0xff800003,0x8003ffff,0xfe0007c0,0x1ffffe,0x1e000,0x0,0x780000,0x1fffe03f,0xffff8000,
  4187. 0x7,0x8000003c,0x3,0xc0000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1ffff,0xfe000000,0x0,0x0,0x3fffdf8,0xe1c00,0x0,0x0,0x0,0x0,0x1c1,
  4188. 0xc000000f,0x7070,0x7fffc0,0x3c0001e1,0xe0000f0f,0x7878,0x3c3c0,0x1e1e00,0xf1e007,0xffc01fff,0xf007ffff,0xc03ffffe,0x1fffff0,
  4189. 0xfffff80,0x7fffe003,0xffff001f,0xfff800ff,0xffc01fff,0xf000f001,0xfc007fff,0x3fff8,0x1fffc0,0xfffe00,0x7fff000,0x3b,0xfffc003f,
  4190. 0xfff001ff,0xff800fff,0xfc007fff,0xe0000780,0x1e0000,0xf3fff8,0xffff780,0x7fffbc03,0xfffde01f,0xffef00ff,0xff7807ff,0xfbc0ffff,
  4191. 0xff800fff,0xf001ffff,0x800ffffc,0x7fffe0,0x3ffff00,0xfffffc07,0xffffe03f,0xffff01ff,0xfff803ff,0xfc003c00,0x3c00ffff,0x7fff8,
  4192. 0x3fffc0,0x1fffe00,0xffff000,0x1f,0xfffc001f,0xffbc00ff,0xfde007ff,0xef003fff,0x780007e0,0x1ffffc,0x1f800,0x0,0x0,0x0,0x0,
  4193. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x780000,0x1e,0x700003f,
  4194. 0xffc00000,0x7fc01fff,0x9f800000,0xf80,0xf800,0x0,0x0,0xfc0000,0x0,0x7e0000f0,0xff,0xf8000fff,0xfc03ffff,0xf83ffff8,0x780,
  4195. 0xffffe00,0x7fff000,0xf000003,0xfffe001f,0xffc00007,0xe000003f,0x0,0x0,0x0,0x3c000,0xf000003,0xe0000f83,0xffff0000,0xffff01ff,
  4196. 0xfc0003ff,0xffe01e00,0xfff,0xf01e0007,0x803ffff0,0x7fffc00,0x3c0007c0,0x7ffffe1e,0xf078,0x7e003f,0xff000780,0x7ff,0xe0078000,
  4197. 0x3c3ffff8,0xf000,0x1fffe00,0x7e0000,0xf803e03e,0x1f000,0x780003ff,0xfffc003c,0x7,0x800001e0,0x0,0x0,0x0,0x3fff3c01,0xefff8000,
  4198. 0x7ffe001f,0xff78007f,0xff80003c,0x1ffc,0xf0078007,0x807ffffe,0xf000,0x78007c0,0x3ff00f,0x3c0f01e,0x1e003f,0xff0007bf,0xfe000fff,
  4199. 0xbc003c00,0xffff8,0xfff0,0xfff3c0,0x7e0000,0x7c07c01f,0x7c000,0x7c0001ff,0xffe0001e,0xf0,0x780,0x0,0x0,0x3fff80,0x380000,
  4200. 0x3e000000,0x7c00003e,0x7801f07,0xc1e00018,0xc0,0x0,0x39c1ce,0x7ffff00,0x1c0000,0xfffff80,0x380003f,0xffffc000,0xe0000007,
  4201. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1ff,0xff000007,0x1ffcf,0xfe000380,0x1ffffe,0x1e000,0x0,0x780000,0xfffe03f,0xffff8000,0x7,
  4202. 0x8000003c,0x3,0xc0000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1ffff,0xfe000000,0x0,0x0,0x3dffdf8,0xe1c00,0x0,0x0,0x0,0x0,0x381,
  4203. 0xc000001e,0xe070,0x7fff80,0x7c0001f3,0xe0000f9f,0x7cf8,0x3e7c0,0x1f3e00,0xfbe007,0xffc00fff,0xf007ffff,0xc03ffffe,0x1fffff0,
  4204. 0xfffff80,0x7fffe003,0xffff001f,0xfff800ff,0xffc01fff,0xc000f000,0xfc007ffe,0x3fff0,0x1fff80,0xfffc00,0x7ffe000,0x79,0xfff8001f,
  4205. 0xffe000ff,0xff0007ff,0xf8003fff,0xc0000780,0x1e0000,0xf3fff0,0x7ffe780,0x3fff3c01,0xfff9e00f,0xffcf007f,0xfe7803ff,0xf3c07ff3,
  4206. 0xff8007ff,0xe000ffff,0x7fff8,0x3fffc0,0x1fffe00,0xfffffc07,0xffffe03f,0xffff01ff,0xfff801ff,0xf8003c00,0x3c007ffe,0x3fff0,
  4207. 0x1fff80,0xfffc00,0x7ffe000,0x1d,0xfff8000f,0xff3c007f,0xf9e003ff,0xcf001ffe,0x780007c0,0x1efff8,0x1f000,0x0,0x0,0x0,0x0,
  4208. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x780000,0x1e,0xf000003,
  4209. 0xfe000000,0x1f000fff,0xfc00000,0x780,0xf000,0x0,0x0,0xf80000,0x0,0x7e0001e0,0x7f,0xf0000fff,0xfc03ffff,0xf81ffff0,0x780,
  4210. 0x7fff800,0x1ffe000,0x1f000000,0xfff8001f,0xff000007,0xe000003e,0x0,0x0,0x0,0x3c000,0xf800003,0xc0000783,0xfff80000,0x3ffe01ff,
  4211. 0xe00003ff,0xffe01e00,0x7ff,0xc01e0007,0x803ffff0,0x3fff800,0x3c0003c0,0x7ffffe1e,0xf078,0x7e000f,0xfe000780,0x3ff,0xc0078000,
  4212. 0x3e1fffe0,0xf000,0x7ff800,0x7e0000,0xf803e07c,0xf800,0x780003ff,0xfffc003c,0x3,0xc00001e0,0x0,0x0,0x0,0xffe3c01,0xe7ff0000,
  4213. 0x3ffc000f,0xfe78003f,0xfe00003c,0x7f0,0xf0078007,0x807ffffe,0xf000,0x78003e0,0xff00f,0x3c0f01e,0x1e001f,0xfe00079f,0xfc0007ff,
  4214. 0x3c003c00,0x7ffe0,0x1ff0,0x7fe3c0,0x7e0000,0x7c07c03e,0x3e000,0x7c0001ff,0xffe0001e,0xf0,0x780,0x0,0x0,0xfff00,0x100000,
  4215. 0x3e000000,0x7800003c,0xf800f07,0xc1e00018,0xc0,0x0,0x1f80fc,0x3fffc00,0xc0000,0x3ffff80,0x100003f,0xffffc000,0x40000002,
  4216. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xfc000006,0xff87,0xfc000100,0x1ffffe,0x1e000,0x0,0x780000,0x3ffc03f,0xffff8000,0x7,
  4217. 0x8000003c,0x3,0xc0000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1ffff,0xfe000000,0x0,0x0,0x3dff9f8,0xe1c00,0x0,0x0,0x0,0x0,0x3ff,
  4218. 0xf800003c,0xfffe,0x1ffe00,0x780000f3,0xc000079e,0x3cf0,0x1e780,0xf3c00,0x7bc007,0xffc003ff,0xe007ffff,0xc03ffffe,0x1fffff0,
  4219. 0xfffff80,0x7fffe003,0xffff001f,0xfff800ff,0xffc01ffc,0xf000,0xfc001ffc,0xffe0,0x7ff00,0x3ff800,0x1ffc000,0x70,0xfff00007,
  4220. 0xff80003f,0xfc0001ff,0xe0000fff,0x780,0x1e0000,0xf3ffe0,0x1ffc780,0xffe3c00,0x7ff1e003,0xff8f001f,0xfc7800ff,0xe3c03fe1,
  4221. 0xff0003ff,0xc0007ffc,0x3ffe0,0x1fff00,0xfff800,0xfffffc07,0xffffe03f,0xffff01ff,0xfff800ff,0xf0003c00,0x3c003ffc,0x1ffe0,
  4222. 0xfff00,0x7ff800,0x3ffc000,0x38,0xfff00007,0xfe3c003f,0xf1e001ff,0x8f000ffc,0x780007c0,0x1e7ff0,0x1f000,0x0,0x0,0x0,0x0,0x0,
  4223. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30000000,
  4224. 0x1fc,0x0,0x780,0xf000,0x0,0x0,0x1f80000,0x0,0x1e0,0x1f,0xc0000000,0x0,0x1ff80,0x0,0xffc000,0x7f8000,0x0,0x3fe00007,0xfc000000,
  4225. 0x7e,0x0,0x0,0x0,0x0,0x7c00000,0x0,0x0,0xff00000,0x0,0x0,0xfe,0x0,0x0,0x3fc000,0x0,0x0,0x0,0x3,0xf8000000,0xff,0xc0000000,
  4226. 0x1ff00,0x0,0x1fe000,0x0,0x0,0x0,0x0,0x3c,0x3,0xc00001e0,0x0,0x0,0x0,0x3f80000,0x1fc0000,0x7f00003,0xf8000007,0xf0000000,
  4227. 0x0,0xf0000000,0x0,0xf000,0x0,0x0,0x0,0x7,0xf8000787,0xf00001fc,0x3c000000,0x7f80,0x0,0x1f8000,0x0,0x0,0x0,0x7c000000,0x1e,
  4228. 0xf0,0x780,0x0,0x0,0x3fc00,0x0,0x3c000000,0x7800003c,0xf000601,0xc00018,0xc0,0x0,0x0,0x3fe000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4229. 0x0,0x0,0x0,0x0,0x0,0x0,0xf,0xf0000000,0x7e03,0xf0000000,0x0,0x0,0x0,0x0,0xfe0000,0x0,0x0,0x3c,0x2007,0x80000000,0x0,0x0,
  4230. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c7e0f0,0xe1c00,0x0,0x3800000,0x0,0x0,0x3ff,0xf8000078,0xfffe,0x7f800,0x0,0x0,0x0,0x0,
  4231. 0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7f0,0x3f80,0x1fc00,0xfe000,0x7f0000,0x70,0x3fc00001,0xfe00000f,0xf000007f,
  4232. 0x800003fc,0x0,0x0,0xff00,0x7f0000,0x3f80000,0x1fc00000,0xfe000007,0xf000003f,0x80001f80,0xfc00007f,0xfe0,0x7f00,0x3f800,
  4233. 0x1fc000,0x0,0x0,0x0,0x3f,0xc0000000,0xff0,0x7f80,0x3fc00,0x1fe000,0xff0000,0x78,0x3fc00001,0xf800000f,0xc000007e,0x3f0,0x7c0,
  4234. 0x1e1fc0,0x1f000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4235. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30000000,0x0,0x0,0x3c0,0x1e000,0x0,0x0,0x1f00000,0x0,0x3c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4236. 0x0,0x0,0x7c,0x0,0x0,0x0,0x0,0x3e00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0xe0000000,0x0,0x0,0x0,
  4237. 0x0,0x0,0x0,0x0,0x3c,0x1,0xe00001e0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0000000,0x0,0xf000,0x0,0x0,0x0,0x0,0x780,0x0,0x3c000000,
  4238. 0x0,0x0,0x0,0x0,0x0,0x0,0x78000000,0x1e,0xf0,0x780,0x0,0x0,0x0,0x0,0x3c000000,0x78000078,0xf000000,0x18,0xc0,0x0,0x0,0x0,
  4239. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x180000,0x0,0x0,0x3c,0x3c0f,0x80000000,
  4240. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c00000,0xe1c00,0x0,0x1800000,0x0,0x0,0x3ff,0xf80000f0,0xfffe,0x0,0x0,0x0,0x0,
  4241. 0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4242. 0x0,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0x0,0x0,0x0,0x0,0x780,0x1e0000,0x1e000,0x0,0x0,0x0,
  4243. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30000000,
  4244. 0x0,0x0,0x3c0,0x1e000,0x0,0x0,0x1f00000,0x0,0x3c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7c,0x0,0x0,0x0,0x0,0x1f80000,
  4245. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0xf0000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c,0x1,0xe00001e0,0x0,
  4246. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xe0000000,0x0,0xf000,0x0,0x0,0x0,0x0,0x780,0x0,0x3c000000,0x0,0x0,0x0,0x0,0x0,0x0,0xf8000000,
  4247. 0x1f,0xf0,0xf80,0x0,0x0,0x0,0x0,0x78000000,0xf8000078,0x1e000000,0x8,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4248. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x180000,0x0,0x0,0x3c,0x3fff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4249. 0x0,0x3c00000,0xe1c00,0x0,0x1c00000,0x0,0x0,0x1,0xc00001e0,0x70,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4250. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4251. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf80,0x1e0000,0x3e000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4252. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30000000,0x0,0x0,0x1e0,0x3c000,0x0,0x0,0x1f00000,
  4253. 0x0,0x780,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7c,0x0,0x0,0x0,0x0,0xfe0100,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4254. 0x0,0x0,0x0,0x0,0xf8000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3f,0xf0000000,0xf0007fe0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xe0000000,
  4255. 0x0,0xf000,0x0,0x0,0x0,0x0,0x780,0x0,0x3c000000,0x0,0x0,0x0,0x0,0x0,0x0,0xf0000000,0x1f,0x800000f0,0x1f80,0x0,0x0,0x0,0x0,
  4256. 0x78000000,0xf0000070,0x1c000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4257. 0x0,0x0,0x0,0x0,0x180000,0x0,0x0,0x3c,0x3ffe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c00000,0xe1c00,0x0,0xe00000,
  4258. 0x0,0x0,0x1,0xc00003ff,0xe0000070,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4259. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4260. 0x0,0x0,0x0,0xf00,0x1e0000,0x3c000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4261. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30000000,0x0,0x0,0x1e0,0x7c000,0x0,0x0,0x1e00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4262. 0x0,0x0,0x0,0x0,0x0,0x78,0x0,0x0,0x0,0x0,0x7fff80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x78000000,
  4263. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3f,0xf0000000,0x7fe0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4003,0xe0000000,0x0,0x1f000,0x0,0x0,
  4264. 0x0,0x0,0x780,0x0,0x3c000000,0x0,0x0,0x0,0x0,0x0,0x1,0xf0000000,0xf,0xfc0000f0,0x3ff00,0x0,0x0,0x0,0x0,0x70000001,0xf00000e0,
  4265. 0x1c000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x180000,
  4266. 0x0,0x0,0x3c,0xff8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c00000,0xe1c00,0x0,0xe00000,0x0,0x0,0x1,0xc00003ff,
  4267. 0xe0000070,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4268. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1f00,0x1e0000,
  4269. 0x7c000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4270. 0x0,0x0,0x0,0x0,0x30000000,0x0,0x0,0xf0,0x78000,0x0,0x0,0x3e00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf8,0x0,
  4271. 0x0,0x0,0x0,0x1fff80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3f,
  4272. 0xf0000000,0x7fe0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x780f,0xc0000000,0x0,0x3e000,0x0,0x0,0x0,0x0,0x780,0x0,0x3c000000,0x0,
  4273. 0x0,0x0,0x0,0x0,0x3,0xe0000000,0xf,0xfc0000f0,0x3ff00,0x0,0x0,0x0,0x0,0xf0000103,0xe0000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4274. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x180000,0x0,0x0,0x3c,0x0,0x0,0x0,0x0,0x0,0x0,
  4275. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c00000,0x0,0x0,0x21e00000,0x0,0x0,0x1,0xc00003ff,0xe0000070,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10f,
  4276. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10f,0x0,
  4277. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3e00,0x1e0000,0xf8000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4278. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30000000,0x0,0x0,
  4279. 0xf8,0xf8000,0x0,0x0,0x3c00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x0,0x0,0x0,0x0,0x1fe00,0x0,0x0,0x0,0x0,
  4280. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3f,0xf0000000,0x7fe0,0x0,0x0,0x0,0x0,0x0,0x0,
  4281. 0x0,0x0,0x7fff,0xc0000000,0x0,0x3ffe000,0x0,0x0,0x0,0x0,0x780,0x0,0x3c000000,0x0,0x0,0x0,0x0,0x0,0x7f,0xe0000000,0x7,0xfc0000f0,
  4282. 0x3fe00,0x0,0x0,0x0,0x0,0x600001ff,0xe0000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4283. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x180000,0x0,0x0,0x3c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c00000,0x0,0x0,
  4284. 0x3fe00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1ff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4285. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1ff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4286. 0x0,0x0,0x0,0x0,0x7fe00,0x1e0000,0x1ff8000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4287. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4288. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4289. 0x0,0x0,0x0,0x0,0x1fffffe0,0x0,0x0,0x0,0x0,0x0,0x0,0x7fff,0x80000000,0x0,0x3ffc000,0x0,0x0,0x0,0x0,0x780,0x0,0x3c000000,0x0,
  4290. 0x0,0x0,0x0,0x0,0x7f,0xc0000000,0x0,0xfc0000f0,0x3f000,0x0,0x0,0x0,0x0,0x1ff,0xc0000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4291. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4292. 0x0,0x0,0x0,0x0,0x0,0x3c00000,0x0,0x0,0x3fc00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1fe,0x0,0x0,0x0,0x0,0x0,
  4293. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1fe,0x0,0x0,0x0,0x0,0x0,0x0,
  4294. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7fc00,0x1e0000,0x1ff0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4295. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4296. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4297. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1fffffe0,0x0,0x0,0x0,0x0,0x0,0x0,0x3ffe,0x0,0x0,0x3ff8000,0x0,0x0,0x0,
  4298. 0x0,0x780,0x0,0x3c000000,0x0,0x0,0x0,0x0,0x0,0x7f,0x80000000,0x0,0xf0,0x0,0x0,0x0,0x0,0x0,0x1ff,0x80000000,0x0,0x0,0x0,0x0,
  4299. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4300. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c00000,0x0,0x0,0x3f800000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1fc,0x0,
  4301. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1fc,0x0,0x0,
  4302. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7f800,0x1e0000,0x1fe0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4303. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4304. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4305. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1fffffe0,0x0,0x0,0x0,0x0,0x0,0x0,0x7f8,0x0,0x0,0x3fe0000,
  4306. 0x0,0x0,0x0,0x0,0x780,0x0,0x3c000000,0x0,0x0,0x0,0x0,0x0,0x7e,0x0,0x0,0xf0,0x0,0x0,0x0,0x0,0x0,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,
  4307. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4308. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4309. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4310. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7e000,0x1e0000,0x1f80000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4311. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4312. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4313. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1fffffe0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4314. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4315. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4316. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4317. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4318. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4319. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4320. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4321. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x0,0x0,0x0,
  4322. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4323. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4324. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  4325. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 };
  4326. // Definition of a 40x38 'danger' color logo.
  4327. const unsigned char logo40x38[4576] = {
  4328. 177,200,200,200,3,123,123,0,36,200,200,200,1,123,123,0,2,255,255,0,1,189,189,189,1,0,0,0,34,200,200,200,
  4329. 1,123,123,0,4,255,255,0,1,189,189,189,1,0,0,0,1,123,123,123,32,200,200,200,1,123,123,0,5,255,255,0,1,0,0,
  4330. 0,2,123,123,123,30,200,200,200,1,123,123,0,6,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,29,200,200,200,
  4331. 1,123,123,0,7,255,255,0,1,0,0,0,2,123,123,123,28,200,200,200,1,123,123,0,8,255,255,0,1,189,189,189,1,0,0,0,
  4332. 2,123,123,123,27,200,200,200,1,123,123,0,9,255,255,0,1,0,0,0,2,123,123,123,26,200,200,200,1,123,123,0,10,255,
  4333. 255,0,1,189,189,189,1,0,0,0,2,123,123,123,25,200,200,200,1,123,123,0,3,255,255,0,1,189,189,189,3,0,0,0,1,189,
  4334. 189,189,3,255,255,0,1,0,0,0,2,123,123,123,24,200,200,200,1,123,123,0,4,255,255,0,5,0,0,0,3,255,255,0,1,189,
  4335. 189,189,1,0,0,0,2,123,123,123,23,200,200,200,1,123,123,0,4,255,255,0,5,0,0,0,4,255,255,0,1,0,0,0,2,123,123,123,
  4336. 22,200,200,200,1,123,123,0,5,255,255,0,5,0,0,0,4,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,21,200,200,200,
  4337. 1,123,123,0,5,255,255,0,5,0,0,0,5,255,255,0,1,0,0,0,2,123,123,123,20,200,200,200,1,123,123,0,6,255,255,0,5,0,0,
  4338. 0,5,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,19,200,200,200,1,123,123,0,6,255,255,0,1,123,123,0,3,0,0,0,1,
  4339. 123,123,0,6,255,255,0,1,0,0,0,2,123,123,123,18,200,200,200,1,123,123,0,7,255,255,0,1,189,189,189,3,0,0,0,1,189,
  4340. 189,189,6,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,17,200,200,200,1,123,123,0,8,255,255,0,3,0,0,0,8,255,255,
  4341. 0,1,0,0,0,2,123,123,123,16,200,200,200,1,123,123,0,9,255,255,0,1,123,123,0,1,0,0,0,1,123,123,0,8,255,255,0,1,189,
  4342. 189,189,1,0,0,0,2,123,123,123,15,200,200,200,1,123,123,0,9,255,255,0,1,189,189,189,1,0,0,0,1,189,189,189,9,255,255,
  4343. 0,1,0,0,0,2,123,123,123,14,200,200,200,1,123,123,0,11,255,255,0,1,0,0,0,10,255,255,0,1,189,189,189,1,0,0,0,2,123,
  4344. 123,123,13,200,200,200,1,123,123,0,23,255,255,0,1,0,0,0,2,123,123,123,12,200,200,200,1,123,123,0,11,255,255,0,1,189,
  4345. 189,189,2,0,0,0,1,189,189,189,9,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,11,200,200,200,1,123,123,0,11,255,255,
  4346. 0,4,0,0,0,10,255,255,0,1,0,0,0,2,123,123,123,10,200,200,200,1,123,123,0,12,255,255,0,4,0,0,0,10,255,255,0,1,189,189,
  4347. 189,1,0,0,0,2,123,123,123,9,200,200,200,1,123,123,0,12,255,255,0,1,189,189,189,2,0,0,0,1,189,189,189,11,255,255,0,1,
  4348. 0,0,0,2,123,123,123,9,200,200,200,1,123,123,0,27,255,255,0,1,0,0,0,3,123,123,123,8,200,200,200,1,123,123,0,26,255,
  4349. 255,0,1,189,189,189,1,0,0,0,3,123,123,123,9,200,200,200,1,123,123,0,24,255,255,0,1,189,189,189,1,0,0,0,4,123,123,
  4350. 123,10,200,200,200,1,123,123,0,24,0,0,0,5,123,123,123,12,200,200,200,27,123,123,123,14,200,200,200,25,123,123,123,86,
  4351. 200,200,200,91,49,124,118,124,71,32,124,95,49,56,114,52,82,121,0};
  4352. //! Display a warning message.
  4353. /**
  4354. \param format is a C-string describing the format of the message, as in <tt>std::printf()</tt>.
  4355. **/
  4356. inline void warn(const char *format, ...) {
  4357. if (cimg::exception_mode()>=1) {
  4358. char message[8192];
  4359. cimg_std::va_list ap;
  4360. va_start(ap,format);
  4361. cimg_std::vsprintf(message,format,ap);
  4362. va_end(ap);
  4363. #ifdef cimg_strict_warnings
  4364. throw CImgWarningException(message);
  4365. #else
  4366. cimg_std::fprintf(cimg_stdout,"\n%s# CImg Warning%s :\n%s\n",cimg::t_red,cimg::t_normal,message);
  4367. #endif
  4368. }
  4369. }
  4370. // Execute an external system command.
  4371. /**
  4372. \note This function is similar to <tt>std::system()</tt>
  4373. and is here because using the <tt>std::</tt> version on
  4374. Windows may open undesired consoles.
  4375. **/
  4376. inline int system(const char *const command, const char *const module_name=0) {
  4377. #if cimg_OS==2
  4378. PROCESS_INFORMATION pi;
  4379. STARTUPINFO si;
  4380. cimg_std::memset(&pi,0,sizeof(PROCESS_INFORMATION));
  4381. cimg_std::memset(&si,0,sizeof(STARTUPINFO));
  4382. GetStartupInfo(&si);
  4383. si.cb = sizeof(si);
  4384. si.wShowWindow = SW_HIDE;
  4385. si.dwFlags |= SW_HIDE;
  4386. const BOOL res = CreateProcess((LPCTSTR)module_name,(LPTSTR)command,0,0,FALSE,0,0,0,&si,&pi);
  4387. if (res) {
  4388. WaitForSingleObject(pi.hProcess, INFINITE);
  4389. CloseHandle(pi.hThread);
  4390. CloseHandle(pi.hProcess);
  4391. return 0;
  4392. } else
  4393. #endif
  4394. return cimg_std::system(command);
  4395. return module_name?0:1;
  4396. }
  4397. //! Return a reference to a temporary variable of type T.
  4398. template<typename T>
  4399. inline T& temporary(const T&) {
  4400. static T temp;
  4401. return temp;
  4402. }
  4403. //! Exchange values of variables \p a and \p b.
  4404. template<typename T>
  4405. inline void swap(T& a, T& b) { T t = a; a = b; b = t; }
  4406. //! Exchange values of variables (\p a1,\p a2) and (\p b1,\p b2).
  4407. template<typename T1, typename T2>
  4408. inline void swap(T1& a1, T1& b1, T2& a2, T2& b2) {
  4409. cimg::swap(a1,b1); cimg::swap(a2,b2);
  4410. }
  4411. //! Exchange values of variables (\p a1,\p a2,\p a3) and (\p b1,\p b2,\p b3).
  4412. template<typename T1, typename T2, typename T3>
  4413. inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3) {
  4414. cimg::swap(a1,b1,a2,b2); cimg::swap(a3,b3);
  4415. }
  4416. //! Exchange values of variables (\p a1,\p a2,...,\p a4) and (\p b1,\p b2,...,\p b4).
  4417. template<typename T1, typename T2, typename T3, typename T4>
  4418. inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3, T4& a4, T4& b4) {
  4419. cimg::swap(a1,b1,a2,b2,a3,b3); cimg::swap(a4,b4);
  4420. }
  4421. //! Exchange values of variables (\p a1,\p a2,...,\p a5) and (\p b1,\p b2,...,\p b5).
  4422. template<typename T1, typename T2, typename T3, typename T4, typename T5>
  4423. inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3, T4& a4, T4& b4, T5& a5, T5& b5) {
  4424. cimg::swap(a1,b1,a2,b2,a3,b3,a4,b4); cimg::swap(a5,b5);
  4425. }
  4426. //! Exchange values of variables (\p a1,\p a2,...,\p a6) and (\p b1,\p b2,...,\p b6).
  4427. template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
  4428. inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3, T4& a4, T4& b4, T5& a5, T5& b5, T6& a6, T6& b6) {
  4429. cimg::swap(a1,b1,a2,b2,a3,b3,a4,b4,a5,b5); cimg::swap(a6,b6);
  4430. }
  4431. //! Exchange values of variables (\p a1,\p a2,...,\p a7) and (\p b1,\p b2,...,\p b7).
  4432. template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
  4433. inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3, T4& a4, T4& b4, T5& a5, T5& b5, T6& a6, T6& b6,
  4434. T7& a7, T7& b7) {
  4435. cimg::swap(a1,b1,a2,b2,a3,b3,a4,b4,a5,b5,a6,b6); cimg::swap(a7,b7);
  4436. }
  4437. //! Exchange values of variables (\p a1,\p a2,...,\p a8) and (\p b1,\p b2,...,\p b8).
  4438. template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
  4439. inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3, T4& a4, T4& b4, T5& a5, T5& b5, T6& a6, T6& b6,
  4440. T7& a7, T7& b7, T8& a8, T8& b8) {
  4441. cimg::swap(a1,b1,a2,b2,a3,b3,a4,b4,a5,b5,a6,b6,a7,b7); cimg::swap(a8,b8);
  4442. }
  4443. //! Return the current endianness of the CPU.
  4444. /**
  4445. \return \c false for "Little Endian", \c true for "Big Endian".
  4446. **/
  4447. inline bool endianness() {
  4448. const int x = 1;
  4449. return ((unsigned char*)&x)[0]?false:true;
  4450. }
  4451. //! Invert endianness of a memory buffer.
  4452. template<typename T>
  4453. inline void invert_endianness(T* const buffer, const unsigned int size) {
  4454. if (size) switch (sizeof(T)) {
  4455. case 1 : break;
  4456. case 2 : { for (unsigned short *ptr = (unsigned short*)buffer+size; ptr>(unsigned short*)buffer; ) {
  4457. const unsigned short val = *(--ptr);
  4458. *ptr = (unsigned short)((val>>8)|((val<<8)));
  4459. }} break;
  4460. case 4 : { for (unsigned int *ptr = (unsigned int*)buffer+size; ptr>(unsigned int*)buffer; ) {
  4461. const unsigned int val = *(--ptr);
  4462. *ptr = (val>>24)|((val>>8)&0xff00)|((val<<8)&0xff0000)|(val<<24);
  4463. }} break;
  4464. default : { for (T* ptr = buffer+size; ptr>buffer; ) {
  4465. unsigned char *pb = (unsigned char*)(--ptr), *pe = pb + sizeof(T);
  4466. for (int i = 0; i<(int)sizeof(T)/2; ++i) swap(*(pb++),*(--pe));
  4467. }}
  4468. }
  4469. }
  4470. //! Invert endianness of a single variable.
  4471. template<typename T>
  4472. inline T& invert_endianness(T& a) {
  4473. invert_endianness(&a,1);
  4474. return a;
  4475. }
  4476. //! Get the value of a system timer with a millisecond precision.
  4477. inline unsigned long time() {
  4478. #if cimg_OS==1
  4479. struct timeval st_time;
  4480. gettimeofday(&st_time,0);
  4481. return (unsigned long)(st_time.tv_usec/1000 + st_time.tv_sec*1000);
  4482. #elif cimg_OS==2
  4483. static SYSTEMTIME st_time;
  4484. GetSystemTime(&st_time);
  4485. return (unsigned long)(st_time.wMilliseconds + 1000*(st_time.wSecond + 60*(st_time.wMinute + 60*st_time.wHour)));
  4486. #else
  4487. return 0;
  4488. #endif
  4489. }
  4490. //! Sleep for a certain numbers of milliseconds.
  4491. /**
  4492. This function frees the CPU ressources during the sleeping time.
  4493. It may be used to temporize your program properly, without wasting CPU time.
  4494. **/
  4495. inline void sleep(const unsigned int milliseconds) {
  4496. #if cimg_OS==1
  4497. struct timespec tv;
  4498. tv.tv_sec = milliseconds/1000;
  4499. tv.tv_nsec = (milliseconds%1000)*1000000;
  4500. nanosleep(&tv,0);
  4501. #elif cimg_OS==2
  4502. Sleep(milliseconds);
  4503. #endif
  4504. }
  4505. inline unsigned int _sleep(const unsigned int milliseconds, unsigned long& timer) {
  4506. if (!timer) timer = cimg::time();
  4507. const unsigned long current_time = cimg::time();
  4508. if (current_time>=timer+milliseconds) { timer = current_time; return 0; }
  4509. const unsigned long time_diff = timer + milliseconds - current_time;
  4510. timer = current_time + time_diff;
  4511. cimg::sleep(time_diff);
  4512. return (unsigned int)time_diff;
  4513. }
  4514. //! Wait for a certain number of milliseconds since the last call.
  4515. /**
  4516. This function is equivalent to sleep() but the waiting time is computed with regard to the last call
  4517. of wait(). It may be used to temporize your program properly.
  4518. **/
  4519. inline unsigned int wait(const unsigned int milliseconds) {
  4520. static unsigned long timer = 0;
  4521. if (!timer) timer = cimg::time();
  4522. return _sleep(milliseconds,timer);
  4523. }
  4524. // Use a specific srand initialization to avoid multi-threads to have to the
  4525. // same series of random numbers (executed only once for a single program).
  4526. inline void srand() {
  4527. static bool first_time = true;
  4528. if (first_time) {
  4529. cimg_std::srand(cimg::time());
  4530. unsigned char *const rand_ptr = new unsigned char[1+cimg_std::rand()%2048];
  4531. cimg_std::srand((unsigned int)cimg_std::rand() + *(unsigned int*)(void*)rand_ptr);
  4532. delete[] rand_ptr;
  4533. first_time = false;
  4534. }
  4535. }
  4536. //! Return a left bitwise-rotated number.
  4537. template<typename T>
  4538. inline const T rol(const T a, const unsigned int n=1) {
  4539. return n?(T)((a<<n)|(a>>((sizeof(T)<<3)-n))):a;
  4540. }
  4541. //! Return a right bitwise-rotated number.
  4542. template<typename T>
  4543. inline const T ror(const T a, const unsigned int n=1) {
  4544. return n?(T)((a>>n)|(a<<((sizeof(T)<<3)-n))):a;
  4545. }
  4546. //! Return the absolute value of a number.
  4547. /**
  4548. \note This function is different from <tt>std::abs()</tt> or <tt>std::fabs()</tt>
  4549. because it is able to consider a variable of any type, without cast needed.
  4550. **/
  4551. template<typename T>
  4552. inline T abs(const T a) {
  4553. return a>=0?a:-a;
  4554. }
  4555. inline bool abs(const bool a) {
  4556. return a;
  4557. }
  4558. inline unsigned char abs(const unsigned char a) {
  4559. return a;
  4560. }
  4561. inline unsigned short abs(const unsigned short a) {
  4562. return a;
  4563. }
  4564. inline unsigned int abs(const unsigned int a) {
  4565. return a;
  4566. }
  4567. inline unsigned long abs(const unsigned long a) {
  4568. return a;
  4569. }
  4570. inline double abs(const double a) {
  4571. return cimg_std::fabs(a);
  4572. }
  4573. inline float abs(const float a) {
  4574. return (float)cimg_std::fabs((double)a);
  4575. }
  4576. inline int abs(const int a) {
  4577. return cimg_std::abs(a);
  4578. }
  4579. //! Return the square of a number.
  4580. template<typename T>
  4581. inline T sqr(const T val) {
  4582. return val*val;
  4583. }
  4584. //! Return 1 + log_10(x).
  4585. inline int xln(const int x) {
  4586. return x>0?(int)(1+cimg_std::log10((double)x)):1;
  4587. }
  4588. //! Return the minimum value between two numbers.
  4589. template<typename t1, typename t2>
  4590. inline typename cimg::superset<t1,t2>::type min(const t1& a, const t2& b) {
  4591. typedef typename cimg::superset<t1,t2>::type t1t2;
  4592. return (t1t2)(a<=b?a:b);
  4593. }
  4594. //! Return the minimum value between three numbers.
  4595. template<typename t1, typename t2, typename t3>
  4596. inline typename cimg::superset2<t1,t2,t3>::type min(const t1& a, const t2& b, const t3& c) {
  4597. typedef typename cimg::superset2<t1,t2,t3>::type t1t2t3;
  4598. return (t1t2t3)cimg::min(cimg::min(a,b),c);
  4599. }
  4600. //! Return the minimum value between four numbers.
  4601. template<typename t1, typename t2, typename t3, typename t4>
  4602. inline typename cimg::superset3<t1,t2,t3,t4>::type min(const t1& a, const t2& b, const t3& c, const t4& d) {
  4603. typedef typename cimg::superset3<t1,t2,t3,t4>::type t1t2t3t4;
  4604. return (t1t2t3t4)cimg::min(cimg::min(a,b,c),d);
  4605. }
  4606. //! Return the maximum value between two numbers.
  4607. template<typename t1, typename t2>
  4608. inline typename cimg::superset<t1,t2>::type max(const t1& a, const t2& b) {
  4609. typedef typename cimg::superset<t1,t2>::type t1t2;
  4610. return (t1t2)(a>=b?a:b);
  4611. }
  4612. //! Return the maximum value between three numbers.
  4613. template<typename t1, typename t2, typename t3>
  4614. inline typename cimg::superset2<t1,t2,t3>::type max(const t1& a, const t2& b, const t3& c) {
  4615. typedef typename cimg::superset2<t1,t2,t3>::type t1t2t3;
  4616. return (t1t2t3)cimg::max(cimg::max(a,b),c);
  4617. }
  4618. //! Return the maximum value between four numbers.
  4619. template<typename t1, typename t2, typename t3, typename t4>
  4620. inline typename cimg::superset3<t1,t2,t3,t4>::type max(const t1& a, const t2& b, const t3& c, const t4& d) {
  4621. typedef typename cimg::superset3<t1,t2,t3,t4>::type t1t2t3t4;
  4622. return (t1t2t3t4)cimg::max(cimg::max(a,b,c),d);
  4623. }
  4624. //! Return the sign of a number.
  4625. template<typename T>
  4626. inline T sign(const T x) {
  4627. return (x<0)?(T)(-1):(x==0?(T)0:(T)1);
  4628. }
  4629. //! Return the nearest power of 2 higher than a given number.
  4630. template<typename T>
  4631. inline unsigned long nearest_pow2(const T x) {
  4632. unsigned long i = 1;
  4633. while (x>i) i<<=1;
  4634. return i;
  4635. }
  4636. //! Return the modulo of a number.
  4637. /**
  4638. \note This modulo function accepts negative and floating-points modulo numbers, as well as
  4639. variable of any type.
  4640. **/
  4641. template<typename T>
  4642. inline T mod(const T& x, const T& m) {
  4643. const double dx = (double)x, dm = (double)m;
  4644. if (x<0) { return (T)(dm+dx+dm*cimg_std::floor(-dx/dm)); }
  4645. return (T)(dx-dm*cimg_std::floor(dx/dm));
  4646. }
  4647. inline int mod(const bool x, const bool m) {
  4648. return m?(x?1:0):0;
  4649. }
  4650. inline int mod(const char x, const char m) {
  4651. return x>=0?x%m:(x%m?m+x%m:0);
  4652. }
  4653. inline int mod(const short x, const short m) {
  4654. return x>=0?x%m:(x%m?m+x%m:0);
  4655. }
  4656. inline int mod(const int x, const int m) {
  4657. return x>=0?x%m:(x%m?m+x%m:0);
  4658. }
  4659. inline int mod(const long x, const long m) {
  4660. return x>=0?x%m:(x%m?m+x%m:0);
  4661. }
  4662. inline int mod(const unsigned char x, const unsigned char m) {
  4663. return x%m;
  4664. }
  4665. inline int mod(const unsigned short x, const unsigned short m) {
  4666. return x%m;
  4667. }
  4668. inline int mod(const unsigned int x, const unsigned int m) {
  4669. return x%m;
  4670. }
  4671. inline int mod(const unsigned long x, const unsigned long m) {
  4672. return x%m;
  4673. }
  4674. //! Return the minmod of two numbers.
  4675. /**
  4676. <i>minmod(\p a,\p b)</i> is defined to be :
  4677. - <i>minmod(\p a,\p b) = min(\p a,\p b)</i>, if \p a and \p b have the same sign.
  4678. - <i>minmod(\p a,\p b) = 0</i>, if \p a and \p b have different signs.
  4679. **/
  4680. template<typename T>
  4681. inline T minmod(const T a, const T b) {
  4682. return a*b<=0?0:(a>0?(a<b?a:b):(a<b?b:a));
  4683. }
  4684. //! Return a random variable between [0,1] with respect to an uniform distribution.
  4685. inline double rand() {
  4686. static bool first_time = true;
  4687. if (first_time) { cimg::srand(); first_time = false; }
  4688. return (double)cimg_std::rand()/RAND_MAX;
  4689. }
  4690. //! Return a random variable between [-1,1] with respect to an uniform distribution.
  4691. inline double crand() {
  4692. return 1-2*cimg::rand();
  4693. }
  4694. //! Return a random variable following a gaussian distribution and a standard deviation of 1.
  4695. inline double grand() {
  4696. double x1, w;
  4697. do {
  4698. const double x2 = 2*cimg::rand() - 1.0;
  4699. x1 = 2*cimg::rand()-1.0;
  4700. w = x1*x1 + x2*x2;
  4701. } while (w<=0 || w>=1.0);
  4702. return x1*cimg_std::sqrt((-2*cimg_std::log(w))/w);
  4703. }
  4704. //! Return a random variable following a Poisson distribution of parameter z.
  4705. inline unsigned int prand(const double z) {
  4706. if (z<=1.0e-10) return 0;
  4707. if (z>100.0) return (unsigned int)((cimg_std::sqrt(z) * cimg::grand()) + z);
  4708. unsigned int k = 0;
  4709. const double y = cimg_std::exp(-z);
  4710. for (double s = 1.0; s>=y; ++k) s*=cimg::rand();
  4711. return k-1;
  4712. }
  4713. //! Return a rounded number.
  4714. /**
  4715. \param x is the number to be rounded.
  4716. \param y is the rounding precision.
  4717. \param rounding_type defines the type of rounding (0=nearest, -1=backward, 1=forward).
  4718. **/
  4719. inline double round(const double x, const double y, const int rounding_type=0) {
  4720. if (y<=0) return x;
  4721. const double delta = cimg::mod(x,y);
  4722. if (delta==0.0) return x;
  4723. const double
  4724. backward = x - delta,
  4725. forward = backward + y;
  4726. return rounding_type<0?backward:(rounding_type>0?forward:(2*delta<y?backward:forward));
  4727. }
  4728. inline double _pythagore(double a, double b) {
  4729. const double absa = cimg::abs(a), absb = cimg::abs(b);
  4730. if (absa>absb) { const double tmp = absb/absa; return absa*cimg_std::sqrt(1.0+tmp*tmp); }
  4731. else { const double tmp = absa/absb; return (absb==0?0:absb*cimg_std::sqrt(1.0+tmp*tmp)); }
  4732. }
  4733. //! Remove the 'case' of an ASCII character.
  4734. inline char uncase(const char x) {
  4735. return (char)((x<'A'||x>'Z')?x:x-'A'+'a');
  4736. }
  4737. //! Remove the 'case' of a C string.
  4738. /**
  4739. Acts in-place.
  4740. **/
  4741. inline void uncase(char *const string) {
  4742. if (string) for (char *ptr = string; *ptr; ++ptr) *ptr = uncase(*ptr);
  4743. }
  4744. //! Read a float number from a C-string.
  4745. /**
  4746. \note This function is quite similar to <tt>std::atof()</tt>,
  4747. but that it allows the retrieval of fractions as in "1/2".
  4748. **/
  4749. inline float atof(const char *const str) {
  4750. float x = 0,y = 1;
  4751. if (!str) return 0; else { cimg_std::sscanf(str,"%g/%g",&x,&y); return x/y; }
  4752. }
  4753. //! Compare the first \p n characters of two C-strings.
  4754. /**
  4755. \note This function is similar to <tt>std::strncmp()</tt>
  4756. and is here because some old compilers do not
  4757. define the <tt>std::</tt> version.
  4758. **/
  4759. inline int strncmp(const char *const s1, const char *const s2, const int l) {
  4760. if (!s1) return s2?-1:0;
  4761. const char *ns1 = s1, *ns2 = s2;
  4762. int k, diff = 0; for (k = 0; k<l && !(diff = *ns1-*ns2); ++k) { ++ns1; ++ns2; }
  4763. return k!=l?diff:0;
  4764. }
  4765. //! Compare the first \p n characters of two C-strings, ignoring the case.
  4766. /**
  4767. \note This function is similar to <tt>std::strncasecmp()</tt>
  4768. and is here because some old compilers do not
  4769. define the <tt>std::</tt> version.
  4770. **/
  4771. inline int strncasecmp(const char *const s1, const char *const s2, const int l) {
  4772. if (!s1) return s2?-1:0;
  4773. const char *ns1 = s1, *ns2 = s2;
  4774. int k, diff = 0; for (k = 0; k<l && !(diff = uncase(*ns1)-uncase(*ns2)); ++k) { ++ns1; ++ns2; }
  4775. return k!=l?diff:0;
  4776. }
  4777. //! Compare two C-strings.
  4778. /**
  4779. \note This function is similar to <tt>std::strcmp()</tt>
  4780. and is here because some old compilers do not
  4781. define the <tt>std::</tt> version.
  4782. **/
  4783. inline int strcmp(const char *const s1, const char *const s2) {
  4784. const unsigned int l1 = cimg_std::strlen(s1), l2 = cimg_std::strlen(s2);
  4785. return cimg::strncmp(s1,s2,1+(l1<l2?l1:l2));
  4786. }
  4787. //! Compare two C-strings, ignoring the case.
  4788. /**
  4789. \note This function is similar to <tt>std::strcasecmp()</tt>
  4790. and is here because some old compilers do not
  4791. define the <tt>std::</tt> version.
  4792. **/
  4793. inline int strcasecmp(const char *const s1, const char *const s2) {
  4794. const unsigned int l1 = cimg_std::strlen(s1), l2 = cimg_std::strlen(s2);
  4795. return cimg::strncasecmp(s1,s2,1+(l1<l2?l1:l2));
  4796. }
  4797. //! Find a character in a C-string.
  4798. inline int strfind(const char *const s, const char c) {
  4799. if (!s) return -1;
  4800. int l; for (l = (int)cimg_std::strlen(s); l>=0 && s[l]!=c; --l) {}
  4801. return l;
  4802. }
  4803. //! Remove useless delimiters on the borders of a C-string
  4804. inline bool strpare(char *const s, const char delimiter=' ', const bool symmetric=false) {
  4805. if (!s) return false;
  4806. const int l = (int)cimg_std::strlen(s);
  4807. int p, q;
  4808. if (symmetric) for (p = 0, q = l-1; p<q && s[p]==delimiter && s[q]==delimiter; ++p) --q;
  4809. else {
  4810. for (p = 0; p<l && s[p]==delimiter; ) ++p;
  4811. for (q = l-1; q>p && s[q]==delimiter; ) --q;
  4812. }
  4813. const int n = q - p + 1;
  4814. if (n!=l) { cimg_std::memmove(s,s+p,n); s[n] = '\0'; return true; }
  4815. return false;
  4816. }
  4817. //! Remove useless spaces and symmetric delimiters ', " and ` from a C-string.
  4818. inline void strclean(char *const s) {
  4819. if (!s) return;
  4820. strpare(s,' ',false);
  4821. for (bool need_iter = true; need_iter; ) {
  4822. need_iter = false;
  4823. need_iter |= strpare(s,'\'',true);
  4824. need_iter |= strpare(s,'\"',true);
  4825. need_iter |= strpare(s,'`',true);
  4826. }
  4827. }
  4828. //! Replace explicit escape sequences '\x' in C-strings.
  4829. inline void strescape(char *const s) {
  4830. #define cimg_strescape(ci,co) case ci: *nd = co; ++ns; break;
  4831. static unsigned int val = 0;
  4832. for (char *ns = s, *nd = s; *ns || (bool)(*nd=0); ++nd) if (*ns=='\\') switch (*(++ns)) {
  4833. cimg_strescape('n','\n');
  4834. cimg_strescape('t','\t');
  4835. cimg_strescape('v','\v');
  4836. cimg_strescape('b','\b');
  4837. cimg_strescape('r','\r');
  4838. cimg_strescape('f','\f');
  4839. cimg_strescape('a','\a');
  4840. cimg_strescape('\\','\\');
  4841. cimg_strescape('\?','\?');
  4842. cimg_strescape('\'','\'');
  4843. cimg_strescape('\"','\"');
  4844. case 0 : *nd = 0; break;
  4845. case '0' : case '1' : case '2' : case '3' : case '4' : case '5' : case '6' : case '7' :
  4846. cimg_std::sscanf(ns,"%o",&val); while (*ns>='0' && *ns<='7') ++ns;
  4847. *nd = val; break;
  4848. case 'x':
  4849. cimg_std::sscanf(++ns,"%x",&val); while ((*ns>='0' && *ns<='7') || (*ns>='a' && *ns<='f') || (*ns>='A' && *ns<='F')) ++ns;
  4850. *nd = val; break;
  4851. default : *nd='\\';
  4852. } else *nd = *(ns++);
  4853. }
  4854. //! Compute the basename of a filename.
  4855. inline const char* basename(const char *const s) {
  4856. return (cimg_OS!=2)?(s?s+1+cimg::strfind(s,'/'):0):(s?s+1+cimg::strfind(s,'\\'):0);
  4857. }
  4858. // Generate a random filename.
  4859. inline const char* filenamerand() {
  4860. static char randomid[9] = { 0,0,0,0,0,0,0,0,0 };
  4861. cimg::srand();
  4862. for (unsigned int k = 0; k<8; ++k) {
  4863. const int v = (int)cimg_std::rand()%3;
  4864. randomid[k] = (char)(v==0?('0'+(cimg_std::rand()%10)):(v==1?('a'+(cimg_std::rand()%26)):('A'+(cimg_std::rand()%26))));
  4865. }
  4866. return randomid;
  4867. }
  4868. // Convert filename into a Windows-style filename.
  4869. inline void winformat_string(char *const s) {
  4870. if (s && s[0]) {
  4871. #if cimg_OS==2
  4872. char *const ns = new char[MAX_PATH];
  4873. if (GetShortPathNameA(s,ns,MAX_PATH)) cimg_std::strcpy(s,ns);
  4874. #endif
  4875. }
  4876. }
  4877. //! Return or set path to store temporary files.
  4878. inline const char* temporary_path(const char *const user_path=0, const bool reinit_path=false) {
  4879. #define _cimg_test_temporary_path(p) \
  4880. if (!path_found) { \
  4881. cimg_std::sprintf(st_path,"%s",p); \
  4882. cimg_std::sprintf(tmp,"%s" cimg_file_separator "%s",st_path,filetmp); \
  4883. if ((file=cimg_std::fopen(tmp,"wb"))!=0) { cimg_std::fclose(file); cimg_std::remove(tmp); path_found = true; } \
  4884. }
  4885. static char *st_path = 0;
  4886. if (reinit_path && st_path) { delete[] st_path; st_path = 0; }
  4887. if (user_path) {
  4888. if (!st_path) st_path = new char[1024];
  4889. cimg_std::memset(st_path,0,1024);
  4890. cimg_std::strncpy(st_path,user_path,1023);
  4891. } else if (!st_path) {
  4892. st_path = new char[1024];
  4893. cimg_std::memset(st_path,0,1024);
  4894. bool path_found = false;
  4895. char tmp[1024], filetmp[512];
  4896. cimg_std::FILE *file = 0;
  4897. cimg_std::sprintf(filetmp,"%s.tmp",cimg::filenamerand());
  4898. char *tmpPath = getenv("TMP");
  4899. if (!tmpPath) { tmpPath = getenv("TEMP"); winformat_string(tmpPath); }
  4900. if (tmpPath) _cimg_test_temporary_path(tmpPath);
  4901. #if cimg_OS==2
  4902. _cimg_test_temporary_path("C:\\WINNT\\Temp");
  4903. _cimg_test_temporary_path("C:\\WINDOWS\\Temp");
  4904. _cimg_test_temporary_path("C:\\Temp");
  4905. _cimg_test_temporary_path("C:");
  4906. _cimg_test_temporary_path("D:\\WINNT\\Temp");
  4907. _cimg_test_temporary_path("D:\\WINDOWS\\Temp");
  4908. _cimg_test_temporary_path("D:\\Temp");
  4909. _cimg_test_temporary_path("D:");
  4910. #else
  4911. _cimg_test_temporary_path("/tmp");
  4912. _cimg_test_temporary_path("/var/tmp");
  4913. #endif
  4914. if (!path_found) {
  4915. st_path[0]='\0';
  4916. cimg_std::strcpy(tmp,filetmp);
  4917. if ((file=cimg_std::fopen(tmp,"wb"))!=0) { cimg_std::fclose(file); cimg_std::remove(tmp); path_found = true; }
  4918. }
  4919. if (!path_found)
  4920. throw CImgIOException("cimg::temporary_path() : Unable to find a temporary path accessible for writing\n"
  4921. "you have to set the macro 'cimg_temporary_path' to a valid path where you have writing access :\n"
  4922. "#define cimg_temporary_path \"path\" (before including 'CImg.h')");
  4923. }
  4924. return st_path;
  4925. }
  4926. // Return or set path to the "Program files/" directory (windows only).
  4927. #if cimg_OS==2
  4928. inline const char* programfiles_path(const char *const user_path=0, const bool reinit_path=false) {
  4929. static char *st_path = 0;
  4930. if (reinit_path && st_path) { delete[] st_path; st_path = 0; }
  4931. if (user_path) {
  4932. if (!st_path) st_path = new char[1024];
  4933. cimg_std::memset(st_path,0,1024);
  4934. cimg_std::strncpy(st_path,user_path,1023);
  4935. } else if (!st_path) {
  4936. st_path = new char[MAX_PATH];
  4937. cimg_std::memset(st_path,0,MAX_PATH);
  4938. // Note : in the following line, 0x26 = CSIDL_PROGRAM_FILES (not defined on every compiler).
  4939. #if !defined(__INTEL_COMPILER)
  4940. if (!SHGetSpecialFolderPathA(0,st_path,0x0026,false)) {
  4941. const char *pfPath = getenv("PROGRAMFILES");
  4942. if (pfPath) cimg_std::strncpy(st_path,pfPath,MAX_PATH-1);
  4943. else cimg_std::strcpy(st_path,"C:\\PROGRA~1");
  4944. }
  4945. #else
  4946. cimg_std::strcpy(st_path,"C:\\PROGRA~1");
  4947. #endif
  4948. }
  4949. return st_path;
  4950. }
  4951. #endif
  4952. //! Return or set path to the ImageMagick's \c convert tool.
  4953. inline const char* imagemagick_path(const char *const user_path=0, const bool reinit_path=false) {
  4954. static char *st_path = 0;
  4955. if (reinit_path && st_path) { delete[] st_path; st_path = 0; }
  4956. if (user_path) {
  4957. if (!st_path) st_path = new char[1024];
  4958. cimg_std::memset(st_path,0,1024);
  4959. cimg_std::strncpy(st_path,user_path,1023);
  4960. } else if (!st_path) {
  4961. st_path = new char[1024];
  4962. cimg_std::memset(st_path,0,1024);
  4963. bool path_found = false;
  4964. cimg_std::FILE *file = 0;
  4965. #if cimg_OS==2
  4966. const char *pf_path = programfiles_path();
  4967. if (!path_found) {
  4968. cimg_std::sprintf(st_path,".\\convert.exe");
  4969. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  4970. }
  4971. { for (int k = 32; k>=10 && !path_found; --k) {
  4972. cimg_std::sprintf(st_path,"%s\\IMAGEM~1.%.2d-\\convert.exe",pf_path,k);
  4973. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  4974. }}
  4975. { for (int k = 9; k>=0 && !path_found; --k) {
  4976. cimg_std::sprintf(st_path,"%s\\IMAGEM~1.%d-Q\\convert.exe",pf_path,k);
  4977. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  4978. }}
  4979. { for (int k = 32; k>=0 && !path_found; --k) {
  4980. cimg_std::sprintf(st_path,"%s\\IMAGEM~1.%d\\convert.exe",pf_path,k);
  4981. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  4982. }}
  4983. { for (int k = 32; k>=10 && !path_found; --k) {
  4984. cimg_std::sprintf(st_path,"%s\\IMAGEM~1.%.2d-\\VISUA~1\\BIN\\convert.exe",pf_path,k);
  4985. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  4986. }}
  4987. { for (int k = 9; k>=0 && !path_found; --k) {
  4988. cimg_std::sprintf(st_path,"%s\\IMAGEM~1.%d-Q\\VISUA~1\\BIN\\convert.exe",pf_path,k);
  4989. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  4990. }}
  4991. { for (int k = 32; k>=0 && !path_found; --k) {
  4992. cimg_std::sprintf(st_path,"%s\\IMAGEM~1.%d\\VISUA~1\\BIN\\convert.exe",pf_path,k);
  4993. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  4994. }}
  4995. { for (int k = 32; k>=10 && !path_found; --k) {
  4996. cimg_std::sprintf(st_path,"C:\\IMAGEM~1.%.2d-\\convert.exe",k);
  4997. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  4998. }}
  4999. { for (int k = 9; k>=0 && !path_found; --k) {
  5000. cimg_std::sprintf(st_path,"C:\\IMAGEM~1.%d-Q\\convert.exe",k);
  5001. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5002. }}
  5003. { for (int k = 32; k>=0 && !path_found; --k) {
  5004. cimg_std::sprintf(st_path,"C:\\IMAGEM~1.%d\\convert.exe",k);
  5005. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5006. }}
  5007. { for (int k = 32; k>=10 && !path_found; --k) {
  5008. cimg_std::sprintf(st_path,"C:\\IMAGEM~1.%.2d-\\VISUA~1\\BIN\\convert.exe",k);
  5009. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5010. }}
  5011. { for (int k = 9; k>=0 && !path_found; --k) {
  5012. cimg_std::sprintf(st_path,"C:\\IMAGEM~1.%d-Q\\VISUA~1\\BIN\\convert.exe",k);
  5013. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5014. }}
  5015. { for (int k = 32; k>=0 && !path_found; --k) {
  5016. cimg_std::sprintf(st_path,"C:\\IMAGEM~1.%d\\VISUA~1\\BIN\\convert.exe",k);
  5017. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5018. }}
  5019. { for (int k = 32; k>=10 && !path_found; --k) {
  5020. cimg_std::sprintf(st_path,"D:\\IMAGEM~1.%.2d-\\convert.exe",k);
  5021. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5022. }}
  5023. { for (int k = 9; k>=0 && !path_found; --k) {
  5024. cimg_std::sprintf(st_path,"D:\\IMAGEM~1.%d-Q\\convert.exe",k);
  5025. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5026. }}
  5027. { for (int k = 32; k>=0 && !path_found; --k) {
  5028. cimg_std::sprintf(st_path,"D:\\IMAGEM~1.%d\\convert.exe",k);
  5029. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5030. }}
  5031. { for (int k = 32; k>=10 && !path_found; --k) {
  5032. cimg_std::sprintf(st_path,"D:\\IMAGEM~1.%.2d-\\VISUA~1\\BIN\\convert.exe",k);
  5033. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5034. }}
  5035. { for (int k = 9; k>=0 && !path_found; --k) {
  5036. cimg_std::sprintf(st_path,"D:\\IMAGEM~1.%d-Q\\VISUA~1\\BIN\\convert.exe",k);
  5037. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5038. }}
  5039. { for (int k = 32; k>=0 && !path_found; --k) {
  5040. cimg_std::sprintf(st_path,"D:\\IMAGEM~1.%d\\VISUA~1\\BIN\\convert.exe",k);
  5041. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5042. }}
  5043. if (!path_found) cimg_std::strcpy(st_path,"convert.exe");
  5044. #else
  5045. if (!path_found) {
  5046. cimg_std::sprintf(st_path,"./convert");
  5047. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5048. }
  5049. if (!path_found) cimg_std::strcpy(st_path,"convert");
  5050. #endif
  5051. winformat_string(st_path);
  5052. }
  5053. return st_path;
  5054. }
  5055. //! Return path of the GraphicsMagick's \c gm tool.
  5056. inline const char* graphicsmagick_path(const char *const user_path=0, const bool reinit_path=false) {
  5057. static char *st_path = 0;
  5058. if (reinit_path && st_path) { delete[] st_path; st_path = 0; }
  5059. if (user_path) {
  5060. if (!st_path) st_path = new char[1024];
  5061. cimg_std::memset(st_path,0,1024);
  5062. cimg_std::strncpy(st_path,user_path,1023);
  5063. } else if (!st_path) {
  5064. st_path = new char[1024];
  5065. cimg_std::memset(st_path,0,1024);
  5066. bool path_found = false;
  5067. cimg_std::FILE *file = 0;
  5068. #if cimg_OS==2
  5069. const char* pf_path = programfiles_path();
  5070. if (!path_found) {
  5071. cimg_std::sprintf(st_path,".\\gm.exe");
  5072. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5073. }
  5074. { for (int k = 32; k>=10 && !path_found; --k) {
  5075. cimg_std::sprintf(st_path,"%s\\GRAPHI~1.%.2d-\\gm.exe",pf_path,k);
  5076. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5077. }}
  5078. { for (int k = 9; k>=0 && !path_found; --k) {
  5079. cimg_std::sprintf(st_path,"%s\\GRAPHI~1.%d-Q\\gm.exe",pf_path,k);
  5080. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5081. }}
  5082. { for (int k = 32; k>=0 && !path_found; --k) {
  5083. cimg_std::sprintf(st_path,"%s\\GRAPHI~1.%d\\gm.exe",pf_path,k);
  5084. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5085. }}
  5086. { for (int k = 32; k>=10 && !path_found; --k) {
  5087. cimg_std::sprintf(st_path,"%s\\GRAPHI~1.%.2d-\\VISUA~1\\BIN\\gm.exe",pf_path,k);
  5088. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5089. }}
  5090. { for (int k = 9; k>=0 && !path_found; --k) {
  5091. cimg_std::sprintf(st_path,"%s\\GRAPHI~1.%d-Q\\VISUA~1\\BIN\\gm.exe",pf_path,k);
  5092. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5093. }}
  5094. { for (int k = 32; k>=0 && !path_found; --k) {
  5095. cimg_std::sprintf(st_path,"%s\\GRAPHI~1.%d\\VISUA~1\\BIN\\gm.exe",pf_path,k);
  5096. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5097. }}
  5098. { for (int k = 32; k>=10 && !path_found; --k) {
  5099. cimg_std::sprintf(st_path,"C:\\GRAPHI~1.%.2d-\\gm.exe",k);
  5100. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5101. }}
  5102. { for (int k = 9; k>=0 && !path_found; --k) {
  5103. cimg_std::sprintf(st_path,"C:\\GRAPHI~1.%d-Q\\gm.exe",k);
  5104. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5105. }}
  5106. { for (int k = 32; k>=0 && !path_found; --k) {
  5107. cimg_std::sprintf(st_path,"C:\\GRAPHI~1.%d\\gm.exe",k);
  5108. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5109. }}
  5110. { for (int k = 32; k>=10 && !path_found; --k) {
  5111. cimg_std::sprintf(st_path,"C:\\GRAPHI~1.%.2d-\\VISUA~1\\BIN\\gm.exe",k);
  5112. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5113. }}
  5114. { for (int k = 9; k>=0 && !path_found; --k) {
  5115. cimg_std::sprintf(st_path,"C:\\GRAPHI~1.%d-Q\\VISUA~1\\BIN\\gm.exe",k);
  5116. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5117. }}
  5118. { for (int k = 32; k>=0 && !path_found; --k) {
  5119. cimg_std::sprintf(st_path,"C:\\GRAPHI~1.%d\\VISUA~1\\BIN\\gm.exe",k);
  5120. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5121. }}
  5122. { for (int k = 32; k>=10 && !path_found; --k) {
  5123. cimg_std::sprintf(st_path,"D:\\GRAPHI~1.%.2d-\\gm.exe",k);
  5124. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5125. }}
  5126. { for (int k = 9; k>=0 && !path_found; --k) {
  5127. cimg_std::sprintf(st_path,"D:\\GRAPHI~1.%d-Q\\gm.exe",k);
  5128. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5129. }}
  5130. { for (int k = 32; k>=0 && !path_found; --k) {
  5131. cimg_std::sprintf(st_path,"D:\\GRAPHI~1.%d\\gm.exe",k);
  5132. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5133. }}
  5134. { for (int k = 32; k>=10 && !path_found; --k) {
  5135. cimg_std::sprintf(st_path,"D:\\GRAPHI~1.%.2d-\\VISUA~1\\BIN\\gm.exe",k);
  5136. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5137. }}
  5138. { for (int k = 9; k>=0 && !path_found; --k) {
  5139. cimg_std::sprintf(st_path,"D:\\GRAPHI~1.%d-Q\\VISUA~1\\BIN\\gm.exe",k);
  5140. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5141. }}
  5142. { for (int k = 32; k>=0 && !path_found; --k) {
  5143. cimg_std::sprintf(st_path,"D:\\GRAPHI~1.%d\\VISUA~1\\BIN\\gm.exe",k);
  5144. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5145. }}
  5146. if (!path_found) cimg_std::strcpy(st_path,"gm.exe");
  5147. #else
  5148. if (!path_found) {
  5149. cimg_std::sprintf(st_path,"./gm");
  5150. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5151. }
  5152. if (!path_found) cimg_std::strcpy(st_path,"gm");
  5153. #endif
  5154. winformat_string(st_path);
  5155. }
  5156. return st_path;
  5157. }
  5158. //! Return or set path of the \c XMedcon tool.
  5159. inline const char* medcon_path(const char *const user_path=0, const bool reinit_path=false) {
  5160. static char *st_path = 0;
  5161. if (reinit_path && st_path) { delete[] st_path; st_path = 0; }
  5162. if (user_path) {
  5163. if (!st_path) st_path = new char[1024];
  5164. cimg_std::memset(st_path,0,1024);
  5165. cimg_std::strncpy(st_path,user_path,1023);
  5166. } else if (!st_path) {
  5167. st_path = new char[1024];
  5168. cimg_std::memset(st_path,0,1024);
  5169. bool path_found = false;
  5170. cimg_std::FILE *file = 0;
  5171. #if cimg_OS==2
  5172. const char* pf_path = programfiles_path();
  5173. if (!path_found) {
  5174. cimg_std::sprintf(st_path,".\\medcon.bat");
  5175. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5176. }
  5177. if (!path_found) {
  5178. cimg_std::sprintf(st_path,".\\medcon.exe");
  5179. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5180. }
  5181. if (!path_found) {
  5182. cimg_std::sprintf(st_path,"%s\\XMedCon\\bin\\medcon.bat",pf_path);
  5183. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5184. }
  5185. if (!path_found) {
  5186. cimg_std::sprintf(st_path,"%s\\XMedCon\\bin\\medcon.exe",pf_path);
  5187. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5188. }
  5189. if (!path_found) cimg_std::strcpy(st_path,"medcon.bat");
  5190. #else
  5191. if (!path_found) {
  5192. cimg_std::sprintf(st_path,"./medcon");
  5193. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5194. }
  5195. if (!path_found) cimg_std::strcpy(st_path,"medcon");
  5196. #endif
  5197. winformat_string(st_path);
  5198. }
  5199. return st_path;
  5200. }
  5201. //! Return or set path to the 'ffmpeg' command.
  5202. inline const char *ffmpeg_path(const char *const user_path=0, const bool reinit_path=false) {
  5203. static char *st_path = 0;
  5204. if (reinit_path && st_path) { delete[] st_path; st_path = 0; }
  5205. if (user_path) {
  5206. if (!st_path) st_path = new char[1024];
  5207. cimg_std::memset(st_path,0,1024);
  5208. cimg_std::strncpy(st_path,user_path,1023);
  5209. } else if (!st_path) {
  5210. st_path = new char[1024];
  5211. cimg_std::memset(st_path,0,1024);
  5212. bool path_found = false;
  5213. cimg_std::FILE *file = 0;
  5214. #if cimg_OS==2
  5215. if (!path_found) {
  5216. cimg_std::sprintf(st_path,".\\ffmpeg.exe");
  5217. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5218. }
  5219. if (!path_found) cimg_std::strcpy(st_path,"ffmpeg.exe");
  5220. #else
  5221. if (!path_found) {
  5222. cimg_std::sprintf(st_path,"./ffmpeg");
  5223. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5224. }
  5225. if (!path_found) cimg_std::strcpy(st_path,"ffmpeg");
  5226. #endif
  5227. winformat_string(st_path);
  5228. }
  5229. return st_path;
  5230. }
  5231. //! Return or set path to the 'gzip' command.
  5232. inline const char *gzip_path(const char *const user_path=0, const bool reinit_path=false) {
  5233. static char *st_path = 0;
  5234. if (reinit_path && st_path) { delete[] st_path; st_path = 0; }
  5235. if (user_path) {
  5236. if (!st_path) st_path = new char[1024];
  5237. cimg_std::memset(st_path,0,1024);
  5238. cimg_std::strncpy(st_path,user_path,1023);
  5239. } else if (!st_path) {
  5240. st_path = new char[1024];
  5241. cimg_std::memset(st_path,0,1024);
  5242. bool path_found = false;
  5243. cimg_std::FILE *file = 0;
  5244. #if cimg_OS==2
  5245. if (!path_found) {
  5246. cimg_std::sprintf(st_path,".\\gzip.exe");
  5247. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5248. }
  5249. if (!path_found) cimg_std::strcpy(st_path,"gzip.exe");
  5250. #else
  5251. if (!path_found) {
  5252. cimg_std::sprintf(st_path,"./gzip");
  5253. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5254. }
  5255. if (!path_found) cimg_std::strcpy(st_path,"gzip");
  5256. #endif
  5257. winformat_string(st_path);
  5258. }
  5259. return st_path;
  5260. }
  5261. //! Return or set path to the 'gunzip' command.
  5262. inline const char *gunzip_path(const char *const user_path=0, const bool reinit_path=false) {
  5263. static char *st_path = 0;
  5264. if (reinit_path && st_path) { delete[] st_path; st_path = 0; }
  5265. if (user_path) {
  5266. if (!st_path) st_path = new char[1024];
  5267. cimg_std::memset(st_path,0,1024);
  5268. cimg_std::strncpy(st_path,user_path,1023);
  5269. } else if (!st_path) {
  5270. st_path = new char[1024];
  5271. cimg_std::memset(st_path,0,1024);
  5272. bool path_found = false;
  5273. cimg_std::FILE *file = 0;
  5274. #if cimg_OS==2
  5275. if (!path_found) {
  5276. cimg_std::sprintf(st_path,".\\gunzip.exe");
  5277. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5278. }
  5279. if (!path_found) cimg_std::strcpy(st_path,"gunzip.exe");
  5280. #else
  5281. if (!path_found) {
  5282. cimg_std::sprintf(st_path,"./gunzip");
  5283. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5284. }
  5285. if (!path_found) cimg_std::strcpy(st_path,"gunzip");
  5286. #endif
  5287. winformat_string(st_path);
  5288. }
  5289. return st_path;
  5290. }
  5291. //! Return or set path to the 'dcraw' command.
  5292. inline const char *dcraw_path(const char *const user_path=0, const bool reinit_path=false) {
  5293. static char *st_path = 0;
  5294. if (reinit_path && st_path) { delete[] st_path; st_path = 0; }
  5295. if (user_path) {
  5296. if (!st_path) st_path = new char[1024];
  5297. cimg_std::memset(st_path,0,1024);
  5298. cimg_std::strncpy(st_path,user_path,1023);
  5299. } else if (!st_path) {
  5300. st_path = new char[1024];
  5301. cimg_std::memset(st_path,0,1024);
  5302. bool path_found = false;
  5303. cimg_std::FILE *file = 0;
  5304. #if cimg_OS==2
  5305. if (!path_found) {
  5306. cimg_std::sprintf(st_path,".\\dcraw.exe");
  5307. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5308. }
  5309. if (!path_found) cimg_std::strcpy(st_path,"dcraw.exe");
  5310. #else
  5311. if (!path_found) {
  5312. cimg_std::sprintf(st_path,"./dcraw");
  5313. if ((file=cimg_std::fopen(st_path,"r"))!=0) { cimg_std::fclose(file); path_found = true; }
  5314. }
  5315. if (!path_found) cimg_std::strcpy(st_path,"dcraw");
  5316. #endif
  5317. winformat_string(st_path);
  5318. }
  5319. return st_path;
  5320. }
  5321. //! Split a filename into two strings 'body' and 'extension'.
  5322. inline const char *split_filename(const char *const filename, char *const body=0) {
  5323. if (!filename) { if (body) body[0]='\0'; return 0; }
  5324. int l = cimg::strfind(filename,'.');
  5325. if (l>=0) { if (body) { cimg_std::strncpy(body,filename,l); body[l]='\0'; }}
  5326. else { if (body) cimg_std::strcpy(body,filename); l = (int)cimg_std::strlen(filename)-1; }
  5327. return filename+l+1;
  5328. }
  5329. //! Create a numbered version of a filename.
  5330. inline char* number_filename(const char *const filename, const int number, const unsigned int n, char *const string) {
  5331. if (!filename) { if (string) string[0]='\0'; return 0; }
  5332. char format[1024],body[1024];
  5333. const char *ext = cimg::split_filename(filename,body);
  5334. if (n>0) cimg_std::sprintf(format,"%s_%%.%ud.%s",body,n,ext);
  5335. else cimg_std::sprintf(format,"%s_%%d.%s",body,ext);
  5336. cimg_std::sprintf(string,format,number);
  5337. return string;
  5338. }
  5339. //! Open a file, and check for possible errors.
  5340. inline cimg_std::FILE *fopen(const char *const path, const char *const mode) {
  5341. if(!path || !mode)
  5342. throw CImgArgumentException("cimg::fopen() : File '%s', cannot open with mode '%s'.",
  5343. path?path:"(null)",mode?mode:"(null)");
  5344. if (path[0]=='-') return (mode[0]=='r')?stdin:stdout;
  5345. cimg_std::FILE *dest = cimg_std::fopen(path,mode);
  5346. if (!dest)
  5347. throw CImgIOException("cimg::fopen() : File '%s', cannot open file %s",
  5348. path,mode[0]=='r'?"for reading.":(mode[0]=='w'?"for writing.":"."),path);
  5349. return dest;
  5350. }
  5351. //! Close a file, and check for possible errors.
  5352. inline int fclose(cimg_std::FILE *file) {
  5353. if (!file) warn("cimg::fclose() : Cannot close (null) file");
  5354. if (!file || file==stdin || file==stdout) return 0;
  5355. const int errn = cimg_std::fclose(file);
  5356. if (errn!=0) warn("cimg::fclose() : Error %d during file closing",errn);
  5357. return errn;
  5358. }
  5359. //! Try to guess the image format of a filename, using its magick numbers.
  5360. inline const char *file_type(cimg_std::FILE *const file, const char *const filename) {
  5361. static const char
  5362. *const _pnm = "pnm",
  5363. *const _bmp = "bmp",
  5364. *const _gif = "gif",
  5365. *const _jpeg = "jpeg",
  5366. *const _off = "off",
  5367. *const _pan = "pan",
  5368. *const _png = "png",
  5369. *const _tiff = "tiff";
  5370. if (!filename && !file) throw CImgArgumentException("cimg::file_type() : Cannot load (null) filename.");
  5371. cimg_std::FILE *const nfile = file?file:cimg::fopen(filename,"rb");
  5372. const char *ftype = 0, *head;
  5373. char header[2048], item[1024];
  5374. const unsigned char *const uheader = (unsigned char*)header;
  5375. int err;
  5376. const unsigned int siz = (unsigned int)cimg_std::fread(header,2048,1,nfile); // Read first 2048 bytes.
  5377. if (!file) cimg::fclose(nfile);
  5378. if (!ftype) { // Check for BMP format.
  5379. if (header[0]=='B' && header[1]=='M') ftype = _bmp;
  5380. }
  5381. if (!ftype) { // Check for GIF format.
  5382. if (header[0]=='G' && header[1]=='I' && header[2]=='F' && header[3]=='8' && header[5]=='a' &&
  5383. (header[4]=='7' || header[4]=='9')) ftype = _gif;
  5384. }
  5385. if (!ftype) { // Check for JPEG format.
  5386. if (uheader[0]==0xFF && uheader[1]==0xD8 && uheader[2]==0xFF) ftype = _jpeg;
  5387. }
  5388. if (!ftype) { // Check for OFF format.
  5389. if (header[0]=='O' && header[1]=='F' && header[2]=='F' && header[3]=='\n') ftype = _off;
  5390. }
  5391. if (!ftype) { // Check for PAN format.
  5392. if (header[0]=='P' && header[1]=='A' && header[2]=='N' && header[3]=='D' && header[4]=='O' &&
  5393. header[5]=='R' && header[6]=='E') ftype = _pan;
  5394. }
  5395. if (!ftype) { // Check for PNG format.
  5396. if (uheader[0]==0x89 && uheader[1]==0x50 && uheader[2]==0x4E && uheader[3]==0x47 &&
  5397. uheader[4]==0x0D && uheader[5]==0x0A && uheader[6]==0x1A && uheader[7]==0x0A) ftype = _png;
  5398. }
  5399. if (!ftype) { // Check for PNM format.
  5400. head = header;
  5401. while (head<header+siz && (err=cimg_std::sscanf(head,"%1023[^\n]",item))!=EOF && (item[0]=='#' || !err))
  5402. head+=1+(err?cimg_std::strlen(item):0);
  5403. if (cimg_std::sscanf(item," P%d",&err)==1) ftype = _pnm;
  5404. }
  5405. if (!ftype) { // Check for TIFF format.
  5406. if ((uheader[0]==0x49 && uheader[1]==0x49) || (uheader[0]==0x4D && uheader[1]==0x4D)) ftype = _tiff;
  5407. }
  5408. return ftype;
  5409. }
  5410. //! Read file data, and check for possible errors.
  5411. template<typename T>
  5412. inline int fread(T *const ptr, const unsigned int nmemb, cimg_std::FILE *stream) {
  5413. if (!ptr || nmemb<=0 || !stream)
  5414. throw CImgArgumentException("cimg::fread() : Cannot read %u x %u bytes of file pointer '%p' in buffer '%p'",
  5415. nmemb,sizeof(T),stream,ptr);
  5416. const unsigned long wlimitT = 63*1024*1024, wlimit = wlimitT/sizeof(T);
  5417. unsigned int toread = nmemb, alread = 0, ltoread = 0, lalread = 0;
  5418. do {
  5419. ltoread = (toread*sizeof(T))<wlimitT?toread:wlimit;
  5420. lalread = (unsigned int)cimg_std::fread((void*)(ptr+alread),sizeof(T),ltoread,stream);
  5421. alread+=lalread;
  5422. toread-=lalread;
  5423. } while (ltoread==lalread && toread>0);
  5424. if (toread>0) warn("cimg::fread() : File reading problems, only %u/%u elements read",alread,nmemb);
  5425. return alread;
  5426. }
  5427. //! Write data to a file, and check for possible errors.
  5428. template<typename T>
  5429. inline int fwrite(const T *ptr, const unsigned int nmemb, cimg_std::FILE *stream) {
  5430. if (!ptr || !stream)
  5431. throw CImgArgumentException("cimg::fwrite() : Cannot write %u x %u bytes of file pointer '%p' from buffer '%p'",
  5432. nmemb,sizeof(T),stream,ptr);
  5433. if (nmemb<=0) return 0;
  5434. const unsigned long wlimitT = 63*1024*1024, wlimit = wlimitT/sizeof(T);
  5435. unsigned int towrite = nmemb, alwrite = 0, ltowrite = 0, lalwrite = 0;
  5436. do {
  5437. ltowrite = (towrite*sizeof(T))<wlimitT?towrite:wlimit;
  5438. lalwrite = (unsigned int)cimg_std::fwrite((void*)(ptr+alwrite),sizeof(T),ltowrite,stream);
  5439. alwrite+=lalwrite;
  5440. towrite-=lalwrite;
  5441. } while (ltowrite==lalwrite && towrite>0);
  5442. if (towrite>0) warn("cimg::fwrite() : File writing problems, only %u/%u elements written",alwrite,nmemb);
  5443. return alwrite;
  5444. }
  5445. inline const char* option(const char *const name, const int argc, const char *const *const argv,
  5446. const char *defaut, const char *const usage=0) {
  5447. static bool first = true, visu = false;
  5448. const char *res = 0;
  5449. if (first) {
  5450. first=false;
  5451. visu = (cimg::option("-h",argc,argv,(char*)0)!=0);
  5452. visu |= (cimg::option("-help",argc,argv,(char*)0)!=0);
  5453. visu |= (cimg::option("--help",argc,argv,(char*)0)!=0);
  5454. }
  5455. if (!name && visu) {
  5456. if (usage) {
  5457. cimg_std::fprintf(cimg_stdout,"\n %s%s%s",cimg::t_red,cimg::basename(argv[0]),cimg::t_normal);
  5458. cimg_std::fprintf(cimg_stdout," : %s",usage);
  5459. cimg_std::fprintf(cimg_stdout," (%s, %s)\n\n",__DATE__,__TIME__);
  5460. }
  5461. if (defaut) cimg_std::fprintf(cimg_stdout,"%s\n",defaut);
  5462. }
  5463. if (name) {
  5464. if (argc>0) {
  5465. int k = 0;
  5466. while (k<argc && cimg::strcmp(argv[k],name)) ++k;
  5467. res = (k++==argc?defaut:(k==argc?argv[--k]:argv[k]));
  5468. } else res = defaut;
  5469. if (visu && usage) cimg_std::fprintf(cimg_stdout," %s%-16s%s %-24s %s%s%s\n",
  5470. cimg::t_bold,name,cimg::t_normal,res?res:"0",cimg::t_green,usage,cimg::t_normal);
  5471. }
  5472. return res;
  5473. }
  5474. inline bool option(const char *const name, const int argc, const char *const *const argv,
  5475. const bool defaut, const char *const usage=0) {
  5476. const char *s = cimg::option(name,argc,argv,(char*)0);
  5477. const bool res = s?(cimg::strcasecmp(s,"false") && cimg::strcasecmp(s,"off") && cimg::strcasecmp(s,"0")):defaut;
  5478. cimg::option(name,0,0,res?"true":"false",usage);
  5479. return res;
  5480. }
  5481. inline int option(const char *const name, const int argc, const char *const *const argv,
  5482. const int defaut, const char *const usage=0) {
  5483. const char *s = cimg::option(name,argc,argv,(char*)0);
  5484. const int res = s?cimg_std::atoi(s):defaut;
  5485. char tmp[256];
  5486. cimg_std::sprintf(tmp,"%d",res);
  5487. cimg::option(name,0,0,tmp,usage);
  5488. return res;
  5489. }
  5490. inline char option(const char *const name, const int argc, const char *const *const argv,
  5491. const char defaut, const char *const usage=0) {
  5492. const char *s = cimg::option(name,argc,argv,(char*)0);
  5493. const char res = s?s[0]:defaut;
  5494. char tmp[8];
  5495. tmp[0] = res; tmp[1] ='\0';
  5496. cimg::option(name,0,0,tmp,usage);
  5497. return res;
  5498. }
  5499. inline float option(const char *const name, const int argc, const char *const *const argv,
  5500. const float defaut, const char *const usage=0) {
  5501. const char *s = cimg::option(name,argc,argv,(char*)0);
  5502. const float res = s?cimg::atof(s):defaut;
  5503. char tmp[256];
  5504. cimg_std::sprintf(tmp,"%g",res);
  5505. cimg::option(name,0,0,tmp,usage);
  5506. return res;
  5507. }
  5508. inline double option(const char *const name, const int argc, const char *const *const argv,
  5509. const double defaut, const char *const usage=0) {
  5510. const char *s = cimg::option(name,argc,argv,(char*)0);
  5511. const double res = s?cimg::atof(s):defaut;
  5512. char tmp[256];
  5513. cimg_std::sprintf(tmp,"%g",res);
  5514. cimg::option(name,0,0,tmp,usage);
  5515. return res;
  5516. }
  5517. inline const char* argument(const unsigned int nb, const int argc, const char *const *const argv, const unsigned int nb_singles=0, ...) {
  5518. for (int k = 1, pos = 0; k<argc;) {
  5519. const char *const item = argv[k];
  5520. bool option = (*item=='-'), single_option = false;
  5521. if (option) {
  5522. va_list ap;
  5523. va_start(ap,nb_singles);
  5524. for (unsigned int i = 0; i<nb_singles; ++i) if (!cimg::strcasecmp(item,va_arg(ap,char*))) { single_option = true; break; }
  5525. va_end(ap);
  5526. }
  5527. if (option) { ++k; if (!single_option) ++k; }
  5528. else { if (pos++==(int)nb) return item; else ++k; }
  5529. }
  5530. return 0;
  5531. }
  5532. //! Print informations about %CImg environement variables.
  5533. /**
  5534. Printing is done on the standard error output.
  5535. **/
  5536. inline void info() {
  5537. char tmp[1024] = { 0 };
  5538. cimg_std::fprintf(cimg_stdout,"\n %sCImg Library %u.%u.%u%s, compiled %s ( %s ) with the following flags :\n\n",
  5539. cimg::t_red,cimg_version/100,(cimg_version/10)%10,cimg_version%10,
  5540. cimg::t_normal,__DATE__,__TIME__);
  5541. cimg_std::fprintf(cimg_stdout," > Operating System : %s%-13s%s %s('cimg_OS'=%d)%s\n",
  5542. cimg::t_bold,
  5543. cimg_OS==1?"Unix":(cimg_OS==2?"Windows":"Unknow"),
  5544. cimg::t_normal,cimg::t_green,
  5545. cimg_OS,
  5546. cimg::t_normal);
  5547. cimg_std::fprintf(cimg_stdout," > CPU endianness : %s%s Endian%s\n",
  5548. cimg::t_bold,
  5549. cimg::endianness()?"Big":"Little",
  5550. cimg::t_normal);
  5551. #ifdef cimg_use_visualcpp6
  5552. cimg_std::fprintf(cimg_stdout," > Using Visual C++ 6.0 : %s%-13s%s %s('cimg_use_visualcpp6' defined)%s\n",
  5553. cimg::t_bold,"Yes",cimg::t_normal,cimg::t_green,cimg::t_normal);
  5554. #endif
  5555. cimg_std::fprintf(cimg_stdout," > Debug messages : %s%-13s%s %s('cimg_debug'=%d)%s\n",
  5556. cimg::t_bold,
  5557. cimg_debug==0?"Quiet":(cimg_debug==1?"Console":(cimg_debug==2?"Dialog":(cimg_debug==3?"Console+Warnings":"Dialog+Warnings"))),
  5558. cimg::t_normal,cimg::t_green,
  5559. cimg_debug,
  5560. cimg::t_normal);
  5561. cimg_std::fprintf(cimg_stdout," > Stricts warnings : %s%-13s%s %s('cimg_strict_warnings' %s)%s\n",
  5562. cimg::t_bold,
  5563. #ifdef cimg_strict_warnings
  5564. "Yes",cimg::t_normal,cimg::t_green,"defined",
  5565. #else
  5566. "No",cimg::t_normal,cimg::t_green,"undefined",
  5567. #endif
  5568. cimg::t_normal);
  5569. cimg_std::fprintf(cimg_stdout," > Using VT100 messages : %s%-13s%s %s('cimg_use_vt100' %s)%s\n",
  5570. cimg::t_bold,
  5571. #ifdef cimg_use_vt100
  5572. "Yes",cimg::t_normal,cimg::t_green,"defined",
  5573. #else
  5574. "No",cimg::t_normal,cimg::t_green,"undefined",
  5575. #endif
  5576. cimg::t_normal);
  5577. cimg_std::fprintf(cimg_stdout," > Display type : %s%-13s%s %s('cimg_display'=%d)%s\n",
  5578. cimg::t_bold,
  5579. cimg_display==0?"No display":
  5580. (cimg_display==1?"X11":
  5581. (cimg_display==2?"Windows GDI":
  5582. (cimg_display==3?"Carbon":"Unknow"))),
  5583. cimg::t_normal,cimg::t_green,
  5584. cimg_display,
  5585. cimg::t_normal);
  5586. #if cimg_display==1
  5587. cimg_std::fprintf(cimg_stdout," > Using XShm for X11 : %s%-13s%s %s('cimg_use_xshm' %s)%s\n",
  5588. cimg::t_bold,
  5589. #ifdef cimg_use_xshm
  5590. "Yes",cimg::t_normal,cimg::t_green,"defined",
  5591. #else
  5592. "No",cimg::t_normal,cimg::t_green,"undefined",
  5593. #endif
  5594. cimg::t_normal);
  5595. cimg_std::fprintf(cimg_stdout," > Using XRand for X11 : %s%-13s%s %s('cimg_use_xrandr' %s)%s\n",
  5596. cimg::t_bold,
  5597. #ifdef cimg_use_xrandr
  5598. "Yes",cimg::t_normal,cimg::t_green,"defined",
  5599. #else
  5600. "No",cimg::t_normal,cimg::t_green,"undefined",
  5601. #endif
  5602. cimg::t_normal);
  5603. #endif
  5604. cimg_std::fprintf(cimg_stdout," > Using OpenMP : %s%-13s%s %s('cimg_use_openmp' %s)%s\n",
  5605. cimg::t_bold,
  5606. #ifdef cimg_use_openmp
  5607. "Yes",cimg::t_normal,cimg::t_green,"defined",
  5608. #else
  5609. "No",cimg::t_normal,cimg::t_green,"undefined",
  5610. #endif
  5611. cimg::t_normal);
  5612. cimg_std::fprintf(cimg_stdout," > Using PNG library : %s%-13s%s %s('cimg_use_png' %s)%s\n",
  5613. cimg::t_bold,
  5614. #ifdef cimg_use_png
  5615. "Yes",cimg::t_normal,cimg::t_green,"defined",
  5616. #else
  5617. "No",cimg::t_normal,cimg::t_green,"undefined",
  5618. #endif
  5619. cimg::t_normal);
  5620. cimg_std::fprintf(cimg_stdout," > Using JPEG library : %s%-13s%s %s('cimg_use_jpeg' %s)%s\n",
  5621. cimg::t_bold,
  5622. #ifdef cimg_use_jpeg
  5623. "Yes",cimg::t_normal,cimg::t_green,"defined",
  5624. #else
  5625. "No",cimg::t_normal,cimg::t_green,"undefined",
  5626. #endif
  5627. cimg::t_normal);
  5628. cimg_std::fprintf(cimg_stdout," > Using TIFF library : %s%-13s%s %s('cimg_use_tiff' %s)%s\n",
  5629. cimg::t_bold,
  5630. #ifdef cimg_use_tiff
  5631. "Yes",cimg::t_normal,cimg::t_green,"defined",
  5632. #else
  5633. "No",cimg::t_normal,cimg::t_green,"undefined",
  5634. #endif
  5635. cimg::t_normal);
  5636. cimg_std::fprintf(cimg_stdout," > Using Magick++ library : %s%-13s%s %s('cimg_use_magick' %s)%s\n",
  5637. cimg::t_bold,
  5638. #ifdef cimg_use_magick
  5639. "Yes",cimg::t_normal,cimg::t_green,"defined",
  5640. #else
  5641. "No",cimg::t_normal,cimg::t_green,"undefined",
  5642. #endif
  5643. cimg::t_normal);
  5644. cimg_std::fprintf(cimg_stdout," > Using FFTW3 library : %s%-13s%s %s('cimg_use_fftw3' %s)%s\n",
  5645. cimg::t_bold,
  5646. #ifdef cimg_use_fftw3
  5647. "Yes",cimg::t_normal,cimg::t_green,"defined",
  5648. #else
  5649. "No",cimg::t_normal,cimg::t_green,"undefined",
  5650. #endif
  5651. cimg::t_normal);
  5652. cimg_std::fprintf(cimg_stdout," > Using LAPACK library : %s%-13s%s %s('cimg_use_lapack' %s)%s\n",
  5653. cimg::t_bold,
  5654. #ifdef cimg_use_lapack
  5655. "Yes",cimg::t_normal,cimg::t_green,"defined",
  5656. #else
  5657. "No",cimg::t_normal,cimg::t_green,"undefined",
  5658. #endif
  5659. cimg::t_normal);
  5660. cimg_std::sprintf(tmp,"\"%.1020s\"",cimg::imagemagick_path());
  5661. cimg_std::fprintf(cimg_stdout," > Path of ImageMagick : %s%-13s%s\n",
  5662. cimg::t_bold,
  5663. tmp,
  5664. cimg::t_normal);
  5665. cimg_std::sprintf(tmp,"\"%.1020s\"",cimg::graphicsmagick_path());
  5666. cimg_std::fprintf(cimg_stdout," > Path of GraphicsMagick : %s%-13s%s\n",
  5667. cimg::t_bold,
  5668. tmp,
  5669. cimg::t_normal);
  5670. cimg_std::sprintf(tmp,"\"%.1020s\"",cimg::medcon_path());
  5671. cimg_std::fprintf(cimg_stdout," > Path of 'medcon' : %s%-13s%s\n",
  5672. cimg::t_bold,
  5673. tmp,
  5674. cimg::t_normal);
  5675. cimg_std::sprintf(tmp,"\"%.1020s\"",cimg::temporary_path());
  5676. cimg_std::fprintf(cimg_stdout," > Temporary path : %s%-13s%s\n",
  5677. cimg::t_bold,
  5678. tmp,
  5679. cimg::t_normal);
  5680. cimg_std::fprintf(cimg_stdout,"\n");
  5681. }
  5682. // Declare LAPACK function signatures if necessary.
  5683. //
  5684. #ifdef cimg_use_lapack
  5685. template<typename T>
  5686. inline void getrf(int &N, T *lapA, int *IPIV, int &INFO) {
  5687. dgetrf_(&N,&N,lapA,&N,IPIV,&INFO);
  5688. }
  5689. inline void getrf(int &N, float *lapA, int *IPIV, int &INFO) {
  5690. sgetrf_(&N,&N,lapA,&N,IPIV,&INFO);
  5691. }
  5692. template<typename T>
  5693. inline void getri(int &N, T *lapA, int *IPIV, T* WORK, int &LWORK, int &INFO) {
  5694. dgetri_(&N,lapA,&N,IPIV,WORK,&LWORK,&INFO);
  5695. }
  5696. inline void getri(int &N, float *lapA, int *IPIV, float* WORK, int &LWORK, int &INFO) {
  5697. sgetri_(&N,lapA,&N,IPIV,WORK,&LWORK,&INFO);
  5698. }
  5699. template<typename T>
  5700. inline void gesvd(char &JOB, int &M, int &N, T *lapA, int &MN,
  5701. T *lapS, T *lapU, T *lapV, T *WORK, int &LWORK, int &INFO) {
  5702. dgesvd_(&JOB,&JOB,&M,&N,lapA,&MN,lapS,lapU,&M,lapV,&N,WORK,&LWORK,&INFO);
  5703. }
  5704. inline void gesvd(char &JOB, int &M, int &N, float *lapA, int &MN,
  5705. float *lapS, float *lapU, float *lapV, float *WORK, int &LWORK, int &INFO) {
  5706. sgesvd_(&JOB,&JOB,&M,&N,lapA,&MN,lapS,lapU,&M,lapV,&N,WORK,&LWORK,&INFO);
  5707. }
  5708. template<typename T>
  5709. inline void getrs(char &TRANS, int &N, T *lapA, int *IPIV, T *lapB, int &INFO) {
  5710. int one = 1;
  5711. dgetrs_(&TRANS,&N,&one,lapA,&N,IPIV,lapB,&N,&INFO);
  5712. }
  5713. inline void getrs(char &TRANS, int &N, float *lapA, int *IPIV, float *lapB, int &INFO) {
  5714. int one = 1;
  5715. sgetrs_(&TRANS,&N,&one,lapA,&N,IPIV,lapB,&N,&INFO);
  5716. }
  5717. template<typename T>
  5718. inline void syev(char &JOB, char &UPLO, int &N, T *lapA, T *lapW, T *WORK, int &LWORK, int &INFO) {
  5719. dsyev_(&JOB,&UPLO,&N,lapA,&N,lapW,WORK,&LWORK,&INFO);
  5720. }
  5721. inline void syev(char &JOB, char &UPLO, int &N, float *lapA, float *lapW, float *WORK, int &LWORK, int &INFO) {
  5722. ssyev_(&JOB,&UPLO,&N,lapA,&N,lapW,WORK,&LWORK,&INFO);
  5723. }
  5724. #endif
  5725. // End of the 'cimg' namespace
  5726. }
  5727. /*------------------------------------------------
  5728. #
  5729. #
  5730. # Definition of mathematical operators and
  5731. # external functions.
  5732. #
  5733. #
  5734. -------------------------------------------------*/
  5735. //
  5736. // These functions are extern to any classes and can be used for a "functional-style" programming,
  5737. // such as writting :
  5738. // cos(img);
  5739. // instead of img.get_cos();
  5740. //
  5741. // Note that only the arithmetic operators and functions are implemented here.
  5742. //
  5743. #ifdef cimg_use_visualcpp6
  5744. template<typename t>
  5745. inline CImg<t> operator+(const CImg<t>& img, const t val) {
  5746. return CImg<t>(img,false)+=val;
  5747. }
  5748. #else
  5749. template<typename t1, typename t2>
  5750. inline CImg<typename cimg::superset<t1,t2>::type> operator+(const CImg<t1>& img, const t2 val) {
  5751. typedef typename cimg::superset<t1,t2>::type t1t2;
  5752. return CImg<t1t2>(img,false)+=val;
  5753. }
  5754. #endif
  5755. #ifdef cimg_use_visualcpp6
  5756. template<typename t>
  5757. inline CImg<t> operator+(const t val, const CImg<t>& img) {
  5758. return img + val;
  5759. }
  5760. #else
  5761. template<typename t1, typename t2>
  5762. inline CImg<typename cimg::superset<t1,t2>::type> operator+(const t1 val, const CImg<t2>& img) {
  5763. return img + val;
  5764. }
  5765. #endif
  5766. #ifdef cimg_use_visualcpp6
  5767. template<typename t>
  5768. inline CImgList<t> operator+(const CImgList<t>& list, const t val) {
  5769. return CImgList<t>(list)+=val;
  5770. }
  5771. #else
  5772. template<typename t1, typename t2>
  5773. inline CImgList<typename cimg::superset<t1,t2>::type> operator+(const CImgList<t1>& list, const t2 val) {
  5774. typedef typename cimg::superset<t1,t2>::type t1t2;
  5775. return CImgList<t1t2>(list)+=val;
  5776. }
  5777. #endif
  5778. #ifdef cimg_use_visualcpp6
  5779. template<typename t>
  5780. inline CImgList<t> operator+(const t val, const CImgList<t>& list) {
  5781. return list + val;
  5782. }
  5783. #else
  5784. template<typename t1, typename t2>
  5785. inline CImgList<typename cimg::superset<t1,t2>::type> operator+(const t1 val, const CImgList<t2>& list) {
  5786. return list + val;
  5787. }
  5788. #endif
  5789. template<typename t1, typename t2>
  5790. inline CImg<typename cimg::superset<t1,t2>::type> operator+(const CImg<t1>& img1, const CImg<t2>& img2) {
  5791. typedef typename cimg::superset<t1,t2>::type t1t2;
  5792. return CImg<t1t2>(img1,false)+=img2;
  5793. }
  5794. template<typename t1, typename t2>
  5795. inline CImgList<typename cimg::superset<t1,t2>::type> operator+(const CImg<t1>& img, const CImgList<t2>& list) {
  5796. typedef typename cimg::superset<t1,t2>::type t1t2;
  5797. return CImgList<t1t2>(list)+=img;
  5798. }
  5799. template<typename t1, typename t2>
  5800. inline CImgList<typename cimg::superset<t1,t2>::type> operator+(const CImgList<t1>& list, const CImg<t2>& img) {
  5801. return img + list;
  5802. }
  5803. template<typename t1, typename t2>
  5804. inline CImgList<typename cimg::superset<t1,t2>::type> operator+(const CImgList<t1>& list1, const CImgList<t2>& list2) {
  5805. typedef typename cimg::superset<t1,t2>::type t1t2;
  5806. return CImgList<t1t2>(list1)+=list2;
  5807. }
  5808. #ifdef cimg_use_visualcpp6
  5809. template<typename t>
  5810. inline CImg<t> operator-(const CImg<t>& img, const t val) {
  5811. return CImg<t>(img,false)-=val;
  5812. }
  5813. #else
  5814. template<typename t1, typename t2>
  5815. inline CImg<typename cimg::superset<t1,t2>::type> operator-(const CImg<t1>& img, const t2 val) {
  5816. typedef typename cimg::superset<t1,t2>::type t1t2;
  5817. return CImg<t1t2>(img,false)-=val;
  5818. }
  5819. #endif
  5820. #ifdef cimg_use_visualcpp6
  5821. template<typename t>
  5822. inline CImg<t> operator-(const t val, const CImg<t>& img) {
  5823. return CImg<t>(img.width,img.height,img.depth,img.dim,val)-=img;
  5824. }
  5825. #else
  5826. template<typename t1, typename t2>
  5827. inline CImg<typename cimg::superset<t1,t2>::type> operator-(const t1 val, const CImg<t2>& img) {
  5828. typedef typename cimg::superset<t1,t2>::type t1t2;
  5829. return CImg<t1t2>(img.width,img.height,img.depth,img.dim,(t1t2)val)-=img;
  5830. }
  5831. #endif
  5832. #ifdef cimg_use_visualcpp6
  5833. template<typename t>
  5834. inline CImgList<t> operator-(const CImgList<t>& list, const t val) {
  5835. return CImgList<t>(list)-=val;
  5836. }
  5837. #else
  5838. template<typename t1, typename t2>
  5839. inline CImgList<typename cimg::superset<t1,t2>::type> operator-(const CImgList<t1>& list, const t2 val) {
  5840. typedef typename cimg::superset<t1,t2>::type t1t2;
  5841. return CImgList<t1t2>(list)-=val;
  5842. }
  5843. #endif
  5844. #ifdef cimg_use_visualcpp6
  5845. template<typename t>
  5846. inline CImgList<double> operator-(const t val, const CImgList<t>& list) {
  5847. CImgList<t> res(list.size);
  5848. cimglist_for(res,l) res[l] = val - list[l];
  5849. return res;
  5850. }
  5851. #else
  5852. template<typename t1, typename t2>
  5853. inline CImgList<typename cimg::superset<t1,t2>::type> operator-(const t1 val, const CImgList<t2>& list) {
  5854. typedef typename cimg::superset<t1,t2>::type t1t2;
  5855. CImgList<t1t2> res(list.size);
  5856. cimglist_for(res,l) res[l] = val - list[l];
  5857. return res;
  5858. }
  5859. #endif
  5860. template<typename t1, typename t2>
  5861. inline CImg<typename cimg::superset<t1,t2>::type> operator-(const CImg<t1>& img1, const CImg<t2>& img2) {
  5862. typedef typename cimg::superset<t1,t2>::type t1t2;
  5863. return CImg<t1t2>(img1,false)-=img2;
  5864. }
  5865. template<typename t1, typename t2>
  5866. inline CImgList<typename cimg::superset<t1,t2>::type> operator-(const CImg<t1>& img, const CImgList<t2>& list) {
  5867. typedef typename cimg::superset<t1,t2>::type t1t2;
  5868. CImgList<t1t2> res(list.size);
  5869. cimglist_for(res,l) res[l] = img - list[l];
  5870. return res;
  5871. }
  5872. template<typename t1, typename t2>
  5873. inline CImgList<typename cimg::superset<t1,t2>::type> operator-(const CImgList<t1>& list, const CImg<t2>& img) {
  5874. typedef typename cimg::superset<t1,t2>::type t1t2;
  5875. return CImgList<t1t2>(list)-=img;
  5876. }
  5877. template<typename t1, typename t2>
  5878. inline CImgList<typename cimg::superset<t1,t2>::type> operator-(const CImgList<t1>& list1, const CImgList<t2>& list2) {
  5879. typedef typename cimg::superset<t1,t2>::type t1t2;
  5880. return CImgList<t1t2>(list1)-=list2;
  5881. }
  5882. #ifdef cimg_use_visualcpp6
  5883. template<typename t>
  5884. inline CImg<t> operator*(const CImg<t>& img, const double val) {
  5885. return CImg<t>(img,false)*=val;
  5886. }
  5887. #else
  5888. template<typename t1, typename t2>
  5889. inline CImg<typename cimg::superset<t1,t2>::type> operator*(const CImg<t1>& img, const t2 val) {
  5890. typedef typename cimg::superset<t1,t2>::type t1t2;
  5891. return CImg<t1t2>(img,false)*=val;
  5892. }
  5893. #endif
  5894. #ifdef cimg_use_visualcpp6
  5895. template<typename t>
  5896. inline CImg<t> operator*(const double val, const CImg<t>& img) {
  5897. return img*val;
  5898. }
  5899. #else
  5900. template<typename t1, typename t2>
  5901. inline CImg<typename cimg::superset<t1,t2>::type> operator*(const t1 val, const CImg<t2>& img) {
  5902. return img*val;
  5903. }
  5904. #endif
  5905. #ifdef cimg_use_visualcpp6
  5906. template<typename t>
  5907. inline CImgList<t> operator*(const CImgList<t>& list, const double val) {
  5908. return CImgList<t>(list)*=val;
  5909. }
  5910. #else
  5911. template<typename t1, typename t2>
  5912. inline CImgList<typename cimg::superset<t1,t2>::type> operator*(const CImgList<t1>& list, const t2 val) {
  5913. typedef typename cimg::superset<t1,t2>::type t1t2;
  5914. return CImgList<t1t2>(list)*=val;
  5915. }
  5916. #endif
  5917. #ifdef cimg_use_visualcpp6
  5918. template<typename t>
  5919. inline CImgList<t> operator*(const double val, const CImgList<t>& list) {
  5920. return list*val;
  5921. }
  5922. #else
  5923. template<typename t1, typename t2>
  5924. inline CImgList<typename cimg::superset<t1,t2>::type> operator*(const t1 val, const CImgList<t2>& list) {
  5925. return list*val;
  5926. }
  5927. #endif
  5928. template<typename t1, typename t2>
  5929. inline CImg<typename cimg::superset<t1,t2>::type> operator*(const CImg<t1>& img1, const CImg<t2>& img2) {
  5930. typedef typename cimg::superset<t1,t2>::type t1t2;
  5931. if (img1.width!=img2.height)
  5932. throw CImgArgumentException("operator*() : can't multiply a matrix (%ux%u) by a matrix (%ux%u)",
  5933. img1.width,img1.height,img2.width,img2.height);
  5934. CImg<t1t2> res(img2.width,img1.height);
  5935. t1t2 val;
  5936. #ifdef cimg_use_openmp
  5937. #pragma omp parallel for if (img1.size()>=1000 && img2.size()>=1000) private(val)
  5938. #endif
  5939. cimg_forXY(res,i,j) { val = 0; cimg_forX(img1,k) val+=img1(k,j)*img2(i,k); res(i,j) = val; }
  5940. return res;
  5941. }
  5942. template<typename t1, typename t2>
  5943. inline CImgList<typename cimg::superset<t1,t2>::type> operator*(const CImg<t1>& img, const CImgList<t2>& list) {
  5944. typedef typename cimg::superset<t1,t2>::type t1t2;
  5945. CImgList<t1t2> res(list.size);
  5946. cimglist_for(res,l) res[l] = img*list[l];
  5947. return res;
  5948. }
  5949. template<typename t1, typename t2>
  5950. inline CImgList<typename cimg::superset<t1,t2>::type> operator*(const CImgList<t1>& list, const CImg<t2>& img) {
  5951. typedef typename cimg::superset<t1,t2>::type t1t2;
  5952. CImgList<t1t2> res(list.size);
  5953. cimglist_for(res,l) res[l] = list[l]*img;
  5954. return res;
  5955. }
  5956. template<typename t1, typename t2>
  5957. inline CImgList<typename cimg::superset<t1,t2>::type> operator*(const CImgList<t1>& list1, const CImgList<t2>& list2) {
  5958. typedef typename cimg::superset<t1,t2>::type t1t2;
  5959. CImgList<t1t2> res(cimg::min(list1.size,list2.size));
  5960. cimglist_for(res,l) res[l] = list1[l]*list2[l];
  5961. return res;
  5962. }
  5963. #ifdef cimg_use_visualcpp6
  5964. template<typename t>
  5965. inline CImg<t> operator/(const CImg<t>& img, const double val) {
  5966. return CImg<t>(img,false)/=val;
  5967. }
  5968. #else
  5969. template<typename t1, typename t2>
  5970. inline CImg<typename cimg::superset<t1,t2>::type> operator/(const CImg<t1>& img, const t2 val) {
  5971. typedef typename cimg::superset<t1,t2>::type t1t2;
  5972. return CImg<t1t2>(img,false)/=val;
  5973. }
  5974. #endif
  5975. #ifdef cimg_use_visualcpp6
  5976. template<typename t>
  5977. inline CImg<t> operator/(const double val, CImg<t>& img) {
  5978. return val*img.get_invert();
  5979. }
  5980. #else
  5981. template<typename t1, typename t2>
  5982. inline CImg<typename cimg::superset<t1,t2>::type> operator/(const t1 val, CImg<t2>& img) {
  5983. return val*img.get_invert();
  5984. }
  5985. #endif
  5986. #ifdef cimg_use_visualcpp6
  5987. template<typename t>
  5988. inline CImgList<t> operator/(const CImgList<t>& list, const double val) {
  5989. return CImgList<t>(list)/=val;
  5990. }
  5991. #else
  5992. template<typename t1, typename t2>
  5993. inline CImgList<typename cimg::superset<t1,t2>::type> operator/(const CImgList<t1>& list, const t2 val) {
  5994. typedef typename cimg::superset<t1,t2>::type t1t2;
  5995. return CImgList<t1t2>(list)/=val;
  5996. }
  5997. #endif
  5998. #ifdef cimg_use_visualcpp6
  5999. template<typename t>
  6000. inline CImgList<t> operator/(const double val, const CImgList<t>& list) {
  6001. CImgList<t> res(list.size);
  6002. cimglist_for(res,l) res[l] = val/list[l];
  6003. return res;
  6004. }
  6005. #else
  6006. template<typename t1, typename t2>
  6007. inline CImgList<typename cimg::superset<t1,t2>::type> operator/(const t1 val, const CImgList<t2>& list) {
  6008. typedef typename cimg::superset<t1,t2>::type t1t2;
  6009. CImgList<t1t2> res(list.size);
  6010. cimglist_for(res,l) res[l] = val/list[l];
  6011. return res;
  6012. }
  6013. #endif
  6014. template<typename t1, typename t2>
  6015. inline CImg<typename cimg::superset<t1,t2>::type> operator/(const CImg<t1>& img1, const CImg<t2>& img2) {
  6016. typedef typename cimg::superset<t1,t2>::type t1t2;
  6017. return CImg<t1t2>(img1,false)*=img2.get_invert();
  6018. }
  6019. template<typename t1, typename t2>
  6020. inline CImg<typename cimg::superset<t1,t2>::type> operator/(const CImg<t1>& img, const CImgList<t2>& list) {
  6021. typedef typename cimg::superset<t1,t2>::type t1t2;
  6022. CImgList<t1t2> res(list.size);
  6023. cimglist_for(res,l) res[l] = img/list[l];
  6024. return res;
  6025. }
  6026. template<typename t1, typename t2>
  6027. inline CImgList<typename cimg::superset<t1,t2>::type> operator/(const CImgList<t1>& list, const CImg<t2>& img) {
  6028. typedef typename cimg::superset<t1,t2>::type t1t2;
  6029. return CImgList<t1t2>(list)/=img;
  6030. }
  6031. template<typename t1, typename t2>
  6032. inline CImgList<typename cimg::superset<t1,t2>::type> operator/(const CImgList<t1>& list1, const CImgList<t2>& list2) {
  6033. typedef typename cimg::superset<t1,t2>::type t1t2;
  6034. return CImgList<t1t2>(list1)/=list2;
  6035. }
  6036. template<typename T>
  6037. inline CImg<_cimg_Tfloat> sqr(const CImg<T>& instance) {
  6038. return instance.get_sqr();
  6039. }
  6040. template<typename T>
  6041. inline CImg<_cimg_Tfloat> sqrt(const CImg<T>& instance) {
  6042. return instance.get_sqrt();
  6043. }
  6044. template<typename T>
  6045. inline CImg<_cimg_Tfloat> exp(const CImg<T>& instance) {
  6046. return instance.get_exp();
  6047. }
  6048. template<typename T>
  6049. inline CImg<_cimg_Tfloat> log(const CImg<T>& instance) {
  6050. return instance.get_log();
  6051. }
  6052. template<typename T>
  6053. inline CImg<_cimg_Tfloat> log10(const CImg<T>& instance) {
  6054. return instance.get_log10();
  6055. }
  6056. template<typename T>
  6057. inline CImg<_cimg_Tfloat> abs(const CImg<T>& instance) {
  6058. return instance.get_abs();
  6059. }
  6060. template<typename T>
  6061. inline CImg<_cimg_Tfloat> cos(const CImg<T>& instance) {
  6062. return instance.get_cos();
  6063. }
  6064. template<typename T>
  6065. inline CImg<_cimg_Tfloat> sin(const CImg<T>& instance) {
  6066. return instance.get_sin();
  6067. }
  6068. template<typename T>
  6069. inline CImg<_cimg_Tfloat> tan(const CImg<T>& instance) {
  6070. return instance.get_tan();
  6071. }
  6072. template<typename T>
  6073. inline CImg<_cimg_Tfloat> acos(const CImg<T>& instance) {
  6074. return instance.get_acos();
  6075. }
  6076. template<typename T>
  6077. inline CImg<_cimg_Tfloat> asin(const CImg<T>& instance) {
  6078. return instance.get_asin();
  6079. }
  6080. template<typename T>
  6081. inline CImg<_cimg_Tfloat> atan(const CImg<T>& instance) {
  6082. return instance.get_atan();
  6083. }
  6084. template<typename t1, typename t2>
  6085. inline CImg<typename cimg::superset2<t1,t2,float>::type> atan2(const CImg<t1>& instancey, const CImg<t2>& instancex) {
  6086. return instancey.get_atan2(instancex);
  6087. }
  6088. template<typename T>
  6089. inline CImg<_cimg_Tfloat> cosh(const CImg<T>& instance) {
  6090. return instance.get_cosh();
  6091. }
  6092. template<typename T>
  6093. inline CImg<_cimg_Tfloat> sinh(const CImg<T>& instance) {
  6094. return instance.get_sinh();
  6095. }
  6096. template<typename T>
  6097. inline CImg<_cimg_Tfloat> tanh(const CImg<T>& instance) {
  6098. return instance.get_tanh();
  6099. }
  6100. template<typename T>
  6101. inline CImg<T> transpose(const CImg<T>& instance) {
  6102. return instance.get_transpose();
  6103. }
  6104. template<typename T>
  6105. inline CImg<_cimg_Tfloat> invert(const CImg<T>& instance) {
  6106. return instance.get_invert();
  6107. }
  6108. template<typename T>
  6109. inline CImg<_cimg_Tfloat> pseudoinvert(const CImg<T>& instance) {
  6110. return instance.get_pseudoinvert();
  6111. }
  6112. /*-------------------------------------------
  6113. #
  6114. #
  6115. #
  6116. # Definition of the CImgDisplay structure
  6117. #
  6118. #
  6119. #
  6120. --------------------------------------------*/
  6121. //! This class represents a window which can display \ref CImg images and handles mouse and keyboard events.
  6122. /**
  6123. Creating a \c CImgDisplay instance opens a window that can be used to display a \c CImg<T> image
  6124. of a \c CImgList<T> image list inside. When a display is created, associated window events
  6125. (such as mouse motion, keyboard and window size changes) are handled and can be easily
  6126. detected by testing specific \c CImgDisplay data fields.
  6127. See \ref cimg_displays for a complete tutorial on using the \c CImgDisplay class.
  6128. **/
  6129. struct CImgDisplay {
  6130. //! Width of the display
  6131. unsigned int width;
  6132. //! Height of the display
  6133. unsigned int height;
  6134. //! Normalization type used for the display
  6135. unsigned int normalization;
  6136. //! Display title
  6137. char* title;
  6138. //! X-pos of the display on the screen
  6139. volatile int window_x;
  6140. //! Y-pos of the display on the screen
  6141. volatile int window_y;
  6142. //! Width of the underlying window
  6143. volatile unsigned int window_width;
  6144. //! Height of the underlying window
  6145. volatile unsigned int window_height;
  6146. //! X-coordinate of the mouse pointer on the display
  6147. volatile int mouse_x;
  6148. //! Y-coordinate of the mouse pointer on the display
  6149. volatile int mouse_y;
  6150. //! Button state of the mouse
  6151. volatile unsigned int buttons[512];
  6152. volatile unsigned int& button;
  6153. //! Wheel state of the mouse
  6154. volatile int wheel;
  6155. //! Key value if pressed
  6156. volatile unsigned int& key;
  6157. volatile unsigned int keys[512];
  6158. //! Key value if released
  6159. volatile unsigned int& released_key;
  6160. volatile unsigned int released_keys[512];
  6161. //! Closed state of the window
  6162. volatile bool is_closed;
  6163. //! Resized state of the window
  6164. volatile bool is_resized;
  6165. //! Moved state of the window
  6166. volatile bool is_moved;
  6167. //! Event state of the window
  6168. volatile bool is_event;
  6169. //! Current state of the corresponding key (exists for all referenced keys).
  6170. volatile bool is_keyESC;
  6171. volatile bool is_keyF1;
  6172. volatile bool is_keyF2;
  6173. volatile bool is_keyF3;
  6174. volatile bool is_keyF4;
  6175. volatile bool is_keyF5;
  6176. volatile bool is_keyF6;
  6177. volatile bool is_keyF7;
  6178. volatile bool is_keyF8;
  6179. volatile bool is_keyF9;
  6180. volatile bool is_keyF10;
  6181. volatile bool is_keyF11;
  6182. volatile bool is_keyF12;
  6183. volatile bool is_keyPAUSE;
  6184. volatile bool is_key1;
  6185. volatile bool is_key2;
  6186. volatile bool is_key3;
  6187. volatile bool is_key4;
  6188. volatile bool is_key5;
  6189. volatile bool is_key6;
  6190. volatile bool is_key7;
  6191. volatile bool is_key8;
  6192. volatile bool is_key9;
  6193. volatile bool is_key0;
  6194. volatile bool is_keyBACKSPACE;
  6195. volatile bool is_keyINSERT;
  6196. volatile bool is_keyHOME;
  6197. volatile bool is_keyPAGEUP;
  6198. volatile bool is_keyTAB;
  6199. volatile bool is_keyQ;
  6200. volatile bool is_keyW;
  6201. volatile bool is_keyE;
  6202. volatile bool is_keyR;
  6203. volatile bool is_keyT;
  6204. volatile bool is_keyY;
  6205. volatile bool is_keyU;
  6206. volatile bool is_keyI;
  6207. volatile bool is_keyO;
  6208. volatile bool is_keyP;
  6209. volatile bool is_keyDELETE;
  6210. volatile bool is_keyEND;
  6211. volatile bool is_keyPAGEDOWN;
  6212. volatile bool is_keyCAPSLOCK;
  6213. volatile bool is_keyA;
  6214. volatile bool is_keyS;
  6215. volatile bool is_keyD;
  6216. volatile bool is_keyF;
  6217. volatile bool is_keyG;
  6218. volatile bool is_keyH;
  6219. volatile bool is_keyJ;
  6220. volatile bool is_keyK;
  6221. volatile bool is_keyL;
  6222. volatile bool is_keyENTER;
  6223. volatile bool is_keySHIFTLEFT;
  6224. volatile bool is_keyZ;
  6225. volatile bool is_keyX;
  6226. volatile bool is_keyC;
  6227. volatile bool is_keyV;
  6228. volatile bool is_keyB;
  6229. volatile bool is_keyN;
  6230. volatile bool is_keyM;
  6231. volatile bool is_keySHIFTRIGHT;
  6232. volatile bool is_keyARROWUP;
  6233. volatile bool is_keyCTRLLEFT;
  6234. volatile bool is_keyAPPLEFT;
  6235. volatile bool is_keyALT;
  6236. volatile bool is_keySPACE;
  6237. volatile bool is_keyALTGR;
  6238. volatile bool is_keyAPPRIGHT;
  6239. volatile bool is_keyMENU;
  6240. volatile bool is_keyCTRLRIGHT;
  6241. volatile bool is_keyARROWLEFT;
  6242. volatile bool is_keyARROWDOWN;
  6243. volatile bool is_keyARROWRIGHT;
  6244. volatile bool is_keyPAD0;
  6245. volatile bool is_keyPAD1;
  6246. volatile bool is_keyPAD2;
  6247. volatile bool is_keyPAD3;
  6248. volatile bool is_keyPAD4;
  6249. volatile bool is_keyPAD5;
  6250. volatile bool is_keyPAD6;
  6251. volatile bool is_keyPAD7;
  6252. volatile bool is_keyPAD8;
  6253. volatile bool is_keyPAD9;
  6254. volatile bool is_keyPADADD;
  6255. volatile bool is_keyPADSUB;
  6256. volatile bool is_keyPADMUL;
  6257. volatile bool is_keyPADDIV;
  6258. //! Fullscreen state of the display
  6259. bool is_fullscreen;
  6260. float fps_fps, min, max;
  6261. unsigned long timer, fps_frames, fps_timer;
  6262. #ifdef cimgdisplay_plugin
  6263. #include cimgdisplay_plugin
  6264. #endif
  6265. #ifdef cimgdisplay_plugin1
  6266. #include cimgdisplay_plugin1
  6267. #endif
  6268. #ifdef cimgdisplay_plugin2
  6269. #include cimgdisplay_plugin2
  6270. #endif
  6271. #ifdef cimgdisplay_plugin3
  6272. #include cimgdisplay_plugin3
  6273. #endif
  6274. #ifdef cimgdisplay_plugin4
  6275. #include cimgdisplay_plugin4
  6276. #endif
  6277. #ifdef cimgdisplay_plugin5
  6278. #include cimgdisplay_plugin5
  6279. #endif
  6280. #ifdef cimgdisplay_plugin6
  6281. #include cimgdisplay_plugin6
  6282. #endif
  6283. #ifdef cimgdisplay_plugin7
  6284. #include cimgdisplay_plugin7
  6285. #endif
  6286. #ifdef cimgdisplay_plugin8
  6287. #include cimgdisplay_plugin8
  6288. #endif
  6289. //! Create an empty display window.
  6290. CImgDisplay():
  6291. width(0),height(0),normalization(0),title(0),
  6292. window_x(0),window_y(0),window_width(0),window_height(0),
  6293. mouse_x(0),mouse_y(0),button(*buttons),wheel(0),key(*keys),released_key(*released_keys),
  6294. is_closed(true),is_resized(false),is_moved(false),is_event(false),is_fullscreen(false),
  6295. min(0),max(0) {}
  6296. //! Create a display window with a specified size \p pwidth x \p height.
  6297. /** \param dimw Width of the display window.
  6298. \param dimh Height of the display window.
  6299. \param title Title of the display window.
  6300. \param normalization_type Normalization type of the display window (0=none, 1=always, 2=once).
  6301. \param fullscreen_flag : Fullscreen mode.
  6302. \param closed_flag : Initially visible mode.
  6303. A black image will be initially displayed in the display window.
  6304. **/
  6305. CImgDisplay(const unsigned int dimw, const unsigned int dimh, const char *title=0,
  6306. const unsigned int normalization_type=3,
  6307. const bool fullscreen_flag=false, const bool closed_flag=false):
  6308. width(0),height(0),normalization(0),title(0),
  6309. window_x(0),window_y(0),window_width(0),window_height(0),
  6310. mouse_x(0),mouse_y(0),button(*buttons),wheel(0),key(*keys),released_key(*released_keys),
  6311. is_closed(true),is_resized(false),is_moved(false),is_event(false),is_fullscreen(false),
  6312. min(0),max(0) {
  6313. assign(dimw,dimh,title,normalization_type,fullscreen_flag,closed_flag);
  6314. }
  6315. //! Create a display window from an image.
  6316. /** \param img : Image that will be used to create the display window.
  6317. \param title : Title of the display window
  6318. \param normalization_type : Normalization type of the display window.
  6319. \param fullscreen_flag : Fullscreen mode.
  6320. \param closed_flag : Initially visible mode.
  6321. **/
  6322. template<typename T>
  6323. CImgDisplay(const CImg<T>& img, const char *title=0,
  6324. const unsigned int normalization_type=3,
  6325. const bool fullscreen_flag=false, const bool closed_flag=false):
  6326. width(0),height(0),normalization(0),title(0),
  6327. window_x(0),window_y(0),window_width(0),window_height(0),
  6328. mouse_x(0),mouse_y(0),button(*buttons),wheel(0),key(*keys),released_key(*released_keys),
  6329. is_closed(true),is_resized(false),is_moved(false),is_event(false),is_fullscreen(false),min(0),max(0) {
  6330. assign(img,title,normalization_type,fullscreen_flag,closed_flag);
  6331. }
  6332. //! Create a display window from an image list.
  6333. /** \param list : The list of images to display.
  6334. \param title : Title of the display window
  6335. \param normalization_type : Normalization type of the display window.
  6336. \param fullscreen_flag : Fullscreen mode.
  6337. \param closed_flag : Initially visible mode.
  6338. **/
  6339. template<typename T>
  6340. CImgDisplay(const CImgList<T>& list, const char *title=0,
  6341. const unsigned int normalization_type=3,
  6342. const bool fullscreen_flag=false, const bool closed_flag=false):
  6343. width(0),height(0),normalization(0),title(0),
  6344. window_x(0),window_y(0),window_width(0),window_height(0),
  6345. mouse_x(0),mouse_y(0),button(*buttons),wheel(0),key(*keys),released_key(*released_keys),
  6346. is_closed(true),is_resized(false),is_moved(false),is_event(false),is_fullscreen(false),min(0),max(0) {
  6347. assign(list,title,normalization_type,fullscreen_flag,closed_flag);
  6348. }
  6349. //! Create a display window by copying another one.
  6350. /**
  6351. \param disp : Display window to copy.
  6352. **/
  6353. CImgDisplay(const CImgDisplay& disp):
  6354. width(0),height(0),normalization(0),title(0),
  6355. window_x(0),window_y(0),window_width(0),window_height(0),
  6356. mouse_x(0),mouse_y(0),button(*buttons),wheel(0),key(*keys),released_key(*released_keys),
  6357. is_closed(true),is_resized(false),is_moved(false),is_event(false),is_fullscreen(false),min(0),max(0) {
  6358. assign(disp);
  6359. }
  6360. //! Destructor.
  6361. ~CImgDisplay() {
  6362. assign();
  6363. }
  6364. //! Assignment operator.
  6365. CImgDisplay& operator=(const CImgDisplay& disp) {
  6366. return assign(disp);
  6367. }
  6368. //! Return a reference to an empty display.
  6369. static CImgDisplay& empty() {
  6370. static CImgDisplay _empty;
  6371. return _empty.assign();
  6372. }
  6373. //! Return true is display is empty.
  6374. bool is_empty() const {
  6375. return (!width || !height);
  6376. }
  6377. //! Return true if display is not empty.
  6378. operator bool() const {
  6379. return !is_empty();
  6380. }
  6381. //! Return display width.
  6382. int dimx() const {
  6383. return (int)width;
  6384. }
  6385. //! Return display height.
  6386. int dimy() const {
  6387. return (int)height;
  6388. }
  6389. //! Return display window width.
  6390. int window_dimx() const {
  6391. return (int)window_width;
  6392. }
  6393. //! Return display window height.
  6394. int window_dimy() const {
  6395. return (int)window_height;
  6396. }
  6397. //! Return X-coordinate of the window.
  6398. int window_posx() const {
  6399. return window_x;
  6400. }
  6401. //! Return Y-coordinate of the window.
  6402. int window_posy() const {
  6403. return window_y;
  6404. }
  6405. //! Synchronized waiting function. Same as cimg::wait().
  6406. CImgDisplay& wait(const unsigned int milliseconds) {
  6407. cimg::_sleep(milliseconds,timer);
  6408. return *this;
  6409. }
  6410. //! Wait for an event occuring on the current display.
  6411. CImgDisplay& wait() {
  6412. if (!is_empty()) wait(*this);
  6413. return *this;
  6414. }
  6415. //! Wait for any event occuring on the display \c disp1.
  6416. static void wait(CImgDisplay& disp1) {
  6417. disp1.is_event = 0;
  6418. while (!disp1.is_event) wait_all();
  6419. }
  6420. //! Wait for any event occuring either on the display \c disp1 or \c disp2.
  6421. static void wait(CImgDisplay& disp1, CImgDisplay& disp2) {
  6422. disp1.is_event = disp2.is_event = 0;
  6423. while (!disp1.is_event && !disp2.is_event) wait_all();
  6424. }
  6425. //! Wait for any event occuring either on the display \c disp1, \c disp2 or \c disp3.
  6426. static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3) {
  6427. disp1.is_event = disp2.is_event = disp3.is_event = 0;
  6428. while (!disp1.is_event && !disp2.is_event && !disp3.is_event) wait_all();
  6429. }
  6430. //! Wait for any event occuring either on the display \c disp1, \c disp2, \c disp3 or \c disp4.
  6431. static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4) {
  6432. disp1.is_event = disp2.is_event = disp3.is_event = disp4.is_event = 0;
  6433. while (!disp1.is_event && !disp2.is_event && !disp3.is_event && !disp4.is_event) wait_all();
  6434. }
  6435. //! Return the frame per second rate.
  6436. float frames_per_second() {
  6437. if (!fps_timer) fps_timer = cimg::time();
  6438. const float delta = (cimg::time()-fps_timer)/1000.0f;
  6439. ++fps_frames;
  6440. if (delta>=1) {
  6441. fps_fps = fps_frames/delta;
  6442. fps_frames = 0;
  6443. fps_timer = cimg::time();
  6444. }
  6445. return fps_fps;
  6446. }
  6447. //! Display an image list CImgList<T> into a display window.
  6448. /** First, all images of the list are appended into a single image used for visualization,
  6449. then this image is displayed in the current display window.
  6450. \param list : The list of images to display.
  6451. \param axis : The axis used to append the image for visualization. Can be 'x' (default),'y','z' or 'v'.
  6452. \param align : Defines the relative alignment of images when displaying images of different sizes.
  6453. Can be '\p c' (centered, which is the default), '\p p' (top alignment) and '\p n' (bottom aligment).
  6454. **/
  6455. template<typename T>
  6456. CImgDisplay& display(const CImgList<T>& list, const char axis='x', const char align='p') {
  6457. return display(list.get_append(axis,align));
  6458. }
  6459. //! Display an image CImg<T> into a display window.
  6460. template<typename T>
  6461. CImgDisplay& operator<<(const CImg<T>& img) {
  6462. return display(img);
  6463. }
  6464. //! Display an image CImg<T> into a display window.
  6465. template<typename T>
  6466. CImgDisplay& operator<<(const CImgList<T>& list) {
  6467. return display(list);
  6468. }
  6469. //! Resize a display window with the size of an image.
  6470. /** \param img : Input image. \p image.width and \p image.height give the new dimensions of the display window.
  6471. \param redraw : If \p true (default), the current displayed image in the display window will
  6472. be bloc-interpolated to fit the new dimensions. If \p false, a black image will be drawn in the resized window.
  6473. **/
  6474. template<typename T>
  6475. CImgDisplay& resize(const CImg<T>& img, const bool redraw=true) {
  6476. return resize(img.width,img.height,redraw);
  6477. }
  6478. //! Resize a display window using the size of the given display \p disp.
  6479. CImgDisplay& resize(const CImgDisplay& disp, const bool redraw=true) {
  6480. return resize(disp.width,disp.height,redraw);
  6481. }
  6482. //! Resize a display window in its current size.
  6483. CImgDisplay& resize(const bool redraw=true) {
  6484. resize(window_width,window_height,redraw);
  6485. return *this;
  6486. }
  6487. //! Set fullscreen mode.
  6488. CImgDisplay& fullscreen(const bool redraw=true) {
  6489. if (is_empty() || is_fullscreen) return *this;
  6490. return toggle_fullscreen(redraw);
  6491. }
  6492. //! Set normal screen mode.
  6493. CImgDisplay& normalscreen(const bool redraw=true) {
  6494. if (is_empty() || !is_fullscreen) return *this;
  6495. return toggle_fullscreen(redraw);
  6496. }
  6497. // Inner routine used for fast resizing of buffer to display size.
  6498. template<typename t, typename T>
  6499. static void _render_resize(const T *ptrs, const unsigned int ws, const unsigned int hs,
  6500. t *ptrd, const unsigned int wd, const unsigned int hd) {
  6501. unsigned int *const offx = new unsigned int[wd], *const offy = new unsigned int[hd+1], *poffx, *poffy;
  6502. float s, curr, old;
  6503. s = (float)ws/wd;
  6504. poffx = offx; curr = 0; for (unsigned int x = 0; x<wd; ++x) { old=curr; curr+=s; *(poffx++) = (unsigned int)curr-(unsigned int)old; }
  6505. s = (float)hs/hd;
  6506. poffy = offy; curr = 0; for (unsigned int y = 0; y<hd; ++y) { old=curr; curr+=s; *(poffy++) = ws*((unsigned int)curr-(unsigned int)old); }
  6507. *poffy = 0;
  6508. poffy = offy;
  6509. {for (unsigned int y = 0; y<hd; ) {
  6510. const T *ptr = ptrs;
  6511. poffx = offx;
  6512. for (unsigned int x = 0; x<wd; ++x) { *(ptrd++) = *ptr; ptr+=*(poffx++); }
  6513. ++y;
  6514. unsigned int dy=*(poffy++);
  6515. for (;!dy && y<hd; cimg_std::memcpy(ptrd, ptrd-wd, sizeof(t)*wd), ++y, ptrd+=wd, dy=*(poffy++)) {}
  6516. ptrs+=dy;
  6517. }}
  6518. delete[] offx; delete[] offy;
  6519. }
  6520. //! Clear all events of the current display.
  6521. CImgDisplay& flush() {
  6522. cimg_std::memset((void*)buttons,0,512*sizeof(unsigned int));
  6523. cimg_std::memset((void*)keys,0,512*sizeof(unsigned int));
  6524. cimg_std::memset((void*)released_keys,0,512*sizeof(unsigned int));
  6525. is_keyESC = is_keyF1 = is_keyF2 = is_keyF3 = is_keyF4 = is_keyF5 = is_keyF6 = is_keyF7 = is_keyF8 = is_keyF9 =
  6526. is_keyF10 = is_keyF11 = is_keyF12 = is_keyPAUSE = is_key1 = is_key2 = is_key3 = is_key4 = is_key5 = is_key6 =
  6527. is_key7 = is_key8 = is_key9 = is_key0 = is_keyBACKSPACE = is_keyINSERT = is_keyHOME = is_keyPAGEUP = is_keyTAB =
  6528. is_keyQ = is_keyW = is_keyE = is_keyR = is_keyT = is_keyY = is_keyU = is_keyI = is_keyO = is_keyP = is_keyDELETE =
  6529. is_keyEND = is_keyPAGEDOWN = is_keyCAPSLOCK = is_keyA = is_keyS = is_keyD = is_keyF = is_keyG = is_keyH = is_keyJ =
  6530. is_keyK = is_keyL = is_keyENTER = is_keySHIFTLEFT = is_keyZ = is_keyX = is_keyC = is_keyV = is_keyB = is_keyN =
  6531. is_keyM = is_keySHIFTRIGHT = is_keyARROWUP = is_keyCTRLLEFT = is_keyAPPLEFT = is_keyALT = is_keySPACE = is_keyALTGR = is_keyAPPRIGHT =
  6532. is_keyMENU = is_keyCTRLRIGHT = is_keyARROWLEFT = is_keyARROWDOWN = is_keyARROWRIGHT = is_keyPAD0 = is_keyPAD1 = is_keyPAD2 =
  6533. is_keyPAD3 = is_keyPAD4 = is_keyPAD5 = is_keyPAD6 = is_keyPAD7 = is_keyPAD8 = is_keyPAD9 = is_keyPADADD = is_keyPADSUB =
  6534. is_keyPADMUL = is_keyPADDIV = false;
  6535. is_resized = is_moved = is_event = false;
  6536. fps_timer = fps_frames = timer = wheel = 0;
  6537. mouse_x = mouse_y = -1;
  6538. fps_fps = 0;
  6539. return *this;
  6540. }
  6541. // Update 'is_key' fields.
  6542. void update_iskey(const unsigned int key, const bool pressed=true) {
  6543. #define _cimg_iskey_case(k) if (key==cimg::key##k) is_key##k = pressed;
  6544. _cimg_iskey_case(ESC); _cimg_iskey_case(F1); _cimg_iskey_case(F2); _cimg_iskey_case(F3);
  6545. _cimg_iskey_case(F4); _cimg_iskey_case(F5); _cimg_iskey_case(F6); _cimg_iskey_case(F7);
  6546. _cimg_iskey_case(F8); _cimg_iskey_case(F9); _cimg_iskey_case(F10); _cimg_iskey_case(F11);
  6547. _cimg_iskey_case(F12); _cimg_iskey_case(PAUSE); _cimg_iskey_case(1); _cimg_iskey_case(2);
  6548. _cimg_iskey_case(3); _cimg_iskey_case(4); _cimg_iskey_case(5); _cimg_iskey_case(6);
  6549. _cimg_iskey_case(7); _cimg_iskey_case(8); _cimg_iskey_case(9); _cimg_iskey_case(0);
  6550. _cimg_iskey_case(BACKSPACE); _cimg_iskey_case(INSERT); _cimg_iskey_case(HOME);
  6551. _cimg_iskey_case(PAGEUP); _cimg_iskey_case(TAB); _cimg_iskey_case(Q); _cimg_iskey_case(W);
  6552. _cimg_iskey_case(E); _cimg_iskey_case(R); _cimg_iskey_case(T); _cimg_iskey_case(Y);
  6553. _cimg_iskey_case(U); _cimg_iskey_case(I); _cimg_iskey_case(O); _cimg_iskey_case(P);
  6554. _cimg_iskey_case(DELETE); _cimg_iskey_case(END); _cimg_iskey_case(PAGEDOWN);
  6555. _cimg_iskey_case(CAPSLOCK); _cimg_iskey_case(A); _cimg_iskey_case(S); _cimg_iskey_case(D);
  6556. _cimg_iskey_case(F); _cimg_iskey_case(G); _cimg_iskey_case(H); _cimg_iskey_case(J);
  6557. _cimg_iskey_case(K); _cimg_iskey_case(L); _cimg_iskey_case(ENTER);
  6558. _cimg_iskey_case(SHIFTLEFT); _cimg_iskey_case(Z); _cimg_iskey_case(X); _cimg_iskey_case(C);
  6559. _cimg_iskey_case(V); _cimg_iskey_case(B); _cimg_iskey_case(N); _cimg_iskey_case(M);
  6560. _cimg_iskey_case(SHIFTRIGHT); _cimg_iskey_case(ARROWUP); _cimg_iskey_case(CTRLLEFT);
  6561. _cimg_iskey_case(APPLEFT); _cimg_iskey_case(ALT); _cimg_iskey_case(SPACE); _cimg_iskey_case(ALTGR);
  6562. _cimg_iskey_case(APPRIGHT); _cimg_iskey_case(MENU); _cimg_iskey_case(CTRLRIGHT);
  6563. _cimg_iskey_case(ARROWLEFT); _cimg_iskey_case(ARROWDOWN); _cimg_iskey_case(ARROWRIGHT);
  6564. _cimg_iskey_case(PAD0); _cimg_iskey_case(PAD1); _cimg_iskey_case(PAD2);
  6565. _cimg_iskey_case(PAD3); _cimg_iskey_case(PAD4); _cimg_iskey_case(PAD5);
  6566. _cimg_iskey_case(PAD6); _cimg_iskey_case(PAD7); _cimg_iskey_case(PAD8);
  6567. _cimg_iskey_case(PAD9); _cimg_iskey_case(PADADD); _cimg_iskey_case(PADSUB);
  6568. _cimg_iskey_case(PADMUL); _cimg_iskey_case(PADDIV);
  6569. }
  6570. //! Test if any key has been pressed.
  6571. bool is_key(const bool remove=false) {
  6572. for (unsigned int *ptrs=(unsigned int*)keys+512-1; ptrs>=keys; --ptrs) if (*ptrs) { if (remove) *ptrs = 0; return true; }
  6573. return false;
  6574. }
  6575. //! Test if a key has been pressed.
  6576. bool is_key(const unsigned int key1, const bool remove) {
  6577. for (unsigned int *ptrs=(unsigned int*)keys+512-1; ptrs>=keys; --ptrs) if (*ptrs==key1) { if (remove) *ptrs = 0; return true; }
  6578. return false;
  6579. }
  6580. //! Test if a key sequence has been typed.
  6581. bool is_key(const unsigned int key1, const unsigned int key2, const bool remove) {
  6582. const unsigned int seq[] = { key1, key2 };
  6583. return is_key(seq,2,remove);
  6584. }
  6585. //! Test if a key sequence has been typed.
  6586. bool is_key(const unsigned int key1, const unsigned int key2, const unsigned int key3, const bool remove) {
  6587. const unsigned int seq[] = { key1, key2, key3 };
  6588. return is_key(seq,3,remove);
  6589. }
  6590. //! Test if a key sequence has been typed.
  6591. bool is_key(const unsigned int key1, const unsigned int key2, const unsigned int key3,
  6592. const unsigned int key4, const bool remove) {
  6593. const unsigned int seq[] = { key1, key2, key3, key4 };
  6594. return is_key(seq,4,remove);
  6595. }
  6596. //! Test if a key sequence has been typed.
  6597. bool is_key(const unsigned int key1, const unsigned int key2, const unsigned int key3,
  6598. const unsigned int key4, const unsigned int key5, const bool remove) {
  6599. const unsigned int seq[] = { key1, key2, key3, key4, key5 };
  6600. return is_key(seq,5,remove);
  6601. }
  6602. //! Test if a key sequence has been typed.
  6603. bool is_key(const unsigned int key1, const unsigned int key2, const unsigned int key3,
  6604. const unsigned int key4, const unsigned int key5, const unsigned int key6, const bool remove) {
  6605. const unsigned int seq[] = { key1, key2, key3, key4, key5, key6 };
  6606. return is_key(seq,6,remove);
  6607. }
  6608. //! Test if a key sequence has been typed.
  6609. bool is_key(const unsigned int key1, const unsigned int key2, const unsigned int key3,
  6610. const unsigned int key4, const unsigned int key5, const unsigned int key6,
  6611. const unsigned int key7, const bool remove) {
  6612. const unsigned int seq[] = { key1, key2, key3, key4, key5, key6, key7 };
  6613. return is_key(seq,7,remove);
  6614. }
  6615. //! Test if a key sequence has been typed.
  6616. bool is_key(const unsigned int key1, const unsigned int key2, const unsigned int key3,
  6617. const unsigned int key4, const unsigned int key5, const unsigned int key6,
  6618. const unsigned int key7, const unsigned int key8, const bool remove) {
  6619. const unsigned int seq[] = { key1, key2, key3, key4, key5, key6, key7, key8 };
  6620. return is_key(seq,8,remove);
  6621. }
  6622. //! Test if a key sequence has been typed.
  6623. bool is_key(const unsigned int key1, const unsigned int key2, const unsigned int key3,
  6624. const unsigned int key4, const unsigned int key5, const unsigned int key6,
  6625. const unsigned int key7, const unsigned int key8, const unsigned int key9, const bool remove) {
  6626. const unsigned int seq[] = { key1, key2, key3, key4, key5, key6, key7, key8, key9 };
  6627. return is_key(seq,9,remove);
  6628. }
  6629. //! Test if a key sequence has been typed.
  6630. bool is_key(const unsigned int *const keyseq, const unsigned int N, const bool remove=true) {
  6631. if (keyseq && N) {
  6632. const unsigned int *const ps_end = keyseq+N-1, k = *ps_end, *const pk_end = (unsigned int*)keys+1+512-N;
  6633. for (unsigned int *pk = (unsigned int*)keys; pk<pk_end; ) {
  6634. if (*(pk++)==k) {
  6635. bool res = true;
  6636. const unsigned int *ps = ps_end, *pk2 = pk;
  6637. for (unsigned int i=1; i<N; ++i) res = (*(--ps)==*(pk2++));
  6638. if (res) {
  6639. if (remove) cimg_std::memset((void*)(pk-1),0,sizeof(unsigned int)*N);
  6640. return true;
  6641. }
  6642. }
  6643. }
  6644. }
  6645. return false;
  6646. }
  6647. // Find the good width and height of a window to display an image (internal routine).
  6648. #define cimg_fitscreen(dx,dy,dz) CImgDisplay::_fitscreen(dx,dy,dz,128,-85,false),CImgDisplay::_fitscreen(dx,dy,dz,128,-85,true)
  6649. static unsigned int _fitscreen(const unsigned int dx, const unsigned int dy=1, const unsigned int dz=1,
  6650. const int dmin=128, const int dmax=-85,const bool return_last=false) {
  6651. unsigned int nw = dx + (dz>1?dz:0), nh = dy + (dz>1?dz:0);
  6652. const unsigned int
  6653. sw = CImgDisplay::screen_dimx(), sh = CImgDisplay::screen_dimy(),
  6654. mw = dmin<0?(unsigned int)(sw*-dmin/100):(unsigned int)dmin,
  6655. mh = dmin<0?(unsigned int)(sh*-dmin/100):(unsigned int)dmin,
  6656. Mw = dmax<0?(unsigned int)(sw*-dmax/100):(unsigned int)dmax,
  6657. Mh = dmax<0?(unsigned int)(sh*-dmax/100):(unsigned int)dmax;
  6658. if (nw<mw) { nh = nh*mw/nw; nh+=(nh==0); nw = mw; }
  6659. if (nh<mh) { nw = nw*mh/nh; nw+=(nw==0); nh = mh; }
  6660. if (nw>Mw) { nh = nh*Mw/nw; nh+=(nh==0); nw = Mw; }
  6661. if (nh>Mh) { nw = nw*Mh/nh; nw+=(nw==0); nh = Mh; }
  6662. if (nw<mw) nw = mw;
  6663. if (nh<mh) nh = mh;
  6664. if (return_last) return nh;
  6665. return nw;
  6666. }
  6667. // When no display available
  6668. //---------------------------
  6669. #if cimg_display==0
  6670. //! Return the width of the screen resolution.
  6671. static int screen_dimx() {
  6672. return 0;
  6673. }
  6674. //! Return the height of the screen resolution.
  6675. static int screen_dimy() {
  6676. return 0;
  6677. }
  6678. //! Wait for a window event in any CImg window.
  6679. static void wait_all() {}
  6680. //! In-place version of the destructor.
  6681. CImgDisplay& assign() {
  6682. return *this;
  6683. }
  6684. //! In-place version of the previous constructor.
  6685. CImgDisplay& assign(const unsigned int dimw, const unsigned int dimh, const char *title=0,
  6686. const unsigned int normalization_type=3,
  6687. const bool fullscreen_flag=false, const bool closed_flag=false) {
  6688. throw CImgDisplayException("CImgDisplay() : Display has been required but is not available (cimg_display=0)");
  6689. const char* avoid_warning = title + dimw + dimh + normalization_type + (int)fullscreen_flag + (int)closed_flag;
  6690. avoid_warning = 0;
  6691. return *this;
  6692. }
  6693. //! In-place version of the previous constructor.
  6694. template<typename T>
  6695. CImgDisplay& assign(const CImg<T>& img, const char *title=0,
  6696. const unsigned int normalization_type=3,
  6697. const bool fullscreen_flag=false, const bool closed_flag=false) {
  6698. throw CImgDisplayException("CImgDisplay()::assign() : Display has been required but is not available (cimg_display=0)");
  6699. const char* avoid_warning = title + img.width + normalization_type + (int)fullscreen_flag + (int)closed_flag;
  6700. avoid_warning = 0;
  6701. return assign(0,0);
  6702. }
  6703. //! In-place version of the previous constructor.
  6704. template<typename T>
  6705. CImgDisplay& assign(const CImgList<T>& list, const char *title=0,
  6706. const unsigned int normalization_type=3,
  6707. const bool fullscreen_flag=false, const bool closed_flag=false) {
  6708. throw CImgDisplayException("CImgDisplay()::assign() : Display has been required but is not available (cimg_display=0)");
  6709. const char* avoid_warning = title + list.size + normalization_type + (int)fullscreen_flag + (int)closed_flag;
  6710. avoid_warning = 0;
  6711. return assign(0,0);
  6712. }
  6713. //! In-place version of the previous constructor.
  6714. CImgDisplay& assign(const CImgDisplay &disp) {
  6715. return assign(disp.width,disp.height);
  6716. }
  6717. //! Resize window.
  6718. CImgDisplay& resize(const int width, const int height, const bool redraw=true) {
  6719. int avoid_warning = width | height | (int)redraw;
  6720. avoid_warning = 0;
  6721. return *this;
  6722. }
  6723. //! Toggle fullscreen mode.
  6724. CImgDisplay& toggle_fullscreen(const bool redraw=true) {
  6725. bool avoid_warning = redraw;
  6726. avoid_warning = false;
  6727. return *this;
  6728. }
  6729. //! Show a closed display.
  6730. CImgDisplay& show() {
  6731. return *this;
  6732. }
  6733. //! Close a visible display.
  6734. CImgDisplay& close() {
  6735. return *this;
  6736. }
  6737. //! Move window.
  6738. CImgDisplay& move(const int posx, const int posy) {
  6739. int avoid_warning = posx | posy;
  6740. avoid_warning = 0;
  6741. return *this;
  6742. }
  6743. //! Show mouse pointer.
  6744. CImgDisplay& show_mouse() {
  6745. return *this;
  6746. }
  6747. //! Hide mouse pointer.
  6748. CImgDisplay& hide_mouse() {
  6749. return *this;
  6750. }
  6751. //! Move mouse pointer to a specific location.
  6752. CImgDisplay& set_mouse(const int posx, const int posy) {
  6753. int avoid_warning = posx | posy;
  6754. avoid_warning = 0;
  6755. return *this;
  6756. }
  6757. //! Set the window title.
  6758. CImgDisplay& set_title(const char *format, ...) {
  6759. const char *avoid_warning = format;
  6760. avoid_warning = 0;
  6761. return *this;
  6762. }
  6763. //! Display an image in a window.
  6764. template<typename T>
  6765. CImgDisplay& display(const CImg<T>& img) {
  6766. unsigned int avoid_warning = img.width;
  6767. avoid_warning = 0;
  6768. return *this;
  6769. }
  6770. //! Re-paint image content in window.
  6771. CImgDisplay& paint() {
  6772. return *this;
  6773. }
  6774. //! Render image buffer into GDI native image format.
  6775. template<typename T>
  6776. CImgDisplay& render(const CImg<T>& img) {
  6777. unsigned int avoid_warning = img.width;
  6778. avoid_warning = 0;
  6779. return *this;
  6780. }
  6781. //! Take a snapshot of the display in the specified image.
  6782. template<typename T>
  6783. const CImgDisplay& snapshot(CImg<T>& img) const {
  6784. img.assign(width,height,1,3,0);
  6785. return *this;
  6786. }
  6787. // X11-based display
  6788. //-------------------
  6789. #elif cimg_display==1
  6790. Atom wm_delete_window, wm_delete_protocol;
  6791. Window window, background_window;
  6792. Colormap colormap;
  6793. XImage *image;
  6794. void *data;
  6795. #ifdef cimg_use_xshm
  6796. XShmSegmentInfo *shminfo;
  6797. #endif
  6798. static int screen_dimx() {
  6799. int res = 0;
  6800. if (!cimg::X11attr().display) {
  6801. Display *disp = XOpenDisplay((cimg_std::getenv("DISPLAY")?cimg_std::getenv("DISPLAY"):":0.0"));
  6802. if (!disp)
  6803. throw CImgDisplayException("CImgDisplay::screen_dimx() : Cannot open X11 display.");
  6804. res = DisplayWidth(disp,DefaultScreen(disp));
  6805. XCloseDisplay(disp);
  6806. } else {
  6807. #ifdef cimg_use_xrandr
  6808. if (cimg::X11attr().resolutions && cimg::X11attr().curr_resolution)
  6809. res = cimg::X11attr().resolutions[cimg::X11attr().curr_resolution].width;
  6810. else
  6811. #endif
  6812. res = DisplayWidth(cimg::X11attr().display,DefaultScreen(cimg::X11attr().display));
  6813. }
  6814. return res;
  6815. }
  6816. static int screen_dimy() {
  6817. int res = 0;
  6818. if (!cimg::X11attr().display) {
  6819. Display *disp = XOpenDisplay((cimg_std::getenv("DISPLAY") ? cimg_std::getenv("DISPLAY") : ":0.0"));
  6820. if (!disp)
  6821. throw CImgDisplayException("CImgDisplay::screen_dimy() : Cannot open X11 display.");
  6822. res = DisplayHeight(disp,DefaultScreen(disp));
  6823. XCloseDisplay(disp);
  6824. } else {
  6825. #ifdef cimg_use_xrandr
  6826. if (cimg::X11attr().resolutions && cimg::X11attr().curr_resolution)
  6827. res = cimg::X11attr().resolutions[cimg::X11attr().curr_resolution].height;
  6828. else
  6829. #endif
  6830. res = DisplayHeight(cimg::X11attr().display,DefaultScreen(cimg::X11attr().display));
  6831. }
  6832. return res;
  6833. }
  6834. static void wait_all() {
  6835. if (cimg::X11attr().display) {
  6836. XLockDisplay(cimg::X11attr().display);
  6837. bool flag = true;
  6838. XEvent event;
  6839. while (flag) {
  6840. XNextEvent(cimg::X11attr().display, &event);
  6841. for (unsigned int i = 0; i<cimg::X11attr().nb_wins; ++i)
  6842. if (!cimg::X11attr().wins[i]->is_closed && event.xany.window==cimg::X11attr().wins[i]->window) {
  6843. cimg::X11attr().wins[i]->_handle_events(&event);
  6844. if (cimg::X11attr().wins[i]->is_event) flag = false;
  6845. }
  6846. }
  6847. XUnlockDisplay(cimg::X11attr().display);
  6848. }
  6849. }
  6850. void _handle_events(const XEvent *const pevent) {
  6851. XEvent event = *pevent;
  6852. switch (event.type) {
  6853. case ClientMessage : {
  6854. if ((int)event.xclient.message_type==(int)wm_delete_protocol &&
  6855. (int)event.xclient.data.l[0]==(int)wm_delete_window) {
  6856. XUnmapWindow(cimg::X11attr().display,window);
  6857. mouse_x = mouse_y = -1;
  6858. if (button) { cimg_std::memmove((void*)(buttons+1),(void*)buttons,512-1); button = 0; }
  6859. if (key) { cimg_std::memmove((void*)(keys+1),(void*)keys,512-1); key = 0; }
  6860. if (released_key) { cimg_std::memmove((void*)(released_keys+1),(void*)released_keys,512-1); released_key = 0; }
  6861. is_closed = is_event = true;
  6862. }
  6863. } break;
  6864. case ConfigureNotify : {
  6865. while (XCheckWindowEvent(cimg::X11attr().display,window,StructureNotifyMask,&event)) {}
  6866. const unsigned int
  6867. nw = event.xconfigure.width,
  6868. nh = event.xconfigure.height;
  6869. const int
  6870. nx = event.xconfigure.x,
  6871. ny = event.xconfigure.y;
  6872. if (nw && nh && (nw!=window_width || nh!=window_height)) {
  6873. window_width = nw;
  6874. window_height = nh;
  6875. mouse_x = mouse_y = -1;
  6876. XResizeWindow(cimg::X11attr().display,window,window_width,window_height);
  6877. is_resized = is_event = true;
  6878. }
  6879. if (nx!=window_x || ny!=window_y) {
  6880. window_x = nx;
  6881. window_y = ny;
  6882. is_moved = is_event = true;
  6883. }
  6884. } break;
  6885. case Expose : {
  6886. while (XCheckWindowEvent(cimg::X11attr().display,window,ExposureMask,&event)) {}
  6887. _paint(false);
  6888. if (is_fullscreen) {
  6889. XWindowAttributes attr;
  6890. XGetWindowAttributes(cimg::X11attr().display, window, &attr);
  6891. while (attr.map_state != IsViewable) XSync(cimg::X11attr().display, False);
  6892. XSetInputFocus(cimg::X11attr().display, window, RevertToParent, CurrentTime);
  6893. }
  6894. } break;
  6895. case ButtonPress : {
  6896. do {
  6897. mouse_x = event.xmotion.x;
  6898. mouse_y = event.xmotion.y;
  6899. if (mouse_x<0 || mouse_y<0 || mouse_x>=dimx() || mouse_y>=dimy()) mouse_x = mouse_y = -1;
  6900. switch (event.xbutton.button) {
  6901. case 1 : cimg_std::memmove((void*)(buttons+1),(void*)buttons,512-1); button|=1; is_event = true; break;
  6902. case 2 : cimg_std::memmove((void*)(buttons+1),(void*)buttons,512-1); button|=4; is_event = true; break;
  6903. case 3 : cimg_std::memmove((void*)(buttons+1),(void*)buttons,512-1); button|=2; is_event = true; break;
  6904. }
  6905. } while (XCheckWindowEvent(cimg::X11attr().display,window,ButtonPressMask,&event));
  6906. } break;
  6907. case ButtonRelease : {
  6908. do {
  6909. mouse_x = event.xmotion.x;
  6910. mouse_y = event.xmotion.y;
  6911. if (mouse_x<0 || mouse_y<0 || mouse_x>=dimx() || mouse_y>=dimy()) mouse_x = mouse_y = -1;
  6912. switch (event.xbutton.button) {
  6913. case 1 : cimg_std::memmove((void*)(buttons+1),(void*)buttons,512-1); button&=~1U; is_event = true; break;
  6914. case 2 : cimg_std::memmove((void*)(buttons+1),(void*)buttons,512-1); button&=~4U; is_event = true; break;
  6915. case 3 : cimg_std::memmove((void*)(buttons+1),(void*)buttons,512-1); button&=~2U; is_event = true; break;
  6916. case 4 : ++wheel; is_event = true; break;
  6917. case 5 : --wheel; is_event = true; break;
  6918. }
  6919. } while (XCheckWindowEvent(cimg::X11attr().display,window,ButtonReleaseMask,&event));
  6920. } break;
  6921. case KeyPress : {
  6922. char tmp;
  6923. KeySym ksym;
  6924. XLookupString(&event.xkey,&tmp,1,&ksym,0);
  6925. update_iskey((unsigned int)ksym,true);
  6926. if (key) cimg_std::memmove((void*)(keys+1),(void*)keys,512-1);
  6927. key = (unsigned int)ksym;
  6928. if (released_key) { cimg_std::memmove((void*)(released_keys+1),(void*)released_keys,512-1); released_key = 0; }
  6929. is_event = true;
  6930. } break;
  6931. case KeyRelease : {
  6932. char tmp;
  6933. KeySym ksym;
  6934. XLookupString(&event.xkey,&tmp,1,&ksym,0);
  6935. update_iskey((unsigned int)ksym,false);
  6936. if (key) { cimg_std::memmove((void*)(keys+1),(void*)keys,512-1); key = 0; }
  6937. if (released_key) cimg_std::memmove((void*)(released_keys+1),(void*)released_keys,512-1);
  6938. released_key = (unsigned int)ksym;
  6939. is_event = true;
  6940. } break;
  6941. case EnterNotify: {
  6942. while (XCheckWindowEvent(cimg::X11attr().display,window,EnterWindowMask,&event)) {}
  6943. mouse_x = event.xmotion.x;
  6944. mouse_y = event.xmotion.y;
  6945. if (mouse_x<0 || mouse_y<0 || mouse_x>=dimx() || mouse_y>=dimy()) mouse_x = mouse_y = -1;
  6946. } break;
  6947. case LeaveNotify : {
  6948. while (XCheckWindowEvent(cimg::X11attr().display,window,LeaveWindowMask,&event)) {}
  6949. mouse_x = mouse_y =-1;
  6950. is_event = true;
  6951. } break;
  6952. case MotionNotify : {
  6953. while (XCheckWindowEvent(cimg::X11attr().display,window,PointerMotionMask,&event)) {}
  6954. mouse_x = event.xmotion.x;
  6955. mouse_y = event.xmotion.y;
  6956. if (mouse_x<0 || mouse_y<0 || mouse_x>=dimx() || mouse_y>=dimy()) mouse_x = mouse_y = -1;
  6957. is_event = true;
  6958. } break;
  6959. }
  6960. }
  6961. static void* _events_thread(void *arg) {
  6962. arg = 0;
  6963. XEvent event;
  6964. pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED,0);
  6965. pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,0);
  6966. for (;;) {
  6967. XLockDisplay(cimg::X11attr().display);
  6968. bool event_flag = XCheckTypedEvent(cimg::X11attr().display, ClientMessage, &event);
  6969. if (!event_flag) event_flag = XCheckMaskEvent(cimg::X11attr().display,
  6970. ExposureMask|StructureNotifyMask|ButtonPressMask|
  6971. KeyPressMask|PointerMotionMask|EnterWindowMask|LeaveWindowMask|
  6972. ButtonReleaseMask|KeyReleaseMask,&event);
  6973. if (event_flag) {
  6974. for (unsigned int i = 0; i<cimg::X11attr().nb_wins; ++i)
  6975. if (!cimg::X11attr().wins[i]->is_closed && event.xany.window==cimg::X11attr().wins[i]->window)
  6976. cimg::X11attr().wins[i]->_handle_events(&event);
  6977. }
  6978. XUnlockDisplay(cimg::X11attr().display);
  6979. pthread_testcancel();
  6980. cimg::sleep(7);
  6981. }
  6982. return 0;
  6983. }
  6984. void _set_colormap(Colormap& colormap, const unsigned int dim) {
  6985. XColor palette[256];
  6986. switch (dim) {
  6987. case 1 : { // palette for greyscale images
  6988. for (unsigned int index = 0; index<256; ++index) {
  6989. palette[index].pixel = index;
  6990. palette[index].red = palette[index].green = palette[index].blue = (unsigned short)(index<<8);
  6991. palette[index].flags = DoRed | DoGreen | DoBlue;
  6992. }
  6993. } break;
  6994. case 2 : { // palette for RG images
  6995. for (unsigned int index = 0, r = 8; r<256; r+=16)
  6996. for (unsigned int g = 8; g<256; g+=16) {
  6997. palette[index].pixel = index;
  6998. palette[index].red = palette[index].blue = (unsigned short)(r<<8);
  6999. palette[index].green = (unsigned short)(g<<8);
  7000. palette[index++].flags = DoRed | DoGreen | DoBlue;
  7001. }
  7002. } break;
  7003. default : { // palette for RGB images
  7004. for (unsigned int index = 0, r = 16; r<256; r+=32)
  7005. for (unsigned int g = 16; g<256; g+=32)
  7006. for (unsigned int b = 32; b<256; b+=64) {
  7007. palette[index].pixel = index;
  7008. palette[index].red = (unsigned short)(r<<8);
  7009. palette[index].green = (unsigned short)(g<<8);
  7010. palette[index].blue = (unsigned short)(b<<8);
  7011. palette[index++].flags = DoRed | DoGreen | DoBlue;
  7012. }
  7013. }
  7014. }
  7015. XStoreColors(cimg::X11attr().display,colormap,palette,256);
  7016. }
  7017. void _map_window() {
  7018. XWindowAttributes attr;
  7019. XEvent event;
  7020. bool exposed = false, mapped = false;
  7021. XMapRaised(cimg::X11attr().display,window);
  7022. XSync(cimg::X11attr().display,False);
  7023. do {
  7024. XWindowEvent(cimg::X11attr().display,window,StructureNotifyMask | ExposureMask,&event);
  7025. switch (event.type) {
  7026. case MapNotify : mapped = true; break;
  7027. case Expose : exposed = true; break;
  7028. default : XSync(cimg::X11attr().display, False); cimg::sleep(10);
  7029. }
  7030. } while (!(exposed && mapped));
  7031. do {
  7032. XGetWindowAttributes(cimg::X11attr().display, window, &attr);
  7033. if (attr.map_state!=IsViewable) { XSync(cimg::X11attr().display,False); cimg::sleep(10); }
  7034. } while (attr.map_state != IsViewable);
  7035. window_x = attr.x;
  7036. window_y = attr.y;
  7037. }
  7038. void _paint(const bool wait_expose=true) {
  7039. if (!is_closed) {
  7040. if (wait_expose) {
  7041. static XEvent event;
  7042. event.xexpose.type = Expose;
  7043. event.xexpose.serial = 0;
  7044. event.xexpose.send_event = True;
  7045. event.xexpose.display = cimg::X11attr().display;
  7046. event.xexpose.window = window;
  7047. event.xexpose.x = 0;
  7048. event.xexpose.y = 0;
  7049. event.xexpose.width = dimx();
  7050. event.xexpose.height = dimy();
  7051. event.xexpose.count = 0;
  7052. XSendEvent(cimg::X11attr().display, window, False, 0, &event);
  7053. } else {
  7054. #ifdef cimg_use_xshm
  7055. if (shminfo) XShmPutImage(cimg::X11attr().display,window,*cimg::X11attr().gc,image,0,0,0,0,width,height,False);
  7056. else
  7057. #endif
  7058. XPutImage(cimg::X11attr().display,window,*cimg::X11attr().gc,image,0,0,0,0,width,height);
  7059. XSync(cimg::X11attr().display, False);
  7060. }
  7061. }
  7062. }
  7063. template<typename T>
  7064. void _resize(T foo, const unsigned int ndimx, const unsigned int ndimy, const bool redraw) {
  7065. foo = 0;
  7066. #ifdef cimg_use_xshm
  7067. if (shminfo) {
  7068. XShmSegmentInfo *nshminfo = new XShmSegmentInfo;
  7069. XImage *nimage = XShmCreateImage(cimg::X11attr().display,DefaultVisual(cimg::X11attr().display,DefaultScreen(cimg::X11attr().display)),
  7070. cimg::X11attr().nb_bits,ZPixmap,0,nshminfo,ndimx,ndimy);
  7071. if (!nimage) {
  7072. delete nshminfo;
  7073. return;
  7074. } else {
  7075. nshminfo->shmid = shmget(IPC_PRIVATE, ndimx*ndimy*sizeof(T), IPC_CREAT | 0777);
  7076. if (nshminfo->shmid==-1) {
  7077. XDestroyImage(nimage);
  7078. delete nshminfo;
  7079. return;
  7080. } else {
  7081. nshminfo->shmaddr = nimage->data = (char*)shmat(nshminfo->shmid,0,0);
  7082. if (nshminfo->shmaddr==(char*)-1) {
  7083. shmctl(nshminfo->shmid,IPC_RMID,0);
  7084. XDestroyImage(nimage);
  7085. delete nshminfo;
  7086. return;
  7087. } else {
  7088. nshminfo->readOnly = False;
  7089. cimg::X11attr().shm_enabled = true;
  7090. XErrorHandler oldXErrorHandler = XSetErrorHandler(_assign_xshm);
  7091. XShmAttach(cimg::X11attr().display, nshminfo);
  7092. XSync(cimg::X11attr().display, False);
  7093. XSetErrorHandler(oldXErrorHandler);
  7094. if (!cimg::X11attr().shm_enabled) {
  7095. shmdt(nshminfo->shmaddr);
  7096. shmctl(nshminfo->shmid,IPC_RMID,0);
  7097. XDestroyImage(nimage);
  7098. delete nshminfo;
  7099. return;
  7100. } else {
  7101. T *const ndata = (T*)nimage->data;
  7102. if (redraw) _render_resize((T*)data,width,height,ndata,ndimx,ndimy);
  7103. else cimg_std::memset(ndata,0,sizeof(T)*ndimx*ndimy);
  7104. XShmDetach(cimg::X11attr().display, shminfo);
  7105. XDestroyImage(image);
  7106. shmdt(shminfo->shmaddr);
  7107. shmctl(shminfo->shmid,IPC_RMID,0);
  7108. delete shminfo;
  7109. shminfo = nshminfo;
  7110. image = nimage;
  7111. data = (void*)ndata;
  7112. }
  7113. }
  7114. }
  7115. }
  7116. } else
  7117. #endif
  7118. {
  7119. T *ndata = (T*)cimg_std::malloc(ndimx*ndimy*sizeof(T));
  7120. if (redraw) _render_resize((T*)data,width,height,ndata,ndimx,ndimy);
  7121. else cimg_std::memset(ndata,0,sizeof(T)*ndimx*ndimy);
  7122. data = (void*)ndata;
  7123. XDestroyImage(image);
  7124. image = XCreateImage(cimg::X11attr().display,DefaultVisual(cimg::X11attr().display,DefaultScreen(cimg::X11attr().display)),
  7125. cimg::X11attr().nb_bits,ZPixmap,0,(char*)data,ndimx,ndimy,8,0);
  7126. }
  7127. }
  7128. void _init_fullscreen() {
  7129. background_window = 0;
  7130. if (is_fullscreen && !is_closed) {
  7131. #ifdef cimg_use_xrandr
  7132. int foo;
  7133. if (XRRQueryExtension(cimg::X11attr().display,&foo,&foo)) {
  7134. XRRRotations(cimg::X11attr().display, DefaultScreen(cimg::X11attr().display), &cimg::X11attr().curr_rotation);
  7135. if (!cimg::X11attr().resolutions) {
  7136. cimg::X11attr().resolutions = XRRSizes(cimg::X11attr().display,DefaultScreen(cimg::X11attr().display),&foo);
  7137. cimg::X11attr().nb_resolutions = (unsigned int)foo;
  7138. }
  7139. if (cimg::X11attr().resolutions) {
  7140. cimg::X11attr().curr_resolution = 0;
  7141. for (unsigned int i = 0; i<cimg::X11attr().nb_resolutions; ++i) {
  7142. const unsigned int
  7143. nw = (unsigned int)(cimg::X11attr().resolutions[i].width),
  7144. nh = (unsigned int)(cimg::X11attr().resolutions[i].height);
  7145. if (nw>=width && nh>=height &&
  7146. nw<=(unsigned int)(cimg::X11attr().resolutions[cimg::X11attr().curr_resolution].width) &&
  7147. nh<=(unsigned int)(cimg::X11attr().resolutions[cimg::X11attr().curr_resolution].height))
  7148. cimg::X11attr().curr_resolution = i;
  7149. }
  7150. if (cimg::X11attr().curr_resolution>0) {
  7151. XRRScreenConfiguration *config = XRRGetScreenInfo(cimg::X11attr().display, DefaultRootWindow(cimg::X11attr().display));
  7152. XRRSetScreenConfig(cimg::X11attr().display, config, DefaultRootWindow(cimg::X11attr().display),
  7153. cimg::X11attr().curr_resolution, cimg::X11attr().curr_rotation, CurrentTime);
  7154. XRRFreeScreenConfigInfo(config);
  7155. XSync(cimg::X11attr().display, False);
  7156. }
  7157. }
  7158. }
  7159. if (!cimg::X11attr().resolutions)
  7160. cimg::warn("CImgDisplay::_create_window() : Xrandr extension is not supported by the X server.");
  7161. #endif
  7162. const unsigned int sx = screen_dimx(), sy = screen_dimy();
  7163. XSetWindowAttributes winattr;
  7164. winattr.override_redirect = True;
  7165. if (sx!=width || sy!=height) {
  7166. background_window = XCreateWindow(cimg::X11attr().display,
  7167. RootWindow(cimg::X11attr().display,DefaultScreen(cimg::X11attr().display)),0,0,
  7168. sx,sy,0,0,InputOutput,CopyFromParent,CWOverrideRedirect,&winattr);
  7169. const unsigned int bufsize = sx*sy*(cimg::X11attr().nb_bits==8?1:(cimg::X11attr().nb_bits==16?2:4));
  7170. void *background_data = cimg_std::malloc(bufsize);
  7171. cimg_std::memset(background_data,0,bufsize);
  7172. XImage *background_image = XCreateImage(cimg::X11attr().display,DefaultVisual(cimg::X11attr().display,DefaultScreen(cimg::X11attr().display)),
  7173. cimg::X11attr().nb_bits,ZPixmap,0,(char*)background_data,sx,sy,8,0);
  7174. XEvent event;
  7175. XSelectInput(cimg::X11attr().display,background_window,StructureNotifyMask);
  7176. XMapRaised(cimg::X11attr().display,background_window);
  7177. do XWindowEvent(cimg::X11attr().display,background_window,StructureNotifyMask,&event);
  7178. while (event.type!=MapNotify);
  7179. #ifdef cimg_use_xshm
  7180. if (shminfo) XShmPutImage(cimg::X11attr().display,background_window,*cimg::X11attr().gc,background_image,0,0,0,0,sx,sy,False);
  7181. else
  7182. #endif
  7183. XPutImage(cimg::X11attr().display,background_window,*cimg::X11attr().gc,background_image,0,0,0,0,sx,sy);
  7184. XWindowAttributes attr;
  7185. XGetWindowAttributes(cimg::X11attr().display, background_window, &attr);
  7186. while (attr.map_state != IsViewable) XSync(cimg::X11attr().display, False);
  7187. XDestroyImage(background_image);
  7188. }
  7189. }
  7190. }
  7191. void _desinit_fullscreen() {
  7192. if (is_fullscreen) {
  7193. XUngrabKeyboard(cimg::X11attr().display,CurrentTime);
  7194. #ifdef cimg_use_xrandr
  7195. if (cimg::X11attr().resolutions && cimg::X11attr().curr_resolution) {
  7196. XRRScreenConfiguration *config = XRRGetScreenInfo(cimg::X11attr().display, DefaultRootWindow(cimg::X11attr().display));
  7197. XRRSetScreenConfig(cimg::X11attr().display, config, DefaultRootWindow(cimg::X11attr().display),
  7198. 0, cimg::X11attr().curr_rotation, CurrentTime);
  7199. XRRFreeScreenConfigInfo(config);
  7200. XSync(cimg::X11attr().display, False);
  7201. cimg::X11attr().curr_resolution = 0;
  7202. }
  7203. #endif
  7204. if (background_window) XDestroyWindow(cimg::X11attr().display,background_window);
  7205. background_window = 0;
  7206. is_fullscreen = false;
  7207. }
  7208. }
  7209. static int _assign_xshm(Display *dpy, XErrorEvent *error) {
  7210. dpy = 0; error = 0;
  7211. cimg::X11attr().shm_enabled = false;
  7212. return 0;
  7213. }
  7214. void _assign(const unsigned int dimw, const unsigned int dimh, const char *const ptitle=0,
  7215. const unsigned int normalization_type=3,
  7216. const bool fullscreen_flag=false, const bool closed_flag=false) {
  7217. // Allocate space for window title
  7218. const char *const nptitle = ptitle?ptitle:"";
  7219. const unsigned int s = cimg_std::strlen(nptitle) + 1;
  7220. char *tmp_title = s?new char[s]:0;
  7221. if (s) cimg_std::memcpy(tmp_title,nptitle,s*sizeof(char));
  7222. // Destroy previous display window if existing
  7223. if (!is_empty()) assign();
  7224. // Open X11 display if necessary.
  7225. if (!cimg::X11attr().display) {
  7226. static bool xinit_threads = false;
  7227. if (!xinit_threads) { XInitThreads(); xinit_threads = true; }
  7228. cimg::X11attr().nb_wins = 0;
  7229. cimg::X11attr().display = XOpenDisplay((cimg_std::getenv("DISPLAY")?cimg_std::getenv("DISPLAY"):":0.0"));
  7230. if (!cimg::X11attr().display)
  7231. throw CImgDisplayException("CImgDisplay::_create_window() : Cannot open X11 display");
  7232. cimg::X11attr().nb_bits = DefaultDepth(cimg::X11attr().display, DefaultScreen(cimg::X11attr().display));
  7233. if (cimg::X11attr().nb_bits!=8 && cimg::X11attr().nb_bits!=16 && cimg::X11attr().nb_bits!=24 && cimg::X11attr().nb_bits!=32)
  7234. throw CImgDisplayException("CImgDisplay::_create_window() : %u bits mode is not supported "
  7235. "(only 8, 16, 24 and 32 bits modes are supported)",cimg::X11attr().nb_bits);
  7236. cimg::X11attr().gc = new GC;
  7237. *cimg::X11attr().gc = DefaultGC(cimg::X11attr().display,DefaultScreen(cimg::X11attr().display));
  7238. Visual *visual = DefaultVisual(cimg::X11attr().display,DefaultScreen(cimg::X11attr().display));
  7239. XVisualInfo vtemplate;
  7240. vtemplate.visualid = XVisualIDFromVisual(visual);
  7241. int nb_visuals;
  7242. XVisualInfo *vinfo = XGetVisualInfo(cimg::X11attr().display,VisualIDMask,&vtemplate,&nb_visuals);
  7243. if (vinfo && vinfo->red_mask<vinfo->blue_mask) cimg::X11attr().blue_first = true;
  7244. cimg::X11attr().byte_order = ImageByteOrder(cimg::X11attr().display);
  7245. XFree(vinfo);
  7246. XLockDisplay(cimg::X11attr().display);
  7247. cimg::X11attr().event_thread = new pthread_t;
  7248. pthread_create(cimg::X11attr().event_thread,0,_events_thread,0);
  7249. } else XLockDisplay(cimg::X11attr().display);
  7250. // Set display variables
  7251. width = cimg::min(dimw,(unsigned int)screen_dimx());
  7252. height = cimg::min(dimh,(unsigned int)screen_dimy());
  7253. normalization = normalization_type<4?normalization_type:3;
  7254. is_fullscreen = fullscreen_flag;
  7255. window_x = window_y = 0;
  7256. is_closed = closed_flag;
  7257. title = tmp_title;
  7258. flush();
  7259. // Create X11 window and palette (if 8bits display)
  7260. if (is_fullscreen) {
  7261. if (!is_closed) _init_fullscreen();
  7262. const unsigned int sx = screen_dimx(), sy = screen_dimy();
  7263. XSetWindowAttributes winattr;
  7264. winattr.override_redirect = True;
  7265. window = XCreateWindow(cimg::X11attr().display,
  7266. RootWindow(cimg::X11attr().display,DefaultScreen(cimg::X11attr().display)),
  7267. (sx-width)/2,(sy-height)/2,
  7268. width,height,0,0,InputOutput,CopyFromParent,CWOverrideRedirect,&winattr);
  7269. } else
  7270. window = XCreateSimpleWindow(cimg::X11attr().display,
  7271. RootWindow(cimg::X11attr().display,DefaultScreen(cimg::X11attr().display)),
  7272. 0,0,width,height,2,0,0x0L);
  7273. XStoreName(cimg::X11attr().display,window,title?title:" ");
  7274. if (cimg::X11attr().nb_bits==8) {
  7275. colormap = XCreateColormap(cimg::X11attr().display,window,DefaultVisual(cimg::X11attr().display,
  7276. DefaultScreen(cimg::X11attr().display)),AllocAll);
  7277. _set_colormap(colormap,3);
  7278. XSetWindowColormap(cimg::X11attr().display,window,colormap);
  7279. }
  7280. window_width = width;
  7281. window_height = height;
  7282. // Create XImage
  7283. const unsigned int bufsize = width*height*(cimg::X11attr().nb_bits==8?1:(cimg::X11attr().nb_bits==16?2:4));
  7284. #ifdef cimg_use_xshm
  7285. shminfo = 0;
  7286. if (XShmQueryExtension(cimg::X11attr().display)) {
  7287. shminfo = new XShmSegmentInfo;
  7288. image = XShmCreateImage(cimg::X11attr().display,DefaultVisual(cimg::X11attr().display,DefaultScreen(cimg::X11attr().display)),
  7289. cimg::X11attr().nb_bits,ZPixmap,0,shminfo,width,height);
  7290. if (!image) {
  7291. delete shminfo;
  7292. shminfo = 0;
  7293. } else {
  7294. shminfo->shmid = shmget(IPC_PRIVATE, bufsize, IPC_CREAT | 0777);
  7295. if (shminfo->shmid==-1) {
  7296. XDestroyImage(image);
  7297. delete shminfo;
  7298. shminfo = 0;
  7299. } else {
  7300. shminfo->shmaddr = image->data = (char*)(data = shmat(shminfo->shmid,0,0));
  7301. if (shminfo->shmaddr==(char*)-1) {
  7302. shmctl(shminfo->shmid,IPC_RMID,0);
  7303. XDestroyImage(image);
  7304. delete shminfo;
  7305. shminfo = 0;
  7306. } else {
  7307. shminfo->readOnly = False;
  7308. cimg::X11attr().shm_enabled = true;
  7309. XErrorHandler oldXErrorHandler = XSetErrorHandler(_assign_xshm);
  7310. XShmAttach(cimg::X11attr().display, shminfo);
  7311. XSync(cimg::X11attr().display, False);
  7312. XSetErrorHandler(oldXErrorHandler);
  7313. if (!cimg::X11attr().shm_enabled) {
  7314. shmdt(shminfo->shmaddr);
  7315. shmctl(shminfo->shmid,IPC_RMID,0);
  7316. XDestroyImage(image);
  7317. delete shminfo;
  7318. shminfo = 0;
  7319. }
  7320. }
  7321. }
  7322. }
  7323. }
  7324. if (!shminfo)
  7325. #endif
  7326. {
  7327. data = cimg_std::malloc(bufsize);
  7328. image = XCreateImage(cimg::X11attr().display,DefaultVisual(cimg::X11attr().display,DefaultScreen(cimg::X11attr().display)),
  7329. cimg::X11attr().nb_bits,ZPixmap,0,(char*)data,width,height,8,0);
  7330. }
  7331. wm_delete_window = XInternAtom(cimg::X11attr().display, "WM_DELETE_WINDOW", False);
  7332. wm_delete_protocol = XInternAtom(cimg::X11attr().display, "WM_PROTOCOLS", False);
  7333. XSetWMProtocols(cimg::X11attr().display, window, &wm_delete_window, 1);
  7334. XSelectInput(cimg::X11attr().display,window,
  7335. ExposureMask | StructureNotifyMask | ButtonPressMask | KeyPressMask | PointerMotionMask |
  7336. EnterWindowMask | LeaveWindowMask | ButtonReleaseMask | KeyReleaseMask);
  7337. if (is_fullscreen) XGrabKeyboard(cimg::X11attr().display, window, True, GrabModeAsync, GrabModeAsync, CurrentTime);
  7338. cimg::X11attr().wins[cimg::X11attr().nb_wins++]=this;
  7339. if (!is_closed) _map_window(); else { window_x = window_y = cimg::type<int>::min(); }
  7340. XUnlockDisplay(cimg::X11attr().display);
  7341. }
  7342. CImgDisplay& assign() {
  7343. if (is_empty()) return *this;
  7344. XLockDisplay(cimg::X11attr().display);
  7345. // Remove display window from event thread list.
  7346. unsigned int i;
  7347. for (i = 0; i<cimg::X11attr().nb_wins && cimg::X11attr().wins[i]!=this; ++i) {}
  7348. for (; i<cimg::X11attr().nb_wins-1; ++i) cimg::X11attr().wins[i] = cimg::X11attr().wins[i+1];
  7349. --cimg::X11attr().nb_wins;
  7350. // Destroy window, image, colormap and title.
  7351. if (is_fullscreen && !is_closed) _desinit_fullscreen();
  7352. XDestroyWindow(cimg::X11attr().display,window);
  7353. window = 0;
  7354. #ifdef cimg_use_xshm
  7355. if (shminfo) {
  7356. XShmDetach(cimg::X11attr().display, shminfo);
  7357. XDestroyImage(image);
  7358. shmdt(shminfo->shmaddr);
  7359. shmctl(shminfo->shmid,IPC_RMID,0);
  7360. delete shminfo;
  7361. shminfo = 0;
  7362. } else
  7363. #endif
  7364. XDestroyImage(image);
  7365. data = 0; image = 0;
  7366. if (cimg::X11attr().nb_bits==8) XFreeColormap(cimg::X11attr().display,colormap);
  7367. colormap = 0;
  7368. XSync(cimg::X11attr().display, False);
  7369. // Reset display variables
  7370. if (title) delete[] title;
  7371. width = height = normalization = window_width = window_height = 0;
  7372. window_x = window_y = 0;
  7373. is_fullscreen = false;
  7374. is_closed = true;
  7375. min = max = 0;
  7376. title = 0;
  7377. flush();
  7378. // End event thread and close display if necessary
  7379. XUnlockDisplay(cimg::X11attr().display);
  7380. /* The code below was used to close the X11 display when not used anymore,
  7381. unfortunately, since the latest Xorg versions, it randomely hangs, so
  7382. I prefer to remove it. A fix would be needed anyway.
  7383. if (!cimg::X11attr().nb_wins) {
  7384. // Kill event thread
  7385. pthread_cancel(*cimg::X11attr().event_thread);
  7386. XUnlockDisplay(cimg::X11attr().display);
  7387. pthread_join(*cimg::X11attr().event_thread,0);
  7388. delete cimg::X11attr().event_thread;
  7389. cimg::X11attr().event_thread = 0;
  7390. XCloseDisplay(cimg::X11attr().display);
  7391. cimg::X11attr().display = 0;
  7392. delete cimg::X11attr().gc;
  7393. cimg::X11attr().gc = 0;
  7394. } else XUnlockDisplay(cimg::X11attr().display);
  7395. */
  7396. return *this;
  7397. }
  7398. CImgDisplay& assign(const unsigned int dimw, const unsigned int dimh, const char *title=0,
  7399. const unsigned int normalization_type=3,
  7400. const bool fullscreen_flag=false, const bool closed_flag=false) {
  7401. if (!dimw || !dimh) return assign();
  7402. _assign(dimw,dimh,title,normalization_type,fullscreen_flag,closed_flag);
  7403. min = max = 0;
  7404. cimg_std::memset(data,0,(cimg::X11attr().nb_bits==8?sizeof(unsigned char):
  7405. (cimg::X11attr().nb_bits==16?sizeof(unsigned short):sizeof(unsigned int)))*width*height);
  7406. return paint();
  7407. }
  7408. template<typename T>
  7409. CImgDisplay& assign(const CImg<T>& img, const char *title=0,
  7410. const unsigned int normalization_type=3,
  7411. const bool fullscreen_flag=false, const bool closed_flag=false) {
  7412. if (!img) return assign();